pax_global_header00006660000000000000000000000064136411105010014502gustar00rootroot0000000000000052 comment=cc14c36327e1bdd228a67b7cd89f7709376d5fbe altair-4.1.0/000077500000000000000000000000001364111050100127605ustar00rootroot00000000000000altair-4.1.0/.github/000077500000000000000000000000001364111050100143205ustar00rootroot00000000000000altair-4.1.0/.github/workflows/000077500000000000000000000000001364111050100163555ustar00rootroot00000000000000altair-4.1.0/.github/workflows/build.yml000066400000000000000000000014741364111050100202050ustar00rootroot00000000000000name: build on: [push, pull_request] jobs: build: runs-on: ubuntu-latest strategy: matrix: python-version: [ '3.6', '3.7', '3.8' ] name: Python ${{ matrix.python-version }} steps: - uses: actions/checkout@v1 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v1 with: python-version: ${{ matrix.python-version }} - name: Set Up Chromedriver run: | sudo apt-get update sudo apt-get --only-upgrade install google-chrome-stable sudo apt-get -yqq install chromium-chromedriver - name: Install dependencies run: | python -m pip install --upgrade pip pip install .[dev] pip install altair_saver - name: Test with pytest run: | pytest --doctest-modules altair altair-4.1.0/.github/workflows/docbuild.yml000066400000000000000000000011631364111050100206660ustar00rootroot00000000000000name: docbuild on: [push, pull_request] jobs: build: runs-on: ubuntu-latest strategy: matrix: build-type: [ 'html', 'doctest' ] name: ${{ matrix.build-type }} steps: - uses: actions/checkout@v1 - name: Set up Python 3.8 uses: actions/setup-python@v1 with: python-version: 3.8 - name: Install dependencies run: | python -m pip install --upgrade pip pip install .[dev] pip install altair_saver pip install -r doc/requirements.txt - name: Run docbuild run: | cd doc && make ${{ matrix.build-type }} altair-4.1.0/.github/workflows/lint.yml000066400000000000000000000007071364111050100200520ustar00rootroot00000000000000name: lint on: [push, pull_request] jobs: build: runs-on: ubuntu-latest name: black-flake8 steps: - uses: actions/checkout@v1 - name: Set up Python 3.8 uses: actions/setup-python@v1 with: python-version: 3.8 - name: Check formatting with black run: | pip install black black --check . - name: Lint with flake8 run: | pip install flake8 flake8 . --statistics altair-4.1.0/.gitignore000066400000000000000000000015021364111050100147460ustar00rootroot00000000000000# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] # C extensions *.so # Distribution / packaging .Python env/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ *.egg-info/ .installed.cfg *.egg # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *,cover # Translations *.mo *.pot # Django stuff: *.log # Sphinx documentation docs/_build/ # PyBuilder target/ # emacs backups *~ \#*\# .ipynb_checkpoints .idea/* tools/_build Untitled*.ipynb .mypy* .pytest_cache *.DS_Store # VSCode .vscodealtair-4.1.0/.travis.yml000066400000000000000000000005541364111050100150750ustar00rootroot00000000000000language: python cache: pip matrix: include: - python: 3.6 - python: 3.7 - python: 3.8 env: global: - TEST_DIR=/tmp/_altair/ before_install: - pip install pip --upgrade; - pip install -U pytest; install: - pip install -e .[dev]; script: - mkdir -p $TEST_DIR - cd $TEST_DIR && python -m pytest --pyargs --doctest-modules altair; altair-4.1.0/CONTRIBUTING.md000066400000000000000000000162061364111050100152160ustar00rootroot00000000000000# Feedback and Contribution We welcome any input, feedback, bug reports, and contributions via [Altair's GitHub Repository](http://github.com/altair-viz/altair/). In particular, we welcome companion efforts from other visualization libraries to render the Vega-Lite specifications output by Altair. We see this portion of the effort as much bigger than Altair itself: the Vega and Vega-Lite specifications are perhaps the best existing candidates for a principled *lingua franca* of data visualization. We are also seeking contributions of additional Jupyter notebook-based examples in our separate GitHub repository: https://github.com/altair-viz/altair_notebooks. The altair users mailing list can be found at https://groups.google.com/forum/#!forum/altair-viz. If you are working on Altair, you can talk to other developers in the `#altair` channel of the [Vega slack](https://bit.ly/join-vega-slack). ## How To Contribute Code to Alatir ### Setting Up Your Environment Install the latest version of Altair locally using ``` $ pip install git+https://github.com/altair-viz/altair/ ``` Next step is to fork the repository on GitHub and clone the fork to you local machine. For more details on forking see the [GitHub Documentation](https://help.github.com/en/articles/fork-a-repo). ``` $ git clone https://github.com/YOUR-USERNAME/altair.git ``` You can have a single clone of the repository that points to both your fork and the main package repository. These pointers to GitHub are called "remotes" . On your local clone you should run: ``` $ git remote add upstream https://github.com/altair-viz/altair.git $ git checkout master $ git pull upstream master ``` And then you'll have all the updates in the master branch of your local fork. Note that git will complain if you've committed changes to your local master branch that are not on upstream (this is one reason it's good practice to **never** work directly on your master branch). ### Creating a Branch Once your local environment is up-to-date, you can create a new git branch which will contain your contribution: ``` $ git checkout -b ``` With this branch checked-out, make the desired changes to the package. Note that Altair code uses the [black](https://black.readthedocs.io/) code formatter, which you can apply to your modifications by installing and running black on the local directory: ``` $ pip install black $ black . ``` When you are happy with your changes, you can commit them to your branch by runing ``` $ git add $ git commit -m "Some descriptive message about your change" $ git push origin ``` Finally you will need to submit a pull request (PR) on GitHub asking to merge your example branch into altair master. For details on creating a PR see GitHub documentation [Creating a pull request](https://help.github.com/en/articles/creating-a-pull-request). You can add more details about your example in the PR such as motivation for the example or why you thought it would be a good addition. You will get feed back in the PR discussion if anything needs to be changed. To make changes continue to push commits made in your local example branch to origin and they will be automatically shown in the PR. Hopefully your PR will be answered in a timely manner and your contribution will help others in the future. ### Testing your Changes When you submit a pull request, Altair's continuous integration test suite will run a number of tests to validate the correctness of your code. It can be helpful when debugging to run those tests locally; to do this first install Altair's development requirements: ``` $ pip install -r requirements_dev.txt ``` and then run the test suite with: ``` $ make test ``` ## Adding Examples We are always interested in new examples contributed from the community. These could be everything from simple one-panel scatter and line plots, to more complicated layered or stacked plots, to more advanced interactive features. Before submitting a new example check the [Altair Example Gallery](https://altair-viz.github.io/gallery/index.html) to make sure that your idea has not already been implemented. Once you have an example you would like to add there are a few guide lines to follow. Every example should: - be saved as a stand alone script in the `altair/examples/` directory. - have a descriptive docstring, which will eventually be extracted for the documentation website. - contain a category tag. - define a chart variable with the main chart object (This will be used both in the unit tests to confirm that the example executes properly, and also eventually used to display the visualization on the documentation website). - not make any external calls to download data within the script (i.e. don't use urllib). You can define your data directly within the example file, generate your data using pandas and numpy, or you can use data available in the `vega_datasets` package. The easiest way to get started would be to adapt examples from the [Vega-Lite example gallery](https://vega.github.io/vega-lite/examples/) which are missing in the altair gallery. Or you can feel free to be creative and build your own visualizations. Often it is convenient to draft an example outside of the main repository, such as [Google Colab](https://colab.research.google.com/), to avoid difficulties when working with git. Once you have an example you would like to add, follow the same contribution procedure outlined above. Some additional notes: - all examples should be in their own file in the `altair/examples` directory, and the format and style of new contributions should generally match that of existing examples. - The file docstring will be rendered into HTML via [reStructuredText](http://docutils.sourceforge.net/rst.html), so use that format for any hyperlinks or text styling. In particular, be sure you include a title in the docstring underlined with `---`, and be sure that the size of the underline exactly matches the size of the title text. - If your example fits into a chart type but involves significant configuration it should be in the `case studies` category. If your example doesn't fit well into any category then it can be included in the `other charts` category. - For consistency all data used for a visualization should be assigned to the variable `source`. Then `source` is passed to the `alt.Chart` object. See other examples for guidance. - Example code should not require downloading external datasets. We suggest using the `vega_datasets` package if possible. If you are using the `vega_datasets` package there are multiple ways to refer to a data source. If the dataset you would like to use is included in local installation (`vega_datasets.local_data.list_datasets()`) then the data can be referenced directly, such as `source = data.iris()`. If the data is not included then it should be referenced by URL, such as `source = data.movies.url`. This is to ensure that Altair's automated test suite does not depend on availability of external HTTP resources. Note that examples shown on the [altair website](https://altair-viz.github.io/) are only updated when a new version is released so your new example might not show up there for a while. altair-4.1.0/LICENSE000066400000000000000000000027351364111050100137740ustar00rootroot00000000000000Copyright (c) 2015, Brian E. Granger and Jake Vanderplas All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of altair 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. altair-4.1.0/MANIFEST.in000066400000000000000000000002531364111050100145160ustar00rootroot00000000000000include *.md include Makefile include LICENSE include CHANGES.md include requirements.txt include requirements_dev.txt recursive-include altair *.py *.json *.ipynb *.html altair-4.1.0/Makefile000066400000000000000000000005271364111050100144240ustar00rootroot00000000000000all: install install: python setup.py install test : black . flake8 . --statistics python -m pytest --pyargs --doctest-modules altair test-coverage: python -m pytest --pyargs --doctest-modules --cov=altair --cov-report term altair test-coverage-html: python -m pytest --pyargs --doctest-modules --cov=altair --cov-report html altair altair-4.1.0/NOTES_FOR_MAINTAINERS.md000066400000000000000000000042511364111050100165340ustar00rootroot00000000000000# Notes for Maintainers of Altair ## Auto-generating the Python code The core Python API for Altair can be found in the following locations: - ``altair/vegalite/v2/schema/`` - ``altair/vegalite/v1/schema/`` - ``altair/vega/v3/schema/`` - ``altair/vega/v2/schema/`` All the files within these directories are created automatically by running the following script from the root of the repository: ```bash $ python tools/generate_schema_wrapper.py ``` This script does a couple things: - downloads the appropriate schema files from the specified vega and vega-lite release versions & copies the JSON file to the appropriate ``schema`` directory - generates basic low-level schemapi wrappers from the definitions within the schema: this is put in the ``schema/core.py`` file - generates a second layer of higher level wrappers for some vega-lite functionality; this is put in ``schema/channels.py`` and ``schema/mixins.py`` The script output is designed to be deterministic; if vega/vega-lite versions are not changed, then running the script should overwrite the schema wrappers with identical copies. ## Updating the Vega & Vega-Lite versions The vega & vega-lite versions for the Python code can be updated by manually changing the ``SCHEMA_VERSION`` definition within ``tools/generate_schema_wrapper.py``, and then re-running the script. This will update all of the automatically-generated files in the ``schema`` directory for each version, but please note that it will *not* update other pieces (for example, the core of the Altair API, including methods and doc strings within ``altair/vegalite/v2/api.py``. These additional methods have fairly good test coverage, so running the test suite should identify any inconsistencies: ``` $ make test ``` Generally, minor version updates (e.g. Vega-Lite 2.3->2.4) have been relatively painless, maybe requiring the addition of a few chart methods or modification of some docstrings. Major version updates (e.g. Vega-Lite 1.X->2.X) have required substantial rewrites, because the internal structure of the schema changed appreciably. ## Releasing the Package To cut a new release of Altair, follow the steps outlined in [RELEASING.md](RELEASING.md).altair-4.1.0/README.md000066400000000000000000000276761364111050100142610ustar00rootroot00000000000000# Altair [![build status](http://img.shields.io/travis/altair-viz/altair/master.svg?style=flat)](https://travis-ci.org/altair-viz/altair) [![github actions](https://github.com/altair-viz/altair/workflows/build/badge.svg)](https://github.com/altair-viz/altair/actions?query=workflow%3Abuild) [![code style black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![JOSS Paper](http://joss.theoj.org/papers/10.21105/joss.01057/status.svg)](http://joss.theoj.org/papers/10.21105/joss.01057) [![PyPI - Downloads](https://img.shields.io/pypi/dm/altair)](https://pypi.org/project/altair) [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/altair-viz/altair_notebooks/master?urlpath=lab/tree/notebooks/Index.ipynb) [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/altair-viz/altair_notebooks/blob/master/notebooks/Index.ipynb) [http://altair-viz.github.io](http://altair-viz.github.io) **Altair** is a declarative statistical visualization library for Python. With Altair, you can spend more time understanding your data and its meaning. Altair's API is simple, friendly and consistent and built on top of the powerful [Vega-Lite](https://github.com/vega/vega-lite) JSON specification. This elegant simplicity produces beautiful and effective visualizations with a minimal amount of code. *Altair is developed by [Jake Vanderplas](https://github.com/jakevdp) and [Brian Granger](https://github.com/ellisonbg) in close collaboration with the [UW Interactive Data Lab](http://idl.cs.washington.edu/).* ## Altair Documentation See [Altair's Documentation Site](http://altair-viz.github.io), as well as Altair's [Tutorial Notebooks](http://github.com/altair-viz/altair_notebooks). ## Example Here is an example using Altair to quickly visualize and display a dataset with the native Vega-Lite renderer in the JupyterLab: ```python import altair as alt # load a simple dataset as a pandas DataFrame from vega_datasets import data cars = data.cars() alt.Chart(cars).mark_point().encode( x='Horsepower', y='Miles_per_Gallon', color='Origin', ) ``` ![Altair Visualization](https://raw.githubusercontent.com/altair-viz/altair/master/images/cars.png) One of the unique features of Altair, inherited from Vega-Lite, is a declarative grammar of not just visualization, but _interaction_. With a few modifications to the example above we can create a linked histogram that is filtered based on a selection of the scatter plot. ```python import altair as alt from vega_datasets import data source = data.cars() brush = alt.selection(type='interval') points = alt.Chart(source).mark_point().encode( x='Horsepower', y='Miles_per_Gallon', color=alt.condition(brush, 'Origin', alt.value('lightgray')) ).add_selection( brush ) bars = alt.Chart(source).mark_bar().encode( y='Origin', color='Origin', x='count(Origin)' ).transform_filter( brush ) points & bars ``` ![Altair Visualization Gif](https://raw.githubusercontent.com/altair-viz/altair/master/images/cars_scatter_bar.gif) ## Getting your Questions Answered If you have a question that is not addressed in the documentation, there are several ways to ask: - open a [Github Issue](https://github.com/altair-viz/altair/issues) - post a [StackOverflow Question](https://stackoverflow.com/questions/tagged/altair) (be sure to use the `altair` tag) - ask on the [Altair Google Group](https://groups.google.com/forum/#!forum/altair-viz) We'll do our best to get your question answered ## A Python API for statistical visualizations Altair provides a Python API for building statistical visualizations in a declarative manner. By statistical visualization we mean: * The **data source** is a `DataFrame` that consists of columns of different data types (quantitative, ordinal, nominal and date/time). * The `DataFrame` is in a [tidy format](http://vita.had.co.nz/papers/tidy-data.pdf) where the rows correspond to samples and the columns correspond to the observed variables. * The data is mapped to the **visual properties** (position, color, size, shape, faceting, etc.) using the group-by data transformation. The Altair API contains no actual visualization rendering code but instead emits JSON data structures following the [Vega-Lite](https://github.com/vega/vega-lite) specification. The resulting Vega-Lite JSON data can be rendered in the following user-interfaces: * [Jupyter Notebook](https://github.com/jupyter/notebook) (by installing [ipyvega](https://github.com/vega/ipyvega)). * [JupyterLab](https://github.com/jupyterlab/jupyterlab) (no additional dependencies needed). * [nteract](https://github.com/nteract/nteract) (no additional dependencies needed). ## Features * Carefully-designed, declarative Python API based on [traitlets](https://github.com/ipython/traitlets). * Auto-generated internal Python API that guarantees visualizations are type-checked and in full conformance with the [Vega-Lite](https://github.com/vega/vega-lite) specification. * Auto-generate Altair Python code from a Vega-Lite JSON spec. * Display visualizations in the live Jupyter Notebook, JupyterLab, nteract, on GitHub and [nbviewer](http://nbviewer.jupyter.org/). * Export visualizations to PNG/SVG images, stand-alone HTML pages and the [Online Vega-Lite Editor](https://vega.github.io/editor/#/). * Serialize visualizations as JSON files. * Explore Altair with dozens of examples in the [Example Gallery](https://altair-viz.github.io/gallery/index.html) ## Installation To use Altair for visualization, you need to install two sets of tools 1. The core Altair Package and its dependencies 2. The renderer for the frontend you wish to use (i.e. `Jupyter Notebook`, `JupyterLab`, or `nteract`) Altair can be installed with either ``pip`` or with ``conda``. For full installation instructions, please see https://altair-viz.github.io/getting_started/installation.html ## Example and tutorial notebooks We maintain a separate Github repository of Jupyter Notebooks that contain an interactive tutorial and examples: https://github.com/altair-viz/altair_notebooks To launch a live notebook server with those notebook using [binder](https://mybinder.org/) or [Colab](http://colab.research.google.com), click on one of the following badges: [![Binder](https://beta.mybinder.org/badge.svg)](https://beta.mybinder.org/v2/gh/altair-viz/altair_notebooks/master) [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/altair-viz/altair_notebooks/blob/master/notebooks/Index.ipynb) ## Project philosophy Many excellent plotting libraries exist in Python, including the main ones: * [Matplotlib](http://matplotlib.org/) * [Bokeh](http://bokeh.pydata.org/en/latest/) * [Seaborn](http://stanford.edu/~mwaskom/software/seaborn/#) * [Lightning](http://lightning-viz.org/) * [Plotly](https://plot.ly/) * [Pandas built-in plotting](http://pandas.pydata.org/pandas-docs/stable/visualization.html) * [HoloViews](http://holoviews.org) * [VisPy](http://vispy.org/) * [pygg](http://www.github.com/sirrice/pygg) Each library does a particular set of things well. ### User challenges However, such a proliferation of options creates great difficulty for users as they have to wade through all of these APIs to find which of them is the best for the task at hand. None of these libraries are optimized for high-level statistical visualization, so users have to assemble their own using a mishmash of APIs. For individuals just learning data science, this forces them to focus on learning APIs rather than exploring their data. Another challenge is current plotting APIs require the user to write code, even for incidental details of a visualization. This results in an unfortunate and unnecessary cognitive burden as the visualization type (histogram, scatterplot, etc.) can often be inferred using basic information such as the columns of interest and the data types of those columns. For example, if you are interested in the visualization of two numerical columns, a scatterplot is almost certainly a good starting point. If you add a categorical column to that, you probably want to encode that column using colors or facets. If inferring the visualization proves difficult at times, a simple user interface can construct a visualization without any coding. [Tableau](http://www.tableau.com/) and the [Interactive Data Lab's](http://idl.cs.washington.edu/) [Polestar](https://github.com/vega/polestar) and [Voyager](https://github.com/vega/voyager) are excellent examples of such UIs. ### Design approach and solution We believe that these challenges can be addressed without the creation of yet another visualization library that has a programmatic API and built-in rendering. Altair's approach to building visualizations uses a layered design that leverages the full capabilities of existing visualization libraries: 1. Create a constrained, simple Python API (Altair) that is purely declarative 2. Use the API (Altair) to emit JSON output that follows the Vega-Lite spec 3. Render that spec using existing visualization libraries This approach enables users to perform exploratory visualizations with a much simpler API initially, pick an appropriate renderer for their usage case, and then leverage the full capabilities of that renderer for more advanced plot customization. We realize that a declarative API will necessarily be limited compared to the full programmatic APIs of Matplotlib, Bokeh, etc. That is a deliberate design choice we feel is needed to simplify the user experience of exploratory visualization. ## Development install Altair requires the following dependencies: * [pandas](http://pandas.pydata.org/) * [traitlets](https://github.com/ipython/traitlets) * [IPython](https://github.com/ipython/ipython) If you have cloned the repository, run the following command from the root of the repository: ``` pip install -e .[dev] ``` If you do not wish to clone the repository, you can install using: ``` pip install git+https://github.com/altair-viz/altair ``` ## Testing To run the test suite you must have [py.test](http://pytest.org/latest/) installed. To run the tests, use ``` py.test --pyargs altair ``` (you can omit the `--pyargs` flag if you are running the tests from a source checkout). ## Feedback and Contribution See [`CONTRIBUTING.md`](https://github.com/altair-viz/altair/blob/master/CONTRIBUTING.md) ## Citing Altair [![JOSS Paper](http://joss.theoj.org/papers/10.21105/joss.01057/status.svg)](http://joss.theoj.org/papers/10.21105/joss.01057) If you use Altair in academic work, please consider citing http://joss.theoj.org/papers/10.21105/joss.01057 as ```bib @article{2018-altair, doi = {10.21105/joss.01057}, url = {https://doi.org/10.21105/joss.01057}, year = {2018}, month = {dec}, publisher = {The Open Journal}, author = {Jacob VanderPlas and Brian Granger and Jeffrey Heer and Dominik Moritz and Kanit Wongsuphasawat and Arvind Satyanarayan and Eitan Lees and Ilia Timofeev and Ben Welsh and Scott Sievert}, title = {Altair: Interactive Statistical Visualizations for Python}, journal = {Journal of Open Source Software} } ``` Please additionally consider citing the [vega-lite](http://vega.github.io/vega-lite/) project, which Altair is based on: https://dl.acm.org/doi/10.1109/TVCG.2016.2599030 ```bib @article{2017-vega-lite, title = {Vega-Lite: A Grammar of Interactive Graphics}, author = {Arvind Satyanarayan AND Dominik Moritz AND Kanit Wongsuphasawat AND Jeffrey Heer}, journal = {IEEE Trans. Visualization \& Comp. Graphics (Proc. InfoVis)}, year = {2017}, url = {http://idl.cs.washington.edu/papers/vega-lite}, } ``` ## Whence Altair? Altair is the [brightest star](https://en.wikipedia.org/wiki/Altair) in the constellation Aquila, and along with Deneb and Vega forms the northern-hemisphere asterism known as the [Summer Triangle](https://en.wikipedia.org/wiki/Summer_Triangle). altair-4.1.0/RELEASING.md000066400000000000000000000044771364111050100146270ustar00rootroot000000000000001. Make certain your branch is in sync with head $ git pull upstream master 2. Do a clean doc build: $ cd doc $ make clean-all $ make html $ cd _build/html; python -m http.server Navigate to http://localhost:8000 and ensure it looks OK (particularly do a visual scan of the gallery thumbnails). 3. Make sure changes.rst is up to date for the release: compare against PRs merged since the last release & update top heading with release date. 4. Update version to, e.g. 2.0.0 - in ``altair/__init__.py`` - in ``doc/conf.py`` (two places) 5. Double-check that all vega-lite/vega/vega-embed versions are up-to-date: - URLs in ``doc/conf.py`` - versions in ``altair/vegalite/v4/display.py`` 6. Commit change and push to master git add . -u git commit -m "MAINT: bump version to 2.0.0" git push upstream master 7. Tag the release: git tag -a v2.0.0 -m "version 2.0.0 release" git push upstream v2.0.0 8. Build source & wheel distributions rm -r dist build # clean old builds & distributions python setup.py sdist # create a source distribution python setup.py bdist_wheel # create a universal wheel 9. publish to PyPI (Requires correct PyPI owner permissions) twine upload dist/* 10. build and publish docs (Requires write-access to altair-viz/altair-viz.github.io) cd doc make clean-all make html bash sync_website.sh 11. update version to, e.g. 2.1.0dev - in ``altair/__init__.py`` - in ``doc/conf.py`` (two places) 12. add a new changelog entry for the unreleased version: Version 2.1.0 (unreleased) -------------------------- Enhancements ~~~~~~~~~~~~ Bug Fixes ~~~~~~~~~ Backward-Incompatible Changes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 13. Commit change and push to master git add . -u git commit -m "MAINT: bump version to 2.1.0dev" git push upstream master 14. Double-check that a conda-forge pull request is generated from the updated pip package by the conda-forge bot (may take up to ~an hour): https://github.com/conda-forge/altair-feedstock/pulls 15. Copy changes.rst section into release notes within https://github.com/altair-viz/altair/releases/, and publish the release. altair-4.1.0/altair/000077500000000000000000000000001364111050100142345ustar00rootroot00000000000000altair-4.1.0/altair/__init__.py000066400000000000000000000004151364111050100163450ustar00rootroot00000000000000# flake8: noqa __version__ = "4.1.0" from .vegalite import * from . import examples def load_ipython_extension(ipython): from ._magics import vega, vegalite ipython.register_magic_function(vega, "cell") ipython.register_magic_function(vegalite, "cell") altair-4.1.0/altair/_magics.py000066400000000000000000000121231364111050100162070ustar00rootroot00000000000000""" Magic functions for rendering vega/vega-lite specifications """ __all__ = ["vega", "vegalite"] import json import warnings import IPython from IPython.core import magic_arguments import pandas as pd from toolz import curried from altair.vegalite import v3 as vegalite_v3 from altair.vegalite import v4 as vegalite_v4 from altair.vega import v5 as vega_v5 try: import yaml YAML_AVAILABLE = True except ImportError: YAML_AVAILABLE = False RENDERERS = { "vega": {"5": vega_v5.Vega}, "vega-lite": {"3": vegalite_v3.VegaLite, "4": vegalite_v4.VegaLite}, } TRANSFORMERS = { "vega": { # Vega doesn't yet have specific data transformers; use vegalite "5": vegalite_v4.data_transformers, }, "vega-lite": { "3": vegalite_v3.data_transformers, "4": vegalite_v4.data_transformers, }, } def _prepare_data(data, data_transformers): """Convert input data to data for use within schema""" if data is None or isinstance(data, dict): return data elif isinstance(data, pd.DataFrame): return curried.pipe(data, data_transformers.get()) elif isinstance(data, str): return {"url": data} else: warnings.warn("data of type {} not recognized".format(type(data))) return data def _get_variable(name): """Get a variable from the notebook namespace.""" ip = IPython.get_ipython() if ip is None: raise ValueError( "Magic command must be run within an IPython " "environemnt, in which get_ipython() is defined." ) if name not in ip.user_ns: raise NameError( "argument '{}' does not match the " "name of any defined variable".format(name) ) return ip.user_ns[name] @magic_arguments.magic_arguments() @magic_arguments.argument( "data", nargs="*", help="local variable name of a pandas DataFrame to be used as the dataset", ) @magic_arguments.argument("-v", "--version", dest="version", default="5") @magic_arguments.argument("-j", "--json", dest="json", action="store_true") def vega(line, cell): """Cell magic for displaying Vega visualizations in CoLab. %%vega [name1:variable1 name2:variable2 ...] [--json] [--version='5'] Visualize the contents of the cell using Vega, optionally specifying one or more pandas DataFrame objects to be used as the datasets. If --json is passed, then input is parsed as json rather than yaml. """ args = magic_arguments.parse_argstring(vega, line) version = args.version assert version in RENDERERS["vega"] Vega = RENDERERS["vega"][version] data_transformers = TRANSFORMERS["vega"][version] def namevar(s): s = s.split(":") if len(s) == 1: return s[0], s[0] elif len(s) == 2: return s[0], s[1] else: raise ValueError("invalid identifier: '{}'".format(s)) try: data = list(map(namevar, args.data)) except ValueError: raise ValueError("Could not parse arguments: '{}'".format(line)) if args.json: spec = json.loads(cell) elif not YAML_AVAILABLE: try: spec = json.loads(cell) except json.JSONDecodeError: raise ValueError( "%%vega: spec is not valid JSON. " "Install pyyaml to parse spec as yaml" ) else: spec = yaml.load(cell, Loader=yaml.FullLoader) if data: spec["data"] = [] for name, val in data: val = _get_variable(val) prepped = _prepare_data(val, data_transformers) prepped["name"] = name spec["data"].append(prepped) return Vega(spec) @magic_arguments.magic_arguments() @magic_arguments.argument( "data", nargs="?", help="local variablename of a pandas DataFrame to be used as the dataset", ) @magic_arguments.argument("-v", "--version", dest="version", default="4") @magic_arguments.argument("-j", "--json", dest="json", action="store_true") def vegalite(line, cell): """Cell magic for displaying vega-lite visualizations in CoLab. %%vegalite [dataframe] [--json] [--version=3] Visualize the contents of the cell using Vega-Lite, optionally specifying a pandas DataFrame object to be used as the dataset. if --json is passed, then input is parsed as json rather than yaml. """ args = magic_arguments.parse_argstring(vegalite, line) version = args.version assert version in RENDERERS["vega-lite"] VegaLite = RENDERERS["vega-lite"][version] data_transformers = TRANSFORMERS["vega-lite"][version] if args.json: spec = json.loads(cell) elif not YAML_AVAILABLE: try: spec = json.loads(cell) except json.JSONDecodeError: raise ValueError( "%%vegalite: spec is not valid JSON. " "Install pyyaml to parse spec as yaml" ) else: spec = yaml.load(cell, Loader=yaml.FullLoader) if args.data is not None: data = _get_variable(args.data) spec["data"] = _prepare_data(data, data_transformers) return VegaLite(spec) altair-4.1.0/altair/datasets.py000066400000000000000000000012051364111050100164140ustar00rootroot00000000000000"""Datasets for use with Altair (deprecated) The functions here are merely thin wrappers for data access routines in the vega_datasets package. """ from altair.utils.deprecation import deprecated @deprecated("load_dataset is deprecated. " "Use the vega_datasets package instead.") def load_dataset(name): """Load a dataset by name as a pandas.DataFrame.""" import vega_datasets return vega_datasets.data(name) @deprecated("load_dataset is deprecated. " "Use the vega_datasets package instead.") def list_datasets(): """List the available datasets.""" import vega_datasets return vega_datasets.data.list_datasets() altair-4.1.0/altair/examples/000077500000000000000000000000001364111050100160525ustar00rootroot00000000000000altair-4.1.0/altair/examples/__init__.py000066400000000000000000000010561364111050100201650ustar00rootroot00000000000000import os def iter_examples(): """Iterate over the examples in this directory. Each item is a dict with the following keys: - "name" : the unique name of the example - "filename" : the full file path to the example """ example_dir = os.path.abspath(os.path.dirname(__file__)) for filename in os.listdir(example_dir): name, ext = os.path.splitext(filename) if name.startswith('_') or ext != '.py': continue yield {'name': name, 'filename': os.path.join(example_dir, filename)} altair-4.1.0/altair/examples/airport_connections.py000066400000000000000000000037661364111050100225220ustar00rootroot00000000000000""" Connections Among U.S. Airports Interactive ------------------------------------------- This example shows all the connections between major U.S. airports. Lookup transformations are used to find the coordinates of each airport and connecting airports. Connections are displayed on mouseover via a single selection. """ # category: case studies import altair as alt from vega_datasets import data # Since these data are each more than 5,000 rows we'll import from the URLs airports = data.airports.url flights_airport = data.flights_airport.url states = alt.topo_feature(data.us_10m.url, feature="states") # Create mouseover selection select_city = alt.selection_single( on="mouseover", nearest=True, fields=["origin"], empty="none" ) # Define which attributes to lookup from airports.csv lookup_data = alt.LookupData( airports, key="iata", fields=["state", "latitude", "longitude"] ) background = alt.Chart(states).mark_geoshape( fill="lightgray", stroke="white" ).properties( width=750, height=500 ).project("albersUsa") connections = alt.Chart(flights_airport).mark_rule(opacity=0.35).encode( latitude="latitude:Q", longitude="longitude:Q", latitude2="lat2:Q", longitude2="lon2:Q" ).transform_lookup( lookup="origin", from_=lookup_data ).transform_lookup( lookup="destination", from_=lookup_data, as_=["state", "lat2", "lon2"] ).transform_filter( select_city ) points = alt.Chart(flights_airport).mark_circle().encode( latitude="latitude:Q", longitude="longitude:Q", size=alt.Size("routes:Q", scale=alt.Scale(range=[0, 1000]), legend=None), order=alt.Order("routes:Q", sort="descending"), tooltip=["origin:N", "routes:Q"] ).transform_aggregate( routes="count()", groupby=["origin"] ).transform_lookup( lookup="origin", from_=lookup_data ).transform_filter( (alt.datum.state != "PR") & (alt.datum.state != "VI") ).add_selection( select_city ) (background + connections + points).configure_view(stroke=None) altair-4.1.0/altair/examples/airports.py000066400000000000000000000013621364111050100202710ustar00rootroot00000000000000""" Locations of US Airports ======================== This is a layered geographic visualization that shows the positions of US airports on a background of US states. """ # category: case studies import altair as alt from vega_datasets import data airports = data.airports() states = alt.topo_feature(data.us_10m.url, feature='states') # US states background background = alt.Chart(states).mark_geoshape( fill='lightgray', stroke='white' ).properties( width=500, height=300 ).project('albersUsa') # airport positions on background points = alt.Chart(airports).mark_circle( size=10, color='steelblue' ).encode( longitude='longitude:Q', latitude='latitude:Q', tooltip=['name', 'city', 'state'] ) background + points altair-4.1.0/altair/examples/airports_count.py000066400000000000000000000017251364111050100215040ustar00rootroot00000000000000""" Locations of US Airports ======================== This is a layered geographic visualization that shows the positions of US airports on a background of US states. """ # category: maps import altair as alt from vega_datasets import data airports = data.airports.url states = alt.topo_feature(data.us_10m.url, feature='states') # US states background background = alt.Chart(states).mark_geoshape( fill='lightgray', stroke='white' ).properties( width=500, height=300 ).project('albersUsa') # airport positions on background points = alt.Chart(airports).transform_aggregate( latitude='mean(latitude)', longitude='mean(longitude)', count='count()', groupby=['state'] ).mark_circle().encode( longitude='longitude:Q', latitude='latitude:Q', size=alt.Size('count:Q', title='Number of Airports'), color=alt.value('steelblue'), tooltip=['state:N','count:Q'] ).properties( title='Number of airports in US' ) background + points altair-4.1.0/altair/examples/anscombe_plot.py000066400000000000000000000011771364111050100212570ustar00rootroot00000000000000""" Anscombe's Quartet ------------------ This example shows how to use the column channel to make a trellis plot. Anscombe's Quartet is a famous dataset constructed by Francis Anscombe. Common summary statistics are identical for each subset of the data, despite the subsets having vastly different characteristics. """ # category: case studies import altair as alt from vega_datasets import data source = data.anscombe() alt.Chart(source).mark_circle().encode( alt.X('X', scale=alt.Scale(zero=False)), alt.Y('Y', scale=alt.Scale(zero=False)), alt.Facet('Series', columns=2), ).properties( width=180, height=180, ) altair-4.1.0/altair/examples/area_chart_gradient.py000066400000000000000000000014131364111050100223710ustar00rootroot00000000000000""" Area Chart with Gradient ------------------------ This example shows how to make an area chart with a gradient fill. For more information about gradient options see the Vega-Lite `Gradient documentation `_. """ # category: area charts import altair as alt from vega_datasets import data source = data.stocks() alt.Chart(source).transform_filter( 'datum.symbol==="GOOG"' ).mark_area( line={'color':'darkgreen'}, color=alt.Gradient( gradient='linear', stops=[alt.GradientStop(color='white', offset=0), alt.GradientStop(color='darkgreen', offset=1)], x1=1, x2=1, y1=1, y2=0 ) ).encode( alt.X('date:T'), alt.Y('price:Q') )altair-4.1.0/altair/examples/bar_and_line_with_dual_axis.py000066400000000000000000000007641364111050100241140ustar00rootroot00000000000000""" Bar Chart with Line on Dual Axis -------------------------------- This example shows how to combine two plots and keep their axes. For a more polished version of this chart, see :ref:`gallery_wheat_wages`. """ # category: bar charts import altair as alt from vega_datasets import data source = data.wheat() base = alt.Chart(source).encode(x='year:O') bar = base.mark_bar().encode(y='wheat:Q') line = base.mark_line(color='red').encode( y='wages:Q' ) (bar + line).properties(width=600) altair-4.1.0/altair/examples/bar_chart_horizontal.py000066400000000000000000000005231364111050100226220ustar00rootroot00000000000000""" Horizontal Bar Chart -------------------- This example is a bar chart drawn horizontally by putting the quantitative value on the x axis. """ # category: bar charts import altair as alt from vega_datasets import data source = data.wheat() alt.Chart(source).mark_bar().encode( x='wheat:Q', y="year:O" ).properties(height=700) altair-4.1.0/altair/examples/bar_chart_sorted.py000066400000000000000000000004511364111050100217310ustar00rootroot00000000000000""" Sorted Bar Chart ================ This example shows a bar chart sorted by a calculated value. """ # category: bar charts import altair as alt from vega_datasets import data source = data.barley() alt.Chart(source).mark_bar().encode( x='sum(yield):Q', y=alt.Y('site:N', sort='-x') ) altair-4.1.0/altair/examples/bar_chart_with_highlighted_bar.py000066400000000000000000000012231364111050100245660ustar00rootroot00000000000000""" Bar Chart with Highlighted Bar ------------------------------ This example shows a basic bar chart with a single bar highlighted. """ # category: bar charts import altair as alt from vega_datasets import data source = data.wheat() alt.Chart(source).mark_bar().encode( x='year:O', y="wheat:Q", # The highlight will be set on the result of a conditional statement color=alt.condition( alt.datum.year == 1810, # If the year is 1810 this test returns True, alt.value('orange'), # which sets the bar orange. alt.value('steelblue') # And if it's not true it sets the bar steelblue. ) ).properties(width=600) altair-4.1.0/altair/examples/bar_chart_with_highlighted_segment.py000066400000000000000000000012701364111050100254660ustar00rootroot00000000000000""" Bar Chart with Highlighted Segment ---------------------------------- This example shows a bar chart that highlights values beyond a threshold. """ import altair as alt import pandas as pd from vega_datasets import data source = data.wheat() threshold = pd.DataFrame([{"threshold": 90}]) bars = alt.Chart(source).mark_bar().encode( x="year:O", y="wheat:Q", ) highlight = alt.Chart(source).mark_bar(color="#e45755").encode( x='year:O', y='baseline:Q', y2='wheat:Q' ).transform_filter( alt.datum.wheat > 90 ).transform_calculate("baseline", "90") rule = alt.Chart(threshold).mark_rule().encode( y='threshold:Q' ) (bars + highlight + rule).properties(width=600) altair-4.1.0/altair/examples/bar_chart_with_labels.py000066400000000000000000000010041364111050100227210ustar00rootroot00000000000000""" Bar Chart with Labels ===================== This example shows a basic horizontal bar chart with labels created with Altair. """ # category: bar charts import altair as alt from vega_datasets import data source = data.wheat() bars = alt.Chart(source).mark_bar().encode( x='wheat:Q', y="year:O" ) text = bars.mark_text( align='left', baseline='middle', dx=3 # Nudges text to right so it doesn't appear on top of the bar ).encode( text='wheat:Q' ) (bars + text).properties(height=900) altair-4.1.0/altair/examples/bar_chart_with_mean_line.py000066400000000000000000000006411364111050100234140ustar00rootroot00000000000000""" Bar Chart with Line at Mean --------------------------- This example shows the mean value overlayed on a bar chart. """ # category: bar charts import altair as alt from vega_datasets import data source = data.wheat() bar = alt.Chart(source).mark_bar().encode( x='year:O', y='wheat:Q' ) rule = alt.Chart(source).mark_rule(color='red').encode( y='mean(wheat):Q' ) (bar + rule).properties(width=600) altair-4.1.0/altair/examples/bar_chart_with_negatives.py000066400000000000000000000010151364111050100234460ustar00rootroot00000000000000""" Bar Chart with Negative Values ============================== This example shows a bar chart with both positive and negative values. """ # category: bar charts import altair as alt from vega_datasets import data source = data.us_employment() alt.Chart(source).mark_bar().encode( x="month:T", y="nonfarm_change:Q", color=alt.condition( alt.datum.nonfarm_change > 0, alt.value("steelblue"), # The positive color alt.value("orange") # The negative color ) ).properties(width=600) altair-4.1.0/altair/examples/bar_rounded.py000066400000000000000000000006161364111050100207130ustar00rootroot00000000000000""" Bar Chart with rounded edges ---------------------------- This example shows how to create a bar chart with rounded edges. """ # category: bar charts import altair as alt from vega_datasets import data source = data.seattle_weather() alt.Chart(source).mark_bar( cornerRadiusTopLeft=3, cornerRadiusTopRight=3 ).encode( x='month(date):O', y='count():Q', color='weather:N' ) altair-4.1.0/altair/examples/beckers_barley_trellis_plot.py000066400000000000000000000022371364111050100242000ustar00rootroot00000000000000""" Becker's Barley Trellis Plot ---------------------------- The example demonstrates the trellis charts created by Richard Becker, William Cleveland and others in the 1990s. Using the visualization technique below they identified an anomoly in a widely used agriculatural dataset, which they termed `"The Morris Mistake." `_. It became their favored way of showcasing the power of this pioneering plot. """ # category: case studies import altair as alt from vega_datasets import data source = data.barley() alt.Chart(source, title="The Morris Mistake").mark_point().encode( alt.X( 'yield:Q', title="Barley Yield (bushels/acre)", scale=alt.Scale(zero=False), axis=alt.Axis(grid=False) ), alt.Y( 'variety:N', title="", sort='-x', axis=alt.Axis(grid=True) ), color=alt.Color('year:N', legend=alt.Legend(title="Year")), row=alt.Row( 'site:N', title="", sort=alt.EncodingSortField(field='yield', op='sum', order='descending'), ) ).properties( height=alt.Step(20) ).configure_view(stroke="transparent") altair-4.1.0/altair/examples/beckers_barley_wrapped_facet.py000066400000000000000000000013351364111050100242660ustar00rootroot00000000000000""" Becker's Barley Trellis Plot (wrapped facet) -------------------------------------------- The example demonstrates the trellis charts created by Richard Becker, William Cleveland and others in the 1990s. This is the Altair replicate of `the VegaLite version `_ demonstrating the usage of `columns` argument to create wrapped facet. """ # category: other charts import altair as alt from vega_datasets import data source = data.barley.url alt.Chart(source).mark_point().encode( alt.X('median(yield):Q', scale=alt.Scale(zero=False)), y='variety:O', color='year:N', facet=alt.Facet('site:O', columns=2), ).properties( width=200, height=100, ) altair-4.1.0/altair/examples/binned_heatmap.py000066400000000000000000000006761364111050100213730ustar00rootroot00000000000000""" Binned Heatmap -------------- This example shows how to make a heatmap from binned quantitative data. """ # category: other charts import altair as alt from vega_datasets import data source = data.movies.url alt.Chart(source).mark_rect().encode( alt.X('IMDB_Rating:Q', bin=alt.Bin(maxbins=60)), alt.Y('Rotten_Tomatoes_Rating:Q', bin=alt.Bin(maxbins=40)), alt.Color('count(IMDB_Rating):Q', scale=alt.Scale(scheme='greenblue')) ) altair-4.1.0/altair/examples/binned_scatterplot.py000066400000000000000000000005401364111050100223060ustar00rootroot00000000000000""" Binned Scatterplot ------------------ This example shows how to make a binned scatterplot. """ # category: scatter plots import altair as alt from vega_datasets import data source = data.movies.url alt.Chart(source).mark_circle().encode( alt.X('IMDB_Rating:Q', bin=True), alt.Y('Rotten_Tomatoes_Rating:Q', bin=True), size='count()' ) altair-4.1.0/altair/examples/boxplot.py000066400000000000000000000007201364111050100201120ustar00rootroot00000000000000""" Box Plot with Min/Max Whiskers ------------------------------ This example shows how to make a basic box plot using US Population data from 2000. Note that the default value of the `extent` property is 1.5, which can be used to produce in the standard modified boxplot. """ # category: other charts import altair as alt from vega_datasets import data source = data.population.url alt.Chart(source).mark_boxplot().encode( x='age:O', y='people:Q' ) altair-4.1.0/altair/examples/bubble_plot.py000066400000000000000000000004501364111050100207140ustar00rootroot00000000000000""" Bubble Plot ----------------- This example shows how to make a bubble plot. """ # category: scatter plots import altair as alt from vega_datasets import data source = data.cars() alt.Chart(source).mark_point().encode( x='Horsepower', y='Miles_per_Gallon', size='Acceleration' ) altair-4.1.0/altair/examples/candlestick_chart.py000066400000000000000000000023321364111050100220710ustar00rootroot00000000000000""" Candlestick Chart ================= A candlestick chart inspired from `Protovis `_. This example shows the performance of the Chicago Board Options Exchange `Volatility Index `_ (VIX) in the summer of 2009. The thick bar represents the opening and closing prices, while the thin bar shows intraday high and low prices; if the index closed higher on a given day, the bars are colored green rather than red. """ # category: other charts import altair as alt from vega_datasets import data source = data.ohlc() open_close_color = alt.condition("datum.open <= datum.close", alt.value("#06982d"), alt.value("#ae1325")) base = alt.Chart(source).encode( alt.X('date:T', axis=alt.Axis( format='%m/%d', labelAngle=-45, title='Date in 2009' ) ), color=open_close_color ) rule = base.mark_rule().encode( alt.Y( 'low:Q', title='Price', scale=alt.Scale(zero=False), ), alt.Y2('high:Q') ) bar = base.mark_bar().encode( alt.Y('open:Q'), alt.Y2('close:Q') ) rule + baraltair-4.1.0/altair/examples/choropleth.py000066400000000000000000000007431364111050100205770ustar00rootroot00000000000000""" Choropleth Map ============== A choropleth map of unemployment rate per county in the US """ # category: maps import altair as alt from vega_datasets import data counties = alt.topo_feature(data.us_10m.url, 'counties') source = data.unemployment.url alt.Chart(counties).mark_geoshape().encode( color='rate:Q' ).transform_lookup( lookup='id', from_=alt.LookupData(source, 'id', ['rate']) ).project( type='albersUsa' ).properties( width=500, height=300 ) altair-4.1.0/altair/examples/choropleth_repeat.py000066400000000000000000000012641364111050100221360ustar00rootroot00000000000000""" Repeated Choropleth Map ======================= Three choropleths representing disjoint data from the same table. """ # category: maps import altair as alt from vega_datasets import data states = alt.topo_feature(data.us_10m.url, 'states') source = data.population_engineers_hurricanes.url variable_list = ['population', 'engineers', 'hurricanes'] alt.Chart(states).mark_geoshape().encode( alt.Color(alt.repeat('row'), type='quantitative') ).transform_lookup( lookup='id', from_=alt.LookupData(source, 'id', variable_list) ).properties( width=500, height=300 ).project( type='albersUsa' ).repeat( row=variable_list ).resolve_scale( color='independent' ) altair-4.1.0/altair/examples/co2_concentration.py000066400000000000000000000032321364111050100220350ustar00rootroot00000000000000""" Atmospheric CO2 Concentration ----------------------------- This example is a fully developed line chart that uses a window transformation. It was inspired by `Gregor Aisch's work at datawrapper `_. """ # category: case studies import altair as alt from vega_datasets import data source = data.co2_concentration.url base = alt.Chart( source, title="Carbon Dioxide in the Atmosphere" ).transform_calculate( year="year(datum.Date)" ).transform_calculate( decade="floor(datum.year / 10)" ).transform_calculate( scaled_date="(datum.year % 10) + (month(datum.Date)/12)" ).transform_window( first_date='first_value(scaled_date)', last_date='last_value(scaled_date)', sort=[{"field": "scaled_date", "order": "ascending"}], groupby=['decade'], frame=[None, None] ).transform_calculate( end="datum.first_date === datum.scaled_date ? 'first' : datum.last_date === datum.scaled_date ? 'last' : null" ).encode( x=alt.X( "scaled_date:Q", axis=alt.Axis(title="Year into Decade", tickCount=11) ), y=alt.Y( "CO2:Q", title="CO2 concentration in ppm", scale=alt.Scale(zero=False) ) ) line = base.mark_line().encode( color=alt.Color( "decade:O", scale=alt.Scale(scheme="magma"), legend=None ) ) text = base.encode(text="year:N") start_year = text.transform_filter( alt.datum.end == 'first' ).mark_text(baseline="top") end_year = text.transform_filter( alt.datum.end == 'last' ).mark_text(baseline="bottom") (line + start_year + end_year).configure_text( align="left", dx=1, dy=3 ).properties(width=600, height=375) altair-4.1.0/altair/examples/connected_scatterplot.py000066400000000000000000000013261364111050100230140ustar00rootroot00000000000000""" Connected Scatterplot (Lines with Custom Paths) ----------------------------------------------- This example show how the order encoding can be used to draw a custom path. The dataset tracks miles driven per capita along with gas prices annually from 1956 to 2010. It is based on Hannah Fairfield's article 'Driving Shifts Into Reverse'. See https://archive.nytimes.com/www.nytimes.com/imagepages/2010/05/02/business/02metrics.html for the original. """ # category: scatter plots import altair as alt from vega_datasets import data source = data.driving() alt.Chart(source).mark_line(point=True).encode( alt.X('miles', scale=alt.Scale(zero=False)), alt.Y('gas', scale=alt.Scale(zero=False)), order='year' ) altair-4.1.0/altair/examples/cumulative_count_chart.py000066400000000000000000000007331364111050100231760ustar00rootroot00000000000000""" Cumulative Count Chart ---------------------- This example shows an area chart with cumulative count. Adapted from https://vega.github.io/vega-lite/examples/area_cumulative_freq.html """ # category: area charts import altair as alt from vega_datasets import data source = data.movies.url alt.Chart(source).transform_window( cumulative_count="count()", sort=[{"field": "IMDB_Rating"}], ).mark_area().encode( x="IMDB_Rating:Q", y="cumulative_count:Q" ) altair-4.1.0/altair/examples/cumulative_wiki_donations.py000066400000000000000000000013071364111050100237040ustar00rootroot00000000000000""" Cumulative Wikipedia Donations ============================== This chart shows cumulative donations to Wikipedia over the past 10 years. Inspired by this `Reddit post `_ but using lines instead of areas. """ # category: case studies import altair as alt source = "https://frdata.wikimedia.org/donationdata-vs-day.csv" alt.Chart(source).mark_line().encode( alt.X('monthdate(date):T', title='Month', axis=alt.Axis(format='%B')), alt.Y('max(ytdsum):Q', title='Cumulative Donations', stack=None), alt.Color('year(date):O', legend=alt.Legend(title='Year')), alt.Order('year(data):O') ) altair-4.1.0/altair/examples/density_facet.py000066400000000000000000000011731364111050100212470ustar00rootroot00000000000000""" Faceted Density Estimates ------------------------- Density estimates of measurements for each iris flower feature """ # category: area charts import altair as alt from vega_datasets import data source = data.iris() alt.Chart(source).transform_fold( ['petalWidth', 'petalLength', 'sepalWidth', 'sepalLength'], as_ = ['Measurement_type', 'value'] ).transform_density( density='value', bandwidth=0.3, groupby=['Measurement_type'], extent= [0, 8] ).mark_area().encode( alt.X('value:Q'), alt.Y('density:Q'), alt.Row('Measurement_type:N') ).properties(width=300, height=50) altair-4.1.0/altair/examples/density_stack.py000066400000000000000000000020001364111050100212600ustar00rootroot00000000000000""" Stacked Density Estimates ------------------------- To plot a stacked graph of estimates, use a shared ``extent`` and a fixed number of subdivision ``steps`` to ensure that the points for each area align well. Density estimates of measurements for each iris flower feature are plot in a stacked method. In addition, setting ``counts`` to true multiplies the densities by the number of data points in each group, preserving proportional differences. """ # category: area charts import altair as alt from vega_datasets import data source = data.iris() alt.Chart(source).transform_fold( ['petalWidth', 'petalLength', 'sepalWidth', 'sepalLength'], as_ = ['Measurement_type', 'value'] ).transform_density( density='value', bandwidth=0.3, groupby=['Measurement_type'], extent= [0, 8], counts = True, steps=200 ).mark_area().encode( alt.X('value:Q'), alt.Y('density:Q', stack='zero'), alt.Color('Measurement_type:N') ).properties(width=400, height=100) altair-4.1.0/altair/examples/diverging_stacked_bar_chart.py000066400000000000000000000210401364111050100241020ustar00rootroot00000000000000""" Diverging Stacked Bar Chart --------------------------- This example shows a diverging stacked bar chart for sentiments towards a set of eight questions, displayed as percentages with neutral responses straddling the 0% mark. """ # category: bar charts import altair as alt source = alt.pd.DataFrame([ { "question": "Question 1", "type": "Strongly disagree", "value": 24, "percentage": 0.7, "percentage_start": -19.1, "percentage_end": -18.4 }, { "question": "Question 1", "type": "Disagree", "value": 294, "percentage": 9.1, "percentage_start": -18.4, "percentage_end": -9.2 }, { "question": "Question 1", "type": "Neither agree nor disagree", "value": 594, "percentage": 18.5, "percentage_start": -9.2, "percentage_end": 9.2 }, { "question": "Question 1", "type": "Agree", "value": 1927, "percentage": 59.9, "percentage_start": 9.2, "percentage_end": 69.2 }, { "question": "Question 1", "type": "Strongly agree", "value": 376, "percentage": 11.7, "percentage_start": 69.2, "percentage_end": 80.9 }, { "question": "Question 2", "type": "Strongly disagree", "value": 2, "percentage": 18.2, "percentage_start": -36.4, "percentage_end": -18.2 }, { "question": "Question 2", "type": "Disagree", "value": 2, "percentage": 18.2, "percentage_start": -18.2, "percentage_end": 0 }, { "question": "Question 2", "type": "Neither agree nor disagree", "value": 0, "percentage": 0, "percentage_start": 0, "percentage_end": 0 }, { "question": "Question 2", "type": "Agree", "value": 7, "percentage": 63.6, "percentage_start": 0, "percentage_end": 63.6 }, { "question": "Question 2", "type": "Strongly agree", "value": 11, "percentage": 0, "percentage_start": 63.6, "percentage_end": 63.6 }, { "question": "Question 3", "type": "Strongly disagree", "value": 2, "percentage": 20, "percentage_start": -30, "percentage_end": -10 }, { "question": "Question 3", "type": "Disagree", "value": 0, "percentage": 0, "percentage_start": -10, "percentage_end": -10 }, { "question": "Question 3", "type": "Neither agree nor disagree", "value": 2, "percentage": 20, "percentage_start": -10, "percentage_end": 10 }, { "question": "Question 3", "type": "Agree", "value": 4, "percentage": 40, "percentage_start": 10, "percentage_end": 50 }, { "question": "Question 3", "type": "Strongly agree", "value": 2, "percentage": 20, "percentage_start": 50, "percentage_end": 70 }, { "question": "Question 4", "type": "Strongly disagree", "value": 0, "percentage": 0, "percentage_start": -15.6, "percentage_end": -15.6 }, { "question": "Question 4", "type": "Disagree", "value": 2, "percentage": 12.5, "percentage_start": -15.6, "percentage_end": -3.1 }, { "question": "Question 4", "type": "Neither agree nor disagree", "value": 1, "percentage": 6.3, "percentage_start": -3.1, "percentage_end": 3.1 }, { "question": "Question 4", "type": "Agree", "value": 7, "percentage": 43.8, "percentage_start": 3.1, "percentage_end": 46.9 }, { "question": "Question 4", "type": "Strongly agree", "value": 6, "percentage": 37.5, "percentage_start": 46.9, "percentage_end": 84.4 }, { "question": "Question 5", "type": "Strongly disagree", "value": 0, "percentage": 0, "percentage_start": -10.4, "percentage_end": -10.4 }, { "question": "Question 5", "type": "Disagree", "value": 1, "percentage": 4.2, "percentage_start": -10.4, "percentage_end": -6.3 }, { "question": "Question 5", "type": "Neither agree nor disagree", "value": 3, "percentage": 12.5, "percentage_start": -6.3, "percentage_end": 6.3 }, { "question": "Question 5", "type": "Agree", "value": 16, "percentage": 66.7, "percentage_start": 6.3, "percentage_end": 72.9 }, { "question": "Question 5", "type": "Strongly agree", "value": 4, "percentage": 16.7, "percentage_start": 72.9, "percentage_end": 89.6 }, { "question": "Question 6", "type": "Strongly disagree", "value": 1, "percentage": 6.3, "percentage_start": -18.8, "percentage_end": -12.5 }, { "question": "Question 6", "type": "Disagree", "value": 1, "percentage": 6.3, "percentage_start": -12.5, "percentage_end": -6.3 }, { "question": "Question 6", "type": "Neither agree nor disagree", "value": 2, "percentage": 12.5, "percentage_start": -6.3, "percentage_end": 6.3 }, { "question": "Question 6", "type": "Agree", "value": 9, "percentage": 56.3, "percentage_start": 6.3, "percentage_end": 62.5 }, { "question": "Question 6", "type": "Strongly agree", "value": 3, "percentage": 18.8, "percentage_start": 62.5, "percentage_end": 81.3 }, { "question": "Question 7", "type": "Strongly disagree", "value": 0, "percentage": 0, "percentage_start": -10, "percentage_end": -10 }, { "question": "Question 7", "type": "Disagree", "value": 0, "percentage": 0, "percentage_start": -10, "percentage_end": -10 }, { "question": "Question 7", "type": "Neither agree nor disagree", "value": 1, "percentage": 20, "percentage_start": -10, "percentage_end": 10 }, { "question": "Question 7", "type": "Agree", "value": 4, "percentage": 80, "percentage_start": 10, "percentage_end": 90 }, { "question": "Question 7", "type": "Strongly agree", "value": 0, "percentage": 0, "percentage_start": 90, "percentage_end": 90 }, { "question": "Question 8", "type": "Strongly disagree", "value": 0, "percentage": 0, "percentage_start": 0, "percentage_end": 0 }, { "question": "Question 8", "type": "Disagree", "value": 0, "percentage": 0, "percentage_start": 0, "percentage_end": 0 }, { "question": "Question 8", "type": "Neither agree nor disagree", "value": 0, "percentage": 0, "percentage_start": 0, "percentage_end": 0 }, { "question": "Question 8", "type": "Agree", "value": 0, "percentage": 0, "percentage_start": 0, "percentage_end": 0 }, { "question": "Question 8", "type": "Strongly agree", "value": 2, "percentage": 100, "percentage_start": 0, "percentage_end": 100 } ]) color_scale = alt.Scale( domain=[ "Strongly disagree", "Disagree", "Neither agree nor disagree", "Agree", "Strongly agree" ], range=["#c30d24", "#f3a583", "#cccccc", "#94c6da", "#1770ab"] ) y_axis = alt.Axis( title='Question', offset=5, ticks=False, minExtent=60, domain=False ) alt.Chart(source).mark_bar().encode( x='percentage_start:Q', x2='percentage_end:Q', y=alt.Y('question:N', axis=y_axis), color=alt.Color( 'type:N', legend=alt.Legend( title='Response'), scale=color_scale, ) ) altair-4.1.0/altair/examples/dot_dash_plot.py000066400000000000000000000023421364111050100212500ustar00rootroot00000000000000""" Dot Dash Plot ============= How to make the dot-dash plot presented in Edward Tufte's `Visual Display of Quantitative Information `_. Based on a JavaScript implementation by `g3o2 `_. """ # category: scatter plots import altair as alt from vega_datasets import data source = data.cars() # Configure the options common to all layers brush = alt.selection(type='interval') base = alt.Chart(source).add_selection(brush) # Configure the points points = base.mark_point().encode( x=alt.X('Miles_per_Gallon', title=''), y=alt.Y('Horsepower', title=''), color=alt.condition(brush, 'Origin', alt.value('grey')) ) # Configure the ticks tick_axis = alt.Axis(labels=False, domain=False, ticks=False) x_ticks = base.mark_tick().encode( alt.X('Miles_per_Gallon', axis=tick_axis), alt.Y('Origin', title='', axis=tick_axis), color=alt.condition(brush, 'Origin', alt.value('lightgrey')) ) y_ticks = base.mark_tick().encode( alt.X('Origin', title='', axis=tick_axis), alt.Y('Horsepower', axis=tick_axis), color=alt.condition(brush, 'Origin', alt.value('lightgrey')) ) # Build the chart y_ticks | (points & x_ticks) altair-4.1.0/altair/examples/errorbars_with_ci.py000066400000000000000000000013421364111050100221330ustar00rootroot00000000000000""" Error Bars showing Confidence Interval ====================================== This example shows how to show error bars using confidence intervals. The confidence intervals are computed internally in vega by a non-parametric `bootstrap of the mean `_. """ # category: other charts import altair as alt from vega_datasets import data source = data.barley() error_bars = alt.Chart(source).mark_errorbar(extent='ci').encode( x=alt.X('yield:Q', scale=alt.Scale(zero=False)), y=alt.Y('variety:N') ) points = alt.Chart(source).mark_point(filled=True, color='black').encode( x=alt.X('yield:Q', aggregate='mean'), y=alt.Y('variety:N'), ) error_bars + points altair-4.1.0/altair/examples/errorbars_with_std.py000066400000000000000000000011421364111050100223300ustar00rootroot00000000000000""" Error Bar with Standard Deviation --------------------------------- This example shows how to show error bars with standard deviation using crop yields data of different in the years of 1930s. """ # category: other charts import altair as alt from vega_datasets import data source = data.barley() error_bars = alt.Chart(source).mark_errorbar(extent='stdev').encode( x=alt.X('yield:Q', scale=alt.Scale(zero=False)), y=alt.Y('variety:N') ) points = alt.Chart(source).mark_point(filled=True, color='black').encode( x=alt.X('yield:Q', aggregate='mean'), y=alt.Y('variety:N'), ) error_bars + points altair-4.1.0/altair/examples/falkensee.py000066400000000000000000000047571364111050100203760ustar00rootroot00000000000000""" Falkensee ----------------------- This example is a reproduction of the Falkensee plot found in the vega-lite examples. """ # category: case studies import altair as alt source = [ {"year": "1875", "population": 1309}, {"year": "1890", "population": 1558}, {"year": "1910", "population": 4512}, {"year": "1925", "population": 8180}, {"year": "1933", "population": 15915}, {"year": "1939", "population": 24824}, {"year": "1946", "population": 28275}, {"year": "1950", "population": 29189}, {"year": "1964", "population": 29881}, {"year": "1971", "population": 26007}, {"year": "1981", "population": 24029}, {"year": "1985", "population": 23340}, {"year": "1989", "population": 22307}, {"year": "1990", "population": 22087}, {"year": "1991", "population": 22139}, {"year": "1992", "population": 22105}, {"year": "1993", "population": 22242}, {"year": "1994", "population": 22801}, {"year": "1995", "population": 24273}, {"year": "1996", "population": 25640}, {"year": "1997", "population": 27393}, {"year": "1998", "population": 29505}, {"year": "1999", "population": 32124}, {"year": "2000", "population": 33791}, {"year": "2001", "population": 35297}, {"year": "2002", "population": 36179}, {"year": "2003", "population": 36829}, {"year": "2004", "population": 37493}, {"year": "2005", "population": 38376}, {"year": "2006", "population": 39008}, {"year": "2007", "population": 39366}, {"year": "2008", "population": 39821}, {"year": "2009", "population": 40179}, {"year": "2010", "population": 40511}, {"year": "2011", "population": 40465}, {"year": "2012", "population": 40905}, {"year": "2013", "population": 41258}, {"year": "2014", "population": 41777} ] source2 = [{ "start": "1933", "end": "1945", "event": "Nazi Rule" }, { "start": "1948", "end": "1989", "event": "GDR (East Germany)" }] source = alt.pd.DataFrame(source) source2 = alt.pd.DataFrame(source2) line = alt.Chart(source).mark_line(color='#333').encode( alt.X('year:T', axis=alt.Axis(format='%Y')), y='population' ).properties( width=500, height=300 ) point = line.mark_point(color='#333') rect = alt.Chart(source2).mark_rect().encode( x='start:T', x2='end:T', color='event:N' ) rect + line + point altair-4.1.0/altair/examples/filled_step_chart.py000066400000000000000000000006711364111050100221030ustar00rootroot00000000000000""" Filled Step Chart ----------------- This example shows Google's stock price over time as a step chart with its area filled in and its line emphasized. """ # category: line charts import altair as alt from vega_datasets import data source = data.stocks() alt.Chart(source).mark_area( color="lightblue", interpolate='step-after', line=True ).encode( x='date', y='price' ).transform_filter(alt.datum.symbol == 'GOOG') altair-4.1.0/altair/examples/gantt_chart.py000066400000000000000000000006061364111050100207240ustar00rootroot00000000000000""" Gantt Chart ----------------- This example shows how to make a simple Gantt chart. """ # category: other charts import altair as alt import pandas as pd source = pd.DataFrame([ {"task": "A", "start": 1, "end": 3}, {"task": "B", "start": 3, "end": 8}, {"task": "C", "start": 8, "end": 10} ]) alt.Chart(source).mark_bar().encode( x='start', x2='end', y='task' ) altair-4.1.0/altair/examples/gapminder_bubble_plot.py000066400000000000000000000011751364111050100227470ustar00rootroot00000000000000""" Gapminder Bubble Plot ===================== This example shows how to make a bubble plot showing the correlation between health and income for 187 countries in the world (modified from an example in Lisa Charlotte Rost's blog post `'One Chart, Twelve Charting Libraries' `_. """ # category: case studies import altair as alt from vega_datasets import data source = data.gapminder_health_income.url alt.Chart(source).mark_circle().encode( alt.X('income:Q', scale=alt.Scale(type='log')), alt.Y('health:Q', scale=alt.Scale(zero=False)), size='population:Q' ) altair-4.1.0/altair/examples/grouped_bar_chart.py000066400000000000000000000004551364111050100221020ustar00rootroot00000000000000""" Grouped Bar Chart ----------------- This example shows a grouped bar chart. """ # category: bar charts import altair as alt from vega_datasets import data source = data.barley() alt.Chart(source).mark_bar().encode( x='year:O', y='sum(yield):Q', color='year:N', column='site:N' ) altair-4.1.0/altair/examples/grouped_bar_chart_horizontal.py000066400000000000000000000005131364111050100243460ustar00rootroot00000000000000""" Horizontal Grouped Bar Chart ---------------------------- This example shows a horizontal grouped bar chart. """ # category: bar charts import altair as alt from vega_datasets import data source = data.barley() alt.Chart(source).mark_bar().encode( x='sum(yield):Q', y='year:O', color='year:N', row='site:N' ) altair-4.1.0/altair/examples/grouped_bar_chart_with_error_bars.py000066400000000000000000000010141364111050100253450ustar00rootroot00000000000000""" Grouped Bar Chart with Error Bars --------------------------------- This example shows a grouped bar chart with error bars. """ # category: bar charts import altair as alt from vega_datasets import data source = data.barley() bars = alt.Chart().mark_bar().encode( x='year:O', y=alt.Y('mean(yield):Q', title='Mean Yield'), color='year:N', ) error_bars = alt.Chart().mark_errorbar(extent='ci').encode( x='year:O', y='yield:Q' ) alt.layer(bars, error_bars, data=source).facet( column='site:N' ) altair-4.1.0/altair/examples/histogram_responsive.py000066400000000000000000000014461364111050100227030ustar00rootroot00000000000000""" Histogram with Responsive Bins ------------------------------ This shows an example of a histogram with bins that are responsive to a selection domain. Click and drag on the bottom panel to see the bins change on the top panel. """ # category: histograms import altair as alt from vega_datasets import data source = data.flights_5k.url brush = alt.selection_interval(encodings=['x']) base = alt.Chart(source).transform_calculate( time="hours(datum.date) + minutes(datum.date) / 60" ).mark_bar().encode( y='count():Q' ).properties( width=600, height=100 ) alt.vconcat( base.encode( alt.X('time:Q', bin=alt.Bin(maxbins=30, extent=brush), scale=alt.Scale(domain=brush) ) ), base.encode( alt.X('time:Q', bin=alt.Bin(maxbins=30)), ).add_selection(brush) )altair-4.1.0/altair/examples/histogram_with_a_global_mean_overlay.py000066400000000000000000000007351364111050100260420ustar00rootroot00000000000000""" Histogram with a Global Mean Overlay ------------------------------------ This example shows a histogram with a global mean overlay. """ # category: histograms import altair as alt from vega_datasets import data source = data.movies.url base = alt.Chart(source) bar = base.mark_bar().encode( x=alt.X('IMDB_Rating:Q', bin=True, axis=None), y='count()' ) rule = base.mark_rule(color='red').encode( x='mean(IMDB_Rating):Q', size=alt.value(5) ) bar + rule altair-4.1.0/altair/examples/horizon_graph.py000066400000000000000000000021621364111050100212760ustar00rootroot00000000000000""" Horizon Graph ------------- This example shows how to make a Horizon Graph with 2 layers. (See https://idl.cs.washington.edu/papers/horizon/ for more details on Horizon Graphs.) """ # category: area charts import altair as alt import pandas as pd source = pd.DataFrame([ {"x": 1, "y": 28}, {"x": 2, "y": 55}, {"x": 3, "y": 43}, {"x": 4, "y": 91}, {"x": 5, "y": 81}, {"x": 6, "y": 53}, {"x": 7, "y": 19}, {"x": 8, "y": 87}, {"x": 9, "y": 52}, {"x": 10, "y": 48}, {"x": 11, "y": 24}, {"x": 12, "y": 49}, {"x": 13, "y": 87}, {"x": 14, "y": 66}, {"x": 15, "y": 17}, {"x": 16, "y": 27}, {"x": 17, "y": 68}, {"x": 18, "y": 16}, {"x": 19, "y": 49}, {"x": 20, "y": 15} ]) area1 = alt.Chart(source).mark_area( clip=True, interpolate='monotone' ).encode( alt.X('x', scale=alt.Scale(zero=False, nice=False)), alt.Y('y', scale=alt.Scale(domain=[0, 50]), title='y'), opacity=alt.value(0.6) ).properties( width=500, height=75 ) area2 = area1.encode( alt.Y('ny:Q', scale=alt.Scale(domain=[0, 50])) ).transform_calculate( "ny", alt.datum.y - 50 ) area1 + area2 altair-4.1.0/altair/examples/horizontal_stacked_bar_chart.py000066400000000000000000000006271364111050100243250ustar00rootroot00000000000000""" Horizontal Stacked Bar Chart ============================ This is an example of a horizontal stacked bar chart using data which contains crop yields over different regions and different years in the 1930s. """ # category: bar charts import altair as alt from vega_datasets import data source = data.barley() alt.Chart(source).mark_bar().encode( x='sum(yield)', y='variety', color='site' ) altair-4.1.0/altair/examples/interactive_brush.py000066400000000000000000000010441364111050100221430ustar00rootroot00000000000000""" Interactive Rectangular Brush ============================= This example shows how to add a simple rectangular brush to a scatter plot. By clicking and dragging on the plot, you can highlight points within the range. """ # category: interactive charts import altair as alt from vega_datasets import data source = data.cars() brush = alt.selection(type='interval') alt.Chart(source).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color=alt.condition(brush, 'Cylinders:O', alt.value('grey')), ).add_selection(brush) altair-4.1.0/altair/examples/interactive_cross_highlight.py000066400000000000000000000023231364111050100242010ustar00rootroot00000000000000""" Interactive Chart with Cross-Highlight ====================================== This example shows an interactive chart where selections in one portion of the chart affect what is shown in other panels. Click on the bar chart to see a detail of the distribution in the upper panel. """ # category: interactive charts import altair as alt from vega_datasets import data source = data.movies.url pts = alt.selection(type="single", encodings=['x']) rect = alt.Chart(data.movies.url).mark_rect().encode( alt.X('IMDB_Rating:Q', bin=True), alt.Y('Rotten_Tomatoes_Rating:Q', bin=True), alt.Color('count()', scale=alt.Scale(scheme='greenblue'), legend=alt.Legend(title='Total Records') ) ) circ = rect.mark_point().encode( alt.ColorValue('grey'), alt.Size('count()', legend=alt.Legend(title='Records in Selection') ) ).transform_filter( pts ) bar = alt.Chart(source).mark_bar().encode( x='Major_Genre:N', y='count()', color=alt.condition(pts, alt.ColorValue("steelblue"), alt.ColorValue("grey")) ).properties( width=550, height=200 ).add_selection(pts) alt.vconcat( rect + circ, bar ).resolve_legend( color="independent", size="independent" ) altair-4.1.0/altair/examples/interactive_layered_crossfilter.py000066400000000000000000000021511364111050100250640ustar00rootroot00000000000000""" Interactive Crossfilter ======================= This example shows a multi-panel view of the same data, where you can interactively select a portion of the data in any of the panels to highlight that portion in any of the other panels. """ # category: interactive charts import altair as alt from vega_datasets import data source = alt.UrlData( data.flights_2k.url, format={'parse': {'date': 'date'}} ) brush = alt.selection(type='interval', encodings=['x']) # Define the base chart, with the common parts of the # background and highlights base = alt.Chart().mark_bar().encode( x=alt.X(alt.repeat('column'), type='quantitative', bin=alt.Bin(maxbins=20)), y='count()' ).properties( width=160, height=130 ) # gray background with selection background = base.encode( color=alt.value('#ddd') ).add_selection(brush) # blue highlights on the transformed data highlight = base.transform_filter(brush) # layer the two charts & repeat alt.layer( background, highlight, data=source ).transform_calculate( "time", "hours(datum.date)" ).repeat(column=["distance", "delay", "time"]) altair-4.1.0/altair/examples/interactive_legend.py000066400000000000000000000014711364111050100222620ustar00rootroot00000000000000""" Interactive Legend ------------------ The following shows how to create a chart with an interactive legend, by binding the selection to ``"legend"``. Such a binding only works with ``selection_single`` or ``selection_multi`` when projected over a single field or encoding. """ # category: interactive charts import altair as alt from vega_datasets import data source = data.unemployment_across_industries.url selection = alt.selection_multi(fields=['series'], bind='legend') alt.Chart(source).mark_area().encode( alt.X('yearmonth(date):T', axis=alt.Axis(domain=False, format='%Y', tickSize=0)), alt.Y('sum(count):Q', stack='center', axis=None), alt.Color('series:N', scale=alt.Scale(scheme='category20b')), opacity=alt.condition(selection, alt.value(1), alt.value(0.2)) ).add_selection( selection )altair-4.1.0/altair/examples/interactive_scatter_plot.py000066400000000000000000000005651364111050100235320ustar00rootroot00000000000000""" Simple Interactive Colored Scatterplot -------------------------------------- This example shows how to make an interactive scatterplot. """ # category: interactive charts import altair as alt from vega_datasets import data source = data.cars() alt.Chart(source).mark_circle().encode( x='Horsepower', y='Miles_per_Gallon', color='Origin', ).interactive() altair-4.1.0/altair/examples/interval_selection.py000066400000000000000000000012011364111050100223070ustar00rootroot00000000000000""" Interval Selection Example ========================== This is an example of creating a stacked chart for which the domain of the top chart can be selected by interacting with the bottom chart. """ # category: area charts import altair as alt from vega_datasets import data source = data.sp500.url brush = alt.selection(type='interval', encodings=['x']) base = alt.Chart(source).mark_area().encode( x = 'date:T', y = 'price:Q' ).properties( width=600, height=200 ) upper = base.encode( alt.X('date:T', scale=alt.Scale(domain=brush)) ) lower = base.properties( height=60 ).add_selection(brush) upper & lower altair-4.1.0/altair/examples/iowa_electricity.py000066400000000000000000000012421364111050100217620ustar00rootroot00000000000000""" Iowa's renewable energy boom ---------------------------- This example is a fully developed stacked chart using the sample dataset of Iowa's electricity sources. """ # category: case studies import altair as alt from vega_datasets import data source = data.iowa_electricity() alt.Chart(source, title="Iowa's renewable energy boom").mark_area().encode( x=alt.X( "year:T", title="Year" ), y=alt.Y( "net_generation:Q", stack="normalize", title="Share of net generation", axis=alt.Axis(format=".0%"), ), color=alt.Color( "source:N", legend=alt.Legend(title="Electricity source"), ) ) altair-4.1.0/altair/examples/isotype.py000066400000000000000000000142041364111050100201210ustar00rootroot00000000000000''' Isotype Visualization ===================== Isotype Visualization shows the distribution of animals across UK and US. Inspired by `Only An Ocean Between, 1943 `_. Population Live Stock, p.13. This is adapted from Vega-Lite example https://vega.github.io/editor/#/examples/vega-lite/isotype_bar_chart ''' # category: case studies import altair as alt import pandas as pd source = pd.DataFrame([ {'country': 'Great Britain', 'animal': 'cattle'}, {'country': 'Great Britain', 'animal': 'cattle'}, {'country': 'Great Britain', 'animal': 'cattle'}, {'country': 'Great Britain', 'animal': 'pigs'}, {'country': 'Great Britain', 'animal': 'pigs'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'United States', 'animal': 'cattle'}, {'country': 'United States', 'animal': 'cattle'}, {'country': 'United States', 'animal': 'cattle'}, {'country': 'United States', 'animal': 'cattle'}, {'country': 'United States', 'animal': 'cattle'}, {'country': 'United States', 'animal': 'cattle'}, {'country': 'United States', 'animal': 'cattle'}, {'country': 'United States', 'animal': 'cattle'}, {'country': 'United States', 'animal': 'cattle'}, {'country': 'United States', 'animal': 'pigs'}, {'country': 'United States', 'animal': 'pigs'}, {'country': 'United States', 'animal': 'pigs'}, {'country': 'United States', 'animal': 'pigs'}, {'country': 'United States', 'animal': 'pigs'}, {'country': 'United States', 'animal': 'pigs'}, {'country': 'United States', 'animal': 'sheep'}, {'country': 'United States', 'animal': 'sheep'}, {'country': 'United States', 'animal': 'sheep'}, {'country': 'United States', 'animal': 'sheep'}, {'country': 'United States', 'animal': 'sheep'}, {'country': 'United States', 'animal': 'sheep'}, {'country': 'United States', 'animal': 'sheep'} ]) domains = ['person', 'cattle', 'pigs', 'sheep'] shape_scale = alt.Scale( domain=domains, range=[ 'M1.7 -1.7h-0.8c0.3 -0.2 0.6 -0.5 0.6 -0.9c0 -0.6 -0.4 -1 -1 -1c-0.6 0 -1 0.4 -1 1c0 0.4 0.2 0.7 0.6 0.9h-0.8c-0.4 0 -0.7 0.3 -0.7 0.6v1.9c0 0.3 0.3 0.6 0.6 0.6h0.2c0 0 0 0.1 0 0.1v1.9c0 0.3 0.2 0.6 0.3 0.6h1.3c0.2 0 0.3 -0.3 0.3 -0.6v-1.8c0 0 0 -0.1 0 -0.1h0.2c0.3 0 0.6 -0.3 0.6 -0.6v-2c0.2 -0.3 -0.1 -0.6 -0.4 -0.6z', 'M4 -2c0 0 0.9 -0.7 1.1 -0.8c0.1 -0.1 -0.1 0.5 -0.3 0.7c-0.2 0.2 1.1 1.1 1.1 1.2c0 0.2 -0.2 0.8 -0.4 0.7c-0.1 0 -0.8 -0.3 -1.3 -0.2c-0.5 0.1 -1.3 1.6 -1.5 2c-0.3 0.4 -0.6 0.4 -0.6 0.4c0 0.1 0.3 1.7 0.4 1.8c0.1 0.1 -0.4 0.1 -0.5 0c0 0 -0.6 -1.9 -0.6 -1.9c-0.1 0 -0.3 -0.1 -0.3 -0.1c0 0.1 -0.5 1.4 -0.4 1.6c0.1 0.2 0.1 0.3 0.1 0.3c0 0 -0.4 0 -0.4 0c0 0 -0.2 -0.1 -0.1 -0.3c0 -0.2 0.3 -1.7 0.3 -1.7c0 0 -2.8 -0.9 -2.9 -0.8c-0.2 0.1 -0.4 0.6 -0.4 1c0 0.4 0.5 1.9 0.5 1.9l-0.5 0l-0.6 -2l0 -0.6c0 0 -1 0.8 -1 1c0 0.2 -0.2 1.3 -0.2 1.3c0 0 0.3 0.3 0.2 0.3c0 0 -0.5 0 -0.5 0c0 0 -0.2 -0.2 -0.1 -0.4c0 -0.1 0.2 -1.6 0.2 -1.6c0 0 0.5 -0.4 0.5 -0.5c0 -0.1 0 -2.7 -0.2 -2.7c-0.1 0 -0.4 2 -0.4 2c0 0 0 0.2 -0.2 0.5c-0.1 0.4 -0.2 1.1 -0.2 1.1c0 0 -0.2 -0.1 -0.2 -0.2c0 -0.1 -0.1 -0.7 0 -0.7c0.1 -0.1 0.3 -0.8 0.4 -1.4c0 -0.6 0.2 -1.3 0.4 -1.5c0.1 -0.2 0.6 -0.4 0.6 -0.4z', 'M1.2 -2c0 0 0.7 0 1.2 0.5c0.5 0.5 0.4 0.6 0.5 0.6c0.1 0 0.7 0 0.8 0.1c0.1 0 0.2 0.2 0.2 0.2c0 0 -0.6 0.2 -0.6 0.3c0 0.1 0.4 0.9 0.6 0.9c0.1 0 0.6 0 0.6 0.1c0 0.1 0 0.7 -0.1 0.7c-0.1 0 -1.2 0.4 -1.5 0.5c-0.3 0.1 -1.1 0.5 -1.1 0.7c-0.1 0.2 0.4 1.2 0.4 1.2l-0.4 0c0 0 -0.4 -0.8 -0.4 -0.9c0 -0.1 -0.1 -0.3 -0.1 -0.3l-0.2 0l-0.5 1.3l-0.4 0c0 0 -0.1 -0.4 0 -0.6c0.1 -0.1 0.3 -0.6 0.3 -0.7c0 0 -0.8 0 -1.5 -0.1c-0.7 -0.1 -1.2 -0.3 -1.2 -0.2c0 0.1 -0.4 0.6 -0.5 0.6c0 0 0.3 0.9 0.3 0.9l-0.4 0c0 0 -0.4 -0.5 -0.4 -0.6c0 -0.1 -0.2 -0.6 -0.2 -0.5c0 0 -0.4 0.4 -0.6 0.4c-0.2 0.1 -0.4 0.1 -0.4 0.1c0 0 -0.1 0.6 -0.1 0.6l-0.5 0l0 -1c0 0 0.5 -0.4 0.5 -0.5c0 -0.1 -0.7 -1.2 -0.6 -1.4c0.1 -0.1 0.1 -1.1 0.1 -1.1c0 0 -0.2 0.1 -0.2 0.1c0 0 0 0.9 0 1c0 0.1 -0.2 0.3 -0.3 0.3c-0.1 0 0 -0.5 0 -0.9c0 -0.4 0 -0.4 0.2 -0.6c0.2 -0.2 0.6 -0.3 0.8 -0.8c0.3 -0.5 1 -0.6 1 -0.6z', 'M-4.1 -0.5c0.2 0 0.2 0.2 0.5 0.2c0.3 0 0.3 -0.2 0.5 -0.2c0.2 0 0.2 0.2 0.4 0.2c0.2 0 0.2 -0.2 0.5 -0.2c0.2 0 0.2 0.2 0.4 0.2c0.2 0 0.2 -0.2 0.4 -0.2c0.1 0 0.2 0.2 0.4 0.1c0.2 0 0.2 -0.2 0.4 -0.3c0.1 0 0.1 -0.1 0.4 0c0.3 0 0.3 -0.4 0.6 -0.4c0.3 0 0.6 -0.3 0.7 -0.2c0.1 0.1 1.4 1 1.3 1.4c-0.1 0.4 -0.3 0.3 -0.4 0.3c-0.1 0 -0.5 -0.4 -0.7 -0.2c-0.3 0.2 -0.1 0.4 -0.2 0.6c-0.1 0.1 -0.2 0.2 -0.3 0.4c0 0.2 0.1 0.3 0 0.5c-0.1 0.2 -0.3 0.2 -0.3 0.5c0 0.3 -0.2 0.3 -0.3 0.6c-0.1 0.2 0 0.3 -0.1 0.5c-0.1 0.2 -0.1 0.2 -0.2 0.3c-0.1 0.1 0.3 1.1 0.3 1.1l-0.3 0c0 0 -0.3 -0.9 -0.3 -1c0 -0.1 -0.1 -0.2 -0.3 -0.2c-0.2 0 -0.3 0.1 -0.4 0.4c0 0.3 -0.2 0.8 -0.2 0.8l-0.3 0l0.3 -1c0 0 0.1 -0.6 -0.2 -0.5c-0.3 0.1 -0.2 -0.1 -0.4 -0.1c-0.2 -0.1 -0.3 0.1 -0.4 0c-0.2 -0.1 -0.3 0.1 -0.5 0c-0.2 -0.1 -0.1 0 -0.3 0.3c-0.2 0.3 -0.4 0.3 -0.4 0.3l0.2 1.1l-0.3 0l-0.2 -1.1c0 0 -0.4 -0.6 -0.5 -0.4c-0.1 0.3 -0.1 0.4 -0.3 0.4c-0.1 -0.1 -0.2 1.1 -0.2 1.1l-0.3 0l0.2 -1.1c0 0 -0.3 -0.1 -0.3 -0.5c0 -0.3 0.1 -0.5 0.1 -0.7c0.1 -0.2 -0.1 -1 -0.2 -1.1c-0.1 -0.2 -0.2 -0.8 -0.2 -0.8c0 0 -0.1 -0.5 0.4 -0.8z' ] ) color_scale = alt.Scale( domain=domains, range=['rgb(162,160,152)', 'rgb(194,81,64)', 'rgb(93,93,93)', 'rgb(91,131,149)'] ) alt.Chart(source).mark_point(filled=True, opacity=1, size=100).encode( alt.X('x:O', axis=None), alt.Y('animal:O', axis=None), alt.Row('country:N', header=alt.Header(title='')), alt.Shape('animal:N', legend=None, scale=shape_scale), alt.Color('animal:N', legend=None, scale=color_scale), ).transform_window( x='rank()', groupby=['country', 'animal'] ).properties(width=550, height=140) altair-4.1.0/altair/examples/isotype_emoji.py000066400000000000000000000055521364111050100213120ustar00rootroot00000000000000''' Isotype Visualization with Emoji ================================ Isotype Visualization shows the distribution of animals across UK and US, using unicode emoji marks rather than custom SVG paths (see https://altair-viz.github.io/gallery/isotype.html). This is adapted from Vega-Lite example https://vega.github.io/vega-lite/examples/isotype_bar_chart_emoji.html. ''' # category: case studies import altair as alt import pandas as pd source = pd.DataFrame([ {'country': 'Great Britain', 'animal': 'cattle'}, {'country': 'Great Britain', 'animal': 'cattle'}, {'country': 'Great Britain', 'animal': 'cattle'}, {'country': 'Great Britain', 'animal': 'pigs'}, {'country': 'Great Britain', 'animal': 'pigs'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'Great Britain', 'animal': 'sheep'}, {'country': 'United States', 'animal': 'cattle'}, {'country': 'United States', 'animal': 'cattle'}, {'country': 'United States', 'animal': 'cattle'}, {'country': 'United States', 'animal': 'cattle'}, {'country': 'United States', 'animal': 'cattle'}, {'country': 'United States', 'animal': 'cattle'}, {'country': 'United States', 'animal': 'cattle'}, {'country': 'United States', 'animal': 'cattle'}, {'country': 'United States', 'animal': 'cattle'}, {'country': 'United States', 'animal': 'pigs'}, {'country': 'United States', 'animal': 'pigs'}, {'country': 'United States', 'animal': 'pigs'}, {'country': 'United States', 'animal': 'pigs'}, {'country': 'United States', 'animal': 'pigs'}, {'country': 'United States', 'animal': 'pigs'}, {'country': 'United States', 'animal': 'sheep'}, {'country': 'United States', 'animal': 'sheep'}, {'country': 'United States', 'animal': 'sheep'}, {'country': 'United States', 'animal': 'sheep'}, {'country': 'United States', 'animal': 'sheep'}, {'country': 'United States', 'animal': 'sheep'}, {'country': 'United States', 'animal': 'sheep'} ]) alt.Chart(source).mark_text(size=45, baseline='middle').encode( alt.X('x:O', axis=None), alt.Y('animal:O', axis=None), alt.Row('country:N', header=alt.Header(title='')), alt.Text('emoji:N') ).transform_calculate( emoji="{'cattle': 'ðŸ„', 'pigs': 'ðŸ–', 'sheep': 'ðŸ'}[datum.animal]" ).transform_window( x='rank()', groupby=['country', 'animal'] ).properties(width=550, height=140) altair-4.1.0/altair/examples/isotype_grid.py000066400000000000000000000016521364111050100211310ustar00rootroot00000000000000""" Isotype Grid ------------ This example is a grid of isotype figures. """ # category: other charts import altair as alt import pandas as pd data = pd.DataFrame([dict(id=i) for i in range(1, 101)]) person = ( "M1.7 -1.7h-0.8c0.3 -0.2 0.6 -0.5 0.6 -0.9c0 -0.6 " "-0.4 -1 -1 -1c-0.6 0 -1 0.4 -1 1c0 0.4 0.2 0.7 0.6 " "0.9h-0.8c-0.4 0 -0.7 0.3 -0.7 0.6v1.9c0 0.3 0.3 0.6 " "0.6 0.6h0.2c0 0 0 0.1 0 0.1v1.9c0 0.3 0.2 0.6 0.3 " "0.6h1.3c0.2 0 0.3 -0.3 0.3 -0.6v-1.8c0 0 0 -0.1 0 " "-0.1h0.2c0.3 0 0.6 -0.3 0.6 -0.6v-2c0.2 -0.3 -0.1 " "-0.6 -0.4 -0.6z" ) alt.Chart(data).transform_calculate( row="ceil(datum.id/10)" ).transform_calculate( col="datum.id - datum.row*10" ).mark_point( filled=True, size=50 ).encode( x=alt.X("col:O", axis=None), y=alt.Y("row:O", axis=None), shape=alt.ShapeValue(person) ).properties( width=400, height=400 ).configure_view( strokeWidth=0 ) altair-4.1.0/altair/examples/layer_line_color_rule.py000066400000000000000000000011631364111050100227750ustar00rootroot00000000000000""" Line Chart with Layered Aggregates ---------------------------------- This example shows how to make a multi-series line chart of the daily closing stock prices for AAPL, AMZN, GOOG, IBM, and MSFT between 2000 and 2010, along with a layered rule showing the average values. """ # category: line charts import altair as alt from vega_datasets import data source = data.stocks() base = alt.Chart(source).properties(width=550) line = base.mark_line().encode( x='date', y='price', color='symbol' ) rule = base.mark_rule().encode( y='average(price)', color='symbol', size=alt.value(2) ) line + rule altair-4.1.0/altair/examples/layered_area_chart.py000066400000000000000000000005131364111050100222210ustar00rootroot00000000000000""" Layered Area Chart ------------------ This example shows a layered area chart. """ # category: area charts import altair as alt from vega_datasets import data source = data.iowa_electricity() alt.Chart(source).mark_area(opacity=0.3).encode( x="year:T", y=alt.Y("net_generation:Q", stack=None), color="source:N" ) altair-4.1.0/altair/examples/layered_bar_chart.py000066400000000000000000000005551364111050100220630ustar00rootroot00000000000000""" Layered Bar Chart ----------------- This example shows a segmented bar chart that is layered rather than stacked. """ # category: bar charts import altair as alt from vega_datasets import data source = data.iowa_electricity() alt.Chart(source).mark_bar(opacity=0.7).encode( x='year:O', y=alt.Y('net_generation:Q', stack=None), color="source", ) altair-4.1.0/altair/examples/layered_chart_bar_mark.py000066400000000000000000000011671364111050100230750ustar00rootroot00000000000000""" Bar and Tick Chart ------------------ How to layer a tick chart on top of a bar chart. """ # category: bar charts import altair as alt import pandas as pd source = pd.DataFrame({ 'project': ['a', 'b', 'c', 'd', 'e', 'f', 'g'], 'score': [25, 57, 23, 19, 8, 47, 8], 'goal': [25, 47, 30, 27, 38, 19, 4] }) bar = alt.Chart(source).mark_bar().encode( x='project', y='score' ).properties( width=alt.Step(40) # controls width of bar. ) tick = alt.Chart(source).mark_tick( color='red', thickness=2, size=40 * 0.9, # controls width of tick. ).encode( x='project', y='goal' ) bar + tick altair-4.1.0/altair/examples/layered_chart_with_dual_axis.py000066400000000000000000000014231364111050100243160ustar00rootroot00000000000000""" Layered chart with Dual-Axis ---------------------------- This example shows how to create a second independent y axis. """ # category: other charts import altair as alt from vega_datasets import data source = data.seattle_weather() base = alt.Chart(source).encode( alt.X('month(date):T', axis=alt.Axis(title=None)) ) area = base.mark_area(opacity=0.3, color='#57A44C').encode( alt.Y('average(temp_max)', axis=alt.Axis(title='Avg. Temperature (°C)', titleColor='#57A44C')), alt.Y2('average(temp_min)') ) line = base.mark_line(stroke='#5276A7', interpolate='monotone').encode( alt.Y('average(precipitation)', axis=alt.Axis(title='Precipitation (inches)', titleColor='#5276A7')) ) alt.layer(area, line).resolve_scale( y = 'independent' ) altair-4.1.0/altair/examples/layered_heatmap_text.py000066400000000000000000000016311364111050100226150ustar00rootroot00000000000000""" Text over a Heatmap ------------------- An example of a layered chart of text over a heatmap using the cars dataset. """ # category: other charts import altair as alt from vega_datasets import data source = data.cars() # Configure common options base = alt.Chart(source).transform_aggregate( num_cars='count()', groupby=['Origin', 'Cylinders'] ).encode( alt.X('Cylinders:O', scale=alt.Scale(paddingInner=0)), alt.Y('Origin:O', scale=alt.Scale(paddingInner=0)), ) # Configure heatmap heatmap = base.mark_rect().encode( color=alt.Color('num_cars:Q', scale=alt.Scale(scheme='viridis'), legend=alt.Legend(direction='horizontal') ) ) # Configure text text = base.mark_text(baseline='middle').encode( text='num_cars:Q', color=alt.condition( alt.datum.num_cars > 100, alt.value('black'), alt.value('white') ) ) # Draw the chart heatmap + textaltair-4.1.0/altair/examples/layered_histogram.py000066400000000000000000000012751364111050100221330ustar00rootroot00000000000000""" Layered Histogram ================= This example shows how to use opacity to make a layered histogram in Altair. """ # category: histograms import pandas as pd import altair as alt import numpy as np np.random.seed(42) # Generating Data source = pd.DataFrame({ 'Trial A': np.random.normal(0, 0.8, 1000), 'Trial B': np.random.normal(-2, 1, 1000), 'Trial C': np.random.normal(3, 2, 1000) }) alt.Chart(source).transform_fold( ['Trial A', 'Trial B', 'Trial C'], as_=['Experiment', 'Measurement'] ).mark_area( opacity=0.3, interpolate='step' ).encode( alt.X('Measurement:Q', bin=alt.Bin(maxbins=100)), alt.Y('count()', stack=None), alt.Color('Experiment:N') ) altair-4.1.0/altair/examples/line_chart_with_generator.py000066400000000000000000000007171364111050100236420ustar00rootroot00000000000000""" Line Chart with Sequence Generator ---------------------------------- This examples shows how to create multiple lines using the sequence generator. """ # category: line charts import altair as alt source = alt.sequence(start=0, stop=12.7, step=0.1, as_='x') alt.Chart(source).mark_line().transform_calculate( sin='sin(datum.x)', cos='cos(datum.x)' ).transform_fold( ['sin', 'cos'] ).encode( x='x:Q', y='value:Q', color='key:N' ) altair-4.1.0/altair/examples/line_chart_with_points.py000066400000000000000000000005531364111050100231660ustar00rootroot00000000000000""" Line Chart with Points ---------------------- This chart shows a simple line chart with points marking each value. """ # category: line charts import altair as alt import numpy as np import pandas as pd x = np.arange(100) source = pd.DataFrame({ 'x': x, 'f(x)': np.sin(x / 5) }) alt.Chart(source).mark_line(point=True).encode( x='x', y='f(x)' ) altair-4.1.0/altair/examples/line_percent.py000066400000000000000000000006621364111050100210770ustar00rootroot00000000000000""" Line Chart with Percent axis ---------------------------- This example shows how to format the tick labels of the y-axis of a chart as percentages. """ # category: line charts import altair as alt from vega_datasets import data source = data.jobs.url alt.Chart(source).mark_line().encode( alt.X('year:O'), alt.Y('perc:Q', axis=alt.Axis(format='%')), color='sex:N' ).transform_filter( alt.datum.job == 'Welder' ) altair-4.1.0/altair/examples/line_with_ci.py000066400000000000000000000007661364111050100210720ustar00rootroot00000000000000""" Line Chart with Confidence Interval Band ---------------------------------------- How to make a line chart with a bootstrapped 95% confidence interval band. """ # category: line charts import altair as alt from vega_datasets import data source = data.cars() line = alt.Chart(source).mark_line().encode( x='Year', y='mean(Miles_per_Gallon)' ) band = alt.Chart(source).mark_errorband(extent='ci').encode( x='Year', y=alt.Y('Miles_per_Gallon', title='Miles/Gallon'), ) band + line altair-4.1.0/altair/examples/london_tube.py000066400000000000000000000034431364111050100207400ustar00rootroot00000000000000""" London Tube Lines ================= This example shows the London tube lines against the background of the borough boundaries. It is based on the vega-lite example at https://vega.github.io/vega-lite/examples/geo_layer_line_london.html. """ # category: case studies import altair as alt from vega_datasets import data boroughs = alt.topo_feature(data.londonBoroughs.url, 'boroughs') tubelines = alt.topo_feature(data.londonTubeLines.url, 'line') centroids = data.londonCentroids.url background = alt.Chart(boroughs).mark_geoshape( stroke='white', strokeWidth=2 ).encode( color=alt.value('#eee'), ).properties( width=700, height=500 ) labels = alt.Chart(centroids).mark_text().encode( longitude='cx:Q', latitude='cy:Q', text='bLabel:N', size=alt.value(8), opacity=alt.value(0.6) ).transform_calculate( "bLabel", "indexof (datum.name,' ') > 0 ? substring(datum.name,0,indexof(datum.name, ' ')) : datum.name" ) line_scale = alt.Scale(domain=["Bakerloo", "Central", "Circle", "District", "DLR", "Hammersmith & City", "Jubilee", "Metropolitan", "Northern", "Piccadilly", "Victoria", "Waterloo & City" ], range=["rgb(137,78,36)", "rgb(220,36,30)", "rgb(255,206,0)", "rgb(1,114,41)", "rgb(0,175,173)", "rgb(215,153,175)", "rgb(106,114,120)", "rgb(114,17,84)", "rgb(0,0,0)", "rgb(0,24,168)", "rgb(0,160,226)", "rgb(106,187,170)"]) lines = alt.Chart(tubelines).mark_geoshape( filled=False, strokeWidth=2 ).encode( alt.Color( 'id:N', legend=alt.Legend( title=None, orient='bottom-right', offset=0 ) ) ) background + labels + lines altair-4.1.0/altair/examples/multi_series_line.py000066400000000000000000000006461364111050100221450ustar00rootroot00000000000000""" Multi Series Line Chart ----------------------- This example shows how to make a multi series line chart of the daily closing stock prices for AAPL, AMZN, GOOG, IBM, and MSFT between 2000 and 2010. """ # category: line charts import altair as alt from vega_datasets import data source = data.stocks() alt.Chart(source).mark_line().encode( x='date', y='price', color='symbol', strokeDash='symbol', ) altair-4.1.0/altair/examples/multifeature_scatter_plot.py000066400000000000000000000006751364111050100237250ustar00rootroot00000000000000""" Multifeature Scatter Plot ========================= This example shows how to make a scatter plot with multiple feature encodings. """ # category: scatter plots import altair as alt from vega_datasets import data source = data.iris() alt.Chart(source).mark_circle().encode( alt.X('sepalLength', scale=alt.Scale(zero=False)), alt.Y('sepalWidth', scale=alt.Scale(zero=False, padding=1)), color='species', size='petalWidth' ) altair-4.1.0/altair/examples/multiline_highlight.py000066400000000000000000000015571364111050100224650ustar00rootroot00000000000000""" Multi-Line Highlight ==================== This multi-line chart uses an invisible Voronoi tessellation to handle mouseover to identify the nearest point and then highlight the line on which the point falls. It is adapted from the Vega-Lite example found at https://bl.ocks.org/amitkaps/fe4238e716db53930b2f1a70d3401701 """ # category: interactive charts import altair as alt from vega_datasets import data source = data.stocks() highlight = alt.selection(type='single', on='mouseover', fields=['symbol'], nearest=True) base = alt.Chart(source).encode( x='date:T', y='price:Q', color='symbol:N' ) points = base.mark_circle().encode( opacity=alt.value(0) ).add_selection( highlight ).properties( width=600 ) lines = base.mark_line().encode( size=alt.condition(~highlight, alt.value(1), alt.value(3)) ) points + lines altair-4.1.0/altair/examples/multiline_tooltip.py000066400000000000000000000041421364111050100222010ustar00rootroot00000000000000""" Multi-Line Tooltip ================== This example shows how you can use selections and layers to create a tooltip-like behavior tied to the x position of the cursor. If you are looking for more standard tooltips, it is recommended to use the tooltip encoding channel as shown in the `Scatter Plot With Tooltips `_ example. The following example employs a little trick to isolate the x-position of the cursor: we add some transparent points with only an x encoding (no y encoding) and tie a *nearest* selection to these, tied to the "x" field. """ # category: interactive charts import altair as alt import pandas as pd import numpy as np np.random.seed(42) source = pd.DataFrame(np.cumsum(np.random.randn(100, 3), 0).round(2), columns=['A', 'B', 'C'], index=pd.RangeIndex(100, name='x')) source = source.reset_index().melt('x', var_name='category', value_name='y') # Create a selection that chooses the nearest point & selects based on x-value nearest = alt.selection(type='single', nearest=True, on='mouseover', fields=['x'], empty='none') # The basic line line = alt.Chart(source).mark_line(interpolate='basis').encode( x='x:Q', y='y:Q', color='category:N' ) # Transparent selectors across the chart. This is what tells us # the x-value of the cursor selectors = alt.Chart(source).mark_point().encode( x='x:Q', opacity=alt.value(0), ).add_selection( nearest ) # Draw points on the line, and highlight based on selection points = line.mark_point().encode( opacity=alt.condition(nearest, alt.value(1), alt.value(0)) ) # Draw text labels near the points, and highlight based on selection text = line.mark_text(align='left', dx=5, dy=-5).encode( text=alt.condition(nearest, 'y:Q', alt.value(' ')) ) # Draw a rule at the location of the selection rules = alt.Chart(source).mark_rule(color='gray').encode( x='x:Q', ).transform_filter( nearest ) # Put the five layers into a chart and bind the data alt.layer( line, selectors, points, rules, text ).properties( width=600, height=300 ) altair-4.1.0/altair/examples/multiple_interactions.py000066400000000000000000000057641364111050100230550ustar00rootroot00000000000000""" Multiple Interactions ===================== This example shows how multiple user inputs can be layered onto a chart. The four inputs have functionality as follows: * Dropdown: Filters the movies by genre * Radio Buttons: Highlights certain films by Worldwide Gross * Mouse Drag and Scroll: Zooms the x and y scales to allow for panning. """ # category: interactive charts import altair as alt from vega_datasets import data movies = alt.UrlData( data.movies.url, format=alt.DataFormat(parse={"Release_Date":"date"}) ) ratings = ['G', 'NC-17', 'PG', 'PG-13', 'R'] genres = ['Action', 'Adventure', 'Black Comedy', 'Comedy', 'Concert/Performance', 'Documentary', 'Drama', 'Horror', 'Musical', 'Romantic Comedy', 'Thriller/Suspense', 'Western'] base = alt.Chart(movies, width=200, height=200).mark_point(filled=True).transform_calculate( Rounded_IMDB_Rating = "floor(datum.IMDB_Rating)", Hundred_Million_Production = "datum.Production_Budget > 100000000.0 ? 100 : 10", Release_Year = "year(datum.Release_Date)" ).transform_filter( alt.datum.IMDB_Rating > 0 ).transform_filter( alt.FieldOneOfPredicate(field='MPAA_Rating', oneOf=ratings) ).encode( x=alt.X('Worldwide_Gross:Q', scale=alt.Scale(domain=(100000,10**9), clamp=True)), y='IMDB_Rating:Q', tooltip="Title:N" ) # A slider filter year_slider = alt.binding_range(min=1969, max=2018, step=1) slider_selection = alt.selection_single(bind=year_slider, fields=['Release_Year'], name="Release Year_") filter_year = base.add_selection( slider_selection ).transform_filter( slider_selection ).properties(title="Slider Filtering") # A dropdown filter genre_dropdown = alt.binding_select(options=genres) genre_select = alt.selection_single(fields=['Major_Genre'], bind=genre_dropdown, name="Genre") filter_genres = base.add_selection( genre_select ).transform_filter( genre_select ).properties(title="Dropdown Filtering") #color changing marks rating_radio = alt.binding_radio(options=ratings) rating_select = alt.selection_single(fields=['MPAA_Rating'], bind=rating_radio, name="Rating") rating_color_condition = alt.condition(rating_select, alt.Color('MPAA_Rating:N', legend=None), alt.value('lightgray')) highlight_ratings = base.add_selection( rating_select ).encode( color=rating_color_condition ).properties(title="Radio Button Highlighting") # Boolean selection for format changes input_checkbox = alt.binding_checkbox() checkbox_selection = alt.selection_single(bind=input_checkbox, name="Big Budget Films") size_checkbox_condition = alt.condition(checkbox_selection, alt.SizeValue(25), alt.Size('Hundred_Million_Production:Q') ) budget_sizing = base.add_selection( checkbox_selection ).encode( size=size_checkbox_condition ).properties(title="Checkbox Formatting") ( filter_year | filter_genres) & (highlight_ratings | budget_sizing ) altair-4.1.0/altair/examples/multiple_marks.py000066400000000000000000000005301364111050100214520ustar00rootroot00000000000000""" Multiple Marks ============== This example demonstrates creating a single chart with multiple markers representing the same data. """ # category: other charts import altair as alt from vega_datasets import data source = data.stocks() alt.Chart(source).mark_line(point=True).encode( x='date:T', y='price:Q', color='symbol:N' ) altair-4.1.0/altair/examples/natural_disasters.py000066400000000000000000000012471364111050100221570ustar00rootroot00000000000000""" Natural Disasters ----------------- This example shows a visualization of global deaths from natural disasters. """ # category: case studies import altair as alt from vega_datasets import data source = data.disasters.url alt.Chart(source).mark_circle( opacity=0.8, stroke='black', strokeWidth=1 ).encode( alt.X('Year:O', axis=alt.Axis(labelAngle=0)), alt.Y('Entity:N'), alt.Size('Deaths:Q', scale=alt.Scale(range=[0, 4000]), legend=alt.Legend(title='Annual Global Deaths') ), alt.Color('Entity:N', legend=None) ).properties( width=450, height=320 ).transform_filter( alt.datum.Entity != 'All natural disasters' ) altair-4.1.0/altair/examples/normalized_stacked_area_chart.py000066400000000000000000000005641364111050100244440ustar00rootroot00000000000000""" Normalized Stacked Area Chart ----------------------------- This example shows how to make a normalized stacked area chart. """ # category: area charts import altair as alt from vega_datasets import data source = data.iowa_electricity() alt.Chart(source).mark_area().encode( x="year:T", y=alt.Y("net_generation:Q", stack="normalize"), color="source:N" ) altair-4.1.0/altair/examples/normalized_stacked_bar_chart.py000066400000000000000000000006611364111050100242760ustar00rootroot00000000000000""" Normalized Stacked Bar Chart ---------------------------- This is an example of a normalized stacked bar chart using data which contains crop yields over different regions and different years in the 1930s. """ # category: bar charts import altair as alt from vega_datasets import data source = data.barley() alt.Chart(source).mark_bar().encode( x=alt.X('sum(yield)', stack="normalize"), y='variety', color='site' ) altair-4.1.0/altair/examples/normed_parallel_coordinates.py000066400000000000000000000024241364111050100241600ustar00rootroot00000000000000""" Normalized Parallel Coordinates Example --------------------------------------- A `Parallel Coordinates `_ chart is a chart that lets you visualize the individual data points by drawing a single line for each of them. Such a chart can be created in Altair by first transforming the data into a suitable representation. This example shows a modified parallel coordinates chart with the Iris dataset, where the y-axis shows the value after min-max rather than the raw value. It's a simplified Altair version of `the VegaLite version `_ """ # category: other charts import altair as alt from vega_datasets import data from altair import datum source = data.iris() alt.Chart(source).transform_window( index='count()' ).transform_fold( ['petalLength', 'petalWidth', 'sepalLength', 'sepalWidth'] ).transform_joinaggregate( min='min(value)', max='max(value)', groupby=['key'] ).transform_calculate( minmax_value=(datum.value-datum.min)/(datum.max-datum.min), mid=(datum.min+datum.max)/2 ).mark_line().encode( x='key:N', y='minmax_value:Q', color='species:N', detail='index:N', opacity=alt.value(0.5) ).properties(width=500) altair-4.1.0/altair/examples/one_dot_per_zipcode.py000066400000000000000000000011461364111050100224400ustar00rootroot00000000000000""" One Dot Per Zipcode ----------------------- This example shows a geographical plot with one dot per zipcode. """ # category: case studies import altair as alt from vega_datasets import data # Since the data is more than 5,000 rows we'll import it from a URL source = data.zipcodes.url alt.Chart(source).transform_calculate( "leading digit", alt.expr.substring(alt.datum.zip_code, 0, 1) ).mark_circle(size=3).encode( longitude='longitude:Q', latitude='latitude:Q', color='leading digit:N', tooltip='zip_code:N' ).project( type='albersUsa' ).properties( width=650, height=400 ) altair-4.1.0/altair/examples/parallel_coordinates.py000066400000000000000000000014621364111050100226150ustar00rootroot00000000000000""" Parallel Coordinates Example ---------------------------- A `Parallel Coordinates `_ chart is a chart that lets you visualize the individual data points by drawing a single line for each of them. Such a chart can be created in Altair by first transforming the data into a suitable representation. This example shows a parallel coordinates chart with the Iris dataset. """ # category: other charts import altair as alt from vega_datasets import data source = data.iris() alt.Chart(source).transform_window( index='count()' ).transform_fold( ['petalLength', 'petalWidth', 'sepalLength', 'sepalWidth'] ).mark_line().encode( x='key:N', y='value:Q', color='species:N', detail='index:N', opacity=alt.value(0.5) ).properties(width=500) altair-4.1.0/altair/examples/percentage_of_total.py000066400000000000000000000011671364111050100224350ustar00rootroot00000000000000""" Calculating Percentage of Total ------------------------------- This chart demonstrates how to use a joinaggregate transform to display data values as a percentage of total. """ # category: bar charts import altair as alt import pandas as pd source = pd.DataFrame({'Activity': ['Sleeping', 'Eating', 'TV', 'Work', 'Exercise'], 'Time': [8, 2, 4, 8, 2]}) alt.Chart(source).transform_joinaggregate( TotalTime='sum(Time)', ).transform_calculate( PercentOfTotal="datum.Time / datum.TotalTime" ).mark_bar().encode( alt.X('PercentOfTotal:Q', axis=alt.Axis(format='.0%')), y='Activity:N' ) altair-4.1.0/altair/examples/poly_fit_regression.py000066400000000000000000000016211364111050100225110ustar00rootroot00000000000000""" Polynomial Fit Plot with Regression Transform ============================================= This example shows how to overlay data with multiple fitted polynomials using the regression transform. """ # category: scatter plots import numpy as np import pandas as pd import altair as alt # Generate some random data rng = np.random.RandomState(1) x = rng.rand(40) ** 2 y = 10 - 1.0 / (x + 0.1) + rng.randn(40) source = pd.DataFrame({"x": x, "y": y}) # Define the degree of the polynomial fits degree_list = [1, 3, 5] base = alt.Chart(source).mark_circle(color="black").encode( alt.X("x"), alt.Y("y") ) polynomial_fit = [ base.transform_regression( "x", "y", method="poly", order=order, as_=["x", str(order)] ) .mark_line() .transform_fold([str(order)], as_=["degree", "y"]) .encode(alt.Color("degree:N")) for order in degree_list ] alt.layer(base, *polynomial_fit) altair-4.1.0/altair/examples/ranged_dot_plot.py000066400000000000000000000020051364111050100215650ustar00rootroot00000000000000""" Ranged Dot Plot ----------------- This example shows a ranged dot plot that uses 'layer' to convey changing life expectancy for the five most populous countries (between 1955 and 2000). """ # category: other charts import altair as alt from vega_datasets import data source = data.countries.url chart = alt.layer( data=source ).transform_filter( filter={"field": 'country', "oneOf": ["China", "India", "United States", "Indonesia", "Brazil"]} ).transform_filter( filter={'field': 'year', "oneOf": [1955, 2000]} ) chart += alt.Chart().mark_line(color='#db646f').encode( x='life_expect:Q', y='country:N', detail='country:N' ) # Add points for life expectancy in 1955 & 2000 chart += alt.Chart().mark_point( size=100, opacity=1, filled=True ).encode( x='life_expect:Q', y='country:N', color=alt.Color('year:O', scale=alt.Scale( domain=['1955', '2000'], range=['#e6959c', '#911a24'] ) ) ).interactive() chart altair-4.1.0/altair/examples/ridgeline_plot.py000066400000000000000000000031111364111050100214200ustar00rootroot00000000000000""" Ridgeline plot Example ---------------------- A `Ridgeline plot `_ chart is a chart that lets you visualize distribution of a numeric value for several groups. Such a chart can be created in Altair by first transforming the data into a suitable representation. """ # category: other charts import altair as alt from vega_datasets import data source = data.seattle_weather.url step = 20 overlap = 1 alt.Chart(source, height=step).transform_timeunit( Month='month(date)' ).transform_joinaggregate( mean_temp='mean(temp_max)', groupby=['Month'] ).transform_bin( ['bin_max', 'bin_min'], 'temp_max' ).transform_aggregate( value='count()', groupby=['Month', 'mean_temp', 'bin_min', 'bin_max'] ).transform_impute( impute='value', groupby=['Month', 'mean_temp'], key='bin_min', value=0 ).mark_area( interpolate='monotone', fillOpacity=0.8, stroke='lightgray', strokeWidth=0.5 ).encode( alt.X('bin_min:Q', bin='binned', title='Maximum Daily Temperature (C)'), alt.Y( 'value:Q', scale=alt.Scale(range=[step, -step * overlap]), axis=None ), alt.Fill( 'mean_temp:Q', legend=None, scale=alt.Scale(domain=[30, 5], scheme='redyellowblue') ) ).facet( row=alt.Row( 'Month:T', title=None, header=alt.Header(labelAngle=0, labelAlign='right', format='%B') ) ).properties( title='Seattle Weather', bounds='flush' ).configure_facet( spacing=0 ).configure_view( stroke=None ).configure_title( anchor='end' ) altair-4.1.0/altair/examples/scatter_href.py000066400000000000000000000011161364111050100210740ustar00rootroot00000000000000""" Scatter Plot with Href ---------------------- This example shows a scatter plot with an ``href`` encoding constructed from the car name. With this encoding, you can click on any of the points to open a google search for the car name. """ # category: scatter plots import altair as alt from vega_datasets import data source = data.cars() alt.Chart(source).transform_calculate( url='https://www.google.com/search?q=' + alt.datum.Name ).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color='Origin:N', href='url:N', tooltip=['Name:N', 'url:N'] ) altair-4.1.0/altair/examples/scatter_linked_brush.py000066400000000000000000000012011364111050100226140ustar00rootroot00000000000000""" Multi-panel Scatter Plot with Linked Brushing --------------------------------------------- This is an example of using an interval selection to control the color of points across multiple panels. """ # category: interactive charts import altair as alt from vega_datasets import data source = data.cars() brush = alt.selection(type='interval', resolve='global') base = alt.Chart(source).mark_point().encode( y='Miles_per_Gallon', color=alt.condition(brush, 'Origin', alt.ColorValue('gray')), ).add_selection( brush ).properties( width=250, height=250 ) base.encode(x='Horsepower') | base.encode(x='Acceleration') altair-4.1.0/altair/examples/scatter_linked_table.py000066400000000000000000000025221364111050100225670ustar00rootroot00000000000000""" Brushing Scatter Plot to show data on a table --------------------------------------------- A scatter plot of the cars dataset, with data tables for horsepower, MPG, and origin. The tables update toreflect the selection on the scatter plot. """ # category: scatter plots import altair as alt from vega_datasets import data source = data.cars() # Brush for selection brush = alt.selection(type='interval') # Scatter Plot points = alt.Chart(source).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color=alt.condition(brush, 'Cylinders:O', alt.value('grey')) ).add_selection(brush) # Base chart for data tables ranked_text = alt.Chart(source).mark_text().encode( y=alt.Y('row_number:O',axis=None) ).transform_window( row_number='row_number()' ).transform_filter( brush ).transform_window( rank='rank(row_number)' ).transform_filter( alt.datum.rank<20 ) # Data Tables horsepower = ranked_text.encode(text='Horsepower:N').properties(title='Horsepower') mpg = ranked_text.encode(text='Miles_per_Gallon:N').properties(title='MPG') origin = ranked_text.encode(text='Origin:N').properties(title='Origin') text = alt.hconcat(horsepower, mpg, origin) # Combine data tables # Build chart alt.hconcat( points, text ).resolve_legend( color="independent" ) altair-4.1.0/altair/examples/scatter_marginal_hist.py000066400000000000000000000026041364111050100227740ustar00rootroot00000000000000""" Facetted Scatterplot with marginal histograms --------------------------------------------- This example demonstrates how to generate a facetted scatterplot, with marginal facetted histograms, and how to share their respective - x,some y-limits. """ # category: other charts import altair as alt from vega_datasets import data source = data.iris() base = alt.Chart(source) xscale = alt.Scale(domain=(4.0, 8.0)) yscale = alt.Scale(domain=(1.9, 4.55)) area_args = {'opacity': .3, 'interpolate': 'step'} points = base.mark_circle().encode( alt.X('sepalLength', scale=xscale), alt.Y('sepalWidth', scale=yscale), color='species', ) top_hist = base.mark_area(**area_args).encode( alt.X('sepalLength:Q', # when using bins, the axis scale is set through # the bin extent, so we do not specify the scale here # (which would be ignored anyway) bin=alt.Bin(maxbins=20, extent=xscale.domain), stack=None, title='' ), alt.Y('count()', stack=None, title=''), alt.Color('species:N'), ).properties(height=60) right_hist = base.mark_area(**area_args).encode( alt.Y('sepalWidth:Q', bin=alt.Bin(maxbins=20, extent=yscale.domain), stack=None, title='', ), alt.X('count()', stack=None, title=''), alt.Color('species:N'), ).properties(width=60) top_hist & (points | right_hist) altair-4.1.0/altair/examples/scatter_matrix.py000066400000000000000000000011341364111050100214540ustar00rootroot00000000000000""" Scatter Matrix -------------- An example of using a RepeatChart to construct a multi-panel scatter plot with linked panning and zooming. """ # category: scatter plots import altair as alt from vega_datasets import data source = data.cars() alt.Chart(source).mark_circle().encode( alt.X(alt.repeat("column"), type='quantitative'), alt.Y(alt.repeat("row"), type='quantitative'), color='Origin:N' ).properties( width=150, height=150 ).repeat( row=['Horsepower', 'Acceleration', 'Miles_per_Gallon'], column=['Miles_per_Gallon', 'Acceleration', 'Horsepower'] ).interactive() altair-4.1.0/altair/examples/scatter_qq.py000066400000000000000000000010231364111050100205660ustar00rootroot00000000000000""" Quantile-Quantile Plot ---------------------- A quantile-quantile plot comparing input data to theoretical distributions. """ # category: scatter plots import altair as alt from vega_datasets import data source = data.normal_2d.url base = alt.Chart(source).transform_quantile( 'u', step=0.01, as_ = ['p', 'v'] ).transform_calculate( uniform = 'quantileUniform(datum.p)', normal = 'quantileNormal(datum.p)' ).mark_point().encode( alt.Y('v:Q') ) base.encode(x='uniform:Q') | base.encode(x='normal:Q') altair-4.1.0/altair/examples/scatter_tooltips.py000066400000000000000000000010441364111050100220250ustar00rootroot00000000000000""" Simple Scatter Plot with Tooltips --------------------------------- A scatter plot of the cars dataset, with tooltips showing selected column values when you hover over points. We make the points larger so that it is easier to hover over them. """ # category: simple charts import altair as alt from vega_datasets import data source = data.cars() alt.Chart(source).mark_circle(size=60).encode( x='Horsepower', y='Miles_per_Gallon', color='Origin', tooltip=['Name', 'Origin', 'Horsepower', 'Miles_per_Gallon'] ).interactive() altair-4.1.0/altair/examples/scatter_with_histogram.py000066400000000000000000000026711364111050100232070ustar00rootroot00000000000000""" Scatter Plot and Histogram with Interval Selection ================================================== This example shows how to link a scatter plot and a histogram together such that an interval selection in the histogram will plot the selected values in the scatter plot. Note that both subplots need to know about the `mbin` field created by the `transform_bin` method. In order to achieve this, the data is not passed to the `Chart()` instances creating the subplots, but directly in the `hconcat()` function, which joins the two plots together. """ # category: interactive charts import altair as alt import pandas as pd import numpy as np x = np.random.normal(size=100) y = np.random.normal(size=100) m = np.random.normal(15, 1, size=100) source = pd.DataFrame({"x": x, "y":y, "m":m}) # interval selection in the scatter plot pts = alt.selection(type="interval", encodings=["x"]) # left panel: scatter plot points = alt.Chart().mark_point(filled=True, color="black").encode( x='x', y='y' ).transform_filter( pts ).properties( width=300, height=300 ) # right panel: histogram mag = alt.Chart().mark_bar().encode( x='mbin:N', y="count()", color=alt.condition(pts, alt.value("black"), alt.value("lightgray")) ).properties( width=300, height=300 ).add_selection(pts) # build the chart: alt.hconcat( points, mag, data=source ).transform_bin( "mbin", field="m", bin=alt.Bin(maxbins=20) ) altair-4.1.0/altair/examples/scatter_with_labels.py000066400000000000000000000010171364111050100224450ustar00rootroot00000000000000""" Simple Scatter Plot with Labels =============================== This example shows a basic scatter plot with labels created with Altair. """ # category: scatter plots import altair as alt import pandas as pd source = pd.DataFrame({ 'x': [1, 3, 5, 7, 9], 'y': [1, 3, 5, 7, 9], 'label': ['A', 'B', 'C', 'D', 'E'] }) points = alt.Chart(source).mark_point().encode( x='x:Q', y='y:Q' ) text = points.mark_text( align='left', baseline='middle', dx=7 ).encode( text='label' ) points + text altair-4.1.0/altair/examples/scatter_with_layered_histogram.py000066400000000000000000000036561364111050100247200ustar00rootroot00000000000000""" Interactive Scatter Plot and Linked Layered Histogram ===================================================== This example shows how to link a scatter plot and a histogram together such that clicking on a point in the scatter plot will isolate the distribution corresponding to that point, and vice versa. """ # category: interactive charts import altair as alt import pandas as pd import numpy as np # generate fake data source = pd.DataFrame({'gender': ['M']*1000 + ['F']*1000, 'height':np.concatenate((np.random.normal(69, 7, 1000), np.random.normal(64, 6, 1000))), 'weight': np.concatenate((np.random.normal(195.8, 144, 1000), np.random.normal(167, 100, 1000))), 'age': np.concatenate((np.random.normal(45, 8, 1000), np.random.normal(51, 6, 1000))) }) selector = alt.selection_single(empty='all', fields=['gender']) color_scale = alt.Scale(domain=['M', 'F'], range=['#1FC3AA', '#8624F5']) base = alt.Chart(source).properties( width=250, height=250 ).add_selection(selector) points = base.mark_point(filled=True, size=200).encode( x=alt.X('mean(height):Q', scale=alt.Scale(domain=[0,84])), y=alt.Y('mean(weight):Q', scale=alt.Scale(domain=[0,250])), color=alt.condition(selector, 'gender:N', alt.value('lightgray'), scale=color_scale), ) hists = base.mark_bar(opacity=0.5, thickness=100).encode( x=alt.X('age', bin=alt.Bin(step=5), # step keeps bin size the same scale=alt.Scale(domain=[0,100])), y=alt.Y('count()', stack=None, scale=alt.Scale(domain=[0,350])), color=alt.Color('gender:N', scale=color_scale) ).transform_filter( selector ) points | hists altair-4.1.0/altair/examples/scatter_with_loess.py000066400000000000000000000013631364111050100223340ustar00rootroot00000000000000""" Scatter Plot with LOESS Lines ----------------------------- This example shows how to add a trend line to a scatter plot using the LOESS transform (LOcally Estimated Scatterplot Smoothing). """ # category: scatter plots import altair as alt import pandas as pd import numpy as np np.random.seed(1) source = pd.DataFrame({ 'x': np.arange(100), 'A': np.random.randn(100).cumsum(), 'B': np.random.randn(100).cumsum(), 'C': np.random.randn(100).cumsum(), }) base = alt.Chart(source).mark_circle(opacity=0.5).transform_fold( fold=['A', 'B', 'C'], as_=['category', 'y'] ).encode( alt.X('x:Q'), alt.Y('y:Q'), alt.Color('category:N') ) base + base.transform_loess('x', 'y', groupby=['category']).mark_line(size=4) altair-4.1.0/altair/examples/scatter_with_minimap.py000066400000000000000000000022451364111050100226410ustar00rootroot00000000000000""" Scatter Plot with Minimap ------------------------- This example shows how to create a miniature version of a plot such that creating a selection in the miniature version adjusts the axis limits in another, more detailed view. """ # category: scatter plots import altair as alt from vega_datasets import data source = data.seattle_weather() zoom = alt.selection_interval(encodings=["x", "y"]) minimap = ( alt.Chart(source) .mark_point() .add_selection(zoom) .encode( x="date:T", y="temp_max:Q", color=alt.condition(zoom, "weather", alt.value("lightgray")), ) .properties( width=200, height=200, title="Minimap -- click and drag to zoom in the detail view", ) ) detail = ( alt.Chart(source) .mark_point() .encode( x=alt.X( "date:T", scale=alt.Scale(domain={"selection": zoom.name, "encoding": "x"}) ), y=alt.Y( "temp_max:Q", scale=alt.Scale(domain={"selection": zoom.name, "encoding": "y"}), ), color="weather", ) .properties(width=600, height=400, title="Seattle weather -- detail view") ) detail | minimap altair-4.1.0/altair/examples/scatter_with_rolling_mean.py000066400000000000000000000012501364111050100236500ustar00rootroot00000000000000""" Scatter Plot with Rolling Mean ------------------------------ A scatter plot with a rolling mean overlay. In this example a 30 day window is used to calculate the mean of the maximum temperature around each date. """ # category: scatter plots import altair as alt from vega_datasets import data source = data.seattle_weather() line = alt.Chart(source).mark_line( color='red', size=3 ).transform_window( rolling_mean='mean(temp_max)', frame=[-15, 15] ).encode( x='date:T', y='rolling_mean:Q' ) points = alt.Chart(source).mark_point().encode( x='date:T', y=alt.Y('temp_max:Q', axis=alt.Axis(title='Max Temp')) ) points + line altair-4.1.0/altair/examples/seattle_weather_interactive.py000066400000000000000000000031761364111050100242100ustar00rootroot00000000000000""" Seattle Weather Interactive =========================== This chart provides an interactive exploration of Seattle weather over the course of the year. It includes a one-axis brush selection to easily see the distribution of weather types in a particular date range. """ # category: case studies import altair as alt from vega_datasets import data source = data.seattle_weather() scale = alt.Scale(domain=['sun', 'fog', 'drizzle', 'rain', 'snow'], range=['#e7ba52', '#a7a7a7', '#aec7e8', '#1f77b4', '#9467bd']) color = alt.Color('weather:N', scale=scale) # We create two selections: # - a brush that is active on the top panel # - a multi-click that is active on the bottom panel brush = alt.selection_interval(encodings=['x']) click = alt.selection_multi(encodings=['color']) # Top panel is scatter plot of temperature vs time points = alt.Chart().mark_point().encode( alt.X('monthdate(date):T', title='Date'), alt.Y('temp_max:Q', title='Maximum Daily Temperature (C)', scale=alt.Scale(domain=[-5, 40]) ), color=alt.condition(brush, color, alt.value('lightgray')), size=alt.Size('precipitation:Q', scale=alt.Scale(range=[5, 200])) ).properties( width=550, height=300 ).add_selection( brush ).transform_filter( click ) # Bottom panel is a bar chart of weather type bars = alt.Chart().mark_bar().encode( x='count()', y='weather:N', color=alt.condition(click, color, alt.value('lightgray')), ).transform_filter( brush ).properties( width=550, ).add_selection( click ) alt.vconcat( points, bars, data=source, title="Seattle Weather: 2012-2015" ) altair-4.1.0/altair/examples/select_detail.py000066400000000000000000000036301364111050100212270ustar00rootroot00000000000000""" Selection Detail Example ======================== This example shows a selection that links two views of data: the left panel contains one point per object, and the right panel contains one line per object. Clicking on either the points or lines will select the corresponding objects in both views of the data. The challenge lies in expressing such hierarchical data in a way that Altair can handle. We do this by merging the data into a "long form" dataframe, and aggregating identical metadata for the final plot. """ # category: interactive charts import altair as alt import pandas as pd import numpy as np np.random.seed(0) n_objects = 20 n_times = 50 # Create one (x, y) pair of metadata per object locations = pd.DataFrame({ 'id': range(n_objects), 'x': np.random.randn(n_objects), 'y': np.random.randn(n_objects) }) # Create a 50-element time-series for each object timeseries = pd.DataFrame(np.random.randn(n_times, n_objects).cumsum(0), columns=locations['id'], index=pd.RangeIndex(0, n_times, name='time')) # Melt the wide-form timeseries into a long-form view timeseries = timeseries.reset_index().melt('time') # Merge the (x, y) metadata into the long-form view timeseries['id'] = timeseries['id'].astype(int) # make merge not complain data = pd.merge(timeseries, locations, on='id') # Data is prepared, now make a chart selector = alt.selection_single(empty='all', fields=['id']) base = alt.Chart(data).properties( width=250, height=250 ).add_selection(selector) points = base.mark_point(filled=True, size=200).encode( x='mean(x)', y='mean(y)', color=alt.condition(selector, 'id:O', alt.value('lightgray'), legend=None), ) timeseries = base.mark_line().encode( x='time', y=alt.Y('value', scale=alt.Scale(domain=(-15, 15))), color=alt.Color('id:O', legend=None) ).transform_filter( selector ) points | timeseries altair-4.1.0/altair/examples/select_mark_area.py000066400000000000000000000014771364111050100217160ustar00rootroot00000000000000""" Using Selection Interval with mark_area ========================================= Because area is considered one object, just using the plain selector will select the entire area instead of just one part of it. This example shows how to use two areas, one on top of the other, and a `transform_filter` to fake out this effect. """ # category: interactive charts import altair as alt from vega_datasets import data source = data.unemployment_across_industries.url base = alt.Chart(source).mark_area( color='goldenrod', opacity=0.3 ).encode( x='yearmonth(date):T', y='sum(count):Q', ) brush = alt.selection_interval(encodings=['x'],empty='all') background = base.add_selection(brush) selected = base.transform_filter(brush).mark_area(color='goldenrod') background + selected altair-4.1.0/altair/examples/selection_histogram.py000066400000000000000000000013441364111050100224700ustar00rootroot00000000000000""" Selection Histogram =================== This chart shows an example of using an interval selection to filter the contents of an attached histogram, allowing the user to see the proportion of items in each category within the selection. """ # category: interactive charts import altair as alt from vega_datasets import data source = data.cars() brush = alt.selection(type='interval') points = alt.Chart(source).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color=alt.condition(brush, 'Origin:N', alt.value('lightgray')) ).add_selection( brush ) bars = alt.Chart(source).mark_bar().encode( y='Origin:N', color='Origin:N', x='count(Origin):Q' ).transform_filter( brush ) points & bars altair-4.1.0/altair/examples/selection_layer_bar_month.py000066400000000000000000000015031364111050100236350ustar00rootroot00000000000000""" Interactive Average =================== The plot below uses an interval selection, which causes the chart to include an interactive brush (shown in grey). The brush selection parameterizes the red guideline, which visualizes the average value within the selected interval. """ # category: interactive charts import altair as alt from vega_datasets import data source = data.seattle_weather() brush = alt.selection(type='interval', encodings=['x']) bars = alt.Chart().mark_bar().encode( x='month(date):O', y='mean(precipitation):Q', opacity=alt.condition(brush, alt.OpacityValue(1), alt.OpacityValue(0.7)), ).add_selection( brush ) line = alt.Chart().mark_rule(color='firebrick').encode( y='mean(precipitation):Q', size=alt.SizeValue(3) ).transform_filter( brush ) alt.layer(bars, line, data=source) altair-4.1.0/altair/examples/simple_bar_chart.py000066400000000000000000000005461364111050100217270ustar00rootroot00000000000000""" Simple Bar Chart ================ This example shows a basic bar chart created with Altair. """ # category: simple charts import altair as alt import pandas as pd source = pd.DataFrame({ 'a': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'], 'b': [28, 55, 43, 91, 81, 53, 19, 87, 52] }) alt.Chart(source).mark_bar().encode( x='a', y='b' ) altair-4.1.0/altair/examples/simple_heatmap.py000066400000000000000000000010411364111050100214100ustar00rootroot00000000000000""" Simple Heatmap -------------- This example shows a simple heatmap for showing gridded data. """ # category: simple charts import altair as alt import numpy as np import pandas as pd # Compute x^2 + y^2 across a 2D grid x, y = np.meshgrid(range(-5, 5), range(-5, 5)) z = x ** 2 + y ** 2 # Convert this grid to columnar data expected by Altair source = pd.DataFrame({'x': x.ravel(), 'y': y.ravel(), 'z': z.ravel()}) alt.Chart(source).mark_rect().encode( x='x:O', y='y:O', color='z:Q' ) altair-4.1.0/altair/examples/simple_histogram.py000066400000000000000000000005701364111050100217740ustar00rootroot00000000000000""" Simple Histogram ---------------- This example shows how to make a basic histogram, based on the vega-lite docs https://vega.github.io/vega-lite/examples/histogram.html """ # category: simple charts import altair as alt from vega_datasets import data source = data.movies.url alt.Chart(source).mark_bar().encode( alt.X("IMDB_Rating:Q", bin=True), y='count()', ) altair-4.1.0/altair/examples/simple_line_chart.py000066400000000000000000000005511364111050100221060ustar00rootroot00000000000000""" Simple Line Chart ----------------- This chart shows the most basic line chart, made from a dataframe with two columns. """ # category: simple charts import altair as alt import numpy as np import pandas as pd x = np.arange(100) source = pd.DataFrame({ 'x': x, 'f(x)': np.sin(x / 5) }) alt.Chart(source).mark_line().encode( x='x', y='f(x)' ) altair-4.1.0/altair/examples/simple_scatter_with_errorbars.py000066400000000000000000000016021364111050100245550ustar00rootroot00000000000000""" Simple Scatter Plot with Errorbars ---------------------------------- A simple scatter plot of a data set with errorbars. """ # category: scatter plots import altair as alt import pandas as pd import numpy as np # generate some data points with uncertainties np.random.seed(0) x = [1, 2, 3, 4, 5] y = np.random.normal(10, 0.5, size=len(x)) yerr = 0.2 # set up data frame source = pd.DataFrame({"x":x, "y":y, "yerr":yerr}) # the base chart base = alt.Chart(source).transform_calculate( ymin="datum.y-datum.yerr", ymax="datum.y+datum.yerr" ) # generate the points points = base.mark_point( filled=True, size=50, color='black' ).encode( x=alt.X('x', scale=alt.Scale(domain=(0, 6))), y=alt.Y('y', scale=alt.Scale(domain=(10, 11))) ) # generate the error bars errorbars = base.mark_errorbar().encode( x="x", y="ymin:Q", y2="ymax:Q" ) points + errorbars altair-4.1.0/altair/examples/simple_stacked_area_chart.py000066400000000000000000000005201364111050100235610ustar00rootroot00000000000000""" Simple Stacked Area Chart ------------------------- This example shows how to make a simple stacked area chart. """ # category: simple charts import altair as alt from vega_datasets import data source = data.iowa_electricity() alt.Chart(source).mark_area().encode( x="year:T", y="net_generation:Q", color="source:N" ) altair-4.1.0/altair/examples/slope_graph.py000066400000000000000000000004351364111050100207310ustar00rootroot00000000000000""" Slope Graph ----------------------- This example shows how to make Slope Graph. """ # category: line charts import altair as alt from vega_datasets import data source = data.barley() alt.Chart(source).mark_line().encode( x='year:O', y='median(yield)', color='site' ) altair-4.1.0/altair/examples/sorted_error_bars_with_ci.py000066400000000000000000000014171364111050100236550ustar00rootroot00000000000000""" Sorted Error Bars showing Confidence Interval ============================================= This example shows how to show error bars using confidence intervals, while also sorting the y-axis based on x-axis values. """ # category: other charts import altair as alt from vega_datasets import data source = data.barley() points = alt.Chart(source).mark_point( filled=True, color='black' ).encode( x=alt.X('mean(yield)', title='Barley Yield'), y=alt.Y( 'variety', sort=alt.EncodingSortField( field='yield', op='mean', order='descending' ) ) ).properties( width=400, height=250 ) error_bars = points.mark_rule().encode( x='ci0(yield)', x2='ci1(yield)', ) points + error_bars altair-4.1.0/altair/examples/stacked_bar_chart.py000066400000000000000000000005671364111050100220570ustar00rootroot00000000000000""" Stacked Bar Chart ----------------- This is an example of a stacked bar chart using data which contains crop yields over different regions and different years in the 1930s. """ # category: bar charts import altair as alt from vega_datasets import data source = data.barley() alt.Chart(source).mark_bar().encode( x='variety', y='sum(yield)', color='site' ) altair-4.1.0/altair/examples/stacked_bar_chart_sorted_segments.py000066400000000000000000000007361364111050100253420ustar00rootroot00000000000000""" Stacked Bar Chart with Sorted Segments -------------------------------------- This is an example of a stacked-bar chart with the segments of each bar resorted. """ # category: bar charts import altair as alt from vega_datasets import data source = data.barley() alt.Chart(source).mark_bar().encode( x='sum(yield)', y='variety', color='site', order=alt.Order( # Sort the segments of the bars by this field 'site', sort='ascending' ) ) altair-4.1.0/altair/examples/stacked_bar_chart_with_text.py000066400000000000000000000013471364111050100241530ustar00rootroot00000000000000""" Stacked Bar Chart with Text Overlay =================================== This example shows how to overlay text on a stacked bar chart. For both the bar and text marks, we use the ``stack`` argument in the ``x`` encoding to cause the values to be stacked horizontally. """ # category: bar charts import altair as alt from vega_datasets import data source=data.barley() bars = alt.Chart(source).mark_bar().encode( x=alt.X('sum(yield):Q', stack='zero'), y=alt.Y('variety:N'), color=alt.Color('site') ) text = alt.Chart(source).mark_text(dx=-15, dy=3, color='white').encode( x=alt.X('sum(yield):Q', stack='zero'), y=alt.Y('variety:N'), detail='site:N', text=alt.Text('sum(yield):Q', format='.1f') ) bars + text altair-4.1.0/altair/examples/stem_and_leaf.py000066400000000000000000000016651364111050100212150ustar00rootroot00000000000000""" Stem and Leaf Plot ------------------ This example shows how to make a stem and leaf plot. """ # category: other charts import altair as alt import pandas as pd import numpy as np np.random.seed(42) # Generating random data source = pd.DataFrame({'samples': np.random.normal(50, 15, 100).astype(int).astype(str)}) # Splitting stem and leaf source['stem'] = source['samples'].str[:-1] source['leaf'] = source['samples'].str[-1] source = source.sort_values(by=['stem', 'leaf']) # Determining leaf position source['position'] = source.groupby('stem').cumcount().add(1) # Creating stem and leaf plot alt.Chart(source).mark_text( align='left', baseline='middle', dx=-5 ).encode( alt.X('position:Q', title='', axis=alt.Axis(ticks=False, labels=False, grid=False) ), alt.Y('stem:N', title='', axis=alt.Axis(tickSize=0)), text='leaf:N', ).configure_axis( labelFontSize=20 ).configure_text( fontSize=20 ) altair-4.1.0/altair/examples/step_chart.py000066400000000000000000000011271364111050100205610ustar00rootroot00000000000000""" Step Chart ---------- This example shows Google's stock price over time. This uses the "step-after" interpolation scheme. The full list of interpolation options includes 'linear', 'linear-closed', 'step', 'step-before', 'step-after', 'basis', 'basis-open', 'basis-closed', 'cardinal', 'cardinal-open', 'cardinal-closed', 'bundle', and 'monotone'. """ # category: line charts import altair as alt from vega_datasets import data source = data.stocks() alt.Chart(source).mark_line(interpolate='step-after').encode( x='date', y='price' ).transform_filter( alt.datum.symbol == 'GOOG' ) altair-4.1.0/altair/examples/streamgraph.py000066400000000000000000000007761364111050100207530ustar00rootroot00000000000000""" Streamgraph ----------------- This example shows the streamgraph from vega-lite examples. """ # category: area charts import altair as alt from vega_datasets import data source = data.unemployment_across_industries.url alt.Chart(source).mark_area().encode( alt.X('yearmonth(date):T', axis=alt.Axis(format='%Y', domain=False, tickSize=0) ), alt.Y('sum(count):Q', stack='center', axis=None), alt.Color('series:N', scale=alt.Scale(scheme='category20b') ) ).interactive() altair-4.1.0/altair/examples/strip_plot.py000066400000000000000000000004221364111050100206210ustar00rootroot00000000000000""" Simple Strip Plot ----------------- A simple example of how to make a strip plot. """ # category: simple charts import altair as alt from vega_datasets import data source = data.cars() alt.Chart(source).mark_tick().encode( x='Horsepower:Q', y='Cylinders:O' ) altair-4.1.0/altair/examples/stripplot.py000066400000000000000000000016661364111050100204750ustar00rootroot00000000000000""" Stripplot --------- This example shows how to make a Stripplot. """ # category: scatter plots import altair as alt from vega_datasets import data source = data.movies.url stripplot = alt.Chart(source, width=40).mark_circle(size=8).encode( x=alt.X( 'jitter:Q', title=None, axis=alt.Axis(values=[0], ticks=True, grid=False, labels=False), scale=alt.Scale(), ), y=alt.Y('IMDB_Rating:Q'), color=alt.Color('Major_Genre:N', legend=None), column=alt.Column( 'Major_Genre:N', header=alt.Header( labelAngle=-90, titleOrient='top', labelOrient='bottom', labelAlign='right', labelPadding=3, ), ), ).transform_calculate( # Generate Gaussian jitter with a Box-Muller transform jitter='sqrt(-2*log(random()))*cos(2*PI*random())' ).configure_facet( spacing=0 ).configure_view( stroke=None ) stripplot altair-4.1.0/altair/examples/table_bubble_plot_github.py000066400000000000000000000005731364111050100234330ustar00rootroot00000000000000""" Table Bubble Plot (Github Punch Card) ------------------------------------- This example shows github contributions by the day of week and hour of the day. """ # category: scatter plots import altair as alt from vega_datasets import data source = data.github.url alt.Chart(source).mark_circle().encode( x='hours(time):O', y='day(time):O', size='sum(count):Q' ) altair-4.1.0/altair/examples/tests/000077500000000000000000000000001364111050100172145ustar00rootroot00000000000000altair-4.1.0/altair/examples/tests/__init__.py000066400000000000000000000000001364111050100213130ustar00rootroot00000000000000altair-4.1.0/altair/examples/tests/test_examples.py000066400000000000000000000024551364111050100224510ustar00rootroot00000000000000import io import pkgutil import pytest from altair.utils.execeval import eval_block from altair import examples @pytest.fixture def require_altair_saver_png(): try: import altair_saver # noqa: F401 except ImportError: pytest.skip("altair_saver not importable; cannot run saver tests") if "png" not in altair_saver.available_formats('vega-lite'): pytest.skip("altair_saver not configured to save to png") def iter_example_filenames(): for importer, modname, ispkg in pkgutil.iter_modules(examples.__path__): if ispkg or modname.startswith('_'): continue yield modname + '.py' @pytest.mark.parametrize('filename', iter_example_filenames()) def test_examples(filename: str): source = pkgutil.get_data(examples.__name__, filename) chart = eval_block(source) if chart is None: raise ValueError("Example file should define chart in its final " "statement.") chart.to_dict() @pytest.mark.parametrize('filename', iter_example_filenames()) def test_render_examples_to_png(require_altair_saver_png, filename): source = pkgutil.get_data(examples.__name__, filename) chart = eval_block(source) out = io.BytesIO() chart.save(out, format="png") assert out.getvalue().startswith(b'\x89PNG') altair-4.1.0/altair/examples/top_k_items.py000066400000000000000000000012341364111050100207410ustar00rootroot00000000000000""" Top K Items ----------- This example shows how to use the window and transformation filter to display the Top items of a long list of items in decreasing order. Here we sort the top 10 highest ranking movies of IMDB. """ # category: case studies import altair as alt from vega_datasets import data source = data.movies.url # Top 10 movies by IMBD rating alt.Chart( source, ).mark_bar().encode( x=alt.X('Title:N', sort='-y'), y=alt.Y('IMDB_Rating:Q'), color=alt.Color('IMDB_Rating:Q') ).transform_window( rank='rank(IMDB_Rating)', sort=[alt.SortField('IMDB_Rating', order='descending')] ).transform_filter( (alt.datum.rank < 10) )altair-4.1.0/altair/examples/top_k_letters.py000066400000000000000000000026321364111050100213050ustar00rootroot00000000000000""" Top K Letters ------------- This example shows how to use a window transform in order to display only the top K categories by number of entries. In this case, we rank the characters in the first paragraph of Dickens' *A Tale of Two Cities* by number of occurances. """ # category: case studies import altair as alt import pandas as pd import numpy as np # Excerpt from A Tale of Two Cities; public domain text text = """ It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of Light, it was the season of Darkness, it was the spring of hope, it was the winter of despair, we had everything before us, we had nothing before us, we were all going direct to Heaven, we were all going direct the other way - in short, the period was so far like the present period, that some of its noisiest authorities insisted on its being received, for good or for evil, in the superlative degree of comparison only. """ source = pd.DataFrame( {'letters': np.array([c for c in text if c.isalpha()])} ) alt.Chart(source).transform_aggregate( count='count()', groupby=['letters'] ).transform_window( rank='rank(count)', sort=[alt.SortField('count', order='descending')] ).transform_filter( alt.datum.rank < 10 ).mark_bar().encode( y=alt.Y('letters:N', sort='-x'), x='count:Q', ) altair-4.1.0/altair/examples/top_k_with_others.py000066400000000000000000000017101364111050100221560ustar00rootroot00000000000000""" Top-K plot with Others ---------------------- This example shows how to use aggregate, window, and calculate transfromations to display the top-k directors by average worldwide gross while grouping the remaining directors as 'All Others'. """ # category: case studies import altair as alt from vega_datasets import data source = data.movies.url alt.Chart(source).mark_bar().encode( x=alt.X("aggregate_gross:Q", aggregate="mean", title=None), y=alt.Y( "ranked_director:N", sort=alt.Sort(op="mean", field="aggregate_gross", order="descending"), title=None, ), ).transform_aggregate( aggregate_gross='mean(Worldwide_Gross)', groupby=["Director"], ).transform_window( rank='row_number()', sort=[alt.SortField("aggregate_gross", order="descending")], ).transform_calculate( ranked_director="datum.rank < 10 ? datum.Director : 'All Others'" ).properties( title="Top Directors by Average Worldwide Gross", ) altair-4.1.0/altair/examples/trail_marker.py000066400000000000000000000005151364111050100211010ustar00rootroot00000000000000""" Line Chart with Varying Size ---------------------------- This is example of using the ``trail`` marker to vary the size of a line. """ # category: line charts import altair as alt from vega_datasets import data source = data.wheat() alt.Chart(source).mark_trail().encode( x='year:T', y='wheat:Q', size='wheat:Q' ) altair-4.1.0/altair/examples/trellis_area.py000066400000000000000000000005521364111050100210740ustar00rootroot00000000000000""" Trellis Area Chart ------------------ This example shows small multiples of an area chart. """ # category: area charts import altair as alt from vega_datasets import data source = data.iowa_electricity() alt.Chart(source).mark_area().encode( x="year:T", y="net_generation:Q", color="source:N", row="source:N" ).properties( height=100 ) altair-4.1.0/altair/examples/trellis_area_sort_array.py000066400000000000000000000010301364111050100233310ustar00rootroot00000000000000''' Trellis Area Sort Chart ----------------------- This example shows small multiples of an area chart. Stock prices of four large companies sorted by `['MSFT', 'AAPL', 'IBM', 'AMZN']` ''' # category: area charts import altair as alt from vega_datasets import data source = data.stocks() alt.Chart(source).transform_filter( alt.datum.symbol != 'GOOG' ).mark_area().encode( x='date:T', y='price:Q', color='symbol:N', row=alt.Row('symbol:N', sort=['MSFT', 'AAPL', 'IBM', 'AMZN']) ).properties(height=50, width=400) altair-4.1.0/altair/examples/trellis_histogram.py000066400000000000000000000005731364111050100221640ustar00rootroot00000000000000""" Trellis Histogram ----------------- This example shows how to make a basic trellis histogram. https://vega.github.io/vega-lite/examples/trellis_bar_histogram.html """ # category: histograms import altair as alt from vega_datasets import data source = data.cars() alt.Chart(source).mark_bar().encode( alt.X("Horsepower:Q", bin=True), y='count()', row='Origin' ) altair-4.1.0/altair/examples/trellis_scatter_plot.py000066400000000000000000000004771364111050100226750ustar00rootroot00000000000000""" Trellis Scatter Plot ----------------------- This example shows how to make a trellis scatter plot. """ # category: scatter plots import altair as alt from vega_datasets import data source = data.cars() alt.Chart(source).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', row='Origin:N' ) altair-4.1.0/altair/examples/trellis_stacked_bar_chart.py000066400000000000000000000006651364111050100236140ustar00rootroot00000000000000""" Trellis Stacked Bar Chart ========================= This is an example of a horizontal stacked bar chart using data which contains crop yields over different regions and different years in the 1930s. """ # category: bar charts import altair as alt from vega_datasets import data source = data.barley() alt.Chart(source).mark_bar().encode( column='year', x='yield', y='variety', color='site' ).properties(width=220) altair-4.1.0/altair/examples/us_employment.py000066400000000000000000000025701364111050100213300ustar00rootroot00000000000000""" The U.S. employment crash during the Great Recession ---------------------------------------------------- This example is a fully developed bar chart with negative values using the sample dataset of U.S. employment changes during the Great Recession. """ # category: case studies import altair as alt import pandas as pd from vega_datasets import data source = data.us_employment() presidents = pd.DataFrame([ { "start": "2006-01-01", "end": "2009-01-19", "president": "Bush" }, { "start": "2009-01-20", "end": "2015-12-31", "president": "Obama" } ]) bars = alt.Chart( source, title="The U.S. employment crash during the Great Recession" ).mark_bar().encode( x=alt.X("month:T", title=""), y=alt.Y("nonfarm_change:Q", title="Change in non-farm employment (in thousands)"), color=alt.condition( alt.datum.nonfarm_change > 0, alt.value("steelblue"), alt.value("orange") ) ) rule = alt.Chart(presidents).mark_rule( color="black", strokeWidth=2 ).encode( x='end:T' ).transform_filter(alt.datum.president == "Bush") text = alt.Chart(presidents).mark_text( align='left', baseline='middle', dx=7, dy=-135, size=11 ).encode( x='start:T', x2='end:T', text='president', color=alt.value('#000000') ) (bars + rule + text).properties(width=600) altair-4.1.0/altair/examples/us_incomebrackets_by_state_facet.py000066400000000000000000000012231364111050100251560ustar00rootroot00000000000000""" US Income by State: Wrapped Facet --------------------------------- This example shows how to create a map of income in the US by state, faceted over income brackets """ # category: maps import altair as alt from vega_datasets import data states = alt.topo_feature(data.us_10m.url, 'states') source = data.income.url alt.Chart(source).mark_geoshape().encode( shape='geo:G', color='pct:Q', tooltip=['name:N', 'pct:Q'], facet=alt.Facet('group:N', columns=2), ).transform_lookup( lookup='id', from_=alt.LookupData(data=states, key='id'), as_='geo' ).properties( width=300, height=175, ).project( type='albersUsa' )altair-4.1.0/altair/examples/us_population_over_time.py000066400000000000000000000020251364111050100233750ustar00rootroot00000000000000""" US Population Over Time ======================= This chart visualizes the age distribution of the US population over time. It uses a slider widget that is bound to the year to visualize the age distribution over time. """ # category: case studies import altair as alt from vega_datasets import data source = data.population.url pink_blue = alt.Scale(domain=('Male', 'Female'), range=["steelblue", "salmon"]) slider = alt.binding_range(min=1900, max=2000, step=10) select_year = alt.selection_single(name="year", fields=['year'], bind=slider, init={'year': 2000}) alt.Chart(source).mark_bar().encode( x=alt.X('sex:N', title=None), y=alt.Y('people:Q', scale=alt.Scale(domain=(0, 12000000))), color=alt.Color('sex:N', scale=pink_blue), column='age:O' ).properties( width=20 ).add_selection( select_year ).transform_calculate( "sex", alt.expr.if_(alt.datum.sex == 1, "Male", "Female") ).transform_filter( select_year ).configure_facet( spacing=8 ) altair-4.1.0/altair/examples/us_population_over_time_facet.py000066400000000000000000000011101364111050100245310ustar00rootroot00000000000000""" US Population: Wrapped Facet ============================ This chart visualizes the age distribution of the US population over time, using a wrapped faceting of the data by decade. """ # category: case studies import altair as alt from vega_datasets import data source = data.population.url alt.Chart(source).mark_area().encode( x='age:O', y=alt.Y( 'sum(people):Q', title='Population', axis=alt.Axis(format='~s') ), facet=alt.Facet('year:O', columns=5), ).properties( title='US Age Distribution By Year', width=90, height=80 )altair-4.1.0/altair/examples/us_population_pyramid_over_time.py000066400000000000000000000030761364111050100251310ustar00rootroot00000000000000''' US Population Pyramid Over Time =============================== A population pyramid shows the distribution of age groups within a population. It uses a slider widget that is bound to the year to visualize the age distribution over time. ''' # category: case studies import altair as alt from vega_datasets import data source = data.population.url slider = alt.binding_range(min=1850, max=2000, step=10) select_year = alt.selection_single(name='year', fields=['year'], bind=slider, init={'year': 2000}) base = alt.Chart(source).add_selection( select_year ).transform_filter( select_year ).transform_calculate( gender=alt.expr.if_(alt.datum.sex == 1, 'Male', 'Female') ).properties( width=250 ) color_scale = alt.Scale(domain=['Male', 'Female'], range=['#1f77b4', '#e377c2']) left = base.transform_filter( alt.datum.gender == 'Female' ).encode( y=alt.Y('age:O', axis=None), x=alt.X('sum(people):Q', title='population', sort=alt.SortOrder('descending')), color=alt.Color('gender:N', scale=color_scale, legend=None) ).mark_bar().properties(title='Female') middle = base.encode( y=alt.Y('age:O', axis=None), text=alt.Text('age:Q'), ).mark_text().properties(width=20) right = base.transform_filter( alt.datum.gender == 'Male' ).encode( y=alt.Y('age:O', axis=None), x=alt.X('sum(people):Q', title='population'), color=alt.Color('gender:N', scale=color_scale, legend=None) ).mark_bar().properties(title='Male') alt.concat(left, middle, right, spacing=5)altair-4.1.0/altair/examples/us_state_capitals.py000066400000000000000000000021411364111050100221310ustar00rootroot00000000000000""" U.S. state capitals overlayed on a map of the U.S ------------------------------------------------- This is a layered geographic visualization that shows US capitals overlayed on a map. """ # category: case studies import altair as alt from vega_datasets import data states = alt.topo_feature(data.us_10m.url, 'states') capitals = data.us_state_capitals.url # US states background background = alt.Chart(states).mark_geoshape( fill='lightgray', stroke='white' ).properties( title='US State Capitols', width=650, height=400 ).project('albersUsa') # Points and text hover = alt.selection(type='single', on='mouseover', nearest=True, fields=['lat', 'lon']) base = alt.Chart(capitals).encode( longitude='lon:Q', latitude='lat:Q', ) text = base.mark_text(dy=-5, align='right').encode( alt.Text('city', type='nominal'), opacity=alt.condition(~hover, alt.value(0), alt.value(1)) ) points = base.mark_point().encode( color=alt.value('black'), size=alt.condition(~hover, alt.value(30), alt.value(100)) ).add_selection(hover) background + points + text altair-4.1.0/altair/examples/violin_plot.py000066400000000000000000000015701364111050100207650ustar00rootroot00000000000000""" Violin Plot ----------- This example shows how to make a Violin Plot using Altair's density transform. """ # category: other charts import altair as alt from vega_datasets import data alt.Chart(data.cars()).transform_density( 'Miles_per_Gallon', as_=['Miles_per_Gallon', 'density'], extent=[5, 50], groupby=['Origin'] ).mark_area(orient='horizontal').encode( y='Miles_per_Gallon:Q', color='Origin:N', x=alt.X( 'density:Q', stack='center', impute=None, title=None, axis=alt.Axis(labels=False, values=[0],grid=False, ticks=True), ), column=alt.Column( 'Origin:N', header=alt.Header( titleOrient='bottom', labelOrient='bottom', labelPadding=0, ), ) ).properties( width=100 ).configure_facet( spacing=0 ).configure_view( stroke=None ) altair-4.1.0/altair/examples/weather_heatmap.py000066400000000000000000000012471364111050100215660ustar00rootroot00000000000000""" Seattle Weather Heatmap ----------------------- This example shows the 2010 daily high temperature (F) in Seattle, WA. """ # category: case studies import altair as alt from vega_datasets import data # Since the data is more than 5,000 rows we'll import it from a URL source = data.seattle_temps.url alt.Chart( source, title="2010 Daily High Temperature (F) in Seattle, WA" ).mark_rect().encode( x='date(date):O', y='month(date):O', color=alt.Color('max(temp):Q', scale=alt.Scale(scheme="inferno")), tooltip=[ alt.Tooltip('monthdate(date):T', title='Date'), alt.Tooltip('max(temp):Q', title='Max Temp') ] ).properties(width=550) altair-4.1.0/altair/examples/wheat_wages.py000066400000000000000000000034721364111050100207300ustar00rootroot00000000000000""" Wheat and Wages --------------- A recreation of William Playfair's classic chart visualizing the price of wheat, the wages of a mechanic, and the reigning British monarch. This is a more polished version of the simpler chart in :ref:`gallery_bar_and_line_with_dual_axis`. """ # category: case studies import altair as alt from vega_datasets import data base_wheat = alt.Chart(data.wheat.url).transform_calculate( year_end="+datum.year + 5") base_monarchs = alt.Chart(data.monarchs.url).transform_calculate( offset="((!datum.commonwealth && datum.index % 2) ? -1: 1) * 2 + 95", off2="((!datum.commonwealth && datum.index % 2) ? -1: 1) + 95", y="95", x="+datum.start + (+datum.end - +datum.start)/2" ) bars = base_wheat.mark_bar(**{"fill": "#aaa", "stroke": "#999"}).encode( x=alt.X("year:Q", axis=alt.Axis(format='d', tickCount=5)), y=alt.Y("wheat:Q", axis=alt.Axis(zindex=1)), x2=alt.X2("year_end") ) area = base_wheat.mark_area(**{"color": "#a4cedb", "opacity": 0.7}).encode( x=alt.X("year:Q"), y=alt.Y("wages:Q") ) area_line_1 = area.mark_line(**{"color": "#000", "opacity": 0.7}) area_line_2 = area.mark_line(**{"yOffset": -2, "color": "#EE8182"}) top_bars = base_monarchs.mark_bar(stroke="#000").encode( x=alt.X("start:Q"), x2=alt.X2("end"), y=alt.Y("y:Q"), y2=alt.Y2("offset"), fill=alt.Fill("commonwealth:N", legend=None, scale=alt.Scale(range=["black", "white"])) ) top_text = base_monarchs.mark_text(**{"yOffset": 14, "fontSize": 9, "fontStyle": "italic"}).encode( x=alt.X("x:Q"), y=alt.Y("off2:Q"), text=alt.Text("name:N") ) (bars + area + area_line_1 + area_line_2 + top_bars + top_text).properties( width=900, height=400 ).configure_axis( title=None, gridColor="white", gridOpacity=0.25, domain=False ).configure_view( stroke="transparent" )altair-4.1.0/altair/examples/wilkinson-dot-plot.py000066400000000000000000000010611364111050100221770ustar00rootroot00000000000000""" Wilkinson Dot Plot ------------------ An example of a `Wilkinson Dot Plot `_ """ # category: other charts import altair as alt import pandas as pd source = pd.DataFrame( {"data":[1,1,1,1,1,1,1,1,1,1, 2,2,2, 3,3, 4,4,4,4,4,4] } ) alt.Chart(source).mark_circle(opacity=1).transform_window( id='rank()', groupby=['data'] ).encode( alt.X('data:O'), alt.Y('id:O', axis=None, sort='descending') ).properties(height=100) altair-4.1.0/altair/examples/window_rank.py000066400000000000000000000031721364111050100207510ustar00rootroot00000000000000""" Window Rank Line Chart ---------------------- This example shows the Group F rankings in the 2018 World Cup after each matchday. A window transformation is used to rank each after each match day, sorting by points and difference. """ # category: case studies import altair as alt import pandas as pd source = pd.DataFrame( [ {"team": "Germany", "matchday": 1, "point": 0, "diff": -1}, {"team": "Germany", "matchday": 2, "point": 3, "diff": 0}, {"team": "Germany", "matchday": 3, "point": 3, "diff": -2}, {"team": "Mexico", "matchday": 1, "point": 3, "diff": 1}, {"team": "Mexico", "matchday": 2, "point": 6, "diff": 2}, {"team": "Mexico", "matchday": 3, "point": 6, "diff": -1}, {"team": "South Korea", "matchday": 1, "point": 0, "diff": -1}, {"team": "South Korea", "matchday": 2, "point": 0, "diff": -2}, {"team": "South Korea", "matchday": 3, "point": 3, "diff": 0}, {"team": "Sweden", "matchday": 1, "point": 3, "diff": 1}, {"team": "Sweden", "matchday": 2, "point": 3, "diff": 0}, {"team": "Sweden", "matchday": 3, "point": 6, "diff": 3}, ] ) color_scale = alt.Scale( domain=["Germany", "Mexico", "South Korea", "Sweden"], range=["#000000", "#127153", "#C91A3C", "#0C71AB"], ) alt.Chart(source).mark_line().encode( x="matchday:O", y="rank:O", color=alt.Color("team:N", scale=color_scale) ).transform_window( rank="rank()", sort=[ alt.SortField("point", order="descending"), alt.SortField("diff", order="descending"), ], groupby=["matchday"], ).properties(title="World Cup 2018: Group F Rankings") altair-4.1.0/altair/examples/world_map.py000066400000000000000000000013221364111050100204060ustar00rootroot00000000000000""" World Map --------- This example shows how to create a world map using data generators for different background layers. """ # category: maps import altair as alt from vega_datasets import data # Data generators for the background sphere = alt.sphere() graticule = alt.graticule() # Source of land data source = alt.topo_feature(data.world_110m.url, 'countries') # Layering and configuring the components alt.layer( alt.Chart(sphere).mark_geoshape(fill='lightblue'), alt.Chart(graticule).mark_geoshape(stroke='white', strokeWidth=0.5), alt.Chart(source).mark_geoshape(fill='ForestGreen', stroke='black') ).project( 'naturalEarth1' ).properties(width=600, height=400).configure_view(stroke=None) altair-4.1.0/altair/examples/world_projections.py000066400000000000000000000013051364111050100221710ustar00rootroot00000000000000""" World Projections ----------------- This example shows a map of the countries of the world using four available geographic projections. For more details on the projections available in Altair, see https://vega.github.io/vega-lite/docs/projection.html """ # category: maps import altair as alt from vega_datasets import data source = alt.topo_feature(data.world_110m.url, 'countries') base = alt.Chart(source).mark_geoshape( fill='#666666', stroke='white' ).properties( width=300, height=180 ) projections = ['equirectangular', 'mercator', 'orthographic', 'gnomonic'] charts = [base.project(proj).properties(title=proj) for proj in projections] alt.concat(*charts, columns=2) altair-4.1.0/altair/expr/000077500000000000000000000000001364111050100152125ustar00rootroot00000000000000altair-4.1.0/altair/expr/__init__.py000066400000000000000000000002531364111050100173230ustar00rootroot00000000000000"""Tools for creating transform & filter expressions with a python syntax""" # flake8: noqa from .core import datum, Expression from .funcs import * from .consts import * altair-4.1.0/altair/expr/consts.py000066400000000000000000000015531364111050100171010ustar00rootroot00000000000000from .core import ConstExpression CONST_LISTING = { "NaN": "not a number (same as JavaScript literal NaN)", "LN10": "the natural log of 10 (alias to Math.LN10)", "E": "the transcendental number e (alias to Math.E)", "LOG10E": "the base 10 logarithm e (alias to Math.LOG10E)", "LOG2E": "the base 2 logarithm of e (alias to Math.LOG2E)", "SQRT1_2": "the square root of 0.5 (alias to Math.SQRT1_2)", "LN2": "the natural log of 2 (alias to Math.LN2)", "SQRT2": "the square root of 2 (alias to Math.SQRT1_2)", "PI": "the transcendental number pi (alias to Math.PI)", } NAME_MAP = {} def _populate_namespace(): globals_ = globals() for name, doc in CONST_LISTING.items(): py_name = NAME_MAP.get(name, name) globals_[py_name] = ConstExpression(name, doc) yield py_name __all__ = list(_populate_namespace()) altair-4.1.0/altair/expr/core.py000066400000000000000000000115671364111050100165260ustar00rootroot00000000000000from ..utils import SchemaBase class DatumType(object): """An object to assist in building Vega-Lite Expressions""" def __repr__(self): return "datum" def __getattr__(self, attr): return GetAttrExpression("datum", attr) def __getitem__(self, attr): return GetItemExpression("datum", attr) datum = DatumType() def _js_repr(val): """Return a javascript-safe string representation of val""" if val is True: return "true" elif val is False: return "false" elif val is None: return "null" else: return repr(val) class Expression(SchemaBase): """Expression Base object for enabling build-up of Javascript expressions using a Python syntax. Calling ``repr(obj)`` will return a Javascript representation of the object and the operations it encodes. """ _schema = {"type": "string"} def to_dict(self, *args, **kwargs): return repr(self) def __setattr__(self, attr, val): # We don't need the setattr magic defined in SchemaBase return object.__setattr__(self, attr, val) def __add__(self, other): return BinaryExpression("+", self, other) def __radd__(self, other): return BinaryExpression("+", other, self) def __sub__(self, other): return BinaryExpression("-", self, other) def __rsub__(self, other): return BinaryExpression("-", other, self) def __mul__(self, other): return BinaryExpression("*", self, other) def __rmul__(self, other): return BinaryExpression("*", other, self) def __truediv__(self, other): return BinaryExpression("/", self, other) def __rtruediv__(self, other): return BinaryExpression("/", other, self) __div__ = __truediv__ __rdiv__ = __rtruediv__ def __mod__(self, other): return BinaryExpression("%", self, other) def __rmod__(self, other): return BinaryExpression("%", other, self) def __pow__(self, other): # "**" Javascript operator is not supported in all browsers return FunctionExpression("pow", (self, other)) def __rpow__(self, other): # "**" Javascript operator is not supported in all browsers return FunctionExpression("pow", (other, self)) def __neg__(self): return UnaryExpression("-", self) def __pos__(self): return UnaryExpression("+", self) # comparison operators def __eq__(self, other): return BinaryExpression("===", self, other) def __ne__(self, other): return BinaryExpression("!==", self, other) def __gt__(self, other): return BinaryExpression(">", self, other) def __lt__(self, other): return BinaryExpression("<", self, other) def __ge__(self, other): return BinaryExpression(">=", self, other) def __le__(self, other): return BinaryExpression("<=", self, other) def __abs__(self): return FunctionExpression("abs", (self,)) # logical operators def __and__(self, other): return BinaryExpression("&&", self, other) def __rand__(self, other): return BinaryExpression("&&", other, self) def __or__(self, other): return BinaryExpression("||", self, other) def __ror__(self, other): return BinaryExpression("||", other, self) def __invert__(self): return UnaryExpression("!", self) class UnaryExpression(Expression): def __init__(self, op, val): super(UnaryExpression, self).__init__(op=op, val=val) def __repr__(self): return "({op}{val})".format(op=self.op, val=_js_repr(self.val)) class BinaryExpression(Expression): def __init__(self, op, lhs, rhs): super(BinaryExpression, self).__init__(op=op, lhs=lhs, rhs=rhs) def __repr__(self): return "({lhs} {op} {rhs})".format( op=self.op, lhs=_js_repr(self.lhs), rhs=_js_repr(self.rhs) ) class FunctionExpression(Expression): def __init__(self, name, args): super(FunctionExpression, self).__init__(name=name, args=args) def __repr__(self): args = ",".join(_js_repr(arg) for arg in self.args) return "{name}({args})".format(name=self.name, args=args) class ConstExpression(Expression): def __init__(self, name, doc): self.__doc__ = """{}: {}""".format(name, doc) super(ConstExpression, self).__init__(name=name, doc=doc) def __repr__(self): return str(self.name) class GetAttrExpression(Expression): def __init__(self, group, name): super(GetAttrExpression, self).__init__(group=group, name=name) def __repr__(self): return "{}.{}".format(self.group, self.name) class GetItemExpression(Expression): def __init__(self, group, name): super(GetItemExpression, self).__init__(group=group, name=name) def __repr__(self): return "{}['{}']".format(self.group, self.name) altair-4.1.0/altair/expr/funcs.py000066400000000000000000000654601364111050100167150ustar00rootroot00000000000000from .core import FunctionExpression FUNCTION_LISTING = { "isArray": r"Returns true if _value_ is an array, false otherwise.", "isBoolean": r"Returns true if _value_ is a boolean (`true` or `false`), false otherwise.", "isDate": r"Returns true if _value_ is a Date object, false otherwise. This method will return false for timestamp numbers or date-formatted strings; it recognizes Date objects only.", "isNumber": r"Returns true if _value_ is a number, false otherwise. `NaN` and `Infinity` are considered numbers.", "isObject": r"Returns true if _value_ is an object (including arrays and Dates), false otherwise.", "isRegExp": r"Returns true if _value_ is a RegExp (regular expression) object, false otherwise.", "isString": r"Returns true if _value_ is a string, false otherwise.", "toBoolean": r"Coerces the input _value_ to a string. Null values and empty strings are mapped to `null`.", "toDate": r"Coerces the input _value_ to a Date instance. Null values and empty strings are mapped to `null`. If an optional _parser_ function is provided, it is used to perform date parsing, otherwise `Date.parse` is used. Be aware that `Date.parse` has different implementations across browsers!", "toNumber": r"Coerces the input _value_ to a number. Null values and empty strings are mapped to `null`.", "toString": r"Coerces the input _value_ to a string. Null values and empty strings are mapped to `null`.", "if": r"If _test_ is truthy, returns _thenValue_. Otherwise, returns _elseValue_. The _if_ function is equivalent to the ternary operator `a ? b : c`.", "isNaN": r"Returns true if _value_ is not a number. Same as JavaScript's `isNaN`.", "isFinite": r"Returns true if _value_ is a finite number. Same as JavaScript's `isFinite`.", "abs": r"Returns the absolute value of _value_. Same as JavaScript's `Math.abs`.", "acos": r"Trigonometric arccosine. Same as JavaScript's `Math.acos`.", "asin": r"Trigonometric arcsine. Same as JavaScript's `Math.asin`.", "atan": r"Trigonometric arctangent. Same as JavaScript's `Math.atan`.", "atan2": r"Returns the arctangent of _dy / dx_. Same as JavaScript's `Math.atan2`.", "ceil": r"Rounds _value_ to the nearest integer of equal or greater value. Same as JavaScript's `Math.ceil`.", "clamp": r"Restricts _value_ to be between the specified _min_ and _max_.", "cos": r"Trigonometric cosine. Same as JavaScript's `Math.cos`.", "exp": r"Returns the value of _e_ raised to the provided _exponent_. Same as JavaScript's `Math.exp`.", "floor": r"Rounds _value_ to the nearest integer of equal or lower value. Same as JavaScript's `Math.floor`.", "log": r"Returns the natural logarithm of _value_. Same as JavaScript's `Math.log`.", "max": r"Returns the maximum argument value. Same as JavaScript's `Math.max`.", "min": r"Returns the minimum argument value. Same as JavaScript's `Math.min`.", "pow": r"Returns _value_ raised to the given _exponent_. Same as JavaScript's `Math.pow`.", "random": r"Returns a pseudo-random number in the range [0,1). Same as JavaScript's `Math.random`.", "round": r"Rounds _value_ to the nearest integer. Same as JavaScript's `Math.round`.", "sin": r"Trigonometric sine. Same as JavaScript's `Math.sin`.", "sqrt": r"Square root function. Same as JavaScript's `Math.sqrt`.", "tan": r"Trigonometric tangent. Same as JavaScript's `Math.tan`.", "now": r"Returns the timestamp for the current time.", "datetime": r"Returns a new `Date` instance. The _month_ is 0-based, such that `1` represents February.", "date": r"Returns the day of the month for the given _datetime_ value, in local time.", "day": r"Returns the day of the week for the given _datetime_ value, in local time.", "year": r"Returns the year for the given _datetime_ value, in local time.", "quarter": r"Returns the quarter of the year (0-3) for the given _datetime_ value, in local time.", "month": r"Returns the (zero-based) month for the given _datetime_ value, in local time.", "hours": r"Returns the hours component for the given _datetime_ value, in local time.", "minutes": r"Returns the minutes component for the given _datetime_ value, in local time.", "seconds": r"Returns the seconds component for the given _datetime_ value, in local time.", "milliseconds": r"Returns the milliseconds component for the given _datetime_ value, in local time.", "time": r"Returns the epoch-based timestamp for the given _datetime_ value.", "timezoneoffset": r"Returns the timezone offset from the local timezone to UTC for the given _datetime_ value.", "utc": r"Returns a timestamp for the given UTC date. The _month_ is 0-based, such that `1` represents February.", "utcdate": r"Returns the day of the month for the given _datetime_ value, in UTC time.", "utcday": r"Returns the day of the week for the given _datetime_ value, in UTC time.", "utcyear": r"Returns the year for the given _datetime_ value, in UTC time.", "utcquarter": r"Returns the quarter of the year (0-3) for the given _datetime_ value, in UTC time.", "utcmonth": r"Returns the (zero-based) month for the given _datetime_ value, in UTC time.", "utchours": r"Returns the hours component for the given _datetime_ value, in UTC time.", "utcminutes": r"Returns the minutes component for the given _datetime_ value, in UTC time.", "utcseconds": r"Returns the seconds component for the given _datetime_ value, in UTC time.", "utcmilliseconds": r"Returns the milliseconds component for the given _datetime_ value, in UTC time.", "extent": r"Returns a new _[min, max]_ array with the minimum and maximum values of the input array, ignoring `null`, `undefined`, and `NaN` values.", "clampRange": r"Clamps a two-element _range_ array in a span-preserving manner. If the span of the input _range_ is less than _(max - min)_ and an endpoint exceeds either the _min_ or _max_ value, the range is translated such that the span is preserved and one endpoint touches the boundary of the _[min, max]_ range. If the span exceeds _(max - min)_, the range _[min, max]_ is returned.", "indexof": r"Returns the first index of _value_ in the input _array_, or the first index of _substring_ in the input _string_..", "inrange": r"Tests whether _value_ lies within (or is equal to either) the first and last values of the _range_ array.", "join": r"Returns a new string by concatenating all of the elements of the input _array_, separated by commas or a specified _separator_ string.", "lastindexof": r"Returns the last index of _value_ in the input _array_, or the last index of _substring_ in the input _string_..", "length": r"Returns the length of the input _array_, or the length of the input _string_.", "lerp": r"Returns the linearly interpolated value between the first and last entries in the _array_ for the provided interpolation _fraction_ (typically between 0 and 1). For example, `lerp([0, 50], 0.5)` returns 25.", "peek": r"Returns the last element in the input _array_. Similar to the built-in `Array.pop` method, except that it does not remove the last element. This method is a convenient shorthand for `array[array.length - 1]`.", "reverse": r"Returns a new array with elements in a reverse order of the input _array_. The first array element becomes the last, and the last array element becomes the first.", "sequence": r"Returns an array containing an arithmetic sequence of numbers. If _step_ is omitted, it defaults to 1. If _start_ is omitted, it defaults to 0. The _stop_ value is exclusive; it is not included in the result. If _step_ is positive, the last element is the largest _start + i * step_ less than _stop_; if _step_ is negative, the last element is the smallest _start + i * step_ greater than _stop_. If the returned array would contain an infinite number of values, an empty range is returned. The arguments are not required to be integers.", "slice": r"Returns a section of _array_ between the _start_ and _end_ indices. If the _end_ argument is negative, it is treated as an offset from the end of the array (_length(array) + end_).", "span": r"Returns the span of _array_: the difference between the last and first elements, or _array[array.length-1] - array[0]_. Or if input is a string: a section of _string_ between the _start_ and _end_ indices. If the _end_ argument is negative, it is treated as an offset from the end of the string (_length(string) + end_)..", "lower": r"Transforms _string_ to lower-case letters.", "pad": r"Pads a _string_ value with repeated instances of a _character_ up to a specified _length_. If _character_ is not specified, a space (' ') is used. By default, padding is added to the end of a string. An optional _align_ parameter specifies if padding should be added to the `'left'` (beginning), `'center'`, or `'right'` (end) of the input string.", "parseFloat": r"Parses the input _string_ to a floating-point value. Same as JavaScript's `parseFloat`.", "parseInt": r"Parses the input _string_ to an integer value. Same as JavaScript's `parseInt`.", "replace": r"Returns a new string with some or all matches of _pattern_ replaced by a _replacement_ string. The _pattern_ can be a string or a regular expression. If _pattern_ is a string, only the first instance will be replaced. Same as [JavaScript's String.replace](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace).", "split": r"Returns an array of tokens created by splitting the input _string_ according to a provided _separator_ pattern. The result can optionally be constrained to return at most _limit_ tokens.", "substring": r"Returns a section of _string_ between the _start_ and _end_ indices.", "trim": r"Returns a trimmed string with preceding and trailing whitespace removed.", "truncate": r"Truncates an input _string_ to a target _length_. The optional _align_ argument indicates what part of the string should be truncated: `'left'` (the beginning), `'center'`, or `'right'` (the end). By default, the `'right'` end of the string is truncated. The optional _ellipsis_ argument indicates the string to use to indicate truncated content; by default the ellipsis character `...` (`\\u2026`) is used.", "upper": r"Transforms _string_ to upper-case letters.", "merge": r"Merges the input objects _object1_, _object2_, etc into a new output object. Inputs are visited in sequential order, such that key values from later arguments can overwrite those from earlier arguments. Example: `merge({a:1, b:2}, {a:3}) -> {a:3, b:2}`.", "dayFormat": r"Formats a (0-6) _weekday_ number as a full week day name, according to the current locale. For example: `dayFormat(0) -> \"Sunday\"`.", "dayAbbrevFormat": r"Formats a (0-6) _weekday_ number as an abbreviated week day name, according to the current locale. For example: `dayAbbrevFormat(0) -> \"Sun\"`.", "format": r"Formats a numeric _value_ as a string. The _specifier_ must be a valid [d3-format specifier](https://github.com/d3/d3-format/) (e.g., `format(value, ',.2f')`.", "monthFormat": r"Formats a (zero-based) _month_ number as a full month name, according to the current locale. For example: `monthFormat(0) -> \"January\"`.", "monthAbbrevFormat": r"Formats a (zero-based) _month_ number as an abbreviated month name, according to the current locale. For example: `monthAbbrevFormat(0) -> \"Jan\"`.", "timeFormat": r"Formats a datetime _value_ (either a `Date` object or timestamp) as a string, according to the local time. The _specifier_ must be a valid [d3-time-format specifier](https://github.com/d3/d3-time-format/). For example: `timeFormat(timestamp, '%A')`.", "timeParse": r"Parses a _string_ value to a Date object, according to the local time. The _specifier_ must be a valid [d3-time-format specifier](https://github.com/d3/d3-time-format/). For example: `timeParse('June 30, 2015', '%B %d, %Y')`.", "utcFormat": r"Formats a datetime _value_ (either a `Date` object or timestamp) as a string, according to [UTC](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) time. The _specifier_ must be a valid [d3-time-format specifier](https://github.com/d3/d3-time-format/). For example: `utcFormat(timestamp, '%A')`.", "utcParse": r"Parses a _string_ value to a Date object, according to [UTC](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) time. The _specifier_ must be a valid [d3-time-format specifier](https://github.com/d3/d3-time-format/). For example: `utcParse('June 30, 2015', '%B %d, %Y')`.", "regexp": r"Creates a regular expression instance from an input _pattern_ string and optional _flags_. Same as [JavaScript's `RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp).", "test": r"Evaluates a regular expression _regexp_ against the input _string_, returning `true` if the string matches the pattern, `false` otherwise. For example: `test(/\\d{3}/, \"32-21-9483\") -> true`.", "rgb": r"Constructs a new [RGB](https://en.wikipedia.org/wiki/RGB_color_model) color. If _r_, _g_ and _b_ are specified, these represent the channel values of the returned color; an _opacity_ may also be specified. If a CSS Color Module Level 3 _specifier_ string is specified, it is parsed and then converted to the RGB color space. Uses [d3-color's rgb function](https://github.com/d3/d3-color#rgb).", "hsl": r"Constructs a new [HSL](https://en.wikipedia.org/wiki/HSL_and_HSV) color. If _h_, _s_ and _l_ are specified, these represent the channel values of the returned color; an _opacity_ may also be specified. If a CSS Color Module Level 3 _specifier_ string is specified, it is parsed and then converted to the HSL color space. Uses [d3-color's hsl function](https://github.com/d3/d3-color#hsl).", "lab": r"Constructs a new [CIE LAB](https://en.wikipedia.org/wiki/Lab_color_space#CIELAB) color. If _l_, _a_ and _b_ are specified, these represent the channel values of the returned color; an _opacity_ may also be specified. If a CSS Color Module Level 3 _specifier_ string is specified, it is parsed and then converted to the LAB color space. Uses [d3-color's lab function](https://github.com/d3/d3-color#lab).", "hcl": r"Constructs a new [HCL](https://en.wikipedia.org/wiki/Lab_color_space#CIELAB) (hue, chroma, luminance) color. If _h_, _c_ and _l_ are specified, these represent the channel values of the returned color; an _opacity_ may also be specified. If a CSS Color Module Level 3 _specifier_ string is specified, it is parsed and then converted to the HCL color space. Uses [d3-color's hcl function](https://github.com/d3/d3-color#hcl).", "item": r"Returns the current scenegraph item that is the target of the event.", "group": r"Returns the scenegraph group mark item in which the current event has occurred. If no arguments are provided, the immediate parent group is returned. If a group name is provided, the matching ancestor group item is returned.", "xy": r"Returns the x- and y-coordinates for the current event as a two-element array. If no arguments are provided, the top-level coordinate space of the view is used. If a scenegraph _item_ (or string group name) is provided, the coordinate space of the group item is used.", "x": r"Returns the x coordinate for the current event. If no arguments are provided, the top-level coordinate space of the view is used. If a scenegraph _item_ (or string group name) is provided, the coordinate space of the group item is used.", "y": r"Returns the y coordinate for the current event. If no arguments are provided, the top-level coordinate space of the view is used. If a scenegraph _item_ (or string group name) is provided, the coordinate space of the group item is used.", "pinchDistance": r"Returns the pixel distance between the first two touch points of a multi-touch event.", "pinchAngle": r"Returns the angle of the line connecting the first two touch points of a multi-touch event.", "inScope": r"Returns true if the given scenegraph _item_ is a descendant of the group mark in which the event handler was defined, false otherwise.", "data": r"Returns the array of data objects for the Vega data set with the given _name_. If the data set is not found, returns an empty array.", "indata": r"Tests if the data set with a given _name_ contains a datum with a _field_ value that matches the input _value_. For example: `indata('table', 'category', value)`.", "scale": r"Applies the named scale transform (or projection) to the specified _value_. The optional _group_ argument takes a scenegraph group mark item to indicate the specific scope in which to look up the scale or projection.", "invert": r"Inverts the named scale transform (or projection) for the specified _value_. The optional _group_ argument takes a scenegraph group mark item to indicate the specific scope in which to look up the scale or projection.", "copy": r"Returns a copy (a new cloned instance) of the named scale transform of projection, or `undefined` if no scale or projection is found. The optional _group_ argument takes a scenegraph group mark item to indicate the specific scope in which to look up the scale or projection.", "domain": r"Returns the scale domain array for the named scale transform, or an empty array if the scale is not found. The optional _group_ argument takes a scenegraph group mark item to indicate the specific scope in which to look up the scale.", "range": r"Returns the scale range array for the named scale transform, or an empty array if the scale is not found. The optional _group_ argument takes a scenegraph group mark item to indicate the specific scope in which to look up the scale.", "bandwidth": r"Returns the current band width for the named band scale transform, or zero if the scale is not found or is not a band scale. The optional _group_ argument takes a scenegraph group mark item to indicate the specific scope in which to look up the scale.", "bandspace": r"Returns the number of steps needed within a band scale, based on the _count_ of domain elements and the inner and outer padding values. While normally calculated within the scale itself, this function can be helpful for determining the size of a chart's layout.", "gradient": r"Returns a linear color gradient for the _scale_ (whose range must be a [continuous color scheme](../schemes)) and starting and ending points _p0_ and _p1_, each an _[x, y]_ array. The points _p0_ and _p1_ should be expressed in normalized coordinates in the domain [0, 1], relative to the bounds of the item being colored. If unspecified, _p0_ defaults to `[0, 0]` and _p1_ defaults to `[1, 0]`, for a horizontal gradient that spans the full bounds of an item. The optional _count_ argument indicates a desired target number of sample points to take from the color scale.", "panLinear": r"Given a linear scale _domain_ array with numeric or datetime values, returns a new two-element domain array that is the result of panning the domain by a fractional _delta_. The _delta_ value represents fractional units of the scale range; for example, `0.5` indicates panning the scale domain to the right by half the scale range.", "panLog": r"Given a log scale _domain_ array with numeric or datetime values, returns a new two-element domain array that is the result of panning the domain by a fractional _delta_. The _delta_ value represents fractional units of the scale range; for example, `0.5` indicates panning the scale domain to the right by half the scale range.", "panPow": r"Given a power scale _domain_ array with numeric or datetime values and the given _exponent_, returns a new two-element domain array that is the result of panning the domain by a fractional _delta_. The _delta_ value represents fractional units of the scale range; for example, `0.5` indicates panning the scale domain to the right by half the scale range.", "panSymlog": r"Given a symmetric log scale _domain_ array with numeric or datetime values parameterized by the given _constant_, returns a new two-element domain array that is the result of panning the domain by a fractional _delta_. The _delta_ value represents fractional units of the scale range; for example, `0.5` indicates panning the scale domain to the right by half the scale range.", "zoomLinear": r"Given a linear scale _domain_ array with numeric or datetime values, returns a new two-element domain array that is the result of zooming the domain by a _scaleFactor_, centered at the provided fractional _anchor_. The _anchor_ value represents the zoom position in terms of fractional units of the scale range; for example, `0.5` indicates a zoom centered on the mid-point of the scale range.", "zoomLog": r"Given a log scale _domain_ array with numeric or datetime values, returns a new two-element domain array that is the result of zooming the domain by a _scaleFactor_, centered at the provided fractional _anchor_. The _anchor_ value represents the zoom position in terms of fractional units of the scale range; for example, `0.5` indicates a zoom centered on the mid-point of the scale range.", "zoomPow": r"Given a power scale _domain_ array with numeric or datetime values and the given _exponent_, returns a new two-element domain array that is the result of zooming the domain by a _scaleFactor_, centered at the provided fractional _anchor_. The _anchor_ value represents the zoom position in terms of fractional units of the scale range; for example, `0.5` indicates a zoom centered on the mid-point of the scale range.", "zoomSymlog": r"Given a symmetric log scale _domain_ array with numeric or datetime values parameterized by the given _constant_, returns a new two-element domain array that is the result of zooming the domain by a _scaleFactor_, centered at the provided fractional _anchor_. The _anchor_ value represents the zoom position in terms of fractional units of the scale range; for example, `0.5` indicates a zoom centered on the mid-point of the scale range.", "geoArea": r"Returns the projected planar area (typically in square pixels) of a GeoJSON _feature_ according to the named _projection_. If the _projection_ argument is `null`, computes the spherical area in steradians using unprojected longitude, latitude coordinates. The optional _group_ argument takes a scenegraph group mark item to indicate the specific scope in which to look up the projection. Uses d3-geo's [geoArea](https://github.com/d3/d3-geo#geoArea) and [path.area](https://github.com/d3/d3-geo#path_area) methods.", "geoBounds": r"Returns the projected planar bounding box (typically in pixels) for the specified GeoJSON _feature_, according to the named _projection_. The bounding box is represented by a two-dimensional array: [[_x0_, _y0_], [_x1_, _y1_]], where _x0_ is the minimum x-coordinate, _y0_ is the minimum y-coordinate, _x1_ is the maximum x-coordinate, and _y1_ is the maximum y-coordinate. If the _projection_ argument is `null`, computes the spherical bounding box using unprojected longitude, latitude coordinates. The optional _group_ argument takes a scenegraph group mark item to indicate the specific scope in which to look up the projection. Uses d3-geo's [geoBounds](https://github.com/d3/d3-geo#geoBounds) and [path.bounds](https://github.com/d3/d3-geo#path_bounds) methods.", "geoCentroid": r"Returns the projected planar centroid (typically in pixels) for the specified GeoJSON _feature_, according to the named _projection_. If the _projection_ argument is `null`, computes the spherical centroid using unprojected longitude, latitude coordinates. The optional _group_ argument takes a scenegraph group mark item to indicate the specific scope in which to look up the projection. Uses d3-geo's [geoCentroid](https://github.com/d3/d3-geo#geoCentroid) and [path.centroid](https://github.com/d3/d3-geo#path_centroid) methods.", "treePath": r"For the hierarchy data set with the given _name_, returns the shortest path through from the _source_ node id to the _target_ node id. The path starts at the _source_ node, ascends to the least common ancestor of the _source_ node and the _target_ node, and then descends to the _target_ node.", "treeAncestors": r"For the hierarchy data set with the given _name_, returns the array of ancestors nodes, starting with the input _node_, then followed by each parent up to the root.", "warn": r"Logs a warning message and returns the last argument. For the message to appear in the console, the visualization view must have the appropriate logging level set.", "info": r"Logs an informative message and returns the last argument. For the message to appear in the console, the visualization view must have the appropriate logging level set.", "debug": r"Logs a debugging message and returns the last argument. For the message to appear in the console, the visualization view must have the appropriate logging level set.", "eventGroup": "returns the scenegraph group mark item within which the current event has occurred. If no arguments are provided, the immediate parent group is returned. If a group name is provided, the matching ancestor group item is returned.", "eventItem": "a zero-argument function that returns the current scenegraph item that is the subject of the event.", "eventX": "returns the x-coordinate for the current event. If no arguments are provided, the top-level coordinate space of the visualization is used. If a group name is provided, the coordinate-space of the matching ancestor group item is used.", "eventY": "returns the y-coordinate for the current event. If no arguments are provided, the top-level coordinate space of the visualization is used. If a group name is provided, the coordinate-space of the matching ancestor group item is used.", "iscale": 'applies an inverse scale transform to a specified value; by default, looks for the scale at the top-level of the specification, but an optional signal can also be supplied corresponding to the group which contains the scale (i.e., `iscale("x", val, group)`). *Note:* This function is only legal within signal stream handlers and mark [production rules](https://github.com/vega/vega/wiki/Marks#production-rules). Invoking this function elsewhere (e.g., with filter or formula transforms) will result in an error.', "open": "opens a hyperlink (alias to `window.open`). This function is only valid when running in the browser. It should not be invoked within a server-side (e.g., node.js) environment.", } # This maps vega expression function names to the Python name NAME_MAP = {"if": "if_"} class ExprFunc(object): def __init__(self, name, doc): self.name = name self.doc = doc self.__doc__ = """{}(*args)\n {}""".format(name, doc) def __call__(self, *args): return FunctionExpression(self.name, args) def __repr__(self): return "".format(self.name) def _populate_namespace(): globals_ = globals() for name, doc in FUNCTION_LISTING.items(): py_name = NAME_MAP.get(name, name) globals_[py_name] = ExprFunc(name, doc) yield py_name __all__ = list(_populate_namespace()) altair-4.1.0/altair/expr/tests/000077500000000000000000000000001364111050100163545ustar00rootroot00000000000000altair-4.1.0/altair/expr/tests/__init__.py000066400000000000000000000000001364111050100204530ustar00rootroot00000000000000altair-4.1.0/altair/expr/tests/test_expr.py000066400000000000000000000052251364111050100207470ustar00rootroot00000000000000import operator from ... import expr from .. import datum def test_unary_operations(): OP_MAP = {"-": operator.neg, "+": operator.pos} for op, func in OP_MAP.items(): z = func(datum.xxx) assert repr(z) == "({}datum.xxx)".format(op) def test_binary_operations(): OP_MAP = { "+": operator.add, "-": operator.sub, "*": operator.mul, "/": operator.truediv, "%": operator.mod, "===": operator.eq, "<": operator.lt, "<=": operator.le, ">": operator.gt, ">=": operator.ge, "!==": operator.ne, "&&": operator.and_, "||": operator.or_, } # When these are on the RHS, the opposite is evaluated instead. INEQ_REVERSE = { ">": "<", "<": ">", "<=": ">=", ">=": "<=", "===": "===", "!==": "!==", } for op, func in OP_MAP.items(): z1 = func(datum.xxx, 2) assert repr(z1) == "(datum.xxx {} 2)".format(op) z2 = func(2, datum.xxx) if op in INEQ_REVERSE: assert repr(z2) == "(datum.xxx {} 2)".format(INEQ_REVERSE[op]) else: assert repr(z2) == "(2 {} datum.xxx)".format(op) z3 = func(datum.xxx, datum.yyy) assert repr(z3) == "(datum.xxx {} datum.yyy)".format(op) def test_abs(): z = abs(datum.xxx) assert repr(z) == "abs(datum.xxx)" def test_expr_funcs(): """test all functions defined in expr.funcs""" name_map = {val: key for key, val in expr.funcs.NAME_MAP.items()} for funcname in expr.funcs.__all__: func = getattr(expr, funcname) z = func(datum.xxx) assert repr(z) == "{}(datum.xxx)".format(name_map.get(funcname, funcname)) def test_expr_consts(): """Test all constants defined in expr.consts""" name_map = {val: key for key, val in expr.consts.NAME_MAP.items()} for constname in expr.consts.__all__: const = getattr(expr, constname) z = const * datum.xxx assert repr(z) == "({} * datum.xxx)".format(name_map.get(constname, constname)) def test_json_reprs(): """Test JSON representations of special values""" assert repr(datum.xxx == None) == "(datum.xxx === null)" # noqa: E711 assert repr(datum.xxx == False) == "(datum.xxx === false)" # noqa: E712 assert repr(datum.xxx == True) == "(datum.xxx === true)" # noqa: E712 def test_to_dict(): ex = datum.xxx * 2 > datum.yyy assert ex.to_dict() == repr(ex) def test_copy(): ex = datum.xxx * 2 > abs(datum.yyy) ex_copy = ex.copy() assert ex.to_dict() == ex_copy.to_dict() def test_datum_getattr(): x = datum["foo"] assert repr(x) == "datum['foo']" altair-4.1.0/altair/sphinxext/000077500000000000000000000000001364111050100162665ustar00rootroot00000000000000altair-4.1.0/altair/sphinxext/__init__.py000066400000000000000000000000001364111050100203650ustar00rootroot00000000000000altair-4.1.0/altair/sphinxext/altairgallery.py000066400000000000000000000220531364111050100214760ustar00rootroot00000000000000import hashlib import os import json import random import collections from operator import itemgetter import warnings import jinja2 from docutils import nodes from docutils.statemachine import ViewList from docutils.parsers.rst import Directive from docutils.parsers.rst.directives import flag from sphinx.util.nodes import nested_parse_with_titles from .utils import ( get_docstring_and_rest, prev_this_next, create_thumbnail, create_generic_image, ) from altair.utils.execeval import eval_block from altair.examples import iter_examples EXAMPLE_MODULE = "altair.examples" GALLERY_TEMPLATE = jinja2.Template( """ .. This document is auto-generated by the altair-gallery extension. Do not modify directly. .. _{{ gallery_ref }}: {{ title }} {% for char in title %}-{% endfor %} This gallery contains a selection of examples of the plots Altair can create. Some may seem fairly complicated at first glance, but they are built by combining a simple set of declarative building blocks. Many draw upon sample datasets compiled by the `Vega `_ project. To access them yourself, install `vega_datasets `_. .. code-block:: none $ pip install vega_datasets {% for grouper, group in examples %} .. _gallery-category-{{ grouper }}: {{ grouper }} {% for char in grouper %}~{% endfor %} .. raw:: html {% for example in group %} {{ example.title }} {% endfor %}
.. toctree:: :hidden: {% for example in group %} {{ example.name }} {%- endfor %} {% endfor %} """ ) MINIGALLERY_TEMPLATE = jinja2.Template( """ .. raw:: html
{% for example in examples %} {% endfor %}
""" ) EXAMPLE_TEMPLATE = jinja2.Template( """ .. This document is auto-generated by the altair-gallery extension. Do not modify directly. .. _gallery_{{ name }}: {{ docstring }} .. altair-plot:: {% if code_below %}:code-below:{% endif %} {{ code | indent(4) }} .. toctree:: :hidden: """ ) def save_example_pngs(examples, image_dir, make_thumbnails=True): """Save example pngs and (optionally) thumbnails""" if not os.path.exists(image_dir): os.makedirs(image_dir) # store hashes so that we know whether images need to be generated hash_file = os.path.join(image_dir, "_image_hashes.json") if os.path.exists(hash_file): with open(hash_file) as f: hashes = json.load(f) else: hashes = {} for example in examples: filename = example["name"] + ".png" image_file = os.path.join(image_dir, filename) example_hash = hashlib.md5(example["code"].encode()).hexdigest() hashes_match = hashes.get(filename, "") == example_hash if hashes_match and os.path.exists(image_file): print("-> using cached {}".format(image_file)) else: # the file changed or the image file does not exist. Generate it. print("-> saving {}".format(image_file)) chart = eval_block(example["code"]) try: chart.save(image_file) hashes[filename] = example_hash except ImportError: warnings.warn("Unable to save image: using generic image") create_generic_image(image_file) with open(hash_file, "w") as f: json.dump(hashes, f) if make_thumbnails: params = example.get("galleryParameters", {}) thumb_file = os.path.join(image_dir, example["name"] + "-thumb.png") create_thumbnail(image_file, thumb_file, **params) # Save hashes so we know whether we need to re-generate plots with open(hash_file, "w") as f: json.dump(hashes, f) def populate_examples(**kwds): """Iterate through Altair examples and extract code""" examples = sorted(iter_examples(), key=itemgetter("name")) for example in examples: docstring, category, code, lineno = get_docstring_and_rest(example["filename"]) example.update(kwds) if category is None: category = "other charts" example.update( { "docstring": docstring, "title": docstring.strip().split("\n")[0], "code": code, "category": category.title(), "lineno": lineno, } ) return examples class AltairMiniGalleryDirective(Directive): has_content = False option_spec = { "size": int, "names": str, "indices": lambda x: list(map(int, x.split())), "shuffle": flag, "seed": int, "titles": bool, "width": str, } def run(self): size = self.options.get("size", 15) names = [name.strip() for name in self.options.get("names", "").split(",")] indices = self.options.get("indices", []) shuffle = "shuffle" in self.options seed = self.options.get("seed", 42) titles = self.options.get("titles", False) width = self.options.get("width", None) env = self.state.document.settings.env app = env.app gallery_dir = app.builder.config.altair_gallery_dir examples = populate_examples() if names: if len(names) < size: raise ValueError( "altair-minigallery: if names are specified, " "the list must be at least as long as size." ) mapping = {example["name"]: example for example in examples} examples = [mapping[name] for name in names] else: if indices: examples = [examples[i] for i in indices] if shuffle: random.seed(seed) random.shuffle(examples) if size: examples = examples[:size] include = MINIGALLERY_TEMPLATE.render( image_dir="/_static", gallery_dir=gallery_dir, examples=examples, titles=titles, width=width, ) # parse and return documentation result = ViewList() for line in include.split("\n"): result.append(line, "") node = nodes.paragraph() node.document = self.state.document nested_parse_with_titles(self.state, result, node) return node.children def main(app): gallery_dir = app.builder.config.altair_gallery_dir target_dir = os.path.join(app.builder.srcdir, gallery_dir) image_dir = os.path.join(app.builder.srcdir, "_images") gallery_ref = app.builder.config.altair_gallery_ref gallery_title = app.builder.config.altair_gallery_title examples = populate_examples(gallery_ref=gallery_ref, code_below=True) if not os.path.exists(target_dir): os.makedirs(target_dir) examples = sorted(examples, key=lambda x: x["title"]) examples_toc = collections.OrderedDict( { "Simple Charts": [], "Bar Charts": [], "Line Charts": [], "Area Charts": [], "Scatter Plots": [], "Histograms": [], "Maps": [], "Interactive Charts": [], "Case Studies": [], "Other Charts": [], } ) for d in examples: examples_toc[d["category"]].append(d) # Write the gallery index file with open(os.path.join(target_dir, "index.rst"), "w") as f: f.write( GALLERY_TEMPLATE.render( title=gallery_title, examples=examples_toc.items(), image_dir="/_static", gallery_ref=gallery_ref, ) ) # save the images to file save_example_pngs(examples, image_dir) # Write the individual example files for prev_ex, example, next_ex in prev_this_next(examples): if prev_ex: example["prev_ref"] = "gallery_{name}".format(**prev_ex) if next_ex: example["next_ref"] = "gallery_{name}".format(**next_ex) target_filename = os.path.join(target_dir, example["name"] + ".rst") with open(os.path.join(target_filename), "w", encoding="utf-8") as f: f.write(EXAMPLE_TEMPLATE.render(example)) def setup(app): app.connect("builder-inited", main) app.add_stylesheet("altair-gallery.css") app.add_config_value("altair_gallery_dir", "gallery", "env") app.add_config_value("altair_gallery_ref", "example-gallery", "env") app.add_config_value("altair_gallery_title", "Example Gallery", "env") app.add_directive_to_domain("py", "altair-minigallery", AltairMiniGalleryDirective) altair-4.1.0/altair/sphinxext/altairplot.py000066400000000000000000000255201364111050100210170ustar00rootroot00000000000000""" Altair Plot Sphinx Extension ============================ This extension provides a means of inserting live-rendered Altair plots within sphinx documentation. There are two directives defined: ``altair-setup`` and ``altair-plot``. ``altair-setup`` code is used to set-up various options prior to running the plot code. For example:: .. altair-plot:: :output: none from altair import * import pandas as pd data = pd.DataFrame({'a': list('CCCDDDEEE'), 'b': [2, 7, 4, 1, 2, 6, 8, 4, 7]}) .. altair-plot:: Chart(data).mark_point().encode( x='a', y='b' ) In the case of the ``altair-plot`` code, the *last statement* of the code-block should contain the chart object you wish to be rendered. Options ------- The directives have the following options:: .. altair-plot:: :namespace: # specify a plotting namespace that is persistent within the doc :hide-code: # if set, then hide the code and only show the plot :code-below: # if set, then code is below rather than above the figure :output: [plot|repr|stdout|none] :alt: text # Alternate text when plot cannot be rendered :links: editor source export # specify one or more of these options :chart-var-name: chart # name of variable in namespace containing output Additionally, this extension introduces a global configuration ``altairplot_links``, set in your ``conf.py`` which is a dictionary of links that will appear below plots, unless the ``:links:`` option again overrides it. It should look something like this:: # conf.py # ... altairplot_links = {'editor': True, 'source': True, 'export': True} # ... If this configuration is not specified, all are set to True. """ import contextlib import io import os import json import warnings import jinja2 from docutils import nodes from docutils.parsers.rst import Directive from docutils.parsers.rst.directives import flag, unchanged from sphinx.locale import _ import altair as alt from altair.utils.execeval import eval_block # These default URLs can be changed in conf.py; see setup() below. VEGA_JS_URL_DEFAULT = "https://cdn.jsdelivr.net/npm/vega@{}".format(alt.VEGA_VERSION) VEGALITE_JS_URL_DEFAULT = "https://cdn.jsdelivr.net/npm/vega-lite@{}".format( alt.VEGALITE_VERSION ) VEGAEMBED_JS_URL_DEFAULT = "https://cdn.jsdelivr.net/npm/vega-embed@{}".format( alt.VEGAEMBED_VERSION ) VGL_TEMPLATE = jinja2.Template( """
""" ) class altair_plot(nodes.General, nodes.Element): pass def purge_altair_namespaces(app, env, docname): if not hasattr(env, "_altair_namespaces"): return env._altair_namespaces.pop(docname, {}) DEFAULT_ALTAIRPLOT_LINKS = {"editor": True, "source": True, "export": True} def validate_links(links): if links.strip().lower() == "none": return False links = links.strip().split() diff = set(links) - set(DEFAULT_ALTAIRPLOT_LINKS.keys()) if diff: raise ValueError("Following links are invalid: {}".format(list(diff))) return {link: link in links for link in DEFAULT_ALTAIRPLOT_LINKS} def validate_output(output): output = output.strip().lower() if output not in ["plot", "repr", "stdout", "none"]: raise ValueError(":output: flag must be one of [plot|repr|stdout|none]") return output class AltairPlotDirective(Directive): has_content = True option_spec = { "hide-code": flag, "code-below": flag, "namespace": unchanged, "output": validate_output, "alt": unchanged, "links": validate_links, "chart-var-name": unchanged, } def run(self): env = self.state.document.settings.env app = env.app show_code = "hide-code" not in self.options code_below = "code-below" in self.options if not hasattr(env, "_altair_namespaces"): env._altair_namespaces = {} namespace_id = self.options.get("namespace", "default") namespace = env._altair_namespaces.setdefault(env.docname, {}).setdefault( namespace_id, {} ) code = "\n".join(self.content) if show_code: source_literal = nodes.literal_block(code, code) source_literal["language"] = "python" # get the name of the source file we are currently processing rst_source = self.state_machine.document["source"] rst_dir = os.path.dirname(rst_source) rst_filename = os.path.basename(rst_source) # use the source file name to construct a friendly target_id serialno = env.new_serialno("altair-plot") rst_base = rst_filename.replace(".", "-") div_id = "{}-altair-plot-{}".format(rst_base, serialno) target_id = "{}-altair-source-{}".format(rst_base, serialno) target_node = nodes.target("", "", ids=[target_id]) # create the node in which the plot will appear; # this will be processed by html_visit_altair_plot plot_node = altair_plot() plot_node["target_id"] = target_id plot_node["div_id"] = div_id plot_node["code"] = code plot_node["namespace"] = namespace plot_node["relpath"] = os.path.relpath(rst_dir, env.srcdir) plot_node["rst_source"] = rst_source plot_node["rst_lineno"] = self.lineno plot_node["links"] = self.options.get( "links", app.builder.config.altairplot_links ) plot_node["output"] = self.options.get("output", "plot") plot_node["chart-var-name"] = self.options.get("chart-var-name", None) if "alt" in self.options: plot_node["alt"] = self.options["alt"] result = [target_node] if code_below: result += [plot_node] if show_code: result += [source_literal] if not code_below: result += [plot_node] return result def html_visit_altair_plot(self, node): # Execute the code, saving output and namespace namespace = node["namespace"] try: f = io.StringIO() with contextlib.redirect_stdout(f): chart = eval_block(node["code"], namespace) stdout = f.getvalue() except Exception as e: warnings.warn( "altair-plot: {}:{} Code Execution failed:" "{}: {}".format( node["rst_source"], node["rst_lineno"], e.__class__.__name__, str(e) ) ) raise nodes.SkipNode chart_name = node["chart-var-name"] if chart_name is not None: if chart_name not in namespace: raise ValueError( "chart-var-name='{}' not present in namespace" "".format(chart_name) ) chart = namespace[chart_name] output = node["output"] if output == "none": raise nodes.SkipNode elif output == "stdout": if not stdout: raise nodes.SkipNode else: output_literal = nodes.literal_block(stdout, stdout) output_literal["language"] = "none" node.extend([output_literal]) elif output == "repr": if chart is None: raise nodes.SkipNode else: rep = " " + repr(chart).replace("\n", "\n ") repr_literal = nodes.literal_block(rep, rep) repr_literal["language"] = "none" node.extend([repr_literal]) elif output == "plot": if isinstance(chart, alt.TopLevelMixin): # Last line should be a chart; convert to spec dict try: spec = chart.to_dict() except alt.utils.schemapi.SchemaValidationError: raise ValueError("Invalid chart: {0}".format(node["code"])) actions = node["links"] # TODO: add an option to save spects to file & load from there. # TODO: add renderer option # Write spec to a *.vl.json file # dest_dir = os.path.join(self.builder.outdir, node['relpath']) # if not os.path.exists(dest_dir): # os.makedirs(dest_dir) # filename = "{0}.vl.json".format(node['target_id']) # dest_path = os.path.join(dest_dir, filename) # with open(dest_path, 'w') as f: # json.dump(spec, f) # Pass relevant info into the template and append to the output html = VGL_TEMPLATE.render( div_id=node["div_id"], spec=json.dumps(spec), mode="vega-lite", renderer="canvas", actions=json.dumps(actions), ) self.body.append(html) else: warnings.warn( "altair-plot: {}:{} Malformed block. Last line of " "code block should define a valid altair Chart object." "".format(node["rst_source"], node["rst_lineno"]) ) raise nodes.SkipNode def generic_visit_altair_plot(self, node): # TODO: generate PNGs and insert them here if "alt" in node.attributes: self.body.append(_("[ graph: %s ]") % node["alt"]) else: self.body.append(_("[ graph ]")) raise nodes.SkipNode def depart_altair_plot(self, node): return def builder_inited(app): app.add_javascript(app.config.altairplot_vega_js_url) app.add_javascript(app.config.altairplot_vegalite_js_url) app.add_javascript(app.config.altairplot_vegaembed_js_url) def setup(app): setup.app = app setup.config = app.config setup.confdir = app.confdir app.add_config_value("altairplot_links", DEFAULT_ALTAIRPLOT_LINKS, "env") app.add_config_value("altairplot_vega_js_url", VEGA_JS_URL_DEFAULT, "html") app.add_config_value("altairplot_vegalite_js_url", VEGALITE_JS_URL_DEFAULT, "html") app.add_config_value( "altairplot_vegaembed_js_url", VEGAEMBED_JS_URL_DEFAULT, "html" ) app.add_directive("altair-plot", AltairPlotDirective) app.add_stylesheet("altair-plot.css") app.add_node( altair_plot, html=(html_visit_altair_plot, depart_altair_plot), latex=(generic_visit_altair_plot, depart_altair_plot), texinfo=(generic_visit_altair_plot, depart_altair_plot), text=(generic_visit_altair_plot, depart_altair_plot), man=(generic_visit_altair_plot, depart_altair_plot), ) app.connect("env-purge-doc", purge_altair_namespaces) app.connect("builder-inited", builder_inited) return {"version": "0.1"} altair-4.1.0/altair/sphinxext/schematable.py000066400000000000000000000124741364111050100211200ustar00rootroot00000000000000import importlib import warnings import re from docutils.parsers.rst import Directive from docutils import nodes, utils from sphinx import addnodes from recommonmark.parser import CommonMarkParser def type_description(schema): """Return a concise type description for the given schema""" if not schema or not isinstance(schema, dict) or schema.keys() == {"description"}: return "any" elif "$ref" in schema: return ":class:`{}`".format(schema["$ref"].split("/")[-1]) elif "enum" in schema: return "[{}]".format(", ".join(repr(s) for s in schema["enum"])) elif "type" in schema: if isinstance(schema["type"], list): return "[{}]".format(", ".join(schema["type"])) elif schema["type"] == "array": return "array({})".format(type_description(schema.get("items", {}))) elif schema["type"] == "object": return "dict" else: return "`{}`".format(schema["type"]) elif "anyOf" in schema: return "anyOf({})".format( ", ".join(type_description(s) for s in schema["anyOf"]) ) else: warnings.warn( "cannot infer type for schema with keys {}" "".format(schema.keys()) ) return "--" def prepare_table_header(titles, widths): """Build docutil empty table """ ncols = len(titles) assert len(widths) == ncols tgroup = nodes.tgroup(cols=ncols) for width in widths: tgroup += nodes.colspec(colwidth=width) header = nodes.row() for title in titles: header += nodes.entry("", nodes.paragraph(text=title)) tgroup += nodes.thead("", header) tbody = nodes.tbody() tgroup += tbody return nodes.table("", tgroup), tbody reClassDef = re.compile(r":class:`([^`]+)`") reCode = re.compile(r"`([^`]+)`") def add_class_def(node, classDef): """Add reference on classDef to node """ ref = addnodes.pending_xref( reftarget=classDef, reftype="class", refdomain="py", # py:class="None" py:module="altair" refdoc="user_guide/marks" refexplicit=False, # refdoc="", refwarn=False, ) ref["py:class"] = "None" ref["py:module"] = "altair" ref += nodes.literal(text=classDef, classes=["xref", "py", "py-class"]) node += ref return node def add_text(node, text): """Add text with inline code to node """ is_text = True for part in reCode.split(text): if part: if is_text: node += nodes.Text(part, part) else: node += nodes.literal(part, part) is_text = not is_text return node def build_row(item): """Return nodes.row with property description""" prop, propschema, required = item row = nodes.row() # Property row += nodes.entry("", nodes.paragraph(text=prop), classes=["vl-prop"]) # Type str_type = type_description(propschema) par_type = nodes.paragraph() is_text = True for part in reClassDef.split(str_type): if part: if is_text: add_text(par_type, part) else: add_class_def(par_type, part) is_text = not is_text # row += nodes.entry('') row += nodes.entry("", par_type) # , classes=["vl-type-def"] # Description md_parser = CommonMarkParser() # str_descr = "***Required.*** " if required else "" str_descr = "" str_descr += propschema.get("description", " ") doc_descr = utils.new_document("schema_description") md_parser.parse(str_descr, doc_descr) # row += nodes.entry('', *doc_descr.children, classes="vl-decsr") row += nodes.entry("", *doc_descr.children, classes=["vl-decsr"]) return row def build_schema_tabel(items): """Return schema table of items (iterator of prop, schema.item, requred)""" table, tbody = prepare_table_header( ["Property", "Type", "Description"], [10, 20, 50] ) for item in items: tbody += build_row(item) return table def select_items_from_schema(schema, props=None): """Return iterator (prop, schema.item, requred) on prop, return all in None""" properties = schema.get("properties", {}) required = schema.get("required", []) if not props: for prop, item in properties.items(): yield prop, item, prop in required else: for prop in props: try: yield prop, properties[prop], prop in required except KeyError: warnings.warn("Can't find property:", prop) def prepare_schema_tabel(schema, props=None): items = select_items_from_schema(schema, props) return build_schema_tabel(items) class AltairObjectTableDirective(Directive): """ Directive for building a table of attribute descriptions. Usage: .. altair-object-table:: altair.MarkConfig """ has_content = False required_arguments = 1 def run(self): objectname = self.arguments[0] modname, classname = objectname.rsplit(".", 1) module = importlib.import_module(modname) cls = getattr(module, classname) schema = cls.resolve_references(cls._schema) # create the table from the object table = prepare_schema_tabel(schema) return [table] def setup(app): app.add_directive("altair-object-table", AltairObjectTableDirective) altair-4.1.0/altair/sphinxext/utils.py000066400000000000000000000133431364111050100200040ustar00rootroot00000000000000import ast import hashlib import itertools import json import re def create_thumbnail(image_filename, thumb_filename, window_size=(280, 160)): """Create a thumbnail whose shortest dimension matches the window""" from PIL import Image im = Image.open(image_filename) im_width, im_height = im.size width, height = window_size width_factor, height_factor = width / im_width, height / im_height if width_factor > height_factor: final_width = width final_height = int(im_height * width_factor) else: final_height = height final_width = int(im_width * height_factor) thumb = im.resize((final_width, final_height), Image.ANTIALIAS) thumb.save(thumb_filename) def create_generic_image(filename, shape=(200, 300), gradient=True): """Create a generic image""" from PIL import Image import numpy as np assert len(shape) == 2 arr = np.zeros((shape[0], shape[1], 3)) if gradient: # gradient from gray to white arr += np.linspace(128, 255, shape[1])[:, None] im = Image.fromarray(arr.astype("uint8")) im.save(filename) SYNTAX_ERROR_DOCSTRING = """ SyntaxError =========== Example script with invalid Python syntax """ def _parse_source_file(filename): """Parse source file into AST node Parameters ---------- filename : str File path Returns ------- node : AST node content : utf-8 encoded string Notes ----- This function adapted from the sphinx-gallery project; license: BSD-3 https://github.com/sphinx-gallery/sphinx-gallery/ """ with open(filename, "r", encoding="utf-8") as fid: content = fid.read() # change from Windows format to UNIX for uniformity content = content.replace("\r\n", "\n") try: node = ast.parse(content) except SyntaxError: node = None return node, content def get_docstring_and_rest(filename): """Separate ``filename`` content between docstring and the rest Strongly inspired from ast.get_docstring. Parameters ---------- filename: str The path to the file containing the code to be read Returns ------- docstring: str docstring of ``filename`` category: list list of categories specified by the "# category:" comment rest: str ``filename`` content without the docstring lineno: int the line number on which the code starts Notes ----- This function adapted from the sphinx-gallery project; license: BSD-3 https://github.com/sphinx-gallery/sphinx-gallery/ """ node, content = _parse_source_file(filename) # Find the category comment find_category = re.compile(r"^#\s*category:\s*(.*)$", re.MULTILINE) match = find_category.search(content) if match is not None: category = match.groups()[0] # remove this comment from the content content = find_category.sub("", content) else: category = None if node is None: return SYNTAX_ERROR_DOCSTRING, category, content, 1 if not isinstance(node, ast.Module): raise TypeError( "This function only supports modules. " "You provided {}".format(node.__class__.__name__) ) try: # In python 3.7 module knows its docstring. # Everything else will raise an attribute error docstring = node.docstring import tokenize from io import BytesIO ts = tokenize.tokenize(BytesIO(content).readline) ds_lines = 0 # find the first string according to the tokenizer and get # it's end row for tk in ts: if tk.exact_type == 3: ds_lines, _ = tk.end break # grab the rest of the file rest = "\n".join(content.split("\n")[ds_lines:]) lineno = ds_lines + 1 except AttributeError: # this block can be removed when python 3.6 support is dropped if ( node.body and isinstance(node.body[0], ast.Expr) and isinstance(node.body[0].value, (ast.Str, ast.Constant)) ): docstring_node = node.body[0] docstring = docstring_node.value.s # python2.7: Code was read in bytes needs decoding to utf-8 # unless future unicode_literals is imported in source which # make ast output unicode strings if hasattr(docstring, "decode") and not isinstance(docstring, str): docstring = docstring.decode("utf-8") # python3.8: has end_lineno lineno = ( getattr(docstring_node, "end_lineno", None) or docstring_node.lineno ) # The last line of the string. # This get the content of the file after the docstring last line # Note: 'maxsplit' argument is not a keyword argument in python2 rest = content.split("\n", lineno)[-1] lineno += 1 else: docstring, rest = "", "" if not docstring: raise ValueError( ( 'Could not find docstring in file "{0}". ' "A docstring is required for the example gallery." ).format(filename) ) return docstring, category, rest, lineno def prev_this_next(it, sentinel=None): """Utility to return (prev, this, next) tuples from an iterator""" i1, i2, i3 = itertools.tee(it, 3) next(i3, None) return zip(itertools.chain([sentinel], i1), i2, itertools.chain(i3, [sentinel])) def dict_hash(dct): """Return a hash of the contents of a dictionary""" serialized = json.dumps(dct, sort_keys=True) try: m = hashlib.md5(serialized) except TypeError: m = hashlib.md5(serialized.encode()) return m.hexdigest() altair-4.1.0/altair/tests/000077500000000000000000000000001364111050100153765ustar00rootroot00000000000000altair-4.1.0/altair/tests/__init__.py000066400000000000000000000000001364111050100174750ustar00rootroot00000000000000altair-4.1.0/altair/tests/test_magics.py000066400000000000000000000127121364111050100202550ustar00rootroot00000000000000import json import pytest try: from IPython import InteractiveShell IPYTHON_AVAILABLE = True except ImportError: IPYTHON_AVAILABLE = False pass from altair.vegalite.v4 import VegaLite from altair.vega.v5 import Vega DATA_RECORDS = [ {"amount": 28, "category": "A"}, {"amount": 55, "category": "B"}, {"amount": 43, "category": "C"}, {"amount": 91, "category": "D"}, {"amount": 81, "category": "E"}, {"amount": 53, "category": "F"}, {"amount": 19, "category": "G"}, {"amount": 87, "category": "H"}, ] if IPYTHON_AVAILABLE: _ipshell = InteractiveShell.instance() _ipshell.run_cell("%load_ext altair") _ipshell.run_cell( """ import pandas as pd table = pd.DataFrame.from_records({}) the_data = table """.format( DATA_RECORDS ) ) VEGA_SPEC = { "$schema": "https://vega.github.io/schema/vega/v5.json", "axes": [ {"orient": "bottom", "scale": "xscale"}, {"orient": "left", "scale": "yscale"}, ], "data": [{"name": "table", "values": DATA_RECORDS}], "height": 200, "marks": [ { "encode": { "enter": { "width": {"band": 1, "scale": "xscale"}, "x": {"field": "category", "scale": "xscale"}, "y": {"field": "amount", "scale": "yscale"}, "y2": {"scale": "yscale", "value": 0}, }, "hover": {"fill": {"value": "red"}}, "update": {"fill": {"value": "steelblue"}}, }, "from": {"data": "table"}, "type": "rect", }, { "encode": { "enter": { "align": {"value": "center"}, "baseline": {"value": "bottom"}, "fill": {"value": "#333"}, }, "update": { "fillOpacity": [ {"test": "datum === tooltip", "value": 0}, {"value": 1}, ], "text": {"signal": "tooltip.amount"}, "x": {"band": 0.5, "scale": "xscale", "signal": "tooltip.category"}, "y": {"offset": -2, "scale": "yscale", "signal": "tooltip.amount"}, }, }, "type": "text", }, ], "padding": 5, "scales": [ { "domain": {"data": "table", "field": "category"}, "name": "xscale", "padding": 0.05, "range": "width", "round": True, "type": "band", }, { "domain": {"data": "table", "field": "amount"}, "name": "yscale", "nice": True, "range": "height", }, ], "signals": [ { "name": "tooltip", "on": [ {"events": "rect:mouseover", "update": "datum"}, {"events": "rect:mouseout", "update": "{}"}, ], "value": {}, } ], "width": 400, } VEGALITE_SPEC = { "$schema": "https://vega.github.io/schema/vega-lite/v4.json", "data": {"values": DATA_RECORDS}, "description": "A simple bar chart with embedded data.", "encoding": { "x": {"field": "category", "type": "ordinal"}, "y": {"field": "amount", "type": "quantitative"}, }, "mark": "bar", } @pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython") def test_vegalite_magic_data_included(): result = _ipshell.run_cell("%%vegalite\n" + json.dumps(VEGALITE_SPEC)) assert isinstance(result.result, VegaLite) assert VEGALITE_SPEC == result.result.spec @pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython") def test_vegalite_magic_json_flag(): result = _ipshell.run_cell("%%vegalite --json\n" + json.dumps(VEGALITE_SPEC)) assert isinstance(result.result, VegaLite) assert VEGALITE_SPEC == result.result.spec @pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython") def test_vegalite_magic_pandas_data(): spec = {key: val for key, val in VEGALITE_SPEC.items() if key != "data"} result = _ipshell.run_cell("%%vegalite table\n" + json.dumps(spec)) assert isinstance(result.result, VegaLite) assert VEGALITE_SPEC == result.result.spec @pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython") def test_vega_magic_data_included(): result = _ipshell.run_cell("%%vega\n" + json.dumps(VEGA_SPEC)) assert isinstance(result.result, Vega) assert VEGA_SPEC == result.result.spec @pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython") def test_vega_magic_json_flag(): result = _ipshell.run_cell("%%vega --json\n" + json.dumps(VEGA_SPEC)) assert isinstance(result.result, Vega) assert VEGA_SPEC == result.result.spec @pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython") def test_vega_magic_pandas_data(): spec = {key: val for key, val in VEGA_SPEC.items() if key != "data"} result = _ipshell.run_cell("%%vega table\n" + json.dumps(spec)) assert isinstance(result.result, Vega) assert VEGA_SPEC == result.result.spec @pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython") def test_vega_magic_pandas_data_renamed(): spec = {key: val for key, val in VEGA_SPEC.items() if key != "data"} result = _ipshell.run_cell("%%vega table:the_data\n" + json.dumps(spec)) assert isinstance(result.result, Vega) assert VEGA_SPEC == result.result.spec altair-4.1.0/altair/utils/000077500000000000000000000000001364111050100153745ustar00rootroot00000000000000altair-4.1.0/altair/utils/__init__.py000066400000000000000000000012451364111050100175070ustar00rootroot00000000000000from .core import ( infer_vegalite_type, infer_encoding_types, sanitize_dataframe, parse_shorthand, use_signature, update_subtraits, update_nested, display_traceback, SchemaBase, Undefined, ) from .html import spec_to_html from .plugin_registry import PluginRegistry from .deprecation import AltairDeprecationWarning __all__ = ( "infer_vegalite_type", "infer_encoding_types", "sanitize_dataframe", "spec_to_html", "parse_shorthand", "use_signature", "update_subtraits", "update_nested", "display_traceback", "AltairDeprecationWarning", "SchemaBase", "Undefined", "PluginRegistry", ) altair-4.1.0/altair/utils/core.py000066400000000000000000000506261364111050100167070ustar00rootroot00000000000000""" Utility routines """ from collections.abc import Mapping from copy import deepcopy import json import itertools import re import sys import traceback import warnings import jsonschema import pandas as pd import numpy as np from .schemapi import SchemaBase, Undefined try: from pandas.api.types import infer_dtype as _infer_dtype except ImportError: # Import for pandas < 0.20.0 from pandas.lib import infer_dtype as _infer_dtype def infer_dtype(value): """Infer the dtype of the value. This is a compatibility function for pandas infer_dtype, with skipna=False regardless of the pandas version. """ if not hasattr(infer_dtype, "_supports_skipna"): try: _infer_dtype([1], skipna=False) except TypeError: # pandas < 0.21.0 don't support skipna keyword infer_dtype._supports_skipna = False else: infer_dtype._supports_skipna = True if infer_dtype._supports_skipna: return _infer_dtype(value, skipna=False) else: return _infer_dtype(value) TYPECODE_MAP = { "ordinal": "O", "nominal": "N", "quantitative": "Q", "temporal": "T", "geojson": "G", } INV_TYPECODE_MAP = {v: k for k, v in TYPECODE_MAP.items()} # aggregates from vega-lite version 4.6.0 AGGREGATES = [ "argmax", "argmin", "average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep", ] # window aggregates from vega-lite version 4.6.0 WINDOW_AGGREGATES = [ "row_number", "rank", "dense_rank", "percent_rank", "cume_dist", "ntile", "lag", "lead", "first_value", "last_value", "nth_value", ] # timeUnits from vega-lite version 4.6.0 TIMEUNITS = [ "utcyear", "utcquarter", "utcmonth", "utcday", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds", "utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds", "year", "quarter", "month", "day", "date", "hours", "minutes", "seconds", "milliseconds", "yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "quartermonth", "monthdate", "monthdatehours", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds", ] def infer_vegalite_type(data): """ From an array-like input, infer the correct vega typecode ('ordinal', 'nominal', 'quantitative', or 'temporal') Parameters ---------- data: Numpy array or Pandas Series """ # Otherwise, infer based on the dtype of the input typ = infer_dtype(data) # TODO: Once this returns 'O', please update test_select_x and test_select_y in test_api.py if typ in [ "floating", "mixed-integer-float", "integer", "mixed-integer", "complex", ]: return "quantitative" elif typ in ["string", "bytes", "categorical", "boolean", "mixed", "unicode"]: return "nominal" elif typ in [ "datetime", "datetime64", "timedelta", "timedelta64", "date", "time", "period", ]: return "temporal" else: warnings.warn( "I don't know how to infer vegalite type from '{}'. " "Defaulting to nominal.".format(typ) ) return "nominal" def merge_props_geom(feat): """ Merge properties with geometry * Overwrites 'type' and 'geometry' entries if existing """ geom = {k: feat[k] for k in ("type", "geometry")} try: feat["properties"].update(geom) props_geom = feat["properties"] except (AttributeError, KeyError): # AttributeError when 'properties' equals None # KeyError when 'properties' is non-existing props_geom = geom return props_geom def sanitize_geo_interface(geo): """Santize a geo_interface to prepare it for serialization. * Make a copy * Convert type array or _Array to list * Convert tuples to lists (using json.loads/dumps) * Merge properties with geometry """ geo = deepcopy(geo) # convert type _Array or array to list for key in geo.keys(): if str(type(geo[key]).__name__).startswith(("_Array", "array")): geo[key] = geo[key].tolist() # convert (nested) tuples to lists geo = json.loads(json.dumps(geo)) # sanitize features if geo["type"] == "FeatureCollection": geo = geo["features"] if len(geo) > 0: for idx, feat in enumerate(geo): geo[idx] = merge_props_geom(feat) elif geo["type"] == "Feature": geo = merge_props_geom(geo) else: geo = {"type": "Feature", "geometry": geo} return geo def sanitize_dataframe(df): # noqa: C901 """Sanitize a DataFrame to prepare it for serialization. * Make a copy * Convert RangeIndex columns to strings * Raise ValueError if column names are not strings * Raise ValueError if it has a hierarchical index. * Convert categoricals to strings. * Convert np.bool_ dtypes to Python bool objects * Convert np.int dtypes to Python int objects * Convert floats to objects and replace NaNs/infs with None. * Convert DateTime dtypes into appropriate string representations * Convert Nullable integers to objects and replace NaN with None * Convert Nullable boolean to objects and replace NaN with None * convert dedicated string column to objects and replace NaN with None * Raise a ValueError for TimeDelta dtypes """ df = df.copy() if isinstance(df.columns, pd.RangeIndex): df.columns = df.columns.astype(str) for col in df.columns: if not isinstance(col, str): raise ValueError( "Dataframe contains invalid column name: {0!r}. " "Column names must be strings".format(col) ) if isinstance(df.index, pd.MultiIndex): raise ValueError("Hierarchical indices not supported") if isinstance(df.columns, pd.MultiIndex): raise ValueError("Hierarchical indices not supported") def to_list_if_array(val): if isinstance(val, np.ndarray): return val.tolist() else: return val for col_name, dtype in df.dtypes.iteritems(): if str(dtype) == "category": # XXXX: work around bug in to_json for categorical types # https://github.com/pydata/pandas/issues/10778 col = df[col_name].astype(object) df[col_name] = col.where(col.notnull(), None) elif str(dtype) == "string": # dedicated string datatype (since 1.0) # https://pandas.pydata.org/pandas-docs/version/1.0.0/whatsnew/v1.0.0.html#dedicated-string-data-type col = df[col_name].astype(object) df[col_name] = col.where(col.notnull(), None) elif str(dtype) == "bool": # convert numpy bools to objects; np.bool is not JSON serializable df[col_name] = df[col_name].astype(object) elif str(dtype) == "boolean": # dedicated boolean datatype (since 1.0) # https://pandas.io/docs/user_guide/boolean.html col = df[col_name].astype(object) df[col_name] = col.where(col.notnull(), None) elif str(dtype).startswith("datetime"): # Convert datetimes to strings. This needs to be a full ISO string # with time, which is why we cannot use ``col.astype(str)``. # This is because Javascript parses date-only times in UTC, but # parses full ISO-8601 dates as local time, and dates in Vega and # Vega-Lite are displayed in local time by default. # (see https://github.com/altair-viz/altair/issues/1027) df[col_name] = ( df[col_name].apply(lambda x: x.isoformat()).replace("NaT", "") ) elif str(dtype).startswith("timedelta"): raise ValueError( 'Field "{col_name}" has type "{dtype}" which is ' "not supported by Altair. Please convert to " "either a timestamp or a numerical value." "".format(col_name=col_name, dtype=dtype) ) elif str(dtype).startswith("geometry"): # geopandas >=0.6.1 uses the dtype geometry. Continue here # otherwise it will give an error on np.issubdtype(dtype, np.integer) continue elif str(dtype) in { "Int8", "Int16", "Int32", "Int64", "UInt8", "UInt16", "UInt32", "UInt64", }: # nullable integer datatypes (since 24.0) # https://pandas.pydata.org/pandas-docs/version/0.25/whatsnew/v0.24.0.html#optional-integer-na-support col = df[col_name].astype(object) df[col_name] = col.where(col.notnull(), None) elif np.issubdtype(dtype, np.integer): # convert integers to objects; np.int is not JSON serializable df[col_name] = df[col_name].astype(object) elif np.issubdtype(dtype, np.floating): # For floats, convert to Python float: np.float is not JSON serializable # Also convert NaN/inf values to null, as they are not JSON serializable col = df[col_name] bad_values = col.isnull() | np.isinf(col) df[col_name] = col.astype(object).where(~bad_values, None) elif dtype == object: # Convert numpy arrays saved as objects to lists # Arrays are not JSON serializable col = df[col_name].apply(to_list_if_array, convert_dtype=False) df[col_name] = col.where(col.notnull(), None) return df def parse_shorthand( shorthand, data=None, parse_aggregates=True, parse_window_ops=False, parse_timeunits=True, parse_types=True, ): """General tool to parse shorthand values These are of the form: - "col_name" - "col_name:O" - "average(col_name)" - "average(col_name):O" Optionally, a dataframe may be supplied, from which the type will be inferred if not specified in the shorthand. Parameters ---------- shorthand : dict or string The shorthand representation to be parsed data : DataFrame, optional If specified and of type DataFrame, then use these values to infer the column type if not provided by the shorthand. parse_aggregates : boolean If True (default), then parse aggregate functions within the shorthand. parse_window_ops : boolean If True then parse window operations within the shorthand (default:False) parse_timeunits : boolean If True (default), then parse timeUnits from within the shorthand parse_types : boolean If True (default), then parse typecodes within the shorthand Returns ------- attrs : dict a dictionary of attributes extracted from the shorthand Examples -------- >>> data = pd.DataFrame({'foo': ['A', 'B', 'A', 'B'], ... 'bar': [1, 2, 3, 4]}) >>> parse_shorthand('name') == {'field': 'name'} True >>> parse_shorthand('name:Q') == {'field': 'name', 'type': 'quantitative'} True >>> parse_shorthand('average(col)') == {'aggregate': 'average', 'field': 'col'} True >>> parse_shorthand('foo:O') == {'field': 'foo', 'type': 'ordinal'} True >>> parse_shorthand('min(foo):Q') == {'aggregate': 'min', 'field': 'foo', 'type': 'quantitative'} True >>> parse_shorthand('month(col)') == {'field': 'col', 'timeUnit': 'month', 'type': 'temporal'} True >>> parse_shorthand('year(col):O') == {'field': 'col', 'timeUnit': 'year', 'type': 'ordinal'} True >>> parse_shorthand('foo', data) == {'field': 'foo', 'type': 'nominal'} True >>> parse_shorthand('bar', data) == {'field': 'bar', 'type': 'quantitative'} True >>> parse_shorthand('bar:O', data) == {'field': 'bar', 'type': 'ordinal'} True >>> parse_shorthand('sum(bar)', data) == {'aggregate': 'sum', 'field': 'bar', 'type': 'quantitative'} True >>> parse_shorthand('count()', data) == {'aggregate': 'count', 'type': 'quantitative'} True """ if not shorthand: return {} valid_typecodes = list(TYPECODE_MAP) + list(INV_TYPECODE_MAP) units = dict( field="(?P.*)", type="(?P{})".format("|".join(valid_typecodes)), agg_count="(?Pcount)", op_count="(?Pcount)", aggregate="(?P{})".format("|".join(AGGREGATES)), window_op="(?P{})".format("|".join(AGGREGATES + WINDOW_AGGREGATES)), timeUnit="(?P{})".format("|".join(TIMEUNITS)), ) patterns = [] if parse_aggregates: patterns.extend([r"{agg_count}\(\)"]) patterns.extend([r"{aggregate}\({field}\)"]) if parse_window_ops: patterns.extend([r"{op_count}\(\)"]) patterns.extend([r"{window_op}\({field}\)"]) if parse_timeunits: patterns.extend([r"{timeUnit}\({field}\)"]) patterns.extend([r"{field}"]) if parse_types: patterns = list(itertools.chain(*((p + ":{type}", p) for p in patterns))) regexps = ( re.compile(r"\A" + p.format(**units) + r"\Z", re.DOTALL) for p in patterns ) # find matches depending on valid fields passed if isinstance(shorthand, dict): attrs = shorthand else: attrs = next( exp.match(shorthand).groupdict() for exp in regexps if exp.match(shorthand) ) # Handle short form of the type expression if "type" in attrs: attrs["type"] = INV_TYPECODE_MAP.get(attrs["type"], attrs["type"]) # counts are quantitative by default if attrs == {"aggregate": "count"}: attrs["type"] = "quantitative" # times are temporal by default if "timeUnit" in attrs and "type" not in attrs: attrs["type"] = "temporal" # if data is specified and type is not, infer type from data if isinstance(data, pd.DataFrame) and "type" not in attrs: if "field" in attrs and attrs["field"] in data.columns: attrs["type"] = infer_vegalite_type(data[attrs["field"]]) return attrs def use_signature(Obj): """Apply call signature and documentation of Obj to the decorated method""" def decorate(f): # call-signature of f is exposed via __wrapped__. # we want it to mimic Obj.__init__ f.__wrapped__ = Obj.__init__ f._uses_signature = Obj # Supplement the docstring of f with information from Obj if Obj.__doc__: doclines = Obj.__doc__.splitlines() if f.__doc__: doc = f.__doc__ + "\n".join(doclines[1:]) else: doc = "\n".join(doclines) try: f.__doc__ = doc except AttributeError: # __doc__ is not modifiable for classes in Python < 3.3 pass return f return decorate def update_subtraits(obj, attrs, **kwargs): """Recursively update sub-traits without overwriting other traits""" # TODO: infer keywords from args if not kwargs: return obj # obj can be a SchemaBase object or a dict if obj is Undefined: obj = dct = {} elif isinstance(obj, SchemaBase): dct = obj._kwds else: dct = obj if isinstance(attrs, str): attrs = (attrs,) if len(attrs) == 0: dct.update(kwargs) else: attr = attrs[0] trait = dct.get(attr, Undefined) if trait is Undefined: trait = dct[attr] = {} dct[attr] = update_subtraits(trait, attrs[1:], **kwargs) return obj def update_nested(original, update, copy=False): """Update nested dictionaries Parameters ---------- original : dict the original (nested) dictionary, which will be updated in-place update : dict the nested dictionary of updates copy : bool, default False if True, then copy the original dictionary rather than modifying it Returns ------- original : dict a reference to the (modified) original dict Examples -------- >>> original = {'x': {'b': 2, 'c': 4}} >>> update = {'x': {'b': 5, 'd': 6}, 'y': 40} >>> update_nested(original, update) # doctest: +SKIP {'x': {'b': 5, 'c': 4, 'd': 6}, 'y': 40} >>> original # doctest: +SKIP {'x': {'b': 5, 'c': 4, 'd': 6}, 'y': 40} """ if copy: original = deepcopy(original) for key, val in update.items(): if isinstance(val, Mapping): orig_val = original.get(key, {}) if isinstance(orig_val, Mapping): original[key] = update_nested(orig_val, val) else: original[key] = val else: original[key] = val return original def display_traceback(in_ipython=True): exc_info = sys.exc_info() if in_ipython: from IPython.core.getipython import get_ipython ip = get_ipython() else: ip = None if ip is not None: ip.showtraceback(exc_info) else: traceback.print_exception(*exc_info) def infer_encoding_types(args, kwargs, channels): """Infer typed keyword arguments for args and kwargs Parameters ---------- args : tuple List of function args kwargs : dict Dict of function kwargs channels : module The module containing all altair encoding channel classes. Returns ------- kwargs : dict All args and kwargs in a single dict, with keys and types based on the channels mapping. """ # Construct a dictionary of channel type to encoding name # TODO: cache this somehow? channel_objs = (getattr(channels, name) for name in dir(channels)) channel_objs = ( c for c in channel_objs if isinstance(c, type) and issubclass(c, SchemaBase) ) channel_to_name = {c: c._encoding_name for c in channel_objs} name_to_channel = {} for chan, name in channel_to_name.items(): chans = name_to_channel.setdefault(name, {}) key = "value" if chan.__name__.endswith("Value") else "field" chans[key] = chan # First use the mapping to convert args to kwargs based on their types. for arg in args: if isinstance(arg, (list, tuple)) and len(arg) > 0: type_ = type(arg[0]) else: type_ = type(arg) encoding = channel_to_name.get(type_, None) if encoding is None: raise NotImplementedError("positional of type {}" "".format(type_)) if encoding in kwargs: raise ValueError("encoding {} specified twice.".format(encoding)) kwargs[encoding] = arg def _wrap_in_channel_class(obj, encoding): try: condition = obj["condition"] except (KeyError, TypeError): pass else: if condition is not Undefined: obj = obj.copy() obj["condition"] = _wrap_in_channel_class(condition, encoding) if isinstance(obj, SchemaBase): return obj if isinstance(obj, str): obj = {"shorthand": obj} if isinstance(obj, (list, tuple)): return [_wrap_in_channel_class(subobj, encoding) for subobj in obj] if encoding not in name_to_channel: warnings.warn("Unrecognized encoding channel '{}'".format(encoding)) return obj classes = name_to_channel[encoding] cls = classes["value"] if "value" in obj else classes["field"] try: # Don't force validation here; some objects won't be valid until # they're created in the context of a chart. return cls.from_dict(obj, validate=False) except jsonschema.ValidationError: # our attempts at finding the correct class have failed return obj return { encoding: _wrap_in_channel_class(obj, encoding) for encoding, obj in kwargs.items() } altair-4.1.0/altair/utils/data.py000066400000000000000000000175331364111050100166700ustar00rootroot00000000000000import json import os import random import hashlib import warnings import pandas as pd from toolz import curried from typing import Callable from .core import sanitize_dataframe from .core import sanitize_geo_interface from .deprecation import AltairDeprecationWarning from .plugin_registry import PluginRegistry # ============================================================================== # Data transformer registry # ============================================================================== DataTransformerType = Callable class DataTransformerRegistry(PluginRegistry[DataTransformerType]): _global_settings = {"consolidate_datasets": True} @property def consolidate_datasets(self): return self._global_settings["consolidate_datasets"] @consolidate_datasets.setter def consolidate_datasets(self, value): self._global_settings["consolidate_datasets"] = value # ============================================================================== # Data model transformers # # A data model transformer is a pure function that takes a dict or DataFrame # and returns a transformed version of a dict or DataFrame. The dict objects # will be the Data portion of the VegaLite schema. The idea is that user can # pipe a sequence of these data transformers together to prepare the data before # it hits the renderer. # # In this version of Altair, renderers only deal with the dict form of a # VegaLite spec, after the Data model has been put into a schema compliant # form. # # A data model transformer has the following type signature: # DataModelType = Union[dict, pd.DataFrame] # DataModelTransformerType = Callable[[DataModelType, KwArgs], DataModelType] # ============================================================================== class MaxRowsError(Exception): """Raised when a data model has too many rows.""" pass @curried.curry def limit_rows(data, max_rows=5000): """Raise MaxRowsError if the data model has more than max_rows. If max_rows is None, then do not perform any check. """ check_data_type(data) if hasattr(data, "__geo_interface__"): if data.__geo_interface__["type"] == "FeatureCollection": values = data.__geo_interface__["features"] else: values = data.__geo_interface__ elif isinstance(data, pd.DataFrame): values = data elif isinstance(data, dict): if "values" in data: values = data["values"] else: return data if max_rows is not None and len(values) > max_rows: raise MaxRowsError( "The number of rows in your dataset is greater " "than the maximum allowed ({}). " "For information on how to plot larger datasets " "in Altair, see the documentation".format(max_rows) ) return data @curried.curry def sample(data, n=None, frac=None): """Reduce the size of the data model by sampling without replacement.""" check_data_type(data) if isinstance(data, pd.DataFrame): return data.sample(n=n, frac=frac) elif isinstance(data, dict): if "values" in data: values = data["values"] n = n if n else int(frac * len(values)) values = random.sample(values, n) return {"values": values} @curried.curry def to_json( data, prefix="altair-data", extension="json", filename="{prefix}-{hash}.{extension}", urlpath="", ): """ Write the data model to a .json file and return a url based data model. """ data_json = _data_to_json_string(data) data_hash = _compute_data_hash(data_json) filename = filename.format(prefix=prefix, hash=data_hash, extension=extension) with open(filename, "w") as f: f.write(data_json) return {"url": os.path.join(urlpath, filename), "format": {"type": "json"}} @curried.curry def to_csv( data, prefix="altair-data", extension="csv", filename="{prefix}-{hash}.{extension}", urlpath="", ): """Write the data model to a .csv file and return a url based data model.""" data_csv = _data_to_csv_string(data) data_hash = _compute_data_hash(data_csv) filename = filename.format(prefix=prefix, hash=data_hash, extension=extension) with open(filename, "w") as f: f.write(data_csv) return {"url": os.path.join(urlpath, filename), "format": {"type": "csv"}} @curried.curry def to_values(data): """Replace a DataFrame by a data model with values.""" check_data_type(data) if hasattr(data, "__geo_interface__"): if isinstance(data, pd.DataFrame): data = sanitize_dataframe(data) data = sanitize_geo_interface(data.__geo_interface__) return {"values": data} elif isinstance(data, pd.DataFrame): data = sanitize_dataframe(data) return {"values": data.to_dict(orient="records")} elif isinstance(data, dict): if "values" not in data: raise KeyError("values expected in data dict, but not present.") return data def check_data_type(data): """Raise if the data is not a dict or DataFrame.""" if not isinstance(data, (dict, pd.DataFrame)) and not hasattr( data, "__geo_interface__" ): raise TypeError( "Expected dict, DataFrame or a __geo_interface__ attribute, got: {}".format( type(data) ) ) # ============================================================================== # Private utilities # ============================================================================== def _compute_data_hash(data_str): return hashlib.md5(data_str.encode()).hexdigest() def _data_to_json_string(data): """Return a JSON string representation of the input data""" check_data_type(data) if hasattr(data, "__geo_interface__"): if isinstance(data, pd.DataFrame): data = sanitize_dataframe(data) data = sanitize_geo_interface(data.__geo_interface__) return json.dumps(data) elif isinstance(data, pd.DataFrame): data = sanitize_dataframe(data) return data.to_json(orient="records") elif isinstance(data, dict): if "values" not in data: raise KeyError("values expected in data dict, but not present.") return json.dumps(data["values"], sort_keys=True) else: raise NotImplementedError( "to_json only works with data expressed as " "a DataFrame or as a dict" ) def _data_to_csv_string(data): """return a CSV string representation of the input data""" check_data_type(data) if hasattr(data, "__geo_interface__"): raise NotImplementedError( "to_csv does not work with data that " "contains the __geo_interface__ attribute" ) elif isinstance(data, pd.DataFrame): data = sanitize_dataframe(data) return data.to_csv(index=False) elif isinstance(data, dict): if "values" not in data: raise KeyError("values expected in data dict, but not present") return pd.DataFrame.from_dict(data["values"]).to_csv(index=False) else: raise NotImplementedError( "to_csv only works with data expressed as " "a DataFrame or as a dict" ) def pipe(data, *funcs): """ Pipe a value through a sequence of functions Deprecated: use toolz.curried.pipe() instead. """ warnings.warn( "alt.pipe() is deprecated, and will be removed in a future release. " "Use toolz.curried.pipe() instead.", AltairDeprecationWarning, ) return curried.pipe(data, *funcs) def curry(*args, **kwargs): """ Curry a callable function Deprecated: use toolz.curried.curry() instead. """ warnings.warn( "alt.curry() is deprecated, and will be removed in a future release. " "Use toolz.curried.curry() instead.", AltairDeprecationWarning, ) return curried.curry(*args, **kwargs) altair-4.1.0/altair/utils/deprecation.py000066400000000000000000000033201364111050100202410ustar00rootroot00000000000000import warnings import functools class AltairDeprecationWarning(UserWarning): pass def deprecated(message=None): """Decorator to deprecate a function or class. Parameters ---------- message : string (optional) The deprecation message """ def wrapper(obj): return _deprecate(obj, message=message) return wrapper def _deprecate(obj, name=None, message=None): """Return a version of a class or function that raises a deprecation warning. Parameters ---------- obj : class or function The object to create a deprecated version of. name : string (optional) The name of the deprecated object message : string (optional) The deprecation message Returns ------- deprecated_obj : The deprecated version of obj Examples -------- >>> class Foo(object): pass >>> OldFoo = _deprecate(Foo, "OldFoo") >>> f = OldFoo() # doctest: +SKIP AltairDeprecationWarning: alt.OldFoo is deprecated. Use alt.Foo instead. """ if message is None: message = "alt.{} is deprecated. Use alt.{} instead." "".format( name, obj.__name__ ) if isinstance(obj, type): return type( name, (obj,), { "__doc__": obj.__doc__, "__init__": _deprecate(obj.__init__, "__init__", message), }, ) elif callable(obj): @functools.wraps(obj) def new_obj(*args, **kwargs): warnings.warn(message, AltairDeprecationWarning) return obj(*args, **kwargs) return new_obj else: raise ValueError("Cannot deprecate object of type {}".format(type(obj))) altair-4.1.0/altair/utils/display.py000066400000000000000000000141751364111050100174230ustar00rootroot00000000000000import json import pkgutil import textwrap from typing import Callable, Dict import uuid from jsonschema import validate from .plugin_registry import PluginRegistry from .mimebundle import spec_to_mimebundle # ============================================================================== # Renderer registry # ============================================================================== MimeBundleType = Dict[str, object] RendererType = Callable[..., MimeBundleType] class RendererRegistry(PluginRegistry[RendererType]): entrypoint_err_messages = { "notebook": textwrap.dedent( """ To use the 'notebook' renderer, you must install the vega package and the associated Jupyter extension. See https://altair-viz.github.io/getting_started/installation.html for more information. """ ), "altair_viewer": textwrap.dedent( """ To use the 'altair_viewer' renderer, you must install the altair_viewer package; see http://github.com/altair-viz/altair_viewer/ for more information. """ ), } def set_embed_options( self, defaultStyle=None, renderer=None, width=None, height=None, padding=None, scaleFactor=None, actions=None, **kwargs, ): """Set options for embeddings of Vega & Vega-Lite charts. Options are fully documented at https://github.com/vega/vega-embed. Similar to the `enable()` method, this can be used as either a persistent global switch, or as a temporary local setting using a context manager (i.e. a `with` statement). Parameters ---------- defaultStyle : bool or string Specify a default stylesheet for embed actions. renderer : string The renderer to use for the view. One of "canvas" (default) or "svg" width : integer The view width in pixels height : integer The view height in pixels padding : integer The view padding in pixels scaleFactor : number The number by which to multiply the width and height (default 1) of an exported PNG or SVG image. actions : bool or dict Determines if action links ("Export as PNG/SVG", "View Source", "View Vega" (only for Vega-Lite), "Open in Vega Editor") are included with the embedded view. If the value is true, all action links will be shown and none if the value is false. This property can take a key-value mapping object that maps keys (export, source, compiled, editor) to boolean values for determining if each action link should be shown. **kwargs : Additional options are passed directly to embed options. """ options = { "defaultStyle": defaultStyle, "renderer": renderer, "width": width, "height": height, "padding": padding, "scaleFactor": scaleFactor, "actions": actions, } kwargs.update({key: val for key, val in options.items() if val is not None}) return self.enable(None, embed_options=kwargs) # ============================================================================== # VegaLite v1/v2 renderer logic # ============================================================================== class Displayable(object): """A base display class for VegaLite v1/v2. This class takes a VegaLite v1/v2 spec and does the following: 1. Optionally validates the spec against a schema. 2. Uses the RendererPlugin to grab a renderer and call it when the IPython/Jupyter display method (_repr_mimebundle_) is called. The spec passed to this class must be fully schema compliant and already have the data portion of the spec fully processed and ready to serialize. In practice, this means, the data portion of the spec should have been passed through appropriate data model transformers. """ renderers = None schema_path = ("altair", "") def __init__(self, spec, validate=False): # type: (dict, bool) -> None self.spec = spec self.validate = validate self._validate() def _validate(self): # type: () -> None """Validate the spec against the schema.""" schema_dict = json.loads(pkgutil.get_data(*self.schema_path).decode("utf-8")) validate(self.spec, schema_dict) def _repr_mimebundle_(self, include=None, exclude=None): """Return a MIME bundle for display in Jupyter frontends.""" if self.renderers is not None: return self.renderers.get()(self.spec) else: return {} def default_renderer_base(spec, mime_type, str_repr, **options): """A default renderer for Vega or VegaLite that works for modern frontends. This renderer works with modern frontends (JupyterLab, nteract) that know how to render the custom VegaLite MIME type listed above. """ assert isinstance(spec, dict) bundle = {} metadata = {} bundle[mime_type] = spec bundle["text/plain"] = str_repr if options: metadata[mime_type] = options return bundle, metadata def json_renderer_base(spec, str_repr, **options): """A renderer that returns a MIME type of application/json. In JupyterLab/nteract this is rendered as a nice JSON tree. """ return default_renderer_base( spec, mime_type="application/json", str_repr=str_repr, **options ) class HTMLRenderer(object): """Object to render charts as HTML, with a unique output div each time""" def __init__(self, output_div="altair-viz-{}", **kwargs): self._output_div = output_div self.kwargs = kwargs @property def output_div(self): return self._output_div.format(uuid.uuid4().hex) def __call__(self, spec, **metadata): kwargs = self.kwargs.copy() kwargs.update(metadata) return spec_to_mimebundle( spec, format="html", output_div=self.output_div, **kwargs ) altair-4.1.0/altair/utils/execeval.py000066400000000000000000000030761364111050100175500ustar00rootroot00000000000000import ast import sys if sys.version_info > (3, 8): Module = ast.Module else: # Mock the Python >= 3.8 API def Module(nodelist, type_ignores): return ast.Module(nodelist) class _CatchDisplay(object): """Class to temporarily catch sys.displayhook""" def __init__(self): self.output = None def __enter__(self): self.old_hook = sys.displayhook sys.displayhook = self return self def __exit__(self, type, value, traceback): sys.displayhook = self.old_hook # Returning False will cause exceptions to propagate return False def __call__(self, output): self.output = output def eval_block(code, namespace=None, filename=""): """ Execute a multi-line block of code in the given namespace If the final statement in the code is an expression, return the result of the expression. """ tree = ast.parse(code, filename="", mode="exec") if namespace is None: namespace = {} catch_display = _CatchDisplay() if isinstance(tree.body[-1], ast.Expr): to_exec, to_eval = tree.body[:-1], tree.body[-1:] else: to_exec, to_eval = tree.body, [] for node in to_exec: compiled = compile(Module([node], []), filename=filename, mode="exec") exec(compiled, namespace) with catch_display: for node in to_eval: compiled = compile( ast.Interactive([node]), filename=filename, mode="single" ) exec(compiled, namespace) return catch_display.output altair-4.1.0/altair/utils/html.py000066400000000000000000000166631364111050100167260ustar00rootroot00000000000000import json import jinja2 HTML_TEMPLATE = jinja2.Template( """ {%- if fullhtml -%} {%- endif %} {%- if not requirejs %} {%- if mode == 'vega-lite' %} {%- endif %} {%- endif %} {%- if fullhtml %} {%- if requirejs %} {%- endif %} {%- endif %}
{%- if fullhtml %} {%- endif %} """ ) HTML_TEMPLATE_UNIVERSAL = jinja2.Template( """
""" ) TEMPLATES = { "standard": HTML_TEMPLATE, "universal": HTML_TEMPLATE_UNIVERSAL, } def spec_to_html( spec, mode, vega_version, vegaembed_version, vegalite_version=None, base_url="https://cdn.jsdelivr.net/npm/", output_div="vis", embed_options=None, json_kwds=None, fullhtml=True, requirejs=False, template="standard", ): """Embed a Vega/Vega-Lite spec into an HTML page Parameters ---------- spec : dict a dictionary representing a vega-lite plot spec. mode : string {'vega' | 'vega-lite'} The rendering mode. This value is overridden by embed_options['mode'], if it is present. vega_version : string For html output, the version of vega.js to use. vegalite_version : string For html output, the version of vegalite.js to use. vegaembed_version : string For html output, the version of vegaembed.js to use. base_url : string (optional) The base url from which to load the javascript libraries. output_div : string (optional) The id of the div element where the plot will be shown. embed_options : dict (optional) Dictionary of options to pass to the vega-embed script. Default entry is {'mode': mode}. json_kwds : dict (optional) Dictionary of keywords to pass to json.dumps(). fullhtml : boolean (optional) If True (default) then return a full html page. If False, then return an HTML snippet that can be embedded into an HTML page. requirejs : boolean (optional) If False (default) then load libraries from base_url using ") if requirejs: assert "require(" in html else: assert "require(" not in html assert "vega-lite@{}".format(vegalite_version) in html assert "vega@{}".format(vega_version) in html assert "vega-embed@{}".format(vegaembed_version) in html altair-4.1.0/altair/utils/tests/test_mimebundle.py000066400000000000000000000131321364111050100222700ustar00rootroot00000000000000import pytest import altair as alt from ..mimebundle import spec_to_mimebundle @pytest.fixture def require_altair_saver(): try: import altair_saver # noqa: F401 except ImportError: pytest.skip("altair_saver not importable; cannot run saver tests") @pytest.fixture def vegalite_spec(): return { "$schema": "https://vega.github.io/schema/vega-lite/v4.json", "description": "A simple bar chart with embedded data.", "data": { "values": [ {"a": "A", "b": 28}, {"a": "B", "b": 55}, {"a": "C", "b": 43}, {"a": "D", "b": 91}, {"a": "E", "b": 81}, {"a": "F", "b": 53}, {"a": "G", "b": 19}, {"a": "H", "b": 87}, {"a": "I", "b": 52}, ] }, "mark": "bar", "encoding": { "x": {"field": "a", "type": "ordinal"}, "y": {"field": "b", "type": "quantitative"}, }, } @pytest.fixture def vega_spec(): return { "$schema": "https://vega.github.io/schema/vega/v5.json", "axes": [ { "domain": False, "grid": True, "gridScale": "x", "labels": False, "maxExtent": 0, "minExtent": 0, "orient": "left", "scale": "y", "tickCount": {"signal": "ceil(height/40)"}, "ticks": False, "zindex": 0, }, { "grid": False, "labelAlign": "right", "labelAngle": 270, "labelBaseline": "middle", "labelOverlap": True, "orient": "bottom", "scale": "x", "title": "a", "zindex": 0, }, { "grid": False, "labelOverlap": True, "orient": "left", "scale": "y", "tickCount": {"signal": "ceil(height/40)"}, "title": "b", "zindex": 0, }, ], "background": "white", "data": [ { "name": "source_0", "values": [ {"a": "A", "b": 28}, {"a": "B", "b": 55}, {"a": "C", "b": 43}, {"a": "D", "b": 91}, {"a": "E", "b": 81}, {"a": "F", "b": 53}, {"a": "G", "b": 19}, {"a": "H", "b": 87}, {"a": "I", "b": 52}, ], }, { "name": "data_0", "source": "source_0", "transform": [ { "expr": 'isValid(datum["b"]) && isFinite(+datum["b"])', "type": "filter", } ], }, ], "description": "A simple bar chart with embedded data.", "height": 200, "marks": [ { "encode": { "update": { "fill": {"value": "#4c78a8"}, "width": {"band": True, "scale": "x"}, "x": {"field": "a", "scale": "x"}, "y": {"field": "b", "scale": "y"}, "y2": {"scale": "y", "value": 0}, } }, "from": {"data": "data_0"}, "name": "marks", "style": ["bar"], "type": "rect", } ], "padding": 5, "scales": [ { "domain": {"data": "data_0", "field": "a", "sort": True}, "name": "x", "paddingInner": 0.1, "paddingOuter": 0.05, "range": {"step": {"signal": "x_step"}}, "type": "band", }, { "domain": {"data": "data_0", "field": "b"}, "name": "y", "nice": True, "range": [{"signal": "height"}, 0], "type": "linear", "zero": True, }, ], "signals": [ {"name": "x_step", "value": 20}, { "name": "width", "update": "bandspace(domain('x').length, 0.1, 0.05) * x_step", }, ], "style": "cell", } def test_vegalite_to_vega_mimebundle(require_altair_saver, vegalite_spec, vega_spec): bundle = spec_to_mimebundle( spec=vegalite_spec, format="vega", mode="vega-lite", vega_version=alt.VEGA_VERSION, vegalite_version=alt.VEGALITE_VERSION, vegaembed_version=alt.VEGAEMBED_VERSION, ) assert bundle == {"application/vnd.vega.v5+json": vega_spec} def test_spec_to_vegalite_mimebundle(vegalite_spec): bundle = spec_to_mimebundle( spec=vegalite_spec, mode="vega-lite", format="vega-lite", vegalite_version=alt.VEGALITE_VERSION, ) assert bundle == {"application/vnd.vegalite.v4+json": vegalite_spec} def test_spec_to_vega_mimebundle(vega_spec): bundle = spec_to_mimebundle( spec=vega_spec, mode="vega", format="vega", vega_version=alt.VEGA_VERSION ) assert bundle == {"application/vnd.vega.v5+json": vega_spec} def test_spec_to_json_mimebundle(): bundle = spec_to_mimebundle(spec=vegalite_spec, mode="vega-lite", format="json",) assert bundle == {"application/json": vegalite_spec} altair-4.1.0/altair/utils/tests/test_plugin_registry.py000066400000000000000000000070431364111050100234010ustar00rootroot00000000000000from ..plugin_registry import PluginRegistry from typing import Callable class TypedCallableRegistry(PluginRegistry[Callable[[int], int]]): pass class GeneralCallableRegistry(PluginRegistry): _global_settings = {"global_setting": None} @property def global_setting(self): return self._global_settings["global_setting"] @global_setting.setter def global_setting(self, val): self._global_settings["global_setting"] = val def test_plugin_registry(): plugins = TypedCallableRegistry() assert plugins.names() == [] assert plugins.active == "" assert plugins.get() is None assert repr(plugins) == "TypedCallableRegistry(active='', registered=[])" plugins.register("new_plugin", lambda x: x ** 2) assert plugins.names() == ["new_plugin"] assert plugins.active == "" assert plugins.get() is None assert repr(plugins) == ( "TypedCallableRegistry(active='', " "registered=['new_plugin'])" ) plugins.enable("new_plugin") assert plugins.names() == ["new_plugin"] assert plugins.active == "new_plugin" assert plugins.get()(3) == 9 assert repr(plugins) == ( "TypedCallableRegistry(active='new_plugin', " "registered=['new_plugin'])" ) def test_plugin_registry_extra_options(): plugins = GeneralCallableRegistry() plugins.register("metadata_plugin", lambda x, p=2: x ** p) plugins.enable("metadata_plugin") assert plugins.get()(3) == 9 plugins.enable("metadata_plugin", p=3) assert plugins.active == "metadata_plugin" assert plugins.get()(3) == 27 # enabling without changing name plugins.enable(p=2) assert plugins.active == "metadata_plugin" assert plugins.get()(3) == 9 def test_plugin_registry_global_settings(): plugins = GeneralCallableRegistry() # we need some default plugin, but we won't do anything with it plugins.register("default", lambda x: x) plugins.enable("default") # default value of the global flag assert plugins.global_setting is None # enabling changes the global state, not the options plugins.enable(global_setting=True) assert plugins.global_setting is True assert plugins._options == {} # context manager changes global state temporarily with plugins.enable(global_setting="temp"): assert plugins.global_setting == "temp" assert plugins._options == {} assert plugins.global_setting is True assert plugins._options == {} def test_plugin_registry_context(): plugins = GeneralCallableRegistry() plugins.register("default", lambda x, p=2: x ** p) # At first there is no plugin enabled assert plugins.active == "" assert plugins.options == {} # Make sure the context is set and reset correctly with plugins.enable("default", p=6): assert plugins.active == "default" assert plugins.options == {"p": 6} assert plugins.active == "" assert plugins.options == {} # Make sure the context is reset even if there is an error try: with plugins.enable("default", p=6): assert plugins.active == "default" assert plugins.options == {"p": 6} raise ValueError() except ValueError: pass assert plugins.active == "" assert plugins.options == {} # Enabling without specifying name uses current name plugins.enable("default", p=2) with plugins.enable(p=6): assert plugins.active == "default" assert plugins.options == {"p": 6} assert plugins.active == "default" assert plugins.options == {"p": 2} altair-4.1.0/altair/utils/tests/test_schemapi.py000066400000000000000000000222511364111050100217420ustar00rootroot00000000000000# The contents of this file are automatically written by # tools/generate_schema_wrapper.py. Do not modify directly. import copy import io import json import jsonschema import pickle import pytest import numpy as np from ..schemapi import ( UndefinedType, SchemaBase, Undefined, _FromDict, SchemaValidationError, ) # Make tests inherit from _TestSchema, so that when we test from_dict it won't # try to use SchemaBase objects defined elsewhere as wrappers. class _TestSchema(SchemaBase): @classmethod def _default_wrapper_classes(cls): return _TestSchema.__subclasses__() class MySchema(_TestSchema): _schema = { "definitions": { "StringMapping": { "type": "object", "additionalProperties": {"type": "string"}, }, "StringArray": {"type": "array", "items": {"type": "string"}}, }, "properties": { "a": {"$ref": "#/definitions/StringMapping"}, "a2": {"type": "object", "additionalProperties": {"type": "number"}}, "b": {"$ref": "#/definitions/StringArray"}, "b2": {"type": "array", "items": {"type": "number"}}, "c": {"type": ["string", "number"]}, "d": { "anyOf": [ {"$ref": "#/definitions/StringMapping"}, {"$ref": "#/definitions/StringArray"}, ] }, "e": {"items": [{"type": "string"}, {"type": "string"}]}, }, } class StringMapping(_TestSchema): _schema = {"$ref": "#/definitions/StringMapping"} _rootschema = MySchema._schema class StringArray(_TestSchema): _schema = {"$ref": "#/definitions/StringArray"} _rootschema = MySchema._schema class Derived(_TestSchema): _schema = { "definitions": { "Foo": {"type": "object", "properties": {"d": {"type": "string"}}}, "Bar": {"type": "string", "enum": ["A", "B"]}, }, "type": "object", "additionalProperties": False, "properties": { "a": {"type": "integer"}, "b": {"type": "string"}, "c": {"$ref": "#/definitions/Foo"}, }, } class Foo(_TestSchema): _schema = {"$ref": "#/definitions/Foo"} _rootschema = Derived._schema class Bar(_TestSchema): _schema = {"$ref": "#/definitions/Bar"} _rootschema = Derived._schema class SimpleUnion(_TestSchema): _schema = {"anyOf": [{"type": "integer"}, {"type": "string"}]} class DefinitionUnion(_TestSchema): _schema = {"anyOf": [{"$ref": "#/definitions/Foo"}, {"$ref": "#/definitions/Bar"}]} _rootschema = Derived._schema class SimpleArray(_TestSchema): _schema = { "type": "array", "items": {"anyOf": [{"type": "integer"}, {"type": "string"}]}, } class InvalidProperties(_TestSchema): _schema = { "type": "object", "properties": {"for": {}, "as": {}, "vega-lite": {}, "$schema": {}}, } def test_construct_multifaceted_schema(): dct = { "a": {"foo": "bar"}, "a2": {"foo": 42}, "b": ["a", "b", "c"], "b2": [1, 2, 3], "c": 42, "d": ["x", "y", "z"], "e": ["a", "b"], } myschema = MySchema.from_dict(dct) assert myschema.to_dict() == dct myschema2 = MySchema(**dct) assert myschema2.to_dict() == dct assert isinstance(myschema.a, StringMapping) assert isinstance(myschema.a2, dict) assert isinstance(myschema.b, StringArray) assert isinstance(myschema.b2, list) assert isinstance(myschema.d, StringArray) def test_schema_cases(): assert Derived(a=4, b="yo").to_dict() == {"a": 4, "b": "yo"} assert Derived(a=4, c={"d": "hey"}).to_dict() == {"a": 4, "c": {"d": "hey"}} assert Derived(a=4, b="5", c=Foo(d="val")).to_dict() == { "a": 4, "b": "5", "c": {"d": "val"}, } assert Foo(d="hello", f=4).to_dict() == {"d": "hello", "f": 4} assert Derived().to_dict() == {} assert Foo().to_dict() == {} with pytest.raises(jsonschema.ValidationError): # a needs to be an integer Derived(a="yo").to_dict() with pytest.raises(jsonschema.ValidationError): # Foo.d needs to be a string Derived(c=Foo(4)).to_dict() with pytest.raises(jsonschema.ValidationError): # no additional properties allowed Derived(foo="bar").to_dict() def test_round_trip(): D = {"a": 4, "b": "yo"} assert Derived.from_dict(D).to_dict() == D D = {"a": 4, "c": {"d": "hey"}} assert Derived.from_dict(D).to_dict() == D D = {"a": 4, "b": "5", "c": {"d": "val"}} assert Derived.from_dict(D).to_dict() == D D = {"d": "hello", "f": 4} assert Foo.from_dict(D).to_dict() == D def test_from_dict(): D = {"a": 4, "b": "5", "c": {"d": "val"}} obj = Derived.from_dict(D) assert obj.a == 4 assert obj.b == "5" assert isinstance(obj.c, Foo) def test_simple_type(): assert SimpleUnion(4).to_dict() == 4 def test_simple_array(): assert SimpleArray([4, 5, "six"]).to_dict() == [4, 5, "six"] assert SimpleArray.from_dict(list("abc")).to_dict() == list("abc") def test_definition_union(): obj = DefinitionUnion.from_dict("A") assert isinstance(obj, Bar) assert obj.to_dict() == "A" obj = DefinitionUnion.from_dict("B") assert isinstance(obj, Bar) assert obj.to_dict() == "B" obj = DefinitionUnion.from_dict({"d": "yo"}) assert isinstance(obj, Foo) assert obj.to_dict() == {"d": "yo"} def test_invalid_properties(): dct = {"for": 2, "as": 3, "vega-lite": 4, "$schema": 5} invalid = InvalidProperties.from_dict(dct) assert invalid["for"] == 2 assert invalid["as"] == 3 assert invalid["vega-lite"] == 4 assert invalid["$schema"] == 5 assert invalid.to_dict() == dct def test_undefined_singleton(): assert Undefined is UndefinedType() @pytest.fixture def dct(): return { "a": {"foo": "bar"}, "a2": {"foo": 42}, "b": ["a", "b", "c"], "b2": [1, 2, 3], "c": 42, "d": ["x", "y", "z"], } def test_copy_method(dct): myschema = MySchema.from_dict(dct) # Make sure copy is deep copy = myschema.copy(deep=True) copy["a"]["foo"] = "new value" copy["b"] = ["A", "B", "C"] copy["c"] = 164 assert myschema.to_dict() == dct # If we ignore a value, changing the copy changes the original copy = myschema.copy(deep=True, ignore=["a"]) copy["a"]["foo"] = "new value" copy["b"] = ["A", "B", "C"] copy["c"] = 164 mydct = myschema.to_dict() assert mydct["a"]["foo"] == "new value" assert mydct["b"][0] == dct["b"][0] assert mydct["c"] == dct["c"] # If copy is not deep, then changing copy below top level changes original copy = myschema.copy(deep=False) copy["a"]["foo"] = "baz" copy["b"] = ["A", "B", "C"] copy["c"] = 164 mydct = myschema.to_dict() assert mydct["a"]["foo"] == "baz" assert mydct["b"] == dct["b"] assert mydct["c"] == dct["c"] def test_copy_module(dct): myschema = MySchema.from_dict(dct) cp = copy.deepcopy(myschema) cp["a"]["foo"] = "new value" cp["b"] = ["A", "B", "C"] cp["c"] = 164 assert myschema.to_dict() == dct def test_attribute_error(): m = MySchema() with pytest.raises(AttributeError) as err: m.invalid_attribute assert str(err.value) == ( "'MySchema' object has no attribute " "'invalid_attribute'" ) def test_to_from_json(dct): json_str = MySchema.from_dict(dct).to_json() new_dct = MySchema.from_json(json_str).to_dict() assert new_dct == dct def test_to_from_pickle(dct): myschema = MySchema.from_dict(dct) output = io.BytesIO() pickle.dump(myschema, output) output.seek(0) myschema_new = pickle.load(output) assert myschema_new.to_dict() == dct def test_class_with_no_schema(): class BadSchema(SchemaBase): pass with pytest.raises(ValueError) as err: BadSchema(4) assert str(err.value).startswith("Cannot instantiate object") @pytest.mark.parametrize("use_json", [True, False]) def test_hash_schema(use_json): classes = _TestSchema._default_wrapper_classes() for cls in classes: hsh1 = _FromDict.hash_schema(cls._schema, use_json=use_json) hsh2 = _FromDict.hash_schema(cls._schema, use_json=use_json) assert hsh1 == hsh2 assert hash(hsh1) == hash(hsh2) def test_schema_validation_error(): try: MySchema(a={"foo": 4}) the_err = None except jsonschema.ValidationError as err: the_err = err assert isinstance(the_err, SchemaValidationError) message = str(the_err) assert message.startswith("Invalid specification") assert "test_schemapi.MySchema->a" in message assert "validating {!r}".format(the_err.validator) in message assert the_err.message in message def test_serialize_numpy_types(): m = MySchema( a={"date": np.datetime64("2019-01-01")}, a2={"int64": np.int64(1), "float64": np.float64(2)}, b2=np.arange(4), ) out = m.to_json() dct = json.loads(out) assert dct == { "a": {"date": "2019-01-01T00:00:00"}, "a2": {"int64": 1, "float64": 2}, "b2": [0, 1, 2, 3], } altair-4.1.0/altair/utils/tests/test_server.py000066400000000000000000000003461364111050100214600ustar00rootroot00000000000000""" Test http server """ from altair.utils.server import serve, MockServer def test_serve(): html = "Title

Content

" serve(html, open_browser=False, http_server=MockServer) altair-4.1.0/altair/utils/tests/test_utils.py000066400000000000000000000146301364111050100213130ustar00rootroot00000000000000import pytest import warnings import json import numpy as np import pandas as pd from .. import infer_vegalite_type, sanitize_dataframe def test_infer_vegalite_type(): def _check(arr, typ): assert infer_vegalite_type(arr) == typ _check(np.arange(5, dtype=float), "quantitative") _check(np.arange(5, dtype=int), "quantitative") _check(np.zeros(5, dtype=bool), "nominal") _check(pd.date_range("2012", "2013"), "temporal") _check(pd.timedelta_range(365, periods=12), "temporal") nulled = pd.Series(np.random.randint(10, size=10)) nulled[0] = None _check(nulled, "quantitative") _check(["a", "b", "c"], "nominal") if hasattr(pytest, "warns"): # added in pytest 2.8 with pytest.warns(UserWarning): _check([], "nominal") else: with warnings.catch_warnings(): warnings.filterwarnings("ignore") _check([], "nominal") def test_sanitize_dataframe(): # create a dataframe with various types df = pd.DataFrame( { "s": list("abcde"), "f": np.arange(5, dtype=float), "i": np.arange(5, dtype=int), "b": np.array([True, False, True, True, False]), "d": pd.date_range("2012-01-01", periods=5, freq="H"), "c": pd.Series(list("ababc"), dtype="category"), "c2": pd.Series([1, "A", 2.5, "B", None], dtype="category"), "o": pd.Series([np.array(i) for i in range(5)]), "p": pd.date_range("2012-01-01", periods=5, freq="H").tz_localize("UTC"), } ) # add some nulls df.iloc[0, df.columns.get_loc("s")] = None df.iloc[0, df.columns.get_loc("f")] = np.nan df.iloc[0, df.columns.get_loc("d")] = pd.NaT df.iloc[0, df.columns.get_loc("o")] = np.array(np.nan) # JSON serialize. This will fail on non-sanitized dataframes print(df[["s", "c2"]]) df_clean = sanitize_dataframe(df) print(df_clean[["s", "c2"]]) print(df_clean[["s", "c2"]].to_dict()) s = json.dumps(df_clean.to_dict(orient="records")) print(s) # Re-construct pandas dataframe df2 = pd.read_json(s) # Re-order the columns to match df df2 = df2[df.columns] # Re-apply original types for col in df: if str(df[col].dtype).startswith("datetime"): # astype(datetime) introduces time-zone issues: # to_datetime() does not. utc = isinstance(df[col].dtype, pd.core.dtypes.dtypes.DatetimeTZDtype) df2[col] = pd.to_datetime(df2[col], utc=utc) else: df2[col] = df2[col].astype(df[col].dtype) # pandas doesn't properly recognize np.array(np.nan), so change it here df.iloc[0, df.columns.get_loc("o")] = np.nan assert df.equals(df2) def test_sanitize_dataframe_colnames(): df = pd.DataFrame(np.arange(12).reshape(4, 3)) # Test that RangeIndex is converted to strings df = sanitize_dataframe(df) assert [isinstance(col, str) for col in df.columns] # Test that non-string columns result in an error df.columns = [4, "foo", "bar"] with pytest.raises(ValueError) as err: sanitize_dataframe(df) assert str(err.value).startswith("Dataframe contains invalid column name: 4.") def test_sanitize_dataframe_timedelta(): df = pd.DataFrame({"r": pd.timedelta_range(start="1 day", periods=4)}) with pytest.raises(ValueError) as err: sanitize_dataframe(df) assert str(err.value).startswith('Field "r" has type "timedelta') def test_sanitize_dataframe_infs(): df = pd.DataFrame({"x": [0, 1, 2, np.inf, -np.inf, np.nan]}) df_clean = sanitize_dataframe(df) assert list(df_clean.dtypes) == [object] assert list(df_clean["x"]) == [0, 1, 2, None, None, None] @pytest.mark.skipif( not hasattr(pd, "Int64Dtype"), reason="Nullable integers not supported in pandas v{}".format(pd.__version__), ) def test_sanitize_nullable_integers(): df = pd.DataFrame( { "int_np": [1, 2, 3, 4, 5], "int64": pd.Series([1, 2, 3, None, 5], dtype="UInt8"), "int64_nan": pd.Series([1, 2, 3, float("nan"), 5], dtype="Int64"), "float": [1.0, 2.0, 3.0, 4, 5.0], "float_null": [1, 2, None, 4, 5], "float_inf": [1, 2, None, 4, (float("inf"))], } ) df_clean = sanitize_dataframe(df) assert {col.dtype.name for _, col in df_clean.iteritems()} == {"object"} result_python = {col_name: list(col) for col_name, col in df_clean.iteritems()} assert result_python == { "int_np": [1, 2, 3, 4, 5], "int64": [1, 2, 3, None, 5], "int64_nan": [1, 2, 3, None, 5], "float": [1.0, 2.0, 3.0, 4.0, 5.0], "float_null": [1.0, 2.0, None, 4.0, 5.0], "float_inf": [1.0, 2.0, None, 4.0, None], } @pytest.mark.skipif( not hasattr(pd, "StringDtype"), reason="dedicated String dtype not supported in pandas v{}".format(pd.__version__), ) def test_sanitize_string_dtype(): df = pd.DataFrame( { "string_object": ["a", "b", "c", "d"], "string_string": pd.array(["a", "b", "c", "d"], dtype="string"), "string_object_null": ["a", "b", None, "d"], "string_string_null": pd.array(["a", "b", None, "d"], dtype="string"), } ) df_clean = sanitize_dataframe(df) assert {col.dtype.name for _, col in df_clean.iteritems()} == {"object"} result_python = {col_name: list(col) for col_name, col in df_clean.iteritems()} assert result_python == { "string_object": ["a", "b", "c", "d"], "string_string": ["a", "b", "c", "d"], "string_object_null": ["a", "b", None, "d"], "string_string_null": ["a", "b", None, "d"], } @pytest.mark.skipif( not hasattr(pd, "BooleanDtype"), reason="Nullable boolean dtype not supported in pandas v{}".format(pd.__version__), ) def test_sanitize_boolean_dtype(): df = pd.DataFrame( { "bool_none": pd.array([True, False, None], dtype="boolean"), "none": pd.array([None, None, None], dtype="boolean"), "bool": pd.array([True, False, True], dtype="boolean"), } ) df_clean = sanitize_dataframe(df) assert {col.dtype.name for _, col in df_clean.iteritems()} == {"object"} result_python = {col_name: list(col) for col_name, col in df_clean.iteritems()} assert result_python == { "bool_none": [True, False, None], "none": [None, None, None], "bool": [True, False, True], } altair-4.1.0/altair/utils/theme.py000066400000000000000000000003351364111050100170510ustar00rootroot00000000000000"""Utilities for registering and working with themes""" from .plugin_registry import PluginRegistry from typing import Callable ThemeType = Callable[..., dict] class ThemeRegistry(PluginRegistry[ThemeType]): pass altair-4.1.0/altair/vega/000077500000000000000000000000001364111050100151565ustar00rootroot00000000000000altair-4.1.0/altair/vega/__init__.py000066400000000000000000000000411364111050100172620ustar00rootroot00000000000000# flake8: noqa from .v5 import * altair-4.1.0/altair/vega/data.py000066400000000000000000000020001364111050100164310ustar00rootroot00000000000000import pandas as pd from toolz import curried from ..utils.core import sanitize_dataframe from ..utils.data import ( MaxRowsError, curry, pipe, sample, to_csv, to_json, to_values, check_data_type, ) @curried.curry def limit_rows(data, max_rows=5000): """Raise MaxRowsError if the data model has more than max_rows.""" if not isinstance(data, (list, pd.DataFrame)): raise TypeError("Expected dict or DataFrame, got: {}".format(type(data))) if len(data) > max_rows: raise MaxRowsError( "The number of rows in your dataset is greater than the max of {}".format( max_rows ) ) return data @curried.curry def default_data_transformer(data): return curried.pipe(data, limit_rows, to_values) __all__ = ( "MaxRowsError", "curry", "default_data_transformer", "limit_rows", "pipe", "sanitize_dataframe", "sample", "to_csv", "to_json", "to_values", "check_data_type", ) altair-4.1.0/altair/vega/display.py000066400000000000000000000004621364111050100171770ustar00rootroot00000000000000from ..utils.display import Displayable, default_renderer_base, json_renderer_base from ..utils.display import MimeBundleType, RendererType, HTMLRenderer __all__ = ( "Displayable", "default_renderer_base", "json_renderer_base", "MimeBundleType", "RendererType", "HTMLRenderer", ) altair-4.1.0/altair/vega/tests/000077500000000000000000000000001364111050100163205ustar00rootroot00000000000000altair-4.1.0/altair/vega/tests/__init__.py000066400000000000000000000000001364111050100204170ustar00rootroot00000000000000altair-4.1.0/altair/vega/tests/test_import.py000066400000000000000000000001701364111050100212410ustar00rootroot00000000000000from altair.vega import SCHEMA_VERSION, SCHEMA_URL def test_schema_version(): assert SCHEMA_VERSION in SCHEMA_URL altair-4.1.0/altair/vega/v5/000077500000000000000000000000001364111050100155105ustar00rootroot00000000000000altair-4.1.0/altair/vega/v5/__init__.py000066400000000000000000000003361364111050100176230ustar00rootroot00000000000000# flake8: noqa from .display import vega, Vega, renderers from .schema import * from .data import ( pipe, curry, limit_rows, sample, to_json, to_csv, to_values, default_data_transformer, ) altair-4.1.0/altair/vega/v5/data.py000066400000000000000000000010121364111050100167650ustar00rootroot00000000000000from ..data import ( MaxRowsError, curry, default_data_transformer, limit_rows, pipe, sample, to_csv, to_json, to_values, ) # ============================================================================== # Vega 5 data transformers # ============================================================================== __all__ = ( "MaxRowsError", "curry", "default_data_transformer", "limit_rows", "pipe", "sample", "to_csv", "to_json", "to_values", ) altair-4.1.0/altair/vega/v5/display.py000066400000000000000000000056221364111050100175340ustar00rootroot00000000000000import os from ...utils import PluginRegistry from ..display import Displayable from ..display import default_renderer_base from ..display import json_renderer_base from ..display import RendererType from ..display import HTMLRenderer from .schema import SCHEMA_VERSION VEGA_VERSION = SCHEMA_VERSION.lstrip("v") VEGAEMBED_VERSION = "3" # ============================================================================== # Vega 5 renderer logic # ============================================================================== # The MIME type for Vega 5 releases. VEGA_MIME_TYPE = "application/vnd.vega.v5+json" # type: str # The entry point group that can be used by other packages to declare other # renderers that will be auto-detected. Explicit registration is also # allowed by the PluginRegistery API. ENTRY_POINT_GROUP = "altair.vega.v5.renderer" # type: str # The display message when rendering fails DEFAULT_DISPLAY = """\ If you see this message, it means the renderer has not been properly enabled for the frontend that you are using. For more information, see https://altair-viz.github.io/user_guide/troubleshooting.html """ renderers = PluginRegistry[RendererType](entry_point_group=ENTRY_POINT_GROUP) here = os.path.dirname(os.path.realpath(__file__)) def default_renderer(spec): return default_renderer_base(spec, VEGA_MIME_TYPE, DEFAULT_DISPLAY) def json_renderer(spec): return json_renderer_base(spec, DEFAULT_DISPLAY) colab_renderer = HTMLRenderer( mode="vega", fullhtml=True, requirejs=False, output_div="altair-viz", vega_version=VEGA_VERSION, vegaembed_version=VEGAEMBED_VERSION, ) kaggle_renderer = HTMLRenderer( mode="vega", fullhtml=False, requirejs=True, vega_version=VEGA_VERSION, vegaembed_version=VEGAEMBED_VERSION, ) html_renderer = HTMLRenderer( mode="vega", template="universal", vega_version=VEGA_VERSION, vegaembed_version=VEGAEMBED_VERSION, ) renderers.register("default", default_renderer) renderers.register("html", html_renderer) renderers.register("jupyterlab", default_renderer) renderers.register("nteract", default_renderer) renderers.register("colab", colab_renderer) renderers.register("kaggle", kaggle_renderer) renderers.register("json", json_renderer) renderers.enable("default") class Vega(Displayable): """An IPython/Jupyter display class for rendering Vega 5.""" renderers = renderers schema_path = (__name__, "schema/vega-schema.json") def vega(spec, validate=True): """Render and optionally validate a Vega 5 spec. This will use the currently enabled renderer to render the spec. Parameters ========== spec: dict A fully compliant Vega 5 spec, with the data portion fully processed. validate: bool Should the spec be validated against the Vega 5 schema? """ from IPython.display import display display(Vega(spec, validate=validate)) altair-4.1.0/altair/vega/v5/schema/000077500000000000000000000000001364111050100167505ustar00rootroot00000000000000altair-4.1.0/altair/vega/v5/schema/__init__.py000066400000000000000000000001761364111050100210650ustar00rootroot00000000000000# flake8: noqa from .core import * SCHEMA_VERSION = 'v5.10.0' SCHEMA_URL = 'https://vega.github.io/schema/vega/v5.10.0.json' altair-4.1.0/altair/vega/v5/schema/core.py000066400000000000000000003307651364111050100202700ustar00rootroot00000000000000# The contents of this file are automatically written by # tools/generate_schema_wrapper.py. Do not modify directly. from altair.utils.schemapi import SchemaBase, Undefined, _subclasses import pkgutil import json def load_schema(): """Load the json schema associated with this module's functions""" return json.loads(pkgutil.get_data(__name__, 'vega-schema.json').decode('utf-8')) class VegaSchema(SchemaBase): _rootschema = load_schema() @classmethod def _default_wrapper_classes(cls): return _subclasses(VegaSchema) class Root(VegaSchema): """Root schema wrapper allOf(:class:`scope`, Mapping(required=[])) """ _schema = VegaSchema._rootschema def __init__(self, autosize=Undefined, axes=Undefined, background=Undefined, config=Undefined, data=Undefined, description=Undefined, encode=Undefined, height=Undefined, layout=Undefined, legends=Undefined, marks=Undefined, padding=Undefined, projections=Undefined, scales=Undefined, signals=Undefined, style=Undefined, title=Undefined, usermeta=Undefined, width=Undefined, **kwds): super(Root, self).__init__(autosize=autosize, axes=axes, background=background, config=config, data=data, description=description, encode=encode, height=height, layout=layout, legends=legends, marks=marks, padding=padding, projections=projections, scales=scales, signals=signals, style=style, title=title, usermeta=usermeta, width=width, **kwds) class autosize(VegaSchema): """autosize schema wrapper oneOf(enum('pad', 'fit', 'fit-x', 'fit-y', 'none'), Mapping(required=[type]), :class:`signal`) """ _schema = {'$ref': '#/defs/autosize'} def __init__(self, *args, **kwds): super(autosize, self).__init__(*args, **kwds) class axis(VegaSchema): """axis schema wrapper Mapping(required=[orient, scale]) Attributes ---------- orient : enum('top', 'bottom', 'left', 'right') scale : string bandPosition : oneOf(float, :class:`numberValue`) domain : boolean domainColor : oneOf(None, string, :class:`colorValue`) domainDash : oneOf(List(float), :class:`arrayValue`) domainDashOffset : oneOf(float, :class:`numberValue`) domainOpacity : oneOf(float, :class:`numberValue`) domainWidth : oneOf(float, :class:`numberValue`) encode : Mapping(required=[]) format : oneOf(string, Mapping(required=[]), :class:`signal`) formatType : oneOf(enum('number', 'time', 'utc'), :class:`signal`) grid : boolean gridColor : oneOf(None, string, :class:`colorValue`) gridDash : oneOf(List(float), :class:`arrayValue`) gridDashOffset : oneOf(float, :class:`numberValue`) gridOpacity : oneOf(float, :class:`numberValue`) gridScale : string gridWidth : oneOf(float, :class:`numberValue`) labelAlign : oneOf(enum('left', 'right', 'center'), :class:`alignValue`) labelAngle : oneOf(float, :class:`numberValue`) labelBaseline : oneOf(enum('top', 'middle', 'bottom', 'alphabetic', 'line-top', 'line-bottom'), :class:`baselineValue`) labelBound : oneOf(boolean, float, :class:`signal`) labelColor : oneOf(None, string, :class:`colorValue`) labelFlush : oneOf(boolean, float, :class:`signal`) labelFlushOffset : :class:`numberOrSignal` labelFont : oneOf(string, :class:`stringValue`) labelFontSize : oneOf(float, :class:`numberValue`) labelFontStyle : oneOf(string, :class:`stringValue`) labelFontWeight : oneOf(enum(None, 'normal', 'bold', 'lighter', 'bolder', '100', '200', '300', '400', '500', '600', '700', '800', '900', 100, 200, 300, 400, 500, 600, 700, 800, 900), :class:`fontWeightValue`) labelLimit : oneOf(float, :class:`numberValue`) labelLineHeight : oneOf(float, :class:`numberValue`) labelOffset : oneOf(float, :class:`numberValue`) labelOpacity : oneOf(float, :class:`numberValue`) labelOverlap : :class:`labelOverlap` labelPadding : oneOf(float, :class:`numberValue`) labelSeparation : :class:`numberOrSignal` labels : boolean maxExtent : oneOf(float, :class:`numberValue`) minExtent : oneOf(float, :class:`numberValue`) offset : oneOf(float, :class:`numberValue`) position : oneOf(float, :class:`numberValue`) tickBand : :class:`tickBand` tickColor : oneOf(None, string, :class:`colorValue`) tickCount : :class:`tickCount` tickDash : oneOf(List(float), :class:`arrayValue`) tickDashOffset : oneOf(float, :class:`numberValue`) tickExtra : :class:`booleanOrSignal` tickMinStep : :class:`numberOrSignal` tickOffset : oneOf(float, :class:`numberValue`) tickOpacity : oneOf(float, :class:`numberValue`) tickRound : oneOf(boolean, :class:`booleanValue`) tickSize : oneOf(float, :class:`numberValue`) tickWidth : oneOf(float, :class:`numberValue`) ticks : boolean title : :class:`textOrSignal` titleAlign : oneOf(enum('left', 'right', 'center'), :class:`alignValue`) titleAnchor : oneOf(enum(None, 'start', 'middle', 'end'), :class:`anchorValue`) titleAngle : oneOf(float, :class:`numberValue`) titleBaseline : oneOf(enum('top', 'middle', 'bottom', 'alphabetic', 'line-top', 'line-bottom'), :class:`baselineValue`) titleColor : oneOf(None, string, :class:`colorValue`) titleFont : oneOf(string, :class:`stringValue`) titleFontSize : oneOf(float, :class:`numberValue`) titleFontStyle : oneOf(string, :class:`stringValue`) titleFontWeight : oneOf(enum(None, 'normal', 'bold', 'lighter', 'bolder', '100', '200', '300', '400', '500', '600', '700', '800', '900', 100, 200, 300, 400, 500, 600, 700, 800, 900), :class:`fontWeightValue`) titleLimit : oneOf(float, :class:`numberValue`) titleLineHeight : oneOf(float, :class:`numberValue`) titleOpacity : oneOf(float, :class:`numberValue`) titlePadding : oneOf(float, :class:`numberValue`) titleX : oneOf(float, :class:`numberValue`) titleY : oneOf(float, :class:`numberValue`) translate : float values : :class:`arrayOrSignal` zindex : float """ _schema = {'$ref': '#/defs/axis'} def __init__(self, orient=Undefined, scale=Undefined, bandPosition=Undefined, domain=Undefined, domainColor=Undefined, domainDash=Undefined, domainDashOffset=Undefined, domainOpacity=Undefined, domainWidth=Undefined, encode=Undefined, format=Undefined, formatType=Undefined, grid=Undefined, gridColor=Undefined, gridDash=Undefined, gridDashOffset=Undefined, gridOpacity=Undefined, gridScale=Undefined, gridWidth=Undefined, labelAlign=Undefined, labelAngle=Undefined, labelBaseline=Undefined, labelBound=Undefined, labelColor=Undefined, labelFlush=Undefined, labelFlushOffset=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelLineHeight=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, labels=Undefined, maxExtent=Undefined, minExtent=Undefined, offset=Undefined, position=Undefined, tickBand=Undefined, tickColor=Undefined, tickCount=Undefined, tickDash=Undefined, tickDashOffset=Undefined, tickExtra=Undefined, tickMinStep=Undefined, tickOffset=Undefined, tickOpacity=Undefined, tickRound=Undefined, tickSize=Undefined, tickWidth=Undefined, ticks=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleAngle=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titlePadding=Undefined, titleX=Undefined, titleY=Undefined, translate=Undefined, values=Undefined, zindex=Undefined, **kwds): super(axis, self).__init__(orient=orient, scale=scale, bandPosition=bandPosition, domain=domain, domainColor=domainColor, domainDash=domainDash, domainDashOffset=domainDashOffset, domainOpacity=domainOpacity, domainWidth=domainWidth, encode=encode, format=format, formatType=formatType, grid=grid, gridColor=gridColor, gridDash=gridDash, gridDashOffset=gridDashOffset, gridOpacity=gridOpacity, gridScale=gridScale, gridWidth=gridWidth, labelAlign=labelAlign, labelAngle=labelAngle, labelBaseline=labelBaseline, labelBound=labelBound, labelColor=labelColor, labelFlush=labelFlush, labelFlushOffset=labelFlushOffset, labelFont=labelFont, labelFontSize=labelFontSize, labelFontStyle=labelFontStyle, labelFontWeight=labelFontWeight, labelLimit=labelLimit, labelLineHeight=labelLineHeight, labelOffset=labelOffset, labelOpacity=labelOpacity, labelOverlap=labelOverlap, labelPadding=labelPadding, labelSeparation=labelSeparation, labels=labels, maxExtent=maxExtent, minExtent=minExtent, offset=offset, position=position, tickBand=tickBand, tickColor=tickColor, tickCount=tickCount, tickDash=tickDash, tickDashOffset=tickDashOffset, tickExtra=tickExtra, tickMinStep=tickMinStep, tickOffset=tickOffset, tickOpacity=tickOpacity, tickRound=tickRound, tickSize=tickSize, tickWidth=tickWidth, ticks=ticks, title=title, titleAlign=titleAlign, titleAnchor=titleAnchor, titleAngle=titleAngle, titleBaseline=titleBaseline, titleColor=titleColor, titleFont=titleFont, titleFontSize=titleFontSize, titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight, titleLimit=titleLimit, titleLineHeight=titleLineHeight, titleOpacity=titleOpacity, titlePadding=titlePadding, titleX=titleX, titleY=titleY, translate=translate, values=values, zindex=zindex, **kwds) class background(VegaSchema): """background schema wrapper oneOf(string, :class:`signal`) """ _schema = {'$ref': '#/defs/background'} def __init__(self, *args, **kwds): super(background, self).__init__(*args, **kwds) class bind(VegaSchema): """bind schema wrapper oneOf(Mapping(required=[input]), Mapping(required=[input, options]), Mapping(required=[input]), Mapping(required=[input])) """ _schema = {'$ref': '#/defs/bind'} def __init__(self, *args, **kwds): super(bind, self).__init__(*args, **kwds) class data(VegaSchema): """data schema wrapper oneOf(Mapping(required=[name]), Mapping(required=[source, name]), Mapping(required=[url, name]), Mapping(required=[values, name])) """ _schema = {'$ref': '#/defs/data'} def __init__(self, *args, **kwds): super(data, self).__init__(*args, **kwds) class rule(VegaSchema): """rule schema wrapper Mapping(required=[]) Attributes ---------- test : string """ _schema = {'$ref': '#/defs/rule'} def __init__(self, test=Undefined, **kwds): super(rule, self).__init__(test=test, **kwds) class encodeEntry(VegaSchema): """encodeEntry schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`alignValue` angle : :class:`numberValue` aspect : :class:`booleanValue` baseline : :class:`baselineValue` blend : :class:`blendValue` clip : :class:`booleanValue` cornerRadius : :class:`numberValue` cornerRadiusBottomLeft : :class:`numberValue` cornerRadiusBottomRight : :class:`numberValue` cornerRadiusTopLeft : :class:`numberValue` cornerRadiusTopRight : :class:`numberValue` cursor : :class:`stringValue` defined : :class:`booleanValue` dir : :class:`stringValue` dx : :class:`numberValue` dy : :class:`numberValue` ellipsis : :class:`stringValue` endAngle : :class:`numberValue` fill : :class:`colorValue` fillOpacity : :class:`numberValue` font : :class:`stringValue` fontSize : :class:`numberValue` fontStyle : :class:`stringValue` fontWeight : :class:`fontWeightValue` height : :class:`numberValue` innerRadius : :class:`numberValue` interpolate : :class:`stringValue` limit : :class:`numberValue` lineBreak : :class:`stringValue` lineHeight : :class:`numberValue` opacity : :class:`numberValue` orient : :class:`directionValue` outerRadius : :class:`numberValue` padAngle : :class:`numberValue` path : :class:`stringValue` radius : :class:`numberValue` scaleX : :class:`numberValue` scaleY : :class:`numberValue` shape : :class:`stringValue` size : :class:`numberValue` smooth : :class:`booleanValue` startAngle : :class:`numberValue` stroke : :class:`colorValue` strokeCap : :class:`strokeCapValue` strokeDash : :class:`arrayValue` strokeDashOffset : :class:`numberValue` strokeForeground : :class:`booleanValue` strokeJoin : :class:`strokeJoinValue` strokeMiterLimit : :class:`numberValue` strokeOffset : :class:`numberValue` strokeOpacity : :class:`numberValue` strokeWidth : :class:`numberValue` tension : :class:`numberValue` text : :class:`textValue` theta : :class:`numberValue` tooltip : :class:`anyValue` url : :class:`stringValue` width : :class:`numberValue` x : :class:`numberValue` x2 : :class:`numberValue` xc : :class:`numberValue` y : :class:`numberValue` y2 : :class:`numberValue` yc : :class:`numberValue` zindex : :class:`numberValue` """ _schema = {'$ref': '#/defs/encodeEntry'} def __init__(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, blend=Undefined, clip=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, defined=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, endAngle=Undefined, fill=Undefined, fillOpacity=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, innerRadius=Undefined, interpolate=Undefined, limit=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, orient=Undefined, outerRadius=Undefined, padAngle=Undefined, path=Undefined, radius=Undefined, scaleX=Undefined, scaleY=Undefined, shape=Undefined, size=Undefined, smooth=Undefined, startAngle=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeForeground=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined, tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined, xc=Undefined, y=Undefined, y2=Undefined, yc=Undefined, zindex=Undefined, **kwds): super(encodeEntry, self).__init__(align=align, angle=angle, aspect=aspect, baseline=baseline, blend=blend, clip=clip, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, defined=defined, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, endAngle=endAngle, fill=fill, fillOpacity=fillOpacity, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, innerRadius=innerRadius, interpolate=interpolate, limit=limit, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, orient=orient, outerRadius=outerRadius, padAngle=padAngle, path=path, radius=radius, scaleX=scaleX, scaleY=scaleY, shape=shape, size=size, smooth=smooth, startAngle=startAngle, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeForeground=strokeForeground, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, tension=tension, text=text, theta=theta, tooltip=tooltip, url=url, width=width, x=x, x2=x2, xc=xc, y=y, y2=y2, yc=yc, zindex=zindex, **kwds) class encode(VegaSchema): """encode schema wrapper Mapping(required=[]) """ _schema = {'$ref': '#/defs/encode'} def __init__(self, **kwds): super(encode, self).__init__(**kwds) class layout(VegaSchema): """layout schema wrapper oneOf(Mapping(required=[]), :class:`signal`) """ _schema = {'$ref': '#/defs/layout'} def __init__(self, *args, **kwds): super(layout, self).__init__(*args, **kwds) class guideEncode(VegaSchema): """guideEncode schema wrapper Mapping(required=[]) Attributes ---------- interactive : boolean name : string style : :class:`style` """ _schema = {'$ref': '#/defs/guideEncode'} def __init__(self, interactive=Undefined, name=Undefined, style=Undefined, **kwds): super(guideEncode, self).__init__(interactive=interactive, name=name, style=style, **kwds) class legend(VegaSchema): """legend schema wrapper allOf(Mapping(required=[]), anyOf(Mapping(required=[size]), Mapping(required=[shape]), Mapping(required=[fill]), Mapping(required=[stroke]), Mapping(required=[opacity]), Mapping(required=[strokeDash]), Mapping(required=[strokeWidth]))) """ _schema = {'$ref': '#/defs/legend'} def __init__(self, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined, cornerRadius=Undefined, direction=Undefined, encode=Undefined, fill=Undefined, fillColor=Undefined, format=Undefined, formatType=Undefined, gradientLength=Undefined, gradientOpacity=Undefined, gradientStrokeColor=Undefined, gradientStrokeWidth=Undefined, gradientThickness=Undefined, gridAlign=Undefined, labelAlign=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelSeparation=Undefined, legendX=Undefined, legendY=Undefined, offset=Undefined, opacity=Undefined, orient=Undefined, padding=Undefined, rowPadding=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeColor=Undefined, strokeDash=Undefined, strokeWidth=Undefined, symbolDash=Undefined, symbolDashOffset=Undefined, symbolFillColor=Undefined, symbolLimit=Undefined, symbolOffset=Undefined, symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined, symbolStrokeWidth=Undefined, symbolType=Undefined, tickCount=Undefined, tickMinStep=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titleOrient=Undefined, titlePadding=Undefined, type=Undefined, values=Undefined, zindex=Undefined, **kwds): super(legend, self).__init__(clipHeight=clipHeight, columnPadding=columnPadding, columns=columns, cornerRadius=cornerRadius, direction=direction, encode=encode, fill=fill, fillColor=fillColor, format=format, formatType=formatType, gradientLength=gradientLength, gradientOpacity=gradientOpacity, gradientStrokeColor=gradientStrokeColor, gradientStrokeWidth=gradientStrokeWidth, gradientThickness=gradientThickness, gridAlign=gridAlign, labelAlign=labelAlign, labelBaseline=labelBaseline, labelColor=labelColor, labelFont=labelFont, labelFontSize=labelFontSize, labelFontStyle=labelFontStyle, labelFontWeight=labelFontWeight, labelLimit=labelLimit, labelOffset=labelOffset, labelOpacity=labelOpacity, labelOverlap=labelOverlap, labelSeparation=labelSeparation, legendX=legendX, legendY=legendY, offset=offset, opacity=opacity, orient=orient, padding=padding, rowPadding=rowPadding, shape=shape, size=size, stroke=stroke, strokeColor=strokeColor, strokeDash=strokeDash, strokeWidth=strokeWidth, symbolDash=symbolDash, symbolDashOffset=symbolDashOffset, symbolFillColor=symbolFillColor, symbolLimit=symbolLimit, symbolOffset=symbolOffset, symbolOpacity=symbolOpacity, symbolSize=symbolSize, symbolStrokeColor=symbolStrokeColor, symbolStrokeWidth=symbolStrokeWidth, symbolType=symbolType, tickCount=tickCount, tickMinStep=tickMinStep, title=title, titleAlign=titleAlign, titleAnchor=titleAnchor, titleBaseline=titleBaseline, titleColor=titleColor, titleFont=titleFont, titleFontSize=titleFontSize, titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight, titleLimit=titleLimit, titleLineHeight=titleLineHeight, titleOpacity=titleOpacity, titleOrient=titleOrient, titlePadding=titlePadding, type=type, values=values, zindex=zindex, **kwds) class mark(VegaSchema): """mark schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`marktype` clip : :class:`markclip` encode : :class:`encode` interactive : :class:`booleanOrSignal` key : string name : string on : :class:`onMarkTrigger` role : string sort : :class:`compare` style : :class:`style` transform : List(:class:`transformMark`) """ _schema = {'$ref': '#/defs/mark'} def __init__(self, type=Undefined, clip=Undefined, encode=Undefined, interactive=Undefined, key=Undefined, name=Undefined, on=Undefined, role=Undefined, sort=Undefined, style=Undefined, transform=Undefined, **kwds): super(mark, self).__init__(type=type, clip=clip, encode=encode, interactive=interactive, key=key, name=name, on=on, role=role, sort=sort, style=style, transform=transform, **kwds) class markGroup(VegaSchema): """markGroup schema wrapper allOf(Mapping(required=[type]), :class:`mark`, :class:`scope`) """ _schema = {'$ref': '#/defs/markGroup'} def __init__(self, type=Undefined, axes=Undefined, clip=Undefined, data=Undefined, encode=Undefined, interactive=Undefined, key=Undefined, layout=Undefined, legends=Undefined, marks=Undefined, name=Undefined, on=Undefined, projections=Undefined, role=Undefined, scales=Undefined, signals=Undefined, sort=Undefined, style=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, **kwds): super(markGroup, self).__init__(type=type, axes=axes, clip=clip, data=data, encode=encode, interactive=interactive, key=key, layout=layout, legends=legends, marks=marks, name=name, on=on, projections=projections, role=role, scales=scales, signals=signals, sort=sort, style=style, title=title, transform=transform, usermeta=usermeta, **kwds) class markVisual(VegaSchema): """markVisual schema wrapper allOf(Mapping(required=[]), :class:`mark`) """ _schema = {'$ref': '#/defs/markVisual'} def __init__(self, type=Undefined, clip=Undefined, encode=Undefined, interactive=Undefined, key=Undefined, name=Undefined, on=Undefined, role=Undefined, sort=Undefined, style=Undefined, transform=Undefined, **kwds): super(markVisual, self).__init__(type=type, clip=clip, encode=encode, interactive=interactive, key=key, name=name, on=on, role=role, sort=sort, style=style, transform=transform, **kwds) class listener(VegaSchema): """listener schema wrapper oneOf(:class:`signal`, Mapping(required=[scale]), :class:`stream`) """ _schema = {'$ref': '#/defs/listener'} def __init__(self, *args, **kwds): super(listener, self).__init__(*args, **kwds) class onEvents(VegaSchema): """onEvents schema wrapper List(allOf(Mapping(required=[events]), oneOf(Mapping(required=[encode]), Mapping(required=[update])))) """ _schema = {'$ref': '#/defs/onEvents'} def __init__(self, *args): super(onEvents, self).__init__(*args) class onTrigger(VegaSchema): """onTrigger schema wrapper List(Mapping(required=[trigger])) """ _schema = {'$ref': '#/defs/onTrigger'} def __init__(self, *args): super(onTrigger, self).__init__(*args) class onMarkTrigger(VegaSchema): """onMarkTrigger schema wrapper List(Mapping(required=[trigger])) """ _schema = {'$ref': '#/defs/onMarkTrigger'} def __init__(self, *args): super(onMarkTrigger, self).__init__(*args) class padding(VegaSchema): """padding schema wrapper oneOf(float, Mapping(required=[]), :class:`signal`) """ _schema = {'$ref': '#/defs/padding'} def __init__(self, *args, **kwds): super(padding, self).__init__(*args, **kwds) class projection(VegaSchema): """projection schema wrapper Mapping(required=[name]) Attributes ---------- name : string center : oneOf(List(:class:`numberOrSignal`), :class:`signal`) clipAngle : :class:`numberOrSignal` clipExtent : oneOf(List(oneOf(List(:class:`numberOrSignal`), :class:`signal`)), :class:`signal`) extent : oneOf(List(oneOf(List(:class:`numberOrSignal`), :class:`signal`)), :class:`signal`) fit : oneOf(Mapping(required=[]), List(Any)) parallels : oneOf(List(:class:`numberOrSignal`), :class:`signal`) pointRadius : :class:`numberOrSignal` precision : :class:`numberOrSignal` rotate : oneOf(List(:class:`numberOrSignal`), :class:`signal`) scale : :class:`numberOrSignal` size : oneOf(List(:class:`numberOrSignal`), :class:`signal`) translate : oneOf(List(:class:`numberOrSignal`), :class:`signal`) type : :class:`stringOrSignal` """ _schema = {'$ref': '#/defs/projection'} def __init__(self, name=Undefined, center=Undefined, clipAngle=Undefined, clipExtent=Undefined, extent=Undefined, fit=Undefined, parallels=Undefined, pointRadius=Undefined, precision=Undefined, rotate=Undefined, scale=Undefined, size=Undefined, translate=Undefined, type=Undefined, **kwds): super(projection, self).__init__(name=name, center=center, clipAngle=clipAngle, clipExtent=clipExtent, extent=extent, fit=fit, parallels=parallels, pointRadius=pointRadius, precision=precision, rotate=rotate, scale=scale, size=size, translate=translate, type=type, **kwds) class scale(VegaSchema): """scale schema wrapper oneOf(Mapping(required=[type, name]), Mapping(required=[type, name]), Mapping(required=[type, name]), Mapping(required=[type, name]), Mapping(required=[type, name]), Mapping(required=[type, name]), Mapping(required=[type, name]), Mapping(required=[type, name]), Mapping(required=[name]), Mapping(required=[type, name]), Mapping(required=[type, name]), Mapping(required=[type, name])) """ _schema = {'$ref': '#/defs/scale'} def __init__(self, *args, **kwds): super(scale, self).__init__(*args, **kwds) class scope(VegaSchema): """scope schema wrapper Mapping(required=[]) Attributes ---------- axes : List(:class:`axis`) data : List(:class:`data`) encode : :class:`encode` layout : :class:`layout` legends : List(:class:`legend`) marks : List(oneOf(:class:`markGroup`, :class:`markVisual`)) projections : List(:class:`projection`) scales : List(:class:`scale`) signals : List(:class:`signal`) title : :class:`title` usermeta : Mapping(required=[]) """ _schema = {'$ref': '#/defs/scope'} def __init__(self, axes=Undefined, data=Undefined, encode=Undefined, layout=Undefined, legends=Undefined, marks=Undefined, projections=Undefined, scales=Undefined, signals=Undefined, title=Undefined, usermeta=Undefined, **kwds): super(scope, self).__init__(axes=axes, data=data, encode=encode, layout=layout, legends=legends, marks=marks, projections=projections, scales=scales, signals=signals, title=title, usermeta=usermeta, **kwds) class signalName(VegaSchema): """signalName schema wrapper not enum('parent', 'datum', 'event', 'item') """ _schema = {'$ref': '#/defs/signalName'} def __init__(self, *args): super(signalName, self).__init__(*args) class signal(VegaSchema): """signal schema wrapper oneOf(Mapping(required=[name, push]), Mapping(required=[name]), Mapping(required=[name, init])) """ _schema = {'$ref': '#/defs/signal'} def __init__(self, *args, **kwds): super(signal, self).__init__(*args, **kwds) class stream(VegaSchema): """stream schema wrapper allOf(Mapping(required=[]), oneOf(Mapping(required=[type]), Mapping(required=[stream]), Mapping(required=[merge]))) """ _schema = {'$ref': '#/defs/stream'} def __init__(self, between=Undefined, consume=Undefined, debounce=Undefined, filter=Undefined, markname=Undefined, marktype=Undefined, throttle=Undefined, **kwds): super(stream, self).__init__(between=between, consume=consume, debounce=debounce, filter=filter, markname=markname, marktype=marktype, throttle=throttle, **kwds) class title(VegaSchema): """title schema wrapper oneOf(string, Mapping(required=[])) """ _schema = {'$ref': '#/defs/title'} def __init__(self, *args, **kwds): super(title, self).__init__(*args, **kwds) class transform(VegaSchema): """transform schema wrapper oneOf(:class:`crossfilterTransform`, :class:`resolvefilterTransform`, :class:`linkpathTransform`, :class:`pieTransform`, :class:`stackTransform`, :class:`forceTransform`, :class:`contourTransform`, :class:`geojsonTransform`, :class:`geopathTransform`, :class:`geopointTransform`, :class:`geoshapeTransform`, :class:`graticuleTransform`, :class:`heatmapTransform`, :class:`isocontourTransform`, :class:`kde2dTransform`, :class:`nestTransform`, :class:`packTransform`, :class:`partitionTransform`, :class:`stratifyTransform`, :class:`treeTransform`, :class:`treelinksTransform`, :class:`treemapTransform`, :class:`loessTransform`, :class:`regressionTransform`, :class:`aggregateTransform`, :class:`binTransform`, :class:`collectTransform`, :class:`countpatternTransform`, :class:`crossTransform`, :class:`densityTransform`, :class:`dotbinTransform`, :class:`extentTransform`, :class:`filterTransform`, :class:`flattenTransform`, :class:`foldTransform`, :class:`formulaTransform`, :class:`imputeTransform`, :class:`joinaggregateTransform`, :class:`kdeTransform`, :class:`lookupTransform`, :class:`pivotTransform`, :class:`projectTransform`, :class:`quantileTransform`, :class:`sampleTransform`, :class:`sequenceTransform`, :class:`timeunitTransform`, :class:`windowTransform`, :class:`identifierTransform`, :class:`voronoiTransform`, :class:`wordcloudTransform`) """ _schema = {'$ref': '#/defs/transform'} def __init__(self, *args, **kwds): super(transform, self).__init__(*args, **kwds) class transformMark(VegaSchema): """transformMark schema wrapper oneOf(:class:`crossfilterTransform`, :class:`resolvefilterTransform`, :class:`linkpathTransform`, :class:`pieTransform`, :class:`stackTransform`, :class:`forceTransform`, :class:`geojsonTransform`, :class:`geopathTransform`, :class:`geopointTransform`, :class:`geoshapeTransform`, :class:`heatmapTransform`, :class:`packTransform`, :class:`partitionTransform`, :class:`stratifyTransform`, :class:`treeTransform`, :class:`treemapTransform`, :class:`binTransform`, :class:`collectTransform`, :class:`dotbinTransform`, :class:`extentTransform`, :class:`formulaTransform`, :class:`joinaggregateTransform`, :class:`lookupTransform`, :class:`sampleTransform`, :class:`timeunitTransform`, :class:`windowTransform`, :class:`identifierTransform`, :class:`voronoiTransform`, :class:`wordcloudTransform`) """ _schema = {'$ref': '#/defs/transformMark'} def __init__(self, *args, **kwds): super(transformMark, self).__init__(*args, **kwds) class crossfilterTransform(VegaSchema): """crossfilterTransform schema wrapper Mapping(required=[type, fields, query]) Attributes ---------- fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) query : oneOf(List(Any), :class:`signal`) type : enum('crossfilter') signal : string """ _schema = {'$ref': '#/defs/crossfilterTransform'} def __init__(self, fields=Undefined, query=Undefined, type=Undefined, signal=Undefined, **kwds): super(crossfilterTransform, self).__init__(fields=fields, query=query, type=type, signal=signal, **kwds) class resolvefilterTransform(VegaSchema): """resolvefilterTransform schema wrapper Mapping(required=[type, ignore, filter]) Attributes ---------- filter : Any ignore : anyOf(float, :class:`signal`) type : enum('resolvefilter') signal : string """ _schema = {'$ref': '#/defs/resolvefilterTransform'} def __init__(self, filter=Undefined, ignore=Undefined, type=Undefined, signal=Undefined, **kwds): super(resolvefilterTransform, self).__init__(filter=filter, ignore=ignore, type=type, signal=signal, **kwds) class linkpathTransform(VegaSchema): """linkpathTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('linkpath') orient : anyOf(enum('horizontal', 'vertical', 'radial'), :class:`signal`) require : :class:`signal` shape : anyOf(enum('line', 'arc', 'curve', 'diagonal', 'orthogonal'), :class:`signal`) signal : string sourceX : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) sourceY : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) targetX : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) targetY : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) as : anyOf(string, :class:`signal`) """ _schema = {'$ref': '#/defs/linkpathTransform'} def __init__(self, type=Undefined, orient=Undefined, require=Undefined, shape=Undefined, signal=Undefined, sourceX=Undefined, sourceY=Undefined, targetX=Undefined, targetY=Undefined, **kwds): super(linkpathTransform, self).__init__(type=type, orient=orient, require=require, shape=shape, signal=signal, sourceX=sourceX, sourceY=sourceY, targetX=targetX, targetY=targetY, **kwds) class pieTransform(VegaSchema): """pieTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('pie') endAngle : anyOf(float, :class:`signal`) field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) signal : string sort : anyOf(boolean, :class:`signal`) startAngle : anyOf(float, :class:`signal`) as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/pieTransform'} def __init__(self, type=Undefined, endAngle=Undefined, field=Undefined, signal=Undefined, sort=Undefined, startAngle=Undefined, **kwds): super(pieTransform, self).__init__(type=type, endAngle=endAngle, field=field, signal=signal, sort=sort, startAngle=startAngle, **kwds) class stackTransform(VegaSchema): """stackTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('stack') field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) offset : anyOf(enum('zero', 'center', 'normalize'), :class:`signal`) signal : string sort : :class:`compare` as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/stackTransform'} def __init__(self, type=Undefined, field=Undefined, groupby=Undefined, offset=Undefined, signal=Undefined, sort=Undefined, **kwds): super(stackTransform, self).__init__(type=type, field=field, groupby=groupby, offset=offset, signal=signal, sort=sort, **kwds) class forceTransform(VegaSchema): """forceTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('force') alpha : anyOf(float, :class:`signal`) alphaMin : anyOf(float, :class:`signal`) alphaTarget : anyOf(float, :class:`signal`) forces : List(oneOf(Mapping(required=[force]), Mapping(required=[force]), Mapping(required=[force]), Mapping(required=[force]), Mapping(required=[force]), Mapping(required=[force]))) iterations : anyOf(float, :class:`signal`) restart : anyOf(boolean, :class:`signal`) signal : string static : anyOf(boolean, :class:`signal`) velocityDecay : anyOf(float, :class:`signal`) as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/forceTransform'} def __init__(self, type=Undefined, alpha=Undefined, alphaMin=Undefined, alphaTarget=Undefined, forces=Undefined, iterations=Undefined, restart=Undefined, signal=Undefined, static=Undefined, velocityDecay=Undefined, **kwds): super(forceTransform, self).__init__(type=type, alpha=alpha, alphaMin=alphaMin, alphaTarget=alphaTarget, forces=forces, iterations=iterations, restart=restart, signal=signal, static=static, velocityDecay=velocityDecay, **kwds) class contourTransform(VegaSchema): """contourTransform schema wrapper Mapping(required=[type, size]) Attributes ---------- size : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) type : enum('contour') bandwidth : anyOf(float, :class:`signal`) cellSize : anyOf(float, :class:`signal`) count : anyOf(float, :class:`signal`) nice : anyOf(boolean, :class:`signal`) signal : string smooth : anyOf(boolean, :class:`signal`) thresholds : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) values : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) weight : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) x : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) y : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) """ _schema = {'$ref': '#/defs/contourTransform'} def __init__(self, size=Undefined, type=Undefined, bandwidth=Undefined, cellSize=Undefined, count=Undefined, nice=Undefined, signal=Undefined, smooth=Undefined, thresholds=Undefined, values=Undefined, weight=Undefined, x=Undefined, y=Undefined, **kwds): super(contourTransform, self).__init__(size=size, type=type, bandwidth=bandwidth, cellSize=cellSize, count=count, nice=nice, signal=signal, smooth=smooth, thresholds=thresholds, values=values, weight=weight, x=x, y=y, **kwds) class geojsonTransform(VegaSchema): """geojsonTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('geojson') fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) geojson : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) signal : string """ _schema = {'$ref': '#/defs/geojsonTransform'} def __init__(self, type=Undefined, fields=Undefined, geojson=Undefined, signal=Undefined, **kwds): super(geojsonTransform, self).__init__(type=type, fields=fields, geojson=geojson, signal=signal, **kwds) class geopathTransform(VegaSchema): """geopathTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('geopath') field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) pointRadius : anyOf(float, :class:`signal`, :class:`expr`, :class:`paramField`) projection : string signal : string as : anyOf(string, :class:`signal`) """ _schema = {'$ref': '#/defs/geopathTransform'} def __init__(self, type=Undefined, field=Undefined, pointRadius=Undefined, projection=Undefined, signal=Undefined, **kwds): super(geopathTransform, self).__init__(type=type, field=field, pointRadius=pointRadius, projection=projection, signal=signal, **kwds) class geopointTransform(VegaSchema): """geopointTransform schema wrapper Mapping(required=[type, projection, fields]) Attributes ---------- fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) projection : string type : enum('geopoint') signal : string as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/geopointTransform'} def __init__(self, fields=Undefined, projection=Undefined, type=Undefined, signal=Undefined, **kwds): super(geopointTransform, self).__init__(fields=fields, projection=projection, type=type, signal=signal, **kwds) class geoshapeTransform(VegaSchema): """geoshapeTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('geoshape') field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) pointRadius : anyOf(float, :class:`signal`, :class:`expr`, :class:`paramField`) projection : string signal : string as : anyOf(string, :class:`signal`) """ _schema = {'$ref': '#/defs/geoshapeTransform'} def __init__(self, type=Undefined, field=Undefined, pointRadius=Undefined, projection=Undefined, signal=Undefined, **kwds): super(geoshapeTransform, self).__init__(type=type, field=field, pointRadius=pointRadius, projection=projection, signal=signal, **kwds) class graticuleTransform(VegaSchema): """graticuleTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('graticule') extent : oneOf(List(Any), :class:`signal`) extentMajor : oneOf(List(Any), :class:`signal`) extentMinor : oneOf(List(Any), :class:`signal`) precision : anyOf(float, :class:`signal`) signal : string step : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) stepMajor : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) stepMinor : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/graticuleTransform'} def __init__(self, type=Undefined, extent=Undefined, extentMajor=Undefined, extentMinor=Undefined, precision=Undefined, signal=Undefined, step=Undefined, stepMajor=Undefined, stepMinor=Undefined, **kwds): super(graticuleTransform, self).__init__(type=type, extent=extent, extentMajor=extentMajor, extentMinor=extentMinor, precision=precision, signal=signal, step=step, stepMajor=stepMajor, stepMinor=stepMinor, **kwds) class heatmapTransform(VegaSchema): """heatmapTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('heatmap') color : anyOf(string, :class:`signal`, :class:`expr`, :class:`paramField`) field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) opacity : anyOf(float, :class:`signal`, :class:`expr`, :class:`paramField`) resolve : anyOf(enum('shared', 'independent'), :class:`signal`) signal : string as : anyOf(string, :class:`signal`) """ _schema = {'$ref': '#/defs/heatmapTransform'} def __init__(self, type=Undefined, color=Undefined, field=Undefined, opacity=Undefined, resolve=Undefined, signal=Undefined, **kwds): super(heatmapTransform, self).__init__(type=type, color=color, field=field, opacity=opacity, resolve=resolve, signal=signal, **kwds) class isocontourTransform(VegaSchema): """isocontourTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('isocontour') field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) levels : anyOf(float, :class:`signal`) nice : anyOf(boolean, :class:`signal`) resolve : anyOf(enum('shared', 'independent'), :class:`signal`) scale : anyOf(float, :class:`signal`, :class:`expr`, :class:`paramField`) signal : string smooth : anyOf(boolean, :class:`signal`) thresholds : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) translate : oneOf(List(anyOf(float, :class:`signal`, :class:`expr`, :class:`paramField`)), :class:`signal`) zero : anyOf(boolean, :class:`signal`) as : anyOf(string, :class:`signal`, None) """ _schema = {'$ref': '#/defs/isocontourTransform'} def __init__(self, type=Undefined, field=Undefined, levels=Undefined, nice=Undefined, resolve=Undefined, scale=Undefined, signal=Undefined, smooth=Undefined, thresholds=Undefined, translate=Undefined, zero=Undefined, **kwds): super(isocontourTransform, self).__init__(type=type, field=field, levels=levels, nice=nice, resolve=resolve, scale=scale, signal=signal, smooth=smooth, thresholds=thresholds, translate=translate, zero=zero, **kwds) class kde2dTransform(VegaSchema): """kde2dTransform schema wrapper Mapping(required=[type, size, x, y]) Attributes ---------- size : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) type : enum('kde2d') x : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) y : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) bandwidth : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) cellSize : anyOf(float, :class:`signal`) counts : anyOf(boolean, :class:`signal`) groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) signal : string weight : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) as : anyOf(string, :class:`signal`) """ _schema = {'$ref': '#/defs/kde2dTransform'} def __init__(self, size=Undefined, type=Undefined, x=Undefined, y=Undefined, bandwidth=Undefined, cellSize=Undefined, counts=Undefined, groupby=Undefined, signal=Undefined, weight=Undefined, **kwds): super(kde2dTransform, self).__init__(size=size, type=type, x=x, y=y, bandwidth=bandwidth, cellSize=cellSize, counts=counts, groupby=groupby, signal=signal, weight=weight, **kwds) class nestTransform(VegaSchema): """nestTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('nest') generate : anyOf(boolean, :class:`signal`) keys : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) signal : string """ _schema = {'$ref': '#/defs/nestTransform'} def __init__(self, type=Undefined, generate=Undefined, keys=Undefined, signal=Undefined, **kwds): super(nestTransform, self).__init__(type=type, generate=generate, keys=keys, signal=signal, **kwds) class packTransform(VegaSchema): """packTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('pack') field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) padding : anyOf(float, :class:`signal`) radius : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) signal : string size : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) sort : :class:`compare` as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/packTransform'} def __init__(self, type=Undefined, field=Undefined, padding=Undefined, radius=Undefined, signal=Undefined, size=Undefined, sort=Undefined, **kwds): super(packTransform, self).__init__(type=type, field=field, padding=padding, radius=radius, signal=signal, size=size, sort=sort, **kwds) class partitionTransform(VegaSchema): """partitionTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('partition') field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) padding : anyOf(float, :class:`signal`) round : anyOf(boolean, :class:`signal`) signal : string size : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) sort : :class:`compare` as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/partitionTransform'} def __init__(self, type=Undefined, field=Undefined, padding=Undefined, round=Undefined, signal=Undefined, size=Undefined, sort=Undefined, **kwds): super(partitionTransform, self).__init__(type=type, field=field, padding=padding, round=round, signal=signal, size=size, sort=sort, **kwds) class stratifyTransform(VegaSchema): """stratifyTransform schema wrapper Mapping(required=[type, key, parentKey]) Attributes ---------- key : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) parentKey : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) type : enum('stratify') signal : string """ _schema = {'$ref': '#/defs/stratifyTransform'} def __init__(self, key=Undefined, parentKey=Undefined, type=Undefined, signal=Undefined, **kwds): super(stratifyTransform, self).__init__(key=key, parentKey=parentKey, type=type, signal=signal, **kwds) class treeTransform(VegaSchema): """treeTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('tree') field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) method : anyOf(enum('tidy', 'cluster'), :class:`signal`) nodeSize : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) separation : anyOf(boolean, :class:`signal`) signal : string size : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) sort : :class:`compare` as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/treeTransform'} def __init__(self, type=Undefined, field=Undefined, method=Undefined, nodeSize=Undefined, separation=Undefined, signal=Undefined, size=Undefined, sort=Undefined, **kwds): super(treeTransform, self).__init__(type=type, field=field, method=method, nodeSize=nodeSize, separation=separation, signal=signal, size=size, sort=sort, **kwds) class treelinksTransform(VegaSchema): """treelinksTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('treelinks') signal : string """ _schema = {'$ref': '#/defs/treelinksTransform'} def __init__(self, type=Undefined, signal=Undefined, **kwds): super(treelinksTransform, self).__init__(type=type, signal=signal, **kwds) class treemapTransform(VegaSchema): """treemapTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('treemap') field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) method : anyOf(enum('squarify', 'resquarify', 'binary', 'dice', 'slice', 'slicedice'), :class:`signal`) padding : anyOf(float, :class:`signal`) paddingBottom : anyOf(float, :class:`signal`) paddingInner : anyOf(float, :class:`signal`) paddingLeft : anyOf(float, :class:`signal`) paddingOuter : anyOf(float, :class:`signal`) paddingRight : anyOf(float, :class:`signal`) paddingTop : anyOf(float, :class:`signal`) ratio : anyOf(float, :class:`signal`) round : anyOf(boolean, :class:`signal`) signal : string size : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) sort : :class:`compare` as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/treemapTransform'} def __init__(self, type=Undefined, field=Undefined, method=Undefined, padding=Undefined, paddingBottom=Undefined, paddingInner=Undefined, paddingLeft=Undefined, paddingOuter=Undefined, paddingRight=Undefined, paddingTop=Undefined, ratio=Undefined, round=Undefined, signal=Undefined, size=Undefined, sort=Undefined, **kwds): super(treemapTransform, self).__init__(type=type, field=field, method=method, padding=padding, paddingBottom=paddingBottom, paddingInner=paddingInner, paddingLeft=paddingLeft, paddingOuter=paddingOuter, paddingRight=paddingRight, paddingTop=paddingTop, ratio=ratio, round=round, signal=signal, size=size, sort=sort, **kwds) class loessTransform(VegaSchema): """loessTransform schema wrapper Mapping(required=[type, x, y]) Attributes ---------- type : enum('loess') x : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) y : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) bandwidth : anyOf(float, :class:`signal`) groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) signal : string as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/loessTransform'} def __init__(self, type=Undefined, x=Undefined, y=Undefined, bandwidth=Undefined, groupby=Undefined, signal=Undefined, **kwds): super(loessTransform, self).__init__(type=type, x=x, y=y, bandwidth=bandwidth, groupby=groupby, signal=signal, **kwds) class regressionTransform(VegaSchema): """regressionTransform schema wrapper Mapping(required=[type, x, y]) Attributes ---------- type : enum('regression') x : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) y : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) extent : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) method : anyOf(string, :class:`signal`) order : anyOf(float, :class:`signal`) params : anyOf(boolean, :class:`signal`) signal : string as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/regressionTransform'} def __init__(self, type=Undefined, x=Undefined, y=Undefined, extent=Undefined, groupby=Undefined, method=Undefined, order=Undefined, params=Undefined, signal=Undefined, **kwds): super(regressionTransform, self).__init__(type=type, x=x, y=y, extent=extent, groupby=groupby, method=method, order=order, params=params, signal=signal, **kwds) class aggregateTransform(VegaSchema): """aggregateTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('aggregate') cross : anyOf(boolean, :class:`signal`) drop : anyOf(boolean, :class:`signal`) fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`, None)), :class:`signal`) groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) key : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) ops : oneOf(List(anyOf(enum('values', 'count', '__count__', 'missing', 'valid', 'sum', 'product', 'mean', 'average', 'variance', 'variancep', 'stdev', 'stdevp', 'stderr', 'distinct', 'ci0', 'ci1', 'median', 'q1', 'q3', 'argmin', 'argmax', 'min', 'max'), :class:`signal`)), :class:`signal`) signal : string as : oneOf(List(anyOf(string, :class:`signal`, None)), :class:`signal`) """ _schema = {'$ref': '#/defs/aggregateTransform'} def __init__(self, type=Undefined, cross=Undefined, drop=Undefined, fields=Undefined, groupby=Undefined, key=Undefined, ops=Undefined, signal=Undefined, **kwds): super(aggregateTransform, self).__init__(type=type, cross=cross, drop=drop, fields=fields, groupby=groupby, key=key, ops=ops, signal=signal, **kwds) class binTransform(VegaSchema): """binTransform schema wrapper Mapping(required=[type, field, extent]) Attributes ---------- extent : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) type : enum('bin') anchor : anyOf(float, :class:`signal`) base : anyOf(float, :class:`signal`) divide : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) interval : anyOf(boolean, :class:`signal`) maxbins : anyOf(float, :class:`signal`) minstep : anyOf(float, :class:`signal`) name : anyOf(string, :class:`signal`) nice : anyOf(boolean, :class:`signal`) signal : string span : anyOf(float, :class:`signal`) step : anyOf(float, :class:`signal`) steps : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/binTransform'} def __init__(self, extent=Undefined, field=Undefined, type=Undefined, anchor=Undefined, base=Undefined, divide=Undefined, interval=Undefined, maxbins=Undefined, minstep=Undefined, name=Undefined, nice=Undefined, signal=Undefined, span=Undefined, step=Undefined, steps=Undefined, **kwds): super(binTransform, self).__init__(extent=extent, field=field, type=type, anchor=anchor, base=base, divide=divide, interval=interval, maxbins=maxbins, minstep=minstep, name=name, nice=nice, signal=signal, span=span, step=step, steps=steps, **kwds) class collectTransform(VegaSchema): """collectTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('collect') signal : string sort : :class:`compare` """ _schema = {'$ref': '#/defs/collectTransform'} def __init__(self, type=Undefined, signal=Undefined, sort=Undefined, **kwds): super(collectTransform, self).__init__(type=type, signal=signal, sort=sort, **kwds) class countpatternTransform(VegaSchema): """countpatternTransform schema wrapper Mapping(required=[type, field]) Attributes ---------- field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) type : enum('countpattern') case : anyOf(enum('upper', 'lower', 'mixed'), :class:`signal`) pattern : anyOf(string, :class:`signal`) signal : string stopwords : anyOf(string, :class:`signal`) as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/countpatternTransform'} def __init__(self, field=Undefined, type=Undefined, case=Undefined, pattern=Undefined, signal=Undefined, stopwords=Undefined, **kwds): super(countpatternTransform, self).__init__(field=field, type=type, case=case, pattern=pattern, signal=signal, stopwords=stopwords, **kwds) class crossTransform(VegaSchema): """crossTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('cross') filter : :class:`exprString` signal : string as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/crossTransform'} def __init__(self, type=Undefined, filter=Undefined, signal=Undefined, **kwds): super(crossTransform, self).__init__(type=type, filter=filter, signal=signal, **kwds) class densityTransform(VegaSchema): """densityTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('density') distribution : oneOf(Mapping(required=[function]), Mapping(required=[function]), Mapping(required=[function]), Mapping(required=[function, field]), Mapping(required=[function])) extent : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) maxsteps : anyOf(float, :class:`signal`) method : anyOf(string, :class:`signal`) minsteps : anyOf(float, :class:`signal`) signal : string steps : anyOf(float, :class:`signal`) as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/densityTransform'} def __init__(self, type=Undefined, distribution=Undefined, extent=Undefined, maxsteps=Undefined, method=Undefined, minsteps=Undefined, signal=Undefined, steps=Undefined, **kwds): super(densityTransform, self).__init__(type=type, distribution=distribution, extent=extent, maxsteps=maxsteps, method=method, minsteps=minsteps, signal=signal, steps=steps, **kwds) class dotbinTransform(VegaSchema): """dotbinTransform schema wrapper Mapping(required=[type, field]) Attributes ---------- field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) type : enum('dotbin') groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) signal : string smooth : anyOf(boolean, :class:`signal`) step : anyOf(float, :class:`signal`) as : anyOf(string, :class:`signal`) """ _schema = {'$ref': '#/defs/dotbinTransform'} def __init__(self, field=Undefined, type=Undefined, groupby=Undefined, signal=Undefined, smooth=Undefined, step=Undefined, **kwds): super(dotbinTransform, self).__init__(field=field, type=type, groupby=groupby, signal=signal, smooth=smooth, step=step, **kwds) class extentTransform(VegaSchema): """extentTransform schema wrapper Mapping(required=[type, field]) Attributes ---------- field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) type : enum('extent') signal : string """ _schema = {'$ref': '#/defs/extentTransform'} def __init__(self, field=Undefined, type=Undefined, signal=Undefined, **kwds): super(extentTransform, self).__init__(field=field, type=type, signal=signal, **kwds) class filterTransform(VegaSchema): """filterTransform schema wrapper Mapping(required=[type, expr]) Attributes ---------- expr : :class:`exprString` type : enum('filter') signal : string """ _schema = {'$ref': '#/defs/filterTransform'} def __init__(self, expr=Undefined, type=Undefined, signal=Undefined, **kwds): super(filterTransform, self).__init__(expr=expr, type=type, signal=signal, **kwds) class flattenTransform(VegaSchema): """flattenTransform schema wrapper Mapping(required=[type, fields]) Attributes ---------- fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) type : enum('flatten') index : anyOf(string, :class:`signal`) signal : string as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/flattenTransform'} def __init__(self, fields=Undefined, type=Undefined, index=Undefined, signal=Undefined, **kwds): super(flattenTransform, self).__init__(fields=fields, type=type, index=index, signal=signal, **kwds) class foldTransform(VegaSchema): """foldTransform schema wrapper Mapping(required=[type, fields]) Attributes ---------- fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) type : enum('fold') signal : string as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/foldTransform'} def __init__(self, fields=Undefined, type=Undefined, signal=Undefined, **kwds): super(foldTransform, self).__init__(fields=fields, type=type, signal=signal, **kwds) class formulaTransform(VegaSchema): """formulaTransform schema wrapper Mapping(required=[type, expr, as]) Attributes ---------- expr : :class:`exprString` type : enum('formula') initonly : anyOf(boolean, :class:`signal`) signal : string as : anyOf(string, :class:`signal`) """ _schema = {'$ref': '#/defs/formulaTransform'} def __init__(self, expr=Undefined, type=Undefined, initonly=Undefined, signal=Undefined, **kwds): super(formulaTransform, self).__init__(expr=expr, type=type, initonly=initonly, signal=signal, **kwds) class imputeTransform(VegaSchema): """imputeTransform schema wrapper Mapping(required=[type, field, key]) Attributes ---------- field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) key : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) type : enum('impute') groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) keyvals : oneOf(List(Any), :class:`signal`) method : anyOf(enum('value', 'mean', 'median', 'max', 'min'), :class:`signal`) signal : string value : Any """ _schema = {'$ref': '#/defs/imputeTransform'} def __init__(self, field=Undefined, key=Undefined, type=Undefined, groupby=Undefined, keyvals=Undefined, method=Undefined, signal=Undefined, value=Undefined, **kwds): super(imputeTransform, self).__init__(field=field, key=key, type=type, groupby=groupby, keyvals=keyvals, method=method, signal=signal, value=value, **kwds) class joinaggregateTransform(VegaSchema): """joinaggregateTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('joinaggregate') fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`, None)), :class:`signal`) groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) key : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) ops : oneOf(List(anyOf(enum('values', 'count', '__count__', 'missing', 'valid', 'sum', 'product', 'mean', 'average', 'variance', 'variancep', 'stdev', 'stdevp', 'stderr', 'distinct', 'ci0', 'ci1', 'median', 'q1', 'q3', 'argmin', 'argmax', 'min', 'max'), :class:`signal`)), :class:`signal`) signal : string as : oneOf(List(anyOf(string, :class:`signal`, None)), :class:`signal`) """ _schema = {'$ref': '#/defs/joinaggregateTransform'} def __init__(self, type=Undefined, fields=Undefined, groupby=Undefined, key=Undefined, ops=Undefined, signal=Undefined, **kwds): super(joinaggregateTransform, self).__init__(type=type, fields=fields, groupby=groupby, key=key, ops=ops, signal=signal, **kwds) class kdeTransform(VegaSchema): """kdeTransform schema wrapper Mapping(required=[type, field]) Attributes ---------- field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) type : enum('kde') bandwidth : anyOf(float, :class:`signal`) counts : anyOf(boolean, :class:`signal`) cumulative : anyOf(boolean, :class:`signal`) extent : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) maxsteps : anyOf(float, :class:`signal`) minsteps : anyOf(float, :class:`signal`) resolve : anyOf(enum('shared', 'independent'), :class:`signal`) signal : string steps : anyOf(float, :class:`signal`) as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/kdeTransform'} def __init__(self, field=Undefined, type=Undefined, bandwidth=Undefined, counts=Undefined, cumulative=Undefined, extent=Undefined, groupby=Undefined, maxsteps=Undefined, minsteps=Undefined, resolve=Undefined, signal=Undefined, steps=Undefined, **kwds): super(kdeTransform, self).__init__(field=field, type=type, bandwidth=bandwidth, counts=counts, cumulative=cumulative, extent=extent, groupby=groupby, maxsteps=maxsteps, minsteps=minsteps, resolve=resolve, signal=signal, steps=steps, **kwds) class lookupTransform(VegaSchema): """lookupTransform schema wrapper Mapping(required=[type, from, key, fields]) Attributes ---------- fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) key : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) type : enum('lookup') default : Any signal : string values : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) from : string """ _schema = {'$ref': '#/defs/lookupTransform'} def __init__(self, fields=Undefined, key=Undefined, type=Undefined, default=Undefined, signal=Undefined, values=Undefined, **kwds): super(lookupTransform, self).__init__(fields=fields, key=key, type=type, default=default, signal=signal, values=values, **kwds) class pivotTransform(VegaSchema): """pivotTransform schema wrapper Mapping(required=[type, field, value]) Attributes ---------- field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) type : enum('pivot') value : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) key : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) limit : anyOf(float, :class:`signal`) op : anyOf(enum('values', 'count', '__count__', 'missing', 'valid', 'sum', 'product', 'mean', 'average', 'variance', 'variancep', 'stdev', 'stdevp', 'stderr', 'distinct', 'ci0', 'ci1', 'median', 'q1', 'q3', 'argmin', 'argmax', 'min', 'max'), :class:`signal`) signal : string """ _schema = {'$ref': '#/defs/pivotTransform'} def __init__(self, field=Undefined, type=Undefined, value=Undefined, groupby=Undefined, key=Undefined, limit=Undefined, op=Undefined, signal=Undefined, **kwds): super(pivotTransform, self).__init__(field=field, type=type, value=value, groupby=groupby, key=key, limit=limit, op=op, signal=signal, **kwds) class projectTransform(VegaSchema): """projectTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('project') fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) signal : string as : oneOf(List(anyOf(string, :class:`signal`, None)), :class:`signal`) """ _schema = {'$ref': '#/defs/projectTransform'} def __init__(self, type=Undefined, fields=Undefined, signal=Undefined, **kwds): super(projectTransform, self).__init__(type=type, fields=fields, signal=signal, **kwds) class quantileTransform(VegaSchema): """quantileTransform schema wrapper Mapping(required=[type, field]) Attributes ---------- field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) type : enum('quantile') groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) probs : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) signal : string step : anyOf(float, :class:`signal`) as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/quantileTransform'} def __init__(self, field=Undefined, type=Undefined, groupby=Undefined, probs=Undefined, signal=Undefined, step=Undefined, **kwds): super(quantileTransform, self).__init__(field=field, type=type, groupby=groupby, probs=probs, signal=signal, step=step, **kwds) class sampleTransform(VegaSchema): """sampleTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('sample') signal : string size : anyOf(float, :class:`signal`) """ _schema = {'$ref': '#/defs/sampleTransform'} def __init__(self, type=Undefined, signal=Undefined, size=Undefined, **kwds): super(sampleTransform, self).__init__(type=type, signal=signal, size=size, **kwds) class sequenceTransform(VegaSchema): """sequenceTransform schema wrapper Mapping(required=[type, start, stop]) Attributes ---------- start : anyOf(float, :class:`signal`) stop : anyOf(float, :class:`signal`) type : enum('sequence') signal : string step : anyOf(float, :class:`signal`) as : anyOf(string, :class:`signal`) """ _schema = {'$ref': '#/defs/sequenceTransform'} def __init__(self, start=Undefined, stop=Undefined, type=Undefined, signal=Undefined, step=Undefined, **kwds): super(sequenceTransform, self).__init__(start=start, stop=stop, type=type, signal=signal, step=step, **kwds) class timeunitTransform(VegaSchema): """timeunitTransform schema wrapper Mapping(required=[type, field]) Attributes ---------- field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) type : enum('timeunit') extent : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) interval : anyOf(boolean, :class:`signal`) maxbins : anyOf(float, :class:`signal`) signal : string step : anyOf(float, :class:`signal`) timezone : anyOf(enum('local', 'utc'), :class:`signal`) units : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/timeunitTransform'} def __init__(self, field=Undefined, type=Undefined, extent=Undefined, interval=Undefined, maxbins=Undefined, signal=Undefined, step=Undefined, timezone=Undefined, units=Undefined, **kwds): super(timeunitTransform, self).__init__(field=field, type=type, extent=extent, interval=interval, maxbins=maxbins, signal=signal, step=step, timezone=timezone, units=units, **kwds) class windowTransform(VegaSchema): """windowTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('window') fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`, None)), :class:`signal`) frame : oneOf(List(anyOf(float, :class:`signal`, None)), :class:`signal`) groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)), :class:`signal`) ignorePeers : anyOf(boolean, :class:`signal`) ops : oneOf(List(anyOf(enum('row_number', 'rank', 'dense_rank', 'percent_rank', 'cume_dist', 'ntile', 'lag', 'lead', 'first_value', 'last_value', 'nth_value', 'prev_value', 'next_value', 'values', 'count', '__count__', 'missing', 'valid', 'sum', 'product', 'mean', 'average', 'variance', 'variancep', 'stdev', 'stdevp', 'stderr', 'distinct', 'ci0', 'ci1', 'median', 'q1', 'q3', 'argmin', 'argmax', 'min', 'max'), :class:`signal`)), :class:`signal`) params : oneOf(List(anyOf(float, :class:`signal`, None)), :class:`signal`) signal : string sort : :class:`compare` as : oneOf(List(anyOf(string, :class:`signal`, None)), :class:`signal`) """ _schema = {'$ref': '#/defs/windowTransform'} def __init__(self, type=Undefined, fields=Undefined, frame=Undefined, groupby=Undefined, ignorePeers=Undefined, ops=Undefined, params=Undefined, signal=Undefined, sort=Undefined, **kwds): super(windowTransform, self).__init__(type=type, fields=fields, frame=frame, groupby=groupby, ignorePeers=ignorePeers, ops=ops, params=params, signal=signal, sort=sort, **kwds) class identifierTransform(VegaSchema): """identifierTransform schema wrapper Mapping(required=[type, as]) Attributes ---------- type : enum('identifier') signal : string as : anyOf(string, :class:`signal`) """ _schema = {'$ref': '#/defs/identifierTransform'} def __init__(self, type=Undefined, signal=Undefined, **kwds): super(identifierTransform, self).__init__(type=type, signal=signal, **kwds) class voronoiTransform(VegaSchema): """voronoiTransform schema wrapper Mapping(required=[type, x, y]) Attributes ---------- type : enum('voronoi') x : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) y : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) extent : oneOf(List(Any), :class:`signal`) signal : string size : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) as : anyOf(string, :class:`signal`) """ _schema = {'$ref': '#/defs/voronoiTransform'} def __init__(self, type=Undefined, x=Undefined, y=Undefined, extent=Undefined, signal=Undefined, size=Undefined, **kwds): super(voronoiTransform, self).__init__(type=type, x=x, y=y, extent=extent, signal=signal, size=size, **kwds) class wordcloudTransform(VegaSchema): """wordcloudTransform schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('wordcloud') font : anyOf(string, :class:`signal`, :class:`expr`, :class:`paramField`) fontSize : anyOf(float, :class:`signal`, :class:`expr`, :class:`paramField`) fontSizeRange : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`, None) fontStyle : anyOf(string, :class:`signal`, :class:`expr`, :class:`paramField`) fontWeight : anyOf(string, :class:`signal`, :class:`expr`, :class:`paramField`) padding : anyOf(float, :class:`signal`, :class:`expr`, :class:`paramField`) rotate : anyOf(float, :class:`signal`, :class:`expr`, :class:`paramField`) signal : string size : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`) spiral : anyOf(string, :class:`signal`) text : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`) as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`) """ _schema = {'$ref': '#/defs/wordcloudTransform'} def __init__(self, type=Undefined, font=Undefined, fontSize=Undefined, fontSizeRange=Undefined, fontStyle=Undefined, fontWeight=Undefined, padding=Undefined, rotate=Undefined, signal=Undefined, size=Undefined, spiral=Undefined, text=Undefined, **kwds): super(wordcloudTransform, self).__init__(type=type, font=font, fontSize=fontSize, fontSizeRange=fontSizeRange, fontStyle=fontStyle, fontWeight=fontWeight, padding=padding, rotate=rotate, signal=signal, size=size, spiral=spiral, text=text, **kwds) class labelOverlap(VegaSchema): """labelOverlap schema wrapper oneOf(boolean, enum('parity', 'greedy'), :class:`signal`) """ _schema = {'$ref': '#/refs/labelOverlap'} def __init__(self, *args, **kwds): super(labelOverlap, self).__init__(*args, **kwds) class tickBand(VegaSchema): """tickBand schema wrapper oneOf(enum('center', 'extent'), :class:`signal`) """ _schema = {'$ref': '#/refs/tickBand'} def __init__(self, *args, **kwds): super(tickBand, self).__init__(*args, **kwds) class tickCount(VegaSchema): """tickCount schema wrapper oneOf(float, enum('millisecond', 'second', 'minute', 'hour', 'day', 'week', 'month', 'year'), Mapping(required=[interval]), :class:`signal`) """ _schema = {'$ref': '#/refs/tickCount'} def __init__(self, *args, **kwds): super(tickCount, self).__init__(*args, **kwds) class element(VegaSchema): """element schema wrapper string """ _schema = {'$ref': '#/refs/element'} def __init__(self, *args): super(element, self).__init__(*args) class paramField(VegaSchema): """paramField schema wrapper Mapping(required=[field]) Attributes ---------- field : string as : string """ _schema = {'$ref': '#/refs/paramField'} def __init__(self, field=Undefined, **kwds): super(paramField, self).__init__(field=field, **kwds) class field(VegaSchema): """field schema wrapper oneOf(string, :class:`signal`, Mapping(required=[datum]), Mapping(required=[group]), Mapping(required=[parent])) """ _schema = {'$ref': '#/refs/field'} def __init__(self, *args, **kwds): super(field, self).__init__(*args, **kwds) class scale(VegaSchema): """scale schema wrapper oneOf(string, :class:`signal`, Mapping(required=[datum]), Mapping(required=[group]), Mapping(required=[parent])) """ _schema = {'$ref': '#/refs/scale'} def __init__(self, *args, **kwds): super(scale, self).__init__(*args, **kwds) class stringModifiers(VegaSchema): """stringModifiers schema wrapper Mapping(required=[]) Attributes ---------- scale : :class:`scale` """ _schema = {'$ref': '#/refs/stringModifiers'} def __init__(self, scale=Undefined, **kwds): super(stringModifiers, self).__init__(scale=scale, **kwds) class numberModifiers(VegaSchema): """numberModifiers schema wrapper Mapping(required=[]) Attributes ---------- band : oneOf(float, boolean) exponent : oneOf(float, :class:`numberValue`) extra : boolean mult : oneOf(float, :class:`numberValue`) offset : oneOf(float, :class:`numberValue`) round : boolean scale : :class:`scale` """ _schema = {'$ref': '#/refs/numberModifiers'} def __init__(self, band=Undefined, exponent=Undefined, extra=Undefined, mult=Undefined, offset=Undefined, round=Undefined, scale=Undefined, **kwds): super(numberModifiers, self).__init__(band=band, exponent=exponent, extra=extra, mult=mult, offset=offset, round=round, scale=scale, **kwds) class anyValue(VegaSchema): """anyValue schema wrapper oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset])))) """ _schema = {'$ref': '#/refs/anyValue'} def __init__(self, *args, **kwds): super(anyValue, self).__init__(*args, **kwds) class blendValue(VegaSchema): """blendValue schema wrapper oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset])))) """ _schema = {'$ref': '#/refs/blendValue'} def __init__(self, *args, **kwds): super(blendValue, self).__init__(*args, **kwds) class numberValue(VegaSchema): """numberValue schema wrapper oneOf(List(allOf(:class:`rule`, allOf(:class:`numberModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset]))))), allOf(:class:`numberModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset])))) """ _schema = {'$ref': '#/refs/numberValue'} def __init__(self, *args, **kwds): super(numberValue, self).__init__(*args, **kwds) class stringValue(VegaSchema): """stringValue schema wrapper oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset])))) """ _schema = {'$ref': '#/refs/stringValue'} def __init__(self, *args, **kwds): super(stringValue, self).__init__(*args, **kwds) class textValue(VegaSchema): """textValue schema wrapper oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset])))) """ _schema = {'$ref': '#/refs/textValue'} def __init__(self, *args, **kwds): super(textValue, self).__init__(*args, **kwds) class booleanValue(VegaSchema): """booleanValue schema wrapper oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset])))) """ _schema = {'$ref': '#/refs/booleanValue'} def __init__(self, *args, **kwds): super(booleanValue, self).__init__(*args, **kwds) class arrayValue(VegaSchema): """arrayValue schema wrapper oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset])))) """ _schema = {'$ref': '#/refs/arrayValue'} def __init__(self, *args, **kwds): super(arrayValue, self).__init__(*args, **kwds) class fontWeightValue(VegaSchema): """fontWeightValue schema wrapper oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset])))) """ _schema = {'$ref': '#/refs/fontWeightValue'} def __init__(self, *args, **kwds): super(fontWeightValue, self).__init__(*args, **kwds) class anchorValue(VegaSchema): """anchorValue schema wrapper oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset])))) """ _schema = {'$ref': '#/refs/anchorValue'} def __init__(self, *args, **kwds): super(anchorValue, self).__init__(*args, **kwds) class alignValue(VegaSchema): """alignValue schema wrapper oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset])))) """ _schema = {'$ref': '#/refs/alignValue'} def __init__(self, *args, **kwds): super(alignValue, self).__init__(*args, **kwds) class baselineValue(VegaSchema): """baselineValue schema wrapper oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset])))) """ _schema = {'$ref': '#/refs/baselineValue'} def __init__(self, *args, **kwds): super(baselineValue, self).__init__(*args, **kwds) class directionValue(VegaSchema): """directionValue schema wrapper oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset])))) """ _schema = {'$ref': '#/refs/directionValue'} def __init__(self, *args, **kwds): super(directionValue, self).__init__(*args, **kwds) class orientValue(VegaSchema): """orientValue schema wrapper oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset])))) """ _schema = {'$ref': '#/refs/orientValue'} def __init__(self, *args, **kwds): super(orientValue, self).__init__(*args, **kwds) class strokeCapValue(VegaSchema): """strokeCapValue schema wrapper oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset])))) """ _schema = {'$ref': '#/refs/strokeCapValue'} def __init__(self, *args, **kwds): super(strokeCapValue, self).__init__(*args, **kwds) class strokeJoinValue(VegaSchema): """strokeJoinValue schema wrapper oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset])))) """ _schema = {'$ref': '#/refs/strokeJoinValue'} def __init__(self, *args, **kwds): super(strokeJoinValue, self).__init__(*args, **kwds) class baseColorValue(VegaSchema): """baseColorValue schema wrapper oneOf(allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`, Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])), Mapping(required=[scale, value]), Mapping(required=[scale, band]), Mapping(required=[offset]))), Mapping(required=[value]), Mapping(required=[value]), Mapping(required=[gradient]), Mapping(required=[color])) """ _schema = {'$ref': '#/refs/baseColorValue'} def __init__(self, *args, **kwds): super(baseColorValue, self).__init__(*args, **kwds) class colorRGB(VegaSchema): """colorRGB schema wrapper Mapping(required=[r, g, b]) Attributes ---------- b : :class:`numberValue` g : :class:`numberValue` r : :class:`numberValue` """ _schema = {'$ref': '#/refs/colorRGB'} def __init__(self, b=Undefined, g=Undefined, r=Undefined, **kwds): super(colorRGB, self).__init__(b=b, g=g, r=r, **kwds) class colorHSL(VegaSchema): """colorHSL schema wrapper Mapping(required=[h, s, l]) Attributes ---------- h : :class:`numberValue` l : :class:`numberValue` s : :class:`numberValue` """ _schema = {'$ref': '#/refs/colorHSL'} def __init__(self, h=Undefined, l=Undefined, s=Undefined, **kwds): super(colorHSL, self).__init__(h=h, l=l, s=s, **kwds) class colorLAB(VegaSchema): """colorLAB schema wrapper Mapping(required=[l, a, b]) Attributes ---------- a : :class:`numberValue` b : :class:`numberValue` l : :class:`numberValue` """ _schema = {'$ref': '#/refs/colorLAB'} def __init__(self, a=Undefined, b=Undefined, l=Undefined, **kwds): super(colorLAB, self).__init__(a=a, b=b, l=l, **kwds) class colorHCL(VegaSchema): """colorHCL schema wrapper Mapping(required=[h, c, l]) Attributes ---------- c : :class:`numberValue` h : :class:`numberValue` l : :class:`numberValue` """ _schema = {'$ref': '#/refs/colorHCL'} def __init__(self, c=Undefined, h=Undefined, l=Undefined, **kwds): super(colorHCL, self).__init__(c=c, h=h, l=l, **kwds) class colorValue(VegaSchema): """colorValue schema wrapper oneOf(List(allOf(:class:`rule`, :class:`baseColorValue`)), :class:`baseColorValue`) """ _schema = {'$ref': '#/refs/colorValue'} def __init__(self, *args, **kwds): super(colorValue, self).__init__(*args, **kwds) class gradientStops(VegaSchema): """gradientStops schema wrapper List(Mapping(required=[offset, color])) """ _schema = {'$ref': '#/refs/gradientStops'} def __init__(self, *args): super(gradientStops, self).__init__(*args) class linearGradient(VegaSchema): """linearGradient schema wrapper Mapping(required=[gradient, stops]) Attributes ---------- gradient : enum('linear') stops : :class:`gradientStops` id : string x1 : float x2 : float y1 : float y2 : float """ _schema = {'$ref': '#/refs/linearGradient'} def __init__(self, gradient=Undefined, stops=Undefined, id=Undefined, x1=Undefined, x2=Undefined, y1=Undefined, y2=Undefined, **kwds): super(linearGradient, self).__init__(gradient=gradient, stops=stops, id=id, x1=x1, x2=x2, y1=y1, y2=y2, **kwds) class radialGradient(VegaSchema): """radialGradient schema wrapper Mapping(required=[gradient, stops]) Attributes ---------- gradient : enum('radial') stops : :class:`gradientStops` id : string r1 : float r2 : float x1 : float x2 : float y1 : float y2 : float """ _schema = {'$ref': '#/refs/radialGradient'} def __init__(self, gradient=Undefined, stops=Undefined, id=Undefined, r1=Undefined, r2=Undefined, x1=Undefined, x2=Undefined, y1=Undefined, y2=Undefined, **kwds): super(radialGradient, self).__init__(gradient=gradient, stops=stops, id=id, r1=r1, r2=r2, x1=x1, x2=x2, y1=y1, y2=y2, **kwds) class expr(VegaSchema): """expr schema wrapper Mapping(required=[expr]) Attributes ---------- expr : string as : string """ _schema = {'$ref': '#/refs/expr'} def __init__(self, expr=Undefined, **kwds): super(expr, self).__init__(expr=expr, **kwds) class exprString(VegaSchema): """exprString schema wrapper string """ _schema = {'$ref': '#/refs/exprString'} def __init__(self, *args): super(exprString, self).__init__(*args) class compare(VegaSchema): """compare schema wrapper oneOf(Mapping(required=[]), Mapping(required=[])) """ _schema = {'$ref': '#/refs/compare'} def __init__(self, *args, **kwds): super(compare, self).__init__(*args, **kwds) class from_(VegaSchema): """from_ schema wrapper Mapping(required=[]) Attributes ---------- data : string """ _schema = {'$ref': '#/refs/from'} def __init__(self, data=Undefined, **kwds): super(from_, self).__init__(data=data, **kwds) class facet(VegaSchema): """facet schema wrapper Mapping(required=[facet]) Attributes ---------- facet : oneOf(Mapping(required=[name, data, field]), Mapping(required=[name, data, groupby])) data : string """ _schema = {'$ref': '#/refs/facet'} def __init__(self, facet=Undefined, data=Undefined, **kwds): super(facet, self).__init__(facet=facet, data=data, **kwds) class markclip(VegaSchema): """markclip schema wrapper oneOf(:class:`booleanOrSignal`, Mapping(required=[path]), Mapping(required=[sphere])) """ _schema = {'$ref': '#/refs/markclip'} def __init__(self, *args, **kwds): super(markclip, self).__init__(*args, **kwds) class style(VegaSchema): """style schema wrapper oneOf(string, List(string)) """ _schema = {'$ref': '#/refs/style'} def __init__(self, *args, **kwds): super(style, self).__init__(*args, **kwds) class marktype(VegaSchema): """marktype schema wrapper string """ _schema = {'$ref': '#/refs/marktype'} def __init__(self, *args): super(marktype, self).__init__(*args) class scaleField(VegaSchema): """scaleField schema wrapper oneOf(string, :class:`signal`) """ _schema = {'$ref': '#/refs/scaleField'} def __init__(self, *args, **kwds): super(scaleField, self).__init__(*args, **kwds) class sortOrder(VegaSchema): """sortOrder schema wrapper oneOf(enum('ascending', 'descending'), :class:`signal`) """ _schema = {'$ref': '#/refs/sortOrder'} def __init__(self, *args, **kwds): super(sortOrder, self).__init__(*args, **kwds) class scaleBins(VegaSchema): """scaleBins schema wrapper oneOf(List(:class:`numberOrSignal`), Mapping(required=[step]), :class:`signal`) """ _schema = {'$ref': '#/refs/scaleBins'} def __init__(self, *args, **kwds): super(scaleBins, self).__init__(*args, **kwds) class scaleInterpolate(VegaSchema): """scaleInterpolate schema wrapper oneOf(string, :class:`signal`, Mapping(required=[type])) """ _schema = {'$ref': '#/refs/scaleInterpolate'} def __init__(self, *args, **kwds): super(scaleInterpolate, self).__init__(*args, **kwds) class scaleData(VegaSchema): """scaleData schema wrapper oneOf(Mapping(required=[data, field]), Mapping(required=[data, fields]), Mapping(required=[fields])) """ _schema = {'$ref': '#/refs/scaleData'} def __init__(self, *args, **kwds): super(scaleData, self).__init__(*args, **kwds) class selector(VegaSchema): """selector schema wrapper string """ _schema = {'$ref': '#/refs/selector'} def __init__(self, *args): super(selector, self).__init__(*args) class signal(VegaSchema): """signal schema wrapper Mapping(required=[signal]) Attributes ---------- signal : string """ _schema = {'$ref': '#/refs/signal'} def __init__(self, signal=Undefined, **kwds): super(signal, self).__init__(signal=signal, **kwds) class arrayOrSignal(VegaSchema): """arrayOrSignal schema wrapper oneOf(List(Any), :class:`signal`) """ _schema = {'$ref': '#/refs/arrayOrSignal'} def __init__(self, *args, **kwds): super(arrayOrSignal, self).__init__(*args, **kwds) class booleanOrSignal(VegaSchema): """booleanOrSignal schema wrapper oneOf(boolean, :class:`signal`) """ _schema = {'$ref': '#/refs/booleanOrSignal'} def __init__(self, *args, **kwds): super(booleanOrSignal, self).__init__(*args, **kwds) class numberOrSignal(VegaSchema): """numberOrSignal schema wrapper oneOf(float, :class:`signal`) """ _schema = {'$ref': '#/refs/numberOrSignal'} def __init__(self, *args, **kwds): super(numberOrSignal, self).__init__(*args, **kwds) class stringOrSignal(VegaSchema): """stringOrSignal schema wrapper oneOf(string, :class:`signal`) """ _schema = {'$ref': '#/refs/stringOrSignal'} def __init__(self, *args, **kwds): super(stringOrSignal, self).__init__(*args, **kwds) class textOrSignal(VegaSchema): """textOrSignal schema wrapper oneOf(oneOf(string, List(string)), :class:`signal`) """ _schema = {'$ref': '#/refs/textOrSignal'} def __init__(self, *args, **kwds): super(textOrSignal, self).__init__(*args, **kwds) altair-4.1.0/altair/vega/v5/schema/vega-schema.json000066400000000000000000014133721364111050100220360ustar00rootroot00000000000000{ "$schema": "http://json-schema.org/draft-06/schema#", "title": "Vega Visualization Specification Language", "defs": { "autosize": { "oneOf": [ { "enum": [ "pad", "fit", "fit-x", "fit-y", "none" ], "default": "pad" }, { "type": "object", "properties": { "type": { "enum": [ "pad", "fit", "fit-x", "fit-y", "none" ], "default": "pad" }, "resize": { "type": "boolean" }, "contains": { "enum": [ "content", "padding" ] } }, "required": [ "type" ], "additionalProperties": false }, { "$ref": "#/refs/signal" } ] }, "axis": { "type": "object", "properties": { "orient": { "enum": [ "top", "bottom", "left", "right" ] }, "scale": { "type": "string" }, "format": { "oneOf": [ { "type": "string" }, { "type": "object", "properties": { "year": { "type": "string" }, "quarter": { "type": "string" }, "month": { "type": "string" }, "date": { "type": "string" }, "week": { "type": "string" }, "day": { "type": "string" }, "hours": { "type": "string" }, "minutes": { "type": "string" }, "seconds": { "type": "string" }, "milliseconds": { "type": "string" } }, "additionalProperties": false }, { "$ref": "#/refs/signal" } ] }, "formatType": { "oneOf": [ { "enum": [ "number", "time", "utc" ] }, { "$ref": "#/refs/signal" } ] }, "minExtent": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "maxExtent": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "offset": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "position": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "bandPosition": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "translate": { "type": "number" }, "values": { "$ref": "#/refs/arrayOrSignal" }, "zindex": { "type": "number" }, "title": { "$ref": "#/refs/textOrSignal" }, "titlePadding": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "titleAlign": { "oneOf": [ { "enum": [ "left", "right", "center" ] }, { "$ref": "#/refs/alignValue" } ] }, "titleAnchor": { "oneOf": [ { "enum": [ null, "start", "middle", "end" ] }, { "$ref": "#/refs/anchorValue" } ] }, "titleAngle": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "titleX": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "titleY": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "titleBaseline": { "oneOf": [ { "enum": [ "top", "middle", "bottom", "alphabetic", "line-top", "line-bottom" ] }, { "$ref": "#/refs/baselineValue" } ] }, "titleColor": { "oneOf": [ { "type": "null" }, { "type": "string" }, { "$ref": "#/refs/colorValue" } ] }, "titleFont": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/stringValue" } ] }, "titleFontSize": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "titleFontStyle": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/stringValue" } ] }, "titleFontWeight": { "oneOf": [ { "enum": [ null, "normal", "bold", "lighter", "bolder", "100", "200", "300", "400", "500", "600", "700", "800", "900", 100, 200, 300, 400, 500, 600, 700, 800, 900 ] }, { "$ref": "#/refs/fontWeightValue" } ] }, "titleLimit": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "titleLineHeight": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "titleOpacity": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "domain": { "type": "boolean" }, "domainColor": { "oneOf": [ { "type": "null" }, { "type": "string" }, { "$ref": "#/refs/colorValue" } ] }, "domainDash": { "oneOf": [ { "type": "array", "items": { "type": "number" } }, { "$ref": "#/refs/arrayValue" } ] }, "domainDashOffset": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "domainOpacity": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "domainWidth": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "ticks": { "type": "boolean" }, "tickBand": { "$ref": "#/refs/tickBand" }, "tickColor": { "oneOf": [ { "type": "null" }, { "type": "string" }, { "$ref": "#/refs/colorValue" } ] }, "tickDash": { "oneOf": [ { "type": "array", "items": { "type": "number" } }, { "$ref": "#/refs/arrayValue" } ] }, "tickDashOffset": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "tickOffset": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "tickOpacity": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "tickRound": { "oneOf": [ { "type": "boolean" }, { "$ref": "#/refs/booleanValue" } ] }, "tickSize": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "tickWidth": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "tickCount": { "$ref": "#/refs/tickCount" }, "tickExtra": { "$ref": "#/refs/booleanOrSignal" }, "tickMinStep": { "$ref": "#/refs/numberOrSignal" }, "grid": { "type": "boolean" }, "gridScale": { "type": "string" }, "gridColor": { "oneOf": [ { "type": "null" }, { "type": "string" }, { "$ref": "#/refs/colorValue" } ] }, "gridDash": { "oneOf": [ { "type": "array", "items": { "type": "number" } }, { "$ref": "#/refs/arrayValue" } ] }, "gridDashOffset": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "gridOpacity": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "gridWidth": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "labels": { "type": "boolean" }, "labelAlign": { "oneOf": [ { "enum": [ "left", "right", "center" ] }, { "$ref": "#/refs/alignValue" } ] }, "labelBaseline": { "oneOf": [ { "enum": [ "top", "middle", "bottom", "alphabetic", "line-top", "line-bottom" ] }, { "$ref": "#/refs/baselineValue" } ] }, "labelBound": { "oneOf": [ { "type": "boolean" }, { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "labelFlush": { "oneOf": [ { "type": "boolean" }, { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "labelFlushOffset": { "$ref": "#/refs/numberOrSignal" }, "labelOverlap": { "$ref": "#/refs/labelOverlap" }, "labelAngle": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "labelColor": { "oneOf": [ { "type": "null" }, { "type": "string" }, { "$ref": "#/refs/colorValue" } ] }, "labelFont": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/stringValue" } ] }, "labelFontSize": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "labelFontWeight": { "oneOf": [ { "enum": [ null, "normal", "bold", "lighter", "bolder", "100", "200", "300", "400", "500", "600", "700", "800", "900", 100, 200, 300, 400, 500, 600, 700, 800, 900 ] }, { "$ref": "#/refs/fontWeightValue" } ] }, "labelFontStyle": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/stringValue" } ] }, "labelLimit": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "labelLineHeight": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "labelOpacity": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "labelOffset": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "labelPadding": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "labelSeparation": { "$ref": "#/refs/numberOrSignal" }, "encode": { "type": "object", "properties": { "axis": { "$ref": "#/defs/guideEncode" }, "ticks": { "$ref": "#/defs/guideEncode" }, "labels": { "$ref": "#/defs/guideEncode" }, "title": { "$ref": "#/defs/guideEncode" }, "grid": { "$ref": "#/defs/guideEncode" }, "domain": { "$ref": "#/defs/guideEncode" } }, "additionalProperties": false } }, "required": [ "orient", "scale" ], "additionalProperties": false }, "background": { "$ref": "#/refs/stringOrSignal" }, "bind": { "oneOf": [ { "type": "object", "properties": { "input": { "enum": [ "checkbox" ] }, "element": { "$ref": "#/refs/element" }, "debounce": { "type": "number" }, "name": { "type": "string" } }, "required": [ "input" ], "additionalProperties": false }, { "type": "object", "properties": { "input": { "enum": [ "radio", "select" ] }, "element": { "$ref": "#/refs/element" }, "options": { "type": "array" }, "labels": { "type": "array", "items": { "type": "string" } }, "debounce": { "type": "number" }, "name": { "type": "string" } }, "required": [ "input", "options" ], "additionalProperties": false }, { "type": "object", "properties": { "input": { "enum": [ "range" ] }, "element": { "$ref": "#/refs/element" }, "min": { "type": "number" }, "max": { "type": "number" }, "step": { "type": "number" }, "debounce": { "type": "number" }, "name": { "type": "string" } }, "required": [ "input" ], "additionalProperties": false }, { "type": "object", "properties": { "input": { "not": { "enum": [ "checkbox", "radio", "range", "select" ] } }, "element": { "$ref": "#/refs/element" }, "debounce": { "type": "number" }, "name": { "type": "string" } }, "required": [ "input" ], "additionalProperties": true } ] }, "data": { "oneOf": [ { "type": "object", "properties": { "name": { "type": "string" }, "transform": { "type": "array", "items": { "$ref": "#/defs/transform" } }, "on": { "$ref": "#/defs/onTrigger" } }, "required": [ "name" ], "additionalProperties": false }, { "type": "object", "properties": { "source": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" }, "minItems": 1 } ] }, "name": { "type": "string" }, "transform": { "type": "array", "items": { "$ref": "#/defs/transform" } }, "on": { "$ref": "#/defs/onTrigger" } }, "required": [ "source", "name" ], "additionalProperties": false }, { "type": "object", "properties": { "url": { "$ref": "#/refs/stringOrSignal" }, "format": { "oneOf": [ { "anyOf": [ { "type": "object", "properties": { "type": { "$ref": "#/refs/stringOrSignal" }, "parse": { "oneOf": [ { "enum": [ "auto" ] }, { "type": "object", "properties": {}, "additionalProperties": { "oneOf": [ { "enum": [ "boolean", "number", "date", "string" ] }, { "type": "string", "pattern": "^(date|utc):.*$" } ] } }, { "$ref": "#/refs/signal" } ] } } }, { "type": "object", "properties": { "type": { "enum": [ "json" ] }, "parse": { "oneOf": [ { "enum": [ "auto" ] }, { "type": "object", "properties": {}, "additionalProperties": { "oneOf": [ { "enum": [ "boolean", "number", "date", "string" ] }, { "type": "string", "pattern": "^(date|utc):.*$" } ] } }, { "$ref": "#/refs/signal" } ] }, "property": { "$ref": "#/refs/stringOrSignal" }, "copy": { "$ref": "#/refs/booleanOrSignal" } }, "additionalProperties": false }, { "type": "object", "properties": { "type": { "enum": [ "csv", "tsv" ] }, "header": { "type": "array", "items": { "type": "string" } }, "parse": { "oneOf": [ { "enum": [ "auto" ] }, { "type": "object", "properties": {}, "additionalProperties": { "oneOf": [ { "enum": [ "boolean", "number", "date", "string" ] }, { "type": "string", "pattern": "^(date|utc):.*$" } ] } }, { "$ref": "#/refs/signal" } ] } }, "required": [ "type" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "enum": [ "dsv" ] }, "delimiter": { "type": "string" }, "header": { "type": "array", "items": { "type": "string" } }, "parse": { "oneOf": [ { "enum": [ "auto" ] }, { "type": "object", "properties": {}, "additionalProperties": { "oneOf": [ { "enum": [ "boolean", "number", "date", "string" ] }, { "type": "string", "pattern": "^(date|utc):.*$" } ] } }, { "$ref": "#/refs/signal" } ] } }, "required": [ "type", "delimiter" ], "additionalProperties": false }, { "oneOf": [ { "type": "object", "properties": { "type": { "enum": [ "topojson" ] }, "feature": { "$ref": "#/refs/stringOrSignal" }, "property": { "$ref": "#/refs/stringOrSignal" } }, "required": [ "type", "feature" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "enum": [ "topojson" ] }, "mesh": { "$ref": "#/refs/stringOrSignal" }, "property": { "$ref": "#/refs/stringOrSignal" }, "filter": { "enum": [ "interior", "exterior", null ] } }, "required": [ "type", "mesh" ], "additionalProperties": false } ] } ] }, { "$ref": "#/refs/signal" } ] }, "async": { "$ref": "#/refs/booleanOrSignal" }, "name": { "type": "string" }, "transform": { "type": "array", "items": { "$ref": "#/defs/transform" } }, "on": { "$ref": "#/defs/onTrigger" } }, "required": [ "url", "name" ], "additionalProperties": false }, { "type": "object", "properties": { "values": { "oneOf": [ {}, { "$ref": "#/refs/signal" } ] }, "format": { "oneOf": [ { "anyOf": [ { "type": "object", "properties": { "type": { "$ref": "#/refs/stringOrSignal" }, "parse": { "oneOf": [ { "enum": [ "auto" ] }, { "type": "object", "properties": {}, "additionalProperties": { "oneOf": [ { "enum": [ "boolean", "number", "date", "string" ] }, { "type": "string", "pattern": "^(date|utc):.*$" } ] } }, { "$ref": "#/refs/signal" } ] } } }, { "type": "object", "properties": { "type": { "enum": [ "json" ] }, "parse": { "oneOf": [ { "enum": [ "auto" ] }, { "type": "object", "properties": {}, "additionalProperties": { "oneOf": [ { "enum": [ "boolean", "number", "date", "string" ] }, { "type": "string", "pattern": "^(date|utc):.*$" } ] } }, { "$ref": "#/refs/signal" } ] }, "property": { "$ref": "#/refs/stringOrSignal" }, "copy": { "$ref": "#/refs/booleanOrSignal" } }, "additionalProperties": false }, { "type": "object", "properties": { "type": { "enum": [ "csv", "tsv" ] }, "header": { "type": "array", "items": { "type": "string" } }, "parse": { "oneOf": [ { "enum": [ "auto" ] }, { "type": "object", "properties": {}, "additionalProperties": { "oneOf": [ { "enum": [ "boolean", "number", "date", "string" ] }, { "type": "string", "pattern": "^(date|utc):.*$" } ] } }, { "$ref": "#/refs/signal" } ] } }, "required": [ "type" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "enum": [ "dsv" ] }, "delimiter": { "type": "string" }, "header": { "type": "array", "items": { "type": "string" } }, "parse": { "oneOf": [ { "enum": [ "auto" ] }, { "type": "object", "properties": {}, "additionalProperties": { "oneOf": [ { "enum": [ "boolean", "number", "date", "string" ] }, { "type": "string", "pattern": "^(date|utc):.*$" } ] } }, { "$ref": "#/refs/signal" } ] } }, "required": [ "type", "delimiter" ], "additionalProperties": false }, { "oneOf": [ { "type": "object", "properties": { "type": { "enum": [ "topojson" ] }, "feature": { "$ref": "#/refs/stringOrSignal" }, "property": { "$ref": "#/refs/stringOrSignal" } }, "required": [ "type", "feature" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "enum": [ "topojson" ] }, "mesh": { "$ref": "#/refs/stringOrSignal" }, "property": { "$ref": "#/refs/stringOrSignal" }, "filter": { "enum": [ "interior", "exterior", null ] } }, "required": [ "type", "mesh" ], "additionalProperties": false } ] } ] }, { "$ref": "#/refs/signal" } ] }, "async": { "$ref": "#/refs/booleanOrSignal" }, "name": { "type": "string" }, "transform": { "type": "array", "items": { "$ref": "#/defs/transform" } }, "on": { "$ref": "#/defs/onTrigger" } }, "required": [ "values", "name" ], "additionalProperties": false } ] }, "rule": { "type": "object", "properties": { "test": { "type": "string" } } }, "encodeEntry": { "type": "object", "properties": { "x": { "$ref": "#/refs/numberValue" }, "x2": { "$ref": "#/refs/numberValue" }, "xc": { "$ref": "#/refs/numberValue" }, "width": { "$ref": "#/refs/numberValue" }, "y": { "$ref": "#/refs/numberValue" }, "y2": { "$ref": "#/refs/numberValue" }, "yc": { "$ref": "#/refs/numberValue" }, "height": { "$ref": "#/refs/numberValue" }, "opacity": { "$ref": "#/refs/numberValue" }, "fill": { "$ref": "#/refs/colorValue" }, "fillOpacity": { "$ref": "#/refs/numberValue" }, "stroke": { "$ref": "#/refs/colorValue" }, "strokeOpacity": { "$ref": "#/refs/numberValue" }, "strokeWidth": { "$ref": "#/refs/numberValue" }, "strokeCap": { "$ref": "#/refs/strokeCapValue" }, "strokeDash": { "$ref": "#/refs/arrayValue" }, "strokeDashOffset": { "$ref": "#/refs/numberValue" }, "strokeJoin": { "$ref": "#/refs/strokeJoinValue" }, "strokeMiterLimit": { "$ref": "#/refs/numberValue" }, "blend": { "$ref": "#/refs/blendValue" }, "cursor": { "$ref": "#/refs/stringValue" }, "tooltip": { "$ref": "#/refs/anyValue" }, "zindex": { "$ref": "#/refs/numberValue" }, "clip": { "$ref": "#/refs/booleanValue" }, "strokeForeground": { "$ref": "#/refs/booleanValue" }, "strokeOffset": { "$ref": "#/refs/numberValue" }, "cornerRadius": { "$ref": "#/refs/numberValue" }, "cornerRadiusTopLeft": { "$ref": "#/refs/numberValue" }, "cornerRadiusTopRight": { "$ref": "#/refs/numberValue" }, "cornerRadiusBottomRight": { "$ref": "#/refs/numberValue" }, "cornerRadiusBottomLeft": { "$ref": "#/refs/numberValue" }, "angle": { "$ref": "#/refs/numberValue" }, "size": { "$ref": "#/refs/numberValue" }, "shape": { "$ref": "#/refs/stringValue" }, "path": { "$ref": "#/refs/stringValue" }, "scaleX": { "$ref": "#/refs/numberValue" }, "scaleY": { "$ref": "#/refs/numberValue" }, "innerRadius": { "$ref": "#/refs/numberValue" }, "outerRadius": { "$ref": "#/refs/numberValue" }, "startAngle": { "$ref": "#/refs/numberValue" }, "endAngle": { "$ref": "#/refs/numberValue" }, "padAngle": { "$ref": "#/refs/numberValue" }, "interpolate": { "$ref": "#/refs/stringValue" }, "tension": { "$ref": "#/refs/numberValue" }, "orient": { "$ref": "#/refs/directionValue" }, "defined": { "$ref": "#/refs/booleanValue" }, "url": { "$ref": "#/refs/stringValue" }, "align": { "$ref": "#/refs/alignValue" }, "baseline": { "$ref": "#/refs/baselineValue" }, "aspect": { "$ref": "#/refs/booleanValue" }, "smooth": { "$ref": "#/refs/booleanValue" }, "text": { "$ref": "#/refs/textValue" }, "dir": { "$ref": "#/refs/stringValue" }, "ellipsis": { "$ref": "#/refs/stringValue" }, "limit": { "$ref": "#/refs/numberValue" }, "lineBreak": { "$ref": "#/refs/stringValue" }, "lineHeight": { "$ref": "#/refs/numberValue" }, "dx": { "$ref": "#/refs/numberValue" }, "dy": { "$ref": "#/refs/numberValue" }, "radius": { "$ref": "#/refs/numberValue" }, "theta": { "$ref": "#/refs/numberValue" }, "font": { "$ref": "#/refs/stringValue" }, "fontSize": { "$ref": "#/refs/numberValue" }, "fontWeight": { "$ref": "#/refs/fontWeightValue" }, "fontStyle": { "$ref": "#/refs/stringValue" } }, "additionalProperties": true }, "encode": { "type": "object", "additionalProperties": false, "patternProperties": { "^.+$": { "$ref": "#/defs/encodeEntry" } } }, "layout": { "oneOf": [ { "type": "object", "properties": { "align": { "oneOf": [ { "oneOf": [ { "enum": [ "all", "each", "none" ] }, { "$ref": "#/refs/signal" } ] }, { "type": "object", "properties": { "row": { "oneOf": [ { "enum": [ "all", "each", "none" ] }, { "$ref": "#/refs/signal" } ] }, "column": { "oneOf": [ { "enum": [ "all", "each", "none" ] }, { "$ref": "#/refs/signal" } ] } }, "additionalProperties": false } ] }, "bounds": { "oneOf": [ { "enum": [ "full", "flush" ] }, { "$ref": "#/refs/signal" } ] }, "center": { "oneOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "row": { "$ref": "#/refs/booleanOrSignal" }, "column": { "$ref": "#/refs/booleanOrSignal" } }, "additionalProperties": false } ] }, "columns": { "$ref": "#/refs/numberOrSignal" }, "padding": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "row": { "$ref": "#/refs/numberOrSignal" }, "column": { "$ref": "#/refs/numberOrSignal" } }, "additionalProperties": false } ] }, "offset": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "rowHeader": { "$ref": "#/refs/numberOrSignal" }, "rowFooter": { "$ref": "#/refs/numberOrSignal" }, "rowTitle": { "$ref": "#/refs/numberOrSignal" }, "columnHeader": { "$ref": "#/refs/numberOrSignal" }, "columnFooter": { "$ref": "#/refs/numberOrSignal" }, "columnTitle": { "$ref": "#/refs/numberOrSignal" } }, "additionalProperties": false } ] }, "headerBand": { "oneOf": [ { "$ref": "#/refs/numberOrSignal" }, { "type": "null" }, { "type": "object", "properties": { "row": { "$ref": "#/refs/numberOrSignal" }, "column": { "$ref": "#/refs/numberOrSignal" } }, "additionalProperties": false } ] }, "footerBand": { "oneOf": [ { "$ref": "#/refs/numberOrSignal" }, { "type": "null" }, { "type": "object", "properties": { "row": { "$ref": "#/refs/numberOrSignal" }, "column": { "$ref": "#/refs/numberOrSignal" } }, "additionalProperties": false } ] }, "titleBand": { "oneOf": [ { "$ref": "#/refs/numberOrSignal" }, { "type": "null" }, { "type": "object", "properties": { "row": { "$ref": "#/refs/numberOrSignal" }, "column": { "$ref": "#/refs/numberOrSignal" } }, "additionalProperties": false } ] }, "titleAnchor": { "oneOf": [ { "oneOf": [ { "enum": [ "start", "end" ] }, { "$ref": "#/refs/signal" } ] }, { "type": "object", "properties": { "row": { "oneOf": [ { "enum": [ "start", "end" ] }, { "$ref": "#/refs/signal" } ] }, "column": { "oneOf": [ { "enum": [ "start", "end" ] }, { "$ref": "#/refs/signal" } ] } }, "additionalProperties": false } ] } }, "additionalProperties": false }, { "$ref": "#/refs/signal" } ] }, "guideEncode": { "type": "object", "properties": { "name": { "type": "string" }, "interactive": { "type": "boolean", "default": false }, "style": { "$ref": "#/refs/style" } }, "additionalProperties": false, "patternProperties": { "^(?!interactive|name|style).+$": { "$ref": "#/defs/encodeEntry" } } }, "legend": { "allOf": [ { "type": "object", "properties": { "size": { "type": "string" }, "shape": { "type": "string" }, "fill": { "type": "string" }, "stroke": { "type": "string" }, "opacity": { "type": "string" }, "strokeDash": { "type": "string" }, "strokeWidth": { "type": "string" }, "type": { "enum": [ "gradient", "symbol" ] }, "direction": { "enum": [ "vertical", "horizontal" ] }, "orient": { "oneOf": [ { "enum": [ "none", "left", "right", "top", "bottom", "top-left", "top-right", "bottom-left", "bottom-right" ], "default": "right" }, { "$ref": "#/refs/signal" } ] }, "tickCount": { "$ref": "#/refs/tickCount" }, "tickMinStep": { "$ref": "#/refs/numberOrSignal" }, "symbolLimit": { "$ref": "#/refs/numberOrSignal" }, "values": { "$ref": "#/refs/arrayOrSignal" }, "zindex": { "type": "number" }, "cornerRadius": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "fillColor": { "oneOf": [ { "type": "null" }, { "type": "string" }, { "$ref": "#/refs/colorValue" } ] }, "offset": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "padding": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "strokeColor": { "oneOf": [ { "type": "null" }, { "type": "string" }, { "$ref": "#/refs/colorValue" } ] }, "legendX": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "legendY": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "title": { "$ref": "#/refs/textOrSignal" }, "titleAlign": { "oneOf": [ { "enum": [ "left", "right", "center" ] }, { "$ref": "#/refs/alignValue" } ] }, "titleAnchor": { "oneOf": [ { "enum": [ null, "start", "middle", "end" ] }, { "$ref": "#/refs/anchorValue" } ] }, "titleBaseline": { "oneOf": [ { "enum": [ "top", "middle", "bottom", "alphabetic", "line-top", "line-bottom" ] }, { "$ref": "#/refs/baselineValue" } ] }, "titleColor": { "oneOf": [ { "type": "null" }, { "type": "string" }, { "$ref": "#/refs/colorValue" } ] }, "titleFont": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/stringValue" } ] }, "titleFontSize": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "titleFontStyle": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/stringValue" } ] }, "titleFontWeight": { "oneOf": [ { "enum": [ null, "normal", "bold", "lighter", "bolder", "100", "200", "300", "400", "500", "600", "700", "800", "900", 100, 200, 300, 400, 500, 600, 700, 800, 900 ] }, { "$ref": "#/refs/fontWeightValue" } ] }, "titleLimit": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "titleLineHeight": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "titleOpacity": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "titleOrient": { "oneOf": [ { "enum": [ "left", "right", "top", "bottom" ] }, { "$ref": "#/refs/orientValue" } ] }, "titlePadding": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "gradientLength": { "$ref": "#/refs/numberOrSignal" }, "gradientOpacity": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "gradientStrokeColor": { "oneOf": [ { "type": "null" }, { "type": "string" }, { "$ref": "#/refs/colorValue" } ] }, "gradientStrokeWidth": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "gradientThickness": { "$ref": "#/refs/numberOrSignal" }, "clipHeight": { "$ref": "#/refs/numberOrSignal" }, "columns": { "$ref": "#/refs/numberOrSignal" }, "columnPadding": { "$ref": "#/refs/numberOrSignal" }, "rowPadding": { "$ref": "#/refs/numberOrSignal" }, "gridAlign": { "oneOf": [ { "enum": [ "all", "each", "none" ] }, { "$ref": "#/refs/signal" } ] }, "symbolDash": { "oneOf": [ { "type": "array", "items": { "type": "number" } }, { "$ref": "#/refs/arrayValue" } ] }, "symbolDashOffset": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "symbolFillColor": { "oneOf": [ { "type": "null" }, { "type": "string" }, { "$ref": "#/refs/colorValue" } ] }, "symbolOffset": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "symbolOpacity": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "symbolSize": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "symbolStrokeColor": { "oneOf": [ { "type": "null" }, { "type": "string" }, { "$ref": "#/refs/colorValue" } ] }, "symbolStrokeWidth": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "symbolType": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/stringValue" } ] }, "format": { "oneOf": [ { "type": "string" }, { "type": "object", "properties": { "year": { "type": "string" }, "quarter": { "type": "string" }, "month": { "type": "string" }, "date": { "type": "string" }, "week": { "type": "string" }, "day": { "type": "string" }, "hours": { "type": "string" }, "minutes": { "type": "string" }, "seconds": { "type": "string" }, "milliseconds": { "type": "string" } }, "additionalProperties": false }, { "$ref": "#/refs/signal" } ] }, "formatType": { "oneOf": [ { "enum": [ "number", "time", "utc" ] }, { "$ref": "#/refs/signal" } ] }, "labelAlign": { "oneOf": [ { "enum": [ "left", "right", "center" ] }, { "$ref": "#/refs/alignValue" } ] }, "labelBaseline": { "oneOf": [ { "enum": [ "top", "middle", "bottom", "alphabetic", "line-top", "line-bottom" ] }, { "$ref": "#/refs/baselineValue" } ] }, "labelColor": { "oneOf": [ { "type": "null" }, { "type": "string" }, { "$ref": "#/refs/colorValue" } ] }, "labelFont": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/stringValue" } ] }, "labelFontSize": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "labelFontStyle": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/stringValue" } ] }, "labelFontWeight": { "oneOf": [ { "enum": [ null, "normal", "bold", "lighter", "bolder", "100", "200", "300", "400", "500", "600", "700", "800", "900", 100, 200, 300, 400, 500, 600, 700, 800, 900 ] }, { "$ref": "#/refs/fontWeightValue" } ] }, "labelLimit": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "labelOffset": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "labelOpacity": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "labelOverlap": { "$ref": "#/refs/labelOverlap" }, "labelSeparation": { "$ref": "#/refs/numberOrSignal" }, "encode": { "type": "object", "properties": { "title": { "$ref": "#/defs/guideEncode" }, "labels": { "$ref": "#/defs/guideEncode" }, "legend": { "$ref": "#/defs/guideEncode" }, "entries": { "$ref": "#/defs/guideEncode" }, "symbols": { "$ref": "#/defs/guideEncode" }, "gradient": { "$ref": "#/defs/guideEncode" } }, "additionalProperties": false } }, "additionalProperties": false }, { "anyOf": [ { "type": "object", "required": [ "size" ] }, { "type": "object", "required": [ "shape" ] }, { "type": "object", "required": [ "fill" ] }, { "type": "object", "required": [ "stroke" ] }, { "type": "object", "required": [ "opacity" ] }, { "type": "object", "required": [ "strokeDash" ] }, { "type": "object", "required": [ "strokeWidth" ] } ] } ] }, "mark": { "type": "object", "properties": { "type": { "$ref": "#/refs/marktype" }, "role": { "type": "string" }, "name": { "type": "string" }, "style": { "$ref": "#/refs/style" }, "key": { "type": "string" }, "clip": { "$ref": "#/refs/markclip" }, "sort": { "$ref": "#/refs/compare" }, "interactive": { "$ref": "#/refs/booleanOrSignal" }, "encode": { "$ref": "#/defs/encode" }, "transform": { "type": "array", "items": { "$ref": "#/defs/transformMark" } }, "on": { "$ref": "#/defs/onMarkTrigger" } }, "required": [ "type" ] }, "markGroup": { "allOf": [ { "type": "object", "properties": { "type": { "enum": [ "group" ] }, "from": { "oneOf": [ { "$ref": "#/refs/from" }, { "$ref": "#/refs/facet" } ] } }, "required": [ "type" ] }, { "$ref": "#/defs/mark" }, { "$ref": "#/defs/scope" } ] }, "markVisual": { "allOf": [ { "type": "object", "properties": { "type": { "not": { "enum": [ "group" ] } }, "from": { "$ref": "#/refs/from" } } }, { "$ref": "#/defs/mark" } ] }, "listener": { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "scale": { "type": "string" } }, "required": [ "scale" ] }, { "$ref": "#/defs/stream" } ] }, "onEvents": { "type": "array", "items": { "allOf": [ { "type": "object", "properties": { "events": { "oneOf": [ { "$ref": "#/refs/selector" }, { "$ref": "#/defs/listener" }, { "type": "array", "items": { "$ref": "#/defs/listener" }, "minItems": 1 } ] }, "force": { "type": "boolean" } }, "required": [ "events" ] }, { "oneOf": [ { "type": "object", "properties": { "encode": { "type": "string" } }, "required": [ "encode" ] }, { "type": "object", "properties": { "update": { "oneOf": [ { "$ref": "#/refs/exprString" }, { "$ref": "#/refs/expr" }, { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": {} }, "required": [ "value" ] } ] } }, "required": [ "update" ] } ] } ] } }, "onTrigger": { "type": "array", "items": { "type": "object", "properties": { "trigger": { "$ref": "#/refs/exprString" }, "insert": { "$ref": "#/refs/exprString" }, "remove": { "oneOf": [ { "type": "boolean" }, { "$ref": "#/refs/exprString" } ] }, "toggle": { "$ref": "#/refs/exprString" }, "modify": { "$ref": "#/refs/exprString" }, "values": { "$ref": "#/refs/exprString" } }, "required": [ "trigger" ], "additionalProperties": false } }, "onMarkTrigger": { "type": "array", "items": { "type": "object", "properties": { "trigger": { "$ref": "#/refs/exprString" }, "modify": { "$ref": "#/refs/exprString" }, "values": { "$ref": "#/refs/exprString" } }, "required": [ "trigger" ], "additionalProperties": false } }, "padding": { "oneOf": [ { "type": "number" }, { "type": "object", "properties": { "top": { "type": "number" }, "bottom": { "type": "number" }, "left": { "type": "number" }, "right": { "type": "number" } }, "additionalProperties": false }, { "$ref": "#/refs/signal" } ] }, "projection": { "type": "object", "properties": { "name": { "type": "string" }, "type": { "$ref": "#/refs/stringOrSignal" }, "clipAngle": { "$ref": "#/refs/numberOrSignal" }, "clipExtent": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" }, "minItems": 2, "maxItems": 2 }, { "$ref": "#/refs/signal" } ] }, "minItems": 2, "maxItems": 2 }, { "$ref": "#/refs/signal" } ] }, "scale": { "$ref": "#/refs/numberOrSignal" }, "translate": { "oneOf": [ { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" }, "minItems": 2, "maxItems": 2 }, { "$ref": "#/refs/signal" } ] }, "center": { "oneOf": [ { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" }, "minItems": 2, "maxItems": 2 }, { "$ref": "#/refs/signal" } ] }, "rotate": { "oneOf": [ { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" }, "minItems": 2, "maxItems": 3 }, { "$ref": "#/refs/signal" } ] }, "parallels": { "oneOf": [ { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" }, "minItems": 2, "maxItems": 2 }, { "$ref": "#/refs/signal" } ] }, "precision": { "$ref": "#/refs/numberOrSignal" }, "pointRadius": { "$ref": "#/refs/numberOrSignal" }, "fit": { "oneOf": [ { "type": "object" }, { "type": "array" } ] }, "extent": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" }, "minItems": 2, "maxItems": 2 }, { "$ref": "#/refs/signal" } ] }, "minItems": 2, "maxItems": 2 }, { "$ref": "#/refs/signal" } ] }, "size": { "oneOf": [ { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" }, "minItems": 2, "maxItems": 2 }, { "$ref": "#/refs/signal" } ] } }, "required": [ "name" ], "additionalProperties": true }, "scale": { "oneOf": [ { "type": "object", "properties": { "type": { "enum": [ "identity" ] }, "nice": { "$ref": "#/refs/booleanOrSignal" }, "name": { "type": "string" }, "domain": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "$ref": "#/refs/scaleData" }, { "$ref": "#/refs/signal" } ] }, "domainMin": { "$ref": "#/refs/numberOrSignal" }, "domainMax": { "$ref": "#/refs/numberOrSignal" }, "domainMid": { "$ref": "#/refs/numberOrSignal" }, "domainRaw": { "oneOf": [ { "type": "null" }, { "type": "array" }, { "$ref": "#/refs/signal" } ] }, "reverse": { "$ref": "#/refs/booleanOrSignal" }, "round": { "$ref": "#/refs/booleanOrSignal" } }, "required": [ "type", "name" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "enum": [ "ordinal" ] }, "range": { "oneOf": [ { "enum": [ "width", "height", "symbol", "category", "ordinal", "ramp", "diverging", "heatmap" ] }, { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "type": "object", "properties": { "scheme": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "count": { "$ref": "#/refs/numberOrSignal" }, "extent": { "oneOf": [ { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" }, "numItems": 2 }, { "$ref": "#/refs/signal" } ] } }, "required": [ "scheme" ], "additionalProperties": false }, { "oneOf": [ { "type": "object", "properties": { "data": { "type": "string" }, "field": { "$ref": "#/refs/stringOrSignal" }, "sort": { "oneOf": [ { "type": "boolean" }, { "type": "object", "properties": { "field": { "$ref": "#/refs/stringOrSignal" }, "op": { "$ref": "#/refs/stringOrSignal" }, "order": { "$ref": "#/refs/sortOrder" } }, "additionalProperties": false } ] } }, "required": [ "data", "field" ], "additionalProperties": false }, { "type": "object", "properties": { "data": { "type": "string" }, "fields": { "type": "array", "items": { "$ref": "#/refs/stringOrSignal" }, "minItems": 1 }, "sort": { "oneOf": [ { "type": "boolean" }, { "type": "object", "properties": { "op": { "enum": [ "count" ] }, "order": { "$ref": "#/refs/sortOrder" } }, "additionalProperties": false }, { "type": "object", "properties": { "field": { "$ref": "#/refs/stringOrSignal" }, "op": { "enum": [ "count", "min", "max" ] }, "order": { "$ref": "#/refs/sortOrder" } }, "required": [ "field", "op" ], "additionalProperties": false } ] } }, "required": [ "data", "fields" ], "additionalProperties": false }, { "type": "object", "properties": { "fields": { "type": "array", "items": { "oneOf": [ { "type": "object", "properties": { "data": { "type": "string" }, "field": { "$ref": "#/refs/stringOrSignal" } }, "required": [ "data", "field" ], "additionalProperties": false }, { "type": "array", "items": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean" } ] } }, { "$ref": "#/refs/signal" } ] }, "minItems": 1 }, "sort": { "oneOf": [ { "type": "boolean" }, { "type": "object", "properties": { "op": { "enum": [ "count" ] }, "order": { "$ref": "#/refs/sortOrder" } }, "additionalProperties": false }, { "type": "object", "properties": { "field": { "$ref": "#/refs/stringOrSignal" }, "op": { "enum": [ "count", "min", "max" ] }, "order": { "$ref": "#/refs/sortOrder" } }, "required": [ "field", "op" ], "additionalProperties": false } ] } }, "required": [ "fields" ], "additionalProperties": false } ] }, { "$ref": "#/refs/signal" } ] }, "interpolate": { "$ref": "#/refs/scaleInterpolate" }, "domainImplicit": { "$ref": "#/refs/booleanOrSignal" }, "name": { "type": "string" }, "domain": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "$ref": "#/refs/scaleData" }, { "$ref": "#/refs/signal" } ] }, "domainMin": { "$ref": "#/refs/numberOrSignal" }, "domainMax": { "$ref": "#/refs/numberOrSignal" }, "domainMid": { "$ref": "#/refs/numberOrSignal" }, "domainRaw": { "oneOf": [ { "type": "null" }, { "type": "array" }, { "$ref": "#/refs/signal" } ] }, "reverse": { "$ref": "#/refs/booleanOrSignal" }, "round": { "$ref": "#/refs/booleanOrSignal" } }, "required": [ "type", "name" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "enum": [ "band" ] }, "paddingInner": { "$ref": "#/refs/numberOrSignal" }, "range": { "oneOf": [ { "enum": [ "width", "height", "symbol", "category", "ordinal", "ramp", "diverging", "heatmap" ] }, { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "type": "object", "properties": { "step": { "$ref": "#/refs/numberOrSignal" } }, "required": [ "step" ], "additionalProperties": false }, { "$ref": "#/refs/signal" } ] }, "padding": { "$ref": "#/refs/numberOrSignal" }, "paddingOuter": { "$ref": "#/refs/numberOrSignal" }, "align": { "$ref": "#/refs/numberOrSignal" }, "name": { "type": "string" }, "domain": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "$ref": "#/refs/scaleData" }, { "$ref": "#/refs/signal" } ] }, "domainMin": { "$ref": "#/refs/numberOrSignal" }, "domainMax": { "$ref": "#/refs/numberOrSignal" }, "domainMid": { "$ref": "#/refs/numberOrSignal" }, "domainRaw": { "oneOf": [ { "type": "null" }, { "type": "array" }, { "$ref": "#/refs/signal" } ] }, "reverse": { "$ref": "#/refs/booleanOrSignal" }, "round": { "$ref": "#/refs/booleanOrSignal" } }, "required": [ "type", "name" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "enum": [ "point" ] }, "range": { "oneOf": [ { "enum": [ "width", "height", "symbol", "category", "ordinal", "ramp", "diverging", "heatmap" ] }, { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "type": "object", "properties": { "step": { "$ref": "#/refs/numberOrSignal" } }, "required": [ "step" ], "additionalProperties": false }, { "$ref": "#/refs/signal" } ] }, "padding": { "$ref": "#/refs/numberOrSignal" }, "paddingOuter": { "$ref": "#/refs/numberOrSignal" }, "align": { "$ref": "#/refs/numberOrSignal" }, "name": { "type": "string" }, "domain": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "$ref": "#/refs/scaleData" }, { "$ref": "#/refs/signal" } ] }, "domainMin": { "$ref": "#/refs/numberOrSignal" }, "domainMax": { "$ref": "#/refs/numberOrSignal" }, "domainMid": { "$ref": "#/refs/numberOrSignal" }, "domainRaw": { "oneOf": [ { "type": "null" }, { "type": "array" }, { "$ref": "#/refs/signal" } ] }, "reverse": { "$ref": "#/refs/booleanOrSignal" }, "round": { "$ref": "#/refs/booleanOrSignal" } }, "required": [ "type", "name" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "enum": [ "quantize", "threshold" ] }, "range": { "oneOf": [ { "enum": [ "width", "height", "symbol", "category", "ordinal", "ramp", "diverging", "heatmap" ] }, { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "type": "object", "properties": { "scheme": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "count": { "$ref": "#/refs/numberOrSignal" }, "extent": { "oneOf": [ { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" }, "numItems": 2 }, { "$ref": "#/refs/signal" } ] } }, "required": [ "scheme" ], "additionalProperties": false }, { "$ref": "#/refs/signal" } ] }, "interpolate": { "$ref": "#/refs/scaleInterpolate" }, "nice": { "oneOf": [ { "type": "boolean" }, { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "zero": { "$ref": "#/refs/booleanOrSignal" }, "name": { "type": "string" }, "domain": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "$ref": "#/refs/scaleData" }, { "$ref": "#/refs/signal" } ] }, "domainMin": { "$ref": "#/refs/numberOrSignal" }, "domainMax": { "$ref": "#/refs/numberOrSignal" }, "domainMid": { "$ref": "#/refs/numberOrSignal" }, "domainRaw": { "oneOf": [ { "type": "null" }, { "type": "array" }, { "$ref": "#/refs/signal" } ] }, "reverse": { "$ref": "#/refs/booleanOrSignal" }, "round": { "$ref": "#/refs/booleanOrSignal" } }, "required": [ "type", "name" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "enum": [ "quantile" ] }, "range": { "oneOf": [ { "enum": [ "width", "height", "symbol", "category", "ordinal", "ramp", "diverging", "heatmap" ] }, { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "type": "object", "properties": { "scheme": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "count": { "$ref": "#/refs/numberOrSignal" }, "extent": { "oneOf": [ { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" }, "numItems": 2 }, { "$ref": "#/refs/signal" } ] } }, "required": [ "scheme" ], "additionalProperties": false }, { "$ref": "#/refs/signal" } ] }, "interpolate": { "$ref": "#/refs/scaleInterpolate" }, "name": { "type": "string" }, "domain": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "$ref": "#/refs/scaleData" }, { "$ref": "#/refs/signal" } ] }, "domainMin": { "$ref": "#/refs/numberOrSignal" }, "domainMax": { "$ref": "#/refs/numberOrSignal" }, "domainMid": { "$ref": "#/refs/numberOrSignal" }, "domainRaw": { "oneOf": [ { "type": "null" }, { "type": "array" }, { "$ref": "#/refs/signal" } ] }, "reverse": { "$ref": "#/refs/booleanOrSignal" }, "round": { "$ref": "#/refs/booleanOrSignal" } }, "required": [ "type", "name" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "enum": [ "bin-ordinal" ] }, "bins": { "$ref": "#/refs/scaleBins" }, "range": { "oneOf": [ { "enum": [ "width", "height", "symbol", "category", "ordinal", "ramp", "diverging", "heatmap" ] }, { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "type": "object", "properties": { "scheme": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "count": { "$ref": "#/refs/numberOrSignal" }, "extent": { "oneOf": [ { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" }, "numItems": 2 }, { "$ref": "#/refs/signal" } ] } }, "required": [ "scheme" ], "additionalProperties": false }, { "$ref": "#/refs/signal" } ] }, "interpolate": { "$ref": "#/refs/scaleInterpolate" }, "name": { "type": "string" }, "domain": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "$ref": "#/refs/scaleData" }, { "$ref": "#/refs/signal" } ] }, "domainMin": { "$ref": "#/refs/numberOrSignal" }, "domainMax": { "$ref": "#/refs/numberOrSignal" }, "domainMid": { "$ref": "#/refs/numberOrSignal" }, "domainRaw": { "oneOf": [ { "type": "null" }, { "type": "array" }, { "$ref": "#/refs/signal" } ] }, "reverse": { "$ref": "#/refs/booleanOrSignal" }, "round": { "$ref": "#/refs/booleanOrSignal" } }, "required": [ "type", "name" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "enum": [ "time", "utc" ] }, "nice": { "oneOf": [ { "type": "boolean" }, { "enum": [ "millisecond", "second", "minute", "hour", "day", "week", "month", "year" ] }, { "type": "object", "properties": { "interval": { "oneOf": [ { "enum": [ "millisecond", "second", "minute", "hour", "day", "week", "month", "year" ] }, { "$ref": "#/refs/signal" } ] }, "step": { "$ref": "#/refs/numberOrSignal" } }, "required": [ "interval" ], "additionalProperties": false } ] }, "range": { "oneOf": [ { "enum": [ "width", "height", "symbol", "category", "ordinal", "ramp", "diverging", "heatmap" ] }, { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "type": "object", "properties": { "scheme": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "count": { "$ref": "#/refs/numberOrSignal" }, "extent": { "oneOf": [ { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" }, "numItems": 2 }, { "$ref": "#/refs/signal" } ] } }, "required": [ "scheme" ], "additionalProperties": false }, { "$ref": "#/refs/signal" } ] }, "bins": { "$ref": "#/refs/scaleBins" }, "interpolate": { "$ref": "#/refs/scaleInterpolate" }, "clamp": { "$ref": "#/refs/booleanOrSignal" }, "padding": { "$ref": "#/refs/numberOrSignal" }, "name": { "type": "string" }, "domain": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "$ref": "#/refs/scaleData" }, { "$ref": "#/refs/signal" } ] }, "domainMin": { "$ref": "#/refs/numberOrSignal" }, "domainMax": { "$ref": "#/refs/numberOrSignal" }, "domainMid": { "$ref": "#/refs/numberOrSignal" }, "domainRaw": { "oneOf": [ { "type": "null" }, { "type": "array" }, { "$ref": "#/refs/signal" } ] }, "reverse": { "$ref": "#/refs/booleanOrSignal" }, "round": { "$ref": "#/refs/booleanOrSignal" } }, "required": [ "type", "name" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "enum": [ "linear", "sqrt", "sequential" ] }, "nice": { "oneOf": [ { "type": "boolean" }, { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "zero": { "$ref": "#/refs/booleanOrSignal" }, "range": { "oneOf": [ { "enum": [ "width", "height", "symbol", "category", "ordinal", "ramp", "diverging", "heatmap" ] }, { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "type": "object", "properties": { "scheme": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "count": { "$ref": "#/refs/numberOrSignal" }, "extent": { "oneOf": [ { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" }, "numItems": 2 }, { "$ref": "#/refs/signal" } ] } }, "required": [ "scheme" ], "additionalProperties": false }, { "$ref": "#/refs/signal" } ] }, "bins": { "$ref": "#/refs/scaleBins" }, "interpolate": { "$ref": "#/refs/scaleInterpolate" }, "clamp": { "$ref": "#/refs/booleanOrSignal" }, "padding": { "$ref": "#/refs/numberOrSignal" }, "name": { "type": "string" }, "domain": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "$ref": "#/refs/scaleData" }, { "$ref": "#/refs/signal" } ] }, "domainMin": { "$ref": "#/refs/numberOrSignal" }, "domainMax": { "$ref": "#/refs/numberOrSignal" }, "domainMid": { "$ref": "#/refs/numberOrSignal" }, "domainRaw": { "oneOf": [ { "type": "null" }, { "type": "array" }, { "$ref": "#/refs/signal" } ] }, "reverse": { "$ref": "#/refs/booleanOrSignal" }, "round": { "$ref": "#/refs/booleanOrSignal" } }, "required": [ "name" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "enum": [ "log" ] }, "base": { "$ref": "#/refs/numberOrSignal" }, "nice": { "oneOf": [ { "type": "boolean" }, { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "zero": { "$ref": "#/refs/booleanOrSignal" }, "range": { "oneOf": [ { "enum": [ "width", "height", "symbol", "category", "ordinal", "ramp", "diverging", "heatmap" ] }, { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "type": "object", "properties": { "scheme": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "count": { "$ref": "#/refs/numberOrSignal" }, "extent": { "oneOf": [ { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" }, "numItems": 2 }, { "$ref": "#/refs/signal" } ] } }, "required": [ "scheme" ], "additionalProperties": false }, { "$ref": "#/refs/signal" } ] }, "bins": { "$ref": "#/refs/scaleBins" }, "interpolate": { "$ref": "#/refs/scaleInterpolate" }, "clamp": { "$ref": "#/refs/booleanOrSignal" }, "padding": { "$ref": "#/refs/numberOrSignal" }, "name": { "type": "string" }, "domain": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "$ref": "#/refs/scaleData" }, { "$ref": "#/refs/signal" } ] }, "domainMin": { "$ref": "#/refs/numberOrSignal" }, "domainMax": { "$ref": "#/refs/numberOrSignal" }, "domainMid": { "$ref": "#/refs/numberOrSignal" }, "domainRaw": { "oneOf": [ { "type": "null" }, { "type": "array" }, { "$ref": "#/refs/signal" } ] }, "reverse": { "$ref": "#/refs/booleanOrSignal" }, "round": { "$ref": "#/refs/booleanOrSignal" } }, "required": [ "type", "name" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "enum": [ "pow" ] }, "exponent": { "$ref": "#/refs/numberOrSignal" }, "nice": { "oneOf": [ { "type": "boolean" }, { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "zero": { "$ref": "#/refs/booleanOrSignal" }, "range": { "oneOf": [ { "enum": [ "width", "height", "symbol", "category", "ordinal", "ramp", "diverging", "heatmap" ] }, { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "type": "object", "properties": { "scheme": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "count": { "$ref": "#/refs/numberOrSignal" }, "extent": { "oneOf": [ { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" }, "numItems": 2 }, { "$ref": "#/refs/signal" } ] } }, "required": [ "scheme" ], "additionalProperties": false }, { "$ref": "#/refs/signal" } ] }, "bins": { "$ref": "#/refs/scaleBins" }, "interpolate": { "$ref": "#/refs/scaleInterpolate" }, "clamp": { "$ref": "#/refs/booleanOrSignal" }, "padding": { "$ref": "#/refs/numberOrSignal" }, "name": { "type": "string" }, "domain": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "$ref": "#/refs/scaleData" }, { "$ref": "#/refs/signal" } ] }, "domainMin": { "$ref": "#/refs/numberOrSignal" }, "domainMax": { "$ref": "#/refs/numberOrSignal" }, "domainMid": { "$ref": "#/refs/numberOrSignal" }, "domainRaw": { "oneOf": [ { "type": "null" }, { "type": "array" }, { "$ref": "#/refs/signal" } ] }, "reverse": { "$ref": "#/refs/booleanOrSignal" }, "round": { "$ref": "#/refs/booleanOrSignal" } }, "required": [ "type", "name" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "enum": [ "symlog" ] }, "constant": { "$ref": "#/refs/numberOrSignal" }, "nice": { "oneOf": [ { "type": "boolean" }, { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "zero": { "$ref": "#/refs/booleanOrSignal" }, "range": { "oneOf": [ { "enum": [ "width", "height", "symbol", "category", "ordinal", "ramp", "diverging", "heatmap" ] }, { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "type": "object", "properties": { "scheme": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "count": { "$ref": "#/refs/numberOrSignal" }, "extent": { "oneOf": [ { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" }, "numItems": 2 }, { "$ref": "#/refs/signal" } ] } }, "required": [ "scheme" ], "additionalProperties": false }, { "$ref": "#/refs/signal" } ] }, "bins": { "$ref": "#/refs/scaleBins" }, "interpolate": { "$ref": "#/refs/scaleInterpolate" }, "clamp": { "$ref": "#/refs/booleanOrSignal" }, "padding": { "$ref": "#/refs/numberOrSignal" }, "name": { "type": "string" }, "domain": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } } ] } }, { "$ref": "#/refs/scaleData" }, { "$ref": "#/refs/signal" } ] }, "domainMin": { "$ref": "#/refs/numberOrSignal" }, "domainMax": { "$ref": "#/refs/numberOrSignal" }, "domainMid": { "$ref": "#/refs/numberOrSignal" }, "domainRaw": { "oneOf": [ { "type": "null" }, { "type": "array" }, { "$ref": "#/refs/signal" } ] }, "reverse": { "$ref": "#/refs/booleanOrSignal" }, "round": { "$ref": "#/refs/booleanOrSignal" } }, "required": [ "type", "name" ], "additionalProperties": false } ] }, "scope": { "type": "object", "properties": { "encode": { "$ref": "#/defs/encode" }, "layout": { "$ref": "#/defs/layout" }, "signals": { "type": "array", "items": { "$ref": "#/defs/signal" } }, "data": { "type": "array", "items": { "$ref": "#/defs/data" } }, "scales": { "type": "array", "items": { "$ref": "#/defs/scale" } }, "projections": { "type": "array", "items": { "$ref": "#/defs/projection" } }, "axes": { "type": "array", "items": { "$ref": "#/defs/axis" } }, "legends": { "type": "array", "items": { "$ref": "#/defs/legend" } }, "title": { "$ref": "#/defs/title" }, "marks": { "type": "array", "items": { "oneOf": [ { "$ref": "#/defs/markGroup" }, { "$ref": "#/defs/markVisual" } ] } }, "usermeta": { "type": "object" } } }, "signalName": { "type": "string", "not": { "enum": [ "parent", "datum", "event", "item" ] } }, "signal": { "oneOf": [ { "type": "object", "properties": { "name": { "$ref": "#/defs/signalName" }, "description": { "type": "string" }, "push": { "enum": [ "outer" ] }, "on": { "$ref": "#/defs/onEvents" } }, "required": [ "name", "push" ], "additionalProperties": false }, { "type": "object", "properties": { "name": { "$ref": "#/defs/signalName" }, "description": { "type": "string" }, "value": {}, "react": { "type": "boolean", "default": true }, "update": { "$ref": "#/refs/exprString" }, "on": { "$ref": "#/defs/onEvents" }, "bind": { "$ref": "#/defs/bind" } }, "required": [ "name" ], "additionalProperties": false }, { "type": "object", "properties": { "name": { "$ref": "#/defs/signalName" }, "description": { "type": "string" }, "value": {}, "init": { "$ref": "#/refs/exprString" }, "on": { "$ref": "#/defs/onEvents" }, "bind": { "$ref": "#/defs/bind" } }, "required": [ "name", "init" ], "additionalProperties": false } ] }, "stream": { "allOf": [ { "type": "object", "properties": { "between": { "type": "array", "items": { "$ref": "#/defs/stream" }, "minItems": 2, "maxItems": 2 }, "marktype": { "type": "string" }, "markname": { "type": "string" }, "filter": { "oneOf": [ { "$ref": "#/refs/exprString" }, { "type": "array", "items": { "$ref": "#/refs/exprString" }, "minItems": 1 } ] }, "throttle": { "type": "number" }, "debounce": { "type": "number" }, "consume": { "type": "boolean" } } }, { "oneOf": [ { "type": "object", "properties": { "type": { "type": "string" }, "source": { "type": "string" } }, "required": [ "type" ] }, { "type": "object", "properties": { "stream": { "$ref": "#/defs/stream" } }, "required": [ "stream" ] }, { "type": "object", "properties": { "merge": { "type": "array", "items": { "$ref": "#/defs/stream" }, "minItems": 1 } }, "required": [ "merge" ] } ] } ] }, "title": { "oneOf": [ { "type": "string" }, { "type": "object", "properties": { "orient": { "oneOf": [ { "enum": [ "none", "left", "right", "top", "bottom" ], "default": "top" }, { "$ref": "#/refs/signal" } ] }, "anchor": { "oneOf": [ { "enum": [ null, "start", "middle", "end" ] }, { "$ref": "#/refs/anchorValue" } ] }, "frame": { "oneOf": [ { "enum": [ "group", "bounds" ] }, { "$ref": "#/refs/stringValue" } ] }, "offset": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "limit": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "text": { "$ref": "#/refs/textOrSignal" }, "subtitle": { "$ref": "#/refs/textOrSignal" }, "zindex": { "type": "number" }, "align": { "oneOf": [ { "enum": [ "left", "right", "center" ] }, { "$ref": "#/refs/alignValue" } ] }, "angle": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "baseline": { "oneOf": [ { "enum": [ "top", "middle", "bottom", "alphabetic", "line-top", "line-bottom" ] }, { "$ref": "#/refs/baselineValue" } ] }, "dx": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "dy": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "color": { "oneOf": [ { "type": "null" }, { "type": "string" }, { "$ref": "#/refs/colorValue" } ] }, "font": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/stringValue" } ] }, "fontSize": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "fontStyle": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/stringValue" } ] }, "fontWeight": { "oneOf": [ { "enum": [ null, "normal", "bold", "lighter", "bolder", "100", "200", "300", "400", "500", "600", "700", "800", "900", 100, 200, 300, 400, 500, 600, 700, 800, 900 ] }, { "$ref": "#/refs/fontWeightValue" } ] }, "lineHeight": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "subtitleColor": { "oneOf": [ { "type": "null" }, { "type": "string" }, { "$ref": "#/refs/colorValue" } ] }, "subtitleFont": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/stringValue" } ] }, "subtitleFontSize": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "subtitleFontStyle": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/stringValue" } ] }, "subtitleFontWeight": { "oneOf": [ { "enum": [ null, "normal", "bold", "lighter", "bolder", "100", "200", "300", "400", "500", "600", "700", "800", "900", 100, 200, 300, 400, 500, 600, 700, 800, 900 ] }, { "$ref": "#/refs/fontWeightValue" } ] }, "subtitleLineHeight": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "subtitlePadding": { "$ref": "#/refs/numberOrSignal" }, "encode": { "anyOf": [ { "type": "object", "additionalProperties": false, "patternProperties": { "^(?!interactive|name|style).+$": { "$ref": "#/defs/encodeEntry" } } }, { "type": "object", "properties": { "group": { "$ref": "#/defs/guideEncode" }, "title": { "$ref": "#/defs/guideEncode" }, "subtitle": { "$ref": "#/defs/guideEncode" } }, "additionalProperties": false } ] }, "name": { "type": "string" }, "interactive": { "type": "boolean" }, "style": { "$ref": "#/refs/style" } }, "additionalProperties": false } ] }, "transform": { "oneOf": [ { "$ref": "#/defs/crossfilterTransform" }, { "$ref": "#/defs/resolvefilterTransform" }, { "$ref": "#/defs/linkpathTransform" }, { "$ref": "#/defs/pieTransform" }, { "$ref": "#/defs/stackTransform" }, { "$ref": "#/defs/forceTransform" }, { "$ref": "#/defs/contourTransform" }, { "$ref": "#/defs/geojsonTransform" }, { "$ref": "#/defs/geopathTransform" }, { "$ref": "#/defs/geopointTransform" }, { "$ref": "#/defs/geoshapeTransform" }, { "$ref": "#/defs/graticuleTransform" }, { "$ref": "#/defs/heatmapTransform" }, { "$ref": "#/defs/isocontourTransform" }, { "$ref": "#/defs/kde2dTransform" }, { "$ref": "#/defs/nestTransform" }, { "$ref": "#/defs/packTransform" }, { "$ref": "#/defs/partitionTransform" }, { "$ref": "#/defs/stratifyTransform" }, { "$ref": "#/defs/treeTransform" }, { "$ref": "#/defs/treelinksTransform" }, { "$ref": "#/defs/treemapTransform" }, { "$ref": "#/defs/loessTransform" }, { "$ref": "#/defs/regressionTransform" }, { "$ref": "#/defs/aggregateTransform" }, { "$ref": "#/defs/binTransform" }, { "$ref": "#/defs/collectTransform" }, { "$ref": "#/defs/countpatternTransform" }, { "$ref": "#/defs/crossTransform" }, { "$ref": "#/defs/densityTransform" }, { "$ref": "#/defs/dotbinTransform" }, { "$ref": "#/defs/extentTransform" }, { "$ref": "#/defs/filterTransform" }, { "$ref": "#/defs/flattenTransform" }, { "$ref": "#/defs/foldTransform" }, { "$ref": "#/defs/formulaTransform" }, { "$ref": "#/defs/imputeTransform" }, { "$ref": "#/defs/joinaggregateTransform" }, { "$ref": "#/defs/kdeTransform" }, { "$ref": "#/defs/lookupTransform" }, { "$ref": "#/defs/pivotTransform" }, { "$ref": "#/defs/projectTransform" }, { "$ref": "#/defs/quantileTransform" }, { "$ref": "#/defs/sampleTransform" }, { "$ref": "#/defs/sequenceTransform" }, { "$ref": "#/defs/timeunitTransform" }, { "$ref": "#/defs/windowTransform" }, { "$ref": "#/defs/identifierTransform" }, { "$ref": "#/defs/voronoiTransform" }, { "$ref": "#/defs/wordcloudTransform" } ] }, "transformMark": { "oneOf": [ { "$ref": "#/defs/crossfilterTransform" }, { "$ref": "#/defs/resolvefilterTransform" }, { "$ref": "#/defs/linkpathTransform" }, { "$ref": "#/defs/pieTransform" }, { "$ref": "#/defs/stackTransform" }, { "$ref": "#/defs/forceTransform" }, { "$ref": "#/defs/geojsonTransform" }, { "$ref": "#/defs/geopathTransform" }, { "$ref": "#/defs/geopointTransform" }, { "$ref": "#/defs/geoshapeTransform" }, { "$ref": "#/defs/heatmapTransform" }, { "$ref": "#/defs/packTransform" }, { "$ref": "#/defs/partitionTransform" }, { "$ref": "#/defs/stratifyTransform" }, { "$ref": "#/defs/treeTransform" }, { "$ref": "#/defs/treemapTransform" }, { "$ref": "#/defs/binTransform" }, { "$ref": "#/defs/collectTransform" }, { "$ref": "#/defs/dotbinTransform" }, { "$ref": "#/defs/extentTransform" }, { "$ref": "#/defs/formulaTransform" }, { "$ref": "#/defs/joinaggregateTransform" }, { "$ref": "#/defs/lookupTransform" }, { "$ref": "#/defs/sampleTransform" }, { "$ref": "#/defs/timeunitTransform" }, { "$ref": "#/defs/windowTransform" }, { "$ref": "#/defs/identifierTransform" }, { "$ref": "#/defs/voronoiTransform" }, { "$ref": "#/defs/wordcloudTransform" } ] }, "crossfilterTransform": { "type": "object", "properties": { "type": { "enum": [ "crossfilter" ] }, "signal": { "type": "string" }, "fields": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "query": { "oneOf": [ { "type": "array", "items": {} }, { "$ref": "#/refs/signal" } ] } }, "required": [ "type", "fields", "query" ], "additionalProperties": false }, "resolvefilterTransform": { "type": "object", "properties": { "type": { "enum": [ "resolvefilter" ] }, "signal": { "type": "string" }, "ignore": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "filter": {} }, "required": [ "type", "ignore", "filter" ], "additionalProperties": false }, "linkpathTransform": { "type": "object", "properties": { "type": { "enum": [ "linkpath" ] }, "signal": { "type": "string" }, "sourceX": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ], "default": "source.x" }, "sourceY": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ], "default": "source.y" }, "targetX": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ], "default": "target.x" }, "targetY": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ], "default": "target.y" }, "orient": { "anyOf": [ { "enum": [ "horizontal", "vertical", "radial" ] }, { "$ref": "#/refs/signal" } ], "default": "vertical" }, "shape": { "anyOf": [ { "enum": [ "line", "arc", "curve", "diagonal", "orthogonal" ] }, { "$ref": "#/refs/signal" } ], "default": "line" }, "require": { "$ref": "#/refs/signal" }, "as": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ], "default": "path" } }, "required": [ "type" ], "additionalProperties": false }, "pieTransform": { "type": "object", "properties": { "type": { "enum": [ "pie" ] }, "signal": { "type": "string" }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "startAngle": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "endAngle": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 6.283185307179586 }, "sort": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ] }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2, "default": [ "startAngle", "endAngle" ] } }, "required": [ "type" ], "additionalProperties": false }, "stackTransform": { "type": "object", "properties": { "type": { "enum": [ "stack" ] }, "signal": { "type": "string" }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "groupby": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "sort": { "$ref": "#/refs/compare" }, "offset": { "anyOf": [ { "enum": [ "zero", "center", "normalize" ] }, { "$ref": "#/refs/signal" } ], "default": "zero" }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2, "default": [ "y0", "y1" ] } }, "required": [ "type" ], "additionalProperties": false }, "forceTransform": { "type": "object", "properties": { "type": { "enum": [ "force" ] }, "signal": { "type": "string" }, "static": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ] }, "restart": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ] }, "iterations": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 300 }, "alpha": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 1 }, "alphaMin": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 0.001 }, "alphaTarget": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "velocityDecay": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 0.4 }, "forces": { "type": "array", "items": { "oneOf": [ { "type": "object", "properties": { "force": { "enum": [ "center" ] }, "x": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "y": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, "required": [ "force" ], "additionalProperties": false }, { "type": "object", "properties": { "force": { "enum": [ "collide" ] }, "radius": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" }, { "$ref": "#/refs/expr" }, { "$ref": "#/refs/paramField" } ] }, "strength": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 0.7 }, "iterations": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 1 } }, "required": [ "force" ], "additionalProperties": false }, { "type": "object", "properties": { "force": { "enum": [ "nbody" ] }, "strength": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": -30 }, "theta": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 0.9 }, "distanceMin": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 1 }, "distanceMax": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, "required": [ "force" ], "additionalProperties": false }, { "type": "object", "properties": { "force": { "enum": [ "link" ] }, "links": { "type": "string" }, "id": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "distance": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" }, { "$ref": "#/refs/expr" }, { "$ref": "#/refs/paramField" } ], "default": 30 }, "strength": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" }, { "$ref": "#/refs/expr" }, { "$ref": "#/refs/paramField" } ] }, "iterations": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 1 } }, "required": [ "force" ], "additionalProperties": false }, { "type": "object", "properties": { "force": { "enum": [ "x" ] }, "strength": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 0.1 }, "x": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, "required": [ "force" ], "additionalProperties": false }, { "type": "object", "properties": { "force": { "enum": [ "y" ] }, "strength": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 0.1 }, "y": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, "required": [ "force" ], "additionalProperties": false } ] } }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "default": [ "x", "y", "vx", "vy" ] } }, "required": [ "type" ], "additionalProperties": false }, "contourTransform": { "type": "object", "properties": { "type": { "enum": [ "contour" ] }, "signal": { "type": "string" }, "size": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "values": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "x": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "y": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "weight": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "cellSize": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "bandwidth": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "count": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "nice": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ] }, "thresholds": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "smooth": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ], "default": true } }, "required": [ "type", "size" ], "additionalProperties": false }, "geojsonTransform": { "type": "object", "properties": { "type": { "enum": [ "geojson" ] }, "signal": { "type": "string" }, "fields": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "geojson": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, "required": [ "type" ], "additionalProperties": false }, "geopathTransform": { "type": "object", "properties": { "type": { "enum": [ "geopath" ] }, "signal": { "type": "string" }, "projection": { "type": "string" }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "pointRadius": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" }, { "$ref": "#/refs/expr" }, { "$ref": "#/refs/paramField" } ] }, "as": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ], "default": "path" } }, "required": [ "type" ], "additionalProperties": false }, "geopointTransform": { "type": "object", "properties": { "type": { "enum": [ "geopoint" ] }, "signal": { "type": "string" }, "projection": { "type": "string" }, "fields": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2, "default": [ "x", "y" ] } }, "required": [ "type", "projection", "fields" ], "additionalProperties": false }, "geoshapeTransform": { "type": "object", "properties": { "type": { "enum": [ "geoshape" ] }, "signal": { "type": "string" }, "projection": { "type": "string" }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ], "default": "datum" }, "pointRadius": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" }, { "$ref": "#/refs/expr" }, { "$ref": "#/refs/paramField" } ] }, "as": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ], "default": "shape" } }, "required": [ "type" ], "additionalProperties": false }, "graticuleTransform": { "type": "object", "properties": { "type": { "enum": [ "graticule" ] }, "signal": { "type": "string" }, "extent": { "oneOf": [ { "type": "array", "items": {} }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "extentMajor": { "oneOf": [ { "type": "array", "items": {} }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "extentMinor": { "oneOf": [ { "type": "array", "items": {} }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "step": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "stepMajor": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2, "default": [ 90, 360 ] }, "stepMinor": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2, "default": [ 10, 10 ] }, "precision": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 2.5 } }, "required": [ "type" ], "additionalProperties": false }, "heatmapTransform": { "type": "object", "properties": { "type": { "enum": [ "heatmap" ] }, "signal": { "type": "string" }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "color": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" }, { "$ref": "#/refs/expr" }, { "$ref": "#/refs/paramField" } ] }, "opacity": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" }, { "$ref": "#/refs/expr" }, { "$ref": "#/refs/paramField" } ] }, "resolve": { "anyOf": [ { "enum": [ "shared", "independent" ] }, { "$ref": "#/refs/signal" } ], "default": "independent" }, "as": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ], "default": "image" } }, "required": [ "type" ], "additionalProperties": false }, "isocontourTransform": { "type": "object", "properties": { "type": { "enum": [ "isocontour" ] }, "signal": { "type": "string" }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "thresholds": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "levels": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "nice": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ] }, "resolve": { "anyOf": [ { "enum": [ "shared", "independent" ] }, { "$ref": "#/refs/signal" } ], "default": "independent" }, "zero": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ], "default": true }, "smooth": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ], "default": true }, "scale": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" }, { "$ref": "#/refs/expr" }, { "$ref": "#/refs/paramField" } ] }, "translate": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" }, { "$ref": "#/refs/expr" }, { "$ref": "#/refs/paramField" } ] } }, { "$ref": "#/refs/signal" } ] }, "as": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" }, { "type": "null" } ], "default": "contour" } }, "required": [ "type" ], "additionalProperties": false }, "kde2dTransform": { "type": "object", "properties": { "type": { "enum": [ "kde2d" ] }, "signal": { "type": "string" }, "size": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "x": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "y": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "weight": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "groupby": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "cellSize": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "bandwidth": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "counts": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ] }, "as": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ], "default": "grid" } }, "required": [ "type", "size", "x", "y" ], "additionalProperties": false }, "nestTransform": { "type": "object", "properties": { "type": { "enum": [ "nest" ] }, "signal": { "type": "string" }, "keys": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "generate": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ] } }, "required": [ "type" ], "additionalProperties": false }, "packTransform": { "type": "object", "properties": { "type": { "enum": [ "pack" ] }, "signal": { "type": "string" }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "sort": { "$ref": "#/refs/compare" }, "padding": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "radius": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "size": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 5, "minItems": 5, "default": [ "x", "y", "r", "depth", "children" ] } }, "required": [ "type" ], "additionalProperties": false }, "partitionTransform": { "type": "object", "properties": { "type": { "enum": [ "partition" ] }, "signal": { "type": "string" }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "sort": { "$ref": "#/refs/compare" }, "padding": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "round": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ] }, "size": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 6, "minItems": 6, "default": [ "x0", "y0", "x1", "y1", "depth", "children" ] } }, "required": [ "type" ], "additionalProperties": false }, "stratifyTransform": { "type": "object", "properties": { "type": { "enum": [ "stratify" ] }, "signal": { "type": "string" }, "key": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "parentKey": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, "required": [ "type", "key", "parentKey" ], "additionalProperties": false }, "treeTransform": { "type": "object", "properties": { "type": { "enum": [ "tree" ] }, "signal": { "type": "string" }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "sort": { "$ref": "#/refs/compare" }, "method": { "anyOf": [ { "enum": [ "tidy", "cluster" ] }, { "$ref": "#/refs/signal" } ], "default": "tidy" }, "size": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "nodeSize": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "separation": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ], "default": true }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 4, "minItems": 4, "default": [ "x", "y", "depth", "children" ] } }, "required": [ "type" ], "additionalProperties": false }, "treelinksTransform": { "type": "object", "properties": { "type": { "enum": [ "treelinks" ] }, "signal": { "type": "string" } }, "required": [ "type" ], "additionalProperties": false }, "treemapTransform": { "type": "object", "properties": { "type": { "enum": [ "treemap" ] }, "signal": { "type": "string" }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "sort": { "$ref": "#/refs/compare" }, "method": { "anyOf": [ { "enum": [ "squarify", "resquarify", "binary", "dice", "slice", "slicedice" ] }, { "$ref": "#/refs/signal" } ], "default": "squarify" }, "padding": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "paddingInner": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "paddingOuter": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "paddingTop": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "paddingRight": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "paddingBottom": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "paddingLeft": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "ratio": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 1.618033988749895 }, "round": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ] }, "size": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 6, "minItems": 6, "default": [ "x0", "y0", "x1", "y1", "depth", "children" ] } }, "required": [ "type" ], "additionalProperties": false }, "loessTransform": { "type": "object", "properties": { "type": { "enum": [ "loess" ] }, "signal": { "type": "string" }, "x": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "y": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "groupby": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "bandwidth": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 0.3 }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] } }, "required": [ "type", "x", "y" ], "additionalProperties": false }, "regressionTransform": { "type": "object", "properties": { "type": { "enum": [ "regression" ] }, "signal": { "type": "string" }, "x": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "y": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "groupby": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "method": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ], "default": "linear" }, "order": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 3 }, "extent": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "params": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ] }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] } }, "required": [ "type", "x", "y" ], "additionalProperties": false }, "aggregateTransform": { "type": "object", "properties": { "type": { "enum": [ "aggregate" ] }, "signal": { "type": "string" }, "groupby": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "ops": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "enum": [ "values", "count", "__count__", "missing", "valid", "sum", "product", "mean", "average", "variance", "variancep", "stdev", "stdevp", "stderr", "distinct", "ci0", "ci1", "median", "q1", "q3", "argmin", "argmax", "min", "max" ] }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "fields": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" }, { "type": "null" } ] } }, { "$ref": "#/refs/signal" } ] }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" }, { "type": "null" } ] } }, { "$ref": "#/refs/signal" } ] }, "drop": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ], "default": true }, "cross": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ] }, "key": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, "required": [ "type" ], "additionalProperties": false }, "binTransform": { "type": "object", "properties": { "type": { "enum": [ "bin" ] }, "signal": { "type": "string" }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "interval": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ], "default": true }, "anchor": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "maxbins": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 20 }, "base": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 10 }, "divide": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "default": [ 5, 2 ] }, "extent": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "span": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "step": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "steps": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "minstep": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "nice": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ], "default": true }, "name": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2, "default": [ "bin0", "bin1" ] } }, "required": [ "type", "field", "extent" ], "additionalProperties": false }, "collectTransform": { "type": "object", "properties": { "type": { "enum": [ "collect" ] }, "signal": { "type": "string" }, "sort": { "$ref": "#/refs/compare" } }, "required": [ "type" ], "additionalProperties": false }, "countpatternTransform": { "type": "object", "properties": { "type": { "enum": [ "countpattern" ] }, "signal": { "type": "string" }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "case": { "anyOf": [ { "enum": [ "upper", "lower", "mixed" ] }, { "$ref": "#/refs/signal" } ], "default": "mixed" }, "pattern": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ], "default": "[\\w\"]+" }, "stopwords": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2, "default": [ "text", "count" ] } }, "required": [ "type", "field" ], "additionalProperties": false }, "crossTransform": { "type": "object", "properties": { "type": { "enum": [ "cross" ] }, "signal": { "type": "string" }, "filter": { "$ref": "#/refs/exprString" }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2, "default": [ "a", "b" ] } }, "required": [ "type" ], "additionalProperties": false }, "densityTransform": { "type": "object", "properties": { "type": { "enum": [ "density" ] }, "signal": { "type": "string" }, "extent": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "steps": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "minsteps": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 25 }, "maxsteps": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 200 }, "method": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ], "default": "pdf" }, "distribution": { "oneOf": [ { "type": "object", "properties": { "function": { "enum": [ "normal" ] }, "mean": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "stdev": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 1 } }, "required": [ "function" ], "additionalProperties": false }, { "type": "object", "properties": { "function": { "enum": [ "lognormal" ] }, "mean": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "stdev": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 1 } }, "required": [ "function" ], "additionalProperties": false }, { "type": "object", "properties": { "function": { "enum": [ "uniform" ] }, "min": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "max": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 1 } }, "required": [ "function" ], "additionalProperties": false }, { "type": "object", "properties": { "function": { "enum": [ "kde" ] }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "from": { "type": "string" }, "bandwidth": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, "required": [ "function", "field" ], "additionalProperties": false }, { "type": "object", "properties": { "function": { "enum": [ "mixture" ] }, "distributions": { "oneOf": [ { "type": "array", "items": {} }, { "$ref": "#/refs/signal" } ] }, "weights": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] } }, "required": [ "function" ], "additionalProperties": false } ] }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "default": [ "value", "density" ] } }, "required": [ "type" ], "additionalProperties": false }, "dotbinTransform": { "type": "object", "properties": { "type": { "enum": [ "dotbin" ] }, "signal": { "type": "string" }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "groupby": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "step": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "smooth": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ] }, "as": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ], "default": "bin" } }, "required": [ "type", "field" ], "additionalProperties": false }, "extentTransform": { "type": "object", "properties": { "type": { "enum": [ "extent" ] }, "signal": { "type": "string" }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, "required": [ "type", "field" ], "additionalProperties": false }, "filterTransform": { "type": "object", "properties": { "type": { "enum": [ "filter" ] }, "signal": { "type": "string" }, "expr": { "$ref": "#/refs/exprString" } }, "required": [ "type", "expr" ], "additionalProperties": false }, "flattenTransform": { "type": "object", "properties": { "type": { "enum": [ "flatten" ] }, "signal": { "type": "string" }, "fields": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "index": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] } }, "required": [ "type", "fields" ], "additionalProperties": false }, "foldTransform": { "type": "object", "properties": { "type": { "enum": [ "fold" ] }, "signal": { "type": "string" }, "fields": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2, "default": [ "key", "value" ] } }, "required": [ "type", "fields" ], "additionalProperties": false }, "formulaTransform": { "type": "object", "properties": { "type": { "enum": [ "formula" ] }, "signal": { "type": "string" }, "expr": { "$ref": "#/refs/exprString" }, "as": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] }, "initonly": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ] } }, "required": [ "type", "expr", "as" ], "additionalProperties": false }, "imputeTransform": { "type": "object", "properties": { "type": { "enum": [ "impute" ] }, "signal": { "type": "string" }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "key": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "keyvals": { "oneOf": [ { "type": "array", "items": {} }, { "$ref": "#/refs/signal" } ] }, "groupby": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "method": { "anyOf": [ { "enum": [ "value", "mean", "median", "max", "min" ] }, { "$ref": "#/refs/signal" } ], "default": "value" }, "value": {} }, "required": [ "type", "field", "key" ], "additionalProperties": false }, "joinaggregateTransform": { "type": "object", "properties": { "type": { "enum": [ "joinaggregate" ] }, "signal": { "type": "string" }, "groupby": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "fields": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" }, { "type": "null" } ] } }, { "$ref": "#/refs/signal" } ] }, "ops": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "enum": [ "values", "count", "__count__", "missing", "valid", "sum", "product", "mean", "average", "variance", "variancep", "stdev", "stdevp", "stderr", "distinct", "ci0", "ci1", "median", "q1", "q3", "argmin", "argmax", "min", "max" ] }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" }, { "type": "null" } ] } }, { "$ref": "#/refs/signal" } ] }, "key": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, "required": [ "type" ], "additionalProperties": false }, "kdeTransform": { "type": "object", "properties": { "type": { "enum": [ "kde" ] }, "signal": { "type": "string" }, "groupby": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "cumulative": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ] }, "counts": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ] }, "bandwidth": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "extent": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "resolve": { "anyOf": [ { "enum": [ "shared", "independent" ] }, { "$ref": "#/refs/signal" } ], "default": "independent" }, "steps": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "minsteps": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 25 }, "maxsteps": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 200 }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "default": [ "value", "density" ] } }, "required": [ "type", "field" ], "additionalProperties": false }, "lookupTransform": { "type": "object", "properties": { "type": { "enum": [ "lookup" ] }, "signal": { "type": "string" }, "from": { "type": "string" }, "key": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "values": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "fields": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "default": {} }, "required": [ "type", "from", "key", "fields" ], "additionalProperties": false }, "pivotTransform": { "type": "object", "properties": { "type": { "enum": [ "pivot" ] }, "signal": { "type": "string" }, "groupby": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "value": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "op": { "anyOf": [ { "enum": [ "values", "count", "__count__", "missing", "valid", "sum", "product", "mean", "average", "variance", "variancep", "stdev", "stdevp", "stderr", "distinct", "ci0", "ci1", "median", "q1", "q3", "argmin", "argmax", "min", "max" ] }, { "$ref": "#/refs/signal" } ], "default": "sum" }, "limit": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "key": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, "required": [ "type", "field", "value" ], "additionalProperties": false }, "projectTransform": { "type": "object", "properties": { "type": { "enum": [ "project" ] }, "signal": { "type": "string" }, "fields": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" }, { "type": "null" } ] } }, { "$ref": "#/refs/signal" } ] } }, "required": [ "type" ], "additionalProperties": false }, "quantileTransform": { "type": "object", "properties": { "type": { "enum": [ "quantile" ] }, "signal": { "type": "string" }, "groupby": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "probs": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "step": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 0.01 }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "default": [ "prob", "value" ] } }, "required": [ "type", "field" ], "additionalProperties": false }, "sampleTransform": { "type": "object", "properties": { "type": { "enum": [ "sample" ] }, "signal": { "type": "string" }, "size": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 1000 } }, "required": [ "type" ], "additionalProperties": false }, "sequenceTransform": { "type": "object", "properties": { "type": { "enum": [ "sequence" ] }, "signal": { "type": "string" }, "start": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "stop": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "step": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 1 }, "as": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ], "default": "data" } }, "required": [ "type", "start", "stop" ], "additionalProperties": false }, "timeunitTransform": { "type": "object", "properties": { "type": { "enum": [ "timeunit" ] }, "signal": { "type": "string" }, "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "interval": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ], "default": true }, "units": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "step": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 1 }, "maxbins": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ], "default": 40 }, "extent": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "timezone": { "anyOf": [ { "enum": [ "local", "utc" ] }, { "$ref": "#/refs/signal" } ], "default": "local" }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2, "default": [ "unit0", "unit1" ] } }, "required": [ "type", "field" ], "additionalProperties": false }, "windowTransform": { "type": "object", "properties": { "type": { "enum": [ "window" ] }, "signal": { "type": "string" }, "sort": { "$ref": "#/refs/compare" }, "groupby": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] } }, { "$ref": "#/refs/signal" } ] }, "ops": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "enum": [ "row_number", "rank", "dense_rank", "percent_rank", "cume_dist", "ntile", "lag", "lead", "first_value", "last_value", "nth_value", "prev_value", "next_value", "values", "count", "__count__", "missing", "valid", "sum", "product", "mean", "average", "variance", "variancep", "stdev", "stdevp", "stderr", "distinct", "ci0", "ci1", "median", "q1", "q3", "argmin", "argmax", "min", "max" ] }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ] }, "params": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "null" } ] } }, { "$ref": "#/refs/signal" } ] }, "fields": { "oneOf": [ { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" }, { "type": "null" } ] } }, { "$ref": "#/refs/signal" } ] }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" }, { "type": "null" } ] } }, { "$ref": "#/refs/signal" } ] }, "frame": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" }, { "type": "null" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2, "default": [ null, 0 ] }, "ignorePeers": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ] } }, "required": [ "type" ], "additionalProperties": false }, "identifierTransform": { "type": "object", "properties": { "type": { "enum": [ "identifier" ] }, "signal": { "type": "string" }, "as": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, "required": [ "type", "as" ], "additionalProperties": false }, "voronoiTransform": { "type": "object", "properties": { "type": { "enum": [ "voronoi" ] }, "signal": { "type": "string" }, "x": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "y": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "size": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "extent": { "oneOf": [ { "type": "array", "items": {} }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2, "default": [ [ -100000, -100000 ], [ 100000, 100000 ] ] }, "as": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ], "default": "path" } }, "required": [ "type", "x", "y" ], "additionalProperties": false }, "wordcloudTransform": { "type": "object", "properties": { "type": { "enum": [ "wordcloud" ] }, "signal": { "type": "string" }, "size": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 2, "minItems": 2 }, "font": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" }, { "$ref": "#/refs/expr" }, { "$ref": "#/refs/paramField" } ], "default": "sans-serif" }, "fontStyle": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" }, { "$ref": "#/refs/expr" }, { "$ref": "#/refs/paramField" } ], "default": "normal" }, "fontWeight": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" }, { "$ref": "#/refs/expr" }, { "$ref": "#/refs/paramField" } ], "default": "normal" }, "fontSize": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" }, { "$ref": "#/refs/expr" }, { "$ref": "#/refs/paramField" } ], "default": 14 }, "fontSizeRange": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" }, { "type": "null" } ], "default": [ 10, 50 ] }, "rotate": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" }, { "$ref": "#/refs/expr" }, { "$ref": "#/refs/paramField" } ] }, "text": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/paramField" }, { "$ref": "#/refs/expr" } ] }, "spiral": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] }, "padding": { "anyOf": [ { "type": "number" }, { "$ref": "#/refs/signal" }, { "$ref": "#/refs/expr" }, { "$ref": "#/refs/paramField" } ] }, "as": { "oneOf": [ { "type": "array", "items": { "anyOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] } }, { "$ref": "#/refs/signal" } ], "maxItems": 7, "minItems": 7, "default": [ "x", "y", "font", "fontSize", "fontStyle", "fontWeight", "angle" ] } }, "required": [ "type" ], "additionalProperties": false } }, "refs": { "labelOverlap": { "oneOf": [ { "type": "boolean" }, { "enum": [ "parity", "greedy" ] }, { "$ref": "#/refs/signal" } ] }, "tickBand": { "oneOf": [ { "enum": [ "center", "extent" ] }, { "$ref": "#/refs/signal" } ] }, "tickCount": { "oneOf": [ { "type": "number" }, { "enum": [ "millisecond", "second", "minute", "hour", "day", "week", "month", "year" ] }, { "type": "object", "properties": { "interval": { "oneOf": [ { "enum": [ "millisecond", "second", "minute", "hour", "day", "week", "month", "year" ] }, { "$ref": "#/refs/signal" } ] }, "step": { "$ref": "#/refs/numberOrSignal" } }, "required": [ "interval" ], "additionalProperties": false }, { "$ref": "#/refs/signal" } ] }, "element": { "type": "string" }, "paramField": { "type": "object", "properties": { "field": { "type": "string" }, "as": { "type": "string" } }, "required": [ "field" ], "additionalProperties": false }, "field": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "datum": { "$ref": "#/refs/field" } }, "required": [ "datum" ], "additionalProperties": false }, { "type": "object", "properties": { "group": { "$ref": "#/refs/field" }, "level": { "type": "number" } }, "required": [ "group" ], "additionalProperties": false }, { "type": "object", "properties": { "parent": { "$ref": "#/refs/field" }, "level": { "type": "number" } }, "required": [ "parent" ], "additionalProperties": false } ] }, "scale": { "$ref": "#/refs/field" }, "stringModifiers": { "type": "object", "properties": { "scale": { "$ref": "#/refs/scale" } } }, "numberModifiers": { "type": "object", "properties": { "exponent": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "mult": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "offset": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/numberValue" } ] }, "round": { "type": "boolean", "default": false }, "scale": { "$ref": "#/refs/scale" }, "band": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] }, "extra": { "type": "boolean" } } }, "anyValue": { "oneOf": [ { "type": "array", "items": { "allOf": [ { "$ref": "#/defs/rule" }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": {} }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] } }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": {} }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] }, "blendValue": { "oneOf": [ { "type": "array", "items": { "allOf": [ { "$ref": "#/defs/rule" }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "enum": [ null, "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity" ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] } }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "enum": [ null, "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity" ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] }, "numberValue": { "oneOf": [ { "type": "array", "items": { "allOf": [ { "$ref": "#/defs/rule" }, { "allOf": [ { "$ref": "#/refs/numberModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "type": "number" } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] } }, { "allOf": [ { "$ref": "#/refs/numberModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "type": "number" } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] }, "stringValue": { "oneOf": [ { "type": "array", "items": { "allOf": [ { "$ref": "#/defs/rule" }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "type": "string" } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] } }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "type": "string" } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] }, "textValue": { "oneOf": [ { "type": "array", "items": { "allOf": [ { "$ref": "#/defs/rule" }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] } }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] }, "booleanValue": { "oneOf": [ { "type": "array", "items": { "allOf": [ { "$ref": "#/defs/rule" }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "type": "boolean" } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] } }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "type": "boolean" } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] }, "arrayValue": { "oneOf": [ { "type": "array", "items": { "allOf": [ { "$ref": "#/defs/rule" }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "type": "array" } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] } }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "type": "array" } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] }, "fontWeightValue": { "oneOf": [ { "type": "array", "items": { "allOf": [ { "$ref": "#/defs/rule" }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "enum": [ null, "normal", "bold", "lighter", "bolder", "100", "200", "300", "400", "500", "600", "700", "800", "900", 100, 200, 300, 400, 500, 600, 700, 800, 900 ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] } }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "enum": [ null, "normal", "bold", "lighter", "bolder", "100", "200", "300", "400", "500", "600", "700", "800", "900", 100, 200, 300, 400, 500, 600, 700, 800, 900 ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] }, "anchorValue": { "oneOf": [ { "type": "array", "items": { "allOf": [ { "$ref": "#/defs/rule" }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "enum": [ "start", "middle", "end" ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] } }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "enum": [ "start", "middle", "end" ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] }, "alignValue": { "oneOf": [ { "type": "array", "items": { "allOf": [ { "$ref": "#/defs/rule" }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "enum": [ "left", "right", "center" ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] } }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "enum": [ "left", "right", "center" ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] }, "baselineValue": { "oneOf": [ { "type": "array", "items": { "allOf": [ { "$ref": "#/defs/rule" }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "enum": [ "top", "middle", "bottom", "alphabetic" ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] } }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "enum": [ "top", "middle", "bottom", "alphabetic" ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] }, "directionValue": { "oneOf": [ { "type": "array", "items": { "allOf": [ { "$ref": "#/defs/rule" }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "enum": [ "horizontal", "vertical" ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] } }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "enum": [ "horizontal", "vertical" ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] }, "orientValue": { "oneOf": [ { "type": "array", "items": { "allOf": [ { "$ref": "#/defs/rule" }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "enum": [ "left", "right", "top", "bottom" ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] } }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "enum": [ "left", "right", "top", "bottom" ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] }, "strokeCapValue": { "oneOf": [ { "type": "array", "items": { "allOf": [ { "$ref": "#/defs/rule" }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "enum": [ "butt", "round", "square" ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] } }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "enum": [ "butt", "round", "square" ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] }, "strokeJoinValue": { "oneOf": [ { "type": "array", "items": { "allOf": [ { "$ref": "#/defs/rule" }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "enum": [ "miter", "round", "bevel" ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] } }, { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "enum": [ "miter", "round", "bevel" ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] } ] }, "baseColorValue": { "oneOf": [ { "allOf": [ { "$ref": "#/refs/stringModifiers" }, { "anyOf": [ { "oneOf": [ { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "value": { "oneOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "value" ] }, { "type": "object", "properties": { "field": { "$ref": "#/refs/field" } }, "required": [ "field" ] }, { "type": "object", "properties": { "range": { "oneOf": [ { "type": "number" }, { "type": "boolean" } ] } }, "required": [ "range" ] } ] }, { "type": "object", "required": [ "scale", "value" ] }, { "type": "object", "required": [ "scale", "band" ] }, { "type": "object", "required": [ "offset" ] } ] } ] }, { "type": "object", "properties": { "value": { "$ref": "#/refs/linearGradient" } }, "required": [ "value" ], "additionalProperties": false }, { "type": "object", "properties": { "value": { "$ref": "#/refs/radialGradient" } }, "required": [ "value" ], "additionalProperties": false }, { "type": "object", "properties": { "gradient": { "$ref": "#/refs/scale" }, "start": { "type": "array", "items": { "type": "number" }, "minItems": 2, "maxItems": 2 }, "stop": { "type": "array", "items": { "type": "number" }, "minItems": 2, "maxItems": 2 }, "count": { "type": "number" } }, "required": [ "gradient" ], "additionalProperties": false }, { "type": "object", "properties": { "color": { "oneOf": [ { "$ref": "#/refs/colorRGB" }, { "$ref": "#/refs/colorHSL" }, { "$ref": "#/refs/colorLAB" }, { "$ref": "#/refs/colorHCL" } ] } }, "required": [ "color" ], "additionalProperties": false } ] }, "colorRGB": { "type": "object", "properties": { "r": { "$ref": "#/refs/numberValue" }, "g": { "$ref": "#/refs/numberValue" }, "b": { "$ref": "#/refs/numberValue" } }, "required": [ "r", "g", "b" ] }, "colorHSL": { "type": "object", "properties": { "h": { "$ref": "#/refs/numberValue" }, "s": { "$ref": "#/refs/numberValue" }, "l": { "$ref": "#/refs/numberValue" } }, "required": [ "h", "s", "l" ] }, "colorLAB": { "type": "object", "properties": { "l": { "$ref": "#/refs/numberValue" }, "a": { "$ref": "#/refs/numberValue" }, "b": { "$ref": "#/refs/numberValue" } }, "required": [ "l", "a", "b" ] }, "colorHCL": { "type": "object", "properties": { "h": { "$ref": "#/refs/numberValue" }, "c": { "$ref": "#/refs/numberValue" }, "l": { "$ref": "#/refs/numberValue" } }, "required": [ "h", "c", "l" ] }, "colorValue": { "oneOf": [ { "type": "array", "items": { "allOf": [ { "$ref": "#/defs/rule" }, { "$ref": "#/refs/baseColorValue" } ] } }, { "$ref": "#/refs/baseColorValue" } ] }, "gradientStops": { "type": "array", "items": { "type": "object", "properties": { "offset": { "type": "number" }, "color": { "type": "string" } }, "required": [ "offset", "color" ], "additionalProperties": false } }, "linearGradient": { "type": "object", "properties": { "gradient": { "enum": [ "linear" ] }, "id": { "type": "string" }, "x1": { "type": "number" }, "y1": { "type": "number" }, "x2": { "type": "number" }, "y2": { "type": "number" }, "stops": { "$ref": "#/refs/gradientStops" } }, "required": [ "gradient", "stops" ], "additionalProperties": false }, "radialGradient": { "type": "object", "properties": { "gradient": { "enum": [ "radial" ] }, "id": { "type": "string" }, "x1": { "type": "number" }, "y1": { "type": "number" }, "r1": { "type": "number" }, "x2": { "type": "number" }, "y2": { "type": "number" }, "r2": { "type": "number" }, "stops": { "$ref": "#/refs/gradientStops" } }, "required": [ "gradient", "stops" ], "additionalProperties": false }, "expr": { "type": "object", "properties": { "expr": { "type": "string" }, "as": { "type": "string" } }, "required": [ "expr" ] }, "exprString": { "type": "string" }, "compare": { "oneOf": [ { "type": "object", "properties": { "field": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/expr" } ] }, "order": { "$ref": "#/refs/sortOrder" } }, "additionalProperties": false }, { "type": "object", "properties": { "field": { "type": "array", "items": { "oneOf": [ { "$ref": "#/refs/scaleField" }, { "$ref": "#/refs/expr" } ] } }, "order": { "type": "array", "items": { "$ref": "#/refs/sortOrder" } } }, "additionalProperties": false } ] }, "from": { "type": "object", "properties": { "data": { "type": "string" } }, "additionalProperties": false }, "facet": { "type": "object", "properties": { "data": { "type": "string" }, "facet": { "oneOf": [ { "type": "object", "properties": { "name": { "type": "string" }, "data": { "type": "string" }, "field": { "type": "string" } }, "required": [ "name", "data", "field" ], "additionalProperties": false }, { "type": "object", "properties": { "name": { "type": "string" }, "data": { "type": "string" }, "groupby": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ] }, "aggregate": { "type": "object", "properties": { "cross": { "type": "boolean" }, "fields": { "type": "array", "items": { "type": "string" } }, "ops": { "type": "array", "items": { "type": "string" } }, "as": { "type": "array", "items": { "type": "string" } } }, "additionalProperties": false } }, "required": [ "name", "data", "groupby" ], "additionalProperties": false } ] } }, "required": [ "facet" ], "additionalProperties": false }, "markclip": { "oneOf": [ { "$ref": "#/refs/booleanOrSignal" }, { "type": "object", "properties": { "path": { "$ref": "#/refs/stringOrSignal" } }, "required": [ "path" ], "additionalProperties": false }, { "type": "object", "properties": { "sphere": { "$ref": "#/refs/stringOrSignal" } }, "required": [ "sphere" ], "additionalProperties": false } ] }, "style": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ] }, "marktype": { "type": "string" }, "scaleField": { "$ref": "#/refs/stringOrSignal" }, "sortOrder": { "oneOf": [ { "enum": [ "ascending", "descending" ] }, { "$ref": "#/refs/signal" } ] }, "scaleBins": { "oneOf": [ { "type": "array", "items": { "$ref": "#/refs/numberOrSignal" } }, { "type": "object", "properties": { "step": { "$ref": "#/refs/numberOrSignal" }, "start": { "$ref": "#/refs/numberOrSignal" }, "stop": { "$ref": "#/refs/numberOrSignal" } }, "required": [ "step" ], "additionalProperties": false }, { "$ref": "#/refs/signal" } ] }, "scaleInterpolate": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/signal" }, { "type": "object", "properties": { "type": { "$ref": "#/refs/stringOrSignal" }, "gamma": { "$ref": "#/refs/numberOrSignal" } }, "required": [ "type" ], "additionalProperties": false } ] }, "scaleData": { "oneOf": [ { "type": "object", "properties": { "data": { "type": "string" }, "field": { "$ref": "#/refs/stringOrSignal" }, "sort": { "oneOf": [ { "type": "boolean" }, { "type": "object", "properties": { "field": { "$ref": "#/refs/stringOrSignal" }, "op": { "$ref": "#/refs/stringOrSignal" }, "order": { "$ref": "#/refs/sortOrder" } }, "additionalProperties": false } ] } }, "required": [ "data", "field" ], "additionalProperties": false }, { "type": "object", "properties": { "data": { "type": "string" }, "fields": { "type": "array", "items": { "$ref": "#/refs/stringOrSignal" }, "minItems": 1 }, "sort": { "oneOf": [ { "type": "boolean" }, { "type": "object", "properties": { "op": { "enum": [ "count" ] }, "order": { "$ref": "#/refs/sortOrder" } }, "additionalProperties": false }, { "type": "object", "properties": { "field": { "$ref": "#/refs/stringOrSignal" }, "op": { "enum": [ "count", "min", "max" ] }, "order": { "$ref": "#/refs/sortOrder" } }, "required": [ "field", "op" ], "additionalProperties": false } ] } }, "required": [ "data", "fields" ], "additionalProperties": false }, { "type": "object", "properties": { "fields": { "type": "array", "items": { "oneOf": [ { "type": "object", "properties": { "data": { "type": "string" }, "field": { "$ref": "#/refs/stringOrSignal" } }, "required": [ "data", "field" ], "additionalProperties": false }, { "type": "array", "items": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean" } ] } }, { "$ref": "#/refs/signal" } ] }, "minItems": 1 }, "sort": { "oneOf": [ { "type": "boolean" }, { "type": "object", "properties": { "op": { "enum": [ "count" ] }, "order": { "$ref": "#/refs/sortOrder" } }, "additionalProperties": false }, { "type": "object", "properties": { "field": { "$ref": "#/refs/stringOrSignal" }, "op": { "enum": [ "count", "min", "max" ] }, "order": { "$ref": "#/refs/sortOrder" } }, "required": [ "field", "op" ], "additionalProperties": false } ] } }, "required": [ "fields" ], "additionalProperties": false } ] }, "selector": { "type": "string" }, "signal": { "type": "object", "properties": { "signal": { "type": "string" } }, "required": [ "signal" ] }, "arrayOrSignal": { "oneOf": [ { "type": "array" }, { "$ref": "#/refs/signal" } ] }, "booleanOrSignal": { "oneOf": [ { "type": "boolean" }, { "$ref": "#/refs/signal" } ] }, "numberOrSignal": { "oneOf": [ { "type": "number" }, { "$ref": "#/refs/signal" } ] }, "stringOrSignal": { "oneOf": [ { "type": "string" }, { "$ref": "#/refs/signal" } ] }, "textOrSignal": { "oneOf": [ { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ] }, { "$ref": "#/refs/signal" } ] } }, "type": "object", "allOf": [ { "$ref": "#/defs/scope" }, { "properties": { "$schema": { "type": "string", "format": "uri" }, "config": { "type": "object" }, "description": { "type": "string" }, "width": { "$ref": "#/refs/numberOrSignal" }, "height": { "$ref": "#/refs/numberOrSignal" }, "padding": { "$ref": "#/defs/padding" }, "autosize": { "$ref": "#/defs/autosize" }, "background": { "$ref": "#/defs/background" }, "style": { "$ref": "#/refs/style" } } } ] }altair-4.1.0/altair/vegalite/000077500000000000000000000000001364111050100160345ustar00rootroot00000000000000altair-4.1.0/altair/vegalite/__init__.py000066400000000000000000000000411364111050100201400ustar00rootroot00000000000000# flake8: noqa from .v4 import * altair-4.1.0/altair/vegalite/api.py000066400000000000000000000000451364111050100171560ustar00rootroot00000000000000# flake8: noqa from .v4.api import * altair-4.1.0/altair/vegalite/data.py000066400000000000000000000017601364111050100173230ustar00rootroot00000000000000from toolz import curried from ..utils.core import sanitize_dataframe from ..utils.data import ( MaxRowsError, curry, limit_rows, pipe, sample, to_csv, to_json, to_values, check_data_type, ) from ..utils.data import DataTransformerRegistry as _DataTransformerRegistry @curried.curry def default_data_transformer(data, max_rows=5000): return curried.pipe(data, limit_rows(max_rows=max_rows), to_values) class DataTransformerRegistry(_DataTransformerRegistry): def disable_max_rows(self): """Disable the MaxRowsError.""" options = self.options if self.active == "default": options = options.copy() options["max_rows"] = None return self.enable(**options) __all__ = ( "DataTransformerRegistry", "MaxRowsError", "curry", "sanitize_dataframe", "default_data_transformer", "limit_rows", "pipe", "sample", "to_csv", "to_json", "to_values", "check_data_type", ) altair-4.1.0/altair/vegalite/display.py000066400000000000000000000004241364111050100200530ustar00rootroot00000000000000from ..utils.display import Displayable, default_renderer_base, json_renderer_base from ..utils.display import RendererRegistry, HTMLRenderer __all__ = ( "Displayable", "default_renderer_base", "json_renderer_base", "RendererRegistry", "HTMLRenderer", ) altair-4.1.0/altair/vegalite/schema.py000066400000000000000000000001051364111050100176420ustar00rootroot00000000000000"""Altair schema wrappers""" # flake8: noqa from .v4.schema import * altair-4.1.0/altair/vegalite/tests/000077500000000000000000000000001364111050100171765ustar00rootroot00000000000000altair-4.1.0/altair/vegalite/tests/__init__.py000066400000000000000000000000001364111050100212750ustar00rootroot00000000000000altair-4.1.0/altair/vegalite/tests/test_common.py000066400000000000000000000050521364111050100221010ustar00rootroot00000000000000"""Tests of functionality that should work in all vegalite versions""" import pytest import pandas as pd from .. import v3, v4 @pytest.fixture def basic_spec(): return { "data": {"url": "data.csv"}, "mark": "line", "encoding": { "color": {"type": "nominal", "field": "color"}, "x": {"type": "quantitative", "field": "xval"}, "y": {"type": "ordinal", "field": "yval"}, }, } def make_final_spec(alt, basic_spec): theme = alt.themes.get() spec = theme() spec.update(basic_spec) return spec def make_basic_chart(alt): data = pd.DataFrame( { "a": ["A", "B", "C", "D", "E", "F", "G", "H", "I"], "b": [28, 55, 43, 91, 81, 53, 19, 87, 52], } ) return alt.Chart(data).mark_bar().encode(x="a", y="b") @pytest.mark.parametrize("alt", [v3, v4]) def test_basic_chart_to_dict(alt, basic_spec): chart = ( alt.Chart("data.csv") .mark_line() .encode(alt.X("xval:Q"), y=alt.Y("yval:O"), color="color:N") ) dct = chart.to_dict() # schema should be in the top level assert dct.pop("$schema").startswith("http") # remainder of spec should match the basic spec assert dct == make_final_spec(alt, basic_spec) @pytest.mark.parametrize("alt", [v3, v4]) def test_basic_chart_from_dict(alt, basic_spec): chart = alt.Chart.from_dict(basic_spec) dct = chart.to_dict() # schema should be in the top level assert dct.pop("$schema").startswith("http") # remainder of spec should match the basic spec assert dct == make_final_spec(alt, basic_spec) @pytest.mark.parametrize("alt", [v3, v4]) def test_theme_enable(alt, basic_spec): active_theme = alt.themes.active try: alt.themes.enable("none") chart = alt.Chart.from_dict(basic_spec) dct = chart.to_dict() # schema should be in the top level assert dct.pop("$schema").startswith("http") # remainder of spec should match the basic spec # without any theme settings assert dct == basic_spec finally: # reset the theme to its initial value alt.themes.enable(active_theme) @pytest.mark.parametrize("alt", [v3, v4]) def test_max_rows(alt): basic_chart = make_basic_chart(alt) with alt.data_transformers.enable("default"): basic_chart.to_dict() # this should not fail with alt.data_transformers.enable("default", max_rows=5): with pytest.raises(alt.MaxRowsError): basic_chart.to_dict() # this should not fail altair-4.1.0/altair/vegalite/v3/000077500000000000000000000000001364111050100163645ustar00rootroot00000000000000altair-4.1.0/altair/vegalite/v3/__init__.py000066400000000000000000000006311364111050100204750ustar00rootroot00000000000000# flake8: noqa from .schema import * from .api import * from ._deprecated import * from ...datasets import list_datasets, load_dataset from ... import expr from ...expr import datum from .display import VegaLite, renderers from .data import ( MaxRowsError, pipe, curry, limit_rows, sample, to_json, to_csv, to_values, default_data_transformer, data_transformers, ) altair-4.1.0/altair/vegalite/v3/_deprecated.py000066400000000000000000000020421364111050100211730ustar00rootroot00000000000000from ...utils.deprecation import _deprecate from . import channels # Deprecated classes (see https://github.com/altair-viz/altair/issues/1474). # TODO: Remove these in Altair 3.2. Fillopacity = _deprecate(channels.FillOpacity, "Fillopacity") FillopacityValue = _deprecate(channels.FillOpacityValue, "FillopacityValue") Strokeopacity = _deprecate(channels.StrokeOpacity, "Strokeopacity") StrokeopacityValue = _deprecate(channels.StrokeOpacityValue, "StrokeopacityValue") Strokewidth = _deprecate(channels.StrokeWidth, "Strokewidth") StrokewidthValue = _deprecate(channels.StrokeWidthValue, "StrokewidthValue") Xerror = _deprecate(channels.XError, "Xerror") XerrorValue = _deprecate(channels.XErrorValue, "XerrorValue") Xerror2 = _deprecate(channels.XError2, "Xerror2") Xerror2Value = _deprecate(channels.XError2Value, "Xerror2Value") Yerror = _deprecate(channels.YError, "Yerror") YerrorValue = _deprecate(channels.YErrorValue, "YerrorValue") Yerror2 = _deprecate(channels.YError2, "Yerror2") Yerror2Value = _deprecate(channels.YError2Value, "Yerror2Value") altair-4.1.0/altair/vegalite/v3/api.py000066400000000000000000002245501364111050100175170ustar00rootroot00000000000000import warnings import hashlib import io import json import jsonschema import pandas as pd from toolz.curried import pipe as _pipe from .schema import core, channels, mixins, Undefined, SCHEMA_URL from .data import data_transformers from ... import utils, expr from .display import renderers, VEGALITE_VERSION, VEGAEMBED_VERSION, VEGA_VERSION from .theme import themes # ------------------------------------------------------------------------ # Data Utilities def _dataset_name(values): """Generate a unique hash of the data Parameters ---------- values : list or dict A list/dict representation of data values. Returns ------- name : string A unique name generated from the hash of the values. """ if isinstance(values, core.InlineDataset): values = values.to_dict() values_json = json.dumps(values, sort_keys=True) hsh = hashlib.md5(values_json.encode()).hexdigest() return "data-" + hsh def _consolidate_data(data, context): """If data is specified inline, then move it to context['datasets'] This function will modify context in-place, and return a new version of data """ values = Undefined kwds = {} if isinstance(data, core.InlineData): if data.name is Undefined and data.values is not Undefined: values = data.values kwds = {"format": data.format} elif isinstance(data, dict): if "name" not in data and "values" in data: values = data["values"] kwds = {k: v for k, v in data.items() if k != "values"} if values is not Undefined: name = _dataset_name(values) data = core.NamedData(name=name, **kwds) context.setdefault("datasets", {})[name] = values return data def _prepare_data(data, context=None): """Convert input data to data for use within schema Parameters ---------- data : The input dataset in the form of a DataFrame, dictionary, altair data object, or other type that is recognized by the data transformers. context : dict (optional) The to_dict context in which the data is being prepared. This is used to keep track of information that needs to be passed up and down the recursive serialization routine, such as global named datasets. """ if data is Undefined: return data # convert dataframes or objects with __geo_interface__ to dict if isinstance(data, pd.DataFrame) or hasattr(data, "__geo_interface__"): data = _pipe(data, data_transformers.get()) # convert string input to a URLData if isinstance(data, str): data = core.UrlData(data) # consolidate inline data to top-level datasets if context is not None and data_transformers.consolidate_datasets: data = _consolidate_data(data, context) # if data is still not a recognized type, then return if not isinstance(data, (dict, core.Data)): warnings.warn("data of type {} not recognized".format(type(data))) return data # ------------------------------------------------------------------------ # Aliases & specializations Bin = core.BinParams @utils.use_signature(core.LookupData) class LookupData(core.LookupData): def to_dict(self, *args, **kwargs): """Convert the chart to a dictionary suitable for JSON export""" copy = self.copy(deep=False) copy.data = _prepare_data(copy.data, kwargs.get("context")) return super(LookupData, copy).to_dict(*args, **kwargs) @utils.use_signature(core.FacetMapping) class FacetMapping(core.FacetMapping): _class_is_valid_at_instantiation = False def to_dict(self, *args, **kwargs): copy = self.copy(deep=False) context = kwargs.get("context", {}) data = context.get("data", None) if isinstance(self.row, str): copy.row = core.FacetFieldDef(**utils.parse_shorthand(self.row, data)) if isinstance(self.column, str): copy.column = core.FacetFieldDef(**utils.parse_shorthand(self.column, data)) return super(FacetMapping, copy).to_dict(*args, **kwargs) # ------------------------------------------------------------------------ # Encoding will contain channel objects that aren't valid at instantiation core.FacetedEncoding._class_is_valid_at_instantiation = False # ------------------------------------------------------------------------ # These are parameters that are valid at the top level, but are not valid # for specs that are within a composite chart # (layer, hconcat, vconcat, facet, repeat) TOPLEVEL_ONLY_KEYS = {"background", "config", "autosize", "padding", "$schema"} def _get_channels_mapping(): mapping = {} for attr in dir(channels): cls = getattr(channels, attr) if isinstance(cls, type) and issubclass(cls, core.SchemaBase): mapping[cls] = attr.replace("Value", "").lower() return mapping # ------------------------------------------------------------------------- # Tools for working with selections class Selection(object): """A Selection object""" _counter = 0 @classmethod def _get_name(cls): cls._counter += 1 return "selector{:03d}".format(cls._counter) def __init__(self, name, selection): if name is None: name = self._get_name() self.name = name self.selection = selection def __repr__(self): return "Selection({0!r}, {1})".format(self.name, self.selection) def ref(self): return {"selection": self.name} def to_dict(self): return {"selection": self.name} def __invert__(self): return Selection(core.SelectionNot(**{"not": self.name}), self.selection) def __and__(self, other): if isinstance(other, Selection): other = other.name return Selection( core.SelectionAnd(**{"and": [self.name, other]}), self.selection ) def __or__(self, other): if isinstance(other, Selection): other = other.name return Selection(core.SelectionOr(**{"or": [self.name, other]}), self.selection) def __getattr__(self, field_name): return expr.core.GetAttrExpression(self.name, field_name) def __getitem__(self, field_name): return expr.core.GetItemExpression(self.name, field_name) # ------------------------------------------------------------------------ # Top-Level Functions def value(value, **kwargs): """Specify a value for use in an encoding""" return dict(value=value, **kwargs) def selection(name=None, type=Undefined, **kwds): """Create a named selection. Parameters ---------- name : string (optional) The name of the selection. If not specified, a unique name will be created. type : string The type of the selection: one of ["interval", "single", or "multi"] **kwds : additional keywords will be used to construct a SelectionDef instance that controls the selection. Returns ------- selection: Selection The selection object that can be used in chart creation. """ return Selection(name, core.SelectionDef(type=type, **kwds)) @utils.use_signature(core.IntervalSelection) def selection_interval(**kwargs): """Create a selection with type='interval'""" return selection(type="interval", **kwargs) @utils.use_signature(core.MultiSelection) def selection_multi(**kwargs): """Create a selection with type='multi'""" return selection(type="multi", **kwargs) @utils.use_signature(core.SingleSelection) def selection_single(**kwargs): """Create a selection with type='single'""" return selection(type="single", **kwargs) @utils.use_signature(core.Binding) def binding(input, **kwargs): """A generic binding""" return core.Binding(input=input, **kwargs) @utils.use_signature(core.BindCheckbox) def binding_checkbox(**kwargs): """A checkbox binding""" return core.BindCheckbox(input="checkbox", **kwargs) @utils.use_signature(core.BindRadioSelect) def binding_radio(**kwargs): """A radio button binding""" return core.BindRadioSelect(input="radio", **kwargs) @utils.use_signature(core.BindRadioSelect) def binding_select(**kwargs): """A select binding""" return core.BindRadioSelect(input="select", **kwargs) @utils.use_signature(core.BindRange) def binding_range(**kwargs): """A range binding""" return core.BindRange(input="range", **kwargs) def condition(predicate, if_true, if_false, **kwargs): """A conditional attribute or encoding Parameters ---------- predicate: Selection, LogicalOperandPredicate, expr.Expression, dict, or string the selection predicate or test predicate for the condition. if a string is passed, it will be treated as a test operand. if_true: the spec or object to use if the selection predicate is true if_false: the spec or object to use if the selection predicate is false **kwargs: additional keyword args are added to the resulting dict Returns ------- spec: dict or VegaLiteSchema the spec that describes the condition """ test_predicates = (str, expr.Expression, core.LogicalOperandPredicate) if isinstance(predicate, Selection): condition = {"selection": predicate.name} elif isinstance(predicate, core.SelectionOperand): condition = {"selection": predicate} elif isinstance(predicate, test_predicates): condition = {"test": predicate} elif isinstance(predicate, dict): condition = predicate else: raise NotImplementedError( "condition predicate of type {}" "".format(type(predicate)) ) if isinstance(if_true, core.SchemaBase): # convert to dict for now; the from_dict call below will wrap this # dict in the appropriate schema if_true = if_true.to_dict() elif isinstance(if_true, str): if_true = {"shorthand": if_true} if_true.update(kwargs) condition.update(if_true) if isinstance(if_false, core.SchemaBase): # For the selection, the channel definitions all allow selections # already. So use this SchemaBase wrapper if possible. selection = if_false.copy() selection.condition = condition elif isinstance(if_false, str): selection = {"condition": condition, "shorthand": if_false} selection.update(kwargs) else: selection = dict(condition=condition, **if_false) return selection # -------------------------------------------------------------------- # Top-level objects class TopLevelMixin(mixins.ConfigMethodMixin): """Mixin for top-level chart objects such as Chart, LayeredChart, etc.""" _class_is_valid_at_instantiation = False def to_dict(self, *args, **kwargs): """Convert the chart to a dictionary suitable for JSON export""" # We make use of three context markers: # - 'data' points to the data that should be referenced for column type # inference. # - 'top_level' is a boolean flag that is assumed to be true; if it's # true then a "$schema" arg is added to the dict. # - 'datasets' is a dict of named datasets that should be inserted # in the top-level object # note: not a deep copy because we want datasets and data arguments to # be passed by reference context = kwargs.get("context", {}).copy() context.setdefault("datasets", {}) is_top_level = context.get("top_level", True) copy = self.copy(deep=False) original_data = getattr(copy, "data", Undefined) copy.data = _prepare_data(original_data, context) if original_data is not Undefined: context["data"] = original_data # remaining to_dict calls are not at top level context["top_level"] = False kwargs["context"] = context try: dct = super(TopLevelMixin, copy).to_dict(*args, **kwargs) except jsonschema.ValidationError: dct = None # If we hit an error, then re-convert with validate='deep' to get # a more useful traceback. We don't do this by default because it's # much slower in the case that there are no errors. if dct is None: kwargs["validate"] = "deep" dct = super(TopLevelMixin, copy).to_dict(*args, **kwargs) # TODO: following entries are added after validation. Should they be validated? if is_top_level: # since this is top-level we add $schema if it's missing if "$schema" not in dct: dct["$schema"] = SCHEMA_URL # apply theme from theme registry the_theme = themes.get() dct = utils.update_nested(the_theme(), dct, copy=True) # update datasets if context["datasets"]: dct.setdefault("datasets", {}).update(context["datasets"]) return dct def to_html( self, base_url="https://cdn.jsdelivr.net/npm/", output_div="vis", embed_options=None, json_kwds=None, fullhtml=True, requirejs=False, ): return utils.spec_to_html( self.to_dict(), mode="vega-lite", vegalite_version=VEGALITE_VERSION, vegaembed_version=VEGAEMBED_VERSION, vega_version=VEGA_VERSION, base_url=base_url, output_div=output_div, embed_options=embed_options, json_kwds=json_kwds, fullhtml=fullhtml, requirejs=requirejs, ) @utils.deprecation.deprecated( "Chart.savechart is deprecated in favor of Chart.save" ) def savechart(self, fp, format=None, **kwargs): """Save a chart to file in a variety of formats Supported formats are json, html, png, svg Parameters ---------- fp : string filename or file-like object file in which to write the chart. format : string (optional) the format to write: one of ['json', 'html', 'png', 'svg']. If not specified, the format will be determined from the filename. **kwargs : Additional keyword arguments are passed to the output method associated with the specified format. """ return self.save(fp, format=None, **kwargs) def save( self, fp, format=None, override_data_transformer=True, scale_factor=1.0, vegalite_version=VEGALITE_VERSION, vega_version=VEGA_VERSION, vegaembed_version=VEGAEMBED_VERSION, **kwargs, ): """Save a chart to file in a variety of formats Supported formats are json, html, png, svg Parameters ---------- fp : string filename or file-like object file in which to write the chart. format : string (optional) the format to write: one of ['json', 'html', 'png', 'svg']. If not specified, the format will be determined from the filename. override_data_transformer : boolean (optional) If True (default), then the save action will be done with the MaxRowsError disabled. If False, then do not change the data transformer. scale_factor : float For svg or png formats, scale the image by this factor when saving. This can be used to control the size or resolution of the output. Default is 1.0 **kwargs : Additional keyword arguments are passed to the output method associated with the specified format. """ from ...utils.save import save kwds = dict( chart=self, fp=fp, format=format, scale_factor=scale_factor, vegalite_version=vegalite_version, vega_version=vega_version, vegaembed_version=vegaembed_version, **kwargs, ) # By default we override the data transformer. This makes it so # that save() will succeed even for large datasets that would # normally trigger a MaxRowsError if override_data_transformer: with data_transformers.disable_max_rows(): result = save(**kwds) else: result = save(**kwds) return result # Fallback for when rendering fails; the full repr is too long to be # useful in nearly all cases. def __repr__(self): return "alt.{}(...)".format(self.__class__.__name__) # Layering and stacking def __add__(self, other): if not isinstance(other, TopLevelMixin): raise ValueError("Only Chart objects can be layered.") return layer(self, other) def __and__(self, other): if not isinstance(other, TopLevelMixin): raise ValueError("Only Chart objects can be concatenated.") return vconcat(self, other) def __or__(self, other): if not isinstance(other, TopLevelMixin): raise ValueError("Only Chart objects can be concatenated.") return hconcat(self, other) def repeat( self, repeat=Undefined, row=Undefined, column=Undefined, columns=Undefined, **kwargs, ): """Return a RepeatChart built from the chart Fields within the chart can be set to correspond to the row or column using `alt.repeat('row')` and `alt.repeat('column')`. Parameters ---------- repeat : list a list of data column names to be repeated. This cannot be used along with the ``row`` or ``column`` argument. row : list a list of data column names to be mapped to the row facet column : list a list of data column names to be mapped to the column facet columns : int the maximum number of columns before wrapping. Only referenced if ``repeat`` is specified. **kwargs : additional keywords passed to RepeatChart. Returns ------- chart : RepeatChart a repeated chart. """ repeat_specified = repeat is not Undefined rowcol_specified = row is not Undefined or column is not Undefined if repeat_specified and rowcol_specified: raise ValueError( "repeat argument cannot be combined with row/column argument." ) if repeat_specified: repeat = repeat else: repeat = core.RepeatMapping(row=row, column=column) return RepeatChart(spec=self, repeat=repeat, columns=columns, **kwargs) def properties(self, **kwargs): """Set top-level properties of the Chart. Argument names and types are the same as class initialization. """ copy = self.copy(deep=False) for key, val in kwargs.items(): if key == "selection" and isinstance(val, Selection): # For backward compatibility with old selection interface. setattr(copy, key, {val.name: val.selection}) else: # Don't validate data, because it hasn't been processed. if key != "data": self.validate_property(key, val) setattr(copy, key, val) return copy def project( self, type="mercator", center=Undefined, clipAngle=Undefined, clipExtent=Undefined, coefficient=Undefined, distance=Undefined, fraction=Undefined, lobes=Undefined, parallel=Undefined, precision=Undefined, radius=Undefined, ratio=Undefined, reflectX=Undefined, reflectY=Undefined, rotate=Undefined, scale=Undefined, spacing=Undefined, tilt=Undefined, translate=Undefined, **kwds, ): """Add a geographic projection to the chart. This is generally used either with ``mark_geoshape`` or with the ``latitude``/``longitude`` encodings. Available projection types are ['albers', 'albersUsa', 'azimuthalEqualArea', 'azimuthalEquidistant', 'conicConformal', 'conicEqualArea', 'conicEquidistant', 'equalEarth', 'equirectangular', 'gnomonic', 'identity', 'mercator', 'orthographic', 'stereographic', 'transverseMercator'] Attributes ---------- type : ProjectionType The cartographic projection to use. This value is case-insensitive, for example `"albers"` and `"Albers"` indicate the same projection type. You can find all valid projection types [in the documentation](https://vega.github.io/vega-lite/docs/projection.html#projection-types). **Default value:** `mercator` center : List(float) Sets the projection’s center to the specified center, a two-element array of longitude and latitude in degrees. **Default value:** `[0, 0]` clipAngle : float Sets the projection’s clipping circle radius to the specified angle in degrees. If `null`, switches to [antimeridian](http://bl.ocks.org/mbostock/3788999) cutting rather than small-circle clipping. clipExtent : List(List(float)) Sets the projection’s viewport clip extent to the specified bounds in pixels. The extent bounds are specified as an array `[[x0, y0], [x1, y1]]`, where `x0` is the left-side of the viewport, `y0` is the top, `x1` is the right and `y1` is the bottom. If `null`, no viewport clipping is performed. coefficient : float distance : float fraction : float lobes : float parallel : float precision : Mapping(required=[length]) Sets the threshold for the projection’s [adaptive resampling](http://bl.ocks.org/mbostock/3795544) to the specified value in pixels. This value corresponds to the [Douglas–Peucker distance](http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm). If precision is not specified, returns the projection’s current resampling precision which defaults to `√0.5 ≅ 0.70710…`. radius : float ratio : float reflectX : boolean reflectY : boolean rotate : List(float) Sets the projection’s three-axis rotation to the specified angles, which must be a two- or three-element array of numbers [`lambda`, `phi`, `gamma`] specifying the rotation angles in degrees about each spherical axis. (These correspond to yaw, pitch and roll.) **Default value:** `[0, 0, 0]` scale : float Sets the projection's scale (zoom) value, overriding automatic fitting. spacing : float tilt : float translate : List(float) Sets the projection's translation (pan) value, overriding automatic fitting. """ projection = core.Projection( center=center, clipAngle=clipAngle, clipExtent=clipExtent, coefficient=coefficient, distance=distance, fraction=fraction, lobes=lobes, parallel=parallel, precision=precision, radius=radius, ratio=ratio, reflectX=reflectX, reflectY=reflectY, rotate=rotate, scale=scale, spacing=spacing, tilt=tilt, translate=translate, type=type, **kwds, ) return self.properties(projection=projection) def _add_transform(self, *transforms): """Copy the chart and add specified transforms to chart.transform""" copy = self.copy(deep=["transform"]) if copy.transform is Undefined: copy.transform = [] copy.transform.extend(transforms) return copy def transform_aggregate(self, aggregate=Undefined, groupby=Undefined, **kwds): """ Add an AggregateTransform to the schema. Parameters ---------- aggregate : List(:class:`AggregatedFieldDef`) Array of objects that define fields to aggregate. groupby : List(string) The data fields to group by. If not specified, a single group containing all data objects will be used. **kwds : additional keywords are converted to aggregates using standard shorthand parsing. Returns ------- self : Chart object returns chart to allow for chaining Examples -------- The aggregate transform allows you to specify transforms directly using the same shorthand syntax as used in encodings: >>> import altair as alt >>> chart1 = alt.Chart().transform_aggregate( ... mean_acc='mean(Acceleration)', ... groupby=['Origin'] ... ) >>> print(chart1.transform[0].to_json()) # doctest: +NORMALIZE_WHITESPACE { "aggregate": [ { "as": "mean_acc", "field": "Acceleration", "op": "mean" } ], "groupby": [ "Origin" ] } It also supports including AggregatedFieldDef instances or dicts directly, so you can create the above transform like this: >>> chart2 = alt.Chart().transform_aggregate( ... [alt.AggregatedFieldDef(field='Acceleration', op='mean', ... **{'as': 'mean_acc'})], ... groupby=['Origin'] ... ) >>> chart2.transform == chart1.transform True See Also -------- alt.AggregateTransform : underlying transform object """ if aggregate is Undefined: aggregate = [] for key, val in kwds.items(): parsed = utils.parse_shorthand(val) dct = { "as": key, "field": parsed.get("field", Undefined), "op": parsed.get("aggregate", Undefined), } aggregate.append(core.AggregatedFieldDef(**dct)) return self._add_transform( core.AggregateTransform(aggregate=aggregate, groupby=groupby) ) def transform_bin(self, as_=Undefined, field=Undefined, bin=True, **kwargs): """ Add a BinTransform to the schema. Parameters ---------- as_ : anyOf(string, List(string)) The output fields at which to write the start and end bin values. bin : anyOf(boolean, :class:`BinParams`) An object indicating bin properties, or simply ``true`` for using default bin parameters. field : string The data field to bin. Returns ------- self : Chart object returns chart to allow for chaining Examples -------- >>> import altair as alt >>> chart = alt.Chart().transform_bin("x_binned", "x") >>> chart.transform[0] BinTransform({ as: 'x_binned', bin: True, field: 'x' }) >>> chart = alt.Chart().transform_bin("x_binned", "x", ... bin=alt.Bin(maxbins=10)) >>> chart.transform[0] BinTransform({ as: 'x_binned', bin: BinParams({ maxbins: 10 }), field: 'x' }) See Also -------- alt.BinTransform : underlying transform object """ if as_ is not Undefined: if "as" in kwargs: raise ValueError( "transform_bin: both 'as_' and 'as' passed as arguments." ) kwargs["as"] = as_ kwargs["bin"] = bin kwargs["field"] = field return self._add_transform(core.BinTransform(**kwargs)) def transform_calculate(self, as_=Undefined, calculate=Undefined, **kwargs): """ Add a CalculateTransform to the schema. Parameters ---------- as_ : string The field for storing the computed formula value. calculate : string or alt.expr expression A `expression `__ string. Use the variable ``datum`` to refer to the current data object. **kwargs transforms can also be passed by keyword argument; see Examples Returns ------- self : Chart object returns chart to allow for chaining Examples -------- >>> import altair as alt >>> from altair import datum, expr >>> chart = alt.Chart().transform_calculate(y = 2 * expr.sin(datum.x)) >>> chart.transform[0] CalculateTransform({ as: 'y', calculate: (2 * sin(datum.x)) }) It's also possible to pass the ``CalculateTransform`` arguments directly: >>> kwds = {'as': 'y', 'calculate': '2 * sin(datum.x)'} >>> chart = alt.Chart().transform_calculate(**kwds) >>> chart.transform[0] CalculateTransform({ as: 'y', calculate: '2 * sin(datum.x)' }) As the first form is easier to write and understand, that is the recommended method. See Also -------- alt.CalculateTransform : underlying transform object """ if as_ is Undefined: as_ = kwargs.pop("as", Undefined) else: if "as" in kwargs: raise ValueError( "transform_calculate: both 'as_' and 'as' passed as arguments." ) if as_ is not Undefined or calculate is not Undefined: dct = {"as": as_, "calculate": calculate} self = self._add_transform(core.CalculateTransform(**dct)) for as_, calculate in kwargs.items(): dct = {"as": as_, "calculate": calculate} self = self._add_transform(core.CalculateTransform(**dct)) return self def transform_impute( self, impute, key, frame=Undefined, groupby=Undefined, keyvals=Undefined, method=Undefined, value=Undefined, ): """ Add an ImputeTransform to the schema. Parameters ---------- impute : string The data field for which the missing values should be imputed. key : string A key field that uniquely identifies data objects within a group. Missing key values (those occurring in the data but not in the current group) will be imputed. frame : List(anyOf(None, float)) A frame specification as a two-element array used to control the window over which the specified method is applied. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. For example, the value ``[-5, 5]`` indicates that the window should include five objects preceding and five objects following the current object. **Default value:** : ``[null, null]`` indicating that the window includes all objects. groupby : List(string) An optional array of fields by which to group the values. Imputation will then be performed on a per-group basis. keyvals : anyOf(List(Mapping(required=[])), :class:`ImputeSequence`) Defines the key values that should be considered for imputation. An array of key values or an object defining a `number sequence `__. If provided, this will be used in addition to the key values observed within the input data. If not provided, the values will be derived from all unique values of the ``key`` field. For ``impute`` in ``encoding``, the key field is the x-field if the y-field is imputed, or vice versa. If there is no impute grouping, this property *must* be specified. method : :class:`ImputeMethod` The imputation method to use for the field value of imputed data objects. One of ``value``, ``mean``, ``median``, ``max`` or ``min``. **Default value:** ``"value"`` value : Mapping(required=[]) The field value to use when the imputation ``method`` is ``"value"``. Returns ------- self : Chart object returns chart to allow for chaining See Also -------- alt.ImputeTransform : underlying transform object """ return self._add_transform( core.ImputeTransform( impute=impute, key=key, frame=frame, groupby=groupby, keyvals=keyvals, method=method, value=value, ) ) def transform_joinaggregate( self, joinaggregate=Undefined, groupby=Undefined, **kwargs ): """ Add a JoinAggregateTransform to the schema. Parameters ---------- joinaggregate : List(:class:`JoinAggregateFieldDef`) The definition of the fields in the join aggregate, and what calculations to use. groupby : List(string) The data fields for partitioning the data objects into separate groups. If unspecified, all data points will be in a single group. **kwargs joinaggregates can also be passed by keyword argument; see Examples. Returns ------- self : Chart object returns chart to allow for chaining Examples -------- >>> import altair as alt >>> chart = alt.Chart().transform_joinaggregate(x='sum(y)') >>> chart.transform[0] JoinAggregateTransform({ joinaggregate: [JoinAggregateFieldDef({ as: 'x', field: 'y', op: 'sum' })] }) See Also -------- alt.JoinAggregateTransform : underlying transform object """ if joinaggregate is Undefined: joinaggregate = [] for key, val in kwargs.items(): parsed = utils.parse_shorthand(val) dct = { "as": key, "field": parsed.get("field", Undefined), "op": parsed.get("aggregate", Undefined), } joinaggregate.append(core.JoinAggregateFieldDef(**dct)) return self._add_transform( core.JoinAggregateTransform(joinaggregate=joinaggregate, groupby=groupby) ) def transform_filter(self, filter, **kwargs): """ Add a FilterTransform to the schema. Parameters ---------- filter : a filter expression or :class:`LogicalOperandPredicate` The `filter` property must be one of the predicate definitions: (1) a string or alt.expr expression (2) a range predicate (3) a selection predicate (4) a logical operand combining (1)-(3) (5) a Selection object Returns ------- self : Chart object returns chart to allow for chaining See Also -------- alt.FilterTransform : underlying transform object """ if isinstance(filter, Selection): filter = {"selection": filter.name} elif isinstance(filter, core.SelectionOperand): filter = {"selection": filter} return self._add_transform(core.FilterTransform(filter=filter, **kwargs)) def transform_flatten(self, flatten, as_=Undefined): """Add a FlattenTransform to the schema. Parameters ---------- flatten : List(string) An array of one or more data fields containing arrays to flatten. If multiple fields are specified, their array values should have a parallel structure, ideally with the same length. If the lengths of parallel arrays do not match, the longest array will be used with ``null`` values added for missing entries. as : List(string) The output field names for extracted array values. **Default value:** The field name of the corresponding array field Returns ------- self : Chart object returns chart to allow for chaining See Also -------- alt.FlattenTransform : underlying transform object """ return self._add_transform( core.FlattenTransform(flatten=flatten, **{"as": as_}) ) def transform_fold(self, fold, as_=Undefined): """Add a FoldTransform to the schema. Parameters ---------- fold : List(string) An array of data fields indicating the properties to fold. as : [string, string] The output field names for the key and value properties produced by the fold transform. Default: ``["key", "value"]`` Returns ------- self : Chart object returns chart to allow for chaining See Also -------- alt.FoldTransform : underlying transform object """ return self._add_transform(core.FoldTransform(fold=fold, **{"as": as_})) def transform_lookup( self, as_=Undefined, from_=Undefined, lookup=Undefined, default=Undefined, **kwargs, ): """Add a LookupTransform to the schema Attributes ---------- as_ : anyOf(string, List(string)) The field or fields for storing the computed formula value. If ``from.fields`` is specified, the transform will use the same names for ``as``. If ``from.fields`` is not specified, ``as`` has to be a string and we put the whole object into the data under the specified name. from_ : :class:`LookupData` Secondary data reference. lookup : string Key in primary data source. default : string The default value to use if lookup fails. **Default value:** ``null`` Returns ------- self : Chart object returns chart to allow for chaining See Also -------- alt.LookupTransform : underlying transform object """ if as_ is not Undefined: if "as" in kwargs: raise ValueError( "transform_lookup: both 'as_' and 'as' passed as arguments." ) kwargs["as"] = as_ if from_ is not Undefined: if "from" in kwargs: raise ValueError( "transform_lookup: both 'from_' and 'from' passed as arguments." ) kwargs["from"] = from_ kwargs["lookup"] = lookup kwargs["default"] = default return self._add_transform(core.LookupTransform(**kwargs)) def transform_sample(self, sample=1000): """ Add a SampleTransform to the schema. Parameters ---------- sample : float The maximum number of data objects to include in the sample. Default: 1000. Returns ------- self : Chart object returns chart to allow for chaining See Also -------- alt.SampleTransform : underlying transform object """ return self._add_transform(core.SampleTransform(sample)) def transform_stack(self, as_, stack, groupby, offset=Undefined, sort=Undefined): """ Add a StackTransform to the schema. Parameters ---------- as_ : anyOf(string, List(string)) Output field names. This can be either a string or an array of strings with two elements denoting the name for the fields for stack start and stack end respectively. If a single string(eg."val") is provided, the end field will be "val_end". stack : string The field which is stacked. groupby : List(string) The data fields to group by. offset : enum('zero', 'center', 'normalize') Mode for stacking marks. Default: 'zero'. sort : List(:class:`SortField`) Field that determines the order of leaves in the stacked charts. Returns ------- self : Chart object returns chart to allow for chaining See Also -------- alt.StackTransform : underlying transform object """ return self._add_transform( core.StackTransform( stack=stack, groupby=groupby, offset=offset, sort=sort, **{"as": as_} ) ) def transform_timeunit( self, as_=Undefined, field=Undefined, timeUnit=Undefined, **kwargs ): """ Add a TimeUnitTransform to the schema. Parameters ---------- as_ : string The output field to write the timeUnit value. field : string The data field to apply time unit. timeUnit : :class:`TimeUnit` The timeUnit. **kwargs transforms can also be passed by keyword argument; see Examples Returns ------- self : Chart object returns chart to allow for chaining Examples -------- >>> import altair as alt >>> from altair import datum, expr >>> chart = alt.Chart().transform_timeunit(month='month(date)') >>> chart.transform[0] TimeUnitTransform({ as: 'month', field: 'date', timeUnit: 'month' }) It's also possible to pass the ``TimeUnitTransform`` arguments directly; this is most useful in cases where the desired field name is not a valid python identifier: >>> kwds = {'as': 'month', 'timeUnit': 'month', 'field': 'The Month'} >>> chart = alt.Chart().transform_timeunit(**kwds) >>> chart.transform[0] TimeUnitTransform({ as: 'month', field: 'The Month', timeUnit: 'month' }) As the first form is easier to write and understand, that is the recommended method. See Also -------- alt.TimeUnitTransform : underlying transform object """ if as_ is Undefined: as_ = kwargs.pop("as", Undefined) else: if "as" in kwargs: raise ValueError( "transform_timeunit: both 'as_' and 'as' passed as arguments." ) if as_ is not Undefined: dct = {"as": as_, "timeUnit": timeUnit, "field": field} self = self._add_transform(core.TimeUnitTransform(**dct)) for as_, shorthand in kwargs.items(): dct = utils.parse_shorthand( shorthand, parse_timeunits=True, parse_aggregates=False, parse_types=False, ) dct.pop("type", None) dct["as"] = as_ if "timeUnit" not in dct: raise ValueError("'{}' must include a valid timeUnit".format(shorthand)) self = self._add_transform(core.TimeUnitTransform(**dct)) return self def transform_window( self, window=Undefined, frame=Undefined, groupby=Undefined, ignorePeers=Undefined, sort=Undefined, **kwargs, ): """Add a WindowTransform to the schema Parameters ---------- window : List(:class:`WindowFieldDef`) The definition of the fields in the window, and what calculations to use. frame : List(anyOf(None, float)) A frame specification as a two-element array indicating how the sliding window should proceed. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. The default value is ``[null, 0]``, indicating that the sliding window includes the current object and all preceding objects. The value ``[-5, 5]`` indicates that the window should include five objects preceding and five objects following the current object. Finally, ``[null, null]`` indicates that the window frame should always include all data objects. The only operators affected are the aggregation operations and the ``first_value``, ``last_value``, and ``nth_value`` window operations. The other window operations are not affected by this. **Default value:** : ``[null, 0]`` (includes the current object and all preceding objects) groupby : List(string) The data fields for partitioning the data objects into separate windows. If unspecified, all data points will be in a single group. ignorePeers : boolean Indicates if the sliding window frame should ignore peer values. (Peer values are those considered identical by the sort criteria). The default is false, causing the window frame to expand to include all peer values. If set to true, the window frame will be defined by offset values only. This setting only affects those operations that depend on the window frame, namely aggregation operations and the first_value, last_value, and nth_value window operations. **Default value:** ``false`` sort : List(:class:`SortField`) A sort field definition for sorting data objects within a window. If two data objects are considered equal by the comparator, they are considered “peer†values of equal rank. If sort is not specified, the order is undefined: data objects are processed in the order they are observed and none are considered peers (the ignorePeers parameter is ignored and treated as if set to ``true`` ). **kwargs transforms can also be passed by keyword argument; see Examples Examples -------- A cumulative line chart >>> import altair as alt >>> import numpy as np >>> import pandas as pd >>> data = pd.DataFrame({'x': np.arange(100), ... 'y': np.random.randn(100)}) >>> chart = alt.Chart(data).mark_line().encode( ... x='x:Q', ... y='ycuml:Q' ... ).transform_window( ... ycuml='sum(y)' ... ) >>> chart.transform[0] WindowTransform({ window: [WindowFieldDef({ as: 'ycuml', field: 'y', op: 'sum' })] }) """ if kwargs: if window is Undefined: window = [] for as_, shorthand in kwargs.items(): kwds = {"as": as_} kwds.update( utils.parse_shorthand( shorthand, parse_aggregates=False, parse_window_ops=True, parse_timeunits=False, parse_types=False, ) ) window.append(core.WindowFieldDef(**kwds)) return self._add_transform( core.WindowTransform( window=window, frame=frame, groupby=groupby, ignorePeers=ignorePeers, sort=sort, ) ) # Display-related methods def _repr_mimebundle_(self, include=None, exclude=None): """Return a MIME bundle for display in Jupyter frontends.""" # Catch errors explicitly to get around issues in Jupyter frontend # see https://github.com/ipython/ipython/issues/11038 try: dct = self.to_dict() except Exception: utils.display_traceback(in_ipython=True) return {} else: return renderers.get()(dct) def display(self, renderer=Undefined, theme=Undefined, actions=Undefined, **kwargs): """Display chart in Jupyter notebook or JupyterLab Parameters are passed as options to vega-embed within supported frontends. See https://github.com/vega/vega-embed#options for details. Parameters ---------- renderer : string ('canvas' or 'svg') The renderer to use theme : string The Vega theme name to use; see https://github.com/vega/vega-themes actions : bool or dict Specify whether action links ("Open In Vega Editor", etc.) are included in the view. **kwargs : Additional parameters are also passed to vega-embed as options. """ from IPython.display import display if renderer is not Undefined: kwargs["renderer"] = renderer if theme is not Undefined: kwargs["theme"] = theme if actions is not Undefined: kwargs["actions"] = actions if kwargs: options = renderers.options.copy() options["embed_options"] = options.get("embed_options", {}).copy() options["embed_options"].update(kwargs) with renderers.enable(**options): display(self) else: display(self) def serve( self, ip="127.0.0.1", port=8888, n_retries=50, files=None, jupyter_warning=True, open_browser=True, http_server=None, **kwargs, ): """Open a browser window and display a rendering of the chart Parameters ---------- html : string HTML to serve ip : string (default = '127.0.0.1') ip address at which the HTML will be served. port : int (default = 8888) the port at which to serve the HTML n_retries : int (default = 50) the number of nearby ports to search if the specified port is already in use. files : dictionary (optional) dictionary of extra content to serve jupyter_warning : bool (optional) if True (default), then print a warning if this is used within the Jupyter notebook open_browser : bool (optional) if True (default), then open a web browser to the given HTML http_server : class (optional) optionally specify an HTTPServer class to use for showing the figure. The default is Python's basic HTTPServer. **kwargs : additional keyword arguments passed to the save() method """ from ...utils.server import serve html = io.StringIO() self.save(html, format="html", **kwargs) html.seek(0) serve( html.read(), ip=ip, port=port, n_retries=n_retries, files=files, jupyter_warning=jupyter_warning, open_browser=open_browser, http_server=http_server, ) @utils.use_signature(core.Resolve) def _set_resolve(self, **kwargs): """Copy the chart and update the resolve property with kwargs""" if not hasattr(self, "resolve"): raise ValueError( "{} object has no attribute " "'resolve'".format(self.__class__) ) copy = self.copy(deep=["resolve"]) if copy.resolve is Undefined: copy.resolve = core.Resolve() for key, val in kwargs.items(): copy.resolve[key] = val return copy @utils.use_signature(core.AxisResolveMap) def resolve_axis(self, *args, **kwargs): return self._set_resolve(axis=core.AxisResolveMap(*args, **kwargs)) @utils.use_signature(core.LegendResolveMap) def resolve_legend(self, *args, **kwargs): return self._set_resolve(legend=core.LegendResolveMap(*args, **kwargs)) @utils.use_signature(core.ScaleResolveMap) def resolve_scale(self, *args, **kwargs): return self._set_resolve(scale=core.ScaleResolveMap(*args, **kwargs)) class _EncodingMixin(object): @utils.use_signature(core.FacetedEncoding) def encode(self, *args, **kwargs): # Convert args to kwargs based on their types. kwargs = utils.infer_encoding_types(args, kwargs, channels) # get a copy of the dict representation of the previous encoding copy = self.copy(deep=["encoding"]) encoding = copy._get("encoding", {}) if isinstance(encoding, core.VegaLiteSchema): encoding = {k: v for k, v in encoding._kwds.items() if v is not Undefined} # update with the new encodings, and apply them to the copy encoding.update(kwargs) copy.encoding = core.FacetedEncoding(**encoding) return copy def facet( self, facet=Undefined, row=Undefined, column=Undefined, data=Undefined, columns=Undefined, **kwargs, ): """Create a facet chart from the current chart. Faceted charts require data to be specified at the top level; if data is not specified, the data from the current chart will be used at the top level. Parameters ---------- facet : string or alt.Facet (optional) The data column to use as an encoding for a wrapped facet. If specified, then neither row nor column may be specified. column : string or alt.Column (optional) The data column to use as an encoding for a column facet. May be combined with row argument, but not with facet argument. row : string or alt.Column (optional) The data column to use as an encoding for a row facet. May be combined with column argument, but not with facet argument. data : string or dataframe (optional) The dataset to use for faceting. If not supplied, then data must be specified in the top-level chart that calls this method. columns : integer the maximum number of columns for a wrapped facet. Returns ------- self : for chaining """ facet_specified = facet is not Undefined rowcol_specified = row is not Undefined or column is not Undefined if facet_specified and rowcol_specified: raise ValueError( "facet argument cannot be combined with row/column argument." ) if data is Undefined: if self.data is Undefined: raise ValueError( "Facet charts require data to be specified at the top level." ) self = self.copy(deep=False) data, self.data = self.data, Undefined if facet_specified: if isinstance(facet, str): facet = channels.Facet(facet) else: facet = FacetMapping(row=row, column=column) return FacetChart(spec=self, facet=facet, data=data, columns=columns, **kwargs) class Chart( TopLevelMixin, _EncodingMixin, mixins.MarkMethodMixin, core.TopLevelUnitSpec ): """Create a basic Altair/Vega-Lite chart. Although it is possible to set all Chart properties as constructor attributes, it is more idiomatic to use methods such as ``mark_point()``, ``encode()``, ``transform_filter()``, ``properties()``, etc. See Altair's documentation for details and examples: http://altair-viz.github.io/. Attributes ---------- data : Data An object describing the data source mark : AnyMark A string describing the mark type (one of `"bar"`, `"circle"`, `"square"`, `"tick"`, `"line"`, * `"area"`, `"point"`, `"rule"`, `"geoshape"`, and `"text"`) or a MarkDef object. encoding : FacetedEncoding A key-value mapping between encoding channels and definition of fields. autosize : anyOf(AutosizeType, AutoSizeParams) Sets how the visualization size should be determined. If a string, should be one of `"pad"`, `"fit"` or `"none"`. Object values can additionally specify parameters for content sizing and automatic resizing. `"fit"` is only supported for single and layered views that don't use `rangeStep`. __Default value__: `pad` background : string CSS color property to use as the background of visualization. **Default value:** none (transparent) config : Config Vega-Lite configuration object. This property can only be defined at the top-level of a specification. description : string Description of this mark for commenting purpose. height : float The height of a visualization. name : string Name of the visualization for later reference. padding : Padding The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format `{"left": 5, "top": 5, "right": 5, "bottom": 5}` to specify padding for each side of the visualization. __Default value__: `5` projection : Projection An object defining properties of geographic projection. Works with `"geoshape"` marks and `"point"` or `"line"` marks that have a channel (one or more of `"X"`, `"X2"`, `"Y"`, `"Y2"`) with type `"latitude"`, or `"longitude"`. selection : Mapping(required=[]) A key-value mapping between selection names and definitions. title : anyOf(string, TitleParams) Title for the plot. transform : List(Transform) An array of data transformations such as filter and new field calculation. width : float The width of a visualization. """ def __init__( self, data=Undefined, encoding=Undefined, mark=Undefined, width=Undefined, height=Undefined, **kwargs, ): super(Chart, self).__init__( data=data, encoding=encoding, mark=mark, width=width, height=height, **kwargs, ) @classmethod def from_dict(cls, dct, validate=True): """Construct class from a dictionary representation Parameters ---------- dct : dictionary The dict from which to construct the class validate : boolean If True (default), then validate the input against the schema. Returns ------- obj : Chart object The wrapped schema Raises ------ jsonschema.ValidationError : if validate=True and dct does not conform to the schema """ for class_ in TopLevelMixin.__subclasses__(): if class_ is Chart: class_ = super(Chart, cls) try: return class_.from_dict(dct, validate=validate) except jsonschema.ValidationError: pass # As a last resort, try using the Root vegalite object return core.Root.from_dict(dct, validate) def add_selection(self, *selections): """Add one or more selections to the chart.""" if not selections: return self copy = self.copy(deep=["selection"]) if copy.selection is Undefined: copy.selection = {} for s in selections: copy.selection[s.name] = s.selection return copy def interactive(self, name=None, bind_x=True, bind_y=True): """Make chart axes scales interactive Parameters ---------- name : string The selection name to use for the axes scales. This name should be unique among all selections within the chart. bind_x : boolean, default True If true, then bind the interactive scales to the x-axis bind_y : boolean, default True If true, then bind the interactive scales to the y-axis Returns ------- chart : copy of self, with interactive axes added """ encodings = [] if bind_x: encodings.append("x") if bind_y: encodings.append("y") return self.add_selection( selection_interval(bind="scales", encodings=encodings) ) def _check_if_valid_subspec(spec, classname): """Check if the spec is a valid sub-spec. If it is not, then raise a ValueError """ err = ( 'Objects with "{0}" attribute cannot be used within {1}. ' "Consider defining the {0} attribute in the {1} object instead." ) if not isinstance(spec, (core.SchemaBase, dict)): raise ValueError("Only chart objects can be used in {0}.".format(classname)) for attr in TOPLEVEL_ONLY_KEYS: if isinstance(spec, core.SchemaBase): val = getattr(spec, attr, Undefined) else: val = spec.get(attr, Undefined) if val is not Undefined: raise ValueError(err.format(attr, classname)) def _check_if_can_be_layered(spec): """Check if the spec can be layered.""" def _get(spec, attr): if isinstance(spec, core.SchemaBase): return spec._get(attr) else: return spec.get(attr, Undefined) encoding = _get(spec, "encoding") if encoding is not Undefined: for channel in ["row", "column", "facet"]: if _get(encoding, channel) is not Undefined: raise ValueError("Faceted charts cannot be layered.") if isinstance(spec, (Chart, LayerChart)): return if not isinstance(spec, (core.SchemaBase, dict)): raise ValueError("Only chart objects can be layered.") if _get(spec, "facet") is not Undefined: raise ValueError("Faceted charts cannot be layered.") if isinstance(spec, FacetChart) or _get(spec, "facet") is not Undefined: raise ValueError("Faceted charts cannot be layered.") if isinstance(spec, RepeatChart) or _get(spec, "repeat") is not Undefined: raise ValueError("Repeat charts cannot be layered.") if isinstance(spec, ConcatChart) or _get(spec, "concat") is not Undefined: raise ValueError("Concatenated charts cannot be layered.") if isinstance(spec, HConcatChart) or _get(spec, "hconcat") is not Undefined: raise ValueError("Concatenated charts cannot be layered.") if isinstance(spec, VConcatChart) or _get(spec, "vconcat") is not Undefined: raise ValueError("Concatenated charts cannot be layered.") @utils.use_signature(core.TopLevelRepeatSpec) class RepeatChart(TopLevelMixin, core.TopLevelRepeatSpec): """A chart repeated across rows and columns with small changes""" def __init__(self, data=Undefined, spec=Undefined, repeat=Undefined, **kwargs): _check_if_valid_subspec(spec, "RepeatChart") super(RepeatChart, self).__init__(data=data, spec=spec, repeat=repeat, **kwargs) def interactive(self, name=None, bind_x=True, bind_y=True): """Make chart axes scales interactive Parameters ---------- name : string The selection name to use for the axes scales. This name should be unique among all selections within the chart. bind_x : boolean, default True If true, then bind the interactive scales to the x-axis bind_y : boolean, default True If true, then bind the interactive scales to the y-axis Returns ------- chart : copy of self, with interactive axes added """ copy = self.copy(deep=False) copy.spec = copy.spec.interactive(name=name, bind_x=bind_x, bind_y=bind_y) return copy def add_selection(self, *selections): """Add one or more selections to the chart.""" if not selections or self.spec is Undefined: return self copy = self.copy() copy.spec = copy.spec.add_selection(*selections) return copy def repeat(repeater="repeat"): """Tie a channel to the row or column within a repeated chart The output of this should be passed to the ``field`` attribute of a channel. Parameters ---------- repeater : {'row'|'column'|'repeat'} The repeater to tie the field to. Default is 'repeat'. Returns ------- repeat : RepeatRef object """ if repeater not in ["row", "column", "repeat"]: raise ValueError("repeater must be one of ['row', 'column', 'repeat']") return core.RepeatRef(repeat=repeater) @utils.use_signature(core.TopLevelConcatSpec) class ConcatChart(TopLevelMixin, core.TopLevelConcatSpec): """A chart with horizontally-concatenated facets""" def __init__(self, data=Undefined, concat=(), columns=Undefined, **kwargs): # TODO: move common data to top level? for spec in concat: _check_if_valid_subspec(spec, "ConcatChart") super(ConcatChart, self).__init__( data=data, concat=list(concat), columns=columns, **kwargs ) self.data, self.concat = _combine_subchart_data(self.data, self.concat) def __ior__(self, other): _check_if_valid_subspec(other, "ConcatChart") self.concat.append(other) self.data, self.concat = _combine_subchart_data(self.data, self.concat) return self def __or__(self, other): copy = self.copy(deep=["concat"]) copy |= other return copy def add_selection(self, *selections): """Add one or more selections to all subcharts.""" if not selections or not self.concat: return self copy = self.copy() copy.concat = [chart.add_selection(*selections) for chart in copy.concat] return copy def concat(*charts, **kwargs): """Concatenate charts horizontally""" return ConcatChart(concat=charts, **kwargs) @utils.use_signature(core.TopLevelHConcatSpec) class HConcatChart(TopLevelMixin, core.TopLevelHConcatSpec): """A chart with horizontally-concatenated facets""" def __init__(self, data=Undefined, hconcat=(), **kwargs): # TODO: move common data to top level? for spec in hconcat: _check_if_valid_subspec(spec, "HConcatChart") super(HConcatChart, self).__init__(data=data, hconcat=list(hconcat), **kwargs) self.data, self.hconcat = _combine_subchart_data(self.data, self.hconcat) def __ior__(self, other): _check_if_valid_subspec(other, "HConcatChart") self.hconcat.append(other) self.data, self.hconcat = _combine_subchart_data(self.data, self.hconcat) return self def __or__(self, other): copy = self.copy(deep=["hconcat"]) copy |= other return copy def add_selection(self, *selections): """Add one or more selections to all subcharts.""" if not selections or not self.hconcat: return self copy = self.copy() copy.hconcat = [chart.add_selection(*selections) for chart in copy.hconcat] return copy def hconcat(*charts, **kwargs): """Concatenate charts horizontally""" return HConcatChart(hconcat=charts, **kwargs) @utils.use_signature(core.TopLevelVConcatSpec) class VConcatChart(TopLevelMixin, core.TopLevelVConcatSpec): """A chart with vertically-concatenated facets""" def __init__(self, data=Undefined, vconcat=(), **kwargs): # TODO: move common data to top level? for spec in vconcat: _check_if_valid_subspec(spec, "VConcatChart") super(VConcatChart, self).__init__(data=data, vconcat=list(vconcat), **kwargs) self.data, self.vconcat = _combine_subchart_data(self.data, self.vconcat) def __iand__(self, other): _check_if_valid_subspec(other, "VConcatChart") self.vconcat.append(other) self.data, self.vconcat = _combine_subchart_data(self.data, self.vconcat) return self def __and__(self, other): copy = self.copy(deep=["vconcat"]) copy &= other return copy def add_selection(self, *selections): """Add one or more selections to all subcharts.""" if not selections or not self.vconcat: return self copy = self.copy() copy.vconcat = [chart.add_selection(*selections) for chart in copy.vconcat] return copy def vconcat(*charts, **kwargs): """Concatenate charts vertically""" return VConcatChart(vconcat=charts, **kwargs) @utils.use_signature(core.TopLevelLayerSpec) class LayerChart(TopLevelMixin, _EncodingMixin, core.TopLevelLayerSpec): """A Chart with layers within a single panel""" def __init__(self, data=Undefined, layer=(), **kwargs): # TODO: move common data to top level? # TODO: check for conflicting interaction for spec in layer: _check_if_valid_subspec(spec, "LayerChart") _check_if_can_be_layered(spec) super(LayerChart, self).__init__(data=data, layer=list(layer), **kwargs) self.data, self.layer = _combine_subchart_data(self.data, self.layer) def __iadd__(self, other): _check_if_valid_subspec(other, "LayerChart") _check_if_can_be_layered(other) self.layer.append(other) self.data, self.layer = _combine_subchart_data(self.data, self.layer) return self def __add__(self, other): copy = self.copy(deep=["layer"]) copy += other return copy def add_layers(self, *layers): copy = self.copy(deep=["layer"]) for layer in layers: copy += layer return copy def interactive(self, name=None, bind_x=True, bind_y=True): """Make chart axes scales interactive Parameters ---------- name : string The selection name to use for the axes scales. This name should be unique among all selections within the chart. bind_x : boolean, default True If true, then bind the interactive scales to the x-axis bind_y : boolean, default True If true, then bind the interactive scales to the y-axis Returns ------- chart : copy of self, with interactive axes added """ if not self.layer: raise ValueError( "LayerChart: cannot call interactive() until a " "layer is defined" ) copy = self.copy(deep=["layer"]) copy.layer[0] = copy.layer[0].interactive( name=name, bind_x=bind_x, bind_y=bind_y ) return copy def add_selection(self, *selections): """Add one or more selections to all subcharts.""" if not selections or not self.layer: return self copy = self.copy() copy.layer[0] = copy.layer[0].add_selection(*selections) return copy def layer(*charts, **kwargs): """layer multiple charts""" return LayerChart(layer=charts, **kwargs) @utils.use_signature(core.TopLevelFacetSpec) class FacetChart(TopLevelMixin, core.TopLevelFacetSpec): """A Chart with layers within a single panel""" def __init__(self, data=Undefined, spec=Undefined, facet=Undefined, **kwargs): _check_if_valid_subspec(spec, "FacetChart") super(FacetChart, self).__init__(data=data, spec=spec, facet=facet, **kwargs) def interactive(self, name=None, bind_x=True, bind_y=True): """Make chart axes scales interactive Parameters ---------- name : string The selection name to use for the axes scales. This name should be unique among all selections within the chart. bind_x : boolean, default True If true, then bind the interactive scales to the x-axis bind_y : boolean, default True If true, then bind the interactive scales to the y-axis Returns ------- chart : copy of self, with interactive axes added """ copy = self.copy(deep=False) copy.spec = copy.spec.interactive(name=name, bind_x=bind_x, bind_y=bind_y) return copy def add_selection(self, *selections): """Add one or more selections to the chart.""" if not selections or self.spec is Undefined: return self copy = self.copy() copy.spec = copy.spec.add_selection(*selections) return copy def topo_feature(url, feature, **kwargs): """A convenience function for extracting features from a topojson url Parameters ---------- url : string An URL from which to load the data set. feature : string The name of the TopoJSON object set to convert to a GeoJSON feature collection. For example, in a map of the world, there may be an object set named `"countries"`. Using the feature property, we can extract this set and generate a GeoJSON feature object for each country. **kwargs : additional keywords passed to TopoDataFormat """ return core.UrlData( url=url, format=core.TopoDataFormat(type="topojson", feature=feature, **kwargs) ) def _combine_subchart_data(data, subcharts): def remove_data(subchart): if subchart.data is not Undefined: subchart = subchart.copy() subchart.data = Undefined return subchart if not subcharts: # No subcharts = nothing to do. pass elif data is Undefined: # Top level has no data; all subchart data must # be identical to proceed. subdata = subcharts[0].data if subdata is not Undefined and all(c.data is subdata for c in subcharts): data = subdata subcharts = [remove_data(c) for c in subcharts] else: # Top level has data; subchart data must be either # undefined or identical to proceed. if all(c.data is Undefined or c.data is data for c in subcharts): subcharts = [remove_data(c) for c in subcharts] return data, subcharts @utils.use_signature(core.SequenceParams) def sequence(start, stop=None, step=Undefined, as_=Undefined, **kwds): """Sequence generator.""" if stop is None: start, stop = 0, start params = core.SequenceParams(start=start, stop=stop, step=step, **{"as": as_}) return core.SequenceGenerator(sequence=params, **kwds) @utils.use_signature(core.GraticuleParams) def graticule(**kwds): """Graticule generator.""" if not kwds: # graticule: True indicates default parameters graticule = True else: graticule = core.GraticuleParams(**kwds) return core.GraticuleGenerator(graticule=graticule) def sphere(): """Sphere generator.""" return core.SphereGenerator(sphere=True) altair-4.1.0/altair/vegalite/v3/data.py000066400000000000000000000017011364111050100176460ustar00rootroot00000000000000from ..data import ( MaxRowsError, curry, default_data_transformer, limit_rows, pipe, sample, to_csv, to_json, to_values, DataTransformerRegistry, ) # ============================================================================== # VegaLite 3 data transformers # ============================================================================== ENTRY_POINT_GROUP = "altair.vegalite.v3.data_transformer" # type: str data_transformers = DataTransformerRegistry( entry_point_group=ENTRY_POINT_GROUP ) # type: DataTransformerRegistry data_transformers.register("default", default_data_transformer) data_transformers.register("json", to_json) data_transformers.register("csv", to_csv) data_transformers.enable("default") __all__ = ( "MaxRowsError", "curry", "default_data_transformer", "limit_rows", "pipe", "sample", "to_csv", "to_json", "to_values", "data_transformers", ) altair-4.1.0/altair/vegalite/v3/display.py000066400000000000000000000100451364111050100204030ustar00rootroot00000000000000import os from ...utils.mimebundle import spec_to_mimebundle from ..display import Displayable from ..display import default_renderer_base from ..display import json_renderer_base from ..display import RendererRegistry from ..display import HTMLRenderer from .schema import SCHEMA_VERSION VEGALITE_VERSION = SCHEMA_VERSION.lstrip("v") VEGA_VERSION = "5" VEGAEMBED_VERSION = "5" # ============================================================================== # VegaLite v3 renderer logic # ============================================================================== # The MIME type for Vega-Lite 3.x releases. VEGALITE_MIME_TYPE = "application/vnd.vegalite.v3+json" # type: str # The entry point group that can be used by other packages to declare other # renderers that will be auto-detected. Explicit registration is also # allowed by the PluginRegistery API. ENTRY_POINT_GROUP = "altair.vegalite.v3.renderer" # type: str # The display message when rendering fails DEFAULT_DISPLAY = """\ If you see this message, it means the renderer has not been properly enabled for the frontend that you are using. For more information, see https://altair-viz.github.io/user_guide/troubleshooting.html """ renderers = RendererRegistry(entry_point_group=ENTRY_POINT_GROUP) here = os.path.dirname(os.path.realpath(__file__)) def default_renderer(spec, **metadata): return default_renderer_base(spec, VEGALITE_MIME_TYPE, DEFAULT_DISPLAY, **metadata) def json_renderer(spec, **metadata): return json_renderer_base(spec, DEFAULT_DISPLAY, **metadata) def png_renderer(spec, **metadata): return spec_to_mimebundle( spec, format="png", mode="vega-lite", vega_version=VEGA_VERSION, vegaembed_version=VEGAEMBED_VERSION, vegalite_version=VEGALITE_VERSION, **metadata, ) def svg_renderer(spec, **metadata): return spec_to_mimebundle( spec, format="svg", mode="vega-lite", vega_version=VEGA_VERSION, vegaembed_version=VEGAEMBED_VERSION, vegalite_version=VEGALITE_VERSION, **metadata, ) colab_renderer = HTMLRenderer( mode="vega-lite", fullhtml=True, requirejs=False, output_div="altair-viz", vega_version=VEGA_VERSION, vegaembed_version=VEGAEMBED_VERSION, vegalite_version=VEGALITE_VERSION, ) zeppelin_renderer = HTMLRenderer( mode="vega-lite", fullhtml=True, requirejs=False, vega_version=VEGA_VERSION, vegaembed_version=VEGAEMBED_VERSION, vegalite_version=VEGALITE_VERSION, ) kaggle_renderer = HTMLRenderer( mode="vega-lite", fullhtml=False, requirejs=True, vega_version=VEGA_VERSION, vegaembed_version=VEGAEMBED_VERSION, vegalite_version=VEGALITE_VERSION, ) html_renderer = HTMLRenderer( mode="vega-lite", template="universal", vega_version=VEGA_VERSION, vegaembed_version=VEGAEMBED_VERSION, vegalite_version=VEGALITE_VERSION, ) renderers.register("default", default_renderer) renderers.register("html", html_renderer) renderers.register("jupyterlab", default_renderer) renderers.register("nteract", default_renderer) renderers.register("colab", colab_renderer) renderers.register("kaggle", kaggle_renderer) renderers.register("json", json_renderer) renderers.register("png", png_renderer) renderers.register("svg", svg_renderer) renderers.register("zeppelin", zeppelin_renderer) renderers.enable("default") class VegaLite(Displayable): """An IPython/Jupyter display class for rendering VegaLite 3.""" renderers = renderers schema_path = (__name__, "schema/vega-lite-schema.json") def vegalite(spec, validate=True): """Render and optionally validate a VegaLite 3 spec. This will use the currently enabled renderer to render the spec. Parameters ========== spec: dict A fully compliant VegaLite 3 spec, with the data portion fully processed. validate: bool Should the spec be validated against the VegaLite 3 schema? """ from IPython.display import display display(VegaLite(spec, validate=validate)) altair-4.1.0/altair/vegalite/v3/schema/000077500000000000000000000000001364111050100176245ustar00rootroot00000000000000altair-4.1.0/altair/vegalite/v3/schema/__init__.py000066400000000000000000000002301364111050100217300ustar00rootroot00000000000000# flake8: noqa from .core import * from .channels import * SCHEMA_VERSION = 'v3.4.0' SCHEMA_URL = 'https://vega.github.io/schema/vega-lite/v3.4.0.json' altair-4.1.0/altair/vegalite/v3/schema/channels.py000066400000000000000000010013031364111050100217670ustar00rootroot00000000000000# The contents of this file are automatically written by # tools/generate_schema_wrapper.py. Do not modify directly. from . import core import pandas as pd from altair.utils.schemapi import Undefined from altair.utils import parse_shorthand class FieldChannelMixin(object): def to_dict(self, validate=True, ignore=(), context=None): context = context or {} shorthand = self._get('shorthand') field = self._get('field') if shorthand is not Undefined and field is not Undefined: raise ValueError("{} specifies both shorthand={} and field={}. " "".format(self.__class__.__name__, shorthand, field)) if isinstance(shorthand, (tuple, list)): # If given a list of shorthands, then transform it to a list of classes kwds = self._kwds.copy() kwds.pop('shorthand') return [self.__class__(sh, **kwds).to_dict(validate=validate, ignore=ignore, context=context) for sh in shorthand] if shorthand is Undefined: parsed = {} elif isinstance(shorthand, str): parsed = parse_shorthand(shorthand, data=context.get('data', None)) type_required = 'type' in self._kwds type_in_shorthand = 'type' in parsed type_defined_explicitly = self._get('type') is not Undefined if not type_required: # Secondary field names don't require a type argument in VegaLite 3+. # We still parse it out of the shorthand, but drop it here. parsed.pop('type', None) elif not (type_in_shorthand or type_defined_explicitly): if isinstance(context.get('data', None), pd.DataFrame): raise ValueError("{} encoding field is specified without a type; " "the type cannot be inferred because it does not " "match any column in the data.".format(shorthand)) else: raise ValueError("{} encoding field is specified without a type; " "the type cannot be automatically inferred because " "the data is not specified as a pandas.DataFrame." "".format(shorthand)) else: # Shorthand is not a string; we pass the definition to field, # and do not do any parsing. parsed = {'field': shorthand} # Set shorthand to Undefined, because it's not part of the base schema. self.shorthand = Undefined self._kwds.update({k: v for k, v in parsed.items() if self._get(k) is Undefined}) return super(FieldChannelMixin, self).to_dict( validate=validate, ignore=ignore, context=context ) class ValueChannelMixin(object): def to_dict(self, validate=True, ignore=(), context=None): context = context or {} condition = getattr(self, 'condition', Undefined) copy = self # don't copy unless we need to if condition is not Undefined: if isinstance(condition, core.SchemaBase): pass elif 'field' in condition and 'type' not in condition: kwds = parse_shorthand(condition['field'], context.get('data', None)) copy = self.copy(deep=['condition']) copy.condition.update(kwds) return super(ValueChannelMixin, copy).to_dict(validate=validate, ignore=ignore, context=context) class Color(FieldChannelMixin, core.StringFieldDefWithCondition): """Color schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "color" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Color, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class ColorValue(ValueChannelMixin, core.StringValueDefWithCondition): """ColorValue schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "color" def __init__(self, value, condition=Undefined, **kwds): super(ColorValue, self).__init__(value=value, condition=condition, **kwds) class Column(FieldChannelMixin, core.FacetFieldDef): """Column schema wrapper Mapping(required=[shorthand]) Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. header : :class:`Header` An object defining properties of a facet's header. sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None) Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "column" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, header=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Column, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, header=header, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class Detail(FieldChannelMixin, core.FieldDefWithoutScale): """Detail schema wrapper Mapping(required=[shorthand]) Definition object for a data field, its type and transformation of an encoding channel. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "detail" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Detail, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, type=type, **kwds) class Facet(FieldChannelMixin, core.FacetFieldDef): """Facet schema wrapper Mapping(required=[shorthand]) Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. header : :class:`Header` An object defining properties of a facet's header. sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None) Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "facet" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, header=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Facet, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, header=header, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class Fill(FieldChannelMixin, core.StringFieldDefWithCondition): """Fill schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "fill" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Fill, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class FillValue(ValueChannelMixin, core.StringValueDefWithCondition): """FillValue schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "fill" def __init__(self, value, condition=Undefined, **kwds): super(FillValue, self).__init__(value=value, condition=condition, **kwds) class FillOpacity(FieldChannelMixin, core.NumericFieldDefWithCondition): """FillOpacity schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalNumberValueDef`, List(:class:`ConditionalNumberValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "fillOpacity" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(FillOpacity, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class FillOpacityValue(ValueChannelMixin, core.NumericValueDefWithCondition): """FillOpacityValue schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalNumberValueDef`, List(:class:`ConditionalNumberValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "fillOpacity" def __init__(self, value, condition=Undefined, **kwds): super(FillOpacityValue, self).__init__(value=value, condition=condition, **kwds) class Href(FieldChannelMixin, core.TextFieldDefWithCondition): """Href schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalValueDef`, List(:class:`ConditionalValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : string The text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : enum('number', 'time') The format type for labels ( ``"number"`` or ``"time"`` ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "href" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Href, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, format=format, formatType=formatType, timeUnit=timeUnit, title=title, type=type, **kwds) class HrefValue(ValueChannelMixin, core.TextValueDefWithCondition): """HrefValue schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalTextFieldDef`, :class:`ConditionalValueDef`, List(:class:`ConditionalValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : :class:`Value` A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "href" def __init__(self, value, condition=Undefined, **kwds): super(HrefValue, self).__init__(value=value, condition=condition, **kwds) class Key(FieldChannelMixin, core.FieldDefWithoutScale): """Key schema wrapper Mapping(required=[shorthand]) Definition object for a data field, its type and transformation of an encoding channel. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "key" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Key, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, type=type, **kwds) class Latitude(FieldChannelMixin, core.LatLongFieldDef): """Latitude schema wrapper Mapping(required=[shorthand]) Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : enum('quantitative') The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "latitude" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Latitude, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, type=type, **kwds) class LatitudeValue(ValueChannelMixin, core.NumberValueDef): """LatitudeValue schema wrapper Mapping(required=[value]) Definition object for a constant value of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "latitude" def __init__(self, value, **kwds): super(LatitudeValue, self).__init__(value=value, **kwds) class Latitude2(FieldChannelMixin, core.SecondaryFieldDef): """Latitude2 schema wrapper Mapping(required=[shorthand]) A field definition of a secondary channel that shares a scale with another primary channel. For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _class_is_valid_at_instantiation = False _encoding_name = "latitude2" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(Latitude2, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class Latitude2Value(ValueChannelMixin, core.NumberValueDef): """Latitude2Value schema wrapper Mapping(required=[value]) Definition object for a constant value of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "latitude2" def __init__(self, value, **kwds): super(Latitude2Value, self).__init__(value=value, **kwds) class Longitude(FieldChannelMixin, core.LatLongFieldDef): """Longitude schema wrapper Mapping(required=[shorthand]) Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : enum('quantitative') The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "longitude" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Longitude, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, type=type, **kwds) class LongitudeValue(ValueChannelMixin, core.NumberValueDef): """LongitudeValue schema wrapper Mapping(required=[value]) Definition object for a constant value of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "longitude" def __init__(self, value, **kwds): super(LongitudeValue, self).__init__(value=value, **kwds) class Longitude2(FieldChannelMixin, core.SecondaryFieldDef): """Longitude2 schema wrapper Mapping(required=[shorthand]) A field definition of a secondary channel that shares a scale with another primary channel. For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _class_is_valid_at_instantiation = False _encoding_name = "longitude2" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(Longitude2, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class Longitude2Value(ValueChannelMixin, core.NumberValueDef): """Longitude2Value schema wrapper Mapping(required=[value]) Definition object for a constant value of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "longitude2" def __init__(self, value, **kwds): super(Longitude2Value, self).__init__(value=value, **kwds) class Opacity(FieldChannelMixin, core.NumericFieldDefWithCondition): """Opacity schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalNumberValueDef`, List(:class:`ConditionalNumberValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "opacity" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Opacity, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class OpacityValue(ValueChannelMixin, core.NumericValueDefWithCondition): """OpacityValue schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalNumberValueDef`, List(:class:`ConditionalNumberValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "opacity" def __init__(self, value, condition=Undefined, **kwds): super(OpacityValue, self).__init__(value=value, condition=condition, **kwds) class Order(FieldChannelMixin, core.OrderFieldDef): """Order schema wrapper Mapping(required=[shorthand]) Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. sort : :class:`SortOrder` The sort order. One of ``"ascending"`` (default) or ``"descending"``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "order" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Order, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class OrderValue(ValueChannelMixin, core.NumberValueDef): """OrderValue schema wrapper Mapping(required=[value]) Definition object for a constant value of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "order" def __init__(self, value, **kwds): super(OrderValue, self).__init__(value=value, **kwds) class Row(FieldChannelMixin, core.FacetFieldDef): """Row schema wrapper Mapping(required=[shorthand]) Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. header : :class:`Header` An object defining properties of a facet's header. sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None) Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "row" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, header=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Row, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, header=header, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class Shape(FieldChannelMixin, core.ShapeFieldDefWithCondition): """Shape schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`TypeForShape` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "shape" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Shape, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class ShapeValue(ValueChannelMixin, core.ShapeValueDefWithCondition): """ShapeValue schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDefTypeForShape`, :class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "shape" def __init__(self, value, condition=Undefined, **kwds): super(ShapeValue, self).__init__(value=value, condition=condition, **kwds) class Size(FieldChannelMixin, core.NumericFieldDefWithCondition): """Size schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalNumberValueDef`, List(:class:`ConditionalNumberValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "size" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Size, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class SizeValue(ValueChannelMixin, core.NumericValueDefWithCondition): """SizeValue schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalNumberValueDef`, List(:class:`ConditionalNumberValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "size" def __init__(self, value, condition=Undefined, **kwds): super(SizeValue, self).__init__(value=value, condition=condition, **kwds) class Stroke(FieldChannelMixin, core.StringFieldDefWithCondition): """Stroke schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "stroke" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Stroke, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class StrokeValue(ValueChannelMixin, core.StringValueDefWithCondition): """StrokeValue schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "stroke" def __init__(self, value, condition=Undefined, **kwds): super(StrokeValue, self).__init__(value=value, condition=condition, **kwds) class StrokeOpacity(FieldChannelMixin, core.NumericFieldDefWithCondition): """StrokeOpacity schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalNumberValueDef`, List(:class:`ConditionalNumberValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "strokeOpacity" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(StrokeOpacity, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class StrokeOpacityValue(ValueChannelMixin, core.NumericValueDefWithCondition): """StrokeOpacityValue schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalNumberValueDef`, List(:class:`ConditionalNumberValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "strokeOpacity" def __init__(self, value, condition=Undefined, **kwds): super(StrokeOpacityValue, self).__init__(value=value, condition=condition, **kwds) class StrokeWidth(FieldChannelMixin, core.NumericFieldDefWithCondition): """StrokeWidth schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalNumberValueDef`, List(:class:`ConditionalNumberValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "strokeWidth" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(StrokeWidth, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class StrokeWidthValue(ValueChannelMixin, core.NumericValueDefWithCondition): """StrokeWidthValue schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalNumberValueDef`, List(:class:`ConditionalNumberValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "strokeWidth" def __init__(self, value, condition=Undefined, **kwds): super(StrokeWidthValue, self).__init__(value=value, condition=condition, **kwds) class Text(FieldChannelMixin, core.TextFieldDefWithCondition): """Text schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalValueDef`, List(:class:`ConditionalValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : string The text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : enum('number', 'time') The format type for labels ( ``"number"`` or ``"time"`` ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "text" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Text, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, format=format, formatType=formatType, timeUnit=timeUnit, title=title, type=type, **kwds) class TextValue(ValueChannelMixin, core.TextValueDefWithCondition): """TextValue schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalTextFieldDef`, :class:`ConditionalValueDef`, List(:class:`ConditionalValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : :class:`Value` A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "text" def __init__(self, value, condition=Undefined, **kwds): super(TextValue, self).__init__(value=value, condition=condition, **kwds) class Tooltip(FieldChannelMixin, core.TextFieldDefWithCondition): """Tooltip schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalValueDef`, List(:class:`ConditionalValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : string The text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : enum('number', 'time') The format type for labels ( ``"number"`` or ``"time"`` ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "tooltip" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Tooltip, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, format=format, formatType=formatType, timeUnit=timeUnit, title=title, type=type, **kwds) class TooltipValue(ValueChannelMixin, core.TextValueDefWithCondition): """TooltipValue schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalTextFieldDef`, :class:`ConditionalValueDef`, List(:class:`ConditionalValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : :class:`Value` A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "tooltip" def __init__(self, value, condition=Undefined, **kwds): super(TooltipValue, self).__init__(value=value, condition=condition, **kwds) class X(FieldChannelMixin, core.PositionFieldDef): """X schema wrapper Mapping(required=[shorthand]) Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. axis : anyOf(:class:`Axis`, None) An object defining properties of axis's gridlines, ticks and labels. If ``null``, the axis for the encoding channel will be removed. **Default value:** If undefined, default `axis properties `__ are applied. **See also:** `axis `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. impute : :class:`ImputeParams` An object defining the properties of the Impute Operation to be applied. The field value of the other positional channel is taken as ``key`` of the ``Impute`` Operation. The field of the ``color`` channel if specified is used as ``groupby`` of the ``Impute`` Operation. **See also:** `impute `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. stack : anyOf(:class:`StackOffset`, None, boolean) Type of stacking offset if the field should be stacked. ``stack`` is only applicable for ``x`` and ``y`` channels with continuous domains. For example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar chart. ``stack`` can be one of the following values: * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area `__ chart). * ``"normalize"`` - stacking with normalized domain (for creating `normalized stacked bar and area charts `__. :raw-html:`
` - ``"center"`` - stacking with center baseline (for `streamgraph `__ ). * ``null`` or ``false`` - No-stacking. This will produce layered `bar `__ and area chart. **Default value:** ``zero`` for plots with all of the following conditions are true: (1) the mark is ``bar`` or ``area`` ; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, ``null`` by default. **See also:** `stack `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "x" def __init__(self, shorthand=Undefined, aggregate=Undefined, axis=Undefined, bin=Undefined, field=Undefined, impute=Undefined, scale=Undefined, sort=Undefined, stack=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(X, self).__init__(shorthand=shorthand, aggregate=aggregate, axis=axis, bin=bin, field=field, impute=impute, scale=scale, sort=sort, stack=stack, timeUnit=timeUnit, title=title, type=type, **kwds) class XValue(ValueChannelMixin, core.XValueDef): """XValue schema wrapper Mapping(required=[value]) Definition object for a constant value of an encoding channel. Attributes ---------- value : anyOf(float, enum('width')) A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "x" def __init__(self, value, **kwds): super(XValue, self).__init__(value=value, **kwds) class X2(FieldChannelMixin, core.SecondaryFieldDef): """X2 schema wrapper Mapping(required=[shorthand]) A field definition of a secondary channel that shares a scale with another primary channel. For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _class_is_valid_at_instantiation = False _encoding_name = "x2" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(X2, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class X2Value(ValueChannelMixin, core.XValueDef): """X2Value schema wrapper Mapping(required=[value]) Definition object for a constant value of an encoding channel. Attributes ---------- value : anyOf(float, enum('width')) A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "x2" def __init__(self, value, **kwds): super(X2Value, self).__init__(value=value, **kwds) class XError(FieldChannelMixin, core.SecondaryFieldDef): """XError schema wrapper Mapping(required=[shorthand]) A field definition of a secondary channel that shares a scale with another primary channel. For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _class_is_valid_at_instantiation = False _encoding_name = "xError" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(XError, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class XErrorValue(ValueChannelMixin, core.NumberValueDef): """XErrorValue schema wrapper Mapping(required=[value]) Definition object for a constant value of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "xError" def __init__(self, value, **kwds): super(XErrorValue, self).__init__(value=value, **kwds) class XError2(FieldChannelMixin, core.SecondaryFieldDef): """XError2 schema wrapper Mapping(required=[shorthand]) A field definition of a secondary channel that shares a scale with another primary channel. For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _class_is_valid_at_instantiation = False _encoding_name = "xError2" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(XError2, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class XError2Value(ValueChannelMixin, core.NumberValueDef): """XError2Value schema wrapper Mapping(required=[value]) Definition object for a constant value of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "xError2" def __init__(self, value, **kwds): super(XError2Value, self).__init__(value=value, **kwds) class Y(FieldChannelMixin, core.PositionFieldDef): """Y schema wrapper Mapping(required=[shorthand]) Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. axis : anyOf(:class:`Axis`, None) An object defining properties of axis's gridlines, ticks and labels. If ``null``, the axis for the encoding channel will be removed. **Default value:** If undefined, default `axis properties `__ are applied. **See also:** `axis `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. impute : :class:`ImputeParams` An object defining the properties of the Impute Operation to be applied. The field value of the other positional channel is taken as ``key`` of the ``Impute`` Operation. The field of the ``color`` channel if specified is used as ``groupby`` of the ``Impute`` Operation. **See also:** `impute `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. stack : anyOf(:class:`StackOffset`, None, boolean) Type of stacking offset if the field should be stacked. ``stack`` is only applicable for ``x`` and ``y`` channels with continuous domains. For example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar chart. ``stack`` can be one of the following values: * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area `__ chart). * ``"normalize"`` - stacking with normalized domain (for creating `normalized stacked bar and area charts `__. :raw-html:`
` - ``"center"`` - stacking with center baseline (for `streamgraph `__ ). * ``null`` or ``false`` - No-stacking. This will produce layered `bar `__ and area chart. **Default value:** ``zero`` for plots with all of the following conditions are true: (1) the mark is ``bar`` or ``area`` ; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, ``null`` by default. **See also:** `stack `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "y" def __init__(self, shorthand=Undefined, aggregate=Undefined, axis=Undefined, bin=Undefined, field=Undefined, impute=Undefined, scale=Undefined, sort=Undefined, stack=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Y, self).__init__(shorthand=shorthand, aggregate=aggregate, axis=axis, bin=bin, field=field, impute=impute, scale=scale, sort=sort, stack=stack, timeUnit=timeUnit, title=title, type=type, **kwds) class YValue(ValueChannelMixin, core.YValueDef): """YValue schema wrapper Mapping(required=[value]) Definition object for a constant value of an encoding channel. Attributes ---------- value : anyOf(float, enum('height')) A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "y" def __init__(self, value, **kwds): super(YValue, self).__init__(value=value, **kwds) class Y2(FieldChannelMixin, core.SecondaryFieldDef): """Y2 schema wrapper Mapping(required=[shorthand]) A field definition of a secondary channel that shares a scale with another primary channel. For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _class_is_valid_at_instantiation = False _encoding_name = "y2" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(Y2, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class Y2Value(ValueChannelMixin, core.YValueDef): """Y2Value schema wrapper Mapping(required=[value]) Definition object for a constant value of an encoding channel. Attributes ---------- value : anyOf(float, enum('height')) A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "y2" def __init__(self, value, **kwds): super(Y2Value, self).__init__(value=value, **kwds) class YError(FieldChannelMixin, core.SecondaryFieldDef): """YError schema wrapper Mapping(required=[shorthand]) A field definition of a secondary channel that shares a scale with another primary channel. For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _class_is_valid_at_instantiation = False _encoding_name = "yError" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(YError, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class YErrorValue(ValueChannelMixin, core.NumberValueDef): """YErrorValue schema wrapper Mapping(required=[value]) Definition object for a constant value of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "yError" def __init__(self, value, **kwds): super(YErrorValue, self).__init__(value=value, **kwds) class YError2(FieldChannelMixin, core.SecondaryFieldDef): """YError2 schema wrapper Mapping(required=[shorthand]) A field definition of a secondary channel that shares a scale with another primary channel. For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _class_is_valid_at_instantiation = False _encoding_name = "yError2" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(YError2, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class YError2Value(ValueChannelMixin, core.NumberValueDef): """YError2Value schema wrapper Mapping(required=[value]) Definition object for a constant value of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "yError2" def __init__(self, value, **kwds): super(YError2Value, self).__init__(value=value, **kwds) altair-4.1.0/altair/vegalite/v3/schema/core.py000066400000000000000000026741641364111050100211520ustar00rootroot00000000000000# The contents of this file are automatically written by # tools/generate_schema_wrapper.py. Do not modify directly. from altair.utils.schemapi import SchemaBase, Undefined, _subclasses import pkgutil import json def load_schema(): """Load the json schema associated with this module's functions""" return json.loads(pkgutil.get_data(__name__, 'vega-lite-schema.json').decode('utf-8')) class VegaLiteSchema(SchemaBase): _rootschema = load_schema() @classmethod def _default_wrapper_classes(cls): return _subclasses(VegaLiteSchema) class Root(VegaLiteSchema): """Root schema wrapper anyOf(:class:`TopLevelUnitSpec`, :class:`TopLevelFacetSpec`, :class:`TopLevelLayerSpec`, :class:`TopLevelRepeatSpec`, :class:`TopLevelConcatSpec`, :class:`TopLevelVConcatSpec`, :class:`TopLevelHConcatSpec`) A Vega-Lite top-level specification. This is the root class for all Vega-Lite specifications. (The json schema is generated from this type.) """ _schema = VegaLiteSchema._rootschema def __init__(self, *args, **kwds): super(Root, self).__init__(*args, **kwds) class Aggregate(VegaLiteSchema): """Aggregate schema wrapper anyOf(:class:`AggregateOp`, :class:`ArgmaxDef`, :class:`ArgminDef`) """ _schema = {'$ref': '#/definitions/Aggregate'} def __init__(self, *args, **kwds): super(Aggregate, self).__init__(*args, **kwds) class AggregateOp(Aggregate): """AggregateOp schema wrapper enum('argmax', 'argmin', 'average', 'count', 'distinct', 'max', 'mean', 'median', 'min', 'missing', 'q1', 'q3', 'ci0', 'ci1', 'stderr', 'stdev', 'stdevp', 'sum', 'valid', 'values', 'variance', 'variancep') """ _schema = {'$ref': '#/definitions/AggregateOp'} def __init__(self, *args): super(AggregateOp, self).__init__(*args) class AggregatedFieldDef(VegaLiteSchema): """AggregatedFieldDef schema wrapper Mapping(required=[op, as]) Attributes ---------- op : :class:`AggregateOp` The aggregation operation to apply to the fields (e.g., sum, average or count). See the `full list of supported aggregation operations `__ for more information. field : :class:`FieldName` The data field for which to compute aggregate function. This is required for all aggregation operations except ``"count"``. as : :class:`FieldName` The output field names to use for each aggregated field. """ _schema = {'$ref': '#/definitions/AggregatedFieldDef'} def __init__(self, op=Undefined, field=Undefined, **kwds): super(AggregatedFieldDef, self).__init__(op=op, field=field, **kwds) class Align(VegaLiteSchema): """Align schema wrapper enum('left', 'center', 'right') """ _schema = {'$ref': '#/definitions/Align'} def __init__(self, *args): super(Align, self).__init__(*args) class AnyMark(VegaLiteSchema): """AnyMark schema wrapper anyOf(:class:`CompositeMark`, :class:`CompositeMarkDef`, :class:`Mark`, :class:`MarkDef`) """ _schema = {'$ref': '#/definitions/AnyMark'} def __init__(self, *args, **kwds): super(AnyMark, self).__init__(*args, **kwds) class AreaConfig(VegaLiteSchema): """AreaConfig schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` The horizontal alignment of the text. One of ``"left"``, ``"right"``, ``"center"``. angle : float The rotation angle of the text, in degrees. baseline : :class:`TextBaseline` The vertical alignment of the text. One of ``"top"``, ``"middle"``, ``"bottom"``. **Default value:** ``"middle"`` color : :class:`Color` Default color. Note that ``fill`` and ``stroke`` have higher precedence than ``color`` and will override ``color``. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** This property cannot be used in a `style config `__. cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the mark. Any valid `CSS cursor type `__ can be used. dir : :class:`Dir` The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"`` (right-to-left). This property determines on which side is truncated in response to the limit parameter. **Default value:** ``"ltr"`` dx : float The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. dy : float The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. ellipsis : string The ellipsis string for text truncated in response to the limit parameter. **Default value:** ``"…"`` fill : :class:`Color` Default Fill Color. This has higher precedence than ``config.color`` **Default value:** (None) fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` filled : boolean Whether the mark's color should be used as fill color instead of stroke color. **Default value:** ``false`` for ``point``, ``line`` and ``rule`` ; otherwise, ``true``. **Note:** This property cannot be used in a `style config `__. font : string The typeface to set the text in (e.g., ``"Helvetica Neue"`` ). fontSize : float The font size, in pixels. fontStyle : :class:`FontStyle` The font style (e.g., ``"italic"`` ). fontWeight : :class:`FontWeight` The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). height : float Height of the marks. href : string A URL to load upon mouse click. If defined, the mark acts as a hyperlink. interpolate : :class:`Interpolate` The line interpolation method to use for line and area marks. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : alternate between horizontal and vertical segments, as in a step function. * ``"step-before"`` : alternate between vertical and horizontal segments, as in a step function. * ``"step-after"`` : alternate between horizontal and vertical segments, as in a step function. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. limit : float The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0``, indicating no limit line : anyOf(boolean, :class:`OverlayMarkDef`) A flag for overlaying line on top of area marks, or an object defining the properties of the overlayed lines. If this value is an empty object ( ``{}`` ) or ``true``, lines with default properties will be used. If this value is ``false``, no lines would be automatically added to area marks. **Default value:** ``false``. opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. order : anyOf(None, boolean) For line and trail marks, this ``order`` property can be set to ``null`` or ``false`` to make the lines use the original order in the data sources. orient : :class:`Orientation` The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. * For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. * For area, this property determines the orient property of the Vega output. * For line and trail marks, this property determines the sort order of the points in the line if ``config.sortLineBy`` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored. point : anyOf(boolean, :class:`OverlayMarkDef`, enum('transparent')) A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points. If this property is ``"transparent"``, transparent points will be used (for enhancing tooltips and selections). If this property is an empty object ( ``{}`` ) or ``true``, filled points with default properties will be used. If this property is ``false``, no points would be automatically added to line or area marks. **Default value:** ``false``. radius : float Polar coordinate radial offset, in pixels, of the text label from the origin determined by the ``x`` and ``y`` properties. shape : string Shape of the point marks. Supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) **Default value:** ``"circle"`` size : float Default size for marks. * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value. * For ``bar``, this represents the band size of the bar, in pixels. * For ``text``, this represents the font size, in pixels. **Default value:** ``30`` for point, circle, square marks; ``rangeStep`` - 1 for bar marks with discrete dimensions; ``5`` for bar marks with continuous dimensions; ``11`` for text marks. stroke : :class:`Color` Default Stroke Color. This has higher precedence than ``config.color`` **Default value:** (None) strokeCap : :class:`StrokeCap` The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"square"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : :class:`StrokeJoin` The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. tension : float Depending on the interpolation type, sets the tension parameter (for line and area marks). text : string Placeholder text if the ``text`` channel is not specified theta : float Polar coordinate angle, in radians, of the text label from the origin determined by the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in radians, with ``0`` indicating "north". tooltip : anyOf(:class:`Value`, :class:`TooltipContent`, None) The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from. * If ``tooltip`` is ``{"content": "encoding"}``, then all fields from ``encoding`` will be used. * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the highlighted data point will be used. * If set to ``null``, then no tooltip will be used. width : float Width of the marks. x : anyOf(float, enum('width')) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(float, enum('width')) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. y : anyOf(float, enum('height')) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(float, enum('width')) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. """ _schema = {'$ref': '#/definitions/AreaConfig'} def __init__(self, align=Undefined, angle=Undefined, baseline=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined, y2=Undefined, **kwds): super(AreaConfig, self).__init__(align=align, angle=angle, baseline=baseline, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, tension=tension, text=text, theta=theta, tooltip=tooltip, width=width, x=x, x2=x2, y=y, y2=y2, **kwds) class ArgmaxDef(Aggregate): """ArgmaxDef schema wrapper Mapping(required=[argmax]) Attributes ---------- argmax : string """ _schema = {'$ref': '#/definitions/ArgmaxDef'} def __init__(self, argmax=Undefined, **kwds): super(ArgmaxDef, self).__init__(argmax=argmax, **kwds) class ArgminDef(Aggregate): """ArgminDef schema wrapper Mapping(required=[argmin]) Attributes ---------- argmin : string """ _schema = {'$ref': '#/definitions/ArgminDef'} def __init__(self, argmin=Undefined, **kwds): super(ArgminDef, self).__init__(argmin=argmin, **kwds) class AutoSizeParams(VegaLiteSchema): """AutoSizeParams schema wrapper Mapping(required=[]) Attributes ---------- contains : enum('content', 'padding') Determines how size calculation should be performed, one of ``"content"`` or ``"padding"``. The default setting ( ``"content"`` ) interprets the width and height settings as the data rectangle (plotting) dimensions, to which padding is then added. In contrast, the ``"padding"`` setting includes the padding within the view size calculations, such that the width and height settings indicate the **total** intended size of the view. **Default value** : ``"content"`` resize : boolean A boolean flag indicating if autosize layout should be re-calculated on every view update. **Default value** : ``false`` type : :class:`AutosizeType` The sizing format type. One of ``"pad"``, ``"fit"`` or ``"none"``. See the `autosize type `__ documentation for descriptions of each. **Default value** : ``"pad"`` """ _schema = {'$ref': '#/definitions/AutoSizeParams'} def __init__(self, contains=Undefined, resize=Undefined, type=Undefined, **kwds): super(AutoSizeParams, self).__init__(contains=contains, resize=resize, type=type, **kwds) class AutosizeType(VegaLiteSchema): """AutosizeType schema wrapper enum('pad', 'fit', 'none') """ _schema = {'$ref': '#/definitions/AutosizeType'} def __init__(self, *args): super(AutosizeType, self).__init__(*args) class Axis(VegaLiteSchema): """Axis schema wrapper Mapping(required=[]) Attributes ---------- bandPosition : float An interpolation fraction indicating where, for ``band`` scales, axis ticks should be positioned. A value of ``0`` places ticks at the left edge of their bands. A value of ``0.5`` places ticks in the middle of their bands. **Default value:** ``0.5`` domain : boolean A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis. **Default value:** ``true`` domainColor : :class:`Color` Color of axis domain line. **Default value:** ``"gray"``. domainDash : List(float) An array of alternating [stroke, space] lengths for dashed domain lines. domainDashOffset : float The pixel offset at which to start drawing with the domain dash array. domainOpacity : float Opacity of the axis domain line. domainWidth : float Stroke width of axis domain line **Default value:** ``1`` format : string The text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : enum('number', 'time') The format type for labels ( ``"number"`` or ``"time"`` ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. grid : boolean A boolean flag indicating if grid lines should be included as part of the axis **Default value:** ``true`` for `continuous scales `__ that are not binned; otherwise, ``false``. gridColor : :class:`Color` Color of gridlines. **Default value:** ``"lightGray"``. gridDash : List(float) An array of alternating [stroke, space] lengths for dashed grid lines. gridDashOffset : float The pixel offset at which to start drawing with the grid dash array. gridOpacity : float The stroke opacity of grid (value between [0,1]) **Default value:** ``1`` gridWidth : float The grid width, in pixels. **Default value:** ``1`` labelAlign : :class:`Align` Horizontal text alignment of axis tick labels, overriding the default setting for the current axis orientation. labelAngle : float The rotation angle of the axis labels. **Default value:** ``-90`` for nominal and ordinal fields; ``0`` otherwise. labelBaseline : :class:`TextBaseline` Vertical text baseline of axis tick labels, overriding the default setting for the current axis orientation. Can be ``"top"``, ``"middle"``, ``"bottom"``, or ``"alphabetic"``. labelBound : anyOf(float, boolean) Indicates if labels should be hidden if they exceed the axis range. If ``false`` (the default) no bounds overlap analysis is performed. If ``true``, labels will be hidden if they exceed the axis range by more than 1 pixel. If this property is a number, it specifies the pixel tolerance: the maximum amount by which a label bounding box may exceed the axis range. **Default value:** ``false``. labelColor : :class:`Color` The color of the tick label, can be in hex color code or regular color name. labelFlush : anyOf(boolean, float) Indicates if the first and last axis labels should be aligned flush with the scale range. Flush alignment for a horizontal axis will left-align the first label and right-align the last label. For vertical axes, bottom and top text baselines are applied instead. If this property is a number, it also indicates the number of pixels by which to offset the first and last labels; for example, a value of 2 will flush-align the first and last labels and also push them 2 pixels outward from the center of the axis. The additional adjustment can sometimes help the labels better visually group with corresponding axis ticks. **Default value:** ``true`` for axis of a continuous x-scale. Otherwise, ``false``. labelFlushOffset : float Indicates the number of pixels by which to offset flush-adjusted labels. For example, a value of ``2`` will push flush-adjusted labels 2 pixels outward from the center of the axis. Offsets can help the labels better visually group with corresponding axis ticks. **Default value:** ``0``. labelFont : string The font of the tick label. labelFontSize : float The font size of the label, in pixels. labelFontStyle : :class:`FontStyle` Font style of the title. labelFontWeight : :class:`FontWeight` Font weight of axis tick labels. labelLimit : float Maximum allowed pixel width of axis tick labels. **Default value:** ``180`` labelOpacity : float The opacity of the labels. labelOverlap : :class:`LabelOverlap` The strategy to use for resolving overlap of axis labels. If ``false`` (the default), no overlap reduction is attempted. If set to ``true`` or ``"parity"``, a strategy of removing every other label is used (this works well for standard linear axes). If set to ``"greedy"``, a linear scan of the labels is performed, removing any labels that overlaps with the last visible label (this often works better for log-scaled axes). **Default value:** ``true`` for non-nominal fields with non-log scales; ``"greedy"`` for log scales; otherwise ``false``. labelPadding : float The padding, in pixels, between axis and text labels. **Default value:** ``2`` labelSeparation : float The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default ``0`` ). This property is ignored if *labelOverlap* resolution is not enabled. labels : boolean A boolean flag indicating if labels should be included as part of the axis. **Default value:** ``true``. maxExtent : float The maximum extent in pixels that axis ticks and labels should use. This determines a maximum offset value for axis titles. **Default value:** ``undefined``. minExtent : float The minimum extent in pixels that axis ticks and labels should use. This determines a minimum offset value for axis titles. **Default value:** ``30`` for y-axis; ``undefined`` for x-axis. offset : float The offset, in pixels, by which to displace the axis from the edge of the enclosing group or data rectangle. **Default value:** derived from the `axis config `__ 's ``offset`` ( ``0`` by default) orient : :class:`AxisOrient` The orientation of the axis. One of ``"top"``, ``"bottom"``, ``"left"`` or ``"right"``. The orientation can be used to further specialize the axis type (e.g., a y-axis oriented towards the right edge of the chart). **Default value:** ``"bottom"`` for x-axes and ``"left"`` for y-axes. position : float The anchor position of the axis in pixels. For x-axes with top or bottom orientation, this sets the axis group x coordinate. For y-axes with left or right orientation, this sets the axis group y coordinate. **Default value** : ``0`` tickColor : :class:`Color` The color of the axis's tick. **Default value:** ``"gray"`` tickCount : float A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are "nice" (multiples of 2, 5, 10) and lie within the underlying scale's range. tickDash : List(float) An array of alternating [stroke, space] lengths for dashed tick mark lines. tickDashOffset : float The pixel offset at which to start drawing with the tick mark dash array. tickExtra : boolean Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for ``band`` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with ``"bandPosition": 1`` and an axis ``"padding"`` value of ``0``. tickMinStep : float The minimum desired step between axis ticks, in terms of scale domain values. For example, a value of ``1`` indicates that ticks should not be less than 1 unit apart. If ``tickMinStep`` is specified, the ``tickCount`` value will be adjusted, if necessary, to enforce the minimum step value. **Default value** : ``undefined`` tickOffset : float Position offset in pixels to apply to ticks, labels, and gridlines. tickOpacity : float Opacity of the ticks. tickRound : boolean Boolean flag indicating if pixel position values should be rounded to the nearest integer. **Default value:** ``true`` tickSize : float The size in pixels of axis ticks. **Default value:** ``5`` tickWidth : float The width, in pixels, of ticks. **Default value:** ``1`` ticks : boolean Boolean value that determines whether the axis should include ticks. **Default value:** ``true`` title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. titleAlign : :class:`Align` Horizontal text alignment of axis titles. titleAnchor : :class:`TitleAnchor` Text anchor position for placing axis titles. titleAngle : float Angle in degrees of axis titles. titleBaseline : :class:`TextBaseline` Vertical text baseline for axis titles. titleColor : :class:`Color` Color of the title, can be in hex color code or regular color name. titleFont : string Font of the title. (e.g., ``"Helvetica Neue"`` ). titleFontSize : float Font size of the title. titleFontStyle : :class:`FontStyle` Font style of the title. titleFontWeight : :class:`FontWeight` Font weight of the title. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). titleLimit : float Maximum allowed pixel width of axis titles. titleOpacity : float Opacity of the axis title. titlePadding : float The padding, in pixels, between title and axis. titleX : float X-coordinate of the axis title relative to the axis group. titleY : float Y-coordinate of the axis title relative to the axis group. values : anyOf(List(float), List(string), List(boolean), List(:class:`DateTime`)) Explicitly set the visible axis tick values. zindex : float A non-negative integer indicating the z-index of the axis. If zindex is 0, axes should be drawn behind all chart elements. To put them in front, use ``"zindex = 1"``. **Default value:** ``1`` (in front of the marks) for actual axis and ``0`` (behind the marks) for grids. """ _schema = {'$ref': '#/definitions/Axis'} def __init__(self, bandPosition=Undefined, domain=Undefined, domainColor=Undefined, domainDash=Undefined, domainDashOffset=Undefined, domainOpacity=Undefined, domainWidth=Undefined, format=Undefined, formatType=Undefined, grid=Undefined, gridColor=Undefined, gridDash=Undefined, gridDashOffset=Undefined, gridOpacity=Undefined, gridWidth=Undefined, labelAlign=Undefined, labelAngle=Undefined, labelBaseline=Undefined, labelBound=Undefined, labelColor=Undefined, labelFlush=Undefined, labelFlushOffset=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, labels=Undefined, maxExtent=Undefined, minExtent=Undefined, offset=Undefined, orient=Undefined, position=Undefined, tickColor=Undefined, tickCount=Undefined, tickDash=Undefined, tickDashOffset=Undefined, tickExtra=Undefined, tickMinStep=Undefined, tickOffset=Undefined, tickOpacity=Undefined, tickRound=Undefined, tickSize=Undefined, tickWidth=Undefined, ticks=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleAngle=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleOpacity=Undefined, titlePadding=Undefined, titleX=Undefined, titleY=Undefined, values=Undefined, zindex=Undefined, **kwds): super(Axis, self).__init__(bandPosition=bandPosition, domain=domain, domainColor=domainColor, domainDash=domainDash, domainDashOffset=domainDashOffset, domainOpacity=domainOpacity, domainWidth=domainWidth, format=format, formatType=formatType, grid=grid, gridColor=gridColor, gridDash=gridDash, gridDashOffset=gridDashOffset, gridOpacity=gridOpacity, gridWidth=gridWidth, labelAlign=labelAlign, labelAngle=labelAngle, labelBaseline=labelBaseline, labelBound=labelBound, labelColor=labelColor, labelFlush=labelFlush, labelFlushOffset=labelFlushOffset, labelFont=labelFont, labelFontSize=labelFontSize, labelFontStyle=labelFontStyle, labelFontWeight=labelFontWeight, labelLimit=labelLimit, labelOpacity=labelOpacity, labelOverlap=labelOverlap, labelPadding=labelPadding, labelSeparation=labelSeparation, labels=labels, maxExtent=maxExtent, minExtent=minExtent, offset=offset, orient=orient, position=position, tickColor=tickColor, tickCount=tickCount, tickDash=tickDash, tickDashOffset=tickDashOffset, tickExtra=tickExtra, tickMinStep=tickMinStep, tickOffset=tickOffset, tickOpacity=tickOpacity, tickRound=tickRound, tickSize=tickSize, tickWidth=tickWidth, ticks=ticks, title=title, titleAlign=titleAlign, titleAnchor=titleAnchor, titleAngle=titleAngle, titleBaseline=titleBaseline, titleColor=titleColor, titleFont=titleFont, titleFontSize=titleFontSize, titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight, titleLimit=titleLimit, titleOpacity=titleOpacity, titlePadding=titlePadding, titleX=titleX, titleY=titleY, values=values, zindex=zindex, **kwds) class AxisConfig(VegaLiteSchema): """AxisConfig schema wrapper Mapping(required=[]) Attributes ---------- bandPosition : float An interpolation fraction indicating where, for ``band`` scales, axis ticks should be positioned. A value of ``0`` places ticks at the left edge of their bands. A value of ``0.5`` places ticks in the middle of their bands. **Default value:** ``0.5`` domain : boolean A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis. **Default value:** ``true`` domainColor : :class:`Color` Color of axis domain line. **Default value:** ``"gray"``. domainDash : List(float) An array of alternating [stroke, space] lengths for dashed domain lines. domainDashOffset : float The pixel offset at which to start drawing with the domain dash array. domainOpacity : float Opacity of the axis domain line. domainWidth : float Stroke width of axis domain line **Default value:** ``1`` grid : boolean A boolean flag indicating if grid lines should be included as part of the axis **Default value:** ``true`` for `continuous scales `__ that are not binned; otherwise, ``false``. gridColor : :class:`Color` Color of gridlines. **Default value:** ``"lightGray"``. gridDash : List(float) An array of alternating [stroke, space] lengths for dashed grid lines. gridDashOffset : float The pixel offset at which to start drawing with the grid dash array. gridOpacity : float The stroke opacity of grid (value between [0,1]) **Default value:** ``1`` gridWidth : float The grid width, in pixels. **Default value:** ``1`` labelAlign : :class:`Align` Horizontal text alignment of axis tick labels, overriding the default setting for the current axis orientation. labelAngle : float The rotation angle of the axis labels. **Default value:** ``-90`` for nominal and ordinal fields; ``0`` otherwise. labelBaseline : :class:`TextBaseline` Vertical text baseline of axis tick labels, overriding the default setting for the current axis orientation. Can be ``"top"``, ``"middle"``, ``"bottom"``, or ``"alphabetic"``. labelBound : anyOf(float, boolean) Indicates if labels should be hidden if they exceed the axis range. If ``false`` (the default) no bounds overlap analysis is performed. If ``true``, labels will be hidden if they exceed the axis range by more than 1 pixel. If this property is a number, it specifies the pixel tolerance: the maximum amount by which a label bounding box may exceed the axis range. **Default value:** ``false``. labelColor : :class:`Color` The color of the tick label, can be in hex color code or regular color name. labelFlush : anyOf(boolean, float) Indicates if the first and last axis labels should be aligned flush with the scale range. Flush alignment for a horizontal axis will left-align the first label and right-align the last label. For vertical axes, bottom and top text baselines are applied instead. If this property is a number, it also indicates the number of pixels by which to offset the first and last labels; for example, a value of 2 will flush-align the first and last labels and also push them 2 pixels outward from the center of the axis. The additional adjustment can sometimes help the labels better visually group with corresponding axis ticks. **Default value:** ``true`` for axis of a continuous x-scale. Otherwise, ``false``. labelFlushOffset : float Indicates the number of pixels by which to offset flush-adjusted labels. For example, a value of ``2`` will push flush-adjusted labels 2 pixels outward from the center of the axis. Offsets can help the labels better visually group with corresponding axis ticks. **Default value:** ``0``. labelFont : string The font of the tick label. labelFontSize : float The font size of the label, in pixels. labelFontStyle : :class:`FontStyle` Font style of the title. labelFontWeight : :class:`FontWeight` Font weight of axis tick labels. labelLimit : float Maximum allowed pixel width of axis tick labels. **Default value:** ``180`` labelOpacity : float The opacity of the labels. labelOverlap : :class:`LabelOverlap` The strategy to use for resolving overlap of axis labels. If ``false`` (the default), no overlap reduction is attempted. If set to ``true`` or ``"parity"``, a strategy of removing every other label is used (this works well for standard linear axes). If set to ``"greedy"``, a linear scan of the labels is performed, removing any labels that overlaps with the last visible label (this often works better for log-scaled axes). **Default value:** ``true`` for non-nominal fields with non-log scales; ``"greedy"`` for log scales; otherwise ``false``. labelPadding : float The padding, in pixels, between axis and text labels. **Default value:** ``2`` labelSeparation : float The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default ``0`` ). This property is ignored if *labelOverlap* resolution is not enabled. labels : boolean A boolean flag indicating if labels should be included as part of the axis. **Default value:** ``true``. maxExtent : float The maximum extent in pixels that axis ticks and labels should use. This determines a maximum offset value for axis titles. **Default value:** ``undefined``. minExtent : float The minimum extent in pixels that axis ticks and labels should use. This determines a minimum offset value for axis titles. **Default value:** ``30`` for y-axis; ``undefined`` for x-axis. orient : :class:`AxisOrient` The orientation of the axis. One of ``"top"``, ``"bottom"``, ``"left"`` or ``"right"``. The orientation can be used to further specialize the axis type (e.g., a y-axis oriented towards the right edge of the chart). **Default value:** ``"bottom"`` for x-axes and ``"left"`` for y-axes. shortTimeLabels : boolean Whether month names and weekday names should be abbreviated. **Default value:** ``false`` tickColor : :class:`Color` The color of the axis's tick. **Default value:** ``"gray"`` tickDash : List(float) An array of alternating [stroke, space] lengths for dashed tick mark lines. tickDashOffset : float The pixel offset at which to start drawing with the tick mark dash array. tickExtra : boolean Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for ``band`` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with ``"bandPosition": 1`` and an axis ``"padding"`` value of ``0``. tickOffset : float Position offset in pixels to apply to ticks, labels, and gridlines. tickOpacity : float Opacity of the ticks. tickRound : boolean Boolean flag indicating if pixel position values should be rounded to the nearest integer. **Default value:** ``true`` tickSize : float The size in pixels of axis ticks. **Default value:** ``5`` tickWidth : float The width, in pixels, of ticks. **Default value:** ``1`` ticks : boolean Boolean value that determines whether the axis should include ticks. **Default value:** ``true`` title : None Set to null to disable title for the axis, legend, or header. titleAlign : :class:`Align` Horizontal text alignment of axis titles. titleAnchor : :class:`TitleAnchor` Text anchor position for placing axis titles. titleAngle : float Angle in degrees of axis titles. titleBaseline : :class:`TextBaseline` Vertical text baseline for axis titles. titleColor : :class:`Color` Color of the title, can be in hex color code or regular color name. titleFont : string Font of the title. (e.g., ``"Helvetica Neue"`` ). titleFontSize : float Font size of the title. titleFontStyle : :class:`FontStyle` Font style of the title. titleFontWeight : :class:`FontWeight` Font weight of the title. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). titleLimit : float Maximum allowed pixel width of axis titles. titleOpacity : float Opacity of the axis title. titlePadding : float The padding, in pixels, between title and axis. titleX : float X-coordinate of the axis title relative to the axis group. titleY : float Y-coordinate of the axis title relative to the axis group. """ _schema = {'$ref': '#/definitions/AxisConfig'} def __init__(self, bandPosition=Undefined, domain=Undefined, domainColor=Undefined, domainDash=Undefined, domainDashOffset=Undefined, domainOpacity=Undefined, domainWidth=Undefined, grid=Undefined, gridColor=Undefined, gridDash=Undefined, gridDashOffset=Undefined, gridOpacity=Undefined, gridWidth=Undefined, labelAlign=Undefined, labelAngle=Undefined, labelBaseline=Undefined, labelBound=Undefined, labelColor=Undefined, labelFlush=Undefined, labelFlushOffset=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, labels=Undefined, maxExtent=Undefined, minExtent=Undefined, orient=Undefined, shortTimeLabels=Undefined, tickColor=Undefined, tickDash=Undefined, tickDashOffset=Undefined, tickExtra=Undefined, tickOffset=Undefined, tickOpacity=Undefined, tickRound=Undefined, tickSize=Undefined, tickWidth=Undefined, ticks=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleAngle=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleOpacity=Undefined, titlePadding=Undefined, titleX=Undefined, titleY=Undefined, **kwds): super(AxisConfig, self).__init__(bandPosition=bandPosition, domain=domain, domainColor=domainColor, domainDash=domainDash, domainDashOffset=domainDashOffset, domainOpacity=domainOpacity, domainWidth=domainWidth, grid=grid, gridColor=gridColor, gridDash=gridDash, gridDashOffset=gridDashOffset, gridOpacity=gridOpacity, gridWidth=gridWidth, labelAlign=labelAlign, labelAngle=labelAngle, labelBaseline=labelBaseline, labelBound=labelBound, labelColor=labelColor, labelFlush=labelFlush, labelFlushOffset=labelFlushOffset, labelFont=labelFont, labelFontSize=labelFontSize, labelFontStyle=labelFontStyle, labelFontWeight=labelFontWeight, labelLimit=labelLimit, labelOpacity=labelOpacity, labelOverlap=labelOverlap, labelPadding=labelPadding, labelSeparation=labelSeparation, labels=labels, maxExtent=maxExtent, minExtent=minExtent, orient=orient, shortTimeLabels=shortTimeLabels, tickColor=tickColor, tickDash=tickDash, tickDashOffset=tickDashOffset, tickExtra=tickExtra, tickOffset=tickOffset, tickOpacity=tickOpacity, tickRound=tickRound, tickSize=tickSize, tickWidth=tickWidth, ticks=ticks, title=title, titleAlign=titleAlign, titleAnchor=titleAnchor, titleAngle=titleAngle, titleBaseline=titleBaseline, titleColor=titleColor, titleFont=titleFont, titleFontSize=titleFontSize, titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight, titleLimit=titleLimit, titleOpacity=titleOpacity, titlePadding=titlePadding, titleX=titleX, titleY=titleY, **kwds) class AxisOrient(VegaLiteSchema): """AxisOrient schema wrapper enum('top', 'bottom', 'left', 'right') """ _schema = {'$ref': '#/definitions/AxisOrient'} def __init__(self, *args): super(AxisOrient, self).__init__(*args) class AxisResolveMap(VegaLiteSchema): """AxisResolveMap schema wrapper Mapping(required=[]) Attributes ---------- x : :class:`ResolveMode` y : :class:`ResolveMode` """ _schema = {'$ref': '#/definitions/AxisResolveMap'} def __init__(self, x=Undefined, y=Undefined, **kwds): super(AxisResolveMap, self).__init__(x=x, y=y, **kwds) class BaseLegendLayout(VegaLiteSchema): """BaseLegendLayout schema wrapper Mapping(required=[]) Attributes ---------- anchor : :class:`TitleAnchor` The anchor point for legend orient group layout. bounds : :class:`LayoutBounds` The bounds calculation to use for legend orient group layout. center : anyOf(boolean, :class:`SignalRef`) A flag to center legends within a shared orient group. direction : anyOf(:class:`Orientation`, :class:`SignalRef`) The layout direction for legend orient group layout. margin : anyOf(float, :class:`SignalRef`) The pixel margin between legends within a orient group. offset : anyOf(float, :class:`SignalRef`) The pixel offset from the chart body for a legend orient group. """ _schema = {'$ref': '#/definitions/BaseLegendLayout'} def __init__(self, anchor=Undefined, bounds=Undefined, center=Undefined, direction=Undefined, margin=Undefined, offset=Undefined, **kwds): super(BaseLegendLayout, self).__init__(anchor=anchor, bounds=bounds, center=center, direction=direction, margin=margin, offset=offset, **kwds) class BaseMarkConfig(VegaLiteSchema): """BaseMarkConfig schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` The horizontal alignment of the text. One of ``"left"``, ``"right"``, ``"center"``. angle : float The rotation angle of the text, in degrees. baseline : :class:`TextBaseline` The vertical alignment of the text. One of ``"top"``, ``"middle"``, ``"bottom"``. **Default value:** ``"middle"`` cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the mark. Any valid `CSS cursor type `__ can be used. dir : :class:`Dir` The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"`` (right-to-left). This property determines on which side is truncated in response to the limit parameter. **Default value:** ``"ltr"`` dx : float The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. dy : float The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. ellipsis : string The ellipsis string for text truncated in response to the limit parameter. **Default value:** ``"…"`` fill : :class:`Color` Default Fill Color. This has higher precedence than ``config.color`` **Default value:** (None) fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` font : string The typeface to set the text in (e.g., ``"Helvetica Neue"`` ). fontSize : float The font size, in pixels. fontStyle : :class:`FontStyle` The font style (e.g., ``"italic"`` ). fontWeight : :class:`FontWeight` The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). height : float Height of the marks. href : string A URL to load upon mouse click. If defined, the mark acts as a hyperlink. interpolate : :class:`Interpolate` The line interpolation method to use for line and area marks. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : alternate between horizontal and vertical segments, as in a step function. * ``"step-before"`` : alternate between vertical and horizontal segments, as in a step function. * ``"step-after"`` : alternate between horizontal and vertical segments, as in a step function. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. limit : float The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0``, indicating no limit opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. orient : :class:`Orientation` The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. * For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. * For area, this property determines the orient property of the Vega output. * For line and trail marks, this property determines the sort order of the points in the line if ``config.sortLineBy`` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored. radius : float Polar coordinate radial offset, in pixels, of the text label from the origin determined by the ``x`` and ``y`` properties. shape : string Shape of the point marks. Supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) **Default value:** ``"circle"`` size : float The pixel area each the point/circle/square. For example: in the case of circles, the radius is determined in part by the square root of the size value. **Default value:** ``30`` stroke : :class:`Color` Default Stroke Color. This has higher precedence than ``config.color`` **Default value:** (None) strokeCap : :class:`StrokeCap` The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"square"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : :class:`StrokeJoin` The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. tension : float Depending on the interpolation type, sets the tension parameter (for line and area marks). text : string Placeholder text if the ``text`` channel is not specified theta : float Polar coordinate angle, in radians, of the text label from the origin determined by the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in radians, with ``0`` indicating "north". tooltip : Any The tooltip text to show upon mouse hover. width : float Width of the marks. x : anyOf(float, enum('width')) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(float, enum('width')) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. y : anyOf(float, enum('height')) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(float, enum('width')) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. """ _schema = {'$ref': '#/definitions/BaseMarkConfig'} def __init__(self, align=Undefined, angle=Undefined, baseline=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, opacity=Undefined, orient=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined, y2=Undefined, **kwds): super(BaseMarkConfig, self).__init__(align=align, angle=angle, baseline=baseline, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, opacity=opacity, orient=orient, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, tension=tension, text=text, theta=theta, tooltip=tooltip, width=width, x=x, x2=x2, y=y, y2=y2, **kwds) class BaseTitleConfig(VegaLiteSchema): """BaseTitleConfig schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` anchor : :class:`TitleAnchor` The anchor position for placing the title. One of ``"start"``, ``"middle"``, or ``"end"``. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title. angle : float Angle in degrees of title text. baseline : :class:`TextBaseline` Vertical text baseline for title text. One of ``"top"``, ``"middle"``, ``"bottom"``, or ``"alphabetic"``. color : :class:`Color` Text color for title text. dx : float Delta offset for title text x-coordinate. dy : float Delta offset for title text y-coordinate. font : string Font name for title text. fontSize : float Font size in pixels for title text. **Default value:** ``10``. fontStyle : :class:`FontStyle` Font style for title text. fontWeight : :class:`FontWeight` Font weight for title text. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). frame : :class:`TitleFrame` The reference frame for the anchor position, one of ``"bounds"`` (to anchor relative to the full bounding box) or ``"group"`` (to anchor relative to the group width or height). limit : float The maximum allowed length in pixels of legend labels. offset : float The orthogonal offset in pixels by which to displace the title from its position along the edge of the chart. orient : :class:`TitleOrient` Default title orientation ( ``"top"``, ``"bottom"``, ``"left"``, or ``"right"`` ) """ _schema = {'$ref': '#/definitions/BaseTitleConfig'} def __init__(self, align=Undefined, anchor=Undefined, angle=Undefined, baseline=Undefined, color=Undefined, dx=Undefined, dy=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, frame=Undefined, limit=Undefined, offset=Undefined, orient=Undefined, **kwds): super(BaseTitleConfig, self).__init__(align=align, anchor=anchor, angle=angle, baseline=baseline, color=color, dx=dx, dy=dy, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, frame=frame, limit=limit, offset=offset, orient=orient, **kwds) class BinParams(VegaLiteSchema): """BinParams schema wrapper Mapping(required=[]) Binning properties or boolean flag for determining whether to bin data or not. Attributes ---------- anchor : float A value in the binned domain at which to anchor the bins, shifting the bin boundaries if necessary to ensure that a boundary aligns with the anchor value. **Default Value:** the minimum bin extent value base : float The number base to use for automatic bin determination (default is base 10). **Default value:** ``10`` binned : boolean When set to true, Vega-Lite treats the input data as already binned. divide : List(float) Scale factors indicating allowable subdivisions. The default value is [5, 2], which indicates that for base 10 numbers (the default base), the method may consider dividing bin sizes by 5 and/or 2. For example, for an initial step size of 10, the method can check if bin sizes of 2 (= 10/5), 5 (= 10/2), or 1 (= 10/(5*2)) might also satisfy the given constraints. **Default value:** ``[5, 2]`` extent : List(float) A two-element ( ``[min, max]`` ) array indicating the range of desired bin values. maxbins : float Maximum number of bins. **Default value:** ``6`` for ``row``, ``column`` and ``shape`` channels; ``10`` for other channels minstep : float A minimum allowable step size (particularly useful for integer values). nice : boolean If true (the default), attempts to make the bin boundaries use human-friendly boundaries, such as multiples of ten. step : float An exact step size to use between bins. **Note:** If provided, options such as maxbins will be ignored. steps : List(float) An array of allowable step sizes to choose from. """ _schema = {'$ref': '#/definitions/BinParams'} def __init__(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds): super(BinParams, self).__init__(anchor=anchor, base=base, binned=binned, divide=divide, extent=extent, maxbins=maxbins, minstep=minstep, nice=nice, step=step, steps=steps, **kwds) class Binding(VegaLiteSchema): """Binding schema wrapper anyOf(:class:`BindCheckbox`, :class:`BindRadioSelect`, :class:`BindRange`, :class:`InputBinding`) """ _schema = {'$ref': '#/definitions/Binding'} def __init__(self, *args, **kwds): super(Binding, self).__init__(*args, **kwds) class BindCheckbox(Binding): """BindCheckbox schema wrapper Mapping(required=[input]) Attributes ---------- input : enum('checkbox') debounce : float element : :class:`Element` name : string type : string """ _schema = {'$ref': '#/definitions/BindCheckbox'} def __init__(self, input=Undefined, debounce=Undefined, element=Undefined, name=Undefined, type=Undefined, **kwds): super(BindCheckbox, self).__init__(input=input, debounce=debounce, element=element, name=name, type=type, **kwds) class BindRadioSelect(Binding): """BindRadioSelect schema wrapper Mapping(required=[input, options]) Attributes ---------- input : enum('radio', 'select') options : List(Any) debounce : float element : :class:`Element` name : string type : string """ _schema = {'$ref': '#/definitions/BindRadioSelect'} def __init__(self, input=Undefined, options=Undefined, debounce=Undefined, element=Undefined, name=Undefined, type=Undefined, **kwds): super(BindRadioSelect, self).__init__(input=input, options=options, debounce=debounce, element=element, name=name, type=type, **kwds) class BindRange(Binding): """BindRange schema wrapper Mapping(required=[input]) Attributes ---------- input : enum('range') debounce : float element : :class:`Element` max : float min : float name : string step : float type : string """ _schema = {'$ref': '#/definitions/BindRange'} def __init__(self, input=Undefined, debounce=Undefined, element=Undefined, max=Undefined, min=Undefined, name=Undefined, step=Undefined, type=Undefined, **kwds): super(BindRange, self).__init__(input=input, debounce=debounce, element=element, max=max, min=min, name=name, step=step, type=type, **kwds) class BoxPlotConfig(VegaLiteSchema): """BoxPlotConfig schema wrapper Mapping(required=[]) Attributes ---------- box : anyOf(boolean, :class:`MarkConfig`) extent : anyOf(enum('min-max'), float) The extent of the whiskers. Available options include: * ``"min-max"`` : min and max are the lower and upper whiskers respectively. * A number representing multiple of the interquartile range. This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range *[Q1 - k * IQR, Q3 + k * IQR]* where *Q1* and *Q3* are the first and third quartiles while *IQR* is the interquartile range ( *Q3-Q1* ). **Default value:** ``1.5``. median : anyOf(boolean, :class:`MarkConfig`) outliers : anyOf(boolean, :class:`MarkConfig`) rule : anyOf(boolean, :class:`MarkConfig`) size : float Size of the box and median tick of a box plot ticks : anyOf(boolean, :class:`MarkConfig`) """ _schema = {'$ref': '#/definitions/BoxPlotConfig'} def __init__(self, box=Undefined, extent=Undefined, median=Undefined, outliers=Undefined, rule=Undefined, size=Undefined, ticks=Undefined, **kwds): super(BoxPlotConfig, self).__init__(box=box, extent=extent, median=median, outliers=outliers, rule=rule, size=size, ticks=ticks, **kwds) class BrushConfig(VegaLiteSchema): """BrushConfig schema wrapper Mapping(required=[]) Attributes ---------- fill : :class:`Color` The fill color of the interval mark. **Default value:** ``#333333`` fillOpacity : float The fill opacity of the interval mark (a value between 0 and 1). **Default value:** ``0.125`` stroke : :class:`Color` The stroke color of the interval mark. **Default value:** ``#ffffff`` strokeDash : List(float) An array of alternating stroke and space lengths, for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) with which to begin drawing the stroke dash array. strokeOpacity : float The stroke opacity of the interval mark (a value between 0 and 1). strokeWidth : float The stroke width of the interval mark. """ _schema = {'$ref': '#/definitions/BrushConfig'} def __init__(self, fill=Undefined, fillOpacity=Undefined, stroke=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, **kwds): super(BrushConfig, self).__init__(fill=fill, fillOpacity=fillOpacity, stroke=stroke, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, **kwds) class Color(VegaLiteSchema): """Color schema wrapper anyOf(:class:`ColorName`, :class:`HexColor`, string) """ _schema = {'$ref': '#/definitions/Color'} def __init__(self, *args, **kwds): super(Color, self).__init__(*args, **kwds) class ColorName(Color): """ColorName schema wrapper enum('black', 'silver', 'gray', 'white', 'maroon', 'red', 'purple', 'fuchsia', 'green', 'lime', 'olive', 'yellow', 'navy', 'blue', 'teal', 'aqua', 'orange', 'aliceblue', 'antiquewhite', 'aquamarine', 'azure', 'beige', 'bisque', 'blanchedalmond', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'greenyellow', 'grey', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'limegreen', 'linen', 'magenta', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'oldlace', 'olivedrab', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'whitesmoke', 'yellowgreen', 'rebeccapurple') """ _schema = {'$ref': '#/definitions/ColorName'} def __init__(self, *args): super(ColorName, self).__init__(*args) class CompositeMark(AnyMark): """CompositeMark schema wrapper anyOf(:class:`BoxPlot`, :class:`ErrorBar`, :class:`ErrorBand`) """ _schema = {'$ref': '#/definitions/CompositeMark'} def __init__(self, *args, **kwds): super(CompositeMark, self).__init__(*args, **kwds) class BoxPlot(CompositeMark): """BoxPlot schema wrapper enum('boxplot') """ _schema = {'$ref': '#/definitions/BoxPlot'} def __init__(self, *args): super(BoxPlot, self).__init__(*args) class CompositeMarkDef(AnyMark): """CompositeMarkDef schema wrapper anyOf(:class:`BoxPlotDef`, :class:`ErrorBarDef`, :class:`ErrorBandDef`) """ _schema = {'$ref': '#/definitions/CompositeMarkDef'} def __init__(self, *args, **kwds): super(CompositeMarkDef, self).__init__(*args, **kwds) class BoxPlotDef(CompositeMarkDef): """BoxPlotDef schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`BoxPlot` The mark type. This could a primitive mark type (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"geoshape"``, ``"rule"``, and ``"text"`` ) or a composite mark type ( ``"boxplot"``, ``"errorband"``, ``"errorbar"`` ). box : anyOf(boolean, :class:`MarkConfig`) clip : boolean Whether a composite mark be clipped to the enclosing group’s width and height. color : :class:`Color` Default color. Note that ``fill`` and ``stroke`` have higher precedence than ``color`` and will override ``color``. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** This property cannot be used in a `style config `__. extent : anyOf(enum('min-max'), float) The extent of the whiskers. Available options include: * ``"min-max"`` : min and max are the lower and upper whiskers respectively. * A number representing multiple of the interquartile range. This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range *[Q1 - k * IQR, Q3 + k * IQR]* where *Q1* and *Q3* are the first and third quartiles while *IQR* is the interquartile range ( *Q3-Q1* ). **Default value:** ``1.5``. median : anyOf(boolean, :class:`MarkConfig`) opacity : float The opacity (value between [0,1]) of the mark. orient : :class:`Orientation` Orientation of the box plot. This is normally automatically determined based on types of fields on x and y channels. However, an explicit ``orient`` be specified when the orientation is ambiguous. **Default value:** ``"vertical"``. outliers : anyOf(boolean, :class:`MarkConfig`) rule : anyOf(boolean, :class:`MarkConfig`) size : float Size of the box and median tick of a box plot ticks : anyOf(boolean, :class:`MarkConfig`) """ _schema = {'$ref': '#/definitions/BoxPlotDef'} def __init__(self, type=Undefined, box=Undefined, clip=Undefined, color=Undefined, extent=Undefined, median=Undefined, opacity=Undefined, orient=Undefined, outliers=Undefined, rule=Undefined, size=Undefined, ticks=Undefined, **kwds): super(BoxPlotDef, self).__init__(type=type, box=box, clip=clip, color=color, extent=extent, median=median, opacity=opacity, orient=orient, outliers=outliers, rule=rule, size=size, ticks=ticks, **kwds) class CompositionConfig(VegaLiteSchema): """CompositionConfig schema wrapper Mapping(required=[]) Attributes ---------- columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). spacing : float The default spacing in pixels between composed sub-views. **Default value** : ``20`` """ _schema = {'$ref': '#/definitions/CompositionConfig'} def __init__(self, columns=Undefined, spacing=Undefined, **kwds): super(CompositionConfig, self).__init__(columns=columns, spacing=spacing, **kwds) class ConditionalMarkPropFieldDef(VegaLiteSchema): """ConditionalMarkPropFieldDef schema wrapper anyOf(:class:`ConditionalPredicateMarkPropFieldDef`, :class:`ConditionalSelectionMarkPropFieldDef`) """ _schema = {'$ref': '#/definitions/ConditionalMarkPropFieldDef'} def __init__(self, *args, **kwds): super(ConditionalMarkPropFieldDef, self).__init__(*args, **kwds) class ConditionalMarkPropFieldDefTypeForShape(VegaLiteSchema): """ConditionalMarkPropFieldDefTypeForShape schema wrapper anyOf(:class:`ConditionalPredicateMarkPropFieldDefTypeForShape`, :class:`ConditionalSelectionMarkPropFieldDefTypeForShape`) """ _schema = {'$ref': '#/definitions/ConditionalMarkPropFieldDef'} def __init__(self, *args, **kwds): super(ConditionalMarkPropFieldDefTypeForShape, self).__init__(*args, **kwds) class ConditionalNumberValueDef(VegaLiteSchema): """ConditionalNumberValueDef schema wrapper anyOf(:class:`ConditionalPredicateNumberValueDef`, :class:`ConditionalSelectionNumberValueDef`) """ _schema = {'$ref': '#/definitions/ConditionalNumberValueDef'} def __init__(self, *args, **kwds): super(ConditionalNumberValueDef, self).__init__(*args, **kwds) class ConditionalPredicateMarkPropFieldDef(ConditionalMarkPropFieldDef): """ConditionalPredicateMarkPropFieldDef schema wrapper Mapping(required=[test, type]) Attributes ---------- test : :class:`LogicalOperandPredicate` Predicate for triggering the condition type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/ConditionalPredicate'} def __init__(self, test=Undefined, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(ConditionalPredicateMarkPropFieldDef, self).__init__(test=test, type=type, aggregate=aggregate, bin=bin, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class ConditionalPredicateMarkPropFieldDefTypeForShape(ConditionalMarkPropFieldDefTypeForShape): """ConditionalPredicateMarkPropFieldDefTypeForShape schema wrapper Mapping(required=[test, type]) Attributes ---------- test : :class:`LogicalOperandPredicate` Predicate for triggering the condition type : :class:`TypeForShape` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/ConditionalPredicate>'} def __init__(self, test=Undefined, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(ConditionalPredicateMarkPropFieldDefTypeForShape, self).__init__(test=test, type=type, aggregate=aggregate, bin=bin, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class ConditionalPredicateNumberValueDef(ConditionalNumberValueDef): """ConditionalPredicateNumberValueDef schema wrapper Mapping(required=[test, value]) Attributes ---------- test : :class:`LogicalOperandPredicate` Predicate for triggering the condition value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalPredicate'} def __init__(self, test=Undefined, value=Undefined, **kwds): super(ConditionalPredicateNumberValueDef, self).__init__(test=test, value=value, **kwds) class ConditionalSelectionMarkPropFieldDef(ConditionalMarkPropFieldDef): """ConditionalSelectionMarkPropFieldDef schema wrapper Mapping(required=[selection, type]) Attributes ---------- selection : :class:`SelectionOperand` A `selection name `__, or a series of `composed selections `__. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/ConditionalSelection'} def __init__(self, selection=Undefined, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(ConditionalSelectionMarkPropFieldDef, self).__init__(selection=selection, type=type, aggregate=aggregate, bin=bin, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class ConditionalSelectionMarkPropFieldDefTypeForShape(ConditionalMarkPropFieldDefTypeForShape): """ConditionalSelectionMarkPropFieldDefTypeForShape schema wrapper Mapping(required=[selection, type]) Attributes ---------- selection : :class:`SelectionOperand` A `selection name `__, or a series of `composed selections `__. type : :class:`TypeForShape` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/ConditionalSelection>'} def __init__(self, selection=Undefined, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(ConditionalSelectionMarkPropFieldDefTypeForShape, self).__init__(selection=selection, type=type, aggregate=aggregate, bin=bin, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class ConditionalSelectionNumberValueDef(ConditionalNumberValueDef): """ConditionalSelectionNumberValueDef schema wrapper Mapping(required=[selection, value]) Attributes ---------- selection : :class:`SelectionOperand` A `selection name `__, or a series of `composed selections `__. value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalSelection'} def __init__(self, selection=Undefined, value=Undefined, **kwds): super(ConditionalSelectionNumberValueDef, self).__init__(selection=selection, value=value, **kwds) class ConditionalStringValueDef(VegaLiteSchema): """ConditionalStringValueDef schema wrapper anyOf(:class:`ConditionalPredicateStringValueDef`, :class:`ConditionalSelectionStringValueDef`) """ _schema = {'$ref': '#/definitions/ConditionalStringValueDef'} def __init__(self, *args, **kwds): super(ConditionalStringValueDef, self).__init__(*args, **kwds) class ConditionalPredicateStringValueDef(ConditionalStringValueDef): """ConditionalPredicateStringValueDef schema wrapper Mapping(required=[test, value]) Attributes ---------- test : :class:`LogicalOperandPredicate` Predicate for triggering the condition value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalPredicate'} def __init__(self, test=Undefined, value=Undefined, **kwds): super(ConditionalPredicateStringValueDef, self).__init__(test=test, value=value, **kwds) class ConditionalSelectionStringValueDef(ConditionalStringValueDef): """ConditionalSelectionStringValueDef schema wrapper Mapping(required=[selection, value]) Attributes ---------- selection : :class:`SelectionOperand` A `selection name `__, or a series of `composed selections `__. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalSelection'} def __init__(self, selection=Undefined, value=Undefined, **kwds): super(ConditionalSelectionStringValueDef, self).__init__(selection=selection, value=value, **kwds) class ConditionalTextFieldDef(VegaLiteSchema): """ConditionalTextFieldDef schema wrapper anyOf(:class:`ConditionalPredicateTextFieldDef`, :class:`ConditionalSelectionTextFieldDef`) """ _schema = {'$ref': '#/definitions/ConditionalTextFieldDef'} def __init__(self, *args, **kwds): super(ConditionalTextFieldDef, self).__init__(*args, **kwds) class ConditionalPredicateTextFieldDef(ConditionalTextFieldDef): """ConditionalPredicateTextFieldDef schema wrapper Mapping(required=[test, type]) Attributes ---------- test : :class:`LogicalOperandPredicate` Predicate for triggering the condition type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : string The text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : enum('number', 'time') The format type for labels ( ``"number"`` or ``"time"`` ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/ConditionalPredicate'} def __init__(self, test=Undefined, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(ConditionalPredicateTextFieldDef, self).__init__(test=test, type=type, aggregate=aggregate, bin=bin, field=field, format=format, formatType=formatType, timeUnit=timeUnit, title=title, **kwds) class ConditionalSelectionTextFieldDef(ConditionalTextFieldDef): """ConditionalSelectionTextFieldDef schema wrapper Mapping(required=[selection, type]) Attributes ---------- selection : :class:`SelectionOperand` A `selection name `__, or a series of `composed selections `__. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : string The text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : enum('number', 'time') The format type for labels ( ``"number"`` or ``"time"`` ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/ConditionalSelection'} def __init__(self, selection=Undefined, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(ConditionalSelectionTextFieldDef, self).__init__(selection=selection, type=type, aggregate=aggregate, bin=bin, field=field, format=format, formatType=formatType, timeUnit=timeUnit, title=title, **kwds) class ConditionalValueDef(VegaLiteSchema): """ConditionalValueDef schema wrapper anyOf(:class:`ConditionalPredicateValueDef`, :class:`ConditionalSelectionValueDef`) """ _schema = {'$ref': '#/definitions/ConditionalValueDef'} def __init__(self, *args, **kwds): super(ConditionalValueDef, self).__init__(*args, **kwds) class ConditionalPredicateValueDef(ConditionalValueDef): """ConditionalPredicateValueDef schema wrapper Mapping(required=[test, value]) Attributes ---------- test : :class:`LogicalOperandPredicate` Predicate for triggering the condition value : :class:`Value` A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalPredicate'} def __init__(self, test=Undefined, value=Undefined, **kwds): super(ConditionalPredicateValueDef, self).__init__(test=test, value=value, **kwds) class ConditionalSelectionValueDef(ConditionalValueDef): """ConditionalSelectionValueDef schema wrapper Mapping(required=[selection, value]) Attributes ---------- selection : :class:`SelectionOperand` A `selection name `__, or a series of `composed selections `__. value : :class:`Value` A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalSelection'} def __init__(self, selection=Undefined, value=Undefined, **kwds): super(ConditionalSelectionValueDef, self).__init__(selection=selection, value=value, **kwds) class Config(VegaLiteSchema): """Config schema wrapper Mapping(required=[]) Attributes ---------- area : :class:`AreaConfig` Area-Specific Config autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`) Sets how the visualization size should be determined. If a string, should be one of ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify parameters for content sizing and automatic resizing. ``"fit"`` is only supported for single and layered views that don't use ``rangeStep``. **Default value** : ``pad`` axis : :class:`AxisConfig` Axis configuration, which determines default properties for all ``x`` and ``y`` `axes `__. For a full list of axis configuration options, please see the `corresponding section of the axis documentation `__. axisBand : :class:`AxisConfig` Specific axis config for axes with "band" scales. axisBottom : :class:`AxisConfig` Specific axis config for x-axis along the bottom edge of the chart. axisLeft : :class:`AxisConfig` Specific axis config for y-axis along the left edge of the chart. axisRight : :class:`AxisConfig` Specific axis config for y-axis along the right edge of the chart. axisTop : :class:`AxisConfig` Specific axis config for x-axis along the top edge of the chart. axisX : :class:`AxisConfig` X-axis specific config. axisY : :class:`AxisConfig` Y-axis specific config. background : string CSS color property to use as the background of the whole Vega-Lite view **Default value:** none (transparent) bar : :class:`RectConfig` Bar-Specific Config boxplot : :class:`BoxPlotConfig` Box Config circle : :class:`MarkConfig` Circle-Specific Config concat : :class:`CompositionConfig` Default configuration for all concatenation view composition operators ( ``concat``, ``hconcat``, and ``vconcat`` ) countTitle : string Default axis and legend title for count fields. **Default value:** ``'Count of Records``. errorband : :class:`ErrorBandConfig` ErrorBand Config errorbar : :class:`ErrorBarConfig` ErrorBar Config facet : :class:`CompositionConfig` Default configuration for the ``facet`` view composition operator fieldTitle : enum('verbal', 'functional', 'plain') Defines how Vega-Lite generates title for fields. There are three possible styles: * ``"verbal"`` (Default) - displays function in a verbal style (e.g., "Sum of field", "Year-month of date", "field (binned)"). * ``"function"`` - displays function using parentheses and capitalized texts (e.g., "SUM(field)", "YEARMONTH(date)", "BIN(field)"). * ``"plain"`` - displays only the field name without functions (e.g., "field", "date", "field"). geoshape : :class:`MarkConfig` Geoshape-Specific Config header : :class:`HeaderConfig` Header configuration, which determines default properties for all `headers `__. For a full list of header configuration options, please see the `corresponding section of in the header documentation `__. headerColumn : :class:`HeaderConfig` Header configuration, which determines default properties for column `headers `__. For a full list of header configuration options, please see the `corresponding section of in the header documentation `__. headerFacet : :class:`HeaderConfig` Header configuration, which determines default properties for non-row/column facet `headers `__. For a full list of header configuration options, please see the `corresponding section of in the header documentation `__. headerRow : :class:`HeaderConfig` Header configuration, which determines default properties for row `headers `__. For a full list of header configuration options, please see the `corresponding section of in the header documentation `__. invalidValues : enum('filter', None) Defines how Vega-Lite should handle invalid values ( ``null`` and ``NaN`` ). * If set to ``"filter"`` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). * If ``null``, all data items are included. In this case, invalid values will be interpreted as zeroes. legend : :class:`LegendConfig` Legend configuration, which determines default properties for all `legends `__. For a full list of legend configuration options, please see the `corresponding section of in the legend documentation `__. line : :class:`LineConfig` Line-Specific Config mark : :class:`MarkConfig` Mark Config numberFormat : string D3 Number format for guide labels and text marks. For example "s" for SI units. Use `D3's number format pattern `__. padding : :class:`Padding` The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5, "bottom": 5}`` to specify padding for each side of the visualization. **Default value** : ``5`` point : :class:`MarkConfig` Point-Specific Config projection : :class:`ProjectionConfig` Projection configuration, which determines default properties for all `projections `__. For a full list of projection configuration options, please see the `corresponding section of the projection documentation `__. range : :class:`RangeConfig` An object hash that defines default range arrays or schemes for using with scales. For a full list of scale range configuration options, please see the `corresponding section of the scale documentation `__. rect : :class:`RectConfig` Rect-Specific Config repeat : :class:`CompositionConfig` Default configuration for the ``repeat`` view composition operator rule : :class:`MarkConfig` Rule-Specific Config scale : :class:`ScaleConfig` Scale configuration determines default properties for all `scales `__. For a full list of scale configuration options, please see the `corresponding section of the scale documentation `__. selection : :class:`SelectionConfig` An object hash for defining default properties for each type of selections. square : :class:`MarkConfig` Square-Specific Config stack : :class:`StackOffset` Default stack offset for stackable mark. style : :class:`StyleConfigIndex` An object hash that defines key-value mappings to determine default properties for marks with a given `style `__. The keys represent styles names; the values have to be valid `mark configuration objects `__. text : :class:`TextConfig` Text-Specific Config tick : :class:`TickConfig` Tick-Specific Config timeFormat : string Default time format for raw time values (without time units) in text marks, legend labels and header labels. **Default value:** ``"%b %d, %Y"`` **Note:** Axes automatically determine format each label automatically so this config would not affect axes. title : :class:`TitleConfig` Title configuration, which determines default properties for all `titles `__. For a full list of title configuration options, please see the `corresponding section of the title documentation `__. trail : :class:`LineConfig` Trail-Specific Config view : :class:`ViewConfig` Default properties for `single view plots `__. """ _schema = {'$ref': '#/definitions/Config'} def __init__(self, area=Undefined, autosize=Undefined, axis=Undefined, axisBand=Undefined, axisBottom=Undefined, axisLeft=Undefined, axisRight=Undefined, axisTop=Undefined, axisX=Undefined, axisY=Undefined, background=Undefined, bar=Undefined, boxplot=Undefined, circle=Undefined, concat=Undefined, countTitle=Undefined, errorband=Undefined, errorbar=Undefined, facet=Undefined, fieldTitle=Undefined, geoshape=Undefined, header=Undefined, headerColumn=Undefined, headerFacet=Undefined, headerRow=Undefined, invalidValues=Undefined, legend=Undefined, line=Undefined, mark=Undefined, numberFormat=Undefined, padding=Undefined, point=Undefined, projection=Undefined, range=Undefined, rect=Undefined, repeat=Undefined, rule=Undefined, scale=Undefined, selection=Undefined, square=Undefined, stack=Undefined, style=Undefined, text=Undefined, tick=Undefined, timeFormat=Undefined, title=Undefined, trail=Undefined, view=Undefined, **kwds): super(Config, self).__init__(area=area, autosize=autosize, axis=axis, axisBand=axisBand, axisBottom=axisBottom, axisLeft=axisLeft, axisRight=axisRight, axisTop=axisTop, axisX=axisX, axisY=axisY, background=background, bar=bar, boxplot=boxplot, circle=circle, concat=concat, countTitle=countTitle, errorband=errorband, errorbar=errorbar, facet=facet, fieldTitle=fieldTitle, geoshape=geoshape, header=header, headerColumn=headerColumn, headerFacet=headerFacet, headerRow=headerRow, invalidValues=invalidValues, legend=legend, line=line, mark=mark, numberFormat=numberFormat, padding=padding, point=point, projection=projection, range=range, rect=rect, repeat=repeat, rule=rule, scale=scale, selection=selection, square=square, stack=stack, style=style, text=text, tick=tick, timeFormat=timeFormat, title=title, trail=trail, view=view, **kwds) class Cursor(VegaLiteSchema): """Cursor schema wrapper enum('auto', 'default', 'none', 'context-menu', 'help', 'pointer', 'progress', 'wait', 'cell', 'crosshair', 'text', 'vertical-text', 'alias', 'copy', 'move', 'no-drop', 'not-allowed', 'e-resize', 'n-resize', 'ne-resize', 'nw-resize', 's-resize', 'se-resize', 'sw-resize', 'w-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'col-resize', 'row-resize', 'all-scroll', 'zoom-in', 'zoom-out', 'grab', 'grabbing') """ _schema = {'$ref': '#/definitions/Cursor'} def __init__(self, *args): super(Cursor, self).__init__(*args) class Data(VegaLiteSchema): """Data schema wrapper anyOf(:class:`DataSource`, :class:`Generator`) """ _schema = {'$ref': '#/definitions/Data'} def __init__(self, *args, **kwds): super(Data, self).__init__(*args, **kwds) class DataFormat(VegaLiteSchema): """DataFormat schema wrapper anyOf(:class:`CsvDataFormat`, :class:`DsvDataFormat`, :class:`JsonDataFormat`, :class:`TopoDataFormat`) """ _schema = {'$ref': '#/definitions/DataFormat'} def __init__(self, *args, **kwds): super(DataFormat, self).__init__(*args, **kwds) class CsvDataFormat(DataFormat): """CsvDataFormat schema wrapper Mapping(required=[]) Attributes ---------- parse : anyOf(:class:`Parse`, None) If set to ``null``, disable type inference based on the spec and only use type inference based on the data. Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of ``"number"``, ``"boolean"``, ``"date"``, or null (do not parse the field)). For example, ``"parse": {"modified_on": "date"}`` parses the ``modified_on`` field in each input record a Date value. For ``"date"``, we parse data based using Javascript's `Date.parse() `__. For Specific date formats can be provided (e.g., ``{foo: "date:'%m%d%Y'"}`` ), using the `d3-time-format syntax `__. UTC date format parsing is supported similarly (e.g., ``{foo: "utc:'%m%d%Y'"}`` ). See more about `UTC time `__ type : enum('csv', 'tsv') Type of input data: ``"json"``, ``"csv"``, ``"tsv"``, ``"dsv"``. **Default value:** The default format type is determined by the extension of the file URL. If no extension is detected, ``"json"`` will be used by default. """ _schema = {'$ref': '#/definitions/CsvDataFormat'} def __init__(self, parse=Undefined, type=Undefined, **kwds): super(CsvDataFormat, self).__init__(parse=parse, type=type, **kwds) class DataSource(Data): """DataSource schema wrapper anyOf(:class:`UrlData`, :class:`InlineData`, :class:`NamedData`) """ _schema = {'$ref': '#/definitions/DataSource'} def __init__(self, *args, **kwds): super(DataSource, self).__init__(*args, **kwds) class Datasets(VegaLiteSchema): """Datasets schema wrapper Mapping(required=[]) """ _schema = {'$ref': '#/definitions/Datasets'} def __init__(self, **kwds): super(Datasets, self).__init__(**kwds) class Day(VegaLiteSchema): """Day schema wrapper float """ _schema = {'$ref': '#/definitions/Day'} def __init__(self, *args): super(Day, self).__init__(*args) class DictInlineDataset(VegaLiteSchema): """DictInlineDataset schema wrapper Mapping(required=[]) """ _schema = {'$ref': '#/definitions/Dict'} def __init__(self, **kwds): super(DictInlineDataset, self).__init__(**kwds) class Dir(VegaLiteSchema): """Dir schema wrapper enum('ltr', 'rtl') """ _schema = {'$ref': '#/definitions/Dir'} def __init__(self, *args): super(Dir, self).__init__(*args) class DsvDataFormat(DataFormat): """DsvDataFormat schema wrapper Mapping(required=[delimiter]) Attributes ---------- delimiter : string The delimiter between records. The delimiter must be a single character (i.e., a single 16-bit code unit); so, ASCII delimiters are fine, but emoji delimiters are not. parse : anyOf(:class:`Parse`, None) If set to ``null``, disable type inference based on the spec and only use type inference based on the data. Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of ``"number"``, ``"boolean"``, ``"date"``, or null (do not parse the field)). For example, ``"parse": {"modified_on": "date"}`` parses the ``modified_on`` field in each input record a Date value. For ``"date"``, we parse data based using Javascript's `Date.parse() `__. For Specific date formats can be provided (e.g., ``{foo: "date:'%m%d%Y'"}`` ), using the `d3-time-format syntax `__. UTC date format parsing is supported similarly (e.g., ``{foo: "utc:'%m%d%Y'"}`` ). See more about `UTC time `__ type : enum('dsv') Type of input data: ``"json"``, ``"csv"``, ``"tsv"``, ``"dsv"``. **Default value:** The default format type is determined by the extension of the file URL. If no extension is detected, ``"json"`` will be used by default. """ _schema = {'$ref': '#/definitions/DsvDataFormat'} def __init__(self, delimiter=Undefined, parse=Undefined, type=Undefined, **kwds): super(DsvDataFormat, self).__init__(delimiter=delimiter, parse=parse, type=type, **kwds) class Element(VegaLiteSchema): """Element schema wrapper string """ _schema = {'$ref': '#/definitions/Element'} def __init__(self, *args): super(Element, self).__init__(*args) class Encoding(VegaLiteSchema): """Encoding schema wrapper Mapping(required=[]) Attributes ---------- color : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`) Color of the marks – either fill or stroke color based on the ``filled`` property of mark definition. By default, ``color`` represents fill color for ``"area"``, ``"bar"``, ``"tick"``, ``"text"``, ``"trail"``, ``"circle"``, and ``"square"`` / stroke color for ``"line"`` and ``"point"``. **Default value:** If undefined, the default color depends on `mark config `__ 's ``color`` property. *Note:* 1) For fine-grained control over both fill and stroke colors of the marks, please use the ``fill`` and ``stroke`` channels. If either ``fill`` or ``stroke`` channel is specified, ``color`` channel will be ignored. 2) See the scale documentation for more information about customizing `color scheme `__. detail : anyOf(:class:`FieldDefWithoutScale`, List(:class:`FieldDefWithoutScale`)) Additional levels of detail for grouping data in aggregate views and in line, trail, and area marks without mapping data to a specific visual channel. fill : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`) Fill color of the marks. **Default value:** If undefined, the default color depends on `mark config `__ 's ``color`` property. *Note:* When using ``fill`` channel, ``color`` channel will be ignored. To customize both fill and stroke, please use ``fill`` and ``stroke`` channels (not ``fill`` and ``color`` ). fillOpacity : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueDefWithCondition`) Fill opacity of the marks. **Default value:** If undefined, the default opacity depends on `mark config `__ 's ``fillOpacity`` property. href : anyOf(:class:`TextFieldDefWithCondition`, :class:`TextValueDefWithCondition`) A URL to load upon mouse click. key : :class:`FieldDefWithoutScale` A data field to use as a unique key for data binding. When a visualization’s data is updated, the key value will be used to match data elements to existing mark instances. Use a key channel to enable object constancy for transitions over dynamic data. latitude : anyOf(:class:`LatLongFieldDef`, :class:`NumberValueDef`) Latitude position of geographically projected marks. latitude2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Latitude-2 position for geographically projected ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. longitude : anyOf(:class:`LatLongFieldDef`, :class:`NumberValueDef`) Longitude position of geographically projected marks. longitude2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Longitude-2 position for geographically projected ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. opacity : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueDefWithCondition`) Opacity of the marks. **Default value:** If undefined, the default opacity depends on `mark config `__ 's ``opacity`` property. order : anyOf(:class:`OrderFieldDef`, List(:class:`OrderFieldDef`), :class:`NumberValueDef`) Order of the marks. * For stacked marks, this ``order`` channel encodes `stack order `__. * For line and trail marks, this ``order`` channel encodes order of data points in the lines. This can be useful for creating `a connected scatterplot `__. Setting ``order`` to ``{"value": null}`` makes the line marks use the original order in the data sources. * Otherwise, this ``order`` channel encodes layer order of the marks. **Note** : In aggregate plots, ``order`` field should be ``aggregate`` d to avoid creating additional aggregation grouping. shape : anyOf(:class:`ShapeFieldDefWithCondition`, :class:`ShapeValueDefWithCondition`) Shape of the mark. #. For ``point`` marks the supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) #. For ``geoshape`` marks it should be a field definition of the geojson data **Default value:** If undefined, the default shape depends on `mark config `__ 's ``shape`` property. ( ``"circle"`` if unset.) size : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueDefWithCondition`) Size of the mark. * For ``"point"``, ``"square"`` and ``"circle"``, – the symbol size, or pixel area of the mark. * For ``"bar"`` and ``"tick"`` – the bar and tick's size. * For ``"text"`` – the text's font size. * Size is unsupported for ``"line"``, ``"area"``, and ``"rect"``. (Use ``"trail"`` instead of line with varying size) stroke : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`) Stroke color of the marks. **Default value:** If undefined, the default color depends on `mark config `__ 's ``color`` property. *Note:* When using ``stroke`` channel, ``color`` channel will be ignored. To customize both stroke and fill, please use ``stroke`` and ``fill`` channels (not ``stroke`` and ``color`` ). strokeOpacity : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueDefWithCondition`) Stroke opacity of the marks. **Default value:** If undefined, the default opacity depends on `mark config `__ 's ``strokeOpacity`` property. strokeWidth : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueDefWithCondition`) Stroke width of the marks. **Default value:** If undefined, the default stroke width depends on `mark config `__ 's ``strokeWidth`` property. text : anyOf(:class:`TextFieldDefWithCondition`, :class:`TextValueDefWithCondition`) Text of the ``text`` mark. tooltip : anyOf(:class:`TextFieldDefWithCondition`, :class:`TextValueDefWithCondition`, List(:class:`TextFieldDef`), None) The tooltip text to show upon mouse hover. x : anyOf(:class:`PositionFieldDef`, :class:`XValueDef`) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(:class:`SecondaryFieldDef`, :class:`XValueDef`) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. xError : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Error value of x coordinates for error specified ``"errorbar"`` and ``"errorband"``. xError2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Secondary error value of x coordinates for error specified ``"errorbar"`` and ``"errorband"``. y : anyOf(:class:`PositionFieldDef`, :class:`YValueDef`) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(:class:`SecondaryFieldDef`, :class:`YValueDef`) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. yError : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Error value of y coordinates for error specified ``"errorbar"`` and ``"errorband"``. yError2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Secondary error value of y coordinates for error specified ``"errorbar"`` and ``"errorband"``. """ _schema = {'$ref': '#/definitions/Encoding'} def __init__(self, color=Undefined, detail=Undefined, fill=Undefined, fillOpacity=Undefined, href=Undefined, key=Undefined, latitude=Undefined, latitude2=Undefined, longitude=Undefined, longitude2=Undefined, opacity=Undefined, order=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, text=Undefined, tooltip=Undefined, x=Undefined, x2=Undefined, xError=Undefined, xError2=Undefined, y=Undefined, y2=Undefined, yError=Undefined, yError2=Undefined, **kwds): super(Encoding, self).__init__(color=color, detail=detail, fill=fill, fillOpacity=fillOpacity, href=href, key=key, latitude=latitude, latitude2=latitude2, longitude=longitude, longitude2=longitude2, opacity=opacity, order=order, shape=shape, size=size, stroke=stroke, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, text=text, tooltip=tooltip, x=x, x2=x2, xError=xError, xError2=xError2, y=y, y2=y2, yError=yError, yError2=yError2, **kwds) class ErrorBand(CompositeMark): """ErrorBand schema wrapper enum('errorband') """ _schema = {'$ref': '#/definitions/ErrorBand'} def __init__(self, *args): super(ErrorBand, self).__init__(*args) class ErrorBandConfig(VegaLiteSchema): """ErrorBandConfig schema wrapper Mapping(required=[]) Attributes ---------- band : anyOf(boolean, :class:`MarkConfig`) borders : anyOf(boolean, :class:`MarkConfig`) extent : :class:`ErrorBarExtent` The extent of the band. Available options include: * ``"ci"`` : Extend the band to the confidence interval of the mean. * ``"stderr"`` : The size of band are set to the value of standard error, extending from the mean. * ``"stdev"`` : The size of band are set to the value of standard deviation, extending from the mean. * ``"iqr"`` : Extend the band to the q1 and q3. **Default value:** ``"stderr"``. interpolate : :class:`Interpolate` The line interpolation method for the error band. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values. * ``"step-before"`` : a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value. * ``"step-after"`` : a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. tension : float The tension parameter for the interpolation type of the error band. """ _schema = {'$ref': '#/definitions/ErrorBandConfig'} def __init__(self, band=Undefined, borders=Undefined, extent=Undefined, interpolate=Undefined, tension=Undefined, **kwds): super(ErrorBandConfig, self).__init__(band=band, borders=borders, extent=extent, interpolate=interpolate, tension=tension, **kwds) class ErrorBandDef(CompositeMarkDef): """ErrorBandDef schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`ErrorBand` The mark type. This could a primitive mark type (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"geoshape"``, ``"rule"``, and ``"text"`` ) or a composite mark type ( ``"boxplot"``, ``"errorband"``, ``"errorbar"`` ). band : anyOf(boolean, :class:`MarkConfig`) borders : anyOf(boolean, :class:`MarkConfig`) clip : boolean Whether a composite mark be clipped to the enclosing group’s width and height. color : :class:`Color` Default color. Note that ``fill`` and ``stroke`` have higher precedence than ``color`` and will override ``color``. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** This property cannot be used in a `style config `__. extent : :class:`ErrorBarExtent` The extent of the band. Available options include: * ``"ci"`` : Extend the band to the confidence interval of the mean. * ``"stderr"`` : The size of band are set to the value of standard error, extending from the mean. * ``"stdev"`` : The size of band are set to the value of standard deviation, extending from the mean. * ``"iqr"`` : Extend the band to the q1 and q3. **Default value:** ``"stderr"``. interpolate : :class:`Interpolate` The line interpolation method for the error band. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values. * ``"step-before"`` : a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value. * ``"step-after"`` : a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. opacity : float The opacity (value between [0,1]) of the mark. orient : :class:`Orientation` Orientation of the error band. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined. tension : float The tension parameter for the interpolation type of the error band. """ _schema = {'$ref': '#/definitions/ErrorBandDef'} def __init__(self, type=Undefined, band=Undefined, borders=Undefined, clip=Undefined, color=Undefined, extent=Undefined, interpolate=Undefined, opacity=Undefined, orient=Undefined, tension=Undefined, **kwds): super(ErrorBandDef, self).__init__(type=type, band=band, borders=borders, clip=clip, color=color, extent=extent, interpolate=interpolate, opacity=opacity, orient=orient, tension=tension, **kwds) class ErrorBar(CompositeMark): """ErrorBar schema wrapper enum('errorbar') """ _schema = {'$ref': '#/definitions/ErrorBar'} def __init__(self, *args): super(ErrorBar, self).__init__(*args) class ErrorBarConfig(VegaLiteSchema): """ErrorBarConfig schema wrapper Mapping(required=[]) Attributes ---------- extent : :class:`ErrorBarExtent` The extent of the rule. Available options include: * ``"ci"`` : Extend the rule to the confidence interval of the mean. * ``"stderr"`` : The size of rule are set to the value of standard error, extending from the mean. * ``"stdev"`` : The size of rule are set to the value of standard deviation, extending from the mean. * ``"iqr"`` : Extend the rule to the q1 and q3. **Default value:** ``"stderr"``. rule : anyOf(boolean, :class:`MarkConfig`) ticks : anyOf(boolean, :class:`MarkConfig`) """ _schema = {'$ref': '#/definitions/ErrorBarConfig'} def __init__(self, extent=Undefined, rule=Undefined, ticks=Undefined, **kwds): super(ErrorBarConfig, self).__init__(extent=extent, rule=rule, ticks=ticks, **kwds) class ErrorBarDef(CompositeMarkDef): """ErrorBarDef schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`ErrorBar` The mark type. This could a primitive mark type (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"geoshape"``, ``"rule"``, and ``"text"`` ) or a composite mark type ( ``"boxplot"``, ``"errorband"``, ``"errorbar"`` ). clip : boolean Whether a composite mark be clipped to the enclosing group’s width and height. color : :class:`Color` Default color. Note that ``fill`` and ``stroke`` have higher precedence than ``color`` and will override ``color``. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** This property cannot be used in a `style config `__. extent : :class:`ErrorBarExtent` The extent of the rule. Available options include: * ``"ci"`` : Extend the rule to the confidence interval of the mean. * ``"stderr"`` : The size of rule are set to the value of standard error, extending from the mean. * ``"stdev"`` : The size of rule are set to the value of standard deviation, extending from the mean. * ``"iqr"`` : Extend the rule to the q1 and q3. **Default value:** ``"stderr"``. opacity : float The opacity (value between [0,1]) of the mark. orient : :class:`Orientation` Orientation of the error bar. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined. rule : anyOf(boolean, :class:`MarkConfig`) ticks : anyOf(boolean, :class:`MarkConfig`) """ _schema = {'$ref': '#/definitions/ErrorBarDef'} def __init__(self, type=Undefined, clip=Undefined, color=Undefined, extent=Undefined, opacity=Undefined, orient=Undefined, rule=Undefined, ticks=Undefined, **kwds): super(ErrorBarDef, self).__init__(type=type, clip=clip, color=color, extent=extent, opacity=opacity, orient=orient, rule=rule, ticks=ticks, **kwds) class ErrorBarExtent(VegaLiteSchema): """ErrorBarExtent schema wrapper enum('ci', 'iqr', 'stderr', 'stdev') """ _schema = {'$ref': '#/definitions/ErrorBarExtent'} def __init__(self, *args): super(ErrorBarExtent, self).__init__(*args) class EventStream(VegaLiteSchema): """EventStream schema wrapper Any """ _schema = {'$ref': '#/definitions/EventStream'} def __init__(self, *args, **kwds): super(EventStream, self).__init__(*args, **kwds) class FacetFieldDef(VegaLiteSchema): """FacetFieldDef schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. header : :class:`Header` An object defining properties of a facet's header. sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None) Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/FacetFieldDef'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, header=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(FacetFieldDef, self).__init__(type=type, aggregate=aggregate, bin=bin, field=field, header=header, sort=sort, timeUnit=timeUnit, title=title, **kwds) class FacetMapping(VegaLiteSchema): """FacetMapping schema wrapper Mapping(required=[]) Attributes ---------- column : :class:`FacetFieldDef` A field definition for the horizontal facet of trellis plots. row : :class:`FacetFieldDef` A field definition for the vertical facet of trellis plots. """ _schema = {'$ref': '#/definitions/FacetMapping'} def __init__(self, column=Undefined, row=Undefined, **kwds): super(FacetMapping, self).__init__(column=column, row=row, **kwds) class FacetedEncoding(VegaLiteSchema): """FacetedEncoding schema wrapper Mapping(required=[]) Attributes ---------- color : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`) Color of the marks – either fill or stroke color based on the ``filled`` property of mark definition. By default, ``color`` represents fill color for ``"area"``, ``"bar"``, ``"tick"``, ``"text"``, ``"trail"``, ``"circle"``, and ``"square"`` / stroke color for ``"line"`` and ``"point"``. **Default value:** If undefined, the default color depends on `mark config `__ 's ``color`` property. *Note:* 1) For fine-grained control over both fill and stroke colors of the marks, please use the ``fill`` and ``stroke`` channels. If either ``fill`` or ``stroke`` channel is specified, ``color`` channel will be ignored. 2) See the scale documentation for more information about customizing `color scheme `__. column : :class:`FacetFieldDef` A field definition for the horizontal facet of trellis plots. detail : anyOf(:class:`FieldDefWithoutScale`, List(:class:`FieldDefWithoutScale`)) Additional levels of detail for grouping data in aggregate views and in line, trail, and area marks without mapping data to a specific visual channel. facet : :class:`FacetFieldDef` A field definition for the (flexible) facet of trellis plots. If either ``row`` or ``column`` is specified, this channel will be ignored. fill : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`) Fill color of the marks. **Default value:** If undefined, the default color depends on `mark config `__ 's ``color`` property. *Note:* When using ``fill`` channel, ``color`` channel will be ignored. To customize both fill and stroke, please use ``fill`` and ``stroke`` channels (not ``fill`` and ``color`` ). fillOpacity : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueDefWithCondition`) Fill opacity of the marks. **Default value:** If undefined, the default opacity depends on `mark config `__ 's ``fillOpacity`` property. href : anyOf(:class:`TextFieldDefWithCondition`, :class:`TextValueDefWithCondition`) A URL to load upon mouse click. key : :class:`FieldDefWithoutScale` A data field to use as a unique key for data binding. When a visualization’s data is updated, the key value will be used to match data elements to existing mark instances. Use a key channel to enable object constancy for transitions over dynamic data. latitude : anyOf(:class:`LatLongFieldDef`, :class:`NumberValueDef`) Latitude position of geographically projected marks. latitude2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Latitude-2 position for geographically projected ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. longitude : anyOf(:class:`LatLongFieldDef`, :class:`NumberValueDef`) Longitude position of geographically projected marks. longitude2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Longitude-2 position for geographically projected ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. opacity : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueDefWithCondition`) Opacity of the marks. **Default value:** If undefined, the default opacity depends on `mark config `__ 's ``opacity`` property. order : anyOf(:class:`OrderFieldDef`, List(:class:`OrderFieldDef`), :class:`NumberValueDef`) Order of the marks. * For stacked marks, this ``order`` channel encodes `stack order `__. * For line and trail marks, this ``order`` channel encodes order of data points in the lines. This can be useful for creating `a connected scatterplot `__. Setting ``order`` to ``{"value": null}`` makes the line marks use the original order in the data sources. * Otherwise, this ``order`` channel encodes layer order of the marks. **Note** : In aggregate plots, ``order`` field should be ``aggregate`` d to avoid creating additional aggregation grouping. row : :class:`FacetFieldDef` A field definition for the vertical facet of trellis plots. shape : anyOf(:class:`ShapeFieldDefWithCondition`, :class:`ShapeValueDefWithCondition`) Shape of the mark. #. For ``point`` marks the supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) #. For ``geoshape`` marks it should be a field definition of the geojson data **Default value:** If undefined, the default shape depends on `mark config `__ 's ``shape`` property. ( ``"circle"`` if unset.) size : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueDefWithCondition`) Size of the mark. * For ``"point"``, ``"square"`` and ``"circle"``, – the symbol size, or pixel area of the mark. * For ``"bar"`` and ``"tick"`` – the bar and tick's size. * For ``"text"`` – the text's font size. * Size is unsupported for ``"line"``, ``"area"``, and ``"rect"``. (Use ``"trail"`` instead of line with varying size) stroke : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`) Stroke color of the marks. **Default value:** If undefined, the default color depends on `mark config `__ 's ``color`` property. *Note:* When using ``stroke`` channel, ``color`` channel will be ignored. To customize both stroke and fill, please use ``stroke`` and ``fill`` channels (not ``stroke`` and ``color`` ). strokeOpacity : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueDefWithCondition`) Stroke opacity of the marks. **Default value:** If undefined, the default opacity depends on `mark config `__ 's ``strokeOpacity`` property. strokeWidth : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueDefWithCondition`) Stroke width of the marks. **Default value:** If undefined, the default stroke width depends on `mark config `__ 's ``strokeWidth`` property. text : anyOf(:class:`TextFieldDefWithCondition`, :class:`TextValueDefWithCondition`) Text of the ``text`` mark. tooltip : anyOf(:class:`TextFieldDefWithCondition`, :class:`TextValueDefWithCondition`, List(:class:`TextFieldDef`), None) The tooltip text to show upon mouse hover. x : anyOf(:class:`PositionFieldDef`, :class:`XValueDef`) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(:class:`SecondaryFieldDef`, :class:`XValueDef`) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. xError : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Error value of x coordinates for error specified ``"errorbar"`` and ``"errorband"``. xError2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Secondary error value of x coordinates for error specified ``"errorbar"`` and ``"errorband"``. y : anyOf(:class:`PositionFieldDef`, :class:`YValueDef`) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(:class:`SecondaryFieldDef`, :class:`YValueDef`) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. yError : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Error value of y coordinates for error specified ``"errorbar"`` and ``"errorband"``. yError2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Secondary error value of y coordinates for error specified ``"errorbar"`` and ``"errorband"``. """ _schema = {'$ref': '#/definitions/FacetedEncoding'} def __init__(self, color=Undefined, column=Undefined, detail=Undefined, facet=Undefined, fill=Undefined, fillOpacity=Undefined, href=Undefined, key=Undefined, latitude=Undefined, latitude2=Undefined, longitude=Undefined, longitude2=Undefined, opacity=Undefined, order=Undefined, row=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, text=Undefined, tooltip=Undefined, x=Undefined, x2=Undefined, xError=Undefined, xError2=Undefined, y=Undefined, y2=Undefined, yError=Undefined, yError2=Undefined, **kwds): super(FacetedEncoding, self).__init__(color=color, column=column, detail=detail, facet=facet, fill=fill, fillOpacity=fillOpacity, href=href, key=key, latitude=latitude, latitude2=latitude2, longitude=longitude, longitude2=longitude2, opacity=opacity, order=order, row=row, shape=shape, size=size, stroke=stroke, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, text=text, tooltip=tooltip, x=x, x2=x2, xError=xError, xError2=xError2, y=y, y2=y2, yError=yError, yError2=yError2, **kwds) class Field(VegaLiteSchema): """Field schema wrapper anyOf(:class:`FieldName`, :class:`RepeatRef`) """ _schema = {'$ref': '#/definitions/Field'} def __init__(self, *args, **kwds): super(Field, self).__init__(*args, **kwds) class FieldDefWithConditionMarkPropFieldDefTypeForShapestringnull(VegaLiteSchema): """FieldDefWithConditionMarkPropFieldDefTypeForShapestringnull schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`TypeForShape` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/FieldDefWithCondition,(string|null)>'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(FieldDefWithConditionMarkPropFieldDefTypeForShapestringnull, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class FieldDefWithConditionMarkPropFieldDefnumber(VegaLiteSchema): """FieldDefWithConditionMarkPropFieldDefnumber schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalNumberValueDef`, List(:class:`ConditionalNumberValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/FieldDefWithCondition'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(FieldDefWithConditionMarkPropFieldDefnumber, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class FieldDefWithConditionMarkPropFieldDefstringnull(VegaLiteSchema): """FieldDefWithConditionMarkPropFieldDefstringnull schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/FieldDefWithCondition'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(FieldDefWithConditionMarkPropFieldDefstringnull, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class FieldDefWithConditionTextFieldDefValue(VegaLiteSchema): """FieldDefWithConditionTextFieldDefValue schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalValueDef`, List(:class:`ConditionalValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : string The text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : enum('number', 'time') The format type for labels ( ``"number"`` or ``"time"`` ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/FieldDefWithCondition'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(FieldDefWithConditionTextFieldDefValue, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, format=format, formatType=formatType, timeUnit=timeUnit, title=title, **kwds) class FieldDefWithoutScale(VegaLiteSchema): """FieldDefWithoutScale schema wrapper Mapping(required=[type]) Definition object for a data field, its type and transformation of an encoding channel. Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/FieldDefWithoutScale'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(FieldDefWithoutScale, self).__init__(type=type, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class FieldName(Field): """FieldName schema wrapper string """ _schema = {'$ref': '#/definitions/FieldName'} def __init__(self, *args): super(FieldName, self).__init__(*args) class FontStyle(VegaLiteSchema): """FontStyle schema wrapper string """ _schema = {'$ref': '#/definitions/FontStyle'} def __init__(self, *args): super(FontStyle, self).__init__(*args) class FontWeight(VegaLiteSchema): """FontWeight schema wrapper enum('normal', 'bold', 'lighter', 'bolder', 100, 200, 300, 400, 500, 600, 700, 800, 900) """ _schema = {'$ref': '#/definitions/FontWeight'} def __init__(self, *args): super(FontWeight, self).__init__(*args) class Generator(Data): """Generator schema wrapper anyOf(:class:`SequenceGenerator`, :class:`SphereGenerator`, :class:`GraticuleGenerator`) """ _schema = {'$ref': '#/definitions/Generator'} def __init__(self, *args, **kwds): super(Generator, self).__init__(*args, **kwds) class GenericUnitSpecEncodingAnyMark(VegaLiteSchema): """GenericUnitSpecEncodingAnyMark schema wrapper Mapping(required=[mark]) Base interface for a unit (single-view) specification. Attributes ---------- mark : :class:`AnyMark` A string describing the mark type (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"rule"``, ``"geoshape"``, and ``"text"`` ) or a `mark definition object `__. data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. encoding : :class:`Encoding` A key-value mapping between encoding channels and definition of fields. height : float The height of a visualization. **Default value:** * If a view's `autosize `__ type is ``"fit"`` or its y-channel has a `continuous scale `__, the height will be the value of `config.view.height `__. * For y-axis with a band or point scale: if `rangeStep `__ is a numeric value or unspecified, the height is `determined by the range step, paddings, and the cardinality of the field mapped to y-channel `__. Otherwise, if the ``rangeStep`` is ``null``, the height will be the value of `config.view.height `__. * If no field is mapped to ``y`` channel, the ``height`` will be the value of ``rangeStep``. **Note** : For plots with `row and column channels `__, this represents the height of a single view. **See also:** The documentation for `width and height `__ contains more examples. name : string Name of the visualization for later reference. projection : :class:`Projection` An object defining properties of geographic projection, which will be applied to ``shape`` path for ``"geoshape"`` marks and to ``latitude`` and ``"longitude"`` channels for other marks. selection : Mapping(required=[]) A key-value mapping between selection names and definitions. title : anyOf(string, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. view : :class:`ViewBackground` An object defining the view background's fill and stroke. **Default value:** none (transparent) width : float The width of a visualization. **Default value:** This will be determined by the following rules: * If a view's `autosize `__ type is ``"fit"`` or its x-channel has a `continuous scale `__, the width will be the value of `config.view.width `__. * For x-axis with a band or point scale: if `rangeStep `__ is a numeric value or unspecified, the width is `determined by the range step, paddings, and the cardinality of the field mapped to x-channel `__. Otherwise, if the ``rangeStep`` is ``null``, the width will be the value of `config.view.width `__. * If no field is mapped to ``x`` channel, the ``width`` will be the value of `config.scale.textXRangeStep `__ for ``text`` mark and the value of ``rangeStep`` for other marks. **Note:** For plots with `row and column channels `__, this represents the width of a single view. **See also:** The documentation for `width and height `__ contains more examples. """ _schema = {'$ref': '#/definitions/GenericUnitSpec'} def __init__(self, mark=Undefined, data=Undefined, description=Undefined, encoding=Undefined, height=Undefined, name=Undefined, projection=Undefined, selection=Undefined, title=Undefined, transform=Undefined, view=Undefined, width=Undefined, **kwds): super(GenericUnitSpecEncodingAnyMark, self).__init__(mark=mark, data=data, description=description, encoding=encoding, height=height, name=name, projection=projection, selection=selection, title=title, transform=transform, view=view, width=width, **kwds) class GraticuleGenerator(Generator): """GraticuleGenerator schema wrapper Mapping(required=[graticule]) Attributes ---------- graticule : anyOf(enum(True), :class:`GraticuleParams`) Generate graticule GeoJSON data for geographic reference lines. name : string Provide a placeholder name and bind data at runtime. """ _schema = {'$ref': '#/definitions/GraticuleGenerator'} def __init__(self, graticule=Undefined, name=Undefined, **kwds): super(GraticuleGenerator, self).__init__(graticule=graticule, name=name, **kwds) class GraticuleParams(VegaLiteSchema): """GraticuleParams schema wrapper Mapping(required=[]) Attributes ---------- extent : List(List(float)) Sets both the major and minor extents to the same values. extentMajor : List(List(float)) The major extent of the graticule as a two-element array of coordinates. extentMinor : List(List(float)) The minor extent of the graticule as a two-element array of coordinates. precision : float The precision of the graticule in degrees. **Default value:** ``2.5`` step : List(float) Sets both the major and minor step angles to the same values. stepMajor : List(float) The major step angles of the graticule. **Default value:** ``[90, 360]`` stepMinor : List(float) The minor step angles of the graticule. **Default value:** ``[10, 10]`` """ _schema = {'$ref': '#/definitions/GraticuleParams'} def __init__(self, extent=Undefined, extentMajor=Undefined, extentMinor=Undefined, precision=Undefined, step=Undefined, stepMajor=Undefined, stepMinor=Undefined, **kwds): super(GraticuleParams, self).__init__(extent=extent, extentMajor=extentMajor, extentMinor=extentMinor, precision=precision, step=step, stepMajor=stepMajor, stepMinor=stepMinor, **kwds) class Header(VegaLiteSchema): """Header schema wrapper Mapping(required=[]) Headers of row / column channels for faceted plots. Attributes ---------- format : string The text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : enum('number', 'time') The format type for labels ( ``"number"`` or ``"time"`` ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. labelAlign : :class:`Align` Horizontal text alignment of header labels. labelAnchor : :class:`TitleAnchor` The anchor position for placing the labels. One of ``"start"``, ``"middle"``, or ``"end"``. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label. labelAngle : float The rotation angle of the header labels. **Default value:** ``0`` for column header, ``-90`` for row header. labelColor : :class:`Color` The color of the header label, can be in hex color code or regular color name. labelFont : string The font of the header label. labelFontSize : float The font size of the header label, in pixels. labelFontStyle : :class:`FontStyle` The font style of the header label. labelLimit : float The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0``, indicating no limit labelOrient : :class:`Orient` The orientation of the header label. One of ``"top"``, ``"bottom"``, ``"left"`` or ``"right"``. labelPadding : float The padding, in pixel, between facet header's label and the plot. **Default value:** ``10`` labels : boolean A boolean flag indicating if labels should be included as part of the header. **Default value:** ``true``. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. titleAlign : :class:`Align` Horizontal text alignment (to the anchor) of header titles. titleAnchor : :class:`TitleAnchor` The anchor position for placing the title. One of ``"start"``, ``"middle"``, or ``"end"``. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title. titleAngle : float The rotation angle of the header title. **Default value:** ``0``. titleBaseline : :class:`TextBaseline` Vertical text baseline for the header title. One of ``"top"``, ``"bottom"``, ``"middle"``. **Default value:** ``"middle"`` titleColor : :class:`Color` Color of the header title, can be in hex color code or regular color name. titleFont : string Font of the header title. (e.g., ``"Helvetica Neue"`` ). titleFontSize : float Font size of the header title. titleFontStyle : :class:`FontStyle` The font style of the header title. titleFontWeight : :class:`FontWeight` Font weight of the header title. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). titleLimit : float The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0``, indicating no limit titleOrient : :class:`Orient` The orientation of the header title. One of ``"top"``, ``"bottom"``, ``"left"`` or ``"right"``. titlePadding : float The padding, in pixel, between facet header's title and the label. **Default value:** ``10`` """ _schema = {'$ref': '#/definitions/Header'} def __init__(self, format=Undefined, formatType=Undefined, labelAlign=Undefined, labelAnchor=Undefined, labelAngle=Undefined, labelColor=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelLimit=Undefined, labelOrient=Undefined, labelPadding=Undefined, labels=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleAngle=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleOrient=Undefined, titlePadding=Undefined, **kwds): super(Header, self).__init__(format=format, formatType=formatType, labelAlign=labelAlign, labelAnchor=labelAnchor, labelAngle=labelAngle, labelColor=labelColor, labelFont=labelFont, labelFontSize=labelFontSize, labelFontStyle=labelFontStyle, labelLimit=labelLimit, labelOrient=labelOrient, labelPadding=labelPadding, labels=labels, title=title, titleAlign=titleAlign, titleAnchor=titleAnchor, titleAngle=titleAngle, titleBaseline=titleBaseline, titleColor=titleColor, titleFont=titleFont, titleFontSize=titleFontSize, titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight, titleLimit=titleLimit, titleOrient=titleOrient, titlePadding=titlePadding, **kwds) class HeaderConfig(VegaLiteSchema): """HeaderConfig schema wrapper Mapping(required=[]) Attributes ---------- format : string The text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : enum('number', 'time') The format type for labels ( ``"number"`` or ``"time"`` ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. labelAlign : :class:`Align` Horizontal text alignment of header labels. labelAnchor : :class:`TitleAnchor` The anchor position for placing the labels. One of ``"start"``, ``"middle"``, or ``"end"``. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label. labelAngle : float The rotation angle of the header labels. **Default value:** ``0`` for column header, ``-90`` for row header. labelColor : :class:`Color` The color of the header label, can be in hex color code or regular color name. labelFont : string The font of the header label. labelFontSize : float The font size of the header label, in pixels. labelFontStyle : :class:`FontStyle` The font style of the header label. labelLimit : float The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0``, indicating no limit labelOrient : :class:`Orient` The orientation of the header label. One of ``"top"``, ``"bottom"``, ``"left"`` or ``"right"``. labelPadding : float The padding, in pixel, between facet header's label and the plot. **Default value:** ``10`` labels : boolean A boolean flag indicating if labels should be included as part of the header. **Default value:** ``true``. shortTimeLabels : boolean Whether month names and weekday names should be abbreviated. **Default value:** ``false`` title : None Set to null to disable title for the axis, legend, or header. titleAlign : :class:`Align` Horizontal text alignment (to the anchor) of header titles. titleAnchor : :class:`TitleAnchor` The anchor position for placing the title. One of ``"start"``, ``"middle"``, or ``"end"``. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title. titleAngle : float The rotation angle of the header title. **Default value:** ``0``. titleBaseline : :class:`TextBaseline` Vertical text baseline for the header title. One of ``"top"``, ``"bottom"``, ``"middle"``. **Default value:** ``"middle"`` titleColor : :class:`Color` Color of the header title, can be in hex color code or regular color name. titleFont : string Font of the header title. (e.g., ``"Helvetica Neue"`` ). titleFontSize : float Font size of the header title. titleFontStyle : :class:`FontStyle` The font style of the header title. titleFontWeight : :class:`FontWeight` Font weight of the header title. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). titleLimit : float The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0``, indicating no limit titleOrient : :class:`Orient` The orientation of the header title. One of ``"top"``, ``"bottom"``, ``"left"`` or ``"right"``. titlePadding : float The padding, in pixel, between facet header's title and the label. **Default value:** ``10`` """ _schema = {'$ref': '#/definitions/HeaderConfig'} def __init__(self, format=Undefined, formatType=Undefined, labelAlign=Undefined, labelAnchor=Undefined, labelAngle=Undefined, labelColor=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelLimit=Undefined, labelOrient=Undefined, labelPadding=Undefined, labels=Undefined, shortTimeLabels=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleAngle=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleOrient=Undefined, titlePadding=Undefined, **kwds): super(HeaderConfig, self).__init__(format=format, formatType=formatType, labelAlign=labelAlign, labelAnchor=labelAnchor, labelAngle=labelAngle, labelColor=labelColor, labelFont=labelFont, labelFontSize=labelFontSize, labelFontStyle=labelFontStyle, labelLimit=labelLimit, labelOrient=labelOrient, labelPadding=labelPadding, labels=labels, shortTimeLabels=shortTimeLabels, title=title, titleAlign=titleAlign, titleAnchor=titleAnchor, titleAngle=titleAngle, titleBaseline=titleBaseline, titleColor=titleColor, titleFont=titleFont, titleFontSize=titleFontSize, titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight, titleLimit=titleLimit, titleOrient=titleOrient, titlePadding=titlePadding, **kwds) class HexColor(Color): """HexColor schema wrapper string """ _schema = {'$ref': '#/definitions/HexColor'} def __init__(self, *args): super(HexColor, self).__init__(*args) class ImputeMethod(VegaLiteSchema): """ImputeMethod schema wrapper enum('value', 'median', 'max', 'min', 'mean') """ _schema = {'$ref': '#/definitions/ImputeMethod'} def __init__(self, *args): super(ImputeMethod, self).__init__(*args) class ImputeParams(VegaLiteSchema): """ImputeParams schema wrapper Mapping(required=[]) Attributes ---------- frame : List(anyOf(None, float)) A frame specification as a two-element array used to control the window over which the specified method is applied. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. For example, the value ``[-5, 5]`` indicates that the window should include five objects preceding and five objects following the current object. **Default value:** : ``[null, null]`` indicating that the window includes all objects. keyvals : anyOf(List(Any), :class:`ImputeSequence`) Defines the key values that should be considered for imputation. An array of key values or an object defining a `number sequence `__. If provided, this will be used in addition to the key values observed within the input data. If not provided, the values will be derived from all unique values of the ``key`` field. For ``impute`` in ``encoding``, the key field is the x-field if the y-field is imputed, or vice versa. If there is no impute grouping, this property *must* be specified. method : :class:`ImputeMethod` The imputation method to use for the field value of imputed data objects. One of ``value``, ``mean``, ``median``, ``max`` or ``min``. **Default value:** ``"value"`` value : Any The field value to use when the imputation ``method`` is ``"value"``. """ _schema = {'$ref': '#/definitions/ImputeParams'} def __init__(self, frame=Undefined, keyvals=Undefined, method=Undefined, value=Undefined, **kwds): super(ImputeParams, self).__init__(frame=frame, keyvals=keyvals, method=method, value=value, **kwds) class ImputeSequence(VegaLiteSchema): """ImputeSequence schema wrapper Mapping(required=[stop]) Attributes ---------- stop : float The ending value(exclusive) of the sequence. start : float The starting value of the sequence. **Default value:** ``0`` step : float The step value between sequence entries. **Default value:** ``1`` or ``-1`` if ``stop < start`` """ _schema = {'$ref': '#/definitions/ImputeSequence'} def __init__(self, stop=Undefined, start=Undefined, step=Undefined, **kwds): super(ImputeSequence, self).__init__(stop=stop, start=start, step=step, **kwds) class InlineData(DataSource): """InlineData schema wrapper Mapping(required=[values]) Attributes ---------- values : :class:`InlineDataset` The full data set, included inline. This can be an array of objects or primitive values, an object, or a string. Arrays of primitive values are ingested as objects with a ``data`` property. Strings are parsed according to the specified format type. format : :class:`DataFormat` An object that specifies the format for parsing the data. name : string Provide a placeholder name and bind data at runtime. """ _schema = {'$ref': '#/definitions/InlineData'} def __init__(self, values=Undefined, format=Undefined, name=Undefined, **kwds): super(InlineData, self).__init__(values=values, format=format, name=name, **kwds) class InlineDataset(VegaLiteSchema): """InlineDataset schema wrapper anyOf(List(float), List(string), List(boolean), List(Mapping(required=[])), string, Mapping(required=[])) """ _schema = {'$ref': '#/definitions/InlineDataset'} def __init__(self, *args, **kwds): super(InlineDataset, self).__init__(*args, **kwds) class InputBinding(Binding): """InputBinding schema wrapper Mapping(required=[]) Attributes ---------- autocomplete : string debounce : float element : :class:`Element` input : string name : string placeholder : string type : string """ _schema = {'$ref': '#/definitions/InputBinding'} def __init__(self, autocomplete=Undefined, debounce=Undefined, element=Undefined, input=Undefined, name=Undefined, placeholder=Undefined, type=Undefined, **kwds): super(InputBinding, self).__init__(autocomplete=autocomplete, debounce=debounce, element=element, input=input, name=name, placeholder=placeholder, type=type, **kwds) class Interpolate(VegaLiteSchema): """Interpolate schema wrapper enum('linear', 'linear-closed', 'step', 'step-before', 'step-after', 'basis', 'basis-open', 'basis-closed', 'cardinal', 'cardinal-open', 'cardinal-closed', 'bundle', 'monotone') """ _schema = {'$ref': '#/definitions/Interpolate'} def __init__(self, *args): super(Interpolate, self).__init__(*args) class IntervalSelectionConfig(VegaLiteSchema): """IntervalSelectionConfig schema wrapper Mapping(required=[]) Attributes ---------- bind : enum('scales') Establishes a two-way binding between the interval selection and the scales used within the same view. This allows a user to interactively pan and zoom the view. **See also:** `bind `__ documentation. clear : anyOf(:class:`EventStream`, boolean) Clears the selection, emptying it of all values. Can be an `EventStream `__ or ``false`` to disable. **Default value:** ``dblclick``. **See also:** `clear `__ documentation. empty : enum('all', 'none') By default, ``all`` data values are considered to lie within an empty selection. When set to ``none``, empty selections contain no data values. encodings : List(:class:`SingleDefUnitChannel`) An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection. **See also:** `encodings `__ documentation. fields : List(:class:`FieldName`) An array of field names whose values must match for a data tuple to fall within the selection. **See also:** `fields `__ documentation. init : :class:`SelectionInitIntervalMapping` Initialize the selection with a mapping between `projected channels or field names `__ and arrays of initial values. **See also:** `init `__ documentation. mark : :class:`BrushConfig` An interval selection also adds a rectangle mark to depict the extents of the interval. The ``mark`` property can be used to customize the appearance of the mark. **See also:** `mark `__ documentation. on : :class:`EventStream` A `Vega event stream `__ (object or selector) that triggers the selection. For interval selections, the event stream must specify a `start and end `__. resolve : :class:`SelectionResolution` With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain. **See also:** `resolve `__ documentation. translate : anyOf(string, boolean) When truthy, allows a user to interactively move an interval selection back-and-forth. Can be ``true``, ``false`` (to disable panning), or a `Vega event stream definition `__ which must include a start and end event to trigger continuous panning. **Default value:** ``true``, which corresponds to ``[mousedown, window:mouseup] > window:mousemove!`` which corresponds to clicks and dragging within an interval selection to reposition it. **See also:** `translate `__ documentation. zoom : anyOf(string, boolean) When truthy, allows a user to interactively resize an interval selection. Can be ``true``, ``false`` (to disable zooming), or a `Vega event stream definition `__. Currently, only ``wheel`` events are supported. **Default value:** ``true``, which corresponds to ``wheel!``. **See also:** `zoom `__ documentation. """ _schema = {'$ref': '#/definitions/IntervalSelectionConfig'} def __init__(self, bind=Undefined, clear=Undefined, empty=Undefined, encodings=Undefined, fields=Undefined, init=Undefined, mark=Undefined, on=Undefined, resolve=Undefined, translate=Undefined, zoom=Undefined, **kwds): super(IntervalSelectionConfig, self).__init__(bind=bind, clear=clear, empty=empty, encodings=encodings, fields=fields, init=init, mark=mark, on=on, resolve=resolve, translate=translate, zoom=zoom, **kwds) class JoinAggregateFieldDef(VegaLiteSchema): """JoinAggregateFieldDef schema wrapper Mapping(required=[op, as]) Attributes ---------- op : :class:`AggregateOp` The aggregation operation to apply (e.g., sum, average or count). See the list of all supported operations `here `__. field : :class:`FieldName` The data field for which to compute the aggregate function. This can be omitted for functions that do not operate over a field such as ``count``. as : :class:`FieldName` The output name for the join aggregate operation. """ _schema = {'$ref': '#/definitions/JoinAggregateFieldDef'} def __init__(self, op=Undefined, field=Undefined, **kwds): super(JoinAggregateFieldDef, self).__init__(op=op, field=field, **kwds) class JsonDataFormat(DataFormat): """JsonDataFormat schema wrapper Mapping(required=[]) Attributes ---------- parse : anyOf(:class:`Parse`, None) If set to ``null``, disable type inference based on the spec and only use type inference based on the data. Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of ``"number"``, ``"boolean"``, ``"date"``, or null (do not parse the field)). For example, ``"parse": {"modified_on": "date"}`` parses the ``modified_on`` field in each input record a Date value. For ``"date"``, we parse data based using Javascript's `Date.parse() `__. For Specific date formats can be provided (e.g., ``{foo: "date:'%m%d%Y'"}`` ), using the `d3-time-format syntax `__. UTC date format parsing is supported similarly (e.g., ``{foo: "utc:'%m%d%Y'"}`` ). See more about `UTC time `__ property : string The JSON property containing the desired data. This parameter can be used when the loaded JSON file may have surrounding structure or meta-data. For example ``"property": "values.features"`` is equivalent to retrieving ``json.values.features`` from the loaded JSON object. type : enum('json') Type of input data: ``"json"``, ``"csv"``, ``"tsv"``, ``"dsv"``. **Default value:** The default format type is determined by the extension of the file URL. If no extension is detected, ``"json"`` will be used by default. """ _schema = {'$ref': '#/definitions/JsonDataFormat'} def __init__(self, parse=Undefined, property=Undefined, type=Undefined, **kwds): super(JsonDataFormat, self).__init__(parse=parse, property=property, type=type, **kwds) class LabelOverlap(VegaLiteSchema): """LabelOverlap schema wrapper anyOf(boolean, enum('parity'), enum('greedy')) """ _schema = {'$ref': '#/definitions/LabelOverlap'} def __init__(self, *args, **kwds): super(LabelOverlap, self).__init__(*args, **kwds) class LatLongFieldDef(VegaLiteSchema): """LatLongFieldDef schema wrapper Mapping(required=[]) Attributes ---------- aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : enum('quantitative') The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _schema = {'$ref': '#/definitions/LatLongFieldDef'} def __init__(self, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(LatLongFieldDef, self).__init__(aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, type=type, **kwds) class LayoutAlign(VegaLiteSchema): """LayoutAlign schema wrapper enum('all', 'each', 'none') """ _schema = {'$ref': '#/definitions/LayoutAlign'} def __init__(self, *args): super(LayoutAlign, self).__init__(*args) class LayoutBounds(VegaLiteSchema): """LayoutBounds schema wrapper anyOf(enum('full'), enum('flush'), :class:`SignalRef`) """ _schema = {'$ref': '#/definitions/LayoutBounds'} def __init__(self, *args, **kwds): super(LayoutBounds, self).__init__(*args, **kwds) class Legend(VegaLiteSchema): """Legend schema wrapper Mapping(required=[]) Properties of a legend or boolean flag for determining whether to show it. Attributes ---------- clipHeight : float The height in pixels to clip symbol legend entries and limit their size. columnPadding : float The horizontal padding in pixels between symbol legend entries. **Default value:** ``10``. columns : float The number of columns in which to arrange symbol legend entries. A value of ``0`` or lower indicates a single row with one column per entry. cornerRadius : float Corner radius for the full legend. direction : :class:`Orientation` The direction of the legend, one of ``"vertical"`` or ``"horizontal"``. **Default value:** * For top-/bottom- ``orient`` ed legends, ``"horizontal"`` * For left-/right- ``orient`` ed legends, ``"vertical"`` * For top/bottom-left/right- ``orient`` ed legends, ``"horizontal"`` for gradient legends and ``"vertical"`` for symbol legends. fillColor : :class:`Color` Background fill color for the full legend. format : string The text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : enum('number', 'time') The format type for labels ( ``"number"`` or ``"time"`` ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. gradientLength : float The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient. **Default value:** ``200``. gradientOpacity : float Opacity of the color gradient. gradientStrokeColor : :class:`Color` The color of the gradient stroke, can be in hex color code or regular color name. **Default value:** ``"lightGray"``. gradientStrokeWidth : float The width of the gradient stroke, in pixels. **Default value:** ``0``. gradientThickness : float The thickness in pixels of the color gradient. This value corresponds to the width of a vertical gradient or the height of a horizontal gradient. **Default value:** ``16``. gridAlign : :class:`LayoutAlign` The alignment to apply to symbol legends rows and columns. The supported string values are ``"all"``, ``"each"`` (the default), and ``none``. For more information, see the `grid layout documentation `__. **Default value:** ``"each"``. labelAlign : :class:`Align` The alignment of the legend label, can be left, center, or right. labelBaseline : :class:`TextBaseline` The position of the baseline of legend label, can be ``"top"``, ``"middle"``, ``"bottom"``, or ``"alphabetic"``. **Default value:** ``"middle"``. labelColor : :class:`Color` The color of the legend label, can be in hex color code or regular color name. labelFont : string The font of the legend label. labelFontSize : float The font size of legend label. **Default value:** ``10``. labelFontStyle : :class:`FontStyle` The font style of legend label. labelFontWeight : :class:`FontWeight` The font weight of legend label. labelLimit : float Maximum allowed pixel width of legend tick labels. **Default value:** ``160``. labelOffset : float The offset of the legend label. labelOpacity : float Opacity of labels. labelOverlap : :class:`LabelOverlap` The strategy to use for resolving overlap of labels in gradient legends. If ``false``, no overlap reduction is attempted. If set to ``true`` (default) or ``"parity"``, a strategy of removing every other label is used. If set to ``"greedy"``, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes). **Default value:** ``true``. labelPadding : float Padding in pixels between the legend and legend labels. labelSeparation : float The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default ``0`` ). This property is ignored if *labelOverlap* resolution is not enabled. legendX : float Custom x-position for legend with orient "none". legendY : float Custom y-position for legend with orient "none". offset : float The offset in pixels by which to displace the legend from the data rectangle and axes. **Default value:** ``18``. orient : :class:`LegendOrient` The orientation of the legend, which determines how the legend is positioned within the scene. One of ``"left"``, ``"right"``, ``"top"``, ``"bottom"``, ``"top-left"``, ``"top-right"``, ``"bottom-left"``, ``"bottom-right"``, ``"none"``. **Default value:** ``"right"`` padding : float The padding between the border and content of the legend group. **Default value:** ``0``. rowPadding : float The vertical padding in pixels between symbol legend entries. **Default value:** ``2``. strokeColor : :class:`Color` Border stroke color for the full legend. symbolDash : List(float) An array of alternating [stroke, space] lengths for dashed symbol strokes. symbolDashOffset : float The pixel offset at which to start drawing with the symbol stroke dash array. symbolFillColor : :class:`Color` The color of the legend symbol, symbolOffset : float Horizontal pixel offset for legend symbols. **Default value:** ``0``. symbolOpacity : float Opacity of the legend symbols. symbolSize : float The size of the legend symbol, in pixels. **Default value:** ``100``. symbolStrokeColor : :class:`Color` Stroke color for legend symbols. symbolStrokeWidth : float The width of the symbol's stroke. **Default value:** ``1.5``. symbolType : :class:`SymbolShape` The symbol shape. One of the plotting shapes ``circle`` (default), ``square``, ``cross``, ``diamond``, ``triangle-up``, ``triangle-down``, ``triangle-right``, or ``triangle-left``, the line symbol ``stroke``, or one of the centered directional shapes ``arrow``, ``wedge``, or ``triangle``. Alternatively, a custom `SVG path string `__ can be provided. For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions. **Default value:** ``"circle"``. tickCount : float The desired number of tick values for quantitative legends. tickMinStep : float The minimum desired step between legend ticks, in terms of scale domain values. For example, a value of ``1`` indicates that ticks should not be less than 1 unit apart. If ``tickMinStep`` is specified, the ``tickCount`` value will be adjusted, if necessary, to enforce the minimum step value. **Default value** : ``undefined`` title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. titleAlign : :class:`Align` Horizontal text alignment for legend titles. **Default value:** ``"left"``. titleAnchor : :class:`TitleAnchor` Text anchor position for placing legend titles. titleBaseline : :class:`TextBaseline` Vertical text baseline for legend titles. **Default value:** ``"top"``. titleColor : :class:`Color` The color of the legend title, can be in hex color code or regular color name. titleFont : string The font of the legend title. titleFontSize : float The font size of the legend title. titleFontStyle : :class:`FontStyle` The font style of the legend title. titleFontWeight : :class:`FontWeight` The font weight of the legend title. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). titleLimit : float Maximum allowed pixel width of legend titles. **Default value:** ``180``. titleOpacity : float Opacity of the legend title. titleOrient : :class:`Orient` Orientation of the legend title. titlePadding : float The padding, in pixels, between title and legend. **Default value:** ``5``. type : enum('symbol', 'gradient') The type of the legend. Use ``"symbol"`` to create a discrete legend and ``"gradient"`` for a continuous color gradient. **Default value:** ``"gradient"`` for non-binned quantitative fields and temporal fields; ``"symbol"`` otherwise. values : List(anyOf(float, string, boolean, :class:`DateTime`)) Explicitly set the visible legend values. zindex : float A non-negative integer indicating the z-index of the legend. If zindex is 0, legend should be drawn behind all chart elements. To put them in front, use zindex = 1. """ _schema = {'$ref': '#/definitions/Legend'} def __init__(self, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined, cornerRadius=Undefined, direction=Undefined, fillColor=Undefined, format=Undefined, formatType=Undefined, gradientLength=Undefined, gradientOpacity=Undefined, gradientStrokeColor=Undefined, gradientStrokeWidth=Undefined, gradientThickness=Undefined, gridAlign=Undefined, labelAlign=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, legendX=Undefined, legendY=Undefined, offset=Undefined, orient=Undefined, padding=Undefined, rowPadding=Undefined, strokeColor=Undefined, symbolDash=Undefined, symbolDashOffset=Undefined, symbolFillColor=Undefined, symbolOffset=Undefined, symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined, symbolStrokeWidth=Undefined, symbolType=Undefined, tickCount=Undefined, tickMinStep=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleOpacity=Undefined, titleOrient=Undefined, titlePadding=Undefined, type=Undefined, values=Undefined, zindex=Undefined, **kwds): super(Legend, self).__init__(clipHeight=clipHeight, columnPadding=columnPadding, columns=columns, cornerRadius=cornerRadius, direction=direction, fillColor=fillColor, format=format, formatType=formatType, gradientLength=gradientLength, gradientOpacity=gradientOpacity, gradientStrokeColor=gradientStrokeColor, gradientStrokeWidth=gradientStrokeWidth, gradientThickness=gradientThickness, gridAlign=gridAlign, labelAlign=labelAlign, labelBaseline=labelBaseline, labelColor=labelColor, labelFont=labelFont, labelFontSize=labelFontSize, labelFontStyle=labelFontStyle, labelFontWeight=labelFontWeight, labelLimit=labelLimit, labelOffset=labelOffset, labelOpacity=labelOpacity, labelOverlap=labelOverlap, labelPadding=labelPadding, labelSeparation=labelSeparation, legendX=legendX, legendY=legendY, offset=offset, orient=orient, padding=padding, rowPadding=rowPadding, strokeColor=strokeColor, symbolDash=symbolDash, symbolDashOffset=symbolDashOffset, symbolFillColor=symbolFillColor, symbolOffset=symbolOffset, symbolOpacity=symbolOpacity, symbolSize=symbolSize, symbolStrokeColor=symbolStrokeColor, symbolStrokeWidth=symbolStrokeWidth, symbolType=symbolType, tickCount=tickCount, tickMinStep=tickMinStep, title=title, titleAlign=titleAlign, titleAnchor=titleAnchor, titleBaseline=titleBaseline, titleColor=titleColor, titleFont=titleFont, titleFontSize=titleFontSize, titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight, titleLimit=titleLimit, titleOpacity=titleOpacity, titleOrient=titleOrient, titlePadding=titlePadding, type=type, values=values, zindex=zindex, **kwds) class LegendConfig(VegaLiteSchema): """LegendConfig schema wrapper Mapping(required=[]) Attributes ---------- clipHeight : float The height in pixels to clip symbol legend entries and limit their size. columnPadding : float The horizontal padding in pixels between symbol legend entries. **Default value:** ``10``. columns : float The number of columns in which to arrange symbol legend entries. A value of ``0`` or lower indicates a single row with one column per entry. cornerRadius : float Corner radius for the full legend. fillColor : :class:`Color` Background fill color for the full legend. gradientDirection : :class:`Orientation` The default direction ( ``"horizontal"`` or ``"vertical"`` ) for gradient legends. **Default value:** ``"vertical"``. gradientHorizontalMaxLength : float Max legend length for a horizontal gradient when ``config.legend.gradientLength`` is undefined. **Default value:** ``200`` gradientHorizontalMinLength : float Min legend length for a horizontal gradient when ``config.legend.gradientLength`` is undefined. **Default value:** ``100`` gradientLabelLimit : float The maximum allowed length in pixels of color ramp gradient labels. gradientLabelOffset : float Vertical offset in pixels for color ramp gradient labels. **Default value:** ``2``. gradientLength : float The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient. **Default value:** ``200``. gradientOpacity : float Opacity of the color gradient. gradientStrokeColor : :class:`Color` The color of the gradient stroke, can be in hex color code or regular color name. **Default value:** ``"lightGray"``. gradientStrokeWidth : float The width of the gradient stroke, in pixels. **Default value:** ``0``. gradientThickness : float The thickness in pixels of the color gradient. This value corresponds to the width of a vertical gradient or the height of a horizontal gradient. **Default value:** ``16``. gradientVerticalMaxLength : float Max legend length for a vertical gradient when ``config.legend.gradientLength`` is undefined. **Default value:** ``200`` gradientVerticalMinLength : float Min legend length for a vertical gradient when ``config.legend.gradientLength`` is undefined. **Default value:** ``100`` gridAlign : :class:`LayoutAlign` The alignment to apply to symbol legends rows and columns. The supported string values are ``"all"``, ``"each"`` (the default), and ``none``. For more information, see the `grid layout documentation `__. **Default value:** ``"each"``. labelAlign : :class:`Align` The alignment of the legend label, can be left, center, or right. labelBaseline : :class:`TextBaseline` The position of the baseline of legend label, can be ``"top"``, ``"middle"``, ``"bottom"``, or ``"alphabetic"``. **Default value:** ``"middle"``. labelColor : :class:`Color` The color of the legend label, can be in hex color code or regular color name. labelFont : string The font of the legend label. labelFontSize : float The font size of legend label. **Default value:** ``10``. labelFontStyle : :class:`FontStyle` The font style of legend label. labelFontWeight : :class:`FontWeight` The font weight of legend label. labelLimit : float Maximum allowed pixel width of legend tick labels. **Default value:** ``160``. labelOffset : float The offset of the legend label. labelOpacity : float Opacity of labels. labelOverlap : :class:`LabelOverlap` The strategy to use for resolving overlap of labels in gradient legends. If ``false``, no overlap reduction is attempted. If set to ``true`` or ``"parity"``, a strategy of removing every other label is used. If set to ``"greedy"``, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes). **Default value:** ``"greedy"`` for ``log scales otherwise`` true`. labelPadding : float Padding in pixels between the legend and legend labels. labelSeparation : float The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default ``0`` ). This property is ignored if *labelOverlap* resolution is not enabled. layout : :class:`LegendLayout` Legend orient group layout parameters. legendX : float Custom x-position for legend with orient "none". legendY : float Custom y-position for legend with orient "none". offset : float The offset in pixels by which to displace the legend from the data rectangle and axes. **Default value:** ``18``. orient : :class:`LegendOrient` The orientation of the legend, which determines how the legend is positioned within the scene. One of "left", "right", "top-left", "top-right", "bottom-left", "bottom-right", "none". **Default value:** ``"right"`` padding : float The padding between the border and content of the legend group. **Default value:** ``0``. rowPadding : float The vertical padding in pixels between symbol legend entries. **Default value:** ``2``. shortTimeLabels : boolean Whether month names and weekday names should be abbreviated. **Default value:** ``false`` strokeColor : :class:`Color` Border stroke color for the full legend. strokeDash : List(float) Border stroke dash pattern for the full legend. strokeWidth : float Border stroke width for the full legend. symbolBaseFillColor : :class:`Color` Default fill color for legend symbols. Only applied if there is no ``"fill"`` scale color encoding for the legend. **Default value:** ``"transparent"``. symbolBaseStrokeColor : :class:`Color` Default stroke color for legend symbols. Only applied if there is no ``"fill"`` scale color encoding for the legend. **Default value:** ``"gray"``. symbolDash : List(float) An array of alternating [stroke, space] lengths for dashed symbol strokes. symbolDashOffset : float The pixel offset at which to start drawing with the symbol stroke dash array. symbolDirection : :class:`Orientation` The default direction ( ``"horizontal"`` or ``"vertical"`` ) for symbol legends. **Default value:** ``"vertical"``. symbolFillColor : :class:`Color` The color of the legend symbol, symbolOffset : float Horizontal pixel offset for legend symbols. **Default value:** ``0``. symbolOpacity : float Opacity of the legend symbols. symbolSize : float The size of the legend symbol, in pixels. **Default value:** ``100``. symbolStrokeColor : :class:`Color` Stroke color for legend symbols. symbolStrokeWidth : float The width of the symbol's stroke. **Default value:** ``1.5``. symbolType : :class:`SymbolShape` The symbol shape. One of the plotting shapes ``circle`` (default), ``square``, ``cross``, ``diamond``, ``triangle-up``, ``triangle-down``, ``triangle-right``, or ``triangle-left``, the line symbol ``stroke``, or one of the centered directional shapes ``arrow``, ``wedge``, or ``triangle``. Alternatively, a custom `SVG path string `__ can be provided. For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions. **Default value:** ``"circle"``. title : None Set to null to disable title for the axis, legend, or header. titleAlign : :class:`Align` Horizontal text alignment for legend titles. **Default value:** ``"left"``. titleAnchor : :class:`TitleAnchor` Text anchor position for placing legend titles. titleBaseline : :class:`TextBaseline` Vertical text baseline for legend titles. **Default value:** ``"top"``. titleColor : :class:`Color` The color of the legend title, can be in hex color code or regular color name. titleFont : string The font of the legend title. titleFontSize : float The font size of the legend title. titleFontStyle : :class:`FontStyle` The font style of the legend title. titleFontWeight : :class:`FontWeight` The font weight of the legend title. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). titleLimit : float Maximum allowed pixel width of legend titles. **Default value:** ``180``. titleOpacity : float Opacity of the legend title. titleOrient : :class:`Orient` Orientation of the legend title. titlePadding : float The padding, in pixels, between title and legend. **Default value:** ``5``. """ _schema = {'$ref': '#/definitions/LegendConfig'} def __init__(self, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined, cornerRadius=Undefined, fillColor=Undefined, gradientDirection=Undefined, gradientHorizontalMaxLength=Undefined, gradientHorizontalMinLength=Undefined, gradientLabelLimit=Undefined, gradientLabelOffset=Undefined, gradientLength=Undefined, gradientOpacity=Undefined, gradientStrokeColor=Undefined, gradientStrokeWidth=Undefined, gradientThickness=Undefined, gradientVerticalMaxLength=Undefined, gradientVerticalMinLength=Undefined, gridAlign=Undefined, labelAlign=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, layout=Undefined, legendX=Undefined, legendY=Undefined, offset=Undefined, orient=Undefined, padding=Undefined, rowPadding=Undefined, shortTimeLabels=Undefined, strokeColor=Undefined, strokeDash=Undefined, strokeWidth=Undefined, symbolBaseFillColor=Undefined, symbolBaseStrokeColor=Undefined, symbolDash=Undefined, symbolDashOffset=Undefined, symbolDirection=Undefined, symbolFillColor=Undefined, symbolOffset=Undefined, symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined, symbolStrokeWidth=Undefined, symbolType=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleOpacity=Undefined, titleOrient=Undefined, titlePadding=Undefined, **kwds): super(LegendConfig, self).__init__(clipHeight=clipHeight, columnPadding=columnPadding, columns=columns, cornerRadius=cornerRadius, fillColor=fillColor, gradientDirection=gradientDirection, gradientHorizontalMaxLength=gradientHorizontalMaxLength, gradientHorizontalMinLength=gradientHorizontalMinLength, gradientLabelLimit=gradientLabelLimit, gradientLabelOffset=gradientLabelOffset, gradientLength=gradientLength, gradientOpacity=gradientOpacity, gradientStrokeColor=gradientStrokeColor, gradientStrokeWidth=gradientStrokeWidth, gradientThickness=gradientThickness, gradientVerticalMaxLength=gradientVerticalMaxLength, gradientVerticalMinLength=gradientVerticalMinLength, gridAlign=gridAlign, labelAlign=labelAlign, labelBaseline=labelBaseline, labelColor=labelColor, labelFont=labelFont, labelFontSize=labelFontSize, labelFontStyle=labelFontStyle, labelFontWeight=labelFontWeight, labelLimit=labelLimit, labelOffset=labelOffset, labelOpacity=labelOpacity, labelOverlap=labelOverlap, labelPadding=labelPadding, labelSeparation=labelSeparation, layout=layout, legendX=legendX, legendY=legendY, offset=offset, orient=orient, padding=padding, rowPadding=rowPadding, shortTimeLabels=shortTimeLabels, strokeColor=strokeColor, strokeDash=strokeDash, strokeWidth=strokeWidth, symbolBaseFillColor=symbolBaseFillColor, symbolBaseStrokeColor=symbolBaseStrokeColor, symbolDash=symbolDash, symbolDashOffset=symbolDashOffset, symbolDirection=symbolDirection, symbolFillColor=symbolFillColor, symbolOffset=symbolOffset, symbolOpacity=symbolOpacity, symbolSize=symbolSize, symbolStrokeColor=symbolStrokeColor, symbolStrokeWidth=symbolStrokeWidth, symbolType=symbolType, title=title, titleAlign=titleAlign, titleAnchor=titleAnchor, titleBaseline=titleBaseline, titleColor=titleColor, titleFont=titleFont, titleFontSize=titleFontSize, titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight, titleLimit=titleLimit, titleOpacity=titleOpacity, titleOrient=titleOrient, titlePadding=titlePadding, **kwds) class LegendLayout(VegaLiteSchema): """LegendLayout schema wrapper Mapping(required=[]) Attributes ---------- anchor : :class:`TitleAnchor` The anchor point for legend orient group layout. bottom : :class:`BaseLegendLayout` bounds : :class:`LayoutBounds` The bounds calculation to use for legend orient group layout. center : anyOf(boolean, :class:`SignalRef`) A flag to center legends within a shared orient group. direction : anyOf(:class:`Orientation`, :class:`SignalRef`) The layout direction for legend orient group layout. left : :class:`BaseLegendLayout` margin : anyOf(float, :class:`SignalRef`) The pixel margin between legends within a orient group. offset : anyOf(float, :class:`SignalRef`) The pixel offset from the chart body for a legend orient group. right : :class:`BaseLegendLayout` top : :class:`BaseLegendLayout` bottom-left : :class:`BaseLegendLayout` bottom-right : :class:`BaseLegendLayout` top-left : :class:`BaseLegendLayout` top-right : :class:`BaseLegendLayout` """ _schema = {'$ref': '#/definitions/LegendLayout'} def __init__(self, anchor=Undefined, bottom=Undefined, bounds=Undefined, center=Undefined, direction=Undefined, left=Undefined, margin=Undefined, offset=Undefined, right=Undefined, top=Undefined, **kwds): super(LegendLayout, self).__init__(anchor=anchor, bottom=bottom, bounds=bounds, center=center, direction=direction, left=left, margin=margin, offset=offset, right=right, top=top, **kwds) class LegendOrient(VegaLiteSchema): """LegendOrient schema wrapper enum('none', 'left', 'right', 'top', 'bottom', 'top-left', 'top-right', 'bottom-left', 'bottom-right') """ _schema = {'$ref': '#/definitions/LegendOrient'} def __init__(self, *args): super(LegendOrient, self).__init__(*args) class LegendResolveMap(VegaLiteSchema): """LegendResolveMap schema wrapper Mapping(required=[]) Attributes ---------- color : :class:`ResolveMode` fill : :class:`ResolveMode` fillOpacity : :class:`ResolveMode` opacity : :class:`ResolveMode` shape : :class:`ResolveMode` size : :class:`ResolveMode` stroke : :class:`ResolveMode` strokeOpacity : :class:`ResolveMode` strokeWidth : :class:`ResolveMode` """ _schema = {'$ref': '#/definitions/LegendResolveMap'} def __init__(self, color=Undefined, fill=Undefined, fillOpacity=Undefined, opacity=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, **kwds): super(LegendResolveMap, self).__init__(color=color, fill=fill, fillOpacity=fillOpacity, opacity=opacity, shape=shape, size=size, stroke=stroke, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, **kwds) class LineConfig(VegaLiteSchema): """LineConfig schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` The horizontal alignment of the text. One of ``"left"``, ``"right"``, ``"center"``. angle : float The rotation angle of the text, in degrees. baseline : :class:`TextBaseline` The vertical alignment of the text. One of ``"top"``, ``"middle"``, ``"bottom"``. **Default value:** ``"middle"`` color : :class:`Color` Default color. Note that ``fill`` and ``stroke`` have higher precedence than ``color`` and will override ``color``. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** This property cannot be used in a `style config `__. cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the mark. Any valid `CSS cursor type `__ can be used. dir : :class:`Dir` The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"`` (right-to-left). This property determines on which side is truncated in response to the limit parameter. **Default value:** ``"ltr"`` dx : float The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. dy : float The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. ellipsis : string The ellipsis string for text truncated in response to the limit parameter. **Default value:** ``"…"`` fill : :class:`Color` Default Fill Color. This has higher precedence than ``config.color`` **Default value:** (None) fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` filled : boolean Whether the mark's color should be used as fill color instead of stroke color. **Default value:** ``false`` for ``point``, ``line`` and ``rule`` ; otherwise, ``true``. **Note:** This property cannot be used in a `style config `__. font : string The typeface to set the text in (e.g., ``"Helvetica Neue"`` ). fontSize : float The font size, in pixels. fontStyle : :class:`FontStyle` The font style (e.g., ``"italic"`` ). fontWeight : :class:`FontWeight` The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). height : float Height of the marks. href : string A URL to load upon mouse click. If defined, the mark acts as a hyperlink. interpolate : :class:`Interpolate` The line interpolation method to use for line and area marks. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : alternate between horizontal and vertical segments, as in a step function. * ``"step-before"`` : alternate between vertical and horizontal segments, as in a step function. * ``"step-after"`` : alternate between horizontal and vertical segments, as in a step function. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. limit : float The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0``, indicating no limit opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. order : anyOf(None, boolean) For line and trail marks, this ``order`` property can be set to ``null`` or ``false`` to make the lines use the original order in the data sources. orient : :class:`Orientation` The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. * For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. * For area, this property determines the orient property of the Vega output. * For line and trail marks, this property determines the sort order of the points in the line if ``config.sortLineBy`` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored. point : anyOf(boolean, :class:`OverlayMarkDef`, enum('transparent')) A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points. If this property is ``"transparent"``, transparent points will be used (for enhancing tooltips and selections). If this property is an empty object ( ``{}`` ) or ``true``, filled points with default properties will be used. If this property is ``false``, no points would be automatically added to line or area marks. **Default value:** ``false``. radius : float Polar coordinate radial offset, in pixels, of the text label from the origin determined by the ``x`` and ``y`` properties. shape : string Shape of the point marks. Supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) **Default value:** ``"circle"`` size : float Default size for marks. * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value. * For ``bar``, this represents the band size of the bar, in pixels. * For ``text``, this represents the font size, in pixels. **Default value:** ``30`` for point, circle, square marks; ``rangeStep`` - 1 for bar marks with discrete dimensions; ``5`` for bar marks with continuous dimensions; ``11`` for text marks. stroke : :class:`Color` Default Stroke Color. This has higher precedence than ``config.color`` **Default value:** (None) strokeCap : :class:`StrokeCap` The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"square"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : :class:`StrokeJoin` The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. tension : float Depending on the interpolation type, sets the tension parameter (for line and area marks). text : string Placeholder text if the ``text`` channel is not specified theta : float Polar coordinate angle, in radians, of the text label from the origin determined by the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in radians, with ``0`` indicating "north". tooltip : anyOf(:class:`Value`, :class:`TooltipContent`, None) The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from. * If ``tooltip`` is ``{"content": "encoding"}``, then all fields from ``encoding`` will be used. * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the highlighted data point will be used. * If set to ``null``, then no tooltip will be used. width : float Width of the marks. x : anyOf(float, enum('width')) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(float, enum('width')) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. y : anyOf(float, enum('height')) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(float, enum('width')) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. """ _schema = {'$ref': '#/definitions/LineConfig'} def __init__(self, align=Undefined, angle=Undefined, baseline=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined, y2=Undefined, **kwds): super(LineConfig, self).__init__(align=align, angle=angle, baseline=baseline, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, tension=tension, text=text, theta=theta, tooltip=tooltip, width=width, x=x, x2=x2, y=y, y2=y2, **kwds) class LogicalOperandPredicate(VegaLiteSchema): """LogicalOperandPredicate schema wrapper anyOf(:class:`LogicalNotPredicate`, :class:`LogicalAndPredicate`, :class:`LogicalOrPredicate`, :class:`Predicate`) """ _schema = {'$ref': '#/definitions/LogicalOperand'} def __init__(self, *args, **kwds): super(LogicalOperandPredicate, self).__init__(*args, **kwds) class LogicalAndPredicate(LogicalOperandPredicate): """LogicalAndPredicate schema wrapper Mapping(required=[and]) Attributes ---------- and : List(:class:`LogicalOperandPredicate`) """ _schema = {'$ref': '#/definitions/LogicalAnd'} def __init__(self, **kwds): super(LogicalAndPredicate, self).__init__(**kwds) class LogicalNotPredicate(LogicalOperandPredicate): """LogicalNotPredicate schema wrapper Mapping(required=[not]) Attributes ---------- not : :class:`LogicalOperandPredicate` """ _schema = {'$ref': '#/definitions/LogicalNot'} def __init__(self, **kwds): super(LogicalNotPredicate, self).__init__(**kwds) class LogicalOrPredicate(LogicalOperandPredicate): """LogicalOrPredicate schema wrapper Mapping(required=[or]) Attributes ---------- or : List(:class:`LogicalOperandPredicate`) """ _schema = {'$ref': '#/definitions/LogicalOr'} def __init__(self, **kwds): super(LogicalOrPredicate, self).__init__(**kwds) class LookupData(VegaLiteSchema): """LookupData schema wrapper Mapping(required=[data, key]) Attributes ---------- data : :class:`Data` Secondary data source to lookup in. key : :class:`FieldName` Key in data to lookup. fields : List(:class:`FieldName`) Fields in foreign data to lookup. If not specified, the entire object is queried. """ _schema = {'$ref': '#/definitions/LookupData'} def __init__(self, data=Undefined, key=Undefined, fields=Undefined, **kwds): super(LookupData, self).__init__(data=data, key=key, fields=fields, **kwds) class Mark(AnyMark): """Mark schema wrapper enum('area', 'bar', 'line', 'trail', 'point', 'text', 'tick', 'rect', 'rule', 'circle', 'square', 'geoshape') All types of primitive marks. """ _schema = {'$ref': '#/definitions/Mark'} def __init__(self, *args): super(Mark, self).__init__(*args) class MarkConfig(VegaLiteSchema): """MarkConfig schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` The horizontal alignment of the text. One of ``"left"``, ``"right"``, ``"center"``. angle : float The rotation angle of the text, in degrees. baseline : :class:`TextBaseline` The vertical alignment of the text. One of ``"top"``, ``"middle"``, ``"bottom"``. **Default value:** ``"middle"`` color : :class:`Color` Default color. Note that ``fill`` and ``stroke`` have higher precedence than ``color`` and will override ``color``. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** This property cannot be used in a `style config `__. cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the mark. Any valid `CSS cursor type `__ can be used. dir : :class:`Dir` The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"`` (right-to-left). This property determines on which side is truncated in response to the limit parameter. **Default value:** ``"ltr"`` dx : float The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. dy : float The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. ellipsis : string The ellipsis string for text truncated in response to the limit parameter. **Default value:** ``"…"`` fill : :class:`Color` Default Fill Color. This has higher precedence than ``config.color`` **Default value:** (None) fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` filled : boolean Whether the mark's color should be used as fill color instead of stroke color. **Default value:** ``false`` for ``point``, ``line`` and ``rule`` ; otherwise, ``true``. **Note:** This property cannot be used in a `style config `__. font : string The typeface to set the text in (e.g., ``"Helvetica Neue"`` ). fontSize : float The font size, in pixels. fontStyle : :class:`FontStyle` The font style (e.g., ``"italic"`` ). fontWeight : :class:`FontWeight` The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). height : float Height of the marks. href : string A URL to load upon mouse click. If defined, the mark acts as a hyperlink. interpolate : :class:`Interpolate` The line interpolation method to use for line and area marks. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : alternate between horizontal and vertical segments, as in a step function. * ``"step-before"`` : alternate between vertical and horizontal segments, as in a step function. * ``"step-after"`` : alternate between horizontal and vertical segments, as in a step function. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. limit : float The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0``, indicating no limit opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. order : anyOf(None, boolean) For line and trail marks, this ``order`` property can be set to ``null`` or ``false`` to make the lines use the original order in the data sources. orient : :class:`Orientation` The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. * For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. * For area, this property determines the orient property of the Vega output. * For line and trail marks, this property determines the sort order of the points in the line if ``config.sortLineBy`` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored. radius : float Polar coordinate radial offset, in pixels, of the text label from the origin determined by the ``x`` and ``y`` properties. shape : string Shape of the point marks. Supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) **Default value:** ``"circle"`` size : float Default size for marks. * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value. * For ``bar``, this represents the band size of the bar, in pixels. * For ``text``, this represents the font size, in pixels. **Default value:** ``30`` for point, circle, square marks; ``rangeStep`` - 1 for bar marks with discrete dimensions; ``5`` for bar marks with continuous dimensions; ``11`` for text marks. stroke : :class:`Color` Default Stroke Color. This has higher precedence than ``config.color`` **Default value:** (None) strokeCap : :class:`StrokeCap` The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"square"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : :class:`StrokeJoin` The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. tension : float Depending on the interpolation type, sets the tension parameter (for line and area marks). text : string Placeholder text if the ``text`` channel is not specified theta : float Polar coordinate angle, in radians, of the text label from the origin determined by the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in radians, with ``0`` indicating "north". tooltip : anyOf(:class:`Value`, :class:`TooltipContent`, None) The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from. * If ``tooltip`` is ``{"content": "encoding"}``, then all fields from ``encoding`` will be used. * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the highlighted data point will be used. * If set to ``null``, then no tooltip will be used. width : float Width of the marks. x : anyOf(float, enum('width')) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(float, enum('width')) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. y : anyOf(float, enum('height')) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(float, enum('width')) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. """ _schema = {'$ref': '#/definitions/MarkConfig'} def __init__(self, align=Undefined, angle=Undefined, baseline=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined, y2=Undefined, **kwds): super(MarkConfig, self).__init__(align=align, angle=angle, baseline=baseline, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, opacity=opacity, order=order, orient=orient, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, tension=tension, text=text, theta=theta, tooltip=tooltip, width=width, x=x, x2=x2, y=y, y2=y2, **kwds) class MarkDef(AnyMark): """MarkDef schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`Mark` The mark type. This could a primitive mark type (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"geoshape"``, ``"rule"``, and ``"text"`` ) or a composite mark type ( ``"boxplot"``, ``"errorband"``, ``"errorbar"`` ). align : :class:`Align` The horizontal alignment of the text. One of ``"left"``, ``"right"``, ``"center"``. angle : float The rotation angle of the text, in degrees. baseline : :class:`TextBaseline` The vertical alignment of the text. One of ``"top"``, ``"middle"``, ``"bottom"``. **Default value:** ``"middle"`` binSpacing : float Offset between bars for binned field. Ideal value for this is either 0 (Preferred by statisticians) or 1 (Vega-Lite Default, D3 example style). **Default value:** ``1`` clip : boolean Whether a mark be clipped to the enclosing group’s width and height. color : :class:`Color` Default color. Note that ``fill`` and ``stroke`` have higher precedence than ``color`` and will override ``color``. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** This property cannot be used in a `style config `__. cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the mark. Any valid `CSS cursor type `__ can be used. dir : :class:`Dir` The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"`` (right-to-left). This property determines on which side is truncated in response to the limit parameter. **Default value:** ``"ltr"`` dx : float The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. dy : float The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. ellipsis : string The ellipsis string for text truncated in response to the limit parameter. **Default value:** ``"…"`` fill : :class:`Color` Default Fill Color. This has higher precedence than ``config.color`` **Default value:** (None) fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` filled : boolean Whether the mark's color should be used as fill color instead of stroke color. **Default value:** ``false`` for ``point``, ``line`` and ``rule`` ; otherwise, ``true``. **Note:** This property cannot be used in a `style config `__. font : string The typeface to set the text in (e.g., ``"Helvetica Neue"`` ). fontSize : float The font size, in pixels. fontStyle : :class:`FontStyle` The font style (e.g., ``"italic"`` ). fontWeight : :class:`FontWeight` The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). height : float Height of the marks. href : string A URL to load upon mouse click. If defined, the mark acts as a hyperlink. interpolate : :class:`Interpolate` The line interpolation method to use for line and area marks. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : alternate between horizontal and vertical segments, as in a step function. * ``"step-before"`` : alternate between vertical and horizontal segments, as in a step function. * ``"step-after"`` : alternate between horizontal and vertical segments, as in a step function. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. limit : float The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0``, indicating no limit line : anyOf(boolean, :class:`OverlayMarkDef`) A flag for overlaying line on top of area marks, or an object defining the properties of the overlayed lines. If this value is an empty object ( ``{}`` ) or ``true``, lines with default properties will be used. If this value is ``false``, no lines would be automatically added to area marks. **Default value:** ``false``. opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. order : anyOf(None, boolean) For line and trail marks, this ``order`` property can be set to ``null`` or ``false`` to make the lines use the original order in the data sources. orient : :class:`Orientation` The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. * For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. * For area, this property determines the orient property of the Vega output. * For line and trail marks, this property determines the sort order of the points in the line if ``config.sortLineBy`` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored. point : anyOf(boolean, :class:`OverlayMarkDef`, enum('transparent')) A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points. If this property is ``"transparent"``, transparent points will be used (for enhancing tooltips and selections). If this property is an empty object ( ``{}`` ) or ``true``, filled points with default properties will be used. If this property is ``false``, no points would be automatically added to line or area marks. **Default value:** ``false``. radius : float Polar coordinate radial offset, in pixels, of the text label from the origin determined by the ``x`` and ``y`` properties. shape : string Shape of the point marks. Supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) **Default value:** ``"circle"`` size : float Default size for marks. * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value. * For ``bar``, this represents the band size of the bar, in pixels. * For ``text``, this represents the font size, in pixels. **Default value:** ``30`` for point, circle, square marks; ``rangeStep`` - 1 for bar marks with discrete dimensions; ``5`` for bar marks with continuous dimensions; ``11`` for text marks. stroke : :class:`Color` Default Stroke Color. This has higher precedence than ``config.color`` **Default value:** (None) strokeCap : :class:`StrokeCap` The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"square"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : :class:`StrokeJoin` The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. style : anyOf(string, List(string)) A string or array of strings indicating the name of custom styles to apply to the mark. A style is a named collection of mark property defaults defined within the `style configuration `__. If style is an array, later styles will override earlier styles. Any `mark properties `__ explicitly defined within the ``encoding`` will override a style default. **Default value:** The mark's name. For example, a bar mark will have style ``"bar"`` by default. **Note:** Any specified style will augment the default style. For example, a bar mark with ``"style": "foo"`` will receive from ``config.style.bar`` and ``config.style.foo`` (the specified style ``"foo"`` has higher precedence). tension : float Depending on the interpolation type, sets the tension parameter (for line and area marks). text : string Placeholder text if the ``text`` channel is not specified theta : float Polar coordinate angle, in radians, of the text label from the origin determined by the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in radians, with ``0`` indicating "north". thickness : float Thickness of the tick mark. **Default value:** ``1`` tooltip : anyOf(:class:`Value`, :class:`TooltipContent`, None) The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from. * If ``tooltip`` is ``{"content": "encoding"}``, then all fields from ``encoding`` will be used. * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the highlighted data point will be used. * If set to ``null``, then no tooltip will be used. width : float Width of the marks. x : anyOf(float, enum('width')) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(float, enum('width')) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2Offset : float Offset for x2-position. xOffset : float Offset for x-position. y : anyOf(float, enum('height')) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(float, enum('width')) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2Offset : float Offset for y2-position. yOffset : float Offset for y-position. """ _schema = {'$ref': '#/definitions/MarkDef'} def __init__(self, type=Undefined, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): super(MarkDef, self).__init__(type=type, align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) class Month(VegaLiteSchema): """Month schema wrapper float """ _schema = {'$ref': '#/definitions/Month'} def __init__(self, *args): super(Month, self).__init__(*args) class MultiSelectionConfig(VegaLiteSchema): """MultiSelectionConfig schema wrapper Mapping(required=[]) Attributes ---------- clear : anyOf(:class:`EventStream`, boolean) Clears the selection, emptying it of all values. Can be an `EventStream `__ or ``false`` to disable. **Default value:** ``dblclick``. **See also:** `clear `__ documentation. empty : enum('all', 'none') By default, ``all`` data values are considered to lie within an empty selection. When set to ``none``, empty selections contain no data values. encodings : List(:class:`SingleDefUnitChannel`) An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection. **See also:** `encodings `__ documentation. fields : List(:class:`FieldName`) An array of field names whose values must match for a data tuple to fall within the selection. **See also:** `fields `__ documentation. init : anyOf(:class:`SelectionInitMapping`, List(:class:`SelectionInitMapping`)) Initialize the selection with a mapping between `projected channels or field names `__ and an initial value (or array of values). **See also:** `init `__ documentation. nearest : boolean When true, an invisible voronoi diagram is computed to accelerate discrete selection. The data value *nearest* the mouse cursor is added to the selection. **See also:** `nearest `__ documentation. on : :class:`EventStream` A `Vega event stream `__ (object or selector) that triggers the selection. For interval selections, the event stream must specify a `start and end `__. resolve : :class:`SelectionResolution` With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain. **See also:** `resolve `__ documentation. toggle : anyOf(string, boolean) Controls whether data values should be toggled or only ever inserted into multi selections. Can be ``true``, ``false`` (for insertion only), or a `Vega expression `__. **Default value:** ``true``, which corresponds to ``event.shiftKey`` (i.e., data values are toggled when a user interacts with the shift-key pressed). **See also:** `toggle `__ documentation. """ _schema = {'$ref': '#/definitions/MultiSelectionConfig'} def __init__(self, clear=Undefined, empty=Undefined, encodings=Undefined, fields=Undefined, init=Undefined, nearest=Undefined, on=Undefined, resolve=Undefined, toggle=Undefined, **kwds): super(MultiSelectionConfig, self).__init__(clear=clear, empty=empty, encodings=encodings, fields=fields, init=init, nearest=nearest, on=on, resolve=resolve, toggle=toggle, **kwds) class NamedData(DataSource): """NamedData schema wrapper Mapping(required=[name]) Attributes ---------- name : string Provide a placeholder name and bind data at runtime. format : :class:`DataFormat` An object that specifies the format for parsing the data. """ _schema = {'$ref': '#/definitions/NamedData'} def __init__(self, name=Undefined, format=Undefined, **kwds): super(NamedData, self).__init__(name=name, format=format, **kwds) class NiceTime(VegaLiteSchema): """NiceTime schema wrapper enum('second', 'minute', 'hour', 'day', 'week', 'month', 'year') """ _schema = {'$ref': '#/definitions/NiceTime'} def __init__(self, *args): super(NiceTime, self).__init__(*args) class NumberValueDef(VegaLiteSchema): """NumberValueDef schema wrapper Mapping(required=[value]) Definition object for a constant value of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/NumberValueDef'} def __init__(self, value=Undefined, **kwds): super(NumberValueDef, self).__init__(value=value, **kwds) class NumericFieldDefWithCondition(VegaLiteSchema): """NumericFieldDefWithCondition schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalNumberValueDef`, List(:class:`ConditionalNumberValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/NumericFieldDefWithCondition'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(NumericFieldDefWithCondition, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class NumericValueDefWithCondition(VegaLiteSchema): """NumericValueDefWithCondition schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalNumberValueDef`, List(:class:`ConditionalNumberValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/NumericValueDefWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(NumericValueDefWithCondition, self).__init__(condition=condition, value=value, **kwds) class OrderFieldDef(VegaLiteSchema): """OrderFieldDef schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. sort : :class:`SortOrder` The sort order. One of ``"ascending"`` (default) or ``"descending"``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/OrderFieldDef'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(OrderFieldDef, self).__init__(type=type, aggregate=aggregate, bin=bin, field=field, sort=sort, timeUnit=timeUnit, title=title, **kwds) class Orient(VegaLiteSchema): """Orient schema wrapper enum('left', 'right', 'top', 'bottom') """ _schema = {'$ref': '#/definitions/Orient'} def __init__(self, *args): super(Orient, self).__init__(*args) class Orientation(VegaLiteSchema): """Orientation schema wrapper enum('horizontal', 'vertical') """ _schema = {'$ref': '#/definitions/Orientation'} def __init__(self, *args): super(Orientation, self).__init__(*args) class OverlayMarkDef(VegaLiteSchema): """OverlayMarkDef schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` The horizontal alignment of the text. One of ``"left"``, ``"right"``, ``"center"``. angle : float The rotation angle of the text, in degrees. baseline : :class:`TextBaseline` The vertical alignment of the text. One of ``"top"``, ``"middle"``, ``"bottom"``. **Default value:** ``"middle"`` clip : boolean Whether a mark be clipped to the enclosing group’s width and height. color : :class:`Color` Default color. Note that ``fill`` and ``stroke`` have higher precedence than ``color`` and will override ``color``. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** This property cannot be used in a `style config `__. cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the mark. Any valid `CSS cursor type `__ can be used. dir : :class:`Dir` The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"`` (right-to-left). This property determines on which side is truncated in response to the limit parameter. **Default value:** ``"ltr"`` dx : float The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. dy : float The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. ellipsis : string The ellipsis string for text truncated in response to the limit parameter. **Default value:** ``"…"`` fill : :class:`Color` Default Fill Color. This has higher precedence than ``config.color`` **Default value:** (None) fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` filled : boolean Whether the mark's color should be used as fill color instead of stroke color. **Default value:** ``false`` for ``point``, ``line`` and ``rule`` ; otherwise, ``true``. **Note:** This property cannot be used in a `style config `__. font : string The typeface to set the text in (e.g., ``"Helvetica Neue"`` ). fontSize : float The font size, in pixels. fontStyle : :class:`FontStyle` The font style (e.g., ``"italic"`` ). fontWeight : :class:`FontWeight` The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). height : float Height of the marks. href : string A URL to load upon mouse click. If defined, the mark acts as a hyperlink. interpolate : :class:`Interpolate` The line interpolation method to use for line and area marks. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : alternate between horizontal and vertical segments, as in a step function. * ``"step-before"`` : alternate between vertical and horizontal segments, as in a step function. * ``"step-after"`` : alternate between horizontal and vertical segments, as in a step function. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. limit : float The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0``, indicating no limit opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. order : anyOf(None, boolean) For line and trail marks, this ``order`` property can be set to ``null`` or ``false`` to make the lines use the original order in the data sources. orient : :class:`Orientation` The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. * For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. * For area, this property determines the orient property of the Vega output. * For line and trail marks, this property determines the sort order of the points in the line if ``config.sortLineBy`` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored. radius : float Polar coordinate radial offset, in pixels, of the text label from the origin determined by the ``x`` and ``y`` properties. shape : string Shape of the point marks. Supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) **Default value:** ``"circle"`` size : float Default size for marks. * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value. * For ``bar``, this represents the band size of the bar, in pixels. * For ``text``, this represents the font size, in pixels. **Default value:** ``30`` for point, circle, square marks; ``rangeStep`` - 1 for bar marks with discrete dimensions; ``5`` for bar marks with continuous dimensions; ``11`` for text marks. stroke : :class:`Color` Default Stroke Color. This has higher precedence than ``config.color`` **Default value:** (None) strokeCap : :class:`StrokeCap` The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"square"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : :class:`StrokeJoin` The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. style : anyOf(string, List(string)) A string or array of strings indicating the name of custom styles to apply to the mark. A style is a named collection of mark property defaults defined within the `style configuration `__. If style is an array, later styles will override earlier styles. Any `mark properties `__ explicitly defined within the ``encoding`` will override a style default. **Default value:** The mark's name. For example, a bar mark will have style ``"bar"`` by default. **Note:** Any specified style will augment the default style. For example, a bar mark with ``"style": "foo"`` will receive from ``config.style.bar`` and ``config.style.foo`` (the specified style ``"foo"`` has higher precedence). tension : float Depending on the interpolation type, sets the tension parameter (for line and area marks). text : string Placeholder text if the ``text`` channel is not specified theta : float Polar coordinate angle, in radians, of the text label from the origin determined by the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in radians, with ``0`` indicating "north". tooltip : anyOf(:class:`Value`, :class:`TooltipContent`, None) The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from. * If ``tooltip`` is ``{"content": "encoding"}``, then all fields from ``encoding`` will be used. * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the highlighted data point will be used. * If set to ``null``, then no tooltip will be used. width : float Width of the marks. x : anyOf(float, enum('width')) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(float, enum('width')) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2Offset : float Offset for x2-position. xOffset : float Offset for x-position. y : anyOf(float, enum('height')) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(float, enum('width')) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2Offset : float Offset for y2-position. yOffset : float Offset for y-position. """ _schema = {'$ref': '#/definitions/OverlayMarkDef'} def __init__(self, align=Undefined, angle=Undefined, baseline=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): super(OverlayMarkDef, self).__init__(align=align, angle=angle, baseline=baseline, clip=clip, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, opacity=opacity, order=order, orient=orient, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) class Padding(VegaLiteSchema): """Padding schema wrapper anyOf(float, Mapping(required=[])) """ _schema = {'$ref': '#/definitions/Padding'} def __init__(self, *args, **kwds): super(Padding, self).__init__(*args, **kwds) class Parse(VegaLiteSchema): """Parse schema wrapper Mapping(required=[]) """ _schema = {'$ref': '#/definitions/Parse'} def __init__(self, **kwds): super(Parse, self).__init__(**kwds) class ParseValue(VegaLiteSchema): """ParseValue schema wrapper anyOf(None, string, enum('string'), enum('boolean'), enum('date'), enum('number')) """ _schema = {'$ref': '#/definitions/ParseValue'} def __init__(self, *args, **kwds): super(ParseValue, self).__init__(*args, **kwds) class PartsMixinsBoxPlotPart(VegaLiteSchema): """PartsMixinsBoxPlotPart schema wrapper Mapping(required=[]) Attributes ---------- box : anyOf(boolean, :class:`MarkConfig`) median : anyOf(boolean, :class:`MarkConfig`) outliers : anyOf(boolean, :class:`MarkConfig`) rule : anyOf(boolean, :class:`MarkConfig`) ticks : anyOf(boolean, :class:`MarkConfig`) """ _schema = {'$ref': '#/definitions/PartsMixins'} def __init__(self, box=Undefined, median=Undefined, outliers=Undefined, rule=Undefined, ticks=Undefined, **kwds): super(PartsMixinsBoxPlotPart, self).__init__(box=box, median=median, outliers=outliers, rule=rule, ticks=ticks, **kwds) class PartsMixinsErrorBandPart(VegaLiteSchema): """PartsMixinsErrorBandPart schema wrapper Mapping(required=[]) Attributes ---------- band : anyOf(boolean, :class:`MarkConfig`) borders : anyOf(boolean, :class:`MarkConfig`) """ _schema = {'$ref': '#/definitions/PartsMixins'} def __init__(self, band=Undefined, borders=Undefined, **kwds): super(PartsMixinsErrorBandPart, self).__init__(band=band, borders=borders, **kwds) class PartsMixinsErrorBarPart(VegaLiteSchema): """PartsMixinsErrorBarPart schema wrapper Mapping(required=[]) Attributes ---------- rule : anyOf(boolean, :class:`MarkConfig`) ticks : anyOf(boolean, :class:`MarkConfig`) """ _schema = {'$ref': '#/definitions/PartsMixins'} def __init__(self, rule=Undefined, ticks=Undefined, **kwds): super(PartsMixinsErrorBarPart, self).__init__(rule=rule, ticks=ticks, **kwds) class PositionFieldDef(VegaLiteSchema): """PositionFieldDef schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. axis : anyOf(:class:`Axis`, None) An object defining properties of axis's gridlines, ticks and labels. If ``null``, the axis for the encoding channel will be removed. **Default value:** If undefined, default `axis properties `__ are applied. **See also:** `axis `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. impute : :class:`ImputeParams` An object defining the properties of the Impute Operation to be applied. The field value of the other positional channel is taken as ``key`` of the ``Impute`` Operation. The field of the ``color`` channel if specified is used as ``groupby`` of the ``Impute`` Operation. **See also:** `impute `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. stack : anyOf(:class:`StackOffset`, None, boolean) Type of stacking offset if the field should be stacked. ``stack`` is only applicable for ``x`` and ``y`` channels with continuous domains. For example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar chart. ``stack`` can be one of the following values: * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area `__ chart). * ``"normalize"`` - stacking with normalized domain (for creating `normalized stacked bar and area charts `__. :raw-html:`
` - ``"center"`` - stacking with center baseline (for `streamgraph `__ ). * ``null`` or ``false`` - No-stacking. This will produce layered `bar `__ and area chart. **Default value:** ``zero`` for plots with all of the following conditions are true: (1) the mark is ``bar`` or ``area`` ; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, ``null`` by default. **See also:** `stack `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/PositionFieldDef'} def __init__(self, type=Undefined, aggregate=Undefined, axis=Undefined, bin=Undefined, field=Undefined, impute=Undefined, scale=Undefined, sort=Undefined, stack=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(PositionFieldDef, self).__init__(type=type, aggregate=aggregate, axis=axis, bin=bin, field=field, impute=impute, scale=scale, sort=sort, stack=stack, timeUnit=timeUnit, title=title, **kwds) class Predicate(LogicalOperandPredicate): """Predicate schema wrapper anyOf(:class:`FieldEqualPredicate`, :class:`FieldRangePredicate`, :class:`FieldOneOfPredicate`, :class:`FieldLTPredicate`, :class:`FieldGTPredicate`, :class:`FieldLTEPredicate`, :class:`FieldGTEPredicate`, :class:`FieldValidPredicate`, :class:`SelectionPredicate`, string) """ _schema = {'$ref': '#/definitions/Predicate'} def __init__(self, *args, **kwds): super(Predicate, self).__init__(*args, **kwds) class FieldEqualPredicate(Predicate): """FieldEqualPredicate schema wrapper Mapping(required=[equal, field]) Attributes ---------- equal : anyOf(string, float, boolean, :class:`DateTime`) The value that the field should be equal to. field : :class:`FieldName` Field to be filtered. timeUnit : :class:`TimeUnit` Time unit for the field to be filtered. """ _schema = {'$ref': '#/definitions/FieldEqualPredicate'} def __init__(self, equal=Undefined, field=Undefined, timeUnit=Undefined, **kwds): super(FieldEqualPredicate, self).__init__(equal=equal, field=field, timeUnit=timeUnit, **kwds) class FieldGTEPredicate(Predicate): """FieldGTEPredicate schema wrapper Mapping(required=[field, gte]) Attributes ---------- field : :class:`FieldName` Field to be filtered. gte : anyOf(string, float, :class:`DateTime`) The value that the field should be greater than or equals to. timeUnit : :class:`TimeUnit` Time unit for the field to be filtered. """ _schema = {'$ref': '#/definitions/FieldGTEPredicate'} def __init__(self, field=Undefined, gte=Undefined, timeUnit=Undefined, **kwds): super(FieldGTEPredicate, self).__init__(field=field, gte=gte, timeUnit=timeUnit, **kwds) class FieldGTPredicate(Predicate): """FieldGTPredicate schema wrapper Mapping(required=[field, gt]) Attributes ---------- field : :class:`FieldName` Field to be filtered. gt : anyOf(string, float, :class:`DateTime`) The value that the field should be greater than. timeUnit : :class:`TimeUnit` Time unit for the field to be filtered. """ _schema = {'$ref': '#/definitions/FieldGTPredicate'} def __init__(self, field=Undefined, gt=Undefined, timeUnit=Undefined, **kwds): super(FieldGTPredicate, self).__init__(field=field, gt=gt, timeUnit=timeUnit, **kwds) class FieldLTEPredicate(Predicate): """FieldLTEPredicate schema wrapper Mapping(required=[field, lte]) Attributes ---------- field : :class:`FieldName` Field to be filtered. lte : anyOf(string, float, :class:`DateTime`) The value that the field should be less than or equals to. timeUnit : :class:`TimeUnit` Time unit for the field to be filtered. """ _schema = {'$ref': '#/definitions/FieldLTEPredicate'} def __init__(self, field=Undefined, lte=Undefined, timeUnit=Undefined, **kwds): super(FieldLTEPredicate, self).__init__(field=field, lte=lte, timeUnit=timeUnit, **kwds) class FieldLTPredicate(Predicate): """FieldLTPredicate schema wrapper Mapping(required=[field, lt]) Attributes ---------- field : :class:`FieldName` Field to be filtered. lt : anyOf(string, float, :class:`DateTime`) The value that the field should be less than. timeUnit : :class:`TimeUnit` Time unit for the field to be filtered. """ _schema = {'$ref': '#/definitions/FieldLTPredicate'} def __init__(self, field=Undefined, lt=Undefined, timeUnit=Undefined, **kwds): super(FieldLTPredicate, self).__init__(field=field, lt=lt, timeUnit=timeUnit, **kwds) class FieldOneOfPredicate(Predicate): """FieldOneOfPredicate schema wrapper Mapping(required=[field, oneOf]) Attributes ---------- field : :class:`FieldName` Field to be filtered. oneOf : anyOf(List(string), List(float), List(boolean), List(:class:`DateTime`)) A set of values that the ``field`` 's value should be a member of, for a data item included in the filtered data. timeUnit : :class:`TimeUnit` Time unit for the field to be filtered. """ _schema = {'$ref': '#/definitions/FieldOneOfPredicate'} def __init__(self, field=Undefined, oneOf=Undefined, timeUnit=Undefined, **kwds): super(FieldOneOfPredicate, self).__init__(field=field, oneOf=oneOf, timeUnit=timeUnit, **kwds) class FieldRangePredicate(Predicate): """FieldRangePredicate schema wrapper Mapping(required=[field, range]) Attributes ---------- field : :class:`FieldName` Field to be filtered. range : List(anyOf(float, :class:`DateTime`, None)) An array of inclusive minimum and maximum values for a field value of a data item to be included in the filtered data. timeUnit : :class:`TimeUnit` Time unit for the field to be filtered. """ _schema = {'$ref': '#/definitions/FieldRangePredicate'} def __init__(self, field=Undefined, range=Undefined, timeUnit=Undefined, **kwds): super(FieldRangePredicate, self).__init__(field=field, range=range, timeUnit=timeUnit, **kwds) class FieldValidPredicate(Predicate): """FieldValidPredicate schema wrapper Mapping(required=[field, valid]) Attributes ---------- field : :class:`FieldName` Field to be filtered. valid : boolean If set to true the field's value has to be valid, meaning both not ``null`` and not `NaN `__. timeUnit : :class:`TimeUnit` Time unit for the field to be filtered. """ _schema = {'$ref': '#/definitions/FieldValidPredicate'} def __init__(self, field=Undefined, valid=Undefined, timeUnit=Undefined, **kwds): super(FieldValidPredicate, self).__init__(field=field, valid=valid, timeUnit=timeUnit, **kwds) class Projection(VegaLiteSchema): """Projection schema wrapper Mapping(required=[]) Attributes ---------- center : List(float) Sets the projection’s center to the specified center, a two-element array of longitude and latitude in degrees. **Default value:** ``[0, 0]`` clipAngle : float Sets the projection’s clipping circle radius to the specified angle in degrees. If ``null``, switches to `antimeridian `__ cutting rather than small-circle clipping. clipExtent : List(List(float)) Sets the projection’s viewport clip extent to the specified bounds in pixels. The extent bounds are specified as an array ``[[x0, y0], [x1, y1]]``, where ``x0`` is the left-side of the viewport, ``y0`` is the top, ``x1`` is the right and ``y1`` is the bottom. If ``null``, no viewport clipping is performed. coefficient : float distance : float fraction : float lobes : float parallel : float precision : float Sets the threshold for the projection’s `adaptive resampling `__ to the specified value in pixels. This value corresponds to the `Douglas–Peucker distance `__. If precision is not specified, returns the projection’s current resampling precision which defaults to ``√0.5 ≅ 0.70710…``. radius : float ratio : float reflectX : boolean reflectY : boolean rotate : List(float) Sets the projection’s three-axis rotation to the specified angles, which must be a two- or three-element array of numbers [ ``lambda``, ``phi``, ``gamma`` ] specifying the rotation angles in degrees about each spherical axis. (These correspond to yaw, pitch and roll.) **Default value:** ``[0, 0, 0]`` scale : float Sets the projection's scale (zoom) value, overriding automatic fitting. spacing : float tilt : float translate : List(float) Sets the projection's translation (pan) value, overriding automatic fitting. type : :class:`ProjectionType` The cartographic projection to use. This value is case-insensitive, for example ``"albers"`` and ``"Albers"`` indicate the same projection type. You can find all valid projection types `in the documentation `__. **Default value:** ``mercator`` """ _schema = {'$ref': '#/definitions/Projection'} def __init__(self, center=Undefined, clipAngle=Undefined, clipExtent=Undefined, coefficient=Undefined, distance=Undefined, fraction=Undefined, lobes=Undefined, parallel=Undefined, precision=Undefined, radius=Undefined, ratio=Undefined, reflectX=Undefined, reflectY=Undefined, rotate=Undefined, scale=Undefined, spacing=Undefined, tilt=Undefined, translate=Undefined, type=Undefined, **kwds): super(Projection, self).__init__(center=center, clipAngle=clipAngle, clipExtent=clipExtent, coefficient=coefficient, distance=distance, fraction=fraction, lobes=lobes, parallel=parallel, precision=precision, radius=radius, ratio=ratio, reflectX=reflectX, reflectY=reflectY, rotate=rotate, scale=scale, spacing=spacing, tilt=tilt, translate=translate, type=type, **kwds) class ProjectionConfig(VegaLiteSchema): """ProjectionConfig schema wrapper Mapping(required=[]) Attributes ---------- center : List(float) Sets the projection’s center to the specified center, a two-element array of longitude and latitude in degrees. **Default value:** ``[0, 0]`` clipAngle : float Sets the projection’s clipping circle radius to the specified angle in degrees. If ``null``, switches to `antimeridian `__ cutting rather than small-circle clipping. clipExtent : List(List(float)) Sets the projection’s viewport clip extent to the specified bounds in pixels. The extent bounds are specified as an array ``[[x0, y0], [x1, y1]]``, where ``x0`` is the left-side of the viewport, ``y0`` is the top, ``x1`` is the right and ``y1`` is the bottom. If ``null``, no viewport clipping is performed. coefficient : float distance : float fraction : float lobes : float parallel : float precision : float Sets the threshold for the projection’s `adaptive resampling `__ to the specified value in pixels. This value corresponds to the `Douglas–Peucker distance `__. If precision is not specified, returns the projection’s current resampling precision which defaults to ``√0.5 ≅ 0.70710…``. radius : float ratio : float reflectX : boolean reflectY : boolean rotate : List(float) Sets the projection’s three-axis rotation to the specified angles, which must be a two- or three-element array of numbers [ ``lambda``, ``phi``, ``gamma`` ] specifying the rotation angles in degrees about each spherical axis. (These correspond to yaw, pitch and roll.) **Default value:** ``[0, 0, 0]`` scale : float Sets the projection's scale (zoom) value, overriding automatic fitting. spacing : float tilt : float translate : List(float) Sets the projection's translation (pan) value, overriding automatic fitting. type : :class:`ProjectionType` The cartographic projection to use. This value is case-insensitive, for example ``"albers"`` and ``"Albers"`` indicate the same projection type. You can find all valid projection types `in the documentation `__. **Default value:** ``mercator`` """ _schema = {'$ref': '#/definitions/ProjectionConfig'} def __init__(self, center=Undefined, clipAngle=Undefined, clipExtent=Undefined, coefficient=Undefined, distance=Undefined, fraction=Undefined, lobes=Undefined, parallel=Undefined, precision=Undefined, radius=Undefined, ratio=Undefined, reflectX=Undefined, reflectY=Undefined, rotate=Undefined, scale=Undefined, spacing=Undefined, tilt=Undefined, translate=Undefined, type=Undefined, **kwds): super(ProjectionConfig, self).__init__(center=center, clipAngle=clipAngle, clipExtent=clipExtent, coefficient=coefficient, distance=distance, fraction=fraction, lobes=lobes, parallel=parallel, precision=precision, radius=radius, ratio=ratio, reflectX=reflectX, reflectY=reflectY, rotate=rotate, scale=scale, spacing=spacing, tilt=tilt, translate=translate, type=type, **kwds) class ProjectionType(VegaLiteSchema): """ProjectionType schema wrapper enum('albers', 'albersUsa', 'azimuthalEqualArea', 'azimuthalEquidistant', 'conicConformal', 'conicEqualArea', 'conicEquidistant', 'equirectangular', 'gnomonic', 'identity', 'mercator', 'naturalEarth1', 'orthographic', 'stereographic', 'transverseMercator') """ _schema = {'$ref': '#/definitions/ProjectionType'} def __init__(self, *args): super(ProjectionType, self).__init__(*args) class RangeConfig(VegaLiteSchema): """RangeConfig schema wrapper Mapping(required=[]) Attributes ---------- category : anyOf(List(string), :class:`SchemeConfig`) Default range for *nominal* (categorical) fields. diverging : anyOf(List(string), :class:`SchemeConfig`) Default range for diverging *quantitative* fields. heatmap : anyOf(List(string), :class:`SchemeConfig`) Default range for *quantitative* heatmaps. ordinal : anyOf(List(string), :class:`SchemeConfig`) Default range for *ordinal* fields. ramp : anyOf(List(string), :class:`SchemeConfig`) Default range for *quantitative* and *temporal* fields. symbol : List(string) Default range palette for the ``shape`` channel. """ _schema = {'$ref': '#/definitions/RangeConfig'} def __init__(self, category=Undefined, diverging=Undefined, heatmap=Undefined, ordinal=Undefined, ramp=Undefined, symbol=Undefined, **kwds): super(RangeConfig, self).__init__(category=category, diverging=diverging, heatmap=heatmap, ordinal=ordinal, ramp=ramp, symbol=symbol, **kwds) class RangeConfigValue(VegaLiteSchema): """RangeConfigValue schema wrapper anyOf(List(anyOf(float, string)), :class:`SchemeConfig`, Mapping(required=[step])) """ _schema = {'$ref': '#/definitions/RangeConfigValue'} def __init__(self, *args, **kwds): super(RangeConfigValue, self).__init__(*args, **kwds) class RectConfig(VegaLiteSchema): """RectConfig schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` The horizontal alignment of the text. One of ``"left"``, ``"right"``, ``"center"``. angle : float The rotation angle of the text, in degrees. baseline : :class:`TextBaseline` The vertical alignment of the text. One of ``"top"``, ``"middle"``, ``"bottom"``. **Default value:** ``"middle"`` binSpacing : float Offset between bars for binned field. Ideal value for this is either 0 (Preferred by statisticians) or 1 (Vega-Lite Default, D3 example style). **Default value:** ``1`` color : :class:`Color` Default color. Note that ``fill`` and ``stroke`` have higher precedence than ``color`` and will override ``color``. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** This property cannot be used in a `style config `__. continuousBandSize : float The default size of the bars on continuous scales. **Default value:** ``5`` cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the mark. Any valid `CSS cursor type `__ can be used. dir : :class:`Dir` The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"`` (right-to-left). This property determines on which side is truncated in response to the limit parameter. **Default value:** ``"ltr"`` discreteBandSize : float The default size of the bars with discrete dimensions. If unspecified, the default size is ``bandSize-1``, which provides 1 pixel offset between bars. dx : float The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. dy : float The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. ellipsis : string The ellipsis string for text truncated in response to the limit parameter. **Default value:** ``"…"`` fill : :class:`Color` Default Fill Color. This has higher precedence than ``config.color`` **Default value:** (None) fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` filled : boolean Whether the mark's color should be used as fill color instead of stroke color. **Default value:** ``false`` for ``point``, ``line`` and ``rule`` ; otherwise, ``true``. **Note:** This property cannot be used in a `style config `__. font : string The typeface to set the text in (e.g., ``"Helvetica Neue"`` ). fontSize : float The font size, in pixels. fontStyle : :class:`FontStyle` The font style (e.g., ``"italic"`` ). fontWeight : :class:`FontWeight` The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). height : float Height of the marks. href : string A URL to load upon mouse click. If defined, the mark acts as a hyperlink. interpolate : :class:`Interpolate` The line interpolation method to use for line and area marks. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : alternate between horizontal and vertical segments, as in a step function. * ``"step-before"`` : alternate between vertical and horizontal segments, as in a step function. * ``"step-after"`` : alternate between horizontal and vertical segments, as in a step function. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. limit : float The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0``, indicating no limit opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. order : anyOf(None, boolean) For line and trail marks, this ``order`` property can be set to ``null`` or ``false`` to make the lines use the original order in the data sources. orient : :class:`Orientation` The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. * For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. * For area, this property determines the orient property of the Vega output. * For line and trail marks, this property determines the sort order of the points in the line if ``config.sortLineBy`` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored. radius : float Polar coordinate radial offset, in pixels, of the text label from the origin determined by the ``x`` and ``y`` properties. shape : string Shape of the point marks. Supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) **Default value:** ``"circle"`` size : float Default size for marks. * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value. * For ``bar``, this represents the band size of the bar, in pixels. * For ``text``, this represents the font size, in pixels. **Default value:** ``30`` for point, circle, square marks; ``rangeStep`` - 1 for bar marks with discrete dimensions; ``5`` for bar marks with continuous dimensions; ``11`` for text marks. stroke : :class:`Color` Default Stroke Color. This has higher precedence than ``config.color`` **Default value:** (None) strokeCap : :class:`StrokeCap` The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"square"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : :class:`StrokeJoin` The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. tension : float Depending on the interpolation type, sets the tension parameter (for line and area marks). text : string Placeholder text if the ``text`` channel is not specified theta : float Polar coordinate angle, in radians, of the text label from the origin determined by the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in radians, with ``0`` indicating "north". tooltip : anyOf(:class:`Value`, :class:`TooltipContent`, None) The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from. * If ``tooltip`` is ``{"content": "encoding"}``, then all fields from ``encoding`` will be used. * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the highlighted data point will be used. * If set to ``null``, then no tooltip will be used. width : float Width of the marks. x : anyOf(float, enum('width')) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(float, enum('width')) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. y : anyOf(float, enum('height')) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(float, enum('width')) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. """ _schema = {'$ref': '#/definitions/RectConfig'} def __init__(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined, color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, discreteBandSize=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined, y2=Undefined, **kwds): super(RectConfig, self).__init__(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, color=color, continuousBandSize=continuousBandSize, cornerRadius=cornerRadius, cursor=cursor, dir=dir, discreteBandSize=discreteBandSize, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, opacity=opacity, order=order, orient=orient, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, tension=tension, text=text, theta=theta, tooltip=tooltip, width=width, x=x, x2=x2, y=y, y2=y2, **kwds) class RepeatMapping(VegaLiteSchema): """RepeatMapping schema wrapper Mapping(required=[]) Attributes ---------- column : List(string) An array of fields to be repeated horizontally. row : List(string) An array of fields to be repeated vertically. """ _schema = {'$ref': '#/definitions/RepeatMapping'} def __init__(self, column=Undefined, row=Undefined, **kwds): super(RepeatMapping, self).__init__(column=column, row=row, **kwds) class RepeatRef(Field): """RepeatRef schema wrapper Mapping(required=[repeat]) A ValueDef with optional Condition Reference to a repeated value. Attributes ---------- repeat : enum('row', 'column', 'repeat') """ _schema = {'$ref': '#/definitions/RepeatRef'} def __init__(self, repeat=Undefined, **kwds): super(RepeatRef, self).__init__(repeat=repeat, **kwds) class Resolve(VegaLiteSchema): """Resolve schema wrapper Mapping(required=[]) Defines how scales, axes, and legends from different specs should be combined. Resolve is a mapping from ``scale``, ``axis``, and ``legend`` to a mapping from channels to resolutions. Attributes ---------- axis : :class:`AxisResolveMap` legend : :class:`LegendResolveMap` scale : :class:`ScaleResolveMap` """ _schema = {'$ref': '#/definitions/Resolve'} def __init__(self, axis=Undefined, legend=Undefined, scale=Undefined, **kwds): super(Resolve, self).__init__(axis=axis, legend=legend, scale=scale, **kwds) class ResolveMode(VegaLiteSchema): """ResolveMode schema wrapper enum('independent', 'shared') """ _schema = {'$ref': '#/definitions/ResolveMode'} def __init__(self, *args): super(ResolveMode, self).__init__(*args) class RowColLayoutAlign(VegaLiteSchema): """RowColLayoutAlign schema wrapper Mapping(required=[]) Attributes ---------- column : :class:`LayoutAlign` row : :class:`LayoutAlign` """ _schema = {'$ref': '#/definitions/RowCol'} def __init__(self, column=Undefined, row=Undefined, **kwds): super(RowColLayoutAlign, self).__init__(column=column, row=row, **kwds) class RowColboolean(VegaLiteSchema): """RowColboolean schema wrapper Mapping(required=[]) Attributes ---------- column : boolean row : boolean """ _schema = {'$ref': '#/definitions/RowCol'} def __init__(self, column=Undefined, row=Undefined, **kwds): super(RowColboolean, self).__init__(column=column, row=row, **kwds) class RowColnumber(VegaLiteSchema): """RowColnumber schema wrapper Mapping(required=[]) Attributes ---------- column : float row : float """ _schema = {'$ref': '#/definitions/RowCol'} def __init__(self, column=Undefined, row=Undefined, **kwds): super(RowColnumber, self).__init__(column=column, row=row, **kwds) class Scale(VegaLiteSchema): """Scale schema wrapper Mapping(required=[]) Attributes ---------- align : float The alignment of the steps within the scale range. This value must lie in the range ``[0,1]``. A value of ``0.5`` indicates that the steps should be centered within the range. A value of ``0`` or ``1`` may be used to shift the bands to one side, say to position them adjacent to an axis. **Default value:** ``0.5`` base : float The logarithm base of the ``log`` scale (default ``10`` ). bins : List(float) An array of bin boundaries over the scale domain. If provided, axes and legends will use the bin boundaries to inform the choice of tick marks and text labels. clamp : boolean If ``true``, values that exceed the data domain are clamped to either the minimum or maximum range value **Default value:** derived from the `scale config `__ 's ``clamp`` ( ``true`` by default). constant : float A constant determining the slope of the symlog function around zero. Only used for ``symlog`` scales. **Default value:** ``1`` domain : anyOf(List(float), List(string), List(boolean), List(:class:`DateTime`), enum('unaggregated'), :class:`SelectionDomain`) Customized domain values. For *quantitative* fields, ``domain`` can take the form of a two-element array with minimum and maximum values. `Piecewise scales `__ can be created by providing a ``domain`` with more than two entries. If the input field is aggregated, ``domain`` can also be a string value ``"unaggregated"``, indicating that the domain should include the raw data values prior to the aggregation. For *temporal* fields, ``domain`` can be a two-element array minimum and maximum values, in the form of either timestamps or the `DateTime definition objects `__. For *ordinal* and *nominal* fields, ``domain`` can be an array that lists valid input values. The ``selection`` property can be used to `interactively determine `__ the scale domain. exponent : float The exponent of the ``pow`` scale. interpolate : anyOf(:class:`ScaleInterpolate`, :class:`ScaleInterpolateParams`) The interpolation method for range values. By default, a general interpolator for numbers, dates, strings and colors (in HCL space) is used. For color ranges, this property allows interpolation in alternative color spaces. Legal values include ``rgb``, ``hsl``, ``hsl-long``, ``lab``, ``hcl``, ``hcl-long``, ``cubehelix`` and ``cubehelix-long`` ('-long' variants use longer paths in polar coordinate spaces). If object-valued, this property accepts an object with a string-valued *type* property and an optional numeric *gamma* property applicable to rgb and cubehelix interpolators. For more, see the `d3-interpolate documentation `__. * **Default value:** ``hcl`` nice : anyOf(boolean, float, :class:`NiceTime`, Mapping(required=[interval, step])) Extending the domain so that it starts and ends on nice round values. This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value. Nicing is useful if the domain is computed from data and may be irregular. For example, for a domain of *[0.201479…, 0.996679…]*, a nice domain might be *[0.2, 1.0]*. For quantitative scales such as linear, ``nice`` can be either a boolean flag or a number. If ``nice`` is a number, it will represent a desired tick count. This allows greater control over the step size used to extend the bounds, guaranteeing that the returned ticks will exactly cover the domain. For temporal fields with time and utc scales, the ``nice`` value can be a string indicating the desired time interval. Legal values are ``"millisecond"``, ``"second"``, ``"minute"``, ``"hour"``, ``"day"``, ``"week"``, ``"month"``, and ``"year"``. Alternatively, ``time`` and ``utc`` scales can accept an object-valued interval specifier of the form ``{"interval": "month", "step": 3}``, which includes a desired number of interval steps. Here, the domain would snap to quarter (Jan, Apr, Jul, Oct) boundaries. **Default value:** ``true`` for unbinned *quantitative* fields; ``false`` otherwise. padding : float For * `continuous `__ * scales, expands the scale domain to accommodate the specified number of pixels on each of the scale range. The scale range must represent pixels for this parameter to function as intended. Padding adjustment is performed prior to all other adjustments, including the effects of the  ``zero``,  ``nice``,  ``domainMin``, and ``domainMax``  properties. For * `band `__ * scales, shortcut for setting ``paddingInner`` and ``paddingOuter`` to the same value. For * `point `__ * scales, alias for ``paddingOuter``. **Default value:** For *continuous* scales, derived from the `scale config `__ 's ``continuousPadding``. For *band and point* scales, see ``paddingInner`` and ``paddingOuter``. By default, Vega-Lite sets padding such that *width/height = number of unique values * step*. paddingInner : float The inner padding (spacing) within each band step of band scales, as a fraction of the step size. This value must lie in the range [0,1]. For point scale, this property is invalid as point scales do not have internal band widths (only step sizes between bands). **Default value:** derived from the `scale config `__ 's ``bandPaddingInner``. paddingOuter : float The outer padding (spacing) at the ends of the range of band and point scales, as a fraction of the step size. This value must lie in the range [0,1]. **Default value:** derived from the `scale config `__ 's ``bandPaddingOuter`` for band scales and ``pointPadding`` for point scales. By default, Vega-Lite sets outer padding such that *width/height = number of unique values * step*. range : anyOf(List(float), List(string), string) The range of the scale. One of: A string indicating a `pre-defined named scale range `__ (e.g., example, ``"symbol"``, or ``"diverging"`` ). For `continuous scales `__, two-element array indicating minimum and maximum values, or an array with more than two entries for specifying a `piecewise scale `__. For `discrete `__ and `discretizing `__ scales, an array of desired output values. **Notes:** 1) For color scales you can also specify a color `scheme `__ instead of ``range``. 2) Any directly specified ``range`` for ``x`` and ``y`` channels will be ignored. Range can be customized via the view's corresponding `size `__ ( ``width`` and ``height`` ) or via `range steps and paddings properties <#range-step>`__ for `band <#band>`__ and `point <#point>`__ scales. rangeStep : anyOf(float, None) The distance between the starts of adjacent bands or points in `band `__ and `point `__ scales. If ``rangeStep`` is ``null`` or if the view contains the scale's corresponding `size `__ ( ``width`` for ``x`` scales and ``height`` for ``y`` scales), ``rangeStep`` will be automatically determined to fit the size of the view. **Default value:** derived the `scale config `__ 's ``textXRangeStep`` ( ``90`` by default) for x-scales of ``text`` marks and ``rangeStep`` ( ``21`` by default) for x-scales of other marks and y-scales. **Warning** : If ``rangeStep`` is ``null`` and the cardinality of the scale's domain is higher than ``width`` or ``height``, the rangeStep might become less than one pixel and the mark might not appear correctly. round : boolean If ``true``, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid. **Default value:** ``false``. scheme : anyOf(string, :class:`SchemeParams`) A string indicating a color `scheme `__ name (e.g., ``"category10"`` or ``"blues"`` ) or a `scheme parameter object `__. Discrete color schemes may be used with `discrete `__ or `discretizing `__ scales. Continuous color schemes are intended for use with color scales. For the full list of supported schemes, please refer to the `Vega Scheme `__ reference. type : :class:`ScaleType` The type of scale. Vega-Lite supports the following categories of scale types: 1) `Continuous Scales `__ -- mapping continuous domains to continuous output ranges ( `"linear" `__, `"pow" `__, `"sqrt" `__, `"symlog" `__, `"log" `__, `"time" `__, `"utc" `__. 2) `Discrete Scales `__ -- mapping discrete domains to discrete ( `"ordinal" `__ ) or continuous ( `"band" `__ and `"point" `__ ) output ranges. 3) `Discretizing Scales `__ -- mapping continuous domains to discrete output ranges `"bin-ordinal" `__, `"quantile" `__, `"quantize" `__ and `"threshold" `__. **Default value:** please see the `scale type table `__. zero : boolean If ``true``, ensures that a zero baseline value is included in the scale domain. **Default value:** ``true`` for x and y channels if the quantitative field is not binned and no custom ``domain`` is provided; ``false`` otherwise. **Note:** Log, time, and utc scales do not support ``zero``. """ _schema = {'$ref': '#/definitions/Scale'} def __init__(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeStep=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds): super(Scale, self).__init__(align=align, base=base, bins=bins, clamp=clamp, constant=constant, domain=domain, exponent=exponent, interpolate=interpolate, nice=nice, padding=padding, paddingInner=paddingInner, paddingOuter=paddingOuter, range=range, rangeStep=rangeStep, round=round, scheme=scheme, type=type, zero=zero, **kwds) class ScaleConfig(VegaLiteSchema): """ScaleConfig schema wrapper Mapping(required=[]) Attributes ---------- bandPaddingInner : float Default inner padding for ``x`` and ``y`` band-ordinal scales. **Default value:** * ``barBandPaddingInner`` for bar marks ( ``0.1`` by default) * ``rectBandPaddingInner`` for rect and other marks ( ``0`` by default) bandPaddingOuter : float Default outer padding for ``x`` and ``y`` band-ordinal scales. **Default value:** ``paddingInner/2`` (which makes *width/height = number of unique values * step* ) barBandPaddingInner : float Default inner padding for ``x`` and ``y`` band-ordinal scales of ``"bar"`` marks. **Default value:** ``0.1`` barBandPaddingOuter : float Default outer padding for ``x`` and ``y`` band-ordinal scales of ``"bar"`` marks. If not specified, by default, band scale's paddingOuter is paddingInner/2. clamp : boolean If true, values that exceed the data domain are clamped to either the minimum or maximum range value continuousPadding : float Default padding for continuous scales. **Default:** ``5`` for continuous x-scale of a vertical bar and continuous y-scale of a horizontal bar.; ``0`` otherwise. maxBandSize : float The default max value for mapping quantitative fields to bar's size/bandSize. If undefined (default), we will use the scale's ``rangeStep`` - 1. maxFontSize : float The default max value for mapping quantitative fields to text's size/fontSize. **Default value:** ``40`` maxOpacity : float Default max opacity for mapping a field to opacity. **Default value:** ``0.8`` maxSize : float Default max value for point size scale. maxStrokeWidth : float Default max strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks. **Default value:** ``4`` minBandSize : float The default min value for mapping quantitative fields to bar and tick's size/bandSize scale with zero=false. **Default value:** ``2`` minFontSize : float The default min value for mapping quantitative fields to tick's size/fontSize scale with zero=false **Default value:** ``8`` minOpacity : float Default minimum opacity for mapping a field to opacity. **Default value:** ``0.3`` minSize : float Default minimum value for point size scale with zero=false. **Default value:** ``9`` minStrokeWidth : float Default minimum strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks with zero=false. **Default value:** ``1`` pointPadding : float Default outer padding for ``x`` and ``y`` point-ordinal scales. **Default value:** ``0.5`` (which makes *width/height = number of unique values * step* ) quantileCount : float Default range cardinality for `quantile `__ scale. **Default value:** ``4`` quantizeCount : float Default range cardinality for `quantize `__ scale. **Default value:** ``4`` rangeStep : anyOf(float, None) Default range step for band and point scales of (1) the ``y`` channel and (2) the ``x`` channel when the mark is not ``text``. **Default value:** ``20`` rectBandPaddingInner : float Default inner padding for ``x`` and ``y`` band-ordinal scales of ``"rect"`` marks. **Default value:** ``0`` rectBandPaddingOuter : float Default outer padding for ``x`` and ``y`` band-ordinal scales of ``"rect"`` marks. If not specified, by default, band scale's paddingOuter is paddingInner/2. round : boolean If true, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid. (Only available for ``x``, ``y``, and ``size`` scales.) textXRangeStep : float Default range step for ``x`` band and point scales of text marks. **Default value:** ``90`` useUnaggregatedDomain : boolean Use the source data range before aggregation as scale domain instead of aggregated data for aggregate axis. This is equivalent to setting ``domain`` to ``"unaggregate"`` for aggregated *quantitative* fields by default. This property only works with aggregate functions that produce values within the raw data domain ( ``"mean"``, ``"average"``, ``"median"``, ``"q1"``, ``"q3"``, ``"min"``, ``"max"`` ). For other aggregations that produce values outside of the raw data domain (e.g. ``"count"``, ``"sum"`` ), this property is ignored. **Default value:** ``false`` """ _schema = {'$ref': '#/definitions/ScaleConfig'} def __init__(self, bandPaddingInner=Undefined, bandPaddingOuter=Undefined, barBandPaddingInner=Undefined, barBandPaddingOuter=Undefined, clamp=Undefined, continuousPadding=Undefined, maxBandSize=Undefined, maxFontSize=Undefined, maxOpacity=Undefined, maxSize=Undefined, maxStrokeWidth=Undefined, minBandSize=Undefined, minFontSize=Undefined, minOpacity=Undefined, minSize=Undefined, minStrokeWidth=Undefined, pointPadding=Undefined, quantileCount=Undefined, quantizeCount=Undefined, rangeStep=Undefined, rectBandPaddingInner=Undefined, rectBandPaddingOuter=Undefined, round=Undefined, textXRangeStep=Undefined, useUnaggregatedDomain=Undefined, **kwds): super(ScaleConfig, self).__init__(bandPaddingInner=bandPaddingInner, bandPaddingOuter=bandPaddingOuter, barBandPaddingInner=barBandPaddingInner, barBandPaddingOuter=barBandPaddingOuter, clamp=clamp, continuousPadding=continuousPadding, maxBandSize=maxBandSize, maxFontSize=maxFontSize, maxOpacity=maxOpacity, maxSize=maxSize, maxStrokeWidth=maxStrokeWidth, minBandSize=minBandSize, minFontSize=minFontSize, minOpacity=minOpacity, minSize=minSize, minStrokeWidth=minStrokeWidth, pointPadding=pointPadding, quantileCount=quantileCount, quantizeCount=quantizeCount, rangeStep=rangeStep, rectBandPaddingInner=rectBandPaddingInner, rectBandPaddingOuter=rectBandPaddingOuter, round=round, textXRangeStep=textXRangeStep, useUnaggregatedDomain=useUnaggregatedDomain, **kwds) class ScaleInterpolate(VegaLiteSchema): """ScaleInterpolate schema wrapper enum('rgb', 'lab', 'hcl', 'hsl', 'hsl-long', 'hcl-long', 'cubehelix', 'cubehelix-long') """ _schema = {'$ref': '#/definitions/ScaleInterpolate'} def __init__(self, *args): super(ScaleInterpolate, self).__init__(*args) class ScaleInterpolateParams(VegaLiteSchema): """ScaleInterpolateParams schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('rgb', 'cubehelix', 'cubehelix-long') gamma : float """ _schema = {'$ref': '#/definitions/ScaleInterpolateParams'} def __init__(self, type=Undefined, gamma=Undefined, **kwds): super(ScaleInterpolateParams, self).__init__(type=type, gamma=gamma, **kwds) class ScaleResolveMap(VegaLiteSchema): """ScaleResolveMap schema wrapper Mapping(required=[]) Attributes ---------- color : :class:`ResolveMode` fill : :class:`ResolveMode` fillOpacity : :class:`ResolveMode` opacity : :class:`ResolveMode` shape : :class:`ResolveMode` size : :class:`ResolveMode` stroke : :class:`ResolveMode` strokeOpacity : :class:`ResolveMode` strokeWidth : :class:`ResolveMode` x : :class:`ResolveMode` y : :class:`ResolveMode` """ _schema = {'$ref': '#/definitions/ScaleResolveMap'} def __init__(self, color=Undefined, fill=Undefined, fillOpacity=Undefined, opacity=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, x=Undefined, y=Undefined, **kwds): super(ScaleResolveMap, self).__init__(color=color, fill=fill, fillOpacity=fillOpacity, opacity=opacity, shape=shape, size=size, stroke=stroke, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, x=x, y=y, **kwds) class ScaleType(VegaLiteSchema): """ScaleType schema wrapper enum('linear', 'log', 'pow', 'sqrt', 'symlog', 'time', 'utc', 'quantile', 'quantize', 'threshold', 'bin-ordinal', 'ordinal', 'point', 'band') """ _schema = {'$ref': '#/definitions/ScaleType'} def __init__(self, *args): super(ScaleType, self).__init__(*args) class SchemeConfig(RangeConfigValue): """SchemeConfig schema wrapper Mapping(required=[scheme]) Attributes ---------- scheme : string count : float extent : List(float) """ _schema = {'$ref': '#/definitions/SchemeConfig'} def __init__(self, scheme=Undefined, count=Undefined, extent=Undefined, **kwds): super(SchemeConfig, self).__init__(scheme=scheme, count=count, extent=extent, **kwds) class SchemeParams(VegaLiteSchema): """SchemeParams schema wrapper Mapping(required=[name]) Attributes ---------- name : string A color scheme name for ordinal scales (e.g., ``"category10"`` or ``"blues"`` ). For the full list of supported schemes, please refer to the `Vega Scheme `__ reference. count : float The number of colors to use in the scheme. This can be useful for scale types such as ``"quantize"``, which use the length of the scale range to determine the number of discrete bins for the scale domain. extent : List(float) The extent of the color range to use. For example ``[0.2, 1]`` will rescale the color scheme such that color values in the range *[0, 0.2)* are excluded from the scheme. """ _schema = {'$ref': '#/definitions/SchemeParams'} def __init__(self, name=Undefined, count=Undefined, extent=Undefined, **kwds): super(SchemeParams, self).__init__(name=name, count=count, extent=extent, **kwds) class SecondaryFieldDef(VegaLiteSchema): """SecondaryFieldDef schema wrapper Mapping(required=[]) A field definition of a secondary channel that shares a scale with another primary channel. For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``. Attributes ---------- aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/SecondaryFieldDef'} def __init__(self, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(SecondaryFieldDef, self).__init__(aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class SelectionConfig(VegaLiteSchema): """SelectionConfig schema wrapper Mapping(required=[]) Attributes ---------- interval : :class:`IntervalSelectionConfig` The default definition for an `interval `__ selection. All properties and transformations for an interval selection definition (except ``type`` ) may be specified here. For instance, setting ``interval`` to ``{"translate": false}`` disables the ability to move interval selections by default. multi : :class:`MultiSelectionConfig` The default definition for a `multi `__ selection. All properties and transformations for a multi selection definition (except ``type`` ) may be specified here. For instance, setting ``multi`` to ``{"toggle": "event.altKey"}`` adds additional values to multi selections when clicking with the alt-key pressed by default. single : :class:`SingleSelectionConfig` The default definition for a `single `__ selection. All properties and transformations for a single selection definition (except ``type`` ) may be specified here. For instance, setting ``single`` to ``{"on": "dblclick"}`` populates single selections on double-click by default. """ _schema = {'$ref': '#/definitions/SelectionConfig'} def __init__(self, interval=Undefined, multi=Undefined, single=Undefined, **kwds): super(SelectionConfig, self).__init__(interval=interval, multi=multi, single=single, **kwds) class SelectionDef(VegaLiteSchema): """SelectionDef schema wrapper anyOf(:class:`SingleSelection`, :class:`MultiSelection`, :class:`IntervalSelection`) """ _schema = {'$ref': '#/definitions/SelectionDef'} def __init__(self, *args, **kwds): super(SelectionDef, self).__init__(*args, **kwds) class IntervalSelection(SelectionDef): """IntervalSelection schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('interval') Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types: * ``single`` -- to select a single discrete data value on ``click``. * ``multi`` -- to select multiple discrete data value; the first value is selected on ``click`` and additional values toggled on shift- ``click``. * ``interval`` -- to select a continuous range of data values on ``drag``. bind : enum('scales') Establishes a two-way binding between the interval selection and the scales used within the same view. This allows a user to interactively pan and zoom the view. **See also:** `bind `__ documentation. clear : anyOf(:class:`EventStream`, boolean) Clears the selection, emptying it of all values. Can be an `EventStream `__ or ``false`` to disable. **Default value:** ``dblclick``. **See also:** `clear `__ documentation. empty : enum('all', 'none') By default, ``all`` data values are considered to lie within an empty selection. When set to ``none``, empty selections contain no data values. encodings : List(:class:`SingleDefUnitChannel`) An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection. **See also:** `encodings `__ documentation. fields : List(:class:`FieldName`) An array of field names whose values must match for a data tuple to fall within the selection. **See also:** `fields `__ documentation. init : :class:`SelectionInitIntervalMapping` Initialize the selection with a mapping between `projected channels or field names `__ and arrays of initial values. **See also:** `init `__ documentation. mark : :class:`BrushConfig` An interval selection also adds a rectangle mark to depict the extents of the interval. The ``mark`` property can be used to customize the appearance of the mark. **See also:** `mark `__ documentation. on : :class:`EventStream` A `Vega event stream `__ (object or selector) that triggers the selection. For interval selections, the event stream must specify a `start and end `__. resolve : :class:`SelectionResolution` With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain. **See also:** `resolve `__ documentation. translate : anyOf(string, boolean) When truthy, allows a user to interactively move an interval selection back-and-forth. Can be ``true``, ``false`` (to disable panning), or a `Vega event stream definition `__ which must include a start and end event to trigger continuous panning. **Default value:** ``true``, which corresponds to ``[mousedown, window:mouseup] > window:mousemove!`` which corresponds to clicks and dragging within an interval selection to reposition it. **See also:** `translate `__ documentation. zoom : anyOf(string, boolean) When truthy, allows a user to interactively resize an interval selection. Can be ``true``, ``false`` (to disable zooming), or a `Vega event stream definition `__. Currently, only ``wheel`` events are supported. **Default value:** ``true``, which corresponds to ``wheel!``. **See also:** `zoom `__ documentation. """ _schema = {'$ref': '#/definitions/IntervalSelection'} def __init__(self, type=Undefined, bind=Undefined, clear=Undefined, empty=Undefined, encodings=Undefined, fields=Undefined, init=Undefined, mark=Undefined, on=Undefined, resolve=Undefined, translate=Undefined, zoom=Undefined, **kwds): super(IntervalSelection, self).__init__(type=type, bind=bind, clear=clear, empty=empty, encodings=encodings, fields=fields, init=init, mark=mark, on=on, resolve=resolve, translate=translate, zoom=zoom, **kwds) class MultiSelection(SelectionDef): """MultiSelection schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('multi') Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types: * ``single`` -- to select a single discrete data value on ``click``. * ``multi`` -- to select multiple discrete data value; the first value is selected on ``click`` and additional values toggled on shift- ``click``. * ``interval`` -- to select a continuous range of data values on ``drag``. clear : anyOf(:class:`EventStream`, boolean) Clears the selection, emptying it of all values. Can be an `EventStream `__ or ``false`` to disable. **Default value:** ``dblclick``. **See also:** `clear `__ documentation. empty : enum('all', 'none') By default, ``all`` data values are considered to lie within an empty selection. When set to ``none``, empty selections contain no data values. encodings : List(:class:`SingleDefUnitChannel`) An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection. **See also:** `encodings `__ documentation. fields : List(:class:`FieldName`) An array of field names whose values must match for a data tuple to fall within the selection. **See also:** `fields `__ documentation. init : anyOf(:class:`SelectionInitMapping`, List(:class:`SelectionInitMapping`)) Initialize the selection with a mapping between `projected channels or field names `__ and an initial value (or array of values). **See also:** `init `__ documentation. nearest : boolean When true, an invisible voronoi diagram is computed to accelerate discrete selection. The data value *nearest* the mouse cursor is added to the selection. **See also:** `nearest `__ documentation. on : :class:`EventStream` A `Vega event stream `__ (object or selector) that triggers the selection. For interval selections, the event stream must specify a `start and end `__. resolve : :class:`SelectionResolution` With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain. **See also:** `resolve `__ documentation. toggle : anyOf(string, boolean) Controls whether data values should be toggled or only ever inserted into multi selections. Can be ``true``, ``false`` (for insertion only), or a `Vega expression `__. **Default value:** ``true``, which corresponds to ``event.shiftKey`` (i.e., data values are toggled when a user interacts with the shift-key pressed). **See also:** `toggle `__ documentation. """ _schema = {'$ref': '#/definitions/MultiSelection'} def __init__(self, type=Undefined, clear=Undefined, empty=Undefined, encodings=Undefined, fields=Undefined, init=Undefined, nearest=Undefined, on=Undefined, resolve=Undefined, toggle=Undefined, **kwds): super(MultiSelection, self).__init__(type=type, clear=clear, empty=empty, encodings=encodings, fields=fields, init=init, nearest=nearest, on=on, resolve=resolve, toggle=toggle, **kwds) class SelectionDomain(VegaLiteSchema): """SelectionDomain schema wrapper anyOf(Mapping(required=[selection]), Mapping(required=[selection])) """ _schema = {'$ref': '#/definitions/SelectionDomain'} def __init__(self, *args, **kwds): super(SelectionDomain, self).__init__(*args, **kwds) class SelectionInit(VegaLiteSchema): """SelectionInit schema wrapper anyOf(boolean, float, string, :class:`DateTime`) """ _schema = {'$ref': '#/definitions/SelectionInit'} def __init__(self, *args, **kwds): super(SelectionInit, self).__init__(*args, **kwds) class DateTime(SelectionInit): """DateTime schema wrapper Mapping(required=[]) Object for defining datetime in Vega-Lite Filter. If both month and quarter are provided, month has higher precedence. ``day`` cannot be combined with other date. We accept string for month and day names. Attributes ---------- date : float Integer value representing the date from 1-31. day : anyOf(:class:`Day`, string) Value representing the day of a week. This can be one of: (1) integer value -- ``1`` represents Monday; (2) case-insensitive day name (e.g., ``"Monday"`` ); (3) case-insensitive, 3-character short day name (e.g., ``"Mon"`` ). :raw-html:`
` **Warning:** A DateTime definition object with ``day`` ** should not be combined with ``year``, ``quarter``, ``month``, or ``date``. hours : float Integer value representing the hour of a day from 0-23. milliseconds : float Integer value representing the millisecond segment of time. minutes : float Integer value representing the minute segment of time from 0-59. month : anyOf(:class:`Month`, string) One of: (1) integer value representing the month from ``1`` - ``12``. ``1`` represents January; (2) case-insensitive month name (e.g., ``"January"`` ); (3) case-insensitive, 3-character short month name (e.g., ``"Jan"`` ). quarter : float Integer value representing the quarter of the year (from 1-4). seconds : float Integer value representing the second segment (0-59) of a time value utc : boolean A boolean flag indicating if date time is in utc time. If false, the date time is in local time year : float Integer value representing the year. """ _schema = {'$ref': '#/definitions/DateTime'} def __init__(self, date=Undefined, day=Undefined, hours=Undefined, milliseconds=Undefined, minutes=Undefined, month=Undefined, quarter=Undefined, seconds=Undefined, utc=Undefined, year=Undefined, **kwds): super(DateTime, self).__init__(date=date, day=day, hours=hours, milliseconds=milliseconds, minutes=minutes, month=month, quarter=quarter, seconds=seconds, utc=utc, year=year, **kwds) class SelectionInitInterval(VegaLiteSchema): """SelectionInitInterval schema wrapper anyOf(List([boolean, boolean]), List([float, float]), List([string, string]), List([:class:`DateTime`, :class:`DateTime`])) """ _schema = {'$ref': '#/definitions/SelectionInitInterval'} def __init__(self, *args, **kwds): super(SelectionInitInterval, self).__init__(*args, **kwds) class SelectionInitIntervalMapping(VegaLiteSchema): """SelectionInitIntervalMapping schema wrapper Mapping(required=[]) """ _schema = {'$ref': '#/definitions/SelectionInitIntervalMapping'} def __init__(self, **kwds): super(SelectionInitIntervalMapping, self).__init__(**kwds) class SelectionInitMapping(VegaLiteSchema): """SelectionInitMapping schema wrapper Mapping(required=[]) """ _schema = {'$ref': '#/definitions/SelectionInitMapping'} def __init__(self, **kwds): super(SelectionInitMapping, self).__init__(**kwds) class SelectionOperand(VegaLiteSchema): """SelectionOperand schema wrapper anyOf(:class:`SelectionNot`, :class:`SelectionAnd`, :class:`SelectionOr`, string) """ _schema = {'$ref': '#/definitions/SelectionOperand'} def __init__(self, *args, **kwds): super(SelectionOperand, self).__init__(*args, **kwds) class SelectionAnd(SelectionOperand): """SelectionAnd schema wrapper Mapping(required=[and]) Attributes ---------- and : List(:class:`SelectionOperand`) """ _schema = {'$ref': '#/definitions/SelectionAnd'} def __init__(self, **kwds): super(SelectionAnd, self).__init__(**kwds) class SelectionNot(SelectionOperand): """SelectionNot schema wrapper Mapping(required=[not]) Attributes ---------- not : :class:`SelectionOperand` """ _schema = {'$ref': '#/definitions/SelectionNot'} def __init__(self, **kwds): super(SelectionNot, self).__init__(**kwds) class SelectionOr(SelectionOperand): """SelectionOr schema wrapper Mapping(required=[or]) Attributes ---------- or : List(:class:`SelectionOperand`) """ _schema = {'$ref': '#/definitions/SelectionOr'} def __init__(self, **kwds): super(SelectionOr, self).__init__(**kwds) class SelectionPredicate(Predicate): """SelectionPredicate schema wrapper Mapping(required=[selection]) Attributes ---------- selection : :class:`SelectionOperand` Filter using a selection name. """ _schema = {'$ref': '#/definitions/SelectionPredicate'} def __init__(self, selection=Undefined, **kwds): super(SelectionPredicate, self).__init__(selection=selection, **kwds) class SelectionResolution(VegaLiteSchema): """SelectionResolution schema wrapper enum('global', 'union', 'intersect') """ _schema = {'$ref': '#/definitions/SelectionResolution'} def __init__(self, *args): super(SelectionResolution, self).__init__(*args) class SequenceGenerator(Generator): """SequenceGenerator schema wrapper Mapping(required=[sequence]) Attributes ---------- sequence : :class:`SequenceParams` Generate a sequence of numbers. name : string Provide a placeholder name and bind data at runtime. """ _schema = {'$ref': '#/definitions/SequenceGenerator'} def __init__(self, sequence=Undefined, name=Undefined, **kwds): super(SequenceGenerator, self).__init__(sequence=sequence, name=name, **kwds) class SequenceParams(VegaLiteSchema): """SequenceParams schema wrapper Mapping(required=[start, stop]) Attributes ---------- start : float The starting value of the sequence (inclusive). stop : float The ending value of the sequence (exclusive). step : float The step value between sequence entries. **Default value:** ``1`` as : :class:`FieldName` The name of the generated sequence field. **Default value:** ``"data"`` """ _schema = {'$ref': '#/definitions/SequenceParams'} def __init__(self, start=Undefined, stop=Undefined, step=Undefined, **kwds): super(SequenceParams, self).__init__(start=start, stop=stop, step=step, **kwds) class ShapeFieldDefWithCondition(VegaLiteSchema): """ShapeFieldDefWithCondition schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`TypeForShape` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/ShapeFieldDefWithCondition'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(ShapeFieldDefWithCondition, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class ShapeValueDefWithCondition(VegaLiteSchema): """ShapeValueDefWithCondition schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDefTypeForShape`, :class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ShapeValueDefWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ShapeValueDefWithCondition, self).__init__(condition=condition, value=value, **kwds) class SignalRef(LayoutBounds): """SignalRef schema wrapper Mapping(required=[signal]) Attributes ---------- signal : string """ _schema = {'$ref': '#/definitions/SignalRef'} def __init__(self, signal=Undefined, **kwds): super(SignalRef, self).__init__(signal=signal, **kwds) class SingleDefUnitChannel(VegaLiteSchema): """SingleDefUnitChannel schema wrapper enum('x', 'y', 'x2', 'y2', 'longitude', 'latitude', 'longitude2', 'latitude2', 'color', 'fill', 'stroke', 'opacity', 'fillOpacity', 'strokeOpacity', 'strokeWidth', 'size', 'shape', 'key', 'text', 'tooltip', 'href') """ _schema = {'$ref': '#/definitions/SingleDefUnitChannel'} def __init__(self, *args): super(SingleDefUnitChannel, self).__init__(*args) class SingleSelection(SelectionDef): """SingleSelection schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('single') Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types: * ``single`` -- to select a single discrete data value on ``click``. * ``multi`` -- to select multiple discrete data value; the first value is selected on ``click`` and additional values toggled on shift- ``click``. * ``interval`` -- to select a continuous range of data values on ``drag``. bind : anyOf(:class:`Binding`, Mapping(required=[])) Establish a two-way binding between a single selection and input elements (also known as dynamic query widgets). A binding takes the form of Vega's `input element binding definition `__ or can be a mapping between projected field/encodings and binding definitions. **See also:** `bind `__ documentation. clear : anyOf(:class:`EventStream`, boolean) Clears the selection, emptying it of all values. Can be an `EventStream `__ or ``false`` to disable. **Default value:** ``dblclick``. **See also:** `clear `__ documentation. empty : enum('all', 'none') By default, ``all`` data values are considered to lie within an empty selection. When set to ``none``, empty selections contain no data values. encodings : List(:class:`SingleDefUnitChannel`) An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection. **See also:** `encodings `__ documentation. fields : List(:class:`FieldName`) An array of field names whose values must match for a data tuple to fall within the selection. **See also:** `fields `__ documentation. init : :class:`SelectionInitMapping` Initialize the selection with a mapping between `projected channels or field names `__ and initial values. **See also:** `init `__ documentation. nearest : boolean When true, an invisible voronoi diagram is computed to accelerate discrete selection. The data value *nearest* the mouse cursor is added to the selection. **See also:** `nearest `__ documentation. on : :class:`EventStream` A `Vega event stream `__ (object or selector) that triggers the selection. For interval selections, the event stream must specify a `start and end `__. resolve : :class:`SelectionResolution` With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain. **See also:** `resolve `__ documentation. """ _schema = {'$ref': '#/definitions/SingleSelection'} def __init__(self, type=Undefined, bind=Undefined, clear=Undefined, empty=Undefined, encodings=Undefined, fields=Undefined, init=Undefined, nearest=Undefined, on=Undefined, resolve=Undefined, **kwds): super(SingleSelection, self).__init__(type=type, bind=bind, clear=clear, empty=empty, encodings=encodings, fields=fields, init=init, nearest=nearest, on=on, resolve=resolve, **kwds) class SingleSelectionConfig(VegaLiteSchema): """SingleSelectionConfig schema wrapper Mapping(required=[]) Attributes ---------- bind : anyOf(:class:`Binding`, Mapping(required=[])) Establish a two-way binding between a single selection and input elements (also known as dynamic query widgets). A binding takes the form of Vega's `input element binding definition `__ or can be a mapping between projected field/encodings and binding definitions. **See also:** `bind `__ documentation. clear : anyOf(:class:`EventStream`, boolean) Clears the selection, emptying it of all values. Can be an `EventStream `__ or ``false`` to disable. **Default value:** ``dblclick``. **See also:** `clear `__ documentation. empty : enum('all', 'none') By default, ``all`` data values are considered to lie within an empty selection. When set to ``none``, empty selections contain no data values. encodings : List(:class:`SingleDefUnitChannel`) An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection. **See also:** `encodings `__ documentation. fields : List(:class:`FieldName`) An array of field names whose values must match for a data tuple to fall within the selection. **See also:** `fields `__ documentation. init : :class:`SelectionInitMapping` Initialize the selection with a mapping between `projected channels or field names `__ and initial values. **See also:** `init `__ documentation. nearest : boolean When true, an invisible voronoi diagram is computed to accelerate discrete selection. The data value *nearest* the mouse cursor is added to the selection. **See also:** `nearest `__ documentation. on : :class:`EventStream` A `Vega event stream `__ (object or selector) that triggers the selection. For interval selections, the event stream must specify a `start and end `__. resolve : :class:`SelectionResolution` With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain. **See also:** `resolve `__ documentation. """ _schema = {'$ref': '#/definitions/SingleSelectionConfig'} def __init__(self, bind=Undefined, clear=Undefined, empty=Undefined, encodings=Undefined, fields=Undefined, init=Undefined, nearest=Undefined, on=Undefined, resolve=Undefined, **kwds): super(SingleSelectionConfig, self).__init__(bind=bind, clear=clear, empty=empty, encodings=encodings, fields=fields, init=init, nearest=nearest, on=on, resolve=resolve, **kwds) class Sort(VegaLiteSchema): """Sort schema wrapper anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, :class:`SortByEncoding`, None) """ _schema = {'$ref': '#/definitions/Sort'} def __init__(self, *args, **kwds): super(Sort, self).__init__(*args, **kwds) class EncodingSortField(Sort): """EncodingSortField schema wrapper Mapping(required=[]) A sort definition for sorting a discrete scale in an encoding field definition. Attributes ---------- field : :class:`Field` The data `field `__ to sort by. **Default value:** If unspecified, defaults to the field specified in the outer data reference. op : :class:`AggregateOp` An `aggregate operation `__ to perform on the field prior to sorting (e.g., ``"count"``, ``"mean"`` and ``"median"`` ). An aggregation is required when there are multiple values of the sort field for each encoded data field. The input data objects will be aggregated, grouped by the encoded data field. For a full list of operations, please see the documentation for `aggregate `__. **Default value:** ``"sum"`` for stacked plots. Otherwise, ``"mean"``. order : anyOf(:class:`SortOrder`, None) The sort order. One of ``"ascending"`` (default), ``"descending"``, or ``null`` (no not sort). """ _schema = {'$ref': '#/definitions/EncodingSortField'} def __init__(self, field=Undefined, op=Undefined, order=Undefined, **kwds): super(EncodingSortField, self).__init__(field=field, op=op, order=order, **kwds) class SortArray(Sort): """SortArray schema wrapper anyOf(List(float), List(string), List(boolean), List(:class:`DateTime`)) """ _schema = {'$ref': '#/definitions/SortArray'} def __init__(self, *args, **kwds): super(SortArray, self).__init__(*args, **kwds) class SortByEncoding(Sort): """SortByEncoding schema wrapper Mapping(required=[encoding]) Attributes ---------- encoding : :class:`SingleDefUnitChannel` The `encoding channel `__ to sort by (e.g., ``"x"``, ``"y"`` ) order : anyOf(:class:`SortOrder`, None) The sort order. One of ``"ascending"`` (default), ``"descending"``, or ``null`` (no not sort). """ _schema = {'$ref': '#/definitions/SortByEncoding'} def __init__(self, encoding=Undefined, order=Undefined, **kwds): super(SortByEncoding, self).__init__(encoding=encoding, order=order, **kwds) class SortField(VegaLiteSchema): """SortField schema wrapper Mapping(required=[field]) A sort definition for transform Attributes ---------- field : :class:`FieldName` The name of the field to sort. order : anyOf(:class:`SortOrder`, None) Whether to sort the field in ascending or descending order. One of ``"ascending"`` (default), ``"descending"``, or ``null`` (no not sort). """ _schema = {'$ref': '#/definitions/SortField'} def __init__(self, field=Undefined, order=Undefined, **kwds): super(SortField, self).__init__(field=field, order=order, **kwds) class SortOrder(Sort): """SortOrder schema wrapper enum('ascending', 'descending') """ _schema = {'$ref': '#/definitions/SortOrder'} def __init__(self, *args): super(SortOrder, self).__init__(*args) class Spec(VegaLiteSchema): """Spec schema wrapper anyOf(:class:`FacetedUnitSpec`, :class:`LayerSpec`, :class:`FacetSpec`, :class:`RepeatSpec`, :class:`ConcatSpec`, :class:`VConcatSpec`, :class:`HConcatSpec`) Any specification in Vega-Lite. """ _schema = {'$ref': '#/definitions/Spec'} def __init__(self, *args, **kwds): super(Spec, self).__init__(*args, **kwds) class ConcatSpec(Spec): """ConcatSpec schema wrapper Mapping(required=[concat]) Base interface for a generalized concatenation specification. Attributes ---------- concat : List(:class:`Spec`) A list of views to be concatenated. align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`) The alignment to apply to grid rows and columns. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. Alternatively, an object value of the form ``{"row": string, "column": string}`` can be used to supply different alignments for rows and columns. **Default value:** ``"all"``. bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : anyOf(boolean, :class:`RowColboolean`) Boolean flag indicating if subviews should be centered relative to their respective rows or columns. An object value of the form ``{"row": boolean, "column": boolean}`` can be used to supply different centering values for rows and columns. **Default value:** ``false`` columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : anyOf(float, :class:`RowColnumber`) The spacing in pixels between sub-views of the composition operator. An object of the form ``{"row": number, "column": number}`` can be used to set different spacing values for rows and columns. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) title : anyOf(string, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. """ _schema = {'$ref': '#/definitions/ConcatSpec'} def __init__(self, concat=Undefined, align=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, data=Undefined, description=Undefined, name=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, **kwds): super(ConcatSpec, self).__init__(concat=concat, align=align, bounds=bounds, center=center, columns=columns, data=data, description=description, name=name, resolve=resolve, spacing=spacing, title=title, transform=transform, **kwds) class FacetSpec(Spec): """FacetSpec schema wrapper Mapping(required=[facet, spec]) Base interface for a facet specification. Attributes ---------- facet : anyOf(:class:`FacetFieldDef`, :class:`FacetMapping`) Definition for how to facet the data. One of: 1) `a field definition for faceting the plot by one field `__ 2) `An object that maps row and column channels to their field definitions `__ spec : anyOf(:class:`LayerSpec`, :class:`FacetedUnitSpec`) A specification of the view that gets faceted. align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`) The alignment to apply to grid rows and columns. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. Alternatively, an object value of the form ``{"row": string, "column": string}`` can be used to supply different alignments for rows and columns. **Default value:** ``"all"``. bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : anyOf(boolean, :class:`RowColboolean`) Boolean flag indicating if subviews should be centered relative to their respective rows or columns. An object value of the form ``{"row": boolean, "column": boolean}`` can be used to supply different centering values for rows and columns. **Default value:** ``false`` columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : anyOf(float, :class:`RowColnumber`) The spacing in pixels between sub-views of the composition operator. An object of the form ``{"row": number, "column": number}`` can be used to set different spacing values for rows and columns. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) title : anyOf(string, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. """ _schema = {'$ref': '#/definitions/FacetSpec'} def __init__(self, facet=Undefined, spec=Undefined, align=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, data=Undefined, description=Undefined, name=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, **kwds): super(FacetSpec, self).__init__(facet=facet, spec=spec, align=align, bounds=bounds, center=center, columns=columns, data=data, description=description, name=name, resolve=resolve, spacing=spacing, title=title, transform=transform, **kwds) class FacetedUnitSpec(Spec): """FacetedUnitSpec schema wrapper Mapping(required=[mark]) Unit spec that can have a composite mark and row or column channels (shorthand for a facet spec). Attributes ---------- mark : :class:`AnyMark` A string describing the mark type (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"rule"``, ``"geoshape"``, and ``"text"`` ) or a `mark definition object `__. align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`) The alignment to apply to grid rows and columns. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. Alternatively, an object value of the form ``{"row": string, "column": string}`` can be used to supply different alignments for rows and columns. **Default value:** ``"all"``. bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : anyOf(boolean, :class:`RowColboolean`) Boolean flag indicating if subviews should be centered relative to their respective rows or columns. An object value of the form ``{"row": boolean, "column": boolean}`` can be used to supply different centering values for rows and columns. **Default value:** ``false`` columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. encoding : :class:`FacetedEncoding` A key-value mapping between encoding channels and definition of fields. height : float The height of a visualization. **Default value:** * If a view's `autosize `__ type is ``"fit"`` or its y-channel has a `continuous scale `__, the height will be the value of `config.view.height `__. * For y-axis with a band or point scale: if `rangeStep `__ is a numeric value or unspecified, the height is `determined by the range step, paddings, and the cardinality of the field mapped to y-channel `__. Otherwise, if the ``rangeStep`` is ``null``, the height will be the value of `config.view.height `__. * If no field is mapped to ``y`` channel, the ``height`` will be the value of ``rangeStep``. **Note** : For plots with `row and column channels `__, this represents the height of a single view. **See also:** The documentation for `width and height `__ contains more examples. name : string Name of the visualization for later reference. projection : :class:`Projection` An object defining properties of geographic projection, which will be applied to ``shape`` path for ``"geoshape"`` marks and to ``latitude`` and ``"longitude"`` channels for other marks. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. selection : Mapping(required=[]) A key-value mapping between selection names and definitions. spacing : anyOf(float, :class:`RowColnumber`) The spacing in pixels between sub-views of the composition operator. An object of the form ``{"row": number, "column": number}`` can be used to set different spacing values for rows and columns. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) title : anyOf(string, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. view : :class:`ViewBackground` An object defining the view background's fill and stroke. **Default value:** none (transparent) width : float The width of a visualization. **Default value:** This will be determined by the following rules: * If a view's `autosize `__ type is ``"fit"`` or its x-channel has a `continuous scale `__, the width will be the value of `config.view.width `__. * For x-axis with a band or point scale: if `rangeStep `__ is a numeric value or unspecified, the width is `determined by the range step, paddings, and the cardinality of the field mapped to x-channel `__. Otherwise, if the ``rangeStep`` is ``null``, the width will be the value of `config.view.width `__. * If no field is mapped to ``x`` channel, the ``width`` will be the value of `config.scale.textXRangeStep `__ for ``text`` mark and the value of ``rangeStep`` for other marks. **Note:** For plots with `row and column channels `__, this represents the width of a single view. **See also:** The documentation for `width and height `__ contains more examples. """ _schema = {'$ref': '#/definitions/FacetedUnitSpec'} def __init__(self, mark=Undefined, align=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, data=Undefined, description=Undefined, encoding=Undefined, height=Undefined, name=Undefined, projection=Undefined, resolve=Undefined, selection=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, view=Undefined, width=Undefined, **kwds): super(FacetedUnitSpec, self).__init__(mark=mark, align=align, bounds=bounds, center=center, columns=columns, data=data, description=description, encoding=encoding, height=height, name=name, projection=projection, resolve=resolve, selection=selection, spacing=spacing, title=title, transform=transform, view=view, width=width, **kwds) class HConcatSpec(Spec): """HConcatSpec schema wrapper Mapping(required=[hconcat]) Base interface for a horizontal concatenation specification. Attributes ---------- hconcat : List(:class:`Spec`) A list of views to be concatenated and put into a row. bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : boolean Boolean flag indicating if subviews should be centered relative to their respective rows or columns. **Default value:** ``false`` data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : float The spacing in pixels between sub-views of the concat operator. **Default value** : ``10`` title : anyOf(string, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. """ _schema = {'$ref': '#/definitions/HConcatSpec'} def __init__(self, hconcat=Undefined, bounds=Undefined, center=Undefined, data=Undefined, description=Undefined, name=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, **kwds): super(HConcatSpec, self).__init__(hconcat=hconcat, bounds=bounds, center=center, data=data, description=description, name=name, resolve=resolve, spacing=spacing, title=title, transform=transform, **kwds) class LayerSpec(Spec): """LayerSpec schema wrapper Mapping(required=[layer]) A full layered plot specification, which may contains ``encoding`` and ``projection`` properties that will be applied to underlying unit (single-view) specifications. Attributes ---------- layer : List(anyOf(:class:`LayerSpec`, :class:`UnitSpec`)) Layer or single view specifications to be layered. **Note** : Specifications inside ``layer`` cannot use ``row`` and ``column`` channels as layering facet specifications is not allowed. Instead, use the `facet operator `__ and place a layer inside a facet. data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. encoding : :class:`Encoding` A shared key-value mapping between encoding channels and definition of fields in the underlying layers. height : float The height of a visualization. **Default value:** * If a view's `autosize `__ type is ``"fit"`` or its y-channel has a `continuous scale `__, the height will be the value of `config.view.height `__. * For y-axis with a band or point scale: if `rangeStep `__ is a numeric value or unspecified, the height is `determined by the range step, paddings, and the cardinality of the field mapped to y-channel `__. Otherwise, if the ``rangeStep`` is ``null``, the height will be the value of `config.view.height `__. * If no field is mapped to ``y`` channel, the ``height`` will be the value of ``rangeStep``. **Note** : For plots with `row and column channels `__, this represents the height of a single view. **See also:** The documentation for `width and height `__ contains more examples. name : string Name of the visualization for later reference. projection : :class:`Projection` An object defining properties of the geographic projection shared by underlying layers. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. title : anyOf(string, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. view : :class:`ViewBackground` An object defining the view background's fill and stroke. **Default value:** none (transparent) width : float The width of a visualization. **Default value:** This will be determined by the following rules: * If a view's `autosize `__ type is ``"fit"`` or its x-channel has a `continuous scale `__, the width will be the value of `config.view.width `__. * For x-axis with a band or point scale: if `rangeStep `__ is a numeric value or unspecified, the width is `determined by the range step, paddings, and the cardinality of the field mapped to x-channel `__. Otherwise, if the ``rangeStep`` is ``null``, the width will be the value of `config.view.width `__. * If no field is mapped to ``x`` channel, the ``width`` will be the value of `config.scale.textXRangeStep `__ for ``text`` mark and the value of ``rangeStep`` for other marks. **Note:** For plots with `row and column channels `__, this represents the width of a single view. **See also:** The documentation for `width and height `__ contains more examples. """ _schema = {'$ref': '#/definitions/LayerSpec'} def __init__(self, layer=Undefined, data=Undefined, description=Undefined, encoding=Undefined, height=Undefined, name=Undefined, projection=Undefined, resolve=Undefined, title=Undefined, transform=Undefined, view=Undefined, width=Undefined, **kwds): super(LayerSpec, self).__init__(layer=layer, data=data, description=description, encoding=encoding, height=height, name=name, projection=projection, resolve=resolve, title=title, transform=transform, view=view, width=width, **kwds) class RepeatSpec(Spec): """RepeatSpec schema wrapper Mapping(required=[repeat, spec]) Base interface for a repeat specification. Attributes ---------- repeat : anyOf(List(string), :class:`RepeatMapping`) Definition for fields to be repeated. One of: 1) An array of fields to be repeated. If ``"repeat"`` is an array, the field can be referred using ``{"repeat": "repeat"}`` 2) An object that mapped ``"row"`` and/or ``"column"`` to the listed of fields to be repeated along the particular orientations. The objects ``{"repeat": "row"}`` and ``{"repeat": "column"}`` can be used to refer to the repeated field respectively. spec : :class:`Spec` A specification of the view that gets repeated. align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`) The alignment to apply to grid rows and columns. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. Alternatively, an object value of the form ``{"row": string, "column": string}`` can be used to supply different alignments for rows and columns. **Default value:** ``"all"``. bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : anyOf(boolean, :class:`RowColboolean`) Boolean flag indicating if subviews should be centered relative to their respective rows or columns. An object value of the form ``{"row": boolean, "column": boolean}`` can be used to supply different centering values for rows and columns. **Default value:** ``false`` columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : anyOf(float, :class:`RowColnumber`) The spacing in pixels between sub-views of the composition operator. An object of the form ``{"row": number, "column": number}`` can be used to set different spacing values for rows and columns. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) title : anyOf(string, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. """ _schema = {'$ref': '#/definitions/RepeatSpec'} def __init__(self, repeat=Undefined, spec=Undefined, align=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, data=Undefined, description=Undefined, name=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, **kwds): super(RepeatSpec, self).__init__(repeat=repeat, spec=spec, align=align, bounds=bounds, center=center, columns=columns, data=data, description=description, name=name, resolve=resolve, spacing=spacing, title=title, transform=transform, **kwds) class SphereGenerator(Generator): """SphereGenerator schema wrapper Mapping(required=[sphere]) Attributes ---------- sphere : anyOf(enum(True), Mapping(required=[])) Generate sphere GeoJSON data for the full globe. name : string Provide a placeholder name and bind data at runtime. """ _schema = {'$ref': '#/definitions/SphereGenerator'} def __init__(self, sphere=Undefined, name=Undefined, **kwds): super(SphereGenerator, self).__init__(sphere=sphere, name=name, **kwds) class StackOffset(VegaLiteSchema): """StackOffset schema wrapper enum('zero', 'center', 'normalize') """ _schema = {'$ref': '#/definitions/StackOffset'} def __init__(self, *args): super(StackOffset, self).__init__(*args) class StandardType(VegaLiteSchema): """StandardType schema wrapper enum('quantitative', 'ordinal', 'temporal', 'nominal') """ _schema = {'$ref': '#/definitions/StandardType'} def __init__(self, *args): super(StandardType, self).__init__(*args) class StringFieldDefWithCondition(VegaLiteSchema): """StringFieldDefWithCondition schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/StringFieldDefWithCondition'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(StringFieldDefWithCondition, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class StringFieldDefWithConditionTypeForShape(VegaLiteSchema): """StringFieldDefWithConditionTypeForShape schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`TypeForShape` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in Javascript. * `A sort-by-encoding definition `__ for sorting by another encoding channel. (This type of sort definition is not available for ``row`` and ``column`` channels.) * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/StringFieldDefWithCondition'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(StringFieldDefWithConditionTypeForShape, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class StringValueDefWithCondition(VegaLiteSchema): """StringValueDefWithCondition schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/StringValueDefWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(StringValueDefWithCondition, self).__init__(condition=condition, value=value, **kwds) class StringValueDefWithConditionTypeForShape(VegaLiteSchema): """StringValueDefWithConditionTypeForShape schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDefTypeForShape`, :class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/StringValueDefWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(StringValueDefWithConditionTypeForShape, self).__init__(condition=condition, value=value, **kwds) class StrokeCap(VegaLiteSchema): """StrokeCap schema wrapper enum('butt', 'round', 'square') """ _schema = {'$ref': '#/definitions/StrokeCap'} def __init__(self, *args): super(StrokeCap, self).__init__(*args) class StrokeJoin(VegaLiteSchema): """StrokeJoin schema wrapper enum('miter', 'round', 'bevel') """ _schema = {'$ref': '#/definitions/StrokeJoin'} def __init__(self, *args): super(StrokeJoin, self).__init__(*args) class StyleConfigIndex(VegaLiteSchema): """StyleConfigIndex schema wrapper Mapping(required=[]) """ _schema = {'$ref': '#/definitions/StyleConfigIndex'} def __init__(self, **kwds): super(StyleConfigIndex, self).__init__(**kwds) class SymbolShape(VegaLiteSchema): """SymbolShape schema wrapper string """ _schema = {'$ref': '#/definitions/SymbolShape'} def __init__(self, *args): super(SymbolShape, self).__init__(*args) class TextBaseline(VegaLiteSchema): """TextBaseline schema wrapper anyOf(enum('alphabetic'), :class:`Baseline`) """ _schema = {'$ref': '#/definitions/TextBaseline'} def __init__(self, *args, **kwds): super(TextBaseline, self).__init__(*args, **kwds) class Baseline(TextBaseline): """Baseline schema wrapper enum('top', 'middle', 'bottom') """ _schema = {'$ref': '#/definitions/Baseline'} def __init__(self, *args): super(Baseline, self).__init__(*args) class TextConfig(VegaLiteSchema): """TextConfig schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` The horizontal alignment of the text. One of ``"left"``, ``"right"``, ``"center"``. angle : float The rotation angle of the text, in degrees. baseline : :class:`TextBaseline` The vertical alignment of the text. One of ``"top"``, ``"middle"``, ``"bottom"``. **Default value:** ``"middle"`` color : :class:`Color` Default color. Note that ``fill`` and ``stroke`` have higher precedence than ``color`` and will override ``color``. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** This property cannot be used in a `style config `__. cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the mark. Any valid `CSS cursor type `__ can be used. dir : :class:`Dir` The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"`` (right-to-left). This property determines on which side is truncated in response to the limit parameter. **Default value:** ``"ltr"`` dx : float The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. dy : float The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. ellipsis : string The ellipsis string for text truncated in response to the limit parameter. **Default value:** ``"…"`` fill : :class:`Color` Default Fill Color. This has higher precedence than ``config.color`` **Default value:** (None) fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` filled : boolean Whether the mark's color should be used as fill color instead of stroke color. **Default value:** ``false`` for ``point``, ``line`` and ``rule`` ; otherwise, ``true``. **Note:** This property cannot be used in a `style config `__. font : string The typeface to set the text in (e.g., ``"Helvetica Neue"`` ). fontSize : float The font size, in pixels. fontStyle : :class:`FontStyle` The font style (e.g., ``"italic"`` ). fontWeight : :class:`FontWeight` The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). height : float Height of the marks. href : string A URL to load upon mouse click. If defined, the mark acts as a hyperlink. interpolate : :class:`Interpolate` The line interpolation method to use for line and area marks. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : alternate between horizontal and vertical segments, as in a step function. * ``"step-before"`` : alternate between vertical and horizontal segments, as in a step function. * ``"step-after"`` : alternate between horizontal and vertical segments, as in a step function. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. limit : float The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0``, indicating no limit opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. order : anyOf(None, boolean) For line and trail marks, this ``order`` property can be set to ``null`` or ``false`` to make the lines use the original order in the data sources. orient : :class:`Orientation` The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. * For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. * For area, this property determines the orient property of the Vega output. * For line and trail marks, this property determines the sort order of the points in the line if ``config.sortLineBy`` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored. radius : float Polar coordinate radial offset, in pixels, of the text label from the origin determined by the ``x`` and ``y`` properties. shape : string Shape of the point marks. Supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) **Default value:** ``"circle"`` shortTimeLabels : boolean Whether month names and weekday names should be abbreviated. size : float Default size for marks. * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value. * For ``bar``, this represents the band size of the bar, in pixels. * For ``text``, this represents the font size, in pixels. **Default value:** ``30`` for point, circle, square marks; ``rangeStep`` - 1 for bar marks with discrete dimensions; ``5`` for bar marks with continuous dimensions; ``11`` for text marks. stroke : :class:`Color` Default Stroke Color. This has higher precedence than ``config.color`` **Default value:** (None) strokeCap : :class:`StrokeCap` The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"square"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : :class:`StrokeJoin` The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. tension : float Depending on the interpolation type, sets the tension parameter (for line and area marks). text : string Placeholder text if the ``text`` channel is not specified theta : float Polar coordinate angle, in radians, of the text label from the origin determined by the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in radians, with ``0`` indicating "north". tooltip : anyOf(:class:`Value`, :class:`TooltipContent`, None) The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from. * If ``tooltip`` is ``{"content": "encoding"}``, then all fields from ``encoding`` will be used. * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the highlighted data point will be used. * If set to ``null``, then no tooltip will be used. width : float Width of the marks. x : anyOf(float, enum('width')) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(float, enum('width')) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. y : anyOf(float, enum('height')) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(float, enum('width')) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. """ _schema = {'$ref': '#/definitions/TextConfig'} def __init__(self, align=Undefined, angle=Undefined, baseline=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, radius=Undefined, shape=Undefined, shortTimeLabels=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined, y2=Undefined, **kwds): super(TextConfig, self).__init__(align=align, angle=angle, baseline=baseline, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, opacity=opacity, order=order, orient=orient, radius=radius, shape=shape, shortTimeLabels=shortTimeLabels, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, tension=tension, text=text, theta=theta, tooltip=tooltip, width=width, x=x, x2=x2, y=y, y2=y2, **kwds) class TextFieldDef(VegaLiteSchema): """TextFieldDef schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : string The text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : enum('number', 'time') The format type for labels ( ``"number"`` or ``"time"`` ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/TextFieldDef'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(TextFieldDef, self).__init__(type=type, aggregate=aggregate, bin=bin, field=field, format=format, formatType=formatType, timeUnit=timeUnit, title=title, **kwds) class TextFieldDefWithCondition(VegaLiteSchema): """TextFieldDefWithCondition schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : anyOf(:class:`ConditionalValueDef`, List(:class:`ConditionalValueDef`)) One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : string The text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : enum('number', 'time') The format type for labels ( ``"number"`` or ``"time"`` ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/TextFieldDefWithCondition'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(TextFieldDefWithCondition, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, format=format, formatType=formatType, timeUnit=timeUnit, title=title, **kwds) class TextValueDefWithCondition(VegaLiteSchema): """TextValueDefWithCondition schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalTextFieldDef`, :class:`ConditionalValueDef`, List(:class:`ConditionalValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : :class:`Value` A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/TextValueDefWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(TextValueDefWithCondition, self).__init__(condition=condition, value=value, **kwds) class TickConfig(VegaLiteSchema): """TickConfig schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` The horizontal alignment of the text. One of ``"left"``, ``"right"``, ``"center"``. angle : float The rotation angle of the text, in degrees. bandSize : float The width of the ticks. **Default value:** 3/4 of rangeStep. baseline : :class:`TextBaseline` The vertical alignment of the text. One of ``"top"``, ``"middle"``, ``"bottom"``. **Default value:** ``"middle"`` color : :class:`Color` Default color. Note that ``fill`` and ``stroke`` have higher precedence than ``color`` and will override ``color``. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** This property cannot be used in a `style config `__. cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the mark. Any valid `CSS cursor type `__ can be used. dir : :class:`Dir` The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"`` (right-to-left). This property determines on which side is truncated in response to the limit parameter. **Default value:** ``"ltr"`` dx : float The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. dy : float The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. ellipsis : string The ellipsis string for text truncated in response to the limit parameter. **Default value:** ``"…"`` fill : :class:`Color` Default Fill Color. This has higher precedence than ``config.color`` **Default value:** (None) fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` filled : boolean Whether the mark's color should be used as fill color instead of stroke color. **Default value:** ``false`` for ``point``, ``line`` and ``rule`` ; otherwise, ``true``. **Note:** This property cannot be used in a `style config `__. font : string The typeface to set the text in (e.g., ``"Helvetica Neue"`` ). fontSize : float The font size, in pixels. fontStyle : :class:`FontStyle` The font style (e.g., ``"italic"`` ). fontWeight : :class:`FontWeight` The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). height : float Height of the marks. href : string A URL to load upon mouse click. If defined, the mark acts as a hyperlink. interpolate : :class:`Interpolate` The line interpolation method to use for line and area marks. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : alternate between horizontal and vertical segments, as in a step function. * ``"step-before"`` : alternate between vertical and horizontal segments, as in a step function. * ``"step-after"`` : alternate between horizontal and vertical segments, as in a step function. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. limit : float The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0``, indicating no limit opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. order : anyOf(None, boolean) For line and trail marks, this ``order`` property can be set to ``null`` or ``false`` to make the lines use the original order in the data sources. orient : :class:`Orientation` The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. * For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. * For area, this property determines the orient property of the Vega output. * For line and trail marks, this property determines the sort order of the points in the line if ``config.sortLineBy`` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored. radius : float Polar coordinate radial offset, in pixels, of the text label from the origin determined by the ``x`` and ``y`` properties. shape : string Shape of the point marks. Supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) **Default value:** ``"circle"`` size : float Default size for marks. * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value. * For ``bar``, this represents the band size of the bar, in pixels. * For ``text``, this represents the font size, in pixels. **Default value:** ``30`` for point, circle, square marks; ``rangeStep`` - 1 for bar marks with discrete dimensions; ``5`` for bar marks with continuous dimensions; ``11`` for text marks. stroke : :class:`Color` Default Stroke Color. This has higher precedence than ``config.color`` **Default value:** (None) strokeCap : :class:`StrokeCap` The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"square"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : :class:`StrokeJoin` The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. tension : float Depending on the interpolation type, sets the tension parameter (for line and area marks). text : string Placeholder text if the ``text`` channel is not specified theta : float Polar coordinate angle, in radians, of the text label from the origin determined by the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in radians, with ``0`` indicating "north". thickness : float Thickness of the tick mark. **Default value:** ``1`` tooltip : anyOf(:class:`Value`, :class:`TooltipContent`, None) The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from. * If ``tooltip`` is ``{"content": "encoding"}``, then all fields from ``encoding`` will be used. * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the highlighted data point will be used. * If set to ``null``, then no tooltip will be used. width : float Width of the marks. x : anyOf(float, enum('width')) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(float, enum('width')) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. y : anyOf(float, enum('height')) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(float, enum('width')) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. """ _schema = {'$ref': '#/definitions/TickConfig'} def __init__(self, align=Undefined, angle=Undefined, bandSize=Undefined, baseline=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined, y2=Undefined, **kwds): super(TickConfig, self).__init__(align=align, angle=angle, bandSize=bandSize, baseline=baseline, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, opacity=opacity, order=order, orient=orient, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, tension=tension, text=text, theta=theta, thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, y=y, y2=y2, **kwds) class TimeUnit(VegaLiteSchema): """TimeUnit schema wrapper anyOf(:class:`SingleTimeUnit`, :class:`MultiTimeUnit`) """ _schema = {'$ref': '#/definitions/TimeUnit'} def __init__(self, *args, **kwds): super(TimeUnit, self).__init__(*args, **kwds) class MultiTimeUnit(TimeUnit): """MultiTimeUnit schema wrapper anyOf(:class:`LocalMultiTimeUnit`, :class:`UtcMultiTimeUnit`) """ _schema = {'$ref': '#/definitions/MultiTimeUnit'} def __init__(self, *args, **kwds): super(MultiTimeUnit, self).__init__(*args, **kwds) class LocalMultiTimeUnit(MultiTimeUnit): """LocalMultiTimeUnit schema wrapper enum('yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'quartermonth', 'monthdate', 'monthdatehours', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds') """ _schema = {'$ref': '#/definitions/LocalMultiTimeUnit'} def __init__(self, *args): super(LocalMultiTimeUnit, self).__init__(*args) class SingleTimeUnit(TimeUnit): """SingleTimeUnit schema wrapper anyOf(:class:`LocalSingleTimeUnit`, :class:`UtcSingleTimeUnit`) """ _schema = {'$ref': '#/definitions/SingleTimeUnit'} def __init__(self, *args, **kwds): super(SingleTimeUnit, self).__init__(*args, **kwds) class LocalSingleTimeUnit(SingleTimeUnit): """LocalSingleTimeUnit schema wrapper enum('year', 'quarter', 'month', 'day', 'date', 'hours', 'minutes', 'seconds', 'milliseconds') """ _schema = {'$ref': '#/definitions/LocalSingleTimeUnit'} def __init__(self, *args): super(LocalSingleTimeUnit, self).__init__(*args) class TitleAnchor(VegaLiteSchema): """TitleAnchor schema wrapper enum(None, 'start', 'middle', 'end') """ _schema = {'$ref': '#/definitions/TitleAnchor'} def __init__(self, *args): super(TitleAnchor, self).__init__(*args) class TitleConfig(VegaLiteSchema): """TitleConfig schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` anchor : :class:`TitleAnchor` The anchor position for placing the title. One of ``"start"``, ``"middle"``, or ``"end"``. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title. angle : float Angle in degrees of title text. baseline : :class:`TextBaseline` Vertical text baseline for title text. One of ``"top"``, ``"middle"``, ``"bottom"``, or ``"alphabetic"``. color : :class:`Color` Text color for title text. dx : float Delta offset for title text x-coordinate. dy : float Delta offset for title text y-coordinate. font : string Font name for title text. fontSize : float Font size in pixels for title text. **Default value:** ``10``. fontStyle : :class:`FontStyle` Font style for title text. fontWeight : :class:`FontWeight` Font weight for title text. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). frame : :class:`TitleFrame` The reference frame for the anchor position, one of ``"bounds"`` (to anchor relative to the full bounding box) or ``"group"`` (to anchor relative to the group width or height). limit : float The maximum allowed length in pixels of legend labels. offset : float The orthogonal offset in pixels by which to displace the title from its position along the edge of the chart. orient : :class:`TitleOrient` Default title orientation ( ``"top"``, ``"bottom"``, ``"left"``, or ``"right"`` ) """ _schema = {'$ref': '#/definitions/TitleConfig'} def __init__(self, align=Undefined, anchor=Undefined, angle=Undefined, baseline=Undefined, color=Undefined, dx=Undefined, dy=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, frame=Undefined, limit=Undefined, offset=Undefined, orient=Undefined, **kwds): super(TitleConfig, self).__init__(align=align, anchor=anchor, angle=angle, baseline=baseline, color=color, dx=dx, dy=dy, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, frame=frame, limit=limit, offset=offset, orient=orient, **kwds) class TitleFrame(VegaLiteSchema): """TitleFrame schema wrapper enum('bounds', 'group') """ _schema = {'$ref': '#/definitions/TitleFrame'} def __init__(self, *args): super(TitleFrame, self).__init__(*args) class TitleOrient(VegaLiteSchema): """TitleOrient schema wrapper enum('none', 'left', 'right', 'top', 'bottom') """ _schema = {'$ref': '#/definitions/TitleOrient'} def __init__(self, *args): super(TitleOrient, self).__init__(*args) class TitleParams(VegaLiteSchema): """TitleParams schema wrapper Mapping(required=[text]) Attributes ---------- text : string The title text. align : :class:`Align` anchor : :class:`TitleAnchor` The anchor position for placing the title. One of ``"start"``, ``"middle"``, or ``"end"``. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title. **Default value:** ``"middle"`` for `single `__ and `layered `__ views. ``"start"`` for other composite views. **Note:** `For now `__, ``anchor`` is only customizable only for `single `__ and `layered `__ views. For other composite views, ``anchor`` is always ``"start"``. angle : float Angle in degrees of title text. baseline : :class:`TextBaseline` Vertical text baseline for title text. One of ``"top"``, ``"middle"``, ``"bottom"``, or ``"alphabetic"``. color : :class:`Color` Text color for title text. dx : float Delta offset for title text x-coordinate. dy : float Delta offset for title text y-coordinate. font : string Font name for title text. fontSize : float Font size in pixels for title text. **Default value:** ``10``. fontStyle : :class:`FontStyle` Font style for title text. fontWeight : :class:`FontWeight` Font weight for title text. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). frame : :class:`TitleFrame` The reference frame for the anchor position, one of ``"bounds"`` (to anchor relative to the full bounding box) or ``"group"`` (to anchor relative to the group width or height). limit : float The maximum allowed length in pixels of legend labels. offset : float The orthogonal offset in pixels by which to displace the title from its position along the edge of the chart. orient : :class:`TitleOrient` Default title orientation ( ``"top"``, ``"bottom"``, ``"left"``, or ``"right"`` ) style : anyOf(string, List(string)) A `mark style property `__ to apply to the title text mark. **Default value:** ``"group-title"``. zindex : float The integer z-index indicating the layering of the title group relative to other axis, mark and legend groups. **Default value:** ``0``. """ _schema = {'$ref': '#/definitions/TitleParams'} def __init__(self, text=Undefined, align=Undefined, anchor=Undefined, angle=Undefined, baseline=Undefined, color=Undefined, dx=Undefined, dy=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, frame=Undefined, limit=Undefined, offset=Undefined, orient=Undefined, style=Undefined, zindex=Undefined, **kwds): super(TitleParams, self).__init__(text=text, align=align, anchor=anchor, angle=angle, baseline=baseline, color=color, dx=dx, dy=dy, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, frame=frame, limit=limit, offset=offset, orient=orient, style=style, zindex=zindex, **kwds) class TooltipContent(VegaLiteSchema): """TooltipContent schema wrapper Mapping(required=[content]) Attributes ---------- content : enum('encoding', 'data') """ _schema = {'$ref': '#/definitions/TooltipContent'} def __init__(self, content=Undefined, **kwds): super(TooltipContent, self).__init__(content=content, **kwds) class TopLevelSpec(VegaLiteSchema): """TopLevelSpec schema wrapper anyOf(:class:`TopLevelUnitSpec`, :class:`TopLevelFacetSpec`, :class:`TopLevelLayerSpec`, :class:`TopLevelRepeatSpec`, :class:`TopLevelConcatSpec`, :class:`TopLevelVConcatSpec`, :class:`TopLevelHConcatSpec`) A Vega-Lite top-level specification. This is the root class for all Vega-Lite specifications. (The json schema is generated from this type.) """ _schema = {'$ref': '#/definitions/TopLevelSpec'} def __init__(self, *args, **kwds): super(TopLevelSpec, self).__init__(*args, **kwds) class TopLevelConcatSpec(TopLevelSpec): """TopLevelConcatSpec schema wrapper Mapping(required=[concat]) Attributes ---------- concat : List(:class:`Spec`) A list of views to be concatenated. align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`) The alignment to apply to grid rows and columns. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. Alternatively, an object value of the form ``{"row": string, "column": string}`` can be used to supply different alignments for rows and columns. **Default value:** ``"all"``. autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`) Sets how the visualization size should be determined. If a string, should be one of ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify parameters for content sizing and automatic resizing. ``"fit"`` is only supported for single and layered views that don't use ``rangeStep``. **Default value** : ``pad`` background : string CSS color property to use as the background of the entire view. **Default value:** none (transparent) bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : anyOf(boolean, :class:`RowColboolean`) Boolean flag indicating if subviews should be centered relative to their respective rows or columns. An object value of the form ``{"row": boolean, "column": boolean}`` can be used to supply different centering values for rows and columns. **Default value:** ``false`` columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). config : :class:`Config` Vega-Lite configuration object. This property can only be defined at the top-level of a specification. data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. datasets : :class:`Datasets` A global data store for named datasets. This is a mapping from names to inline datasets. This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a ``data`` property. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. padding : :class:`Padding` The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5, "bottom": 5}`` to specify padding for each side of the visualization. **Default value** : ``5`` resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : anyOf(float, :class:`RowColnumber`) The spacing in pixels between sub-views of the composition operator. An object of the form ``{"row": number, "column": number}`` can be used to set different spacing values for rows and columns. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) title : anyOf(string, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. usermeta : Mapping(required=[]) Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata. $schema : string URL to `JSON schema `__ for a Vega-Lite specification. Unless you have a reason to change this, use ``https://vega.github.io/schema/vega-lite/v3.json``. Setting the ``$schema`` property allows automatic validation and autocomplete in editors that support JSON schema. """ _schema = {'$ref': '#/definitions/TopLevelConcatSpec'} def __init__(self, concat=Undefined, align=Undefined, autosize=Undefined, background=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, config=Undefined, data=Undefined, datasets=Undefined, description=Undefined, name=Undefined, padding=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, **kwds): super(TopLevelConcatSpec, self).__init__(concat=concat, align=align, autosize=autosize, background=background, bounds=bounds, center=center, columns=columns, config=config, data=data, datasets=datasets, description=description, name=name, padding=padding, resolve=resolve, spacing=spacing, title=title, transform=transform, usermeta=usermeta, **kwds) class TopLevelFacetSpec(TopLevelSpec): """TopLevelFacetSpec schema wrapper Mapping(required=[data, facet, spec]) Attributes ---------- data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. facet : anyOf(:class:`FacetFieldDef`, :class:`FacetMapping`) Definition for how to facet the data. One of: 1) `a field definition for faceting the plot by one field `__ 2) `An object that maps row and column channels to their field definitions `__ spec : anyOf(:class:`LayerSpec`, :class:`FacetedUnitSpec`) A specification of the view that gets faceted. align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`) The alignment to apply to grid rows and columns. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. Alternatively, an object value of the form ``{"row": string, "column": string}`` can be used to supply different alignments for rows and columns. **Default value:** ``"all"``. autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`) Sets how the visualization size should be determined. If a string, should be one of ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify parameters for content sizing and automatic resizing. ``"fit"`` is only supported for single and layered views that don't use ``rangeStep``. **Default value** : ``pad`` background : string CSS color property to use as the background of the entire view. **Default value:** none (transparent) bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : anyOf(boolean, :class:`RowColboolean`) Boolean flag indicating if subviews should be centered relative to their respective rows or columns. An object value of the form ``{"row": boolean, "column": boolean}`` can be used to supply different centering values for rows and columns. **Default value:** ``false`` columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). config : :class:`Config` Vega-Lite configuration object. This property can only be defined at the top-level of a specification. datasets : :class:`Datasets` A global data store for named datasets. This is a mapping from names to inline datasets. This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a ``data`` property. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. padding : :class:`Padding` The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5, "bottom": 5}`` to specify padding for each side of the visualization. **Default value** : ``5`` resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : anyOf(float, :class:`RowColnumber`) The spacing in pixels between sub-views of the composition operator. An object of the form ``{"row": number, "column": number}`` can be used to set different spacing values for rows and columns. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) title : anyOf(string, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. usermeta : Mapping(required=[]) Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata. $schema : string URL to `JSON schema `__ for a Vega-Lite specification. Unless you have a reason to change this, use ``https://vega.github.io/schema/vega-lite/v3.json``. Setting the ``$schema`` property allows automatic validation and autocomplete in editors that support JSON schema. """ _schema = {'$ref': '#/definitions/TopLevelFacetSpec'} def __init__(self, data=Undefined, facet=Undefined, spec=Undefined, align=Undefined, autosize=Undefined, background=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, config=Undefined, datasets=Undefined, description=Undefined, name=Undefined, padding=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, **kwds): super(TopLevelFacetSpec, self).__init__(data=data, facet=facet, spec=spec, align=align, autosize=autosize, background=background, bounds=bounds, center=center, columns=columns, config=config, datasets=datasets, description=description, name=name, padding=padding, resolve=resolve, spacing=spacing, title=title, transform=transform, usermeta=usermeta, **kwds) class TopLevelHConcatSpec(TopLevelSpec): """TopLevelHConcatSpec schema wrapper Mapping(required=[hconcat]) Attributes ---------- hconcat : List(:class:`Spec`) A list of views to be concatenated and put into a row. autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`) Sets how the visualization size should be determined. If a string, should be one of ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify parameters for content sizing and automatic resizing. ``"fit"`` is only supported for single and layered views that don't use ``rangeStep``. **Default value** : ``pad`` background : string CSS color property to use as the background of the entire view. **Default value:** none (transparent) bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : boolean Boolean flag indicating if subviews should be centered relative to their respective rows or columns. **Default value:** ``false`` config : :class:`Config` Vega-Lite configuration object. This property can only be defined at the top-level of a specification. data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. datasets : :class:`Datasets` A global data store for named datasets. This is a mapping from names to inline datasets. This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a ``data`` property. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. padding : :class:`Padding` The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5, "bottom": 5}`` to specify padding for each side of the visualization. **Default value** : ``5`` resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : float The spacing in pixels between sub-views of the concat operator. **Default value** : ``10`` title : anyOf(string, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. usermeta : Mapping(required=[]) Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata. $schema : string URL to `JSON schema `__ for a Vega-Lite specification. Unless you have a reason to change this, use ``https://vega.github.io/schema/vega-lite/v3.json``. Setting the ``$schema`` property allows automatic validation and autocomplete in editors that support JSON schema. """ _schema = {'$ref': '#/definitions/TopLevelHConcatSpec'} def __init__(self, hconcat=Undefined, autosize=Undefined, background=Undefined, bounds=Undefined, center=Undefined, config=Undefined, data=Undefined, datasets=Undefined, description=Undefined, name=Undefined, padding=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, **kwds): super(TopLevelHConcatSpec, self).__init__(hconcat=hconcat, autosize=autosize, background=background, bounds=bounds, center=center, config=config, data=data, datasets=datasets, description=description, name=name, padding=padding, resolve=resolve, spacing=spacing, title=title, transform=transform, usermeta=usermeta, **kwds) class TopLevelLayerSpec(TopLevelSpec): """TopLevelLayerSpec schema wrapper Mapping(required=[layer]) Attributes ---------- layer : List(anyOf(:class:`LayerSpec`, :class:`UnitSpec`)) Layer or single view specifications to be layered. **Note** : Specifications inside ``layer`` cannot use ``row`` and ``column`` channels as layering facet specifications is not allowed. Instead, use the `facet operator `__ and place a layer inside a facet. autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`) Sets how the visualization size should be determined. If a string, should be one of ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify parameters for content sizing and automatic resizing. ``"fit"`` is only supported for single and layered views that don't use ``rangeStep``. **Default value** : ``pad`` background : string CSS color property to use as the background of the entire view. **Default value:** none (transparent) config : :class:`Config` Vega-Lite configuration object. This property can only be defined at the top-level of a specification. data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. datasets : :class:`Datasets` A global data store for named datasets. This is a mapping from names to inline datasets. This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a ``data`` property. description : string Description of this mark for commenting purpose. encoding : :class:`Encoding` A shared key-value mapping between encoding channels and definition of fields in the underlying layers. height : float The height of a visualization. **Default value:** * If a view's `autosize `__ type is ``"fit"`` or its y-channel has a `continuous scale `__, the height will be the value of `config.view.height `__. * For y-axis with a band or point scale: if `rangeStep `__ is a numeric value or unspecified, the height is `determined by the range step, paddings, and the cardinality of the field mapped to y-channel `__. Otherwise, if the ``rangeStep`` is ``null``, the height will be the value of `config.view.height `__. * If no field is mapped to ``y`` channel, the ``height`` will be the value of ``rangeStep``. **Note** : For plots with `row and column channels `__, this represents the height of a single view. **See also:** The documentation for `width and height `__ contains more examples. name : string Name of the visualization for later reference. padding : :class:`Padding` The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5, "bottom": 5}`` to specify padding for each side of the visualization. **Default value** : ``5`` projection : :class:`Projection` An object defining properties of the geographic projection shared by underlying layers. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. title : anyOf(string, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. usermeta : Mapping(required=[]) Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata. view : :class:`ViewBackground` An object defining the view background's fill and stroke. **Default value:** none (transparent) width : float The width of a visualization. **Default value:** This will be determined by the following rules: * If a view's `autosize `__ type is ``"fit"`` or its x-channel has a `continuous scale `__, the width will be the value of `config.view.width `__. * For x-axis with a band or point scale: if `rangeStep `__ is a numeric value or unspecified, the width is `determined by the range step, paddings, and the cardinality of the field mapped to x-channel `__. Otherwise, if the ``rangeStep`` is ``null``, the width will be the value of `config.view.width `__. * If no field is mapped to ``x`` channel, the ``width`` will be the value of `config.scale.textXRangeStep `__ for ``text`` mark and the value of ``rangeStep`` for other marks. **Note:** For plots with `row and column channels `__, this represents the width of a single view. **See also:** The documentation for `width and height `__ contains more examples. $schema : string URL to `JSON schema `__ for a Vega-Lite specification. Unless you have a reason to change this, use ``https://vega.github.io/schema/vega-lite/v3.json``. Setting the ``$schema`` property allows automatic validation and autocomplete in editors that support JSON schema. """ _schema = {'$ref': '#/definitions/TopLevelLayerSpec'} def __init__(self, layer=Undefined, autosize=Undefined, background=Undefined, config=Undefined, data=Undefined, datasets=Undefined, description=Undefined, encoding=Undefined, height=Undefined, name=Undefined, padding=Undefined, projection=Undefined, resolve=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, view=Undefined, width=Undefined, **kwds): super(TopLevelLayerSpec, self).__init__(layer=layer, autosize=autosize, background=background, config=config, data=data, datasets=datasets, description=description, encoding=encoding, height=height, name=name, padding=padding, projection=projection, resolve=resolve, title=title, transform=transform, usermeta=usermeta, view=view, width=width, **kwds) class TopLevelRepeatSpec(TopLevelSpec): """TopLevelRepeatSpec schema wrapper Mapping(required=[repeat, spec]) Attributes ---------- repeat : anyOf(List(string), :class:`RepeatMapping`) Definition for fields to be repeated. One of: 1) An array of fields to be repeated. If ``"repeat"`` is an array, the field can be referred using ``{"repeat": "repeat"}`` 2) An object that mapped ``"row"`` and/or ``"column"`` to the listed of fields to be repeated along the particular orientations. The objects ``{"repeat": "row"}`` and ``{"repeat": "column"}`` can be used to refer to the repeated field respectively. spec : :class:`Spec` A specification of the view that gets repeated. align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`) The alignment to apply to grid rows and columns. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. Alternatively, an object value of the form ``{"row": string, "column": string}`` can be used to supply different alignments for rows and columns. **Default value:** ``"all"``. autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`) Sets how the visualization size should be determined. If a string, should be one of ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify parameters for content sizing and automatic resizing. ``"fit"`` is only supported for single and layered views that don't use ``rangeStep``. **Default value** : ``pad`` background : string CSS color property to use as the background of the entire view. **Default value:** none (transparent) bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : anyOf(boolean, :class:`RowColboolean`) Boolean flag indicating if subviews should be centered relative to their respective rows or columns. An object value of the form ``{"row": boolean, "column": boolean}`` can be used to supply different centering values for rows and columns. **Default value:** ``false`` columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). config : :class:`Config` Vega-Lite configuration object. This property can only be defined at the top-level of a specification. data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. datasets : :class:`Datasets` A global data store for named datasets. This is a mapping from names to inline datasets. This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a ``data`` property. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. padding : :class:`Padding` The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5, "bottom": 5}`` to specify padding for each side of the visualization. **Default value** : ``5`` resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : anyOf(float, :class:`RowColnumber`) The spacing in pixels between sub-views of the composition operator. An object of the form ``{"row": number, "column": number}`` can be used to set different spacing values for rows and columns. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) title : anyOf(string, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. usermeta : Mapping(required=[]) Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata. $schema : string URL to `JSON schema `__ for a Vega-Lite specification. Unless you have a reason to change this, use ``https://vega.github.io/schema/vega-lite/v3.json``. Setting the ``$schema`` property allows automatic validation and autocomplete in editors that support JSON schema. """ _schema = {'$ref': '#/definitions/TopLevelRepeatSpec'} def __init__(self, repeat=Undefined, spec=Undefined, align=Undefined, autosize=Undefined, background=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, config=Undefined, data=Undefined, datasets=Undefined, description=Undefined, name=Undefined, padding=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, **kwds): super(TopLevelRepeatSpec, self).__init__(repeat=repeat, spec=spec, align=align, autosize=autosize, background=background, bounds=bounds, center=center, columns=columns, config=config, data=data, datasets=datasets, description=description, name=name, padding=padding, resolve=resolve, spacing=spacing, title=title, transform=transform, usermeta=usermeta, **kwds) class TopLevelUnitSpec(TopLevelSpec): """TopLevelUnitSpec schema wrapper Mapping(required=[data, mark]) Attributes ---------- data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. mark : :class:`AnyMark` A string describing the mark type (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"rule"``, ``"geoshape"``, and ``"text"`` ) or a `mark definition object `__. align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`) The alignment to apply to grid rows and columns. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. Alternatively, an object value of the form ``{"row": string, "column": string}`` can be used to supply different alignments for rows and columns. **Default value:** ``"all"``. autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`) Sets how the visualization size should be determined. If a string, should be one of ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify parameters for content sizing and automatic resizing. ``"fit"`` is only supported for single and layered views that don't use ``rangeStep``. **Default value** : ``pad`` background : string CSS color property to use as the background of the entire view. **Default value:** none (transparent) bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : anyOf(boolean, :class:`RowColboolean`) Boolean flag indicating if subviews should be centered relative to their respective rows or columns. An object value of the form ``{"row": boolean, "column": boolean}`` can be used to supply different centering values for rows and columns. **Default value:** ``false`` columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). config : :class:`Config` Vega-Lite configuration object. This property can only be defined at the top-level of a specification. datasets : :class:`Datasets` A global data store for named datasets. This is a mapping from names to inline datasets. This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a ``data`` property. description : string Description of this mark for commenting purpose. encoding : :class:`FacetedEncoding` A key-value mapping between encoding channels and definition of fields. height : float The height of a visualization. **Default value:** * If a view's `autosize `__ type is ``"fit"`` or its y-channel has a `continuous scale `__, the height will be the value of `config.view.height `__. * For y-axis with a band or point scale: if `rangeStep `__ is a numeric value or unspecified, the height is `determined by the range step, paddings, and the cardinality of the field mapped to y-channel `__. Otherwise, if the ``rangeStep`` is ``null``, the height will be the value of `config.view.height `__. * If no field is mapped to ``y`` channel, the ``height`` will be the value of ``rangeStep``. **Note** : For plots with `row and column channels `__, this represents the height of a single view. **See also:** The documentation for `width and height `__ contains more examples. name : string Name of the visualization for later reference. padding : :class:`Padding` The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5, "bottom": 5}`` to specify padding for each side of the visualization. **Default value** : ``5`` projection : :class:`Projection` An object defining properties of geographic projection, which will be applied to ``shape`` path for ``"geoshape"`` marks and to ``latitude`` and ``"longitude"`` channels for other marks. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. selection : Mapping(required=[]) A key-value mapping between selection names and definitions. spacing : anyOf(float, :class:`RowColnumber`) The spacing in pixels between sub-views of the composition operator. An object of the form ``{"row": number, "column": number}`` can be used to set different spacing values for rows and columns. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) title : anyOf(string, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. usermeta : Mapping(required=[]) Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata. view : :class:`ViewBackground` An object defining the view background's fill and stroke. **Default value:** none (transparent) width : float The width of a visualization. **Default value:** This will be determined by the following rules: * If a view's `autosize `__ type is ``"fit"`` or its x-channel has a `continuous scale `__, the width will be the value of `config.view.width `__. * For x-axis with a band or point scale: if `rangeStep `__ is a numeric value or unspecified, the width is `determined by the range step, paddings, and the cardinality of the field mapped to x-channel `__. Otherwise, if the ``rangeStep`` is ``null``, the width will be the value of `config.view.width `__. * If no field is mapped to ``x`` channel, the ``width`` will be the value of `config.scale.textXRangeStep `__ for ``text`` mark and the value of ``rangeStep`` for other marks. **Note:** For plots with `row and column channels `__, this represents the width of a single view. **See also:** The documentation for `width and height `__ contains more examples. $schema : string URL to `JSON schema `__ for a Vega-Lite specification. Unless you have a reason to change this, use ``https://vega.github.io/schema/vega-lite/v3.json``. Setting the ``$schema`` property allows automatic validation and autocomplete in editors that support JSON schema. """ _schema = {'$ref': '#/definitions/TopLevelUnitSpec'} def __init__(self, data=Undefined, mark=Undefined, align=Undefined, autosize=Undefined, background=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, config=Undefined, datasets=Undefined, description=Undefined, encoding=Undefined, height=Undefined, name=Undefined, padding=Undefined, projection=Undefined, resolve=Undefined, selection=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, view=Undefined, width=Undefined, **kwds): super(TopLevelUnitSpec, self).__init__(data=data, mark=mark, align=align, autosize=autosize, background=background, bounds=bounds, center=center, columns=columns, config=config, datasets=datasets, description=description, encoding=encoding, height=height, name=name, padding=padding, projection=projection, resolve=resolve, selection=selection, spacing=spacing, title=title, transform=transform, usermeta=usermeta, view=view, width=width, **kwds) class TopLevelVConcatSpec(TopLevelSpec): """TopLevelVConcatSpec schema wrapper Mapping(required=[vconcat]) Attributes ---------- vconcat : List(:class:`Spec`) A list of views to be concatenated and put into a column. autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`) Sets how the visualization size should be determined. If a string, should be one of ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify parameters for content sizing and automatic resizing. ``"fit"`` is only supported for single and layered views that don't use ``rangeStep``. **Default value** : ``pad`` background : string CSS color property to use as the background of the entire view. **Default value:** none (transparent) bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : boolean Boolean flag indicating if subviews should be centered relative to their respective rows or columns. **Default value:** ``false`` config : :class:`Config` Vega-Lite configuration object. This property can only be defined at the top-level of a specification. data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. datasets : :class:`Datasets` A global data store for named datasets. This is a mapping from names to inline datasets. This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a ``data`` property. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. padding : :class:`Padding` The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5, "bottom": 5}`` to specify padding for each side of the visualization. **Default value** : ``5`` resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : float The spacing in pixels between sub-views of the concat operator. **Default value** : ``10`` title : anyOf(string, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. usermeta : Mapping(required=[]) Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata. $schema : string URL to `JSON schema `__ for a Vega-Lite specification. Unless you have a reason to change this, use ``https://vega.github.io/schema/vega-lite/v3.json``. Setting the ``$schema`` property allows automatic validation and autocomplete in editors that support JSON schema. """ _schema = {'$ref': '#/definitions/TopLevelVConcatSpec'} def __init__(self, vconcat=Undefined, autosize=Undefined, background=Undefined, bounds=Undefined, center=Undefined, config=Undefined, data=Undefined, datasets=Undefined, description=Undefined, name=Undefined, padding=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, **kwds): super(TopLevelVConcatSpec, self).__init__(vconcat=vconcat, autosize=autosize, background=background, bounds=bounds, center=center, config=config, data=data, datasets=datasets, description=description, name=name, padding=padding, resolve=resolve, spacing=spacing, title=title, transform=transform, usermeta=usermeta, **kwds) class TopoDataFormat(DataFormat): """TopoDataFormat schema wrapper Mapping(required=[]) Attributes ---------- feature : string The name of the TopoJSON object set to convert to a GeoJSON feature collection. For example, in a map of the world, there may be an object set named ``"countries"``. Using the feature property, we can extract this set and generate a GeoJSON feature object for each country. mesh : string The name of the TopoJSON object set to convert to mesh. Similar to the ``feature`` option, ``mesh`` extracts a named TopoJSON object set. Unlike the ``feature`` option, the corresponding geo data is returned as a single, unified mesh instance, not as individual GeoJSON features. Extracting a mesh is useful for more efficiently drawing borders or other geographic elements that you do not need to associate with specific regions such as individual countries, states or counties. parse : anyOf(:class:`Parse`, None) If set to ``null``, disable type inference based on the spec and only use type inference based on the data. Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of ``"number"``, ``"boolean"``, ``"date"``, or null (do not parse the field)). For example, ``"parse": {"modified_on": "date"}`` parses the ``modified_on`` field in each input record a Date value. For ``"date"``, we parse data based using Javascript's `Date.parse() `__. For Specific date formats can be provided (e.g., ``{foo: "date:'%m%d%Y'"}`` ), using the `d3-time-format syntax `__. UTC date format parsing is supported similarly (e.g., ``{foo: "utc:'%m%d%Y'"}`` ). See more about `UTC time `__ type : enum('topojson') Type of input data: ``"json"``, ``"csv"``, ``"tsv"``, ``"dsv"``. **Default value:** The default format type is determined by the extension of the file URL. If no extension is detected, ``"json"`` will be used by default. """ _schema = {'$ref': '#/definitions/TopoDataFormat'} def __init__(self, feature=Undefined, mesh=Undefined, parse=Undefined, type=Undefined, **kwds): super(TopoDataFormat, self).__init__(feature=feature, mesh=mesh, parse=parse, type=type, **kwds) class Transform(VegaLiteSchema): """Transform schema wrapper anyOf(:class:`AggregateTransform`, :class:`BinTransform`, :class:`CalculateTransform`, :class:`FilterTransform`, :class:`FlattenTransform`, :class:`FoldTransform`, :class:`ImputeTransform`, :class:`JoinAggregateTransform`, :class:`LookupTransform`, :class:`TimeUnitTransform`, :class:`SampleTransform`, :class:`StackTransform`, :class:`WindowTransform`) """ _schema = {'$ref': '#/definitions/Transform'} def __init__(self, *args, **kwds): super(Transform, self).__init__(*args, **kwds) class AggregateTransform(Transform): """AggregateTransform schema wrapper Mapping(required=[aggregate]) Attributes ---------- aggregate : List(:class:`AggregatedFieldDef`) Array of objects that define fields to aggregate. groupby : List(:class:`FieldName`) The data fields to group by. If not specified, a single group containing all data objects will be used. """ _schema = {'$ref': '#/definitions/AggregateTransform'} def __init__(self, aggregate=Undefined, groupby=Undefined, **kwds): super(AggregateTransform, self).__init__(aggregate=aggregate, groupby=groupby, **kwds) class BinTransform(Transform): """BinTransform schema wrapper Mapping(required=[bin, field, as]) Attributes ---------- bin : anyOf(enum(True), :class:`BinParams`) An object indicating bin properties, or simply ``true`` for using default bin parameters. field : :class:`FieldName` The data field to bin. as : anyOf(:class:`FieldName`, List(:class:`FieldName`)) The output fields at which to write the start and end bin values. """ _schema = {'$ref': '#/definitions/BinTransform'} def __init__(self, bin=Undefined, field=Undefined, **kwds): super(BinTransform, self).__init__(bin=bin, field=field, **kwds) class CalculateTransform(Transform): """CalculateTransform schema wrapper Mapping(required=[calculate, as]) Attributes ---------- calculate : string A `expression `__ string. Use the variable ``datum`` to refer to the current data object. as : :class:`FieldName` The field for storing the computed formula value. """ _schema = {'$ref': '#/definitions/CalculateTransform'} def __init__(self, calculate=Undefined, **kwds): super(CalculateTransform, self).__init__(calculate=calculate, **kwds) class FilterTransform(Transform): """FilterTransform schema wrapper Mapping(required=[filter]) Attributes ---------- filter : :class:`LogicalOperandPredicate` The ``filter`` property must be one of the predicate definitions: 1) an `expression `__ string, where ``datum`` can be used to refer to the current data object 2) one of the field predicates: `equal `__, `lt `__, `lte `__, `gt `__, `gte `__, `range `__, `oneOf `__, or `valid `__, 3) a `selection predicate `__ 4) a logical operand that combines (1), (2), or (3). """ _schema = {'$ref': '#/definitions/FilterTransform'} def __init__(self, filter=Undefined, **kwds): super(FilterTransform, self).__init__(filter=filter, **kwds) class FlattenTransform(Transform): """FlattenTransform schema wrapper Mapping(required=[flatten]) Attributes ---------- flatten : List(:class:`FieldName`) An array of one or more data fields containing arrays to flatten. If multiple fields are specified, their array values should have a parallel structure, ideally with the same length. If the lengths of parallel arrays do not match, the longest array will be used with ``null`` values added for missing entries. as : List(:class:`FieldName`) The output field names for extracted array values. **Default value:** The field name of the corresponding array field """ _schema = {'$ref': '#/definitions/FlattenTransform'} def __init__(self, flatten=Undefined, **kwds): super(FlattenTransform, self).__init__(flatten=flatten, **kwds) class FoldTransform(Transform): """FoldTransform schema wrapper Mapping(required=[fold]) Attributes ---------- fold : List(:class:`FieldName`) An array of data fields indicating the properties to fold. as : List([:class:`FieldName`, :class:`FieldName`]) The output field names for the key and value properties produced by the fold transform. **Default value:** ``["key", "value"]`` """ _schema = {'$ref': '#/definitions/FoldTransform'} def __init__(self, fold=Undefined, **kwds): super(FoldTransform, self).__init__(fold=fold, **kwds) class ImputeTransform(Transform): """ImputeTransform schema wrapper Mapping(required=[impute, key]) Attributes ---------- impute : :class:`FieldName` The data field for which the missing values should be imputed. key : :class:`FieldName` A key field that uniquely identifies data objects within a group. Missing key values (those occurring in the data but not in the current group) will be imputed. frame : List(anyOf(None, float)) A frame specification as a two-element array used to control the window over which the specified method is applied. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. For example, the value ``[-5, 5]`` indicates that the window should include five objects preceding and five objects following the current object. **Default value:** : ``[null, null]`` indicating that the window includes all objects. groupby : List(:class:`FieldName`) An optional array of fields by which to group the values. Imputation will then be performed on a per-group basis. keyvals : anyOf(List(Any), :class:`ImputeSequence`) Defines the key values that should be considered for imputation. An array of key values or an object defining a `number sequence `__. If provided, this will be used in addition to the key values observed within the input data. If not provided, the values will be derived from all unique values of the ``key`` field. For ``impute`` in ``encoding``, the key field is the x-field if the y-field is imputed, or vice versa. If there is no impute grouping, this property *must* be specified. method : :class:`ImputeMethod` The imputation method to use for the field value of imputed data objects. One of ``value``, ``mean``, ``median``, ``max`` or ``min``. **Default value:** ``"value"`` value : Any The field value to use when the imputation ``method`` is ``"value"``. """ _schema = {'$ref': '#/definitions/ImputeTransform'} def __init__(self, impute=Undefined, key=Undefined, frame=Undefined, groupby=Undefined, keyvals=Undefined, method=Undefined, value=Undefined, **kwds): super(ImputeTransform, self).__init__(impute=impute, key=key, frame=frame, groupby=groupby, keyvals=keyvals, method=method, value=value, **kwds) class JoinAggregateTransform(Transform): """JoinAggregateTransform schema wrapper Mapping(required=[joinaggregate]) Attributes ---------- joinaggregate : List(:class:`JoinAggregateFieldDef`) The definition of the fields in the join aggregate, and what calculations to use. groupby : List(:class:`FieldName`) The data fields for partitioning the data objects into separate groups. If unspecified, all data points will be in a single group. """ _schema = {'$ref': '#/definitions/JoinAggregateTransform'} def __init__(self, joinaggregate=Undefined, groupby=Undefined, **kwds): super(JoinAggregateTransform, self).__init__(joinaggregate=joinaggregate, groupby=groupby, **kwds) class LookupTransform(Transform): """LookupTransform schema wrapper Mapping(required=[lookup, from]) Attributes ---------- lookup : :class:`FieldName` Key in primary data source. default : string The default value to use if lookup fails. **Default value:** ``null`` as : anyOf(:class:`FieldName`, List(:class:`FieldName`)) The field or fields for storing the computed formula value. If ``from.fields`` is specified, the transform will use the same names for ``as``. If ``from.fields`` is not specified, ``as`` has to be a string and we put the whole object into the data under the specified name. from : :class:`LookupData` Secondary data reference. """ _schema = {'$ref': '#/definitions/LookupTransform'} def __init__(self, lookup=Undefined, default=Undefined, **kwds): super(LookupTransform, self).__init__(lookup=lookup, default=default, **kwds) class SampleTransform(Transform): """SampleTransform schema wrapper Mapping(required=[sample]) Attributes ---------- sample : float The maximum number of data objects to include in the sample. **Default value:** ``1000`` """ _schema = {'$ref': '#/definitions/SampleTransform'} def __init__(self, sample=Undefined, **kwds): super(SampleTransform, self).__init__(sample=sample, **kwds) class StackTransform(Transform): """StackTransform schema wrapper Mapping(required=[stack, groupby, as]) Attributes ---------- groupby : List(:class:`FieldName`) The data fields to group by. stack : :class:`FieldName` The field which is stacked. offset : enum('zero', 'center', 'normalize') Mode for stacking marks. **Default value:** ``"zero"`` sort : List(:class:`SortField`) Field that determines the order of leaves in the stacked charts. as : anyOf(:class:`FieldName`, List(:class:`FieldName`)) Output field names. This can be either a string or an array of strings with two elements denoting the name for the fields for stack start and stack end respectively. If a single string(eg."val") is provided, the end field will be "val_end". """ _schema = {'$ref': '#/definitions/StackTransform'} def __init__(self, groupby=Undefined, stack=Undefined, offset=Undefined, sort=Undefined, **kwds): super(StackTransform, self).__init__(groupby=groupby, stack=stack, offset=offset, sort=sort, **kwds) class TimeUnitTransform(Transform): """TimeUnitTransform schema wrapper Mapping(required=[timeUnit, field, as]) Attributes ---------- field : :class:`FieldName` The data field to apply time unit. timeUnit : :class:`TimeUnit` The timeUnit. as : :class:`FieldName` The output field to write the timeUnit value. """ _schema = {'$ref': '#/definitions/TimeUnitTransform'} def __init__(self, field=Undefined, timeUnit=Undefined, **kwds): super(TimeUnitTransform, self).__init__(field=field, timeUnit=timeUnit, **kwds) class TypeForShape(VegaLiteSchema): """TypeForShape schema wrapper enum('nominal', 'ordinal', 'geojson') """ _schema = {'$ref': '#/definitions/TypeForShape'} def __init__(self, *args): super(TypeForShape, self).__init__(*args) class TypedFieldDef(VegaLiteSchema): """TypedFieldDef schema wrapper Mapping(required=[type]) Definition object for a data field, its type and transformation of an encoding channel. Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types ( ``number``, ``string``, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : :class:`TimeUnit` Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(string, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/TypedFieldDef'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(TypedFieldDef, self).__init__(type=type, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class UnitSpec(VegaLiteSchema): """UnitSpec schema wrapper Mapping(required=[mark]) Base interface for a unit (single-view) specification. Attributes ---------- mark : :class:`AnyMark` A string describing the mark type (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"rule"``, ``"geoshape"``, and ``"text"`` ) or a `mark definition object `__. data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. encoding : :class:`Encoding` A key-value mapping between encoding channels and definition of fields. height : float The height of a visualization. **Default value:** * If a view's `autosize `__ type is ``"fit"`` or its y-channel has a `continuous scale `__, the height will be the value of `config.view.height `__. * For y-axis with a band or point scale: if `rangeStep `__ is a numeric value or unspecified, the height is `determined by the range step, paddings, and the cardinality of the field mapped to y-channel `__. Otherwise, if the ``rangeStep`` is ``null``, the height will be the value of `config.view.height `__. * If no field is mapped to ``y`` channel, the ``height`` will be the value of ``rangeStep``. **Note** : For plots with `row and column channels `__, this represents the height of a single view. **See also:** The documentation for `width and height `__ contains more examples. name : string Name of the visualization for later reference. projection : :class:`Projection` An object defining properties of geographic projection, which will be applied to ``shape`` path for ``"geoshape"`` marks and to ``latitude`` and ``"longitude"`` channels for other marks. selection : Mapping(required=[]) A key-value mapping between selection names and definitions. title : anyOf(string, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. view : :class:`ViewBackground` An object defining the view background's fill and stroke. **Default value:** none (transparent) width : float The width of a visualization. **Default value:** This will be determined by the following rules: * If a view's `autosize `__ type is ``"fit"`` or its x-channel has a `continuous scale `__, the width will be the value of `config.view.width `__. * For x-axis with a band or point scale: if `rangeStep `__ is a numeric value or unspecified, the width is `determined by the range step, paddings, and the cardinality of the field mapped to x-channel `__. Otherwise, if the ``rangeStep`` is ``null``, the width will be the value of `config.view.width `__. * If no field is mapped to ``x`` channel, the ``width`` will be the value of `config.scale.textXRangeStep `__ for ``text`` mark and the value of ``rangeStep`` for other marks. **Note:** For plots with `row and column channels `__, this represents the width of a single view. **See also:** The documentation for `width and height `__ contains more examples. """ _schema = {'$ref': '#/definitions/UnitSpec'} def __init__(self, mark=Undefined, data=Undefined, description=Undefined, encoding=Undefined, height=Undefined, name=Undefined, projection=Undefined, selection=Undefined, title=Undefined, transform=Undefined, view=Undefined, width=Undefined, **kwds): super(UnitSpec, self).__init__(mark=mark, data=data, description=description, encoding=encoding, height=height, name=name, projection=projection, selection=selection, title=title, transform=transform, view=view, width=width, **kwds) class UrlData(DataSource): """UrlData schema wrapper Mapping(required=[url]) Attributes ---------- url : string An URL from which to load the data set. Use the ``format.type`` property to ensure the loaded data is correctly parsed. format : :class:`DataFormat` An object that specifies the format for parsing the data. name : string Provide a placeholder name and bind data at runtime. """ _schema = {'$ref': '#/definitions/UrlData'} def __init__(self, url=Undefined, format=Undefined, name=Undefined, **kwds): super(UrlData, self).__init__(url=url, format=format, name=name, **kwds) class UtcMultiTimeUnit(MultiTimeUnit): """UtcMultiTimeUnit schema wrapper enum('utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds') """ _schema = {'$ref': '#/definitions/UtcMultiTimeUnit'} def __init__(self, *args): super(UtcMultiTimeUnit, self).__init__(*args) class UtcSingleTimeUnit(SingleTimeUnit): """UtcSingleTimeUnit schema wrapper enum('utcyear', 'utcquarter', 'utcmonth', 'utcday', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds') """ _schema = {'$ref': '#/definitions/UtcSingleTimeUnit'} def __init__(self, *args): super(UtcSingleTimeUnit, self).__init__(*args) class VConcatSpec(Spec): """VConcatSpec schema wrapper Mapping(required=[vconcat]) Base interface for a vertical concatenation specification. Attributes ---------- vconcat : List(:class:`Spec`) A list of views to be concatenated and put into a column. bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : boolean Boolean flag indicating if subviews should be centered relative to their respective rows or columns. **Default value:** ``false`` data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : float The spacing in pixels between sub-views of the concat operator. **Default value** : ``10`` title : anyOf(string, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. """ _schema = {'$ref': '#/definitions/VConcatSpec'} def __init__(self, vconcat=Undefined, bounds=Undefined, center=Undefined, data=Undefined, description=Undefined, name=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, **kwds): super(VConcatSpec, self).__init__(vconcat=vconcat, bounds=bounds, center=center, data=data, description=description, name=name, resolve=resolve, spacing=spacing, title=title, transform=transform, **kwds) class Value(VegaLiteSchema): """Value schema wrapper anyOf(float, string, boolean, None) """ _schema = {'$ref': '#/definitions/Value'} def __init__(self, *args): super(Value, self).__init__(*args) class ValueDefWithConditionMarkPropFieldDefTypeForShapestringnull(VegaLiteSchema): """ValueDefWithConditionMarkPropFieldDefTypeForShapestringnull schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDefTypeForShape`, :class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ValueDefWithCondition,(string|null)>'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ValueDefWithConditionMarkPropFieldDefTypeForShapestringnull, self).__init__(condition=condition, value=value, **kwds) class ValueDefWithConditionMarkPropFieldDefnumber(VegaLiteSchema): """ValueDefWithConditionMarkPropFieldDefnumber schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalNumberValueDef`, List(:class:`ConditionalNumberValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : float A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ValueDefWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ValueDefWithConditionMarkPropFieldDefnumber, self).__init__(condition=condition, value=value, **kwds) class ValueDefWithConditionMarkPropFieldDefstringnull(VegaLiteSchema): """ValueDefWithConditionMarkPropFieldDefstringnull schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ValueDefWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ValueDefWithConditionMarkPropFieldDefstringnull, self).__init__(condition=condition, value=value, **kwds) class ValueDefWithConditionTextFieldDefValue(VegaLiteSchema): """ValueDefWithConditionTextFieldDefValue schema wrapper Mapping(required=[]) A ValueDef with Condition where either the condition or the value are optional. Attributes ---------- condition : anyOf(:class:`ConditionalTextFieldDef`, :class:`ConditionalValueDef`, List(:class:`ConditionalValueDef`)) A field definition or one or more value definition(s) with a selection predicate. value : :class:`Value` A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ValueDefWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ValueDefWithConditionTextFieldDefValue, self).__init__(condition=condition, value=value, **kwds) class ViewBackground(VegaLiteSchema): """ViewBackground schema wrapper Mapping(required=[]) Attributes ---------- cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` fill : anyOf(:class:`Color`, None) The fill color. **Default value:** ``undefined`` fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. stroke : anyOf(:class:`Color`, None) The stroke color. **Default value:** ``"#ddd"`` strokeCap : :class:`StrokeCap` The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"square"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : :class:`StrokeJoin` The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. style : anyOf(string, List(string)) A string or array of strings indicating the name of custom styles to apply to the view background. A style is a named collection of mark property defaults defined within the `style configuration `__. If style is an array, later styles will override earlier styles. **Default value:** ``"cell"`` **Note:** Any specified view background properties will augment the default style. """ _schema = {'$ref': '#/definitions/ViewBackground'} def __init__(self, cornerRadius=Undefined, fill=Undefined, fillOpacity=Undefined, opacity=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, **kwds): super(ViewBackground, self).__init__(cornerRadius=cornerRadius, fill=fill, fillOpacity=fillOpacity, opacity=opacity, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, **kwds) class ViewConfig(VegaLiteSchema): """ViewConfig schema wrapper Mapping(required=[]) Attributes ---------- clip : boolean Whether the view should be clipped. cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` fill : anyOf(:class:`Color`, None) The fill color. **Default value:** ``undefined`` fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` height : float The default height of the single plot or each plot in a trellis plot when the visualization has a continuous (non-ordinal) y-scale with ``rangeStep`` = ``null``. **Default value:** ``200`` opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. stroke : anyOf(:class:`Color`, None) The stroke color. **Default value:** ``"#ddd"`` strokeCap : :class:`StrokeCap` The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"square"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : :class:`StrokeJoin` The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. width : float The default width of the single plot or each plot in a trellis plot when the visualization has a continuous (non-ordinal) x-scale or ordinal x-scale with ``rangeStep`` = ``null``. **Default value:** ``200`` """ _schema = {'$ref': '#/definitions/ViewConfig'} def __init__(self, clip=Undefined, cornerRadius=Undefined, fill=Undefined, fillOpacity=Undefined, height=Undefined, opacity=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, width=Undefined, **kwds): super(ViewConfig, self).__init__(clip=clip, cornerRadius=cornerRadius, fill=fill, fillOpacity=fillOpacity, height=height, opacity=opacity, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, width=width, **kwds) class WindowFieldDef(VegaLiteSchema): """WindowFieldDef schema wrapper Mapping(required=[op, as]) Attributes ---------- op : anyOf(:class:`AggregateOp`, :class:`WindowOnlyOp`) The window or aggregation operation to apply within a window (e.g., ``rank``, ``lead``, ``sum``, ``average`` or ``count`` ). See the list of all supported operations `here `__. field : :class:`FieldName` The data field for which to compute the aggregate or window function. This can be omitted for window functions that do not operate over a field such as ``count``, ``rank``, ``dense_rank``. param : float Parameter values for the window functions. Parameter values can be omitted for operations that do not accept a parameter. See the list of all supported operations and their parameters `here `__. as : :class:`FieldName` The output name for the window operation. """ _schema = {'$ref': '#/definitions/WindowFieldDef'} def __init__(self, op=Undefined, field=Undefined, param=Undefined, **kwds): super(WindowFieldDef, self).__init__(op=op, field=field, param=param, **kwds) class WindowOnlyOp(VegaLiteSchema): """WindowOnlyOp schema wrapper enum('row_number', 'rank', 'dense_rank', 'percent_rank', 'cume_dist', 'ntile', 'lag', 'lead', 'first_value', 'last_value', 'nth_value') """ _schema = {'$ref': '#/definitions/WindowOnlyOp'} def __init__(self, *args): super(WindowOnlyOp, self).__init__(*args) class WindowTransform(Transform): """WindowTransform schema wrapper Mapping(required=[window]) Attributes ---------- window : List(:class:`WindowFieldDef`) The definition of the fields in the window, and what calculations to use. frame : List(anyOf(None, float)) A frame specification as a two-element array indicating how the sliding window should proceed. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. The default value is ``[null, 0]``, indicating that the sliding window includes the current object and all preceding objects. The value ``[-5, 5]`` indicates that the window should include five objects preceding and five objects following the current object. Finally, ``[null, null]`` indicates that the window frame should always include all data objects. If you this frame and want to assign the same value to add objects, you can use the simpler `join aggregate transform `__. The only operators affected are the aggregation operations and the ``first_value``, ``last_value``, and ``nth_value`` window operations. The other window operations are not affected by this. **Default value:** : ``[null, 0]`` (includes the current object and all preceding objects) groupby : List(:class:`FieldName`) The data fields for partitioning the data objects into separate windows. If unspecified, all data points will be in a single window. ignorePeers : boolean Indicates if the sliding window frame should ignore peer values (data that are considered identical by the sort criteria). The default is false, causing the window frame to expand to include all peer values. If set to true, the window frame will be defined by offset values only. This setting only affects those operations that depend on the window frame, namely aggregation operations and the first_value, last_value, and nth_value window operations. **Default value:** ``false`` sort : List(:class:`SortField`) A sort field definition for sorting data objects within a window. If two data objects are considered equal by the comparator, they are considered “peer†values of equal rank. If sort is not specified, the order is undefined: data objects are processed in the order they are observed and none are considered peers (the ignorePeers parameter is ignored and treated as if set to ``true`` ). """ _schema = {'$ref': '#/definitions/WindowTransform'} def __init__(self, window=Undefined, frame=Undefined, groupby=Undefined, ignorePeers=Undefined, sort=Undefined, **kwds): super(WindowTransform, self).__init__(window=window, frame=frame, groupby=groupby, ignorePeers=ignorePeers, sort=sort, **kwds) class XValueDef(VegaLiteSchema): """XValueDef schema wrapper Mapping(required=[value]) Definition object for a constant value of an encoding channel. Attributes ---------- value : anyOf(float, enum('width')) A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/XValueDef'} def __init__(self, value=Undefined, **kwds): super(XValueDef, self).__init__(value=value, **kwds) class YValueDef(VegaLiteSchema): """YValueDef schema wrapper Mapping(required=[value]) Definition object for a constant value of an encoding channel. Attributes ---------- value : anyOf(float, enum('height')) A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/YValueDef'} def __init__(self, value=Undefined, **kwds): super(YValueDef, self).__init__(value=value, **kwds) altair-4.1.0/altair/vegalite/v3/schema/mixins.py000066400000000000000000001340721364111050100215140ustar00rootroot00000000000000# The contents of this file are automatically written by # tools/generate_schema_wrapper.py. Do not modify directly. from . import core from altair.utils import use_signature from altair.utils.schemapi import Undefined class MarkMethodMixin(object): """A mixin class that defines mark methods""" def mark_area(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'area' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="area", **kwds) else: copy.mark = "area" return copy def mark_bar(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'bar' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="bar", **kwds) else: copy.mark = "bar" return copy def mark_line(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'line' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="line", **kwds) else: copy.mark = "line" return copy def mark_trail(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'trail' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="trail", **kwds) else: copy.mark = "trail" return copy def mark_point(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'point' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="point", **kwds) else: copy.mark = "point" return copy def mark_text(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'text' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="text", **kwds) else: copy.mark = "text" return copy def mark_tick(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'tick' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="tick", **kwds) else: copy.mark = "tick" return copy def mark_rect(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'rect' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="rect", **kwds) else: copy.mark = "rect" return copy def mark_rule(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'rule' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="rule", **kwds) else: copy.mark = "rule" return copy def mark_circle(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'circle' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="circle", **kwds) else: copy.mark = "circle" return copy def mark_square(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'square' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="square", **kwds) else: copy.mark = "square" return copy def mark_geoshape(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'geoshape' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip, color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="geoshape", **kwds) else: copy.mark = "geoshape" return copy def mark_boxplot(self, box=Undefined, clip=Undefined, color=Undefined, extent=Undefined, median=Undefined, opacity=Undefined, orient=Undefined, outliers=Undefined, rule=Undefined, size=Undefined, ticks=Undefined, **kwds): """Set the chart's mark to 'boxplot' For information on additional arguments, see :class:`BoxPlotDef` """ kwds = dict(box=box, clip=clip, color=color, extent=extent, median=median, opacity=opacity, orient=orient, outliers=outliers, rule=rule, size=size, ticks=ticks, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.BoxPlotDef(type="boxplot", **kwds) else: copy.mark = "boxplot" return copy def mark_errorbar(self, clip=Undefined, color=Undefined, extent=Undefined, opacity=Undefined, orient=Undefined, rule=Undefined, ticks=Undefined, **kwds): """Set the chart's mark to 'errorbar' For information on additional arguments, see :class:`ErrorBarDef` """ kwds = dict(clip=clip, color=color, extent=extent, opacity=opacity, orient=orient, rule=rule, ticks=ticks, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.ErrorBarDef(type="errorbar", **kwds) else: copy.mark = "errorbar" return copy def mark_errorband(self, band=Undefined, borders=Undefined, clip=Undefined, color=Undefined, extent=Undefined, interpolate=Undefined, opacity=Undefined, orient=Undefined, tension=Undefined, **kwds): """Set the chart's mark to 'errorband' For information on additional arguments, see :class:`ErrorBandDef` """ kwds = dict(band=band, borders=borders, clip=clip, color=color, extent=extent, interpolate=interpolate, opacity=opacity, orient=orient, tension=tension, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.ErrorBandDef(type="errorband", **kwds) else: copy.mark = "errorband" return copy class ConfigMethodMixin(object): """A mixin class that defines config methods""" @use_signature(core.Config) def configure(self, *args, **kwargs): copy = self.copy(deep=False) copy.config = core.Config(*args, **kwargs) return copy @use_signature(core.AreaConfig) def configure_area(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["area"] = core.AreaConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axis(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axis"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisBand(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisBand"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisBottom(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisBottom"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisLeft(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisLeft"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisRight(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisRight"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisTop(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisTop"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisX(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisX"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisY(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisY"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.RectConfig) def configure_bar(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["bar"] = core.RectConfig(*args, **kwargs) return copy @use_signature(core.BoxPlotConfig) def configure_boxplot(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["boxplot"] = core.BoxPlotConfig(*args, **kwargs) return copy @use_signature(core.MarkConfig) def configure_circle(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["circle"] = core.MarkConfig(*args, **kwargs) return copy @use_signature(core.CompositionConfig) def configure_concat(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["concat"] = core.CompositionConfig(*args, **kwargs) return copy @use_signature(core.ErrorBandConfig) def configure_errorband(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["errorband"] = core.ErrorBandConfig(*args, **kwargs) return copy @use_signature(core.ErrorBarConfig) def configure_errorbar(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["errorbar"] = core.ErrorBarConfig(*args, **kwargs) return copy @use_signature(core.CompositionConfig) def configure_facet(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["facet"] = core.CompositionConfig(*args, **kwargs) return copy @use_signature(core.MarkConfig) def configure_geoshape(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["geoshape"] = core.MarkConfig(*args, **kwargs) return copy @use_signature(core.HeaderConfig) def configure_header(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["header"] = core.HeaderConfig(*args, **kwargs) return copy @use_signature(core.HeaderConfig) def configure_headerColumn(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["headerColumn"] = core.HeaderConfig(*args, **kwargs) return copy @use_signature(core.HeaderConfig) def configure_headerFacet(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["headerFacet"] = core.HeaderConfig(*args, **kwargs) return copy @use_signature(core.HeaderConfig) def configure_headerRow(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["headerRow"] = core.HeaderConfig(*args, **kwargs) return copy @use_signature(core.LegendConfig) def configure_legend(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["legend"] = core.LegendConfig(*args, **kwargs) return copy @use_signature(core.LineConfig) def configure_line(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["line"] = core.LineConfig(*args, **kwargs) return copy @use_signature(core.MarkConfig) def configure_mark(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["mark"] = core.MarkConfig(*args, **kwargs) return copy @use_signature(core.MarkConfig) def configure_point(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["point"] = core.MarkConfig(*args, **kwargs) return copy @use_signature(core.ProjectionConfig) def configure_projection(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["projection"] = core.ProjectionConfig(*args, **kwargs) return copy @use_signature(core.RangeConfig) def configure_range(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["range"] = core.RangeConfig(*args, **kwargs) return copy @use_signature(core.RectConfig) def configure_rect(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["rect"] = core.RectConfig(*args, **kwargs) return copy @use_signature(core.CompositionConfig) def configure_repeat(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["repeat"] = core.CompositionConfig(*args, **kwargs) return copy @use_signature(core.MarkConfig) def configure_rule(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["rule"] = core.MarkConfig(*args, **kwargs) return copy @use_signature(core.ScaleConfig) def configure_scale(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["scale"] = core.ScaleConfig(*args, **kwargs) return copy @use_signature(core.SelectionConfig) def configure_selection(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["selection"] = core.SelectionConfig(*args, **kwargs) return copy @use_signature(core.MarkConfig) def configure_square(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["square"] = core.MarkConfig(*args, **kwargs) return copy @use_signature(core.TextConfig) def configure_text(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["text"] = core.TextConfig(*args, **kwargs) return copy @use_signature(core.TickConfig) def configure_tick(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["tick"] = core.TickConfig(*args, **kwargs) return copy @use_signature(core.TitleConfig) def configure_title(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["title"] = core.TitleConfig(*args, **kwargs) return copy @use_signature(core.LineConfig) def configure_trail(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["trail"] = core.LineConfig(*args, **kwargs) return copy @use_signature(core.ViewConfig) def configure_view(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["view"] = core.ViewConfig(*args, **kwargs) return copyaltair-4.1.0/altair/vegalite/v3/schema/vega-lite-schema.json000066400000000000000000024546721364111050100236560ustar00rootroot00000000000000{ "$ref": "#/definitions/TopLevelSpec", "$schema": "http://json-schema.org/draft-07/schema#", "definitions": { "Aggregate": { "anyOf": [ { "$ref": "#/definitions/AggregateOp" }, { "$ref": "#/definitions/ArgmaxDef" }, { "$ref": "#/definitions/ArgminDef" } ] }, "AggregateOp": { "enum": [ "argmax", "argmin", "average", "count", "distinct", "max", "mean", "median", "min", "missing", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep" ], "type": "string" }, "AggregateTransform": { "additionalProperties": false, "properties": { "aggregate": { "description": "Array of objects that define fields to aggregate.", "items": { "$ref": "#/definitions/AggregatedFieldDef" }, "type": "array" }, "groupby": { "description": "The data fields to group by. If not specified, a single group containing all data objects will be used.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" } }, "required": [ "aggregate" ], "type": "object" }, "AggregatedFieldDef": { "additionalProperties": false, "properties": { "as": { "$ref": "#/definitions/FieldName", "description": "The output field names to use for each aggregated field." }, "field": { "$ref": "#/definitions/FieldName", "description": "The data field for which to compute aggregate function. This is required for all aggregation operations except `\"count\"`." }, "op": { "$ref": "#/definitions/AggregateOp", "description": "The aggregation operation to apply to the fields (e.g., sum, average or count).\nSee the [full list of supported aggregation operations](https://vega.github.io/vega-lite/docs/aggregate.html#ops)\nfor more information." } }, "required": [ "op", "as" ], "type": "object" }, "Align": { "enum": [ "left", "center", "right" ], "type": "string" }, "AnyMark": { "anyOf": [ { "$ref": "#/definitions/CompositeMark" }, { "$ref": "#/definitions/CompositeMarkDef" }, { "$ref": "#/definitions/Mark" }, { "$ref": "#/definitions/MarkDef" } ] }, "AreaConfig": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`." }, "angle": { "description": "The rotation angle of the text, in degrees.", "maximum": 360, "minimum": 0, "type": "number" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`" }, "color": { "$ref": "#/definitions/Color", "description": "Default color. Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)." }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "dir": { "$ref": "#/definitions/Dir", "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`" }, "dx": { "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "dy": { "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "ellipsis": { "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`", "type": "string" }, "fill": { "$ref": "#/definitions/Color", "description": "Default Fill Color. This has higher precedence than `config.color`\n\n__Default value:__ (None)" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "filled": { "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for `point`, `line` and `rule`; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).", "type": "boolean" }, "font": { "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "fontSize": { "description": "The font size, in pixels.", "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style (e.g., `\"italic\"`)." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "height": { "description": "Height of the marks.", "type": "number" }, "href": { "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.", "format": "uri", "type": "string" }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "limit": { "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit", "type": "number" }, "line": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/OverlayMarkDef" } ], "description": "A flag for overlaying line on top of area marks, or an object defining the properties of the overlayed lines.\n\n- If this value is an empty object (`{}`) or `true`, lines with default properties will be used.\n\n- If this value is `false`, no lines would be automatically added to area marks.\n\n__Default value:__ `false`." }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "order": { "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.", "type": [ "null", "boolean" ] }, "orient": { "$ref": "#/definitions/Orientation", "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored." }, "point": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/OverlayMarkDef" }, { "enum": [ "transparent" ], "type": "string" } ], "description": "A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points.\n\n- If this property is `\"transparent\"`, transparent points will be used (for enhancing tooltips and selections).\n\n- If this property is an empty object (`{}`) or `true`, filled points with default properties will be used.\n\n- If this property is `false`, no points would be automatically added to line or area marks.\n\n__Default value:__ `false`." }, "radius": { "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.", "minimum": 0, "type": "number" }, "shape": { "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`", "type": "string" }, "size": { "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__ `30` for point, circle, square marks; `rangeStep` - 1 for bar marks with discrete dimensions; `5` for bar marks with continuous dimensions; `11` for text marks.", "minimum": 0, "type": "number" }, "stroke": { "$ref": "#/definitions/Color", "description": "Default Stroke Color. This has higher precedence than `config.color`\n\n__Default value:__ (None)" }, "strokeCap": { "$ref": "#/definitions/StrokeCap", "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "$ref": "#/definitions/StrokeJoin", "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "tension": { "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).", "maximum": 1, "minimum": 0, "type": "number" }, "text": { "description": "Placeholder text if the `text` channel is not specified", "type": "string" }, "theta": { "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".", "type": "number" }, "tooltip": { "anyOf": [ { "$ref": "#/definitions/Value" }, { "$ref": "#/definitions/TooltipContent" }, { "type": "null" } ], "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null`, then no tooltip will be used." }, "width": { "description": "Width of the marks.", "type": "number" }, "x": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "y": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." } }, "type": "object" }, "ArgmaxDef": { "additionalProperties": false, "properties": { "argmax": { "type": "string" } }, "required": [ "argmax" ], "type": "object" }, "ArgminDef": { "additionalProperties": false, "properties": { "argmin": { "type": "string" } }, "required": [ "argmin" ], "type": "object" }, "AutoSizeParams": { "additionalProperties": false, "properties": { "contains": { "description": "Determines how size calculation should be performed, one of `\"content\"` or `\"padding\"`. The default setting (`\"content\"`) interprets the width and height settings as the data rectangle (plotting) dimensions, to which padding is then added. In contrast, the `\"padding\"` setting includes the padding within the view size calculations, such that the width and height settings indicate the **total** intended size of the view.\n\n__Default value__: `\"content\"`", "enum": [ "content", "padding" ], "type": "string" }, "resize": { "description": "A boolean flag indicating if autosize layout should be re-calculated on every view update.\n\n__Default value__: `false`", "type": "boolean" }, "type": { "$ref": "#/definitions/AutosizeType", "description": "The sizing format type. One of `\"pad\"`, `\"fit\"` or `\"none\"`. See the [autosize type](https://vega.github.io/vega-lite/docs/size.html#autosize) documentation for descriptions of each.\n\n__Default value__: `\"pad\"`" } }, "type": "object" }, "AutosizeType": { "enum": [ "pad", "fit", "none" ], "type": "string" }, "Axis": { "additionalProperties": false, "properties": { "bandPosition": { "description": "An interpolation fraction indicating where, for `band` scales, axis ticks should be positioned. A value of `0` places ticks at the left edge of their bands. A value of `0.5` places ticks in the middle of their bands.\n\n __Default value:__ `0.5`", "type": "number" }, "domain": { "description": "A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis.\n\n__Default value:__ `true`", "type": "boolean" }, "domainColor": { "$ref": "#/definitions/Color", "description": "Color of axis domain line.\n\n__Default value:__ `\"gray\"`." }, "domainDash": { "description": "An array of alternating [stroke, space] lengths for dashed domain lines.", "items": { "type": "number" }, "type": "array" }, "domainDashOffset": { "description": "The pixel offset at which to start drawing with the domain dash array.", "type": "number" }, "domainOpacity": { "description": "Opacity of the axis domain line.", "type": "number" }, "domainWidth": { "description": "Stroke width of axis domain line\n\n__Default value:__ `1`", "type": "number" }, "format": { "description": "The text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\n__Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.", "type": "string" }, "formatType": { "description": "The format type for labels (`\"number\"` or `\"time\"`).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.", "enum": [ "number", "time" ], "type": "string" }, "grid": { "description": "A boolean flag indicating if grid lines should be included as part of the axis\n\n__Default value:__ `true` for [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous) that are not binned; otherwise, `false`.", "type": "boolean" }, "gridColor": { "$ref": "#/definitions/Color", "description": "Color of gridlines.\n\n__Default value:__ `\"lightGray\"`." }, "gridDash": { "description": "An array of alternating [stroke, space] lengths for dashed grid lines.", "items": { "type": "number" }, "type": "array" }, "gridDashOffset": { "description": "The pixel offset at which to start drawing with the grid dash array.", "type": "number" }, "gridOpacity": { "description": "The stroke opacity of grid (value between [0,1])\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "gridWidth": { "description": "The grid width, in pixels.\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, "labelAlign": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment of axis tick labels, overriding the default setting for the current axis orientation." }, "labelAngle": { "description": "The rotation angle of the axis labels.\n\n__Default value:__ `-90` for nominal and ordinal fields; `0` otherwise.", "maximum": 360, "minimum": -360, "type": "number" }, "labelBaseline": { "$ref": "#/definitions/TextBaseline", "description": "Vertical text baseline of axis tick labels, overriding the default setting for the current axis orientation. Can be `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`." }, "labelBound": { "description": "Indicates if labels should be hidden if they exceed the axis range. If `false` (the default) no bounds overlap analysis is performed. If `true`, labels will be hidden if they exceed the axis range by more than 1 pixel. If this property is a number, it specifies the pixel tolerance: the maximum amount by which a label bounding box may exceed the axis range.\n\n__Default value:__ `false`.", "type": [ "number", "boolean" ] }, "labelColor": { "$ref": "#/definitions/Color", "description": "The color of the tick label, can be in hex color code or regular color name." }, "labelFlush": { "description": "Indicates if the first and last axis labels should be aligned flush with the scale range. Flush alignment for a horizontal axis will left-align the first label and right-align the last label. For vertical axes, bottom and top text baselines are applied instead. If this property is a number, it also indicates the number of pixels by which to offset the first and last labels; for example, a value of 2 will flush-align the first and last labels and also push them 2 pixels outward from the center of the axis. The additional adjustment can sometimes help the labels better visually group with corresponding axis ticks.\n\n__Default value:__ `true` for axis of a continuous x-scale. Otherwise, `false`.", "type": [ "boolean", "number" ] }, "labelFlushOffset": { "description": "Indicates the number of pixels by which to offset flush-adjusted labels. For example, a value of `2` will push flush-adjusted labels 2 pixels outward from the center of the axis. Offsets can help the labels better visually group with corresponding axis ticks.\n\n__Default value:__ `0`.", "type": "number" }, "labelFont": { "description": "The font of the tick label.", "type": "string" }, "labelFontSize": { "description": "The font size of the label, in pixels.", "minimum": 0, "type": "number" }, "labelFontStyle": { "$ref": "#/definitions/FontStyle", "description": "Font style of the title." }, "labelFontWeight": { "$ref": "#/definitions/FontWeight", "description": "Font weight of axis tick labels." }, "labelLimit": { "description": "Maximum allowed pixel width of axis tick labels.\n\n__Default value:__ `180`", "type": "number" }, "labelOpacity": { "description": "The opacity of the labels.", "type": "number" }, "labelOverlap": { "$ref": "#/definitions/LabelOverlap", "description": "The strategy to use for resolving overlap of axis labels. If `false` (the default), no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used (this works well for standard linear axes). If set to `\"greedy\"`, a linear scan of the labels is performed, removing any labels that overlaps with the last visible label (this often works better for log-scaled axes).\n\n__Default value:__ `true` for non-nominal fields with non-log scales; `\"greedy\"` for log scales; otherwise `false`." }, "labelPadding": { "description": "The padding, in pixels, between axis and text labels.\n\n__Default value:__ `2`", "type": "number" }, "labelSeparation": { "description": "The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default `0`). This property is ignored if *labelOverlap* resolution is not enabled.", "type": "number" }, "labels": { "description": "A boolean flag indicating if labels should be included as part of the axis.\n\n__Default value:__ `true`.", "type": "boolean" }, "maxExtent": { "description": "The maximum extent in pixels that axis ticks and labels should use. This determines a maximum offset value for axis titles.\n\n__Default value:__ `undefined`.", "type": "number" }, "minExtent": { "description": "The minimum extent in pixels that axis ticks and labels should use. This determines a minimum offset value for axis titles.\n\n__Default value:__ `30` for y-axis; `undefined` for x-axis.", "type": "number" }, "offset": { "description": "The offset, in pixels, by which to displace the axis from the edge of the enclosing group or data rectangle.\n\n__Default value:__ derived from the [axis config](https://vega.github.io/vega-lite/docs/config.html#facet-scale-config)'s `offset` (`0` by default)", "type": "number" }, "orient": { "$ref": "#/definitions/AxisOrient", "description": "The orientation of the axis. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`. The orientation can be used to further specialize the axis type (e.g., a y-axis oriented towards the right edge of the chart).\n\n__Default value:__ `\"bottom\"` for x-axes and `\"left\"` for y-axes." }, "position": { "description": "The anchor position of the axis in pixels. For x-axes with top or bottom orientation, this sets the axis group x coordinate. For y-axes with left or right orientation, this sets the axis group y coordinate.\n\n__Default value__: `0`", "type": "number" }, "tickColor": { "$ref": "#/definitions/Color", "description": "The color of the axis's tick.\n\n__Default value:__ `\"gray\"`" }, "tickCount": { "description": "A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are \"nice\" (multiples of 2, 5, 10) and lie within the underlying scale's range.", "type": "number" }, "tickDash": { "description": "An array of alternating [stroke, space] lengths for dashed tick mark lines.", "items": { "type": "number" }, "type": "array" }, "tickDashOffset": { "description": "The pixel offset at which to start drawing with the tick mark dash array.", "type": "number" }, "tickExtra": { "description": "Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for `band` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with `\"bandPosition\": 1` and an axis `\"padding\"` value of `0`.", "type": "boolean" }, "tickMinStep": { "description": "The minimum desired step between axis ticks, in terms of scale domain values. For example, a value of `1` indicates that ticks should not be less than 1 unit apart. If `tickMinStep` is specified, the `tickCount` value will be adjusted, if necessary, to enforce the minimum step value.\n\n__Default value__: `undefined`", "type": "number" }, "tickOffset": { "description": "Position offset in pixels to apply to ticks, labels, and gridlines.", "type": "number" }, "tickOpacity": { "description": "Opacity of the ticks.", "type": "number" }, "tickRound": { "description": "Boolean flag indicating if pixel position values should be rounded to the nearest integer.\n\n__Default value:__ `true`", "type": "boolean" }, "tickSize": { "description": "The size in pixels of axis ticks.\n\n__Default value:__ `5`", "minimum": 0, "type": "number" }, "tickWidth": { "description": "The width, in pixels, of ticks.\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, "ticks": { "description": "Boolean value that determines whether the axis should include ticks.\n\n__Default value:__ `true`", "type": "boolean" }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "titleAlign": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment of axis titles." }, "titleAnchor": { "$ref": "#/definitions/TitleAnchor", "description": "Text anchor position for placing axis titles." }, "titleAngle": { "description": "Angle in degrees of axis titles.", "type": "number" }, "titleBaseline": { "$ref": "#/definitions/TextBaseline", "description": "Vertical text baseline for axis titles." }, "titleColor": { "$ref": "#/definitions/Color", "description": "Color of the title, can be in hex color code or regular color name." }, "titleFont": { "description": "Font of the title. (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "titleFontSize": { "description": "Font size of the title.", "minimum": 0, "type": "number" }, "titleFontStyle": { "$ref": "#/definitions/FontStyle", "description": "Font style of the title." }, "titleFontWeight": { "$ref": "#/definitions/FontWeight", "description": "Font weight of the title.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "titleLimit": { "description": "Maximum allowed pixel width of axis titles.", "minimum": 0, "type": "number" }, "titleOpacity": { "description": "Opacity of the axis title.", "type": "number" }, "titlePadding": { "description": "The padding, in pixels, between title and axis.", "type": "number" }, "titleX": { "description": "X-coordinate of the axis title relative to the axis group.", "type": "number" }, "titleY": { "description": "Y-coordinate of the axis title relative to the axis group.", "type": "number" }, "values": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "items": { "type": "string" }, "type": "array" }, { "items": { "type": "boolean" }, "type": "array" }, { "items": { "$ref": "#/definitions/DateTime" }, "type": "array" } ], "description": "Explicitly set the visible axis tick values." }, "zindex": { "description": "A non-negative integer indicating the z-index of the axis.\nIf zindex is 0, axes should be drawn behind all chart elements.\nTo put them in front, use `\"zindex = 1\"`.\n\n__Default value:__ `1` (in front of the marks) for actual axis and `0` (behind the marks) for grids.", "minimum": 0, "type": "number" } }, "type": "object" }, "AxisConfig": { "additionalProperties": false, "properties": { "bandPosition": { "description": "An interpolation fraction indicating where, for `band` scales, axis ticks should be positioned. A value of `0` places ticks at the left edge of their bands. A value of `0.5` places ticks in the middle of their bands.\n\n __Default value:__ `0.5`", "type": "number" }, "domain": { "description": "A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis.\n\n__Default value:__ `true`", "type": "boolean" }, "domainColor": { "$ref": "#/definitions/Color", "description": "Color of axis domain line.\n\n__Default value:__ `\"gray\"`." }, "domainDash": { "description": "An array of alternating [stroke, space] lengths for dashed domain lines.", "items": { "type": "number" }, "type": "array" }, "domainDashOffset": { "description": "The pixel offset at which to start drawing with the domain dash array.", "type": "number" }, "domainOpacity": { "description": "Opacity of the axis domain line.", "type": "number" }, "domainWidth": { "description": "Stroke width of axis domain line\n\n__Default value:__ `1`", "type": "number" }, "grid": { "description": "A boolean flag indicating if grid lines should be included as part of the axis\n\n__Default value:__ `true` for [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous) that are not binned; otherwise, `false`.", "type": "boolean" }, "gridColor": { "$ref": "#/definitions/Color", "description": "Color of gridlines.\n\n__Default value:__ `\"lightGray\"`." }, "gridDash": { "description": "An array of alternating [stroke, space] lengths for dashed grid lines.", "items": { "type": "number" }, "type": "array" }, "gridDashOffset": { "description": "The pixel offset at which to start drawing with the grid dash array.", "type": "number" }, "gridOpacity": { "description": "The stroke opacity of grid (value between [0,1])\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "gridWidth": { "description": "The grid width, in pixels.\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, "labelAlign": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment of axis tick labels, overriding the default setting for the current axis orientation." }, "labelAngle": { "description": "The rotation angle of the axis labels.\n\n__Default value:__ `-90` for nominal and ordinal fields; `0` otherwise.", "maximum": 360, "minimum": -360, "type": "number" }, "labelBaseline": { "$ref": "#/definitions/TextBaseline", "description": "Vertical text baseline of axis tick labels, overriding the default setting for the current axis orientation. Can be `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`." }, "labelBound": { "description": "Indicates if labels should be hidden if they exceed the axis range. If `false` (the default) no bounds overlap analysis is performed. If `true`, labels will be hidden if they exceed the axis range by more than 1 pixel. If this property is a number, it specifies the pixel tolerance: the maximum amount by which a label bounding box may exceed the axis range.\n\n__Default value:__ `false`.", "type": [ "number", "boolean" ] }, "labelColor": { "$ref": "#/definitions/Color", "description": "The color of the tick label, can be in hex color code or regular color name." }, "labelFlush": { "description": "Indicates if the first and last axis labels should be aligned flush with the scale range. Flush alignment for a horizontal axis will left-align the first label and right-align the last label. For vertical axes, bottom and top text baselines are applied instead. If this property is a number, it also indicates the number of pixels by which to offset the first and last labels; for example, a value of 2 will flush-align the first and last labels and also push them 2 pixels outward from the center of the axis. The additional adjustment can sometimes help the labels better visually group with corresponding axis ticks.\n\n__Default value:__ `true` for axis of a continuous x-scale. Otherwise, `false`.", "type": [ "boolean", "number" ] }, "labelFlushOffset": { "description": "Indicates the number of pixels by which to offset flush-adjusted labels. For example, a value of `2` will push flush-adjusted labels 2 pixels outward from the center of the axis. Offsets can help the labels better visually group with corresponding axis ticks.\n\n__Default value:__ `0`.", "type": "number" }, "labelFont": { "description": "The font of the tick label.", "type": "string" }, "labelFontSize": { "description": "The font size of the label, in pixels.", "minimum": 0, "type": "number" }, "labelFontStyle": { "$ref": "#/definitions/FontStyle", "description": "Font style of the title." }, "labelFontWeight": { "$ref": "#/definitions/FontWeight", "description": "Font weight of axis tick labels." }, "labelLimit": { "description": "Maximum allowed pixel width of axis tick labels.\n\n__Default value:__ `180`", "type": "number" }, "labelOpacity": { "description": "The opacity of the labels.", "type": "number" }, "labelOverlap": { "$ref": "#/definitions/LabelOverlap", "description": "The strategy to use for resolving overlap of axis labels. If `false` (the default), no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used (this works well for standard linear axes). If set to `\"greedy\"`, a linear scan of the labels is performed, removing any labels that overlaps with the last visible label (this often works better for log-scaled axes).\n\n__Default value:__ `true` for non-nominal fields with non-log scales; `\"greedy\"` for log scales; otherwise `false`." }, "labelPadding": { "description": "The padding, in pixels, between axis and text labels.\n\n__Default value:__ `2`", "type": "number" }, "labelSeparation": { "description": "The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default `0`). This property is ignored if *labelOverlap* resolution is not enabled.", "type": "number" }, "labels": { "description": "A boolean flag indicating if labels should be included as part of the axis.\n\n__Default value:__ `true`.", "type": "boolean" }, "maxExtent": { "description": "The maximum extent in pixels that axis ticks and labels should use. This determines a maximum offset value for axis titles.\n\n__Default value:__ `undefined`.", "type": "number" }, "minExtent": { "description": "The minimum extent in pixels that axis ticks and labels should use. This determines a minimum offset value for axis titles.\n\n__Default value:__ `30` for y-axis; `undefined` for x-axis.", "type": "number" }, "orient": { "$ref": "#/definitions/AxisOrient", "description": "The orientation of the axis. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`. The orientation can be used to further specialize the axis type (e.g., a y-axis oriented towards the right edge of the chart).\n\n__Default value:__ `\"bottom\"` for x-axes and `\"left\"` for y-axes." }, "shortTimeLabels": { "description": "Whether month names and weekday names should be abbreviated.\n\n__Default value:__ `false`", "type": "boolean" }, "tickColor": { "$ref": "#/definitions/Color", "description": "The color of the axis's tick.\n\n__Default value:__ `\"gray\"`" }, "tickDash": { "description": "An array of alternating [stroke, space] lengths for dashed tick mark lines.", "items": { "type": "number" }, "type": "array" }, "tickDashOffset": { "description": "The pixel offset at which to start drawing with the tick mark dash array.", "type": "number" }, "tickExtra": { "description": "Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for `band` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with `\"bandPosition\": 1` and an axis `\"padding\"` value of `0`.", "type": "boolean" }, "tickOffset": { "description": "Position offset in pixels to apply to ticks, labels, and gridlines.", "type": "number" }, "tickOpacity": { "description": "Opacity of the ticks.", "type": "number" }, "tickRound": { "description": "Boolean flag indicating if pixel position values should be rounded to the nearest integer.\n\n__Default value:__ `true`", "type": "boolean" }, "tickSize": { "description": "The size in pixels of axis ticks.\n\n__Default value:__ `5`", "minimum": 0, "type": "number" }, "tickWidth": { "description": "The width, in pixels, of ticks.\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, "ticks": { "description": "Boolean value that determines whether the axis should include ticks.\n\n__Default value:__ `true`", "type": "boolean" }, "title": { "description": "Set to null to disable title for the axis, legend, or header.", "type": "null" }, "titleAlign": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment of axis titles." }, "titleAnchor": { "$ref": "#/definitions/TitleAnchor", "description": "Text anchor position for placing axis titles." }, "titleAngle": { "description": "Angle in degrees of axis titles.", "type": "number" }, "titleBaseline": { "$ref": "#/definitions/TextBaseline", "description": "Vertical text baseline for axis titles." }, "titleColor": { "$ref": "#/definitions/Color", "description": "Color of the title, can be in hex color code or regular color name." }, "titleFont": { "description": "Font of the title. (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "titleFontSize": { "description": "Font size of the title.", "minimum": 0, "type": "number" }, "titleFontStyle": { "$ref": "#/definitions/FontStyle", "description": "Font style of the title." }, "titleFontWeight": { "$ref": "#/definitions/FontWeight", "description": "Font weight of the title.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "titleLimit": { "description": "Maximum allowed pixel width of axis titles.", "minimum": 0, "type": "number" }, "titleOpacity": { "description": "Opacity of the axis title.", "type": "number" }, "titlePadding": { "description": "The padding, in pixels, between title and axis.", "type": "number" }, "titleX": { "description": "X-coordinate of the axis title relative to the axis group.", "type": "number" }, "titleY": { "description": "Y-coordinate of the axis title relative to the axis group.", "type": "number" } }, "type": "object" }, "AxisOrient": { "enum": [ "top", "bottom", "left", "right" ], "type": "string" }, "AxisResolveMap": { "additionalProperties": false, "properties": { "x": { "$ref": "#/definitions/ResolveMode" }, "y": { "$ref": "#/definitions/ResolveMode" } }, "type": "object" }, "BaseLegendLayout": { "additionalProperties": false, "properties": { "anchor": { "$ref": "#/definitions/TitleAnchor", "description": "The anchor point for legend orient group layout." }, "bounds": { "$ref": "#/definitions/LayoutBounds", "description": "The bounds calculation to use for legend orient group layout." }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/SignalRef" } ], "description": "A flag to center legends within a shared orient group." }, "direction": { "anyOf": [ { "$ref": "#/definitions/Orientation" }, { "$ref": "#/definitions/SignalRef" } ], "description": "The layout direction for legend orient group layout." }, "margin": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/SignalRef" } ], "description": "The pixel margin between legends within a orient group." }, "offset": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/SignalRef" } ], "description": "The pixel offset from the chart body for a legend orient group." } }, "type": "object" }, "BaseMarkConfig": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`." }, "angle": { "description": "The rotation angle of the text, in degrees.", "maximum": 360, "minimum": 0, "type": "number" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`" }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "dir": { "$ref": "#/definitions/Dir", "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`" }, "dx": { "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "dy": { "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "ellipsis": { "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`", "type": "string" }, "fill": { "$ref": "#/definitions/Color", "description": "Default Fill Color. This has higher precedence than `config.color`\n\n__Default value:__ (None)" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "font": { "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "fontSize": { "description": "The font size, in pixels.", "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style (e.g., `\"italic\"`)." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "height": { "description": "Height of the marks.", "type": "number" }, "href": { "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.", "format": "uri", "type": "string" }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "limit": { "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit", "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "orient": { "$ref": "#/definitions/Orientation", "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored." }, "radius": { "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.", "minimum": 0, "type": "number" }, "shape": { "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`", "type": "string" }, "size": { "description": "The pixel area each the point/circle/square.\nFor example: in the case of circles, the radius is determined in part by the square root of the size value.\n\n__Default value:__ `30`", "minimum": 0, "type": "number" }, "stroke": { "$ref": "#/definitions/Color", "description": "Default Stroke Color. This has higher precedence than `config.color`\n\n__Default value:__ (None)" }, "strokeCap": { "$ref": "#/definitions/StrokeCap", "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "$ref": "#/definitions/StrokeJoin", "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "tension": { "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).", "maximum": 1, "minimum": 0, "type": "number" }, "text": { "description": "Placeholder text if the `text` channel is not specified", "type": "string" }, "theta": { "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".", "type": "number" }, "tooltip": { "description": "The tooltip text to show upon mouse hover." }, "width": { "description": "Width of the marks.", "type": "number" }, "x": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "y": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." } }, "type": "object" }, "BaseTitleConfig": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align" }, "anchor": { "$ref": "#/definitions/TitleAnchor", "description": "The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title." }, "angle": { "description": "Angle in degrees of title text.", "type": "number" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "Vertical text baseline for title text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`." }, "color": { "$ref": "#/definitions/Color", "description": "Text color for title text." }, "dx": { "description": "Delta offset for title text x-coordinate.", "type": "number" }, "dy": { "description": "Delta offset for title text y-coordinate.", "type": "number" }, "font": { "description": "Font name for title text.", "type": "string" }, "fontSize": { "description": "Font size in pixels for title text.\n\n__Default value:__ `10`.", "minimum": 0, "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "Font style for title text." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "Font weight for title text.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "frame": { "$ref": "#/definitions/TitleFrame", "description": "The reference frame for the anchor position, one of `\"bounds\"` (to anchor relative to the full bounding box) or `\"group\"` (to anchor relative to the group width or height)." }, "limit": { "description": "The maximum allowed length in pixels of legend labels.", "minimum": 0, "type": "number" }, "offset": { "description": "The orthogonal offset in pixels by which to displace the title from its position along the edge of the chart.", "type": "number" }, "orient": { "$ref": "#/definitions/TitleOrient", "description": "Default title orientation (`\"top\"`, `\"bottom\"`, `\"left\"`, or `\"right\"`)" } }, "type": "object" }, "Baseline": { "enum": [ "top", "middle", "bottom" ], "type": "string" }, "BinParams": { "additionalProperties": false, "description": "Binning properties or boolean flag for determining whether to bin data or not.", "properties": { "anchor": { "description": "A value in the binned domain at which to anchor the bins, shifting the bin boundaries if necessary to ensure that a boundary aligns with the anchor value.\n\n__Default Value:__ the minimum bin extent value", "type": "number" }, "base": { "description": "The number base to use for automatic bin determination (default is base 10).\n\n__Default value:__ `10`", "type": "number" }, "binned": { "description": "When set to true, Vega-Lite treats the input data as already binned.", "type": "boolean" }, "divide": { "description": "Scale factors indicating allowable subdivisions. The default value is [5, 2], which indicates that for base 10 numbers (the default base), the method may consider dividing bin sizes by 5 and/or 2. For example, for an initial step size of 10, the method can check if bin sizes of 2 (= 10/5), 5 (= 10/2), or 1 (= 10/(5*2)) might also satisfy the given constraints.\n\n__Default value:__ `[5, 2]`", "items": { "type": "number" }, "minItems": 1, "type": "array" }, "extent": { "description": "A two-element (`[min, max]`) array indicating the range of desired bin values.", "items": { "type": "number" }, "maxItems": 2, "minItems": 2, "type": "array" }, "maxbins": { "description": "Maximum number of bins.\n\n__Default value:__ `6` for `row`, `column` and `shape` channels; `10` for other channels", "minimum": 2, "type": "number" }, "minstep": { "description": "A minimum allowable step size (particularly useful for integer values).", "type": "number" }, "nice": { "description": "If true (the default), attempts to make the bin boundaries use human-friendly boundaries, such as multiples of ten.", "type": "boolean" }, "step": { "description": "An exact step size to use between bins.\n\n__Note:__ If provided, options such as maxbins will be ignored.", "type": "number" }, "steps": { "description": "An array of allowable step sizes to choose from.", "items": { "type": "number" }, "minItems": 1, "type": "array" } }, "type": "object" }, "BinTransform": { "additionalProperties": false, "properties": { "as": { "anyOf": [ { "$ref": "#/definitions/FieldName" }, { "items": { "$ref": "#/definitions/FieldName" }, "type": "array" } ], "description": "The output fields at which to write the start and end bin values." }, "bin": { "anyOf": [ { "enum": [ true ], "type": "boolean" }, { "$ref": "#/definitions/BinParams" } ], "description": "An object indicating bin properties, or simply `true` for using default bin parameters." }, "field": { "$ref": "#/definitions/FieldName", "description": "The data field to bin." } }, "required": [ "bin", "field", "as" ], "type": "object" }, "BindCheckbox": { "additionalProperties": false, "properties": { "debounce": { "type": "number" }, "element": { "$ref": "#/definitions/Element" }, "input": { "enum": [ "checkbox" ], "type": "string" }, "name": { "type": "string" }, "type": { "type": "string" } }, "required": [ "input" ], "type": "object" }, "BindRadioSelect": { "additionalProperties": false, "properties": { "debounce": { "type": "number" }, "element": { "$ref": "#/definitions/Element" }, "input": { "enum": [ "radio", "select" ], "type": "string" }, "name": { "type": "string" }, "options": { "items": { }, "type": "array" }, "type": { "type": "string" } }, "required": [ "input", "options" ], "type": "object" }, "BindRange": { "additionalProperties": false, "properties": { "debounce": { "type": "number" }, "element": { "$ref": "#/definitions/Element" }, "input": { "enum": [ "range" ], "type": "string" }, "max": { "type": "number" }, "min": { "type": "number" }, "name": { "type": "string" }, "step": { "type": "number" }, "type": { "type": "string" } }, "required": [ "input" ], "type": "object" }, "Binding": { "anyOf": [ { "$ref": "#/definitions/BindCheckbox" }, { "$ref": "#/definitions/BindRadioSelect" }, { "$ref": "#/definitions/BindRange" }, { "$ref": "#/definitions/InputBinding" } ] }, "BoxPlot": { "enum": [ "boxplot" ], "type": "string" }, "BoxPlotConfig": { "additionalProperties": false, "properties": { "box": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "extent": { "anyOf": [ { "enum": [ "min-max" ], "type": "string" }, { "type": "number" } ], "description": "The extent of the whiskers. Available options include:\n- `\"min-max\"`: min and max are the lower and upper whiskers respectively.\n- A number representing multiple of the interquartile range. This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range _[Q1 - k * IQR, Q3 + k * IQR]_ where _Q1_ and _Q3_ are the first and third quartiles while _IQR_ is the interquartile range (_Q3-Q1_).\n\n__Default value:__ `1.5`." }, "median": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "outliers": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "rule": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "size": { "description": "Size of the box and median tick of a box plot", "type": "number" }, "ticks": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] } }, "type": "object" }, "BoxPlotDef": { "additionalProperties": false, "properties": { "box": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "clip": { "description": "Whether a composite mark be clipped to the enclosing group’s width and height.", "type": "boolean" }, "color": { "$ref": "#/definitions/Color", "description": "Default color. Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)." }, "extent": { "anyOf": [ { "enum": [ "min-max" ], "type": "string" }, { "type": "number" } ], "description": "The extent of the whiskers. Available options include:\n- `\"min-max\"`: min and max are the lower and upper whiskers respectively.\n- A number representing multiple of the interquartile range. This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range _[Q1 - k * IQR, Q3 + k * IQR]_ where _Q1_ and _Q3_ are the first and third quartiles while _IQR_ is the interquartile range (_Q3-Q1_).\n\n__Default value:__ `1.5`." }, "median": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "opacity": { "description": "The opacity (value between [0,1]) of the mark.", "type": "number" }, "orient": { "$ref": "#/definitions/Orientation", "description": "Orientation of the box plot. This is normally automatically determined based on types of fields on x and y channels. However, an explicit `orient` be specified when the orientation is ambiguous.\n\n__Default value:__ `\"vertical\"`." }, "outliers": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "rule": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "size": { "description": "Size of the box and median tick of a box plot", "type": "number" }, "ticks": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "type": { "$ref": "#/definitions/BoxPlot", "description": "The mark type. This could a primitive mark type\n(one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`)\nor a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`)." } }, "required": [ "type" ], "type": "object" }, "BrushConfig": { "additionalProperties": false, "properties": { "fill": { "$ref": "#/definitions/Color", "description": "The fill color of the interval mark.\n\n__Default value:__ `#333333`" }, "fillOpacity": { "description": "The fill opacity of the interval mark (a value between 0 and 1).\n\n__Default value:__ `0.125`", "type": "number" }, "stroke": { "$ref": "#/definitions/Color", "description": "The stroke color of the interval mark.\n\n__Default value:__ `#ffffff`" }, "strokeDash": { "description": "An array of alternating stroke and space lengths,\nfor creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) with which to begin drawing the stroke dash array.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity of the interval mark (a value between 0 and 1).", "type": "number" }, "strokeWidth": { "description": "The stroke width of the interval mark.", "type": "number" } }, "type": "object" }, "CalculateTransform": { "additionalProperties": false, "properties": { "as": { "$ref": "#/definitions/FieldName", "description": "The field for storing the computed formula value." }, "calculate": { "description": "A [expression](https://vega.github.io/vega-lite/docs/types.html#expression) string. Use the variable `datum` to refer to the current data object.", "type": "string" } }, "required": [ "calculate", "as" ], "type": "object" }, "Color": { "anyOf": [ { "$ref": "#/definitions/ColorName" }, { "$ref": "#/definitions/HexColor" }, { "type": "string" } ] }, "ColorName": { "enum": [ "black", "silver", "gray", "white", "maroon", "red", "purple", "fuchsia", "green", "lime", "olive", "yellow", "navy", "blue", "teal", "aqua", "orange", "aliceblue", "antiquewhite", "aquamarine", "azure", "beige", "bisque", "blanchedalmond", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "gainsboro", "ghostwhite", "gold", "goldenrod", "greenyellow", "grey", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "limegreen", "linen", "magenta", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "oldlace", "olivedrab", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "thistle", "tomato", "turquoise", "violet", "wheat", "whitesmoke", "yellowgreen", "rebeccapurple" ], "type": "string" }, "Encoding": { "additionalProperties": false, "properties": { "color": { "anyOf": [ { "$ref": "#/definitions/StringFieldDefWithCondition" }, { "$ref": "#/definitions/StringValueDefWithCondition" } ], "description": "Color of the marks – either fill or stroke color based on the `filled` property of mark definition.\nBy default, `color` represents fill color for `\"area\"`, `\"bar\"`, `\"tick\"`,\n`\"text\"`, `\"trail\"`, `\"circle\"`, and `\"square\"` / stroke color for `\"line\"` and `\"point\"`.\n\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `color` property.\n\n_Note:_\n1) For fine-grained control over both fill and stroke colors of the marks, please use the `fill` and `stroke` channels. If either `fill` or `stroke` channel is specified, `color` channel will be ignored.\n2) See the scale documentation for more information about customizing [color scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme)." }, "detail": { "anyOf": [ { "$ref": "#/definitions/FieldDefWithoutScale" }, { "items": { "$ref": "#/definitions/FieldDefWithoutScale" }, "type": "array" } ], "description": "Additional levels of detail for grouping data in aggregate views and\nin line, trail, and area marks without mapping data to a specific visual channel." }, "fill": { "anyOf": [ { "$ref": "#/definitions/StringFieldDefWithCondition" }, { "$ref": "#/definitions/StringValueDefWithCondition" } ], "description": "Fill color of the marks.\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `color` property.\n\n_Note:_ When using `fill` channel, `color ` channel will be ignored. To customize both fill and stroke, please use `fill` and `stroke` channels (not `fill` and `color`)." }, "fillOpacity": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueDefWithCondition" } ], "description": "Fill opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `fillOpacity` property." }, "href": { "anyOf": [ { "$ref": "#/definitions/TextFieldDefWithCondition" }, { "$ref": "#/definitions/TextValueDefWithCondition" } ], "description": "A URL to load upon mouse click." }, "key": { "$ref": "#/definitions/FieldDefWithoutScale", "description": "A data field to use as a unique key for data binding. When a visualization’s data is updated, the key value will be used to match data elements to existing mark instances. Use a key channel to enable object constancy for transitions over dynamic data." }, "latitude": { "anyOf": [ { "$ref": "#/definitions/LatLongFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Latitude position of geographically projected marks." }, "latitude2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Latitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`." }, "longitude": { "anyOf": [ { "$ref": "#/definitions/LatLongFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Longitude position of geographically projected marks." }, "longitude2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Longitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`." }, "opacity": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueDefWithCondition" } ], "description": "Opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `opacity` property." }, "order": { "anyOf": [ { "$ref": "#/definitions/OrderFieldDef" }, { "items": { "$ref": "#/definitions/OrderFieldDef" }, "type": "array" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Order of the marks.\n- For stacked marks, this `order` channel encodes [stack order](https://vega.github.io/vega-lite/docs/stack.html#order).\n- For line and trail marks, this `order` channel encodes order of data points in the lines. This can be useful for creating [a connected scatterplot](https://vega.github.io/vega-lite/examples/connected_scatterplot.html). Setting `order` to `{\"value\": null}` makes the line marks use the original order in the data sources.\n- Otherwise, this `order` channel encodes layer order of the marks.\n\n__Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating additional aggregation grouping." }, "shape": { "anyOf": [ { "$ref": "#/definitions/ShapeFieldDefWithCondition" }, { "$ref": "#/definitions/ShapeValueDefWithCondition" } ], "description": "Shape of the mark.\n\n1. For `point` marks the supported values include:\n - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n - the line symbol `\"stroke\"`\n - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n2. For `geoshape` marks it should be a field definition of the geojson data\n\n__Default value:__ If undefined, the default shape depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#point-config)'s `shape` property. (`\"circle\"` if unset.)" }, "size": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueDefWithCondition" } ], "description": "Size of the mark.\n- For `\"point\"`, `\"square\"` and `\"circle\"`, – the symbol size, or pixel area of the mark.\n- For `\"bar\"` and `\"tick\"` – the bar and tick's size.\n- For `\"text\"` – the text's font size.\n- Size is unsupported for `\"line\"`, `\"area\"`, and `\"rect\"`. (Use `\"trail\"` instead of line with varying size)" }, "stroke": { "anyOf": [ { "$ref": "#/definitions/StringFieldDefWithCondition" }, { "$ref": "#/definitions/StringValueDefWithCondition" } ], "description": "Stroke color of the marks.\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `color` property.\n\n_Note:_ When using `stroke` channel, `color ` channel will be ignored. To customize both stroke and fill, please use `stroke` and `fill` channels (not `stroke` and `color`)." }, "strokeOpacity": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueDefWithCondition" } ], "description": "Stroke opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `strokeOpacity` property." }, "strokeWidth": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueDefWithCondition" } ], "description": "Stroke width of the marks.\n\n__Default value:__ If undefined, the default stroke width depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `strokeWidth` property." }, "text": { "anyOf": [ { "$ref": "#/definitions/TextFieldDefWithCondition" }, { "$ref": "#/definitions/TextValueDefWithCondition" } ], "description": "Text of the `text` mark." }, "tooltip": { "anyOf": [ { "$ref": "#/definitions/TextFieldDefWithCondition" }, { "$ref": "#/definitions/TextValueDefWithCondition" }, { "items": { "$ref": "#/definitions/TextFieldDef" }, "type": "array" }, { "type": "null" } ], "description": "The tooltip text to show upon mouse hover." }, "x": { "anyOf": [ { "$ref": "#/definitions/PositionFieldDef" }, { "$ref": "#/definitions/XValueDef" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/XValueDef" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "xError": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`." }, "xError2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Secondary error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`." }, "y": { "anyOf": [ { "$ref": "#/definitions/PositionFieldDef" }, { "$ref": "#/definitions/YValueDef" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/YValueDef" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "yError": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`." }, "yError2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Secondary error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`." } }, "type": "object" }, "CompositeMark": { "anyOf": [ { "$ref": "#/definitions/BoxPlot" }, { "$ref": "#/definitions/ErrorBar" }, { "$ref": "#/definitions/ErrorBand" } ] }, "CompositeMarkDef": { "anyOf": [ { "$ref": "#/definitions/BoxPlotDef" }, { "$ref": "#/definitions/ErrorBarDef" }, { "$ref": "#/definitions/ErrorBandDef" } ] }, "CompositionConfig": { "additionalProperties": false, "properties": { "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "spacing": { "description": "The default spacing in pixels between composed sub-views.\n\n__Default value__: `20`", "type": "number" } }, "type": "object" }, "ConditionalMarkPropFieldDef": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate" }, { "$ref": "#/definitions/ConditionalSelection" } ] }, "ConditionalMarkPropFieldDef": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate>" }, { "$ref": "#/definitions/ConditionalSelection>" } ] }, "ConditionalTextFieldDef": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate" }, { "$ref": "#/definitions/ConditionalSelection" } ] }, "ConditionalStringValueDef": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate" }, { "$ref": "#/definitions/ConditionalSelection" } ] }, "ConditionalValueDef": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate" }, { "$ref": "#/definitions/ConditionalSelection" } ] }, "ConditionalNumberValueDef": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate" }, { "$ref": "#/definitions/ConditionalSelection" } ] }, "ConditionalPredicate": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "legend": { "anyOf": [ { "$ref": "#/definitions/Legend" }, { "type": "null" } ], "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation." }, "scale": { "anyOf": [ { "$ref": "#/definitions/Scale" }, { "type": "null" } ], "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation." }, "sort": { "$ref": "#/definitions/Sort", "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in Javascript.\n- [A sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) for sorting by another encoding channel. (This type of sort definition is not available for `row` and `column` channels.)\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation." }, "test": { "$ref": "#/definitions/LogicalOperand", "description": "Predicate for triggering the condition" }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "test", "type" ], "type": "object" }, "ConditionalPredicate>": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "legend": { "anyOf": [ { "$ref": "#/definitions/Legend" }, { "type": "null" } ], "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation." }, "scale": { "anyOf": [ { "$ref": "#/definitions/Scale" }, { "type": "null" } ], "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation." }, "sort": { "$ref": "#/definitions/Sort", "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in Javascript.\n- [A sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) for sorting by another encoding channel. (This type of sort definition is not available for `row` and `column` channels.)\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation." }, "test": { "$ref": "#/definitions/LogicalOperand", "description": "Predicate for triggering the condition" }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "type": { "$ref": "#/definitions/TypeForShape", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "test", "type" ], "type": "object" }, "ConditionalPredicate": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "enum": [ "binned" ], "type": "string" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "format": { "description": "The text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\n__Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.", "type": "string" }, "formatType": { "description": "The format type for labels (`\"number\"` or `\"time\"`).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.", "enum": [ "number", "time" ], "type": "string" }, "test": { "$ref": "#/definitions/LogicalOperand", "description": "Predicate for triggering the condition" }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "test", "type" ], "type": "object" }, "ConditionalPredicate": { "additionalProperties": false, "properties": { "test": { "$ref": "#/definitions/LogicalOperand", "description": "Predicate for triggering the condition" }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity).", "type": [ "string", "null" ] } }, "required": [ "test", "value" ], "type": "object" }, "ConditionalPredicate": { "additionalProperties": false, "properties": { "test": { "$ref": "#/definitions/LogicalOperand", "description": "Predicate for triggering the condition" }, "value": { "$ref": "#/definitions/Value", "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity)." } }, "required": [ "test", "value" ], "type": "object" }, "ConditionalPredicate": { "additionalProperties": false, "properties": { "test": { "$ref": "#/definitions/LogicalOperand", "description": "Predicate for triggering the condition" }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity).", "type": "number" } }, "required": [ "test", "value" ], "type": "object" }, "ConditionalSelection": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "legend": { "anyOf": [ { "$ref": "#/definitions/Legend" }, { "type": "null" } ], "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation." }, "scale": { "anyOf": [ { "$ref": "#/definitions/Scale" }, { "type": "null" } ], "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation." }, "selection": { "$ref": "#/definitions/SelectionOperand", "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)." }, "sort": { "$ref": "#/definitions/Sort", "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in Javascript.\n- [A sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) for sorting by another encoding channel. (This type of sort definition is not available for `row` and `column` channels.)\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "selection", "type" ], "type": "object" }, "ConditionalSelection>": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "legend": { "anyOf": [ { "$ref": "#/definitions/Legend" }, { "type": "null" } ], "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation." }, "scale": { "anyOf": [ { "$ref": "#/definitions/Scale" }, { "type": "null" } ], "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation." }, "selection": { "$ref": "#/definitions/SelectionOperand", "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)." }, "sort": { "$ref": "#/definitions/Sort", "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in Javascript.\n- [A sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) for sorting by another encoding channel. (This type of sort definition is not available for `row` and `column` channels.)\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "type": { "$ref": "#/definitions/TypeForShape", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "selection", "type" ], "type": "object" }, "ConditionalSelection": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "enum": [ "binned" ], "type": "string" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "format": { "description": "The text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\n__Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.", "type": "string" }, "formatType": { "description": "The format type for labels (`\"number\"` or `\"time\"`).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.", "enum": [ "number", "time" ], "type": "string" }, "selection": { "$ref": "#/definitions/SelectionOperand", "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "selection", "type" ], "type": "object" }, "ConditionalSelection": { "additionalProperties": false, "properties": { "selection": { "$ref": "#/definitions/SelectionOperand", "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)." }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity).", "type": [ "string", "null" ] } }, "required": [ "selection", "value" ], "type": "object" }, "ConditionalSelection": { "additionalProperties": false, "properties": { "selection": { "$ref": "#/definitions/SelectionOperand", "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)." }, "value": { "$ref": "#/definitions/Value", "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity)." } }, "required": [ "selection", "value" ], "type": "object" }, "ConditionalSelection": { "additionalProperties": false, "properties": { "selection": { "$ref": "#/definitions/SelectionOperand", "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)." }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity).", "type": "number" } }, "required": [ "selection", "value" ], "type": "object" }, "Config": { "additionalProperties": false, "properties": { "area": { "$ref": "#/definitions/AreaConfig", "description": "Area-Specific Config" }, "autosize": { "anyOf": [ { "$ref": "#/definitions/AutosizeType" }, { "$ref": "#/definitions/AutoSizeParams" } ], "description": "Sets how the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n`\"fit\"` is only supported for single and layered views that don't use `rangeStep`.\n\n__Default value__: `pad`" }, "axis": { "$ref": "#/definitions/AxisConfig", "description": "Axis configuration, which determines default properties for all `x` and `y` [axes](https://vega.github.io/vega-lite/docs/axis.html). For a full list of axis configuration options, please see the [corresponding section of the axis documentation](https://vega.github.io/vega-lite/docs/axis.html#config)." }, "axisBand": { "$ref": "#/definitions/AxisConfig", "description": "Specific axis config for axes with \"band\" scales." }, "axisBottom": { "$ref": "#/definitions/AxisConfig", "description": "Specific axis config for x-axis along the bottom edge of the chart." }, "axisLeft": { "$ref": "#/definitions/AxisConfig", "description": "Specific axis config for y-axis along the left edge of the chart." }, "axisRight": { "$ref": "#/definitions/AxisConfig", "description": "Specific axis config for y-axis along the right edge of the chart." }, "axisTop": { "$ref": "#/definitions/AxisConfig", "description": "Specific axis config for x-axis along the top edge of the chart." }, "axisX": { "$ref": "#/definitions/AxisConfig", "description": "X-axis specific config." }, "axisY": { "$ref": "#/definitions/AxisConfig", "description": "Y-axis specific config." }, "background": { "description": "CSS color property to use as the background of the whole Vega-Lite view\n\n__Default value:__ none (transparent)", "type": "string" }, "bar": { "$ref": "#/definitions/RectConfig", "description": "Bar-Specific Config" }, "boxplot": { "$ref": "#/definitions/BoxPlotConfig", "description": "Box Config" }, "circle": { "$ref": "#/definitions/MarkConfig", "description": "Circle-Specific Config" }, "concat": { "$ref": "#/definitions/CompositionConfig", "description": "Default configuration for all concatenation view composition operators (`concat`, `hconcat`, and `vconcat`)" }, "countTitle": { "description": "Default axis and legend title for count fields.\n\n__Default value:__ `'Count of Records`.", "type": "string" }, "errorband": { "$ref": "#/definitions/ErrorBandConfig", "description": "ErrorBand Config" }, "errorbar": { "$ref": "#/definitions/ErrorBarConfig", "description": "ErrorBar Config" }, "facet": { "$ref": "#/definitions/CompositionConfig", "description": "Default configuration for the `facet` view composition operator" }, "fieldTitle": { "description": "Defines how Vega-Lite generates title for fields. There are three possible styles:\n- `\"verbal\"` (Default) - displays function in a verbal style (e.g., \"Sum of field\", \"Year-month of date\", \"field (binned)\").\n- `\"function\"` - displays function using parentheses and capitalized texts (e.g., \"SUM(field)\", \"YEARMONTH(date)\", \"BIN(field)\").\n- `\"plain\"` - displays only the field name without functions (e.g., \"field\", \"date\", \"field\").", "enum": [ "verbal", "functional", "plain" ], "type": "string" }, "geoshape": { "$ref": "#/definitions/MarkConfig", "description": "Geoshape-Specific Config" }, "header": { "$ref": "#/definitions/HeaderConfig", "description": "Header configuration, which determines default properties for all [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)." }, "headerColumn": { "$ref": "#/definitions/HeaderConfig", "description": "Header configuration, which determines default properties for column [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)." }, "headerFacet": { "$ref": "#/definitions/HeaderConfig", "description": "Header configuration, which determines default properties for non-row/column facet [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)." }, "headerRow": { "$ref": "#/definitions/HeaderConfig", "description": "Header configuration, which determines default properties for row [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)." }, "invalidValues": { "description": "Defines how Vega-Lite should handle invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.", "enum": [ "filter", null ], "type": [ "string", "null" ] }, "legend": { "$ref": "#/definitions/LegendConfig", "description": "Legend configuration, which determines default properties for all [legends](https://vega.github.io/vega-lite/docs/legend.html). For a full list of legend configuration options, please see the [corresponding section of in the legend documentation](https://vega.github.io/vega-lite/docs/legend.html#config)." }, "line": { "$ref": "#/definitions/LineConfig", "description": "Line-Specific Config" }, "mark": { "$ref": "#/definitions/MarkConfig", "description": "Mark Config" }, "numberFormat": { "description": "D3 Number format for guide labels and text marks. For example \"s\" for SI units. Use [D3's number format pattern](https://github.com/d3/d3-format#locale_format).", "type": "string" }, "padding": { "$ref": "#/definitions/Padding", "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`" }, "point": { "$ref": "#/definitions/MarkConfig", "description": "Point-Specific Config" }, "projection": { "$ref": "#/definitions/ProjectionConfig", "description": "Projection configuration, which determines default properties for all [projections](https://vega.github.io/vega-lite/docs/projection.html). For a full list of projection configuration options, please see the [corresponding section of the projection documentation](https://vega.github.io/vega-lite/docs/projection.html#config)." }, "range": { "$ref": "#/definitions/RangeConfig", "description": "An object hash that defines default range arrays or schemes for using with scales.\nFor a full list of scale range configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config)." }, "rect": { "$ref": "#/definitions/RectConfig", "description": "Rect-Specific Config" }, "repeat": { "$ref": "#/definitions/CompositionConfig", "description": "Default configuration for the `repeat` view composition operator" }, "rule": { "$ref": "#/definitions/MarkConfig", "description": "Rule-Specific Config" }, "scale": { "$ref": "#/definitions/ScaleConfig", "description": "Scale configuration determines default properties for all [scales](https://vega.github.io/vega-lite/docs/scale.html). For a full list of scale configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config)." }, "selection": { "$ref": "#/definitions/SelectionConfig", "description": "An object hash for defining default properties for each type of selections." }, "square": { "$ref": "#/definitions/MarkConfig", "description": "Square-Specific Config" }, "stack": { "$ref": "#/definitions/StackOffset", "description": "Default stack offset for stackable mark." }, "style": { "$ref": "#/definitions/StyleConfigIndex", "description": "An object hash that defines key-value mappings to determine default properties for marks with a given [style](https://vega.github.io/vega-lite/docs/mark.html#mark-def). The keys represent styles names; the values have to be valid [mark configuration objects](https://vega.github.io/vega-lite/docs/mark.html#config)." }, "text": { "$ref": "#/definitions/TextConfig", "description": "Text-Specific Config" }, "tick": { "$ref": "#/definitions/TickConfig", "description": "Tick-Specific Config" }, "timeFormat": { "description": "Default time format for raw time values (without time units) in text marks, legend labels and header labels.\n\n__Default value:__ `\"%b %d, %Y\"`\n__Note:__ Axes automatically determine format each label automatically so this config would not affect axes.", "type": "string" }, "title": { "$ref": "#/definitions/TitleConfig", "description": "Title configuration, which determines default properties for all [titles](https://vega.github.io/vega-lite/docs/title.html). For a full list of title configuration options, please see the [corresponding section of the title documentation](https://vega.github.io/vega-lite/docs/title.html#config)." }, "trail": { "$ref": "#/definitions/LineConfig", "description": "Trail-Specific Config" }, "view": { "$ref": "#/definitions/ViewConfig", "description": "Default properties for [single view plots](https://vega.github.io/vega-lite/docs/spec.html#single)." } }, "type": "object" }, "CsvDataFormat": { "additionalProperties": false, "properties": { "parse": { "anyOf": [ { "$ref": "#/definitions/Parse" }, { "type": "null" } ], "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data.\nAlternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)).\nFor example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\nFor Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)" }, "type": { "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n\n__Default value:__ The default format type is determined by the extension of the file URL.\nIf no extension is detected, `\"json\"` will be used by default.", "enum": [ "csv", "tsv" ], "type": "string" } }, "type": "object" }, "Cursor": { "enum": [ "auto", "default", "none", "context-menu", "help", "pointer", "progress", "wait", "cell", "crosshair", "text", "vertical-text", "alias", "copy", "move", "no-drop", "not-allowed", "e-resize", "n-resize", "ne-resize", "nw-resize", "s-resize", "se-resize", "sw-resize", "w-resize", "ew-resize", "ns-resize", "nesw-resize", "nwse-resize", "col-resize", "row-resize", "all-scroll", "zoom-in", "zoom-out", "grab", "grabbing" ], "type": "string" }, "Data": { "anyOf": [ { "$ref": "#/definitions/DataSource" }, { "$ref": "#/definitions/Generator" } ] }, "DataFormat": { "anyOf": [ { "$ref": "#/definitions/CsvDataFormat" }, { "$ref": "#/definitions/DsvDataFormat" }, { "$ref": "#/definitions/JsonDataFormat" }, { "$ref": "#/definitions/TopoDataFormat" } ] }, "DataSource": { "anyOf": [ { "$ref": "#/definitions/UrlData" }, { "$ref": "#/definitions/InlineData" }, { "$ref": "#/definitions/NamedData" } ] }, "Datasets": { "$ref": "#/definitions/Dict" }, "DateTime": { "additionalProperties": false, "description": "Object for defining datetime in Vega-Lite Filter.\nIf both month and quarter are provided, month has higher precedence.\n`day` cannot be combined with other date.\nWe accept string for month and day names.", "properties": { "date": { "description": "Integer value representing the date from 1-31.", "maximum": 31, "minimum": 1, "type": "number" }, "day": { "anyOf": [ { "$ref": "#/definitions/Day" }, { "type": "string" } ], "description": "Value representing the day of a week. This can be one of: (1) integer value -- `1` represents Monday; (2) case-insensitive day name (e.g., `\"Monday\"`); (3) case-insensitive, 3-character short day name (e.g., `\"Mon\"`).
**Warning:** A DateTime definition object with `day`** should not be combined with `year`, `quarter`, `month`, or `date`." }, "hours": { "description": "Integer value representing the hour of a day from 0-23.", "maximum": 23, "minimum": 0, "type": "number" }, "milliseconds": { "description": "Integer value representing the millisecond segment of time.", "maximum": 999, "minimum": 0, "type": "number" }, "minutes": { "description": "Integer value representing the minute segment of time from 0-59.", "maximum": 59, "minimum": 0, "type": "number" }, "month": { "anyOf": [ { "$ref": "#/definitions/Month" }, { "type": "string" } ], "description": "One of: (1) integer value representing the month from `1`-`12`. `1` represents January; (2) case-insensitive month name (e.g., `\"January\"`); (3) case-insensitive, 3-character short month name (e.g., `\"Jan\"`)." }, "quarter": { "description": "Integer value representing the quarter of the year (from 1-4).", "maximum": 4, "minimum": 1, "type": "number" }, "seconds": { "description": "Integer value representing the second segment (0-59) of a time value", "maximum": 59, "minimum": 0, "type": "number" }, "utc": { "description": "A boolean flag indicating if date time is in utc time. If false, the date time is in local time", "type": "boolean" }, "year": { "description": "Integer value representing the year.", "type": "number" } }, "type": "object" }, "Day": { "maximum": 7, "minimum": 1, "type": "number" }, "Dict": { "additionalProperties": { "$ref": "#/definitions/InlineDataset" }, "type": "object" }, "Dir": { "enum": [ "ltr", "rtl" ], "type": "string" }, "DsvDataFormat": { "additionalProperties": false, "properties": { "delimiter": { "description": "The delimiter between records. The delimiter must be a single character (i.e., a single 16-bit code unit); so, ASCII delimiters are fine, but emoji delimiters are not.", "maxLength": 1, "minLength": 1, "type": "string" }, "parse": { "anyOf": [ { "$ref": "#/definitions/Parse" }, { "type": "null" } ], "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data.\nAlternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)).\nFor example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\nFor Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)" }, "type": { "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n\n__Default value:__ The default format type is determined by the extension of the file URL.\nIf no extension is detected, `\"json\"` will be used by default.", "enum": [ "dsv" ], "type": "string" } }, "required": [ "delimiter" ], "type": "object" }, "Element": { "type": "string" }, "EncodingSortField": { "additionalProperties": false, "description": "A sort definition for sorting a discrete scale in an encoding field definition.", "properties": { "field": { "$ref": "#/definitions/Field", "description": "The data [field](https://vega.github.io/vega-lite/docs/field.html) to sort by.\n\n__Default value:__ If unspecified, defaults to the field specified in the outer data reference." }, "op": { "$ref": "#/definitions/AggregateOp", "description": "An [aggregate operation](https://vega.github.io/vega-lite/docs/aggregate.html#ops) to perform on the field prior to sorting (e.g., `\"count\"`, `\"mean\"` and `\"median\"`).\nAn aggregation is required when there are multiple values of the sort field for each encoded data field.\nThe input data objects will be aggregated, grouped by the encoded data field.\n\nFor a full list of operations, please see the documentation for [aggregate](https://vega.github.io/vega-lite/docs/aggregate.html#ops).\n\n__Default value:__ `\"sum\"` for stacked plots. Otherwise, `\"mean\"`." }, "order": { "anyOf": [ { "$ref": "#/definitions/SortOrder" }, { "type": "null" } ], "description": "The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort)." } }, "type": "object" }, "ErrorBand": { "enum": [ "errorband" ], "type": "string" }, "ErrorBandConfig": { "additionalProperties": false, "properties": { "band": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "borders": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "extent": { "$ref": "#/definitions/ErrorBarExtent", "description": "The extent of the band. Available options include:\n- `\"ci\"`: Extend the band to the confidence interval of the mean.\n- `\"stderr\"`: The size of band are set to the value of standard error, extending from the mean.\n- `\"stdev\"`: The size of band are set to the value of standard deviation, extending from the mean.\n- `\"iqr\"`: Extend the band to the q1 and q3.\n\n__Default value:__ `\"stderr\"`." }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method for the error band. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values.\n- `\"step-before\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value.\n- `\"step-after\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "tension": { "description": "The tension parameter for the interpolation type of the error band.", "maximum": 1, "minimum": 0, "type": "number" } }, "type": "object" }, "ErrorBandDef": { "additionalProperties": false, "properties": { "band": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "borders": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "clip": { "description": "Whether a composite mark be clipped to the enclosing group’s width and height.", "type": "boolean" }, "color": { "$ref": "#/definitions/Color", "description": "Default color. Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)." }, "extent": { "$ref": "#/definitions/ErrorBarExtent", "description": "The extent of the band. Available options include:\n- `\"ci\"`: Extend the band to the confidence interval of the mean.\n- `\"stderr\"`: The size of band are set to the value of standard error, extending from the mean.\n- `\"stdev\"`: The size of band are set to the value of standard deviation, extending from the mean.\n- `\"iqr\"`: Extend the band to the q1 and q3.\n\n__Default value:__ `\"stderr\"`." }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method for the error band. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values.\n- `\"step-before\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value.\n- `\"step-after\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "opacity": { "description": "The opacity (value between [0,1]) of the mark.", "type": "number" }, "orient": { "$ref": "#/definitions/Orientation", "description": "Orientation of the error band. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined." }, "tension": { "description": "The tension parameter for the interpolation type of the error band.", "maximum": 1, "minimum": 0, "type": "number" }, "type": { "$ref": "#/definitions/ErrorBand", "description": "The mark type. This could a primitive mark type\n(one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`)\nor a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`)." } }, "required": [ "type" ], "type": "object" }, "ErrorBar": { "enum": [ "errorbar" ], "type": "string" }, "ErrorBarConfig": { "additionalProperties": false, "properties": { "extent": { "$ref": "#/definitions/ErrorBarExtent", "description": "The extent of the rule. Available options include:\n- `\"ci\"`: Extend the rule to the confidence interval of the mean.\n- `\"stderr\"`: The size of rule are set to the value of standard error, extending from the mean.\n- `\"stdev\"`: The size of rule are set to the value of standard deviation, extending from the mean.\n- `\"iqr\"`: Extend the rule to the q1 and q3.\n\n__Default value:__ `\"stderr\"`." }, "rule": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "ticks": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] } }, "type": "object" }, "ErrorBarDef": { "additionalProperties": false, "properties": { "clip": { "description": "Whether a composite mark be clipped to the enclosing group’s width and height.", "type": "boolean" }, "color": { "$ref": "#/definitions/Color", "description": "Default color. Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)." }, "extent": { "$ref": "#/definitions/ErrorBarExtent", "description": "The extent of the rule. Available options include:\n- `\"ci\"`: Extend the rule to the confidence interval of the mean.\n- `\"stderr\"`: The size of rule are set to the value of standard error, extending from the mean.\n- `\"stdev\"`: The size of rule are set to the value of standard deviation, extending from the mean.\n- `\"iqr\"`: Extend the rule to the q1 and q3.\n\n__Default value:__ `\"stderr\"`." }, "opacity": { "description": "The opacity (value between [0,1]) of the mark.", "type": "number" }, "orient": { "$ref": "#/definitions/Orientation", "description": "Orientation of the error bar. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined." }, "rule": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "ticks": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "type": { "$ref": "#/definitions/ErrorBar", "description": "The mark type. This could a primitive mark type\n(one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`)\nor a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`)." } }, "required": [ "type" ], "type": "object" }, "ErrorBarExtent": { "enum": [ "ci", "iqr", "stderr", "stdev" ], "type": "string" }, "EventStream": { }, "FacetFieldDef": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "header": { "$ref": "#/definitions/Header", "description": "An object defining properties of a facet's header." }, "sort": { "anyOf": [ { "$ref": "#/definitions/SortArray" }, { "$ref": "#/definitions/SortOrder" }, { "$ref": "#/definitions/EncodingSortField" }, { "type": "null" } ], "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in Javascript.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "FacetMapping": { "additionalProperties": false, "properties": { "column": { "$ref": "#/definitions/FacetFieldDef", "description": "A field definition for the horizontal facet of trellis plots." }, "row": { "$ref": "#/definitions/FacetFieldDef", "description": "A field definition for the vertical facet of trellis plots." } }, "type": "object" }, "FacetedEncoding": { "additionalProperties": false, "properties": { "color": { "anyOf": [ { "$ref": "#/definitions/StringFieldDefWithCondition" }, { "$ref": "#/definitions/StringValueDefWithCondition" } ], "description": "Color of the marks – either fill or stroke color based on the `filled` property of mark definition.\nBy default, `color` represents fill color for `\"area\"`, `\"bar\"`, `\"tick\"`,\n`\"text\"`, `\"trail\"`, `\"circle\"`, and `\"square\"` / stroke color for `\"line\"` and `\"point\"`.\n\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `color` property.\n\n_Note:_\n1) For fine-grained control over both fill and stroke colors of the marks, please use the `fill` and `stroke` channels. If either `fill` or `stroke` channel is specified, `color` channel will be ignored.\n2) See the scale documentation for more information about customizing [color scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme)." }, "column": { "$ref": "#/definitions/FacetFieldDef", "description": "A field definition for the horizontal facet of trellis plots." }, "detail": { "anyOf": [ { "$ref": "#/definitions/FieldDefWithoutScale" }, { "items": { "$ref": "#/definitions/FieldDefWithoutScale" }, "type": "array" } ], "description": "Additional levels of detail for grouping data in aggregate views and\nin line, trail, and area marks without mapping data to a specific visual channel." }, "facet": { "$ref": "#/definitions/FacetFieldDef", "description": "A field definition for the (flexible) facet of trellis plots.\n\nIf either `row` or `column` is specified, this channel will be ignored." }, "fill": { "anyOf": [ { "$ref": "#/definitions/StringFieldDefWithCondition" }, { "$ref": "#/definitions/StringValueDefWithCondition" } ], "description": "Fill color of the marks.\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `color` property.\n\n_Note:_ When using `fill` channel, `color ` channel will be ignored. To customize both fill and stroke, please use `fill` and `stroke` channels (not `fill` and `color`)." }, "fillOpacity": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueDefWithCondition" } ], "description": "Fill opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `fillOpacity` property." }, "href": { "anyOf": [ { "$ref": "#/definitions/TextFieldDefWithCondition" }, { "$ref": "#/definitions/TextValueDefWithCondition" } ], "description": "A URL to load upon mouse click." }, "key": { "$ref": "#/definitions/FieldDefWithoutScale", "description": "A data field to use as a unique key for data binding. When a visualization’s data is updated, the key value will be used to match data elements to existing mark instances. Use a key channel to enable object constancy for transitions over dynamic data." }, "latitude": { "anyOf": [ { "$ref": "#/definitions/LatLongFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Latitude position of geographically projected marks." }, "latitude2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Latitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`." }, "longitude": { "anyOf": [ { "$ref": "#/definitions/LatLongFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Longitude position of geographically projected marks." }, "longitude2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Longitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`." }, "opacity": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueDefWithCondition" } ], "description": "Opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `opacity` property." }, "order": { "anyOf": [ { "$ref": "#/definitions/OrderFieldDef" }, { "items": { "$ref": "#/definitions/OrderFieldDef" }, "type": "array" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Order of the marks.\n- For stacked marks, this `order` channel encodes [stack order](https://vega.github.io/vega-lite/docs/stack.html#order).\n- For line and trail marks, this `order` channel encodes order of data points in the lines. This can be useful for creating [a connected scatterplot](https://vega.github.io/vega-lite/examples/connected_scatterplot.html). Setting `order` to `{\"value\": null}` makes the line marks use the original order in the data sources.\n- Otherwise, this `order` channel encodes layer order of the marks.\n\n__Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating additional aggregation grouping." }, "row": { "$ref": "#/definitions/FacetFieldDef", "description": "A field definition for the vertical facet of trellis plots." }, "shape": { "anyOf": [ { "$ref": "#/definitions/ShapeFieldDefWithCondition" }, { "$ref": "#/definitions/ShapeValueDefWithCondition" } ], "description": "Shape of the mark.\n\n1. For `point` marks the supported values include:\n - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n - the line symbol `\"stroke\"`\n - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n2. For `geoshape` marks it should be a field definition of the geojson data\n\n__Default value:__ If undefined, the default shape depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#point-config)'s `shape` property. (`\"circle\"` if unset.)" }, "size": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueDefWithCondition" } ], "description": "Size of the mark.\n- For `\"point\"`, `\"square\"` and `\"circle\"`, – the symbol size, or pixel area of the mark.\n- For `\"bar\"` and `\"tick\"` – the bar and tick's size.\n- For `\"text\"` – the text's font size.\n- Size is unsupported for `\"line\"`, `\"area\"`, and `\"rect\"`. (Use `\"trail\"` instead of line with varying size)" }, "stroke": { "anyOf": [ { "$ref": "#/definitions/StringFieldDefWithCondition" }, { "$ref": "#/definitions/StringValueDefWithCondition" } ], "description": "Stroke color of the marks.\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `color` property.\n\n_Note:_ When using `stroke` channel, `color ` channel will be ignored. To customize both stroke and fill, please use `stroke` and `fill` channels (not `stroke` and `color`)." }, "strokeOpacity": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueDefWithCondition" } ], "description": "Stroke opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `strokeOpacity` property." }, "strokeWidth": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueDefWithCondition" } ], "description": "Stroke width of the marks.\n\n__Default value:__ If undefined, the default stroke width depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `strokeWidth` property." }, "text": { "anyOf": [ { "$ref": "#/definitions/TextFieldDefWithCondition" }, { "$ref": "#/definitions/TextValueDefWithCondition" } ], "description": "Text of the `text` mark." }, "tooltip": { "anyOf": [ { "$ref": "#/definitions/TextFieldDefWithCondition" }, { "$ref": "#/definitions/TextValueDefWithCondition" }, { "items": { "$ref": "#/definitions/TextFieldDef" }, "type": "array" }, { "type": "null" } ], "description": "The tooltip text to show upon mouse hover." }, "x": { "anyOf": [ { "$ref": "#/definitions/PositionFieldDef" }, { "$ref": "#/definitions/XValueDef" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/XValueDef" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "xError": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`." }, "xError2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Secondary error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`." }, "y": { "anyOf": [ { "$ref": "#/definitions/PositionFieldDef" }, { "$ref": "#/definitions/YValueDef" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/YValueDef" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "yError": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`." }, "yError2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Secondary error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`." } }, "type": "object" }, "FacetedUnitSpec": { "additionalProperties": false, "description": "Unit spec that can have a composite mark and row or column channels (shorthand for a facet spec).", "properties": { "align": { "anyOf": [ { "$ref": "#/definitions/LayoutAlign" }, { "$ref": "#/definitions/RowCol" } ], "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`." }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/RowCol" } ], "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`" }, "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "encoding": { "$ref": "#/definitions/FacetedEncoding", "description": "A key-value mapping between encoding channels and definition of fields." }, "height": { "description": "The height of a visualization.\n\n__Default value:__\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its y-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For y-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the height is [determined by the range step, paddings, and the cardinality of the field mapped to y-channel](https://vega.github.io/vega-lite/docs/scale.html#band). Otherwise, if the `rangeStep` is `null`, the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `y` channel, the `height` will be the value of `rangeStep`.\n\n__Note__: For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.", "type": "number" }, "mark": { "$ref": "#/definitions/AnyMark", "description": "A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def)." }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "projection": { "$ref": "#/definitions/Projection", "description": "An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks\nand to `latitude` and `\"longitude\"` channels for other marks." }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "selection": { "additionalProperties": { "$ref": "#/definitions/SelectionDef" }, "description": "A key-value mapping between selection names and definitions.", "type": "object" }, "spacing": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/RowCol" } ], "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)" }, "title": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "view": { "$ref": "#/definitions/ViewBackground", "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)" }, "width": { "description": "The width of a visualization.\n\n__Default value:__ This will be determined by the following rules:\n\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its x-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For x-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the width is [determined by the range step, paddings, and the cardinality of the field mapped to x-channel](https://vega.github.io/vega-lite/docs/scale.html#band). Otherwise, if the `rangeStep` is `null`, the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `x` channel, the `width` will be the value of [`config.scale.textXRangeStep`](https://vega.github.io/vega-lite/docs/size.html#default-width-and-height) for `text` mark and the value of `rangeStep` for other marks.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.", "type": "number" } }, "required": [ "mark" ], "type": "object" }, "Field": { "anyOf": [ { "$ref": "#/definitions/FieldName" }, { "$ref": "#/definitions/RepeatRef" } ] }, "FieldDefWithCondition": { "additionalProperties": false, "description": "A FieldDef with Condition\n{\n condition: {value: ...},\n field: ...,\n ...\n}", "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalStringValueDef" }, { "items": { "$ref": "#/definitions/ConditionalStringValueDef" }, "type": "array" } ], "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\nsince Vega-Lite only allows at most one encoded field per encoding channel." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "legend": { "anyOf": [ { "$ref": "#/definitions/Legend" }, { "type": "null" } ], "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation." }, "scale": { "anyOf": [ { "$ref": "#/definitions/Scale" }, { "type": "null" } ], "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation." }, "sort": { "$ref": "#/definitions/Sort", "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in Javascript.\n- [A sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) for sorting by another encoding channel. (This type of sort definition is not available for `row` and `column` channels.)\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "FieldDefWithCondition": { "additionalProperties": false, "description": "A FieldDef with Condition\n{\n condition: {value: ...},\n field: ...,\n ...\n}", "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalNumberValueDef" }, { "items": { "$ref": "#/definitions/ConditionalNumberValueDef" }, "type": "array" } ], "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\nsince Vega-Lite only allows at most one encoded field per encoding channel." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "legend": { "anyOf": [ { "$ref": "#/definitions/Legend" }, { "type": "null" } ], "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation." }, "scale": { "anyOf": [ { "$ref": "#/definitions/Scale" }, { "type": "null" } ], "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation." }, "sort": { "$ref": "#/definitions/Sort", "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in Javascript.\n- [A sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) for sorting by another encoding channel. (This type of sort definition is not available for `row` and `column` channels.)\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "FieldDefWithCondition,(string|null)>": { "additionalProperties": false, "description": "A FieldDef with Condition\n{\n condition: {value: ...},\n field: ...,\n ...\n}", "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalStringValueDef" }, { "items": { "$ref": "#/definitions/ConditionalStringValueDef" }, "type": "array" } ], "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\nsince Vega-Lite only allows at most one encoded field per encoding channel." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "legend": { "anyOf": [ { "$ref": "#/definitions/Legend" }, { "type": "null" } ], "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation." }, "scale": { "anyOf": [ { "$ref": "#/definitions/Scale" }, { "type": "null" } ], "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation." }, "sort": { "$ref": "#/definitions/Sort", "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in Javascript.\n- [A sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) for sorting by another encoding channel. (This type of sort definition is not available for `row` and `column` channels.)\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "type": { "$ref": "#/definitions/TypeForShape", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "FieldDefWithCondition": { "additionalProperties": false, "description": "A FieldDef with Condition\n{\n condition: {value: ...},\n field: ...,\n ...\n}", "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "enum": [ "binned" ], "type": "string" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalValueDef" }, { "items": { "$ref": "#/definitions/ConditionalValueDef" }, "type": "array" } ], "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\nsince Vega-Lite only allows at most one encoded field per encoding channel." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "format": { "description": "The text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\n__Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.", "type": "string" }, "formatType": { "description": "The format type for labels (`\"number\"` or `\"time\"`).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.", "enum": [ "number", "time" ], "type": "string" }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "FieldDefWithoutScale": { "$ref": "#/definitions/TypedFieldDef", "description": "Field Def without scale (and without bin: \"binned\" support)." }, "FieldEqualPredicate": { "additionalProperties": false, "properties": { "equal": { "anyOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean" }, { "$ref": "#/definitions/DateTime" } ], "description": "The value that the field should be equal to." }, "field": { "$ref": "#/definitions/FieldName", "description": "Field to be filtered." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit for the field to be filtered." } }, "required": [ "equal", "field" ], "type": "object" }, "FieldGTEPredicate": { "additionalProperties": false, "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "Field to be filtered." }, "gte": { "anyOf": [ { "type": "string" }, { "type": "number" }, { "$ref": "#/definitions/DateTime" } ], "description": "The value that the field should be greater than or equals to." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit for the field to be filtered." } }, "required": [ "field", "gte" ], "type": "object" }, "FieldGTPredicate": { "additionalProperties": false, "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "Field to be filtered." }, "gt": { "anyOf": [ { "type": "string" }, { "type": "number" }, { "$ref": "#/definitions/DateTime" } ], "description": "The value that the field should be greater than." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit for the field to be filtered." } }, "required": [ "field", "gt" ], "type": "object" }, "FieldLTEPredicate": { "additionalProperties": false, "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "Field to be filtered." }, "lte": { "anyOf": [ { "type": "string" }, { "type": "number" }, { "$ref": "#/definitions/DateTime" } ], "description": "The value that the field should be less than or equals to." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit for the field to be filtered." } }, "required": [ "field", "lte" ], "type": "object" }, "FieldLTPredicate": { "additionalProperties": false, "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "Field to be filtered." }, "lt": { "anyOf": [ { "type": "string" }, { "type": "number" }, { "$ref": "#/definitions/DateTime" } ], "description": "The value that the field should be less than." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit for the field to be filtered." } }, "required": [ "field", "lt" ], "type": "object" }, "FieldName": { "type": "string" }, "FieldOneOfPredicate": { "additionalProperties": false, "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "Field to be filtered." }, "oneOf": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "items": { "type": "number" }, "type": "array" }, { "items": { "type": "boolean" }, "type": "array" }, { "items": { "$ref": "#/definitions/DateTime" }, "type": "array" } ], "description": "A set of values that the `field`'s value should be a member of,\nfor a data item included in the filtered data." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit for the field to be filtered." } }, "required": [ "field", "oneOf" ], "type": "object" }, "FieldRangePredicate": { "additionalProperties": false, "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "Field to be filtered." }, "range": { "description": "An array of inclusive minimum and maximum values\nfor a field value of a data item to be included in the filtered data.", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/DateTime" }, { "type": "null" } ] }, "maxItems": 2, "minItems": 2, "type": "array" }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit for the field to be filtered." } }, "required": [ "field", "range" ], "type": "object" }, "FieldValidPredicate": { "additionalProperties": false, "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "Field to be filtered." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit for the field to be filtered." }, "valid": { "description": "If set to true the field's value has to be valid, meaning both not `null` and not [`NaN`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN).", "type": "boolean" } }, "required": [ "field", "valid" ], "type": "object" }, "FilterTransform": { "additionalProperties": false, "properties": { "filter": { "$ref": "#/definitions/LogicalOperand", "description": "The `filter` property must be one of the predicate definitions:\n\n1) an [expression](https://vega.github.io/vega-lite/docs/types.html#expression) string,\nwhere `datum` can be used to refer to the current data object\n\n2) one of the field predicates: [`equal`](https://vega.github.io/vega-lite/docs/filter.html#equal-predicate),\n[`lt`](https://vega.github.io/vega-lite/docs/filter.html#lt-predicate),\n[`lte`](https://vega.github.io/vega-lite/docs/filter.html#lte-predicate),\n[`gt`](https://vega.github.io/vega-lite/docs/filter.html#gt-predicate),\n[`gte`](https://vega.github.io/vega-lite/docs/filter.html#gte-predicate),\n[`range`](https://vega.github.io/vega-lite/docs/filter.html#range-predicate),\n[`oneOf`](https://vega.github.io/vega-lite/docs/filter.html#one-of-predicate),\nor [`valid`](https://vega.github.io/vega-lite/docs/filter.html#valid-predicate),\n\n3) a [selection predicate](https://vega.github.io/vega-lite/docs/filter.html#selection-predicate)\n\n4) a logical operand that combines (1), (2), or (3)." } }, "required": [ "filter" ], "type": "object" }, "FlattenTransform": { "additionalProperties": false, "properties": { "as": { "description": "The output field names for extracted array values.\n\n__Default value:__ The field name of the corresponding array field", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "flatten": { "description": "An array of one or more data fields containing arrays to flatten.\nIf multiple fields are specified, their array values should have a parallel structure, ideally with the same length.\nIf the lengths of parallel arrays do not match,\nthe longest array will be used with `null` values added for missing entries.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" } }, "required": [ "flatten" ], "type": "object" }, "FoldTransform": { "additionalProperties": false, "properties": { "as": { "description": "The output field names for the key and value properties produced by the fold transform.\n__Default value:__ `[\"key\", \"value\"]`", "items": [ { "$ref": "#/definitions/FieldName" }, { "$ref": "#/definitions/FieldName" } ], "maxItems": 2, "minItems": 2, "type": "array" }, "fold": { "description": "An array of data fields indicating the properties to fold.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" } }, "required": [ "fold" ], "type": "object" }, "FontStyle": { "type": "string" }, "FontWeight": { "enum": [ "normal", "bold", "lighter", "bolder", 100, 200, 300, 400, 500, 600, 700, 800, 900 ], "type": [ "string", "number" ] }, "Generator": { "anyOf": [ { "$ref": "#/definitions/SequenceGenerator" }, { "$ref": "#/definitions/SphereGenerator" }, { "$ref": "#/definitions/GraticuleGenerator" } ] }, "ConcatSpec": { "additionalProperties": false, "description": "Base interface for a generalized concatenation specification.", "properties": { "align": { "anyOf": [ { "$ref": "#/definitions/LayoutAlign" }, { "$ref": "#/definitions/RowCol" } ], "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`." }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/RowCol" } ], "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`" }, "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "concat": { "description": "A list of views to be concatenated.", "items": { "$ref": "#/definitions/Spec" }, "type": "array" }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/RowCol" } ], "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)" }, "title": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" } }, "required": [ "concat" ], "type": "object" }, "FacetSpec": { "additionalProperties": false, "description": "Base interface for a facet specification.", "properties": { "align": { "anyOf": [ { "$ref": "#/definitions/LayoutAlign" }, { "$ref": "#/definitions/RowCol" } ], "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`." }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/RowCol" } ], "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`" }, "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "facet": { "anyOf": [ { "$ref": "#/definitions/FacetFieldDef" }, { "$ref": "#/definitions/FacetMapping" } ], "description": "Definition for how to facet the data. One of:\n1) [a field definition for faceting the plot by one field](https://vega.github.io/vega-lite/docs/facet.html#field-def)\n2) [An object that maps `row` and `column` channels to their field definitions](https://vega.github.io/vega-lite/docs/facet.html#mapping)" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/RowCol" } ], "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)" }, "spec": { "anyOf": [ { "$ref": "#/definitions/LayerSpec" }, { "$ref": "#/definitions/FacetedUnitSpec" } ], "description": "A specification of the view that gets faceted." }, "title": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" } }, "required": [ "facet", "spec" ], "type": "object" }, "HConcatSpec": { "additionalProperties": false, "description": "Base interface for a horizontal concatenation specification.", "properties": { "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`", "type": "boolean" }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "hconcat": { "description": "A list of views to be concatenated and put into a row.", "items": { "$ref": "#/definitions/Spec" }, "type": "array" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`", "type": "number" }, "title": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" } }, "required": [ "hconcat" ], "type": "object" }, "RepeatSpec": { "additionalProperties": false, "description": "Base interface for a repeat specification.", "properties": { "align": { "anyOf": [ { "$ref": "#/definitions/LayoutAlign" }, { "$ref": "#/definitions/RowCol" } ], "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`." }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/RowCol" } ], "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`" }, "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "repeat": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "$ref": "#/definitions/RepeatMapping" } ], "description": "Definition for fields to be repeated. One of:\n1) An array of fields to be repeated. If `\"repeat\"` is an array, the field can be referred using `{\"repeat\": \"repeat\"}`\n2) An object that mapped `\"row\"` and/or `\"column\"` to the listed of fields to be repeated along the particular orientations. The objects `{\"repeat\": \"row\"}` and `{\"repeat\": \"column\"}` can be used to refer to the repeated field respectively." }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/RowCol" } ], "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)" }, "spec": { "$ref": "#/definitions/Spec", "description": "A specification of the view that gets repeated." }, "title": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" } }, "required": [ "repeat", "spec" ], "type": "object" }, "Spec": { "anyOf": [ { "$ref": "#/definitions/FacetedUnitSpec" }, { "$ref": "#/definitions/LayerSpec" }, { "$ref": "#/definitions/FacetSpec" }, { "$ref": "#/definitions/RepeatSpec" }, { "$ref": "#/definitions/ConcatSpec" }, { "$ref": "#/definitions/VConcatSpec" }, { "$ref": "#/definitions/HConcatSpec" } ], "description": "Any specification in Vega-Lite." }, "GenericUnitSpec": { "additionalProperties": false, "description": "Base interface for a unit (single-view) specification.", "properties": { "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "encoding": { "$ref": "#/definitions/Encoding", "description": "A key-value mapping between encoding channels and definition of fields." }, "height": { "description": "The height of a visualization.\n\n__Default value:__\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its y-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For y-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the height is [determined by the range step, paddings, and the cardinality of the field mapped to y-channel](https://vega.github.io/vega-lite/docs/scale.html#band). Otherwise, if the `rangeStep` is `null`, the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `y` channel, the `height` will be the value of `rangeStep`.\n\n__Note__: For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.", "type": "number" }, "mark": { "$ref": "#/definitions/AnyMark", "description": "A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def)." }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "projection": { "$ref": "#/definitions/Projection", "description": "An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks\nand to `latitude` and `\"longitude\"` channels for other marks." }, "selection": { "additionalProperties": { "$ref": "#/definitions/SelectionDef" }, "description": "A key-value mapping between selection names and definitions.", "type": "object" }, "title": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "view": { "$ref": "#/definitions/ViewBackground", "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)" }, "width": { "description": "The width of a visualization.\n\n__Default value:__ This will be determined by the following rules:\n\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its x-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For x-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the width is [determined by the range step, paddings, and the cardinality of the field mapped to x-channel](https://vega.github.io/vega-lite/docs/scale.html#band). Otherwise, if the `rangeStep` is `null`, the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `x` channel, the `width` will be the value of [`config.scale.textXRangeStep`](https://vega.github.io/vega-lite/docs/size.html#default-width-and-height) for `text` mark and the value of `rangeStep` for other marks.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.", "type": "number" } }, "required": [ "mark" ], "type": "object" }, "VConcatSpec": { "additionalProperties": false, "description": "Base interface for a vertical concatenation specification.", "properties": { "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`", "type": "boolean" }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`", "type": "number" }, "title": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "vconcat": { "description": "A list of views to be concatenated and put into a column.", "items": { "$ref": "#/definitions/Spec" }, "type": "array" } }, "required": [ "vconcat" ], "type": "object" }, "GraticuleGenerator": { "additionalProperties": false, "properties": { "graticule": { "anyOf": [ { "enum": [ true ], "type": "boolean" }, { "$ref": "#/definitions/GraticuleParams" } ], "description": "Generate graticule GeoJSON data for geographic reference lines." }, "name": { "description": "Provide a placeholder name and bind data at runtime.", "type": "string" } }, "required": [ "graticule" ], "type": "object" }, "GraticuleParams": { "additionalProperties": false, "properties": { "extent": { "description": "Sets both the major and minor extents to the same values.", "items": { "items": { "type": "number" }, "type": "array" }, "type": "array" }, "extentMajor": { "description": "The major extent of the graticule as a two-element array of coordinates.", "items": { "items": { "type": "number" }, "type": "array" }, "type": "array" }, "extentMinor": { "description": "The minor extent of the graticule as a two-element array of coordinates.", "items": { "items": { "type": "number" }, "type": "array" }, "type": "array" }, "precision": { "description": "The precision of the graticule in degrees.\n\n__Default value:__ `2.5`", "type": "number" }, "step": { "description": "Sets both the major and minor step angles to the same values.", "items": { "type": "number" }, "type": "array" }, "stepMajor": { "description": "The major step angles of the graticule.\n\n\n__Default value:__ `[90, 360]`", "items": { "type": "number" }, "type": "array" }, "stepMinor": { "description": "The minor step angles of the graticule.\n\n__Default value:__ `[10, 10]`", "items": { "type": "number" }, "type": "array" } }, "type": "object" }, "Header": { "additionalProperties": false, "description": "Headers of row / column channels for faceted plots.", "properties": { "format": { "description": "The text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\n__Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.", "type": "string" }, "formatType": { "description": "The format type for labels (`\"number\"` or `\"time\"`).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.", "enum": [ "number", "time" ], "type": "string" }, "labelAlign": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment of header labels." }, "labelAnchor": { "$ref": "#/definitions/TitleAnchor", "description": "The anchor position for placing the labels. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label." }, "labelAngle": { "description": "The rotation angle of the header labels.\n\n__Default value:__ `0` for column header, `-90` for row header.", "maximum": 360, "minimum": -360, "type": "number" }, "labelColor": { "$ref": "#/definitions/Color", "description": "The color of the header label, can be in hex color code or regular color name." }, "labelFont": { "description": "The font of the header label.", "type": "string" }, "labelFontSize": { "description": "The font size of the header label, in pixels.", "minimum": 0, "type": "number" }, "labelFontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style of the header label." }, "labelLimit": { "description": "The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit", "type": "number" }, "labelOrient": { "$ref": "#/definitions/Orient", "description": "The orientation of the header label. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`." }, "labelPadding": { "description": "The padding, in pixel, between facet header's label and the plot.\n\n__Default value:__ `10`", "type": "number" }, "labels": { "description": "A boolean flag indicating if labels should be included as part of the header.\n\n__Default value:__ `true`.", "type": "boolean" }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "titleAlign": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment (to the anchor) of header titles." }, "titleAnchor": { "$ref": "#/definitions/TitleAnchor", "description": "The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title." }, "titleAngle": { "description": "The rotation angle of the header title.\n\n__Default value:__ `0`.", "maximum": 360, "minimum": -360, "type": "number" }, "titleBaseline": { "$ref": "#/definitions/TextBaseline", "description": "Vertical text baseline for the header title. One of `\"top\"`, `\"bottom\"`, `\"middle\"`.\n\n__Default value:__ `\"middle\"`" }, "titleColor": { "$ref": "#/definitions/Color", "description": "Color of the header title, can be in hex color code or regular color name." }, "titleFont": { "description": "Font of the header title. (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "titleFontSize": { "description": "Font size of the header title.", "minimum": 0, "type": "number" }, "titleFontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style of the header title." }, "titleFontWeight": { "$ref": "#/definitions/FontWeight", "description": "Font weight of the header title.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "titleLimit": { "description": "The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit", "type": "number" }, "titleOrient": { "$ref": "#/definitions/Orient", "description": "The orientation of the header title. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`." }, "titlePadding": { "description": "The padding, in pixel, between facet header's title and the label.\n\n__Default value:__ `10`", "type": "number" } }, "type": "object" }, "HeaderConfig": { "additionalProperties": false, "properties": { "format": { "description": "The text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\n__Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.", "type": "string" }, "formatType": { "description": "The format type for labels (`\"number\"` or `\"time\"`).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.", "enum": [ "number", "time" ], "type": "string" }, "labelAlign": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment of header labels." }, "labelAnchor": { "$ref": "#/definitions/TitleAnchor", "description": "The anchor position for placing the labels. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label." }, "labelAngle": { "description": "The rotation angle of the header labels.\n\n__Default value:__ `0` for column header, `-90` for row header.", "maximum": 360, "minimum": -360, "type": "number" }, "labelColor": { "$ref": "#/definitions/Color", "description": "The color of the header label, can be in hex color code or regular color name." }, "labelFont": { "description": "The font of the header label.", "type": "string" }, "labelFontSize": { "description": "The font size of the header label, in pixels.", "minimum": 0, "type": "number" }, "labelFontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style of the header label." }, "labelLimit": { "description": "The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit", "type": "number" }, "labelOrient": { "$ref": "#/definitions/Orient", "description": "The orientation of the header label. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`." }, "labelPadding": { "description": "The padding, in pixel, between facet header's label and the plot.\n\n__Default value:__ `10`", "type": "number" }, "labels": { "description": "A boolean flag indicating if labels should be included as part of the header.\n\n__Default value:__ `true`.", "type": "boolean" }, "shortTimeLabels": { "description": "Whether month names and weekday names should be abbreviated.\n\n__Default value:__ `false`", "type": "boolean" }, "title": { "description": "Set to null to disable title for the axis, legend, or header.", "type": "null" }, "titleAlign": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment (to the anchor) of header titles." }, "titleAnchor": { "$ref": "#/definitions/TitleAnchor", "description": "The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title." }, "titleAngle": { "description": "The rotation angle of the header title.\n\n__Default value:__ `0`.", "maximum": 360, "minimum": -360, "type": "number" }, "titleBaseline": { "$ref": "#/definitions/TextBaseline", "description": "Vertical text baseline for the header title. One of `\"top\"`, `\"bottom\"`, `\"middle\"`.\n\n__Default value:__ `\"middle\"`" }, "titleColor": { "$ref": "#/definitions/Color", "description": "Color of the header title, can be in hex color code or regular color name." }, "titleFont": { "description": "Font of the header title. (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "titleFontSize": { "description": "Font size of the header title.", "minimum": 0, "type": "number" }, "titleFontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style of the header title." }, "titleFontWeight": { "$ref": "#/definitions/FontWeight", "description": "Font weight of the header title.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "titleLimit": { "description": "The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit", "type": "number" }, "titleOrient": { "$ref": "#/definitions/Orient", "description": "The orientation of the header title. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`." }, "titlePadding": { "description": "The padding, in pixel, between facet header's title and the label.\n\n__Default value:__ `10`", "type": "number" } }, "type": "object" }, "HexColor": { "format": "color-hex", "type": "string" }, "ImputeMethod": { "enum": [ "value", "median", "max", "min", "mean" ], "type": "string" }, "ImputeParams": { "additionalProperties": false, "properties": { "frame": { "description": "A frame specification as a two-element array used to control the window over which the specified method is applied. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. For example, the value `[-5, 5]` indicates that the window should include five objects preceding and five objects following the current object.\n\n__Default value:__: `[null, null]` indicating that the window includes all objects.", "items": { "type": [ "null", "number" ] }, "type": "array" }, "keyvals": { "anyOf": [ { "items": { }, "type": "array" }, { "$ref": "#/definitions/ImputeSequence" } ], "description": "Defines the key values that should be considered for imputation.\nAn array of key values or an object defining a [number sequence](https://vega.github.io/vega-lite/docs/impute.html#sequence-def).\n\nIf provided, this will be used in addition to the key values observed within the input data. If not provided, the values will be derived from all unique values of the `key` field. For `impute` in `encoding`, the key field is the x-field if the y-field is imputed, or vice versa.\n\nIf there is no impute grouping, this property _must_ be specified." }, "method": { "$ref": "#/definitions/ImputeMethod", "description": "The imputation method to use for the field value of imputed data objects.\nOne of `value`, `mean`, `median`, `max` or `min`.\n\n__Default value:__ `\"value\"`" }, "value": { "description": "The field value to use when the imputation `method` is `\"value\"`." } }, "type": "object" }, "ImputeSequence": { "additionalProperties": false, "properties": { "start": { "description": "The starting value of the sequence.\n__Default value:__ `0`", "type": "number" }, "step": { "description": "The step value between sequence entries.\n__Default value:__ `1` or `-1` if `stop < start`", "type": "number" }, "stop": { "description": "The ending value(exclusive) of the sequence.", "type": "number" } }, "required": [ "stop" ], "type": "object" }, "ImputeTransform": { "additionalProperties": false, "properties": { "frame": { "description": "A frame specification as a two-element array used to control the window over which the specified method is applied. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. For example, the value `[-5, 5]` indicates that the window should include five objects preceding and five objects following the current object.\n\n__Default value:__: `[null, null]` indicating that the window includes all objects.", "items": { "type": [ "null", "number" ] }, "type": "array" }, "groupby": { "description": "An optional array of fields by which to group the values.\nImputation will then be performed on a per-group basis.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "impute": { "$ref": "#/definitions/FieldName", "description": "The data field for which the missing values should be imputed." }, "key": { "$ref": "#/definitions/FieldName", "description": "A key field that uniquely identifies data objects within a group.\nMissing key values (those occurring in the data but not in the current group) will be imputed." }, "keyvals": { "anyOf": [ { "items": { }, "type": "array" }, { "$ref": "#/definitions/ImputeSequence" } ], "description": "Defines the key values that should be considered for imputation.\nAn array of key values or an object defining a [number sequence](https://vega.github.io/vega-lite/docs/impute.html#sequence-def).\n\nIf provided, this will be used in addition to the key values observed within the input data. If not provided, the values will be derived from all unique values of the `key` field. For `impute` in `encoding`, the key field is the x-field if the y-field is imputed, or vice versa.\n\nIf there is no impute grouping, this property _must_ be specified." }, "method": { "$ref": "#/definitions/ImputeMethod", "description": "The imputation method to use for the field value of imputed data objects.\nOne of `value`, `mean`, `median`, `max` or `min`.\n\n__Default value:__ `\"value\"`" }, "value": { "description": "The field value to use when the imputation `method` is `\"value\"`." } }, "required": [ "impute", "key" ], "type": "object" }, "InlineData": { "additionalProperties": false, "properties": { "format": { "$ref": "#/definitions/DataFormat", "description": "An object that specifies the format for parsing the data." }, "name": { "description": "Provide a placeholder name and bind data at runtime.", "type": "string" }, "values": { "$ref": "#/definitions/InlineDataset", "description": "The full data set, included inline. This can be an array of objects or primitive values, an object, or a string.\nArrays of primitive values are ingested as objects with a `data` property. Strings are parsed according to the specified format type." } }, "required": [ "values" ], "type": "object" }, "InlineDataset": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "items": { "type": "string" }, "type": "array" }, { "items": { "type": "boolean" }, "type": "array" }, { "items": { "type": "object" }, "type": "array" }, { "type": "string" }, { "type": "object" } ] }, "InputBinding": { "additionalProperties": false, "properties": { "autocomplete": { "type": "string" }, "debounce": { "type": "number" }, "element": { "$ref": "#/definitions/Element" }, "input": { "type": "string" }, "name": { "type": "string" }, "placeholder": { "type": "string" }, "type": { "type": "string" } }, "type": "object" }, "Interpolate": { "enum": [ "linear", "linear-closed", "step", "step-before", "step-after", "basis", "basis-open", "basis-closed", "cardinal", "cardinal-open", "cardinal-closed", "bundle", "monotone" ], "type": "string" }, "IntervalSelection": { "additionalProperties": false, "properties": { "bind": { "description": "Establishes a two-way binding between the interval selection and the scales\nused within the same view. This allows a user to interactively pan and\nzoom the view.\n\n__See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation.", "enum": [ "scales" ], "type": "string" }, "clear": { "anyOf": [ { "$ref": "#/definitions/EventStream" }, { "type": "boolean" } ], "description": "Clears the selection, emptying it of all values. Can be an\n[EventStream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation." }, "empty": { "description": "By default, `all` data values are considered to lie within an empty selection.\nWhen set to `none`, empty selections contain no data values.", "enum": [ "all", "none" ], "type": "string" }, "encodings": { "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/SingleDefUnitChannel" }, "type": "array" }, "fields": { "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "init": { "$ref": "#/definitions/SelectionInitIntervalMapping", "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and arrays of\ninitial values.\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation." }, "mark": { "$ref": "#/definitions/BrushConfig", "description": "An interval selection also adds a rectangle mark to depict the\nextents of the interval. The `mark` property can be used to customize the\nappearance of the mark.\n\n__See also:__ [`mark`](https://vega.github.io/vega-lite/docs/selection-mark.html) documentation." }, "on": { "$ref": "#/definitions/EventStream", "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\nFor interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)." }, "resolve": { "$ref": "#/definitions/SelectionResolution", "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation." }, "translate": { "description": "When truthy, allows a user to interactively move an interval selection\nback-and-forth. Can be `true`, `false` (to disable panning), or a\n[Vega event stream definition](https://vega.github.io/vega/docs/event-streams/)\nwhich must include a start and end event to trigger continuous panning.\n\n__Default value:__ `true`, which corresponds to\n`[mousedown, window:mouseup] > window:mousemove!` which corresponds to\nclicks and dragging within an interval selection to reposition it.\n\n__See also:__ [`translate`](https://vega.github.io/vega-lite/docs/translate.html) documentation.", "type": [ "string", "boolean" ] }, "type": { "description": "Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types:\n\n- `single` -- to select a single discrete data value on `click`.\n- `multi` -- to select multiple discrete data value; the first value is selected on `click` and additional values toggled on shift-`click`.\n- `interval` -- to select a continuous range of data values on `drag`.", "enum": [ "interval" ], "type": "string" }, "zoom": { "description": "When truthy, allows a user to interactively resize an interval selection.\nCan be `true`, `false` (to disable zooming), or a [Vega event stream\ndefinition](https://vega.github.io/vega/docs/event-streams/). Currently,\nonly `wheel` events are supported.\n\n__Default value:__ `true`, which corresponds to `wheel!`.\n\n__See also:__ [`zoom`](https://vega.github.io/vega-lite/docs/zoom.html) documentation.", "type": [ "string", "boolean" ] } }, "required": [ "type" ], "type": "object" }, "IntervalSelectionConfig": { "additionalProperties": false, "properties": { "bind": { "description": "Establishes a two-way binding between the interval selection and the scales\nused within the same view. This allows a user to interactively pan and\nzoom the view.\n\n__See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation.", "enum": [ "scales" ], "type": "string" }, "clear": { "anyOf": [ { "$ref": "#/definitions/EventStream" }, { "type": "boolean" } ], "description": "Clears the selection, emptying it of all values. Can be an\n[EventStream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation." }, "empty": { "description": "By default, `all` data values are considered to lie within an empty selection.\nWhen set to `none`, empty selections contain no data values.", "enum": [ "all", "none" ], "type": "string" }, "encodings": { "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/SingleDefUnitChannel" }, "type": "array" }, "fields": { "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "init": { "$ref": "#/definitions/SelectionInitIntervalMapping", "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and arrays of\ninitial values.\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation." }, "mark": { "$ref": "#/definitions/BrushConfig", "description": "An interval selection also adds a rectangle mark to depict the\nextents of the interval. The `mark` property can be used to customize the\nappearance of the mark.\n\n__See also:__ [`mark`](https://vega.github.io/vega-lite/docs/selection-mark.html) documentation." }, "on": { "$ref": "#/definitions/EventStream", "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\nFor interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)." }, "resolve": { "$ref": "#/definitions/SelectionResolution", "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation." }, "translate": { "description": "When truthy, allows a user to interactively move an interval selection\nback-and-forth. Can be `true`, `false` (to disable panning), or a\n[Vega event stream definition](https://vega.github.io/vega/docs/event-streams/)\nwhich must include a start and end event to trigger continuous panning.\n\n__Default value:__ `true`, which corresponds to\n`[mousedown, window:mouseup] > window:mousemove!` which corresponds to\nclicks and dragging within an interval selection to reposition it.\n\n__See also:__ [`translate`](https://vega.github.io/vega-lite/docs/translate.html) documentation.", "type": [ "string", "boolean" ] }, "zoom": { "description": "When truthy, allows a user to interactively resize an interval selection.\nCan be `true`, `false` (to disable zooming), or a [Vega event stream\ndefinition](https://vega.github.io/vega/docs/event-streams/). Currently,\nonly `wheel` events are supported.\n\n__Default value:__ `true`, which corresponds to `wheel!`.\n\n__See also:__ [`zoom`](https://vega.github.io/vega-lite/docs/zoom.html) documentation.", "type": [ "string", "boolean" ] } }, "type": "object" }, "JoinAggregateFieldDef": { "additionalProperties": false, "properties": { "as": { "$ref": "#/definitions/FieldName", "description": "The output name for the join aggregate operation." }, "field": { "$ref": "#/definitions/FieldName", "description": "The data field for which to compute the aggregate function. This can be omitted for functions that do not operate over a field such as `count`." }, "op": { "$ref": "#/definitions/AggregateOp", "description": "The aggregation operation to apply (e.g., sum, average or count). See the list of all supported operations [here](https://vega.github.io/vega-lite/docs/aggregate.html#ops)." } }, "required": [ "op", "as" ], "type": "object" }, "JoinAggregateTransform": { "additionalProperties": false, "properties": { "groupby": { "description": "The data fields for partitioning the data objects into separate groups. If unspecified, all data points will be in a single group.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "joinaggregate": { "description": "The definition of the fields in the join aggregate, and what calculations to use.", "items": { "$ref": "#/definitions/JoinAggregateFieldDef" }, "type": "array" } }, "required": [ "joinaggregate" ], "type": "object" }, "JsonDataFormat": { "additionalProperties": false, "properties": { "parse": { "anyOf": [ { "$ref": "#/definitions/Parse" }, { "type": "null" } ], "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data.\nAlternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)).\nFor example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\nFor Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)" }, "property": { "description": "The JSON property containing the desired data.\nThis parameter can be used when the loaded JSON file may have surrounding structure or meta-data.\nFor example `\"property\": \"values.features\"` is equivalent to retrieving `json.values.features`\nfrom the loaded JSON object.", "type": "string" }, "type": { "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n\n__Default value:__ The default format type is determined by the extension of the file URL.\nIf no extension is detected, `\"json\"` will be used by default.", "enum": [ "json" ], "type": "string" } }, "type": "object" }, "LabelOverlap": { "anyOf": [ { "type": "boolean" }, { "enum": [ "parity" ], "type": "string" }, { "enum": [ "greedy" ], "type": "string" } ] }, "LatLongFieldDef": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.", "type": "null" }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "type": { "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation.", "enum": [ "quantitative" ], "type": "string" } }, "type": "object" }, "LayerSpec": { "additionalProperties": false, "description": "A full layered plot specification, which may contains `encoding` and `projection` properties that will be applied to underlying unit (single-view) specifications.", "properties": { "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "encoding": { "$ref": "#/definitions/Encoding", "description": "A shared key-value mapping between encoding channels and definition of fields in the underlying layers." }, "height": { "description": "The height of a visualization.\n\n__Default value:__\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its y-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For y-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the height is [determined by the range step, paddings, and the cardinality of the field mapped to y-channel](https://vega.github.io/vega-lite/docs/scale.html#band). Otherwise, if the `rangeStep` is `null`, the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `y` channel, the `height` will be the value of `rangeStep`.\n\n__Note__: For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.", "type": "number" }, "layer": { "description": "Layer or single view specifications to be layered.\n\n__Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.", "items": { "anyOf": [ { "$ref": "#/definitions/LayerSpec" }, { "$ref": "#/definitions/UnitSpec" } ] }, "type": "array" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "projection": { "$ref": "#/definitions/Projection", "description": "An object defining properties of the geographic projection shared by underlying layers." }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "title": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "view": { "$ref": "#/definitions/ViewBackground", "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)" }, "width": { "description": "The width of a visualization.\n\n__Default value:__ This will be determined by the following rules:\n\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its x-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For x-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the width is [determined by the range step, paddings, and the cardinality of the field mapped to x-channel](https://vega.github.io/vega-lite/docs/scale.html#band). Otherwise, if the `rangeStep` is `null`, the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `x` channel, the `width` will be the value of [`config.scale.textXRangeStep`](https://vega.github.io/vega-lite/docs/size.html#default-width-and-height) for `text` mark and the value of `rangeStep` for other marks.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.", "type": "number" } }, "required": [ "layer" ], "type": "object" }, "LayoutAlign": { "enum": [ "all", "each", "none" ], "type": "string" }, "LayoutBounds": { "anyOf": [ { "enum": [ "full" ], "type": "string" }, { "enum": [ "flush" ], "type": "string" }, { "$ref": "#/definitions/SignalRef" } ] }, "Legend": { "additionalProperties": false, "description": "Properties of a legend or boolean flag for determining whether to show it.", "properties": { "clipHeight": { "description": "The height in pixels to clip symbol legend entries and limit their size.", "type": "number" }, "columnPadding": { "description": "The horizontal padding in pixels between symbol legend entries.\n\n__Default value:__ `10`.", "type": "number" }, "columns": { "description": "The number of columns in which to arrange symbol legend entries. A value of `0` or lower indicates a single row with one column per entry.", "type": "number" }, "cornerRadius": { "description": "Corner radius for the full legend.", "type": "number" }, "direction": { "$ref": "#/definitions/Orientation", "description": "The direction of the legend, one of `\"vertical\"` or `\"horizontal\"`.\n\n__Default value:__\n- For top-/bottom-`orient`ed legends, `\"horizontal\"`\n- For left-/right-`orient`ed legends, `\"vertical\"`\n- For top/bottom-left/right-`orient`ed legends, `\"horizontal\"` for gradient legends and `\"vertical\"` for symbol legends." }, "fillColor": { "$ref": "#/definitions/Color", "description": "Background fill color for the full legend." }, "format": { "description": "The text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\n__Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.", "type": "string" }, "formatType": { "description": "The format type for labels (`\"number\"` or `\"time\"`).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.", "enum": [ "number", "time" ], "type": "string" }, "gradientLength": { "description": "The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient.\n\n__Default value:__ `200`.", "minimum": 0, "type": "number" }, "gradientOpacity": { "description": "Opacity of the color gradient.", "type": "number" }, "gradientStrokeColor": { "$ref": "#/definitions/Color", "description": "The color of the gradient stroke, can be in hex color code or regular color name.\n\n__Default value:__ `\"lightGray\"`." }, "gradientStrokeWidth": { "description": "The width of the gradient stroke, in pixels.\n\n__Default value:__ `0`.", "minimum": 0, "type": "number" }, "gradientThickness": { "description": "The thickness in pixels of the color gradient. This value corresponds to the width of a vertical gradient or the height of a horizontal gradient.\n\n__Default value:__ `16`.", "minimum": 0, "type": "number" }, "gridAlign": { "$ref": "#/definitions/LayoutAlign", "description": "The alignment to apply to symbol legends rows and columns. The supported string values are `\"all\"`, `\"each\"` (the default), and `none`. For more information, see the [grid layout documentation](https://vega.github.io/vega/docs/layout).\n\n__Default value:__ `\"each\"`." }, "labelAlign": { "$ref": "#/definitions/Align", "description": "The alignment of the legend label, can be left, center, or right." }, "labelBaseline": { "$ref": "#/definitions/TextBaseline", "description": "The position of the baseline of legend label, can be `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`.\n\n__Default value:__ `\"middle\"`." }, "labelColor": { "$ref": "#/definitions/Color", "description": "The color of the legend label, can be in hex color code or regular color name." }, "labelFont": { "description": "The font of the legend label.", "type": "string" }, "labelFontSize": { "description": "The font size of legend label.\n\n__Default value:__ `10`.", "minimum": 0, "type": "number" }, "labelFontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style of legend label." }, "labelFontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight of legend label." }, "labelLimit": { "description": "Maximum allowed pixel width of legend tick labels.\n\n__Default value:__ `160`.", "type": "number" }, "labelOffset": { "description": "The offset of the legend label.", "type": "number" }, "labelOpacity": { "description": "Opacity of labels.", "type": "number" }, "labelOverlap": { "$ref": "#/definitions/LabelOverlap", "description": "The strategy to use for resolving overlap of labels in gradient legends. If `false`, no overlap reduction is attempted. If set to `true` (default) or `\"parity\"`, a strategy of removing every other label is used. If set to `\"greedy\"`, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes).\n\n__Default value:__ `true`." }, "labelPadding": { "description": "Padding in pixels between the legend and legend labels.", "type": "number" }, "labelSeparation": { "description": "The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default `0`). This property is ignored if *labelOverlap* resolution is not enabled.", "type": "number" }, "legendX": { "description": "Custom x-position for legend with orient \"none\".", "type": "number" }, "legendY": { "description": "Custom y-position for legend with orient \"none\".", "type": "number" }, "offset": { "description": "The offset in pixels by which to displace the legend from the data rectangle and axes.\n\n__Default value:__ `18`.", "type": "number" }, "orient": { "$ref": "#/definitions/LegendOrient", "description": "The orientation of the legend, which determines how the legend is positioned within the scene. One of `\"left\"`, `\"right\"`, `\"top\"`, `\"bottom\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom-left\"`, `\"bottom-right\"`, `\"none\"`.\n\n__Default value:__ `\"right\"`" }, "padding": { "description": "The padding between the border and content of the legend group.\n\n__Default value:__ `0`.", "type": "number" }, "rowPadding": { "description": "The vertical padding in pixels between symbol legend entries.\n\n__Default value:__ `2`.", "type": "number" }, "strokeColor": { "$ref": "#/definitions/Color", "description": "Border stroke color for the full legend." }, "symbolDash": { "description": "An array of alternating [stroke, space] lengths for dashed symbol strokes.", "items": { "type": "number" }, "type": "array" }, "symbolDashOffset": { "description": "The pixel offset at which to start drawing with the symbol stroke dash array.", "type": "number" }, "symbolFillColor": { "$ref": "#/definitions/Color", "description": "The color of the legend symbol," }, "symbolOffset": { "description": "Horizontal pixel offset for legend symbols.\n\n__Default value:__ `0`.", "type": "number" }, "symbolOpacity": { "description": "Opacity of the legend symbols.", "type": "number" }, "symbolSize": { "description": "The size of the legend symbol, in pixels.\n\n__Default value:__ `100`.", "minimum": 0, "type": "number" }, "symbolStrokeColor": { "$ref": "#/definitions/Color", "description": "Stroke color for legend symbols." }, "symbolStrokeWidth": { "description": "The width of the symbol's stroke.\n\n__Default value:__ `1.5`.", "minimum": 0, "type": "number" }, "symbolType": { "$ref": "#/definitions/SymbolShape", "description": "The symbol shape. One of the plotting shapes `circle` (default), `square`, `cross`, `diamond`, `triangle-up`, `triangle-down`, `triangle-right`, or `triangle-left`, the line symbol `stroke`, or one of the centered directional shapes `arrow`, `wedge`, or `triangle`. Alternatively, a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) can be provided. For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.\n\n__Default value:__ `\"circle\"`." }, "tickCount": { "description": "The desired number of tick values for quantitative legends.", "type": "number" }, "tickMinStep": { "description": "The minimum desired step between legend ticks, in terms of scale domain values. For example, a value of `1` indicates that ticks should not be less than 1 unit apart. If `tickMinStep` is specified, the `tickCount` value will be adjusted, if necessary, to enforce the minimum step value.\n\n__Default value__: `undefined`", "type": "number" }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "titleAlign": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment for legend titles.\n\n__Default value:__ `\"left\"`." }, "titleAnchor": { "$ref": "#/definitions/TitleAnchor", "description": "Text anchor position for placing legend titles." }, "titleBaseline": { "$ref": "#/definitions/TextBaseline", "description": "Vertical text baseline for legend titles.\n\n__Default value:__ `\"top\"`." }, "titleColor": { "$ref": "#/definitions/Color", "description": "The color of the legend title, can be in hex color code or regular color name." }, "titleFont": { "description": "The font of the legend title.", "type": "string" }, "titleFontSize": { "description": "The font size of the legend title.", "type": "number" }, "titleFontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style of the legend title." }, "titleFontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight of the legend title.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "titleLimit": { "description": "Maximum allowed pixel width of legend titles.\n\n__Default value:__ `180`.", "minimum": 0, "type": "number" }, "titleOpacity": { "description": "Opacity of the legend title.", "type": "number" }, "titleOrient": { "$ref": "#/definitions/Orient", "description": "Orientation of the legend title." }, "titlePadding": { "description": "The padding, in pixels, between title and legend.\n\n__Default value:__ `5`.", "type": "number" }, "type": { "description": "The type of the legend. Use `\"symbol\"` to create a discrete legend and `\"gradient\"` for a continuous color gradient.\n\n__Default value:__ `\"gradient\"` for non-binned quantitative fields and temporal fields; `\"symbol\"` otherwise.", "enum": [ "symbol", "gradient" ], "type": "string" }, "values": { "description": "Explicitly set the visible legend values.", "items": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "boolean" }, { "$ref": "#/definitions/DateTime" } ] }, "type": "array" }, "zindex": { "description": "A non-negative integer indicating the z-index of the legend.\nIf zindex is 0, legend should be drawn behind all chart elements.\nTo put them in front, use zindex = 1.", "minimum": 0, "type": "number" } }, "type": "object" }, "LegendConfig": { "additionalProperties": false, "properties": { "clipHeight": { "description": "The height in pixels to clip symbol legend entries and limit their size.", "type": "number" }, "columnPadding": { "description": "The horizontal padding in pixels between symbol legend entries.\n\n__Default value:__ `10`.", "type": "number" }, "columns": { "description": "The number of columns in which to arrange symbol legend entries. A value of `0` or lower indicates a single row with one column per entry.", "type": "number" }, "cornerRadius": { "description": "Corner radius for the full legend.", "type": "number" }, "fillColor": { "$ref": "#/definitions/Color", "description": "Background fill color for the full legend." }, "gradientDirection": { "$ref": "#/definitions/Orientation", "description": "The default direction (`\"horizontal\"` or `\"vertical\"`) for gradient legends.\n\n__Default value:__ `\"vertical\"`." }, "gradientHorizontalMaxLength": { "description": "Max legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `200`", "type": "number" }, "gradientHorizontalMinLength": { "description": "Min legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `100`", "type": "number" }, "gradientLabelLimit": { "description": "The maximum allowed length in pixels of color ramp gradient labels.", "type": "number" }, "gradientLabelOffset": { "description": "Vertical offset in pixels for color ramp gradient labels.\n\n__Default value:__ `2`.", "type": "number" }, "gradientLength": { "description": "The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient.\n\n__Default value:__ `200`.", "minimum": 0, "type": "number" }, "gradientOpacity": { "description": "Opacity of the color gradient.", "type": "number" }, "gradientStrokeColor": { "$ref": "#/definitions/Color", "description": "The color of the gradient stroke, can be in hex color code or regular color name.\n\n__Default value:__ `\"lightGray\"`." }, "gradientStrokeWidth": { "description": "The width of the gradient stroke, in pixels.\n\n__Default value:__ `0`.", "minimum": 0, "type": "number" }, "gradientThickness": { "description": "The thickness in pixels of the color gradient. This value corresponds to the width of a vertical gradient or the height of a horizontal gradient.\n\n__Default value:__ `16`.", "minimum": 0, "type": "number" }, "gradientVerticalMaxLength": { "description": "Max legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `200`", "type": "number" }, "gradientVerticalMinLength": { "description": "Min legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `100`", "type": "number" }, "gridAlign": { "$ref": "#/definitions/LayoutAlign", "description": "The alignment to apply to symbol legends rows and columns. The supported string values are `\"all\"`, `\"each\"` (the default), and `none`. For more information, see the [grid layout documentation](https://vega.github.io/vega/docs/layout).\n\n__Default value:__ `\"each\"`." }, "labelAlign": { "$ref": "#/definitions/Align", "description": "The alignment of the legend label, can be left, center, or right." }, "labelBaseline": { "$ref": "#/definitions/TextBaseline", "description": "The position of the baseline of legend label, can be `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`.\n\n__Default value:__ `\"middle\"`." }, "labelColor": { "$ref": "#/definitions/Color", "description": "The color of the legend label, can be in hex color code or regular color name." }, "labelFont": { "description": "The font of the legend label.", "type": "string" }, "labelFontSize": { "description": "The font size of legend label.\n\n__Default value:__ `10`.", "minimum": 0, "type": "number" }, "labelFontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style of legend label." }, "labelFontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight of legend label." }, "labelLimit": { "description": "Maximum allowed pixel width of legend tick labels.\n\n__Default value:__ `160`.", "type": "number" }, "labelOffset": { "description": "The offset of the legend label.", "type": "number" }, "labelOpacity": { "description": "Opacity of labels.", "type": "number" }, "labelOverlap": { "$ref": "#/definitions/LabelOverlap", "description": "The strategy to use for resolving overlap of labels in gradient legends. If `false`, no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used. If set to `\"greedy\"`, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes).\n\n__Default value:__ `\"greedy\"` for `log scales otherwise `true`." }, "labelPadding": { "description": "Padding in pixels between the legend and legend labels.", "type": "number" }, "labelSeparation": { "description": "The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default `0`). This property is ignored if *labelOverlap* resolution is not enabled.", "type": "number" }, "layout": { "$ref": "#/definitions/LegendLayout", "description": "Legend orient group layout parameters." }, "legendX": { "description": "Custom x-position for legend with orient \"none\".", "type": "number" }, "legendY": { "description": "Custom y-position for legend with orient \"none\".", "type": "number" }, "offset": { "description": "The offset in pixels by which to displace the legend from the data rectangle and axes.\n\n__Default value:__ `18`.", "type": "number" }, "orient": { "$ref": "#/definitions/LegendOrient", "description": "The orientation of the legend, which determines how the legend is positioned within the scene. One of \"left\", \"right\", \"top-left\", \"top-right\", \"bottom-left\", \"bottom-right\", \"none\".\n\n__Default value:__ `\"right\"`" }, "padding": { "description": "The padding between the border and content of the legend group.\n\n__Default value:__ `0`.", "type": "number" }, "rowPadding": { "description": "The vertical padding in pixels between symbol legend entries.\n\n__Default value:__ `2`.", "type": "number" }, "shortTimeLabels": { "description": "Whether month names and weekday names should be abbreviated.\n\n__Default value:__ `false`", "type": "boolean" }, "strokeColor": { "$ref": "#/definitions/Color", "description": "Border stroke color for the full legend." }, "strokeDash": { "description": "Border stroke dash pattern for the full legend.", "items": { "type": "number" }, "type": "array" }, "strokeWidth": { "description": "Border stroke width for the full legend.", "type": "number" }, "symbolBaseFillColor": { "$ref": "#/definitions/Color", "description": "Default fill color for legend symbols. Only applied if there is no `\"fill\"` scale color encoding for the legend.\n\n__Default value:__ `\"transparent\"`." }, "symbolBaseStrokeColor": { "$ref": "#/definitions/Color", "description": "Default stroke color for legend symbols. Only applied if there is no `\"fill\"` scale color encoding for the legend.\n\n__Default value:__ `\"gray\"`." }, "symbolDash": { "description": "An array of alternating [stroke, space] lengths for dashed symbol strokes.", "items": { "type": "number" }, "type": "array" }, "symbolDashOffset": { "description": "The pixel offset at which to start drawing with the symbol stroke dash array.", "type": "number" }, "symbolDirection": { "$ref": "#/definitions/Orientation", "description": "The default direction (`\"horizontal\"` or `\"vertical\"`) for symbol legends.\n\n__Default value:__ `\"vertical\"`." }, "symbolFillColor": { "$ref": "#/definitions/Color", "description": "The color of the legend symbol," }, "symbolOffset": { "description": "Horizontal pixel offset for legend symbols.\n\n__Default value:__ `0`.", "type": "number" }, "symbolOpacity": { "description": "Opacity of the legend symbols.", "type": "number" }, "symbolSize": { "description": "The size of the legend symbol, in pixels.\n\n__Default value:__ `100`.", "minimum": 0, "type": "number" }, "symbolStrokeColor": { "$ref": "#/definitions/Color", "description": "Stroke color for legend symbols." }, "symbolStrokeWidth": { "description": "The width of the symbol's stroke.\n\n__Default value:__ `1.5`.", "minimum": 0, "type": "number" }, "symbolType": { "$ref": "#/definitions/SymbolShape", "description": "The symbol shape. One of the plotting shapes `circle` (default), `square`, `cross`, `diamond`, `triangle-up`, `triangle-down`, `triangle-right`, or `triangle-left`, the line symbol `stroke`, or one of the centered directional shapes `arrow`, `wedge`, or `triangle`. Alternatively, a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) can be provided. For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.\n\n__Default value:__ `\"circle\"`." }, "title": { "description": "Set to null to disable title for the axis, legend, or header.", "type": "null" }, "titleAlign": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment for legend titles.\n\n__Default value:__ `\"left\"`." }, "titleAnchor": { "$ref": "#/definitions/TitleAnchor", "description": "Text anchor position for placing legend titles." }, "titleBaseline": { "$ref": "#/definitions/TextBaseline", "description": "Vertical text baseline for legend titles.\n\n__Default value:__ `\"top\"`." }, "titleColor": { "$ref": "#/definitions/Color", "description": "The color of the legend title, can be in hex color code or regular color name." }, "titleFont": { "description": "The font of the legend title.", "type": "string" }, "titleFontSize": { "description": "The font size of the legend title.", "type": "number" }, "titleFontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style of the legend title." }, "titleFontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight of the legend title.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "titleLimit": { "description": "Maximum allowed pixel width of legend titles.\n\n__Default value:__ `180`.", "minimum": 0, "type": "number" }, "titleOpacity": { "description": "Opacity of the legend title.", "type": "number" }, "titleOrient": { "$ref": "#/definitions/Orient", "description": "Orientation of the legend title." }, "titlePadding": { "description": "The padding, in pixels, between title and legend.\n\n__Default value:__ `5`.", "type": "number" } }, "type": "object" }, "LegendLayout": { "additionalProperties": false, "properties": { "anchor": { "$ref": "#/definitions/TitleAnchor", "description": "The anchor point for legend orient group layout." }, "bottom": { "$ref": "#/definitions/BaseLegendLayout" }, "bottom-left": { "$ref": "#/definitions/BaseLegendLayout" }, "bottom-right": { "$ref": "#/definitions/BaseLegendLayout" }, "bounds": { "$ref": "#/definitions/LayoutBounds", "description": "The bounds calculation to use for legend orient group layout." }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/SignalRef" } ], "description": "A flag to center legends within a shared orient group." }, "direction": { "anyOf": [ { "$ref": "#/definitions/Orientation" }, { "$ref": "#/definitions/SignalRef" } ], "description": "The layout direction for legend orient group layout." }, "left": { "$ref": "#/definitions/BaseLegendLayout" }, "margin": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/SignalRef" } ], "description": "The pixel margin between legends within a orient group." }, "offset": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/SignalRef" } ], "description": "The pixel offset from the chart body for a legend orient group." }, "right": { "$ref": "#/definitions/BaseLegendLayout" }, "top": { "$ref": "#/definitions/BaseLegendLayout" }, "top-left": { "$ref": "#/definitions/BaseLegendLayout" }, "top-right": { "$ref": "#/definitions/BaseLegendLayout" } }, "type": "object" }, "LegendOrient": { "enum": [ "none", "left", "right", "top", "bottom", "top-left", "top-right", "bottom-left", "bottom-right" ], "type": "string" }, "LegendResolveMap": { "additionalProperties": false, "properties": { "color": { "$ref": "#/definitions/ResolveMode" }, "fill": { "$ref": "#/definitions/ResolveMode" }, "fillOpacity": { "$ref": "#/definitions/ResolveMode" }, "opacity": { "$ref": "#/definitions/ResolveMode" }, "shape": { "$ref": "#/definitions/ResolveMode" }, "size": { "$ref": "#/definitions/ResolveMode" }, "stroke": { "$ref": "#/definitions/ResolveMode" }, "strokeOpacity": { "$ref": "#/definitions/ResolveMode" }, "strokeWidth": { "$ref": "#/definitions/ResolveMode" } }, "type": "object" }, "LineConfig": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`." }, "angle": { "description": "The rotation angle of the text, in degrees.", "maximum": 360, "minimum": 0, "type": "number" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`" }, "color": { "$ref": "#/definitions/Color", "description": "Default color. Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)." }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "dir": { "$ref": "#/definitions/Dir", "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`" }, "dx": { "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "dy": { "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "ellipsis": { "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`", "type": "string" }, "fill": { "$ref": "#/definitions/Color", "description": "Default Fill Color. This has higher precedence than `config.color`\n\n__Default value:__ (None)" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "filled": { "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for `point`, `line` and `rule`; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).", "type": "boolean" }, "font": { "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "fontSize": { "description": "The font size, in pixels.", "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style (e.g., `\"italic\"`)." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "height": { "description": "Height of the marks.", "type": "number" }, "href": { "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.", "format": "uri", "type": "string" }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "limit": { "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit", "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "order": { "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.", "type": [ "null", "boolean" ] }, "orient": { "$ref": "#/definitions/Orientation", "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored." }, "point": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/OverlayMarkDef" }, { "enum": [ "transparent" ], "type": "string" } ], "description": "A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points.\n\n- If this property is `\"transparent\"`, transparent points will be used (for enhancing tooltips and selections).\n\n- If this property is an empty object (`{}`) or `true`, filled points with default properties will be used.\n\n- If this property is `false`, no points would be automatically added to line or area marks.\n\n__Default value:__ `false`." }, "radius": { "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.", "minimum": 0, "type": "number" }, "shape": { "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`", "type": "string" }, "size": { "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__ `30` for point, circle, square marks; `rangeStep` - 1 for bar marks with discrete dimensions; `5` for bar marks with continuous dimensions; `11` for text marks.", "minimum": 0, "type": "number" }, "stroke": { "$ref": "#/definitions/Color", "description": "Default Stroke Color. This has higher precedence than `config.color`\n\n__Default value:__ (None)" }, "strokeCap": { "$ref": "#/definitions/StrokeCap", "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "$ref": "#/definitions/StrokeJoin", "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "tension": { "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).", "maximum": 1, "minimum": 0, "type": "number" }, "text": { "description": "Placeholder text if the `text` channel is not specified", "type": "string" }, "theta": { "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".", "type": "number" }, "tooltip": { "anyOf": [ { "$ref": "#/definitions/Value" }, { "$ref": "#/definitions/TooltipContent" }, { "type": "null" } ], "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null`, then no tooltip will be used." }, "width": { "description": "Width of the marks.", "type": "number" }, "x": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "y": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." } }, "type": "object" }, "LocalMultiTimeUnit": { "enum": [ "yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "quartermonth", "monthdate", "monthdatehours", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds" ], "type": "string" }, "LocalSingleTimeUnit": { "enum": [ "year", "quarter", "month", "day", "date", "hours", "minutes", "seconds", "milliseconds" ], "type": "string" }, "LogicalAnd": { "additionalProperties": false, "properties": { "and": { "items": { "$ref": "#/definitions/LogicalOperand" }, "type": "array" } }, "required": [ "and" ], "type": "object" }, "SelectionAnd": { "additionalProperties": false, "properties": { "and": { "items": { "$ref": "#/definitions/SelectionOperand" }, "type": "array" } }, "required": [ "and" ], "type": "object" }, "LogicalNot": { "additionalProperties": false, "properties": { "not": { "$ref": "#/definitions/LogicalOperand" } }, "required": [ "not" ], "type": "object" }, "SelectionNot": { "additionalProperties": false, "properties": { "not": { "$ref": "#/definitions/SelectionOperand" } }, "required": [ "not" ], "type": "object" }, "LogicalOperand": { "anyOf": [ { "$ref": "#/definitions/LogicalNot" }, { "$ref": "#/definitions/LogicalAnd" }, { "$ref": "#/definitions/LogicalOr" }, { "$ref": "#/definitions/Predicate" } ] }, "SelectionOperand": { "anyOf": [ { "$ref": "#/definitions/SelectionNot" }, { "$ref": "#/definitions/SelectionAnd" }, { "$ref": "#/definitions/SelectionOr" }, { "type": "string" } ] }, "LogicalOr": { "additionalProperties": false, "properties": { "or": { "items": { "$ref": "#/definitions/LogicalOperand" }, "type": "array" } }, "required": [ "or" ], "type": "object" }, "SelectionOr": { "additionalProperties": false, "properties": { "or": { "items": { "$ref": "#/definitions/SelectionOperand" }, "type": "array" } }, "required": [ "or" ], "type": "object" }, "LookupData": { "additionalProperties": false, "properties": { "data": { "$ref": "#/definitions/Data", "description": "Secondary data source to lookup in." }, "fields": { "description": "Fields in foreign data to lookup.\nIf not specified, the entire object is queried.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "key": { "$ref": "#/definitions/FieldName", "description": "Key in data to lookup." } }, "required": [ "data", "key" ], "type": "object" }, "LookupTransform": { "additionalProperties": false, "properties": { "as": { "anyOf": [ { "$ref": "#/definitions/FieldName" }, { "items": { "$ref": "#/definitions/FieldName" }, "type": "array" } ], "description": "The field or fields for storing the computed formula value.\nIf `from.fields` is specified, the transform will use the same names for `as`.\nIf `from.fields` is not specified, `as` has to be a string and we put the whole object into the data under the specified name." }, "default": { "description": "The default value to use if lookup fails.\n\n__Default value:__ `null`", "type": "string" }, "from": { "$ref": "#/definitions/LookupData", "description": "Secondary data reference." }, "lookup": { "$ref": "#/definitions/FieldName", "description": "Key in primary data source." } }, "required": [ "lookup", "from" ], "type": "object" }, "Mark": { "description": "All types of primitive marks.", "enum": [ "area", "bar", "line", "trail", "point", "text", "tick", "rect", "rule", "circle", "square", "geoshape" ], "type": "string" }, "MarkConfig": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`." }, "angle": { "description": "The rotation angle of the text, in degrees.", "maximum": 360, "minimum": 0, "type": "number" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`" }, "color": { "$ref": "#/definitions/Color", "description": "Default color. Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)." }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "dir": { "$ref": "#/definitions/Dir", "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`" }, "dx": { "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "dy": { "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "ellipsis": { "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`", "type": "string" }, "fill": { "$ref": "#/definitions/Color", "description": "Default Fill Color. This has higher precedence than `config.color`\n\n__Default value:__ (None)" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "filled": { "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for `point`, `line` and `rule`; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).", "type": "boolean" }, "font": { "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "fontSize": { "description": "The font size, in pixels.", "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style (e.g., `\"italic\"`)." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "height": { "description": "Height of the marks.", "type": "number" }, "href": { "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.", "format": "uri", "type": "string" }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "limit": { "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit", "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "order": { "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.", "type": [ "null", "boolean" ] }, "orient": { "$ref": "#/definitions/Orientation", "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored." }, "radius": { "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.", "minimum": 0, "type": "number" }, "shape": { "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`", "type": "string" }, "size": { "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__ `30` for point, circle, square marks; `rangeStep` - 1 for bar marks with discrete dimensions; `5` for bar marks with continuous dimensions; `11` for text marks.", "minimum": 0, "type": "number" }, "stroke": { "$ref": "#/definitions/Color", "description": "Default Stroke Color. This has higher precedence than `config.color`\n\n__Default value:__ (None)" }, "strokeCap": { "$ref": "#/definitions/StrokeCap", "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "$ref": "#/definitions/StrokeJoin", "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "tension": { "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).", "maximum": 1, "minimum": 0, "type": "number" }, "text": { "description": "Placeholder text if the `text` channel is not specified", "type": "string" }, "theta": { "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".", "type": "number" }, "tooltip": { "anyOf": [ { "$ref": "#/definitions/Value" }, { "$ref": "#/definitions/TooltipContent" }, { "type": "null" } ], "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null`, then no tooltip will be used." }, "width": { "description": "Width of the marks.", "type": "number" }, "x": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "y": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." } }, "type": "object" }, "MarkDef": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`." }, "angle": { "description": "The rotation angle of the text, in degrees.", "maximum": 360, "minimum": 0, "type": "number" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`" }, "binSpacing": { "description": "Offset between bars for binned field. Ideal value for this is either 0 (Preferred by statisticians) or 1 (Vega-Lite Default, D3 example style).\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, "clip": { "description": "Whether a mark be clipped to the enclosing group’s width and height.", "type": "boolean" }, "color": { "$ref": "#/definitions/Color", "description": "Default color. Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)." }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "dir": { "$ref": "#/definitions/Dir", "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`" }, "dx": { "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "dy": { "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "ellipsis": { "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`", "type": "string" }, "fill": { "$ref": "#/definitions/Color", "description": "Default Fill Color. This has higher precedence than `config.color`\n\n__Default value:__ (None)" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "filled": { "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for `point`, `line` and `rule`; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).", "type": "boolean" }, "font": { "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "fontSize": { "description": "The font size, in pixels.", "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style (e.g., `\"italic\"`)." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "height": { "description": "Height of the marks.", "type": "number" }, "href": { "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.", "format": "uri", "type": "string" }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "limit": { "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit", "type": "number" }, "line": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/OverlayMarkDef" } ], "description": "A flag for overlaying line on top of area marks, or an object defining the properties of the overlayed lines.\n\n- If this value is an empty object (`{}`) or `true`, lines with default properties will be used.\n\n- If this value is `false`, no lines would be automatically added to area marks.\n\n__Default value:__ `false`." }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "order": { "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.", "type": [ "null", "boolean" ] }, "orient": { "$ref": "#/definitions/Orientation", "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored." }, "point": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/OverlayMarkDef" }, { "enum": [ "transparent" ], "type": "string" } ], "description": "A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points.\n\n- If this property is `\"transparent\"`, transparent points will be used (for enhancing tooltips and selections).\n\n- If this property is an empty object (`{}`) or `true`, filled points with default properties will be used.\n\n- If this property is `false`, no points would be automatically added to line or area marks.\n\n__Default value:__ `false`." }, "radius": { "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.", "minimum": 0, "type": "number" }, "shape": { "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`", "type": "string" }, "size": { "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__ `30` for point, circle, square marks; `rangeStep` - 1 for bar marks with discrete dimensions; `5` for bar marks with continuous dimensions; `11` for text marks.", "minimum": 0, "type": "number" }, "stroke": { "$ref": "#/definitions/Color", "description": "Default Stroke Color. This has higher precedence than `config.color`\n\n__Default value:__ (None)" }, "strokeCap": { "$ref": "#/definitions/StrokeCap", "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "$ref": "#/definitions/StrokeJoin", "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "style": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "description": "A string or array of strings indicating the name of custom styles to apply to the mark. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles. Any [mark properties](https://vega.github.io/vega-lite/docs/encoding.html#mark-prop) explicitly defined within the `encoding` will override a style default.\n\n__Default value:__ The mark's name. For example, a bar mark will have style `\"bar\"` by default.\n__Note:__ Any specified style will augment the default style. For example, a bar mark with `\"style\": \"foo\"` will receive from `config.style.bar` and `config.style.foo` (the specified style `\"foo\"` has higher precedence)." }, "tension": { "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).", "maximum": 1, "minimum": 0, "type": "number" }, "text": { "description": "Placeholder text if the `text` channel is not specified", "type": "string" }, "theta": { "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".", "type": "number" }, "thickness": { "description": "Thickness of the tick mark.\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, "tooltip": { "anyOf": [ { "$ref": "#/definitions/Value" }, { "$ref": "#/definitions/TooltipContent" }, { "type": "null" } ], "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null`, then no tooltip will be used." }, "type": { "$ref": "#/definitions/Mark", "description": "The mark type. This could a primitive mark type\n(one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`)\nor a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`)." }, "width": { "description": "Width of the marks.", "type": "number" }, "x": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2Offset": { "description": "Offset for x2-position.", "type": "number" }, "xOffset": { "description": "Offset for x-position.", "type": "number" }, "y": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2Offset": { "description": "Offset for y2-position.", "type": "number" }, "yOffset": { "description": "Offset for y-position.", "type": "number" } }, "required": [ "type" ], "type": "object" }, "Month": { "maximum": 12, "minimum": 1, "type": "number" }, "MultiSelection": { "additionalProperties": false, "properties": { "clear": { "anyOf": [ { "$ref": "#/definitions/EventStream" }, { "type": "boolean" } ], "description": "Clears the selection, emptying it of all values. Can be an\n[EventStream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation." }, "empty": { "description": "By default, `all` data values are considered to lie within an empty selection.\nWhen set to `none`, empty selections contain no data values.", "enum": [ "all", "none" ], "type": "string" }, "encodings": { "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/SingleDefUnitChannel" }, "type": "array" }, "fields": { "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "init": { "anyOf": [ { "$ref": "#/definitions/SelectionInitMapping" }, { "items": { "$ref": "#/definitions/SelectionInitMapping" }, "type": "array" } ], "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and an initial\nvalue (or array of values).\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation." }, "nearest": { "description": "When true, an invisible voronoi diagram is computed to accelerate discrete\nselection. The data value _nearest_ the mouse cursor is added to the selection.\n\n__See also:__ [`nearest`](https://vega.github.io/vega-lite/docs/nearest.html) documentation.", "type": "boolean" }, "on": { "$ref": "#/definitions/EventStream", "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\nFor interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)." }, "resolve": { "$ref": "#/definitions/SelectionResolution", "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation." }, "toggle": { "description": "Controls whether data values should be toggled or only ever inserted into\nmulti selections. Can be `true`, `false` (for insertion only), or a\n[Vega expression](https://vega.github.io/vega/docs/expressions/).\n\n__Default value:__ `true`, which corresponds to `event.shiftKey` (i.e.,\ndata values are toggled when a user interacts with the shift-key pressed).\n\n__See also:__ [`toggle`](https://vega.github.io/vega-lite/docs/toggle.html) documentation.", "type": [ "string", "boolean" ] }, "type": { "description": "Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types:\n\n- `single` -- to select a single discrete data value on `click`.\n- `multi` -- to select multiple discrete data value; the first value is selected on `click` and additional values toggled on shift-`click`.\n- `interval` -- to select a continuous range of data values on `drag`.", "enum": [ "multi" ], "type": "string" } }, "required": [ "type" ], "type": "object" }, "MultiSelectionConfig": { "additionalProperties": false, "properties": { "clear": { "anyOf": [ { "$ref": "#/definitions/EventStream" }, { "type": "boolean" } ], "description": "Clears the selection, emptying it of all values. Can be an\n[EventStream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation." }, "empty": { "description": "By default, `all` data values are considered to lie within an empty selection.\nWhen set to `none`, empty selections contain no data values.", "enum": [ "all", "none" ], "type": "string" }, "encodings": { "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/SingleDefUnitChannel" }, "type": "array" }, "fields": { "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "init": { "anyOf": [ { "$ref": "#/definitions/SelectionInitMapping" }, { "items": { "$ref": "#/definitions/SelectionInitMapping" }, "type": "array" } ], "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and an initial\nvalue (or array of values).\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation." }, "nearest": { "description": "When true, an invisible voronoi diagram is computed to accelerate discrete\nselection. The data value _nearest_ the mouse cursor is added to the selection.\n\n__See also:__ [`nearest`](https://vega.github.io/vega-lite/docs/nearest.html) documentation.", "type": "boolean" }, "on": { "$ref": "#/definitions/EventStream", "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\nFor interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)." }, "resolve": { "$ref": "#/definitions/SelectionResolution", "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation." }, "toggle": { "description": "Controls whether data values should be toggled or only ever inserted into\nmulti selections. Can be `true`, `false` (for insertion only), or a\n[Vega expression](https://vega.github.io/vega/docs/expressions/).\n\n__Default value:__ `true`, which corresponds to `event.shiftKey` (i.e.,\ndata values are toggled when a user interacts with the shift-key pressed).\n\n__See also:__ [`toggle`](https://vega.github.io/vega-lite/docs/toggle.html) documentation.", "type": [ "string", "boolean" ] } }, "type": "object" }, "MultiTimeUnit": { "anyOf": [ { "$ref": "#/definitions/LocalMultiTimeUnit" }, { "$ref": "#/definitions/UtcMultiTimeUnit" } ] }, "NamedData": { "additionalProperties": false, "properties": { "format": { "$ref": "#/definitions/DataFormat", "description": "An object that specifies the format for parsing the data." }, "name": { "description": "Provide a placeholder name and bind data at runtime.", "type": "string" } }, "required": [ "name" ], "type": "object" }, "NiceTime": { "enum": [ "second", "minute", "hour", "day", "week", "month", "year" ], "type": "string" }, "NumericFieldDefWithCondition": { "$ref": "#/definitions/FieldDefWithCondition" }, "NumericValueDefWithCondition": { "$ref": "#/definitions/ValueDefWithCondition" }, "OrderFieldDef": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "enum": [ "binned" ], "type": "string" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "sort": { "$ref": "#/definitions/SortOrder", "description": "The sort order. One of `\"ascending\"` (default) or `\"descending\"`." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "Orient": { "enum": [ "left", "right", "top", "bottom" ], "type": "string" }, "Orientation": { "enum": [ "horizontal", "vertical" ], "type": "string" }, "OverlayMarkDef": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`." }, "angle": { "description": "The rotation angle of the text, in degrees.", "maximum": 360, "minimum": 0, "type": "number" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`" }, "clip": { "description": "Whether a mark be clipped to the enclosing group’s width and height.", "type": "boolean" }, "color": { "$ref": "#/definitions/Color", "description": "Default color. Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)." }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "dir": { "$ref": "#/definitions/Dir", "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`" }, "dx": { "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "dy": { "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "ellipsis": { "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`", "type": "string" }, "fill": { "$ref": "#/definitions/Color", "description": "Default Fill Color. This has higher precedence than `config.color`\n\n__Default value:__ (None)" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "filled": { "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for `point`, `line` and `rule`; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).", "type": "boolean" }, "font": { "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "fontSize": { "description": "The font size, in pixels.", "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style (e.g., `\"italic\"`)." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "height": { "description": "Height of the marks.", "type": "number" }, "href": { "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.", "format": "uri", "type": "string" }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "limit": { "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit", "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "order": { "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.", "type": [ "null", "boolean" ] }, "orient": { "$ref": "#/definitions/Orientation", "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored." }, "radius": { "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.", "minimum": 0, "type": "number" }, "shape": { "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`", "type": "string" }, "size": { "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__ `30` for point, circle, square marks; `rangeStep` - 1 for bar marks with discrete dimensions; `5` for bar marks with continuous dimensions; `11` for text marks.", "minimum": 0, "type": "number" }, "stroke": { "$ref": "#/definitions/Color", "description": "Default Stroke Color. This has higher precedence than `config.color`\n\n__Default value:__ (None)" }, "strokeCap": { "$ref": "#/definitions/StrokeCap", "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "$ref": "#/definitions/StrokeJoin", "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "style": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "description": "A string or array of strings indicating the name of custom styles to apply to the mark. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles. Any [mark properties](https://vega.github.io/vega-lite/docs/encoding.html#mark-prop) explicitly defined within the `encoding` will override a style default.\n\n__Default value:__ The mark's name. For example, a bar mark will have style `\"bar\"` by default.\n__Note:__ Any specified style will augment the default style. For example, a bar mark with `\"style\": \"foo\"` will receive from `config.style.bar` and `config.style.foo` (the specified style `\"foo\"` has higher precedence)." }, "tension": { "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).", "maximum": 1, "minimum": 0, "type": "number" }, "text": { "description": "Placeholder text if the `text` channel is not specified", "type": "string" }, "theta": { "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".", "type": "number" }, "tooltip": { "anyOf": [ { "$ref": "#/definitions/Value" }, { "$ref": "#/definitions/TooltipContent" }, { "type": "null" } ], "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null`, then no tooltip will be used." }, "width": { "description": "Width of the marks.", "type": "number" }, "x": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2Offset": { "description": "Offset for x2-position.", "type": "number" }, "xOffset": { "description": "Offset for x-position.", "type": "number" }, "y": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2Offset": { "description": "Offset for y2-position.", "type": "number" }, "yOffset": { "description": "Offset for y-position.", "type": "number" } }, "type": "object" }, "Padding": { "anyOf": [ { "type": "number" }, { "additionalProperties": false, "properties": { "bottom": { "type": "number" }, "left": { "type": "number" }, "right": { "type": "number" }, "top": { "type": "number" } }, "type": "object" } ], "minimum": 0 }, "Parse": { "additionalProperties": { "$ref": "#/definitions/ParseValue" }, "type": "object" }, "ParseValue": { "anyOf": [ { "type": "null" }, { "type": "string" }, { "enum": [ "string" ], "type": "string" }, { "enum": [ "boolean" ], "type": "string" }, { "enum": [ "date" ], "type": "string" }, { "enum": [ "number" ], "type": "string" } ] }, "PartsMixins": { "additionalProperties": false, "properties": { "box": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "median": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "outliers": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "rule": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "ticks": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] } }, "type": "object" }, "PartsMixins": { "additionalProperties": false, "properties": { "band": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "borders": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] } }, "type": "object" }, "PartsMixins": { "additionalProperties": false, "properties": { "rule": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "ticks": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] } }, "type": "object" }, "PositionFieldDef": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "axis": { "anyOf": [ { "$ref": "#/definitions/Axis" }, { "type": "null" } ], "description": "An object defining properties of axis's gridlines, ticks and labels.\nIf `null`, the axis for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [axis properties](https://vega.github.io/vega-lite/docs/axis.html) are applied.\n\n__See also:__ [`axis`](https://vega.github.io/vega-lite/docs/axis.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "enum": [ "binned" ], "type": "string" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "impute": { "$ref": "#/definitions/ImputeParams", "description": "An object defining the properties of the Impute Operation to be applied.\nThe field value of the other positional channel is taken as `key` of the `Impute` Operation.\nThe field of the `color` channel if specified is used as `groupby` of the `Impute` Operation.\n\n__See also:__ [`impute`](https://vega.github.io/vega-lite/docs/impute.html) documentation." }, "scale": { "anyOf": [ { "$ref": "#/definitions/Scale" }, { "type": "null" } ], "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation." }, "sort": { "$ref": "#/definitions/Sort", "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in Javascript.\n- [A sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) for sorting by another encoding channel. (This type of sort definition is not available for `row` and `column` channels.)\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation." }, "stack": { "anyOf": [ { "$ref": "#/definitions/StackOffset" }, { "type": "null" }, { "type": "boolean" } ], "description": "Type of stacking offset if the field should be stacked.\n`stack` is only applicable for `x` and `y` channels with continuous domains.\nFor example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values:\n- `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart).\n- `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized).
\n-`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)).\n- `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true:\n(1) the mark is `bar` or `area`;\n(2) the stacked measure channel (x or y) has a linear scale;\n(3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "Predicate": { "anyOf": [ { "$ref": "#/definitions/FieldEqualPredicate" }, { "$ref": "#/definitions/FieldRangePredicate" }, { "$ref": "#/definitions/FieldOneOfPredicate" }, { "$ref": "#/definitions/FieldLTPredicate" }, { "$ref": "#/definitions/FieldGTPredicate" }, { "$ref": "#/definitions/FieldLTEPredicate" }, { "$ref": "#/definitions/FieldGTEPredicate" }, { "$ref": "#/definitions/FieldValidPredicate" }, { "$ref": "#/definitions/SelectionPredicate" }, { "type": "string" } ] }, "Projection": { "additionalProperties": false, "properties": { "center": { "description": "Sets the projection’s center to the specified center, a two-element array of longitude and latitude in degrees.\n\n__Default value:__ `[0, 0]`", "items": { "type": "number" }, "type": "array" }, "clipAngle": { "description": "Sets the projection’s clipping circle radius to the specified angle in degrees. If `null`, switches to [antimeridian](http://bl.ocks.org/mbostock/3788999) cutting rather than small-circle clipping.", "type": "number" }, "clipExtent": { "description": "Sets the projection’s viewport clip extent to the specified bounds in pixels. The extent bounds are specified as an array `[[x0, y0], [x1, y1]]`, where `x0` is the left-side of the viewport, `y0` is the top, `x1` is the right and `y1` is the bottom. If `null`, no viewport clipping is performed.", "items": { "items": { "type": "number" }, "type": "array" }, "type": "array" }, "coefficient": { "type": "number" }, "distance": { "type": "number" }, "fraction": { "type": "number" }, "lobes": { "type": "number" }, "parallel": { "type": "number" }, "precision": { "description": "Sets the threshold for the projection’s [adaptive resampling](http://bl.ocks.org/mbostock/3795544) to the specified value in pixels. This value corresponds to the [Douglas–Peucker distance](http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm). If precision is not specified, returns the projection’s current resampling precision which defaults to `√0.5 ≅ 0.70710…`.", "type": "number" }, "radius": { "type": "number" }, "ratio": { "type": "number" }, "reflectX": { "type": "boolean" }, "reflectY": { "type": "boolean" }, "rotate": { "description": "Sets the projection’s three-axis rotation to the specified angles, which must be a two- or three-element array of numbers [`lambda`, `phi`, `gamma`] specifying the rotation angles in degrees about each spherical axis. (These correspond to yaw, pitch and roll.)\n\n__Default value:__ `[0, 0, 0]`", "items": { "type": "number" }, "type": "array" }, "scale": { "description": "Sets the projection's scale (zoom) value, overriding automatic fitting.", "type": "number" }, "spacing": { "type": "number" }, "tilt": { "type": "number" }, "translate": { "description": "Sets the projection's translation (pan) value, overriding automatic fitting.", "items": { "type": "number" }, "type": "array" }, "type": { "$ref": "#/definitions/ProjectionType", "description": "The cartographic projection to use. This value is case-insensitive, for example `\"albers\"` and `\"Albers\"` indicate the same projection type. You can find all valid projection types [in the documentation](https://vega.github.io/vega-lite/docs/projection.html#projection-types).\n\n__Default value:__ `mercator`" } }, "type": "object" }, "ProjectionConfig": { "$ref": "#/definitions/Projection", "description": "Any property of Projection can be in config" }, "ProjectionType": { "enum": [ "albers", "albersUsa", "azimuthalEqualArea", "azimuthalEquidistant", "conicConformal", "conicEqualArea", "conicEquidistant", "equirectangular", "gnomonic", "identity", "mercator", "naturalEarth1", "orthographic", "stereographic", "transverseMercator" ], "type": "string" }, "RangeConfig": { "additionalProperties": { "$ref": "#/definitions/RangeConfigValue" }, "properties": { "category": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "$ref": "#/definitions/SchemeConfig" } ], "description": "Default range for _nominal_ (categorical) fields." }, "diverging": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "$ref": "#/definitions/SchemeConfig" } ], "description": "Default range for diverging _quantitative_ fields." }, "heatmap": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "$ref": "#/definitions/SchemeConfig" } ], "description": "Default range for _quantitative_ heatmaps." }, "ordinal": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "$ref": "#/definitions/SchemeConfig" } ], "description": "Default range for _ordinal_ fields." }, "ramp": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "$ref": "#/definitions/SchemeConfig" } ], "description": "Default range for _quantitative_ and _temporal_ fields." }, "symbol": { "description": "Default range palette for the `shape` channel.", "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "RangeConfigValue": { "anyOf": [ { "items": { "type": [ "number", "string" ] }, "type": "array" }, { "$ref": "#/definitions/SchemeConfig" }, { "additionalProperties": false, "properties": { "step": { "type": "number" } }, "required": [ "step" ], "type": "object" } ] }, "RectConfig": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`." }, "angle": { "description": "The rotation angle of the text, in degrees.", "maximum": 360, "minimum": 0, "type": "number" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`" }, "binSpacing": { "description": "Offset between bars for binned field. Ideal value for this is either 0 (Preferred by statisticians) or 1 (Vega-Lite Default, D3 example style).\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, "color": { "$ref": "#/definitions/Color", "description": "Default color. Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)." }, "continuousBandSize": { "description": "The default size of the bars on continuous scales.\n\n__Default value:__ `5`", "minimum": 0, "type": "number" }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "dir": { "$ref": "#/definitions/Dir", "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`" }, "discreteBandSize": { "description": "The default size of the bars with discrete dimensions. If unspecified, the default size is `bandSize-1`,\nwhich provides 1 pixel offset between bars.", "minimum": 0, "type": "number" }, "dx": { "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "dy": { "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "ellipsis": { "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`", "type": "string" }, "fill": { "$ref": "#/definitions/Color", "description": "Default Fill Color. This has higher precedence than `config.color`\n\n__Default value:__ (None)" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "filled": { "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for `point`, `line` and `rule`; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).", "type": "boolean" }, "font": { "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "fontSize": { "description": "The font size, in pixels.", "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style (e.g., `\"italic\"`)." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "height": { "description": "Height of the marks.", "type": "number" }, "href": { "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.", "format": "uri", "type": "string" }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "limit": { "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit", "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "order": { "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.", "type": [ "null", "boolean" ] }, "orient": { "$ref": "#/definitions/Orientation", "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored." }, "radius": { "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.", "minimum": 0, "type": "number" }, "shape": { "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`", "type": "string" }, "size": { "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__ `30` for point, circle, square marks; `rangeStep` - 1 for bar marks with discrete dimensions; `5` for bar marks with continuous dimensions; `11` for text marks.", "minimum": 0, "type": "number" }, "stroke": { "$ref": "#/definitions/Color", "description": "Default Stroke Color. This has higher precedence than `config.color`\n\n__Default value:__ (None)" }, "strokeCap": { "$ref": "#/definitions/StrokeCap", "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "$ref": "#/definitions/StrokeJoin", "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "tension": { "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).", "maximum": 1, "minimum": 0, "type": "number" }, "text": { "description": "Placeholder text if the `text` channel is not specified", "type": "string" }, "theta": { "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".", "type": "number" }, "tooltip": { "anyOf": [ { "$ref": "#/definitions/Value" }, { "$ref": "#/definitions/TooltipContent" }, { "type": "null" } ], "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null`, then no tooltip will be used." }, "width": { "description": "Width of the marks.", "type": "number" }, "x": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "y": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." } }, "type": "object" }, "RepeatMapping": { "additionalProperties": false, "properties": { "column": { "description": "An array of fields to be repeated horizontally.", "items": { "type": "string" }, "type": "array" }, "row": { "description": "An array of fields to be repeated vertically.", "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "RepeatRef": { "additionalProperties": false, "description": "A ValueDef with optional Condition\n{\n condition: {field: ...} | {value: ...},\n value: ...,\n} \n Reference to a repeated value.", "properties": { "repeat": { "enum": [ "row", "column", "repeat" ], "type": "string" } }, "required": [ "repeat" ], "type": "object" }, "Resolve": { "additionalProperties": false, "description": "Defines how scales, axes, and legends from different specs should be combined. Resolve is a mapping from `scale`, `axis`, and `legend` to a mapping from channels to resolutions.", "properties": { "axis": { "$ref": "#/definitions/AxisResolveMap" }, "legend": { "$ref": "#/definitions/LegendResolveMap" }, "scale": { "$ref": "#/definitions/ScaleResolveMap" } }, "type": "object" }, "ResolveMode": { "enum": [ "independent", "shared" ], "type": "string" }, "RowCol": { "additionalProperties": false, "properties": { "column": { "$ref": "#/definitions/LayoutAlign" }, "row": { "$ref": "#/definitions/LayoutAlign" } }, "type": "object" }, "RowCol": { "additionalProperties": false, "properties": { "column": { "type": "boolean" }, "row": { "type": "boolean" } }, "type": "object" }, "RowCol": { "additionalProperties": false, "properties": { "column": { "type": "number" }, "row": { "type": "number" } }, "type": "object" }, "SampleTransform": { "additionalProperties": false, "properties": { "sample": { "description": "The maximum number of data objects to include in the sample.\n\n__Default value:__ `1000`", "type": "number" } }, "required": [ "sample" ], "type": "object" }, "Scale": { "additionalProperties": false, "properties": { "align": { "description": "The alignment of the steps within the scale range.\n\nThis value must lie in the range `[0,1]`. A value of `0.5` indicates that the steps should be centered within the range. A value of `0` or `1` may be used to shift the bands to one side, say to position them adjacent to an axis.\n\n__Default value:__ `0.5`", "type": "number" }, "base": { "description": "The logarithm base of the `log` scale (default `10`).", "type": "number" }, "bins": { "description": "An array of bin boundaries over the scale domain. If provided, axes and legends will use the bin boundaries to inform the choice of tick marks and text labels.", "items": { "type": "number" }, "type": "array" }, "clamp": { "description": "If `true`, values that exceed the data domain are clamped to either the minimum or maximum range value\n\n__Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/config.html#scale-config)'s `clamp` (`true` by default).", "type": "boolean" }, "constant": { "description": "A constant determining the slope of the symlog function around zero. Only used for `symlog` scales.\n\n__Default value:__ `1`", "type": "number" }, "domain": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "items": { "type": "string" }, "type": "array" }, { "items": { "type": "boolean" }, "type": "array" }, { "items": { "$ref": "#/definitions/DateTime" }, "type": "array" }, { "enum": [ "unaggregated" ], "type": "string" }, { "$ref": "#/definitions/SelectionDomain" } ], "description": "Customized domain values.\n\nFor _quantitative_ fields, `domain` can take the form of a two-element array with minimum and maximum values. [Piecewise scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise) can be created by providing a `domain` with more than two entries.\nIf the input field is aggregated, `domain` can also be a string value `\"unaggregated\"`, indicating that the domain should include the raw data values prior to the aggregation.\n\nFor _temporal_ fields, `domain` can be a two-element array minimum and maximum values, in the form of either timestamps or the [DateTime definition objects](https://vega.github.io/vega-lite/docs/types.html#datetime).\n\nFor _ordinal_ and _nominal_ fields, `domain` can be an array that lists valid input values.\n\nThe `selection` property can be used to [interactively determine](https://vega.github.io/vega-lite/docs/selection.html#scale-domains) the scale domain." }, "exponent": { "description": "The exponent of the `pow` scale.", "type": "number" }, "interpolate": { "anyOf": [ { "$ref": "#/definitions/ScaleInterpolate" }, { "$ref": "#/definitions/ScaleInterpolateParams" } ], "description": "The interpolation method for range values. By default, a general interpolator for numbers, dates, strings and colors (in HCL space) is used. For color ranges, this property allows interpolation in alternative color spaces. Legal values include `rgb`, `hsl`, `hsl-long`, `lab`, `hcl`, `hcl-long`, `cubehelix` and `cubehelix-long` ('-long' variants use longer paths in polar coordinate spaces). If object-valued, this property accepts an object with a string-valued _type_ property and an optional numeric _gamma_ property applicable to rgb and cubehelix interpolators. For more, see the [d3-interpolate documentation](https://github.com/d3/d3-interpolate).\n\n* __Default value:__ `hcl`" }, "nice": { "anyOf": [ { "type": "boolean" }, { "type": "number" }, { "$ref": "#/definitions/NiceTime" }, { "additionalProperties": false, "properties": { "interval": { "type": "string" }, "step": { "type": "number" } }, "required": [ "interval", "step" ], "type": "object" } ], "description": "Extending the domain so that it starts and ends on nice round values. This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value. Nicing is useful if the domain is computed from data and may be irregular. For example, for a domain of _[0.201479…, 0.996679…]_, a nice domain might be _[0.2, 1.0]_.\n\nFor quantitative scales such as linear, `nice` can be either a boolean flag or a number. If `nice` is a number, it will represent a desired tick count. This allows greater control over the step size used to extend the bounds, guaranteeing that the returned ticks will exactly cover the domain.\n\nFor temporal fields with time and utc scales, the `nice` value can be a string indicating the desired time interval. Legal values are `\"millisecond\"`, `\"second\"`, `\"minute\"`, `\"hour\"`, `\"day\"`, `\"week\"`, `\"month\"`, and `\"year\"`. Alternatively, `time` and `utc` scales can accept an object-valued interval specifier of the form `{\"interval\": \"month\", \"step\": 3}`, which includes a desired number of interval steps. Here, the domain would snap to quarter (Jan, Apr, Jul, Oct) boundaries.\n\n__Default value:__ `true` for unbinned _quantitative_ fields; `false` otherwise." }, "padding": { "description": "For _[continuous](https://vega.github.io/vega-lite/docs/scale.html#continuous)_ scales, expands the scale domain to accommodate the specified number of pixels on each of the scale range. The scale range must represent pixels for this parameter to function as intended. Padding adjustment is performed prior to all other adjustments, including the effects of the `zero`, `nice`, `domainMin`, and `domainMax` properties.\n\nFor _[band](https://vega.github.io/vega-lite/docs/scale.html#band)_ scales, shortcut for setting `paddingInner` and `paddingOuter` to the same value.\n\nFor _[point](https://vega.github.io/vega-lite/docs/scale.html#point)_ scales, alias for `paddingOuter`.\n\n__Default value:__ For _continuous_ scales, derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `continuousPadding`.\nFor _band and point_ scales, see `paddingInner` and `paddingOuter`. By default, Vega-Lite sets padding such that _width/height = number of unique values * step_.", "minimum": 0, "type": "number" }, "paddingInner": { "description": "The inner padding (spacing) within each band step of band scales, as a fraction of the step size. This value must lie in the range [0,1].\n\nFor point scale, this property is invalid as point scales do not have internal band widths (only step sizes between bands).\n\n__Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `bandPaddingInner`.", "maximum": 1, "minimum": 0, "type": "number" }, "paddingOuter": { "description": "The outer padding (spacing) at the ends of the range of band and point scales,\nas a fraction of the step size. This value must lie in the range [0,1].\n\n__Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `bandPaddingOuter` for band scales and `pointPadding` for point scales.\nBy default, Vega-Lite sets outer padding such that _width/height = number of unique values * step_.", "maximum": 1, "minimum": 0, "type": "number" }, "range": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "items": { "type": "string" }, "type": "array" }, { "type": "string" } ], "description": "The range of the scale. One of:\n\n- A string indicating a [pre-defined named scale range](https://vega.github.io/vega-lite/docs/scale.html#range-config) (e.g., example, `\"symbol\"`, or `\"diverging\"`).\n\n- For [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous), two-element array indicating minimum and maximum values, or an array with more than two entries for specifying a [piecewise scale](https://vega.github.io/vega-lite/docs/scale.html#piecewise).\n\n- For [discrete](https://vega.github.io/vega-lite/docs/scale.html#discrete) and [discretizing](https://vega.github.io/vega-lite/docs/scale.html#discretizing) scales, an array of desired output values.\n\n__Notes:__\n\n1) For color scales you can also specify a color [`scheme`](https://vega.github.io/vega-lite/docs/scale.html#scheme) instead of `range`.\n\n2) Any directly specified `range` for `x` and `y` channels will be ignored. Range can be customized via the view's corresponding [size](https://vega.github.io/vega-lite/docs/size.html) (`width` and `height`) or via [range steps and paddings properties](#range-step) for [band](#band) and [point](#point) scales." }, "rangeStep": { "description": "The distance between the starts of adjacent bands or points in [band](https://vega.github.io/vega-lite/docs/scale.html#band) and [point](https://vega.github.io/vega-lite/docs/scale.html#point) scales.\n\nIf `rangeStep` is `null` or if the view contains the scale's corresponding [size](https://vega.github.io/vega-lite/docs/size.html) (`width` for `x` scales and `height` for `y` scales), `rangeStep` will be automatically determined to fit the size of the view.\n\n__Default value:__ derived the [scale config](https://vega.github.io/vega-lite/docs/config.html#scale-config)'s `textXRangeStep` (`90` by default) for x-scales of `text` marks and `rangeStep` (`21` by default) for x-scales of other marks and y-scales.\n\n__Warning__: If `rangeStep` is `null` and the cardinality of the scale's domain is higher than `width` or `height`, the rangeStep might become less than one pixel and the mark might not appear correctly.", "minimum": 0, "type": [ "number", "null" ] }, "round": { "description": "If `true`, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid.\n\n__Default value:__ `false`.", "type": "boolean" }, "scheme": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/SchemeParams" } ], "description": "A string indicating a color [scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme) name (e.g., `\"category10\"` or `\"blues\"`) or a [scheme parameter object](https://vega.github.io/vega-lite/docs/scale.html#scheme-params).\n\nDiscrete color schemes may be used with [discrete](https://vega.github.io/vega-lite/docs/scale.html#discrete) or [discretizing](https://vega.github.io/vega-lite/docs/scale.html#discretizing) scales. Continuous color schemes are intended for use with color scales.\n\nFor the full list of supported schemes, please refer to the [Vega Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference." }, "type": { "$ref": "#/definitions/ScaleType", "description": "The type of scale. Vega-Lite supports the following categories of scale types:\n\n1) [**Continuous Scales**](https://vega.github.io/vega-lite/docs/scale.html#continuous) -- mapping continuous domains to continuous output ranges ([`\"linear\"`](https://vega.github.io/vega-lite/docs/scale.html#linear), [`\"pow\"`](https://vega.github.io/vega-lite/docs/scale.html#pow), [`\"sqrt\"`](https://vega.github.io/vega-lite/docs/scale.html#sqrt), [`\"symlog\"`](https://vega.github.io/vega-lite/docs/scale.html#symlog), [`\"log\"`](https://vega.github.io/vega-lite/docs/scale.html#log), [`\"time\"`](https://vega.github.io/vega-lite/docs/scale.html#time), [`\"utc\"`](https://vega.github.io/vega-lite/docs/scale.html#utc).\n\n2) [**Discrete Scales**](https://vega.github.io/vega-lite/docs/scale.html#discrete) -- mapping discrete domains to discrete ([`\"ordinal\"`](https://vega.github.io/vega-lite/docs/scale.html#ordinal)) or continuous ([`\"band\"`](https://vega.github.io/vega-lite/docs/scale.html#band) and [`\"point\"`](https://vega.github.io/vega-lite/docs/scale.html#point)) output ranges.\n\n3) [**Discretizing Scales**](https://vega.github.io/vega-lite/docs/scale.html#discretizing) -- mapping continuous domains to discrete output ranges [`\"bin-ordinal\"`](https://vega.github.io/vega-lite/docs/scale.html#bin-ordinal), [`\"quantile\"`](https://vega.github.io/vega-lite/docs/scale.html#quantile), [`\"quantize\"`](https://vega.github.io/vega-lite/docs/scale.html#quantize) and [`\"threshold\"`](https://vega.github.io/vega-lite/docs/scale.html#threshold).\n\n__Default value:__ please see the [scale type table](https://vega.github.io/vega-lite/docs/scale.html#type)." }, "zero": { "description": "If `true`, ensures that a zero baseline value is included in the scale domain.\n\n__Default value:__ `true` for x and y channels if the quantitative field is not binned and no custom `domain` is provided; `false` otherwise.\n\n__Note:__ Log, time, and utc scales do not support `zero`.", "type": "boolean" } }, "type": "object" }, "ScaleConfig": { "additionalProperties": false, "properties": { "bandPaddingInner": { "description": "Default inner padding for `x` and `y` band-ordinal scales.\n\n__Default value:__\n- `barBandPaddingInner` for bar marks (`0.1` by default)\n- `rectBandPaddingInner` for rect and other marks (`0` by default)", "maximum": 1, "minimum": 0, "type": "number" }, "bandPaddingOuter": { "description": "Default outer padding for `x` and `y` band-ordinal scales.\n\n__Default value:__ `paddingInner/2` (which makes _width/height = number of unique values * step_)", "maximum": 1, "minimum": 0, "type": "number" }, "barBandPaddingInner": { "description": "Default inner padding for `x` and `y` band-ordinal scales of `\"bar\"` marks.\n\n__Default value:__ `0.1`", "maximum": 1, "minimum": 0, "type": "number" }, "barBandPaddingOuter": { "description": "Default outer padding for `x` and `y` band-ordinal scales of `\"bar\"` marks.\nIf not specified, by default, band scale's paddingOuter is paddingInner/2.", "maximum": 1, "minimum": 0, "type": "number" }, "clamp": { "description": "If true, values that exceed the data domain are clamped to either the minimum or maximum range value", "type": "boolean" }, "continuousPadding": { "description": "Default padding for continuous scales.\n\n__Default:__ `5` for continuous x-scale of a vertical bar and continuous y-scale of a horizontal bar.; `0` otherwise.", "minimum": 0, "type": "number" }, "maxBandSize": { "description": "The default max value for mapping quantitative fields to bar's size/bandSize.\n\nIf undefined (default), we will use the scale's `rangeStep` - 1.", "minimum": 0, "type": "number" }, "maxFontSize": { "description": "The default max value for mapping quantitative fields to text's size/fontSize.\n\n__Default value:__ `40`", "minimum": 0, "type": "number" }, "maxOpacity": { "description": "Default max opacity for mapping a field to opacity.\n\n__Default value:__ `0.8`", "maximum": 1, "minimum": 0, "type": "number" }, "maxSize": { "description": "Default max value for point size scale.", "minimum": 0, "type": "number" }, "maxStrokeWidth": { "description": "Default max strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks.\n\n__Default value:__ `4`", "minimum": 0, "type": "number" }, "minBandSize": { "description": "The default min value for mapping quantitative fields to bar and tick's size/bandSize scale with zero=false.\n\n__Default value:__ `2`", "minimum": 0, "type": "number" }, "minFontSize": { "description": "The default min value for mapping quantitative fields to tick's size/fontSize scale with zero=false\n\n__Default value:__ `8`", "minimum": 0, "type": "number" }, "minOpacity": { "description": "Default minimum opacity for mapping a field to opacity.\n\n__Default value:__ `0.3`", "maximum": 1, "minimum": 0, "type": "number" }, "minSize": { "description": "Default minimum value for point size scale with zero=false.\n\n__Default value:__ `9`", "minimum": 0, "type": "number" }, "minStrokeWidth": { "description": "Default minimum strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks with zero=false.\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, "pointPadding": { "description": "Default outer padding for `x` and `y` point-ordinal scales.\n\n__Default value:__ `0.5` (which makes _width/height = number of unique values * step_)", "maximum": 1, "minimum": 0, "type": "number" }, "quantileCount": { "description": "Default range cardinality for [`quantile`](https://vega.github.io/vega-lite/docs/scale.html#quantile) scale.\n\n__Default value:__ `4`", "minimum": 0, "type": "number" }, "quantizeCount": { "description": "Default range cardinality for [`quantize`](https://vega.github.io/vega-lite/docs/scale.html#quantize) scale.\n\n__Default value:__ `4`", "minimum": 0, "type": "number" }, "rangeStep": { "description": "Default range step for band and point scales of (1) the `y` channel\nand (2) the `x` channel when the mark is not `text`.\n\n__Default value:__ `20`", "minimum": 0, "type": [ "number", "null" ] }, "rectBandPaddingInner": { "description": "Default inner padding for `x` and `y` band-ordinal scales of `\"rect\"` marks.\n\n__Default value:__ `0`", "maximum": 1, "minimum": 0, "type": "number" }, "rectBandPaddingOuter": { "description": "Default outer padding for `x` and `y` band-ordinal scales of `\"rect\"` marks.\nIf not specified, by default, band scale's paddingOuter is paddingInner/2.", "maximum": 1, "minimum": 0, "type": "number" }, "round": { "description": "If true, rounds numeric output values to integers.\nThis can be helpful for snapping to the pixel grid.\n(Only available for `x`, `y`, and `size` scales.)", "type": "boolean" }, "textXRangeStep": { "description": "Default range step for `x` band and point scales of text marks.\n\n__Default value:__ `90`", "minimum": 0, "type": "number" }, "useUnaggregatedDomain": { "description": "Use the source data range before aggregation as scale domain instead of aggregated data for aggregate axis.\n\nThis is equivalent to setting `domain` to `\"unaggregate\"` for aggregated _quantitative_ fields by default.\n\nThis property only works with aggregate functions that produce values within the raw data domain (`\"mean\"`, `\"average\"`, `\"median\"`, `\"q1\"`, `\"q3\"`, `\"min\"`, `\"max\"`). For other aggregations that produce values outside of the raw data domain (e.g. `\"count\"`, `\"sum\"`), this property is ignored.\n\n__Default value:__ `false`", "type": "boolean" } }, "type": "object" }, "ScaleInterpolate": { "enum": [ "rgb", "lab", "hcl", "hsl", "hsl-long", "hcl-long", "cubehelix", "cubehelix-long" ], "type": "string" }, "ScaleInterpolateParams": { "additionalProperties": false, "properties": { "gamma": { "type": "number" }, "type": { "enum": [ "rgb", "cubehelix", "cubehelix-long" ], "type": "string" } }, "required": [ "type" ], "type": "object" }, "ScaleResolveMap": { "additionalProperties": false, "properties": { "color": { "$ref": "#/definitions/ResolveMode" }, "fill": { "$ref": "#/definitions/ResolveMode" }, "fillOpacity": { "$ref": "#/definitions/ResolveMode" }, "opacity": { "$ref": "#/definitions/ResolveMode" }, "shape": { "$ref": "#/definitions/ResolveMode" }, "size": { "$ref": "#/definitions/ResolveMode" }, "stroke": { "$ref": "#/definitions/ResolveMode" }, "strokeOpacity": { "$ref": "#/definitions/ResolveMode" }, "strokeWidth": { "$ref": "#/definitions/ResolveMode" }, "x": { "$ref": "#/definitions/ResolveMode" }, "y": { "$ref": "#/definitions/ResolveMode" } }, "type": "object" }, "ScaleType": { "enum": [ "linear", "log", "pow", "sqrt", "symlog", "time", "utc", "quantile", "quantize", "threshold", "bin-ordinal", "ordinal", "point", "band" ], "type": "string" }, "SchemeConfig": { "additionalProperties": false, "properties": { "count": { "type": "number" }, "extent": { "items": { "type": "number" }, "type": "array" }, "scheme": { "type": "string" } }, "required": [ "scheme" ], "type": "object" }, "SchemeParams": { "additionalProperties": false, "properties": { "count": { "description": "The number of colors to use in the scheme. This can be useful for scale types such as `\"quantize\"`, which use the length of the scale range to determine the number of discrete bins for the scale domain.", "type": "number" }, "extent": { "description": "The extent of the color range to use. For example `[0.2, 1]` will rescale the color scheme such that color values in the range _[0, 0.2)_ are excluded from the scheme.", "items": { "type": "number" }, "type": "array" }, "name": { "description": "A color scheme name for ordinal scales (e.g., `\"category10\"` or `\"blues\"`).\n\nFor the full list of supported schemes, please refer to the [Vega Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference.", "type": "string" } }, "required": [ "name" ], "type": "object" }, "SecondaryFieldDef": { "additionalProperties": false, "description": "A field definition of a secondary channel that shares a scale with another primary channel. For example, `x2`, `xError` and `xError2` share the same scale with `x`.", "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.", "type": "null" }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] } }, "type": "object" }, "SelectionConfig": { "additionalProperties": false, "properties": { "interval": { "$ref": "#/definitions/IntervalSelectionConfig", "description": "The default definition for an [`interval`](https://vega.github.io/vega-lite/docs/selection.html#type) selection. All properties and transformations\nfor an interval selection definition (except `type`) may be specified here.\n\nFor instance, setting `interval` to `{\"translate\": false}` disables the ability to move\ninterval selections by default." }, "multi": { "$ref": "#/definitions/MultiSelectionConfig", "description": "The default definition for a [`multi`](https://vega.github.io/vega-lite/docs/selection.html#type) selection. All properties and transformations\nfor a multi selection definition (except `type`) may be specified here.\n\nFor instance, setting `multi` to `{\"toggle\": \"event.altKey\"}` adds additional values to\nmulti selections when clicking with the alt-key pressed by default." }, "single": { "$ref": "#/definitions/SingleSelectionConfig", "description": "The default definition for a [`single`](https://vega.github.io/vega-lite/docs/selection.html#type) selection. All properties and transformations\n for a single selection definition (except `type`) may be specified here.\n\nFor instance, setting `single` to `{\"on\": \"dblclick\"}` populates single selections on double-click by default." } }, "type": "object" }, "SelectionDef": { "anyOf": [ { "$ref": "#/definitions/SingleSelection" }, { "$ref": "#/definitions/MultiSelection" }, { "$ref": "#/definitions/IntervalSelection" } ] }, "SelectionDomain": { "anyOf": [ { "additionalProperties": false, "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "The field name to extract selected values for, when a selection is [projected](https://vega.github.io/vega-lite/docs/project.html)\nover multiple fields or encodings." }, "selection": { "description": "The name of a selection.", "type": "string" } }, "required": [ "selection" ], "type": "object" }, { "additionalProperties": false, "properties": { "encoding": { "description": "The encoding channel to extract selected values for, when a selection is [projected](https://vega.github.io/vega-lite/docs/project.html)\nover multiple fields or encodings.", "type": "string" }, "selection": { "description": "The name of a selection.", "type": "string" } }, "required": [ "selection" ], "type": "object" } ] }, "SelectionInit": { "anyOf": [ { "type": "boolean" }, { "type": "number" }, { "type": "string" }, { "$ref": "#/definitions/DateTime" } ] }, "SelectionInitInterval": { "anyOf": [ { "items": [ { "type": "boolean" }, { "type": "boolean" } ], "maxItems": 2, "minItems": 2, "type": "array" }, { "items": [ { "type": "number" }, { "type": "number" } ], "maxItems": 2, "minItems": 2, "type": "array" }, { "items": [ { "type": "string" }, { "type": "string" } ], "maxItems": 2, "minItems": 2, "type": "array" }, { "items": [ { "$ref": "#/definitions/DateTime" }, { "$ref": "#/definitions/DateTime" } ], "maxItems": 2, "minItems": 2, "type": "array" } ] }, "SelectionInitIntervalMapping": { "additionalProperties": { "$ref": "#/definitions/SelectionInitInterval" }, "type": "object" }, "SelectionInitMapping": { "additionalProperties": { "$ref": "#/definitions/SelectionInit" }, "type": "object" }, "SelectionPredicate": { "additionalProperties": false, "properties": { "selection": { "$ref": "#/definitions/SelectionOperand", "description": "Filter using a selection name." } }, "required": [ "selection" ], "type": "object" }, "SelectionResolution": { "enum": [ "global", "union", "intersect" ], "type": "string" }, "SequenceGenerator": { "additionalProperties": false, "properties": { "name": { "description": "Provide a placeholder name and bind data at runtime.", "type": "string" }, "sequence": { "$ref": "#/definitions/SequenceParams", "description": "Generate a sequence of numbers." } }, "required": [ "sequence" ], "type": "object" }, "SequenceParams": { "additionalProperties": false, "properties": { "as": { "$ref": "#/definitions/FieldName", "description": "The name of the generated sequence field.\n\n__Default value:__ `\"data\"`" }, "start": { "description": "The starting value of the sequence (inclusive).", "type": "number" }, "step": { "description": "The step value between sequence entries.\n\n__Default value:__ `1`", "type": "number" }, "stop": { "description": "The ending value of the sequence (exclusive).", "type": "number" } }, "required": [ "start", "stop" ], "type": "object" }, "ShapeFieldDefWithCondition": { "$ref": "#/definitions/StringFieldDefWithCondition" }, "ShapeValueDefWithCondition": { "$ref": "#/definitions/StringValueDefWithCondition" }, "SignalRef": { "additionalProperties": false, "properties": { "signal": { "type": "string" } }, "required": [ "signal" ], "type": "object" }, "SingleDefUnitChannel": { "enum": [ "x", "y", "x2", "y2", "longitude", "latitude", "longitude2", "latitude2", "color", "fill", "stroke", "opacity", "fillOpacity", "strokeOpacity", "strokeWidth", "size", "shape", "key", "text", "tooltip", "href" ], "type": "string" }, "SingleSelection": { "additionalProperties": false, "properties": { "bind": { "anyOf": [ { "$ref": "#/definitions/Binding" }, { "additionalProperties": { "$ref": "#/definitions/Binding" }, "type": "object" } ], "description": "Establish a two-way binding between a single selection and input elements\n(also known as dynamic query widgets). A binding takes the form of\nVega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind)\nor can be a mapping between projected field/encodings and binding definitions.\n\n__See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation." }, "clear": { "anyOf": [ { "$ref": "#/definitions/EventStream" }, { "type": "boolean" } ], "description": "Clears the selection, emptying it of all values. Can be an\n[EventStream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation." }, "empty": { "description": "By default, `all` data values are considered to lie within an empty selection.\nWhen set to `none`, empty selections contain no data values.", "enum": [ "all", "none" ], "type": "string" }, "encodings": { "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/SingleDefUnitChannel" }, "type": "array" }, "fields": { "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "init": { "$ref": "#/definitions/SelectionInitMapping", "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and initial values.\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation." }, "nearest": { "description": "When true, an invisible voronoi diagram is computed to accelerate discrete\nselection. The data value _nearest_ the mouse cursor is added to the selection.\n\n__See also:__ [`nearest`](https://vega.github.io/vega-lite/docs/nearest.html) documentation.", "type": "boolean" }, "on": { "$ref": "#/definitions/EventStream", "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\nFor interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)." }, "resolve": { "$ref": "#/definitions/SelectionResolution", "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation." }, "type": { "description": "Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types:\n\n- `single` -- to select a single discrete data value on `click`.\n- `multi` -- to select multiple discrete data value; the first value is selected on `click` and additional values toggled on shift-`click`.\n- `interval` -- to select a continuous range of data values on `drag`.", "enum": [ "single" ], "type": "string" } }, "required": [ "type" ], "type": "object" }, "SingleSelectionConfig": { "additionalProperties": false, "properties": { "bind": { "anyOf": [ { "$ref": "#/definitions/Binding" }, { "additionalProperties": { "$ref": "#/definitions/Binding" }, "type": "object" } ], "description": "Establish a two-way binding between a single selection and input elements\n(also known as dynamic query widgets). A binding takes the form of\nVega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind)\nor can be a mapping between projected field/encodings and binding definitions.\n\n__See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation." }, "clear": { "anyOf": [ { "$ref": "#/definitions/EventStream" }, { "type": "boolean" } ], "description": "Clears the selection, emptying it of all values. Can be an\n[EventStream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation." }, "empty": { "description": "By default, `all` data values are considered to lie within an empty selection.\nWhen set to `none`, empty selections contain no data values.", "enum": [ "all", "none" ], "type": "string" }, "encodings": { "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/SingleDefUnitChannel" }, "type": "array" }, "fields": { "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "init": { "$ref": "#/definitions/SelectionInitMapping", "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and initial values.\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation." }, "nearest": { "description": "When true, an invisible voronoi diagram is computed to accelerate discrete\nselection. The data value _nearest_ the mouse cursor is added to the selection.\n\n__See also:__ [`nearest`](https://vega.github.io/vega-lite/docs/nearest.html) documentation.", "type": "boolean" }, "on": { "$ref": "#/definitions/EventStream", "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\nFor interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)." }, "resolve": { "$ref": "#/definitions/SelectionResolution", "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation." } }, "type": "object" }, "SingleTimeUnit": { "anyOf": [ { "$ref": "#/definitions/LocalSingleTimeUnit" }, { "$ref": "#/definitions/UtcSingleTimeUnit" } ] }, "Sort": { "anyOf": [ { "$ref": "#/definitions/SortArray" }, { "$ref": "#/definitions/SortOrder" }, { "$ref": "#/definitions/EncodingSortField" }, { "$ref": "#/definitions/SortByEncoding" }, { "type": "null" } ] }, "SortArray": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "items": { "type": "string" }, "type": "array" }, { "items": { "type": "boolean" }, "type": "array" }, { "items": { "$ref": "#/definitions/DateTime" }, "type": "array" } ] }, "SortByEncoding": { "additionalProperties": false, "properties": { "encoding": { "$ref": "#/definitions/SingleDefUnitChannel", "description": "The [encoding channel](https://vega.github.io/vega-lite/docs/encoding.html#channels) to sort by (e.g., `\"x\"`, `\"y\"`)" }, "order": { "anyOf": [ { "$ref": "#/definitions/SortOrder" }, { "type": "null" } ], "description": "The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort)." } }, "required": [ "encoding" ], "type": "object" }, "SortField": { "additionalProperties": false, "description": "A sort definition for transform", "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "The name of the field to sort." }, "order": { "anyOf": [ { "$ref": "#/definitions/SortOrder" }, { "type": "null" } ], "description": "Whether to sort the field in ascending or descending order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort)." } }, "required": [ "field" ], "type": "object" }, "SortOrder": { "enum": [ "ascending", "descending" ], "type": "string" }, "SphereGenerator": { "additionalProperties": false, "properties": { "name": { "description": "Provide a placeholder name and bind data at runtime.", "type": "string" }, "sphere": { "anyOf": [ { "enum": [ true ], "type": "boolean" }, { "additionalProperties": false, "type": "object" } ], "description": "Generate sphere GeoJSON data for the full globe." } }, "required": [ "sphere" ], "type": "object" }, "StackOffset": { "enum": [ "zero", "center", "normalize" ], "type": "string" }, "StackTransform": { "additionalProperties": false, "properties": { "as": { "anyOf": [ { "$ref": "#/definitions/FieldName" }, { "items": { "$ref": "#/definitions/FieldName" }, "type": "array" } ], "description": "Output field names. This can be either a string or an array of strings with\ntwo elements denoting the name for the fields for stack start and stack end\nrespectively.\nIf a single string(eg.\"val\") is provided, the end field will be \"val_end\"." }, "groupby": { "description": "The data fields to group by.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "offset": { "description": "Mode for stacking marks.\n__Default value:__ `\"zero\"`", "enum": [ "zero", "center", "normalize" ], "type": "string" }, "sort": { "description": "Field that determines the order of leaves in the stacked charts.", "items": { "$ref": "#/definitions/SortField" }, "type": "array" }, "stack": { "$ref": "#/definitions/FieldName", "description": "The field which is stacked." } }, "required": [ "stack", "groupby", "as" ], "type": "object" }, "StandardType": { "enum": [ "quantitative", "ordinal", "temporal", "nominal" ], "type": "string" }, "StringFieldDefWithCondition": { "$ref": "#/definitions/FieldDefWithCondition,(string|null)>" }, "StringFieldDefWithCondition": { "$ref": "#/definitions/FieldDefWithCondition" }, "StringValueDefWithCondition": { "$ref": "#/definitions/ValueDefWithCondition,(string|null)>" }, "StringValueDefWithCondition": { "$ref": "#/definitions/ValueDefWithCondition" }, "StrokeCap": { "enum": [ "butt", "round", "square" ], "type": "string" }, "StrokeJoin": { "enum": [ "miter", "round", "bevel" ], "type": "string" }, "StyleConfigIndex": { "additionalProperties": { "$ref": "#/definitions/BaseMarkConfig" }, "type": "object" }, "SymbolShape": { "type": "string" }, "TextBaseline": { "anyOf": [ { "enum": [ "alphabetic" ], "type": "string" }, { "$ref": "#/definitions/Baseline" } ] }, "TextConfig": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`." }, "angle": { "description": "The rotation angle of the text, in degrees.", "maximum": 360, "minimum": 0, "type": "number" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`" }, "color": { "$ref": "#/definitions/Color", "description": "Default color. Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)." }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "dir": { "$ref": "#/definitions/Dir", "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`" }, "dx": { "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "dy": { "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "ellipsis": { "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`", "type": "string" }, "fill": { "$ref": "#/definitions/Color", "description": "Default Fill Color. This has higher precedence than `config.color`\n\n__Default value:__ (None)" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "filled": { "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for `point`, `line` and `rule`; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).", "type": "boolean" }, "font": { "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "fontSize": { "description": "The font size, in pixels.", "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style (e.g., `\"italic\"`)." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "height": { "description": "Height of the marks.", "type": "number" }, "href": { "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.", "format": "uri", "type": "string" }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "limit": { "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit", "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "order": { "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.", "type": [ "null", "boolean" ] }, "orient": { "$ref": "#/definitions/Orientation", "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored." }, "radius": { "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.", "minimum": 0, "type": "number" }, "shape": { "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`", "type": "string" }, "shortTimeLabels": { "description": "Whether month names and weekday names should be abbreviated.", "type": "boolean" }, "size": { "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__ `30` for point, circle, square marks; `rangeStep` - 1 for bar marks with discrete dimensions; `5` for bar marks with continuous dimensions; `11` for text marks.", "minimum": 0, "type": "number" }, "stroke": { "$ref": "#/definitions/Color", "description": "Default Stroke Color. This has higher precedence than `config.color`\n\n__Default value:__ (None)" }, "strokeCap": { "$ref": "#/definitions/StrokeCap", "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "$ref": "#/definitions/StrokeJoin", "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "tension": { "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).", "maximum": 1, "minimum": 0, "type": "number" }, "text": { "description": "Placeholder text if the `text` channel is not specified", "type": "string" }, "theta": { "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".", "type": "number" }, "tooltip": { "anyOf": [ { "$ref": "#/definitions/Value" }, { "$ref": "#/definitions/TooltipContent" }, { "type": "null" } ], "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null`, then no tooltip will be used." }, "width": { "description": "Width of the marks.", "type": "number" }, "x": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "y": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." } }, "type": "object" }, "TextFieldDef": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "enum": [ "binned" ], "type": "string" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "format": { "description": "The text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\n__Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.", "type": "string" }, "formatType": { "description": "The format type for labels (`\"number\"` or `\"time\"`).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.", "enum": [ "number", "time" ], "type": "string" }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "TextFieldDefWithCondition": { "$ref": "#/definitions/FieldDefWithCondition" }, "TextValueDefWithCondition": { "$ref": "#/definitions/ValueDefWithCondition" }, "TickConfig": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`." }, "angle": { "description": "The rotation angle of the text, in degrees.", "maximum": 360, "minimum": 0, "type": "number" }, "bandSize": { "description": "The width of the ticks.\n\n__Default value:__ 3/4 of rangeStep.", "minimum": 0, "type": "number" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`" }, "color": { "$ref": "#/definitions/Color", "description": "Default color. Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)." }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "dir": { "$ref": "#/definitions/Dir", "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`" }, "dx": { "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "dy": { "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "ellipsis": { "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`", "type": "string" }, "fill": { "$ref": "#/definitions/Color", "description": "Default Fill Color. This has higher precedence than `config.color`\n\n__Default value:__ (None)" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "filled": { "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for `point`, `line` and `rule`; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).", "type": "boolean" }, "font": { "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "fontSize": { "description": "The font size, in pixels.", "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style (e.g., `\"italic\"`)." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "height": { "description": "Height of the marks.", "type": "number" }, "href": { "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.", "format": "uri", "type": "string" }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "limit": { "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit", "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "order": { "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.", "type": [ "null", "boolean" ] }, "orient": { "$ref": "#/definitions/Orientation", "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored." }, "radius": { "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.", "minimum": 0, "type": "number" }, "shape": { "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`", "type": "string" }, "size": { "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__ `30` for point, circle, square marks; `rangeStep` - 1 for bar marks with discrete dimensions; `5` for bar marks with continuous dimensions; `11` for text marks.", "minimum": 0, "type": "number" }, "stroke": { "$ref": "#/definitions/Color", "description": "Default Stroke Color. This has higher precedence than `config.color`\n\n__Default value:__ (None)" }, "strokeCap": { "$ref": "#/definitions/StrokeCap", "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "$ref": "#/definitions/StrokeJoin", "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "tension": { "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).", "maximum": 1, "minimum": 0, "type": "number" }, "text": { "description": "Placeholder text if the `text` channel is not specified", "type": "string" }, "theta": { "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".", "type": "number" }, "thickness": { "description": "Thickness of the tick mark.\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, "tooltip": { "anyOf": [ { "$ref": "#/definitions/Value" }, { "$ref": "#/definitions/TooltipContent" }, { "type": "null" } ], "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null`, then no tooltip will be used." }, "width": { "description": "Width of the marks.", "type": "number" }, "x": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "y": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." } }, "type": "object" }, "TimeUnit": { "anyOf": [ { "$ref": "#/definitions/SingleTimeUnit" }, { "$ref": "#/definitions/MultiTimeUnit" } ] }, "TimeUnitTransform": { "additionalProperties": false, "properties": { "as": { "$ref": "#/definitions/FieldName", "description": "The output field to write the timeUnit value." }, "field": { "$ref": "#/definitions/FieldName", "description": "The data field to apply time unit." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "The timeUnit." } }, "required": [ "timeUnit", "field", "as" ], "type": "object" }, "TitleAnchor": { "enum": [ null, "start", "middle", "end" ], "type": [ "null", "string" ] }, "TitleConfig": { "$ref": "#/definitions/BaseTitleConfig" }, "TitleFrame": { "enum": [ "bounds", "group" ], "type": "string" }, "TitleOrient": { "enum": [ "none", "left", "right", "top", "bottom" ], "type": "string" }, "TitleParams": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align" }, "anchor": { "$ref": "#/definitions/TitleAnchor", "description": "The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title.\n\n__Default value:__ `\"middle\"` for [single](https://vega.github.io/vega-lite/docs/spec.html) and [layered](https://vega.github.io/vega-lite/docs/layer.html) views.\n`\"start\"` for other composite views.\n\n__Note:__ [For now](https://github.com/vega/vega-lite/issues/2875), `anchor` is only customizable only for [single](https://vega.github.io/vega-lite/docs/spec.html) and [layered](https://vega.github.io/vega-lite/docs/layer.html) views. For other composite views, `anchor` is always `\"start\"`." }, "angle": { "description": "Angle in degrees of title text.", "type": "number" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "Vertical text baseline for title text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`." }, "color": { "$ref": "#/definitions/Color", "description": "Text color for title text." }, "dx": { "description": "Delta offset for title text x-coordinate.", "type": "number" }, "dy": { "description": "Delta offset for title text y-coordinate.", "type": "number" }, "font": { "description": "Font name for title text.", "type": "string" }, "fontSize": { "description": "Font size in pixels for title text.\n\n__Default value:__ `10`.", "minimum": 0, "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "Font style for title text." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "Font weight for title text.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "frame": { "$ref": "#/definitions/TitleFrame", "description": "The reference frame for the anchor position, one of `\"bounds\"` (to anchor relative to the full bounding box) or `\"group\"` (to anchor relative to the group width or height)." }, "limit": { "description": "The maximum allowed length in pixels of legend labels.", "minimum": 0, "type": "number" }, "offset": { "description": "The orthogonal offset in pixels by which to displace the title from its position along the edge of the chart.", "type": "number" }, "orient": { "$ref": "#/definitions/TitleOrient", "description": "Default title orientation (`\"top\"`, `\"bottom\"`, `\"left\"`, or `\"right\"`)" }, "style": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "description": "A [mark style property](https://vega.github.io/vega-lite/docs/config.html#style) to apply to the title text mark.\n\n__Default value:__ `\"group-title\"`." }, "text": { "description": "The title text.", "type": "string" }, "zindex": { "description": "The integer z-index indicating the layering of the title group relative to other axis, mark and legend groups.\n\n__Default value:__ `0`.", "minimum": 0, "type": "number" } }, "required": [ "text" ], "type": "object" }, "TooltipContent": { "additionalProperties": false, "properties": { "content": { "enum": [ "encoding", "data" ], "type": "string" } }, "required": [ "content" ], "type": "object" }, "TopLevelConcatSpec": { "additionalProperties": false, "properties": { "$schema": { "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v3.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.", "format": "uri", "type": "string" }, "align": { "anyOf": [ { "$ref": "#/definitions/LayoutAlign" }, { "$ref": "#/definitions/RowCol" } ], "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`." }, "autosize": { "anyOf": [ { "$ref": "#/definitions/AutosizeType" }, { "$ref": "#/definitions/AutoSizeParams" } ], "description": "Sets how the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n`\"fit\"` is only supported for single and layered views that don't use `rangeStep`.\n\n__Default value__: `pad`" }, "background": { "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ none (transparent)", "type": "string" }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/RowCol" } ], "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`" }, "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "concat": { "description": "A list of views to be concatenated.", "items": { "$ref": "#/definitions/Spec" }, "type": "array" }, "config": { "$ref": "#/definitions/Config", "description": "Vega-Lite configuration object. This property can only be defined at the top-level of a specification." }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "datasets": { "$ref": "#/definitions/Datasets", "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "padding": { "$ref": "#/definitions/Padding", "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/RowCol" } ], "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)" }, "title": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "usermeta": { "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.", "type": "object" } }, "required": [ "concat" ], "type": "object" }, "TopLevelHConcatSpec": { "additionalProperties": false, "properties": { "$schema": { "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v3.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.", "format": "uri", "type": "string" }, "autosize": { "anyOf": [ { "$ref": "#/definitions/AutosizeType" }, { "$ref": "#/definitions/AutoSizeParams" } ], "description": "Sets how the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n`\"fit\"` is only supported for single and layered views that don't use `rangeStep`.\n\n__Default value__: `pad`" }, "background": { "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ none (transparent)", "type": "string" }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`", "type": "boolean" }, "config": { "$ref": "#/definitions/Config", "description": "Vega-Lite configuration object. This property can only be defined at the top-level of a specification." }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "datasets": { "$ref": "#/definitions/Datasets", "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "hconcat": { "description": "A list of views to be concatenated and put into a row.", "items": { "$ref": "#/definitions/Spec" }, "type": "array" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "padding": { "$ref": "#/definitions/Padding", "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`", "type": "number" }, "title": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "usermeta": { "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.", "type": "object" } }, "required": [ "hconcat" ], "type": "object" }, "TopLevelRepeatSpec": { "additionalProperties": false, "properties": { "$schema": { "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v3.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.", "format": "uri", "type": "string" }, "align": { "anyOf": [ { "$ref": "#/definitions/LayoutAlign" }, { "$ref": "#/definitions/RowCol" } ], "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`." }, "autosize": { "anyOf": [ { "$ref": "#/definitions/AutosizeType" }, { "$ref": "#/definitions/AutoSizeParams" } ], "description": "Sets how the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n`\"fit\"` is only supported for single and layered views that don't use `rangeStep`.\n\n__Default value__: `pad`" }, "background": { "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ none (transparent)", "type": "string" }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/RowCol" } ], "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`" }, "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "config": { "$ref": "#/definitions/Config", "description": "Vega-Lite configuration object. This property can only be defined at the top-level of a specification." }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "datasets": { "$ref": "#/definitions/Datasets", "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "padding": { "$ref": "#/definitions/Padding", "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`" }, "repeat": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "$ref": "#/definitions/RepeatMapping" } ], "description": "Definition for fields to be repeated. One of:\n1) An array of fields to be repeated. If `\"repeat\"` is an array, the field can be referred using `{\"repeat\": \"repeat\"}`\n2) An object that mapped `\"row\"` and/or `\"column\"` to the listed of fields to be repeated along the particular orientations. The objects `{\"repeat\": \"row\"}` and `{\"repeat\": \"column\"}` can be used to refer to the repeated field respectively." }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/RowCol" } ], "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)" }, "spec": { "$ref": "#/definitions/Spec", "description": "A specification of the view that gets repeated." }, "title": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "usermeta": { "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.", "type": "object" } }, "required": [ "repeat", "spec" ], "type": "object" }, "TopLevelVConcatSpec": { "additionalProperties": false, "properties": { "$schema": { "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v3.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.", "format": "uri", "type": "string" }, "autosize": { "anyOf": [ { "$ref": "#/definitions/AutosizeType" }, { "$ref": "#/definitions/AutoSizeParams" } ], "description": "Sets how the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n`\"fit\"` is only supported for single and layered views that don't use `rangeStep`.\n\n__Default value__: `pad`" }, "background": { "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ none (transparent)", "type": "string" }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`", "type": "boolean" }, "config": { "$ref": "#/definitions/Config", "description": "Vega-Lite configuration object. This property can only be defined at the top-level of a specification." }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "datasets": { "$ref": "#/definitions/Datasets", "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "padding": { "$ref": "#/definitions/Padding", "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`", "type": "number" }, "title": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "usermeta": { "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.", "type": "object" }, "vconcat": { "description": "A list of views to be concatenated and put into a column.", "items": { "$ref": "#/definitions/Spec" }, "type": "array" } }, "required": [ "vconcat" ], "type": "object" }, "TopLevelLayerSpec": { "additionalProperties": false, "properties": { "$schema": { "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v3.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.", "format": "uri", "type": "string" }, "autosize": { "anyOf": [ { "$ref": "#/definitions/AutosizeType" }, { "$ref": "#/definitions/AutoSizeParams" } ], "description": "Sets how the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n`\"fit\"` is only supported for single and layered views that don't use `rangeStep`.\n\n__Default value__: `pad`" }, "background": { "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ none (transparent)", "type": "string" }, "config": { "$ref": "#/definitions/Config", "description": "Vega-Lite configuration object. This property can only be defined at the top-level of a specification." }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "datasets": { "$ref": "#/definitions/Datasets", "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "encoding": { "$ref": "#/definitions/Encoding", "description": "A shared key-value mapping between encoding channels and definition of fields in the underlying layers." }, "height": { "description": "The height of a visualization.\n\n__Default value:__\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its y-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For y-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the height is [determined by the range step, paddings, and the cardinality of the field mapped to y-channel](https://vega.github.io/vega-lite/docs/scale.html#band). Otherwise, if the `rangeStep` is `null`, the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `y` channel, the `height` will be the value of `rangeStep`.\n\n__Note__: For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.", "type": "number" }, "layer": { "description": "Layer or single view specifications to be layered.\n\n__Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.", "items": { "anyOf": [ { "$ref": "#/definitions/LayerSpec" }, { "$ref": "#/definitions/UnitSpec" } ] }, "type": "array" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "padding": { "$ref": "#/definitions/Padding", "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`" }, "projection": { "$ref": "#/definitions/Projection", "description": "An object defining properties of the geographic projection shared by underlying layers." }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "title": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "usermeta": { "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.", "type": "object" }, "view": { "$ref": "#/definitions/ViewBackground", "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)" }, "width": { "description": "The width of a visualization.\n\n__Default value:__ This will be determined by the following rules:\n\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its x-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For x-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the width is [determined by the range step, paddings, and the cardinality of the field mapped to x-channel](https://vega.github.io/vega-lite/docs/scale.html#band). Otherwise, if the `rangeStep` is `null`, the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `x` channel, the `width` will be the value of [`config.scale.textXRangeStep`](https://vega.github.io/vega-lite/docs/size.html#default-width-and-height) for `text` mark and the value of `rangeStep` for other marks.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.", "type": "number" } }, "required": [ "layer" ], "type": "object" }, "TopLevelFacetSpec": { "additionalProperties": false, "properties": { "$schema": { "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v3.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.", "format": "uri", "type": "string" }, "align": { "anyOf": [ { "$ref": "#/definitions/LayoutAlign" }, { "$ref": "#/definitions/RowCol" } ], "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`." }, "autosize": { "anyOf": [ { "$ref": "#/definitions/AutosizeType" }, { "$ref": "#/definitions/AutoSizeParams" } ], "description": "Sets how the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n`\"fit\"` is only supported for single and layered views that don't use `rangeStep`.\n\n__Default value__: `pad`" }, "background": { "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ none (transparent)", "type": "string" }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/RowCol" } ], "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`" }, "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "config": { "$ref": "#/definitions/Config", "description": "Vega-Lite configuration object. This property can only be defined at the top-level of a specification." }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "datasets": { "$ref": "#/definitions/Datasets", "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "facet": { "anyOf": [ { "$ref": "#/definitions/FacetFieldDef" }, { "$ref": "#/definitions/FacetMapping" } ], "description": "Definition for how to facet the data. One of:\n1) [a field definition for faceting the plot by one field](https://vega.github.io/vega-lite/docs/facet.html#field-def)\n2) [An object that maps `row` and `column` channels to their field definitions](https://vega.github.io/vega-lite/docs/facet.html#mapping)" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "padding": { "$ref": "#/definitions/Padding", "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/RowCol" } ], "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)" }, "spec": { "anyOf": [ { "$ref": "#/definitions/LayerSpec" }, { "$ref": "#/definitions/FacetedUnitSpec" } ], "description": "A specification of the view that gets faceted." }, "title": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "usermeta": { "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.", "type": "object" } }, "required": [ "data", "facet", "spec" ], "type": "object" }, "TopLevelSpec": { "anyOf": [ { "$ref": "#/definitions/TopLevelUnitSpec" }, { "$ref": "#/definitions/TopLevelFacetSpec" }, { "$ref": "#/definitions/TopLevelLayerSpec" }, { "$ref": "#/definitions/TopLevelRepeatSpec" }, { "$ref": "#/definitions/TopLevelConcatSpec" }, { "$ref": "#/definitions/TopLevelVConcatSpec" }, { "$ref": "#/definitions/TopLevelHConcatSpec" } ], "description": "A Vega-Lite top-level specification.\nThis is the root class for all Vega-Lite specifications.\n(The json schema is generated from this type.)" }, "TopLevelUnitSpec": { "additionalProperties": false, "properties": { "$schema": { "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v3.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.", "format": "uri", "type": "string" }, "align": { "anyOf": [ { "$ref": "#/definitions/LayoutAlign" }, { "$ref": "#/definitions/RowCol" } ], "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`." }, "autosize": { "anyOf": [ { "$ref": "#/definitions/AutosizeType" }, { "$ref": "#/definitions/AutoSizeParams" } ], "description": "Sets how the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n`\"fit\"` is only supported for single and layered views that don't use `rangeStep`.\n\n__Default value__: `pad`" }, "background": { "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ none (transparent)", "type": "string" }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/RowCol" } ], "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`" }, "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "config": { "$ref": "#/definitions/Config", "description": "Vega-Lite configuration object. This property can only be defined at the top-level of a specification." }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "datasets": { "$ref": "#/definitions/Datasets", "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "encoding": { "$ref": "#/definitions/FacetedEncoding", "description": "A key-value mapping between encoding channels and definition of fields." }, "height": { "description": "The height of a visualization.\n\n__Default value:__\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its y-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For y-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the height is [determined by the range step, paddings, and the cardinality of the field mapped to y-channel](https://vega.github.io/vega-lite/docs/scale.html#band). Otherwise, if the `rangeStep` is `null`, the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `y` channel, the `height` will be the value of `rangeStep`.\n\n__Note__: For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.", "type": "number" }, "mark": { "$ref": "#/definitions/AnyMark", "description": "A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def)." }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "padding": { "$ref": "#/definitions/Padding", "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`" }, "projection": { "$ref": "#/definitions/Projection", "description": "An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks\nand to `latitude` and `\"longitude\"` channels for other marks." }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "selection": { "additionalProperties": { "$ref": "#/definitions/SelectionDef" }, "description": "A key-value mapping between selection names and definitions.", "type": "object" }, "spacing": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/RowCol" } ], "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)" }, "title": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "usermeta": { "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.", "type": "object" }, "view": { "$ref": "#/definitions/ViewBackground", "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)" }, "width": { "description": "The width of a visualization.\n\n__Default value:__ This will be determined by the following rules:\n\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its x-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For x-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the width is [determined by the range step, paddings, and the cardinality of the field mapped to x-channel](https://vega.github.io/vega-lite/docs/scale.html#band). Otherwise, if the `rangeStep` is `null`, the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `x` channel, the `width` will be the value of [`config.scale.textXRangeStep`](https://vega.github.io/vega-lite/docs/size.html#default-width-and-height) for `text` mark and the value of `rangeStep` for other marks.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.", "type": "number" } }, "required": [ "data", "mark" ], "type": "object" }, "TopoDataFormat": { "additionalProperties": false, "properties": { "feature": { "description": "The name of the TopoJSON object set to convert to a GeoJSON feature collection.\nFor example, in a map of the world, there may be an object set named `\"countries\"`.\nUsing the feature property, we can extract this set and generate a GeoJSON feature object for each country.", "type": "string" }, "mesh": { "description": "The name of the TopoJSON object set to convert to mesh.\nSimilar to the `feature` option, `mesh` extracts a named TopoJSON object set.\n Unlike the `feature` option, the corresponding geo data is returned as a single, unified mesh instance, not as individual GeoJSON features.\nExtracting a mesh is useful for more efficiently drawing borders or other geographic elements that you do not need to associate with specific regions such as individual countries, states or counties.", "type": "string" }, "parse": { "anyOf": [ { "$ref": "#/definitions/Parse" }, { "type": "null" } ], "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data.\nAlternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)).\nFor example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\nFor Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)" }, "type": { "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n\n__Default value:__ The default format type is determined by the extension of the file URL.\nIf no extension is detected, `\"json\"` will be used by default.", "enum": [ "topojson" ], "type": "string" } }, "type": "object" }, "Transform": { "anyOf": [ { "$ref": "#/definitions/AggregateTransform" }, { "$ref": "#/definitions/BinTransform" }, { "$ref": "#/definitions/CalculateTransform" }, { "$ref": "#/definitions/FilterTransform" }, { "$ref": "#/definitions/FlattenTransform" }, { "$ref": "#/definitions/FoldTransform" }, { "$ref": "#/definitions/ImputeTransform" }, { "$ref": "#/definitions/JoinAggregateTransform" }, { "$ref": "#/definitions/LookupTransform" }, { "$ref": "#/definitions/TimeUnitTransform" }, { "$ref": "#/definitions/SampleTransform" }, { "$ref": "#/definitions/StackTransform" }, { "$ref": "#/definitions/WindowTransform" } ] }, "TypeForShape": { "enum": [ "nominal", "ordinal", "geojson" ], "type": "string" }, "TypedFieldDef": { "additionalProperties": false, "description": "Definition object for a data field, its type and transformation of an encoding channel.", "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "enum": [ "binned" ], "type": "string" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "timeUnit": { "$ref": "#/definitions/TimeUnit", "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.", "type": [ "string", "null" ] }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "UnitSpec": { "$ref": "#/definitions/GenericUnitSpec", "description": "A unit specification, which can contain either [primitive marks or composite marks](https://vega.github.io/vega-lite/docs/mark.html#types)." }, "UrlData": { "additionalProperties": false, "properties": { "format": { "$ref": "#/definitions/DataFormat", "description": "An object that specifies the format for parsing the data." }, "name": { "description": "Provide a placeholder name and bind data at runtime.", "type": "string" }, "url": { "description": "An URL from which to load the data set. Use the `format.type` property\nto ensure the loaded data is correctly parsed.", "type": "string" } }, "required": [ "url" ], "type": "object" }, "UtcMultiTimeUnit": { "enum": [ "utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds" ], "type": "string" }, "UtcSingleTimeUnit": { "enum": [ "utcyear", "utcquarter", "utcmonth", "utcday", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds" ], "type": "string" }, "Value": { "type": [ "number", "string", "boolean", "null" ] }, "YValueDef": { "additionalProperties": false, "description": "Definition object for a constant value of an encoding channel.", "properties": { "value": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity)." } }, "required": [ "value" ], "type": "object" }, "XValueDef": { "additionalProperties": false, "description": "Definition object for a constant value of an encoding channel.", "properties": { "value": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity)." } }, "required": [ "value" ], "type": "object" }, "NumberValueDef": { "additionalProperties": false, "description": "Definition object for a constant value of an encoding channel.", "properties": { "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity).", "type": "number" } }, "required": [ "value" ], "type": "object" }, "ValueDefWithCondition": { "additionalProperties": false, "description": "A ValueDef with Condition where either the condition or the value are optional.\n{\n condition: {field: ...} | {value: ...},\n value: ...,\n}", "minProperties": 1, "properties": { "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalMarkPropFieldDef" }, { "$ref": "#/definitions/ConditionalStringValueDef" }, { "items": { "$ref": "#/definitions/ConditionalStringValueDef" }, "type": "array" } ], "description": "A field definition or one or more value definition(s) with a selection predicate." }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity).", "type": [ "string", "null" ] } }, "type": "object" }, "ValueDefWithCondition": { "additionalProperties": false, "description": "A ValueDef with Condition where either the condition or the value are optional.\n{\n condition: {field: ...} | {value: ...},\n value: ...,\n}", "minProperties": 1, "properties": { "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalMarkPropFieldDef" }, { "$ref": "#/definitions/ConditionalNumberValueDef" }, { "items": { "$ref": "#/definitions/ConditionalNumberValueDef" }, "type": "array" } ], "description": "A field definition or one or more value definition(s) with a selection predicate." }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity).", "type": "number" } }, "type": "object" }, "ValueDefWithCondition,(string|null)>": { "additionalProperties": false, "description": "A ValueDef with Condition where either the condition or the value are optional.\n{\n condition: {field: ...} | {value: ...},\n value: ...,\n}", "minProperties": 1, "properties": { "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalMarkPropFieldDef" }, { "$ref": "#/definitions/ConditionalStringValueDef" }, { "items": { "$ref": "#/definitions/ConditionalStringValueDef" }, "type": "array" } ], "description": "A field definition or one or more value definition(s) with a selection predicate." }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity).", "type": [ "string", "null" ] } }, "type": "object" }, "ValueDefWithCondition": { "additionalProperties": false, "description": "A ValueDef with Condition where either the condition or the value are optional.\n{\n condition: {field: ...} | {value: ...},\n value: ...,\n}", "minProperties": 1, "properties": { "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalTextFieldDef" }, { "$ref": "#/definitions/ConditionalValueDef" }, { "items": { "$ref": "#/definitions/ConditionalValueDef" }, "type": "array" } ], "description": "A field definition or one or more value definition(s) with a selection predicate." }, "value": { "$ref": "#/definitions/Value", "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity)." } }, "type": "object" }, "ViewBackground": { "additionalProperties": false, "properties": { "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "fill": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "type": "null" } ], "description": "The fill color.\n\n__Default value:__ `undefined`" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "stroke": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "type": "null" } ], "description": "The stroke color.\n\n__Default value:__ `\"#ddd\"`" }, "strokeCap": { "$ref": "#/definitions/StrokeCap", "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "$ref": "#/definitions/StrokeJoin", "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "style": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "description": "A string or array of strings indicating the name of custom styles to apply to the view background. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles.\n\n__Default value:__ `\"cell\"`\n__Note:__ Any specified view background properties will augment the default style." } }, "type": "object" }, "ViewConfig": { "additionalProperties": false, "properties": { "clip": { "description": "Whether the view should be clipped.", "type": "boolean" }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "fill": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "type": "null" } ], "description": "The fill color.\n\n__Default value:__ `undefined`" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "height": { "description": "The default height of the single plot or each plot in a trellis plot when the visualization has a continuous (non-ordinal) y-scale with `rangeStep` = `null`.\n\n__Default value:__ `200`", "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "stroke": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "type": "null" } ], "description": "The stroke color.\n\n__Default value:__ `\"#ddd\"`" }, "strokeCap": { "$ref": "#/definitions/StrokeCap", "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "$ref": "#/definitions/StrokeJoin", "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "width": { "description": "The default width of the single plot or each plot in a trellis plot when the visualization has a continuous (non-ordinal) x-scale or ordinal x-scale with `rangeStep` = `null`.\n\n__Default value:__ `200`", "type": "number" } }, "type": "object" }, "WindowFieldDef": { "additionalProperties": false, "properties": { "as": { "$ref": "#/definitions/FieldName", "description": "The output name for the window operation." }, "field": { "$ref": "#/definitions/FieldName", "description": "The data field for which to compute the aggregate or window function. This can be omitted for window functions that do not operate over a field such as `count`, `rank`, `dense_rank`." }, "op": { "anyOf": [ { "$ref": "#/definitions/AggregateOp" }, { "$ref": "#/definitions/WindowOnlyOp" } ], "description": "The window or aggregation operation to apply within a window (e.g.,`rank`, `lead`, `sum`, `average` or `count`). See the list of all supported operations [here](https://vega.github.io/vega-lite/docs/window.html#ops)." }, "param": { "description": "Parameter values for the window functions. Parameter values can be omitted for operations that do not accept a parameter.\n\nSee the list of all supported operations and their parameters [here](https://vega.github.io/vega-lite/docs/transforms/window.html).", "type": "number" } }, "required": [ "op", "as" ], "type": "object" }, "WindowOnlyOp": { "enum": [ "row_number", "rank", "dense_rank", "percent_rank", "cume_dist", "ntile", "lag", "lead", "first_value", "last_value", "nth_value" ], "type": "string" }, "WindowTransform": { "additionalProperties": false, "properties": { "frame": { "description": "A frame specification as a two-element array indicating how the sliding window should proceed. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. The default value is `[null, 0]`, indicating that the sliding window includes the current object and all preceding objects. The value `[-5, 5]` indicates that the window should include five objects preceding and five objects following the current object. Finally, `[null, null]` indicates that the window frame should always include all data objects. If you this frame and want to assign the same value to add objects, you can use the simpler [join aggregate transform](https://vega.github.io/vega-lite/docs/joinaggregate.html). The only operators affected are the aggregation operations and the `first_value`, `last_value`, and `nth_value` window operations. The other window operations are not affected by this.\n\n__Default value:__: `[null, 0]` (includes the current object and all preceding objects)", "items": { "type": [ "null", "number" ] }, "type": "array" }, "groupby": { "description": "The data fields for partitioning the data objects into separate windows. If unspecified, all data points will be in a single window.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "ignorePeers": { "description": "Indicates if the sliding window frame should ignore peer values (data that are considered identical by the sort criteria). The default is false, causing the window frame to expand to include all peer values. If set to true, the window frame will be defined by offset values only. This setting only affects those operations that depend on the window frame, namely aggregation operations and the first_value, last_value, and nth_value window operations.\n\n__Default value:__ `false`", "type": "boolean" }, "sort": { "description": "A sort field definition for sorting data objects within a window. If two data objects are considered equal by the comparator, they are considered “peer†values of equal rank. If sort is not specified, the order is undefined: data objects are processed in the order they are observed and none are considered peers (the ignorePeers parameter is ignored and treated as if set to `true`).", "items": { "$ref": "#/definitions/SortField" }, "type": "array" }, "window": { "description": "The definition of the fields in the window, and what calculations to use.", "items": { "$ref": "#/definitions/WindowFieldDef" }, "type": "array" } }, "required": [ "window" ], "type": "object" } } }altair-4.1.0/altair/vegalite/v3/tests/000077500000000000000000000000001364111050100175265ustar00rootroot00000000000000altair-4.1.0/altair/vegalite/v3/tests/__init__.py000066400000000000000000000000001364111050100216250ustar00rootroot00000000000000altair-4.1.0/altair/vegalite/v3/tests/test_api.py000066400000000000000000000711561364111050100217220ustar00rootroot00000000000000"""Unit tests for altair API""" import io import json import operator import os import tempfile import jsonschema import pytest import pandas as pd import altair.vegalite.v3 as alt from altair.utils import AltairDeprecationWarning try: import altair_saver # noqa: F401 except ImportError: altair_saver = None def getargs(*args, **kwargs): return args, kwargs OP_DICT = { "layer": operator.add, "hconcat": operator.or_, "vconcat": operator.and_, } def _make_chart_type(chart_type): data = pd.DataFrame( { "x": [28, 55, 43, 91, 81, 53, 19, 87], "y": [43, 91, 81, 53, 19, 87, 52, 28], "color": list("AAAABBBB"), } ) base = alt.Chart(data).mark_point().encode(x="x", y="y", color="color",) if chart_type in ["layer", "hconcat", "vconcat", "concat"]: func = getattr(alt, chart_type) return func(base.mark_square(), base.mark_circle()) elif chart_type == "facet": return base.facet("color") elif chart_type == "facet_encoding": return base.encode(facet="color") elif chart_type == "repeat": return base.encode(alt.X(alt.repeat(), type="quantitative")).repeat(["x", "y"]) elif chart_type == "chart": return base else: raise ValueError("chart_type='{}' is not recognized".format(chart_type)) @pytest.fixture def basic_chart(): data = pd.DataFrame( { "a": ["A", "B", "C", "D", "E", "F", "G", "H", "I"], "b": [28, 55, 43, 91, 81, 53, 19, 87, 52], } ) return alt.Chart(data).mark_bar().encode(x="a", y="b") def test_chart_data_types(): def Chart(data): return alt.Chart(data).mark_point().encode(x="x:Q", y="y:Q") # Url Data data = "/path/to/my/data.csv" dct = Chart(data).to_dict() assert dct["data"] == {"url": data} # Dict Data data = {"values": [{"x": 1, "y": 2}, {"x": 2, "y": 3}]} with alt.data_transformers.enable(consolidate_datasets=False): dct = Chart(data).to_dict() assert dct["data"] == data with alt.data_transformers.enable(consolidate_datasets=True): dct = Chart(data).to_dict() name = dct["data"]["name"] assert dct["datasets"][name] == data["values"] # DataFrame data data = pd.DataFrame({"x": range(5), "y": range(5)}) with alt.data_transformers.enable(consolidate_datasets=False): dct = Chart(data).to_dict() assert dct["data"]["values"] == data.to_dict(orient="records") with alt.data_transformers.enable(consolidate_datasets=True): dct = Chart(data).to_dict() name = dct["data"]["name"] assert dct["datasets"][name] == data.to_dict(orient="records") # Named data object data = alt.NamedData(name="Foo") dct = Chart(data).to_dict() assert dct["data"] == {"name": "Foo"} def test_chart_infer_types(): data = pd.DataFrame( { "x": pd.date_range("2012", periods=10, freq="Y"), "y": range(10), "c": list("abcabcabca"), } ) def _check_encodings(chart): dct = chart.to_dict() assert dct["encoding"]["x"]["type"] == "temporal" assert dct["encoding"]["x"]["field"] == "x" assert dct["encoding"]["y"]["type"] == "quantitative" assert dct["encoding"]["y"]["field"] == "y" assert dct["encoding"]["color"]["type"] == "nominal" assert dct["encoding"]["color"]["field"] == "c" # Pass field names by keyword chart = alt.Chart(data).mark_point().encode(x="x", y="y", color="c") _check_encodings(chart) # pass Channel objects by keyword chart = ( alt.Chart(data) .mark_point() .encode(x=alt.X("x"), y=alt.Y("y"), color=alt.Color("c")) ) _check_encodings(chart) # pass Channel objects by value chart = alt.Chart(data).mark_point().encode(alt.X("x"), alt.Y("y"), alt.Color("c")) _check_encodings(chart) # override default types chart = ( alt.Chart(data) .mark_point() .encode(alt.X("x", type="nominal"), alt.Y("y", type="ordinal")) ) dct = chart.to_dict() assert dct["encoding"]["x"]["type"] == "nominal" assert dct["encoding"]["y"]["type"] == "ordinal" @pytest.mark.parametrize( "args, kwargs", [ getargs(detail=["value:Q", "name:N"], tooltip=["value:Q", "name:N"]), getargs(detail=["value", "name"], tooltip=["value", "name"]), getargs(alt.Detail(["value:Q", "name:N"]), alt.Tooltip(["value:Q", "name:N"])), getargs(alt.Detail(["value", "name"]), alt.Tooltip(["value", "name"])), getargs( [alt.Detail("value:Q"), alt.Detail("name:N")], [alt.Tooltip("value:Q"), alt.Tooltip("name:N")], ), getargs( [alt.Detail("value"), alt.Detail("name")], [alt.Tooltip("value"), alt.Tooltip("name")], ), ], ) def test_multiple_encodings(args, kwargs): df = pd.DataFrame({"value": [1, 2, 3], "name": ["A", "B", "C"]}) encoding_dct = [ {"field": "value", "type": "quantitative"}, {"field": "name", "type": "nominal"}, ] chart = alt.Chart(df).mark_point().encode(*args, **kwargs) dct = chart.to_dict() assert dct["encoding"]["detail"] == encoding_dct assert dct["encoding"]["tooltip"] == encoding_dct def test_chart_operations(): data = pd.DataFrame( { "x": pd.date_range("2012", periods=10, freq="Y"), "y": range(10), "c": list("abcabcabca"), } ) chart1 = alt.Chart(data).mark_line().encode(x="x", y="y", color="c") chart2 = chart1.mark_point() chart3 = chart1.mark_circle() chart4 = chart1.mark_square() chart = chart1 + chart2 + chart3 assert isinstance(chart, alt.LayerChart) assert len(chart.layer) == 3 chart += chart4 assert len(chart.layer) == 4 chart = chart1 | chart2 | chart3 assert isinstance(chart, alt.HConcatChart) assert len(chart.hconcat) == 3 chart |= chart4 assert len(chart.hconcat) == 4 chart = chart1 & chart2 & chart3 assert isinstance(chart, alt.VConcatChart) assert len(chart.vconcat) == 3 chart &= chart4 assert len(chart.vconcat) == 4 def test_selection_to_dict(): brush = alt.selection(type="interval") # test some value selections # Note: X and Y cannot have conditions alt.Chart("path/to/data.json").mark_point().encode( color=alt.condition(brush, alt.ColorValue("red"), alt.ColorValue("blue")), opacity=alt.condition(brush, alt.value(0.5), alt.value(1.0)), text=alt.condition(brush, alt.TextValue("foo"), alt.value("bar")), ).to_dict() # test some field selections # Note: X and Y cannot have conditions # Conditions cannot both be fields alt.Chart("path/to/data.json").mark_point().encode( color=alt.condition(brush, alt.Color("col1:N"), alt.value("blue")), opacity=alt.condition(brush, "col1:N", alt.value(0.5)), text=alt.condition(brush, alt.value("abc"), alt.Text("col2:N")), size=alt.condition(brush, alt.value(20), "col2:N"), ).to_dict() def test_selection_expression(): selection = alt.selection_single(fields=["value"]) assert isinstance(selection.value, alt.expr.Expression) assert selection.value.to_dict() == "{0}.value".format(selection.name) assert isinstance(selection["value"], alt.expr.Expression) assert selection["value"].to_dict() == "{0}['value']".format(selection.name) @pytest.mark.parametrize("format", ["html", "json", "png", "svg"]) def test_save(format, basic_chart): if format == "png": out = io.BytesIO() mode = "rb" else: out = io.StringIO() mode = "r" if format in ["svg", "png"] and not altair_saver: with pytest.raises(ValueError) as err: basic_chart.save(out, format=format) assert "github.com/altair-viz/altair_saver" in str(err.value) return basic_chart.save(out, format=format) out.seek(0) content = out.read() if format == "json": assert "$schema" in json.loads(content) if format == "html": assert content.startswith("") fid, filename = tempfile.mkstemp(suffix="." + format) os.close(fid) try: basic_chart.save(filename) with open(filename, mode) as f: assert f.read() == content finally: os.remove(filename) def test_facet_basic(): # wrapped facet chart1 = ( alt.Chart("data.csv") .mark_point() .encode(x="x:Q", y="y:Q",) .facet("category:N", columns=2) ) dct1 = chart1.to_dict() assert dct1["facet"] == alt.Facet("category:N").to_dict() assert dct1["columns"] == 2 assert dct1["data"] == alt.UrlData("data.csv").to_dict() # explicit row/col facet chart2 = ( alt.Chart("data.csv") .mark_point() .encode(x="x:Q", y="y:Q",) .facet(row="category1:Q", column="category2:Q") ) dct2 = chart2.to_dict() assert dct2["facet"]["row"] == alt.Facet("category1:Q").to_dict() assert dct2["facet"]["column"] == alt.Facet("category2:Q").to_dict() assert "columns" not in dct2 assert dct2["data"] == alt.UrlData("data.csv").to_dict() def test_facet_parse(): chart = ( alt.Chart("data.csv") .mark_point() .encode(x="x:Q", y="y:Q") .facet(row="row:N", column="column:O") ) dct = chart.to_dict() assert dct["data"] == {"url": "data.csv"} assert "data" not in dct["spec"] assert dct["facet"] == { "column": {"field": "column", "type": "ordinal"}, "row": {"field": "row", "type": "nominal"}, } def test_facet_parse_data(): data = pd.DataFrame({"x": range(5), "y": range(5), "row": list("abcab")}) chart = ( alt.Chart(data) .mark_point() .encode(x="x", y="y:O") .facet(row="row", column="column:O") ) with alt.data_transformers.enable(consolidate_datasets=False): dct = chart.to_dict() assert "values" in dct["data"] assert "data" not in dct["spec"] assert dct["facet"] == { "column": {"field": "column", "type": "ordinal"}, "row": {"field": "row", "type": "nominal"}, } with alt.data_transformers.enable(consolidate_datasets=True): dct = chart.to_dict() assert "datasets" in dct assert "name" in dct["data"] assert "data" not in dct["spec"] assert dct["facet"] == { "column": {"field": "column", "type": "ordinal"}, "row": {"field": "row", "type": "nominal"}, } def test_selection(): # test instantiation of selections interval = alt.selection_interval(name="selec_1") assert interval.selection.type == "interval" assert interval.name == "selec_1" single = alt.selection_single(name="selec_2") assert single.selection.type == "single" assert single.name == "selec_2" multi = alt.selection_multi(name="selec_3") assert multi.selection.type == "multi" assert multi.name == "selec_3" # test adding to chart chart = alt.Chart().add_selection(single) chart = chart.add_selection(multi, interval) assert set(chart.selection.keys()) == {"selec_1", "selec_2", "selec_3"} # test logical operations assert isinstance(single & multi, alt.Selection) assert isinstance(single | multi, alt.Selection) assert isinstance(~single, alt.Selection) assert isinstance((single & multi)[0].group, alt.SelectionAnd) assert isinstance((single | multi)[0].group, alt.SelectionOr) assert isinstance((~single)[0].group, alt.SelectionNot) # test that default names increment (regression for #1454) sel1 = alt.selection_single() sel2 = alt.selection_multi() sel3 = alt.selection_interval() names = {s.name for s in (sel1, sel2, sel3)} assert len(names) == 3 def test_transforms(): # aggregate transform agg1 = alt.AggregatedFieldDef(**{"as": "x1", "op": "mean", "field": "y"}) agg2 = alt.AggregatedFieldDef(**{"as": "x2", "op": "median", "field": "z"}) chart = alt.Chart().transform_aggregate([agg1], ["foo"], x2="median(z)") kwds = dict(aggregate=[agg1, agg2], groupby=["foo"]) assert chart.transform == [alt.AggregateTransform(**kwds)] # bin transform chart = alt.Chart().transform_bin("binned", field="field", bin=True) kwds = {"as": "binned", "field": "field", "bin": True} assert chart.transform == [alt.BinTransform(**kwds)] # calcualte transform chart = alt.Chart().transform_calculate("calc", "datum.a * 4") kwds = {"as": "calc", "calculate": "datum.a * 4"} assert chart.transform == [alt.CalculateTransform(**kwds)] # impute transform chart = alt.Chart().transform_impute("field", "key", groupby=["x"]) kwds = {"impute": "field", "key": "key", "groupby": ["x"]} assert chart.transform == [alt.ImputeTransform(**kwds)] # joinaggregate transform chart = alt.Chart().transform_joinaggregate(min="min(x)", groupby=["key"]) kwds = { "joinaggregate": [ alt.JoinAggregateFieldDef(field="x", op="min", **{"as": "min"}) ], "groupby": ["key"], } assert chart.transform == [alt.JoinAggregateTransform(**kwds)] # filter transform chart = alt.Chart().transform_filter("datum.a < 4") assert chart.transform == [alt.FilterTransform(filter="datum.a < 4")] # flatten transform chart = alt.Chart().transform_flatten(["A", "B"], ["X", "Y"]) kwds = {"as": ["X", "Y"], "flatten": ["A", "B"]} assert chart.transform == [alt.FlattenTransform(**kwds)] # fold transform chart = alt.Chart().transform_fold(["A", "B", "C"], as_=["key", "val"]) kwds = {"as": ["key", "val"], "fold": ["A", "B", "C"]} assert chart.transform == [alt.FoldTransform(**kwds)] # lookup transform lookup_data = alt.LookupData(alt.UrlData("foo.csv"), "id", ["rate"]) chart = alt.Chart().transform_lookup( from_=lookup_data, as_="a", lookup="a", default="b" ) kwds = {"from": lookup_data, "as": "a", "lookup": "a", "default": "b"} assert chart.transform == [alt.LookupTransform(**kwds)] # sample transform chart = alt.Chart().transform_sample() assert chart.transform == [alt.SampleTransform(1000)] # stack transform chart = alt.Chart().transform_stack("stacked", "x", groupby=["y"]) assert chart.transform == [ alt.StackTransform(stack="x", groupby=["y"], **{"as": "stacked"}) ] # timeUnit transform chart = alt.Chart().transform_timeunit("foo", field="x", timeUnit="date") kwds = {"as": "foo", "field": "x", "timeUnit": "date"} assert chart.transform == [alt.TimeUnitTransform(**kwds)] # window transform chart = alt.Chart().transform_window(xsum="sum(x)", ymin="min(y)", frame=[None, 0]) window = [ alt.WindowFieldDef(**{"as": "xsum", "field": "x", "op": "sum"}), alt.WindowFieldDef(**{"as": "ymin", "field": "y", "op": "min"}), ] # kwargs don't maintain order in Python < 3.6, so window list can # be reversed assert chart.transform == [ alt.WindowTransform(frame=[None, 0], window=window) ] or chart.transform == [alt.WindowTransform(frame=[None, 0], window=window[::-1])] def test_filter_transform_selection_predicates(): selector1 = alt.selection_interval(name="s1") selector2 = alt.selection_interval(name="s2") base = alt.Chart("data.txt").mark_point() chart = base.transform_filter(selector1) assert chart.to_dict()["transform"] == [{"filter": {"selection": "s1"}}] chart = base.transform_filter(~selector1) assert chart.to_dict()["transform"] == [{"filter": {"selection": {"not": "s1"}}}] chart = base.transform_filter(selector1 & selector2) assert chart.to_dict()["transform"] == [ {"filter": {"selection": {"and": ["s1", "s2"]}}} ] chart = base.transform_filter(selector1 | selector2) assert chart.to_dict()["transform"] == [ {"filter": {"selection": {"or": ["s1", "s2"]}}} ] chart = base.transform_filter(selector1 | ~selector2) assert chart.to_dict()["transform"] == [ {"filter": {"selection": {"or": ["s1", {"not": "s2"}]}}} ] chart = base.transform_filter(~selector1 | ~selector2) assert chart.to_dict()["transform"] == [ {"filter": {"selection": {"or": [{"not": "s1"}, {"not": "s2"}]}}} ] chart = base.transform_filter(~(selector1 & selector2)) assert chart.to_dict()["transform"] == [ {"filter": {"selection": {"not": {"and": ["s1", "s2"]}}}} ] def test_resolve_methods(): chart = alt.LayerChart().resolve_axis(x="shared", y="independent") assert chart.resolve == alt.Resolve( axis=alt.AxisResolveMap(x="shared", y="independent") ) chart = alt.LayerChart().resolve_legend(color="shared", fill="independent") assert chart.resolve == alt.Resolve( legend=alt.LegendResolveMap(color="shared", fill="independent") ) chart = alt.LayerChart().resolve_scale(x="shared", y="independent") assert chart.resolve == alt.Resolve( scale=alt.ScaleResolveMap(x="shared", y="independent") ) def test_layer_encodings(): chart = alt.LayerChart().encode(x="column:Q") assert chart.encoding.x == alt.X(shorthand="column:Q") def test_add_selection(): selections = [ alt.selection_interval(), alt.selection_single(), alt.selection_multi(), ] chart = ( alt.Chart() .mark_point() .add_selection(selections[0]) .add_selection(selections[1], selections[2]) ) expected = {s.name: s.selection for s in selections} assert chart.selection == expected def test_repeat_add_selections(): base = alt.Chart("data.csv").mark_point() selection = alt.selection_single() chart1 = base.add_selection(selection).repeat(list("ABC")) chart2 = base.repeat(list("ABC")).add_selection(selection) assert chart1.to_dict() == chart2.to_dict() def test_facet_add_selections(): base = alt.Chart("data.csv").mark_point() selection = alt.selection_single() chart1 = base.add_selection(selection).facet("val:Q") chart2 = base.facet("val:Q").add_selection(selection) assert chart1.to_dict() == chart2.to_dict() def test_layer_add_selection(): base = alt.Chart("data.csv").mark_point() selection = alt.selection_single() chart1 = alt.layer(base.add_selection(selection), base) chart2 = alt.layer(base, base).add_selection(selection) assert chart1.to_dict() == chart2.to_dict() @pytest.mark.parametrize("charttype", [alt.concat, alt.hconcat, alt.vconcat]) def test_compound_add_selections(charttype): base = alt.Chart("data.csv").mark_point() selection = alt.selection_single() chart1 = charttype(base.add_selection(selection), base.add_selection(selection)) chart2 = charttype(base, base).add_selection(selection) assert chart1.to_dict() == chart2.to_dict() def test_selection_property(): sel = alt.selection_interval() chart = alt.Chart("data.csv").mark_point().properties(selection=sel) assert list(chart["selection"].keys()) == [sel.name] def test_LookupData(): df = pd.DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]}) lookup = alt.LookupData(data=df, key="x") dct = lookup.to_dict() assert dct["key"] == "x" assert dct["data"] == { "values": [{"x": 1, "y": 4}, {"x": 2, "y": 5}, {"x": 3, "y": 6}] } def test_themes(): chart = alt.Chart("foo.txt").mark_point() active = alt.themes.active try: alt.themes.enable("default") assert chart.to_dict()["config"] == { "mark": {"tooltip": None}, "view": {"width": 400, "height": 300}, } alt.themes.enable("opaque") assert chart.to_dict()["config"] == { "background": "white", "mark": {"tooltip": None}, "view": {"width": 400, "height": 300}, } alt.themes.enable("none") assert "config" not in chart.to_dict() finally: # re-enable the original active theme alt.themes.enable(active) def test_chart_from_dict(): base = alt.Chart("data.csv").mark_point().encode(x="x:Q", y="y:Q") charts = [ base, base + base, base | base, base & base, base.facet("c:N"), (base + base).facet(row="c:N", data="data.csv"), base.repeat(["c", "d"]), (base + base).repeat(row=["c", "d"]), ] for chart in charts: print(chart) chart_out = alt.Chart.from_dict(chart.to_dict()) assert type(chart_out) is type(chart) # test that an invalid spec leads to a schema validation error with pytest.raises(jsonschema.ValidationError): alt.Chart.from_dict({"invalid": "spec"}) def test_consolidate_datasets(basic_chart): subchart1 = basic_chart subchart2 = basic_chart.copy() subchart2.data = basic_chart.data.copy() chart = subchart1 | subchart2 with alt.data_transformers.enable(consolidate_datasets=True): dct_consolidated = chart.to_dict() with alt.data_transformers.enable(consolidate_datasets=False): dct_standard = chart.to_dict() assert "datasets" in dct_consolidated assert "datasets" not in dct_standard datasets = dct_consolidated["datasets"] # two dataset copies should be recognized as duplicates assert len(datasets) == 1 # make sure data matches original & names are correct name, data = datasets.popitem() for spec in dct_standard["hconcat"]: assert spec["data"]["values"] == data for spec in dct_consolidated["hconcat"]: assert spec["data"] == {"name": name} def test_consolidate_InlineData(): data = alt.InlineData( values=[{"a": 1, "b": 1}, {"a": 2, "b": 2}], format={"type": "csv"} ) chart = alt.Chart(data).mark_point() with alt.data_transformers.enable(consolidate_datasets=False): dct = chart.to_dict() assert dct["data"]["format"] == data.format assert dct["data"]["values"] == data.values with alt.data_transformers.enable(consolidate_datasets=True): dct = chart.to_dict() assert dct["data"]["format"] == data.format assert list(dct["datasets"].values())[0] == data.values data = alt.InlineData(values=[], name="runtime_data") chart = alt.Chart(data).mark_point() with alt.data_transformers.enable(consolidate_datasets=False): dct = chart.to_dict() assert dct["data"] == data.to_dict() with alt.data_transformers.enable(consolidate_datasets=True): dct = chart.to_dict() assert dct["data"] == data.to_dict() def test_deprecated_encodings(): base = alt.Chart("data.txt").mark_point() with pytest.warns(AltairDeprecationWarning) as record: chart1 = base.encode(strokeOpacity=alt.Strokeopacity("x:Q")).to_dict() assert "alt.StrokeOpacity" in record[0].message.args[0] chart2 = base.encode(strokeOpacity=alt.StrokeOpacity("x:Q")).to_dict() assert chart1 == chart2 def test_repeat(): # wrapped repeat chart1 = ( alt.Chart("data.csv") .mark_point() .encode(x=alt.X(alt.repeat(), type="quantitative"), y="y:Q",) .repeat(["A", "B", "C", "D"], columns=2) ) dct1 = chart1.to_dict() assert dct1["repeat"] == ["A", "B", "C", "D"] assert dct1["columns"] == 2 assert dct1["spec"]["encoding"]["x"]["field"] == {"repeat": "repeat"} # explicit row/col repeat chart2 = ( alt.Chart("data.csv") .mark_point() .encode( x=alt.X(alt.repeat("row"), type="quantitative"), y=alt.Y(alt.repeat("column"), type="quantitative"), ) .repeat(row=["A", "B", "C"], column=["C", "B", "A"]) ) dct2 = chart2.to_dict() assert dct2["repeat"] == {"row": ["A", "B", "C"], "column": ["C", "B", "A"]} assert "columns" not in dct2 assert dct2["spec"]["encoding"]["x"]["field"] == {"repeat": "row"} assert dct2["spec"]["encoding"]["y"]["field"] == {"repeat": "column"} def test_data_property(): data = pd.DataFrame({"x": [1, 2, 3], "y": list("ABC")}) chart1 = alt.Chart(data).mark_point() chart2 = alt.Chart().mark_point().properties(data=data) assert chart1.to_dict() == chart2.to_dict() @pytest.mark.parametrize("method", ["layer", "hconcat", "vconcat", "concat"]) @pytest.mark.parametrize( "data", ["data.json", pd.DataFrame({"x": range(3), "y": list("abc")})] ) def test_subcharts_with_same_data(method, data): func = getattr(alt, method) point = alt.Chart(data).mark_point().encode(x="x:Q", y="y:Q") line = point.mark_line() text = point.mark_text() chart1 = func(point, line, text) assert chart1.data is not alt.Undefined assert all(c.data is alt.Undefined for c in getattr(chart1, method)) if method != "concat": op = OP_DICT[method] chart2 = op(op(point, line), text) assert chart2.data is not alt.Undefined assert all(c.data is alt.Undefined for c in getattr(chart2, method)) @pytest.mark.parametrize("method", ["layer", "hconcat", "vconcat", "concat"]) @pytest.mark.parametrize( "data", ["data.json", pd.DataFrame({"x": range(3), "y": list("abc")})] ) def test_subcharts_different_data(method, data): func = getattr(alt, method) point = alt.Chart(data).mark_point().encode(x="x:Q", y="y:Q") otherdata = alt.Chart("data.csv").mark_point().encode(x="x:Q", y="y:Q") nodata = alt.Chart().mark_point().encode(x="x:Q", y="y:Q") chart1 = func(point, otherdata) assert chart1.data is alt.Undefined assert getattr(chart1, method)[0].data is data chart2 = func(point, nodata) assert chart2.data is alt.Undefined assert getattr(chart2, method)[0].data is data def test_layer_facet(basic_chart): chart = (basic_chart + basic_chart).facet(row="row:Q") assert chart.data is not alt.Undefined assert chart.spec.data is alt.Undefined for layer in chart.spec.layer: assert layer.data is alt.Undefined dct = chart.to_dict() assert "data" in dct def test_layer_errors(): toplevel_chart = alt.Chart("data.txt").mark_point().configure_legend(columns=2) facet_chart1 = alt.Chart("data.txt").mark_point().encode(facet="row:Q") facet_chart2 = alt.Chart("data.txt").mark_point().facet("row:Q") repeat_chart = alt.Chart("data.txt").mark_point().repeat(["A", "B", "C"]) simple_chart = alt.Chart("data.txt").mark_point() with pytest.raises(ValueError) as err: toplevel_chart + simple_chart assert str(err.value).startswith( 'Objects with "config" attribute cannot be used within LayerChart.' ) with pytest.raises(ValueError) as err: repeat_chart + simple_chart assert str(err.value) == "Repeat charts cannot be layered." with pytest.raises(ValueError) as err: facet_chart1 + simple_chart assert str(err.value) == "Faceted charts cannot be layered." with pytest.raises(ValueError) as err: alt.layer(simple_chart) + facet_chart2 assert str(err.value) == "Faceted charts cannot be layered." @pytest.mark.parametrize( "chart_type", ["layer", "hconcat", "vconcat", "concat", "facet", "facet_encoding", "repeat"], ) def test_resolve(chart_type): chart = _make_chart_type(chart_type) chart = ( chart.resolve_scale(x="independent",) .resolve_legend(color="independent") .resolve_axis(y="independent") ) dct = chart.to_dict() assert dct["resolve"] == { "scale": {"x": "independent"}, "legend": {"color": "independent"}, "axis": {"y": "independent"}, } # TODO: test vconcat, hconcat, concat when schema allows them. # This is blocked by https://github.com/vega/vega-lite/issues/5261 @pytest.mark.parametrize("chart_type", ["chart", "layer", "facet_encoding"]) @pytest.mark.parametrize("facet_arg", [None, "facet", "row", "column"]) def test_facet(chart_type, facet_arg): chart = _make_chart_type(chart_type) if facet_arg is None: chart = chart.facet("color:N", columns=2) else: chart = chart.facet(**{facet_arg: "color:N", "columns": 2}) dct = chart.to_dict() assert "spec" in dct assert dct["columns"] == 2 expected = {"field": "color", "type": "nominal"} if facet_arg is None or facet_arg == "facet": assert dct["facet"] == expected else: assert dct["facet"][facet_arg] == expected def test_sequence(): data = alt.sequence(100) assert data.to_dict() == {"sequence": {"start": 0, "stop": 100}} data = alt.sequence(5, 10) assert data.to_dict() == {"sequence": {"start": 5, "stop": 10}} data = alt.sequence(0, 1, 0.1, as_="x") assert data.to_dict() == { "sequence": {"start": 0, "stop": 1, "step": 0.1, "as": "x"} } def test_graticule(): data = alt.graticule() assert data.to_dict() == {"graticule": True} data = alt.graticule(step=[15, 15]) assert data.to_dict() == {"graticule": {"step": [15, 15]}} def test_sphere(): data = alt.sphere() assert data.to_dict() == {"sphere": True} altair-4.1.0/altair/vegalite/v3/tests/test_data.py000066400000000000000000000017061364111050100220540ustar00rootroot00000000000000import os import pandas as pd import pytest from .. import data as alt @pytest.fixture def sample_data(): return pd.DataFrame({"x": range(10), "y": range(10)}) def test_disable_max_rows(sample_data): with alt.data_transformers.enable("default", max_rows=5): # Ensure max rows error is raised. with pytest.raises(alt.MaxRowsError): alt.data_transformers.get()(sample_data) # Ensure that max rows error is properly disabled. with alt.data_transformers.disable_max_rows(): alt.data_transformers.get()(sample_data) try: with alt.data_transformers.enable("json"): # Ensure that there is no TypeError for non-max_rows transformers. with alt.data_transformers.disable_max_rows(): jsonfile = alt.data_transformers.get()(sample_data) except TypeError: jsonfile = {} finally: if jsonfile: os.remove(jsonfile["url"]) altair-4.1.0/altair/vegalite/v3/tests/test_display.py000066400000000000000000000036701364111050100226120ustar00rootroot00000000000000from contextlib import contextmanager import pytest import altair.vegalite.v3 as alt @contextmanager def check_render_options(**options): """ Context manager that will assert that alt.renderers.options are equivalent to the given options in the IPython.display.display call """ import IPython.display def check_options(obj): assert alt.renderers.options == options _display = IPython.display.display IPython.display.display = check_options try: yield finally: IPython.display.display = _display def test_check_renderer_options(): # this test should pass with check_render_options(): from IPython.display import display display(None) # check that an error is appropriately raised if the test fails with pytest.raises(AssertionError): with check_render_options(foo="bar"): from IPython.display import display display(None) def test_display_options(): chart = alt.Chart("data.csv").mark_point().encode(x="foo:Q") # check that there are no options by default with check_render_options(): chart.display() # check that display options are passed with check_render_options(embed_options={"tooltip": False, "renderer": "canvas"}): chart.display("canvas", tooltip=False) # check that above options do not persist with check_render_options(): chart.display() # check that display options augment rather than overwrite pre-set options with alt.renderers.enable(embed_options={"tooltip": True, "renderer": "svg"}): with check_render_options(embed_options={"tooltip": True, "renderer": "svg"}): chart.display() with check_render_options( embed_options={"tooltip": True, "renderer": "canvas"} ): chart.display("canvas") # check that above options do not persist with check_render_options(): chart.display() altair-4.1.0/altair/vegalite/v3/tests/test_geo_interface.py000066400000000000000000000145401364111050100237350ustar00rootroot00000000000000import pytest import altair.vegalite.v3 as alt def geom_obj(geom): class Geom(object): pass geom_obj = Geom() setattr(geom_obj, "__geo_interface__", geom) return geom_obj # correct translation of Polygon geometry to Feature type def test_geo_interface_polygon_feature(): geom = { "coordinates": [[(0, 0), (0, 2), (2, 2), (2, 0), (0, 0)]], "type": "Polygon", } feat = geom_obj(geom) with alt.data_transformers.enable(consolidate_datasets=False): spec = alt.Chart(feat).mark_geoshape().to_dict() assert spec["data"]["values"]["type"] == "Feature" # merge geometry with empty properties dictionary def test_geo_interface_removal_empty_properties(): geom = { "geometry": { "coordinates": [ [[6.90, 53.48], [5.98, 51.85], [6.07, 53.51], [6.90, 53.48]] ], "type": "Polygon", }, "id": None, "properties": {}, "type": "Feature", } feat = geom_obj(geom) with alt.data_transformers.enable(consolidate_datasets=False): spec = alt.Chart(feat).mark_geoshape().to_dict() assert spec["data"]["values"]["type"] == "Feature" # only register metadata in the properties member def test_geo_interface_register_foreign_member(): geom = { "geometry": { "coordinates": [ [[6.90, 53.48], [5.98, 51.85], [6.07, 53.51], [6.90, 53.48]] ], "type": "Polygon", }, "id": 2, "properties": {"foo": "bah"}, "type": "Feature", } feat = geom_obj(geom) with alt.data_transformers.enable(consolidate_datasets=False): spec = alt.Chart(feat).mark_geoshape().to_dict() with pytest.raises(KeyError): spec["data"]["values"]["id"] assert spec["data"]["values"]["foo"] == "bah" # correct serializing of arrays and nested tuples def test_geo_interface_serializing_arrays_tuples(): import array as arr geom = { "bbox": arr.array("d", [1, 2, 3, 4]), "geometry": { "coordinates": [ tuple( ( tuple((6.90, 53.48)), tuple((5.98, 51.85)), tuple((6.07, 53.51)), tuple((6.90, 53.48)), ) ) ], "type": "Polygon", }, "id": 27, "properties": {}, "type": "Feature", } feat = geom_obj(geom) with alt.data_transformers.enable(consolidate_datasets=False): spec = alt.Chart(feat).mark_geoshape().to_dict() assert spec["data"]["values"]["geometry"]["coordinates"][0][0] == [6.9, 53.48] # overwrite existing 'type' value in properties with `Feature` def test_geo_interface_reserved_members(): geom = { "geometry": { "coordinates": [ [[6.90, 53.48], [5.98, 51.85], [6.07, 53.51], [6.90, 53.48]] ], "type": "Polygon", }, "id": 27, "properties": {"type": "foo"}, "type": "Feature", } feat = geom_obj(geom) with alt.data_transformers.enable(consolidate_datasets=False): spec = alt.Chart(feat).mark_geoshape().to_dict() assert spec["data"]["values"]["type"] == "Feature" # an empty FeatureCollection is valid def test_geo_interface_empty_feature_collection(): geom = {"type": "FeatureCollection", "features": []} feat = geom_obj(geom) with alt.data_transformers.enable(consolidate_datasets=False): spec = alt.Chart(feat).mark_geoshape().to_dict() assert spec["data"]["values"] == [] # Features in a FeatureCollection only keep properties and geometry def test_geo_interface_feature_collection(): geom = { "type": "FeatureCollection", "features": [ { "geometry": { "coordinates": [ [[6.90, 53.48], [5.98, 51.85], [6.07, 53.51], [6.90, 53.48]] ], "type": "Polygon", }, "id": 27, "properties": {"type": "foo", "id": 1, "geometry": 1}, "type": "Feature", }, { "geometry": { "coordinates": [ [[8.90, 53.48], [7.98, 51.85], [8.07, 53.51], [8.90, 53.48]] ], "type": "Polygon", }, "id": 28, "properties": {"type": "foo", "id": 2, "geometry": 1}, "type": "Feature", }, ], } feat = geom_obj(geom) with alt.data_transformers.enable(consolidate_datasets=False): spec = alt.Chart(feat).mark_geoshape().to_dict() assert spec["data"]["values"][0]["id"] == 1 assert spec["data"]["values"][1]["id"] == 2 assert "coordinates" in spec["data"]["values"][0]["geometry"] assert "coordinates" in spec["data"]["values"][1]["geometry"] assert spec["data"]["values"][0]["type"] == "Feature" assert spec["data"]["values"][1]["type"] == "Feature" # typical output of a __geo_interface__ from geopandas GeoDataFrame # notic that the index value is registerd as a commonly used identifier # with the name "id" (in this case 49). Similar to serialization of a # pandas DataFrame is the index not included in the output def test_geo_interface_feature_collection_gdf(): geom = { "bbox": (19.89, -26.82, 29.43, -17.66), "features": [ { "bbox": (19.89, -26.82, 29.43, -17.66), "geometry": { "coordinates": [ [[6.90, 53.48], [5.98, 51.85], [6.07, 53.51], [6.90, 53.48]] ], "type": "Polygon", }, "id": "49", "properties": { "continent": "Africa", "gdp_md_est": 35900.0, "id": "BWA", "iso_a3": "BWA", "name": "Botswana", "pop_est": 2214858, }, "type": "Feature", } ], "type": "FeatureCollection", } feat = geom_obj(geom) with alt.data_transformers.enable(consolidate_datasets=False): spec = alt.Chart(feat).mark_geoshape().to_dict() assert spec["data"]["values"][0]["id"] == "BWA" altair-4.1.0/altair/vegalite/v3/tests/test_renderers.py000066400000000000000000000056611364111050100231400ustar00rootroot00000000000000"""Tests of various renderers""" import json import re import pytest import altair.vegalite.v3 as alt def _extract_embedOpt(html): """Extract an embedOpt definition from an html string. Note: this is very brittle, but works for the specific test in this file. """ result = re.search(r"embedOpt\s+=\s+(?P\{.*?\})", html) if not result: return None else: return json.loads(result.groupdict()["embedOpt"]) @pytest.fixture def chart(): return alt.Chart("data.csv").mark_point() def test_colab_renderer_embed_options(chart): """Test that embed_options in renderer metadata are correctly manifest in html""" def assert_actions_true(chart): bundle = chart._repr_mimebundle_(None, None) embedOpt = _extract_embedOpt(bundle["text/html"]) assert embedOpt == {"actions": True, "mode": "vega-lite"} def assert_actions_false(chart): bundle = chart._repr_mimebundle_(None, None) embedOpt = _extract_embedOpt(bundle["text/html"]) assert embedOpt == {"actions": False, "mode": "vega-lite"} with alt.renderers.enable("colab", embed_options=dict(actions=False)): assert_actions_false(chart) with alt.renderers.enable("colab"): with alt.renderers.enable(embed_options=dict(actions=True)): assert_actions_true(chart) with alt.renderers.set_embed_options(actions=False): assert_actions_false(chart) with alt.renderers.set_embed_options(actions=True): assert_actions_true(chart) def test_default_renderer_embed_options(chart, renderer="default"): # check that metadata is passed appropriately mimetype = alt.display.VEGALITE_MIME_TYPE spec = chart.to_dict() with alt.renderers.enable(renderer, embed_options=dict(actions=False)): bundle, metadata = chart._repr_mimebundle_(None, None) assert set(bundle.keys()) == {mimetype, "text/plain"} assert bundle[mimetype] == spec assert metadata == {mimetype: {"embed_options": {"actions": False}}} # Sanity check: no metadata specified with alt.renderers.enable(renderer): bundle, metadata = chart._repr_mimebundle_(None, None) assert bundle[mimetype] == spec assert metadata == {} def test_json_renderer_embed_options(chart, renderer="json"): """Test that embed_options in renderer metadata are correctly manifest in html""" mimetype = "application/json" spec = chart.to_dict() with alt.renderers.enable("json", option="foo"): bundle, metadata = chart._repr_mimebundle_(None, None) assert set(bundle.keys()) == {mimetype, "text/plain"} assert bundle[mimetype] == spec assert metadata == {mimetype: {"option": "foo"}} # Sanity check: no options specified with alt.renderers.enable(renderer): bundle, metadata = chart._repr_mimebundle_(None, None) assert bundle[mimetype] == spec assert metadata == {} altair-4.1.0/altair/vegalite/v3/tests/test_theme.py000066400000000000000000000010151364111050100222360ustar00rootroot00000000000000import pytest import altair.vegalite.v3 as alt from altair.vegalite.v3.theme import VEGA_THEMES @pytest.fixture def chart(): return alt.Chart("data.csv").mark_bar().encode(x="x:Q") def test_vega_themes(chart): for theme in VEGA_THEMES: with alt.themes.enable(theme): dct = chart.to_dict() assert dct["usermeta"] == {"embedOptions": {"theme": theme}} assert dct["config"] == { "view": {"width": 400, "height": 300}, "mark": {"tooltip": None}, } altair-4.1.0/altair/vegalite/v3/theme.py000066400000000000000000000026331364111050100200440ustar00rootroot00000000000000"""Tools for enabling and registering chart themes""" from ...utils.theme import ThemeRegistry VEGA_THEMES = ["ggplot2", "quartz", "vox", "fivethirtyeight", "dark", "latimes"] class VegaTheme(object): """Implementation of a builtin vega theme.""" def __init__(self, theme): self.theme = theme def __call__(self): return { "usermeta": {"embedOptions": {"theme": self.theme}}, "config": { "view": {"width": 400, "height": 300}, "mark": {"tooltip": None}, }, } def __repr__(self): return "VegaTheme({!r})".format(self.theme) # The entry point group that can be used by other packages to declare other # renderers that will be auto-detected. Explicit registration is also # allowed by the PluginRegistery API. ENTRY_POINT_GROUP = "altair.vegalite.v3.theme" # type: str themes = ThemeRegistry(entry_point_group=ENTRY_POINT_GROUP) themes.register( "default", lambda: { "config": {"view": {"width": 400, "height": 300}, "mark": {"tooltip": None}} }, ) themes.register( "opaque", lambda: { "config": { "background": "white", "view": {"width": 400, "height": 300}, "mark": {"tooltip": None}, } }, ) themes.register("none", lambda: {}) for theme in VEGA_THEMES: themes.register(theme, VegaTheme(theme)) themes.enable("default") altair-4.1.0/altair/vegalite/v4/000077500000000000000000000000001364111050100163655ustar00rootroot00000000000000altair-4.1.0/altair/vegalite/v4/__init__.py000066400000000000000000000005761364111050100205060ustar00rootroot00000000000000# flake8: noqa from .schema import * from .api import * from ...datasets import list_datasets, load_dataset from ... import expr from ...expr import datum from .display import VegaLite, renderers from .data import ( MaxRowsError, pipe, curry, limit_rows, sample, to_json, to_csv, to_values, default_data_transformer, data_transformers, ) altair-4.1.0/altair/vegalite/v4/api.py000066400000000000000000002513071364111050100175200ustar00rootroot00000000000000import warnings import hashlib import io import json import jsonschema import pandas as pd from toolz.curried import pipe as _pipe from .schema import core, channels, mixins, Undefined, SCHEMA_URL from .data import data_transformers from ... import utils, expr from .display import renderers, VEGALITE_VERSION, VEGAEMBED_VERSION, VEGA_VERSION from .theme import themes # ------------------------------------------------------------------------ # Data Utilities def _dataset_name(values): """Generate a unique hash of the data Parameters ---------- values : list or dict A list/dict representation of data values. Returns ------- name : string A unique name generated from the hash of the values. """ if isinstance(values, core.InlineDataset): values = values.to_dict() values_json = json.dumps(values, sort_keys=True) hsh = hashlib.md5(values_json.encode()).hexdigest() return "data-" + hsh def _consolidate_data(data, context): """If data is specified inline, then move it to context['datasets'] This function will modify context in-place, and return a new version of data """ values = Undefined kwds = {} if isinstance(data, core.InlineData): if data.name is Undefined and data.values is not Undefined: values = data.values kwds = {"format": data.format} elif isinstance(data, dict): if "name" not in data and "values" in data: values = data["values"] kwds = {k: v for k, v in data.items() if k != "values"} if values is not Undefined: name = _dataset_name(values) data = core.NamedData(name=name, **kwds) context.setdefault("datasets", {})[name] = values return data def _prepare_data(data, context=None): """Convert input data to data for use within schema Parameters ---------- data : The input dataset in the form of a DataFrame, dictionary, altair data object, or other type that is recognized by the data transformers. context : dict (optional) The to_dict context in which the data is being prepared. This is used to keep track of information that needs to be passed up and down the recursive serialization routine, such as global named datasets. """ if data is Undefined: return data # convert dataframes or objects with __geo_interface__ to dict if isinstance(data, pd.DataFrame) or hasattr(data, "__geo_interface__"): data = _pipe(data, data_transformers.get()) # convert string input to a URLData if isinstance(data, str): data = core.UrlData(data) # consolidate inline data to top-level datasets if context is not None and data_transformers.consolidate_datasets: data = _consolidate_data(data, context) # if data is still not a recognized type, then return if not isinstance(data, (dict, core.Data)): warnings.warn("data of type {} not recognized".format(type(data))) return data # ------------------------------------------------------------------------ # Aliases & specializations Bin = core.BinParams @utils.use_signature(core.LookupData) class LookupData(core.LookupData): def to_dict(self, *args, **kwargs): """Convert the chart to a dictionary suitable for JSON export""" copy = self.copy(deep=False) copy.data = _prepare_data(copy.data, kwargs.get("context")) return super(LookupData, copy).to_dict(*args, **kwargs) @utils.use_signature(core.FacetMapping) class FacetMapping(core.FacetMapping): _class_is_valid_at_instantiation = False def to_dict(self, *args, **kwargs): copy = self.copy(deep=False) context = kwargs.get("context", {}) data = context.get("data", None) if isinstance(self.row, str): copy.row = core.FacetFieldDef(**utils.parse_shorthand(self.row, data)) if isinstance(self.column, str): copy.column = core.FacetFieldDef(**utils.parse_shorthand(self.column, data)) return super(FacetMapping, copy).to_dict(*args, **kwargs) # ------------------------------------------------------------------------ # Encoding will contain channel objects that aren't valid at instantiation core.FacetedEncoding._class_is_valid_at_instantiation = False # ------------------------------------------------------------------------ # These are parameters that are valid at the top level, but are not valid # for specs that are within a composite chart # (layer, hconcat, vconcat, facet, repeat) TOPLEVEL_ONLY_KEYS = {"background", "config", "autosize", "padding", "$schema"} def _get_channels_mapping(): mapping = {} for attr in dir(channels): cls = getattr(channels, attr) if isinstance(cls, type) and issubclass(cls, core.SchemaBase): mapping[cls] = attr.replace("Value", "").lower() return mapping # ------------------------------------------------------------------------- # Tools for working with selections class Selection(object): """A Selection object""" _counter = 0 @classmethod def _get_name(cls): cls._counter += 1 return "selector{:03d}".format(cls._counter) def __init__(self, name, selection): if name is None: name = self._get_name() self.name = name self.selection = selection def __repr__(self): return "Selection({0!r}, {1})".format(self.name, self.selection) def ref(self): return {"selection": self.name} def to_dict(self): return {"selection": self.name} def __invert__(self): return Selection(core.SelectionNot(**{"not": self.name}), self.selection) def __and__(self, other): if isinstance(other, Selection): other = other.name return Selection( core.SelectionAnd(**{"and": [self.name, other]}), self.selection ) def __or__(self, other): if isinstance(other, Selection): other = other.name return Selection(core.SelectionOr(**{"or": [self.name, other]}), self.selection) def __getattr__(self, field_name): return expr.core.GetAttrExpression(self.name, field_name) def __getitem__(self, field_name): return expr.core.GetItemExpression(self.name, field_name) # ------------------------------------------------------------------------ # Top-Level Functions def value(value, **kwargs): """Specify a value for use in an encoding""" return dict(value=value, **kwargs) def selection(name=None, type=Undefined, **kwds): """Create a named selection. Parameters ---------- name : string (optional) The name of the selection. If not specified, a unique name will be created. type : string The type of the selection: one of ["interval", "single", or "multi"] **kwds : additional keywords will be used to construct a SelectionDef instance that controls the selection. Returns ------- selection: Selection The selection object that can be used in chart creation. """ return Selection(name, core.SelectionDef(type=type, **kwds)) @utils.use_signature(core.IntervalSelection) def selection_interval(**kwargs): """Create a selection with type='interval'""" return selection(type="interval", **kwargs) @utils.use_signature(core.MultiSelection) def selection_multi(**kwargs): """Create a selection with type='multi'""" return selection(type="multi", **kwargs) @utils.use_signature(core.SingleSelection) def selection_single(**kwargs): """Create a selection with type='single'""" return selection(type="single", **kwargs) @utils.use_signature(core.Binding) def binding(input, **kwargs): """A generic binding""" return core.Binding(input=input, **kwargs) @utils.use_signature(core.BindCheckbox) def binding_checkbox(**kwargs): """A checkbox binding""" return core.BindCheckbox(input="checkbox", **kwargs) @utils.use_signature(core.BindRadioSelect) def binding_radio(**kwargs): """A radio button binding""" return core.BindRadioSelect(input="radio", **kwargs) @utils.use_signature(core.BindRadioSelect) def binding_select(**kwargs): """A select binding""" return core.BindRadioSelect(input="select", **kwargs) @utils.use_signature(core.BindRange) def binding_range(**kwargs): """A range binding""" return core.BindRange(input="range", **kwargs) def condition(predicate, if_true, if_false, **kwargs): """A conditional attribute or encoding Parameters ---------- predicate: Selection, PredicateComposition, expr.Expression, dict, or string the selection predicate or test predicate for the condition. if a string is passed, it will be treated as a test operand. if_true: the spec or object to use if the selection predicate is true if_false: the spec or object to use if the selection predicate is false **kwargs: additional keyword args are added to the resulting dict Returns ------- spec: dict or VegaLiteSchema the spec that describes the condition """ test_predicates = (str, expr.Expression, core.PredicateComposition) if isinstance(predicate, Selection): condition = {"selection": predicate.name} elif isinstance(predicate, core.SelectionComposition): condition = {"selection": predicate} elif isinstance(predicate, test_predicates): condition = {"test": predicate} elif isinstance(predicate, dict): condition = predicate else: raise NotImplementedError( "condition predicate of type {}" "".format(type(predicate)) ) if isinstance(if_true, core.SchemaBase): # convert to dict for now; the from_dict call below will wrap this # dict in the appropriate schema if_true = if_true.to_dict() elif isinstance(if_true, str): if_true = {"shorthand": if_true} if_true.update(kwargs) condition.update(if_true) if isinstance(if_false, core.SchemaBase): # For the selection, the channel definitions all allow selections # already. So use this SchemaBase wrapper if possible. selection = if_false.copy() selection.condition = condition elif isinstance(if_false, str): selection = {"condition": condition, "shorthand": if_false} selection.update(kwargs) else: selection = dict(condition=condition, **if_false) return selection # -------------------------------------------------------------------- # Top-level objects class TopLevelMixin(mixins.ConfigMethodMixin): """Mixin for top-level chart objects such as Chart, LayeredChart, etc.""" _class_is_valid_at_instantiation = False def to_dict(self, *args, **kwargs): """Convert the chart to a dictionary suitable for JSON export""" # We make use of three context markers: # - 'data' points to the data that should be referenced for column type # inference. # - 'top_level' is a boolean flag that is assumed to be true; if it's # true then a "$schema" arg is added to the dict. # - 'datasets' is a dict of named datasets that should be inserted # in the top-level object # note: not a deep copy because we want datasets and data arguments to # be passed by reference context = kwargs.get("context", {}).copy() context.setdefault("datasets", {}) is_top_level = context.get("top_level", True) copy = self.copy(deep=False) original_data = getattr(copy, "data", Undefined) copy.data = _prepare_data(original_data, context) if original_data is not Undefined: context["data"] = original_data # remaining to_dict calls are not at top level context["top_level"] = False kwargs["context"] = context try: dct = super(TopLevelMixin, copy).to_dict(*args, **kwargs) except jsonschema.ValidationError: dct = None # If we hit an error, then re-convert with validate='deep' to get # a more useful traceback. We don't do this by default because it's # much slower in the case that there are no errors. if dct is None: kwargs["validate"] = "deep" dct = super(TopLevelMixin, copy).to_dict(*args, **kwargs) # TODO: following entries are added after validation. Should they be validated? if is_top_level: # since this is top-level we add $schema if it's missing if "$schema" not in dct: dct["$schema"] = SCHEMA_URL # apply theme from theme registry the_theme = themes.get() dct = utils.update_nested(the_theme(), dct, copy=True) # update datasets if context["datasets"]: dct.setdefault("datasets", {}).update(context["datasets"]) return dct def to_html( self, base_url="https://cdn.jsdelivr.net/npm/", output_div="vis", embed_options=None, json_kwds=None, fullhtml=True, requirejs=False, ): return utils.spec_to_html( self.to_dict(), mode="vega-lite", vegalite_version=VEGALITE_VERSION, vegaembed_version=VEGAEMBED_VERSION, vega_version=VEGA_VERSION, base_url=base_url, output_div=output_div, embed_options=embed_options, json_kwds=json_kwds, fullhtml=fullhtml, requirejs=requirejs, ) def save( self, fp, format=None, override_data_transformer=True, scale_factor=1.0, vegalite_version=VEGALITE_VERSION, vega_version=VEGA_VERSION, vegaembed_version=VEGAEMBED_VERSION, **kwargs, ): """Save a chart to file in a variety of formats Supported formats are json, html, png, svg Parameters ---------- fp : string filename or file-like object file in which to write the chart. format : string (optional) the format to write: one of ['json', 'html', 'png', 'svg']. If not specified, the format will be determined from the filename. override_data_transformer : boolean (optional) If True (default), then the save action will be done with the MaxRowsError disabled. If False, then do not change the data transformer. scale_factor : float For svg or png formats, scale the image by this factor when saving. This can be used to control the size or resolution of the output. Default is 1.0 **kwargs : Additional keyword arguments are passed to the output method associated with the specified format. """ from ...utils.save import save kwds = dict( chart=self, fp=fp, format=format, scale_factor=scale_factor, vegalite_version=vegalite_version, vega_version=vega_version, vegaembed_version=vegaembed_version, **kwargs, ) # By default we override the data transformer. This makes it so # that save() will succeed even for large datasets that would # normally trigger a MaxRowsError if override_data_transformer: with data_transformers.disable_max_rows(): result = save(**kwds) else: result = save(**kwds) return result # Fallback for when rendering fails; the full repr is too long to be # useful in nearly all cases. def __repr__(self): return "alt.{}(...)".format(self.__class__.__name__) # Layering and stacking def __add__(self, other): if not isinstance(other, TopLevelMixin): raise ValueError("Only Chart objects can be layered.") return layer(self, other) def __and__(self, other): if not isinstance(other, TopLevelMixin): raise ValueError("Only Chart objects can be concatenated.") return vconcat(self, other) def __or__(self, other): if not isinstance(other, TopLevelMixin): raise ValueError("Only Chart objects can be concatenated.") return hconcat(self, other) def repeat( self, repeat=Undefined, row=Undefined, column=Undefined, columns=Undefined, **kwargs, ): """Return a RepeatChart built from the chart Fields within the chart can be set to correspond to the row or column using `alt.repeat('row')` and `alt.repeat('column')`. Parameters ---------- repeat : list a list of data column names to be repeated. This cannot be used along with the ``row`` or ``column`` argument. row : list a list of data column names to be mapped to the row facet column : list a list of data column names to be mapped to the column facet columns : int the maximum number of columns before wrapping. Only referenced if ``repeat`` is specified. **kwargs : additional keywords passed to RepeatChart. Returns ------- chart : RepeatChart a repeated chart. """ repeat_specified = repeat is not Undefined rowcol_specified = row is not Undefined or column is not Undefined if repeat_specified and rowcol_specified: raise ValueError( "repeat argument cannot be combined with row/column argument." ) if repeat_specified: repeat = repeat else: repeat = core.RepeatMapping(row=row, column=column) return RepeatChart(spec=self, repeat=repeat, columns=columns, **kwargs) def properties(self, **kwargs): """Set top-level properties of the Chart. Argument names and types are the same as class initialization. """ copy = self.copy(deep=False) for key, val in kwargs.items(): if key == "selection" and isinstance(val, Selection): # For backward compatibility with old selection interface. setattr(copy, key, {val.name: val.selection}) else: # Don't validate data, because it hasn't been processed. if key != "data": self.validate_property(key, val) setattr(copy, key, val) return copy def project( self, type="mercator", center=Undefined, clipAngle=Undefined, clipExtent=Undefined, coefficient=Undefined, distance=Undefined, fraction=Undefined, lobes=Undefined, parallel=Undefined, precision=Undefined, radius=Undefined, ratio=Undefined, reflectX=Undefined, reflectY=Undefined, rotate=Undefined, scale=Undefined, spacing=Undefined, tilt=Undefined, translate=Undefined, **kwds, ): """Add a geographic projection to the chart. This is generally used either with ``mark_geoshape`` or with the ``latitude``/``longitude`` encodings. Available projection types are ['albers', 'albersUsa', 'azimuthalEqualArea', 'azimuthalEquidistant', 'conicConformal', 'conicEqualArea', 'conicEquidistant', 'equalEarth', 'equirectangular', 'gnomonic', 'identity', 'mercator', 'orthographic', 'stereographic', 'transverseMercator'] Attributes ---------- type : ProjectionType The cartographic projection to use. This value is case-insensitive, for example `"albers"` and `"Albers"` indicate the same projection type. You can find all valid projection types [in the documentation](https://vega.github.io/vega-lite/docs/projection.html#projection-types). **Default value:** `mercator` center : List(float) Sets the projection’s center to the specified center, a two-element array of longitude and latitude in degrees. **Default value:** `[0, 0]` clipAngle : float Sets the projection’s clipping circle radius to the specified angle in degrees. If `null`, switches to [antimeridian](http://bl.ocks.org/mbostock/3788999) cutting rather than small-circle clipping. clipExtent : List(List(float)) Sets the projection’s viewport clip extent to the specified bounds in pixels. The extent bounds are specified as an array `[[x0, y0], [x1, y1]]`, where `x0` is the left-side of the viewport, `y0` is the top, `x1` is the right and `y1` is the bottom. If `null`, no viewport clipping is performed. coefficient : float distance : float fraction : float lobes : float parallel : float precision : Mapping(required=[length]) Sets the threshold for the projection’s [adaptive resampling](http://bl.ocks.org/mbostock/3795544) to the specified value in pixels. This value corresponds to the [Douglas–Peucker distance](http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm). If precision is not specified, returns the projection’s current resampling precision which defaults to `√0.5 ≅ 0.70710…`. radius : float ratio : float reflectX : boolean reflectY : boolean rotate : List(float) Sets the projection’s three-axis rotation to the specified angles, which must be a two- or three-element array of numbers [`lambda`, `phi`, `gamma`] specifying the rotation angles in degrees about each spherical axis. (These correspond to yaw, pitch and roll.) **Default value:** `[0, 0, 0]` scale : float Sets the projection's scale (zoom) value, overriding automatic fitting. spacing : float tilt : float translate : List(float) Sets the projection's translation (pan) value, overriding automatic fitting. """ projection = core.Projection( center=center, clipAngle=clipAngle, clipExtent=clipExtent, coefficient=coefficient, distance=distance, fraction=fraction, lobes=lobes, parallel=parallel, precision=precision, radius=radius, ratio=ratio, reflectX=reflectX, reflectY=reflectY, rotate=rotate, scale=scale, spacing=spacing, tilt=tilt, translate=translate, type=type, **kwds, ) return self.properties(projection=projection) def _add_transform(self, *transforms): """Copy the chart and add specified transforms to chart.transform""" copy = self.copy(deep=["transform"]) if copy.transform is Undefined: copy.transform = [] copy.transform.extend(transforms) return copy def transform_aggregate(self, aggregate=Undefined, groupby=Undefined, **kwds): """ Add an AggregateTransform to the schema. Parameters ---------- aggregate : List(:class:`AggregatedFieldDef`) Array of objects that define fields to aggregate. groupby : List(string) The data fields to group by. If not specified, a single group containing all data objects will be used. **kwds : additional keywords are converted to aggregates using standard shorthand parsing. Returns ------- self : Chart object returns chart to allow for chaining Examples -------- The aggregate transform allows you to specify transforms directly using the same shorthand syntax as used in encodings: >>> import altair as alt >>> chart1 = alt.Chart().transform_aggregate( ... mean_acc='mean(Acceleration)', ... groupby=['Origin'] ... ) >>> print(chart1.transform[0].to_json()) # doctest: +NORMALIZE_WHITESPACE { "aggregate": [ { "as": "mean_acc", "field": "Acceleration", "op": "mean" } ], "groupby": [ "Origin" ] } It also supports including AggregatedFieldDef instances or dicts directly, so you can create the above transform like this: >>> chart2 = alt.Chart().transform_aggregate( ... [alt.AggregatedFieldDef(field='Acceleration', op='mean', ... **{'as': 'mean_acc'})], ... groupby=['Origin'] ... ) >>> chart2.transform == chart1.transform True See Also -------- alt.AggregateTransform : underlying transform object """ if aggregate is Undefined: aggregate = [] for key, val in kwds.items(): parsed = utils.parse_shorthand(val) dct = { "as": key, "field": parsed.get("field", Undefined), "op": parsed.get("aggregate", Undefined), } aggregate.append(core.AggregatedFieldDef(**dct)) return self._add_transform( core.AggregateTransform(aggregate=aggregate, groupby=groupby) ) def transform_bin(self, as_=Undefined, field=Undefined, bin=True, **kwargs): """ Add a BinTransform to the schema. Parameters ---------- as_ : anyOf(string, List(string)) The output fields at which to write the start and end bin values. bin : anyOf(boolean, :class:`BinParams`) An object indicating bin properties, or simply ``true`` for using default bin parameters. field : string The data field to bin. Returns ------- self : Chart object returns chart to allow for chaining Examples -------- >>> import altair as alt >>> chart = alt.Chart().transform_bin("x_binned", "x") >>> chart.transform[0] BinTransform({ as: 'x_binned', bin: True, field: 'x' }) >>> chart = alt.Chart().transform_bin("x_binned", "x", ... bin=alt.Bin(maxbins=10)) >>> chart.transform[0] BinTransform({ as: 'x_binned', bin: BinParams({ maxbins: 10 }), field: 'x' }) See Also -------- alt.BinTransform : underlying transform object """ if as_ is not Undefined: if "as" in kwargs: raise ValueError( "transform_bin: both 'as_' and 'as' passed as arguments." ) kwargs["as"] = as_ kwargs["bin"] = bin kwargs["field"] = field return self._add_transform(core.BinTransform(**kwargs)) def transform_calculate(self, as_=Undefined, calculate=Undefined, **kwargs): """ Add a CalculateTransform to the schema. Parameters ---------- as_ : string The field for storing the computed formula value. calculate : string or alt.expr expression A `expression `__ string. Use the variable ``datum`` to refer to the current data object. **kwargs transforms can also be passed by keyword argument; see Examples Returns ------- self : Chart object returns chart to allow for chaining Examples -------- >>> import altair as alt >>> from altair import datum, expr >>> chart = alt.Chart().transform_calculate(y = 2 * expr.sin(datum.x)) >>> chart.transform[0] CalculateTransform({ as: 'y', calculate: (2 * sin(datum.x)) }) It's also possible to pass the ``CalculateTransform`` arguments directly: >>> kwds = {'as': 'y', 'calculate': '2 * sin(datum.x)'} >>> chart = alt.Chart().transform_calculate(**kwds) >>> chart.transform[0] CalculateTransform({ as: 'y', calculate: '2 * sin(datum.x)' }) As the first form is easier to write and understand, that is the recommended method. See Also -------- alt.CalculateTransform : underlying transform object """ if as_ is Undefined: as_ = kwargs.pop("as", Undefined) elif "as" in kwargs: raise ValueError( "transform_calculate: both 'as_' and 'as' passed as arguments." ) if as_ is not Undefined or calculate is not Undefined: dct = {"as": as_, "calculate": calculate} self = self._add_transform(core.CalculateTransform(**dct)) for as_, calculate in kwargs.items(): dct = {"as": as_, "calculate": calculate} self = self._add_transform(core.CalculateTransform(**dct)) return self def transform_density( self, density, as_=Undefined, bandwidth=Undefined, counts=Undefined, cumulative=Undefined, extent=Undefined, groupby=Undefined, maxsteps=Undefined, minsteps=Undefined, steps=Undefined, ): """Add a DensityTransform to the spec. Attributes ---------- density : str The data field for which to perform density estimation. as_ : [str, str] The output fields for the sample value and corresponding density estimate. **Default value:** ``["value", "density"]`` bandwidth : float The bandwidth (standard deviation) of the Gaussian kernel. If unspecified or set to zero, the bandwidth value is automatically estimated from the input data using Scott’s rule. counts : boolean A boolean flag indicating if the output values should be probability estimates (false) or smoothed counts (true). **Default value:** ``false`` cumulative : boolean A boolean flag indicating whether to produce density estimates (false) or cumulative density estimates (true). **Default value:** ``false`` extent : List([float, float]) A [min, max] domain from which to sample the distribution. If unspecified, the extent will be determined by the observed minimum and maximum values of the density value field. groupby : List(str) The data fields to group by. If not specified, a single group containing all data objects will be used. maxsteps : float The maximum number of samples to take along the extent domain for plotting the density. **Default value:** ``200`` minsteps : float The minimum number of samples to take along the extent domain for plotting the density. **Default value:** ``25`` steps : float The exact number of samples to take along the extent domain for plotting the density. If specified, overrides both minsteps and maxsteps to set an exact number of uniform samples. Potentially useful in conjunction with a fixed extent to ensure consistent sample points for stacked densities. """ return self._add_transform( core.DensityTransform( density=density, bandwidth=bandwidth, counts=counts, cumulative=cumulative, extent=extent, groupby=groupby, maxsteps=maxsteps, minsteps=minsteps, steps=steps, **{"as": as_}, ) ) def transform_impute( self, impute, key, frame=Undefined, groupby=Undefined, keyvals=Undefined, method=Undefined, value=Undefined, ): """ Add an ImputeTransform to the schema. Parameters ---------- impute : string The data field for which the missing values should be imputed. key : string A key field that uniquely identifies data objects within a group. Missing key values (those occurring in the data but not in the current group) will be imputed. frame : List(anyOf(None, float)) A frame specification as a two-element array used to control the window over which the specified method is applied. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. For example, the value ``[-5, 5]`` indicates that the window should include five objects preceding and five objects following the current object. **Default value:** : ``[null, null]`` indicating that the window includes all objects. groupby : List(string) An optional array of fields by which to group the values. Imputation will then be performed on a per-group basis. keyvals : anyOf(List(Mapping(required=[])), :class:`ImputeSequence`) Defines the key values that should be considered for imputation. An array of key values or an object defining a `number sequence `__. If provided, this will be used in addition to the key values observed within the input data. If not provided, the values will be derived from all unique values of the ``key`` field. For ``impute`` in ``encoding``, the key field is the x-field if the y-field is imputed, or vice versa. If there is no impute grouping, this property *must* be specified. method : :class:`ImputeMethod` The imputation method to use for the field value of imputed data objects. One of ``value``, ``mean``, ``median``, ``max`` or ``min``. **Default value:** ``"value"`` value : Mapping(required=[]) The field value to use when the imputation ``method`` is ``"value"``. Returns ------- self : Chart object returns chart to allow for chaining See Also -------- alt.ImputeTransform : underlying transform object """ return self._add_transform( core.ImputeTransform( impute=impute, key=key, frame=frame, groupby=groupby, keyvals=keyvals, method=method, value=value, ) ) def transform_joinaggregate( self, joinaggregate=Undefined, groupby=Undefined, **kwargs ): """ Add a JoinAggregateTransform to the schema. Parameters ---------- joinaggregate : List(:class:`JoinAggregateFieldDef`) The definition of the fields in the join aggregate, and what calculations to use. groupby : List(string) The data fields for partitioning the data objects into separate groups. If unspecified, all data points will be in a single group. **kwargs joinaggregates can also be passed by keyword argument; see Examples. Returns ------- self : Chart object returns chart to allow for chaining Examples -------- >>> import altair as alt >>> chart = alt.Chart().transform_joinaggregate(x='sum(y)') >>> chart.transform[0] JoinAggregateTransform({ joinaggregate: [JoinAggregateFieldDef({ as: 'x', field: 'y', op: 'sum' })] }) See Also -------- alt.JoinAggregateTransform : underlying transform object """ if joinaggregate is Undefined: joinaggregate = [] for key, val in kwargs.items(): parsed = utils.parse_shorthand(val) dct = { "as": key, "field": parsed.get("field", Undefined), "op": parsed.get("aggregate", Undefined), } joinaggregate.append(core.JoinAggregateFieldDef(**dct)) return self._add_transform( core.JoinAggregateTransform(joinaggregate=joinaggregate, groupby=groupby) ) def transform_filter(self, filter, **kwargs): """ Add a FilterTransform to the schema. Parameters ---------- filter : a filter expression or :class:`PredicateComposition` The `filter` property must be one of the predicate definitions: (1) a string or alt.expr expression (2) a range predicate (3) a selection predicate (4) a logical operand combining (1)-(3) (5) a Selection object Returns ------- self : Chart object returns chart to allow for chaining See Also -------- alt.FilterTransform : underlying transform object """ if isinstance(filter, Selection): filter = {"selection": filter.name} elif isinstance(filter, core.SelectionComposition): filter = {"selection": filter} return self._add_transform(core.FilterTransform(filter=filter, **kwargs)) def transform_flatten(self, flatten, as_=Undefined): """Add a FlattenTransform to the schema. Parameters ---------- flatten : List(string) An array of one or more data fields containing arrays to flatten. If multiple fields are specified, their array values should have a parallel structure, ideally with the same length. If the lengths of parallel arrays do not match, the longest array will be used with ``null`` values added for missing entries. as : List(string) The output field names for extracted array values. **Default value:** The field name of the corresponding array field Returns ------- self : Chart object returns chart to allow for chaining See Also -------- alt.FlattenTransform : underlying transform object """ return self._add_transform( core.FlattenTransform(flatten=flatten, **{"as": as_}) ) def transform_fold(self, fold, as_=Undefined): """Add a FoldTransform to the spec. Parameters ---------- fold : List(string) An array of data fields indicating the properties to fold. as : [string, string] The output field names for the key and value properties produced by the fold transform. Default: ``["key", "value"]`` Returns ------- self : Chart object returns chart to allow for chaining See Also -------- Chart.transform_pivot : pivot transform - opposite of fold. alt.FoldTransform : underlying transform object """ return self._add_transform(core.FoldTransform(fold=fold, **{"as": as_})) def transform_loess( self, on, loess, as_=Undefined, bandwidth=Undefined, groupby=Undefined ): """Add a LoessTransform to the spec. Parameters ---------- on : str The data field of the independent variable to use a predictor. loess : str The data field of the dependent variable to smooth. as_ : [str, str] The output field names for the smoothed points generated by the loess transform. **Default value:** The field names of the input x and y values. bandwidth : float A bandwidth parameter in the range ``[0, 1]`` that determines the amount of smoothing. **Default value:** ``0.3`` groupby : List(str) The data fields to group by. If not specified, a single group containing all data objects will be used. Returns ------- self : Chart object returns chart to allow for chaining See Also -------- Chart.transform_regression: regression transform alt.LoessTransform : underlying transform object """ return self._add_transform( core.LoessTransform( loess=loess, on=on, bandwidth=bandwidth, groupby=groupby, **{"as": as_} ) ) def transform_lookup( self, lookup=Undefined, from_=Undefined, as_=Undefined, default=Undefined, **kwargs, ): """Add a DataLookupTransform or SelectionLookupTransform to the chart Attributes ---------- lookup : string Key in primary data source. from_ : anyOf(:class:`LookupData`, :class:`LookupSelection`) Secondary data reference. as_ : anyOf(string, List(string)) The output fields on which to store the looked up data values. For data lookups, this property may be left blank if ``from_.fields`` has been specified (those field names will be used); if ``from_.fields`` has not been specified, ``as_`` must be a string. For selection lookups, this property is optional: if unspecified, looked up values will be stored under a property named for the selection; and if specified, it must correspond to ``from_.fields``. default : string The default value to use if lookup fails. **Default value:** ``null`` Returns ------- self : Chart object returns chart to allow for chaining See Also -------- alt.DataLookupTransform : underlying transform object alt.SelectionLookupTransform : underlying transform object """ if as_ is not Undefined: if "as" in kwargs: raise ValueError( "transform_lookup: both 'as_' and 'as' passed as arguments." ) kwargs["as"] = as_ if from_ is not Undefined: if "from" in kwargs: raise ValueError( "transform_lookup: both 'from_' and 'from' passed as arguments." ) kwargs["from"] = from_ kwargs["lookup"] = lookup kwargs["default"] = default return self._add_transform(core.LookupTransform(**kwargs)) def transform_pivot( self, pivot, value, groupby=Undefined, limit=Undefined, op=Undefined ): """Add a pivot transform to the chart. Parameters ---------- pivot : str The data field to pivot on. The unique values of this field become new field names in the output stream. value : str The data field to populate pivoted fields. The aggregate values of this field become the values of the new pivoted fields. groupby : List(str) The optional data fields to group by. If not specified, a single group containing all data objects will be used. limit : float An optional parameter indicating the maximum number of pivoted fields to generate. The default ( ``0`` ) applies no limit. The pivoted ``pivot`` names are sorted in ascending order prior to enforcing the limit. **Default value:** ``0`` op : string The aggregation operation to apply to grouped ``value`` field values. **Default value:** ``sum`` Returns ------- self : Chart object returns chart to allow for chaining See Also -------- Chart.transform_fold : fold transform - opposite of pivot. alt.PivotTransform : underlying transform object """ return self._add_transform( core.PivotTransform( pivot=pivot, value=value, groupby=groupby, limit=limit, op=op ) ) def transform_quantile( self, quantile, as_=Undefined, groupby=Undefined, probs=Undefined, step=Undefined, ): """Add a quantile transform to the chart Parameters ---------- quantile : str The data field for which to perform quantile estimation. as : [str, str] The output field names for the probability and quantile values. groupby : List(str) The data fields to group by. If not specified, a single group containing all data objects will be used. probs : List(float) An array of probabilities in the range (0, 1) for which to compute quantile values. If not specified, the *step* parameter will be used. step : float A probability step size (default 0.01) for sampling quantile values. All values from one-half the step size up to 1 (exclusive) will be sampled. This parameter is only used if the *probs* parameter is not provided. **Default value:** ``["prob", "value"]`` Returns ------- self : Chart object returns chart to allow for chaining See Also -------- alt.QuantileTransform : underlying transform object """ return self._add_transform( core.QuantileTransform( quantile=quantile, groupby=groupby, probs=probs, step=step, **{"as": as_}, ) ) def transform_regression( self, on, regression, as_=Undefined, extent=Undefined, groupby=Undefined, method=Undefined, order=Undefined, params=Undefined, ): """Add a RegressionTransform to the chart. Parameters ---------- on : str The data field of the independent variable to use a predictor. regression : str The data field of the dependent variable to predict. as_ : [str, str] The output field names for the smoothed points generated by the regression transform. **Default value:** The field names of the input x and y values. extent : [float, float] A [min, max] domain over the independent (x) field for the starting and ending points of the generated trend line. groupby : List(str) The data fields to group by. If not specified, a single group containing all data objects will be used. method : enum('linear', 'log', 'exp', 'pow', 'quad', 'poly') The functional form of the regression model. One of ``"linear"``, ``"log"``, ``"exp"``, ``"pow"``, ``"quad"``, or ``"poly"``. **Default value:** ``"linear"`` order : float The polynomial order (number of coefficients) for the 'poly' method. **Default value:** ``3`` params : boolean A boolean flag indicating if the transform should return the regression model parameters (one object per group), rather than trend line points. The resulting objects include a ``coef`` array of fitted coefficient values (starting with the intercept term and then including terms of increasing order) and an ``rSquared`` value (indicating the total variance explained by the model). **Default value:** ``false`` Returns ------- self : Chart object returns chart to allow for chaining See Also -------- Chart.transform_loess : LOESS transform alt.RegressionTransform : underlying transform object """ return self._add_transform( core.RegressionTransform( regression=regression, on=on, extent=extent, groupby=groupby, method=method, order=order, params=params, **{"as": as_}, ) ) def transform_sample(self, sample=1000): """ Add a SampleTransform to the schema. Parameters ---------- sample : float The maximum number of data objects to include in the sample. Default: 1000. Returns ------- self : Chart object returns chart to allow for chaining See Also -------- alt.SampleTransform : underlying transform object """ return self._add_transform(core.SampleTransform(sample)) def transform_stack(self, as_, stack, groupby, offset=Undefined, sort=Undefined): """ Add a StackTransform to the schema. Parameters ---------- as_ : anyOf(string, List(string)) Output field names. This can be either a string or an array of strings with two elements denoting the name for the fields for stack start and stack end respectively. If a single string(eg."val") is provided, the end field will be "val_end". stack : string The field which is stacked. groupby : List(string) The data fields to group by. offset : enum('zero', 'center', 'normalize') Mode for stacking marks. Default: 'zero'. sort : List(:class:`SortField`) Field that determines the order of leaves in the stacked charts. Returns ------- self : Chart object returns chart to allow for chaining See Also -------- alt.StackTransform : underlying transform object """ return self._add_transform( core.StackTransform( stack=stack, groupby=groupby, offset=offset, sort=sort, **{"as": as_} ) ) def transform_timeunit( self, as_=Undefined, field=Undefined, timeUnit=Undefined, **kwargs ): """ Add a TimeUnitTransform to the schema. Parameters ---------- as_ : string The output field to write the timeUnit value. field : string The data field to apply time unit. timeUnit : :class:`TimeUnit` The timeUnit. **kwargs transforms can also be passed by keyword argument; see Examples Returns ------- self : Chart object returns chart to allow for chaining Examples -------- >>> import altair as alt >>> from altair import datum, expr >>> chart = alt.Chart().transform_timeunit(month='month(date)') >>> chart.transform[0] TimeUnitTransform({ as: 'month', field: 'date', timeUnit: 'month' }) It's also possible to pass the ``TimeUnitTransform`` arguments directly; this is most useful in cases where the desired field name is not a valid python identifier: >>> kwds = {'as': 'month', 'timeUnit': 'month', 'field': 'The Month'} >>> chart = alt.Chart().transform_timeunit(**kwds) >>> chart.transform[0] TimeUnitTransform({ as: 'month', field: 'The Month', timeUnit: 'month' }) As the first form is easier to write and understand, that is the recommended method. See Also -------- alt.TimeUnitTransform : underlying transform object """ if as_ is Undefined: as_ = kwargs.pop("as", Undefined) else: if "as" in kwargs: raise ValueError( "transform_timeunit: both 'as_' and 'as' passed as arguments." ) if as_ is not Undefined: dct = {"as": as_, "timeUnit": timeUnit, "field": field} self = self._add_transform(core.TimeUnitTransform(**dct)) for as_, shorthand in kwargs.items(): dct = utils.parse_shorthand( shorthand, parse_timeunits=True, parse_aggregates=False, parse_types=False, ) dct.pop("type", None) dct["as"] = as_ if "timeUnit" not in dct: raise ValueError("'{}' must include a valid timeUnit".format(shorthand)) self = self._add_transform(core.TimeUnitTransform(**dct)) return self def transform_window( self, window=Undefined, frame=Undefined, groupby=Undefined, ignorePeers=Undefined, sort=Undefined, **kwargs, ): """Add a WindowTransform to the schema Parameters ---------- window : List(:class:`WindowFieldDef`) The definition of the fields in the window, and what calculations to use. frame : List(anyOf(None, float)) A frame specification as a two-element array indicating how the sliding window should proceed. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. The default value is ``[null, 0]``, indicating that the sliding window includes the current object and all preceding objects. The value ``[-5, 5]`` indicates that the window should include five objects preceding and five objects following the current object. Finally, ``[null, null]`` indicates that the window frame should always include all data objects. The only operators affected are the aggregation operations and the ``first_value``, ``last_value``, and ``nth_value`` window operations. The other window operations are not affected by this. **Default value:** : ``[null, 0]`` (includes the current object and all preceding objects) groupby : List(string) The data fields for partitioning the data objects into separate windows. If unspecified, all data points will be in a single group. ignorePeers : boolean Indicates if the sliding window frame should ignore peer values. (Peer values are those considered identical by the sort criteria). The default is false, causing the window frame to expand to include all peer values. If set to true, the window frame will be defined by offset values only. This setting only affects those operations that depend on the window frame, namely aggregation operations and the first_value, last_value, and nth_value window operations. **Default value:** ``false`` sort : List(:class:`SortField`) A sort field definition for sorting data objects within a window. If two data objects are considered equal by the comparator, they are considered “peer†values of equal rank. If sort is not specified, the order is undefined: data objects are processed in the order they are observed and none are considered peers (the ignorePeers parameter is ignored and treated as if set to ``true`` ). **kwargs transforms can also be passed by keyword argument; see Examples Examples -------- A cumulative line chart >>> import altair as alt >>> import numpy as np >>> import pandas as pd >>> data = pd.DataFrame({'x': np.arange(100), ... 'y': np.random.randn(100)}) >>> chart = alt.Chart(data).mark_line().encode( ... x='x:Q', ... y='ycuml:Q' ... ).transform_window( ... ycuml='sum(y)' ... ) >>> chart.transform[0] WindowTransform({ window: [WindowFieldDef({ as: 'ycuml', field: 'y', op: 'sum' })] }) """ if kwargs: if window is Undefined: window = [] for as_, shorthand in kwargs.items(): kwds = {"as": as_} kwds.update( utils.parse_shorthand( shorthand, parse_aggregates=False, parse_window_ops=True, parse_timeunits=False, parse_types=False, ) ) window.append(core.WindowFieldDef(**kwds)) return self._add_transform( core.WindowTransform( window=window, frame=frame, groupby=groupby, ignorePeers=ignorePeers, sort=sort, ) ) # Display-related methods def _repr_mimebundle_(self, include=None, exclude=None): """Return a MIME bundle for display in Jupyter frontends.""" # Catch errors explicitly to get around issues in Jupyter frontend # see https://github.com/ipython/ipython/issues/11038 try: dct = self.to_dict() except Exception: utils.display_traceback(in_ipython=True) return {} else: return renderers.get()(dct) def display(self, renderer=Undefined, theme=Undefined, actions=Undefined, **kwargs): """Display chart in Jupyter notebook or JupyterLab Parameters are passed as options to vega-embed within supported frontends. See https://github.com/vega/vega-embed#options for details. Parameters ---------- renderer : string ('canvas' or 'svg') The renderer to use theme : string The Vega theme name to use; see https://github.com/vega/vega-themes actions : bool or dict Specify whether action links ("Open In Vega Editor", etc.) are included in the view. **kwargs : Additional parameters are also passed to vega-embed as options. """ from IPython.display import display if renderer is not Undefined: kwargs["renderer"] = renderer if theme is not Undefined: kwargs["theme"] = theme if actions is not Undefined: kwargs["actions"] = actions if kwargs: options = renderers.options.copy() options["embed_options"] = options.get("embed_options", {}).copy() options["embed_options"].update(kwargs) with renderers.enable(**options): display(self) else: display(self) @utils.deprecation.deprecated(message="serve() is deprecated. Use show() instead.") def serve( self, ip="127.0.0.1", port=8888, n_retries=50, files=None, jupyter_warning=True, open_browser=True, http_server=None, **kwargs, ): """Open a browser window and display a rendering of the chart Parameters ---------- html : string HTML to serve ip : string (default = '127.0.0.1') ip address at which the HTML will be served. port : int (default = 8888) the port at which to serve the HTML n_retries : int (default = 50) the number of nearby ports to search if the specified port is already in use. files : dictionary (optional) dictionary of extra content to serve jupyter_warning : bool (optional) if True (default), then print a warning if this is used within the Jupyter notebook open_browser : bool (optional) if True (default), then open a web browser to the given HTML http_server : class (optional) optionally specify an HTTPServer class to use for showing the figure. The default is Python's basic HTTPServer. **kwargs : additional keyword arguments passed to the save() method """ from ...utils.server import serve html = io.StringIO() self.save(html, format="html", **kwargs) html.seek(0) serve( html.read(), ip=ip, port=port, n_retries=n_retries, files=files, jupyter_warning=jupyter_warning, open_browser=open_browser, http_server=http_server, ) def show(self, embed_opt=None, open_browser=None): """Show the chart in an external browser window. This requires a recent version of the altair_viewer package. Parameters ---------- embed_opt : dict (optional) The Vega embed options that control the dispay of the chart. open_browser : bool (optional) Specify whether a browser window should be opened. If not specified, a browser window will be opened only if the server is not already connected to a browser. """ try: import altair_viewer except ImportError: raise ValueError( "show() method requires the altair_viewer package. " "See http://github.com/altair-viz/altair_viewer" ) altair_viewer.show(self, embed_opt=embed_opt, open_browser=open_browser) @utils.use_signature(core.Resolve) def _set_resolve(self, **kwargs): """Copy the chart and update the resolve property with kwargs""" if not hasattr(self, "resolve"): raise ValueError( "{} object has no attribute " "'resolve'".format(self.__class__) ) copy = self.copy(deep=["resolve"]) if copy.resolve is Undefined: copy.resolve = core.Resolve() for key, val in kwargs.items(): copy.resolve[key] = val return copy @utils.use_signature(core.AxisResolveMap) def resolve_axis(self, *args, **kwargs): return self._set_resolve(axis=core.AxisResolveMap(*args, **kwargs)) @utils.use_signature(core.LegendResolveMap) def resolve_legend(self, *args, **kwargs): return self._set_resolve(legend=core.LegendResolveMap(*args, **kwargs)) @utils.use_signature(core.ScaleResolveMap) def resolve_scale(self, *args, **kwargs): return self._set_resolve(scale=core.ScaleResolveMap(*args, **kwargs)) class _EncodingMixin(object): @utils.use_signature(core.FacetedEncoding) def encode(self, *args, **kwargs): # Convert args to kwargs based on their types. kwargs = utils.infer_encoding_types(args, kwargs, channels) # get a copy of the dict representation of the previous encoding copy = self.copy(deep=["encoding"]) encoding = copy._get("encoding", {}) if isinstance(encoding, core.VegaLiteSchema): encoding = {k: v for k, v in encoding._kwds.items() if v is not Undefined} # update with the new encodings, and apply them to the copy encoding.update(kwargs) copy.encoding = core.FacetedEncoding(**encoding) return copy def facet( self, facet=Undefined, row=Undefined, column=Undefined, data=Undefined, columns=Undefined, **kwargs, ): """Create a facet chart from the current chart. Faceted charts require data to be specified at the top level; if data is not specified, the data from the current chart will be used at the top level. Parameters ---------- facet : string or alt.Facet (optional) The data column to use as an encoding for a wrapped facet. If specified, then neither row nor column may be specified. column : string or alt.Column (optional) The data column to use as an encoding for a column facet. May be combined with row argument, but not with facet argument. row : string or alt.Column (optional) The data column to use as an encoding for a row facet. May be combined with column argument, but not with facet argument. data : string or dataframe (optional) The dataset to use for faceting. If not supplied, then data must be specified in the top-level chart that calls this method. columns : integer the maximum number of columns for a wrapped facet. Returns ------- self : for chaining """ facet_specified = facet is not Undefined rowcol_specified = row is not Undefined or column is not Undefined if facet_specified and rowcol_specified: raise ValueError( "facet argument cannot be combined with row/column argument." ) if data is Undefined: if self.data is Undefined: raise ValueError( "Facet charts require data to be specified at the top level." ) self = self.copy(deep=False) data, self.data = self.data, Undefined if facet_specified: if isinstance(facet, str): facet = channels.Facet(facet) else: facet = FacetMapping(row=row, column=column) return FacetChart(spec=self, facet=facet, data=data, columns=columns, **kwargs) class Chart( TopLevelMixin, _EncodingMixin, mixins.MarkMethodMixin, core.TopLevelUnitSpec ): """Create a basic Altair/Vega-Lite chart. Although it is possible to set all Chart properties as constructor attributes, it is more idiomatic to use methods such as ``mark_point()``, ``encode()``, ``transform_filter()``, ``properties()``, etc. See Altair's documentation for details and examples: http://altair-viz.github.io/. Attributes ---------- data : Data An object describing the data source mark : AnyMark A string describing the mark type (one of `"bar"`, `"circle"`, `"square"`, `"tick"`, `"line"`, * `"area"`, `"point"`, `"rule"`, `"geoshape"`, and `"text"`) or a MarkDef object. encoding : FacetedEncoding A key-value mapping between encoding channels and definition of fields. autosize : anyOf(AutosizeType, AutoSizeParams) Sets how the visualization size should be determined. If a string, should be one of `"pad"`, `"fit"` or `"none"`. Object values can additionally specify parameters for content sizing and automatic resizing. `"fit"` is only supported for single and layered views that don't use `rangeStep`. __Default value__: `pad` background : string CSS color property to use as the background of visualization. **Default value:** none (transparent) config : Config Vega-Lite configuration object. This property can only be defined at the top-level of a specification. description : string Description of this mark for commenting purpose. height : float The height of a visualization. name : string Name of the visualization for later reference. padding : Padding The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format `{"left": 5, "top": 5, "right": 5, "bottom": 5}` to specify padding for each side of the visualization. __Default value__: `5` projection : Projection An object defining properties of geographic projection. Works with `"geoshape"` marks and `"point"` or `"line"` marks that have a channel (one or more of `"X"`, `"X2"`, `"Y"`, `"Y2"`) with type `"latitude"`, or `"longitude"`. selection : Mapping(required=[]) A key-value mapping between selection names and definitions. title : anyOf(string, TitleParams) Title for the plot. transform : List(Transform) An array of data transformations such as filter and new field calculation. width : float The width of a visualization. """ def __init__( self, data=Undefined, encoding=Undefined, mark=Undefined, width=Undefined, height=Undefined, **kwargs, ): super(Chart, self).__init__( data=data, encoding=encoding, mark=mark, width=width, height=height, **kwargs, ) @classmethod def from_dict(cls, dct, validate=True): """Construct class from a dictionary representation Parameters ---------- dct : dictionary The dict from which to construct the class validate : boolean If True (default), then validate the input against the schema. Returns ------- obj : Chart object The wrapped schema Raises ------ jsonschema.ValidationError : if validate=True and dct does not conform to the schema """ for class_ in TopLevelMixin.__subclasses__(): if class_ is Chart: class_ = super(Chart, cls) try: return class_.from_dict(dct, validate=validate) except jsonschema.ValidationError: pass # As a last resort, try using the Root vegalite object return core.Root.from_dict(dct, validate) def add_selection(self, *selections): """Add one or more selections to the chart.""" if not selections: return self copy = self.copy(deep=["selection"]) if copy.selection is Undefined: copy.selection = {} for s in selections: copy.selection[s.name] = s.selection return copy def interactive(self, name=None, bind_x=True, bind_y=True): """Make chart axes scales interactive Parameters ---------- name : string The selection name to use for the axes scales. This name should be unique among all selections within the chart. bind_x : boolean, default True If true, then bind the interactive scales to the x-axis bind_y : boolean, default True If true, then bind the interactive scales to the y-axis Returns ------- chart : copy of self, with interactive axes added """ encodings = [] if bind_x: encodings.append("x") if bind_y: encodings.append("y") return self.add_selection( selection_interval(bind="scales", encodings=encodings) ) def _check_if_valid_subspec(spec, classname): """Check if the spec is a valid sub-spec. If it is not, then raise a ValueError """ err = ( 'Objects with "{0}" attribute cannot be used within {1}. ' "Consider defining the {0} attribute in the {1} object instead." ) if not isinstance(spec, (core.SchemaBase, dict)): raise ValueError("Only chart objects can be used in {0}.".format(classname)) for attr in TOPLEVEL_ONLY_KEYS: if isinstance(spec, core.SchemaBase): val = getattr(spec, attr, Undefined) else: val = spec.get(attr, Undefined) if val is not Undefined: raise ValueError(err.format(attr, classname)) def _check_if_can_be_layered(spec): """Check if the spec can be layered.""" def _get(spec, attr): if isinstance(spec, core.SchemaBase): return spec._get(attr) else: return spec.get(attr, Undefined) encoding = _get(spec, "encoding") if encoding is not Undefined: for channel in ["row", "column", "facet"]: if _get(encoding, channel) is not Undefined: raise ValueError("Faceted charts cannot be layered.") if isinstance(spec, (Chart, LayerChart)): return if not isinstance(spec, (core.SchemaBase, dict)): raise ValueError("Only chart objects can be layered.") if _get(spec, "facet") is not Undefined: raise ValueError("Faceted charts cannot be layered.") if isinstance(spec, FacetChart) or _get(spec, "facet") is not Undefined: raise ValueError("Faceted charts cannot be layered.") if isinstance(spec, RepeatChart) or _get(spec, "repeat") is not Undefined: raise ValueError("Repeat charts cannot be layered.") if isinstance(spec, ConcatChart) or _get(spec, "concat") is not Undefined: raise ValueError("Concatenated charts cannot be layered.") if isinstance(spec, HConcatChart) or _get(spec, "hconcat") is not Undefined: raise ValueError("Concatenated charts cannot be layered.") if isinstance(spec, VConcatChart) or _get(spec, "vconcat") is not Undefined: raise ValueError("Concatenated charts cannot be layered.") @utils.use_signature(core.TopLevelRepeatSpec) class RepeatChart(TopLevelMixin, core.TopLevelRepeatSpec): """A chart repeated across rows and columns with small changes""" def __init__(self, data=Undefined, spec=Undefined, repeat=Undefined, **kwargs): _check_if_valid_subspec(spec, "RepeatChart") super(RepeatChart, self).__init__(data=data, spec=spec, repeat=repeat, **kwargs) def interactive(self, name=None, bind_x=True, bind_y=True): """Make chart axes scales interactive Parameters ---------- name : string The selection name to use for the axes scales. This name should be unique among all selections within the chart. bind_x : boolean, default True If true, then bind the interactive scales to the x-axis bind_y : boolean, default True If true, then bind the interactive scales to the y-axis Returns ------- chart : copy of self, with interactive axes added """ copy = self.copy(deep=False) copy.spec = copy.spec.interactive(name=name, bind_x=bind_x, bind_y=bind_y) return copy def add_selection(self, *selections): """Add one or more selections to the chart.""" if not selections or self.spec is Undefined: return self copy = self.copy() copy.spec = copy.spec.add_selection(*selections) return copy def repeat(repeater="repeat"): """Tie a channel to the row or column within a repeated chart The output of this should be passed to the ``field`` attribute of a channel. Parameters ---------- repeater : {'row'|'column'|'repeat'} The repeater to tie the field to. Default is 'repeat'. Returns ------- repeat : RepeatRef object """ if repeater not in ["row", "column", "repeat"]: raise ValueError("repeater must be one of ['row', 'column', 'repeat']") return core.RepeatRef(repeat=repeater) @utils.use_signature(core.TopLevelNormalizedConcatSpecGenericSpec) class ConcatChart(TopLevelMixin, core.TopLevelNormalizedConcatSpecGenericSpec): """A chart with horizontally-concatenated facets""" def __init__(self, data=Undefined, concat=(), columns=Undefined, **kwargs): # TODO: move common data to top level? for spec in concat: _check_if_valid_subspec(spec, "ConcatChart") super(ConcatChart, self).__init__( data=data, concat=list(concat), columns=columns, **kwargs ) self.data, self.concat = _combine_subchart_data(self.data, self.concat) def __ior__(self, other): _check_if_valid_subspec(other, "ConcatChart") self.concat.append(other) self.data, self.concat = _combine_subchart_data(self.data, self.concat) return self def __or__(self, other): copy = self.copy(deep=["concat"]) copy |= other return copy def add_selection(self, *selections): """Add one or more selections to all subcharts.""" if not selections or not self.concat: return self copy = self.copy() copy.concat = [chart.add_selection(*selections) for chart in copy.concat] return copy def concat(*charts, **kwargs): """Concatenate charts horizontally""" return ConcatChart(concat=charts, **kwargs) @utils.use_signature(core.TopLevelNormalizedHConcatSpecGenericSpec) class HConcatChart(TopLevelMixin, core.TopLevelNormalizedHConcatSpecGenericSpec): """A chart with horizontally-concatenated facets""" def __init__(self, data=Undefined, hconcat=(), **kwargs): # TODO: move common data to top level? for spec in hconcat: _check_if_valid_subspec(spec, "HConcatChart") super(HConcatChart, self).__init__(data=data, hconcat=list(hconcat), **kwargs) self.data, self.hconcat = _combine_subchart_data(self.data, self.hconcat) def __ior__(self, other): _check_if_valid_subspec(other, "HConcatChart") self.hconcat.append(other) self.data, self.hconcat = _combine_subchart_data(self.data, self.hconcat) return self def __or__(self, other): copy = self.copy(deep=["hconcat"]) copy |= other return copy def add_selection(self, *selections): """Add one or more selections to all subcharts.""" if not selections or not self.hconcat: return self copy = self.copy() copy.hconcat = [chart.add_selection(*selections) for chart in copy.hconcat] return copy def hconcat(*charts, **kwargs): """Concatenate charts horizontally""" return HConcatChart(hconcat=charts, **kwargs) @utils.use_signature(core.TopLevelNormalizedVConcatSpecGenericSpec) class VConcatChart(TopLevelMixin, core.TopLevelNormalizedVConcatSpecGenericSpec): """A chart with vertically-concatenated facets""" def __init__(self, data=Undefined, vconcat=(), **kwargs): # TODO: move common data to top level? for spec in vconcat: _check_if_valid_subspec(spec, "VConcatChart") super(VConcatChart, self).__init__(data=data, vconcat=list(vconcat), **kwargs) self.data, self.vconcat = _combine_subchart_data(self.data, self.vconcat) def __iand__(self, other): _check_if_valid_subspec(other, "VConcatChart") self.vconcat.append(other) self.data, self.vconcat = _combine_subchart_data(self.data, self.vconcat) return self def __and__(self, other): copy = self.copy(deep=["vconcat"]) copy &= other return copy def add_selection(self, *selections): """Add one or more selections to all subcharts.""" if not selections or not self.vconcat: return self copy = self.copy() copy.vconcat = [chart.add_selection(*selections) for chart in copy.vconcat] return copy def vconcat(*charts, **kwargs): """Concatenate charts vertically""" return VConcatChart(vconcat=charts, **kwargs) @utils.use_signature(core.TopLevelLayerSpec) class LayerChart(TopLevelMixin, _EncodingMixin, core.TopLevelLayerSpec): """A Chart with layers within a single panel""" def __init__(self, data=Undefined, layer=(), **kwargs): # TODO: move common data to top level? # TODO: check for conflicting interaction for spec in layer: _check_if_valid_subspec(spec, "LayerChart") _check_if_can_be_layered(spec) super(LayerChart, self).__init__(data=data, layer=list(layer), **kwargs) self.data, self.layer = _combine_subchart_data(self.data, self.layer) def __iadd__(self, other): _check_if_valid_subspec(other, "LayerChart") _check_if_can_be_layered(other) self.layer.append(other) self.data, self.layer = _combine_subchart_data(self.data, self.layer) return self def __add__(self, other): copy = self.copy(deep=["layer"]) copy += other return copy def add_layers(self, *layers): copy = self.copy(deep=["layer"]) for layer in layers: copy += layer return copy def interactive(self, name=None, bind_x=True, bind_y=True): """Make chart axes scales interactive Parameters ---------- name : string The selection name to use for the axes scales. This name should be unique among all selections within the chart. bind_x : boolean, default True If true, then bind the interactive scales to the x-axis bind_y : boolean, default True If true, then bind the interactive scales to the y-axis Returns ------- chart : copy of self, with interactive axes added """ if not self.layer: raise ValueError( "LayerChart: cannot call interactive() until a " "layer is defined" ) copy = self.copy(deep=["layer"]) copy.layer[0] = copy.layer[0].interactive( name=name, bind_x=bind_x, bind_y=bind_y ) return copy def add_selection(self, *selections): """Add one or more selections to all subcharts.""" if not selections or not self.layer: return self copy = self.copy() copy.layer[0] = copy.layer[0].add_selection(*selections) return copy def layer(*charts, **kwargs): """layer multiple charts""" return LayerChart(layer=charts, **kwargs) @utils.use_signature(core.TopLevelFacetSpec) class FacetChart(TopLevelMixin, core.TopLevelFacetSpec): """A Chart with layers within a single panel""" def __init__(self, data=Undefined, spec=Undefined, facet=Undefined, **kwargs): _check_if_valid_subspec(spec, "FacetChart") super(FacetChart, self).__init__(data=data, spec=spec, facet=facet, **kwargs) def interactive(self, name=None, bind_x=True, bind_y=True): """Make chart axes scales interactive Parameters ---------- name : string The selection name to use for the axes scales. This name should be unique among all selections within the chart. bind_x : boolean, default True If true, then bind the interactive scales to the x-axis bind_y : boolean, default True If true, then bind the interactive scales to the y-axis Returns ------- chart : copy of self, with interactive axes added """ copy = self.copy(deep=False) copy.spec = copy.spec.interactive(name=name, bind_x=bind_x, bind_y=bind_y) return copy def add_selection(self, *selections): """Add one or more selections to the chart.""" if not selections or self.spec is Undefined: return self copy = self.copy() copy.spec = copy.spec.add_selection(*selections) return copy def topo_feature(url, feature, **kwargs): """A convenience function for extracting features from a topojson url Parameters ---------- url : string An URL from which to load the data set. feature : string The name of the TopoJSON object set to convert to a GeoJSON feature collection. For example, in a map of the world, there may be an object set named `"countries"`. Using the feature property, we can extract this set and generate a GeoJSON feature object for each country. **kwargs : additional keywords passed to TopoDataFormat """ return core.UrlData( url=url, format=core.TopoDataFormat(type="topojson", feature=feature, **kwargs) ) def _combine_subchart_data(data, subcharts): def remove_data(subchart): if subchart.data is not Undefined: subchart = subchart.copy() subchart.data = Undefined return subchart if not subcharts: # No subcharts = nothing to do. pass elif data is Undefined: # Top level has no data; all subchart data must # be identical to proceed. subdata = subcharts[0].data if subdata is not Undefined and all(c.data is subdata for c in subcharts): data = subdata subcharts = [remove_data(c) for c in subcharts] else: # Top level has data; subchart data must be either # undefined or identical to proceed. if all(c.data is Undefined or c.data is data for c in subcharts): subcharts = [remove_data(c) for c in subcharts] return data, subcharts @utils.use_signature(core.SequenceParams) def sequence(start, stop=None, step=Undefined, as_=Undefined, **kwds): """Sequence generator.""" if stop is None: start, stop = 0, start params = core.SequenceParams(start=start, stop=stop, step=step, **{"as": as_}) return core.SequenceGenerator(sequence=params, **kwds) @utils.use_signature(core.GraticuleParams) def graticule(**kwds): """Graticule generator.""" if not kwds: # graticule: True indicates default parameters graticule = True else: graticule = core.GraticuleParams(**kwds) return core.GraticuleGenerator(graticule=graticule) def sphere(): """Sphere generator.""" return core.SphereGenerator(sphere=True) altair-4.1.0/altair/vegalite/v4/data.py000066400000000000000000000017011364111050100176470ustar00rootroot00000000000000from ..data import ( MaxRowsError, curry, default_data_transformer, limit_rows, pipe, sample, to_csv, to_json, to_values, DataTransformerRegistry, ) # ============================================================================== # VegaLite 4 data transformers # ============================================================================== ENTRY_POINT_GROUP = "altair.vegalite.v4.data_transformer" # type: str data_transformers = DataTransformerRegistry( entry_point_group=ENTRY_POINT_GROUP ) # type: DataTransformerRegistry data_transformers.register("default", default_data_transformer) data_transformers.register("json", to_json) data_transformers.register("csv", to_csv) data_transformers.enable("default") __all__ = ( "MaxRowsError", "curry", "default_data_transformer", "limit_rows", "pipe", "sample", "to_csv", "to_json", "to_values", "data_transformers", ) altair-4.1.0/altair/vegalite/v4/display.py000066400000000000000000000067021364111050100204110ustar00rootroot00000000000000import os from ...utils.mimebundle import spec_to_mimebundle from ..display import Displayable from ..display import default_renderer_base from ..display import json_renderer_base from ..display import RendererRegistry from ..display import HTMLRenderer from .schema import SCHEMA_VERSION VEGALITE_VERSION = SCHEMA_VERSION.lstrip("v") VEGA_VERSION = "5" VEGAEMBED_VERSION = "6" # ============================================================================== # VegaLite v4 renderer logic # ============================================================================== # The MIME type for Vega-Lite 4.x releases. VEGALITE_MIME_TYPE = "application/vnd.vegalite.v4+json" # type: str # The entry point group that can be used by other packages to declare other # renderers that will be auto-detected. Explicit registration is also # allowed by the PluginRegistery API. ENTRY_POINT_GROUP = "altair.vegalite.v4.renderer" # type: str # The display message when rendering fails DEFAULT_DISPLAY = """\ If you see this message, it means the renderer has not been properly enabled for the frontend that you are using. For more information, see https://altair-viz.github.io/user_guide/troubleshooting.html """ renderers = RendererRegistry(entry_point_group=ENTRY_POINT_GROUP) here = os.path.dirname(os.path.realpath(__file__)) def mimetype_renderer(spec, **metadata): return default_renderer_base(spec, VEGALITE_MIME_TYPE, DEFAULT_DISPLAY, **metadata) def json_renderer(spec, **metadata): return json_renderer_base(spec, DEFAULT_DISPLAY, **metadata) def png_renderer(spec, **metadata): return spec_to_mimebundle( spec, format="png", mode="vega-lite", vega_version=VEGA_VERSION, vegaembed_version=VEGAEMBED_VERSION, vegalite_version=VEGALITE_VERSION, **metadata, ) def svg_renderer(spec, **metadata): return spec_to_mimebundle( spec, format="svg", mode="vega-lite", vega_version=VEGA_VERSION, vegaembed_version=VEGAEMBED_VERSION, vegalite_version=VEGALITE_VERSION, **metadata, ) html_renderer = HTMLRenderer( mode="vega-lite", template="universal", vega_version=VEGA_VERSION, vegaembed_version=VEGAEMBED_VERSION, vegalite_version=VEGALITE_VERSION, ) renderers.register("default", html_renderer) renderers.register("html", html_renderer) renderers.register("colab", html_renderer) renderers.register("kaggle", html_renderer) renderers.register("zeppelin", html_renderer) renderers.register("mimetype", mimetype_renderer) renderers.register("jupyterlab", mimetype_renderer) renderers.register("nteract", mimetype_renderer) renderers.register("json", json_renderer) renderers.register("png", png_renderer) renderers.register("svg", svg_renderer) renderers.enable("default") class VegaLite(Displayable): """An IPython/Jupyter display class for rendering VegaLite 4.""" renderers = renderers schema_path = (__name__, "schema/vega-lite-schema.json") def vegalite(spec, validate=True): """Render and optionally validate a VegaLite 4 spec. This will use the currently enabled renderer to render the spec. Parameters ========== spec: dict A fully compliant VegaLite 4 spec, with the data portion fully processed. validate: bool Should the spec be validated against the VegaLite 4 schema? """ from IPython.display import display display(VegaLite(spec, validate=validate)) altair-4.1.0/altair/vegalite/v4/schema/000077500000000000000000000000001364111050100176255ustar00rootroot00000000000000altair-4.1.0/altair/vegalite/v4/schema/__init__.py000066400000000000000000000002301364111050100217310ustar00rootroot00000000000000# flake8: noqa from .core import * from .channels import * SCHEMA_VERSION = 'v4.8.1' SCHEMA_URL = 'https://vega.github.io/schema/vega-lite/v4.8.1.json' altair-4.1.0/altair/vegalite/v4/schema/channels.py000066400000000000000000011123751364111050100220040ustar00rootroot00000000000000# The contents of this file are automatically written by # tools/generate_schema_wrapper.py. Do not modify directly. from . import core import pandas as pd from altair.utils.schemapi import Undefined from altair.utils import parse_shorthand class FieldChannelMixin(object): def to_dict(self, validate=True, ignore=(), context=None): context = context or {} shorthand = self._get('shorthand') field = self._get('field') if shorthand is not Undefined and field is not Undefined: raise ValueError("{} specifies both shorthand={} and field={}. " "".format(self.__class__.__name__, shorthand, field)) if isinstance(shorthand, (tuple, list)): # If given a list of shorthands, then transform it to a list of classes kwds = self._kwds.copy() kwds.pop('shorthand') return [self.__class__(sh, **kwds).to_dict(validate=validate, ignore=ignore, context=context) for sh in shorthand] if shorthand is Undefined: parsed = {} elif isinstance(shorthand, str): parsed = parse_shorthand(shorthand, data=context.get('data', None)) type_required = 'type' in self._kwds type_in_shorthand = 'type' in parsed type_defined_explicitly = self._get('type') is not Undefined if not type_required: # Secondary field names don't require a type argument in VegaLite 3+. # We still parse it out of the shorthand, but drop it here. parsed.pop('type', None) elif not (type_in_shorthand or type_defined_explicitly): if isinstance(context.get('data', None), pd.DataFrame): raise ValueError("{} encoding field is specified without a type; " "the type cannot be inferred because it does not " "match any column in the data.".format(shorthand)) else: raise ValueError("{} encoding field is specified without a type; " "the type cannot be automatically inferred because " "the data is not specified as a pandas.DataFrame." "".format(shorthand)) else: # Shorthand is not a string; we pass the definition to field, # and do not do any parsing. parsed = {'field': shorthand} # Set shorthand to Undefined, because it's not part of the base schema. self.shorthand = Undefined self._kwds.update({k: v for k, v in parsed.items() if self._get(k) is Undefined}) return super(FieldChannelMixin, self).to_dict( validate=validate, ignore=ignore, context=context ) class ValueChannelMixin(object): def to_dict(self, validate=True, ignore=(), context=None): context = context or {} condition = getattr(self, 'condition', Undefined) copy = self # don't copy unless we need to if condition is not Undefined: if isinstance(condition, core.SchemaBase): pass elif 'field' in condition and 'type' not in condition: kwds = parse_shorthand(condition['field'], context.get('data', None)) copy = self.copy(deep=['condition']) copy.condition.update(kwds) return super(ValueChannelMixin, copy).to_dict(validate=validate, ignore=ignore, context=context) class Color(FieldChannelMixin, core.ColorGradientFieldDefWithCondition): """Color schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionGradientstringnull` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "color" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Color, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class ColorValue(ValueChannelMixin, core.ColorGradientValueWithCondition): """ColorValue schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionGradientstringnull`) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(:class:`Gradient`, string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "color" def __init__(self, value, condition=Undefined, **kwds): super(ColorValue, self).__init__(value=value, condition=condition, **kwds) class Column(FieldChannelMixin, core.RowColumnEncodingFieldDef): """Column schema wrapper Mapping(required=[shorthand]) Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. align : :class:`LayoutAlign` The alignment to apply to row/column facet's subplot. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. **Default value:** ``"all"``. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. center : boolean Boolean flag indicating if facet's subviews should be centered relative to their respective rows or columns. **Default value:** ``false`` field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. header : :class:`Header` An object defining properties of a facet's header. sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None) Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. spacing : float The spacing in pixels between facet's sub-views. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "column" def __init__(self, shorthand=Undefined, aggregate=Undefined, align=Undefined, bin=Undefined, center=Undefined, field=Undefined, header=Undefined, sort=Undefined, spacing=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Column, self).__init__(shorthand=shorthand, aggregate=aggregate, align=align, bin=bin, center=center, field=field, header=header, sort=sort, spacing=spacing, timeUnit=timeUnit, title=title, type=type, **kwds) class Detail(FieldChannelMixin, core.FieldDefWithoutScale): """Detail schema wrapper Mapping(required=[shorthand]) Definition object for a data field, its type and transformation of an encoding channel. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "detail" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Detail, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, type=type, **kwds) class Facet(FieldChannelMixin, core.FacetEncodingFieldDef): """Facet schema wrapper Mapping(required=[shorthand]) Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`) The alignment to apply to grid rows and columns. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. Alternatively, an object value of the form ``{"row": string, "column": string}`` can be used to supply different alignments for rows and columns. **Default value:** ``"all"``. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : anyOf(boolean, :class:`RowColboolean`) Boolean flag indicating if subviews should be centered relative to their respective rows or columns. An object value of the form ``{"row": boolean, "column": boolean}`` can be used to supply different centering values for rows and columns. **Default value:** ``false`` columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. header : :class:`Header` An object defining properties of a facet's header. sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None) Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. spacing : anyOf(float, :class:`RowColnumber`) The spacing in pixels between sub-views of the composition operator. An object of the form ``{"row": number, "column": number}`` can be used to set different spacing values for rows and columns. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "facet" def __init__(self, shorthand=Undefined, aggregate=Undefined, align=Undefined, bin=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, field=Undefined, header=Undefined, sort=Undefined, spacing=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Facet, self).__init__(shorthand=shorthand, aggregate=aggregate, align=align, bin=bin, bounds=bounds, center=center, columns=columns, field=field, header=header, sort=sort, spacing=spacing, timeUnit=timeUnit, title=title, type=type, **kwds) class Fill(FieldChannelMixin, core.ColorGradientFieldDefWithCondition): """Fill schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionGradientstringnull` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "fill" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Fill, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class FillValue(ValueChannelMixin, core.ColorGradientValueWithCondition): """FillValue schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionGradientstringnull`) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(:class:`Gradient`, string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "fill" def __init__(self, value, condition=Undefined, **kwds): super(FillValue, self).__init__(value=value, condition=condition, **kwds) class FillOpacity(FieldChannelMixin, core.NumericFieldDefWithCondition): """FillOpacity schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionnumber` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "fillOpacity" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(FillOpacity, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class FillOpacityValue(ValueChannelMixin, core.NumericValueWithCondition): """FillOpacityValue schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionnumber`) A field definition or one or more value definition(s) with a selection predicate. value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "fillOpacity" def __init__(self, value, condition=Undefined, **kwds): super(FillOpacityValue, self).__init__(value=value, condition=condition, **kwds) class Href(FieldChannelMixin, core.StringFieldDefWithCondition): """Href schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionstring` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : anyOf(string, Mapping(required=[])) When used with the default ``"number"`` and ``"time"`` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. When used with a `custom "formatType" `__ that takes ``datum.value`` and format parameter as input), this property represents the format parameter. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : string The format type for labels ( ``"number"`` or ``"time"`` or a `registered custom format type `__ ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. labelExpr : string `Vega expression `__ for customizing labels text. **Note:** The label text and value can be assessed via the ``label`` and ``value`` properties of the axis's backing ``datum`` object. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "href" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined, labelExpr=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Href, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, format=format, formatType=formatType, labelExpr=labelExpr, timeUnit=timeUnit, title=title, type=type, **kwds) class HrefValue(ValueChannelMixin, core.StringValueWithCondition): """HrefValue schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionstringnull`) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "href" def __init__(self, value, condition=Undefined, **kwds): super(HrefValue, self).__init__(value=value, condition=condition, **kwds) class Key(FieldChannelMixin, core.FieldDefWithoutScale): """Key schema wrapper Mapping(required=[shorthand]) Definition object for a data field, its type and transformation of an encoding channel. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "key" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Key, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, type=type, **kwds) class Latitude(FieldChannelMixin, core.LatLongFieldDef): """Latitude schema wrapper Mapping(required=[shorthand]) Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : enum('quantitative') The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "latitude" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Latitude, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, type=type, **kwds) class LatitudeValue(ValueChannelMixin, core.NumberValueDef): """LatitudeValue schema wrapper Mapping(required=[value]) Definition object for a constant value (primitive value or gradient definition) of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "latitude" def __init__(self, value, **kwds): super(LatitudeValue, self).__init__(value=value, **kwds) class Latitude2(FieldChannelMixin, core.SecondaryFieldDef): """Latitude2 schema wrapper Mapping(required=[shorthand]) A field definition of a secondary channel that shares a scale with another primary channel. For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _class_is_valid_at_instantiation = False _encoding_name = "latitude2" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(Latitude2, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class Latitude2Value(ValueChannelMixin, core.NumberValueDef): """Latitude2Value schema wrapper Mapping(required=[value]) Definition object for a constant value (primitive value or gradient definition) of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "latitude2" def __init__(self, value, **kwds): super(Latitude2Value, self).__init__(value=value, **kwds) class Longitude(FieldChannelMixin, core.LatLongFieldDef): """Longitude schema wrapper Mapping(required=[shorthand]) Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : enum('quantitative') The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "longitude" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Longitude, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, type=type, **kwds) class LongitudeValue(ValueChannelMixin, core.NumberValueDef): """LongitudeValue schema wrapper Mapping(required=[value]) Definition object for a constant value (primitive value or gradient definition) of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "longitude" def __init__(self, value, **kwds): super(LongitudeValue, self).__init__(value=value, **kwds) class Longitude2(FieldChannelMixin, core.SecondaryFieldDef): """Longitude2 schema wrapper Mapping(required=[shorthand]) A field definition of a secondary channel that shares a scale with another primary channel. For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _class_is_valid_at_instantiation = False _encoding_name = "longitude2" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(Longitude2, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class Longitude2Value(ValueChannelMixin, core.NumberValueDef): """Longitude2Value schema wrapper Mapping(required=[value]) Definition object for a constant value (primitive value or gradient definition) of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "longitude2" def __init__(self, value, **kwds): super(Longitude2Value, self).__init__(value=value, **kwds) class Opacity(FieldChannelMixin, core.NumericFieldDefWithCondition): """Opacity schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionnumber` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "opacity" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Opacity, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class OpacityValue(ValueChannelMixin, core.NumericValueWithCondition): """OpacityValue schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionnumber`) A field definition or one or more value definition(s) with a selection predicate. value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "opacity" def __init__(self, value, condition=Undefined, **kwds): super(OpacityValue, self).__init__(value=value, condition=condition, **kwds) class Order(FieldChannelMixin, core.OrderFieldDef): """Order schema wrapper Mapping(required=[shorthand]) Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. sort : :class:`SortOrder` The sort order. One of ``"ascending"`` (default) or ``"descending"``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "order" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Order, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class OrderValue(ValueChannelMixin, core.NumberValueDef): """OrderValue schema wrapper Mapping(required=[value]) Definition object for a constant value (primitive value or gradient definition) of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "order" def __init__(self, value, **kwds): super(OrderValue, self).__init__(value=value, **kwds) class Row(FieldChannelMixin, core.RowColumnEncodingFieldDef): """Row schema wrapper Mapping(required=[shorthand]) Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. align : :class:`LayoutAlign` The alignment to apply to row/column facet's subplot. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. **Default value:** ``"all"``. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. center : boolean Boolean flag indicating if facet's subviews should be centered relative to their respective rows or columns. **Default value:** ``false`` field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. header : :class:`Header` An object defining properties of a facet's header. sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None) Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. spacing : float The spacing in pixels between facet's sub-views. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "row" def __init__(self, shorthand=Undefined, aggregate=Undefined, align=Undefined, bin=Undefined, center=Undefined, field=Undefined, header=Undefined, sort=Undefined, spacing=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Row, self).__init__(shorthand=shorthand, aggregate=aggregate, align=align, bin=bin, center=center, field=field, header=header, sort=sort, spacing=spacing, timeUnit=timeUnit, title=title, type=type, **kwds) class Shape(FieldChannelMixin, core.ShapeFieldDefWithCondition): """Shape schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionstringnull` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`TypeForShape` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "shape" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Shape, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class ShapeValue(ValueChannelMixin, core.ShapeValueWithCondition): """ShapeValue schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDefTypeForShape`, :class:`ValueConditionstringnull`) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "shape" def __init__(self, value, condition=Undefined, **kwds): super(ShapeValue, self).__init__(value=value, condition=condition, **kwds) class Size(FieldChannelMixin, core.NumericFieldDefWithCondition): """Size schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionnumber` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "size" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Size, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class SizeValue(ValueChannelMixin, core.NumericValueWithCondition): """SizeValue schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionnumber`) A field definition or one or more value definition(s) with a selection predicate. value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "size" def __init__(self, value, condition=Undefined, **kwds): super(SizeValue, self).__init__(value=value, condition=condition, **kwds) class Stroke(FieldChannelMixin, core.ColorGradientFieldDefWithCondition): """Stroke schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionGradientstringnull` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "stroke" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Stroke, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class StrokeValue(ValueChannelMixin, core.ColorGradientValueWithCondition): """StrokeValue schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionGradientstringnull`) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(:class:`Gradient`, string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "stroke" def __init__(self, value, condition=Undefined, **kwds): super(StrokeValue, self).__init__(value=value, condition=condition, **kwds) class StrokeDash(FieldChannelMixin, core.NumericArrayFieldDefWithCondition): """StrokeDash schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionnumber` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "strokeDash" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(StrokeDash, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class StrokeDashValue(ValueChannelMixin, core.NumericArrayValueDefWithCondition): """StrokeDashValue schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionnumber`) A field definition or one or more value definition(s) with a selection predicate. value : List(float) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "strokeDash" def __init__(self, value, condition=Undefined, **kwds): super(StrokeDashValue, self).__init__(value=value, condition=condition, **kwds) class StrokeOpacity(FieldChannelMixin, core.NumericFieldDefWithCondition): """StrokeOpacity schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionnumber` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "strokeOpacity" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(StrokeOpacity, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class StrokeOpacityValue(ValueChannelMixin, core.NumericValueWithCondition): """StrokeOpacityValue schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionnumber`) A field definition or one or more value definition(s) with a selection predicate. value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "strokeOpacity" def __init__(self, value, condition=Undefined, **kwds): super(StrokeOpacityValue, self).__init__(value=value, condition=condition, **kwds) class StrokeWidth(FieldChannelMixin, core.NumericFieldDefWithCondition): """StrokeWidth schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionnumber` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "strokeWidth" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(StrokeWidth, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds) class StrokeWidthValue(ValueChannelMixin, core.NumericValueWithCondition): """StrokeWidthValue schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionnumber`) A field definition or one or more value definition(s) with a selection predicate. value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "strokeWidth" def __init__(self, value, condition=Undefined, **kwds): super(StrokeWidthValue, self).__init__(value=value, condition=condition, **kwds) class Text(FieldChannelMixin, core.TextFieldDefWithCondition): """Text schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionText` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : anyOf(string, Mapping(required=[])) When used with the default ``"number"`` and ``"time"`` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. When used with a `custom "formatType" `__ that takes ``datum.value`` and format parameter as input), this property represents the format parameter. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : string The format type for labels ( ``"number"`` or ``"time"`` or a `registered custom format type `__ ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. labelExpr : string `Vega expression `__ for customizing labels text. **Note:** The label text and value can be assessed via the ``label`` and ``value`` properties of the axis's backing ``datum`` object. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "text" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined, labelExpr=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Text, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, format=format, formatType=formatType, labelExpr=labelExpr, timeUnit=timeUnit, title=title, type=type, **kwds) class TextValue(ValueChannelMixin, core.TextValueWithCondition): """TextValue schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalStringFieldDef`, :class:`ValueConditionText`) A field definition or one or more value definition(s) with a selection predicate. value : :class:`Text` A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "text" def __init__(self, value, condition=Undefined, **kwds): super(TextValue, self).__init__(value=value, condition=condition, **kwds) class Tooltip(FieldChannelMixin, core.StringFieldDefWithCondition): """Tooltip schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionstring` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : anyOf(string, Mapping(required=[])) When used with the default ``"number"`` and ``"time"`` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. When used with a `custom "formatType" `__ that takes ``datum.value`` and format parameter as input), this property represents the format parameter. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : string The format type for labels ( ``"number"`` or ``"time"`` or a `registered custom format type `__ ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. labelExpr : string `Vega expression `__ for customizing labels text. **Note:** The label text and value can be assessed via the ``label`` and ``value`` properties of the axis's backing ``datum`` object. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "tooltip" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined, labelExpr=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Tooltip, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, format=format, formatType=formatType, labelExpr=labelExpr, timeUnit=timeUnit, title=title, type=type, **kwds) class TooltipValue(ValueChannelMixin, core.StringValueWithCondition): """TooltipValue schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionstringnull`) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "tooltip" def __init__(self, value, condition=Undefined, **kwds): super(TooltipValue, self).__init__(value=value, condition=condition, **kwds) class Url(FieldChannelMixin, core.StringFieldDefWithCondition): """Url schema wrapper Mapping(required=[shorthand]) A FieldDef with Condition :raw-html:`` Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionstring` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : anyOf(string, Mapping(required=[])) When used with the default ``"number"`` and ``"time"`` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. When used with a `custom "formatType" `__ that takes ``datum.value`` and format parameter as input), this property represents the format parameter. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : string The format type for labels ( ``"number"`` or ``"time"`` or a `registered custom format type `__ ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. labelExpr : string `Vega expression `__ for customizing labels text. **Note:** The label text and value can be assessed via the ``label`` and ``value`` properties of the axis's backing ``datum`` object. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "url" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined, labelExpr=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Url, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, condition=condition, field=field, format=format, formatType=formatType, labelExpr=labelExpr, timeUnit=timeUnit, title=title, type=type, **kwds) class UrlValue(ValueChannelMixin, core.StringValueWithCondition): """UrlValue schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionstringnull`) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "url" def __init__(self, value, condition=Undefined, **kwds): super(UrlValue, self).__init__(value=value, condition=condition, **kwds) class X(FieldChannelMixin, core.PositionFieldDef): """X schema wrapper Mapping(required=[shorthand]) Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. axis : anyOf(:class:`Axis`, None) An object defining properties of axis's gridlines, ticks and labels. If ``null``, the axis for the encoding channel will be removed. **Default value:** If undefined, default `axis properties `__ are applied. **See also:** `axis `__ documentation. band : float For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to bandwidth of `band scales `__ or time units. If set to ``1``, the mark size is set to the bandwidth or the time unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time unit interval. For other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to ``0``, the marks will be positioned at the beginning of the band. If set to ``0.5``, the marks will be positioned in the middle of the band. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. impute : anyOf(:class:`ImputeParams`, None) An object defining the properties of the Impute Operation to be applied. The field value of the other positional channel is taken as ``key`` of the ``Impute`` Operation. The field of the ``color`` channel if specified is used as ``groupby`` of the ``Impute`` Operation. **See also:** `impute `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. stack : anyOf(:class:`StackOffset`, None, boolean) Type of stacking offset if the field should be stacked. ``stack`` is only applicable for ``x`` and ``y`` channels with continuous domains. For example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar chart. ``stack`` can be one of the following values: * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area `__ chart). * ``"normalize"`` - stacking with normalized domain (for creating `normalized stacked bar and area charts `__. :raw-html:`
` - ``"center"`` - stacking with center baseline (for `streamgraph `__ ). * ``null`` or ``false`` - No-stacking. This will produce layered `bar `__ and area chart. **Default value:** ``zero`` for plots with all of the following conditions are true: (1) the mark is ``bar`` or ``area`` ; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, ``null`` by default. **See also:** `stack `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "x" def __init__(self, shorthand=Undefined, aggregate=Undefined, axis=Undefined, band=Undefined, bin=Undefined, field=Undefined, impute=Undefined, scale=Undefined, sort=Undefined, stack=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(X, self).__init__(shorthand=shorthand, aggregate=aggregate, axis=axis, band=band, bin=bin, field=field, impute=impute, scale=scale, sort=sort, stack=stack, timeUnit=timeUnit, title=title, type=type, **kwds) class XValue(ValueChannelMixin, core.XValueDef): """XValue schema wrapper Mapping(required=[value]) Definition object for a constant value (primitive value or gradient definition) of an encoding channel. Attributes ---------- value : anyOf(float, enum('width')) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "x" def __init__(self, value, **kwds): super(XValue, self).__init__(value=value, **kwds) class X2(FieldChannelMixin, core.SecondaryFieldDef): """X2 schema wrapper Mapping(required=[shorthand]) A field definition of a secondary channel that shares a scale with another primary channel. For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _class_is_valid_at_instantiation = False _encoding_name = "x2" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(X2, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class X2Value(ValueChannelMixin, core.XValueDef): """X2Value schema wrapper Mapping(required=[value]) Definition object for a constant value (primitive value or gradient definition) of an encoding channel. Attributes ---------- value : anyOf(float, enum('width')) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "x2" def __init__(self, value, **kwds): super(X2Value, self).__init__(value=value, **kwds) class XError(FieldChannelMixin, core.SecondaryFieldDef): """XError schema wrapper Mapping(required=[shorthand]) A field definition of a secondary channel that shares a scale with another primary channel. For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _class_is_valid_at_instantiation = False _encoding_name = "xError" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(XError, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class XErrorValue(ValueChannelMixin, core.NumberValueDef): """XErrorValue schema wrapper Mapping(required=[value]) Definition object for a constant value (primitive value or gradient definition) of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "xError" def __init__(self, value, **kwds): super(XErrorValue, self).__init__(value=value, **kwds) class XError2(FieldChannelMixin, core.SecondaryFieldDef): """XError2 schema wrapper Mapping(required=[shorthand]) A field definition of a secondary channel that shares a scale with another primary channel. For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _class_is_valid_at_instantiation = False _encoding_name = "xError2" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(XError2, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class XError2Value(ValueChannelMixin, core.NumberValueDef): """XError2Value schema wrapper Mapping(required=[value]) Definition object for a constant value (primitive value or gradient definition) of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "xError2" def __init__(self, value, **kwds): super(XError2Value, self).__init__(value=value, **kwds) class Y(FieldChannelMixin, core.PositionFieldDef): """Y schema wrapper Mapping(required=[shorthand]) Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. axis : anyOf(:class:`Axis`, None) An object defining properties of axis's gridlines, ticks and labels. If ``null``, the axis for the encoding channel will be removed. **Default value:** If undefined, default `axis properties `__ are applied. **See also:** `axis `__ documentation. band : float For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to bandwidth of `band scales `__ or time units. If set to ``1``, the mark size is set to the bandwidth or the time unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time unit interval. For other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to ``0``, the marks will be positioned at the beginning of the band. If set to ``0.5``, the marks will be positioned in the middle of the band. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. impute : anyOf(:class:`ImputeParams`, None) An object defining the properties of the Impute Operation to be applied. The field value of the other positional channel is taken as ``key`` of the ``Impute`` Operation. The field of the ``color`` channel if specified is used as ``groupby`` of the ``Impute`` Operation. **See also:** `impute `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. stack : anyOf(:class:`StackOffset`, None, boolean) Type of stacking offset if the field should be stacked. ``stack`` is only applicable for ``x`` and ``y`` channels with continuous domains. For example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar chart. ``stack`` can be one of the following values: * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area `__ chart). * ``"normalize"`` - stacking with normalized domain (for creating `normalized stacked bar and area charts `__. :raw-html:`
` - ``"center"`` - stacking with center baseline (for `streamgraph `__ ). * ``null`` or ``false`` - No-stacking. This will produce layered `bar `__ and area chart. **Default value:** ``zero`` for plots with all of the following conditions are true: (1) the mark is ``bar`` or ``area`` ; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, ``null`` by default. **See also:** `stack `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _class_is_valid_at_instantiation = False _encoding_name = "y" def __init__(self, shorthand=Undefined, aggregate=Undefined, axis=Undefined, band=Undefined, bin=Undefined, field=Undefined, impute=Undefined, scale=Undefined, sort=Undefined, stack=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(Y, self).__init__(shorthand=shorthand, aggregate=aggregate, axis=axis, band=band, bin=bin, field=field, impute=impute, scale=scale, sort=sort, stack=stack, timeUnit=timeUnit, title=title, type=type, **kwds) class YValue(ValueChannelMixin, core.YValueDef): """YValue schema wrapper Mapping(required=[value]) Definition object for a constant value (primitive value or gradient definition) of an encoding channel. Attributes ---------- value : anyOf(float, enum('height')) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "y" def __init__(self, value, **kwds): super(YValue, self).__init__(value=value, **kwds) class Y2(FieldChannelMixin, core.SecondaryFieldDef): """Y2 schema wrapper Mapping(required=[shorthand]) A field definition of a secondary channel that shares a scale with another primary channel. For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _class_is_valid_at_instantiation = False _encoding_name = "y2" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(Y2, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class Y2Value(ValueChannelMixin, core.YValueDef): """Y2Value schema wrapper Mapping(required=[value]) Definition object for a constant value (primitive value or gradient definition) of an encoding channel. Attributes ---------- value : anyOf(float, enum('height')) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "y2" def __init__(self, value, **kwds): super(Y2Value, self).__init__(value=value, **kwds) class YError(FieldChannelMixin, core.SecondaryFieldDef): """YError schema wrapper Mapping(required=[shorthand]) A field definition of a secondary channel that shares a scale with another primary channel. For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _class_is_valid_at_instantiation = False _encoding_name = "yError" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(YError, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class YErrorValue(ValueChannelMixin, core.NumberValueDef): """YErrorValue schema wrapper Mapping(required=[value]) Definition object for a constant value (primitive value or gradient definition) of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "yError" def __init__(self, value, **kwds): super(YErrorValue, self).__init__(value=value, **kwds) class YError2(FieldChannelMixin, core.SecondaryFieldDef): """YError2 schema wrapper Mapping(required=[shorthand]) A field definition of a secondary channel that shares a scale with another primary channel. For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``. Attributes ---------- shorthand : string shorthand for field, aggregate, and type aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _class_is_valid_at_instantiation = False _encoding_name = "yError2" def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(YError2, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class YError2Value(ValueChannelMixin, core.NumberValueDef): """YError2Value schema wrapper Mapping(required=[value]) Definition object for a constant value (primitive value or gradient definition) of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _class_is_valid_at_instantiation = False _encoding_name = "yError2" def __init__(self, value, **kwds): super(YError2Value, self).__init__(value=value, **kwds) altair-4.1.0/altair/vegalite/v4/schema/core.py000066400000000000000000034474341364111050100211520ustar00rootroot00000000000000# The contents of this file are automatically written by # tools/generate_schema_wrapper.py. Do not modify directly. from altair.utils.schemapi import SchemaBase, Undefined, _subclasses import pkgutil import json def load_schema(): """Load the json schema associated with this module's functions""" return json.loads(pkgutil.get_data(__name__, 'vega-lite-schema.json').decode('utf-8')) class VegaLiteSchema(SchemaBase): _rootschema = load_schema() @classmethod def _default_wrapper_classes(cls): return _subclasses(VegaLiteSchema) class Root(VegaLiteSchema): """Root schema wrapper anyOf(:class:`TopLevelUnitSpec`, :class:`TopLevelFacetSpec`, :class:`TopLevelLayerSpec`, :class:`TopLevelRepeatSpec`, :class:`TopLevelNormalizedConcatSpecGenericSpec`, :class:`TopLevelNormalizedVConcatSpecGenericSpec`, :class:`TopLevelNormalizedHConcatSpecGenericSpec`) A Vega-Lite top-level specification. This is the root class for all Vega-Lite specifications. (The json schema is generated from this type.) """ _schema = VegaLiteSchema._rootschema def __init__(self, *args, **kwds): super(Root, self).__init__(*args, **kwds) class Aggregate(VegaLiteSchema): """Aggregate schema wrapper anyOf(:class:`NonArgAggregateOp`, :class:`ArgmaxDef`, :class:`ArgminDef`) """ _schema = {'$ref': '#/definitions/Aggregate'} def __init__(self, *args, **kwds): super(Aggregate, self).__init__(*args, **kwds) class AggregateOp(VegaLiteSchema): """AggregateOp schema wrapper enum('argmax', 'argmin', 'average', 'count', 'distinct', 'max', 'mean', 'median', 'min', 'missing', 'product', 'q1', 'q3', 'ci0', 'ci1', 'stderr', 'stdev', 'stdevp', 'sum', 'valid', 'values', 'variance', 'variancep') """ _schema = {'$ref': '#/definitions/AggregateOp'} def __init__(self, *args): super(AggregateOp, self).__init__(*args) class AggregatedFieldDef(VegaLiteSchema): """AggregatedFieldDef schema wrapper Mapping(required=[op, as]) Attributes ---------- op : :class:`AggregateOp` The aggregation operation to apply to the fields (e.g., ``"sum"``, ``"average"``, or ``"count"`` ). See the `full list of supported aggregation operations `__ for more information. field : :class:`FieldName` The data field for which to compute aggregate function. This is required for all aggregation operations except ``"count"``. as : :class:`FieldName` The output field names to use for each aggregated field. """ _schema = {'$ref': '#/definitions/AggregatedFieldDef'} def __init__(self, op=Undefined, field=Undefined, **kwds): super(AggregatedFieldDef, self).__init__(op=op, field=field, **kwds) class Align(VegaLiteSchema): """Align schema wrapper enum('left', 'center', 'right') """ _schema = {'$ref': '#/definitions/Align'} def __init__(self, *args): super(Align, self).__init__(*args) class AnyMark(VegaLiteSchema): """AnyMark schema wrapper anyOf(:class:`CompositeMark`, :class:`CompositeMarkDef`, :class:`Mark`, :class:`MarkDef`) """ _schema = {'$ref': '#/definitions/AnyMark'} def __init__(self, *args, **kwds): super(AnyMark, self).__init__(*args, **kwds) class AnyMarkConfig(VegaLiteSchema): """AnyMarkConfig schema wrapper anyOf(:class:`MarkConfig`, :class:`AreaConfig`, :class:`BarConfig`, :class:`RectConfig`, :class:`LineConfig`, :class:`TickConfig`) """ _schema = {'$ref': '#/definitions/AnyMarkConfig'} def __init__(self, *args, **kwds): super(AnyMarkConfig, self).__init__(*args, **kwds) class AreaConfig(AnyMarkConfig): """AreaConfig schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of ``"left"``, ``"right"``, ``"center"``. angle : float The rotation angle of the text, in degrees. aspect : boolean Whether to keep aspect ratio of image marks. baseline : :class:`TextBaseline` The vertical text baseline. One of ``"alphabetic"`` (default), ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or ``"line-bottom"``. The ``"line-top"`` and ``"line-bottom"`` values operate similarly to ``"top"`` and ``"bottom"``, but are calculated relative to the ``lineHeight`` rather than ``fontSize`` alone. blend : :class:`Blend` The color blend mode for drawing an item on its current background. Any valid `CSS mix-blend-mode `__ value can be used. __Default value: ``"source-over"`` color : anyOf(:class:`Color`, :class:`Gradient`) Default color. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** * This property cannot be used in a `style config `__. * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and will override ``color``. cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cornerRadiusBottomLeft : float The radius in pixels of rounded rectangle bottom left corner. **Default value:** ``0`` cornerRadiusBottomRight : float The radius in pixels of rounded rectangle bottom right corner. **Default value:** ``0`` cornerRadiusTopLeft : float The radius in pixels of rounded rectangle top right corner. **Default value:** ``0`` cornerRadiusTopRight : float The radius in pixels of rounded rectangle top left corner. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the mark. Any valid `CSS cursor type `__ can be used. dir : :class:`TextDirection` The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"`` (right-to-left). This property determines on which side is truncated in response to the limit parameter. **Default value:** ``"ltr"`` dx : float The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. dy : float The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. ellipsis : string The ellipsis string for text truncated in response to the limit parameter. **Default value:** ``"…"`` fill : anyOf(:class:`Color`, :class:`Gradient`, None) Default Fill Color. This property has higher precedence than ``config.color``. **Default value:** (None) fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` filled : boolean Whether the mark's color should be used as fill color instead of stroke color. **Default value:** ``false`` for all ``point``, ``line``, and ``rule`` marks as well as ``geoshape`` marks for `graticule `__ data sources; otherwise, ``true``. **Note:** This property cannot be used in a `style config `__. font : string The typeface to set the text in (e.g., ``"Helvetica Neue"`` ). fontSize : float The font size, in pixels. **Default value:** ``11`` fontStyle : :class:`FontStyle` The font style (e.g., ``"italic"`` ). fontWeight : :class:`FontWeight` The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). height : float Height of the marks. href : string A URL to load upon mouse click. If defined, the mark acts as a hyperlink. interpolate : :class:`Interpolate` The line interpolation method to use for line and area marks. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : alternate between horizontal and vertical segments, as in a step function. * ``"step-before"`` : alternate between vertical and horizontal segments, as in a step function. * ``"step-after"`` : alternate between horizontal and vertical segments, as in a step function. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. invalid : enum('filter', None) Defines how Vega-Lite should handle marks for invalid values ( ``null`` and ``NaN`` ). * If set to ``"filter"`` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). * If ``null``, all data items are included. In this case, invalid values will be interpreted as zeroes. limit : float The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0`` -- indicating no limit line : anyOf(boolean, :class:`OverlayMarkDef`) A flag for overlaying line on top of area marks, or an object defining the properties of the overlayed lines. If this value is an empty object ( ``{}`` ) or ``true``, lines with default properties will be used. If this value is ``false``, no lines would be automatically added to area marks. **Default value:** ``false``. lineBreak : string A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued. lineHeight : float The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks. opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. order : anyOf(None, boolean) For line and trail marks, this ``order`` property can be set to ``null`` or ``false`` to make the lines use the original order in the data sources. orient : :class:`Orientation` The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. * For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. * For area, this property determines the orient property of the Vega output. * For line and trail marks, this property determines the sort order of the points in the line if ``config.sortLineBy`` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored. point : anyOf(boolean, :class:`OverlayMarkDef`, enum('transparent')) A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points. If this property is ``"transparent"``, transparent points will be used (for enhancing tooltips and selections). If this property is an empty object ( ``{}`` ) or ``true``, filled points with default properties will be used. If this property is ``false``, no points would be automatically added to line or area marks. **Default value:** ``false``. radius : float Polar coordinate radial offset, in pixels, of the text label from the origin determined by the ``x`` and ``y`` properties. shape : anyOf(:class:`SymbolShape`, string) Shape of the point marks. Supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) **Default value:** ``"circle"`` size : float Default size for marks. * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value. * For ``bar``, this represents the band size of the bar, in pixels. * For ``text``, this represents the font size, in pixels. **Default value:** * ``30`` for point, circle, square marks; width/height's ``step`` * ``2`` for bar marks with discrete dimensions; * ``5`` for bar marks with continuous dimensions; * ``11`` for text marks. stroke : anyOf(:class:`Color`, :class:`Gradient`, None) Default Stroke Color. This property has higher precedence than ``config.color``. **Default value:** (None) strokeCap : string The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"butt"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : string The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOffset : float The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. tension : float Depending on the interpolation type, sets the tension parameter (for line and area marks). text : :class:`Text` Placeholder text if the ``text`` channel is not specified theta : float Polar coordinate angle, in radians, of the text label from the origin determined by the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in radians, with ``0`` indicating "north". timeUnitBand : float Default relative band size for a time unit. If set to ``1``, the bandwidth of the marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the marks will be half of the time unit band step. timeUnitBandPosition : float Default relative band position for a time unit. If set to ``0``, the marks will be positioned at the beginning of the time unit band step. If set to ``0.5``, the marks will be positioned in the middle of the time unit band step. tooltip : anyOf(float, string, boolean, :class:`TooltipContent`, None) The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from. * If ``tooltip`` is ``true`` or ``{"content": "encoding"}``, then all fields from ``encoding`` will be used. * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the highlighted data point will be used. * If set to ``null`` or ``false``, then no tooltip will be used. See the `tooltip `__ documentation for a detailed discussion about tooltip in Vega-Lite. **Default value:** ``null`` width : float Width of the marks. x : anyOf(float, enum('width')) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(float, enum('width')) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. y : anyOf(float, enum('height')) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(float, enum('height')) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. """ _schema = {'$ref': '#/definitions/AreaConfig'} def __init__(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, blend=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined, y2=Undefined, **kwds): super(AreaConfig, self).__init__(align=align, angle=angle, aspect=aspect, baseline=baseline, blend=blend, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, line=line, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, tension=tension, text=text, theta=theta, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, y=y, y2=y2, **kwds) class ArgmaxDef(Aggregate): """ArgmaxDef schema wrapper Mapping(required=[argmax]) Attributes ---------- argmax : string """ _schema = {'$ref': '#/definitions/ArgmaxDef'} def __init__(self, argmax=Undefined, **kwds): super(ArgmaxDef, self).__init__(argmax=argmax, **kwds) class ArgminDef(Aggregate): """ArgminDef schema wrapper Mapping(required=[argmin]) Attributes ---------- argmin : string """ _schema = {'$ref': '#/definitions/ArgminDef'} def __init__(self, argmin=Undefined, **kwds): super(ArgminDef, self).__init__(argmin=argmin, **kwds) class AutoSizeParams(VegaLiteSchema): """AutoSizeParams schema wrapper Mapping(required=[]) Attributes ---------- contains : enum('content', 'padding') Determines how size calculation should be performed, one of ``"content"`` or ``"padding"``. The default setting ( ``"content"`` ) interprets the width and height settings as the data rectangle (plotting) dimensions, to which padding is then added. In contrast, the ``"padding"`` setting includes the padding within the view size calculations, such that the width and height settings indicate the **total** intended size of the view. **Default value** : ``"content"`` resize : boolean A boolean flag indicating if autosize layout should be re-calculated on every view update. **Default value** : ``false`` type : :class:`AutosizeType` The sizing format type. One of ``"pad"``, ``"fit"``, ``"fit-x"``, ``"fit-y"``, or ``"none"``. See the `autosize type `__ documentation for descriptions of each. **Default value** : ``"pad"`` """ _schema = {'$ref': '#/definitions/AutoSizeParams'} def __init__(self, contains=Undefined, resize=Undefined, type=Undefined, **kwds): super(AutoSizeParams, self).__init__(contains=contains, resize=resize, type=type, **kwds) class AutosizeType(VegaLiteSchema): """AutosizeType schema wrapper enum('pad', 'none', 'fit', 'fit-x', 'fit-y') """ _schema = {'$ref': '#/definitions/AutosizeType'} def __init__(self, *args): super(AutosizeType, self).__init__(*args) class Axis(VegaLiteSchema): """Axis schema wrapper Mapping(required=[]) Attributes ---------- bandPosition : float An interpolation fraction indicating where, for ``band`` scales, axis ticks should be positioned. A value of ``0`` places ticks at the left edge of their bands. A value of ``0.5`` places ticks in the middle of their bands. **Default value:** ``0.5`` domain : boolean A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis. **Default value:** ``true`` domainColor : anyOf(None, :class:`Color`) Color of axis domain line. **Default value:** ``"gray"``. domainDash : List(float) An array of alternating [stroke, space] lengths for dashed domain lines. domainDashOffset : float The pixel offset at which to start drawing with the domain dash array. domainOpacity : float Opacity of the axis domain line. domainWidth : float Stroke width of axis domain line **Default value:** ``1`` format : anyOf(string, Mapping(required=[])) When used with the default ``"number"`` and ``"time"`` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. When used with a `custom "formatType" `__ that takes ``datum.value`` and format parameter as input), this property represents the format parameter. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : string The format type for labels ( ``"number"`` or ``"time"`` or a `registered custom format type `__ ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. grid : boolean A boolean flag indicating if grid lines should be included as part of the axis **Default value:** ``true`` for `continuous scales `__ that are not binned; otherwise, ``false``. gridColor : anyOf(anyOf(None, :class:`Color`), :class:`ConditionalAxisColor`) gridDash : anyOf(List(float), :class:`ConditionalAxisNumberArray`) gridDashOffset : anyOf(float, :class:`ConditionalAxisNumber`) gridOpacity : anyOf(float, :class:`ConditionalAxisNumber`) gridWidth : anyOf(float, :class:`ConditionalAxisNumber`) labelAlign : anyOf(:class:`Align`, :class:`ConditionalAxisLabelAlign`) labelAngle : float The rotation angle of the axis labels. **Default value:** ``-90`` for nominal and ordinal fields; ``0`` otherwise. labelBaseline : anyOf(:class:`TextBaseline`, :class:`ConditionalAxisLabelBaseline`) labelBound : anyOf(float, boolean) Indicates if labels should be hidden if they exceed the axis range. If ``false`` (the default) no bounds overlap analysis is performed. If ``true``, labels will be hidden if they exceed the axis range by more than 1 pixel. If this property is a number, it specifies the pixel tolerance: the maximum amount by which a label bounding box may exceed the axis range. **Default value:** ``false``. labelColor : anyOf(anyOf(None, :class:`Color`), :class:`ConditionalAxisColor`) labelExpr : string `Vega expression `__ for customizing labels. **Note:** The label text and value can be assessed via the ``label`` and ``value`` properties of the axis's backing ``datum`` object. labelFlush : anyOf(boolean, float) Indicates if the first and last axis labels should be aligned flush with the scale range. Flush alignment for a horizontal axis will left-align the first label and right-align the last label. For vertical axes, bottom and top text baselines are applied instead. If this property is a number, it also indicates the number of pixels by which to offset the first and last labels; for example, a value of 2 will flush-align the first and last labels and also push them 2 pixels outward from the center of the axis. The additional adjustment can sometimes help the labels better visually group with corresponding axis ticks. **Default value:** ``true`` for axis of a continuous x-scale. Otherwise, ``false``. labelFlushOffset : float Indicates the number of pixels by which to offset flush-adjusted labels. For example, a value of ``2`` will push flush-adjusted labels 2 pixels outward from the center of the axis. Offsets can help the labels better visually group with corresponding axis ticks. **Default value:** ``0``. labelFont : anyOf(string, :class:`ConditionalAxisString`) labelFontSize : anyOf(float, :class:`ConditionalAxisNumber`) labelFontStyle : anyOf(:class:`FontStyle`, :class:`ConditionalAxisLabelFontStyle`) labelFontWeight : anyOf(:class:`FontWeight`, :class:`ConditionalAxisLabelFontWeight`) labelLimit : float Maximum allowed pixel width of axis tick labels. **Default value:** ``180`` labelLineHeight : float Line height in pixels for multi-line label text. labelOffset : anyOf(float, :class:`ConditionalAxisNumber`) labelOpacity : anyOf(float, :class:`ConditionalAxisNumber`) labelOverlap : :class:`LabelOverlap` The strategy to use for resolving overlap of axis labels. If ``false`` (the default), no overlap reduction is attempted. If set to ``true`` or ``"parity"``, a strategy of removing every other label is used (this works well for standard linear axes). If set to ``"greedy"``, a linear scan of the labels is performed, removing any labels that overlaps with the last visible label (this often works better for log-scaled axes). **Default value:** ``true`` for non-nominal fields with non-log scales; ``"greedy"`` for log scales; otherwise ``false``. labelPadding : anyOf(float, :class:`ConditionalAxisNumber`) labelSeparation : float The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default ``0`` ). This property is ignored if *labelOverlap* resolution is not enabled. labels : boolean A boolean flag indicating if labels should be included as part of the axis. **Default value:** ``true``. maxExtent : float The maximum extent in pixels that axis ticks and labels should use. This determines a maximum offset value for axis titles. **Default value:** ``undefined``. minExtent : float The minimum extent in pixels that axis ticks and labels should use. This determines a minimum offset value for axis titles. **Default value:** ``30`` for y-axis; ``undefined`` for x-axis. offset : float The offset, in pixels, by which to displace the axis from the edge of the enclosing group or data rectangle. **Default value:** derived from the `axis config `__ 's ``offset`` ( ``0`` by default) orient : :class:`AxisOrient` The orientation of the axis. One of ``"top"``, ``"bottom"``, ``"left"`` or ``"right"``. The orientation can be used to further specialize the axis type (e.g., a y-axis oriented towards the right edge of the chart). **Default value:** ``"bottom"`` for x-axes and ``"left"`` for y-axes. position : float The anchor position of the axis in pixels. For x-axes with top or bottom orientation, this sets the axis group x coordinate. For y-axes with left or right orientation, this sets the axis group y coordinate. **Default value** : ``0`` style : anyOf(string, List(string)) A string or array of strings indicating the name of custom styles to apply to the axis. A style is a named collection of axis property defined within the `style configuration `__. If style is an array, later styles will override earlier styles. **Default value:** (none) **Note:** Any specified style will augment the default style. For example, an x-axis mark with ``"style": "foo"`` will use ``config.axisX`` and ``config.style.foo`` (the specified style ``"foo"`` has higher precedence). tickBand : enum('center', 'extent') For band scales, indicates if ticks and grid lines should be placed at the center of a band (default) or at the band extents to indicate intervals. tickColor : anyOf(anyOf(None, :class:`Color`), :class:`ConditionalAxisColor`) tickCount : float A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are "nice" (multiples of 2, 5, 10) and lie within the underlying scale's range. **Default value** : Determine using a formula ``ceil(width/40)`` for x and ``ceil(height/40)`` for y. tickDash : anyOf(List(float), :class:`ConditionalAxisNumberArray`) tickDashOffset : anyOf(float, :class:`ConditionalAxisNumber`) tickExtra : boolean Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for ``band`` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with ``"bandPosition": 1`` and an axis ``"padding"`` value of ``0``. tickMinStep : float The minimum desired step between axis ticks, in terms of scale domain values. For example, a value of ``1`` indicates that ticks should not be less than 1 unit apart. If ``tickMinStep`` is specified, the ``tickCount`` value will be adjusted, if necessary, to enforce the minimum step value. **Default value** : ``undefined`` tickOffset : float Position offset in pixels to apply to ticks, labels, and gridlines. tickOpacity : anyOf(float, :class:`ConditionalAxisNumber`) tickRound : boolean Boolean flag indicating if pixel position values should be rounded to the nearest integer. **Default value:** ``true`` tickSize : anyOf(float, :class:`ConditionalAxisNumber`) tickWidth : anyOf(float, :class:`ConditionalAxisNumber`) ticks : boolean Boolean value that determines whether the axis should include ticks. **Default value:** ``true`` title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. titleAlign : :class:`Align` Horizontal text alignment of axis titles. titleAnchor : :class:`TitleAnchor` Text anchor position for placing axis titles. titleAngle : float Angle in degrees of axis titles. titleBaseline : :class:`TextBaseline` Vertical text baseline for axis titles. titleColor : anyOf(None, :class:`Color`) Color of the title, can be in hex color code or regular color name. titleFont : string Font of the title. (e.g., ``"Helvetica Neue"`` ). titleFontSize : float Font size of the title. titleFontStyle : :class:`FontStyle` Font style of the title. titleFontWeight : :class:`FontWeight` Font weight of the title. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). titleLimit : float Maximum allowed pixel width of axis titles. titleLineHeight : float Line height in pixels for multi-line title text. titleOpacity : float Opacity of the axis title. titlePadding : float The padding, in pixels, between title and axis. titleX : float X-coordinate of the axis title relative to the axis group. titleY : float Y-coordinate of the axis title relative to the axis group. translate : float Translation offset in pixels applied to the axis group mark x and y. If specified, overrides the default behavior of a 0.5 offset to pixel-align stroked lines. values : anyOf(List(float), List(string), List(boolean), List(:class:`DateTime`)) Explicitly set the visible axis tick values. zindex : float A non-negative integer indicating the z-index of the axis. If zindex is 0, axes should be drawn behind all chart elements. To put them in front, set ``zindex`` to ``1`` or more. **Default value:** ``0`` (behind the marks). """ _schema = {'$ref': '#/definitions/Axis'} def __init__(self, bandPosition=Undefined, domain=Undefined, domainColor=Undefined, domainDash=Undefined, domainDashOffset=Undefined, domainOpacity=Undefined, domainWidth=Undefined, format=Undefined, formatType=Undefined, grid=Undefined, gridColor=Undefined, gridDash=Undefined, gridDashOffset=Undefined, gridOpacity=Undefined, gridWidth=Undefined, labelAlign=Undefined, labelAngle=Undefined, labelBaseline=Undefined, labelBound=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFlush=Undefined, labelFlushOffset=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelLineHeight=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, labels=Undefined, maxExtent=Undefined, minExtent=Undefined, offset=Undefined, orient=Undefined, position=Undefined, style=Undefined, tickBand=Undefined, tickColor=Undefined, tickCount=Undefined, tickDash=Undefined, tickDashOffset=Undefined, tickExtra=Undefined, tickMinStep=Undefined, tickOffset=Undefined, tickOpacity=Undefined, tickRound=Undefined, tickSize=Undefined, tickWidth=Undefined, ticks=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleAngle=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titlePadding=Undefined, titleX=Undefined, titleY=Undefined, translate=Undefined, values=Undefined, zindex=Undefined, **kwds): super(Axis, self).__init__(bandPosition=bandPosition, domain=domain, domainColor=domainColor, domainDash=domainDash, domainDashOffset=domainDashOffset, domainOpacity=domainOpacity, domainWidth=domainWidth, format=format, formatType=formatType, grid=grid, gridColor=gridColor, gridDash=gridDash, gridDashOffset=gridDashOffset, gridOpacity=gridOpacity, gridWidth=gridWidth, labelAlign=labelAlign, labelAngle=labelAngle, labelBaseline=labelBaseline, labelBound=labelBound, labelColor=labelColor, labelExpr=labelExpr, labelFlush=labelFlush, labelFlushOffset=labelFlushOffset, labelFont=labelFont, labelFontSize=labelFontSize, labelFontStyle=labelFontStyle, labelFontWeight=labelFontWeight, labelLimit=labelLimit, labelLineHeight=labelLineHeight, labelOffset=labelOffset, labelOpacity=labelOpacity, labelOverlap=labelOverlap, labelPadding=labelPadding, labelSeparation=labelSeparation, labels=labels, maxExtent=maxExtent, minExtent=minExtent, offset=offset, orient=orient, position=position, style=style, tickBand=tickBand, tickColor=tickColor, tickCount=tickCount, tickDash=tickDash, tickDashOffset=tickDashOffset, tickExtra=tickExtra, tickMinStep=tickMinStep, tickOffset=tickOffset, tickOpacity=tickOpacity, tickRound=tickRound, tickSize=tickSize, tickWidth=tickWidth, ticks=ticks, title=title, titleAlign=titleAlign, titleAnchor=titleAnchor, titleAngle=titleAngle, titleBaseline=titleBaseline, titleColor=titleColor, titleFont=titleFont, titleFontSize=titleFontSize, titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight, titleLimit=titleLimit, titleLineHeight=titleLineHeight, titleOpacity=titleOpacity, titlePadding=titlePadding, titleX=titleX, titleY=titleY, translate=translate, values=values, zindex=zindex, **kwds) class AxisConfig(VegaLiteSchema): """AxisConfig schema wrapper Mapping(required=[]) Attributes ---------- bandPosition : float An interpolation fraction indicating where, for ``band`` scales, axis ticks should be positioned. A value of ``0`` places ticks at the left edge of their bands. A value of ``0.5`` places ticks in the middle of their bands. **Default value:** ``0.5`` disable : boolean Disable axis by default. domain : boolean A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis. **Default value:** ``true`` domainColor : anyOf(None, :class:`Color`) Color of axis domain line. **Default value:** ``"gray"``. domainDash : List(float) An array of alternating [stroke, space] lengths for dashed domain lines. domainDashOffset : float The pixel offset at which to start drawing with the domain dash array. domainOpacity : float Opacity of the axis domain line. domainWidth : float Stroke width of axis domain line **Default value:** ``1`` grid : boolean A boolean flag indicating if grid lines should be included as part of the axis **Default value:** ``true`` for `continuous scales `__ that are not binned; otherwise, ``false``. gridColor : anyOf(anyOf(None, :class:`Color`), :class:`ConditionalAxisColor`) gridDash : anyOf(List(float), :class:`ConditionalAxisNumberArray`) gridDashOffset : anyOf(float, :class:`ConditionalAxisNumber`) gridOpacity : anyOf(float, :class:`ConditionalAxisNumber`) gridWidth : anyOf(float, :class:`ConditionalAxisNumber`) labelAlign : anyOf(:class:`Align`, :class:`ConditionalAxisLabelAlign`) labelAngle : float The rotation angle of the axis labels. **Default value:** ``-90`` for nominal and ordinal fields; ``0`` otherwise. labelBaseline : anyOf(:class:`TextBaseline`, :class:`ConditionalAxisLabelBaseline`) labelBound : anyOf(float, boolean) Indicates if labels should be hidden if they exceed the axis range. If ``false`` (the default) no bounds overlap analysis is performed. If ``true``, labels will be hidden if they exceed the axis range by more than 1 pixel. If this property is a number, it specifies the pixel tolerance: the maximum amount by which a label bounding box may exceed the axis range. **Default value:** ``false``. labelColor : anyOf(anyOf(None, :class:`Color`), :class:`ConditionalAxisColor`) labelExpr : string `Vega expression `__ for customizing labels. **Note:** The label text and value can be assessed via the ``label`` and ``value`` properties of the axis's backing ``datum`` object. labelFlush : anyOf(boolean, float) Indicates if the first and last axis labels should be aligned flush with the scale range. Flush alignment for a horizontal axis will left-align the first label and right-align the last label. For vertical axes, bottom and top text baselines are applied instead. If this property is a number, it also indicates the number of pixels by which to offset the first and last labels; for example, a value of 2 will flush-align the first and last labels and also push them 2 pixels outward from the center of the axis. The additional adjustment can sometimes help the labels better visually group with corresponding axis ticks. **Default value:** ``true`` for axis of a continuous x-scale. Otherwise, ``false``. labelFlushOffset : float Indicates the number of pixels by which to offset flush-adjusted labels. For example, a value of ``2`` will push flush-adjusted labels 2 pixels outward from the center of the axis. Offsets can help the labels better visually group with corresponding axis ticks. **Default value:** ``0``. labelFont : anyOf(string, :class:`ConditionalAxisString`) labelFontSize : anyOf(float, :class:`ConditionalAxisNumber`) labelFontStyle : anyOf(:class:`FontStyle`, :class:`ConditionalAxisLabelFontStyle`) labelFontWeight : anyOf(:class:`FontWeight`, :class:`ConditionalAxisLabelFontWeight`) labelLimit : float Maximum allowed pixel width of axis tick labels. **Default value:** ``180`` labelLineHeight : float Line height in pixels for multi-line label text. labelOffset : anyOf(float, :class:`ConditionalAxisNumber`) labelOpacity : anyOf(float, :class:`ConditionalAxisNumber`) labelOverlap : :class:`LabelOverlap` The strategy to use for resolving overlap of axis labels. If ``false`` (the default), no overlap reduction is attempted. If set to ``true`` or ``"parity"``, a strategy of removing every other label is used (this works well for standard linear axes). If set to ``"greedy"``, a linear scan of the labels is performed, removing any labels that overlaps with the last visible label (this often works better for log-scaled axes). **Default value:** ``true`` for non-nominal fields with non-log scales; ``"greedy"`` for log scales; otherwise ``false``. labelPadding : anyOf(float, :class:`ConditionalAxisNumber`) labelSeparation : float The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default ``0`` ). This property is ignored if *labelOverlap* resolution is not enabled. labels : boolean A boolean flag indicating if labels should be included as part of the axis. **Default value:** ``true``. maxExtent : float The maximum extent in pixels that axis ticks and labels should use. This determines a maximum offset value for axis titles. **Default value:** ``undefined``. minExtent : float The minimum extent in pixels that axis ticks and labels should use. This determines a minimum offset value for axis titles. **Default value:** ``30`` for y-axis; ``undefined`` for x-axis. offset : float The offset, in pixels, by which to displace the axis from the edge of the enclosing group or data rectangle. **Default value:** derived from the `axis config `__ 's ``offset`` ( ``0`` by default) orient : :class:`AxisOrient` The orientation of the axis. One of ``"top"``, ``"bottom"``, ``"left"`` or ``"right"``. The orientation can be used to further specialize the axis type (e.g., a y-axis oriented towards the right edge of the chart). **Default value:** ``"bottom"`` for x-axes and ``"left"`` for y-axes. style : anyOf(string, List(string)) A string or array of strings indicating the name of custom styles to apply to the axis. A style is a named collection of axis property defined within the `style configuration `__. If style is an array, later styles will override earlier styles. **Default value:** (none) **Note:** Any specified style will augment the default style. For example, an x-axis mark with ``"style": "foo"`` will use ``config.axisX`` and ``config.style.foo`` (the specified style ``"foo"`` has higher precedence). tickBand : enum('center', 'extent') For band scales, indicates if ticks and grid lines should be placed at the center of a band (default) or at the band extents to indicate intervals. tickColor : anyOf(anyOf(None, :class:`Color`), :class:`ConditionalAxisColor`) tickCount : float A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are "nice" (multiples of 2, 5, 10) and lie within the underlying scale's range. **Default value** : Determine using a formula ``ceil(width/40)`` for x and ``ceil(height/40)`` for y. tickDash : anyOf(List(float), :class:`ConditionalAxisNumberArray`) tickDashOffset : anyOf(float, :class:`ConditionalAxisNumber`) tickExtra : boolean Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for ``band`` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with ``"bandPosition": 1`` and an axis ``"padding"`` value of ``0``. tickOffset : float Position offset in pixels to apply to ticks, labels, and gridlines. tickOpacity : anyOf(float, :class:`ConditionalAxisNumber`) tickRound : boolean Boolean flag indicating if pixel position values should be rounded to the nearest integer. **Default value:** ``true`` tickSize : anyOf(float, :class:`ConditionalAxisNumber`) tickWidth : anyOf(float, :class:`ConditionalAxisNumber`) ticks : boolean Boolean value that determines whether the axis should include ticks. **Default value:** ``true`` title : None Set to null to disable title for the axis, legend, or header. titleAlign : :class:`Align` Horizontal text alignment of axis titles. titleAnchor : :class:`TitleAnchor` Text anchor position for placing axis titles. titleAngle : float Angle in degrees of axis titles. titleBaseline : :class:`TextBaseline` Vertical text baseline for axis titles. titleColor : anyOf(None, :class:`Color`) Color of the title, can be in hex color code or regular color name. titleFont : string Font of the title. (e.g., ``"Helvetica Neue"`` ). titleFontSize : float Font size of the title. titleFontStyle : :class:`FontStyle` Font style of the title. titleFontWeight : :class:`FontWeight` Font weight of the title. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). titleLimit : float Maximum allowed pixel width of axis titles. titleLineHeight : float Line height in pixels for multi-line title text. titleOpacity : float Opacity of the axis title. titlePadding : float The padding, in pixels, between title and axis. titleX : float X-coordinate of the axis title relative to the axis group. titleY : float Y-coordinate of the axis title relative to the axis group. translate : float Translation offset in pixels applied to the axis group mark x and y. If specified, overrides the default behavior of a 0.5 offset to pixel-align stroked lines. """ _schema = {'$ref': '#/definitions/AxisConfig'} def __init__(self, bandPosition=Undefined, disable=Undefined, domain=Undefined, domainColor=Undefined, domainDash=Undefined, domainDashOffset=Undefined, domainOpacity=Undefined, domainWidth=Undefined, grid=Undefined, gridColor=Undefined, gridDash=Undefined, gridDashOffset=Undefined, gridOpacity=Undefined, gridWidth=Undefined, labelAlign=Undefined, labelAngle=Undefined, labelBaseline=Undefined, labelBound=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFlush=Undefined, labelFlushOffset=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelLineHeight=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, labels=Undefined, maxExtent=Undefined, minExtent=Undefined, offset=Undefined, orient=Undefined, style=Undefined, tickBand=Undefined, tickColor=Undefined, tickCount=Undefined, tickDash=Undefined, tickDashOffset=Undefined, tickExtra=Undefined, tickOffset=Undefined, tickOpacity=Undefined, tickRound=Undefined, tickSize=Undefined, tickWidth=Undefined, ticks=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleAngle=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titlePadding=Undefined, titleX=Undefined, titleY=Undefined, translate=Undefined, **kwds): super(AxisConfig, self).__init__(bandPosition=bandPosition, disable=disable, domain=domain, domainColor=domainColor, domainDash=domainDash, domainDashOffset=domainDashOffset, domainOpacity=domainOpacity, domainWidth=domainWidth, grid=grid, gridColor=gridColor, gridDash=gridDash, gridDashOffset=gridDashOffset, gridOpacity=gridOpacity, gridWidth=gridWidth, labelAlign=labelAlign, labelAngle=labelAngle, labelBaseline=labelBaseline, labelBound=labelBound, labelColor=labelColor, labelExpr=labelExpr, labelFlush=labelFlush, labelFlushOffset=labelFlushOffset, labelFont=labelFont, labelFontSize=labelFontSize, labelFontStyle=labelFontStyle, labelFontWeight=labelFontWeight, labelLimit=labelLimit, labelLineHeight=labelLineHeight, labelOffset=labelOffset, labelOpacity=labelOpacity, labelOverlap=labelOverlap, labelPadding=labelPadding, labelSeparation=labelSeparation, labels=labels, maxExtent=maxExtent, minExtent=minExtent, offset=offset, orient=orient, style=style, tickBand=tickBand, tickColor=tickColor, tickCount=tickCount, tickDash=tickDash, tickDashOffset=tickDashOffset, tickExtra=tickExtra, tickOffset=tickOffset, tickOpacity=tickOpacity, tickRound=tickRound, tickSize=tickSize, tickWidth=tickWidth, ticks=ticks, title=title, titleAlign=titleAlign, titleAnchor=titleAnchor, titleAngle=titleAngle, titleBaseline=titleBaseline, titleColor=titleColor, titleFont=titleFont, titleFontSize=titleFontSize, titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight, titleLimit=titleLimit, titleLineHeight=titleLineHeight, titleOpacity=titleOpacity, titlePadding=titlePadding, titleX=titleX, titleY=titleY, translate=translate, **kwds) class AxisOrient(VegaLiteSchema): """AxisOrient schema wrapper enum('top', 'bottom', 'left', 'right') """ _schema = {'$ref': '#/definitions/AxisOrient'} def __init__(self, *args): super(AxisOrient, self).__init__(*args) class AxisResolveMap(VegaLiteSchema): """AxisResolveMap schema wrapper Mapping(required=[]) Attributes ---------- x : :class:`ResolveMode` y : :class:`ResolveMode` """ _schema = {'$ref': '#/definitions/AxisResolveMap'} def __init__(self, x=Undefined, y=Undefined, **kwds): super(AxisResolveMap, self).__init__(x=x, y=y, **kwds) class BarConfig(AnyMarkConfig): """BarConfig schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of ``"left"``, ``"right"``, ``"center"``. angle : float The rotation angle of the text, in degrees. aspect : boolean Whether to keep aspect ratio of image marks. baseline : :class:`TextBaseline` The vertical text baseline. One of ``"alphabetic"`` (default), ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or ``"line-bottom"``. The ``"line-top"`` and ``"line-bottom"`` values operate similarly to ``"top"`` and ``"bottom"``, but are calculated relative to the ``lineHeight`` rather than ``fontSize`` alone. binSpacing : float Offset between bars for binned field. The ideal value for this is either 0 (preferred by statisticians) or 1 (Vega-Lite default, D3 example style). **Default value:** ``1`` blend : :class:`Blend` The color blend mode for drawing an item on its current background. Any valid `CSS mix-blend-mode `__ value can be used. __Default value: ``"source-over"`` color : anyOf(:class:`Color`, :class:`Gradient`) Default color. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** * This property cannot be used in a `style config `__. * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and will override ``color``. continuousBandSize : float The default size of the bars on continuous scales. **Default value:** ``5`` cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cornerRadiusBottomLeft : float The radius in pixels of rounded rectangle bottom left corner. **Default value:** ``0`` cornerRadiusBottomRight : float The radius in pixels of rounded rectangle bottom right corner. **Default value:** ``0`` cornerRadiusEnd : float * For vertical bars, top-left and top-right corner radius. * For horizontal bars, top-right and bottom-right corner radius. cornerRadiusTopLeft : float The radius in pixels of rounded rectangle top right corner. **Default value:** ``0`` cornerRadiusTopRight : float The radius in pixels of rounded rectangle top left corner. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the mark. Any valid `CSS cursor type `__ can be used. dir : :class:`TextDirection` The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"`` (right-to-left). This property determines on which side is truncated in response to the limit parameter. **Default value:** ``"ltr"`` discreteBandSize : float The default size of the bars with discrete dimensions. If unspecified, the default size is ``step-2``, which provides 2 pixel offset between bars. dx : float The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. dy : float The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. ellipsis : string The ellipsis string for text truncated in response to the limit parameter. **Default value:** ``"…"`` fill : anyOf(:class:`Color`, :class:`Gradient`, None) Default Fill Color. This property has higher precedence than ``config.color``. **Default value:** (None) fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` filled : boolean Whether the mark's color should be used as fill color instead of stroke color. **Default value:** ``false`` for all ``point``, ``line``, and ``rule`` marks as well as ``geoshape`` marks for `graticule `__ data sources; otherwise, ``true``. **Note:** This property cannot be used in a `style config `__. font : string The typeface to set the text in (e.g., ``"Helvetica Neue"`` ). fontSize : float The font size, in pixels. **Default value:** ``11`` fontStyle : :class:`FontStyle` The font style (e.g., ``"italic"`` ). fontWeight : :class:`FontWeight` The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). height : float Height of the marks. href : string A URL to load upon mouse click. If defined, the mark acts as a hyperlink. interpolate : :class:`Interpolate` The line interpolation method to use for line and area marks. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : alternate between horizontal and vertical segments, as in a step function. * ``"step-before"`` : alternate between vertical and horizontal segments, as in a step function. * ``"step-after"`` : alternate between horizontal and vertical segments, as in a step function. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. invalid : enum('filter', None) Defines how Vega-Lite should handle marks for invalid values ( ``null`` and ``NaN`` ). * If set to ``"filter"`` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). * If ``null``, all data items are included. In this case, invalid values will be interpreted as zeroes. limit : float The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0`` -- indicating no limit lineBreak : string A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued. lineHeight : float The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks. opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. order : anyOf(None, boolean) For line and trail marks, this ``order`` property can be set to ``null`` or ``false`` to make the lines use the original order in the data sources. orient : :class:`Orientation` The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. * For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. * For area, this property determines the orient property of the Vega output. * For line and trail marks, this property determines the sort order of the points in the line if ``config.sortLineBy`` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored. radius : float Polar coordinate radial offset, in pixels, of the text label from the origin determined by the ``x`` and ``y`` properties. shape : anyOf(:class:`SymbolShape`, string) Shape of the point marks. Supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) **Default value:** ``"circle"`` size : float Default size for marks. * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value. * For ``bar``, this represents the band size of the bar, in pixels. * For ``text``, this represents the font size, in pixels. **Default value:** * ``30`` for point, circle, square marks; width/height's ``step`` * ``2`` for bar marks with discrete dimensions; * ``5`` for bar marks with continuous dimensions; * ``11`` for text marks. stroke : anyOf(:class:`Color`, :class:`Gradient`, None) Default Stroke Color. This property has higher precedence than ``config.color``. **Default value:** (None) strokeCap : string The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"butt"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : string The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOffset : float The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. tension : float Depending on the interpolation type, sets the tension parameter (for line and area marks). text : :class:`Text` Placeholder text if the ``text`` channel is not specified theta : float Polar coordinate angle, in radians, of the text label from the origin determined by the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in radians, with ``0`` indicating "north". timeUnitBand : float Default relative band size for a time unit. If set to ``1``, the bandwidth of the marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the marks will be half of the time unit band step. timeUnitBandPosition : float Default relative band position for a time unit. If set to ``0``, the marks will be positioned at the beginning of the time unit band step. If set to ``0.5``, the marks will be positioned in the middle of the time unit band step. tooltip : anyOf(float, string, boolean, :class:`TooltipContent`, None) The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from. * If ``tooltip`` is ``true`` or ``{"content": "encoding"}``, then all fields from ``encoding`` will be used. * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the highlighted data point will be used. * If set to ``null`` or ``false``, then no tooltip will be used. See the `tooltip `__ documentation for a detailed discussion about tooltip in Vega-Lite. **Default value:** ``null`` width : float Width of the marks. x : anyOf(float, enum('width')) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(float, enum('width')) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. y : anyOf(float, enum('height')) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(float, enum('height')) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. """ _schema = {'$ref': '#/definitions/BarConfig'} def __init__(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, discreteBandSize=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined, y2=Undefined, **kwds): super(BarConfig, self).__init__(align=align, angle=angle, aspect=aspect, baseline=baseline, binSpacing=binSpacing, blend=blend, color=color, continuousBandSize=continuousBandSize, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusEnd=cornerRadiusEnd, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, discreteBandSize=discreteBandSize, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, tension=tension, text=text, theta=theta, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, y=y, y2=y2, **kwds) class BaseTitleNoValueRefs(VegaLiteSchema): """BaseTitleNoValueRefs schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` Horizontal text alignment for title text. One of ``"left"``, ``"center"``, or ``"right"``. anchor : :class:`TitleAnchor` The anchor position for placing the title and subtitle text. One of ``"start"``, ``"middle"``, or ``"end"``. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title. angle : float Angle in degrees of title and subtitle text. baseline : :class:`TextBaseline` Vertical text baseline for title and subtitle text. One of ``"top"``, ``"middle"``, ``"bottom"``, or ``"alphabetic"``. color : anyOf(None, :class:`Color`) Text color for title text. dx : float Delta offset for title and subtitle text x-coordinate. dy : float Delta offset for title and subtitle text y-coordinate. font : string Font name for title text. fontSize : float Font size in pixels for title text. fontStyle : :class:`FontStyle` Font style for title text. fontWeight : :class:`FontWeight` Font weight for title text. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). frame : anyOf(:class:`TitleFrame`, string) The reference frame for the anchor position, one of ``"bounds"`` (to anchor relative to the full bounding box) or ``"group"`` (to anchor relative to the group width or height). limit : float The maximum allowed length in pixels of title and subtitle text. lineHeight : float Line height in pixels for multi-line title text. offset : float The orthogonal offset in pixels by which to displace the title group from its position along the edge of the chart. orient : :class:`TitleOrient` Default title orientation ( ``"top"``, ``"bottom"``, ``"left"``, or ``"right"`` ) subtitleColor : anyOf(None, :class:`Color`) Text color for subtitle text. subtitleFont : string Font name for subtitle text. subtitleFontSize : float Font size in pixels for subtitle text. subtitleFontStyle : :class:`FontStyle` Font style for subtitle text. subtitleFontWeight : :class:`FontWeight` Font weight for subtitle text. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). subtitleLineHeight : float Line height in pixels for multi-line subtitle text. subtitlePadding : float The padding in pixels between title and subtitle text. """ _schema = {'$ref': '#/definitions/BaseTitleNoValueRefs'} def __init__(self, align=Undefined, anchor=Undefined, angle=Undefined, baseline=Undefined, color=Undefined, dx=Undefined, dy=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, frame=Undefined, limit=Undefined, lineHeight=Undefined, offset=Undefined, orient=Undefined, subtitleColor=Undefined, subtitleFont=Undefined, subtitleFontSize=Undefined, subtitleFontStyle=Undefined, subtitleFontWeight=Undefined, subtitleLineHeight=Undefined, subtitlePadding=Undefined, **kwds): super(BaseTitleNoValueRefs, self).__init__(align=align, anchor=anchor, angle=angle, baseline=baseline, color=color, dx=dx, dy=dy, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, frame=frame, limit=limit, lineHeight=lineHeight, offset=offset, orient=orient, subtitleColor=subtitleColor, subtitleFont=subtitleFont, subtitleFontSize=subtitleFontSize, subtitleFontStyle=subtitleFontStyle, subtitleFontWeight=subtitleFontWeight, subtitleLineHeight=subtitleLineHeight, subtitlePadding=subtitlePadding, **kwds) class BinExtent(VegaLiteSchema): """BinExtent schema wrapper anyOf(List([float, float]), :class:`SelectionExtent`) """ _schema = {'$ref': '#/definitions/BinExtent'} def __init__(self, *args, **kwds): super(BinExtent, self).__init__(*args, **kwds) class BinParams(VegaLiteSchema): """BinParams schema wrapper Mapping(required=[]) Binning properties or boolean flag for determining whether to bin data or not. Attributes ---------- anchor : float A value in the binned domain at which to anchor the bins, shifting the bin boundaries if necessary to ensure that a boundary aligns with the anchor value. **Default value:** the minimum bin extent value base : float The number base to use for automatic bin determination (default is base 10). **Default value:** ``10`` binned : boolean When set to ``true``, Vega-Lite treats the input data as already binned. divide : List([float, float]) Scale factors indicating allowable subdivisions. The default value is [5, 2], which indicates that for base 10 numbers (the default base), the method may consider dividing bin sizes by 5 and/or 2. For example, for an initial step size of 10, the method can check if bin sizes of 2 (= 10/5), 5 (= 10/2), or 1 (= 10/(5*2)) might also satisfy the given constraints. **Default value:** ``[5, 2]`` extent : :class:`BinExtent` A two-element ( ``[min, max]`` ) array indicating the range of desired bin values. maxbins : float Maximum number of bins. **Default value:** ``6`` for ``row``, ``column`` and ``shape`` channels; ``10`` for other channels minstep : float A minimum allowable step size (particularly useful for integer values). nice : boolean If true, attempts to make the bin boundaries use human-friendly boundaries, such as multiples of ten. **Default value:** ``true`` step : float An exact step size to use between bins. **Note:** If provided, options such as maxbins will be ignored. steps : List(float) An array of allowable step sizes to choose from. """ _schema = {'$ref': '#/definitions/BinParams'} def __init__(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds): super(BinParams, self).__init__(anchor=anchor, base=base, binned=binned, divide=divide, extent=extent, maxbins=maxbins, minstep=minstep, nice=nice, step=step, steps=steps, **kwds) class Binding(VegaLiteSchema): """Binding schema wrapper anyOf(:class:`BindCheckbox`, :class:`BindRadioSelect`, :class:`BindRange`, :class:`InputBinding`) """ _schema = {'$ref': '#/definitions/Binding'} def __init__(self, *args, **kwds): super(Binding, self).__init__(*args, **kwds) class BindCheckbox(Binding): """BindCheckbox schema wrapper Mapping(required=[input]) Attributes ---------- input : enum('checkbox') debounce : float element : :class:`Element` name : string type : string """ _schema = {'$ref': '#/definitions/BindCheckbox'} def __init__(self, input=Undefined, debounce=Undefined, element=Undefined, name=Undefined, type=Undefined, **kwds): super(BindCheckbox, self).__init__(input=input, debounce=debounce, element=element, name=name, type=type, **kwds) class BindRadioSelect(Binding): """BindRadioSelect schema wrapper Mapping(required=[input, options]) Attributes ---------- input : enum('radio', 'select') options : List(Any) debounce : float element : :class:`Element` labels : List(string) name : string type : string """ _schema = {'$ref': '#/definitions/BindRadioSelect'} def __init__(self, input=Undefined, options=Undefined, debounce=Undefined, element=Undefined, labels=Undefined, name=Undefined, type=Undefined, **kwds): super(BindRadioSelect, self).__init__(input=input, options=options, debounce=debounce, element=element, labels=labels, name=name, type=type, **kwds) class BindRange(Binding): """BindRange schema wrapper Mapping(required=[input]) Attributes ---------- input : enum('range') debounce : float element : :class:`Element` max : float min : float name : string step : float type : string """ _schema = {'$ref': '#/definitions/BindRange'} def __init__(self, input=Undefined, debounce=Undefined, element=Undefined, max=Undefined, min=Undefined, name=Undefined, step=Undefined, type=Undefined, **kwds): super(BindRange, self).__init__(input=input, debounce=debounce, element=element, max=max, min=min, name=name, step=step, type=type, **kwds) class Blend(VegaLiteSchema): """Blend schema wrapper enum(None, 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity') """ _schema = {'$ref': '#/definitions/Blend'} def __init__(self, *args): super(Blend, self).__init__(*args) class BoxPlotConfig(VegaLiteSchema): """BoxPlotConfig schema wrapper Mapping(required=[]) Attributes ---------- box : anyOf(boolean, :class:`MarkConfig`) extent : anyOf(enum('min-max'), float) The extent of the whiskers. Available options include: * ``"min-max"`` : min and max are the lower and upper whiskers respectively. * A number representing multiple of the interquartile range. This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range *[Q1 - k * IQR, Q3 + k * IQR]* where *Q1* and *Q3* are the first and third quartiles while *IQR* is the interquartile range ( *Q3-Q1* ). **Default value:** ``1.5``. median : anyOf(boolean, :class:`MarkConfig`) outliers : anyOf(boolean, :class:`MarkConfig`) rule : anyOf(boolean, :class:`MarkConfig`) size : float Size of the box and median tick of a box plot ticks : anyOf(boolean, :class:`MarkConfig`) """ _schema = {'$ref': '#/definitions/BoxPlotConfig'} def __init__(self, box=Undefined, extent=Undefined, median=Undefined, outliers=Undefined, rule=Undefined, size=Undefined, ticks=Undefined, **kwds): super(BoxPlotConfig, self).__init__(box=box, extent=extent, median=median, outliers=outliers, rule=rule, size=size, ticks=ticks, **kwds) class BrushConfig(VegaLiteSchema): """BrushConfig schema wrapper Mapping(required=[]) Attributes ---------- cursor : :class:`Cursor` The mouse cursor used over the interval mark. Any valid `CSS cursor type `__ can be used. fill : :class:`Color` The fill color of the interval mark. **Default value:** ``"#333333"`` fillOpacity : float The fill opacity of the interval mark (a value between ``0`` and ``1`` ). **Default value:** ``0.125`` stroke : :class:`Color` The stroke color of the interval mark. **Default value:** ``"#ffffff"`` strokeDash : List(float) An array of alternating stroke and space lengths, for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) with which to begin drawing the stroke dash array. strokeOpacity : float The stroke opacity of the interval mark (a value between ``0`` and ``1`` ). strokeWidth : float The stroke width of the interval mark. """ _schema = {'$ref': '#/definitions/BrushConfig'} def __init__(self, cursor=Undefined, fill=Undefined, fillOpacity=Undefined, stroke=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, **kwds): super(BrushConfig, self).__init__(cursor=cursor, fill=fill, fillOpacity=fillOpacity, stroke=stroke, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, **kwds) class Color(VegaLiteSchema): """Color schema wrapper anyOf(:class:`ColorName`, :class:`HexColor`, string) """ _schema = {'$ref': '#/definitions/Color'} def __init__(self, *args, **kwds): super(Color, self).__init__(*args, **kwds) class ColorGradientFieldDefWithCondition(VegaLiteSchema): """ColorGradientFieldDefWithCondition schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionGradientstringnull` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/ColorGradientFieldDefWithCondition'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(ColorGradientFieldDefWithCondition, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class ColorGradientValueWithCondition(VegaLiteSchema): """ColorGradientValueWithCondition schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionGradientstringnull`) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(:class:`Gradient`, string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ColorGradientValueWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ColorGradientValueWithCondition, self).__init__(condition=condition, value=value, **kwds) class ColorName(Color): """ColorName schema wrapper enum('black', 'silver', 'gray', 'white', 'maroon', 'red', 'purple', 'fuchsia', 'green', 'lime', 'olive', 'yellow', 'navy', 'blue', 'teal', 'aqua', 'orange', 'aliceblue', 'antiquewhite', 'aquamarine', 'azure', 'beige', 'bisque', 'blanchedalmond', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'greenyellow', 'grey', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'limegreen', 'linen', 'magenta', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'oldlace', 'olivedrab', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'whitesmoke', 'yellowgreen', 'rebeccapurple') """ _schema = {'$ref': '#/definitions/ColorName'} def __init__(self, *args): super(ColorName, self).__init__(*args) class ColorScheme(VegaLiteSchema): """ColorScheme schema wrapper anyOf(:class:`Categorical`, :class:`SequentialSingleHue`, :class:`SequentialMultiHue`, :class:`Diverging`, :class:`Cyclical`) """ _schema = {'$ref': '#/definitions/ColorScheme'} def __init__(self, *args, **kwds): super(ColorScheme, self).__init__(*args, **kwds) class Categorical(ColorScheme): """Categorical schema wrapper enum('accent', 'category10', 'category20', 'category20b', 'category20c', 'dark2', 'paired', 'pastel1', 'pastel2', 'set1', 'set2', 'set3', 'tableau10', 'tableau20') """ _schema = {'$ref': '#/definitions/Categorical'} def __init__(self, *args): super(Categorical, self).__init__(*args) class CompositeMark(AnyMark): """CompositeMark schema wrapper anyOf(:class:`BoxPlot`, :class:`ErrorBar`, :class:`ErrorBand`) """ _schema = {'$ref': '#/definitions/CompositeMark'} def __init__(self, *args, **kwds): super(CompositeMark, self).__init__(*args, **kwds) class BoxPlot(CompositeMark): """BoxPlot schema wrapper enum('boxplot') """ _schema = {'$ref': '#/definitions/BoxPlot'} def __init__(self, *args): super(BoxPlot, self).__init__(*args) class CompositeMarkDef(AnyMark): """CompositeMarkDef schema wrapper anyOf(:class:`BoxPlotDef`, :class:`ErrorBarDef`, :class:`ErrorBandDef`) """ _schema = {'$ref': '#/definitions/CompositeMarkDef'} def __init__(self, *args, **kwds): super(CompositeMarkDef, self).__init__(*args, **kwds) class BoxPlotDef(CompositeMarkDef): """BoxPlotDef schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`BoxPlot` The mark type. This could a primitive mark type (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"geoshape"``, ``"rule"``, and ``"text"`` ) or a composite mark type ( ``"boxplot"``, ``"errorband"``, ``"errorbar"`` ). box : anyOf(boolean, :class:`MarkConfig`) clip : boolean Whether a composite mark be clipped to the enclosing group’s width and height. color : anyOf(:class:`Color`, :class:`Gradient`) Default color. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** * This property cannot be used in a `style config `__. * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and will override ``color``. extent : anyOf(enum('min-max'), float) The extent of the whiskers. Available options include: * ``"min-max"`` : min and max are the lower and upper whiskers respectively. * A number representing multiple of the interquartile range. This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range *[Q1 - k * IQR, Q3 + k * IQR]* where *Q1* and *Q3* are the first and third quartiles while *IQR* is the interquartile range ( *Q3-Q1* ). **Default value:** ``1.5``. median : anyOf(boolean, :class:`MarkConfig`) opacity : float The opacity (value between [0,1]) of the mark. orient : :class:`Orientation` Orientation of the box plot. This is normally automatically determined based on types of fields on x and y channels. However, an explicit ``orient`` be specified when the orientation is ambiguous. **Default value:** ``"vertical"``. outliers : anyOf(boolean, :class:`MarkConfig`) rule : anyOf(boolean, :class:`MarkConfig`) size : float Size of the box and median tick of a box plot ticks : anyOf(boolean, :class:`MarkConfig`) """ _schema = {'$ref': '#/definitions/BoxPlotDef'} def __init__(self, type=Undefined, box=Undefined, clip=Undefined, color=Undefined, extent=Undefined, median=Undefined, opacity=Undefined, orient=Undefined, outliers=Undefined, rule=Undefined, size=Undefined, ticks=Undefined, **kwds): super(BoxPlotDef, self).__init__(type=type, box=box, clip=clip, color=color, extent=extent, median=median, opacity=opacity, orient=orient, outliers=outliers, rule=rule, size=size, ticks=ticks, **kwds) class CompositionConfig(VegaLiteSchema): """CompositionConfig schema wrapper Mapping(required=[]) Attributes ---------- columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). spacing : float The default spacing in pixels between composed sub-views. **Default value** : ``20`` """ _schema = {'$ref': '#/definitions/CompositionConfig'} def __init__(self, columns=Undefined, spacing=Undefined, **kwds): super(CompositionConfig, self).__init__(columns=columns, spacing=spacing, **kwds) class ConditionalAxisColor(VegaLiteSchema): """ConditionalAxisColor schema wrapper Mapping(required=[condition, value]) Attributes ---------- condition : anyOf(:class:`ConditionalPredicateValueDefColornull`, List(:class:`ConditionalPredicateValueDefColornull`)) value : anyOf(:class:`Color`, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalAxisColor'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ConditionalAxisColor, self).__init__(condition=condition, value=value, **kwds) class ConditionalAxisLabelAlign(VegaLiteSchema): """ConditionalAxisLabelAlign schema wrapper Mapping(required=[condition, value]) Attributes ---------- condition : anyOf(:class:`ConditionalPredicateValueDefAlignnull`, List(:class:`ConditionalPredicateValueDefAlignnull`)) value : anyOf(:class:`Align`, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalAxisLabelAlign'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ConditionalAxisLabelAlign, self).__init__(condition=condition, value=value, **kwds) class ConditionalAxisLabelBaseline(VegaLiteSchema): """ConditionalAxisLabelBaseline schema wrapper Mapping(required=[condition, value]) Attributes ---------- condition : anyOf(:class:`ConditionalPredicateValueDefTextBaselinenull`, List(:class:`ConditionalPredicateValueDefTextBaselinenull`)) value : anyOf(:class:`TextBaseline`, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalAxisLabelBaseline'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ConditionalAxisLabelBaseline, self).__init__(condition=condition, value=value, **kwds) class ConditionalAxisLabelFontStyle(VegaLiteSchema): """ConditionalAxisLabelFontStyle schema wrapper Mapping(required=[condition, value]) Attributes ---------- condition : anyOf(:class:`ConditionalPredicateValueDefFontStylenull`, List(:class:`ConditionalPredicateValueDefFontStylenull`)) value : anyOf(:class:`FontStyle`, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalAxisLabelFontStyle'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ConditionalAxisLabelFontStyle, self).__init__(condition=condition, value=value, **kwds) class ConditionalAxisLabelFontWeight(VegaLiteSchema): """ConditionalAxisLabelFontWeight schema wrapper Mapping(required=[condition, value]) Attributes ---------- condition : anyOf(:class:`ConditionalPredicateValueDefFontWeightnull`, List(:class:`ConditionalPredicateValueDefFontWeightnull`)) value : anyOf(:class:`FontWeight`, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalAxisLabelFontWeight'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ConditionalAxisLabelFontWeight, self).__init__(condition=condition, value=value, **kwds) class ConditionalAxisNumber(VegaLiteSchema): """ConditionalAxisNumber schema wrapper Mapping(required=[condition, value]) Attributes ---------- condition : anyOf(:class:`ConditionalPredicateValueDefnumbernull`, List(:class:`ConditionalPredicateValueDefnumbernull`)) value : anyOf(float, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalAxisNumber'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ConditionalAxisNumber, self).__init__(condition=condition, value=value, **kwds) class ConditionalAxisNumberArray(VegaLiteSchema): """ConditionalAxisNumberArray schema wrapper Mapping(required=[condition, value]) Attributes ---------- condition : anyOf(:class:`ConditionalPredicateValueDefnumbernull`, List(:class:`ConditionalPredicateValueDefnumbernull`)) value : anyOf(List(float), None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalAxisNumberArray'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ConditionalAxisNumberArray, self).__init__(condition=condition, value=value, **kwds) class ConditionalAxisPropertyAlignnull(VegaLiteSchema): """ConditionalAxisPropertyAlignnull schema wrapper Mapping(required=[condition, value]) Attributes ---------- condition : anyOf(:class:`ConditionalPredicateValueDefAlignnull`, List(:class:`ConditionalPredicateValueDefAlignnull`)) value : anyOf(:class:`Align`, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalAxisProperty<(Align|null)>'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ConditionalAxisPropertyAlignnull, self).__init__(condition=condition, value=value, **kwds) class ConditionalAxisPropertyColornull(VegaLiteSchema): """ConditionalAxisPropertyColornull schema wrapper Mapping(required=[condition, value]) Attributes ---------- condition : anyOf(:class:`ConditionalPredicateValueDefColornull`, List(:class:`ConditionalPredicateValueDefColornull`)) value : anyOf(:class:`Color`, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalAxisProperty<(Color|null)>'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ConditionalAxisPropertyColornull, self).__init__(condition=condition, value=value, **kwds) class ConditionalAxisPropertyFontStylenull(VegaLiteSchema): """ConditionalAxisPropertyFontStylenull schema wrapper Mapping(required=[condition, value]) Attributes ---------- condition : anyOf(:class:`ConditionalPredicateValueDefFontStylenull`, List(:class:`ConditionalPredicateValueDefFontStylenull`)) value : anyOf(:class:`FontStyle`, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalAxisProperty<(FontStyle|null)>'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ConditionalAxisPropertyFontStylenull, self).__init__(condition=condition, value=value, **kwds) class ConditionalAxisPropertyFontWeightnull(VegaLiteSchema): """ConditionalAxisPropertyFontWeightnull schema wrapper Mapping(required=[condition, value]) Attributes ---------- condition : anyOf(:class:`ConditionalPredicateValueDefFontWeightnull`, List(:class:`ConditionalPredicateValueDefFontWeightnull`)) value : anyOf(:class:`FontWeight`, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalAxisProperty<(FontWeight|null)>'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ConditionalAxisPropertyFontWeightnull, self).__init__(condition=condition, value=value, **kwds) class ConditionalAxisPropertyTextBaselinenull(VegaLiteSchema): """ConditionalAxisPropertyTextBaselinenull schema wrapper Mapping(required=[condition, value]) Attributes ---------- condition : anyOf(:class:`ConditionalPredicateValueDefTextBaselinenull`, List(:class:`ConditionalPredicateValueDefTextBaselinenull`)) value : anyOf(:class:`TextBaseline`, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalAxisProperty<(TextBaseline|null)>'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ConditionalAxisPropertyTextBaselinenull, self).__init__(condition=condition, value=value, **kwds) class ConditionalAxisPropertynumbernull(VegaLiteSchema): """ConditionalAxisPropertynumbernull schema wrapper Mapping(required=[condition, value]) Attributes ---------- condition : anyOf(:class:`ConditionalPredicateValueDefnumbernull`, List(:class:`ConditionalPredicateValueDefnumbernull`)) value : anyOf(float, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalAxisProperty<(number|null)>'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ConditionalAxisPropertynumbernull, self).__init__(condition=condition, value=value, **kwds) class ConditionalAxisPropertystringnull(VegaLiteSchema): """ConditionalAxisPropertystringnull schema wrapper Mapping(required=[condition, value]) Attributes ---------- condition : anyOf(:class:`ConditionalPredicateStringValueDef`, List(:class:`ConditionalPredicateStringValueDef`)) value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalAxisProperty<(string|null)>'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ConditionalAxisPropertystringnull, self).__init__(condition=condition, value=value, **kwds) class ConditionalAxisString(VegaLiteSchema): """ConditionalAxisString schema wrapper Mapping(required=[condition, value]) Attributes ---------- condition : anyOf(:class:`ConditionalPredicateStringValueDef`, List(:class:`ConditionalPredicateStringValueDef`)) value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalAxisString'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ConditionalAxisString, self).__init__(condition=condition, value=value, **kwds) class ConditionalMarkPropFieldDef(VegaLiteSchema): """ConditionalMarkPropFieldDef schema wrapper anyOf(:class:`ConditionalPredicateMarkPropFieldDef`, :class:`ConditionalSelectionMarkPropFieldDef`) """ _schema = {'$ref': '#/definitions/ConditionalMarkPropFieldDef'} def __init__(self, *args, **kwds): super(ConditionalMarkPropFieldDef, self).__init__(*args, **kwds) class ConditionalMarkPropFieldDefTypeForShape(VegaLiteSchema): """ConditionalMarkPropFieldDefTypeForShape schema wrapper anyOf(:class:`ConditionalPredicateMarkPropFieldDefTypeForShape`, :class:`ConditionalSelectionMarkPropFieldDefTypeForShape`) """ _schema = {'$ref': '#/definitions/ConditionalMarkPropFieldDef'} def __init__(self, *args, **kwds): super(ConditionalMarkPropFieldDefTypeForShape, self).__init__(*args, **kwds) class ConditionalNumberValueDef(VegaLiteSchema): """ConditionalNumberValueDef schema wrapper anyOf(:class:`ConditionalPredicateNumberValueDef`, :class:`ConditionalSelectionNumberValueDef`) """ _schema = {'$ref': '#/definitions/ConditionalNumberValueDef'} def __init__(self, *args, **kwds): super(ConditionalNumberValueDef, self).__init__(*args, **kwds) class ConditionalPredicateMarkPropFieldDef(ConditionalMarkPropFieldDef): """ConditionalPredicateMarkPropFieldDef schema wrapper Mapping(required=[test, type]) Attributes ---------- test : :class:`PredicateComposition` Predicate for triggering the condition type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/ConditionalPredicate'} def __init__(self, test=Undefined, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(ConditionalPredicateMarkPropFieldDef, self).__init__(test=test, type=type, aggregate=aggregate, bin=bin, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class ConditionalPredicateMarkPropFieldDefTypeForShape(ConditionalMarkPropFieldDefTypeForShape): """ConditionalPredicateMarkPropFieldDefTypeForShape schema wrapper Mapping(required=[test, type]) Attributes ---------- test : :class:`PredicateComposition` Predicate for triggering the condition type : :class:`TypeForShape` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/ConditionalPredicate>'} def __init__(self, test=Undefined, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(ConditionalPredicateMarkPropFieldDefTypeForShape, self).__init__(test=test, type=type, aggregate=aggregate, bin=bin, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class ConditionalPredicateNumberValueDef(ConditionalNumberValueDef): """ConditionalPredicateNumberValueDef schema wrapper Mapping(required=[test, value]) Attributes ---------- test : :class:`PredicateComposition` Predicate for triggering the condition value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalPredicate'} def __init__(self, test=Undefined, value=Undefined, **kwds): super(ConditionalPredicateNumberValueDef, self).__init__(test=test, value=value, **kwds) class ConditionalPredicateValueDefAlignnull(VegaLiteSchema): """ConditionalPredicateValueDefAlignnull schema wrapper Mapping(required=[test, value]) Attributes ---------- test : :class:`PredicateComposition` Predicate for triggering the condition value : anyOf(:class:`Align`, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalPredicate>'} def __init__(self, test=Undefined, value=Undefined, **kwds): super(ConditionalPredicateValueDefAlignnull, self).__init__(test=test, value=value, **kwds) class ConditionalPredicateValueDefColornull(VegaLiteSchema): """ConditionalPredicateValueDefColornull schema wrapper Mapping(required=[test, value]) Attributes ---------- test : :class:`PredicateComposition` Predicate for triggering the condition value : anyOf(:class:`Color`, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalPredicate>'} def __init__(self, test=Undefined, value=Undefined, **kwds): super(ConditionalPredicateValueDefColornull, self).__init__(test=test, value=value, **kwds) class ConditionalPredicateValueDefFontStylenull(VegaLiteSchema): """ConditionalPredicateValueDefFontStylenull schema wrapper Mapping(required=[test, value]) Attributes ---------- test : :class:`PredicateComposition` Predicate for triggering the condition value : anyOf(:class:`FontStyle`, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalPredicate>'} def __init__(self, test=Undefined, value=Undefined, **kwds): super(ConditionalPredicateValueDefFontStylenull, self).__init__(test=test, value=value, **kwds) class ConditionalPredicateValueDefFontWeightnull(VegaLiteSchema): """ConditionalPredicateValueDefFontWeightnull schema wrapper Mapping(required=[test, value]) Attributes ---------- test : :class:`PredicateComposition` Predicate for triggering the condition value : anyOf(:class:`FontWeight`, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalPredicate>'} def __init__(self, test=Undefined, value=Undefined, **kwds): super(ConditionalPredicateValueDefFontWeightnull, self).__init__(test=test, value=value, **kwds) class ConditionalPredicateValueDefTextBaselinenull(VegaLiteSchema): """ConditionalPredicateValueDefTextBaselinenull schema wrapper Mapping(required=[test, value]) Attributes ---------- test : :class:`PredicateComposition` Predicate for triggering the condition value : anyOf(:class:`TextBaseline`, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalPredicate>'} def __init__(self, test=Undefined, value=Undefined, **kwds): super(ConditionalPredicateValueDefTextBaselinenull, self).__init__(test=test, value=value, **kwds) class ConditionalPredicateValueDefnumbernull(VegaLiteSchema): """ConditionalPredicateValueDefnumbernull schema wrapper Mapping(required=[test, value]) Attributes ---------- test : :class:`PredicateComposition` Predicate for triggering the condition value : anyOf(float, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalPredicate>'} def __init__(self, test=Undefined, value=Undefined, **kwds): super(ConditionalPredicateValueDefnumbernull, self).__init__(test=test, value=value, **kwds) class ConditionalSelectionMarkPropFieldDef(ConditionalMarkPropFieldDef): """ConditionalSelectionMarkPropFieldDef schema wrapper Mapping(required=[selection, type]) Attributes ---------- selection : :class:`SelectionComposition` A `selection name `__, or a series of `composed selections `__. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/ConditionalSelection'} def __init__(self, selection=Undefined, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(ConditionalSelectionMarkPropFieldDef, self).__init__(selection=selection, type=type, aggregate=aggregate, bin=bin, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class ConditionalSelectionMarkPropFieldDefTypeForShape(ConditionalMarkPropFieldDefTypeForShape): """ConditionalSelectionMarkPropFieldDefTypeForShape schema wrapper Mapping(required=[selection, type]) Attributes ---------- selection : :class:`SelectionComposition` A `selection name `__, or a series of `composed selections `__. type : :class:`TypeForShape` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/ConditionalSelection>'} def __init__(self, selection=Undefined, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(ConditionalSelectionMarkPropFieldDefTypeForShape, self).__init__(selection=selection, type=type, aggregate=aggregate, bin=bin, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class ConditionalSelectionNumberValueDef(ConditionalNumberValueDef): """ConditionalSelectionNumberValueDef schema wrapper Mapping(required=[selection, value]) Attributes ---------- selection : :class:`SelectionComposition` A `selection name `__, or a series of `composed selections `__. value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalSelection'} def __init__(self, selection=Undefined, value=Undefined, **kwds): super(ConditionalSelectionNumberValueDef, self).__init__(selection=selection, value=value, **kwds) class ConditionalStringFieldDef(VegaLiteSchema): """ConditionalStringFieldDef schema wrapper anyOf(:class:`ConditionalPredicateStringFieldDef`, :class:`ConditionalSelectionStringFieldDef`) """ _schema = {'$ref': '#/definitions/ConditionalStringFieldDef'} def __init__(self, *args, **kwds): super(ConditionalStringFieldDef, self).__init__(*args, **kwds) class ConditionalPredicateStringFieldDef(ConditionalStringFieldDef): """ConditionalPredicateStringFieldDef schema wrapper Mapping(required=[test, type]) Attributes ---------- test : :class:`PredicateComposition` Predicate for triggering the condition type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : anyOf(string, Mapping(required=[])) When used with the default ``"number"`` and ``"time"`` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. When used with a `custom "formatType" `__ that takes ``datum.value`` and format parameter as input), this property represents the format parameter. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : string The format type for labels ( ``"number"`` or ``"time"`` or a `registered custom format type `__ ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. labelExpr : string `Vega expression `__ for customizing labels text. **Note:** The label text and value can be assessed via the ``label`` and ``value`` properties of the axis's backing ``datum`` object. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/ConditionalPredicate'} def __init__(self, test=Undefined, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, format=Undefined, formatType=Undefined, labelExpr=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(ConditionalPredicateStringFieldDef, self).__init__(test=test, type=type, aggregate=aggregate, bin=bin, field=field, format=format, formatType=formatType, labelExpr=labelExpr, timeUnit=timeUnit, title=title, **kwds) class ConditionalSelectionStringFieldDef(ConditionalStringFieldDef): """ConditionalSelectionStringFieldDef schema wrapper Mapping(required=[selection, type]) Attributes ---------- selection : :class:`SelectionComposition` A `selection name `__, or a series of `composed selections `__. type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : anyOf(string, Mapping(required=[])) When used with the default ``"number"`` and ``"time"`` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. When used with a `custom "formatType" `__ that takes ``datum.value`` and format parameter as input), this property represents the format parameter. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : string The format type for labels ( ``"number"`` or ``"time"`` or a `registered custom format type `__ ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. labelExpr : string `Vega expression `__ for customizing labels text. **Note:** The label text and value can be assessed via the ``label`` and ``value`` properties of the axis's backing ``datum`` object. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/ConditionalSelection'} def __init__(self, selection=Undefined, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, format=Undefined, formatType=Undefined, labelExpr=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(ConditionalSelectionStringFieldDef, self).__init__(selection=selection, type=type, aggregate=aggregate, bin=bin, field=field, format=format, formatType=formatType, labelExpr=labelExpr, timeUnit=timeUnit, title=title, **kwds) class Config(VegaLiteSchema): """Config schema wrapper Mapping(required=[]) Attributes ---------- area : :class:`AreaConfig` Area-Specific Config autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`) How the visualization size should be determined. If a string, should be one of ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify parameters for content sizing and automatic resizing. **Default value** : ``pad`` axis : :class:`AxisConfig` Axis configuration, which determines default properties for all ``x`` and ``y`` `axes `__. For a full list of axis configuration options, please see the `corresponding section of the axis documentation `__. axisBand : :class:`AxisConfig` Config for axes with "band" scales. axisBottom : :class:`AxisConfig` Config for x-axis along the bottom edge of the chart. axisDiscrete : :class:`AxisConfig` Config for axes with "point" or "band" scales. axisLeft : :class:`AxisConfig` Config for y-axis along the left edge of the chart. axisPoint : :class:`AxisConfig` Config for axes with "point" scales. axisQuantitative : :class:`AxisConfig` Config for quantitative axes. axisRight : :class:`AxisConfig` Config for y-axis along the right edge of the chart. axisTemporal : :class:`AxisConfig` Config for temporal axes. axisTop : :class:`AxisConfig` Config for x-axis along the top edge of the chart. axisX : :class:`AxisConfig` X-axis specific config. axisXBand : :class:`AxisConfig` Config for x-axes with "band" scales. axisXDiscrete : :class:`AxisConfig` Config for x-axes with "point" or "band" scales. axisXPoint : :class:`AxisConfig` Config for x-axes with "point" scales. axisXQuantitative : :class:`AxisConfig` Config for x-quantitative axes. axisXTemporal : :class:`AxisConfig` Config for x-temporal axes. axisY : :class:`AxisConfig` Y-axis specific config. axisYBand : :class:`AxisConfig` Config for y-axes with "band" scales. axisYDiscrete : :class:`AxisConfig` Config for y-axes with "point" or "band" scales. axisYPoint : :class:`AxisConfig` Config for y-axes with "point" scales. axisYQuantitative : :class:`AxisConfig` Config for y-quantitative axes. axisYTemporal : :class:`AxisConfig` Config for y-temporal axes. background : :class:`Color` CSS color property to use as the background of the entire view. **Default value:** ``"white"`` bar : :class:`BarConfig` Bar-Specific Config boxplot : :class:`BoxPlotConfig` Box Config circle : :class:`MarkConfig` Circle-Specific Config concat : :class:`CompositionConfig` Default configuration for all concatenation and repeat view composition operators ( ``concat``, ``hconcat``, ``vconcat``, and ``repeat`` ) countTitle : string Default axis and legend title for count fields. **Default value:** ``'Count of Records``. errorband : :class:`ErrorBandConfig` ErrorBand Config errorbar : :class:`ErrorBarConfig` ErrorBar Config facet : :class:`CompositionConfig` Default configuration for the ``facet`` view composition operator fieldTitle : enum('verbal', 'functional', 'plain') Defines how Vega-Lite generates title for fields. There are three possible styles: * ``"verbal"`` (Default) - displays function in a verbal style (e.g., "Sum of field", "Year-month of date", "field (binned)"). * ``"function"`` - displays function using parentheses and capitalized texts (e.g., "SUM(field)", "YEARMONTH(date)", "BIN(field)"). * ``"plain"`` - displays only the field name without functions (e.g., "field", "date", "field"). font : string Default font for all text marks, titles, and labels. geoshape : :class:`MarkConfig` Geoshape-Specific Config header : :class:`HeaderConfig` Header configuration, which determines default properties for all `headers `__. For a full list of header configuration options, please see the `corresponding section of in the header documentation `__. headerColumn : :class:`HeaderConfig` Header configuration, which determines default properties for column `headers `__. For a full list of header configuration options, please see the `corresponding section of in the header documentation `__. headerFacet : :class:`HeaderConfig` Header configuration, which determines default properties for non-row/column facet `headers `__. For a full list of header configuration options, please see the `corresponding section of in the header documentation `__. headerRow : :class:`HeaderConfig` Header configuration, which determines default properties for row `headers `__. For a full list of header configuration options, please see the `corresponding section of in the header documentation `__. image : :class:`RectConfig` Image-specific Config legend : :class:`LegendConfig` Legend configuration, which determines default properties for all `legends `__. For a full list of legend configuration options, please see the `corresponding section of in the legend documentation `__. line : :class:`LineConfig` Line-Specific Config lineBreak : string A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property provides a global default for text marks, which is overridden by mark or style config settings, and by the lineBreak mark encoding channel. If signal-valued, either string or regular expression (regexp) values are valid. mark : :class:`MarkConfig` Mark Config numberFormat : string D3 Number format for guide labels and text marks. For example ``"s"`` for SI units. Use `D3's number format pattern `__. padding : :class:`Padding` The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5, "bottom": 5}`` to specify padding for each side of the visualization. **Default value** : ``5`` point : :class:`MarkConfig` Point-Specific Config projection : :class:`ProjectionConfig` Projection configuration, which determines default properties for all `projections `__. For a full list of projection configuration options, please see the `corresponding section of the projection documentation `__. range : :class:`RangeConfig` An object hash that defines default range arrays or schemes for using with scales. For a full list of scale range configuration options, please see the `corresponding section of the scale documentation `__. rect : :class:`RectConfig` Rect-Specific Config rule : :class:`MarkConfig` Rule-Specific Config scale : :class:`ScaleConfig` Scale configuration determines default properties for all `scales `__. For a full list of scale configuration options, please see the `corresponding section of the scale documentation `__. selection : :class:`SelectionConfig` An object hash for defining default properties for each type of selections. square : :class:`MarkConfig` Square-Specific Config style : :class:`StyleConfigIndex` An object hash that defines key-value mappings to determine default properties for marks with a given `style `__. The keys represent styles names; the values have to be valid `mark configuration objects `__. text : :class:`MarkConfig` Text-Specific Config tick : :class:`TickConfig` Tick-Specific Config timeFormat : string Default time format for raw time values (without time units) in text marks, legend labels and header labels. **Default value:** ``"%b %d, %Y"`` **Note:** Axes automatically determine the format for each label automatically so this config does not affect axes. title : :class:`TitleConfig` Title configuration, which determines default properties for all `titles `__. For a full list of title configuration options, please see the `corresponding section of the title documentation `__. trail : :class:`LineConfig` Trail-Specific Config view : :class:`ViewConfig` Default properties for `single view plots `__. """ _schema = {'$ref': '#/definitions/Config'} def __init__(self, area=Undefined, autosize=Undefined, axis=Undefined, axisBand=Undefined, axisBottom=Undefined, axisDiscrete=Undefined, axisLeft=Undefined, axisPoint=Undefined, axisQuantitative=Undefined, axisRight=Undefined, axisTemporal=Undefined, axisTop=Undefined, axisX=Undefined, axisXBand=Undefined, axisXDiscrete=Undefined, axisXPoint=Undefined, axisXQuantitative=Undefined, axisXTemporal=Undefined, axisY=Undefined, axisYBand=Undefined, axisYDiscrete=Undefined, axisYPoint=Undefined, axisYQuantitative=Undefined, axisYTemporal=Undefined, background=Undefined, bar=Undefined, boxplot=Undefined, circle=Undefined, concat=Undefined, countTitle=Undefined, errorband=Undefined, errorbar=Undefined, facet=Undefined, fieldTitle=Undefined, font=Undefined, geoshape=Undefined, header=Undefined, headerColumn=Undefined, headerFacet=Undefined, headerRow=Undefined, image=Undefined, legend=Undefined, line=Undefined, lineBreak=Undefined, mark=Undefined, numberFormat=Undefined, padding=Undefined, point=Undefined, projection=Undefined, range=Undefined, rect=Undefined, rule=Undefined, scale=Undefined, selection=Undefined, square=Undefined, style=Undefined, text=Undefined, tick=Undefined, timeFormat=Undefined, title=Undefined, trail=Undefined, view=Undefined, **kwds): super(Config, self).__init__(area=area, autosize=autosize, axis=axis, axisBand=axisBand, axisBottom=axisBottom, axisDiscrete=axisDiscrete, axisLeft=axisLeft, axisPoint=axisPoint, axisQuantitative=axisQuantitative, axisRight=axisRight, axisTemporal=axisTemporal, axisTop=axisTop, axisX=axisX, axisXBand=axisXBand, axisXDiscrete=axisXDiscrete, axisXPoint=axisXPoint, axisXQuantitative=axisXQuantitative, axisXTemporal=axisXTemporal, axisY=axisY, axisYBand=axisYBand, axisYDiscrete=axisYDiscrete, axisYPoint=axisYPoint, axisYQuantitative=axisYQuantitative, axisYTemporal=axisYTemporal, background=background, bar=bar, boxplot=boxplot, circle=circle, concat=concat, countTitle=countTitle, errorband=errorband, errorbar=errorbar, facet=facet, fieldTitle=fieldTitle, font=font, geoshape=geoshape, header=header, headerColumn=headerColumn, headerFacet=headerFacet, headerRow=headerRow, image=image, legend=legend, line=line, lineBreak=lineBreak, mark=mark, numberFormat=numberFormat, padding=padding, point=point, projection=projection, range=range, rect=rect, rule=rule, scale=scale, selection=selection, square=square, style=style, text=text, tick=tick, timeFormat=timeFormat, title=title, trail=trail, view=view, **kwds) class Cursor(VegaLiteSchema): """Cursor schema wrapper enum('auto', 'default', 'none', 'context-menu', 'help', 'pointer', 'progress', 'wait', 'cell', 'crosshair', 'text', 'vertical-text', 'alias', 'copy', 'move', 'no-drop', 'not-allowed', 'e-resize', 'n-resize', 'ne-resize', 'nw-resize', 's-resize', 'se-resize', 'sw-resize', 'w-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'col-resize', 'row-resize', 'all-scroll', 'zoom-in', 'zoom-out', 'grab', 'grabbing') """ _schema = {'$ref': '#/definitions/Cursor'} def __init__(self, *args): super(Cursor, self).__init__(*args) class Cyclical(ColorScheme): """Cyclical schema wrapper enum('rainbow', 'sinebow') """ _schema = {'$ref': '#/definitions/Cyclical'} def __init__(self, *args): super(Cyclical, self).__init__(*args) class Data(VegaLiteSchema): """Data schema wrapper anyOf(:class:`DataSource`, :class:`Generator`) """ _schema = {'$ref': '#/definitions/Data'} def __init__(self, *args, **kwds): super(Data, self).__init__(*args, **kwds) class DataFormat(VegaLiteSchema): """DataFormat schema wrapper anyOf(:class:`CsvDataFormat`, :class:`DsvDataFormat`, :class:`JsonDataFormat`, :class:`TopoDataFormat`) """ _schema = {'$ref': '#/definitions/DataFormat'} def __init__(self, *args, **kwds): super(DataFormat, self).__init__(*args, **kwds) class CsvDataFormat(DataFormat): """CsvDataFormat schema wrapper Mapping(required=[]) Attributes ---------- parse : anyOf(:class:`Parse`, None) If set to ``null``, disable type inference based on the spec and only use type inference based on the data. Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of ``"number"``, ``"boolean"``, ``"date"``, or null (do not parse the field)). For example, ``"parse": {"modified_on": "date"}`` parses the ``modified_on`` field in each input record a Date value. For ``"date"``, we parse data based using Javascript's `Date.parse() `__. For Specific date formats can be provided (e.g., ``{foo: "date:'%m%d%Y'"}`` ), using the `d3-time-format syntax `__. UTC date format parsing is supported similarly (e.g., ``{foo: "utc:'%m%d%Y'"}`` ). See more about `UTC time `__ type : enum('csv', 'tsv') Type of input data: ``"json"``, ``"csv"``, ``"tsv"``, ``"dsv"``. **Default value:** The default format type is determined by the extension of the file URL. If no extension is detected, ``"json"`` will be used by default. """ _schema = {'$ref': '#/definitions/CsvDataFormat'} def __init__(self, parse=Undefined, type=Undefined, **kwds): super(CsvDataFormat, self).__init__(parse=parse, type=type, **kwds) class DataSource(Data): """DataSource schema wrapper anyOf(:class:`UrlData`, :class:`InlineData`, :class:`NamedData`) """ _schema = {'$ref': '#/definitions/DataSource'} def __init__(self, *args, **kwds): super(DataSource, self).__init__(*args, **kwds) class Datasets(VegaLiteSchema): """Datasets schema wrapper Mapping(required=[]) """ _schema = {'$ref': '#/definitions/Datasets'} def __init__(self, **kwds): super(Datasets, self).__init__(**kwds) class Day(VegaLiteSchema): """Day schema wrapper float """ _schema = {'$ref': '#/definitions/Day'} def __init__(self, *args): super(Day, self).__init__(*args) class DictInlineDataset(VegaLiteSchema): """DictInlineDataset schema wrapper Mapping(required=[]) """ _schema = {'$ref': '#/definitions/Dict'} def __init__(self, **kwds): super(DictInlineDataset, self).__init__(**kwds) class DictSelectionInit(VegaLiteSchema): """DictSelectionInit schema wrapper Mapping(required=[]) """ _schema = {'$ref': '#/definitions/Dict'} def __init__(self, **kwds): super(DictSelectionInit, self).__init__(**kwds) class DictSelectionInitInterval(VegaLiteSchema): """DictSelectionInitInterval schema wrapper Mapping(required=[]) """ _schema = {'$ref': '#/definitions/Dict'} def __init__(self, **kwds): super(DictSelectionInitInterval, self).__init__(**kwds) class Diverging(ColorScheme): """Diverging schema wrapper enum('blueorange', 'blueorange-3', 'blueorange-4', 'blueorange-5', 'blueorange-6', 'blueorange-7', 'blueorange-8', 'blueorange-9', 'blueorange-10', 'blueorange-11', 'brownbluegreen', 'brownbluegreen-3', 'brownbluegreen-4', 'brownbluegreen-5', 'brownbluegreen-6', 'brownbluegreen-7', 'brownbluegreen-8', 'brownbluegreen-9', 'brownbluegreen-10', 'brownbluegreen-11', 'purplegreen', 'purplegreen-3', 'purplegreen-4', 'purplegreen-5', 'purplegreen-6', 'purplegreen-7', 'purplegreen-8', 'purplegreen-9', 'purplegreen-10', 'purplegreen-11', 'pinkyellowgreen', 'pinkyellowgreen-3', 'pinkyellowgreen-4', 'pinkyellowgreen-5', 'pinkyellowgreen-6', 'pinkyellowgreen-7', 'pinkyellowgreen-8', 'pinkyellowgreen-9', 'pinkyellowgreen-10', 'pinkyellowgreen-11', 'purpleorange', 'purpleorange-3', 'purpleorange-4', 'purpleorange-5', 'purpleorange-6', 'purpleorange-7', 'purpleorange-8', 'purpleorange-9', 'purpleorange-10', 'purpleorange-11', 'redblue', 'redblue-3', 'redblue-4', 'redblue-5', 'redblue-6', 'redblue-7', 'redblue-8', 'redblue-9', 'redblue-10', 'redblue-11', 'redgrey', 'redgrey-3', 'redgrey-4', 'redgrey-5', 'redgrey-6', 'redgrey-7', 'redgrey-8', 'redgrey-9', 'redgrey-10', 'redgrey-11', 'redyellowblue', 'redyellowblue-3', 'redyellowblue-4', 'redyellowblue-5', 'redyellowblue-6', 'redyellowblue-7', 'redyellowblue-8', 'redyellowblue-9', 'redyellowblue-10', 'redyellowblue-11', 'redyellowgreen', 'redyellowgreen-3', 'redyellowgreen-4', 'redyellowgreen-5', 'redyellowgreen-6', 'redyellowgreen-7', 'redyellowgreen-8', 'redyellowgreen-9', 'redyellowgreen-10', 'redyellowgreen-11', 'spectral', 'spectral-3', 'spectral-4', 'spectral-5', 'spectral-6', 'spectral-7', 'spectral-8', 'spectral-9', 'spectral-10', 'spectral-11') """ _schema = {'$ref': '#/definitions/Diverging'} def __init__(self, *args): super(Diverging, self).__init__(*args) class DomainUnionWith(VegaLiteSchema): """DomainUnionWith schema wrapper Mapping(required=[unionWith]) Attributes ---------- unionWith : anyOf(List(float), List(string), List(boolean), List(:class:`DateTime`)) Customized domain values to be union with the field's values. 1) ``domain`` for *quantitative* fields can take one of the following forms: * a two-element array with minimum and maximum values. * an array with more than two entries, for `Piecewise quantitative scales `__. (Alternatively, the ``domainMid`` property can be set for a diverging scale.) * a string value ``"unaggregated"``, if the input field is aggregated, to indicate that the domain should include the raw data values prior to the aggregation. 2) ``domain`` for *temporal* fields can be a two-element array minimum and maximum values, in the form of either timestamps or the `DateTime definition objects `__. 3) ``domain`` for *ordinal* and *nominal* fields can be an array that lists valid input values. """ _schema = {'$ref': '#/definitions/DomainUnionWith'} def __init__(self, unionWith=Undefined, **kwds): super(DomainUnionWith, self).__init__(unionWith=unionWith, **kwds) class DsvDataFormat(DataFormat): """DsvDataFormat schema wrapper Mapping(required=[delimiter]) Attributes ---------- delimiter : string The delimiter between records. The delimiter must be a single character (i.e., a single 16-bit code unit); so, ASCII delimiters are fine, but emoji delimiters are not. parse : anyOf(:class:`Parse`, None) If set to ``null``, disable type inference based on the spec and only use type inference based on the data. Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of ``"number"``, ``"boolean"``, ``"date"``, or null (do not parse the field)). For example, ``"parse": {"modified_on": "date"}`` parses the ``modified_on`` field in each input record a Date value. For ``"date"``, we parse data based using Javascript's `Date.parse() `__. For Specific date formats can be provided (e.g., ``{foo: "date:'%m%d%Y'"}`` ), using the `d3-time-format syntax `__. UTC date format parsing is supported similarly (e.g., ``{foo: "utc:'%m%d%Y'"}`` ). See more about `UTC time `__ type : enum('dsv') Type of input data: ``"json"``, ``"csv"``, ``"tsv"``, ``"dsv"``. **Default value:** The default format type is determined by the extension of the file URL. If no extension is detected, ``"json"`` will be used by default. """ _schema = {'$ref': '#/definitions/DsvDataFormat'} def __init__(self, delimiter=Undefined, parse=Undefined, type=Undefined, **kwds): super(DsvDataFormat, self).__init__(delimiter=delimiter, parse=parse, type=type, **kwds) class Element(VegaLiteSchema): """Element schema wrapper string """ _schema = {'$ref': '#/definitions/Element'} def __init__(self, *args): super(Element, self).__init__(*args) class Encoding(VegaLiteSchema): """Encoding schema wrapper Mapping(required=[]) Attributes ---------- color : anyOf(:class:`ColorGradientFieldDefWithCondition`, :class:`ColorGradientValueWithCondition`) Color of the marks – either fill or stroke color based on the ``filled`` property of mark definition. By default, ``color`` represents fill color for ``"area"``, ``"bar"``, ``"tick"``, ``"text"``, ``"trail"``, ``"circle"``, and ``"square"`` / stroke color for ``"line"`` and ``"point"``. **Default value:** If undefined, the default color depends on `mark config `__ 's ``color`` property. *Note:* 1) For fine-grained control over both fill and stroke colors of the marks, please use the ``fill`` and ``stroke`` channels. The ``fill`` or ``stroke`` encodings have higher precedence than ``color``, thus may override the ``color`` encoding if conflicting encodings are specified. 2) See the scale documentation for more information about customizing `color scheme `__. detail : anyOf(:class:`FieldDefWithoutScale`, List(:class:`FieldDefWithoutScale`)) Additional levels of detail for grouping data in aggregate views and in line, trail, and area marks without mapping data to a specific visual channel. fill : anyOf(:class:`ColorGradientFieldDefWithCondition`, :class:`ColorGradientValueWithCondition`) Fill color of the marks. **Default value:** If undefined, the default color depends on `mark config `__ 's ``color`` property. *Note:* The ``fill`` encoding has higher precedence than ``color``, thus may override the ``color`` encoding if conflicting encodings are specified. fillOpacity : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueWithCondition`) Fill opacity of the marks. **Default value:** If undefined, the default opacity depends on `mark config `__ 's ``fillOpacity`` property. href : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueWithCondition`) A URL to load upon mouse click. key : :class:`FieldDefWithoutScale` A data field to use as a unique key for data binding. When a visualization’s data is updated, the key value will be used to match data elements to existing mark instances. Use a key channel to enable object constancy for transitions over dynamic data. latitude : anyOf(:class:`LatLongFieldDef`, :class:`NumberValueDef`) Latitude position of geographically projected marks. latitude2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Latitude-2 position for geographically projected ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. longitude : anyOf(:class:`LatLongFieldDef`, :class:`NumberValueDef`) Longitude position of geographically projected marks. longitude2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Longitude-2 position for geographically projected ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. opacity : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueWithCondition`) Opacity of the marks. **Default value:** If undefined, the default opacity depends on `mark config `__ 's ``opacity`` property. order : anyOf(:class:`OrderFieldDef`, List(:class:`OrderFieldDef`), :class:`NumberValueDef`) Order of the marks. * For stacked marks, this ``order`` channel encodes `stack order `__. * For line and trail marks, this ``order`` channel encodes order of data points in the lines. This can be useful for creating `a connected scatterplot `__. Setting ``order`` to ``{"value": null}`` makes the line marks use the original order in the data sources. * Otherwise, this ``order`` channel encodes layer order of the marks. **Note** : In aggregate plots, ``order`` field should be ``aggregate`` d to avoid creating additional aggregation grouping. shape : anyOf(:class:`ShapeFieldDefWithCondition`, :class:`ShapeValueWithCondition`) Shape of the mark. #. For ``point`` marks the supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) #. For ``geoshape`` marks it should be a field definition of the geojson data **Default value:** If undefined, the default shape depends on `mark config `__ 's ``shape`` property. ( ``"circle"`` if unset.) size : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueWithCondition`) Size of the mark. * For ``"point"``, ``"square"`` and ``"circle"``, – the symbol size, or pixel area of the mark. * For ``"bar"`` and ``"tick"`` – the bar and tick's size. * For ``"text"`` – the text's font size. * Size is unsupported for ``"line"``, ``"area"``, and ``"rect"``. (Use ``"trail"`` instead of line with varying size) stroke : anyOf(:class:`ColorGradientFieldDefWithCondition`, :class:`ColorGradientValueWithCondition`) Stroke color of the marks. **Default value:** If undefined, the default color depends on `mark config `__ 's ``color`` property. *Note:* The ``stroke`` encoding has higher precedence than ``color``, thus may override the ``color`` encoding if conflicting encodings are specified. strokeDash : anyOf(:class:`NumericArrayFieldDefWithCondition`, :class:`NumericArrayValueDefWithCondition`) Stroke dash of the marks. **Default value:** ``[1,0]`` (No dash). strokeOpacity : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueWithCondition`) Stroke opacity of the marks. **Default value:** If undefined, the default opacity depends on `mark config `__ 's ``strokeOpacity`` property. strokeWidth : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueWithCondition`) Stroke width of the marks. **Default value:** If undefined, the default stroke width depends on `mark config `__ 's ``strokeWidth`` property. text : anyOf(:class:`TextFieldDefWithCondition`, :class:`TextValueWithCondition`) Text of the ``text`` mark. tooltip : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueWithCondition`, List(:class:`StringFieldDef`), None) The tooltip text to show upon mouse hover. Specifying ``tooltip`` encoding overrides `the tooltip property in the mark definition `__. See the `tooltip `__ documentation for a detailed discussion about tooltip in Vega-Lite. url : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueWithCondition`) The URL of an image mark. x : anyOf(:class:`PositionFieldDef`, :class:`XValueDef`) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(:class:`SecondaryFieldDef`, :class:`XValueDef`) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. xError : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Error value of x coordinates for error specified ``"errorbar"`` and ``"errorband"``. xError2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Secondary error value of x coordinates for error specified ``"errorbar"`` and ``"errorband"``. y : anyOf(:class:`PositionFieldDef`, :class:`YValueDef`) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(:class:`SecondaryFieldDef`, :class:`YValueDef`) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. yError : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Error value of y coordinates for error specified ``"errorbar"`` and ``"errorband"``. yError2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Secondary error value of y coordinates for error specified ``"errorbar"`` and ``"errorband"``. """ _schema = {'$ref': '#/definitions/Encoding'} def __init__(self, color=Undefined, detail=Undefined, fill=Undefined, fillOpacity=Undefined, href=Undefined, key=Undefined, latitude=Undefined, latitude2=Undefined, longitude=Undefined, longitude2=Undefined, opacity=Undefined, order=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeDash=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, text=Undefined, tooltip=Undefined, url=Undefined, x=Undefined, x2=Undefined, xError=Undefined, xError2=Undefined, y=Undefined, y2=Undefined, yError=Undefined, yError2=Undefined, **kwds): super(Encoding, self).__init__(color=color, detail=detail, fill=fill, fillOpacity=fillOpacity, href=href, key=key, latitude=latitude, latitude2=latitude2, longitude=longitude, longitude2=longitude2, opacity=opacity, order=order, shape=shape, size=size, stroke=stroke, strokeDash=strokeDash, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, text=text, tooltip=tooltip, url=url, x=x, x2=x2, xError=xError, xError2=xError2, y=y, y2=y2, yError=yError, yError2=yError2, **kwds) class EncodingSortFieldFieldName(VegaLiteSchema): """EncodingSortFieldFieldName schema wrapper Mapping(required=[]) A sort definition for sorting a discrete scale in an encoding field definition. Attributes ---------- field : :class:`FieldName` The data `field `__ to sort by. **Default value:** If unspecified, defaults to the field specified in the outer data reference. op : :class:`NonArgAggregateOp` An `aggregate operation `__ to perform on the field prior to sorting (e.g., ``"count"``, ``"mean"`` and ``"median"`` ). An aggregation is required when there are multiple values of the sort field for each encoded data field. The input data objects will be aggregated, grouped by the encoded data field. For a full list of operations, please see the documentation for `aggregate `__. **Default value:** ``"sum"`` for stacked plots. Otherwise, ``"min"``. order : anyOf(:class:`SortOrder`, None) The sort order. One of ``"ascending"`` (default), ``"descending"``, or ``null`` (no not sort). """ _schema = {'$ref': '#/definitions/EncodingSortField'} def __init__(self, field=Undefined, op=Undefined, order=Undefined, **kwds): super(EncodingSortFieldFieldName, self).__init__(field=field, op=op, order=order, **kwds) class ErrorBand(CompositeMark): """ErrorBand schema wrapper enum('errorband') """ _schema = {'$ref': '#/definitions/ErrorBand'} def __init__(self, *args): super(ErrorBand, self).__init__(*args) class ErrorBandConfig(VegaLiteSchema): """ErrorBandConfig schema wrapper Mapping(required=[]) Attributes ---------- band : anyOf(boolean, :class:`MarkConfig`) borders : anyOf(boolean, :class:`MarkConfig`) extent : :class:`ErrorBarExtent` The extent of the band. Available options include: * ``"ci"`` : Extend the band to the confidence interval of the mean. * ``"stderr"`` : The size of band are set to the value of standard error, extending from the mean. * ``"stdev"`` : The size of band are set to the value of standard deviation, extending from the mean. * ``"iqr"`` : Extend the band to the q1 and q3. **Default value:** ``"stderr"``. interpolate : :class:`Interpolate` The line interpolation method for the error band. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values. * ``"step-before"`` : a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value. * ``"step-after"`` : a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. tension : float The tension parameter for the interpolation type of the error band. """ _schema = {'$ref': '#/definitions/ErrorBandConfig'} def __init__(self, band=Undefined, borders=Undefined, extent=Undefined, interpolate=Undefined, tension=Undefined, **kwds): super(ErrorBandConfig, self).__init__(band=band, borders=borders, extent=extent, interpolate=interpolate, tension=tension, **kwds) class ErrorBandDef(CompositeMarkDef): """ErrorBandDef schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`ErrorBand` The mark type. This could a primitive mark type (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"geoshape"``, ``"rule"``, and ``"text"`` ) or a composite mark type ( ``"boxplot"``, ``"errorband"``, ``"errorbar"`` ). band : anyOf(boolean, :class:`MarkConfig`) borders : anyOf(boolean, :class:`MarkConfig`) clip : boolean Whether a composite mark be clipped to the enclosing group’s width and height. color : anyOf(:class:`Color`, :class:`Gradient`) Default color. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** * This property cannot be used in a `style config `__. * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and will override ``color``. extent : :class:`ErrorBarExtent` The extent of the band. Available options include: * ``"ci"`` : Extend the band to the confidence interval of the mean. * ``"stderr"`` : The size of band are set to the value of standard error, extending from the mean. * ``"stdev"`` : The size of band are set to the value of standard deviation, extending from the mean. * ``"iqr"`` : Extend the band to the q1 and q3. **Default value:** ``"stderr"``. interpolate : :class:`Interpolate` The line interpolation method for the error band. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values. * ``"step-before"`` : a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value. * ``"step-after"`` : a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. opacity : float The opacity (value between [0,1]) of the mark. orient : :class:`Orientation` Orientation of the error band. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined. tension : float The tension parameter for the interpolation type of the error band. """ _schema = {'$ref': '#/definitions/ErrorBandDef'} def __init__(self, type=Undefined, band=Undefined, borders=Undefined, clip=Undefined, color=Undefined, extent=Undefined, interpolate=Undefined, opacity=Undefined, orient=Undefined, tension=Undefined, **kwds): super(ErrorBandDef, self).__init__(type=type, band=band, borders=borders, clip=clip, color=color, extent=extent, interpolate=interpolate, opacity=opacity, orient=orient, tension=tension, **kwds) class ErrorBar(CompositeMark): """ErrorBar schema wrapper enum('errorbar') """ _schema = {'$ref': '#/definitions/ErrorBar'} def __init__(self, *args): super(ErrorBar, self).__init__(*args) class ErrorBarConfig(VegaLiteSchema): """ErrorBarConfig schema wrapper Mapping(required=[]) Attributes ---------- extent : :class:`ErrorBarExtent` The extent of the rule. Available options include: * ``"ci"`` : Extend the rule to the confidence interval of the mean. * ``"stderr"`` : The size of rule are set to the value of standard error, extending from the mean. * ``"stdev"`` : The size of rule are set to the value of standard deviation, extending from the mean. * ``"iqr"`` : Extend the rule to the q1 and q3. **Default value:** ``"stderr"``. rule : anyOf(boolean, :class:`MarkConfig`) ticks : anyOf(boolean, :class:`MarkConfig`) """ _schema = {'$ref': '#/definitions/ErrorBarConfig'} def __init__(self, extent=Undefined, rule=Undefined, ticks=Undefined, **kwds): super(ErrorBarConfig, self).__init__(extent=extent, rule=rule, ticks=ticks, **kwds) class ErrorBarDef(CompositeMarkDef): """ErrorBarDef schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`ErrorBar` The mark type. This could a primitive mark type (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"geoshape"``, ``"rule"``, and ``"text"`` ) or a composite mark type ( ``"boxplot"``, ``"errorband"``, ``"errorbar"`` ). clip : boolean Whether a composite mark be clipped to the enclosing group’s width and height. color : anyOf(:class:`Color`, :class:`Gradient`) Default color. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** * This property cannot be used in a `style config `__. * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and will override ``color``. extent : :class:`ErrorBarExtent` The extent of the rule. Available options include: * ``"ci"`` : Extend the rule to the confidence interval of the mean. * ``"stderr"`` : The size of rule are set to the value of standard error, extending from the mean. * ``"stdev"`` : The size of rule are set to the value of standard deviation, extending from the mean. * ``"iqr"`` : Extend the rule to the q1 and q3. **Default value:** ``"stderr"``. opacity : float The opacity (value between [0,1]) of the mark. orient : :class:`Orientation` Orientation of the error bar. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined. rule : anyOf(boolean, :class:`MarkConfig`) ticks : anyOf(boolean, :class:`MarkConfig`) """ _schema = {'$ref': '#/definitions/ErrorBarDef'} def __init__(self, type=Undefined, clip=Undefined, color=Undefined, extent=Undefined, opacity=Undefined, orient=Undefined, rule=Undefined, ticks=Undefined, **kwds): super(ErrorBarDef, self).__init__(type=type, clip=clip, color=color, extent=extent, opacity=opacity, orient=orient, rule=rule, ticks=ticks, **kwds) class ErrorBarExtent(VegaLiteSchema): """ErrorBarExtent schema wrapper enum('ci', 'iqr', 'stderr', 'stdev') """ _schema = {'$ref': '#/definitions/ErrorBarExtent'} def __init__(self, *args): super(ErrorBarExtent, self).__init__(*args) class Expr(VegaLiteSchema): """Expr schema wrapper string """ _schema = {'$ref': '#/definitions/Expr'} def __init__(self, *args): super(Expr, self).__init__(*args) class FacetEncodingFieldDef(VegaLiteSchema): """FacetEncodingFieldDef schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`) The alignment to apply to grid rows and columns. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. Alternatively, an object value of the form ``{"row": string, "column": string}`` can be used to supply different alignments for rows and columns. **Default value:** ``"all"``. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : anyOf(boolean, :class:`RowColboolean`) Boolean flag indicating if subviews should be centered relative to their respective rows or columns. An object value of the form ``{"row": boolean, "column": boolean}`` can be used to supply different centering values for rows and columns. **Default value:** ``false`` columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. header : :class:`Header` An object defining properties of a facet's header. sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None) Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. spacing : anyOf(float, :class:`RowColnumber`) The spacing in pixels between sub-views of the composition operator. An object of the form ``{"row": number, "column": number}`` can be used to set different spacing values for rows and columns. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/FacetEncodingFieldDef'} def __init__(self, type=Undefined, aggregate=Undefined, align=Undefined, bin=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, field=Undefined, header=Undefined, sort=Undefined, spacing=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(FacetEncodingFieldDef, self).__init__(type=type, aggregate=aggregate, align=align, bin=bin, bounds=bounds, center=center, columns=columns, field=field, header=header, sort=sort, spacing=spacing, timeUnit=timeUnit, title=title, **kwds) class FacetFieldDef(VegaLiteSchema): """FacetFieldDef schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. header : :class:`Header` An object defining properties of a facet's header. sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None) Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/FacetFieldDef'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, header=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(FacetFieldDef, self).__init__(type=type, aggregate=aggregate, bin=bin, field=field, header=header, sort=sort, timeUnit=timeUnit, title=title, **kwds) class FacetFieldDefFieldName(VegaLiteSchema): """FacetFieldDefFieldName schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`FieldName` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. header : :class:`Header` An object defining properties of a facet's header. sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortFieldFieldName`, None) Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/FacetFieldDef'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, header=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(FacetFieldDefFieldName, self).__init__(type=type, aggregate=aggregate, bin=bin, field=field, header=header, sort=sort, timeUnit=timeUnit, title=title, **kwds) class FacetMapping(VegaLiteSchema): """FacetMapping schema wrapper Mapping(required=[]) Attributes ---------- column : :class:`FacetFieldDef` A field definition for the horizontal facet of trellis plots. row : :class:`FacetFieldDef` A field definition for the vertical facet of trellis plots. """ _schema = {'$ref': '#/definitions/FacetMapping'} def __init__(self, column=Undefined, row=Undefined, **kwds): super(FacetMapping, self).__init__(column=column, row=row, **kwds) class FacetMappingFieldName(VegaLiteSchema): """FacetMappingFieldName schema wrapper Mapping(required=[]) Attributes ---------- column : :class:`FacetFieldDefFieldName` A field definition for the horizontal facet of trellis plots. row : :class:`FacetFieldDefFieldName` A field definition for the vertical facet of trellis plots. """ _schema = {'$ref': '#/definitions/FacetMapping'} def __init__(self, column=Undefined, row=Undefined, **kwds): super(FacetMappingFieldName, self).__init__(column=column, row=row, **kwds) class FacetedEncoding(VegaLiteSchema): """FacetedEncoding schema wrapper Mapping(required=[]) Attributes ---------- color : anyOf(:class:`ColorGradientFieldDefWithCondition`, :class:`ColorGradientValueWithCondition`) Color of the marks – either fill or stroke color based on the ``filled`` property of mark definition. By default, ``color`` represents fill color for ``"area"``, ``"bar"``, ``"tick"``, ``"text"``, ``"trail"``, ``"circle"``, and ``"square"`` / stroke color for ``"line"`` and ``"point"``. **Default value:** If undefined, the default color depends on `mark config `__ 's ``color`` property. *Note:* 1) For fine-grained control over both fill and stroke colors of the marks, please use the ``fill`` and ``stroke`` channels. The ``fill`` or ``stroke`` encodings have higher precedence than ``color``, thus may override the ``color`` encoding if conflicting encodings are specified. 2) See the scale documentation for more information about customizing `color scheme `__. column : :class:`RowColumnEncodingFieldDef` A field definition for the horizontal facet of trellis plots. detail : anyOf(:class:`FieldDefWithoutScale`, List(:class:`FieldDefWithoutScale`)) Additional levels of detail for grouping data in aggregate views and in line, trail, and area marks without mapping data to a specific visual channel. facet : :class:`FacetEncodingFieldDef` A field definition for the (flexible) facet of trellis plots. If either ``row`` or ``column`` is specified, this channel will be ignored. fill : anyOf(:class:`ColorGradientFieldDefWithCondition`, :class:`ColorGradientValueWithCondition`) Fill color of the marks. **Default value:** If undefined, the default color depends on `mark config `__ 's ``color`` property. *Note:* The ``fill`` encoding has higher precedence than ``color``, thus may override the ``color`` encoding if conflicting encodings are specified. fillOpacity : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueWithCondition`) Fill opacity of the marks. **Default value:** If undefined, the default opacity depends on `mark config `__ 's ``fillOpacity`` property. href : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueWithCondition`) A URL to load upon mouse click. key : :class:`FieldDefWithoutScale` A data field to use as a unique key for data binding. When a visualization’s data is updated, the key value will be used to match data elements to existing mark instances. Use a key channel to enable object constancy for transitions over dynamic data. latitude : anyOf(:class:`LatLongFieldDef`, :class:`NumberValueDef`) Latitude position of geographically projected marks. latitude2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Latitude-2 position for geographically projected ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. longitude : anyOf(:class:`LatLongFieldDef`, :class:`NumberValueDef`) Longitude position of geographically projected marks. longitude2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Longitude-2 position for geographically projected ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. opacity : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueWithCondition`) Opacity of the marks. **Default value:** If undefined, the default opacity depends on `mark config `__ 's ``opacity`` property. order : anyOf(:class:`OrderFieldDef`, List(:class:`OrderFieldDef`), :class:`NumberValueDef`) Order of the marks. * For stacked marks, this ``order`` channel encodes `stack order `__. * For line and trail marks, this ``order`` channel encodes order of data points in the lines. This can be useful for creating `a connected scatterplot `__. Setting ``order`` to ``{"value": null}`` makes the line marks use the original order in the data sources. * Otherwise, this ``order`` channel encodes layer order of the marks. **Note** : In aggregate plots, ``order`` field should be ``aggregate`` d to avoid creating additional aggregation grouping. row : :class:`RowColumnEncodingFieldDef` A field definition for the vertical facet of trellis plots. shape : anyOf(:class:`ShapeFieldDefWithCondition`, :class:`ShapeValueWithCondition`) Shape of the mark. #. For ``point`` marks the supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) #. For ``geoshape`` marks it should be a field definition of the geojson data **Default value:** If undefined, the default shape depends on `mark config `__ 's ``shape`` property. ( ``"circle"`` if unset.) size : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueWithCondition`) Size of the mark. * For ``"point"``, ``"square"`` and ``"circle"``, – the symbol size, or pixel area of the mark. * For ``"bar"`` and ``"tick"`` – the bar and tick's size. * For ``"text"`` – the text's font size. * Size is unsupported for ``"line"``, ``"area"``, and ``"rect"``. (Use ``"trail"`` instead of line with varying size) stroke : anyOf(:class:`ColorGradientFieldDefWithCondition`, :class:`ColorGradientValueWithCondition`) Stroke color of the marks. **Default value:** If undefined, the default color depends on `mark config `__ 's ``color`` property. *Note:* The ``stroke`` encoding has higher precedence than ``color``, thus may override the ``color`` encoding if conflicting encodings are specified. strokeDash : anyOf(:class:`NumericArrayFieldDefWithCondition`, :class:`NumericArrayValueDefWithCondition`) Stroke dash of the marks. **Default value:** ``[1,0]`` (No dash). strokeOpacity : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueWithCondition`) Stroke opacity of the marks. **Default value:** If undefined, the default opacity depends on `mark config `__ 's ``strokeOpacity`` property. strokeWidth : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueWithCondition`) Stroke width of the marks. **Default value:** If undefined, the default stroke width depends on `mark config `__ 's ``strokeWidth`` property. text : anyOf(:class:`TextFieldDefWithCondition`, :class:`TextValueWithCondition`) Text of the ``text`` mark. tooltip : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueWithCondition`, List(:class:`StringFieldDef`), None) The tooltip text to show upon mouse hover. Specifying ``tooltip`` encoding overrides `the tooltip property in the mark definition `__. See the `tooltip `__ documentation for a detailed discussion about tooltip in Vega-Lite. url : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueWithCondition`) The URL of an image mark. x : anyOf(:class:`PositionFieldDef`, :class:`XValueDef`) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(:class:`SecondaryFieldDef`, :class:`XValueDef`) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. xError : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Error value of x coordinates for error specified ``"errorbar"`` and ``"errorband"``. xError2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Secondary error value of x coordinates for error specified ``"errorbar"`` and ``"errorband"``. y : anyOf(:class:`PositionFieldDef`, :class:`YValueDef`) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(:class:`SecondaryFieldDef`, :class:`YValueDef`) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. yError : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Error value of y coordinates for error specified ``"errorbar"`` and ``"errorband"``. yError2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`) Secondary error value of y coordinates for error specified ``"errorbar"`` and ``"errorband"``. """ _schema = {'$ref': '#/definitions/FacetedEncoding'} def __init__(self, color=Undefined, column=Undefined, detail=Undefined, facet=Undefined, fill=Undefined, fillOpacity=Undefined, href=Undefined, key=Undefined, latitude=Undefined, latitude2=Undefined, longitude=Undefined, longitude2=Undefined, opacity=Undefined, order=Undefined, row=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeDash=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, text=Undefined, tooltip=Undefined, url=Undefined, x=Undefined, x2=Undefined, xError=Undefined, xError2=Undefined, y=Undefined, y2=Undefined, yError=Undefined, yError2=Undefined, **kwds): super(FacetedEncoding, self).__init__(color=color, column=column, detail=detail, facet=facet, fill=fill, fillOpacity=fillOpacity, href=href, key=key, latitude=latitude, latitude2=latitude2, longitude=longitude, longitude2=longitude2, opacity=opacity, order=order, row=row, shape=shape, size=size, stroke=stroke, strokeDash=strokeDash, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, text=text, tooltip=tooltip, url=url, x=x, x2=x2, xError=xError, xError2=xError2, y=y, y2=y2, yError=yError, yError2=yError2, **kwds) class Field(VegaLiteSchema): """Field schema wrapper anyOf(:class:`FieldName`, :class:`RepeatRef`) """ _schema = {'$ref': '#/definitions/Field'} def __init__(self, *args, **kwds): super(Field, self).__init__(*args, **kwds) class FieldDefWithConditionMarkPropFieldDefGradientstringnull(VegaLiteSchema): """FieldDefWithConditionMarkPropFieldDefGradientstringnull schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionGradientstringnull` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/FieldDefWithCondition'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(FieldDefWithConditionMarkPropFieldDefGradientstringnull, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class FieldDefWithConditionMarkPropFieldDefTypeForShapestringnull(VegaLiteSchema): """FieldDefWithConditionMarkPropFieldDefTypeForShapestringnull schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`TypeForShape` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionstringnull` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/FieldDefWithCondition,(string|null)>'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(FieldDefWithConditionMarkPropFieldDefTypeForShapestringnull, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class FieldDefWithConditionMarkPropFieldDefnumber(VegaLiteSchema): """FieldDefWithConditionMarkPropFieldDefnumber schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionnumber` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/FieldDefWithCondition'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(FieldDefWithConditionMarkPropFieldDefnumber, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class FieldDefWithConditionStringFieldDefText(VegaLiteSchema): """FieldDefWithConditionStringFieldDefText schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionText` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : anyOf(string, Mapping(required=[])) When used with the default ``"number"`` and ``"time"`` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. When used with a `custom "formatType" `__ that takes ``datum.value`` and format parameter as input), this property represents the format parameter. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : string The format type for labels ( ``"number"`` or ``"time"`` or a `registered custom format type `__ ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. labelExpr : string `Vega expression `__ for customizing labels text. **Note:** The label text and value can be assessed via the ``label`` and ``value`` properties of the axis's backing ``datum`` object. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/FieldDefWithCondition'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined, labelExpr=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(FieldDefWithConditionStringFieldDefText, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, format=format, formatType=formatType, labelExpr=labelExpr, timeUnit=timeUnit, title=title, **kwds) class FieldDefWithConditionStringFieldDefstring(VegaLiteSchema): """FieldDefWithConditionStringFieldDefstring schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionstring` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : anyOf(string, Mapping(required=[])) When used with the default ``"number"`` and ``"time"`` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. When used with a `custom "formatType" `__ that takes ``datum.value`` and format parameter as input), this property represents the format parameter. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : string The format type for labels ( ``"number"`` or ``"time"`` or a `registered custom format type `__ ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. labelExpr : string `Vega expression `__ for customizing labels text. **Note:** The label text and value can be assessed via the ``label`` and ``value`` properties of the axis's backing ``datum`` object. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/FieldDefWithCondition'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined, labelExpr=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(FieldDefWithConditionStringFieldDefstring, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, format=format, formatType=formatType, labelExpr=labelExpr, timeUnit=timeUnit, title=title, **kwds) class FieldDefWithoutScale(VegaLiteSchema): """FieldDefWithoutScale schema wrapper Mapping(required=[type]) Definition object for a data field, its type and transformation of an encoding channel. Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/FieldDefWithoutScale'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(FieldDefWithoutScale, self).__init__(type=type, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class FieldName(Field): """FieldName schema wrapper string """ _schema = {'$ref': '#/definitions/FieldName'} def __init__(self, *args): super(FieldName, self).__init__(*args) class Fit(VegaLiteSchema): """Fit schema wrapper anyOf(:class:`GeoJsonFeature`, :class:`GeoJsonFeatureCollection`, List(:class:`GeoJsonFeature`)) """ _schema = {'$ref': '#/definitions/Fit'} def __init__(self, *args, **kwds): super(Fit, self).__init__(*args, **kwds) class FontStyle(VegaLiteSchema): """FontStyle schema wrapper string """ _schema = {'$ref': '#/definitions/FontStyle'} def __init__(self, *args): super(FontStyle, self).__init__(*args) class FontWeight(VegaLiteSchema): """FontWeight schema wrapper enum('normal', 'bold', 'lighter', 'bolder', 100, 200, 300, 400, 500, 600, 700, 800, 900) """ _schema = {'$ref': '#/definitions/FontWeight'} def __init__(self, *args): super(FontWeight, self).__init__(*args) class Generator(Data): """Generator schema wrapper anyOf(:class:`SequenceGenerator`, :class:`SphereGenerator`, :class:`GraticuleGenerator`) """ _schema = {'$ref': '#/definitions/Generator'} def __init__(self, *args, **kwds): super(Generator, self).__init__(*args, **kwds) class GeoJsonFeature(Fit): """GeoJsonFeature schema wrapper Any """ _schema = {'$ref': '#/definitions/GeoJsonFeature'} def __init__(self, *args, **kwds): super(GeoJsonFeature, self).__init__(*args, **kwds) class GeoJsonFeatureCollection(Fit): """GeoJsonFeatureCollection schema wrapper Any """ _schema = {'$ref': '#/definitions/GeoJsonFeatureCollection'} def __init__(self, *args, **kwds): super(GeoJsonFeatureCollection, self).__init__(*args, **kwds) class Gradient(VegaLiteSchema): """Gradient schema wrapper anyOf(:class:`LinearGradient`, :class:`RadialGradient`) """ _schema = {'$ref': '#/definitions/Gradient'} def __init__(self, *args, **kwds): super(Gradient, self).__init__(*args, **kwds) class GradientStop(VegaLiteSchema): """GradientStop schema wrapper Mapping(required=[offset, color]) Attributes ---------- color : :class:`Color` The color value at this point in the gradient. offset : float The offset fraction for the color stop, indicating its position within the gradient. """ _schema = {'$ref': '#/definitions/GradientStop'} def __init__(self, color=Undefined, offset=Undefined, **kwds): super(GradientStop, self).__init__(color=color, offset=offset, **kwds) class GraticuleGenerator(Generator): """GraticuleGenerator schema wrapper Mapping(required=[graticule]) Attributes ---------- graticule : anyOf(enum(True), :class:`GraticuleParams`) Generate graticule GeoJSON data for geographic reference lines. name : string Provide a placeholder name and bind data at runtime. """ _schema = {'$ref': '#/definitions/GraticuleGenerator'} def __init__(self, graticule=Undefined, name=Undefined, **kwds): super(GraticuleGenerator, self).__init__(graticule=graticule, name=name, **kwds) class GraticuleParams(VegaLiteSchema): """GraticuleParams schema wrapper Mapping(required=[]) Attributes ---------- extent : :class:`Vector2Vector2number` Sets both the major and minor extents to the same values. extentMajor : :class:`Vector2Vector2number` The major extent of the graticule as a two-element array of coordinates. extentMinor : :class:`Vector2Vector2number` The minor extent of the graticule as a two-element array of coordinates. precision : float The precision of the graticule in degrees. **Default value:** ``2.5`` step : :class:`Vector2number` Sets both the major and minor step angles to the same values. stepMajor : :class:`Vector2number` The major step angles of the graticule. **Default value:** ``[90, 360]`` stepMinor : :class:`Vector2number` The minor step angles of the graticule. **Default value:** ``[10, 10]`` """ _schema = {'$ref': '#/definitions/GraticuleParams'} def __init__(self, extent=Undefined, extentMajor=Undefined, extentMinor=Undefined, precision=Undefined, step=Undefined, stepMajor=Undefined, stepMinor=Undefined, **kwds): super(GraticuleParams, self).__init__(extent=extent, extentMajor=extentMajor, extentMinor=extentMinor, precision=precision, step=step, stepMajor=stepMajor, stepMinor=stepMinor, **kwds) class Header(VegaLiteSchema): """Header schema wrapper Mapping(required=[]) Headers of row / column channels for faceted plots. Attributes ---------- format : anyOf(string, Mapping(required=[])) When used with the default ``"number"`` and ``"time"`` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. When used with a `custom "formatType" `__ that takes ``datum.value`` and format parameter as input), this property represents the format parameter. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : string The format type for labels ( ``"number"`` or ``"time"`` or a `registered custom format type `__ ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. labelAlign : :class:`Align` Horizontal text alignment of header labels. One of ``"left"``, ``"center"``, or ``"right"``. labelAnchor : :class:`TitleAnchor` The anchor position for placing the labels. One of ``"start"``, ``"middle"``, or ``"end"``. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label. labelAngle : float The rotation angle of the header labels. **Default value:** ``0`` for column header, ``-90`` for row header. labelBaseline : :class:`TextBaseline` The vertical text baseline for the header labels. One of ``"alphabetic"`` (default), ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or ``"line-bottom"``. The ``"line-top"`` and ``"line-bottom"`` values operate similarly to ``"top"`` and ``"bottom"``, but are calculated relative to the ``titleLineHeight`` rather than ``titleFontSize`` alone. labelColor : :class:`Color` The color of the header label, can be in hex color code or regular color name. labelExpr : string `Vega expression `__ for customizing labels. **Note:** The label text and value can be assessed via the ``label`` and ``value`` properties of the header's backing ``datum`` object. labelFont : string The font of the header label. labelFontSize : float The font size of the header label, in pixels. labelFontStyle : :class:`FontStyle` The font style of the header label. labelFontWeight : :class:`FontWeight` The font weight of the header label. labelLimit : float The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0``, indicating no limit labelLineHeight : float Line height in pixels for multi-line header labels or title text with ``"line-top"`` or ``"line-bottom"`` baseline. labelOrient : :class:`Orient` The orientation of the header label. One of ``"top"``, ``"bottom"``, ``"left"`` or ``"right"``. labelPadding : float The padding, in pixel, between facet header's label and the plot. **Default value:** ``10`` labels : boolean A boolean flag indicating if labels should be included as part of the header. **Default value:** ``true``. orient : :class:`Orient` Shortcut for setting both labelOrient and titleOrient. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. titleAlign : :class:`Align` Horizontal text alignment (to the anchor) of header titles. titleAnchor : :class:`TitleAnchor` The anchor position for placing the title. One of ``"start"``, ``"middle"``, or ``"end"``. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title. titleAngle : float The rotation angle of the header title. **Default value:** ``0``. titleBaseline : :class:`TextBaseline` The vertical text baseline for the header title. One of ``"alphabetic"`` (default), ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or ``"line-bottom"``. The ``"line-top"`` and ``"line-bottom"`` values operate similarly to ``"top"`` and ``"bottom"``, but are calculated relative to the ``titleLineHeight`` rather than ``titleFontSize`` alone. **Default value:** ``"middle"`` titleColor : :class:`Color` Color of the header title, can be in hex color code or regular color name. titleFont : string Font of the header title. (e.g., ``"Helvetica Neue"`` ). titleFontSize : float Font size of the header title. titleFontStyle : :class:`FontStyle` The font style of the header title. titleFontWeight : :class:`FontWeight` Font weight of the header title. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). titleLimit : float The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0``, indicating no limit titleLineHeight : float Line height in pixels for multi-line header title text or title text with ``"line-top"`` or ``"line-bottom"`` baseline. titleOrient : :class:`Orient` The orientation of the header title. One of ``"top"``, ``"bottom"``, ``"left"`` or ``"right"``. titlePadding : float The padding, in pixel, between facet header's title and the label. **Default value:** ``10`` """ _schema = {'$ref': '#/definitions/Header'} def __init__(self, format=Undefined, formatType=Undefined, labelAlign=Undefined, labelAnchor=Undefined, labelAngle=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelLineHeight=Undefined, labelOrient=Undefined, labelPadding=Undefined, labels=Undefined, orient=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleAngle=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOrient=Undefined, titlePadding=Undefined, **kwds): super(Header, self).__init__(format=format, formatType=formatType, labelAlign=labelAlign, labelAnchor=labelAnchor, labelAngle=labelAngle, labelBaseline=labelBaseline, labelColor=labelColor, labelExpr=labelExpr, labelFont=labelFont, labelFontSize=labelFontSize, labelFontStyle=labelFontStyle, labelFontWeight=labelFontWeight, labelLimit=labelLimit, labelLineHeight=labelLineHeight, labelOrient=labelOrient, labelPadding=labelPadding, labels=labels, orient=orient, title=title, titleAlign=titleAlign, titleAnchor=titleAnchor, titleAngle=titleAngle, titleBaseline=titleBaseline, titleColor=titleColor, titleFont=titleFont, titleFontSize=titleFontSize, titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight, titleLimit=titleLimit, titleLineHeight=titleLineHeight, titleOrient=titleOrient, titlePadding=titlePadding, **kwds) class HeaderConfig(VegaLiteSchema): """HeaderConfig schema wrapper Mapping(required=[]) Attributes ---------- format : anyOf(string, Mapping(required=[])) When used with the default ``"number"`` and ``"time"`` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. When used with a `custom "formatType" `__ that takes ``datum.value`` and format parameter as input), this property represents the format parameter. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : string The format type for labels ( ``"number"`` or ``"time"`` or a `registered custom format type `__ ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. labelAlign : :class:`Align` Horizontal text alignment of header labels. One of ``"left"``, ``"center"``, or ``"right"``. labelAnchor : :class:`TitleAnchor` The anchor position for placing the labels. One of ``"start"``, ``"middle"``, or ``"end"``. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label. labelAngle : float The rotation angle of the header labels. **Default value:** ``0`` for column header, ``-90`` for row header. labelBaseline : :class:`TextBaseline` The vertical text baseline for the header labels. One of ``"alphabetic"`` (default), ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or ``"line-bottom"``. The ``"line-top"`` and ``"line-bottom"`` values operate similarly to ``"top"`` and ``"bottom"``, but are calculated relative to the ``titleLineHeight`` rather than ``titleFontSize`` alone. labelColor : :class:`Color` The color of the header label, can be in hex color code or regular color name. labelExpr : string `Vega expression `__ for customizing labels. **Note:** The label text and value can be assessed via the ``label`` and ``value`` properties of the header's backing ``datum`` object. labelFont : string The font of the header label. labelFontSize : float The font size of the header label, in pixels. labelFontStyle : :class:`FontStyle` The font style of the header label. labelFontWeight : :class:`FontWeight` The font weight of the header label. labelLimit : float The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0``, indicating no limit labelLineHeight : float Line height in pixels for multi-line header labels or title text with ``"line-top"`` or ``"line-bottom"`` baseline. labelOrient : :class:`Orient` The orientation of the header label. One of ``"top"``, ``"bottom"``, ``"left"`` or ``"right"``. labelPadding : float The padding, in pixel, between facet header's label and the plot. **Default value:** ``10`` labels : boolean A boolean flag indicating if labels should be included as part of the header. **Default value:** ``true``. orient : :class:`Orient` Shortcut for setting both labelOrient and titleOrient. title : None Set to null to disable title for the axis, legend, or header. titleAlign : :class:`Align` Horizontal text alignment (to the anchor) of header titles. titleAnchor : :class:`TitleAnchor` The anchor position for placing the title. One of ``"start"``, ``"middle"``, or ``"end"``. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title. titleAngle : float The rotation angle of the header title. **Default value:** ``0``. titleBaseline : :class:`TextBaseline` The vertical text baseline for the header title. One of ``"alphabetic"`` (default), ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or ``"line-bottom"``. The ``"line-top"`` and ``"line-bottom"`` values operate similarly to ``"top"`` and ``"bottom"``, but are calculated relative to the ``titleLineHeight`` rather than ``titleFontSize`` alone. **Default value:** ``"middle"`` titleColor : :class:`Color` Color of the header title, can be in hex color code or regular color name. titleFont : string Font of the header title. (e.g., ``"Helvetica Neue"`` ). titleFontSize : float Font size of the header title. titleFontStyle : :class:`FontStyle` The font style of the header title. titleFontWeight : :class:`FontWeight` Font weight of the header title. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). titleLimit : float The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0``, indicating no limit titleLineHeight : float Line height in pixels for multi-line header title text or title text with ``"line-top"`` or ``"line-bottom"`` baseline. titleOrient : :class:`Orient` The orientation of the header title. One of ``"top"``, ``"bottom"``, ``"left"`` or ``"right"``. titlePadding : float The padding, in pixel, between facet header's title and the label. **Default value:** ``10`` """ _schema = {'$ref': '#/definitions/HeaderConfig'} def __init__(self, format=Undefined, formatType=Undefined, labelAlign=Undefined, labelAnchor=Undefined, labelAngle=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelLineHeight=Undefined, labelOrient=Undefined, labelPadding=Undefined, labels=Undefined, orient=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleAngle=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOrient=Undefined, titlePadding=Undefined, **kwds): super(HeaderConfig, self).__init__(format=format, formatType=formatType, labelAlign=labelAlign, labelAnchor=labelAnchor, labelAngle=labelAngle, labelBaseline=labelBaseline, labelColor=labelColor, labelExpr=labelExpr, labelFont=labelFont, labelFontSize=labelFontSize, labelFontStyle=labelFontStyle, labelFontWeight=labelFontWeight, labelLimit=labelLimit, labelLineHeight=labelLineHeight, labelOrient=labelOrient, labelPadding=labelPadding, labels=labels, orient=orient, title=title, titleAlign=titleAlign, titleAnchor=titleAnchor, titleAngle=titleAngle, titleBaseline=titleBaseline, titleColor=titleColor, titleFont=titleFont, titleFontSize=titleFontSize, titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight, titleLimit=titleLimit, titleLineHeight=titleLineHeight, titleOrient=titleOrient, titlePadding=titlePadding, **kwds) class HexColor(Color): """HexColor schema wrapper string """ _schema = {'$ref': '#/definitions/HexColor'} def __init__(self, *args): super(HexColor, self).__init__(*args) class ImputeMethod(VegaLiteSchema): """ImputeMethod schema wrapper enum('value', 'median', 'max', 'min', 'mean') """ _schema = {'$ref': '#/definitions/ImputeMethod'} def __init__(self, *args): super(ImputeMethod, self).__init__(*args) class ImputeParams(VegaLiteSchema): """ImputeParams schema wrapper Mapping(required=[]) Attributes ---------- frame : List([anyOf(None, float), anyOf(None, float)]) A frame specification as a two-element array used to control the window over which the specified method is applied. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. For example, the value ``[-5, 5]`` indicates that the window should include five objects preceding and five objects following the current object. **Default value:** : ``[null, null]`` indicating that the window includes all objects. keyvals : anyOf(List(Any), :class:`ImputeSequence`) Defines the key values that should be considered for imputation. An array of key values or an object defining a `number sequence `__. If provided, this will be used in addition to the key values observed within the input data. If not provided, the values will be derived from all unique values of the ``key`` field. For ``impute`` in ``encoding``, the key field is the x-field if the y-field is imputed, or vice versa. If there is no impute grouping, this property *must* be specified. method : :class:`ImputeMethod` The imputation method to use for the field value of imputed data objects. One of ``"value"``, ``"mean"``, ``"median"``, ``"max"`` or ``"min"``. **Default value:** ``"value"`` value : Any The field value to use when the imputation ``method`` is ``"value"``. """ _schema = {'$ref': '#/definitions/ImputeParams'} def __init__(self, frame=Undefined, keyvals=Undefined, method=Undefined, value=Undefined, **kwds): super(ImputeParams, self).__init__(frame=frame, keyvals=keyvals, method=method, value=value, **kwds) class ImputeSequence(VegaLiteSchema): """ImputeSequence schema wrapper Mapping(required=[stop]) Attributes ---------- stop : float The ending value(exclusive) of the sequence. start : float The starting value of the sequence. **Default value:** ``0`` step : float The step value between sequence entries. **Default value:** ``1`` or ``-1`` if ``stop < start`` """ _schema = {'$ref': '#/definitions/ImputeSequence'} def __init__(self, stop=Undefined, start=Undefined, step=Undefined, **kwds): super(ImputeSequence, self).__init__(stop=stop, start=start, step=step, **kwds) class InlineData(DataSource): """InlineData schema wrapper Mapping(required=[values]) Attributes ---------- values : :class:`InlineDataset` The full data set, included inline. This can be an array of objects or primitive values, an object, or a string. Arrays of primitive values are ingested as objects with a ``data`` property. Strings are parsed according to the specified format type. format : :class:`DataFormat` An object that specifies the format for parsing the data. name : string Provide a placeholder name and bind data at runtime. """ _schema = {'$ref': '#/definitions/InlineData'} def __init__(self, values=Undefined, format=Undefined, name=Undefined, **kwds): super(InlineData, self).__init__(values=values, format=format, name=name, **kwds) class InlineDataset(VegaLiteSchema): """InlineDataset schema wrapper anyOf(List(float), List(string), List(boolean), List(Mapping(required=[])), string, Mapping(required=[])) """ _schema = {'$ref': '#/definitions/InlineDataset'} def __init__(self, *args, **kwds): super(InlineDataset, self).__init__(*args, **kwds) class InputBinding(Binding): """InputBinding schema wrapper Mapping(required=[]) Attributes ---------- autocomplete : string debounce : float element : :class:`Element` input : string name : string placeholder : string type : string """ _schema = {'$ref': '#/definitions/InputBinding'} def __init__(self, autocomplete=Undefined, debounce=Undefined, element=Undefined, input=Undefined, name=Undefined, placeholder=Undefined, type=Undefined, **kwds): super(InputBinding, self).__init__(autocomplete=autocomplete, debounce=debounce, element=element, input=input, name=name, placeholder=placeholder, type=type, **kwds) class Interpolate(VegaLiteSchema): """Interpolate schema wrapper enum('basis', 'basis-open', 'basis-closed', 'bundle', 'cardinal', 'cardinal-open', 'cardinal-closed', 'catmull-rom', 'linear', 'linear-closed', 'monotone', 'natural', 'step', 'step-before', 'step-after') """ _schema = {'$ref': '#/definitions/Interpolate'} def __init__(self, *args): super(Interpolate, self).__init__(*args) class IntervalSelectionConfig(VegaLiteSchema): """IntervalSelectionConfig schema wrapper Mapping(required=[]) Attributes ---------- bind : enum('scales') Establishes a two-way binding between the interval selection and the scales used within the same view. This allows a user to interactively pan and zoom the view. **See also:** `bind `__ documentation. clear : anyOf(:class:`Stream`, string, boolean) Clears the selection, emptying it of all values. Can be a `Event Stream `__ or ``false`` to disable. **Default value:** ``dblclick``. **See also:** `clear `__ documentation. empty : enum('all', 'none') By default, ``all`` data values are considered to lie within an empty selection. When set to ``none``, empty selections contain no data values. encodings : List(:class:`SingleDefUnitChannel`) An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection. **See also:** `encodings `__ documentation. fields : List(:class:`FieldName`) An array of field names whose values must match for a data tuple to fall within the selection. **See also:** `fields `__ documentation. init : :class:`SelectionInitIntervalMapping` Initialize the selection with a mapping between `projected channels or field names `__ and arrays of initial values. **See also:** `init `__ documentation. mark : :class:`BrushConfig` An interval selection also adds a rectangle mark to depict the extents of the interval. The ``mark`` property can be used to customize the appearance of the mark. **See also:** `mark `__ documentation. on : anyOf(:class:`Stream`, string) A `Vega event stream `__ (object or selector) that triggers the selection. For interval selections, the event stream must specify a `start and end `__. resolve : :class:`SelectionResolution` With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain. **See also:** `resolve `__ documentation. translate : anyOf(string, boolean) When truthy, allows a user to interactively move an interval selection back-and-forth. Can be ``true``, ``false`` (to disable panning), or a `Vega event stream definition `__ which must include a start and end event to trigger continuous panning. **Default value:** ``true``, which corresponds to ``[mousedown, window:mouseup] > window:mousemove!`` which corresponds to clicks and dragging within an interval selection to reposition it. **See also:** `translate `__ documentation. zoom : anyOf(string, boolean) When truthy, allows a user to interactively resize an interval selection. Can be ``true``, ``false`` (to disable zooming), or a `Vega event stream definition `__. Currently, only ``wheel`` events are supported. **Default value:** ``true``, which corresponds to ``wheel!``. **See also:** `zoom `__ documentation. """ _schema = {'$ref': '#/definitions/IntervalSelectionConfig'} def __init__(self, bind=Undefined, clear=Undefined, empty=Undefined, encodings=Undefined, fields=Undefined, init=Undefined, mark=Undefined, on=Undefined, resolve=Undefined, translate=Undefined, zoom=Undefined, **kwds): super(IntervalSelectionConfig, self).__init__(bind=bind, clear=clear, empty=empty, encodings=encodings, fields=fields, init=init, mark=mark, on=on, resolve=resolve, translate=translate, zoom=zoom, **kwds) class JoinAggregateFieldDef(VegaLiteSchema): """JoinAggregateFieldDef schema wrapper Mapping(required=[op, as]) Attributes ---------- op : :class:`AggregateOp` The aggregation operation to apply (e.g., ``"sum"``, ``"average"`` or ``"count"`` ). See the list of all supported operations `here `__. field : :class:`FieldName` The data field for which to compute the aggregate function. This can be omitted for functions that do not operate over a field such as ``"count"``. as : :class:`FieldName` The output name for the join aggregate operation. """ _schema = {'$ref': '#/definitions/JoinAggregateFieldDef'} def __init__(self, op=Undefined, field=Undefined, **kwds): super(JoinAggregateFieldDef, self).__init__(op=op, field=field, **kwds) class JsonDataFormat(DataFormat): """JsonDataFormat schema wrapper Mapping(required=[]) Attributes ---------- parse : anyOf(:class:`Parse`, None) If set to ``null``, disable type inference based on the spec and only use type inference based on the data. Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of ``"number"``, ``"boolean"``, ``"date"``, or null (do not parse the field)). For example, ``"parse": {"modified_on": "date"}`` parses the ``modified_on`` field in each input record a Date value. For ``"date"``, we parse data based using Javascript's `Date.parse() `__. For Specific date formats can be provided (e.g., ``{foo: "date:'%m%d%Y'"}`` ), using the `d3-time-format syntax `__. UTC date format parsing is supported similarly (e.g., ``{foo: "utc:'%m%d%Y'"}`` ). See more about `UTC time `__ property : string The JSON property containing the desired data. This parameter can be used when the loaded JSON file may have surrounding structure or meta-data. For example ``"property": "values.features"`` is equivalent to retrieving ``json.values.features`` from the loaded JSON object. type : enum('json') Type of input data: ``"json"``, ``"csv"``, ``"tsv"``, ``"dsv"``. **Default value:** The default format type is determined by the extension of the file URL. If no extension is detected, ``"json"`` will be used by default. """ _schema = {'$ref': '#/definitions/JsonDataFormat'} def __init__(self, parse=Undefined, property=Undefined, type=Undefined, **kwds): super(JsonDataFormat, self).__init__(parse=parse, property=property, type=type, **kwds) class LabelOverlap(VegaLiteSchema): """LabelOverlap schema wrapper anyOf(boolean, enum('parity'), enum('greedy')) """ _schema = {'$ref': '#/definitions/LabelOverlap'} def __init__(self, *args, **kwds): super(LabelOverlap, self).__init__(*args, **kwds) class LatLongFieldDef(VegaLiteSchema): """LatLongFieldDef schema wrapper Mapping(required=[]) Attributes ---------- aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. type : enum('quantitative') The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. """ _schema = {'$ref': '#/definitions/LatLongFieldDef'} def __init__(self, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds): super(LatLongFieldDef, self).__init__(aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, type=type, **kwds) class LayoutAlign(VegaLiteSchema): """LayoutAlign schema wrapper enum('all', 'each', 'none') """ _schema = {'$ref': '#/definitions/LayoutAlign'} def __init__(self, *args): super(LayoutAlign, self).__init__(*args) class Legend(VegaLiteSchema): """Legend schema wrapper Mapping(required=[]) Properties of a legend or boolean flag for determining whether to show it. Attributes ---------- clipHeight : float The height in pixels to clip symbol legend entries and limit their size. columnPadding : float The horizontal padding in pixels between symbol legend entries. **Default value:** ``10``. columns : float The number of columns in which to arrange symbol legend entries. A value of ``0`` or lower indicates a single row with one column per entry. cornerRadius : float Corner radius for the full legend. direction : :class:`Orientation` The direction of the legend, one of ``"vertical"`` or ``"horizontal"``. **Default value:** * For top-/bottom- ``orient`` ed legends, ``"horizontal"`` * For left-/right- ``orient`` ed legends, ``"vertical"`` * For top/bottom-left/right- ``orient`` ed legends, ``"horizontal"`` for gradient legends and ``"vertical"`` for symbol legends. fillColor : anyOf(None, :class:`Color`) Background fill color for the full legend. format : anyOf(string, Mapping(required=[])) When used with the default ``"number"`` and ``"time"`` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. When used with a `custom "formatType" `__ that takes ``datum.value`` and format parameter as input), this property represents the format parameter. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : string The format type for labels ( ``"number"`` or ``"time"`` or a `registered custom format type `__ ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. gradientLength : float The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient. **Default value:** ``200``. gradientOpacity : float Opacity of the color gradient. gradientStrokeColor : anyOf(None, :class:`Color`) The color of the gradient stroke, can be in hex color code or regular color name. **Default value:** ``"lightGray"``. gradientStrokeWidth : float The width of the gradient stroke, in pixels. **Default value:** ``0``. gradientThickness : float The thickness in pixels of the color gradient. This value corresponds to the width of a vertical gradient or the height of a horizontal gradient. **Default value:** ``16``. gridAlign : :class:`LayoutAlign` The alignment to apply to symbol legends rows and columns. The supported string values are ``"all"``, ``"each"`` (the default), and ``none``. For more information, see the `grid layout documentation `__. **Default value:** ``"each"``. labelAlign : :class:`Align` The alignment of the legend label, can be left, center, or right. labelBaseline : :class:`TextBaseline` The position of the baseline of legend label, can be ``"top"``, ``"middle"``, ``"bottom"``, or ``"alphabetic"``. **Default value:** ``"middle"``. labelColor : anyOf(None, :class:`Color`) The color of the legend label, can be in hex color code or regular color name. labelExpr : string `Vega expression `__ for customizing labels. **Note:** The label text and value can be assessed via the ``label`` and ``value`` properties of the legend's backing ``datum`` object. labelFont : string The font of the legend label. labelFontSize : float The font size of legend label. **Default value:** ``10``. labelFontStyle : :class:`FontStyle` The font style of legend label. labelFontWeight : :class:`FontWeight` The font weight of legend label. labelLimit : float Maximum allowed pixel width of legend tick labels. **Default value:** ``160``. labelOffset : float The offset of the legend label. labelOpacity : float Opacity of labels. labelOverlap : :class:`LabelOverlap` The strategy to use for resolving overlap of labels in gradient legends. If ``false``, no overlap reduction is attempted. If set to ``true`` (default) or ``"parity"``, a strategy of removing every other label is used. If set to ``"greedy"``, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes). **Default value:** ``true``. labelPadding : float Padding in pixels between the legend and legend labels. labelSeparation : float The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default ``0`` ). This property is ignored if *labelOverlap* resolution is not enabled. legendX : float Custom x-position for legend with orient "none". legendY : float Custom y-position for legend with orient "none". offset : float The offset in pixels by which to displace the legend from the data rectangle and axes. **Default value:** ``18``. orient : :class:`LegendOrient` The orientation of the legend, which determines how the legend is positioned within the scene. One of ``"left"``, ``"right"``, ``"top"``, ``"bottom"``, ``"top-left"``, ``"top-right"``, ``"bottom-left"``, ``"bottom-right"``, ``"none"``. **Default value:** ``"right"`` padding : float The padding between the border and content of the legend group. **Default value:** ``0``. rowPadding : float The vertical padding in pixels between symbol legend entries. **Default value:** ``2``. strokeColor : anyOf(None, :class:`Color`) Border stroke color for the full legend. symbolDash : List(float) An array of alternating [stroke, space] lengths for dashed symbol strokes. symbolDashOffset : float The pixel offset at which to start drawing with the symbol stroke dash array. symbolFillColor : anyOf(None, :class:`Color`) The color of the legend symbol, symbolLimit : float The maximum number of allowed entries for a symbol legend. Additional entries will be dropped. symbolOffset : float Horizontal pixel offset for legend symbols. **Default value:** ``0``. symbolOpacity : float Opacity of the legend symbols. symbolSize : float The size of the legend symbol, in pixels. **Default value:** ``100``. symbolStrokeColor : anyOf(None, :class:`Color`) Stroke color for legend symbols. symbolStrokeWidth : float The width of the symbol's stroke. **Default value:** ``1.5``. symbolType : :class:`SymbolShape` The symbol shape. One of the plotting shapes ``circle`` (default), ``square``, ``cross``, ``diamond``, ``triangle-up``, ``triangle-down``, ``triangle-right``, or ``triangle-left``, the line symbol ``stroke``, or one of the centered directional shapes ``arrow``, ``wedge``, or ``triangle``. Alternatively, a custom `SVG path string `__ can be provided. For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions. **Default value:** ``"circle"``. tickCount : :class:`TickCount` The desired number of tick values for quantitative legends. tickMinStep : float The minimum desired step between legend ticks, in terms of scale domain values. For example, a value of ``1`` indicates that ticks should not be less than 1 unit apart. If ``tickMinStep`` is specified, the ``tickCount`` value will be adjusted, if necessary, to enforce the minimum step value. **Default value** : ``undefined`` title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. titleAlign : :class:`Align` Horizontal text alignment for legend titles. **Default value:** ``"left"``. titleAnchor : :class:`TitleAnchor` Text anchor position for placing legend titles. titleBaseline : :class:`TextBaseline` Vertical text baseline for legend titles. **Default value:** ``"top"``. titleColor : anyOf(None, :class:`Color`) The color of the legend title, can be in hex color code or regular color name. titleFont : string The font of the legend title. titleFontSize : float The font size of the legend title. titleFontStyle : :class:`FontStyle` The font style of the legend title. titleFontWeight : :class:`FontWeight` The font weight of the legend title. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). titleLimit : float Maximum allowed pixel width of legend titles. **Default value:** ``180``. titleLineHeight : float Line height in pixels for multi-line title text. titleOpacity : float Opacity of the legend title. titleOrient : :class:`Orient` Orientation of the legend title. titlePadding : float The padding, in pixels, between title and legend. **Default value:** ``5``. type : enum('symbol', 'gradient') The type of the legend. Use ``"symbol"`` to create a discrete legend and ``"gradient"`` for a continuous color gradient. **Default value:** ``"gradient"`` for non-binned quantitative fields and temporal fields; ``"symbol"`` otherwise. values : anyOf(List(float), List(string), List(boolean), List(:class:`DateTime`)) Explicitly set the visible legend values. zindex : float A non-negative integer indicating the z-index of the legend. If zindex is 0, legend should be drawn behind all chart elements. To put them in front, use zindex = 1. """ _schema = {'$ref': '#/definitions/Legend'} def __init__(self, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined, cornerRadius=Undefined, direction=Undefined, fillColor=Undefined, format=Undefined, formatType=Undefined, gradientLength=Undefined, gradientOpacity=Undefined, gradientStrokeColor=Undefined, gradientStrokeWidth=Undefined, gradientThickness=Undefined, gridAlign=Undefined, labelAlign=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, legendX=Undefined, legendY=Undefined, offset=Undefined, orient=Undefined, padding=Undefined, rowPadding=Undefined, strokeColor=Undefined, symbolDash=Undefined, symbolDashOffset=Undefined, symbolFillColor=Undefined, symbolLimit=Undefined, symbolOffset=Undefined, symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined, symbolStrokeWidth=Undefined, symbolType=Undefined, tickCount=Undefined, tickMinStep=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titleOrient=Undefined, titlePadding=Undefined, type=Undefined, values=Undefined, zindex=Undefined, **kwds): super(Legend, self).__init__(clipHeight=clipHeight, columnPadding=columnPadding, columns=columns, cornerRadius=cornerRadius, direction=direction, fillColor=fillColor, format=format, formatType=formatType, gradientLength=gradientLength, gradientOpacity=gradientOpacity, gradientStrokeColor=gradientStrokeColor, gradientStrokeWidth=gradientStrokeWidth, gradientThickness=gradientThickness, gridAlign=gridAlign, labelAlign=labelAlign, labelBaseline=labelBaseline, labelColor=labelColor, labelExpr=labelExpr, labelFont=labelFont, labelFontSize=labelFontSize, labelFontStyle=labelFontStyle, labelFontWeight=labelFontWeight, labelLimit=labelLimit, labelOffset=labelOffset, labelOpacity=labelOpacity, labelOverlap=labelOverlap, labelPadding=labelPadding, labelSeparation=labelSeparation, legendX=legendX, legendY=legendY, offset=offset, orient=orient, padding=padding, rowPadding=rowPadding, strokeColor=strokeColor, symbolDash=symbolDash, symbolDashOffset=symbolDashOffset, symbolFillColor=symbolFillColor, symbolLimit=symbolLimit, symbolOffset=symbolOffset, symbolOpacity=symbolOpacity, symbolSize=symbolSize, symbolStrokeColor=symbolStrokeColor, symbolStrokeWidth=symbolStrokeWidth, symbolType=symbolType, tickCount=tickCount, tickMinStep=tickMinStep, title=title, titleAlign=titleAlign, titleAnchor=titleAnchor, titleBaseline=titleBaseline, titleColor=titleColor, titleFont=titleFont, titleFontSize=titleFontSize, titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight, titleLimit=titleLimit, titleLineHeight=titleLineHeight, titleOpacity=titleOpacity, titleOrient=titleOrient, titlePadding=titlePadding, type=type, values=values, zindex=zindex, **kwds) class LegendBinding(VegaLiteSchema): """LegendBinding schema wrapper anyOf(enum('legend'), :class:`LegendStreamBinding`) """ _schema = {'$ref': '#/definitions/LegendBinding'} def __init__(self, *args, **kwds): super(LegendBinding, self).__init__(*args, **kwds) class LegendConfig(VegaLiteSchema): """LegendConfig schema wrapper Mapping(required=[]) Attributes ---------- clipHeight : float The height in pixels to clip symbol legend entries and limit their size. columnPadding : float The horizontal padding in pixels between symbol legend entries. **Default value:** ``10``. columns : float The number of columns in which to arrange symbol legend entries. A value of ``0`` or lower indicates a single row with one column per entry. cornerRadius : float Corner radius for the full legend. direction : :class:`Orientation` The direction of the legend, one of ``"vertical"`` or ``"horizontal"``. **Default value:** * For top-/bottom- ``orient`` ed legends, ``"horizontal"`` * For left-/right- ``orient`` ed legends, ``"vertical"`` * For top/bottom-left/right- ``orient`` ed legends, ``"horizontal"`` for gradient legends and ``"vertical"`` for symbol legends. disable : boolean Disable legend by default fillColor : anyOf(None, :class:`Color`) Background fill color for the full legend. gradientDirection : :class:`Orientation` The default direction ( ``"horizontal"`` or ``"vertical"`` ) for gradient legends. **Default value:** ``"vertical"``. gradientHorizontalMaxLength : float Max legend length for a horizontal gradient when ``config.legend.gradientLength`` is undefined. **Default value:** ``200`` gradientHorizontalMinLength : float Min legend length for a horizontal gradient when ``config.legend.gradientLength`` is undefined. **Default value:** ``100`` gradientLabelLimit : float The maximum allowed length in pixels of color ramp gradient labels. gradientLabelOffset : float Vertical offset in pixels for color ramp gradient labels. **Default value:** ``2``. gradientLength : float The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient. **Default value:** ``200``. gradientOpacity : float Opacity of the color gradient. gradientStrokeColor : anyOf(None, :class:`Color`) The color of the gradient stroke, can be in hex color code or regular color name. **Default value:** ``"lightGray"``. gradientStrokeWidth : float The width of the gradient stroke, in pixels. **Default value:** ``0``. gradientThickness : float The thickness in pixels of the color gradient. This value corresponds to the width of a vertical gradient or the height of a horizontal gradient. **Default value:** ``16``. gradientVerticalMaxLength : float Max legend length for a vertical gradient when ``config.legend.gradientLength`` is undefined. **Default value:** ``200`` gradientVerticalMinLength : float Min legend length for a vertical gradient when ``config.legend.gradientLength`` is undefined. **Default value:** ``100`` gridAlign : :class:`LayoutAlign` The alignment to apply to symbol legends rows and columns. The supported string values are ``"all"``, ``"each"`` (the default), and ``none``. For more information, see the `grid layout documentation `__. **Default value:** ``"each"``. labelAlign : :class:`Align` The alignment of the legend label, can be left, center, or right. labelBaseline : :class:`TextBaseline` The position of the baseline of legend label, can be ``"top"``, ``"middle"``, ``"bottom"``, or ``"alphabetic"``. **Default value:** ``"middle"``. labelColor : anyOf(None, :class:`Color`) The color of the legend label, can be in hex color code or regular color name. labelFont : string The font of the legend label. labelFontSize : float The font size of legend label. **Default value:** ``10``. labelFontStyle : :class:`FontStyle` The font style of legend label. labelFontWeight : :class:`FontWeight` The font weight of legend label. labelLimit : float Maximum allowed pixel width of legend tick labels. **Default value:** ``160``. labelOffset : float The offset of the legend label. labelOpacity : float Opacity of labels. labelOverlap : :class:`LabelOverlap` The strategy to use for resolving overlap of labels in gradient legends. If ``false``, no overlap reduction is attempted. If set to ``true`` or ``"parity"``, a strategy of removing every other label is used. If set to ``"greedy"``, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes). **Default value:** ``"greedy"`` for ``log scales otherwise`` true`. labelPadding : float Padding in pixels between the legend and legend labels. labelSeparation : float The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default ``0`` ). This property is ignored if *labelOverlap* resolution is not enabled. layout : not Any Legend orient group layout parameters. legendX : float Custom x-position for legend with orient "none". legendY : float Custom y-position for legend with orient "none". offset : float The offset in pixels by which to displace the legend from the data rectangle and axes. **Default value:** ``18``. orient : :class:`LegendOrient` The orientation of the legend, which determines how the legend is positioned within the scene. One of ``"left"``, ``"right"``, ``"top"``, ``"bottom"``, ``"top-left"``, ``"top-right"``, ``"bottom-left"``, ``"bottom-right"``, ``"none"``. **Default value:** ``"right"`` padding : float The padding between the border and content of the legend group. **Default value:** ``0``. rowPadding : float The vertical padding in pixels between symbol legend entries. **Default value:** ``2``. strokeColor : anyOf(None, :class:`Color`) Border stroke color for the full legend. strokeDash : List(float) Border stroke dash pattern for the full legend. strokeWidth : float Border stroke width for the full legend. symbolBaseFillColor : anyOf(None, :class:`Color`) Default fill color for legend symbols. Only applied if there is no ``"fill"`` scale color encoding for the legend. **Default value:** ``"transparent"``. symbolBaseStrokeColor : anyOf(None, :class:`Color`) Default stroke color for legend symbols. Only applied if there is no ``"fill"`` scale color encoding for the legend. **Default value:** ``"gray"``. symbolDash : List(float) An array of alternating [stroke, space] lengths for dashed symbol strokes. symbolDashOffset : float The pixel offset at which to start drawing with the symbol stroke dash array. symbolDirection : :class:`Orientation` The default direction ( ``"horizontal"`` or ``"vertical"`` ) for symbol legends. **Default value:** ``"vertical"``. symbolFillColor : anyOf(None, :class:`Color`) The color of the legend symbol, symbolLimit : float The maximum number of allowed entries for a symbol legend. Additional entries will be dropped. symbolOffset : float Horizontal pixel offset for legend symbols. **Default value:** ``0``. symbolOpacity : float Opacity of the legend symbols. symbolSize : float The size of the legend symbol, in pixels. **Default value:** ``100``. symbolStrokeColor : anyOf(None, :class:`Color`) Stroke color for legend symbols. symbolStrokeWidth : float The width of the symbol's stroke. **Default value:** ``1.5``. symbolType : :class:`SymbolShape` The symbol shape. One of the plotting shapes ``circle`` (default), ``square``, ``cross``, ``diamond``, ``triangle-up``, ``triangle-down``, ``triangle-right``, or ``triangle-left``, the line symbol ``stroke``, or one of the centered directional shapes ``arrow``, ``wedge``, or ``triangle``. Alternatively, a custom `SVG path string `__ can be provided. For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions. **Default value:** ``"circle"``. tickCount : :class:`TickCount` The desired number of tick values for quantitative legends. title : None Set to null to disable title for the axis, legend, or header. titleAlign : :class:`Align` Horizontal text alignment for legend titles. **Default value:** ``"left"``. titleAnchor : :class:`TitleAnchor` Text anchor position for placing legend titles. titleBaseline : :class:`TextBaseline` Vertical text baseline for legend titles. **Default value:** ``"top"``. titleColor : anyOf(None, :class:`Color`) The color of the legend title, can be in hex color code or regular color name. titleFont : string The font of the legend title. titleFontSize : float The font size of the legend title. titleFontStyle : :class:`FontStyle` The font style of the legend title. titleFontWeight : :class:`FontWeight` The font weight of the legend title. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). titleLimit : float Maximum allowed pixel width of legend titles. **Default value:** ``180``. titleLineHeight : float Line height in pixels for multi-line title text. titleOpacity : float Opacity of the legend title. titleOrient : :class:`Orient` Orientation of the legend title. titlePadding : float The padding, in pixels, between title and legend. **Default value:** ``5``. unselectedOpacity : float The opacity of unselected legend entries. **Default value:** 0.35. """ _schema = {'$ref': '#/definitions/LegendConfig'} def __init__(self, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined, cornerRadius=Undefined, direction=Undefined, disable=Undefined, fillColor=Undefined, gradientDirection=Undefined, gradientHorizontalMaxLength=Undefined, gradientHorizontalMinLength=Undefined, gradientLabelLimit=Undefined, gradientLabelOffset=Undefined, gradientLength=Undefined, gradientOpacity=Undefined, gradientStrokeColor=Undefined, gradientStrokeWidth=Undefined, gradientThickness=Undefined, gradientVerticalMaxLength=Undefined, gradientVerticalMinLength=Undefined, gridAlign=Undefined, labelAlign=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, layout=Undefined, legendX=Undefined, legendY=Undefined, offset=Undefined, orient=Undefined, padding=Undefined, rowPadding=Undefined, strokeColor=Undefined, strokeDash=Undefined, strokeWidth=Undefined, symbolBaseFillColor=Undefined, symbolBaseStrokeColor=Undefined, symbolDash=Undefined, symbolDashOffset=Undefined, symbolDirection=Undefined, symbolFillColor=Undefined, symbolLimit=Undefined, symbolOffset=Undefined, symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined, symbolStrokeWidth=Undefined, symbolType=Undefined, tickCount=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titleOrient=Undefined, titlePadding=Undefined, unselectedOpacity=Undefined, **kwds): super(LegendConfig, self).__init__(clipHeight=clipHeight, columnPadding=columnPadding, columns=columns, cornerRadius=cornerRadius, direction=direction, disable=disable, fillColor=fillColor, gradientDirection=gradientDirection, gradientHorizontalMaxLength=gradientHorizontalMaxLength, gradientHorizontalMinLength=gradientHorizontalMinLength, gradientLabelLimit=gradientLabelLimit, gradientLabelOffset=gradientLabelOffset, gradientLength=gradientLength, gradientOpacity=gradientOpacity, gradientStrokeColor=gradientStrokeColor, gradientStrokeWidth=gradientStrokeWidth, gradientThickness=gradientThickness, gradientVerticalMaxLength=gradientVerticalMaxLength, gradientVerticalMinLength=gradientVerticalMinLength, gridAlign=gridAlign, labelAlign=labelAlign, labelBaseline=labelBaseline, labelColor=labelColor, labelFont=labelFont, labelFontSize=labelFontSize, labelFontStyle=labelFontStyle, labelFontWeight=labelFontWeight, labelLimit=labelLimit, labelOffset=labelOffset, labelOpacity=labelOpacity, labelOverlap=labelOverlap, labelPadding=labelPadding, labelSeparation=labelSeparation, layout=layout, legendX=legendX, legendY=legendY, offset=offset, orient=orient, padding=padding, rowPadding=rowPadding, strokeColor=strokeColor, strokeDash=strokeDash, strokeWidth=strokeWidth, symbolBaseFillColor=symbolBaseFillColor, symbolBaseStrokeColor=symbolBaseStrokeColor, symbolDash=symbolDash, symbolDashOffset=symbolDashOffset, symbolDirection=symbolDirection, symbolFillColor=symbolFillColor, symbolLimit=symbolLimit, symbolOffset=symbolOffset, symbolOpacity=symbolOpacity, symbolSize=symbolSize, symbolStrokeColor=symbolStrokeColor, symbolStrokeWidth=symbolStrokeWidth, symbolType=symbolType, tickCount=tickCount, title=title, titleAlign=titleAlign, titleAnchor=titleAnchor, titleBaseline=titleBaseline, titleColor=titleColor, titleFont=titleFont, titleFontSize=titleFontSize, titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight, titleLimit=titleLimit, titleLineHeight=titleLineHeight, titleOpacity=titleOpacity, titleOrient=titleOrient, titlePadding=titlePadding, unselectedOpacity=unselectedOpacity, **kwds) class LegendOrient(VegaLiteSchema): """LegendOrient schema wrapper enum('none', 'left', 'right', 'top', 'bottom', 'top-left', 'top-right', 'bottom-left', 'bottom-right') """ _schema = {'$ref': '#/definitions/LegendOrient'} def __init__(self, *args): super(LegendOrient, self).__init__(*args) class LegendResolveMap(VegaLiteSchema): """LegendResolveMap schema wrapper Mapping(required=[]) Attributes ---------- color : :class:`ResolveMode` fill : :class:`ResolveMode` fillOpacity : :class:`ResolveMode` opacity : :class:`ResolveMode` shape : :class:`ResolveMode` size : :class:`ResolveMode` stroke : :class:`ResolveMode` strokeDash : :class:`ResolveMode` strokeOpacity : :class:`ResolveMode` strokeWidth : :class:`ResolveMode` """ _schema = {'$ref': '#/definitions/LegendResolveMap'} def __init__(self, color=Undefined, fill=Undefined, fillOpacity=Undefined, opacity=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeDash=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, **kwds): super(LegendResolveMap, self).__init__(color=color, fill=fill, fillOpacity=fillOpacity, opacity=opacity, shape=shape, size=size, stroke=stroke, strokeDash=strokeDash, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, **kwds) class LegendStreamBinding(LegendBinding): """LegendStreamBinding schema wrapper Mapping(required=[legend]) Attributes ---------- legend : anyOf(string, :class:`Stream`) """ _schema = {'$ref': '#/definitions/LegendStreamBinding'} def __init__(self, legend=Undefined, **kwds): super(LegendStreamBinding, self).__init__(legend=legend, **kwds) class LineConfig(AnyMarkConfig): """LineConfig schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of ``"left"``, ``"right"``, ``"center"``. angle : float The rotation angle of the text, in degrees. aspect : boolean Whether to keep aspect ratio of image marks. baseline : :class:`TextBaseline` The vertical text baseline. One of ``"alphabetic"`` (default), ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or ``"line-bottom"``. The ``"line-top"`` and ``"line-bottom"`` values operate similarly to ``"top"`` and ``"bottom"``, but are calculated relative to the ``lineHeight`` rather than ``fontSize`` alone. blend : :class:`Blend` The color blend mode for drawing an item on its current background. Any valid `CSS mix-blend-mode `__ value can be used. __Default value: ``"source-over"`` color : anyOf(:class:`Color`, :class:`Gradient`) Default color. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** * This property cannot be used in a `style config `__. * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and will override ``color``. cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cornerRadiusBottomLeft : float The radius in pixels of rounded rectangle bottom left corner. **Default value:** ``0`` cornerRadiusBottomRight : float The radius in pixels of rounded rectangle bottom right corner. **Default value:** ``0`` cornerRadiusTopLeft : float The radius in pixels of rounded rectangle top right corner. **Default value:** ``0`` cornerRadiusTopRight : float The radius in pixels of rounded rectangle top left corner. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the mark. Any valid `CSS cursor type `__ can be used. dir : :class:`TextDirection` The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"`` (right-to-left). This property determines on which side is truncated in response to the limit parameter. **Default value:** ``"ltr"`` dx : float The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. dy : float The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. ellipsis : string The ellipsis string for text truncated in response to the limit parameter. **Default value:** ``"…"`` fill : anyOf(:class:`Color`, :class:`Gradient`, None) Default Fill Color. This property has higher precedence than ``config.color``. **Default value:** (None) fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` filled : boolean Whether the mark's color should be used as fill color instead of stroke color. **Default value:** ``false`` for all ``point``, ``line``, and ``rule`` marks as well as ``geoshape`` marks for `graticule `__ data sources; otherwise, ``true``. **Note:** This property cannot be used in a `style config `__. font : string The typeface to set the text in (e.g., ``"Helvetica Neue"`` ). fontSize : float The font size, in pixels. **Default value:** ``11`` fontStyle : :class:`FontStyle` The font style (e.g., ``"italic"`` ). fontWeight : :class:`FontWeight` The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). height : float Height of the marks. href : string A URL to load upon mouse click. If defined, the mark acts as a hyperlink. interpolate : :class:`Interpolate` The line interpolation method to use for line and area marks. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : alternate between horizontal and vertical segments, as in a step function. * ``"step-before"`` : alternate between vertical and horizontal segments, as in a step function. * ``"step-after"`` : alternate between horizontal and vertical segments, as in a step function. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. invalid : enum('filter', None) Defines how Vega-Lite should handle marks for invalid values ( ``null`` and ``NaN`` ). * If set to ``"filter"`` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). * If ``null``, all data items are included. In this case, invalid values will be interpreted as zeroes. limit : float The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0`` -- indicating no limit lineBreak : string A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued. lineHeight : float The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks. opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. order : anyOf(None, boolean) For line and trail marks, this ``order`` property can be set to ``null`` or ``false`` to make the lines use the original order in the data sources. orient : :class:`Orientation` The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. * For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. * For area, this property determines the orient property of the Vega output. * For line and trail marks, this property determines the sort order of the points in the line if ``config.sortLineBy`` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored. point : anyOf(boolean, :class:`OverlayMarkDef`, enum('transparent')) A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points. If this property is ``"transparent"``, transparent points will be used (for enhancing tooltips and selections). If this property is an empty object ( ``{}`` ) or ``true``, filled points with default properties will be used. If this property is ``false``, no points would be automatically added to line or area marks. **Default value:** ``false``. radius : float Polar coordinate radial offset, in pixels, of the text label from the origin determined by the ``x`` and ``y`` properties. shape : anyOf(:class:`SymbolShape`, string) Shape of the point marks. Supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) **Default value:** ``"circle"`` size : float Default size for marks. * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value. * For ``bar``, this represents the band size of the bar, in pixels. * For ``text``, this represents the font size, in pixels. **Default value:** * ``30`` for point, circle, square marks; width/height's ``step`` * ``2`` for bar marks with discrete dimensions; * ``5`` for bar marks with continuous dimensions; * ``11`` for text marks. stroke : anyOf(:class:`Color`, :class:`Gradient`, None) Default Stroke Color. This property has higher precedence than ``config.color``. **Default value:** (None) strokeCap : string The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"butt"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : string The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOffset : float The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. tension : float Depending on the interpolation type, sets the tension parameter (for line and area marks). text : :class:`Text` Placeholder text if the ``text`` channel is not specified theta : float Polar coordinate angle, in radians, of the text label from the origin determined by the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in radians, with ``0`` indicating "north". timeUnitBand : float Default relative band size for a time unit. If set to ``1``, the bandwidth of the marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the marks will be half of the time unit band step. timeUnitBandPosition : float Default relative band position for a time unit. If set to ``0``, the marks will be positioned at the beginning of the time unit band step. If set to ``0.5``, the marks will be positioned in the middle of the time unit band step. tooltip : anyOf(float, string, boolean, :class:`TooltipContent`, None) The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from. * If ``tooltip`` is ``true`` or ``{"content": "encoding"}``, then all fields from ``encoding`` will be used. * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the highlighted data point will be used. * If set to ``null`` or ``false``, then no tooltip will be used. See the `tooltip `__ documentation for a detailed discussion about tooltip in Vega-Lite. **Default value:** ``null`` width : float Width of the marks. x : anyOf(float, enum('width')) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(float, enum('width')) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. y : anyOf(float, enum('height')) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(float, enum('height')) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. """ _schema = {'$ref': '#/definitions/LineConfig'} def __init__(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, blend=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined, y2=Undefined, **kwds): super(LineConfig, self).__init__(align=align, angle=angle, aspect=aspect, baseline=baseline, blend=blend, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, tension=tension, text=text, theta=theta, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, y=y, y2=y2, **kwds) class LinearGradient(Gradient): """LinearGradient schema wrapper Mapping(required=[gradient, stops]) Attributes ---------- gradient : enum('linear') The type of gradient. Use ``"linear"`` for a linear gradient. stops : List(:class:`GradientStop`) An array of gradient stops defining the gradient color sequence. id : string x1 : float The starting x-coordinate, in normalized [0, 1] coordinates, of the linear gradient. **Default value:** ``0`` x2 : float The ending x-coordinate, in normalized [0, 1] coordinates, of the linear gradient. **Default value:** ``1`` y1 : float The starting y-coordinate, in normalized [0, 1] coordinates, of the linear gradient. **Default value:** ``0`` y2 : float The ending y-coordinate, in normalized [0, 1] coordinates, of the linear gradient. **Default value:** ``0`` """ _schema = {'$ref': '#/definitions/LinearGradient'} def __init__(self, gradient=Undefined, stops=Undefined, id=Undefined, x1=Undefined, x2=Undefined, y1=Undefined, y2=Undefined, **kwds): super(LinearGradient, self).__init__(gradient=gradient, stops=stops, id=id, x1=x1, x2=x2, y1=y1, y2=y2, **kwds) class LookupData(VegaLiteSchema): """LookupData schema wrapper Mapping(required=[data, key]) Attributes ---------- data : :class:`Data` Secondary data source to lookup in. key : :class:`FieldName` Key in data to lookup. fields : List(:class:`FieldName`) Fields in foreign data or selection to lookup. If not specified, the entire object is queried. """ _schema = {'$ref': '#/definitions/LookupData'} def __init__(self, data=Undefined, key=Undefined, fields=Undefined, **kwds): super(LookupData, self).__init__(data=data, key=key, fields=fields, **kwds) class LookupSelection(VegaLiteSchema): """LookupSelection schema wrapper Mapping(required=[key, selection]) Attributes ---------- key : :class:`FieldName` Key in data to lookup. selection : string Selection name to look up. fields : List(:class:`FieldName`) Fields in foreign data or selection to lookup. If not specified, the entire object is queried. """ _schema = {'$ref': '#/definitions/LookupSelection'} def __init__(self, key=Undefined, selection=Undefined, fields=Undefined, **kwds): super(LookupSelection, self).__init__(key=key, selection=selection, fields=fields, **kwds) class Mark(AnyMark): """Mark schema wrapper enum('area', 'bar', 'line', 'image', 'trail', 'point', 'text', 'tick', 'rect', 'rule', 'circle', 'square', 'geoshape') All types of primitive marks. """ _schema = {'$ref': '#/definitions/Mark'} def __init__(self, *args): super(Mark, self).__init__(*args) class MarkConfig(AnyMarkConfig): """MarkConfig schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of ``"left"``, ``"right"``, ``"center"``. angle : float The rotation angle of the text, in degrees. aspect : boolean Whether to keep aspect ratio of image marks. baseline : :class:`TextBaseline` The vertical text baseline. One of ``"alphabetic"`` (default), ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or ``"line-bottom"``. The ``"line-top"`` and ``"line-bottom"`` values operate similarly to ``"top"`` and ``"bottom"``, but are calculated relative to the ``lineHeight`` rather than ``fontSize`` alone. blend : :class:`Blend` The color blend mode for drawing an item on its current background. Any valid `CSS mix-blend-mode `__ value can be used. __Default value: ``"source-over"`` color : anyOf(:class:`Color`, :class:`Gradient`) Default color. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** * This property cannot be used in a `style config `__. * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and will override ``color``. cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cornerRadiusBottomLeft : float The radius in pixels of rounded rectangle bottom left corner. **Default value:** ``0`` cornerRadiusBottomRight : float The radius in pixels of rounded rectangle bottom right corner. **Default value:** ``0`` cornerRadiusTopLeft : float The radius in pixels of rounded rectangle top right corner. **Default value:** ``0`` cornerRadiusTopRight : float The radius in pixels of rounded rectangle top left corner. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the mark. Any valid `CSS cursor type `__ can be used. dir : :class:`TextDirection` The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"`` (right-to-left). This property determines on which side is truncated in response to the limit parameter. **Default value:** ``"ltr"`` dx : float The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. dy : float The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. ellipsis : string The ellipsis string for text truncated in response to the limit parameter. **Default value:** ``"…"`` fill : anyOf(:class:`Color`, :class:`Gradient`, None) Default Fill Color. This property has higher precedence than ``config.color``. **Default value:** (None) fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` filled : boolean Whether the mark's color should be used as fill color instead of stroke color. **Default value:** ``false`` for all ``point``, ``line``, and ``rule`` marks as well as ``geoshape`` marks for `graticule `__ data sources; otherwise, ``true``. **Note:** This property cannot be used in a `style config `__. font : string The typeface to set the text in (e.g., ``"Helvetica Neue"`` ). fontSize : float The font size, in pixels. **Default value:** ``11`` fontStyle : :class:`FontStyle` The font style (e.g., ``"italic"`` ). fontWeight : :class:`FontWeight` The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). height : float Height of the marks. href : string A URL to load upon mouse click. If defined, the mark acts as a hyperlink. interpolate : :class:`Interpolate` The line interpolation method to use for line and area marks. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : alternate between horizontal and vertical segments, as in a step function. * ``"step-before"`` : alternate between vertical and horizontal segments, as in a step function. * ``"step-after"`` : alternate between horizontal and vertical segments, as in a step function. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. invalid : enum('filter', None) Defines how Vega-Lite should handle marks for invalid values ( ``null`` and ``NaN`` ). * If set to ``"filter"`` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). * If ``null``, all data items are included. In this case, invalid values will be interpreted as zeroes. limit : float The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0`` -- indicating no limit lineBreak : string A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued. lineHeight : float The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks. opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. order : anyOf(None, boolean) For line and trail marks, this ``order`` property can be set to ``null`` or ``false`` to make the lines use the original order in the data sources. orient : :class:`Orientation` The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. * For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. * For area, this property determines the orient property of the Vega output. * For line and trail marks, this property determines the sort order of the points in the line if ``config.sortLineBy`` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored. radius : float Polar coordinate radial offset, in pixels, of the text label from the origin determined by the ``x`` and ``y`` properties. shape : anyOf(:class:`SymbolShape`, string) Shape of the point marks. Supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) **Default value:** ``"circle"`` size : float Default size for marks. * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value. * For ``bar``, this represents the band size of the bar, in pixels. * For ``text``, this represents the font size, in pixels. **Default value:** * ``30`` for point, circle, square marks; width/height's ``step`` * ``2`` for bar marks with discrete dimensions; * ``5`` for bar marks with continuous dimensions; * ``11`` for text marks. stroke : anyOf(:class:`Color`, :class:`Gradient`, None) Default Stroke Color. This property has higher precedence than ``config.color``. **Default value:** (None) strokeCap : string The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"butt"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : string The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOffset : float The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. tension : float Depending on the interpolation type, sets the tension parameter (for line and area marks). text : :class:`Text` Placeholder text if the ``text`` channel is not specified theta : float Polar coordinate angle, in radians, of the text label from the origin determined by the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in radians, with ``0`` indicating "north". timeUnitBand : float Default relative band size for a time unit. If set to ``1``, the bandwidth of the marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the marks will be half of the time unit band step. timeUnitBandPosition : float Default relative band position for a time unit. If set to ``0``, the marks will be positioned at the beginning of the time unit band step. If set to ``0.5``, the marks will be positioned in the middle of the time unit band step. tooltip : anyOf(float, string, boolean, :class:`TooltipContent`, None) The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from. * If ``tooltip`` is ``true`` or ``{"content": "encoding"}``, then all fields from ``encoding`` will be used. * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the highlighted data point will be used. * If set to ``null`` or ``false``, then no tooltip will be used. See the `tooltip `__ documentation for a detailed discussion about tooltip in Vega-Lite. **Default value:** ``null`` width : float Width of the marks. x : anyOf(float, enum('width')) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(float, enum('width')) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. y : anyOf(float, enum('height')) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(float, enum('height')) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. """ _schema = {'$ref': '#/definitions/MarkConfig'} def __init__(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, blend=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined, y2=Undefined, **kwds): super(MarkConfig, self).__init__(align=align, angle=angle, aspect=aspect, baseline=baseline, blend=blend, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, tension=tension, text=text, theta=theta, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, y=y, y2=y2, **kwds) class MarkDef(AnyMark): """MarkDef schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`Mark` The mark type. This could a primitive mark type (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"geoshape"``, ``"rule"``, and ``"text"`` ) or a composite mark type ( ``"boxplot"``, ``"errorband"``, ``"errorbar"`` ). align : :class:`Align` The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of ``"left"``, ``"right"``, ``"center"``. angle : float The rotation angle of the text, in degrees. aspect : boolean Whether to keep aspect ratio of image marks. baseline : :class:`TextBaseline` The vertical text baseline. One of ``"alphabetic"`` (default), ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or ``"line-bottom"``. The ``"line-top"`` and ``"line-bottom"`` values operate similarly to ``"top"`` and ``"bottom"``, but are calculated relative to the ``lineHeight`` rather than ``fontSize`` alone. binSpacing : float Offset between bars for binned field. The ideal value for this is either 0 (preferred by statisticians) or 1 (Vega-Lite default, D3 example style). **Default value:** ``1`` blend : :class:`Blend` The color blend mode for drawing an item on its current background. Any valid `CSS mix-blend-mode `__ value can be used. __Default value: ``"source-over"`` clip : boolean Whether a mark be clipped to the enclosing group’s width and height. color : anyOf(:class:`Color`, :class:`Gradient`) Default color. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** * This property cannot be used in a `style config `__. * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and will override ``color``. cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cornerRadiusBottomLeft : float The radius in pixels of rounded rectangle bottom left corner. **Default value:** ``0`` cornerRadiusBottomRight : float The radius in pixels of rounded rectangle bottom right corner. **Default value:** ``0`` cornerRadiusEnd : float * For vertical bars, top-left and top-right corner radius. * For horizontal bars, top-right and bottom-right corner radius. cornerRadiusTopLeft : float The radius in pixels of rounded rectangle top right corner. **Default value:** ``0`` cornerRadiusTopRight : float The radius in pixels of rounded rectangle top left corner. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the mark. Any valid `CSS cursor type `__ can be used. dir : :class:`TextDirection` The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"`` (right-to-left). This property determines on which side is truncated in response to the limit parameter. **Default value:** ``"ltr"`` dx : float The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. dy : float The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. ellipsis : string The ellipsis string for text truncated in response to the limit parameter. **Default value:** ``"…"`` fill : anyOf(:class:`Color`, :class:`Gradient`, None) Default Fill Color. This property has higher precedence than ``config.color``. **Default value:** (None) fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` filled : boolean Whether the mark's color should be used as fill color instead of stroke color. **Default value:** ``false`` for all ``point``, ``line``, and ``rule`` marks as well as ``geoshape`` marks for `graticule `__ data sources; otherwise, ``true``. **Note:** This property cannot be used in a `style config `__. font : string The typeface to set the text in (e.g., ``"Helvetica Neue"`` ). fontSize : float The font size, in pixels. **Default value:** ``11`` fontStyle : :class:`FontStyle` The font style (e.g., ``"italic"`` ). fontWeight : :class:`FontWeight` The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). height : float Height of the marks. href : string A URL to load upon mouse click. If defined, the mark acts as a hyperlink. interpolate : :class:`Interpolate` The line interpolation method to use for line and area marks. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : alternate between horizontal and vertical segments, as in a step function. * ``"step-before"`` : alternate between vertical and horizontal segments, as in a step function. * ``"step-after"`` : alternate between horizontal and vertical segments, as in a step function. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. invalid : enum('filter', None) Defines how Vega-Lite should handle marks for invalid values ( ``null`` and ``NaN`` ). * If set to ``"filter"`` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). * If ``null``, all data items are included. In this case, invalid values will be interpreted as zeroes. limit : float The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0`` -- indicating no limit line : anyOf(boolean, :class:`OverlayMarkDef`) A flag for overlaying line on top of area marks, or an object defining the properties of the overlayed lines. If this value is an empty object ( ``{}`` ) or ``true``, lines with default properties will be used. If this value is ``false``, no lines would be automatically added to area marks. **Default value:** ``false``. lineBreak : string A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued. lineHeight : float The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks. opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. order : anyOf(None, boolean) For line and trail marks, this ``order`` property can be set to ``null`` or ``false`` to make the lines use the original order in the data sources. orient : :class:`Orientation` The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. * For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. * For area, this property determines the orient property of the Vega output. * For line and trail marks, this property determines the sort order of the points in the line if ``config.sortLineBy`` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored. point : anyOf(boolean, :class:`OverlayMarkDef`, enum('transparent')) A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points. If this property is ``"transparent"``, transparent points will be used (for enhancing tooltips and selections). If this property is an empty object ( ``{}`` ) or ``true``, filled points with default properties will be used. If this property is ``false``, no points would be automatically added to line or area marks. **Default value:** ``false``. radius : float Polar coordinate radial offset, in pixels, of the text label from the origin determined by the ``x`` and ``y`` properties. shape : anyOf(:class:`SymbolShape`, string) Shape of the point marks. Supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) **Default value:** ``"circle"`` size : float Default size for marks. * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value. * For ``bar``, this represents the band size of the bar, in pixels. * For ``text``, this represents the font size, in pixels. **Default value:** * ``30`` for point, circle, square marks; width/height's ``step`` * ``2`` for bar marks with discrete dimensions; * ``5`` for bar marks with continuous dimensions; * ``11`` for text marks. stroke : anyOf(:class:`Color`, :class:`Gradient`, None) Default Stroke Color. This property has higher precedence than ``config.color``. **Default value:** (None) strokeCap : string The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"butt"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : string The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOffset : float The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. style : anyOf(string, List(string)) A string or array of strings indicating the name of custom styles to apply to the mark. A style is a named collection of mark property defaults defined within the `style configuration `__. If style is an array, later styles will override earlier styles. Any `mark properties `__ explicitly defined within the ``encoding`` will override a style default. **Default value:** The mark's name. For example, a bar mark will have style ``"bar"`` by default. **Note:** Any specified style will augment the default style. For example, a bar mark with ``"style": "foo"`` will receive from ``config.style.bar`` and ``config.style.foo`` (the specified style ``"foo"`` has higher precedence). tension : float Depending on the interpolation type, sets the tension parameter (for line and area marks). text : :class:`Text` Placeholder text if the ``text`` channel is not specified theta : float Polar coordinate angle, in radians, of the text label from the origin determined by the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in radians, with ``0`` indicating "north". thickness : float Thickness of the tick mark. **Default value:** ``1`` timeUnitBand : float Default relative band size for a time unit. If set to ``1``, the bandwidth of the marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the marks will be half of the time unit band step. timeUnitBandPosition : float Default relative band position for a time unit. If set to ``0``, the marks will be positioned at the beginning of the time unit band step. If set to ``0.5``, the marks will be positioned in the middle of the time unit band step. tooltip : anyOf(float, string, boolean, :class:`TooltipContent`, None) The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from. * If ``tooltip`` is ``true`` or ``{"content": "encoding"}``, then all fields from ``encoding`` will be used. * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the highlighted data point will be used. * If set to ``null`` or ``false``, then no tooltip will be used. See the `tooltip `__ documentation for a detailed discussion about tooltip in Vega-Lite. **Default value:** ``null`` width : float Width of the marks. x : anyOf(float, enum('width')) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(float, enum('width')) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2Offset : float Offset for x2-position. xOffset : float Offset for x-position. y : anyOf(float, enum('height')) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(float, enum('height')) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2Offset : float Offset for y2-position. yOffset : float Offset for y-position. """ _schema = {'$ref': '#/definitions/MarkDef'} def __init__(self, type=Undefined, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): super(MarkDef, self).__init__(type=type, align=align, angle=angle, aspect=aspect, baseline=baseline, binSpacing=binSpacing, blend=blend, clip=clip, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusEnd=cornerRadiusEnd, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, line=line, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) class MarkType(VegaLiteSchema): """MarkType schema wrapper enum('arc', 'area', 'image', 'group', 'line', 'path', 'rect', 'rule', 'shape', 'symbol', 'text', 'trail') """ _schema = {'$ref': '#/definitions/MarkType'} def __init__(self, *args): super(MarkType, self).__init__(*args) class Month(VegaLiteSchema): """Month schema wrapper float """ _schema = {'$ref': '#/definitions/Month'} def __init__(self, *args): super(Month, self).__init__(*args) class MultiSelectionConfig(VegaLiteSchema): """MultiSelectionConfig schema wrapper Mapping(required=[]) Attributes ---------- bind : :class:`LegendBinding` When set, a selection is populated by interacting with the corresponding legend. Direct manipulation interaction is disabled by default; to re-enable it, set the selection's `on `__ property. Legend bindings are restricted to selections that only specify a single field or encoding. clear : anyOf(:class:`Stream`, string, boolean) Clears the selection, emptying it of all values. Can be a `Event Stream `__ or ``false`` to disable. **Default value:** ``dblclick``. **See also:** `clear `__ documentation. empty : enum('all', 'none') By default, ``all`` data values are considered to lie within an empty selection. When set to ``none``, empty selections contain no data values. encodings : List(:class:`SingleDefUnitChannel`) An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection. **See also:** `encodings `__ documentation. fields : List(:class:`FieldName`) An array of field names whose values must match for a data tuple to fall within the selection. **See also:** `fields `__ documentation. init : List(:class:`SelectionInitMapping`) Initialize the selection with a mapping between `projected channels or field names `__ and an initial value (or array of values). **See also:** `init `__ documentation. nearest : boolean When true, an invisible voronoi diagram is computed to accelerate discrete selection. The data value *nearest* the mouse cursor is added to the selection. **See also:** `nearest `__ documentation. on : anyOf(:class:`Stream`, string) A `Vega event stream `__ (object or selector) that triggers the selection. For interval selections, the event stream must specify a `start and end `__. resolve : :class:`SelectionResolution` With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain. **See also:** `resolve `__ documentation. toggle : anyOf(string, boolean) Controls whether data values should be toggled or only ever inserted into multi selections. Can be ``true``, ``false`` (for insertion only), or a `Vega expression `__. **Default value:** ``true``, which corresponds to ``event.shiftKey`` (i.e., data values are toggled when a user interacts with the shift-key pressed). **See also:** `toggle `__ documentation. """ _schema = {'$ref': '#/definitions/MultiSelectionConfig'} def __init__(self, bind=Undefined, clear=Undefined, empty=Undefined, encodings=Undefined, fields=Undefined, init=Undefined, nearest=Undefined, on=Undefined, resolve=Undefined, toggle=Undefined, **kwds): super(MultiSelectionConfig, self).__init__(bind=bind, clear=clear, empty=empty, encodings=encodings, fields=fields, init=init, nearest=nearest, on=on, resolve=resolve, toggle=toggle, **kwds) class NamedData(DataSource): """NamedData schema wrapper Mapping(required=[name]) Attributes ---------- name : string Provide a placeholder name and bind data at runtime. format : :class:`DataFormat` An object that specifies the format for parsing the data. """ _schema = {'$ref': '#/definitions/NamedData'} def __init__(self, name=Undefined, format=Undefined, **kwds): super(NamedData, self).__init__(name=name, format=format, **kwds) class NonArgAggregateOp(Aggregate): """NonArgAggregateOp schema wrapper enum('average', 'count', 'distinct', 'max', 'mean', 'median', 'min', 'missing', 'product', 'q1', 'q3', 'ci0', 'ci1', 'stderr', 'stdev', 'stdevp', 'sum', 'valid', 'values', 'variance', 'variancep') """ _schema = {'$ref': '#/definitions/NonArgAggregateOp'} def __init__(self, *args): super(NonArgAggregateOp, self).__init__(*args) class NormalizedSpec(VegaLiteSchema): """NormalizedSpec schema wrapper anyOf(:class:`FacetedUnitSpec`, :class:`LayerSpec`, :class:`RepeatSpec`, :class:`NormalizedFacetSpec`, :class:`NormalizedConcatSpecGenericSpec`, :class:`NormalizedVConcatSpecGenericSpec`, :class:`NormalizedHConcatSpecGenericSpec`) Any specification in Vega-Lite. """ _schema = {'$ref': '#/definitions/NormalizedSpec'} def __init__(self, *args, **kwds): super(NormalizedSpec, self).__init__(*args, **kwds) class NormalizedConcatSpecGenericSpec(NormalizedSpec): """NormalizedConcatSpecGenericSpec schema wrapper Mapping(required=[concat]) Base interface for a generalized concatenation specification. Attributes ---------- concat : List(:class:`NormalizedSpec`) A list of views to be concatenated. align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`) The alignment to apply to grid rows and columns. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. Alternatively, an object value of the form ``{"row": string, "column": string}`` can be used to supply different alignments for rows and columns. **Default value:** ``"all"``. bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : anyOf(boolean, :class:`RowColboolean`) Boolean flag indicating if subviews should be centered relative to their respective rows or columns. An object value of the form ``{"row": boolean, "column": boolean}`` can be used to supply different centering values for rows and columns. **Default value:** ``false`` columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : anyOf(float, :class:`RowColnumber`) The spacing in pixels between sub-views of the composition operator. An object of the form ``{"row": number, "column": number}`` can be used to set different spacing values for rows and columns. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. """ _schema = {'$ref': '#/definitions/NormalizedConcatSpec'} def __init__(self, concat=Undefined, align=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, data=Undefined, description=Undefined, name=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, **kwds): super(NormalizedConcatSpecGenericSpec, self).__init__(concat=concat, align=align, bounds=bounds, center=center, columns=columns, data=data, description=description, name=name, resolve=resolve, spacing=spacing, title=title, transform=transform, **kwds) class NormalizedFacetSpec(NormalizedSpec): """NormalizedFacetSpec schema wrapper Mapping(required=[facet, spec]) Base interface for a facet specification. Attributes ---------- facet : anyOf(:class:`FacetFieldDef`, :class:`FacetMapping`) Definition for how to facet the data. One of: 1) `a field definition for faceting the plot by one field `__ 2) `An object that maps row and column channels to their field definitions `__ spec : anyOf(:class:`LayerSpec`, :class:`FacetedUnitSpec`) A specification of the view that gets faceted. align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`) The alignment to apply to grid rows and columns. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. Alternatively, an object value of the form ``{"row": string, "column": string}`` can be used to supply different alignments for rows and columns. **Default value:** ``"all"``. bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : anyOf(boolean, :class:`RowColboolean`) Boolean flag indicating if subviews should be centered relative to their respective rows or columns. An object value of the form ``{"row": boolean, "column": boolean}`` can be used to supply different centering values for rows and columns. **Default value:** ``false`` columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : anyOf(float, :class:`RowColnumber`) The spacing in pixels between sub-views of the composition operator. An object of the form ``{"row": number, "column": number}`` can be used to set different spacing values for rows and columns. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. """ _schema = {'$ref': '#/definitions/NormalizedFacetSpec'} def __init__(self, facet=Undefined, spec=Undefined, align=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, data=Undefined, description=Undefined, name=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, **kwds): super(NormalizedFacetSpec, self).__init__(facet=facet, spec=spec, align=align, bounds=bounds, center=center, columns=columns, data=data, description=description, name=name, resolve=resolve, spacing=spacing, title=title, transform=transform, **kwds) class NormalizedHConcatSpecGenericSpec(NormalizedSpec): """NormalizedHConcatSpecGenericSpec schema wrapper Mapping(required=[hconcat]) Base interface for a horizontal concatenation specification. Attributes ---------- hconcat : List(:class:`NormalizedSpec`) A list of views to be concatenated and put into a row. bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : boolean Boolean flag indicating if subviews should be centered relative to their respective rows or columns. **Default value:** ``false`` data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : float The spacing in pixels between sub-views of the concat operator. **Default value** : ``10`` title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. """ _schema = {'$ref': '#/definitions/NormalizedHConcatSpec'} def __init__(self, hconcat=Undefined, bounds=Undefined, center=Undefined, data=Undefined, description=Undefined, name=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, **kwds): super(NormalizedHConcatSpecGenericSpec, self).__init__(hconcat=hconcat, bounds=bounds, center=center, data=data, description=description, name=name, resolve=resolve, spacing=spacing, title=title, transform=transform, **kwds) class NormalizedVConcatSpecGenericSpec(NormalizedSpec): """NormalizedVConcatSpecGenericSpec schema wrapper Mapping(required=[vconcat]) Base interface for a vertical concatenation specification. Attributes ---------- vconcat : List(:class:`NormalizedSpec`) A list of views to be concatenated and put into a column. bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : boolean Boolean flag indicating if subviews should be centered relative to their respective rows or columns. **Default value:** ``false`` data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : float The spacing in pixels between sub-views of the concat operator. **Default value** : ``10`` title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. """ _schema = {'$ref': '#/definitions/NormalizedVConcatSpec'} def __init__(self, vconcat=Undefined, bounds=Undefined, center=Undefined, data=Undefined, description=Undefined, name=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, **kwds): super(NormalizedVConcatSpecGenericSpec, self).__init__(vconcat=vconcat, bounds=bounds, center=center, data=data, description=description, name=name, resolve=resolve, spacing=spacing, title=title, transform=transform, **kwds) class NumberValueDef(VegaLiteSchema): """NumberValueDef schema wrapper Mapping(required=[value]) Definition object for a constant value (primitive value or gradient definition) of an encoding channel. Attributes ---------- value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/NumberValueDef'} def __init__(self, value=Undefined, **kwds): super(NumberValueDef, self).__init__(value=value, **kwds) class NumericArrayFieldDefWithCondition(VegaLiteSchema): """NumericArrayFieldDefWithCondition schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionnumber` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/NumericArrayFieldDefWithCondition'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(NumericArrayFieldDefWithCondition, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class NumericArrayValueDefWithCondition(VegaLiteSchema): """NumericArrayValueDefWithCondition schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionnumber`) A field definition or one or more value definition(s) with a selection predicate. value : List(float) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/NumericArrayValueDefWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(NumericArrayValueDefWithCondition, self).__init__(condition=condition, value=value, **kwds) class NumericFieldDefWithCondition(VegaLiteSchema): """NumericFieldDefWithCondition schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionnumber` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/NumericFieldDefWithCondition'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(NumericFieldDefWithCondition, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class NumericValueWithCondition(VegaLiteSchema): """NumericValueWithCondition schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionnumber`) A field definition or one or more value definition(s) with a selection predicate. value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/NumericValueWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(NumericValueWithCondition, self).__init__(condition=condition, value=value, **kwds) class OrderFieldDef(VegaLiteSchema): """OrderFieldDef schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. sort : :class:`SortOrder` The sort order. One of ``"ascending"`` (default) or ``"descending"``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/OrderFieldDef'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(OrderFieldDef, self).__init__(type=type, aggregate=aggregate, bin=bin, field=field, sort=sort, timeUnit=timeUnit, title=title, **kwds) class Orient(VegaLiteSchema): """Orient schema wrapper enum('left', 'right', 'top', 'bottom') """ _schema = {'$ref': '#/definitions/Orient'} def __init__(self, *args): super(Orient, self).__init__(*args) class Orientation(VegaLiteSchema): """Orientation schema wrapper enum('horizontal', 'vertical') """ _schema = {'$ref': '#/definitions/Orientation'} def __init__(self, *args): super(Orientation, self).__init__(*args) class OverlayMarkDef(VegaLiteSchema): """OverlayMarkDef schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of ``"left"``, ``"right"``, ``"center"``. angle : float The rotation angle of the text, in degrees. aspect : boolean Whether to keep aspect ratio of image marks. baseline : :class:`TextBaseline` The vertical text baseline. One of ``"alphabetic"`` (default), ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or ``"line-bottom"``. The ``"line-top"`` and ``"line-bottom"`` values operate similarly to ``"top"`` and ``"bottom"``, but are calculated relative to the ``lineHeight`` rather than ``fontSize`` alone. blend : :class:`Blend` The color blend mode for drawing an item on its current background. Any valid `CSS mix-blend-mode `__ value can be used. __Default value: ``"source-over"`` clip : boolean Whether a mark be clipped to the enclosing group’s width and height. color : anyOf(:class:`Color`, :class:`Gradient`) Default color. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** * This property cannot be used in a `style config `__. * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and will override ``color``. cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cornerRadiusBottomLeft : float The radius in pixels of rounded rectangle bottom left corner. **Default value:** ``0`` cornerRadiusBottomRight : float The radius in pixels of rounded rectangle bottom right corner. **Default value:** ``0`` cornerRadiusTopLeft : float The radius in pixels of rounded rectangle top right corner. **Default value:** ``0`` cornerRadiusTopRight : float The radius in pixels of rounded rectangle top left corner. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the mark. Any valid `CSS cursor type `__ can be used. dir : :class:`TextDirection` The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"`` (right-to-left). This property determines on which side is truncated in response to the limit parameter. **Default value:** ``"ltr"`` dx : float The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. dy : float The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. ellipsis : string The ellipsis string for text truncated in response to the limit parameter. **Default value:** ``"…"`` fill : anyOf(:class:`Color`, :class:`Gradient`, None) Default Fill Color. This property has higher precedence than ``config.color``. **Default value:** (None) fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` filled : boolean Whether the mark's color should be used as fill color instead of stroke color. **Default value:** ``false`` for all ``point``, ``line``, and ``rule`` marks as well as ``geoshape`` marks for `graticule `__ data sources; otherwise, ``true``. **Note:** This property cannot be used in a `style config `__. font : string The typeface to set the text in (e.g., ``"Helvetica Neue"`` ). fontSize : float The font size, in pixels. **Default value:** ``11`` fontStyle : :class:`FontStyle` The font style (e.g., ``"italic"`` ). fontWeight : :class:`FontWeight` The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). height : float Height of the marks. href : string A URL to load upon mouse click. If defined, the mark acts as a hyperlink. interpolate : :class:`Interpolate` The line interpolation method to use for line and area marks. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : alternate between horizontal and vertical segments, as in a step function. * ``"step-before"`` : alternate between vertical and horizontal segments, as in a step function. * ``"step-after"`` : alternate between horizontal and vertical segments, as in a step function. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. invalid : enum('filter', None) Defines how Vega-Lite should handle marks for invalid values ( ``null`` and ``NaN`` ). * If set to ``"filter"`` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). * If ``null``, all data items are included. In this case, invalid values will be interpreted as zeroes. limit : float The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0`` -- indicating no limit lineBreak : string A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued. lineHeight : float The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks. opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. order : anyOf(None, boolean) For line and trail marks, this ``order`` property can be set to ``null`` or ``false`` to make the lines use the original order in the data sources. orient : :class:`Orientation` The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. * For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. * For area, this property determines the orient property of the Vega output. * For line and trail marks, this property determines the sort order of the points in the line if ``config.sortLineBy`` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored. radius : float Polar coordinate radial offset, in pixels, of the text label from the origin determined by the ``x`` and ``y`` properties. shape : anyOf(:class:`SymbolShape`, string) Shape of the point marks. Supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) **Default value:** ``"circle"`` size : float Default size for marks. * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value. * For ``bar``, this represents the band size of the bar, in pixels. * For ``text``, this represents the font size, in pixels. **Default value:** * ``30`` for point, circle, square marks; width/height's ``step`` * ``2`` for bar marks with discrete dimensions; * ``5`` for bar marks with continuous dimensions; * ``11`` for text marks. stroke : anyOf(:class:`Color`, :class:`Gradient`, None) Default Stroke Color. This property has higher precedence than ``config.color``. **Default value:** (None) strokeCap : string The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"butt"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : string The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOffset : float The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. style : anyOf(string, List(string)) A string or array of strings indicating the name of custom styles to apply to the mark. A style is a named collection of mark property defaults defined within the `style configuration `__. If style is an array, later styles will override earlier styles. Any `mark properties `__ explicitly defined within the ``encoding`` will override a style default. **Default value:** The mark's name. For example, a bar mark will have style ``"bar"`` by default. **Note:** Any specified style will augment the default style. For example, a bar mark with ``"style": "foo"`` will receive from ``config.style.bar`` and ``config.style.foo`` (the specified style ``"foo"`` has higher precedence). tension : float Depending on the interpolation type, sets the tension parameter (for line and area marks). text : :class:`Text` Placeholder text if the ``text`` channel is not specified theta : float Polar coordinate angle, in radians, of the text label from the origin determined by the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in radians, with ``0`` indicating "north". timeUnitBand : float Default relative band size for a time unit. If set to ``1``, the bandwidth of the marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the marks will be half of the time unit band step. timeUnitBandPosition : float Default relative band position for a time unit. If set to ``0``, the marks will be positioned at the beginning of the time unit band step. If set to ``0.5``, the marks will be positioned in the middle of the time unit band step. tooltip : anyOf(float, string, boolean, :class:`TooltipContent`, None) The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from. * If ``tooltip`` is ``true`` or ``{"content": "encoding"}``, then all fields from ``encoding`` will be used. * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the highlighted data point will be used. * If set to ``null`` or ``false``, then no tooltip will be used. See the `tooltip `__ documentation for a detailed discussion about tooltip in Vega-Lite. **Default value:** ``null`` width : float Width of the marks. x : anyOf(float, enum('width')) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(float, enum('width')) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2Offset : float Offset for x2-position. xOffset : float Offset for x-position. y : anyOf(float, enum('height')) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(float, enum('height')) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2Offset : float Offset for y2-position. yOffset : float Offset for y-position. """ _schema = {'$ref': '#/definitions/OverlayMarkDef'} def __init__(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, blend=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): super(OverlayMarkDef, self).__init__(align=align, angle=angle, aspect=aspect, baseline=baseline, blend=blend, clip=clip, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) class Padding(VegaLiteSchema): """Padding schema wrapper anyOf(float, Mapping(required=[])) """ _schema = {'$ref': '#/definitions/Padding'} def __init__(self, *args, **kwds): super(Padding, self).__init__(*args, **kwds) class Parse(VegaLiteSchema): """Parse schema wrapper Mapping(required=[]) """ _schema = {'$ref': '#/definitions/Parse'} def __init__(self, **kwds): super(Parse, self).__init__(**kwds) class ParseValue(VegaLiteSchema): """ParseValue schema wrapper anyOf(None, string, enum('string'), enum('boolean'), enum('date'), enum('number')) """ _schema = {'$ref': '#/definitions/ParseValue'} def __init__(self, *args, **kwds): super(ParseValue, self).__init__(*args, **kwds) class PositionFieldDef(VegaLiteSchema): """PositionFieldDef schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. axis : anyOf(:class:`Axis`, None) An object defining properties of axis's gridlines, ticks and labels. If ``null``, the axis for the encoding channel will be removed. **Default value:** If undefined, default `axis properties `__ are applied. **See also:** `axis `__ documentation. band : float For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to bandwidth of `band scales `__ or time units. If set to ``1``, the mark size is set to the bandwidth or the time unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time unit interval. For other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to ``0``, the marks will be positioned at the beginning of the band. If set to ``0.5``, the marks will be positioned in the middle of the band. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. impute : anyOf(:class:`ImputeParams`, None) An object defining the properties of the Impute Operation to be applied. The field value of the other positional channel is taken as ``key`` of the ``Impute`` Operation. The field of the ``color`` channel if specified is used as ``groupby`` of the ``Impute`` Operation. **See also:** `impute `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. stack : anyOf(:class:`StackOffset`, None, boolean) Type of stacking offset if the field should be stacked. ``stack`` is only applicable for ``x`` and ``y`` channels with continuous domains. For example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar chart. ``stack`` can be one of the following values: * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area `__ chart). * ``"normalize"`` - stacking with normalized domain (for creating `normalized stacked bar and area charts `__. :raw-html:`
` - ``"center"`` - stacking with center baseline (for `streamgraph `__ ). * ``null`` or ``false`` - No-stacking. This will produce layered `bar `__ and area chart. **Default value:** ``zero`` for plots with all of the following conditions are true: (1) the mark is ``bar`` or ``area`` ; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, ``null`` by default. **See also:** `stack `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/PositionFieldDef'} def __init__(self, type=Undefined, aggregate=Undefined, axis=Undefined, band=Undefined, bin=Undefined, field=Undefined, impute=Undefined, scale=Undefined, sort=Undefined, stack=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(PositionFieldDef, self).__init__(type=type, aggregate=aggregate, axis=axis, band=band, bin=bin, field=field, impute=impute, scale=scale, sort=sort, stack=stack, timeUnit=timeUnit, title=title, **kwds) class PredicateComposition(VegaLiteSchema): """PredicateComposition schema wrapper anyOf(:class:`LogicalNotPredicate`, :class:`LogicalAndPredicate`, :class:`LogicalOrPredicate`, :class:`Predicate`) """ _schema = {'$ref': '#/definitions/PredicateComposition'} def __init__(self, *args, **kwds): super(PredicateComposition, self).__init__(*args, **kwds) class LogicalAndPredicate(PredicateComposition): """LogicalAndPredicate schema wrapper Mapping(required=[and]) Attributes ---------- and : List(:class:`PredicateComposition`) """ _schema = {'$ref': '#/definitions/LogicalAnd'} def __init__(self, **kwds): super(LogicalAndPredicate, self).__init__(**kwds) class LogicalNotPredicate(PredicateComposition): """LogicalNotPredicate schema wrapper Mapping(required=[not]) Attributes ---------- not : :class:`PredicateComposition` """ _schema = {'$ref': '#/definitions/LogicalNot'} def __init__(self, **kwds): super(LogicalNotPredicate, self).__init__(**kwds) class LogicalOrPredicate(PredicateComposition): """LogicalOrPredicate schema wrapper Mapping(required=[or]) Attributes ---------- or : List(:class:`PredicateComposition`) """ _schema = {'$ref': '#/definitions/LogicalOr'} def __init__(self, **kwds): super(LogicalOrPredicate, self).__init__(**kwds) class Predicate(PredicateComposition): """Predicate schema wrapper anyOf(:class:`FieldEqualPredicate`, :class:`FieldRangePredicate`, :class:`FieldOneOfPredicate`, :class:`FieldLTPredicate`, :class:`FieldGTPredicate`, :class:`FieldLTEPredicate`, :class:`FieldGTEPredicate`, :class:`FieldValidPredicate`, :class:`SelectionPredicate`, string) """ _schema = {'$ref': '#/definitions/Predicate'} def __init__(self, *args, **kwds): super(Predicate, self).__init__(*args, **kwds) class FieldEqualPredicate(Predicate): """FieldEqualPredicate schema wrapper Mapping(required=[equal, field]) Attributes ---------- equal : anyOf(string, float, boolean, :class:`DateTime`) The value that the field should be equal to. field : :class:`FieldName` Field to be tested. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit for the field to be tested. """ _schema = {'$ref': '#/definitions/FieldEqualPredicate'} def __init__(self, equal=Undefined, field=Undefined, timeUnit=Undefined, **kwds): super(FieldEqualPredicate, self).__init__(equal=equal, field=field, timeUnit=timeUnit, **kwds) class FieldGTEPredicate(Predicate): """FieldGTEPredicate schema wrapper Mapping(required=[field, gte]) Attributes ---------- field : :class:`FieldName` Field to be tested. gte : anyOf(string, float, :class:`DateTime`) The value that the field should be greater than or equals to. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit for the field to be tested. """ _schema = {'$ref': '#/definitions/FieldGTEPredicate'} def __init__(self, field=Undefined, gte=Undefined, timeUnit=Undefined, **kwds): super(FieldGTEPredicate, self).__init__(field=field, gte=gte, timeUnit=timeUnit, **kwds) class FieldGTPredicate(Predicate): """FieldGTPredicate schema wrapper Mapping(required=[field, gt]) Attributes ---------- field : :class:`FieldName` Field to be tested. gt : anyOf(string, float, :class:`DateTime`) The value that the field should be greater than. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit for the field to be tested. """ _schema = {'$ref': '#/definitions/FieldGTPredicate'} def __init__(self, field=Undefined, gt=Undefined, timeUnit=Undefined, **kwds): super(FieldGTPredicate, self).__init__(field=field, gt=gt, timeUnit=timeUnit, **kwds) class FieldLTEPredicate(Predicate): """FieldLTEPredicate schema wrapper Mapping(required=[field, lte]) Attributes ---------- field : :class:`FieldName` Field to be tested. lte : anyOf(string, float, :class:`DateTime`) The value that the field should be less than or equals to. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit for the field to be tested. """ _schema = {'$ref': '#/definitions/FieldLTEPredicate'} def __init__(self, field=Undefined, lte=Undefined, timeUnit=Undefined, **kwds): super(FieldLTEPredicate, self).__init__(field=field, lte=lte, timeUnit=timeUnit, **kwds) class FieldLTPredicate(Predicate): """FieldLTPredicate schema wrapper Mapping(required=[field, lt]) Attributes ---------- field : :class:`FieldName` Field to be tested. lt : anyOf(string, float, :class:`DateTime`) The value that the field should be less than. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit for the field to be tested. """ _schema = {'$ref': '#/definitions/FieldLTPredicate'} def __init__(self, field=Undefined, lt=Undefined, timeUnit=Undefined, **kwds): super(FieldLTPredicate, self).__init__(field=field, lt=lt, timeUnit=timeUnit, **kwds) class FieldOneOfPredicate(Predicate): """FieldOneOfPredicate schema wrapper Mapping(required=[field, oneOf]) Attributes ---------- field : :class:`FieldName` Field to be tested. oneOf : anyOf(List(string), List(float), List(boolean), List(:class:`DateTime`)) A set of values that the ``field`` 's value should be a member of, for a data item included in the filtered data. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit for the field to be tested. """ _schema = {'$ref': '#/definitions/FieldOneOfPredicate'} def __init__(self, field=Undefined, oneOf=Undefined, timeUnit=Undefined, **kwds): super(FieldOneOfPredicate, self).__init__(field=field, oneOf=oneOf, timeUnit=timeUnit, **kwds) class FieldRangePredicate(Predicate): """FieldRangePredicate schema wrapper Mapping(required=[field, range]) Attributes ---------- field : :class:`FieldName` Field to be tested. range : List(anyOf(float, :class:`DateTime`, None)) An array of inclusive minimum and maximum values for a field value of a data item to be included in the filtered data. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit for the field to be tested. """ _schema = {'$ref': '#/definitions/FieldRangePredicate'} def __init__(self, field=Undefined, range=Undefined, timeUnit=Undefined, **kwds): super(FieldRangePredicate, self).__init__(field=field, range=range, timeUnit=timeUnit, **kwds) class FieldValidPredicate(Predicate): """FieldValidPredicate schema wrapper Mapping(required=[field, valid]) Attributes ---------- field : :class:`FieldName` Field to be tested. valid : boolean If set to true the field's value has to be valid, meaning both not ``null`` and not `NaN `__. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit for the field to be tested. """ _schema = {'$ref': '#/definitions/FieldValidPredicate'} def __init__(self, field=Undefined, valid=Undefined, timeUnit=Undefined, **kwds): super(FieldValidPredicate, self).__init__(field=field, valid=valid, timeUnit=timeUnit, **kwds) class Projection(VegaLiteSchema): """Projection schema wrapper Mapping(required=[]) Attributes ---------- center : :class:`Vector2number` The projection's center, a two-element array of longitude and latitude in degrees. **Default value:** ``[0, 0]`` clipAngle : float The projection's clipping circle radius to the specified angle in degrees. If ``null``, switches to `antimeridian `__ cutting rather than small-circle clipping. clipExtent : :class:`Vector2Vector2number` The projection's viewport clip extent to the specified bounds in pixels. The extent bounds are specified as an array ``[[x0, y0], [x1, y1]]``, where ``x0`` is the left-side of the viewport, ``y0`` is the top, ``x1`` is the right and ``y1`` is the bottom. If ``null``, no viewport clipping is performed. coefficient : float distance : float extent : :class:`Vector2Vector2number` fit : anyOf(:class:`Fit`, List(:class:`Fit`)) fraction : float lobes : float parallel : float parallels : List(float) For conic projections, the `two standard parallels `__ that define the map layout. The default depends on the specific conic projection used. pointRadius : float The default radius (in pixels) to use when drawing GeoJSON ``Point`` and ``MultiPoint`` geometries. This parameter sets a constant default value. To modify the point radius in response to data, see the corresponding parameter of the GeoPath and GeoShape transforms. **Default value:** ``4.5`` precision : float The threshold for the projection's `adaptive resampling `__ to the specified value in pixels. This value corresponds to the `Douglas–Peucker distance `__. If precision is not specified, returns the projection's current resampling precision which defaults to ``√0.5 ≅ 0.70710…``. radius : float ratio : float reflectX : boolean reflectY : boolean rotate : anyOf(:class:`Vector2number`, :class:`Vector3number`) The projection's three-axis rotation to the specified angles, which must be a two- or three-element array of numbers [ ``lambda``, ``phi``, ``gamma`` ] specifying the rotation angles in degrees about each spherical axis. (These correspond to yaw, pitch and roll.) **Default value:** ``[0, 0, 0]`` scale : float The projection’s scale (zoom) factor, overriding automatic fitting. The default scale is projection-specific. The scale factor corresponds linearly to the distance between projected points; however, scale factor values are not equivalent across projections. size : :class:`Vector2number` spacing : float tilt : float translate : :class:`Vector2number` The projection’s translation offset as a two-element array ``[tx, ty]``. type : :class:`ProjectionType` The cartographic projection to use. This value is case-insensitive, for example ``"albers"`` and ``"Albers"`` indicate the same projection type. You can find all valid projection types `in the documentation `__. **Default value:** ``mercator`` """ _schema = {'$ref': '#/definitions/Projection'} def __init__(self, center=Undefined, clipAngle=Undefined, clipExtent=Undefined, coefficient=Undefined, distance=Undefined, extent=Undefined, fit=Undefined, fraction=Undefined, lobes=Undefined, parallel=Undefined, parallels=Undefined, pointRadius=Undefined, precision=Undefined, radius=Undefined, ratio=Undefined, reflectX=Undefined, reflectY=Undefined, rotate=Undefined, scale=Undefined, size=Undefined, spacing=Undefined, tilt=Undefined, translate=Undefined, type=Undefined, **kwds): super(Projection, self).__init__(center=center, clipAngle=clipAngle, clipExtent=clipExtent, coefficient=coefficient, distance=distance, extent=extent, fit=fit, fraction=fraction, lobes=lobes, parallel=parallel, parallels=parallels, pointRadius=pointRadius, precision=precision, radius=radius, ratio=ratio, reflectX=reflectX, reflectY=reflectY, rotate=rotate, scale=scale, size=size, spacing=spacing, tilt=tilt, translate=translate, type=type, **kwds) class ProjectionConfig(VegaLiteSchema): """ProjectionConfig schema wrapper Mapping(required=[]) Attributes ---------- center : :class:`Vector2number` The projection's center, a two-element array of longitude and latitude in degrees. **Default value:** ``[0, 0]`` clipAngle : float The projection's clipping circle radius to the specified angle in degrees. If ``null``, switches to `antimeridian `__ cutting rather than small-circle clipping. clipExtent : :class:`Vector2Vector2number` The projection's viewport clip extent to the specified bounds in pixels. The extent bounds are specified as an array ``[[x0, y0], [x1, y1]]``, where ``x0`` is the left-side of the viewport, ``y0`` is the top, ``x1`` is the right and ``y1`` is the bottom. If ``null``, no viewport clipping is performed. coefficient : float distance : float extent : :class:`Vector2Vector2number` fit : anyOf(:class:`Fit`, List(:class:`Fit`)) fraction : float lobes : float parallel : float parallels : List(float) For conic projections, the `two standard parallels `__ that define the map layout. The default depends on the specific conic projection used. pointRadius : float The default radius (in pixels) to use when drawing GeoJSON ``Point`` and ``MultiPoint`` geometries. This parameter sets a constant default value. To modify the point radius in response to data, see the corresponding parameter of the GeoPath and GeoShape transforms. **Default value:** ``4.5`` precision : float The threshold for the projection's `adaptive resampling `__ to the specified value in pixels. This value corresponds to the `Douglas–Peucker distance `__. If precision is not specified, returns the projection's current resampling precision which defaults to ``√0.5 ≅ 0.70710…``. radius : float ratio : float reflectX : boolean reflectY : boolean rotate : anyOf(:class:`Vector2number`, :class:`Vector3number`) The projection's three-axis rotation to the specified angles, which must be a two- or three-element array of numbers [ ``lambda``, ``phi``, ``gamma`` ] specifying the rotation angles in degrees about each spherical axis. (These correspond to yaw, pitch and roll.) **Default value:** ``[0, 0, 0]`` scale : float The projection’s scale (zoom) factor, overriding automatic fitting. The default scale is projection-specific. The scale factor corresponds linearly to the distance between projected points; however, scale factor values are not equivalent across projections. size : :class:`Vector2number` spacing : float tilt : float translate : :class:`Vector2number` The projection’s translation offset as a two-element array ``[tx, ty]``. type : :class:`ProjectionType` The cartographic projection to use. This value is case-insensitive, for example ``"albers"`` and ``"Albers"`` indicate the same projection type. You can find all valid projection types `in the documentation `__. **Default value:** ``mercator`` """ _schema = {'$ref': '#/definitions/ProjectionConfig'} def __init__(self, center=Undefined, clipAngle=Undefined, clipExtent=Undefined, coefficient=Undefined, distance=Undefined, extent=Undefined, fit=Undefined, fraction=Undefined, lobes=Undefined, parallel=Undefined, parallels=Undefined, pointRadius=Undefined, precision=Undefined, radius=Undefined, ratio=Undefined, reflectX=Undefined, reflectY=Undefined, rotate=Undefined, scale=Undefined, size=Undefined, spacing=Undefined, tilt=Undefined, translate=Undefined, type=Undefined, **kwds): super(ProjectionConfig, self).__init__(center=center, clipAngle=clipAngle, clipExtent=clipExtent, coefficient=coefficient, distance=distance, extent=extent, fit=fit, fraction=fraction, lobes=lobes, parallel=parallel, parallels=parallels, pointRadius=pointRadius, precision=precision, radius=radius, ratio=ratio, reflectX=reflectX, reflectY=reflectY, rotate=rotate, scale=scale, size=size, spacing=spacing, tilt=tilt, translate=translate, type=type, **kwds) class ProjectionType(VegaLiteSchema): """ProjectionType schema wrapper enum('albers', 'albersUsa', 'azimuthalEqualArea', 'azimuthalEquidistant', 'conicConformal', 'conicEqualArea', 'conicEquidistant', 'equalEarth', 'equirectangular', 'gnomonic', 'identity', 'mercator', 'naturalEarth1', 'orthographic', 'stereographic', 'transverseMercator') """ _schema = {'$ref': '#/definitions/ProjectionType'} def __init__(self, *args): super(ProjectionType, self).__init__(*args) class RadialGradient(Gradient): """RadialGradient schema wrapper Mapping(required=[gradient, stops]) Attributes ---------- gradient : enum('radial') The type of gradient. Use ``"radial"`` for a radial gradient. stops : List(:class:`GradientStop`) An array of gradient stops defining the gradient color sequence. id : string r1 : float The radius length, in normalized [0, 1] coordinates, of the inner circle for the gradient. **Default value:** ``0`` r2 : float The radius length, in normalized [0, 1] coordinates, of the outer circle for the gradient. **Default value:** ``0.5`` x1 : float The x-coordinate, in normalized [0, 1] coordinates, for the center of the inner circle for the gradient. **Default value:** ``0.5`` x2 : float The x-coordinate, in normalized [0, 1] coordinates, for the center of the outer circle for the gradient. **Default value:** ``0.5`` y1 : float The y-coordinate, in normalized [0, 1] coordinates, for the center of the inner circle for the gradient. **Default value:** ``0.5`` y2 : float The y-coordinate, in normalized [0, 1] coordinates, for the center of the outer circle for the gradient. **Default value:** ``0.5`` """ _schema = {'$ref': '#/definitions/RadialGradient'} def __init__(self, gradient=Undefined, stops=Undefined, id=Undefined, r1=Undefined, r2=Undefined, x1=Undefined, x2=Undefined, y1=Undefined, y2=Undefined, **kwds): super(RadialGradient, self).__init__(gradient=gradient, stops=stops, id=id, r1=r1, r2=r2, x1=x1, x2=x2, y1=y1, y2=y2, **kwds) class RangeConfig(VegaLiteSchema): """RangeConfig schema wrapper Mapping(required=[]) Attributes ---------- category : anyOf(:class:`RangeScheme`, List(string)) Default `color scheme `__ for categorical data. diverging : anyOf(:class:`RangeScheme`, List(string)) Default `color scheme `__ for diverging quantitative ramps. heatmap : anyOf(:class:`RangeScheme`, List(string)) Default `color scheme `__ for quantitative heatmaps. ordinal : anyOf(:class:`RangeScheme`, List(string)) Default `color scheme `__ for rank-ordered data. ramp : anyOf(:class:`RangeScheme`, List(string)) Default `color scheme `__ for sequential quantitative ramps. symbol : List(:class:`SymbolShape`) Array of `symbol `__ names or paths for the default shape palette. """ _schema = {'$ref': '#/definitions/RangeConfig'} def __init__(self, category=Undefined, diverging=Undefined, heatmap=Undefined, ordinal=Undefined, ramp=Undefined, symbol=Undefined, **kwds): super(RangeConfig, self).__init__(category=category, diverging=diverging, heatmap=heatmap, ordinal=ordinal, ramp=ramp, symbol=symbol, **kwds) class RangeRawArray(VegaLiteSchema): """RangeRawArray schema wrapper List(float) """ _schema = {'$ref': '#/definitions/RangeRawArray'} def __init__(self, *args): super(RangeRawArray, self).__init__(*args) class RangeScheme(VegaLiteSchema): """RangeScheme schema wrapper anyOf(:class:`RangeEnum`, :class:`RangeRaw`, Mapping(required=[scheme])) """ _schema = {'$ref': '#/definitions/RangeScheme'} def __init__(self, *args, **kwds): super(RangeScheme, self).__init__(*args, **kwds) class RangeEnum(RangeScheme): """RangeEnum schema wrapper enum('width', 'height', 'symbol', 'category', 'ordinal', 'ramp', 'diverging', 'heatmap') """ _schema = {'$ref': '#/definitions/RangeEnum'} def __init__(self, *args): super(RangeEnum, self).__init__(*args) class RangeRaw(RangeScheme): """RangeRaw schema wrapper List(anyOf(None, boolean, string, float, :class:`RangeRawArray`)) """ _schema = {'$ref': '#/definitions/RangeRaw'} def __init__(self, *args): super(RangeRaw, self).__init__(*args) class RectConfig(AnyMarkConfig): """RectConfig schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of ``"left"``, ``"right"``, ``"center"``. angle : float The rotation angle of the text, in degrees. aspect : boolean Whether to keep aspect ratio of image marks. baseline : :class:`TextBaseline` The vertical text baseline. One of ``"alphabetic"`` (default), ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or ``"line-bottom"``. The ``"line-top"`` and ``"line-bottom"`` values operate similarly to ``"top"`` and ``"bottom"``, but are calculated relative to the ``lineHeight`` rather than ``fontSize`` alone. binSpacing : float Offset between bars for binned field. The ideal value for this is either 0 (preferred by statisticians) or 1 (Vega-Lite default, D3 example style). **Default value:** ``1`` blend : :class:`Blend` The color blend mode for drawing an item on its current background. Any valid `CSS mix-blend-mode `__ value can be used. __Default value: ``"source-over"`` color : anyOf(:class:`Color`, :class:`Gradient`) Default color. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** * This property cannot be used in a `style config `__. * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and will override ``color``. continuousBandSize : float The default size of the bars on continuous scales. **Default value:** ``5`` cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cornerRadiusBottomLeft : float The radius in pixels of rounded rectangle bottom left corner. **Default value:** ``0`` cornerRadiusBottomRight : float The radius in pixels of rounded rectangle bottom right corner. **Default value:** ``0`` cornerRadiusTopLeft : float The radius in pixels of rounded rectangle top right corner. **Default value:** ``0`` cornerRadiusTopRight : float The radius in pixels of rounded rectangle top left corner. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the mark. Any valid `CSS cursor type `__ can be used. dir : :class:`TextDirection` The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"`` (right-to-left). This property determines on which side is truncated in response to the limit parameter. **Default value:** ``"ltr"`` discreteBandSize : float The default size of the bars with discrete dimensions. If unspecified, the default size is ``step-2``, which provides 2 pixel offset between bars. dx : float The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. dy : float The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. ellipsis : string The ellipsis string for text truncated in response to the limit parameter. **Default value:** ``"…"`` fill : anyOf(:class:`Color`, :class:`Gradient`, None) Default Fill Color. This property has higher precedence than ``config.color``. **Default value:** (None) fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` filled : boolean Whether the mark's color should be used as fill color instead of stroke color. **Default value:** ``false`` for all ``point``, ``line``, and ``rule`` marks as well as ``geoshape`` marks for `graticule `__ data sources; otherwise, ``true``. **Note:** This property cannot be used in a `style config `__. font : string The typeface to set the text in (e.g., ``"Helvetica Neue"`` ). fontSize : float The font size, in pixels. **Default value:** ``11`` fontStyle : :class:`FontStyle` The font style (e.g., ``"italic"`` ). fontWeight : :class:`FontWeight` The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). height : float Height of the marks. href : string A URL to load upon mouse click. If defined, the mark acts as a hyperlink. interpolate : :class:`Interpolate` The line interpolation method to use for line and area marks. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : alternate between horizontal and vertical segments, as in a step function. * ``"step-before"`` : alternate between vertical and horizontal segments, as in a step function. * ``"step-after"`` : alternate between horizontal and vertical segments, as in a step function. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. invalid : enum('filter', None) Defines how Vega-Lite should handle marks for invalid values ( ``null`` and ``NaN`` ). * If set to ``"filter"`` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). * If ``null``, all data items are included. In this case, invalid values will be interpreted as zeroes. limit : float The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0`` -- indicating no limit lineBreak : string A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued. lineHeight : float The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks. opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. order : anyOf(None, boolean) For line and trail marks, this ``order`` property can be set to ``null`` or ``false`` to make the lines use the original order in the data sources. orient : :class:`Orientation` The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. * For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. * For area, this property determines the orient property of the Vega output. * For line and trail marks, this property determines the sort order of the points in the line if ``config.sortLineBy`` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored. radius : float Polar coordinate radial offset, in pixels, of the text label from the origin determined by the ``x`` and ``y`` properties. shape : anyOf(:class:`SymbolShape`, string) Shape of the point marks. Supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) **Default value:** ``"circle"`` size : float Default size for marks. * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value. * For ``bar``, this represents the band size of the bar, in pixels. * For ``text``, this represents the font size, in pixels. **Default value:** * ``30`` for point, circle, square marks; width/height's ``step`` * ``2`` for bar marks with discrete dimensions; * ``5`` for bar marks with continuous dimensions; * ``11`` for text marks. stroke : anyOf(:class:`Color`, :class:`Gradient`, None) Default Stroke Color. This property has higher precedence than ``config.color``. **Default value:** (None) strokeCap : string The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"butt"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : string The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOffset : float The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. tension : float Depending on the interpolation type, sets the tension parameter (for line and area marks). text : :class:`Text` Placeholder text if the ``text`` channel is not specified theta : float Polar coordinate angle, in radians, of the text label from the origin determined by the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in radians, with ``0`` indicating "north". timeUnitBand : float Default relative band size for a time unit. If set to ``1``, the bandwidth of the marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the marks will be half of the time unit band step. timeUnitBandPosition : float Default relative band position for a time unit. If set to ``0``, the marks will be positioned at the beginning of the time unit band step. If set to ``0.5``, the marks will be positioned in the middle of the time unit band step. tooltip : anyOf(float, string, boolean, :class:`TooltipContent`, None) The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from. * If ``tooltip`` is ``true`` or ``{"content": "encoding"}``, then all fields from ``encoding`` will be used. * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the highlighted data point will be used. * If set to ``null`` or ``false``, then no tooltip will be used. See the `tooltip `__ documentation for a detailed discussion about tooltip in Vega-Lite. **Default value:** ``null`` width : float Width of the marks. x : anyOf(float, enum('width')) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(float, enum('width')) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. y : anyOf(float, enum('height')) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(float, enum('height')) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. """ _schema = {'$ref': '#/definitions/RectConfig'} def __init__(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, discreteBandSize=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined, y2=Undefined, **kwds): super(RectConfig, self).__init__(align=align, angle=angle, aspect=aspect, baseline=baseline, binSpacing=binSpacing, blend=blend, color=color, continuousBandSize=continuousBandSize, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, discreteBandSize=discreteBandSize, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, tension=tension, text=text, theta=theta, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, y=y, y2=y2, **kwds) class RepeatMapping(VegaLiteSchema): """RepeatMapping schema wrapper Mapping(required=[]) Attributes ---------- column : List(string) An array of fields to be repeated horizontally. row : List(string) An array of fields to be repeated vertically. """ _schema = {'$ref': '#/definitions/RepeatMapping'} def __init__(self, column=Undefined, row=Undefined, **kwds): super(RepeatMapping, self).__init__(column=column, row=row, **kwds) class RepeatRef(Field): """RepeatRef schema wrapper Mapping(required=[repeat]) Reference to a repeated value. Attributes ---------- repeat : enum('row', 'column', 'repeat') """ _schema = {'$ref': '#/definitions/RepeatRef'} def __init__(self, repeat=Undefined, **kwds): super(RepeatRef, self).__init__(repeat=repeat, **kwds) class Resolve(VegaLiteSchema): """Resolve schema wrapper Mapping(required=[]) Defines how scales, axes, and legends from different specs should be combined. Resolve is a mapping from ``scale``, ``axis``, and ``legend`` to a mapping from channels to resolutions. Scales and guides can be resolved to be ``"independent"`` or ``"shared"``. Attributes ---------- axis : :class:`AxisResolveMap` legend : :class:`LegendResolveMap` scale : :class:`ScaleResolveMap` """ _schema = {'$ref': '#/definitions/Resolve'} def __init__(self, axis=Undefined, legend=Undefined, scale=Undefined, **kwds): super(Resolve, self).__init__(axis=axis, legend=legend, scale=scale, **kwds) class ResolveMode(VegaLiteSchema): """ResolveMode schema wrapper enum('independent', 'shared') """ _schema = {'$ref': '#/definitions/ResolveMode'} def __init__(self, *args): super(ResolveMode, self).__init__(*args) class RowColLayoutAlign(VegaLiteSchema): """RowColLayoutAlign schema wrapper Mapping(required=[]) Attributes ---------- column : :class:`LayoutAlign` row : :class:`LayoutAlign` """ _schema = {'$ref': '#/definitions/RowCol'} def __init__(self, column=Undefined, row=Undefined, **kwds): super(RowColLayoutAlign, self).__init__(column=column, row=row, **kwds) class RowColboolean(VegaLiteSchema): """RowColboolean schema wrapper Mapping(required=[]) Attributes ---------- column : boolean row : boolean """ _schema = {'$ref': '#/definitions/RowCol'} def __init__(self, column=Undefined, row=Undefined, **kwds): super(RowColboolean, self).__init__(column=column, row=row, **kwds) class RowColnumber(VegaLiteSchema): """RowColnumber schema wrapper Mapping(required=[]) Attributes ---------- column : float row : float """ _schema = {'$ref': '#/definitions/RowCol'} def __init__(self, column=Undefined, row=Undefined, **kwds): super(RowColnumber, self).__init__(column=column, row=row, **kwds) class RowColumnEncodingFieldDef(VegaLiteSchema): """RowColumnEncodingFieldDef schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. align : :class:`LayoutAlign` The alignment to apply to row/column facet's subplot. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. **Default value:** ``"all"``. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. center : boolean Boolean flag indicating if facet's subviews should be centered relative to their respective rows or columns. **Default value:** ``false`` field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. header : :class:`Header` An object defining properties of a facet's header. sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None) Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` is not supported for ``row`` and ``column``. spacing : float The spacing in pixels between facet's sub-views. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/RowColumnEncodingFieldDef'} def __init__(self, type=Undefined, aggregate=Undefined, align=Undefined, bin=Undefined, center=Undefined, field=Undefined, header=Undefined, sort=Undefined, spacing=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(RowColumnEncodingFieldDef, self).__init__(type=type, aggregate=aggregate, align=align, bin=bin, center=center, field=field, header=header, sort=sort, spacing=spacing, timeUnit=timeUnit, title=title, **kwds) class Scale(VegaLiteSchema): """Scale schema wrapper Mapping(required=[]) Attributes ---------- align : float The alignment of the steps within the scale range. This value must lie in the range ``[0,1]``. A value of ``0.5`` indicates that the steps should be centered within the range. A value of ``0`` or ``1`` may be used to shift the bands to one side, say to position them adjacent to an axis. **Default value:** ``0.5`` base : float The logarithm base of the ``log`` scale (default ``10`` ). bins : :class:`ScaleBins` Bin boundaries can be provided to scales as either an explicit array of bin boundaries or as a bin specification object. The legal values are: * An `array <../types/#Array>`__ literal of bin boundary values. For example, ``[0, 5, 10, 15, 20]``. The array must include both starting and ending boundaries. The previous example uses five values to indicate a total of four bin intervals: [0-5), [5-10), [10-15), [15-20]. Array literals may include signal references as elements. * A `bin specification object `__ that indicates the bin *step* size, and optionally the *start* and *stop* boundaries. * An array of bin boundaries over the scale domain. If provided, axes and legends will use the bin boundaries to inform the choice of tick marks and text labels. clamp : boolean If ``true``, values that exceed the data domain are clamped to either the minimum or maximum range value **Default value:** derived from the `scale config `__ 's ``clamp`` ( ``true`` by default). constant : float A constant determining the slope of the symlog function around zero. Only used for ``symlog`` scales. **Default value:** ``1`` domain : anyOf(List(anyOf(None, string, float, boolean, :class:`DateTime`)), enum('unaggregated'), :class:`SelectionExtent`, :class:`DomainUnionWith`) Customized domain values in the form of constant values or dynamic values driven by a selection. 1) Constant ``domain`` for *quantitative* fields can take one of the following forms: * A two-element array with minimum and maximum values. To create a diverging scale, this two-element array can be combined with the ``domainMid`` property. * An array with more than two entries, for `Piecewise quantitative scales `__. * A string value ``"unaggregated"``, if the input field is aggregated, to indicate that the domain should include the raw data values prior to the aggregation. 2) Constant ``domain`` for *temporal* fields can be a two-element array with minimum and maximum values, in the form of either timestamps or the `DateTime definition objects `__. 3) Constant ``domain`` for *ordinal* and *nominal* fields can be an array that lists valid input values. 4) To combine (union) specified constant domain with the field's values, ``domain`` can be an object with a ``unionWith`` property that specify constant domain to be combined. For example, ``domain: {unionWith: [0, 100]}`` for a quantitative scale means that the scale domain always includes ``[0, 100]``, but will include other values in the fields beyond ``[0, 100]``. 5) Domain can also takes an object defining a field or encoding of a selection that `interactively determines `__ the scale domain. domainMid : float Inserts a single mid-point value into a two-element domain. The mid-point value must lie between the domain minimum and maximum values. This property can be useful for setting a midpoint for `diverging color scales `__. The domainMid property is only intended for use with scales supporting continuous, piecewise domains. exponent : float The exponent of the ``pow`` scale. interpolate : anyOf(:class:`ScaleInterpolateEnum`, :class:`ScaleInterpolateParams`) The interpolation method for range values. By default, a general interpolator for numbers, dates, strings and colors (in HCL space) is used. For color ranges, this property allows interpolation in alternative color spaces. Legal values include ``rgb``, ``hsl``, ``hsl-long``, ``lab``, ``hcl``, ``hcl-long``, ``cubehelix`` and ``cubehelix-long`` ('-long' variants use longer paths in polar coordinate spaces). If object-valued, this property accepts an object with a string-valued *type* property and an optional numeric *gamma* property applicable to rgb and cubehelix interpolators. For more, see the `d3-interpolate documentation `__. * **Default value:** ``hcl`` nice : anyOf(boolean, float, :class:`TimeInterval`, :class:`TimeIntervalStep`) Extending the domain so that it starts and ends on nice round values. This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value. Nicing is useful if the domain is computed from data and may be irregular. For example, for a domain of *[0.201479…, 0.996679…]*, a nice domain might be *[0.2, 1.0]*. For quantitative scales such as linear, ``nice`` can be either a boolean flag or a number. If ``nice`` is a number, it will represent a desired tick count. This allows greater control over the step size used to extend the bounds, guaranteeing that the returned ticks will exactly cover the domain. For temporal fields with time and utc scales, the ``nice`` value can be a string indicating the desired time interval. Legal values are ``"millisecond"``, ``"second"``, ``"minute"``, ``"hour"``, ``"day"``, ``"week"``, ``"month"``, and ``"year"``. Alternatively, ``time`` and ``utc`` scales can accept an object-valued interval specifier of the form ``{"interval": "month", "step": 3}``, which includes a desired number of interval steps. Here, the domain would snap to quarter (Jan, Apr, Jul, Oct) boundaries. **Default value:** ``true`` for unbinned *quantitative* fields; ``false`` otherwise. padding : float For * `continuous `__ * scales, expands the scale domain to accommodate the specified number of pixels on each of the scale range. The scale range must represent pixels for this parameter to function as intended. Padding adjustment is performed prior to all other adjustments, including the effects of the  ``zero``,  ``nice``,  ``domainMin``, and ``domainMax``  properties. For * `band `__ * scales, shortcut for setting ``paddingInner`` and ``paddingOuter`` to the same value. For * `point `__ * scales, alias for ``paddingOuter``. **Default value:** For *continuous* scales, derived from the `scale config `__ 's ``continuousPadding``. For *band and point* scales, see ``paddingInner`` and ``paddingOuter``. By default, Vega-Lite sets padding such that *width/height = number of unique values * step*. paddingInner : float The inner padding (spacing) within each band step of band scales, as a fraction of the step size. This value must lie in the range [0,1]. For point scale, this property is invalid as point scales do not have internal band widths (only step sizes between bands). **Default value:** derived from the `scale config `__ 's ``bandPaddingInner``. paddingOuter : float The outer padding (spacing) at the ends of the range of band and point scales, as a fraction of the step size. This value must lie in the range [0,1]. **Default value:** derived from the `scale config `__ 's ``bandPaddingOuter`` for band scales and ``pointPadding`` for point scales. By default, Vega-Lite sets outer padding such that *width/height = number of unique values * step*. range : anyOf(:class:`RangeEnum`, List(anyOf(float, string, List(float)))) The range of the scale. One of: A string indicating a `pre-defined named scale range `__ (e.g., example, ``"symbol"``, or ``"diverging"`` ). For `continuous scales `__, two-element array indicating minimum and maximum values, or an array with more than two entries for specifying a `piecewise scale `__. For `discrete `__ and `discretizing `__ scales, an array of desired output values. **Notes:** 1) For color scales you can also specify a color `scheme `__ instead of ``range``. 2) Any directly specified ``range`` for ``x`` and ``y`` channels will be ignored. Range can be customized via the view's corresponding `size `__ ( ``width`` and ``height`` ). reverse : boolean If true, reverses the order of the scale range. **Default value:** ``false``. round : boolean If ``true``, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid. **Default value:** ``false``. scheme : anyOf(string, :class:`SchemeParams`) A string indicating a color `scheme `__ name (e.g., ``"category10"`` or ``"blues"`` ) or a `scheme parameter object `__. Discrete color schemes may be used with `discrete `__ or `discretizing `__ scales. Continuous color schemes are intended for use with color scales. For the full list of supported schemes, please refer to the `Vega Scheme `__ reference. type : :class:`ScaleType` The type of scale. Vega-Lite supports the following categories of scale types: 1) `Continuous Scales `__ -- mapping continuous domains to continuous output ranges ( `"linear" `__, `"pow" `__, `"sqrt" `__, `"symlog" `__, `"log" `__, `"time" `__, `"utc" `__. 2) `Discrete Scales `__ -- mapping discrete domains to discrete ( `"ordinal" `__ ) or continuous ( `"band" `__ and `"point" `__ ) output ranges. 3) `Discretizing Scales `__ -- mapping continuous domains to discrete output ranges `"bin-ordinal" `__, `"quantile" `__, `"quantize" `__ and `"threshold" `__. **Default value:** please see the `scale type table `__. zero : boolean If ``true``, ensures that a zero baseline value is included in the scale domain. **Default value:** ``true`` for x and y channels if the quantitative field is not binned and no custom ``domain`` is provided; ``false`` otherwise. **Note:** Log, time, and utc scales do not support ``zero``. """ _schema = {'$ref': '#/definitions/Scale'} def __init__(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMid=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds): super(Scale, self).__init__(align=align, base=base, bins=bins, clamp=clamp, constant=constant, domain=domain, domainMid=domainMid, exponent=exponent, interpolate=interpolate, nice=nice, padding=padding, paddingInner=paddingInner, paddingOuter=paddingOuter, range=range, reverse=reverse, round=round, scheme=scheme, type=type, zero=zero, **kwds) class ScaleBins(VegaLiteSchema): """ScaleBins schema wrapper anyOf(List(float), :class:`ScaleBinParams`) """ _schema = {'$ref': '#/definitions/ScaleBins'} def __init__(self, *args, **kwds): super(ScaleBins, self).__init__(*args, **kwds) class ScaleBinParams(ScaleBins): """ScaleBinParams schema wrapper Mapping(required=[step]) Attributes ---------- step : float The step size defining the bin interval width. start : float The starting (lowest-valued) bin boundary. **Default value:** The lowest value of the scale domain will be used. stop : float The stopping (highest-valued) bin boundary. **Default value:** The highest value of the scale domain will be used. """ _schema = {'$ref': '#/definitions/ScaleBinParams'} def __init__(self, step=Undefined, start=Undefined, stop=Undefined, **kwds): super(ScaleBinParams, self).__init__(step=step, start=start, stop=stop, **kwds) class ScaleConfig(VegaLiteSchema): """ScaleConfig schema wrapper Mapping(required=[]) Attributes ---------- bandPaddingInner : float Default inner padding for ``x`` and ``y`` band-ordinal scales. **Default value:** * ``barBandPaddingInner`` for bar marks ( ``0.1`` by default) * ``rectBandPaddingInner`` for rect and other marks ( ``0`` by default) bandPaddingOuter : float Default outer padding for ``x`` and ``y`` band-ordinal scales. **Default value:** ``paddingInner/2`` (which makes *width/height = number of unique values * step* ) barBandPaddingInner : float Default inner padding for ``x`` and ``y`` band-ordinal scales of ``"bar"`` marks. **Default value:** ``0.1`` clamp : boolean If true, values that exceed the data domain are clamped to either the minimum or maximum range value continuousPadding : float Default padding for continuous scales. **Default:** ``5`` for continuous x-scale of a vertical bar and continuous y-scale of a horizontal bar.; ``0`` otherwise. maxBandSize : float The default max value for mapping quantitative fields to bar's size/bandSize. If undefined (default), we will use the axis's size (width or height) - 1. maxFontSize : float The default max value for mapping quantitative fields to text's size/fontSize. **Default value:** ``40`` maxOpacity : float Default max opacity for mapping a field to opacity. **Default value:** ``0.8`` maxSize : float Default max value for point size scale. maxStrokeWidth : float Default max strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks. **Default value:** ``4`` minBandSize : float The default min value for mapping quantitative fields to bar and tick's size/bandSize scale with zero=false. **Default value:** ``2`` minFontSize : float The default min value for mapping quantitative fields to tick's size/fontSize scale with zero=false **Default value:** ``8`` minOpacity : float Default minimum opacity for mapping a field to opacity. **Default value:** ``0.3`` minSize : float Default minimum value for point size scale with zero=false. **Default value:** ``9`` minStrokeWidth : float Default minimum strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks with zero=false. **Default value:** ``1`` pointPadding : float Default outer padding for ``x`` and ``y`` point-ordinal scales. **Default value:** ``0.5`` (which makes *width/height = number of unique values * step* ) quantileCount : float Default range cardinality for `quantile `__ scale. **Default value:** ``4`` quantizeCount : float Default range cardinality for `quantize `__ scale. **Default value:** ``4`` rectBandPaddingInner : float Default inner padding for ``x`` and ``y`` band-ordinal scales of ``"rect"`` marks. **Default value:** ``0`` round : boolean If true, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid. (Only available for ``x``, ``y``, and ``size`` scales.) useUnaggregatedDomain : boolean Use the source data range before aggregation as scale domain instead of aggregated data for aggregate axis. This is equivalent to setting ``domain`` to ``"unaggregate"`` for aggregated *quantitative* fields by default. This property only works with aggregate functions that produce values within the raw data domain ( ``"mean"``, ``"average"``, ``"median"``, ``"q1"``, ``"q3"``, ``"min"``, ``"max"`` ). For other aggregations that produce values outside of the raw data domain (e.g. ``"count"``, ``"sum"`` ), this property is ignored. **Default value:** ``false`` xReverse : boolean Reverse x-scale by default (useful for right-to-left charts). """ _schema = {'$ref': '#/definitions/ScaleConfig'} def __init__(self, bandPaddingInner=Undefined, bandPaddingOuter=Undefined, barBandPaddingInner=Undefined, clamp=Undefined, continuousPadding=Undefined, maxBandSize=Undefined, maxFontSize=Undefined, maxOpacity=Undefined, maxSize=Undefined, maxStrokeWidth=Undefined, minBandSize=Undefined, minFontSize=Undefined, minOpacity=Undefined, minSize=Undefined, minStrokeWidth=Undefined, pointPadding=Undefined, quantileCount=Undefined, quantizeCount=Undefined, rectBandPaddingInner=Undefined, round=Undefined, useUnaggregatedDomain=Undefined, xReverse=Undefined, **kwds): super(ScaleConfig, self).__init__(bandPaddingInner=bandPaddingInner, bandPaddingOuter=bandPaddingOuter, barBandPaddingInner=barBandPaddingInner, clamp=clamp, continuousPadding=continuousPadding, maxBandSize=maxBandSize, maxFontSize=maxFontSize, maxOpacity=maxOpacity, maxSize=maxSize, maxStrokeWidth=maxStrokeWidth, minBandSize=minBandSize, minFontSize=minFontSize, minOpacity=minOpacity, minSize=minSize, minStrokeWidth=minStrokeWidth, pointPadding=pointPadding, quantileCount=quantileCount, quantizeCount=quantizeCount, rectBandPaddingInner=rectBandPaddingInner, round=round, useUnaggregatedDomain=useUnaggregatedDomain, xReverse=xReverse, **kwds) class ScaleInterpolateEnum(VegaLiteSchema): """ScaleInterpolateEnum schema wrapper enum('rgb', 'lab', 'hcl', 'hsl', 'hsl-long', 'hcl-long', 'cubehelix', 'cubehelix-long') """ _schema = {'$ref': '#/definitions/ScaleInterpolateEnum'} def __init__(self, *args): super(ScaleInterpolateEnum, self).__init__(*args) class ScaleInterpolateParams(VegaLiteSchema): """ScaleInterpolateParams schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('rgb', 'cubehelix', 'cubehelix-long') gamma : float """ _schema = {'$ref': '#/definitions/ScaleInterpolateParams'} def __init__(self, type=Undefined, gamma=Undefined, **kwds): super(ScaleInterpolateParams, self).__init__(type=type, gamma=gamma, **kwds) class ScaleResolveMap(VegaLiteSchema): """ScaleResolveMap schema wrapper Mapping(required=[]) Attributes ---------- color : :class:`ResolveMode` fill : :class:`ResolveMode` fillOpacity : :class:`ResolveMode` opacity : :class:`ResolveMode` shape : :class:`ResolveMode` size : :class:`ResolveMode` stroke : :class:`ResolveMode` strokeDash : :class:`ResolveMode` strokeOpacity : :class:`ResolveMode` strokeWidth : :class:`ResolveMode` x : :class:`ResolveMode` y : :class:`ResolveMode` """ _schema = {'$ref': '#/definitions/ScaleResolveMap'} def __init__(self, color=Undefined, fill=Undefined, fillOpacity=Undefined, opacity=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeDash=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, x=Undefined, y=Undefined, **kwds): super(ScaleResolveMap, self).__init__(color=color, fill=fill, fillOpacity=fillOpacity, opacity=opacity, shape=shape, size=size, stroke=stroke, strokeDash=strokeDash, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, x=x, y=y, **kwds) class ScaleType(VegaLiteSchema): """ScaleType schema wrapper enum('linear', 'log', 'pow', 'sqrt', 'symlog', 'identity', 'sequential', 'time', 'utc', 'quantile', 'quantize', 'threshold', 'bin-ordinal', 'ordinal', 'point', 'band') """ _schema = {'$ref': '#/definitions/ScaleType'} def __init__(self, *args): super(ScaleType, self).__init__(*args) class SchemeParams(VegaLiteSchema): """SchemeParams schema wrapper Mapping(required=[name]) Attributes ---------- name : string A color scheme name for ordinal scales (e.g., ``"category10"`` or ``"blues"`` ). For the full list of supported schemes, please refer to the `Vega Scheme `__ reference. count : float The number of colors to use in the scheme. This can be useful for scale types such as ``"quantize"``, which use the length of the scale range to determine the number of discrete bins for the scale domain. extent : List(float) The extent of the color range to use. For example ``[0.2, 1]`` will rescale the color scheme such that color values in the range *[0, 0.2)* are excluded from the scheme. """ _schema = {'$ref': '#/definitions/SchemeParams'} def __init__(self, name=Undefined, count=Undefined, extent=Undefined, **kwds): super(SchemeParams, self).__init__(name=name, count=count, extent=extent, **kwds) class SecondaryFieldDef(VegaLiteSchema): """SecondaryFieldDef schema wrapper Mapping(required=[]) A field definition of a secondary channel that shares a scale with another primary channel. For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``. Attributes ---------- aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : None A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/SecondaryFieldDef'} def __init__(self, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(SecondaryFieldDef, self).__init__(aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class SelectionComposition(VegaLiteSchema): """SelectionComposition schema wrapper anyOf(:class:`SelectionNot`, :class:`SelectionAnd`, :class:`SelectionOr`, string) """ _schema = {'$ref': '#/definitions/SelectionComposition'} def __init__(self, *args, **kwds): super(SelectionComposition, self).__init__(*args, **kwds) class SelectionAnd(SelectionComposition): """SelectionAnd schema wrapper Mapping(required=[and]) Attributes ---------- and : List(:class:`SelectionComposition`) """ _schema = {'$ref': '#/definitions/SelectionAnd'} def __init__(self, **kwds): super(SelectionAnd, self).__init__(**kwds) class SelectionConfig(VegaLiteSchema): """SelectionConfig schema wrapper Mapping(required=[]) Attributes ---------- interval : :class:`IntervalSelectionConfig` The default definition for an `interval `__ selection. All properties and transformations for an interval selection definition (except ``type`` ) may be specified here. For instance, setting ``interval`` to ``{"translate": false}`` disables the ability to move interval selections by default. multi : :class:`MultiSelectionConfig` The default definition for a `multi `__ selection. All properties and transformations for a multi selection definition (except ``type`` ) may be specified here. For instance, setting ``multi`` to ``{"toggle": "event.altKey"}`` adds additional values to multi selections when clicking with the alt-key pressed by default. single : :class:`SingleSelectionConfig` The default definition for a `single `__ selection. All properties and transformations for a single selection definition (except ``type`` ) may be specified here. For instance, setting ``single`` to ``{"on": "dblclick"}`` populates single selections on double-click by default. """ _schema = {'$ref': '#/definitions/SelectionConfig'} def __init__(self, interval=Undefined, multi=Undefined, single=Undefined, **kwds): super(SelectionConfig, self).__init__(interval=interval, multi=multi, single=single, **kwds) class SelectionDef(VegaLiteSchema): """SelectionDef schema wrapper anyOf(:class:`SingleSelection`, :class:`MultiSelection`, :class:`IntervalSelection`) """ _schema = {'$ref': '#/definitions/SelectionDef'} def __init__(self, *args, **kwds): super(SelectionDef, self).__init__(*args, **kwds) class IntervalSelection(SelectionDef): """IntervalSelection schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('interval') Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types: * ``"single"`` -- to select a single discrete data value on ``click``. * ``"multi"`` -- to select multiple discrete data value; the first value is selected on ``click`` and additional values toggled on shift- ``click``. * ``"interval"`` -- to select a continuous range of data values on ``drag``. bind : enum('scales') Establishes a two-way binding between the interval selection and the scales used within the same view. This allows a user to interactively pan and zoom the view. **See also:** `bind `__ documentation. clear : anyOf(:class:`Stream`, string, boolean) Clears the selection, emptying it of all values. Can be a `Event Stream `__ or ``false`` to disable. **Default value:** ``dblclick``. **See also:** `clear `__ documentation. empty : enum('all', 'none') By default, ``all`` data values are considered to lie within an empty selection. When set to ``none``, empty selections contain no data values. encodings : List(:class:`SingleDefUnitChannel`) An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection. **See also:** `encodings `__ documentation. fields : List(:class:`FieldName`) An array of field names whose values must match for a data tuple to fall within the selection. **See also:** `fields `__ documentation. init : :class:`SelectionInitIntervalMapping` Initialize the selection with a mapping between `projected channels or field names `__ and arrays of initial values. **See also:** `init `__ documentation. mark : :class:`BrushConfig` An interval selection also adds a rectangle mark to depict the extents of the interval. The ``mark`` property can be used to customize the appearance of the mark. **See also:** `mark `__ documentation. on : anyOf(:class:`Stream`, string) A `Vega event stream `__ (object or selector) that triggers the selection. For interval selections, the event stream must specify a `start and end `__. resolve : :class:`SelectionResolution` With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain. **See also:** `resolve `__ documentation. translate : anyOf(string, boolean) When truthy, allows a user to interactively move an interval selection back-and-forth. Can be ``true``, ``false`` (to disable panning), or a `Vega event stream definition `__ which must include a start and end event to trigger continuous panning. **Default value:** ``true``, which corresponds to ``[mousedown, window:mouseup] > window:mousemove!`` which corresponds to clicks and dragging within an interval selection to reposition it. **See also:** `translate `__ documentation. zoom : anyOf(string, boolean) When truthy, allows a user to interactively resize an interval selection. Can be ``true``, ``false`` (to disable zooming), or a `Vega event stream definition `__. Currently, only ``wheel`` events are supported. **Default value:** ``true``, which corresponds to ``wheel!``. **See also:** `zoom `__ documentation. """ _schema = {'$ref': '#/definitions/IntervalSelection'} def __init__(self, type=Undefined, bind=Undefined, clear=Undefined, empty=Undefined, encodings=Undefined, fields=Undefined, init=Undefined, mark=Undefined, on=Undefined, resolve=Undefined, translate=Undefined, zoom=Undefined, **kwds): super(IntervalSelection, self).__init__(type=type, bind=bind, clear=clear, empty=empty, encodings=encodings, fields=fields, init=init, mark=mark, on=on, resolve=resolve, translate=translate, zoom=zoom, **kwds) class MultiSelection(SelectionDef): """MultiSelection schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('multi') Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types: * ``"single"`` -- to select a single discrete data value on ``click``. * ``"multi"`` -- to select multiple discrete data value; the first value is selected on ``click`` and additional values toggled on shift- ``click``. * ``"interval"`` -- to select a continuous range of data values on ``drag``. bind : :class:`LegendBinding` When set, a selection is populated by interacting with the corresponding legend. Direct manipulation interaction is disabled by default; to re-enable it, set the selection's `on `__ property. Legend bindings are restricted to selections that only specify a single field or encoding. clear : anyOf(:class:`Stream`, string, boolean) Clears the selection, emptying it of all values. Can be a `Event Stream `__ or ``false`` to disable. **Default value:** ``dblclick``. **See also:** `clear `__ documentation. empty : enum('all', 'none') By default, ``all`` data values are considered to lie within an empty selection. When set to ``none``, empty selections contain no data values. encodings : List(:class:`SingleDefUnitChannel`) An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection. **See also:** `encodings `__ documentation. fields : List(:class:`FieldName`) An array of field names whose values must match for a data tuple to fall within the selection. **See also:** `fields `__ documentation. init : List(:class:`SelectionInitMapping`) Initialize the selection with a mapping between `projected channels or field names `__ and an initial value (or array of values). **See also:** `init `__ documentation. nearest : boolean When true, an invisible voronoi diagram is computed to accelerate discrete selection. The data value *nearest* the mouse cursor is added to the selection. **See also:** `nearest `__ documentation. on : anyOf(:class:`Stream`, string) A `Vega event stream `__ (object or selector) that triggers the selection. For interval selections, the event stream must specify a `start and end `__. resolve : :class:`SelectionResolution` With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain. **See also:** `resolve `__ documentation. toggle : anyOf(string, boolean) Controls whether data values should be toggled or only ever inserted into multi selections. Can be ``true``, ``false`` (for insertion only), or a `Vega expression `__. **Default value:** ``true``, which corresponds to ``event.shiftKey`` (i.e., data values are toggled when a user interacts with the shift-key pressed). **See also:** `toggle `__ documentation. """ _schema = {'$ref': '#/definitions/MultiSelection'} def __init__(self, type=Undefined, bind=Undefined, clear=Undefined, empty=Undefined, encodings=Undefined, fields=Undefined, init=Undefined, nearest=Undefined, on=Undefined, resolve=Undefined, toggle=Undefined, **kwds): super(MultiSelection, self).__init__(type=type, bind=bind, clear=clear, empty=empty, encodings=encodings, fields=fields, init=init, nearest=nearest, on=on, resolve=resolve, toggle=toggle, **kwds) class SelectionExtent(BinExtent): """SelectionExtent schema wrapper anyOf(Mapping(required=[selection]), Mapping(required=[selection])) """ _schema = {'$ref': '#/definitions/SelectionExtent'} def __init__(self, *args, **kwds): super(SelectionExtent, self).__init__(*args, **kwds) class SelectionInit(VegaLiteSchema): """SelectionInit schema wrapper anyOf(:class:`Value`, :class:`DateTime`) """ _schema = {'$ref': '#/definitions/SelectionInit'} def __init__(self, *args, **kwds): super(SelectionInit, self).__init__(*args, **kwds) class DateTime(SelectionInit): """DateTime schema wrapper Mapping(required=[]) Object for defining datetime in Vega-Lite Filter. If both month and quarter are provided, month has higher precedence. ``day`` cannot be combined with other date. We accept string for month and day names. Attributes ---------- date : float Integer value representing the date (day of the month) from 1-31. day : anyOf(:class:`Day`, string) Value representing the day of a week. This can be one of: (1) integer value -- ``1`` represents Monday; (2) case-insensitive day name (e.g., ``"Monday"`` ); (3) case-insensitive, 3-character short day name (e.g., ``"Mon"`` ). **Warning:** A DateTime definition object with ``day`` ** should not be combined with ``year``, ``quarter``, ``month``, or ``date``. hours : float Integer value representing the hour of a day from 0-23. milliseconds : float Integer value representing the millisecond segment of time. minutes : float Integer value representing the minute segment of time from 0-59. month : anyOf(:class:`Month`, string) One of: (1) integer value representing the month from ``1`` - ``12``. ``1`` represents January; (2) case-insensitive month name (e.g., ``"January"`` ); (3) case-insensitive, 3-character short month name (e.g., ``"Jan"`` ). quarter : float Integer value representing the quarter of the year (from 1-4). seconds : float Integer value representing the second segment (0-59) of a time value utc : boolean A boolean flag indicating if date time is in utc time. If false, the date time is in local time year : float Integer value representing the year. """ _schema = {'$ref': '#/definitions/DateTime'} def __init__(self, date=Undefined, day=Undefined, hours=Undefined, milliseconds=Undefined, minutes=Undefined, month=Undefined, quarter=Undefined, seconds=Undefined, utc=Undefined, year=Undefined, **kwds): super(DateTime, self).__init__(date=date, day=day, hours=hours, milliseconds=milliseconds, minutes=minutes, month=month, quarter=quarter, seconds=seconds, utc=utc, year=year, **kwds) class SelectionInitInterval(VegaLiteSchema): """SelectionInitInterval schema wrapper anyOf(:class:`Vector2boolean`, :class:`Vector2number`, :class:`Vector2string`, :class:`Vector2DateTime`) """ _schema = {'$ref': '#/definitions/SelectionInitInterval'} def __init__(self, *args, **kwds): super(SelectionInitInterval, self).__init__(*args, **kwds) class SelectionInitIntervalMapping(VegaLiteSchema): """SelectionInitIntervalMapping schema wrapper Mapping(required=[]) """ _schema = {'$ref': '#/definitions/SelectionInitIntervalMapping'} def __init__(self, **kwds): super(SelectionInitIntervalMapping, self).__init__(**kwds) class SelectionInitMapping(VegaLiteSchema): """SelectionInitMapping schema wrapper Mapping(required=[]) """ _schema = {'$ref': '#/definitions/SelectionInitMapping'} def __init__(self, **kwds): super(SelectionInitMapping, self).__init__(**kwds) class SelectionNot(SelectionComposition): """SelectionNot schema wrapper Mapping(required=[not]) Attributes ---------- not : :class:`SelectionComposition` """ _schema = {'$ref': '#/definitions/SelectionNot'} def __init__(self, **kwds): super(SelectionNot, self).__init__(**kwds) class SelectionOr(SelectionComposition): """SelectionOr schema wrapper Mapping(required=[or]) Attributes ---------- or : List(:class:`SelectionComposition`) """ _schema = {'$ref': '#/definitions/SelectionOr'} def __init__(self, **kwds): super(SelectionOr, self).__init__(**kwds) class SelectionPredicate(Predicate): """SelectionPredicate schema wrapper Mapping(required=[selection]) Attributes ---------- selection : :class:`SelectionComposition` Filter using a selection name or a logical composition of selection names. """ _schema = {'$ref': '#/definitions/SelectionPredicate'} def __init__(self, selection=Undefined, **kwds): super(SelectionPredicate, self).__init__(selection=selection, **kwds) class SelectionResolution(VegaLiteSchema): """SelectionResolution schema wrapper enum('global', 'union', 'intersect') """ _schema = {'$ref': '#/definitions/SelectionResolution'} def __init__(self, *args): super(SelectionResolution, self).__init__(*args) class SequenceGenerator(Generator): """SequenceGenerator schema wrapper Mapping(required=[sequence]) Attributes ---------- sequence : :class:`SequenceParams` Generate a sequence of numbers. name : string Provide a placeholder name and bind data at runtime. """ _schema = {'$ref': '#/definitions/SequenceGenerator'} def __init__(self, sequence=Undefined, name=Undefined, **kwds): super(SequenceGenerator, self).__init__(sequence=sequence, name=name, **kwds) class SequenceParams(VegaLiteSchema): """SequenceParams schema wrapper Mapping(required=[start, stop]) Attributes ---------- start : float The starting value of the sequence (inclusive). stop : float The ending value of the sequence (exclusive). step : float The step value between sequence entries. **Default value:** ``1`` as : :class:`FieldName` The name of the generated sequence field. **Default value:** ``"data"`` """ _schema = {'$ref': '#/definitions/SequenceParams'} def __init__(self, start=Undefined, stop=Undefined, step=Undefined, **kwds): super(SequenceParams, self).__init__(start=start, stop=stop, step=step, **kwds) class SequentialMultiHue(ColorScheme): """SequentialMultiHue schema wrapper enum('viridis', 'inferno', 'magma', 'plasma', 'bluegreen', 'bluegreen-3', 'bluegreen-4', 'bluegreen-5', 'bluegreen-6', 'bluegreen-7', 'bluegreen-8', 'bluegreen-9', 'bluepurple', 'bluepurple-3', 'bluepurple-4', 'bluepurple-5', 'bluepurple-6', 'bluepurple-7', 'bluepurple-8', 'bluepurple-9', 'greenblue', 'greenblue-3', 'greenblue-4', 'greenblue-5', 'greenblue-6', 'greenblue-7', 'greenblue-8', 'greenblue-9', 'orangered', 'orangered-3', 'orangered-4', 'orangered-5', 'orangered-6', 'orangered-7', 'orangered-8', 'orangered-9', 'purplebluegreen', 'purplebluegreen-3', 'purplebluegreen-4', 'purplebluegreen-5', 'purplebluegreen-6', 'purplebluegreen-7', 'purplebluegreen-8', 'purplebluegreen-9', 'purpleblue', 'purpleblue-3', 'purpleblue-4', 'purpleblue-5', 'purpleblue-6', 'purpleblue-7', 'purpleblue-8', 'purpleblue-9', 'purplered', 'purplered-3', 'purplered-4', 'purplered-5', 'purplered-6', 'purplered-7', 'purplered-8', 'purplered-9', 'redpurple', 'redpurple-3', 'redpurple-4', 'redpurple-5', 'redpurple-6', 'redpurple-7', 'redpurple-8', 'redpurple-9', 'yellowgreenblue', 'yellowgreenblue-3', 'yellowgreenblue-4', 'yellowgreenblue-5', 'yellowgreenblue-6', 'yellowgreenblue-7', 'yellowgreenblue-8', 'yellowgreenblue-9', 'yellowgreen', 'yellowgreen-3', 'yellowgreen-4', 'yellowgreen-5', 'yellowgreen-6', 'yellowgreen-7', 'yellowgreen-8', 'yellowgreen-9', 'yelloworangebrown', 'yelloworangebrown-3', 'yelloworangebrown-4', 'yelloworangebrown-5', 'yelloworangebrown-6', 'yelloworangebrown-7', 'yelloworangebrown-8', 'yelloworangebrown-9', 'yelloworangered', 'yelloworangered-3', 'yelloworangered-4', 'yelloworangered-5', 'yelloworangered-6', 'yelloworangered-7', 'yelloworangered-8', 'yelloworangered-9') """ _schema = {'$ref': '#/definitions/SequentialMultiHue'} def __init__(self, *args): super(SequentialMultiHue, self).__init__(*args) class SequentialSingleHue(ColorScheme): """SequentialSingleHue schema wrapper enum('blues', 'greens', 'greys', 'purples', 'reds', 'oranges') """ _schema = {'$ref': '#/definitions/SequentialSingleHue'} def __init__(self, *args): super(SequentialSingleHue, self).__init__(*args) class ShapeFieldDefWithCondition(VegaLiteSchema): """ShapeFieldDefWithCondition schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`TypeForShape` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionstringnull` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. legend : anyOf(:class:`Legend`, None) An object defining properties of the legend. If ``null``, the legend for the encoding channel will be removed. **Default value:** If undefined, default `legend properties `__ are applied. **See also:** `legend `__ documentation. scale : anyOf(:class:`Scale`, None) An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels. If ``null``, the scale will be `disabled and the data value will be directly encoded `__. **Default value:** If undefined, default `scale properties `__ are applied. **See also:** `scale `__ documentation. sort : :class:`Sort` Sort order for the encoded field. For continuous fields (quantitative or temporal), ``sort`` can be either ``"ascending"`` or ``"descending"``. For discrete fields, ``sort`` can be one of the following: * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in JavaScript. * `A string indicating an encoding channel name to sort by `__ (e.g., ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a sort-by-encoding definition `__. For example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order": "descending"}``. * `A sort field definition `__ for sorting by another field. * `An array specifying the field values in preferred order `__. In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be `date-time definition objects `__. In addition, for time units ``"month"`` and ``"day"``, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). * ``null`` indicating no sort. **Default value:** ``"ascending"`` **Note:** ``null`` and sorting by another channel is not supported for ``row`` and ``column``. **See also:** `sort `__ documentation. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/ShapeFieldDefWithCondition'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(ShapeFieldDefWithCondition, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, legend=legend, scale=scale, sort=sort, timeUnit=timeUnit, title=title, **kwds) class ShapeValueWithCondition(VegaLiteSchema): """ShapeValueWithCondition schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDefTypeForShape`, :class:`ValueConditionstringnull`) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ShapeValueWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ShapeValueWithCondition, self).__init__(condition=condition, value=value, **kwds) class SingleDefUnitChannel(VegaLiteSchema): """SingleDefUnitChannel schema wrapper enum('x', 'y', 'x2', 'y2', 'longitude', 'latitude', 'longitude2', 'latitude2', 'color', 'fill', 'stroke', 'opacity', 'fillOpacity', 'strokeOpacity', 'strokeWidth', 'strokeDash', 'size', 'shape', 'key', 'text', 'href', 'url') """ _schema = {'$ref': '#/definitions/SingleDefUnitChannel'} def __init__(self, *args): super(SingleDefUnitChannel, self).__init__(*args) class SingleSelection(SelectionDef): """SingleSelection schema wrapper Mapping(required=[type]) Attributes ---------- type : enum('single') Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types: * ``"single"`` -- to select a single discrete data value on ``click``. * ``"multi"`` -- to select multiple discrete data value; the first value is selected on ``click`` and additional values toggled on shift- ``click``. * ``"interval"`` -- to select a continuous range of data values on ``drag``. bind : anyOf(:class:`Binding`, Mapping(required=[]), :class:`LegendBinding`) When set, a selection is populated by input elements (also known as dynamic query widgets) or by interacting with the corresponding legend. Direct manipulation interaction is disabled by default; to re-enable it, set the selection's `on `__ property. Legend bindings are restricted to selections that only specify a single field or encoding. Query widget binding takes the form of Vega's `input element binding definition `__ or can be a mapping between projected field/encodings and binding definitions. **See also:** `bind `__ documentation. clear : anyOf(:class:`Stream`, string, boolean) Clears the selection, emptying it of all values. Can be a `Event Stream `__ or ``false`` to disable. **Default value:** ``dblclick``. **See also:** `clear `__ documentation. empty : enum('all', 'none') By default, ``all`` data values are considered to lie within an empty selection. When set to ``none``, empty selections contain no data values. encodings : List(:class:`SingleDefUnitChannel`) An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection. **See also:** `encodings `__ documentation. fields : List(:class:`FieldName`) An array of field names whose values must match for a data tuple to fall within the selection. **See also:** `fields `__ documentation. init : :class:`SelectionInitMapping` Initialize the selection with a mapping between `projected channels or field names `__ and initial values. **See also:** `init `__ documentation. nearest : boolean When true, an invisible voronoi diagram is computed to accelerate discrete selection. The data value *nearest* the mouse cursor is added to the selection. **See also:** `nearest `__ documentation. on : anyOf(:class:`Stream`, string) A `Vega event stream `__ (object or selector) that triggers the selection. For interval selections, the event stream must specify a `start and end `__. resolve : :class:`SelectionResolution` With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain. **See also:** `resolve `__ documentation. """ _schema = {'$ref': '#/definitions/SingleSelection'} def __init__(self, type=Undefined, bind=Undefined, clear=Undefined, empty=Undefined, encodings=Undefined, fields=Undefined, init=Undefined, nearest=Undefined, on=Undefined, resolve=Undefined, **kwds): super(SingleSelection, self).__init__(type=type, bind=bind, clear=clear, empty=empty, encodings=encodings, fields=fields, init=init, nearest=nearest, on=on, resolve=resolve, **kwds) class SingleSelectionConfig(VegaLiteSchema): """SingleSelectionConfig schema wrapper Mapping(required=[]) Attributes ---------- bind : anyOf(:class:`Binding`, Mapping(required=[]), :class:`LegendBinding`) When set, a selection is populated by input elements (also known as dynamic query widgets) or by interacting with the corresponding legend. Direct manipulation interaction is disabled by default; to re-enable it, set the selection's `on `__ property. Legend bindings are restricted to selections that only specify a single field or encoding. Query widget binding takes the form of Vega's `input element binding definition `__ or can be a mapping between projected field/encodings and binding definitions. **See also:** `bind `__ documentation. clear : anyOf(:class:`Stream`, string, boolean) Clears the selection, emptying it of all values. Can be a `Event Stream `__ or ``false`` to disable. **Default value:** ``dblclick``. **See also:** `clear `__ documentation. empty : enum('all', 'none') By default, ``all`` data values are considered to lie within an empty selection. When set to ``none``, empty selections contain no data values. encodings : List(:class:`SingleDefUnitChannel`) An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection. **See also:** `encodings `__ documentation. fields : List(:class:`FieldName`) An array of field names whose values must match for a data tuple to fall within the selection. **See also:** `fields `__ documentation. init : :class:`SelectionInitMapping` Initialize the selection with a mapping between `projected channels or field names `__ and initial values. **See also:** `init `__ documentation. nearest : boolean When true, an invisible voronoi diagram is computed to accelerate discrete selection. The data value *nearest* the mouse cursor is added to the selection. **See also:** `nearest `__ documentation. on : anyOf(:class:`Stream`, string) A `Vega event stream `__ (object or selector) that triggers the selection. For interval selections, the event stream must specify a `start and end `__. resolve : :class:`SelectionResolution` With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain. **See also:** `resolve `__ documentation. """ _schema = {'$ref': '#/definitions/SingleSelectionConfig'} def __init__(self, bind=Undefined, clear=Undefined, empty=Undefined, encodings=Undefined, fields=Undefined, init=Undefined, nearest=Undefined, on=Undefined, resolve=Undefined, **kwds): super(SingleSelectionConfig, self).__init__(bind=bind, clear=clear, empty=empty, encodings=encodings, fields=fields, init=init, nearest=nearest, on=on, resolve=resolve, **kwds) class Sort(VegaLiteSchema): """Sort schema wrapper anyOf(:class:`SortArray`, :class:`AllSortString`, :class:`EncodingSortField`, :class:`SortByEncoding`, None) """ _schema = {'$ref': '#/definitions/Sort'} def __init__(self, *args, **kwds): super(Sort, self).__init__(*args, **kwds) class AllSortString(Sort): """AllSortString schema wrapper anyOf(:class:`SortOrder`, :class:`SortByChannel`, :class:`SortByChannelDesc`) """ _schema = {'$ref': '#/definitions/AllSortString'} def __init__(self, *args, **kwds): super(AllSortString, self).__init__(*args, **kwds) class EncodingSortField(Sort): """EncodingSortField schema wrapper Mapping(required=[]) A sort definition for sorting a discrete scale in an encoding field definition. Attributes ---------- field : :class:`Field` The data `field `__ to sort by. **Default value:** If unspecified, defaults to the field specified in the outer data reference. op : :class:`NonArgAggregateOp` An `aggregate operation `__ to perform on the field prior to sorting (e.g., ``"count"``, ``"mean"`` and ``"median"`` ). An aggregation is required when there are multiple values of the sort field for each encoded data field. The input data objects will be aggregated, grouped by the encoded data field. For a full list of operations, please see the documentation for `aggregate `__. **Default value:** ``"sum"`` for stacked plots. Otherwise, ``"min"``. order : anyOf(:class:`SortOrder`, None) The sort order. One of ``"ascending"`` (default), ``"descending"``, or ``null`` (no not sort). """ _schema = {'$ref': '#/definitions/EncodingSortField'} def __init__(self, field=Undefined, op=Undefined, order=Undefined, **kwds): super(EncodingSortField, self).__init__(field=field, op=op, order=order, **kwds) class SortArray(Sort): """SortArray schema wrapper anyOf(List(float), List(string), List(boolean), List(:class:`DateTime`)) """ _schema = {'$ref': '#/definitions/SortArray'} def __init__(self, *args, **kwds): super(SortArray, self).__init__(*args, **kwds) class SortByChannel(AllSortString): """SortByChannel schema wrapper enum('x', 'y', 'color', 'fill', 'stroke', 'strokeWidth', 'size', 'shape', 'fillOpacity', 'strokeOpacity', 'opacity', 'text') """ _schema = {'$ref': '#/definitions/SortByChannel'} def __init__(self, *args): super(SortByChannel, self).__init__(*args) class SortByChannelDesc(AllSortString): """SortByChannelDesc schema wrapper enum('-x', '-y', '-color', '-fill', '-stroke', '-strokeWidth', '-size', '-shape', '-fillOpacity', '-strokeOpacity', '-opacity', '-text') """ _schema = {'$ref': '#/definitions/SortByChannelDesc'} def __init__(self, *args): super(SortByChannelDesc, self).__init__(*args) class SortByEncoding(Sort): """SortByEncoding schema wrapper Mapping(required=[encoding]) Attributes ---------- encoding : :class:`SortByChannel` The `encoding channel `__ to sort by (e.g., ``"x"``, ``"y"`` ) order : anyOf(:class:`SortOrder`, None) The sort order. One of ``"ascending"`` (default), ``"descending"``, or ``null`` (no not sort). """ _schema = {'$ref': '#/definitions/SortByEncoding'} def __init__(self, encoding=Undefined, order=Undefined, **kwds): super(SortByEncoding, self).__init__(encoding=encoding, order=order, **kwds) class SortField(VegaLiteSchema): """SortField schema wrapper Mapping(required=[field]) A sort definition for transform Attributes ---------- field : :class:`FieldName` The name of the field to sort. order : anyOf(:class:`SortOrder`, None) Whether to sort the field in ascending or descending order. One of ``"ascending"`` (default), ``"descending"``, or ``null`` (no not sort). """ _schema = {'$ref': '#/definitions/SortField'} def __init__(self, field=Undefined, order=Undefined, **kwds): super(SortField, self).__init__(field=field, order=order, **kwds) class SortOrder(AllSortString): """SortOrder schema wrapper enum('ascending', 'descending') """ _schema = {'$ref': '#/definitions/SortOrder'} def __init__(self, *args): super(SortOrder, self).__init__(*args) class Spec(VegaLiteSchema): """Spec schema wrapper anyOf(:class:`FacetedUnitSpec`, :class:`LayerSpec`, :class:`RepeatSpec`, :class:`FacetSpec`, :class:`ConcatSpecGenericSpec`, :class:`VConcatSpecGenericSpec`, :class:`HConcatSpecGenericSpec`) Any specification in Vega-Lite. """ _schema = {'$ref': '#/definitions/Spec'} def __init__(self, *args, **kwds): super(Spec, self).__init__(*args, **kwds) class ConcatSpecGenericSpec(Spec): """ConcatSpecGenericSpec schema wrapper Mapping(required=[concat]) Base interface for a generalized concatenation specification. Attributes ---------- concat : List(:class:`Spec`) A list of views to be concatenated. align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`) The alignment to apply to grid rows and columns. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. Alternatively, an object value of the form ``{"row": string, "column": string}`` can be used to supply different alignments for rows and columns. **Default value:** ``"all"``. bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : anyOf(boolean, :class:`RowColboolean`) Boolean flag indicating if subviews should be centered relative to their respective rows or columns. An object value of the form ``{"row": boolean, "column": boolean}`` can be used to supply different centering values for rows and columns. **Default value:** ``false`` columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : anyOf(float, :class:`RowColnumber`) The spacing in pixels between sub-views of the composition operator. An object of the form ``{"row": number, "column": number}`` can be used to set different spacing values for rows and columns. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. """ _schema = {'$ref': '#/definitions/ConcatSpec'} def __init__(self, concat=Undefined, align=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, data=Undefined, description=Undefined, name=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, **kwds): super(ConcatSpecGenericSpec, self).__init__(concat=concat, align=align, bounds=bounds, center=center, columns=columns, data=data, description=description, name=name, resolve=resolve, spacing=spacing, title=title, transform=transform, **kwds) class FacetSpec(Spec): """FacetSpec schema wrapper Mapping(required=[facet, spec]) Base interface for a facet specification. Attributes ---------- facet : anyOf(:class:`FacetFieldDefFieldName`, :class:`FacetMappingFieldName`) Definition for how to facet the data. One of: 1) `a field definition for faceting the plot by one field `__ 2) `An object that maps row and column channels to their field definitions `__ spec : anyOf(:class:`LayerSpec`, :class:`FacetedUnitSpec`) A specification of the view that gets faceted. align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`) The alignment to apply to grid rows and columns. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. Alternatively, an object value of the form ``{"row": string, "column": string}`` can be used to supply different alignments for rows and columns. **Default value:** ``"all"``. bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : anyOf(boolean, :class:`RowColboolean`) Boolean flag indicating if subviews should be centered relative to their respective rows or columns. An object value of the form ``{"row": boolean, "column": boolean}`` can be used to supply different centering values for rows and columns. **Default value:** ``false`` columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : anyOf(float, :class:`RowColnumber`) The spacing in pixels between sub-views of the composition operator. An object of the form ``{"row": number, "column": number}`` can be used to set different spacing values for rows and columns. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. """ _schema = {'$ref': '#/definitions/FacetSpec'} def __init__(self, facet=Undefined, spec=Undefined, align=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, data=Undefined, description=Undefined, name=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, **kwds): super(FacetSpec, self).__init__(facet=facet, spec=spec, align=align, bounds=bounds, center=center, columns=columns, data=data, description=description, name=name, resolve=resolve, spacing=spacing, title=title, transform=transform, **kwds) class FacetedUnitSpec(NormalizedSpec, Spec): """FacetedUnitSpec schema wrapper Mapping(required=[mark]) Unit spec that can have a composite mark and row or column channels (shorthand for a facet spec). Attributes ---------- mark : :class:`AnyMark` A string describing the mark type (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"rule"``, ``"geoshape"``, and ``"text"`` ) or a `mark definition object `__. bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. encoding : :class:`FacetedEncoding` A key-value mapping between encoding channels and definition of fields. height : anyOf(float, enum('container'), :class:`Step`) The height of a visualization. * For a plot with a continuous y-field, height should be a number. * For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of ``{step: number}`` defining the height per discrete step. (No y-field is equivalent to having one discrete step.) * To enable responsive sizing on height, it should be set to ``"container"``. **Default value:** Based on ``config.view.continuousHeight`` for a plot with a continuous y-field and ``config.view.discreteHeight`` otherwise. **Note:** For plots with `row and column channels `__, this represents the height of a single view and the ``"container"`` option cannot be used. **See also:** `height `__ documentation. name : string Name of the visualization for later reference. projection : :class:`Projection` An object defining properties of geographic projection, which will be applied to ``shape`` path for ``"geoshape"`` marks and to ``latitude`` and ``"longitude"`` channels for other marks. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. selection : Mapping(required=[]) A key-value mapping between selection names and definitions. title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. view : :class:`ViewBackground` An object defining the view background's fill and stroke. **Default value:** none (transparent) width : anyOf(float, enum('container'), :class:`Step`) The width of a visualization. * For a plot with a continuous x-field, width should be a number. * For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of ``{step: number}`` defining the width per discrete step. (No x-field is equivalent to having one discrete step.) * To enable responsive sizing on width, it should be set to ``"container"``. **Default value:** Based on ``config.view.continuousWidth`` for a plot with a continuous x-field and ``config.view.discreteWidth`` otherwise. **Note:** For plots with `row and column channels `__, this represents the width of a single view and the ``"container"`` option cannot be used. **See also:** `width `__ documentation. """ _schema = {'$ref': '#/definitions/FacetedUnitSpec'} def __init__(self, mark=Undefined, bounds=Undefined, data=Undefined, description=Undefined, encoding=Undefined, height=Undefined, name=Undefined, projection=Undefined, resolve=Undefined, selection=Undefined, title=Undefined, transform=Undefined, view=Undefined, width=Undefined, **kwds): super(FacetedUnitSpec, self).__init__(mark=mark, bounds=bounds, data=data, description=description, encoding=encoding, height=height, name=name, projection=projection, resolve=resolve, selection=selection, title=title, transform=transform, view=view, width=width, **kwds) class HConcatSpecGenericSpec(Spec): """HConcatSpecGenericSpec schema wrapper Mapping(required=[hconcat]) Base interface for a horizontal concatenation specification. Attributes ---------- hconcat : List(:class:`Spec`) A list of views to be concatenated and put into a row. bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : boolean Boolean flag indicating if subviews should be centered relative to their respective rows or columns. **Default value:** ``false`` data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : float The spacing in pixels between sub-views of the concat operator. **Default value** : ``10`` title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. """ _schema = {'$ref': '#/definitions/HConcatSpec'} def __init__(self, hconcat=Undefined, bounds=Undefined, center=Undefined, data=Undefined, description=Undefined, name=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, **kwds): super(HConcatSpecGenericSpec, self).__init__(hconcat=hconcat, bounds=bounds, center=center, data=data, description=description, name=name, resolve=resolve, spacing=spacing, title=title, transform=transform, **kwds) class LayerSpec(NormalizedSpec, Spec): """LayerSpec schema wrapper Mapping(required=[layer]) A full layered plot specification, which may contains ``encoding`` and ``projection`` properties that will be applied to underlying unit (single-view) specifications. Attributes ---------- layer : List(anyOf(:class:`LayerSpec`, :class:`UnitSpec`)) Layer or single view specifications to be layered. **Note** : Specifications inside ``layer`` cannot use ``row`` and ``column`` channels as layering facet specifications is not allowed. Instead, use the `facet operator `__ and place a layer inside a facet. data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. encoding : :class:`Encoding` A shared key-value mapping between encoding channels and definition of fields in the underlying layers. height : anyOf(float, enum('container'), :class:`Step`) The height of a visualization. * For a plot with a continuous y-field, height should be a number. * For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of ``{step: number}`` defining the height per discrete step. (No y-field is equivalent to having one discrete step.) * To enable responsive sizing on height, it should be set to ``"container"``. **Default value:** Based on ``config.view.continuousHeight`` for a plot with a continuous y-field and ``config.view.discreteHeight`` otherwise. **Note:** For plots with `row and column channels `__, this represents the height of a single view and the ``"container"`` option cannot be used. **See also:** `height `__ documentation. name : string Name of the visualization for later reference. projection : :class:`Projection` An object defining properties of the geographic projection shared by underlying layers. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. view : :class:`ViewBackground` An object defining the view background's fill and stroke. **Default value:** none (transparent) width : anyOf(float, enum('container'), :class:`Step`) The width of a visualization. * For a plot with a continuous x-field, width should be a number. * For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of ``{step: number}`` defining the width per discrete step. (No x-field is equivalent to having one discrete step.) * To enable responsive sizing on width, it should be set to ``"container"``. **Default value:** Based on ``config.view.continuousWidth`` for a plot with a continuous x-field and ``config.view.discreteWidth`` otherwise. **Note:** For plots with `row and column channels `__, this represents the width of a single view and the ``"container"`` option cannot be used. **See also:** `width `__ documentation. """ _schema = {'$ref': '#/definitions/LayerSpec'} def __init__(self, layer=Undefined, data=Undefined, description=Undefined, encoding=Undefined, height=Undefined, name=Undefined, projection=Undefined, resolve=Undefined, title=Undefined, transform=Undefined, view=Undefined, width=Undefined, **kwds): super(LayerSpec, self).__init__(layer=layer, data=data, description=description, encoding=encoding, height=height, name=name, projection=projection, resolve=resolve, title=title, transform=transform, view=view, width=width, **kwds) class RepeatSpec(NormalizedSpec, Spec): """RepeatSpec schema wrapper Mapping(required=[repeat, spec]) Base interface for a repeat specification. Attributes ---------- repeat : anyOf(List(string), :class:`RepeatMapping`) Definition for fields to be repeated. One of: 1) An array of fields to be repeated. If ``"repeat"`` is an array, the field can be referred to as ``{"repeat": "repeat"}``. The repeated views are laid out in a wrapped row. You can set the number of columns to control the wrapping. 2) An object that maps ``"row"`` and/or ``"column"`` to the listed fields to be repeated along the particular orientations. The objects ``{"repeat": "row"}`` and ``{"repeat": "column"}`` can be used to refer to the repeated field respectively. spec : :class:`Spec` A specification of the view that gets repeated. align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`) The alignment to apply to grid rows and columns. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. Alternatively, an object value of the form ``{"row": string, "column": string}`` can be used to supply different alignments for rows and columns. **Default value:** ``"all"``. bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : anyOf(boolean, :class:`RowColboolean`) Boolean flag indicating if subviews should be centered relative to their respective rows or columns. An object value of the form ``{"row": boolean, "column": boolean}`` can be used to supply different centering values for rows and columns. **Default value:** ``false`` columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : anyOf(float, :class:`RowColnumber`) The spacing in pixels between sub-views of the composition operator. An object of the form ``{"row": number, "column": number}`` can be used to set different spacing values for rows and columns. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. """ _schema = {'$ref': '#/definitions/RepeatSpec'} def __init__(self, repeat=Undefined, spec=Undefined, align=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, data=Undefined, description=Undefined, name=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, **kwds): super(RepeatSpec, self).__init__(repeat=repeat, spec=spec, align=align, bounds=bounds, center=center, columns=columns, data=data, description=description, name=name, resolve=resolve, spacing=spacing, title=title, transform=transform, **kwds) class SphereGenerator(Generator): """SphereGenerator schema wrapper Mapping(required=[sphere]) Attributes ---------- sphere : anyOf(enum(True), Mapping(required=[])) Generate sphere GeoJSON data for the full globe. name : string Provide a placeholder name and bind data at runtime. """ _schema = {'$ref': '#/definitions/SphereGenerator'} def __init__(self, sphere=Undefined, name=Undefined, **kwds): super(SphereGenerator, self).__init__(sphere=sphere, name=name, **kwds) class StackOffset(VegaLiteSchema): """StackOffset schema wrapper enum('zero', 'center', 'normalize') """ _schema = {'$ref': '#/definitions/StackOffset'} def __init__(self, *args): super(StackOffset, self).__init__(*args) class StandardType(VegaLiteSchema): """StandardType schema wrapper enum('quantitative', 'ordinal', 'temporal', 'nominal') """ _schema = {'$ref': '#/definitions/StandardType'} def __init__(self, *args): super(StandardType, self).__init__(*args) class Step(VegaLiteSchema): """Step schema wrapper Mapping(required=[step]) Attributes ---------- step : float The size (width/height) per discrete step. """ _schema = {'$ref': '#/definitions/Step'} def __init__(self, step=Undefined, **kwds): super(Step, self).__init__(step=step, **kwds) class Stream(VegaLiteSchema): """Stream schema wrapper anyOf(:class:`EventStream`, :class:`DerivedStream`, :class:`MergedStream`) """ _schema = {'$ref': '#/definitions/Stream'} def __init__(self, *args, **kwds): super(Stream, self).__init__(*args, **kwds) class DerivedStream(Stream): """DerivedStream schema wrapper Mapping(required=[stream]) Attributes ---------- stream : :class:`Stream` between : List(:class:`Stream`) consume : boolean debounce : float filter : anyOf(:class:`Expr`, List(:class:`Expr`)) markname : string marktype : :class:`MarkType` throttle : float """ _schema = {'$ref': '#/definitions/DerivedStream'} def __init__(self, stream=Undefined, between=Undefined, consume=Undefined, debounce=Undefined, filter=Undefined, markname=Undefined, marktype=Undefined, throttle=Undefined, **kwds): super(DerivedStream, self).__init__(stream=stream, between=between, consume=consume, debounce=debounce, filter=filter, markname=markname, marktype=marktype, throttle=throttle, **kwds) class EventStream(Stream): """EventStream schema wrapper anyOf(Mapping(required=[type]), Mapping(required=[source, type])) """ _schema = {'$ref': '#/definitions/EventStream'} def __init__(self, *args, **kwds): super(EventStream, self).__init__(*args, **kwds) class MergedStream(Stream): """MergedStream schema wrapper Mapping(required=[merge]) Attributes ---------- merge : List(:class:`Stream`) between : List(:class:`Stream`) consume : boolean debounce : float filter : anyOf(:class:`Expr`, List(:class:`Expr`)) markname : string marktype : :class:`MarkType` throttle : float """ _schema = {'$ref': '#/definitions/MergedStream'} def __init__(self, merge=Undefined, between=Undefined, consume=Undefined, debounce=Undefined, filter=Undefined, markname=Undefined, marktype=Undefined, throttle=Undefined, **kwds): super(MergedStream, self).__init__(merge=merge, between=between, consume=consume, debounce=debounce, filter=filter, markname=markname, marktype=marktype, throttle=throttle, **kwds) class StringFieldDef(VegaLiteSchema): """StringFieldDef schema wrapper Mapping(required=[type]) Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : anyOf(string, Mapping(required=[])) When used with the default ``"number"`` and ``"time"`` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. When used with a `custom "formatType" `__ that takes ``datum.value`` and format parameter as input), this property represents the format parameter. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : string The format type for labels ( ``"number"`` or ``"time"`` or a `registered custom format type `__ ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. labelExpr : string `Vega expression `__ for customizing labels text. **Note:** The label text and value can be assessed via the ``label`` and ``value`` properties of the axis's backing ``datum`` object. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/StringFieldDef'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, format=Undefined, formatType=Undefined, labelExpr=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(StringFieldDef, self).__init__(type=type, aggregate=aggregate, bin=bin, field=field, format=format, formatType=formatType, labelExpr=labelExpr, timeUnit=timeUnit, title=title, **kwds) class StringFieldDefWithCondition(VegaLiteSchema): """StringFieldDefWithCondition schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionstring` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : anyOf(string, Mapping(required=[])) When used with the default ``"number"`` and ``"time"`` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. When used with a `custom "formatType" `__ that takes ``datum.value`` and format parameter as input), this property represents the format parameter. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : string The format type for labels ( ``"number"`` or ``"time"`` or a `registered custom format type `__ ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. labelExpr : string `Vega expression `__ for customizing labels text. **Note:** The label text and value can be assessed via the ``label`` and ``value`` properties of the axis's backing ``datum`` object. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/StringFieldDefWithCondition'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined, labelExpr=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(StringFieldDefWithCondition, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, format=format, formatType=formatType, labelExpr=labelExpr, timeUnit=timeUnit, title=title, **kwds) class StringValueWithCondition(VegaLiteSchema): """StringValueWithCondition schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionstringnull`) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/StringValueWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(StringValueWithCondition, self).__init__(condition=condition, value=value, **kwds) class StringValueWithConditionTypeForShape(VegaLiteSchema): """StringValueWithConditionTypeForShape schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDefTypeForShape`, :class:`ValueConditionstringnull`) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/StringValueWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(StringValueWithConditionTypeForShape, self).__init__(condition=condition, value=value, **kwds) class StyleConfigIndex(VegaLiteSchema): """StyleConfigIndex schema wrapper Mapping(required=[]) Attributes ---------- area : :class:`AreaConfig` Area-Specific Config bar : :class:`BarConfig` Bar-Specific Config circle : :class:`MarkConfig` Circle-Specific Config geoshape : :class:`MarkConfig` Geoshape-Specific Config image : :class:`RectConfig` Image-specific Config line : :class:`LineConfig` Line-Specific Config mark : :class:`MarkConfig` Mark Config point : :class:`MarkConfig` Point-Specific Config rect : :class:`RectConfig` Rect-Specific Config rule : :class:`MarkConfig` Rule-Specific Config square : :class:`MarkConfig` Square-Specific Config text : :class:`MarkConfig` Text-Specific Config tick : :class:`TickConfig` Tick-Specific Config trail : :class:`LineConfig` Trail-Specific Config group-subtitle : :class:`MarkConfig` Default style for chart subtitles group-title : :class:`MarkConfig` Default style for chart titles guide-label : :class:`MarkConfig` Default style for axis, legend, and header labels. guide-title : :class:`MarkConfig` Default style for axis, legend, and header titles. """ _schema = {'$ref': '#/definitions/StyleConfigIndex'} def __init__(self, area=Undefined, bar=Undefined, circle=Undefined, geoshape=Undefined, image=Undefined, line=Undefined, mark=Undefined, point=Undefined, rect=Undefined, rule=Undefined, square=Undefined, text=Undefined, tick=Undefined, trail=Undefined, **kwds): super(StyleConfigIndex, self).__init__(area=area, bar=bar, circle=circle, geoshape=geoshape, image=image, line=line, mark=mark, point=point, rect=rect, rule=rule, square=square, text=text, tick=tick, trail=trail, **kwds) class SymbolShape(VegaLiteSchema): """SymbolShape schema wrapper string """ _schema = {'$ref': '#/definitions/SymbolShape'} def __init__(self, *args): super(SymbolShape, self).__init__(*args) class Text(VegaLiteSchema): """Text schema wrapper anyOf(string, List(string)) """ _schema = {'$ref': '#/definitions/Text'} def __init__(self, *args, **kwds): super(Text, self).__init__(*args, **kwds) class TextBaseline(VegaLiteSchema): """TextBaseline schema wrapper anyOf(enum('alphabetic'), :class:`Baseline`, enum('line-top'), enum('line-bottom')) """ _schema = {'$ref': '#/definitions/TextBaseline'} def __init__(self, *args, **kwds): super(TextBaseline, self).__init__(*args, **kwds) class Baseline(TextBaseline): """Baseline schema wrapper enum('top', 'middle', 'bottom') """ _schema = {'$ref': '#/definitions/Baseline'} def __init__(self, *args): super(Baseline, self).__init__(*args) class TextDirection(VegaLiteSchema): """TextDirection schema wrapper enum('ltr', 'rtl') """ _schema = {'$ref': '#/definitions/TextDirection'} def __init__(self, *args): super(TextDirection, self).__init__(*args) class TextFieldDefWithCondition(VegaLiteSchema): """TextFieldDefWithCondition schema wrapper Mapping(required=[type]) A FieldDef with Condition :raw-html:`` Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. condition : :class:`ValueConditionText` One or more value definition(s) with `a selection or a test predicate `__. **Note:** A field definition's ``condition`` property can only contain `conditional value definitions `__ since Vega-Lite only allows at most one encoded field per encoding channel. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. format : anyOf(string, Mapping(required=[])) When used with the default ``"number"`` and ``"time"`` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks. * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's `number format pattern `__. * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time format pattern `__. See the `format documentation `__ for more examples. When used with a `custom "formatType" `__ that takes ``datum.value`` and format parameter as input), this property represents the format parameter. **Default value:** Derived from `numberFormat `__ config for number format and from `timeFormat `__ config for time format. formatType : string The format type for labels ( ``"number"`` or ``"time"`` or a `registered custom format type `__ ). **Default value:** * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``. * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without ``timeUnit``. labelExpr : string `Vega expression `__ for customizing labels text. **Note:** The label text and value can be assessed via the ``label`` and ``value`` properties of the axis's backing ``datum`` object. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/TextFieldDefWithCondition'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined, labelExpr=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(TextFieldDefWithCondition, self).__init__(type=type, aggregate=aggregate, bin=bin, condition=condition, field=field, format=format, formatType=formatType, labelExpr=labelExpr, timeUnit=timeUnit, title=title, **kwds) class TextValueWithCondition(VegaLiteSchema): """TextValueWithCondition schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalStringFieldDef`, :class:`ValueConditionText`) A field definition or one or more value definition(s) with a selection predicate. value : :class:`Text` A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/TextValueWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(TextValueWithCondition, self).__init__(condition=condition, value=value, **kwds) class TickConfig(AnyMarkConfig): """TickConfig schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of ``"left"``, ``"right"``, ``"center"``. angle : float The rotation angle of the text, in degrees. aspect : boolean Whether to keep aspect ratio of image marks. bandSize : float The width of the ticks. **Default value:** 3/4 of step (width step for horizontal ticks and height step for vertical ticks). baseline : :class:`TextBaseline` The vertical text baseline. One of ``"alphabetic"`` (default), ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or ``"line-bottom"``. The ``"line-top"`` and ``"line-bottom"`` values operate similarly to ``"top"`` and ``"bottom"``, but are calculated relative to the ``lineHeight`` rather than ``fontSize`` alone. blend : :class:`Blend` The color blend mode for drawing an item on its current background. Any valid `CSS mix-blend-mode `__ value can be used. __Default value: ``"source-over"`` color : anyOf(:class:`Color`, :class:`Gradient`) Default color. **Default value:** :raw-html:`` ``"#4682b4"`` **Note:** * This property cannot be used in a `style config `__. * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and will override ``color``. cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cornerRadiusBottomLeft : float The radius in pixels of rounded rectangle bottom left corner. **Default value:** ``0`` cornerRadiusBottomRight : float The radius in pixels of rounded rectangle bottom right corner. **Default value:** ``0`` cornerRadiusTopLeft : float The radius in pixels of rounded rectangle top right corner. **Default value:** ``0`` cornerRadiusTopRight : float The radius in pixels of rounded rectangle top left corner. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the mark. Any valid `CSS cursor type `__ can be used. dir : :class:`TextDirection` The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"`` (right-to-left). This property determines on which side is truncated in response to the limit parameter. **Default value:** ``"ltr"`` dx : float The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. dy : float The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the *angle* property. ellipsis : string The ellipsis string for text truncated in response to the limit parameter. **Default value:** ``"…"`` fill : anyOf(:class:`Color`, :class:`Gradient`, None) Default Fill Color. This property has higher precedence than ``config.color``. **Default value:** (None) fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` filled : boolean Whether the mark's color should be used as fill color instead of stroke color. **Default value:** ``false`` for all ``point``, ``line``, and ``rule`` marks as well as ``geoshape`` marks for `graticule `__ data sources; otherwise, ``true``. **Note:** This property cannot be used in a `style config `__. font : string The typeface to set the text in (e.g., ``"Helvetica Neue"`` ). fontSize : float The font size, in pixels. **Default value:** ``11`` fontStyle : :class:`FontStyle` The font style (e.g., ``"italic"`` ). fontWeight : :class:`FontWeight` The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). height : float Height of the marks. href : string A URL to load upon mouse click. If defined, the mark acts as a hyperlink. interpolate : :class:`Interpolate` The line interpolation method to use for line and area marks. One of the following: * ``"linear"`` : piecewise linear segments, as in a polyline. * ``"linear-closed"`` : close the linear segments to form a polygon. * ``"step"`` : alternate between horizontal and vertical segments, as in a step function. * ``"step-before"`` : alternate between vertical and horizontal segments, as in a step function. * ``"step-after"`` : alternate between horizontal and vertical segments, as in a step function. * ``"basis"`` : a B-spline, with control point duplication on the ends. * ``"basis-open"`` : an open B-spline; may not intersect the start or end. * ``"basis-closed"`` : a closed B-spline, as in a loop. * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends. * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end, but will intersect other control points. * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop. * ``"bundle"`` : equivalent to basis, except the tension parameter is used to straighten the spline. * ``"monotone"`` : cubic interpolation that preserves monotonicity in y. invalid : enum('filter', None) Defines how Vega-Lite should handle marks for invalid values ( ``null`` and ``NaN`` ). * If set to ``"filter"`` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). * If ``null``, all data items are included. In this case, invalid values will be interpreted as zeroes. limit : float The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit. **Default value:** ``0`` -- indicating no limit lineBreak : string A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued. lineHeight : float The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks. opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. order : anyOf(None, boolean) For line and trail marks, this ``order`` property can be set to ``null`` or ``false`` to make the lines use the original order in the data sources. orient : :class:`Orientation` The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. * For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. * For area, this property determines the orient property of the Vega output. * For line and trail marks, this property determines the sort order of the points in the line if ``config.sortLineBy`` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored. radius : float Polar coordinate radial offset, in pixels, of the text label from the origin determined by the ``x`` and ``y`` properties. shape : anyOf(:class:`SymbolShape`, string) Shape of the point marks. Supported values include: * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``. * the line symbol ``"stroke"`` * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"`` * a custom `SVG path string `__ (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.) **Default value:** ``"circle"`` size : float Default size for marks. * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value. * For ``bar``, this represents the band size of the bar, in pixels. * For ``text``, this represents the font size, in pixels. **Default value:** * ``30`` for point, circle, square marks; width/height's ``step`` * ``2`` for bar marks with discrete dimensions; * ``5`` for bar marks with continuous dimensions; * ``11`` for text marks. stroke : anyOf(:class:`Color`, :class:`Gradient`, None) Default Stroke Color. This property has higher precedence than ``config.color``. **Default value:** (None) strokeCap : string The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"butt"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : string The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOffset : float The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. tension : float Depending on the interpolation type, sets the tension parameter (for line and area marks). text : :class:`Text` Placeholder text if the ``text`` channel is not specified theta : float Polar coordinate angle, in radians, of the text label from the origin determined by the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in radians, with ``0`` indicating "north". thickness : float Thickness of the tick mark. **Default value:** ``1`` timeUnitBand : float Default relative band size for a time unit. If set to ``1``, the bandwidth of the marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the marks will be half of the time unit band step. timeUnitBandPosition : float Default relative band position for a time unit. If set to ``0``, the marks will be positioned at the beginning of the time unit band step. If set to ``0.5``, the marks will be positioned in the middle of the time unit band step. tooltip : anyOf(float, string, boolean, :class:`TooltipContent`, None) The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from. * If ``tooltip`` is ``true`` or ``{"content": "encoding"}``, then all fields from ``encoding`` will be used. * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the highlighted data point will be used. * If set to ``null`` or ``false``, then no tooltip will be used. See the `tooltip `__ documentation for a detailed discussion about tooltip in Vega-Lite. **Default value:** ``null`` width : float Width of the marks. x : anyOf(float, enum('width')) X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without specified ``x2`` or ``width``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. x2 : anyOf(float, enum('width')) X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"width"`` for the width of the plot. y : anyOf(float, enum('height')) Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without specified ``y2`` or ``height``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. y2 : anyOf(float, enum('height')) Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``. The ``value`` of this channel can be a number or a string ``"height"`` for the height of the plot. """ _schema = {'$ref': '#/definitions/TickConfig'} def __init__(self, align=Undefined, angle=Undefined, aspect=Undefined, bandSize=Undefined, baseline=Undefined, blend=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined, y2=Undefined, **kwds): super(TickConfig, self).__init__(align=align, angle=angle, aspect=aspect, bandSize=bandSize, baseline=baseline, blend=blend, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, tension=tension, text=text, theta=theta, thickness=thickness, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, y=y, y2=y2, **kwds) class TickCount(VegaLiteSchema): """TickCount schema wrapper anyOf(float, :class:`TimeInterval`) """ _schema = {'$ref': '#/definitions/TickCount'} def __init__(self, *args, **kwds): super(TickCount, self).__init__(*args, **kwds) class TimeInterval(TickCount): """TimeInterval schema wrapper enum('millisecond', 'second', 'minute', 'hour', 'day', 'week', 'month', 'year') """ _schema = {'$ref': '#/definitions/TimeInterval'} def __init__(self, *args): super(TimeInterval, self).__init__(*args) class TimeIntervalStep(VegaLiteSchema): """TimeIntervalStep schema wrapper Mapping(required=[interval, step]) Attributes ---------- interval : :class:`TimeInterval` step : float """ _schema = {'$ref': '#/definitions/TimeIntervalStep'} def __init__(self, interval=Undefined, step=Undefined, **kwds): super(TimeIntervalStep, self).__init__(interval=interval, step=step, **kwds) class TimeUnit(VegaLiteSchema): """TimeUnit schema wrapper anyOf(:class:`SingleTimeUnit`, :class:`MultiTimeUnit`) """ _schema = {'$ref': '#/definitions/TimeUnit'} def __init__(self, *args, **kwds): super(TimeUnit, self).__init__(*args, **kwds) class MultiTimeUnit(TimeUnit): """MultiTimeUnit schema wrapper anyOf(:class:`LocalMultiTimeUnit`, :class:`UtcMultiTimeUnit`) """ _schema = {'$ref': '#/definitions/MultiTimeUnit'} def __init__(self, *args, **kwds): super(MultiTimeUnit, self).__init__(*args, **kwds) class LocalMultiTimeUnit(MultiTimeUnit): """LocalMultiTimeUnit schema wrapper enum('yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'quartermonth', 'monthdate', 'monthdatehours', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds') """ _schema = {'$ref': '#/definitions/LocalMultiTimeUnit'} def __init__(self, *args): super(LocalMultiTimeUnit, self).__init__(*args) class SingleTimeUnit(TimeUnit): """SingleTimeUnit schema wrapper anyOf(:class:`LocalSingleTimeUnit`, :class:`UtcSingleTimeUnit`) """ _schema = {'$ref': '#/definitions/SingleTimeUnit'} def __init__(self, *args, **kwds): super(SingleTimeUnit, self).__init__(*args, **kwds) class LocalSingleTimeUnit(SingleTimeUnit): """LocalSingleTimeUnit schema wrapper enum('year', 'quarter', 'month', 'day', 'date', 'hours', 'minutes', 'seconds', 'milliseconds') """ _schema = {'$ref': '#/definitions/LocalSingleTimeUnit'} def __init__(self, *args): super(LocalSingleTimeUnit, self).__init__(*args) class TimeUnitParams(VegaLiteSchema): """TimeUnitParams schema wrapper Mapping(required=[]) Attributes ---------- maxbins : float If no ``unit`` is specified, maxbins is used to infer time units. step : float The number of steps between bins, in terms of the least significant unit provided. unit : :class:`TimeUnit` Defines how date-time values should be binned. utc : boolean True to use UTC timezone. Equivalent to using a ``utc`` prefixed ``TimeUnit``. """ _schema = {'$ref': '#/definitions/TimeUnitParams'} def __init__(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds): super(TimeUnitParams, self).__init__(maxbins=maxbins, step=step, unit=unit, utc=utc, **kwds) class TitleAnchor(VegaLiteSchema): """TitleAnchor schema wrapper enum(None, 'start', 'middle', 'end') """ _schema = {'$ref': '#/definitions/TitleAnchor'} def __init__(self, *args): super(TitleAnchor, self).__init__(*args) class TitleConfig(VegaLiteSchema): """TitleConfig schema wrapper Mapping(required=[]) Attributes ---------- align : :class:`Align` Horizontal text alignment for title text. One of ``"left"``, ``"center"``, or ``"right"``. anchor : :class:`TitleAnchor` The anchor position for placing the title and subtitle text. One of ``"start"``, ``"middle"``, or ``"end"``. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title. angle : float Angle in degrees of title and subtitle text. baseline : :class:`TextBaseline` Vertical text baseline for title and subtitle text. One of ``"top"``, ``"middle"``, ``"bottom"``, or ``"alphabetic"``. color : anyOf(None, :class:`Color`) Text color for title text. dx : float Delta offset for title and subtitle text x-coordinate. dy : float Delta offset for title and subtitle text y-coordinate. font : string Font name for title text. fontSize : float Font size in pixels for title text. fontStyle : :class:`FontStyle` Font style for title text. fontWeight : :class:`FontWeight` Font weight for title text. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). frame : anyOf(:class:`TitleFrame`, string) The reference frame for the anchor position, one of ``"bounds"`` (to anchor relative to the full bounding box) or ``"group"`` (to anchor relative to the group width or height). limit : float The maximum allowed length in pixels of title and subtitle text. lineHeight : float Line height in pixels for multi-line title text. offset : float The orthogonal offset in pixels by which to displace the title group from its position along the edge of the chart. orient : :class:`TitleOrient` Default title orientation ( ``"top"``, ``"bottom"``, ``"left"``, or ``"right"`` ) subtitleColor : anyOf(None, :class:`Color`) Text color for subtitle text. subtitleFont : string Font name for subtitle text. subtitleFontSize : float Font size in pixels for subtitle text. subtitleFontStyle : :class:`FontStyle` Font style for subtitle text. subtitleFontWeight : :class:`FontWeight` Font weight for subtitle text. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). subtitleLineHeight : float Line height in pixels for multi-line subtitle text. subtitlePadding : float The padding in pixels between title and subtitle text. """ _schema = {'$ref': '#/definitions/TitleConfig'} def __init__(self, align=Undefined, anchor=Undefined, angle=Undefined, baseline=Undefined, color=Undefined, dx=Undefined, dy=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, frame=Undefined, limit=Undefined, lineHeight=Undefined, offset=Undefined, orient=Undefined, subtitleColor=Undefined, subtitleFont=Undefined, subtitleFontSize=Undefined, subtitleFontStyle=Undefined, subtitleFontWeight=Undefined, subtitleLineHeight=Undefined, subtitlePadding=Undefined, **kwds): super(TitleConfig, self).__init__(align=align, anchor=anchor, angle=angle, baseline=baseline, color=color, dx=dx, dy=dy, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, frame=frame, limit=limit, lineHeight=lineHeight, offset=offset, orient=orient, subtitleColor=subtitleColor, subtitleFont=subtitleFont, subtitleFontSize=subtitleFontSize, subtitleFontStyle=subtitleFontStyle, subtitleFontWeight=subtitleFontWeight, subtitleLineHeight=subtitleLineHeight, subtitlePadding=subtitlePadding, **kwds) class TitleFrame(VegaLiteSchema): """TitleFrame schema wrapper enum('bounds', 'group') """ _schema = {'$ref': '#/definitions/TitleFrame'} def __init__(self, *args): super(TitleFrame, self).__init__(*args) class TitleOrient(VegaLiteSchema): """TitleOrient schema wrapper enum('none', 'left', 'right', 'top', 'bottom') """ _schema = {'$ref': '#/definitions/TitleOrient'} def __init__(self, *args): super(TitleOrient, self).__init__(*args) class TitleParams(VegaLiteSchema): """TitleParams schema wrapper Mapping(required=[text]) Attributes ---------- text : :class:`Text` The title text. align : :class:`Align` Horizontal text alignment for title text. One of ``"left"``, ``"center"``, or ``"right"``. anchor : :class:`TitleAnchor` The anchor position for placing the title. One of ``"start"``, ``"middle"``, or ``"end"``. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title. **Default value:** ``"middle"`` for `single `__ and `layered `__ views. ``"start"`` for other composite views. **Note:** `For now `__, ``anchor`` is only customizable only for `single `__ and `layered `__ views. For other composite views, ``anchor`` is always ``"start"``. angle : float Angle in degrees of title and subtitle text. baseline : :class:`TextBaseline` Vertical text baseline for title and subtitle text. One of ``"top"``, ``"middle"``, ``"bottom"``, or ``"alphabetic"``. color : anyOf(None, :class:`Color`) Text color for title text. dx : float Delta offset for title and subtitle text x-coordinate. dy : float Delta offset for title and subtitle text y-coordinate. font : string Font name for title text. fontSize : float Font size in pixels for title text. fontStyle : :class:`FontStyle` Font style for title text. fontWeight : :class:`FontWeight` Font weight for title text. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). frame : anyOf(:class:`TitleFrame`, string) The reference frame for the anchor position, one of ``"bounds"`` (to anchor relative to the full bounding box) or ``"group"`` (to anchor relative to the group width or height). limit : float The maximum allowed length in pixels of title and subtitle text. lineHeight : float Line height in pixels for multi-line title text. offset : float The orthogonal offset in pixels by which to displace the title group from its position along the edge of the chart. orient : :class:`TitleOrient` Default title orientation ( ``"top"``, ``"bottom"``, ``"left"``, or ``"right"`` ) style : anyOf(string, List(string)) A `mark style property `__ to apply to the title text mark. **Default value:** ``"group-title"``. subtitle : :class:`Text` The subtitle Text. subtitleColor : anyOf(None, :class:`Color`) Text color for subtitle text. subtitleFont : string Font name for subtitle text. subtitleFontSize : float Font size in pixels for subtitle text. subtitleFontStyle : :class:`FontStyle` Font style for subtitle text. subtitleFontWeight : :class:`FontWeight` Font weight for subtitle text. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ). subtitleLineHeight : float Line height in pixels for multi-line subtitle text. subtitlePadding : float The padding in pixels between title and subtitle text. zindex : float The integer z-index indicating the layering of the title group relative to other axis, mark and legend groups. **Default value:** ``0``. """ _schema = {'$ref': '#/definitions/TitleParams'} def __init__(self, text=Undefined, align=Undefined, anchor=Undefined, angle=Undefined, baseline=Undefined, color=Undefined, dx=Undefined, dy=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, frame=Undefined, limit=Undefined, lineHeight=Undefined, offset=Undefined, orient=Undefined, style=Undefined, subtitle=Undefined, subtitleColor=Undefined, subtitleFont=Undefined, subtitleFontSize=Undefined, subtitleFontStyle=Undefined, subtitleFontWeight=Undefined, subtitleLineHeight=Undefined, subtitlePadding=Undefined, zindex=Undefined, **kwds): super(TitleParams, self).__init__(text=text, align=align, anchor=anchor, angle=angle, baseline=baseline, color=color, dx=dx, dy=dy, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, frame=frame, limit=limit, lineHeight=lineHeight, offset=offset, orient=orient, style=style, subtitle=subtitle, subtitleColor=subtitleColor, subtitleFont=subtitleFont, subtitleFontSize=subtitleFontSize, subtitleFontStyle=subtitleFontStyle, subtitleFontWeight=subtitleFontWeight, subtitleLineHeight=subtitleLineHeight, subtitlePadding=subtitlePadding, zindex=zindex, **kwds) class TooltipContent(VegaLiteSchema): """TooltipContent schema wrapper Mapping(required=[content]) Attributes ---------- content : enum('encoding', 'data') """ _schema = {'$ref': '#/definitions/TooltipContent'} def __init__(self, content=Undefined, **kwds): super(TooltipContent, self).__init__(content=content, **kwds) class TopLevelSpec(VegaLiteSchema): """TopLevelSpec schema wrapper anyOf(:class:`TopLevelUnitSpec`, :class:`TopLevelFacetSpec`, :class:`TopLevelLayerSpec`, :class:`TopLevelRepeatSpec`, :class:`TopLevelNormalizedConcatSpecGenericSpec`, :class:`TopLevelNormalizedVConcatSpecGenericSpec`, :class:`TopLevelNormalizedHConcatSpecGenericSpec`) A Vega-Lite top-level specification. This is the root class for all Vega-Lite specifications. (The json schema is generated from this type.) """ _schema = {'$ref': '#/definitions/TopLevelSpec'} def __init__(self, *args, **kwds): super(TopLevelSpec, self).__init__(*args, **kwds) class TopLevelFacetSpec(TopLevelSpec): """TopLevelFacetSpec schema wrapper Mapping(required=[data, facet, spec]) Attributes ---------- data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. facet : anyOf(:class:`FacetFieldDef`, :class:`FacetMapping`) Definition for how to facet the data. One of: 1) `a field definition for faceting the plot by one field `__ 2) `An object that maps row and column channels to their field definitions `__ spec : anyOf(:class:`LayerSpec`, :class:`UnitSpecWithFrame`) A specification of the view that gets faceted. align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`) The alignment to apply to grid rows and columns. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. Alternatively, an object value of the form ``{"row": string, "column": string}`` can be used to supply different alignments for rows and columns. **Default value:** ``"all"``. autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`) How the visualization size should be determined. If a string, should be one of ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify parameters for content sizing and automatic resizing. **Default value** : ``pad`` background : :class:`Color` CSS color property to use as the background of the entire view. **Default value:** ``"white"`` bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : anyOf(boolean, :class:`RowColboolean`) Boolean flag indicating if subviews should be centered relative to their respective rows or columns. An object value of the form ``{"row": boolean, "column": boolean}`` can be used to supply different centering values for rows and columns. **Default value:** ``false`` columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). config : :class:`Config` Vega-Lite configuration object. This property can only be defined at the top-level of a specification. datasets : :class:`Datasets` A global data store for named datasets. This is a mapping from names to inline datasets. This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a ``data`` property. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. padding : :class:`Padding` The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5, "bottom": 5}`` to specify padding for each side of the visualization. **Default value** : ``5`` resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : anyOf(float, :class:`RowColnumber`) The spacing in pixels between sub-views of the composition operator. An object of the form ``{"row": number, "column": number}`` can be used to set different spacing values for rows and columns. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. usermeta : Mapping(required=[]) Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata. $schema : string URL to `JSON schema `__ for a Vega-Lite specification. Unless you have a reason to change this, use ``https://vega.github.io/schema/vega-lite/v4.json``. Setting the ``$schema`` property allows automatic validation and autocomplete in editors that support JSON schema. """ _schema = {'$ref': '#/definitions/TopLevelFacetSpec'} def __init__(self, data=Undefined, facet=Undefined, spec=Undefined, align=Undefined, autosize=Undefined, background=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, config=Undefined, datasets=Undefined, description=Undefined, name=Undefined, padding=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, **kwds): super(TopLevelFacetSpec, self).__init__(data=data, facet=facet, spec=spec, align=align, autosize=autosize, background=background, bounds=bounds, center=center, columns=columns, config=config, datasets=datasets, description=description, name=name, padding=padding, resolve=resolve, spacing=spacing, title=title, transform=transform, usermeta=usermeta, **kwds) class TopLevelLayerSpec(TopLevelSpec): """TopLevelLayerSpec schema wrapper Mapping(required=[layer]) Attributes ---------- layer : List(anyOf(:class:`LayerSpec`, :class:`UnitSpec`)) Layer or single view specifications to be layered. **Note** : Specifications inside ``layer`` cannot use ``row`` and ``column`` channels as layering facet specifications is not allowed. Instead, use the `facet operator `__ and place a layer inside a facet. autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`) How the visualization size should be determined. If a string, should be one of ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify parameters for content sizing and automatic resizing. **Default value** : ``pad`` background : :class:`Color` CSS color property to use as the background of the entire view. **Default value:** ``"white"`` config : :class:`Config` Vega-Lite configuration object. This property can only be defined at the top-level of a specification. data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. datasets : :class:`Datasets` A global data store for named datasets. This is a mapping from names to inline datasets. This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a ``data`` property. description : string Description of this mark for commenting purpose. encoding : :class:`Encoding` A shared key-value mapping between encoding channels and definition of fields in the underlying layers. height : anyOf(float, enum('container'), :class:`Step`) The height of a visualization. * For a plot with a continuous y-field, height should be a number. * For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of ``{step: number}`` defining the height per discrete step. (No y-field is equivalent to having one discrete step.) * To enable responsive sizing on height, it should be set to ``"container"``. **Default value:** Based on ``config.view.continuousHeight`` for a plot with a continuous y-field and ``config.view.discreteHeight`` otherwise. **Note:** For plots with `row and column channels `__, this represents the height of a single view and the ``"container"`` option cannot be used. **See also:** `height `__ documentation. name : string Name of the visualization for later reference. padding : :class:`Padding` The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5, "bottom": 5}`` to specify padding for each side of the visualization. **Default value** : ``5`` projection : :class:`Projection` An object defining properties of the geographic projection shared by underlying layers. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. usermeta : Mapping(required=[]) Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata. view : :class:`ViewBackground` An object defining the view background's fill and stroke. **Default value:** none (transparent) width : anyOf(float, enum('container'), :class:`Step`) The width of a visualization. * For a plot with a continuous x-field, width should be a number. * For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of ``{step: number}`` defining the width per discrete step. (No x-field is equivalent to having one discrete step.) * To enable responsive sizing on width, it should be set to ``"container"``. **Default value:** Based on ``config.view.continuousWidth`` for a plot with a continuous x-field and ``config.view.discreteWidth`` otherwise. **Note:** For plots with `row and column channels `__, this represents the width of a single view and the ``"container"`` option cannot be used. **See also:** `width `__ documentation. $schema : string URL to `JSON schema `__ for a Vega-Lite specification. Unless you have a reason to change this, use ``https://vega.github.io/schema/vega-lite/v4.json``. Setting the ``$schema`` property allows automatic validation and autocomplete in editors that support JSON schema. """ _schema = {'$ref': '#/definitions/TopLevelLayerSpec'} def __init__(self, layer=Undefined, autosize=Undefined, background=Undefined, config=Undefined, data=Undefined, datasets=Undefined, description=Undefined, encoding=Undefined, height=Undefined, name=Undefined, padding=Undefined, projection=Undefined, resolve=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, view=Undefined, width=Undefined, **kwds): super(TopLevelLayerSpec, self).__init__(layer=layer, autosize=autosize, background=background, config=config, data=data, datasets=datasets, description=description, encoding=encoding, height=height, name=name, padding=padding, projection=projection, resolve=resolve, title=title, transform=transform, usermeta=usermeta, view=view, width=width, **kwds) class TopLevelNormalizedConcatSpecGenericSpec(TopLevelSpec): """TopLevelNormalizedConcatSpecGenericSpec schema wrapper Mapping(required=[concat]) Attributes ---------- concat : List(:class:`NormalizedSpec`) A list of views to be concatenated. align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`) The alignment to apply to grid rows and columns. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. Alternatively, an object value of the form ``{"row": string, "column": string}`` can be used to supply different alignments for rows and columns. **Default value:** ``"all"``. autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`) How the visualization size should be determined. If a string, should be one of ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify parameters for content sizing and automatic resizing. **Default value** : ``pad`` background : :class:`Color` CSS color property to use as the background of the entire view. **Default value:** ``"white"`` bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : anyOf(boolean, :class:`RowColboolean`) Boolean flag indicating if subviews should be centered relative to their respective rows or columns. An object value of the form ``{"row": boolean, "column": boolean}`` can be used to supply different centering values for rows and columns. **Default value:** ``false`` columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). config : :class:`Config` Vega-Lite configuration object. This property can only be defined at the top-level of a specification. data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. datasets : :class:`Datasets` A global data store for named datasets. This is a mapping from names to inline datasets. This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a ``data`` property. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. padding : :class:`Padding` The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5, "bottom": 5}`` to specify padding for each side of the visualization. **Default value** : ``5`` resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : anyOf(float, :class:`RowColnumber`) The spacing in pixels between sub-views of the composition operator. An object of the form ``{"row": number, "column": number}`` can be used to set different spacing values for rows and columns. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. usermeta : Mapping(required=[]) Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata. $schema : string URL to `JSON schema `__ for a Vega-Lite specification. Unless you have a reason to change this, use ``https://vega.github.io/schema/vega-lite/v4.json``. Setting the ``$schema`` property allows automatic validation and autocomplete in editors that support JSON schema. """ _schema = {'$ref': '#/definitions/TopLevelNormalizedConcatSpec'} def __init__(self, concat=Undefined, align=Undefined, autosize=Undefined, background=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, config=Undefined, data=Undefined, datasets=Undefined, description=Undefined, name=Undefined, padding=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, **kwds): super(TopLevelNormalizedConcatSpecGenericSpec, self).__init__(concat=concat, align=align, autosize=autosize, background=background, bounds=bounds, center=center, columns=columns, config=config, data=data, datasets=datasets, description=description, name=name, padding=padding, resolve=resolve, spacing=spacing, title=title, transform=transform, usermeta=usermeta, **kwds) class TopLevelNormalizedHConcatSpecGenericSpec(TopLevelSpec): """TopLevelNormalizedHConcatSpecGenericSpec schema wrapper Mapping(required=[hconcat]) Attributes ---------- hconcat : List(:class:`NormalizedSpec`) A list of views to be concatenated and put into a row. autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`) How the visualization size should be determined. If a string, should be one of ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify parameters for content sizing and automatic resizing. **Default value** : ``pad`` background : :class:`Color` CSS color property to use as the background of the entire view. **Default value:** ``"white"`` bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : boolean Boolean flag indicating if subviews should be centered relative to their respective rows or columns. **Default value:** ``false`` config : :class:`Config` Vega-Lite configuration object. This property can only be defined at the top-level of a specification. data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. datasets : :class:`Datasets` A global data store for named datasets. This is a mapping from names to inline datasets. This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a ``data`` property. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. padding : :class:`Padding` The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5, "bottom": 5}`` to specify padding for each side of the visualization. **Default value** : ``5`` resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : float The spacing in pixels between sub-views of the concat operator. **Default value** : ``10`` title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. usermeta : Mapping(required=[]) Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata. $schema : string URL to `JSON schema `__ for a Vega-Lite specification. Unless you have a reason to change this, use ``https://vega.github.io/schema/vega-lite/v4.json``. Setting the ``$schema`` property allows automatic validation and autocomplete in editors that support JSON schema. """ _schema = {'$ref': '#/definitions/TopLevelNormalizedHConcatSpec'} def __init__(self, hconcat=Undefined, autosize=Undefined, background=Undefined, bounds=Undefined, center=Undefined, config=Undefined, data=Undefined, datasets=Undefined, description=Undefined, name=Undefined, padding=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, **kwds): super(TopLevelNormalizedHConcatSpecGenericSpec, self).__init__(hconcat=hconcat, autosize=autosize, background=background, bounds=bounds, center=center, config=config, data=data, datasets=datasets, description=description, name=name, padding=padding, resolve=resolve, spacing=spacing, title=title, transform=transform, usermeta=usermeta, **kwds) class TopLevelNormalizedVConcatSpecGenericSpec(TopLevelSpec): """TopLevelNormalizedVConcatSpecGenericSpec schema wrapper Mapping(required=[vconcat]) Attributes ---------- vconcat : List(:class:`NormalizedSpec`) A list of views to be concatenated and put into a column. autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`) How the visualization size should be determined. If a string, should be one of ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify parameters for content sizing and automatic resizing. **Default value** : ``pad`` background : :class:`Color` CSS color property to use as the background of the entire view. **Default value:** ``"white"`` bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : boolean Boolean flag indicating if subviews should be centered relative to their respective rows or columns. **Default value:** ``false`` config : :class:`Config` Vega-Lite configuration object. This property can only be defined at the top-level of a specification. data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. datasets : :class:`Datasets` A global data store for named datasets. This is a mapping from names to inline datasets. This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a ``data`` property. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. padding : :class:`Padding` The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5, "bottom": 5}`` to specify padding for each side of the visualization. **Default value** : ``5`` resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : float The spacing in pixels between sub-views of the concat operator. **Default value** : ``10`` title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. usermeta : Mapping(required=[]) Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata. $schema : string URL to `JSON schema `__ for a Vega-Lite specification. Unless you have a reason to change this, use ``https://vega.github.io/schema/vega-lite/v4.json``. Setting the ``$schema`` property allows automatic validation and autocomplete in editors that support JSON schema. """ _schema = {'$ref': '#/definitions/TopLevelNormalizedVConcatSpec'} def __init__(self, vconcat=Undefined, autosize=Undefined, background=Undefined, bounds=Undefined, center=Undefined, config=Undefined, data=Undefined, datasets=Undefined, description=Undefined, name=Undefined, padding=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, **kwds): super(TopLevelNormalizedVConcatSpecGenericSpec, self).__init__(vconcat=vconcat, autosize=autosize, background=background, bounds=bounds, center=center, config=config, data=data, datasets=datasets, description=description, name=name, padding=padding, resolve=resolve, spacing=spacing, title=title, transform=transform, usermeta=usermeta, **kwds) class TopLevelRepeatSpec(TopLevelSpec): """TopLevelRepeatSpec schema wrapper Mapping(required=[repeat, spec]) Attributes ---------- repeat : anyOf(List(string), :class:`RepeatMapping`) Definition for fields to be repeated. One of: 1) An array of fields to be repeated. If ``"repeat"`` is an array, the field can be referred to as ``{"repeat": "repeat"}``. The repeated views are laid out in a wrapped row. You can set the number of columns to control the wrapping. 2) An object that maps ``"row"`` and/or ``"column"`` to the listed fields to be repeated along the particular orientations. The objects ``{"repeat": "row"}`` and ``{"repeat": "column"}`` can be used to refer to the repeated field respectively. spec : :class:`Spec` A specification of the view that gets repeated. align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`) The alignment to apply to grid rows and columns. The supported string values are ``"all"``, ``"each"``, and ``"none"``. * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply placed one after the other. * For ``"each"``, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. * For ``"all"``, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns. Alternatively, an object value of the form ``{"row": string, "column": string}`` can be used to supply different alignments for rows and columns. **Default value:** ``"all"``. autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`) How the visualization size should be determined. If a string, should be one of ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify parameters for content sizing and automatic resizing. **Default value** : ``pad`` background : :class:`Color` CSS color property to use as the background of the entire view. **Default value:** ``"white"`` bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : anyOf(boolean, :class:`RowColboolean`) Boolean flag indicating if subviews should be centered relative to their respective rows or columns. An object value of the form ``{"row": boolean, "column": boolean}`` can be used to supply different centering values for rows and columns. **Default value:** ``false`` columns : float The number of columns to include in the view composition layout. **Default value** : ``undefined`` -- An infinite number of columns (a single row) will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and ``repeat`` ). **Note** : 1) This property is only for: * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` ) * the ``facet`` and ``repeat`` operator with one field/repetition definition (without row/column nesting) 2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` ) and to using the ``row`` channel (for ``facet`` and ``repeat`` ). config : :class:`Config` Vega-Lite configuration object. This property can only be defined at the top-level of a specification. data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. datasets : :class:`Datasets` A global data store for named datasets. This is a mapping from names to inline datasets. This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a ``data`` property. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. padding : :class:`Padding` The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5, "bottom": 5}`` to specify padding for each side of the visualization. **Default value** : ``5`` resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : anyOf(float, :class:`RowColnumber`) The spacing in pixels between sub-views of the composition operator. An object of the form ``{"row": number, "column": number}`` can be used to set different spacing values for rows and columns. **Default value** : Depends on ``"spacing"`` property of `the view composition configuration `__ ( ``20`` by default) title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. usermeta : Mapping(required=[]) Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata. $schema : string URL to `JSON schema `__ for a Vega-Lite specification. Unless you have a reason to change this, use ``https://vega.github.io/schema/vega-lite/v4.json``. Setting the ``$schema`` property allows automatic validation and autocomplete in editors that support JSON schema. """ _schema = {'$ref': '#/definitions/TopLevelRepeatSpec'} def __init__(self, repeat=Undefined, spec=Undefined, align=Undefined, autosize=Undefined, background=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, config=Undefined, data=Undefined, datasets=Undefined, description=Undefined, name=Undefined, padding=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, **kwds): super(TopLevelRepeatSpec, self).__init__(repeat=repeat, spec=spec, align=align, autosize=autosize, background=background, bounds=bounds, center=center, columns=columns, config=config, data=data, datasets=datasets, description=description, name=name, padding=padding, resolve=resolve, spacing=spacing, title=title, transform=transform, usermeta=usermeta, **kwds) class TopLevelUnitSpec(TopLevelSpec): """TopLevelUnitSpec schema wrapper Mapping(required=[data, mark]) Attributes ---------- data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. mark : :class:`AnyMark` A string describing the mark type (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"rule"``, ``"geoshape"``, and ``"text"`` ) or a `mark definition object `__. autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`) How the visualization size should be determined. If a string, should be one of ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify parameters for content sizing and automatic resizing. **Default value** : ``pad`` background : :class:`Color` CSS color property to use as the background of the entire view. **Default value:** ``"white"`` bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` config : :class:`Config` Vega-Lite configuration object. This property can only be defined at the top-level of a specification. datasets : :class:`Datasets` A global data store for named datasets. This is a mapping from names to inline datasets. This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a ``data`` property. description : string Description of this mark for commenting purpose. encoding : :class:`FacetedEncoding` A key-value mapping between encoding channels and definition of fields. height : anyOf(float, enum('container'), :class:`Step`) The height of a visualization. * For a plot with a continuous y-field, height should be a number. * For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of ``{step: number}`` defining the height per discrete step. (No y-field is equivalent to having one discrete step.) * To enable responsive sizing on height, it should be set to ``"container"``. **Default value:** Based on ``config.view.continuousHeight`` for a plot with a continuous y-field and ``config.view.discreteHeight`` otherwise. **Note:** For plots with `row and column channels `__, this represents the height of a single view and the ``"container"`` option cannot be used. **See also:** `height `__ documentation. name : string Name of the visualization for later reference. padding : :class:`Padding` The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5, "bottom": 5}`` to specify padding for each side of the visualization. **Default value** : ``5`` projection : :class:`Projection` An object defining properties of geographic projection, which will be applied to ``shape`` path for ``"geoshape"`` marks and to ``latitude`` and ``"longitude"`` channels for other marks. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. selection : Mapping(required=[]) A key-value mapping between selection names and definitions. title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. usermeta : Mapping(required=[]) Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata. view : :class:`ViewBackground` An object defining the view background's fill and stroke. **Default value:** none (transparent) width : anyOf(float, enum('container'), :class:`Step`) The width of a visualization. * For a plot with a continuous x-field, width should be a number. * For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of ``{step: number}`` defining the width per discrete step. (No x-field is equivalent to having one discrete step.) * To enable responsive sizing on width, it should be set to ``"container"``. **Default value:** Based on ``config.view.continuousWidth`` for a plot with a continuous x-field and ``config.view.discreteWidth`` otherwise. **Note:** For plots with `row and column channels `__, this represents the width of a single view and the ``"container"`` option cannot be used. **See also:** `width `__ documentation. $schema : string URL to `JSON schema `__ for a Vega-Lite specification. Unless you have a reason to change this, use ``https://vega.github.io/schema/vega-lite/v4.json``. Setting the ``$schema`` property allows automatic validation and autocomplete in editors that support JSON schema. """ _schema = {'$ref': '#/definitions/TopLevelUnitSpec'} def __init__(self, data=Undefined, mark=Undefined, autosize=Undefined, background=Undefined, bounds=Undefined, config=Undefined, datasets=Undefined, description=Undefined, encoding=Undefined, height=Undefined, name=Undefined, padding=Undefined, projection=Undefined, resolve=Undefined, selection=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, view=Undefined, width=Undefined, **kwds): super(TopLevelUnitSpec, self).__init__(data=data, mark=mark, autosize=autosize, background=background, bounds=bounds, config=config, datasets=datasets, description=description, encoding=encoding, height=height, name=name, padding=padding, projection=projection, resolve=resolve, selection=selection, title=title, transform=transform, usermeta=usermeta, view=view, width=width, **kwds) class TopoDataFormat(DataFormat): """TopoDataFormat schema wrapper Mapping(required=[]) Attributes ---------- feature : string The name of the TopoJSON object set to convert to a GeoJSON feature collection. For example, in a map of the world, there may be an object set named ``"countries"``. Using the feature property, we can extract this set and generate a GeoJSON feature object for each country. mesh : string The name of the TopoJSON object set to convert to mesh. Similar to the ``feature`` option, ``mesh`` extracts a named TopoJSON object set. Unlike the ``feature`` option, the corresponding geo data is returned as a single, unified mesh instance, not as individual GeoJSON features. Extracting a mesh is useful for more efficiently drawing borders or other geographic elements that you do not need to associate with specific regions such as individual countries, states or counties. parse : anyOf(:class:`Parse`, None) If set to ``null``, disable type inference based on the spec and only use type inference based on the data. Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of ``"number"``, ``"boolean"``, ``"date"``, or null (do not parse the field)). For example, ``"parse": {"modified_on": "date"}`` parses the ``modified_on`` field in each input record a Date value. For ``"date"``, we parse data based using Javascript's `Date.parse() `__. For Specific date formats can be provided (e.g., ``{foo: "date:'%m%d%Y'"}`` ), using the `d3-time-format syntax `__. UTC date format parsing is supported similarly (e.g., ``{foo: "utc:'%m%d%Y'"}`` ). See more about `UTC time `__ type : enum('topojson') Type of input data: ``"json"``, ``"csv"``, ``"tsv"``, ``"dsv"``. **Default value:** The default format type is determined by the extension of the file URL. If no extension is detected, ``"json"`` will be used by default. """ _schema = {'$ref': '#/definitions/TopoDataFormat'} def __init__(self, feature=Undefined, mesh=Undefined, parse=Undefined, type=Undefined, **kwds): super(TopoDataFormat, self).__init__(feature=feature, mesh=mesh, parse=parse, type=type, **kwds) class Transform(VegaLiteSchema): """Transform schema wrapper anyOf(:class:`AggregateTransform`, :class:`BinTransform`, :class:`CalculateTransform`, :class:`DensityTransform`, :class:`FilterTransform`, :class:`FlattenTransform`, :class:`FoldTransform`, :class:`ImputeTransform`, :class:`JoinAggregateTransform`, :class:`LoessTransform`, :class:`LookupTransform`, :class:`QuantileTransform`, :class:`RegressionTransform`, :class:`TimeUnitTransform`, :class:`SampleTransform`, :class:`StackTransform`, :class:`WindowTransform`, :class:`PivotTransform`) """ _schema = {'$ref': '#/definitions/Transform'} def __init__(self, *args, **kwds): super(Transform, self).__init__(*args, **kwds) class AggregateTransform(Transform): """AggregateTransform schema wrapper Mapping(required=[aggregate]) Attributes ---------- aggregate : List(:class:`AggregatedFieldDef`) Array of objects that define fields to aggregate. groupby : List(:class:`FieldName`) The data fields to group by. If not specified, a single group containing all data objects will be used. """ _schema = {'$ref': '#/definitions/AggregateTransform'} def __init__(self, aggregate=Undefined, groupby=Undefined, **kwds): super(AggregateTransform, self).__init__(aggregate=aggregate, groupby=groupby, **kwds) class BinTransform(Transform): """BinTransform schema wrapper Mapping(required=[bin, field, as]) Attributes ---------- bin : anyOf(enum(True), :class:`BinParams`) An object indicating bin properties, or simply ``true`` for using default bin parameters. field : :class:`FieldName` The data field to bin. as : anyOf(:class:`FieldName`, List(:class:`FieldName`)) The output fields at which to write the start and end bin values. This can be either a string or an array of strings with two elements denoting the name for the fields for bin start and bin end respectively. If a single string (e.g., ``"val"`` ) is provided, the end field will be ``"val_end"``. """ _schema = {'$ref': '#/definitions/BinTransform'} def __init__(self, bin=Undefined, field=Undefined, **kwds): super(BinTransform, self).__init__(bin=bin, field=field, **kwds) class CalculateTransform(Transform): """CalculateTransform schema wrapper Mapping(required=[calculate, as]) Attributes ---------- calculate : string A `expression `__ string. Use the variable ``datum`` to refer to the current data object. as : :class:`FieldName` The field for storing the computed formula value. """ _schema = {'$ref': '#/definitions/CalculateTransform'} def __init__(self, calculate=Undefined, **kwds): super(CalculateTransform, self).__init__(calculate=calculate, **kwds) class DensityTransform(Transform): """DensityTransform schema wrapper Mapping(required=[density]) Attributes ---------- density : :class:`FieldName` The data field for which to perform density estimation. bandwidth : float The bandwidth (standard deviation) of the Gaussian kernel. If unspecified or set to zero, the bandwidth value is automatically estimated from the input data using Scott’s rule. counts : boolean A boolean flag indicating if the output values should be probability estimates (false) or smoothed counts (true). **Default value:** ``false`` cumulative : boolean A boolean flag indicating whether to produce density estimates (false) or cumulative density estimates (true). **Default value:** ``false`` extent : List([float, float]) A [min, max] domain from which to sample the distribution. If unspecified, the extent will be determined by the observed minimum and maximum values of the density value field. groupby : List(:class:`FieldName`) The data fields to group by. If not specified, a single group containing all data objects will be used. maxsteps : float The maximum number of samples to take along the extent domain for plotting the density. **Default value:** ``200`` minsteps : float The minimum number of samples to take along the extent domain for plotting the density. **Default value:** ``25`` steps : float The exact number of samples to take along the extent domain for plotting the density. If specified, overrides both minsteps and maxsteps to set an exact number of uniform samples. Potentially useful in conjunction with a fixed extent to ensure consistent sample points for stacked densities. as : List([:class:`FieldName`, :class:`FieldName`]) The output fields for the sample value and corresponding density estimate. **Default value:** ``["value", "density"]`` """ _schema = {'$ref': '#/definitions/DensityTransform'} def __init__(self, density=Undefined, bandwidth=Undefined, counts=Undefined, cumulative=Undefined, extent=Undefined, groupby=Undefined, maxsteps=Undefined, minsteps=Undefined, steps=Undefined, **kwds): super(DensityTransform, self).__init__(density=density, bandwidth=bandwidth, counts=counts, cumulative=cumulative, extent=extent, groupby=groupby, maxsteps=maxsteps, minsteps=minsteps, steps=steps, **kwds) class FilterTransform(Transform): """FilterTransform schema wrapper Mapping(required=[filter]) Attributes ---------- filter : :class:`PredicateComposition` The ``filter`` property must be a predication definition, which can takes one of the following forms: 1) an `expression `__ string, where ``datum`` can be used to refer to the current data object. For example, ``{filter: "datum.b2 > 60"}`` would make the output data includes only items that have values in the field ``b2`` over 60. 2) one of the `field predicates `__ : `equal `__, `lt `__, `lte `__, `gt `__, `gte `__, `range `__, `oneOf `__, or `valid `__, 3) a `selection predicate `__, which define the names of a selection that the data point should belong to (or a logical composition of selections). 4) a `logical composition `__ of (1), (2), or (3). """ _schema = {'$ref': '#/definitions/FilterTransform'} def __init__(self, filter=Undefined, **kwds): super(FilterTransform, self).__init__(filter=filter, **kwds) class FlattenTransform(Transform): """FlattenTransform schema wrapper Mapping(required=[flatten]) Attributes ---------- flatten : List(:class:`FieldName`) An array of one or more data fields containing arrays to flatten. If multiple fields are specified, their array values should have a parallel structure, ideally with the same length. If the lengths of parallel arrays do not match, the longest array will be used with ``null`` values added for missing entries. as : List(:class:`FieldName`) The output field names for extracted array values. **Default value:** The field name of the corresponding array field """ _schema = {'$ref': '#/definitions/FlattenTransform'} def __init__(self, flatten=Undefined, **kwds): super(FlattenTransform, self).__init__(flatten=flatten, **kwds) class FoldTransform(Transform): """FoldTransform schema wrapper Mapping(required=[fold]) Attributes ---------- fold : List(:class:`FieldName`) An array of data fields indicating the properties to fold. as : List([:class:`FieldName`, :class:`FieldName`]) The output field names for the key and value properties produced by the fold transform. **Default value:** ``["key", "value"]`` """ _schema = {'$ref': '#/definitions/FoldTransform'} def __init__(self, fold=Undefined, **kwds): super(FoldTransform, self).__init__(fold=fold, **kwds) class ImputeTransform(Transform): """ImputeTransform schema wrapper Mapping(required=[impute, key]) Attributes ---------- impute : :class:`FieldName` The data field for which the missing values should be imputed. key : :class:`FieldName` A key field that uniquely identifies data objects within a group. Missing key values (those occurring in the data but not in the current group) will be imputed. frame : List([anyOf(None, float), anyOf(None, float)]) A frame specification as a two-element array used to control the window over which the specified method is applied. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. For example, the value ``[-5, 5]`` indicates that the window should include five objects preceding and five objects following the current object. **Default value:** : ``[null, null]`` indicating that the window includes all objects. groupby : List(:class:`FieldName`) An optional array of fields by which to group the values. Imputation will then be performed on a per-group basis. keyvals : anyOf(List(Any), :class:`ImputeSequence`) Defines the key values that should be considered for imputation. An array of key values or an object defining a `number sequence `__. If provided, this will be used in addition to the key values observed within the input data. If not provided, the values will be derived from all unique values of the ``key`` field. For ``impute`` in ``encoding``, the key field is the x-field if the y-field is imputed, or vice versa. If there is no impute grouping, this property *must* be specified. method : :class:`ImputeMethod` The imputation method to use for the field value of imputed data objects. One of ``"value"``, ``"mean"``, ``"median"``, ``"max"`` or ``"min"``. **Default value:** ``"value"`` value : Any The field value to use when the imputation ``method`` is ``"value"``. """ _schema = {'$ref': '#/definitions/ImputeTransform'} def __init__(self, impute=Undefined, key=Undefined, frame=Undefined, groupby=Undefined, keyvals=Undefined, method=Undefined, value=Undefined, **kwds): super(ImputeTransform, self).__init__(impute=impute, key=key, frame=frame, groupby=groupby, keyvals=keyvals, method=method, value=value, **kwds) class JoinAggregateTransform(Transform): """JoinAggregateTransform schema wrapper Mapping(required=[joinaggregate]) Attributes ---------- joinaggregate : List(:class:`JoinAggregateFieldDef`) The definition of the fields in the join aggregate, and what calculations to use. groupby : List(:class:`FieldName`) The data fields for partitioning the data objects into separate groups. If unspecified, all data points will be in a single group. """ _schema = {'$ref': '#/definitions/JoinAggregateTransform'} def __init__(self, joinaggregate=Undefined, groupby=Undefined, **kwds): super(JoinAggregateTransform, self).__init__(joinaggregate=joinaggregate, groupby=groupby, **kwds) class LoessTransform(Transform): """LoessTransform schema wrapper Mapping(required=[loess, on]) Attributes ---------- loess : :class:`FieldName` The data field of the dependent variable to smooth. on : :class:`FieldName` The data field of the independent variable to use a predictor. bandwidth : float A bandwidth parameter in the range ``[0, 1]`` that determines the amount of smoothing. **Default value:** ``0.3`` groupby : List(:class:`FieldName`) The data fields to group by. If not specified, a single group containing all data objects will be used. as : List([:class:`FieldName`, :class:`FieldName`]) The output field names for the smoothed points generated by the loess transform. **Default value:** The field names of the input x and y values. """ _schema = {'$ref': '#/definitions/LoessTransform'} def __init__(self, loess=Undefined, on=Undefined, bandwidth=Undefined, groupby=Undefined, **kwds): super(LoessTransform, self).__init__(loess=loess, on=on, bandwidth=bandwidth, groupby=groupby, **kwds) class LookupTransform(Transform): """LookupTransform schema wrapper Mapping(required=[lookup, from]) Attributes ---------- lookup : string Key in primary data source. default : string The default value to use if lookup fails. **Default value:** ``null`` as : anyOf(:class:`FieldName`, List(:class:`FieldName`)) The output fields on which to store the looked up data values. For data lookups, this property may be left blank if ``from.fields`` has been specified (those field names will be used); if ``from.fields`` has not been specified, ``as`` must be a string. For selection lookups, this property is optional: if unspecified, looked up values will be stored under a property named for the selection; and if specified, it must correspond to ``from.fields``. from : anyOf(:class:`LookupData`, :class:`LookupSelection`) Data source or selection for secondary data reference. """ _schema = {'$ref': '#/definitions/LookupTransform'} def __init__(self, lookup=Undefined, default=Undefined, **kwds): super(LookupTransform, self).__init__(lookup=lookup, default=default, **kwds) class PivotTransform(Transform): """PivotTransform schema wrapper Mapping(required=[pivot, value]) Attributes ---------- pivot : :class:`FieldName` The data field to pivot on. The unique values of this field become new field names in the output stream. value : :class:`FieldName` The data field to populate pivoted fields. The aggregate values of this field become the values of the new pivoted fields. groupby : List(:class:`FieldName`) The optional data fields to group by. If not specified, a single group containing all data objects will be used. limit : float An optional parameter indicating the maximum number of pivoted fields to generate. The default ( ``0`` ) applies no limit. The pivoted ``pivot`` names are sorted in ascending order prior to enforcing the limit. **Default value:** ``0`` op : string The aggregation operation to apply to grouped ``value`` field values. **Default value:** ``sum`` """ _schema = {'$ref': '#/definitions/PivotTransform'} def __init__(self, pivot=Undefined, value=Undefined, groupby=Undefined, limit=Undefined, op=Undefined, **kwds): super(PivotTransform, self).__init__(pivot=pivot, value=value, groupby=groupby, limit=limit, op=op, **kwds) class QuantileTransform(Transform): """QuantileTransform schema wrapper Mapping(required=[quantile]) Attributes ---------- quantile : :class:`FieldName` The data field for which to perform quantile estimation. groupby : List(:class:`FieldName`) The data fields to group by. If not specified, a single group containing all data objects will be used. probs : List(float) An array of probabilities in the range (0, 1) for which to compute quantile values. If not specified, the *step* parameter will be used. step : float A probability step size (default 0.01) for sampling quantile values. All values from one-half the step size up to 1 (exclusive) will be sampled. This parameter is only used if the *probs* parameter is not provided. as : List([:class:`FieldName`, :class:`FieldName`]) The output field names for the probability and quantile values. **Default value:** ``["prob", "value"]`` """ _schema = {'$ref': '#/definitions/QuantileTransform'} def __init__(self, quantile=Undefined, groupby=Undefined, probs=Undefined, step=Undefined, **kwds): super(QuantileTransform, self).__init__(quantile=quantile, groupby=groupby, probs=probs, step=step, **kwds) class RegressionTransform(Transform): """RegressionTransform schema wrapper Mapping(required=[regression, on]) Attributes ---------- on : :class:`FieldName` The data field of the independent variable to use a predictor. regression : :class:`FieldName` The data field of the dependent variable to predict. extent : List([float, float]) A [min, max] domain over the independent (x) field for the starting and ending points of the generated trend line. groupby : List(:class:`FieldName`) The data fields to group by. If not specified, a single group containing all data objects will be used. method : enum('linear', 'log', 'exp', 'pow', 'quad', 'poly') The functional form of the regression model. One of ``"linear"``, ``"log"``, ``"exp"``, ``"pow"``, ``"quad"``, or ``"poly"``. **Default value:** ``"linear"`` order : float The polynomial order (number of coefficients) for the 'poly' method. **Default value:** ``3`` params : boolean A boolean flag indicating if the transform should return the regression model parameters (one object per group), rather than trend line points. The resulting objects include a ``coef`` array of fitted coefficient values (starting with the intercept term and then including terms of increasing order) and an ``rSquared`` value (indicating the total variance explained by the model). **Default value:** ``false`` as : List([:class:`FieldName`, :class:`FieldName`]) The output field names for the smoothed points generated by the regression transform. **Default value:** The field names of the input x and y values. """ _schema = {'$ref': '#/definitions/RegressionTransform'} def __init__(self, on=Undefined, regression=Undefined, extent=Undefined, groupby=Undefined, method=Undefined, order=Undefined, params=Undefined, **kwds): super(RegressionTransform, self).__init__(on=on, regression=regression, extent=extent, groupby=groupby, method=method, order=order, params=params, **kwds) class SampleTransform(Transform): """SampleTransform schema wrapper Mapping(required=[sample]) Attributes ---------- sample : float The maximum number of data objects to include in the sample. **Default value:** ``1000`` """ _schema = {'$ref': '#/definitions/SampleTransform'} def __init__(self, sample=Undefined, **kwds): super(SampleTransform, self).__init__(sample=sample, **kwds) class StackTransform(Transform): """StackTransform schema wrapper Mapping(required=[stack, groupby, as]) Attributes ---------- groupby : List(:class:`FieldName`) The data fields to group by. stack : :class:`FieldName` The field which is stacked. offset : enum('zero', 'center', 'normalize') Mode for stacking marks. One of ``"zero"`` (default), ``"center"``, or ``"normalize"``. The ``"zero"`` offset will stack starting at ``0``. The ``"center"`` offset will center the stacks. The ``"normalize"`` offset will compute percentage values for each stack point, with output values in the range ``[0,1]``. **Default value:** ``"zero"`` sort : List(:class:`SortField`) Field that determines the order of leaves in the stacked charts. as : anyOf(:class:`FieldName`, List([:class:`FieldName`, :class:`FieldName`])) Output field names. This can be either a string or an array of strings with two elements denoting the name for the fields for stack start and stack end respectively. If a single string(e.g., ``"val"`` ) is provided, the end field will be ``"val_end"``. """ _schema = {'$ref': '#/definitions/StackTransform'} def __init__(self, groupby=Undefined, stack=Undefined, offset=Undefined, sort=Undefined, **kwds): super(StackTransform, self).__init__(groupby=groupby, stack=stack, offset=offset, sort=sort, **kwds) class TimeUnitTransform(Transform): """TimeUnitTransform schema wrapper Mapping(required=[timeUnit, field, as]) Attributes ---------- field : :class:`FieldName` The data field to apply time unit. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) The timeUnit. as : :class:`FieldName` The output field to write the timeUnit value. """ _schema = {'$ref': '#/definitions/TimeUnitTransform'} def __init__(self, field=Undefined, timeUnit=Undefined, **kwds): super(TimeUnitTransform, self).__init__(field=field, timeUnit=timeUnit, **kwds) class TypeForShape(VegaLiteSchema): """TypeForShape schema wrapper enum('nominal', 'ordinal', 'geojson') """ _schema = {'$ref': '#/definitions/TypeForShape'} def __init__(self, *args): super(TypeForShape, self).__init__(*args) class TypedFieldDef(VegaLiteSchema): """TypedFieldDef schema wrapper Mapping(required=[type]) Definition object for a data field, its type and transformation of an encoding channel. Attributes ---------- type : :class:`StandardType` The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or ``"nominal"`` ). It can also be a ``"geojson"`` type for encoding `'geoshape' `__. **Note:** * Data values for a temporal field can be either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). * Data ``type`` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. * When using with `bin `__, the ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or `"ordinal" (for using an ordinal bin scale) `__. * When using with `timeUnit `__, the ``type`` property can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using an ordinal scale) `__. * When using with `aggregate `__, the ``type`` property refers to the post-aggregation data type. For example, we can calculate count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct", "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output is ``"quantitative"``. * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have ``type`` as they have exactly the same type as their primary channels (e.g., ``x``, ``y`` ). **See also:** `type `__ documentation. aggregate : :class:`Aggregate` Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``, ``"min"``, ``"max"``, ``"count"`` ). **Default value:** ``undefined`` (None) **See also:** `aggregate `__ documentation. bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None) A flag for binning a ``quantitative`` field, `an object defining binning parameters `__, or indicating that the data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite ( ``"binned"`` ). If ``true``, default `binning parameters `__ will be applied. If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's `tickMinStep `__ property. **Default value:** ``false`` **See also:** `bin `__ documentation. field : :class:`Field` **Required.** A string defining the name of the field from which to pull a data value or an object defining iterated values from the `repeat `__ operator. **See also:** `field `__ documentation. **Notes:** 1) Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If field names contain dots or brackets but are not nested, you can use ``\\`` to escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details about escaping in the `field documentation `__. 2) ``field`` is not required if ``aggregate`` is ``count``. timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`) Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal field. or `a temporal field that gets casted as ordinal `__. **Default value:** ``undefined`` (None) **See also:** `timeUnit `__ documentation. title : anyOf(:class:`Text`, None) A title for the field. If ``null``, the title will be removed. **Default value:** derived from the field's name and transformation function ( ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function, the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ). Otherwise, the title is simply the field name. **Notes** : 1) You can customize the default field title format by providing the `fieldTitle `__ property in the `config `__ or `fieldTitle function via the compile function's options `__. 2) If both field definition's ``title`` and axis, header, or legend ``title`` are defined, axis/header/legend title will be used. """ _schema = {'$ref': '#/definitions/TypedFieldDef'} def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined, title=Undefined, **kwds): super(TypedFieldDef, self).__init__(type=type, aggregate=aggregate, bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds) class UnitSpec(VegaLiteSchema): """UnitSpec schema wrapper Mapping(required=[mark]) A unit specification, which can contain either `primitive marks or composite marks `__. Attributes ---------- mark : :class:`AnyMark` A string describing the mark type (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"rule"``, ``"geoshape"``, and ``"text"`` ) or a `mark definition object `__. data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. encoding : :class:`Encoding` A key-value mapping between encoding channels and definition of fields. height : anyOf(float, enum('container'), :class:`Step`) **Deprecated:** Please avoid using width in a unit spec that's a part of a layer spec. name : string Name of the visualization for later reference. projection : :class:`Projection` An object defining properties of geographic projection, which will be applied to ``shape`` path for ``"geoshape"`` marks and to ``latitude`` and ``"longitude"`` channels for other marks. selection : Mapping(required=[]) A key-value mapping between selection names and definitions. title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. view : :class:`ViewBackground` **Deprecated:** Please avoid using width in a unit spec that's a part of a layer spec. width : anyOf(float, enum('container'), :class:`Step`) **Deprecated:** Please avoid using width in a unit spec that's a part of a layer spec. """ _schema = {'$ref': '#/definitions/UnitSpec'} def __init__(self, mark=Undefined, data=Undefined, description=Undefined, encoding=Undefined, height=Undefined, name=Undefined, projection=Undefined, selection=Undefined, title=Undefined, transform=Undefined, view=Undefined, width=Undefined, **kwds): super(UnitSpec, self).__init__(mark=mark, data=data, description=description, encoding=encoding, height=height, name=name, projection=projection, selection=selection, title=title, transform=transform, view=view, width=width, **kwds) class UnitSpecWithFrame(VegaLiteSchema): """UnitSpecWithFrame schema wrapper Mapping(required=[mark]) Attributes ---------- mark : :class:`AnyMark` A string describing the mark type (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"rule"``, ``"geoshape"``, and ``"text"`` ) or a `mark definition object `__. data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. encoding : :class:`Encoding` A key-value mapping between encoding channels and definition of fields. height : anyOf(float, enum('container'), :class:`Step`) The height of a visualization. * For a plot with a continuous y-field, height should be a number. * For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of ``{step: number}`` defining the height per discrete step. (No y-field is equivalent to having one discrete step.) * To enable responsive sizing on height, it should be set to ``"container"``. **Default value:** Based on ``config.view.continuousHeight`` for a plot with a continuous y-field and ``config.view.discreteHeight`` otherwise. **Note:** For plots with `row and column channels `__, this represents the height of a single view and the ``"container"`` option cannot be used. **See also:** `height `__ documentation. name : string Name of the visualization for later reference. projection : :class:`Projection` An object defining properties of geographic projection, which will be applied to ``shape`` path for ``"geoshape"`` marks and to ``latitude`` and ``"longitude"`` channels for other marks. selection : Mapping(required=[]) A key-value mapping between selection names and definitions. title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. view : :class:`ViewBackground` An object defining the view background's fill and stroke. **Default value:** none (transparent) width : anyOf(float, enum('container'), :class:`Step`) The width of a visualization. * For a plot with a continuous x-field, width should be a number. * For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of ``{step: number}`` defining the width per discrete step. (No x-field is equivalent to having one discrete step.) * To enable responsive sizing on width, it should be set to ``"container"``. **Default value:** Based on ``config.view.continuousWidth`` for a plot with a continuous x-field and ``config.view.discreteWidth`` otherwise. **Note:** For plots with `row and column channels `__, this represents the width of a single view and the ``"container"`` option cannot be used. **See also:** `width `__ documentation. """ _schema = {'$ref': '#/definitions/UnitSpecWithFrame'} def __init__(self, mark=Undefined, data=Undefined, description=Undefined, encoding=Undefined, height=Undefined, name=Undefined, projection=Undefined, selection=Undefined, title=Undefined, transform=Undefined, view=Undefined, width=Undefined, **kwds): super(UnitSpecWithFrame, self).__init__(mark=mark, data=data, description=description, encoding=encoding, height=height, name=name, projection=projection, selection=selection, title=title, transform=transform, view=view, width=width, **kwds) class UrlData(DataSource): """UrlData schema wrapper Mapping(required=[url]) Attributes ---------- url : string An URL from which to load the data set. Use the ``format.type`` property to ensure the loaded data is correctly parsed. format : :class:`DataFormat` An object that specifies the format for parsing the data. name : string Provide a placeholder name and bind data at runtime. """ _schema = {'$ref': '#/definitions/UrlData'} def __init__(self, url=Undefined, format=Undefined, name=Undefined, **kwds): super(UrlData, self).__init__(url=url, format=format, name=name, **kwds) class UtcMultiTimeUnit(MultiTimeUnit): """UtcMultiTimeUnit schema wrapper enum('utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds') """ _schema = {'$ref': '#/definitions/UtcMultiTimeUnit'} def __init__(self, *args): super(UtcMultiTimeUnit, self).__init__(*args) class UtcSingleTimeUnit(SingleTimeUnit): """UtcSingleTimeUnit schema wrapper enum('utcyear', 'utcquarter', 'utcmonth', 'utcday', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds') """ _schema = {'$ref': '#/definitions/UtcSingleTimeUnit'} def __init__(self, *args): super(UtcSingleTimeUnit, self).__init__(*args) class VConcatSpecGenericSpec(Spec): """VConcatSpecGenericSpec schema wrapper Mapping(required=[vconcat]) Base interface for a vertical concatenation specification. Attributes ---------- vconcat : List(:class:`Spec`) A list of views to be concatenated and put into a column. bounds : enum('full', 'flush') The bounds calculation method to use for determining the extent of a sub-plot. One of ``full`` (the default) or ``flush``. * If set to ``full``, the entire calculated bounds (including axes, title, and legend) will be used. * If set to ``flush``, only the specified width and height values for the sub-view will be used. The ``flush`` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure. **Default value:** ``"full"`` center : boolean Boolean flag indicating if subviews should be centered relative to their respective rows or columns. **Default value:** ``false`` data : anyOf(:class:`Data`, None) An object describing the data source. Set to ``null`` to ignore the parent's data source. If no data is set, it is derived from the parent. description : string Description of this mark for commenting purpose. name : string Name of the visualization for later reference. resolve : :class:`Resolve` Scale, axis, and legend resolutions for view composition specifications. spacing : float The spacing in pixels between sub-views of the concat operator. **Default value** : ``10`` title : anyOf(:class:`Text`, :class:`TitleParams`) Title for the plot. transform : List(:class:`Transform`) An array of data transformations such as filter and new field calculation. """ _schema = {'$ref': '#/definitions/VConcatSpec'} def __init__(self, vconcat=Undefined, bounds=Undefined, center=Undefined, data=Undefined, description=Undefined, name=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, **kwds): super(VConcatSpecGenericSpec, self).__init__(vconcat=vconcat, bounds=bounds, center=center, data=data, description=description, name=name, resolve=resolve, spacing=spacing, title=title, transform=transform, **kwds) class Value(SelectionInit): """Value schema wrapper anyOf(float, string, boolean, List(float), None) """ _schema = {'$ref': '#/definitions/Value'} def __init__(self, *args, **kwds): super(Value, self).__init__(*args, **kwds) class ValueConditionGradientstringnull(VegaLiteSchema): """ValueConditionGradientstringnull schema wrapper anyOf(:class:`ConditionalValueDefGradientstringnull`, List(:class:`ConditionalValueDefGradientstringnull`)) """ _schema = {'$ref': '#/definitions/ValueCondition<(Gradient|string|null)>'} def __init__(self, *args, **kwds): super(ValueConditionGradientstringnull, self).__init__(*args, **kwds) class ConditionalValueDefGradientstringnull(ValueConditionGradientstringnull): """ConditionalValueDefGradientstringnull schema wrapper anyOf(:class:`ConditionalPredicateValueDefGradientstringnull`, :class:`ConditionalSelectionValueDefGradientstringnull`) """ _schema = {'$ref': '#/definitions/ConditionalValueDef<(Gradient|string|null)>'} def __init__(self, *args, **kwds): super(ConditionalValueDefGradientstringnull, self).__init__(*args, **kwds) class ConditionalPredicateValueDefGradientstringnull(ConditionalValueDefGradientstringnull): """ConditionalPredicateValueDefGradientstringnull schema wrapper Mapping(required=[test, value]) Attributes ---------- test : :class:`PredicateComposition` Predicate for triggering the condition value : anyOf(:class:`Gradient`, string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalPredicate>'} def __init__(self, test=Undefined, value=Undefined, **kwds): super(ConditionalPredicateValueDefGradientstringnull, self).__init__(test=test, value=value, **kwds) class ConditionalSelectionValueDefGradientstringnull(ConditionalValueDefGradientstringnull): """ConditionalSelectionValueDefGradientstringnull schema wrapper Mapping(required=[selection, value]) Attributes ---------- selection : :class:`SelectionComposition` A `selection name `__, or a series of `composed selections `__. value : anyOf(:class:`Gradient`, string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalSelection>'} def __init__(self, selection=Undefined, value=Undefined, **kwds): super(ConditionalSelectionValueDefGradientstringnull, self).__init__(selection=selection, value=value, **kwds) class ValueConditionText(VegaLiteSchema): """ValueConditionText schema wrapper anyOf(:class:`ConditionalValueDefText`, List(:class:`ConditionalValueDefText`)) """ _schema = {'$ref': '#/definitions/ValueCondition'} def __init__(self, *args, **kwds): super(ValueConditionText, self).__init__(*args, **kwds) class ConditionalValueDefText(ValueConditionText): """ConditionalValueDefText schema wrapper anyOf(:class:`ConditionalPredicateValueDefText`, :class:`ConditionalSelectionValueDefText`) """ _schema = {'$ref': '#/definitions/ConditionalValueDef'} def __init__(self, *args, **kwds): super(ConditionalValueDefText, self).__init__(*args, **kwds) class ConditionalPredicateValueDefText(ConditionalValueDefText): """ConditionalPredicateValueDefText schema wrapper Mapping(required=[test, value]) Attributes ---------- test : :class:`PredicateComposition` Predicate for triggering the condition value : :class:`Text` A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalPredicate>'} def __init__(self, test=Undefined, value=Undefined, **kwds): super(ConditionalPredicateValueDefText, self).__init__(test=test, value=value, **kwds) class ConditionalSelectionValueDefText(ConditionalValueDefText): """ConditionalSelectionValueDefText schema wrapper Mapping(required=[selection, value]) Attributes ---------- selection : :class:`SelectionComposition` A `selection name `__, or a series of `composed selections `__. value : :class:`Text` A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalSelection>'} def __init__(self, selection=Undefined, value=Undefined, **kwds): super(ConditionalSelectionValueDefText, self).__init__(selection=selection, value=value, **kwds) class ValueConditionnumber(VegaLiteSchema): """ValueConditionnumber schema wrapper anyOf(:class:`ConditionalValueDefnumber`, List(:class:`ConditionalValueDefnumber`)) """ _schema = {'$ref': '#/definitions/ValueCondition'} def __init__(self, *args, **kwds): super(ValueConditionnumber, self).__init__(*args, **kwds) class ConditionalValueDefnumber(ValueConditionnumber): """ConditionalValueDefnumber schema wrapper anyOf(:class:`ConditionalPredicateValueDefnumber`, :class:`ConditionalSelectionValueDefnumber`) """ _schema = {'$ref': '#/definitions/ConditionalValueDef'} def __init__(self, *args, **kwds): super(ConditionalValueDefnumber, self).__init__(*args, **kwds) class ConditionalPredicateValueDefnumber(ConditionalValueDefnumber): """ConditionalPredicateValueDefnumber schema wrapper Mapping(required=[test, value]) Attributes ---------- test : :class:`PredicateComposition` Predicate for triggering the condition value : List(float) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalPredicate>'} def __init__(self, test=Undefined, value=Undefined, **kwds): super(ConditionalPredicateValueDefnumber, self).__init__(test=test, value=value, **kwds) class ConditionalSelectionValueDefnumber(ConditionalValueDefnumber): """ConditionalSelectionValueDefnumber schema wrapper Mapping(required=[selection, value]) Attributes ---------- selection : :class:`SelectionComposition` A `selection name `__, or a series of `composed selections `__. value : List(float) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalSelection>'} def __init__(self, selection=Undefined, value=Undefined, **kwds): super(ConditionalSelectionValueDefnumber, self).__init__(selection=selection, value=value, **kwds) class ValueConditionstring(VegaLiteSchema): """ValueConditionstring schema wrapper anyOf(:class:`ConditionalValueDefstring`, List(:class:`ConditionalValueDefstring`)) """ _schema = {'$ref': '#/definitions/ValueCondition'} def __init__(self, *args, **kwds): super(ValueConditionstring, self).__init__(*args, **kwds) class ConditionalValueDefstring(ValueConditionstring): """ConditionalValueDefstring schema wrapper anyOf(:class:`ConditionalPredicateValueDefstring`, :class:`ConditionalSelectionValueDefstring`) """ _schema = {'$ref': '#/definitions/ConditionalValueDef'} def __init__(self, *args, **kwds): super(ConditionalValueDefstring, self).__init__(*args, **kwds) class ConditionalPredicateValueDefstring(ConditionalValueDefstring): """ConditionalPredicateValueDefstring schema wrapper Mapping(required=[test, value]) Attributes ---------- test : :class:`PredicateComposition` Predicate for triggering the condition value : string A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalPredicate>'} def __init__(self, test=Undefined, value=Undefined, **kwds): super(ConditionalPredicateValueDefstring, self).__init__(test=test, value=value, **kwds) class ConditionalSelectionValueDefstring(ConditionalValueDefstring): """ConditionalSelectionValueDefstring schema wrapper Mapping(required=[selection, value]) Attributes ---------- selection : :class:`SelectionComposition` A `selection name `__, or a series of `composed selections `__. value : string A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalSelection>'} def __init__(self, selection=Undefined, value=Undefined, **kwds): super(ConditionalSelectionValueDefstring, self).__init__(selection=selection, value=value, **kwds) class ValueConditionstringnull(VegaLiteSchema): """ValueConditionstringnull schema wrapper anyOf(:class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`)) """ _schema = {'$ref': '#/definitions/ValueCondition<(string|null)>'} def __init__(self, *args, **kwds): super(ValueConditionstringnull, self).__init__(*args, **kwds) class ConditionalStringValueDef(ValueConditionstringnull): """ConditionalStringValueDef schema wrapper anyOf(:class:`ConditionalPredicateStringValueDef`, :class:`ConditionalSelectionStringValueDef`) """ _schema = {'$ref': '#/definitions/ConditionalStringValueDef'} def __init__(self, *args, **kwds): super(ConditionalStringValueDef, self).__init__(*args, **kwds) class ConditionalPredicateStringValueDef(ConditionalStringValueDef): """ConditionalPredicateStringValueDef schema wrapper Mapping(required=[test, value]) Attributes ---------- test : :class:`PredicateComposition` Predicate for triggering the condition value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalPredicate'} def __init__(self, test=Undefined, value=Undefined, **kwds): super(ConditionalPredicateStringValueDef, self).__init__(test=test, value=value, **kwds) class ConditionalSelectionStringValueDef(ConditionalStringValueDef): """ConditionalSelectionStringValueDef schema wrapper Mapping(required=[selection, value]) Attributes ---------- selection : :class:`SelectionComposition` A `selection name `__, or a series of `composed selections `__. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ConditionalSelection'} def __init__(self, selection=Undefined, value=Undefined, **kwds): super(ConditionalSelectionStringValueDef, self).__init__(selection=selection, value=value, **kwds) class ValueDefWithConditionMarkPropFieldDefGradientstringnull(VegaLiteSchema): """ValueDefWithConditionMarkPropFieldDefGradientstringnull schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionGradientstringnull`) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(:class:`Gradient`, string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ValueDefWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ValueDefWithConditionMarkPropFieldDefGradientstringnull, self).__init__(condition=condition, value=value, **kwds) class ValueDefWithConditionMarkPropFieldDefTypeForShapestringnull(VegaLiteSchema): """ValueDefWithConditionMarkPropFieldDefTypeForShapestringnull schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDefTypeForShape`, :class:`ValueConditionstringnull`) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ValueDefWithCondition,(string|null)>'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ValueDefWithConditionMarkPropFieldDefTypeForShapestringnull, self).__init__(condition=condition, value=value, **kwds) class ValueDefWithConditionMarkPropFieldDefnumber(VegaLiteSchema): """ValueDefWithConditionMarkPropFieldDefnumber schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionnumber`) A field definition or one or more value definition(s) with a selection predicate. value : List(float) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ValueDefWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ValueDefWithConditionMarkPropFieldDefnumber, self).__init__(condition=condition, value=value, **kwds) class ValueDefWithConditionMarkPropFieldDefstringnull(VegaLiteSchema): """ValueDefWithConditionMarkPropFieldDefstringnull schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionstringnull`) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ValueDefWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ValueDefWithConditionMarkPropFieldDefstringnull, self).__init__(condition=condition, value=value, **kwds) class ValueDefWithConditionStringFieldDefText(VegaLiteSchema): """ValueDefWithConditionStringFieldDefText schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalStringFieldDef`, :class:`ValueConditionText`) A field definition or one or more value definition(s) with a selection predicate. value : :class:`Text` A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ValueDefWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ValueDefWithConditionStringFieldDefText, self).__init__(condition=condition, value=value, **kwds) class ValueWithConditionMarkPropFieldDefGradientstringnull(VegaLiteSchema): """ValueWithConditionMarkPropFieldDefGradientstringnull schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionGradientstringnull`) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(:class:`Gradient`, string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ValueWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ValueWithConditionMarkPropFieldDefGradientstringnull, self).__init__(condition=condition, value=value, **kwds) class ValueWithConditionMarkPropFieldDefTypeForShapestringnull(VegaLiteSchema): """ValueWithConditionMarkPropFieldDefTypeForShapestringnull schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDefTypeForShape`, :class:`ValueConditionstringnull`) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ValueWithCondition,(string|null)>'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ValueWithConditionMarkPropFieldDefTypeForShapestringnull, self).__init__(condition=condition, value=value, **kwds) class ValueWithConditionMarkPropFieldDefnumber(VegaLiteSchema): """ValueWithConditionMarkPropFieldDefnumber schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionnumber`) A field definition or one or more value definition(s) with a selection predicate. value : float A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ValueWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ValueWithConditionMarkPropFieldDefnumber, self).__init__(condition=condition, value=value, **kwds) class ValueWithConditionMarkPropFieldDefstringnull(VegaLiteSchema): """ValueWithConditionMarkPropFieldDefstringnull schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ValueConditionstringnull`) A field definition or one or more value definition(s) with a selection predicate. value : anyOf(string, None) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ValueWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ValueWithConditionMarkPropFieldDefstringnull, self).__init__(condition=condition, value=value, **kwds) class ValueWithConditionStringFieldDefText(VegaLiteSchema): """ValueWithConditionStringFieldDefText schema wrapper Mapping(required=[]) Attributes ---------- condition : anyOf(:class:`ConditionalStringFieldDef`, :class:`ValueConditionText`) A field definition or one or more value definition(s) with a selection predicate. value : :class:`Text` A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/ValueWithCondition'} def __init__(self, condition=Undefined, value=Undefined, **kwds): super(ValueWithConditionStringFieldDefText, self).__init__(condition=condition, value=value, **kwds) class Vector2DateTime(SelectionInitInterval): """Vector2DateTime schema wrapper List([:class:`DateTime`, :class:`DateTime`]) """ _schema = {'$ref': '#/definitions/Vector2'} def __init__(self, *args): super(Vector2DateTime, self).__init__(*args) class Vector2Vector2number(VegaLiteSchema): """Vector2Vector2number schema wrapper List([:class:`Vector2number`, :class:`Vector2number`]) """ _schema = {'$ref': '#/definitions/Vector2>'} def __init__(self, *args): super(Vector2Vector2number, self).__init__(*args) class Vector2boolean(SelectionInitInterval): """Vector2boolean schema wrapper List([boolean, boolean]) """ _schema = {'$ref': '#/definitions/Vector2'} def __init__(self, *args): super(Vector2boolean, self).__init__(*args) class Vector2number(SelectionInitInterval): """Vector2number schema wrapper List([float, float]) """ _schema = {'$ref': '#/definitions/Vector2'} def __init__(self, *args): super(Vector2number, self).__init__(*args) class Vector2string(SelectionInitInterval): """Vector2string schema wrapper List([string, string]) """ _schema = {'$ref': '#/definitions/Vector2'} def __init__(self, *args): super(Vector2string, self).__init__(*args) class Vector3number(VegaLiteSchema): """Vector3number schema wrapper List([float, float, float]) """ _schema = {'$ref': '#/definitions/Vector3'} def __init__(self, *args): super(Vector3number, self).__init__(*args) class ViewBackground(VegaLiteSchema): """ViewBackground schema wrapper Mapping(required=[]) Attributes ---------- cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the view. Any valid `CSS cursor type `__ can be used. fill : anyOf(:class:`Color`, None) The fill color. **Default value:** ``undefined`` fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. stroke : anyOf(:class:`Color`, None) The stroke color. **Default value:** ``"#ddd"`` strokeCap : string The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"butt"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : string The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. style : anyOf(string, List(string)) A string or array of strings indicating the name of custom styles to apply to the view background. A style is a named collection of mark property defaults defined within the `style configuration `__. If style is an array, later styles will override earlier styles. **Default value:** ``"cell"`` **Note:** Any specified view background properties will augment the default style. """ _schema = {'$ref': '#/definitions/ViewBackground'} def __init__(self, cornerRadius=Undefined, cursor=Undefined, fill=Undefined, fillOpacity=Undefined, opacity=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, **kwds): super(ViewBackground, self).__init__(cornerRadius=cornerRadius, cursor=cursor, fill=fill, fillOpacity=fillOpacity, opacity=opacity, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, **kwds) class ViewConfig(VegaLiteSchema): """ViewConfig schema wrapper Mapping(required=[]) Attributes ---------- clip : boolean Whether the view should be clipped. continuousHeight : float The default height when the plot has a continuous y-field. **Default value:** ``200`` continuousWidth : float The default width when the plot has a continuous x-field. **Default value:** ``200`` cornerRadius : float The radius in pixels of rounded rectangle corners. **Default value:** ``0`` cursor : :class:`Cursor` The mouse cursor used over the view. Any valid `CSS cursor type `__ can be used. discreteHeight : anyOf(float, Mapping(required=[step])) The default height when the plot has either a discrete y-field or no y-field. The height can be either a number indicating a fixed height or an object in the form of ``{step: number}`` defining the height per discrete step. **Default value:** a step size based on ``config.view.step``. discreteWidth : anyOf(float, Mapping(required=[step])) The default width when the plot has either a discrete x-field or no x-field. The width can be either a number indicating a fixed width or an object in the form of ``{step: number}`` defining the width per discrete step. **Default value:** a step size based on ``config.view.step``. fill : anyOf(:class:`Color`, None) The fill color. **Default value:** ``undefined`` fillOpacity : float The fill opacity (value between [0,1]). **Default value:** ``1`` height : float Default height **Deprecated:** Since Vega-Lite 4.0. Please use continuousHeight and discreteHeight instead. opacity : float The overall opacity (value between [0,1]). **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``, ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise. step : float Default step size for x-/y- discrete fields. stroke : anyOf(:class:`Color`, None) The stroke color. **Default value:** ``"#ddd"`` strokeCap : string The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or ``"square"``. **Default value:** ``"butt"`` strokeDash : List(float) An array of alternating stroke, space lengths for creating dashed or dotted lines. strokeDashOffset : float The offset (in pixels) into which to begin drawing with the stroke dash array. strokeJoin : string The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``. **Default value:** ``"miter"`` strokeMiterLimit : float The miter limit at which to bevel a line join. strokeOpacity : float The stroke opacity (value between [0,1]). **Default value:** ``1`` strokeWidth : float The stroke width, in pixels. width : float Default width **Deprecated:** Since Vega-Lite 4.0. Please use continuousWidth and discreteWidth instead. """ _schema = {'$ref': '#/definitions/ViewConfig'} def __init__(self, clip=Undefined, continuousHeight=Undefined, continuousWidth=Undefined, cornerRadius=Undefined, cursor=Undefined, discreteHeight=Undefined, discreteWidth=Undefined, fill=Undefined, fillOpacity=Undefined, height=Undefined, opacity=Undefined, step=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, width=Undefined, **kwds): super(ViewConfig, self).__init__(clip=clip, continuousHeight=continuousHeight, continuousWidth=continuousWidth, cornerRadius=cornerRadius, cursor=cursor, discreteHeight=discreteHeight, discreteWidth=discreteWidth, fill=fill, fillOpacity=fillOpacity, height=height, opacity=opacity, step=step, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, width=width, **kwds) class WindowEventType(VegaLiteSchema): """WindowEventType schema wrapper anyOf(:class:`EventType`, string) """ _schema = {'$ref': '#/definitions/WindowEventType'} def __init__(self, *args, **kwds): super(WindowEventType, self).__init__(*args, **kwds) class EventType(WindowEventType): """EventType schema wrapper enum('click', 'dblclick', 'dragenter', 'dragleave', 'dragover', 'keydown', 'keypress', 'keyup', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'mousewheel', 'timer', 'touchend', 'touchmove', 'touchstart', 'wheel') """ _schema = {'$ref': '#/definitions/EventType'} def __init__(self, *args): super(EventType, self).__init__(*args) class WindowFieldDef(VegaLiteSchema): """WindowFieldDef schema wrapper Mapping(required=[op, as]) Attributes ---------- op : anyOf(:class:`AggregateOp`, :class:`WindowOnlyOp`) The window or aggregation operation to apply within a window (e.g., ``"rank"``, ``"lead"``, ``"sum"``, ``"average"`` or ``"count"`` ). See the list of all supported operations `here `__. field : :class:`FieldName` The data field for which to compute the aggregate or window function. This can be omitted for window functions that do not operate over a field such as ``"count"``, ``"rank"``, ``"dense_rank"``. param : float Parameter values for the window functions. Parameter values can be omitted for operations that do not accept a parameter. See the list of all supported operations and their parameters `here `__. as : :class:`FieldName` The output name for the window operation. """ _schema = {'$ref': '#/definitions/WindowFieldDef'} def __init__(self, op=Undefined, field=Undefined, param=Undefined, **kwds): super(WindowFieldDef, self).__init__(op=op, field=field, param=param, **kwds) class WindowOnlyOp(VegaLiteSchema): """WindowOnlyOp schema wrapper enum('row_number', 'rank', 'dense_rank', 'percent_rank', 'cume_dist', 'ntile', 'lag', 'lead', 'first_value', 'last_value', 'nth_value') """ _schema = {'$ref': '#/definitions/WindowOnlyOp'} def __init__(self, *args): super(WindowOnlyOp, self).__init__(*args) class WindowTransform(Transform): """WindowTransform schema wrapper Mapping(required=[window]) Attributes ---------- window : List(:class:`WindowFieldDef`) The definition of the fields in the window, and what calculations to use. frame : List(anyOf(None, float)) A frame specification as a two-element array indicating how the sliding window should proceed. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. The default value is ``[null, 0]``, indicating that the sliding window includes the current object and all preceding objects. The value ``[-5, 5]`` indicates that the window should include five objects preceding and five objects following the current object. Finally, ``[null, null]`` indicates that the window frame should always include all data objects. If you this frame and want to assign the same value to add objects, you can use the simpler `join aggregate transform `__. The only operators affected are the aggregation operations and the ``first_value``, ``last_value``, and ``nth_value`` window operations. The other window operations are not affected by this. **Default value:** : ``[null, 0]`` (includes the current object and all preceding objects) groupby : List(:class:`FieldName`) The data fields for partitioning the data objects into separate windows. If unspecified, all data points will be in a single window. ignorePeers : boolean Indicates if the sliding window frame should ignore peer values (data that are considered identical by the sort criteria). The default is false, causing the window frame to expand to include all peer values. If set to true, the window frame will be defined by offset values only. This setting only affects those operations that depend on the window frame, namely aggregation operations and the first_value, last_value, and nth_value window operations. **Default value:** ``false`` sort : List(:class:`SortField`) A sort field definition for sorting data objects within a window. If two data objects are considered equal by the comparator, they are considered "peer" values of equal rank. If sort is not specified, the order is undefined: data objects are processed in the order they are observed and none are considered peers (the ignorePeers parameter is ignored and treated as if set to ``true`` ). """ _schema = {'$ref': '#/definitions/WindowTransform'} def __init__(self, window=Undefined, frame=Undefined, groupby=Undefined, ignorePeers=Undefined, sort=Undefined, **kwds): super(WindowTransform, self).__init__(window=window, frame=frame, groupby=groupby, ignorePeers=ignorePeers, sort=sort, **kwds) class XValueDef(VegaLiteSchema): """XValueDef schema wrapper Mapping(required=[value]) Definition object for a constant value (primitive value or gradient definition) of an encoding channel. Attributes ---------- value : anyOf(float, enum('width')) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/XValueDef'} def __init__(self, value=Undefined, **kwds): super(XValueDef, self).__init__(value=value, **kwds) class YValueDef(VegaLiteSchema): """YValueDef schema wrapper Mapping(required=[value]) Definition object for a constant value (primitive value or gradient definition) of an encoding channel. Attributes ---------- value : anyOf(float, enum('height')) A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient definition `__ for color, values between ``0`` to ``1`` for opacity). """ _schema = {'$ref': '#/definitions/YValueDef'} def __init__(self, value=Undefined, **kwds): super(YValueDef, self).__init__(value=value, **kwds) altair-4.1.0/altair/vegalite/v4/schema/mixins.py000066400000000000000000002020661364111050100215140ustar00rootroot00000000000000# The contents of this file are automatically written by # tools/generate_schema_wrapper.py. Do not modify directly. from . import core from altair.utils import use_signature from altair.utils.schemapi import Undefined class MarkMethodMixin(object): """A mixin class that defines mark methods""" def mark_area(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'area' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, aspect=aspect, baseline=baseline, binSpacing=binSpacing, blend=blend, clip=clip, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusEnd=cornerRadiusEnd, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, line=line, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="area", **kwds) else: copy.mark = "area" return copy def mark_bar(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'bar' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, aspect=aspect, baseline=baseline, binSpacing=binSpacing, blend=blend, clip=clip, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusEnd=cornerRadiusEnd, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, line=line, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="bar", **kwds) else: copy.mark = "bar" return copy def mark_line(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'line' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, aspect=aspect, baseline=baseline, binSpacing=binSpacing, blend=blend, clip=clip, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusEnd=cornerRadiusEnd, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, line=line, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="line", **kwds) else: copy.mark = "line" return copy def mark_image(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'image' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, aspect=aspect, baseline=baseline, binSpacing=binSpacing, blend=blend, clip=clip, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusEnd=cornerRadiusEnd, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, line=line, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="image", **kwds) else: copy.mark = "image" return copy def mark_trail(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'trail' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, aspect=aspect, baseline=baseline, binSpacing=binSpacing, blend=blend, clip=clip, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusEnd=cornerRadiusEnd, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, line=line, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="trail", **kwds) else: copy.mark = "trail" return copy def mark_point(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'point' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, aspect=aspect, baseline=baseline, binSpacing=binSpacing, blend=blend, clip=clip, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusEnd=cornerRadiusEnd, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, line=line, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="point", **kwds) else: copy.mark = "point" return copy def mark_text(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'text' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, aspect=aspect, baseline=baseline, binSpacing=binSpacing, blend=blend, clip=clip, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusEnd=cornerRadiusEnd, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, line=line, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="text", **kwds) else: copy.mark = "text" return copy def mark_tick(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'tick' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, aspect=aspect, baseline=baseline, binSpacing=binSpacing, blend=blend, clip=clip, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusEnd=cornerRadiusEnd, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, line=line, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="tick", **kwds) else: copy.mark = "tick" return copy def mark_rect(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'rect' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, aspect=aspect, baseline=baseline, binSpacing=binSpacing, blend=blend, clip=clip, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusEnd=cornerRadiusEnd, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, line=line, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="rect", **kwds) else: copy.mark = "rect" return copy def mark_rule(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'rule' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, aspect=aspect, baseline=baseline, binSpacing=binSpacing, blend=blend, clip=clip, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusEnd=cornerRadiusEnd, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, line=line, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="rule", **kwds) else: copy.mark = "rule" return copy def mark_circle(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'circle' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, aspect=aspect, baseline=baseline, binSpacing=binSpacing, blend=blend, clip=clip, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusEnd=cornerRadiusEnd, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, line=line, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="circle", **kwds) else: copy.mark = "circle" return copy def mark_square(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'square' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, aspect=aspect, baseline=baseline, binSpacing=binSpacing, blend=blend, clip=clip, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusEnd=cornerRadiusEnd, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, line=line, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="square", **kwds) else: copy.mark = "square" return copy def mark_geoshape(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds): """Set the chart's mark to 'geoshape' For information on additional arguments, see :class:`MarkDef` """ kwds = dict(align=align, angle=angle, aspect=aspect, baseline=baseline, binSpacing=binSpacing, blend=blend, clip=clip, color=color, cornerRadius=cornerRadius, cornerRadiusBottomLeft=cornerRadiusBottomLeft, cornerRadiusBottomRight=cornerRadiusBottomRight, cornerRadiusEnd=cornerRadiusEnd, cornerRadiusTopLeft=cornerRadiusTopLeft, cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height, href=href, interpolate=interpolate, invalid=invalid, limit=limit, line=line, lineBreak=lineBreak, lineHeight=lineHeight, opacity=opacity, order=order, orient=orient, point=point, radius=radius, shape=shape, size=size, stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash, strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset, strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta, thickness=thickness, timeUnitBand=timeUnitBand, timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.MarkDef(type="geoshape", **kwds) else: copy.mark = "geoshape" return copy def mark_boxplot(self, box=Undefined, clip=Undefined, color=Undefined, extent=Undefined, median=Undefined, opacity=Undefined, orient=Undefined, outliers=Undefined, rule=Undefined, size=Undefined, ticks=Undefined, **kwds): """Set the chart's mark to 'boxplot' For information on additional arguments, see :class:`BoxPlotDef` """ kwds = dict(box=box, clip=clip, color=color, extent=extent, median=median, opacity=opacity, orient=orient, outliers=outliers, rule=rule, size=size, ticks=ticks, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.BoxPlotDef(type="boxplot", **kwds) else: copy.mark = "boxplot" return copy def mark_errorbar(self, clip=Undefined, color=Undefined, extent=Undefined, opacity=Undefined, orient=Undefined, rule=Undefined, ticks=Undefined, **kwds): """Set the chart's mark to 'errorbar' For information on additional arguments, see :class:`ErrorBarDef` """ kwds = dict(clip=clip, color=color, extent=extent, opacity=opacity, orient=orient, rule=rule, ticks=ticks, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.ErrorBarDef(type="errorbar", **kwds) else: copy.mark = "errorbar" return copy def mark_errorband(self, band=Undefined, borders=Undefined, clip=Undefined, color=Undefined, extent=Undefined, interpolate=Undefined, opacity=Undefined, orient=Undefined, tension=Undefined, **kwds): """Set the chart's mark to 'errorband' For information on additional arguments, see :class:`ErrorBandDef` """ kwds = dict(band=band, borders=borders, clip=clip, color=color, extent=extent, interpolate=interpolate, opacity=opacity, orient=orient, tension=tension, **kwds) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.ErrorBandDef(type="errorband", **kwds) else: copy.mark = "errorband" return copy class ConfigMethodMixin(object): """A mixin class that defines config methods""" @use_signature(core.Config) def configure(self, *args, **kwargs): copy = self.copy(deep=False) copy.config = core.Config(*args, **kwargs) return copy @use_signature(core.AreaConfig) def configure_area(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["area"] = core.AreaConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axis(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axis"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisBand(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisBand"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisBottom(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisBottom"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisDiscrete(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisDiscrete"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisLeft(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisLeft"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisPoint(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisPoint"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisQuantitative(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisQuantitative"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisRight(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisRight"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisTemporal(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisTemporal"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisTop(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisTop"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisX(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisX"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisXBand(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisXBand"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisXDiscrete(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisXDiscrete"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisXPoint(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisXPoint"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisXQuantitative(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisXQuantitative"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisXTemporal(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisXTemporal"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisY(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisY"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisYBand(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisYBand"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisYDiscrete(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisYDiscrete"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisYPoint(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisYPoint"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisYQuantitative(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisYQuantitative"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.AxisConfig) def configure_axisYTemporal(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["axisYTemporal"] = core.AxisConfig(*args, **kwargs) return copy @use_signature(core.BarConfig) def configure_bar(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["bar"] = core.BarConfig(*args, **kwargs) return copy @use_signature(core.BoxPlotConfig) def configure_boxplot(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["boxplot"] = core.BoxPlotConfig(*args, **kwargs) return copy @use_signature(core.MarkConfig) def configure_circle(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["circle"] = core.MarkConfig(*args, **kwargs) return copy @use_signature(core.CompositionConfig) def configure_concat(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["concat"] = core.CompositionConfig(*args, **kwargs) return copy @use_signature(core.ErrorBandConfig) def configure_errorband(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["errorband"] = core.ErrorBandConfig(*args, **kwargs) return copy @use_signature(core.ErrorBarConfig) def configure_errorbar(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["errorbar"] = core.ErrorBarConfig(*args, **kwargs) return copy @use_signature(core.CompositionConfig) def configure_facet(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["facet"] = core.CompositionConfig(*args, **kwargs) return copy @use_signature(core.MarkConfig) def configure_geoshape(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["geoshape"] = core.MarkConfig(*args, **kwargs) return copy @use_signature(core.HeaderConfig) def configure_header(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["header"] = core.HeaderConfig(*args, **kwargs) return copy @use_signature(core.HeaderConfig) def configure_headerColumn(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["headerColumn"] = core.HeaderConfig(*args, **kwargs) return copy @use_signature(core.HeaderConfig) def configure_headerFacet(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["headerFacet"] = core.HeaderConfig(*args, **kwargs) return copy @use_signature(core.HeaderConfig) def configure_headerRow(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["headerRow"] = core.HeaderConfig(*args, **kwargs) return copy @use_signature(core.RectConfig) def configure_image(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["image"] = core.RectConfig(*args, **kwargs) return copy @use_signature(core.LegendConfig) def configure_legend(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["legend"] = core.LegendConfig(*args, **kwargs) return copy @use_signature(core.LineConfig) def configure_line(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["line"] = core.LineConfig(*args, **kwargs) return copy @use_signature(core.MarkConfig) def configure_mark(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["mark"] = core.MarkConfig(*args, **kwargs) return copy @use_signature(core.MarkConfig) def configure_point(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["point"] = core.MarkConfig(*args, **kwargs) return copy @use_signature(core.ProjectionConfig) def configure_projection(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["projection"] = core.ProjectionConfig(*args, **kwargs) return copy @use_signature(core.RangeConfig) def configure_range(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["range"] = core.RangeConfig(*args, **kwargs) return copy @use_signature(core.RectConfig) def configure_rect(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["rect"] = core.RectConfig(*args, **kwargs) return copy @use_signature(core.MarkConfig) def configure_rule(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["rule"] = core.MarkConfig(*args, **kwargs) return copy @use_signature(core.ScaleConfig) def configure_scale(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["scale"] = core.ScaleConfig(*args, **kwargs) return copy @use_signature(core.SelectionConfig) def configure_selection(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["selection"] = core.SelectionConfig(*args, **kwargs) return copy @use_signature(core.MarkConfig) def configure_square(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["square"] = core.MarkConfig(*args, **kwargs) return copy @use_signature(core.MarkConfig) def configure_text(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["text"] = core.MarkConfig(*args, **kwargs) return copy @use_signature(core.TickConfig) def configure_tick(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["tick"] = core.TickConfig(*args, **kwargs) return copy @use_signature(core.TitleConfig) def configure_title(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["title"] = core.TitleConfig(*args, **kwargs) return copy @use_signature(core.LineConfig) def configure_trail(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["trail"] = core.LineConfig(*args, **kwargs) return copy @use_signature(core.ViewConfig) def configure_view(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["view"] = core.ViewConfig(*args, **kwargs) return copyaltair-4.1.0/altair/vegalite/v4/schema/vega-lite-schema.json000066400000000000000000032547621364111050100236560ustar00rootroot00000000000000{ "$ref": "#/definitions/TopLevelSpec", "$schema": "http://json-schema.org/draft-07/schema#", "definitions": { "Aggregate": { "anyOf": [ { "$ref": "#/definitions/NonArgAggregateOp" }, { "$ref": "#/definitions/ArgmaxDef" }, { "$ref": "#/definitions/ArgminDef" } ] }, "AggregateOp": { "enum": [ "argmax", "argmin", "average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep" ], "type": "string" }, "AggregateTransform": { "additionalProperties": false, "properties": { "aggregate": { "description": "Array of objects that define fields to aggregate.", "items": { "$ref": "#/definitions/AggregatedFieldDef" }, "type": "array" }, "groupby": { "description": "The data fields to group by. If not specified, a single group containing all data objects will be used.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" } }, "required": [ "aggregate" ], "type": "object" }, "AggregatedFieldDef": { "additionalProperties": false, "properties": { "as": { "$ref": "#/definitions/FieldName", "description": "The output field names to use for each aggregated field." }, "field": { "$ref": "#/definitions/FieldName", "description": "The data field for which to compute aggregate function. This is required for all aggregation operations except `\"count\"`." }, "op": { "$ref": "#/definitions/AggregateOp", "description": "The aggregation operation to apply to the fields (e.g., `\"sum\"`, `\"average\"`, or `\"count\"`).\nSee the [full list of supported aggregation operations](https://vega.github.io/vega-lite/docs/aggregate.html#ops)\nfor more information." } }, "required": [ "op", "as" ], "type": "object" }, "Align": { "enum": [ "left", "center", "right" ], "type": "string" }, "AllSortString": { "anyOf": [ { "$ref": "#/definitions/SortOrder" }, { "$ref": "#/definitions/SortByChannel" }, { "$ref": "#/definitions/SortByChannelDesc" } ] }, "AnyMark": { "anyOf": [ { "$ref": "#/definitions/CompositeMark" }, { "$ref": "#/definitions/CompositeMarkDef" }, { "$ref": "#/definitions/Mark" }, { "$ref": "#/definitions/MarkDef" } ] }, "AnyMarkConfig": { "anyOf": [ { "$ref": "#/definitions/MarkConfig" }, { "$ref": "#/definitions/AreaConfig" }, { "$ref": "#/definitions/BarConfig" }, { "$ref": "#/definitions/RectConfig" }, { "$ref": "#/definitions/LineConfig" }, { "$ref": "#/definitions/TickConfig" } ] }, "AreaConfig": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of `\"left\"`, `\"right\"`, `\"center\"`." }, "angle": { "description": "The rotation angle of the text, in degrees.", "maximum": 360, "minimum": 0, "type": "number" }, "aspect": { "description": "Whether to keep aspect ratio of image marks.", "type": "boolean" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical text baseline. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `lineHeight` rather than `fontSize` alone." }, "blend": { "$ref": "#/definitions/Blend", "description": "The color blend mode for drawing an item on its current background. Any valid [CSS mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) value can be used.\n\n__Default value: `\"source-over\"`" }, "color": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" } ], "description": "Default color.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`." }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusBottomLeft": { "description": "The radius in pixels of rounded rectangle bottom left corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusBottomRight": { "description": "The radius in pixels of rounded rectangle bottom right corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusTopLeft": { "description": "The radius in pixels of rounded rectangle top right corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusTopRight": { "description": "The radius in pixels of rounded rectangle top left corner.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "dir": { "$ref": "#/definitions/TextDirection", "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`" }, "dx": { "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "dy": { "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "ellipsis": { "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`", "type": "string" }, "fill": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" }, { "type": "null" } ], "description": "Default Fill Color. This property has higher precedence than `config.color`.\n\n__Default value:__ (None)" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "filled": { "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for all `point`, `line`, and `rule` marks as well as `geoshape` marks for [`graticule`](https://vega.github.io/vega-lite/docs/data.html#graticule) data sources; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).", "type": "boolean" }, "font": { "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "fontSize": { "description": "The font size, in pixels.\n\n__Default value:__ `11`", "minimum": 0, "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style (e.g., `\"italic\"`)." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "height": { "description": "Height of the marks.", "type": "number" }, "href": { "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.", "format": "uri", "type": "string" }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "invalid": { "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.", "enum": [ "filter", null ], "type": [ "string", "null" ] }, "limit": { "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0` -- indicating no limit", "type": "number" }, "line": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/OverlayMarkDef" } ], "description": "A flag for overlaying line on top of area marks, or an object defining the properties of the overlayed lines.\n\n- If this value is an empty object (`{}`) or `true`, lines with default properties will be used.\n\n- If this value is `false`, no lines would be automatically added to area marks.\n\n__Default value:__ `false`." }, "lineBreak": { "description": "A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued.", "type": "string" }, "lineHeight": { "description": "The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.", "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "order": { "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.", "type": [ "null", "boolean" ] }, "orient": { "$ref": "#/definitions/Orientation", "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored." }, "point": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/OverlayMarkDef" }, { "enum": [ "transparent" ], "type": "string" } ], "description": "A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points.\n\n- If this property is `\"transparent\"`, transparent points will be used (for enhancing tooltips and selections).\n\n- If this property is an empty object (`{}`) or `true`, filled points with default properties will be used.\n\n- If this property is `false`, no points would be automatically added to line or area marks.\n\n__Default value:__ `false`." }, "radius": { "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.", "minimum": 0, "type": "number" }, "shape": { "anyOf": [ { "$ref": "#/definitions/SymbolShape" }, { "type": "string" } ], "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`" }, "size": { "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__\n- `30` for point, circle, square marks; width/height's `step`\n- `2` for bar marks with discrete dimensions;\n- `5` for bar marks with continuous dimensions;\n- `11` for text marks.", "minimum": 0, "type": "number" }, "stroke": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" }, { "type": "null" } ], "description": "Default Stroke Color. This property has higher precedence than `config.color`.\n\n__Default value:__ (None)" }, "strokeCap": { "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"butt\"`", "type": "string" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`", "type": "string" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOffset": { "description": "The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "tension": { "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).", "type": "number" }, "text": { "$ref": "#/definitions/Text", "description": "Placeholder text if the `text` channel is not specified" }, "theta": { "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".", "type": "number" }, "timeUnitBand": { "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step.\nIf set to `0.5`, bandwidth of the marks will be half of the time unit band step.", "type": "number" }, "timeUnitBandPosition": { "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step.\nIf set to `0.5`, the marks will be positioned in the middle of the time unit band step.", "type": "number" }, "tooltip": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "boolean" }, { "$ref": "#/definitions/TooltipContent" }, { "type": "null" } ], "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite.\n\n__Default value:__ `null`" }, "width": { "description": "Width of the marks.", "type": "number" }, "x": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "y": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." } }, "type": "object" }, "ArgmaxDef": { "additionalProperties": false, "properties": { "argmax": { "type": "string" } }, "required": [ "argmax" ], "type": "object" }, "ArgminDef": { "additionalProperties": false, "properties": { "argmin": { "type": "string" } }, "required": [ "argmin" ], "type": "object" }, "AutoSizeParams": { "additionalProperties": false, "properties": { "contains": { "description": "Determines how size calculation should be performed, one of `\"content\"` or `\"padding\"`. The default setting (`\"content\"`) interprets the width and height settings as the data rectangle (plotting) dimensions, to which padding is then added. In contrast, the `\"padding\"` setting includes the padding within the view size calculations, such that the width and height settings indicate the **total** intended size of the view.\n\n__Default value__: `\"content\"`", "enum": [ "content", "padding" ], "type": "string" }, "resize": { "description": "A boolean flag indicating if autosize layout should be re-calculated on every view update.\n\n__Default value__: `false`", "type": "boolean" }, "type": { "$ref": "#/definitions/AutosizeType", "description": "The sizing format type. One of `\"pad\"`, `\"fit\"`, `\"fit-x\"`, `\"fit-y\"`, or `\"none\"`. See the [autosize type](https://vega.github.io/vega-lite/docs/size.html#autosize) documentation for descriptions of each.\n\n__Default value__: `\"pad\"`" } }, "type": "object" }, "AutosizeType": { "enum": [ "pad", "none", "fit", "fit-x", "fit-y" ], "type": "string" }, "Axis": { "additionalProperties": false, "properties": { "bandPosition": { "description": "An interpolation fraction indicating where, for `band` scales, axis ticks should be positioned. A value of `0` places ticks at the left edge of their bands. A value of `0.5` places ticks in the middle of their bands.\n\n __Default value:__ `0.5`", "type": "number" }, "domain": { "description": "A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis.\n\n__Default value:__ `true`", "type": "boolean" }, "domainColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "Color of axis domain line.\n\n__Default value:__ `\"gray\"`." }, "domainDash": { "description": "An array of alternating [stroke, space] lengths for dashed domain lines.", "items": { "type": "number" }, "type": "array" }, "domainDashOffset": { "description": "The pixel offset at which to start drawing with the domain dash array.", "type": "number" }, "domainOpacity": { "description": "Opacity of the axis domain line.", "type": "number" }, "domainWidth": { "description": "Stroke width of axis domain line\n\n__Default value:__ `1`", "type": "number" }, "format": { "anyOf": [ { "type": "string" }, { "type": "object" } ], "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `\"formatType\"`](https://vega.github.io/vega-lite/usage/compile.html#format-type) that takes `datum.value` and format parameter as input), this property represents the format parameter.\n\n__Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format." }, "formatType": { "description": "The format type for labels (`\"number\"` or `\"time\"` or a [registered custom format type](https://vega.github.io/vega-lite/usage/compile.html#format-type)).\n\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.", "type": "string" }, "grid": { "description": "A boolean flag indicating if grid lines should be included as part of the axis\n\n__Default value:__ `true` for [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous) that are not binned; otherwise, `false`.", "type": "boolean" }, "gridColor": { "anyOf": [ { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "Color of gridlines.\n\n__Default value:__ `\"lightGray\"`." }, { "$ref": "#/definitions/ConditionalAxisColor" } ] }, "gridDash": { "anyOf": [ { "description": "An array of alternating [stroke, space] lengths for dashed grid lines.", "items": { "type": "number" }, "type": "array" }, { "$ref": "#/definitions/ConditionalAxisNumberArray" } ] }, "gridDashOffset": { "anyOf": [ { "description": "The pixel offset at which to start drawing with the grid dash array.", "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "gridOpacity": { "anyOf": [ { "description": "The stroke opacity of grid (value between [0,1])\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "gridWidth": { "anyOf": [ { "description": "The grid width, in pixels.\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "labelAlign": { "anyOf": [ { "$ref": "#/definitions/Align", "description": "Horizontal text alignment of axis tick labels, overriding the default setting for the current axis orientation." }, { "$ref": "#/definitions/ConditionalAxisLabelAlign" } ] }, "labelAngle": { "description": "The rotation angle of the axis labels.\n\n__Default value:__ `-90` for nominal and ordinal fields; `0` otherwise.", "maximum": 360, "minimum": -360, "type": "number" }, "labelBaseline": { "anyOf": [ { "$ref": "#/definitions/TextBaseline", "description": "Vertical text baseline of axis tick labels, overriding the default setting for the current axis orientation. Can be `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`." }, { "$ref": "#/definitions/ConditionalAxisLabelBaseline" } ] }, "labelBound": { "description": "Indicates if labels should be hidden if they exceed the axis range. If `false` (the default) no bounds overlap analysis is performed. If `true`, labels will be hidden if they exceed the axis range by more than 1 pixel. If this property is a number, it specifies the pixel tolerance: the maximum amount by which a label bounding box may exceed the axis range.\n\n__Default value:__ `false`.", "type": [ "number", "boolean" ] }, "labelColor": { "anyOf": [ { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "The color of the tick label, can be in hex color code or regular color name." }, { "$ref": "#/definitions/ConditionalAxisColor" } ] }, "labelExpr": { "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.", "type": "string" }, "labelFlush": { "description": "Indicates if the first and last axis labels should be aligned flush with the scale range. Flush alignment for a horizontal axis will left-align the first label and right-align the last label. For vertical axes, bottom and top text baselines are applied instead. If this property is a number, it also indicates the number of pixels by which to offset the first and last labels; for example, a value of 2 will flush-align the first and last labels and also push them 2 pixels outward from the center of the axis. The additional adjustment can sometimes help the labels better visually group with corresponding axis ticks.\n\n__Default value:__ `true` for axis of a continuous x-scale. Otherwise, `false`.", "type": [ "boolean", "number" ] }, "labelFlushOffset": { "description": "Indicates the number of pixels by which to offset flush-adjusted labels. For example, a value of `2` will push flush-adjusted labels 2 pixels outward from the center of the axis. Offsets can help the labels better visually group with corresponding axis ticks.\n\n__Default value:__ `0`.", "type": "number" }, "labelFont": { "anyOf": [ { "description": "The font of the tick label.", "type": "string" }, { "$ref": "#/definitions/ConditionalAxisString" } ] }, "labelFontSize": { "anyOf": [ { "description": "The font size of the label, in pixels.", "minimum": 0, "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "labelFontStyle": { "anyOf": [ { "$ref": "#/definitions/FontStyle", "description": "Font style of the title." }, { "$ref": "#/definitions/ConditionalAxisLabelFontStyle" } ] }, "labelFontWeight": { "anyOf": [ { "$ref": "#/definitions/FontWeight", "description": "Font weight of axis tick labels." }, { "$ref": "#/definitions/ConditionalAxisLabelFontWeight" } ] }, "labelLimit": { "description": "Maximum allowed pixel width of axis tick labels.\n\n__Default value:__ `180`", "type": "number" }, "labelLineHeight": { "description": "Line height in pixels for multi-line label text.", "type": "number" }, "labelOffset": { "anyOf": [ { "description": "Position offset in pixels to apply to labels, in addition to tickOffset.\n\n__Default value:__ `0`", "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "labelOpacity": { "anyOf": [ { "description": "The opacity of the labels.", "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "labelOverlap": { "$ref": "#/definitions/LabelOverlap", "description": "The strategy to use for resolving overlap of axis labels. If `false` (the default), no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used (this works well for standard linear axes). If set to `\"greedy\"`, a linear scan of the labels is performed, removing any labels that overlaps with the last visible label (this often works better for log-scaled axes).\n\n__Default value:__ `true` for non-nominal fields with non-log scales; `\"greedy\"` for log scales; otherwise `false`." }, "labelPadding": { "anyOf": [ { "description": "The padding in pixels between labels and ticks.\n\n__Default value:__ `2`", "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "labelSeparation": { "description": "The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default `0`). This property is ignored if *labelOverlap* resolution is not enabled.", "type": "number" }, "labels": { "description": "A boolean flag indicating if labels should be included as part of the axis.\n\n__Default value:__ `true`.", "type": "boolean" }, "maxExtent": { "description": "The maximum extent in pixels that axis ticks and labels should use. This determines a maximum offset value for axis titles.\n\n__Default value:__ `undefined`.", "type": "number" }, "minExtent": { "description": "The minimum extent in pixels that axis ticks and labels should use. This determines a minimum offset value for axis titles.\n\n__Default value:__ `30` for y-axis; `undefined` for x-axis.", "type": "number" }, "offset": { "description": "The offset, in pixels, by which to displace the axis from the edge of the enclosing group or data rectangle.\n\n__Default value:__ derived from the [axis config](https://vega.github.io/vega-lite/docs/config.html#facet-scale-config)'s `offset` (`0` by default)", "type": "number" }, "orient": { "$ref": "#/definitions/AxisOrient", "description": "The orientation of the axis. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`. The orientation can be used to further specialize the axis type (e.g., a y-axis oriented towards the right edge of the chart).\n\n__Default value:__ `\"bottom\"` for x-axes and `\"left\"` for y-axes." }, "position": { "description": "The anchor position of the axis in pixels. For x-axes with top or bottom orientation, this sets the axis group x coordinate. For y-axes with left or right orientation, this sets the axis group y coordinate.\n\n__Default value__: `0`", "type": "number" }, "style": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "description": "A string or array of strings indicating the name of custom styles to apply to the axis. A style is a named collection of axis property defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles.\n\n__Default value:__ (none)\n__Note:__ Any specified style will augment the default style. For example, an x-axis mark with `\"style\": \"foo\"` will use `config.axisX` and `config.style.foo` (the specified style `\"foo\"` has higher precedence)." }, "tickBand": { "description": "For band scales, indicates if ticks and grid lines should be placed at the center of a band (default) or at the band extents to indicate intervals.", "enum": [ "center", "extent" ], "type": "string" }, "tickColor": { "anyOf": [ { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "The color of the axis's tick.\n\n__Default value:__ `\"gray\"`" }, { "$ref": "#/definitions/ConditionalAxisColor" } ] }, "tickCount": { "description": "A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are \"nice\" (multiples of 2, 5, 10) and lie within the underlying scale's range.\n\n__Default value__: Determine using a formula `ceil(width/40)` for x and `ceil(height/40)` for y.", "minimum": 0, "type": "number" }, "tickDash": { "anyOf": [ { "description": "An array of alternating [stroke, space] lengths for dashed tick mark lines.", "items": { "type": "number" }, "type": "array" }, { "$ref": "#/definitions/ConditionalAxisNumberArray" } ] }, "tickDashOffset": { "anyOf": [ { "description": "The pixel offset at which to start drawing with the tick mark dash array.", "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "tickExtra": { "description": "Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for `band` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with `\"bandPosition\": 1` and an axis `\"padding\"` value of `0`.", "type": "boolean" }, "tickMinStep": { "description": "The minimum desired step between axis ticks, in terms of scale domain values. For example, a value of `1` indicates that ticks should not be less than 1 unit apart. If `tickMinStep` is specified, the `tickCount` value will be adjusted, if necessary, to enforce the minimum step value.\n\n__Default value__: `undefined`", "type": "number" }, "tickOffset": { "description": "Position offset in pixels to apply to ticks, labels, and gridlines.", "type": "number" }, "tickOpacity": { "anyOf": [ { "description": "Opacity of the ticks.", "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "tickRound": { "description": "Boolean flag indicating if pixel position values should be rounded to the nearest integer.\n\n__Default value:__ `true`", "type": "boolean" }, "tickSize": { "anyOf": [ { "description": "The size in pixels of axis ticks.\n\n__Default value:__ `5`", "minimum": 0, "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "tickWidth": { "anyOf": [ { "description": "The width, in pixels, of ticks.\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "ticks": { "description": "Boolean value that determines whether the axis should include ticks.\n\n__Default value:__ `true`", "type": "boolean" }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "titleAlign": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment of axis titles." }, "titleAnchor": { "$ref": "#/definitions/TitleAnchor", "description": "Text anchor position for placing axis titles." }, "titleAngle": { "description": "Angle in degrees of axis titles.", "type": "number" }, "titleBaseline": { "$ref": "#/definitions/TextBaseline", "description": "Vertical text baseline for axis titles." }, "titleColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "Color of the title, can be in hex color code or regular color name." }, "titleFont": { "description": "Font of the title. (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "titleFontSize": { "description": "Font size of the title.", "minimum": 0, "type": "number" }, "titleFontStyle": { "$ref": "#/definitions/FontStyle", "description": "Font style of the title." }, "titleFontWeight": { "$ref": "#/definitions/FontWeight", "description": "Font weight of the title.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "titleLimit": { "description": "Maximum allowed pixel width of axis titles.", "minimum": 0, "type": "number" }, "titleLineHeight": { "description": "Line height in pixels for multi-line title text.", "type": "number" }, "titleOpacity": { "description": "Opacity of the axis title.", "type": "number" }, "titlePadding": { "description": "The padding, in pixels, between title and axis.", "type": "number" }, "titleX": { "description": "X-coordinate of the axis title relative to the axis group.", "type": "number" }, "titleY": { "description": "Y-coordinate of the axis title relative to the axis group.", "type": "number" }, "translate": { "description": "Translation offset in pixels applied to the axis group mark x and y. If specified, overrides the default behavior of a 0.5 offset to pixel-align stroked lines.", "type": "number" }, "values": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "items": { "type": "string" }, "type": "array" }, { "items": { "type": "boolean" }, "type": "array" }, { "items": { "$ref": "#/definitions/DateTime" }, "type": "array" } ], "description": "Explicitly set the visible axis tick values." }, "zindex": { "description": "A non-negative integer indicating the z-index of the axis.\nIf zindex is 0, axes should be drawn behind all chart elements.\nTo put them in front, set `zindex` to `1` or more.\n\n__Default value:__ `0` (behind the marks).", "minimum": 0, "type": "number" } }, "type": "object" }, "AxisConfig": { "additionalProperties": false, "properties": { "bandPosition": { "description": "An interpolation fraction indicating where, for `band` scales, axis ticks should be positioned. A value of `0` places ticks at the left edge of their bands. A value of `0.5` places ticks in the middle of their bands.\n\n __Default value:__ `0.5`", "type": "number" }, "disable": { "description": "Disable axis by default.", "type": "boolean" }, "domain": { "description": "A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis.\n\n__Default value:__ `true`", "type": "boolean" }, "domainColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "Color of axis domain line.\n\n__Default value:__ `\"gray\"`." }, "domainDash": { "description": "An array of alternating [stroke, space] lengths for dashed domain lines.", "items": { "type": "number" }, "type": "array" }, "domainDashOffset": { "description": "The pixel offset at which to start drawing with the domain dash array.", "type": "number" }, "domainOpacity": { "description": "Opacity of the axis domain line.", "type": "number" }, "domainWidth": { "description": "Stroke width of axis domain line\n\n__Default value:__ `1`", "type": "number" }, "grid": { "description": "A boolean flag indicating if grid lines should be included as part of the axis\n\n__Default value:__ `true` for [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous) that are not binned; otherwise, `false`.", "type": "boolean" }, "gridColor": { "anyOf": [ { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "Color of gridlines.\n\n__Default value:__ `\"lightGray\"`." }, { "$ref": "#/definitions/ConditionalAxisColor" } ] }, "gridDash": { "anyOf": [ { "description": "An array of alternating [stroke, space] lengths for dashed grid lines.", "items": { "type": "number" }, "type": "array" }, { "$ref": "#/definitions/ConditionalAxisNumberArray" } ] }, "gridDashOffset": { "anyOf": [ { "description": "The pixel offset at which to start drawing with the grid dash array.", "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "gridOpacity": { "anyOf": [ { "description": "The stroke opacity of grid (value between [0,1])\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "gridWidth": { "anyOf": [ { "description": "The grid width, in pixels.\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "labelAlign": { "anyOf": [ { "$ref": "#/definitions/Align", "description": "Horizontal text alignment of axis tick labels, overriding the default setting for the current axis orientation." }, { "$ref": "#/definitions/ConditionalAxisLabelAlign" } ] }, "labelAngle": { "description": "The rotation angle of the axis labels.\n\n__Default value:__ `-90` for nominal and ordinal fields; `0` otherwise.", "maximum": 360, "minimum": -360, "type": "number" }, "labelBaseline": { "anyOf": [ { "$ref": "#/definitions/TextBaseline", "description": "Vertical text baseline of axis tick labels, overriding the default setting for the current axis orientation. Can be `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`." }, { "$ref": "#/definitions/ConditionalAxisLabelBaseline" } ] }, "labelBound": { "description": "Indicates if labels should be hidden if they exceed the axis range. If `false` (the default) no bounds overlap analysis is performed. If `true`, labels will be hidden if they exceed the axis range by more than 1 pixel. If this property is a number, it specifies the pixel tolerance: the maximum amount by which a label bounding box may exceed the axis range.\n\n__Default value:__ `false`.", "type": [ "number", "boolean" ] }, "labelColor": { "anyOf": [ { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "The color of the tick label, can be in hex color code or regular color name." }, { "$ref": "#/definitions/ConditionalAxisColor" } ] }, "labelExpr": { "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.", "type": "string" }, "labelFlush": { "description": "Indicates if the first and last axis labels should be aligned flush with the scale range. Flush alignment for a horizontal axis will left-align the first label and right-align the last label. For vertical axes, bottom and top text baselines are applied instead. If this property is a number, it also indicates the number of pixels by which to offset the first and last labels; for example, a value of 2 will flush-align the first and last labels and also push them 2 pixels outward from the center of the axis. The additional adjustment can sometimes help the labels better visually group with corresponding axis ticks.\n\n__Default value:__ `true` for axis of a continuous x-scale. Otherwise, `false`.", "type": [ "boolean", "number" ] }, "labelFlushOffset": { "description": "Indicates the number of pixels by which to offset flush-adjusted labels. For example, a value of `2` will push flush-adjusted labels 2 pixels outward from the center of the axis. Offsets can help the labels better visually group with corresponding axis ticks.\n\n__Default value:__ `0`.", "type": "number" }, "labelFont": { "anyOf": [ { "description": "The font of the tick label.", "type": "string" }, { "$ref": "#/definitions/ConditionalAxisString" } ] }, "labelFontSize": { "anyOf": [ { "description": "The font size of the label, in pixels.", "minimum": 0, "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "labelFontStyle": { "anyOf": [ { "$ref": "#/definitions/FontStyle", "description": "Font style of the title." }, { "$ref": "#/definitions/ConditionalAxisLabelFontStyle" } ] }, "labelFontWeight": { "anyOf": [ { "$ref": "#/definitions/FontWeight", "description": "Font weight of axis tick labels." }, { "$ref": "#/definitions/ConditionalAxisLabelFontWeight" } ] }, "labelLimit": { "description": "Maximum allowed pixel width of axis tick labels.\n\n__Default value:__ `180`", "type": "number" }, "labelLineHeight": { "description": "Line height in pixels for multi-line label text.", "type": "number" }, "labelOffset": { "anyOf": [ { "description": "Position offset in pixels to apply to labels, in addition to tickOffset.\n\n__Default value:__ `0`", "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "labelOpacity": { "anyOf": [ { "description": "The opacity of the labels.", "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "labelOverlap": { "$ref": "#/definitions/LabelOverlap", "description": "The strategy to use for resolving overlap of axis labels. If `false` (the default), no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used (this works well for standard linear axes). If set to `\"greedy\"`, a linear scan of the labels is performed, removing any labels that overlaps with the last visible label (this often works better for log-scaled axes).\n\n__Default value:__ `true` for non-nominal fields with non-log scales; `\"greedy\"` for log scales; otherwise `false`." }, "labelPadding": { "anyOf": [ { "description": "The padding in pixels between labels and ticks.\n\n__Default value:__ `2`", "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "labelSeparation": { "description": "The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default `0`). This property is ignored if *labelOverlap* resolution is not enabled.", "type": "number" }, "labels": { "description": "A boolean flag indicating if labels should be included as part of the axis.\n\n__Default value:__ `true`.", "type": "boolean" }, "maxExtent": { "description": "The maximum extent in pixels that axis ticks and labels should use. This determines a maximum offset value for axis titles.\n\n__Default value:__ `undefined`.", "type": "number" }, "minExtent": { "description": "The minimum extent in pixels that axis ticks and labels should use. This determines a minimum offset value for axis titles.\n\n__Default value:__ `30` for y-axis; `undefined` for x-axis.", "type": "number" }, "offset": { "description": "The offset, in pixels, by which to displace the axis from the edge of the enclosing group or data rectangle.\n\n__Default value:__ derived from the [axis config](https://vega.github.io/vega-lite/docs/config.html#facet-scale-config)'s `offset` (`0` by default)", "type": "number" }, "orient": { "$ref": "#/definitions/AxisOrient", "description": "The orientation of the axis. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`. The orientation can be used to further specialize the axis type (e.g., a y-axis oriented towards the right edge of the chart).\n\n__Default value:__ `\"bottom\"` for x-axes and `\"left\"` for y-axes." }, "style": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "description": "A string or array of strings indicating the name of custom styles to apply to the axis. A style is a named collection of axis property defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles.\n\n__Default value:__ (none)\n__Note:__ Any specified style will augment the default style. For example, an x-axis mark with `\"style\": \"foo\"` will use `config.axisX` and `config.style.foo` (the specified style `\"foo\"` has higher precedence)." }, "tickBand": { "description": "For band scales, indicates if ticks and grid lines should be placed at the center of a band (default) or at the band extents to indicate intervals.", "enum": [ "center", "extent" ], "type": "string" }, "tickColor": { "anyOf": [ { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "The color of the axis's tick.\n\n__Default value:__ `\"gray\"`" }, { "$ref": "#/definitions/ConditionalAxisColor" } ] }, "tickCount": { "description": "A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are \"nice\" (multiples of 2, 5, 10) and lie within the underlying scale's range.\n\n__Default value__: Determine using a formula `ceil(width/40)` for x and `ceil(height/40)` for y.", "minimum": 0, "type": "number" }, "tickDash": { "anyOf": [ { "description": "An array of alternating [stroke, space] lengths for dashed tick mark lines.", "items": { "type": "number" }, "type": "array" }, { "$ref": "#/definitions/ConditionalAxisNumberArray" } ] }, "tickDashOffset": { "anyOf": [ { "description": "The pixel offset at which to start drawing with the tick mark dash array.", "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "tickExtra": { "description": "Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for `band` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with `\"bandPosition\": 1` and an axis `\"padding\"` value of `0`.", "type": "boolean" }, "tickOffset": { "description": "Position offset in pixels to apply to ticks, labels, and gridlines.", "type": "number" }, "tickOpacity": { "anyOf": [ { "description": "Opacity of the ticks.", "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "tickRound": { "description": "Boolean flag indicating if pixel position values should be rounded to the nearest integer.\n\n__Default value:__ `true`", "type": "boolean" }, "tickSize": { "anyOf": [ { "description": "The size in pixels of axis ticks.\n\n__Default value:__ `5`", "minimum": 0, "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "tickWidth": { "anyOf": [ { "description": "The width, in pixels, of ticks.\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, { "$ref": "#/definitions/ConditionalAxisNumber" } ] }, "ticks": { "description": "Boolean value that determines whether the axis should include ticks.\n\n__Default value:__ `true`", "type": "boolean" }, "title": { "description": "Set to null to disable title for the axis, legend, or header.", "type": "null" }, "titleAlign": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment of axis titles." }, "titleAnchor": { "$ref": "#/definitions/TitleAnchor", "description": "Text anchor position for placing axis titles." }, "titleAngle": { "description": "Angle in degrees of axis titles.", "type": "number" }, "titleBaseline": { "$ref": "#/definitions/TextBaseline", "description": "Vertical text baseline for axis titles." }, "titleColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "Color of the title, can be in hex color code or regular color name." }, "titleFont": { "description": "Font of the title. (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "titleFontSize": { "description": "Font size of the title.", "minimum": 0, "type": "number" }, "titleFontStyle": { "$ref": "#/definitions/FontStyle", "description": "Font style of the title." }, "titleFontWeight": { "$ref": "#/definitions/FontWeight", "description": "Font weight of the title.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "titleLimit": { "description": "Maximum allowed pixel width of axis titles.", "minimum": 0, "type": "number" }, "titleLineHeight": { "description": "Line height in pixels for multi-line title text.", "type": "number" }, "titleOpacity": { "description": "Opacity of the axis title.", "type": "number" }, "titlePadding": { "description": "The padding, in pixels, between title and axis.", "type": "number" }, "titleX": { "description": "X-coordinate of the axis title relative to the axis group.", "type": "number" }, "titleY": { "description": "Y-coordinate of the axis title relative to the axis group.", "type": "number" }, "translate": { "description": "Translation offset in pixels applied to the axis group mark x and y. If specified, overrides the default behavior of a 0.5 offset to pixel-align stroked lines.", "type": "number" } }, "type": "object" }, "AxisOrient": { "enum": [ "top", "bottom", "left", "right" ], "type": "string" }, "AxisResolveMap": { "additionalProperties": false, "properties": { "x": { "$ref": "#/definitions/ResolveMode" }, "y": { "$ref": "#/definitions/ResolveMode" } }, "type": "object" }, "BarConfig": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of `\"left\"`, `\"right\"`, `\"center\"`." }, "angle": { "description": "The rotation angle of the text, in degrees.", "maximum": 360, "minimum": 0, "type": "number" }, "aspect": { "description": "Whether to keep aspect ratio of image marks.", "type": "boolean" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical text baseline. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `lineHeight` rather than `fontSize` alone." }, "binSpacing": { "description": "Offset between bars for binned field. The ideal value for this is either 0 (preferred by statisticians) or 1 (Vega-Lite default, D3 example style).\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, "blend": { "$ref": "#/definitions/Blend", "description": "The color blend mode for drawing an item on its current background. Any valid [CSS mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) value can be used.\n\n__Default value: `\"source-over\"`" }, "color": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" } ], "description": "Default color.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`." }, "continuousBandSize": { "description": "The default size of the bars on continuous scales.\n\n__Default value:__ `5`", "minimum": 0, "type": "number" }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusBottomLeft": { "description": "The radius in pixels of rounded rectangle bottom left corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusBottomRight": { "description": "The radius in pixels of rounded rectangle bottom right corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusEnd": { "description": "- For vertical bars, top-left and top-right corner radius.\n- For horizontal bars, top-right and bottom-right corner radius.", "type": "number" }, "cornerRadiusTopLeft": { "description": "The radius in pixels of rounded rectangle top right corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusTopRight": { "description": "The radius in pixels of rounded rectangle top left corner.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "dir": { "$ref": "#/definitions/TextDirection", "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`" }, "discreteBandSize": { "description": "The default size of the bars with discrete dimensions. If unspecified, the default size is `step-2`, which provides 2 pixel offset between bars.", "minimum": 0, "type": "number" }, "dx": { "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "dy": { "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "ellipsis": { "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`", "type": "string" }, "fill": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" }, { "type": "null" } ], "description": "Default Fill Color. This property has higher precedence than `config.color`.\n\n__Default value:__ (None)" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "filled": { "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for all `point`, `line`, and `rule` marks as well as `geoshape` marks for [`graticule`](https://vega.github.io/vega-lite/docs/data.html#graticule) data sources; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).", "type": "boolean" }, "font": { "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "fontSize": { "description": "The font size, in pixels.\n\n__Default value:__ `11`", "minimum": 0, "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style (e.g., `\"italic\"`)." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "height": { "description": "Height of the marks.", "type": "number" }, "href": { "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.", "format": "uri", "type": "string" }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "invalid": { "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.", "enum": [ "filter", null ], "type": [ "string", "null" ] }, "limit": { "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0` -- indicating no limit", "type": "number" }, "lineBreak": { "description": "A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued.", "type": "string" }, "lineHeight": { "description": "The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.", "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "order": { "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.", "type": [ "null", "boolean" ] }, "orient": { "$ref": "#/definitions/Orientation", "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored." }, "radius": { "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.", "minimum": 0, "type": "number" }, "shape": { "anyOf": [ { "$ref": "#/definitions/SymbolShape" }, { "type": "string" } ], "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`" }, "size": { "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__\n- `30` for point, circle, square marks; width/height's `step`\n- `2` for bar marks with discrete dimensions;\n- `5` for bar marks with continuous dimensions;\n- `11` for text marks.", "minimum": 0, "type": "number" }, "stroke": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" }, { "type": "null" } ], "description": "Default Stroke Color. This property has higher precedence than `config.color`.\n\n__Default value:__ (None)" }, "strokeCap": { "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"butt\"`", "type": "string" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`", "type": "string" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOffset": { "description": "The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "tension": { "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).", "type": "number" }, "text": { "$ref": "#/definitions/Text", "description": "Placeholder text if the `text` channel is not specified" }, "theta": { "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".", "type": "number" }, "timeUnitBand": { "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step.\nIf set to `0.5`, bandwidth of the marks will be half of the time unit band step.", "type": "number" }, "timeUnitBandPosition": { "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step.\nIf set to `0.5`, the marks will be positioned in the middle of the time unit band step.", "type": "number" }, "tooltip": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "boolean" }, { "$ref": "#/definitions/TooltipContent" }, { "type": "null" } ], "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite.\n\n__Default value:__ `null`" }, "width": { "description": "Width of the marks.", "type": "number" }, "x": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "y": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." } }, "type": "object" }, "BaseTitleNoValueRefs": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment for title text. One of `\"left\"`, `\"center\"`, or `\"right\"`." }, "anchor": { "$ref": "#/definitions/TitleAnchor", "description": "The anchor position for placing the title and subtitle text. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title." }, "angle": { "description": "Angle in degrees of title and subtitle text.", "type": "number" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "Vertical text baseline for title and subtitle text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`." }, "color": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "Text color for title text." }, "dx": { "description": "Delta offset for title and subtitle text x-coordinate.", "type": "number" }, "dy": { "description": "Delta offset for title and subtitle text y-coordinate.", "type": "number" }, "font": { "description": "Font name for title text.", "type": "string" }, "fontSize": { "description": "Font size in pixels for title text.", "minimum": 0, "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "Font style for title text." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "Font weight for title text.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "frame": { "anyOf": [ { "$ref": "#/definitions/TitleFrame" }, { "type": "string" } ], "description": "The reference frame for the anchor position, one of `\"bounds\"` (to anchor relative to the full bounding box) or `\"group\"` (to anchor relative to the group width or height)." }, "limit": { "description": "The maximum allowed length in pixels of title and subtitle text.", "minimum": 0, "type": "number" }, "lineHeight": { "description": "Line height in pixels for multi-line title text.", "type": "number" }, "offset": { "description": "The orthogonal offset in pixels by which to displace the title group from its position along the edge of the chart.", "type": "number" }, "orient": { "$ref": "#/definitions/TitleOrient", "description": "Default title orientation (`\"top\"`, `\"bottom\"`, `\"left\"`, or `\"right\"`)" }, "subtitleColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "Text color for subtitle text." }, "subtitleFont": { "description": "Font name for subtitle text.", "type": "string" }, "subtitleFontSize": { "description": "Font size in pixels for subtitle text.", "minimum": 0, "type": "number" }, "subtitleFontStyle": { "$ref": "#/definitions/FontStyle", "description": "Font style for subtitle text." }, "subtitleFontWeight": { "$ref": "#/definitions/FontWeight", "description": "Font weight for subtitle text.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "subtitleLineHeight": { "description": "Line height in pixels for multi-line subtitle text.", "type": "number" }, "subtitlePadding": { "description": "The padding in pixels between title and subtitle text.", "type": "number" } }, "type": "object" }, "Baseline": { "enum": [ "top", "middle", "bottom" ], "type": "string" }, "BinExtent": { "anyOf": [ { "items": [ { "type": "number" }, { "type": "number" } ], "maxItems": 2, "minItems": 2, "type": "array" }, { "$ref": "#/definitions/SelectionExtent" } ] }, "BinParams": { "additionalProperties": false, "description": "Binning properties or boolean flag for determining whether to bin data or not.", "properties": { "anchor": { "description": "A value in the binned domain at which to anchor the bins, shifting the bin boundaries if necessary to ensure that a boundary aligns with the anchor value.\n\n__Default value:__ the minimum bin extent value", "type": "number" }, "base": { "description": "The number base to use for automatic bin determination (default is base 10).\n\n__Default value:__ `10`", "type": "number" }, "binned": { "description": "When set to `true`, Vega-Lite treats the input data as already binned.", "type": "boolean" }, "divide": { "description": "Scale factors indicating allowable subdivisions. The default value is [5, 2], which indicates that for base 10 numbers (the default base), the method may consider dividing bin sizes by 5 and/or 2. For example, for an initial step size of 10, the method can check if bin sizes of 2 (= 10/5), 5 (= 10/2), or 1 (= 10/(5*2)) might also satisfy the given constraints.\n\n__Default value:__ `[5, 2]`", "items": [ { "type": "number" }, { "type": "number" } ], "maxItems": 2, "minItems": 1, "type": "array" }, "extent": { "$ref": "#/definitions/BinExtent", "description": "A two-element (`[min, max]`) array indicating the range of desired bin values." }, "maxbins": { "description": "Maximum number of bins.\n\n__Default value:__ `6` for `row`, `column` and `shape` channels; `10` for other channels", "minimum": 2, "type": "number" }, "minstep": { "description": "A minimum allowable step size (particularly useful for integer values).", "type": "number" }, "nice": { "description": "If true, attempts to make the bin boundaries use human-friendly boundaries, such as multiples of ten.\n\n__Default value:__ `true`", "type": "boolean" }, "step": { "description": "An exact step size to use between bins.\n\n__Note:__ If provided, options such as maxbins will be ignored.", "type": "number" }, "steps": { "description": "An array of allowable step sizes to choose from.", "items": { "type": "number" }, "minItems": 1, "type": "array" } }, "type": "object" }, "BinTransform": { "additionalProperties": false, "properties": { "as": { "anyOf": [ { "$ref": "#/definitions/FieldName" }, { "items": { "$ref": "#/definitions/FieldName" }, "type": "array" } ], "description": "The output fields at which to write the start and end bin values.\nThis can be either a string or an array of strings with two elements denoting the name for the fields for bin start and bin end respectively.\nIf a single string (e.g., `\"val\"`) is provided, the end field will be `\"val_end\"`." }, "bin": { "anyOf": [ { "enum": [ true ], "type": "boolean" }, { "$ref": "#/definitions/BinParams" } ], "description": "An object indicating bin properties, or simply `true` for using default bin parameters." }, "field": { "$ref": "#/definitions/FieldName", "description": "The data field to bin." } }, "required": [ "bin", "field", "as" ], "type": "object" }, "BindCheckbox": { "additionalProperties": false, "properties": { "debounce": { "type": "number" }, "element": { "$ref": "#/definitions/Element" }, "input": { "enum": [ "checkbox" ], "type": "string" }, "name": { "type": "string" }, "type": { "type": "string" } }, "required": [ "input" ], "type": "object" }, "BindRadioSelect": { "additionalProperties": false, "properties": { "debounce": { "type": "number" }, "element": { "$ref": "#/definitions/Element" }, "input": { "enum": [ "radio", "select" ], "type": "string" }, "labels": { "items": { "type": "string" }, "type": "array" }, "name": { "type": "string" }, "options": { "items": { }, "type": "array" }, "type": { "type": "string" } }, "required": [ "input", "options" ], "type": "object" }, "BindRange": { "additionalProperties": false, "properties": { "debounce": { "type": "number" }, "element": { "$ref": "#/definitions/Element" }, "input": { "enum": [ "range" ], "type": "string" }, "max": { "type": "number" }, "min": { "type": "number" }, "name": { "type": "string" }, "step": { "type": "number" }, "type": { "type": "string" } }, "required": [ "input" ], "type": "object" }, "Binding": { "anyOf": [ { "$ref": "#/definitions/BindCheckbox" }, { "$ref": "#/definitions/BindRadioSelect" }, { "$ref": "#/definitions/BindRange" }, { "$ref": "#/definitions/InputBinding" } ] }, "Blend": { "enum": [ null, "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity" ], "type": [ "null", "string" ] }, "BoxPlot": { "enum": [ "boxplot" ], "type": "string" }, "BoxPlotConfig": { "additionalProperties": false, "properties": { "box": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "extent": { "anyOf": [ { "enum": [ "min-max" ], "type": "string" }, { "type": "number" } ], "description": "The extent of the whiskers. Available options include:\n- `\"min-max\"`: min and max are the lower and upper whiskers respectively.\n- A number representing multiple of the interquartile range. This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range _[Q1 - k * IQR, Q3 + k * IQR]_ where _Q1_ and _Q3_ are the first and third quartiles while _IQR_ is the interquartile range (_Q3-Q1_).\n\n__Default value:__ `1.5`." }, "median": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "outliers": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "rule": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "size": { "description": "Size of the box and median tick of a box plot", "type": "number" }, "ticks": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] } }, "type": "object" }, "BoxPlotDef": { "additionalProperties": false, "properties": { "box": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "clip": { "description": "Whether a composite mark be clipped to the enclosing group’s width and height.", "type": "boolean" }, "color": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" } ], "description": "Default color.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`." }, "extent": { "anyOf": [ { "enum": [ "min-max" ], "type": "string" }, { "type": "number" } ], "description": "The extent of the whiskers. Available options include:\n- `\"min-max\"`: min and max are the lower and upper whiskers respectively.\n- A number representing multiple of the interquartile range. This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range _[Q1 - k * IQR, Q3 + k * IQR]_ where _Q1_ and _Q3_ are the first and third quartiles while _IQR_ is the interquartile range (_Q3-Q1_).\n\n__Default value:__ `1.5`." }, "median": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "opacity": { "description": "The opacity (value between [0,1]) of the mark.", "type": "number" }, "orient": { "$ref": "#/definitions/Orientation", "description": "Orientation of the box plot. This is normally automatically determined based on types of fields on x and y channels. However, an explicit `orient` be specified when the orientation is ambiguous.\n\n__Default value:__ `\"vertical\"`." }, "outliers": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "rule": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "size": { "description": "Size of the box and median tick of a box plot", "type": "number" }, "ticks": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "type": { "$ref": "#/definitions/BoxPlot", "description": "The mark type. This could a primitive mark type\n(one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`)\nor a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`)." } }, "required": [ "type" ], "type": "object" }, "BrushConfig": { "additionalProperties": false, "properties": { "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the interval mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "fill": { "$ref": "#/definitions/Color", "description": "The fill color of the interval mark.\n\n__Default value:__ `\"#333333\"`" }, "fillOpacity": { "description": "The fill opacity of the interval mark (a value between `0` and `1`).\n\n__Default value:__ `0.125`", "type": "number" }, "stroke": { "$ref": "#/definitions/Color", "description": "The stroke color of the interval mark.\n\n__Default value:__ `\"#ffffff\"`" }, "strokeDash": { "description": "An array of alternating stroke and space lengths, for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) with which to begin drawing the stroke dash array.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity of the interval mark (a value between `0` and `1`).", "type": "number" }, "strokeWidth": { "description": "The stroke width of the interval mark.", "type": "number" } }, "type": "object" }, "CalculateTransform": { "additionalProperties": false, "properties": { "as": { "$ref": "#/definitions/FieldName", "description": "The field for storing the computed formula value." }, "calculate": { "description": "A [expression](https://vega.github.io/vega-lite/docs/types.html#expression) string. Use the variable `datum` to refer to the current data object.", "type": "string" } }, "required": [ "calculate", "as" ], "type": "object" }, "Categorical": { "enum": [ "accent", "category10", "category20", "category20b", "category20c", "dark2", "paired", "pastel1", "pastel2", "set1", "set2", "set3", "tableau10", "tableau20" ], "type": "string" }, "Color": { "anyOf": [ { "$ref": "#/definitions/ColorName" }, { "$ref": "#/definitions/HexColor" }, { "type": "string" } ] }, "ColorGradientFieldDefWithCondition": { "$ref": "#/definitions/FieldDefWithCondition" }, "ColorGradientValueWithCondition": { "$ref": "#/definitions/ValueWithCondition" }, "ColorName": { "enum": [ "black", "silver", "gray", "white", "maroon", "red", "purple", "fuchsia", "green", "lime", "olive", "yellow", "navy", "blue", "teal", "aqua", "orange", "aliceblue", "antiquewhite", "aquamarine", "azure", "beige", "bisque", "blanchedalmond", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "gainsboro", "ghostwhite", "gold", "goldenrod", "greenyellow", "grey", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "limegreen", "linen", "magenta", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "oldlace", "olivedrab", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "thistle", "tomato", "turquoise", "violet", "wheat", "whitesmoke", "yellowgreen", "rebeccapurple" ], "type": "string" }, "ColorScheme": { "anyOf": [ { "$ref": "#/definitions/Categorical" }, { "$ref": "#/definitions/SequentialSingleHue" }, { "$ref": "#/definitions/SequentialMultiHue" }, { "$ref": "#/definitions/Diverging" }, { "$ref": "#/definitions/Cyclical" } ] }, "Encoding": { "additionalProperties": false, "properties": { "color": { "anyOf": [ { "$ref": "#/definitions/ColorGradientFieldDefWithCondition" }, { "$ref": "#/definitions/ColorGradientValueWithCondition" } ], "description": "Color of the marks – either fill or stroke color based on the `filled` property of mark definition.\nBy default, `color` represents fill color for `\"area\"`, `\"bar\"`, `\"tick\"`,\n`\"text\"`, `\"trail\"`, `\"circle\"`, and `\"square\"` / stroke color for `\"line\"` and `\"point\"`.\n\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `color` property.\n\n_Note:_\n1) For fine-grained control over both fill and stroke colors of the marks, please use the `fill` and `stroke` channels. The `fill` or `stroke` encodings have higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified.\n2) See the scale documentation for more information about customizing [color scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme)." }, "detail": { "anyOf": [ { "$ref": "#/definitions/FieldDefWithoutScale" }, { "items": { "$ref": "#/definitions/FieldDefWithoutScale" }, "type": "array" } ], "description": "Additional levels of detail for grouping data in aggregate views and\nin line, trail, and area marks without mapping data to a specific visual channel." }, "fill": { "anyOf": [ { "$ref": "#/definitions/ColorGradientFieldDefWithCondition" }, { "$ref": "#/definitions/ColorGradientValueWithCondition" } ], "description": "Fill color of the marks.\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `color` property.\n\n_Note:_ The `fill` encoding has higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified." }, "fillOpacity": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueWithCondition" } ], "description": "Fill opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `fillOpacity` property." }, "href": { "anyOf": [ { "$ref": "#/definitions/StringFieldDefWithCondition" }, { "$ref": "#/definitions/StringValueWithCondition" } ], "description": "A URL to load upon mouse click." }, "key": { "$ref": "#/definitions/FieldDefWithoutScale", "description": "A data field to use as a unique key for data binding. When a visualization’s data is updated, the key value will be used to match data elements to existing mark instances. Use a key channel to enable object constancy for transitions over dynamic data." }, "latitude": { "anyOf": [ { "$ref": "#/definitions/LatLongFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Latitude position of geographically projected marks." }, "latitude2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Latitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`." }, "longitude": { "anyOf": [ { "$ref": "#/definitions/LatLongFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Longitude position of geographically projected marks." }, "longitude2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Longitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`." }, "opacity": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueWithCondition" } ], "description": "Opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `opacity` property." }, "order": { "anyOf": [ { "$ref": "#/definitions/OrderFieldDef" }, { "items": { "$ref": "#/definitions/OrderFieldDef" }, "type": "array" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Order of the marks.\n- For stacked marks, this `order` channel encodes [stack order](https://vega.github.io/vega-lite/docs/stack.html#order).\n- For line and trail marks, this `order` channel encodes order of data points in the lines. This can be useful for creating [a connected scatterplot](https://vega.github.io/vega-lite/examples/connected_scatterplot.html). Setting `order` to `{\"value\": null}` makes the line marks use the original order in the data sources.\n- Otherwise, this `order` channel encodes layer order of the marks.\n\n__Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating additional aggregation grouping." }, "shape": { "anyOf": [ { "$ref": "#/definitions/ShapeFieldDefWithCondition" }, { "$ref": "#/definitions/ShapeValueWithCondition" } ], "description": "Shape of the mark.\n\n1. For `point` marks the supported values include:\n - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n - the line symbol `\"stroke\"`\n - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n2. For `geoshape` marks it should be a field definition of the geojson data\n\n__Default value:__ If undefined, the default shape depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#point-config)'s `shape` property. (`\"circle\"` if unset.)" }, "size": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueWithCondition" } ], "description": "Size of the mark.\n- For `\"point\"`, `\"square\"` and `\"circle\"`, – the symbol size, or pixel area of the mark.\n- For `\"bar\"` and `\"tick\"` – the bar and tick's size.\n- For `\"text\"` – the text's font size.\n- Size is unsupported for `\"line\"`, `\"area\"`, and `\"rect\"`. (Use `\"trail\"` instead of line with varying size)" }, "stroke": { "anyOf": [ { "$ref": "#/definitions/ColorGradientFieldDefWithCondition" }, { "$ref": "#/definitions/ColorGradientValueWithCondition" } ], "description": "Stroke color of the marks.\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `color` property.\n\n_Note:_ The `stroke` encoding has higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified." }, "strokeDash": { "anyOf": [ { "$ref": "#/definitions/NumericArrayFieldDefWithCondition" }, { "$ref": "#/definitions/NumericArrayValueDefWithCondition" } ], "description": "Stroke dash of the marks.\n\n__Default value:__ `[1,0]` (No dash)." }, "strokeOpacity": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueWithCondition" } ], "description": "Stroke opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `strokeOpacity` property." }, "strokeWidth": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueWithCondition" } ], "description": "Stroke width of the marks.\n\n__Default value:__ If undefined, the default stroke width depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `strokeWidth` property." }, "text": { "anyOf": [ { "$ref": "#/definitions/TextFieldDefWithCondition" }, { "$ref": "#/definitions/TextValueWithCondition" } ], "description": "Text of the `text` mark." }, "tooltip": { "anyOf": [ { "$ref": "#/definitions/StringFieldDefWithCondition" }, { "$ref": "#/definitions/StringValueWithCondition" }, { "items": { "$ref": "#/definitions/StringFieldDef" }, "type": "array" }, { "type": "null" } ], "description": "The tooltip text to show upon mouse hover. Specifying `tooltip` encoding overrides [the `tooltip` property in the mark definition](https://vega.github.io/vega-lite/docs/mark.html#mark-def).\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite." }, "url": { "anyOf": [ { "$ref": "#/definitions/StringFieldDefWithCondition" }, { "$ref": "#/definitions/StringValueWithCondition" } ], "description": "The URL of an image mark." }, "x": { "anyOf": [ { "$ref": "#/definitions/PositionFieldDef" }, { "$ref": "#/definitions/XValueDef" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/XValueDef" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "xError": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`." }, "xError2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Secondary error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`." }, "y": { "anyOf": [ { "$ref": "#/definitions/PositionFieldDef" }, { "$ref": "#/definitions/YValueDef" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/YValueDef" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "yError": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`." }, "yError2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Secondary error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`." } }, "type": "object" }, "CompositeMark": { "anyOf": [ { "$ref": "#/definitions/BoxPlot" }, { "$ref": "#/definitions/ErrorBar" }, { "$ref": "#/definitions/ErrorBand" } ] }, "CompositeMarkDef": { "anyOf": [ { "$ref": "#/definitions/BoxPlotDef" }, { "$ref": "#/definitions/ErrorBarDef" }, { "$ref": "#/definitions/ErrorBandDef" } ] }, "CompositionConfig": { "additionalProperties": false, "properties": { "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "spacing": { "description": "The default spacing in pixels between composed sub-views.\n\n__Default value__: `20`", "type": "number" } }, "type": "object" }, "ConditionalMarkPropFieldDef": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate" }, { "$ref": "#/definitions/ConditionalSelection" } ] }, "ConditionalMarkPropFieldDef": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate>" }, { "$ref": "#/definitions/ConditionalSelection>" } ] }, "ConditionalStringFieldDef": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate" }, { "$ref": "#/definitions/ConditionalSelection" } ] }, "ConditionalValueDef<(Gradient|string|null)>": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate>" }, { "$ref": "#/definitions/ConditionalSelection>" } ] }, "ConditionalStringValueDef": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate" }, { "$ref": "#/definitions/ConditionalSelection" } ] }, "ConditionalValueDef": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate>" }, { "$ref": "#/definitions/ConditionalSelection>" } ] }, "ConditionalNumberValueDef": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate" }, { "$ref": "#/definitions/ConditionalSelection" } ] }, "ConditionalValueDef": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate>" }, { "$ref": "#/definitions/ConditionalSelection>" } ] }, "ConditionalValueDef": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate>" }, { "$ref": "#/definitions/ConditionalSelection>" } ] }, "ConditionalAxisColor": { "$ref": "#/definitions/ConditionalAxisProperty<(Color|null)>" }, "ConditionalAxisLabelAlign": { "$ref": "#/definitions/ConditionalAxisProperty<(Align|null)>" }, "ConditionalAxisLabelBaseline": { "$ref": "#/definitions/ConditionalAxisProperty<(TextBaseline|null)>" }, "ConditionalAxisLabelFontStyle": { "$ref": "#/definitions/ConditionalAxisProperty<(FontStyle|null)>" }, "ConditionalAxisLabelFontWeight": { "$ref": "#/definitions/ConditionalAxisProperty<(FontWeight|null)>" }, "ConditionalAxisNumber": { "$ref": "#/definitions/ConditionalAxisProperty<(number|null)>" }, "ConditionalAxisNumberArray": { "$ref": "#/definitions/ConditionalAxisProperty<(number[]|null)>" }, "ConditionalAxisProperty<(Align|null)>": { "additionalProperties": false, "properties": { "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate>" }, { "items": { "$ref": "#/definitions/ConditionalPredicate>" }, "type": "array" } ] }, "value": { "anyOf": [ { "$ref": "#/definitions/Align" }, { "type": "null" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "required": [ "condition", "value" ], "type": "object" }, "ConditionalAxisProperty<(Color|null)>": { "additionalProperties": false, "properties": { "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate>" }, { "items": { "$ref": "#/definitions/ConditionalPredicate>" }, "type": "array" } ] }, "value": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "type": "null" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "required": [ "condition", "value" ], "type": "object" }, "ConditionalAxisProperty<(FontStyle|null)>": { "additionalProperties": false, "properties": { "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate>" }, { "items": { "$ref": "#/definitions/ConditionalPredicate>" }, "type": "array" } ] }, "value": { "anyOf": [ { "$ref": "#/definitions/FontStyle" }, { "type": "null" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "required": [ "condition", "value" ], "type": "object" }, "ConditionalAxisProperty<(FontWeight|null)>": { "additionalProperties": false, "properties": { "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate>" }, { "items": { "$ref": "#/definitions/ConditionalPredicate>" }, "type": "array" } ] }, "value": { "anyOf": [ { "$ref": "#/definitions/FontWeight" }, { "type": "null" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "required": [ "condition", "value" ], "type": "object" }, "ConditionalAxisProperty<(TextBaseline|null)>": { "additionalProperties": false, "properties": { "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate>" }, { "items": { "$ref": "#/definitions/ConditionalPredicate>" }, "type": "array" } ] }, "value": { "anyOf": [ { "$ref": "#/definitions/TextBaseline" }, { "type": "null" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "required": [ "condition", "value" ], "type": "object" }, "ConditionalAxisProperty<(number[]|null)>": { "additionalProperties": false, "properties": { "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate>" }, { "items": { "$ref": "#/definitions/ConditionalPredicate>" }, "type": "array" } ] }, "value": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "type": "null" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "required": [ "condition", "value" ], "type": "object" }, "ConditionalAxisProperty<(number|null)>": { "additionalProperties": false, "properties": { "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate>" }, { "items": { "$ref": "#/definitions/ConditionalPredicate>" }, "type": "array" } ] }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).", "type": [ "number", "null" ] } }, "required": [ "condition", "value" ], "type": "object" }, "ConditionalAxisProperty<(string|null)>": { "additionalProperties": false, "properties": { "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalPredicate" }, { "items": { "$ref": "#/definitions/ConditionalPredicate" }, "type": "array" } ] }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).", "type": [ "string", "null" ] } }, "required": [ "condition", "value" ], "type": "object" }, "ConditionalAxisString": { "$ref": "#/definitions/ConditionalAxisProperty<(string|null)>" }, "ConditionalPredicate": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "legend": { "anyOf": [ { "$ref": "#/definitions/Legend" }, { "type": "null" } ], "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation." }, "scale": { "anyOf": [ { "$ref": "#/definitions/Scale" }, { "type": "null" } ], "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation." }, "sort": { "$ref": "#/definitions/Sort", "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation." }, "test": { "$ref": "#/definitions/PredicateComposition", "description": "Predicate for triggering the condition" }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "test", "type" ], "type": "object" }, "ConditionalPredicate>": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "legend": { "anyOf": [ { "$ref": "#/definitions/Legend" }, { "type": "null" } ], "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation." }, "scale": { "anyOf": [ { "$ref": "#/definitions/Scale" }, { "type": "null" } ], "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation." }, "sort": { "$ref": "#/definitions/Sort", "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation." }, "test": { "$ref": "#/definitions/PredicateComposition", "description": "Predicate for triggering the condition" }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/TypeForShape", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "test", "type" ], "type": "object" }, "ConditionalPredicate": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "enum": [ "binned" ], "type": "string" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "format": { "anyOf": [ { "type": "string" }, { "type": "object" } ], "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `\"formatType\"`](https://vega.github.io/vega-lite/usage/compile.html#format-type) that takes `datum.value` and format parameter as input), this property represents the format parameter.\n\n__Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format." }, "formatType": { "description": "The format type for labels (`\"number\"` or `\"time\"` or a [registered custom format type](https://vega.github.io/vega-lite/usage/compile.html#format-type)).\n\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.", "type": "string" }, "labelExpr": { "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels text.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.", "type": "string" }, "test": { "$ref": "#/definitions/PredicateComposition", "description": "Predicate for triggering the condition" }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "test", "type" ], "type": "object" }, "ConditionalPredicate>": { "additionalProperties": false, "properties": { "test": { "$ref": "#/definitions/PredicateComposition", "description": "Predicate for triggering the condition" }, "value": { "anyOf": [ { "$ref": "#/definitions/Align" }, { "type": "null" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "required": [ "test", "value" ], "type": "object" }, "ConditionalPredicate>": { "additionalProperties": false, "properties": { "test": { "$ref": "#/definitions/PredicateComposition", "description": "Predicate for triggering the condition" }, "value": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "type": "null" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "required": [ "test", "value" ], "type": "object" }, "ConditionalPredicate>": { "additionalProperties": false, "properties": { "test": { "$ref": "#/definitions/PredicateComposition", "description": "Predicate for triggering the condition" }, "value": { "anyOf": [ { "$ref": "#/definitions/FontStyle" }, { "type": "null" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "required": [ "test", "value" ], "type": "object" }, "ConditionalPredicate>": { "additionalProperties": false, "properties": { "test": { "$ref": "#/definitions/PredicateComposition", "description": "Predicate for triggering the condition" }, "value": { "anyOf": [ { "$ref": "#/definitions/FontWeight" }, { "type": "null" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "required": [ "test", "value" ], "type": "object" }, "ConditionalPredicate>": { "additionalProperties": false, "properties": { "test": { "$ref": "#/definitions/PredicateComposition", "description": "Predicate for triggering the condition" }, "value": { "anyOf": [ { "$ref": "#/definitions/Gradient" }, { "type": "string" }, { "type": "null" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "required": [ "test", "value" ], "type": "object" }, "ConditionalPredicate>": { "additionalProperties": false, "properties": { "test": { "$ref": "#/definitions/PredicateComposition", "description": "Predicate for triggering the condition" }, "value": { "anyOf": [ { "$ref": "#/definitions/TextBaseline" }, { "type": "null" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "required": [ "test", "value" ], "type": "object" }, "ConditionalPredicate>": { "additionalProperties": false, "properties": { "test": { "$ref": "#/definitions/PredicateComposition", "description": "Predicate for triggering the condition" }, "value": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "type": "null" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "required": [ "test", "value" ], "type": "object" }, "ConditionalPredicate>": { "additionalProperties": false, "properties": { "test": { "$ref": "#/definitions/PredicateComposition", "description": "Predicate for triggering the condition" }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).", "type": [ "number", "null" ] } }, "required": [ "test", "value" ], "type": "object" }, "ConditionalPredicate": { "additionalProperties": false, "properties": { "test": { "$ref": "#/definitions/PredicateComposition", "description": "Predicate for triggering the condition" }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).", "type": [ "string", "null" ] } }, "required": [ "test", "value" ], "type": "object" }, "ConditionalPredicate>": { "additionalProperties": false, "properties": { "test": { "$ref": "#/definitions/PredicateComposition", "description": "Predicate for triggering the condition" }, "value": { "$ref": "#/definitions/Text", "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "required": [ "test", "value" ], "type": "object" }, "ConditionalPredicate": { "additionalProperties": false, "properties": { "test": { "$ref": "#/definitions/PredicateComposition", "description": "Predicate for triggering the condition" }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).", "type": "number" } }, "required": [ "test", "value" ], "type": "object" }, "ConditionalPredicate>": { "additionalProperties": false, "properties": { "test": { "$ref": "#/definitions/PredicateComposition", "description": "Predicate for triggering the condition" }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).", "items": { "type": "number" }, "type": "array" } }, "required": [ "test", "value" ], "type": "object" }, "ConditionalPredicate>": { "additionalProperties": false, "properties": { "test": { "$ref": "#/definitions/PredicateComposition", "description": "Predicate for triggering the condition" }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).", "type": "string" } }, "required": [ "test", "value" ], "type": "object" }, "ConditionalSelection": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "legend": { "anyOf": [ { "$ref": "#/definitions/Legend" }, { "type": "null" } ], "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation." }, "scale": { "anyOf": [ { "$ref": "#/definitions/Scale" }, { "type": "null" } ], "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation." }, "selection": { "$ref": "#/definitions/SelectionComposition", "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)." }, "sort": { "$ref": "#/definitions/Sort", "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "selection", "type" ], "type": "object" }, "ConditionalSelection>": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "legend": { "anyOf": [ { "$ref": "#/definitions/Legend" }, { "type": "null" } ], "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation." }, "scale": { "anyOf": [ { "$ref": "#/definitions/Scale" }, { "type": "null" } ], "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation." }, "selection": { "$ref": "#/definitions/SelectionComposition", "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)." }, "sort": { "$ref": "#/definitions/Sort", "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/TypeForShape", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "selection", "type" ], "type": "object" }, "ConditionalSelection": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "enum": [ "binned" ], "type": "string" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "format": { "anyOf": [ { "type": "string" }, { "type": "object" } ], "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `\"formatType\"`](https://vega.github.io/vega-lite/usage/compile.html#format-type) that takes `datum.value` and format parameter as input), this property represents the format parameter.\n\n__Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format." }, "formatType": { "description": "The format type for labels (`\"number\"` or `\"time\"` or a [registered custom format type](https://vega.github.io/vega-lite/usage/compile.html#format-type)).\n\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.", "type": "string" }, "labelExpr": { "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels text.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.", "type": "string" }, "selection": { "$ref": "#/definitions/SelectionComposition", "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "selection", "type" ], "type": "object" }, "ConditionalSelection>": { "additionalProperties": false, "properties": { "selection": { "$ref": "#/definitions/SelectionComposition", "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)." }, "value": { "anyOf": [ { "$ref": "#/definitions/Gradient" }, { "type": "string" }, { "type": "null" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "required": [ "selection", "value" ], "type": "object" }, "ConditionalSelection": { "additionalProperties": false, "properties": { "selection": { "$ref": "#/definitions/SelectionComposition", "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)." }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).", "type": [ "string", "null" ] } }, "required": [ "selection", "value" ], "type": "object" }, "ConditionalSelection>": { "additionalProperties": false, "properties": { "selection": { "$ref": "#/definitions/SelectionComposition", "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)." }, "value": { "$ref": "#/definitions/Text", "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "required": [ "selection", "value" ], "type": "object" }, "ConditionalSelection": { "additionalProperties": false, "properties": { "selection": { "$ref": "#/definitions/SelectionComposition", "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)." }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).", "type": "number" } }, "required": [ "selection", "value" ], "type": "object" }, "ConditionalSelection>": { "additionalProperties": false, "properties": { "selection": { "$ref": "#/definitions/SelectionComposition", "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)." }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).", "items": { "type": "number" }, "type": "array" } }, "required": [ "selection", "value" ], "type": "object" }, "ConditionalSelection>": { "additionalProperties": false, "properties": { "selection": { "$ref": "#/definitions/SelectionComposition", "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)." }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).", "type": "string" } }, "required": [ "selection", "value" ], "type": "object" }, "Config": { "additionalProperties": false, "properties": { "area": { "$ref": "#/definitions/AreaConfig", "description": "Area-Specific Config" }, "autosize": { "anyOf": [ { "$ref": "#/definitions/AutosizeType" }, { "$ref": "#/definitions/AutoSizeParams" } ], "description": "How the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n\n__Default value__: `pad`" }, "axis": { "$ref": "#/definitions/AxisConfig", "description": "Axis configuration, which determines default properties for all `x` and `y` [axes](https://vega.github.io/vega-lite/docs/axis.html). For a full list of axis configuration options, please see the [corresponding section of the axis documentation](https://vega.github.io/vega-lite/docs/axis.html#config)." }, "axisBand": { "$ref": "#/definitions/AxisConfig", "description": "Config for axes with \"band\" scales." }, "axisBottom": { "$ref": "#/definitions/AxisConfig", "description": "Config for x-axis along the bottom edge of the chart." }, "axisDiscrete": { "$ref": "#/definitions/AxisConfig", "description": "Config for axes with \"point\" or \"band\" scales." }, "axisLeft": { "$ref": "#/definitions/AxisConfig", "description": "Config for y-axis along the left edge of the chart." }, "axisPoint": { "$ref": "#/definitions/AxisConfig", "description": "Config for axes with \"point\" scales." }, "axisQuantitative": { "$ref": "#/definitions/AxisConfig", "description": "Config for quantitative axes." }, "axisRight": { "$ref": "#/definitions/AxisConfig", "description": "Config for y-axis along the right edge of the chart." }, "axisTemporal": { "$ref": "#/definitions/AxisConfig", "description": "Config for temporal axes." }, "axisTop": { "$ref": "#/definitions/AxisConfig", "description": "Config for x-axis along the top edge of the chart." }, "axisX": { "$ref": "#/definitions/AxisConfig", "description": "X-axis specific config." }, "axisXBand": { "$ref": "#/definitions/AxisConfig", "description": "Config for x-axes with \"band\" scales." }, "axisXDiscrete": { "$ref": "#/definitions/AxisConfig", "description": "Config for x-axes with \"point\" or \"band\" scales." }, "axisXPoint": { "$ref": "#/definitions/AxisConfig", "description": "Config for x-axes with \"point\" scales." }, "axisXQuantitative": { "$ref": "#/definitions/AxisConfig", "description": "Config for x-quantitative axes." }, "axisXTemporal": { "$ref": "#/definitions/AxisConfig", "description": "Config for x-temporal axes." }, "axisY": { "$ref": "#/definitions/AxisConfig", "description": "Y-axis specific config." }, "axisYBand": { "$ref": "#/definitions/AxisConfig", "description": "Config for y-axes with \"band\" scales." }, "axisYDiscrete": { "$ref": "#/definitions/AxisConfig", "description": "Config for y-axes with \"point\" or \"band\" scales." }, "axisYPoint": { "$ref": "#/definitions/AxisConfig", "description": "Config for y-axes with \"point\" scales." }, "axisYQuantitative": { "$ref": "#/definitions/AxisConfig", "description": "Config for y-quantitative axes." }, "axisYTemporal": { "$ref": "#/definitions/AxisConfig", "description": "Config for y-temporal axes." }, "background": { "$ref": "#/definitions/Color", "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ `\"white\"`" }, "bar": { "$ref": "#/definitions/BarConfig", "description": "Bar-Specific Config" }, "boxplot": { "$ref": "#/definitions/BoxPlotConfig", "description": "Box Config" }, "circle": { "$ref": "#/definitions/MarkConfig", "description": "Circle-Specific Config" }, "concat": { "$ref": "#/definitions/CompositionConfig", "description": "Default configuration for all concatenation and repeat view composition operators (`concat`, `hconcat`, `vconcat`, and `repeat`)" }, "countTitle": { "description": "Default axis and legend title for count fields.\n\n__Default value:__ `'Count of Records`.", "type": "string" }, "errorband": { "$ref": "#/definitions/ErrorBandConfig", "description": "ErrorBand Config" }, "errorbar": { "$ref": "#/definitions/ErrorBarConfig", "description": "ErrorBar Config" }, "facet": { "$ref": "#/definitions/CompositionConfig", "description": "Default configuration for the `facet` view composition operator" }, "fieldTitle": { "description": "Defines how Vega-Lite generates title for fields. There are three possible styles:\n- `\"verbal\"` (Default) - displays function in a verbal style (e.g., \"Sum of field\", \"Year-month of date\", \"field (binned)\").\n- `\"function\"` - displays function using parentheses and capitalized texts (e.g., \"SUM(field)\", \"YEARMONTH(date)\", \"BIN(field)\").\n- `\"plain\"` - displays only the field name without functions (e.g., \"field\", \"date\", \"field\").", "enum": [ "verbal", "functional", "plain" ], "type": "string" }, "font": { "description": "Default font for all text marks, titles, and labels.", "type": "string" }, "geoshape": { "$ref": "#/definitions/MarkConfig", "description": "Geoshape-Specific Config" }, "header": { "$ref": "#/definitions/HeaderConfig", "description": "Header configuration, which determines default properties for all [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)." }, "headerColumn": { "$ref": "#/definitions/HeaderConfig", "description": "Header configuration, which determines default properties for column [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)." }, "headerFacet": { "$ref": "#/definitions/HeaderConfig", "description": "Header configuration, which determines default properties for non-row/column facet [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)." }, "headerRow": { "$ref": "#/definitions/HeaderConfig", "description": "Header configuration, which determines default properties for row [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)." }, "image": { "$ref": "#/definitions/RectConfig", "description": "Image-specific Config" }, "legend": { "$ref": "#/definitions/LegendConfig", "description": "Legend configuration, which determines default properties for all [legends](https://vega.github.io/vega-lite/docs/legend.html). For a full list of legend configuration options, please see the [corresponding section of in the legend documentation](https://vega.github.io/vega-lite/docs/legend.html#config)." }, "line": { "$ref": "#/definitions/LineConfig", "description": "Line-Specific Config" }, "lineBreak": { "description": "A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property provides a global default for text marks, which is overridden by mark or style config settings, and by the lineBreak mark encoding channel. If signal-valued, either string or regular expression (regexp) values are valid.", "type": "string" }, "mark": { "$ref": "#/definitions/MarkConfig", "description": "Mark Config" }, "numberFormat": { "description": "D3 Number format for guide labels and text marks. For example `\"s\"` for SI units. Use [D3's number format pattern](https://github.com/d3/d3-format#locale_format).", "type": "string" }, "padding": { "$ref": "#/definitions/Padding", "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`" }, "point": { "$ref": "#/definitions/MarkConfig", "description": "Point-Specific Config" }, "projection": { "$ref": "#/definitions/ProjectionConfig", "description": "Projection configuration, which determines default properties for all [projections](https://vega.github.io/vega-lite/docs/projection.html). For a full list of projection configuration options, please see the [corresponding section of the projection documentation](https://vega.github.io/vega-lite/docs/projection.html#config)." }, "range": { "$ref": "#/definitions/RangeConfig", "description": "An object hash that defines default range arrays or schemes for using with scales.\nFor a full list of scale range configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config)." }, "rect": { "$ref": "#/definitions/RectConfig", "description": "Rect-Specific Config" }, "rule": { "$ref": "#/definitions/MarkConfig", "description": "Rule-Specific Config" }, "scale": { "$ref": "#/definitions/ScaleConfig", "description": "Scale configuration determines default properties for all [scales](https://vega.github.io/vega-lite/docs/scale.html). For a full list of scale configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config)." }, "selection": { "$ref": "#/definitions/SelectionConfig", "description": "An object hash for defining default properties for each type of selections." }, "square": { "$ref": "#/definitions/MarkConfig", "description": "Square-Specific Config" }, "style": { "$ref": "#/definitions/StyleConfigIndex", "description": "An object hash that defines key-value mappings to determine default properties for marks with a given [style](https://vega.github.io/vega-lite/docs/mark.html#mark-def). The keys represent styles names; the values have to be valid [mark configuration objects](https://vega.github.io/vega-lite/docs/mark.html#config)." }, "text": { "$ref": "#/definitions/MarkConfig", "description": "Text-Specific Config" }, "tick": { "$ref": "#/definitions/TickConfig", "description": "Tick-Specific Config" }, "timeFormat": { "description": "Default time format for raw time values (without time units) in text marks, legend labels and header labels.\n\n__Default value:__ `\"%b %d, %Y\"`\n__Note:__ Axes automatically determine the format for each label automatically so this config does not affect axes.", "type": "string" }, "title": { "$ref": "#/definitions/TitleConfig", "description": "Title configuration, which determines default properties for all [titles](https://vega.github.io/vega-lite/docs/title.html). For a full list of title configuration options, please see the [corresponding section of the title documentation](https://vega.github.io/vega-lite/docs/title.html#config)." }, "trail": { "$ref": "#/definitions/LineConfig", "description": "Trail-Specific Config" }, "view": { "$ref": "#/definitions/ViewConfig", "description": "Default properties for [single view plots](https://vega.github.io/vega-lite/docs/spec.html#single)." } }, "type": "object" }, "CsvDataFormat": { "additionalProperties": false, "properties": { "parse": { "anyOf": [ { "$ref": "#/definitions/Parse" }, { "type": "null" } ], "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data.\nAlternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)).\nFor example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\nFor Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)" }, "type": { "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n\n__Default value:__ The default format type is determined by the extension of the file URL.\nIf no extension is detected, `\"json\"` will be used by default.", "enum": [ "csv", "tsv" ], "type": "string" } }, "type": "object" }, "Cursor": { "enum": [ "auto", "default", "none", "context-menu", "help", "pointer", "progress", "wait", "cell", "crosshair", "text", "vertical-text", "alias", "copy", "move", "no-drop", "not-allowed", "e-resize", "n-resize", "ne-resize", "nw-resize", "s-resize", "se-resize", "sw-resize", "w-resize", "ew-resize", "ns-resize", "nesw-resize", "nwse-resize", "col-resize", "row-resize", "all-scroll", "zoom-in", "zoom-out", "grab", "grabbing" ], "type": "string" }, "Cyclical": { "enum": [ "rainbow", "sinebow" ], "type": "string" }, "Data": { "anyOf": [ { "$ref": "#/definitions/DataSource" }, { "$ref": "#/definitions/Generator" } ] }, "DataFormat": { "anyOf": [ { "$ref": "#/definitions/CsvDataFormat" }, { "$ref": "#/definitions/DsvDataFormat" }, { "$ref": "#/definitions/JsonDataFormat" }, { "$ref": "#/definitions/TopoDataFormat" } ] }, "DataSource": { "anyOf": [ { "$ref": "#/definitions/UrlData" }, { "$ref": "#/definitions/InlineData" }, { "$ref": "#/definitions/NamedData" } ] }, "Datasets": { "$ref": "#/definitions/Dict" }, "DateTime": { "additionalProperties": false, "description": "Object for defining datetime in Vega-Lite Filter.\nIf both month and quarter are provided, month has higher precedence.\n`day` cannot be combined with other date.\nWe accept string for month and day names.", "properties": { "date": { "description": "Integer value representing the date (day of the month) from 1-31.", "maximum": 31, "minimum": 1, "type": "number" }, "day": { "anyOf": [ { "$ref": "#/definitions/Day" }, { "type": "string" } ], "description": "Value representing the day of a week. This can be one of:\n(1) integer value -- `1` represents Monday;\n(2) case-insensitive day name (e.g., `\"Monday\"`);\n(3) case-insensitive, 3-character short day name (e.g., `\"Mon\"`).\n\n**Warning:** A DateTime definition object with `day`** should not be combined with `year`, `quarter`, `month`, or `date`." }, "hours": { "description": "Integer value representing the hour of a day from 0-23.", "maximum": 23, "minimum": 0, "type": "number" }, "milliseconds": { "description": "Integer value representing the millisecond segment of time.", "maximum": 999, "minimum": 0, "type": "number" }, "minutes": { "description": "Integer value representing the minute segment of time from 0-59.", "maximum": 59, "minimum": 0, "type": "number" }, "month": { "anyOf": [ { "$ref": "#/definitions/Month" }, { "type": "string" } ], "description": "One of:\n(1) integer value representing the month from `1`-`12`. `1` represents January;\n(2) case-insensitive month name (e.g., `\"January\"`);\n(3) case-insensitive, 3-character short month name (e.g., `\"Jan\"`)." }, "quarter": { "description": "Integer value representing the quarter of the year (from 1-4).", "maximum": 4, "minimum": 1, "type": "number" }, "seconds": { "description": "Integer value representing the second segment (0-59) of a time value", "maximum": 59, "minimum": 0, "type": "number" }, "utc": { "description": "A boolean flag indicating if date time is in utc time. If false, the date time is in local time", "type": "boolean" }, "year": { "description": "Integer value representing the year.", "type": "number" } }, "type": "object" }, "Day": { "maximum": 7, "minimum": 1, "type": "number" }, "DensityTransform": { "additionalProperties": false, "properties": { "as": { "description": "The output fields for the sample value and corresponding density estimate.\n\n__Default value:__ `[\"value\", \"density\"]`", "items": [ { "$ref": "#/definitions/FieldName" }, { "$ref": "#/definitions/FieldName" } ], "maxItems": 2, "minItems": 2, "type": "array" }, "bandwidth": { "description": "The bandwidth (standard deviation) of the Gaussian kernel. If unspecified or set to zero, the bandwidth value is automatically estimated from the input data using Scott’s rule.", "type": "number" }, "counts": { "description": "A boolean flag indicating if the output values should be probability estimates (false) or smoothed counts (true).\n\n__Default value:__ `false`", "type": "boolean" }, "cumulative": { "description": "A boolean flag indicating whether to produce density estimates (false) or cumulative density estimates (true).\n\n__Default value:__ `false`", "type": "boolean" }, "density": { "$ref": "#/definitions/FieldName", "description": "The data field for which to perform density estimation." }, "extent": { "description": "A [min, max] domain from which to sample the distribution. If unspecified, the extent will be determined by the observed minimum and maximum values of the density value field.", "items": [ { "type": "number" }, { "type": "number" } ], "maxItems": 2, "minItems": 2, "type": "array" }, "groupby": { "description": "The data fields to group by. If not specified, a single group containing all data objects will be used.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "maxsteps": { "description": "The maximum number of samples to take along the extent domain for plotting the density.\n\n__Default value:__ `200`", "type": "number" }, "minsteps": { "description": "The minimum number of samples to take along the extent domain for plotting the density.\n\n__Default value:__ `25`", "type": "number" }, "steps": { "description": "The exact number of samples to take along the extent domain for plotting the density. If specified, overrides both minsteps and maxsteps to set an exact number of uniform samples. Potentially useful in conjunction with a fixed extent to ensure consistent sample points for stacked densities.", "type": "number" } }, "required": [ "density" ], "type": "object" }, "DerivedStream": { "additionalProperties": false, "properties": { "between": { "items": { "$ref": "#/definitions/Stream" }, "type": "array" }, "consume": { "type": "boolean" }, "debounce": { "type": "number" }, "filter": { "anyOf": [ { "$ref": "#/definitions/Expr" }, { "items": { "$ref": "#/definitions/Expr" }, "type": "array" } ] }, "markname": { "type": "string" }, "marktype": { "$ref": "#/definitions/MarkType" }, "stream": { "$ref": "#/definitions/Stream" }, "throttle": { "type": "number" } }, "required": [ "stream" ], "type": "object" }, "Dict": { "additionalProperties": { "$ref": "#/definitions/InlineDataset" }, "type": "object" }, "Dict": { "additionalProperties": { "$ref": "#/definitions/SelectionInit" }, "type": "object" }, "Dict": { "additionalProperties": { "$ref": "#/definitions/SelectionInitInterval" }, "type": "object" }, "Diverging": { "enum": [ "blueorange", "blueorange-3", "blueorange-4", "blueorange-5", "blueorange-6", "blueorange-7", "blueorange-8", "blueorange-9", "blueorange-10", "blueorange-11", "brownbluegreen", "brownbluegreen-3", "brownbluegreen-4", "brownbluegreen-5", "brownbluegreen-6", "brownbluegreen-7", "brownbluegreen-8", "brownbluegreen-9", "brownbluegreen-10", "brownbluegreen-11", "purplegreen", "purplegreen-3", "purplegreen-4", "purplegreen-5", "purplegreen-6", "purplegreen-7", "purplegreen-8", "purplegreen-9", "purplegreen-10", "purplegreen-11", "pinkyellowgreen", "pinkyellowgreen-3", "pinkyellowgreen-4", "pinkyellowgreen-5", "pinkyellowgreen-6", "pinkyellowgreen-7", "pinkyellowgreen-8", "pinkyellowgreen-9", "pinkyellowgreen-10", "pinkyellowgreen-11", "purpleorange", "purpleorange-3", "purpleorange-4", "purpleorange-5", "purpleorange-6", "purpleorange-7", "purpleorange-8", "purpleorange-9", "purpleorange-10", "purpleorange-11", "redblue", "redblue-3", "redblue-4", "redblue-5", "redblue-6", "redblue-7", "redblue-8", "redblue-9", "redblue-10", "redblue-11", "redgrey", "redgrey-3", "redgrey-4", "redgrey-5", "redgrey-6", "redgrey-7", "redgrey-8", "redgrey-9", "redgrey-10", "redgrey-11", "redyellowblue", "redyellowblue-3", "redyellowblue-4", "redyellowblue-5", "redyellowblue-6", "redyellowblue-7", "redyellowblue-8", "redyellowblue-9", "redyellowblue-10", "redyellowblue-11", "redyellowgreen", "redyellowgreen-3", "redyellowgreen-4", "redyellowgreen-5", "redyellowgreen-6", "redyellowgreen-7", "redyellowgreen-8", "redyellowgreen-9", "redyellowgreen-10", "redyellowgreen-11", "spectral", "spectral-3", "spectral-4", "spectral-5", "spectral-6", "spectral-7", "spectral-8", "spectral-9", "spectral-10", "spectral-11" ], "type": "string" }, "DomainUnionWith": { "additionalProperties": false, "properties": { "unionWith": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "items": { "type": "string" }, "type": "array" }, { "items": { "type": "boolean" }, "type": "array" }, { "items": { "$ref": "#/definitions/DateTime" }, "type": "array" } ], "description": "Customized domain values to be union with the field's values.\n\n1) `domain` for _quantitative_ fields can take one of the following forms:\n\n- a two-element array with minimum and maximum values.\n- an array with more than two entries, for [Piecewise quantitative scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise). (Alternatively, the `domainMid` property can be set for a diverging scale.)\n- a string value `\"unaggregated\"`, if the input field is aggregated, to indicate that the domain should include the raw data values prior to the aggregation.\n\n2) `domain` for _temporal_ fields can be a two-element array minimum and maximum values, in the form of either timestamps or the [DateTime definition objects](https://vega.github.io/vega-lite/docs/types.html#datetime).\n\n3) `domain` for _ordinal_ and _nominal_ fields can be an array that lists valid input values." } }, "required": [ "unionWith" ], "type": "object" }, "DsvDataFormat": { "additionalProperties": false, "properties": { "delimiter": { "description": "The delimiter between records. The delimiter must be a single character (i.e., a single 16-bit code unit); so, ASCII delimiters are fine, but emoji delimiters are not.", "maxLength": 1, "minLength": 1, "type": "string" }, "parse": { "anyOf": [ { "$ref": "#/definitions/Parse" }, { "type": "null" } ], "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data.\nAlternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)).\nFor example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\nFor Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)" }, "type": { "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n\n__Default value:__ The default format type is determined by the extension of the file URL.\nIf no extension is detected, `\"json\"` will be used by default.", "enum": [ "dsv" ], "type": "string" } }, "required": [ "delimiter" ], "type": "object" }, "Element": { "type": "string" }, "EncodingSortField": { "additionalProperties": false, "description": "A sort definition for sorting a discrete scale in an encoding field definition.", "properties": { "field": { "$ref": "#/definitions/Field", "description": "The data [field](https://vega.github.io/vega-lite/docs/field.html) to sort by.\n\n__Default value:__ If unspecified, defaults to the field specified in the outer data reference." }, "op": { "$ref": "#/definitions/NonArgAggregateOp", "description": "An [aggregate operation](https://vega.github.io/vega-lite/docs/aggregate.html#ops) to perform on the field prior to sorting (e.g., `\"count\"`, `\"mean\"` and `\"median\"`).\nAn aggregation is required when there are multiple values of the sort field for each encoded data field.\nThe input data objects will be aggregated, grouped by the encoded data field.\n\nFor a full list of operations, please see the documentation for [aggregate](https://vega.github.io/vega-lite/docs/aggregate.html#ops).\n\n__Default value:__ `\"sum\"` for stacked plots. Otherwise, `\"min\"`." }, "order": { "anyOf": [ { "$ref": "#/definitions/SortOrder" }, { "type": "null" } ], "description": "The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort)." } }, "type": "object" }, "EncodingSortField": { "additionalProperties": false, "description": "A sort definition for sorting a discrete scale in an encoding field definition.", "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "The data [field](https://vega.github.io/vega-lite/docs/field.html) to sort by.\n\n__Default value:__ If unspecified, defaults to the field specified in the outer data reference." }, "op": { "$ref": "#/definitions/NonArgAggregateOp", "description": "An [aggregate operation](https://vega.github.io/vega-lite/docs/aggregate.html#ops) to perform on the field prior to sorting (e.g., `\"count\"`, `\"mean\"` and `\"median\"`).\nAn aggregation is required when there are multiple values of the sort field for each encoded data field.\nThe input data objects will be aggregated, grouped by the encoded data field.\n\nFor a full list of operations, please see the documentation for [aggregate](https://vega.github.io/vega-lite/docs/aggregate.html#ops).\n\n__Default value:__ `\"sum\"` for stacked plots. Otherwise, `\"min\"`." }, "order": { "anyOf": [ { "$ref": "#/definitions/SortOrder" }, { "type": "null" } ], "description": "The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort)." } }, "type": "object" }, "ErrorBand": { "enum": [ "errorband" ], "type": "string" }, "ErrorBandConfig": { "additionalProperties": false, "properties": { "band": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "borders": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "extent": { "$ref": "#/definitions/ErrorBarExtent", "description": "The extent of the band. Available options include:\n- `\"ci\"`: Extend the band to the confidence interval of the mean.\n- `\"stderr\"`: The size of band are set to the value of standard error, extending from the mean.\n- `\"stdev\"`: The size of band are set to the value of standard deviation, extending from the mean.\n- `\"iqr\"`: Extend the band to the q1 and q3.\n\n__Default value:__ `\"stderr\"`." }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method for the error band. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values.\n- `\"step-before\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value.\n- `\"step-after\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "tension": { "description": "The tension parameter for the interpolation type of the error band.", "maximum": 1, "minimum": 0, "type": "number" } }, "type": "object" }, "ErrorBandDef": { "additionalProperties": false, "properties": { "band": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "borders": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "clip": { "description": "Whether a composite mark be clipped to the enclosing group’s width and height.", "type": "boolean" }, "color": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" } ], "description": "Default color.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`." }, "extent": { "$ref": "#/definitions/ErrorBarExtent", "description": "The extent of the band. Available options include:\n- `\"ci\"`: Extend the band to the confidence interval of the mean.\n- `\"stderr\"`: The size of band are set to the value of standard error, extending from the mean.\n- `\"stdev\"`: The size of band are set to the value of standard deviation, extending from the mean.\n- `\"iqr\"`: Extend the band to the q1 and q3.\n\n__Default value:__ `\"stderr\"`." }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method for the error band. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values.\n- `\"step-before\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value.\n- `\"step-after\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "opacity": { "description": "The opacity (value between [0,1]) of the mark.", "type": "number" }, "orient": { "$ref": "#/definitions/Orientation", "description": "Orientation of the error band. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined." }, "tension": { "description": "The tension parameter for the interpolation type of the error band.", "maximum": 1, "minimum": 0, "type": "number" }, "type": { "$ref": "#/definitions/ErrorBand", "description": "The mark type. This could a primitive mark type\n(one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`)\nor a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`)." } }, "required": [ "type" ], "type": "object" }, "ErrorBar": { "enum": [ "errorbar" ], "type": "string" }, "ErrorBarConfig": { "additionalProperties": false, "properties": { "extent": { "$ref": "#/definitions/ErrorBarExtent", "description": "The extent of the rule. Available options include:\n- `\"ci\"`: Extend the rule to the confidence interval of the mean.\n- `\"stderr\"`: The size of rule are set to the value of standard error, extending from the mean.\n- `\"stdev\"`: The size of rule are set to the value of standard deviation, extending from the mean.\n- `\"iqr\"`: Extend the rule to the q1 and q3.\n\n__Default value:__ `\"stderr\"`." }, "rule": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "ticks": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] } }, "type": "object" }, "ErrorBarDef": { "additionalProperties": false, "properties": { "clip": { "description": "Whether a composite mark be clipped to the enclosing group’s width and height.", "type": "boolean" }, "color": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" } ], "description": "Default color.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`." }, "extent": { "$ref": "#/definitions/ErrorBarExtent", "description": "The extent of the rule. Available options include:\n- `\"ci\"`: Extend the rule to the confidence interval of the mean.\n- `\"stderr\"`: The size of rule are set to the value of standard error, extending from the mean.\n- `\"stdev\"`: The size of rule are set to the value of standard deviation, extending from the mean.\n- `\"iqr\"`: Extend the rule to the q1 and q3.\n\n__Default value:__ `\"stderr\"`." }, "opacity": { "description": "The opacity (value between [0,1]) of the mark.", "type": "number" }, "orient": { "$ref": "#/definitions/Orientation", "description": "Orientation of the error bar. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined." }, "rule": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "ticks": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/MarkConfig" } ] }, "type": { "$ref": "#/definitions/ErrorBar", "description": "The mark type. This could a primitive mark type\n(one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`)\nor a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`)." } }, "required": [ "type" ], "type": "object" }, "ErrorBarExtent": { "enum": [ "ci", "iqr", "stderr", "stdev" ], "type": "string" }, "EventStream": { "anyOf": [ { "additionalProperties": false, "properties": { "between": { "items": { "$ref": "#/definitions/Stream" }, "type": "array" }, "consume": { "type": "boolean" }, "debounce": { "type": "number" }, "filter": { "anyOf": [ { "$ref": "#/definitions/Expr" }, { "items": { "$ref": "#/definitions/Expr" }, "type": "array" } ] }, "markname": { "type": "string" }, "marktype": { "$ref": "#/definitions/MarkType" }, "source": { "enum": [ "view", "scope" ], "type": "string" }, "throttle": { "type": "number" }, "type": { "$ref": "#/definitions/EventType" } }, "required": [ "type" ], "type": "object" }, { "additionalProperties": false, "properties": { "between": { "items": { "$ref": "#/definitions/Stream" }, "type": "array" }, "consume": { "type": "boolean" }, "debounce": { "type": "number" }, "filter": { "anyOf": [ { "$ref": "#/definitions/Expr" }, { "items": { "$ref": "#/definitions/Expr" }, "type": "array" } ] }, "markname": { "type": "string" }, "marktype": { "$ref": "#/definitions/MarkType" }, "source": { "enum": [ "window" ], "type": "string" }, "throttle": { "type": "number" }, "type": { "$ref": "#/definitions/WindowEventType" } }, "required": [ "source", "type" ], "type": "object" } ] }, "EventType": { "enum": [ "click", "dblclick", "dragenter", "dragleave", "dragover", "keydown", "keypress", "keyup", "mousedown", "mousemove", "mouseout", "mouseover", "mouseup", "mousewheel", "timer", "touchend", "touchmove", "touchstart", "wheel" ], "type": "string" }, "Expr": { "type": "string" }, "FacetEncodingFieldDef": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "align": { "anyOf": [ { "$ref": "#/definitions/LayoutAlign" }, { "$ref": "#/definitions/RowCol" } ], "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/RowCol" } ], "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`" }, "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "header": { "$ref": "#/definitions/Header", "description": "An object defining properties of a facet's header." }, "sort": { "anyOf": [ { "$ref": "#/definitions/SortArray" }, { "$ref": "#/definitions/SortOrder" }, { "$ref": "#/definitions/EncodingSortField" }, { "type": "null" } ], "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`." }, "spacing": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/RowCol" } ], "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)" }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "FacetFieldDef": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "header": { "$ref": "#/definitions/Header", "description": "An object defining properties of a facet's header." }, "sort": { "anyOf": [ { "$ref": "#/definitions/SortArray" }, { "$ref": "#/definitions/SortOrder" }, { "$ref": "#/definitions/EncodingSortField" }, { "type": "null" } ], "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "FacetFieldDef": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/FieldName", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "header": { "$ref": "#/definitions/Header", "description": "An object defining properties of a facet's header." }, "sort": { "anyOf": [ { "$ref": "#/definitions/SortArray" }, { "$ref": "#/definitions/SortOrder" }, { "$ref": "#/definitions/EncodingSortField" }, { "type": "null" } ], "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "FacetMapping": { "additionalProperties": false, "properties": { "column": { "$ref": "#/definitions/FacetFieldDef", "description": "A field definition for the horizontal facet of trellis plots." }, "row": { "$ref": "#/definitions/FacetFieldDef", "description": "A field definition for the vertical facet of trellis plots." } }, "type": "object" }, "FacetMapping": { "additionalProperties": false, "properties": { "column": { "$ref": "#/definitions/FacetFieldDef", "description": "A field definition for the horizontal facet of trellis plots." }, "row": { "$ref": "#/definitions/FacetFieldDef", "description": "A field definition for the vertical facet of trellis plots." } }, "type": "object" }, "FacetedEncoding": { "additionalProperties": false, "properties": { "color": { "anyOf": [ { "$ref": "#/definitions/ColorGradientFieldDefWithCondition" }, { "$ref": "#/definitions/ColorGradientValueWithCondition" } ], "description": "Color of the marks – either fill or stroke color based on the `filled` property of mark definition.\nBy default, `color` represents fill color for `\"area\"`, `\"bar\"`, `\"tick\"`,\n`\"text\"`, `\"trail\"`, `\"circle\"`, and `\"square\"` / stroke color for `\"line\"` and `\"point\"`.\n\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `color` property.\n\n_Note:_\n1) For fine-grained control over both fill and stroke colors of the marks, please use the `fill` and `stroke` channels. The `fill` or `stroke` encodings have higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified.\n2) See the scale documentation for more information about customizing [color scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme)." }, "column": { "$ref": "#/definitions/RowColumnEncodingFieldDef", "description": "A field definition for the horizontal facet of trellis plots." }, "detail": { "anyOf": [ { "$ref": "#/definitions/FieldDefWithoutScale" }, { "items": { "$ref": "#/definitions/FieldDefWithoutScale" }, "type": "array" } ], "description": "Additional levels of detail for grouping data in aggregate views and\nin line, trail, and area marks without mapping data to a specific visual channel." }, "facet": { "$ref": "#/definitions/FacetEncodingFieldDef", "description": "A field definition for the (flexible) facet of trellis plots.\n\nIf either `row` or `column` is specified, this channel will be ignored." }, "fill": { "anyOf": [ { "$ref": "#/definitions/ColorGradientFieldDefWithCondition" }, { "$ref": "#/definitions/ColorGradientValueWithCondition" } ], "description": "Fill color of the marks.\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `color` property.\n\n_Note:_ The `fill` encoding has higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified." }, "fillOpacity": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueWithCondition" } ], "description": "Fill opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `fillOpacity` property." }, "href": { "anyOf": [ { "$ref": "#/definitions/StringFieldDefWithCondition" }, { "$ref": "#/definitions/StringValueWithCondition" } ], "description": "A URL to load upon mouse click." }, "key": { "$ref": "#/definitions/FieldDefWithoutScale", "description": "A data field to use as a unique key for data binding. When a visualization’s data is updated, the key value will be used to match data elements to existing mark instances. Use a key channel to enable object constancy for transitions over dynamic data." }, "latitude": { "anyOf": [ { "$ref": "#/definitions/LatLongFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Latitude position of geographically projected marks." }, "latitude2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Latitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`." }, "longitude": { "anyOf": [ { "$ref": "#/definitions/LatLongFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Longitude position of geographically projected marks." }, "longitude2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Longitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`." }, "opacity": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueWithCondition" } ], "description": "Opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `opacity` property." }, "order": { "anyOf": [ { "$ref": "#/definitions/OrderFieldDef" }, { "items": { "$ref": "#/definitions/OrderFieldDef" }, "type": "array" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Order of the marks.\n- For stacked marks, this `order` channel encodes [stack order](https://vega.github.io/vega-lite/docs/stack.html#order).\n- For line and trail marks, this `order` channel encodes order of data points in the lines. This can be useful for creating [a connected scatterplot](https://vega.github.io/vega-lite/examples/connected_scatterplot.html). Setting `order` to `{\"value\": null}` makes the line marks use the original order in the data sources.\n- Otherwise, this `order` channel encodes layer order of the marks.\n\n__Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating additional aggregation grouping." }, "row": { "$ref": "#/definitions/RowColumnEncodingFieldDef", "description": "A field definition for the vertical facet of trellis plots." }, "shape": { "anyOf": [ { "$ref": "#/definitions/ShapeFieldDefWithCondition" }, { "$ref": "#/definitions/ShapeValueWithCondition" } ], "description": "Shape of the mark.\n\n1. For `point` marks the supported values include:\n - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n - the line symbol `\"stroke\"`\n - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n2. For `geoshape` marks it should be a field definition of the geojson data\n\n__Default value:__ If undefined, the default shape depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#point-config)'s `shape` property. (`\"circle\"` if unset.)" }, "size": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueWithCondition" } ], "description": "Size of the mark.\n- For `\"point\"`, `\"square\"` and `\"circle\"`, – the symbol size, or pixel area of the mark.\n- For `\"bar\"` and `\"tick\"` – the bar and tick's size.\n- For `\"text\"` – the text's font size.\n- Size is unsupported for `\"line\"`, `\"area\"`, and `\"rect\"`. (Use `\"trail\"` instead of line with varying size)" }, "stroke": { "anyOf": [ { "$ref": "#/definitions/ColorGradientFieldDefWithCondition" }, { "$ref": "#/definitions/ColorGradientValueWithCondition" } ], "description": "Stroke color of the marks.\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `color` property.\n\n_Note:_ The `stroke` encoding has higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified." }, "strokeDash": { "anyOf": [ { "$ref": "#/definitions/NumericArrayFieldDefWithCondition" }, { "$ref": "#/definitions/NumericArrayValueDefWithCondition" } ], "description": "Stroke dash of the marks.\n\n__Default value:__ `[1,0]` (No dash)." }, "strokeOpacity": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueWithCondition" } ], "description": "Stroke opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `strokeOpacity` property." }, "strokeWidth": { "anyOf": [ { "$ref": "#/definitions/NumericFieldDefWithCondition" }, { "$ref": "#/definitions/NumericValueWithCondition" } ], "description": "Stroke width of the marks.\n\n__Default value:__ If undefined, the default stroke width depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `strokeWidth` property." }, "text": { "anyOf": [ { "$ref": "#/definitions/TextFieldDefWithCondition" }, { "$ref": "#/definitions/TextValueWithCondition" } ], "description": "Text of the `text` mark." }, "tooltip": { "anyOf": [ { "$ref": "#/definitions/StringFieldDefWithCondition" }, { "$ref": "#/definitions/StringValueWithCondition" }, { "items": { "$ref": "#/definitions/StringFieldDef" }, "type": "array" }, { "type": "null" } ], "description": "The tooltip text to show upon mouse hover. Specifying `tooltip` encoding overrides [the `tooltip` property in the mark definition](https://vega.github.io/vega-lite/docs/mark.html#mark-def).\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite." }, "url": { "anyOf": [ { "$ref": "#/definitions/StringFieldDefWithCondition" }, { "$ref": "#/definitions/StringValueWithCondition" } ], "description": "The URL of an image mark." }, "x": { "anyOf": [ { "$ref": "#/definitions/PositionFieldDef" }, { "$ref": "#/definitions/XValueDef" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/XValueDef" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "xError": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`." }, "xError2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Secondary error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`." }, "y": { "anyOf": [ { "$ref": "#/definitions/PositionFieldDef" }, { "$ref": "#/definitions/YValueDef" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/YValueDef" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "yError": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`." }, "yError2": { "anyOf": [ { "$ref": "#/definitions/SecondaryFieldDef" }, { "$ref": "#/definitions/NumberValueDef" } ], "description": "Secondary error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`." } }, "type": "object" }, "FacetedUnitSpec": { "additionalProperties": false, "description": "Unit spec that can have a composite mark and row or column channels (shorthand for a facet spec).", "properties": { "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "encoding": { "$ref": "#/definitions/FacetedEncoding", "description": "A key-value mapping between encoding channels and definition of fields." }, "height": { "anyOf": [ { "type": "number" }, { "enum": [ "container" ], "type": "string" }, { "$ref": "#/definitions/Step" } ], "description": "The height of a visualization.\n\n- For a plot with a continuous y-field, height should be a number.\n- For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.)\n- To enable responsive sizing on height, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation." }, "mark": { "$ref": "#/definitions/AnyMark", "description": "A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def)." }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "projection": { "$ref": "#/definitions/Projection", "description": "An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks\nand to `latitude` and `\"longitude\"` channels for other marks." }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "selection": { "additionalProperties": { "$ref": "#/definitions/SelectionDef" }, "description": "A key-value mapping between selection names and definitions.", "type": "object" }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "view": { "$ref": "#/definitions/ViewBackground", "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)" }, "width": { "anyOf": [ { "type": "number" }, { "enum": [ "container" ], "type": "string" }, { "$ref": "#/definitions/Step" } ], "description": "The width of a visualization.\n\n- For a plot with a continuous x-field, width should be a number.\n- For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.)\n- To enable responsive sizing on width, it should be set to `\"container\"`.\n\n__Default value:__\nBased on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation." } }, "required": [ "mark" ], "type": "object" }, "Field": { "anyOf": [ { "$ref": "#/definitions/FieldName" }, { "$ref": "#/definitions/RepeatRef" } ] }, "FieldDefWithCondition": { "additionalProperties": false, "description": "A FieldDef with Condition\n{\n condition: {value: ...},\n field: ...,\n ...\n}", "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "condition": { "$ref": "#/definitions/ValueCondition<(Gradient|string|null)>", "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\nsince Vega-Lite only allows at most one encoded field per encoding channel." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "legend": { "anyOf": [ { "$ref": "#/definitions/Legend" }, { "type": "null" } ], "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation." }, "scale": { "anyOf": [ { "$ref": "#/definitions/Scale" }, { "type": "null" } ], "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation." }, "sort": { "$ref": "#/definitions/Sort", "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "FieldDefWithCondition": { "additionalProperties": false, "description": "A FieldDef with Condition\n{\n condition: {value: ...},\n field: ...,\n ...\n}", "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "condition": { "$ref": "#/definitions/ValueCondition", "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\nsince Vega-Lite only allows at most one encoded field per encoding channel." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "legend": { "anyOf": [ { "$ref": "#/definitions/Legend" }, { "type": "null" } ], "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation." }, "scale": { "anyOf": [ { "$ref": "#/definitions/Scale" }, { "type": "null" } ], "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation." }, "sort": { "$ref": "#/definitions/Sort", "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "FieldDefWithCondition": { "additionalProperties": false, "description": "A FieldDef with Condition\n{\n condition: {value: ...},\n field: ...,\n ...\n}", "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "condition": { "$ref": "#/definitions/ValueCondition", "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\nsince Vega-Lite only allows at most one encoded field per encoding channel." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "legend": { "anyOf": [ { "$ref": "#/definitions/Legend" }, { "type": "null" } ], "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation." }, "scale": { "anyOf": [ { "$ref": "#/definitions/Scale" }, { "type": "null" } ], "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation." }, "sort": { "$ref": "#/definitions/Sort", "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "FieldDefWithCondition,(string|null)>": { "additionalProperties": false, "description": "A FieldDef with Condition\n{\n condition: {value: ...},\n field: ...,\n ...\n}", "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "condition": { "$ref": "#/definitions/ValueCondition<(string|null)>", "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\nsince Vega-Lite only allows at most one encoded field per encoding channel." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "legend": { "anyOf": [ { "$ref": "#/definitions/Legend" }, { "type": "null" } ], "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation." }, "scale": { "anyOf": [ { "$ref": "#/definitions/Scale" }, { "type": "null" } ], "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation." }, "sort": { "$ref": "#/definitions/Sort", "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/TypeForShape", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "FieldDefWithCondition": { "additionalProperties": false, "description": "A FieldDef with Condition\n{\n condition: {value: ...},\n field: ...,\n ...\n}", "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "enum": [ "binned" ], "type": "string" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "condition": { "$ref": "#/definitions/ValueCondition", "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\nsince Vega-Lite only allows at most one encoded field per encoding channel." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "format": { "anyOf": [ { "type": "string" }, { "type": "object" } ], "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `\"formatType\"`](https://vega.github.io/vega-lite/usage/compile.html#format-type) that takes `datum.value` and format parameter as input), this property represents the format parameter.\n\n__Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format." }, "formatType": { "description": "The format type for labels (`\"number\"` or `\"time\"` or a [registered custom format type](https://vega.github.io/vega-lite/usage/compile.html#format-type)).\n\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.", "type": "string" }, "labelExpr": { "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels text.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.", "type": "string" }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "FieldDefWithCondition": { "additionalProperties": false, "description": "A FieldDef with Condition\n{\n condition: {value: ...},\n field: ...,\n ...\n}", "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "enum": [ "binned" ], "type": "string" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "condition": { "$ref": "#/definitions/ValueCondition", "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\nsince Vega-Lite only allows at most one encoded field per encoding channel." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "format": { "anyOf": [ { "type": "string" }, { "type": "object" } ], "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `\"formatType\"`](https://vega.github.io/vega-lite/usage/compile.html#format-type) that takes `datum.value` and format parameter as input), this property represents the format parameter.\n\n__Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format." }, "formatType": { "description": "The format type for labels (`\"number\"` or `\"time\"` or a [registered custom format type](https://vega.github.io/vega-lite/usage/compile.html#format-type)).\n\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.", "type": "string" }, "labelExpr": { "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels text.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.", "type": "string" }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "FieldDefWithoutScale": { "$ref": "#/definitions/TypedFieldDef", "description": "Field Def without scale (and without bin: \"binned\" support)." }, "FieldEqualPredicate": { "additionalProperties": false, "properties": { "equal": { "anyOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean" }, { "$ref": "#/definitions/DateTime" } ], "description": "The value that the field should be equal to." }, "field": { "$ref": "#/definitions/FieldName", "description": "Field to be tested." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit for the field to be tested." } }, "required": [ "equal", "field" ], "type": "object" }, "FieldGTEPredicate": { "additionalProperties": false, "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "Field to be tested." }, "gte": { "anyOf": [ { "type": "string" }, { "type": "number" }, { "$ref": "#/definitions/DateTime" } ], "description": "The value that the field should be greater than or equals to." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit for the field to be tested." } }, "required": [ "field", "gte" ], "type": "object" }, "FieldGTPredicate": { "additionalProperties": false, "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "Field to be tested." }, "gt": { "anyOf": [ { "type": "string" }, { "type": "number" }, { "$ref": "#/definitions/DateTime" } ], "description": "The value that the field should be greater than." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit for the field to be tested." } }, "required": [ "field", "gt" ], "type": "object" }, "FieldLTEPredicate": { "additionalProperties": false, "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "Field to be tested." }, "lte": { "anyOf": [ { "type": "string" }, { "type": "number" }, { "$ref": "#/definitions/DateTime" } ], "description": "The value that the field should be less than or equals to." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit for the field to be tested." } }, "required": [ "field", "lte" ], "type": "object" }, "FieldLTPredicate": { "additionalProperties": false, "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "Field to be tested." }, "lt": { "anyOf": [ { "type": "string" }, { "type": "number" }, { "$ref": "#/definitions/DateTime" } ], "description": "The value that the field should be less than." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit for the field to be tested." } }, "required": [ "field", "lt" ], "type": "object" }, "FieldName": { "type": "string" }, "FieldOneOfPredicate": { "additionalProperties": false, "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "Field to be tested." }, "oneOf": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "items": { "type": "number" }, "type": "array" }, { "items": { "type": "boolean" }, "type": "array" }, { "items": { "$ref": "#/definitions/DateTime" }, "type": "array" } ], "description": "A set of values that the `field`'s value should be a member of,\nfor a data item included in the filtered data." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit for the field to be tested." } }, "required": [ "field", "oneOf" ], "type": "object" }, "FieldRangePredicate": { "additionalProperties": false, "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "Field to be tested." }, "range": { "description": "An array of inclusive minimum and maximum values\nfor a field value of a data item to be included in the filtered data.", "items": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/DateTime" }, { "type": "null" } ] }, "maxItems": 2, "minItems": 2, "type": "array" }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit for the field to be tested." } }, "required": [ "field", "range" ], "type": "object" }, "FieldValidPredicate": { "additionalProperties": false, "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "Field to be tested." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit for the field to be tested." }, "valid": { "description": "If set to true the field's value has to be valid, meaning both not `null` and not [`NaN`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN).", "type": "boolean" } }, "required": [ "field", "valid" ], "type": "object" }, "FilterTransform": { "additionalProperties": false, "properties": { "filter": { "$ref": "#/definitions/PredicateComposition", "description": "The `filter` property must be a predication definition, which can takes one of the following forms:\n\n1) an [expression](https://vega.github.io/vega-lite/docs/types.html#expression) string,\nwhere `datum` can be used to refer to the current data object.\nFor example, `{filter: \"datum.b2 > 60\"}` would make the output data includes only items that have values in the field `b2` over 60.\n\n2) one of the [field predicates](https://vega.github.io/vega-lite/docs/predicate.html#field-predicate): [`equal`](https://vega.github.io/* vega-lite/docs/predicate.html#field-equal-predicate),\n[`lt`](https://vega.github.io/vega-lite/docs/predicate.html#lt-predicate),\n[`lte`](https://vega.github.io/vega-lite/docs/predicate.html#lte-predicate),\n[`gt`](https://vega.github.io/vega-lite/docs/predicate.html#gt-predicate),\n[`gte`](https://vega.github.io/vega-lite/docs/predicate.html#gte-predicate),\n[`range`](https://vega.github.io/vega-lite/docs/predicate.html#range-predicate),\n[`oneOf`](https://vega.github.io/vega-lite/docs/predicate.html#one-of-predicate),\nor [`valid`](https://vega.github.io/vega-lite/docs/predicate.html#valid-predicate),\n\n3) a [selection predicate](https://vega.github.io/vega-lite/docs/predicate.html#selection-predicate), which define the names of a selection that the data point should belong to (or a logical composition of selections).\n\n4) a [logical composition](https://vega.github.io/vega-lite/docs/predicate.html#composition) of (1), (2), or (3)." } }, "required": [ "filter" ], "type": "object" }, "Fit": { "anyOf": [ { "$ref": "#/definitions/GeoJsonFeature" }, { "$ref": "#/definitions/GeoJsonFeatureCollection" }, { "items": { "$ref": "#/definitions/GeoJsonFeature" }, "type": "array" } ] }, "FlattenTransform": { "additionalProperties": false, "properties": { "as": { "description": "The output field names for extracted array values.\n\n__Default value:__ The field name of the corresponding array field", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "flatten": { "description": "An array of one or more data fields containing arrays to flatten.\nIf multiple fields are specified, their array values should have a parallel structure, ideally with the same length.\nIf the lengths of parallel arrays do not match,\nthe longest array will be used with `null` values added for missing entries.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" } }, "required": [ "flatten" ], "type": "object" }, "FoldTransform": { "additionalProperties": false, "properties": { "as": { "description": "The output field names for the key and value properties produced by the fold transform.\n__Default value:__ `[\"key\", \"value\"]`", "items": [ { "$ref": "#/definitions/FieldName" }, { "$ref": "#/definitions/FieldName" } ], "maxItems": 2, "minItems": 2, "type": "array" }, "fold": { "description": "An array of data fields indicating the properties to fold.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" } }, "required": [ "fold" ], "type": "object" }, "FontStyle": { "type": "string" }, "FontWeight": { "enum": [ "normal", "bold", "lighter", "bolder", 100, 200, 300, 400, 500, 600, 700, 800, 900 ], "type": [ "string", "number" ] }, "Generator": { "anyOf": [ { "$ref": "#/definitions/SequenceGenerator" }, { "$ref": "#/definitions/SphereGenerator" }, { "$ref": "#/definitions/GraticuleGenerator" } ] }, "NormalizedConcatSpec": { "additionalProperties": false, "description": "Base interface for a generalized concatenation specification.", "properties": { "align": { "anyOf": [ { "$ref": "#/definitions/LayoutAlign" }, { "$ref": "#/definitions/RowCol" } ], "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`." }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/RowCol" } ], "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`" }, "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "concat": { "description": "A list of views to be concatenated.", "items": { "$ref": "#/definitions/NormalizedSpec" }, "type": "array" }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/RowCol" } ], "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)" }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" } }, "required": [ "concat" ], "type": "object" }, "ConcatSpec": { "additionalProperties": false, "description": "Base interface for a generalized concatenation specification.", "properties": { "align": { "anyOf": [ { "$ref": "#/definitions/LayoutAlign" }, { "$ref": "#/definitions/RowCol" } ], "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`." }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/RowCol" } ], "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`" }, "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "concat": { "description": "A list of views to be concatenated.", "items": { "$ref": "#/definitions/Spec" }, "type": "array" }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/RowCol" } ], "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)" }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" } }, "required": [ "concat" ], "type": "object" }, "NormalizedFacetSpec": { "additionalProperties": false, "description": "Base interface for a facet specification.", "properties": { "align": { "anyOf": [ { "$ref": "#/definitions/LayoutAlign" }, { "$ref": "#/definitions/RowCol" } ], "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`." }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/RowCol" } ], "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`" }, "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "facet": { "anyOf": [ { "$ref": "#/definitions/FacetFieldDef" }, { "$ref": "#/definitions/FacetMapping" } ], "description": "Definition for how to facet the data. One of:\n1) [a field definition for faceting the plot by one field](https://vega.github.io/vega-lite/docs/facet.html#field-def)\n2) [An object that maps `row` and `column` channels to their field definitions](https://vega.github.io/vega-lite/docs/facet.html#mapping)" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/RowCol" } ], "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)" }, "spec": { "anyOf": [ { "$ref": "#/definitions/LayerSpec" }, { "$ref": "#/definitions/FacetedUnitSpec" } ], "description": "A specification of the view that gets faceted." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" } }, "required": [ "facet", "spec" ], "type": "object" }, "FacetSpec": { "additionalProperties": false, "description": "Base interface for a facet specification.", "properties": { "align": { "anyOf": [ { "$ref": "#/definitions/LayoutAlign" }, { "$ref": "#/definitions/RowCol" } ], "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`." }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/RowCol" } ], "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`" }, "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "facet": { "anyOf": [ { "$ref": "#/definitions/FacetFieldDef" }, { "$ref": "#/definitions/FacetMapping" } ], "description": "Definition for how to facet the data. One of:\n1) [a field definition for faceting the plot by one field](https://vega.github.io/vega-lite/docs/facet.html#field-def)\n2) [An object that maps `row` and `column` channels to their field definitions](https://vega.github.io/vega-lite/docs/facet.html#mapping)" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/RowCol" } ], "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)" }, "spec": { "anyOf": [ { "$ref": "#/definitions/LayerSpec" }, { "$ref": "#/definitions/FacetedUnitSpec" } ], "description": "A specification of the view that gets faceted." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" } }, "required": [ "facet", "spec" ], "type": "object" }, "NormalizedHConcatSpec": { "additionalProperties": false, "description": "Base interface for a horizontal concatenation specification.", "properties": { "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`", "type": "boolean" }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "hconcat": { "description": "A list of views to be concatenated and put into a row.", "items": { "$ref": "#/definitions/NormalizedSpec" }, "type": "array" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`", "type": "number" }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" } }, "required": [ "hconcat" ], "type": "object" }, "HConcatSpec": { "additionalProperties": false, "description": "Base interface for a horizontal concatenation specification.", "properties": { "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`", "type": "boolean" }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "hconcat": { "description": "A list of views to be concatenated and put into a row.", "items": { "$ref": "#/definitions/Spec" }, "type": "array" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`", "type": "number" }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" } }, "required": [ "hconcat" ], "type": "object" }, "NormalizedSpec": { "anyOf": [ { "$ref": "#/definitions/FacetedUnitSpec" }, { "$ref": "#/definitions/LayerSpec" }, { "$ref": "#/definitions/RepeatSpec" }, { "$ref": "#/definitions/NormalizedFacetSpec" }, { "$ref": "#/definitions/NormalizedConcatSpec" }, { "$ref": "#/definitions/NormalizedVConcatSpec" }, { "$ref": "#/definitions/NormalizedHConcatSpec" } ], "description": "Any specification in Vega-Lite." }, "Spec": { "anyOf": [ { "$ref": "#/definitions/FacetedUnitSpec" }, { "$ref": "#/definitions/LayerSpec" }, { "$ref": "#/definitions/RepeatSpec" }, { "$ref": "#/definitions/FacetSpec" }, { "$ref": "#/definitions/ConcatSpec" }, { "$ref": "#/definitions/VConcatSpec" }, { "$ref": "#/definitions/HConcatSpec" } ], "description": "Any specification in Vega-Lite." }, "NormalizedVConcatSpec": { "additionalProperties": false, "description": "Base interface for a vertical concatenation specification.", "properties": { "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`", "type": "boolean" }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`", "type": "number" }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "vconcat": { "description": "A list of views to be concatenated and put into a column.", "items": { "$ref": "#/definitions/NormalizedSpec" }, "type": "array" } }, "required": [ "vconcat" ], "type": "object" }, "VConcatSpec": { "additionalProperties": false, "description": "Base interface for a vertical concatenation specification.", "properties": { "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`", "type": "boolean" }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`", "type": "number" }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "vconcat": { "description": "A list of views to be concatenated and put into a column.", "items": { "$ref": "#/definitions/Spec" }, "type": "array" } }, "required": [ "vconcat" ], "type": "object" }, "GeoJsonFeature": { }, "GeoJsonFeatureCollection": { }, "Gradient": { "anyOf": [ { "$ref": "#/definitions/LinearGradient" }, { "$ref": "#/definitions/RadialGradient" } ] }, "GradientStop": { "additionalProperties": false, "properties": { "color": { "$ref": "#/definitions/Color", "description": "The color value at this point in the gradient." }, "offset": { "description": "The offset fraction for the color stop, indicating its position within the gradient.", "type": "number" } }, "required": [ "offset", "color" ], "type": "object" }, "GraticuleGenerator": { "additionalProperties": false, "properties": { "graticule": { "anyOf": [ { "enum": [ true ], "type": "boolean" }, { "$ref": "#/definitions/GraticuleParams" } ], "description": "Generate graticule GeoJSON data for geographic reference lines." }, "name": { "description": "Provide a placeholder name and bind data at runtime.", "type": "string" } }, "required": [ "graticule" ], "type": "object" }, "GraticuleParams": { "additionalProperties": false, "properties": { "extent": { "$ref": "#/definitions/Vector2>", "description": "Sets both the major and minor extents to the same values." }, "extentMajor": { "$ref": "#/definitions/Vector2>", "description": "The major extent of the graticule as a two-element array of coordinates." }, "extentMinor": { "$ref": "#/definitions/Vector2>", "description": "The minor extent of the graticule as a two-element array of coordinates." }, "precision": { "description": "The precision of the graticule in degrees.\n\n__Default value:__ `2.5`", "type": "number" }, "step": { "$ref": "#/definitions/Vector2", "description": "Sets both the major and minor step angles to the same values." }, "stepMajor": { "$ref": "#/definitions/Vector2", "description": "The major step angles of the graticule.\n\n\n__Default value:__ `[90, 360]`" }, "stepMinor": { "$ref": "#/definitions/Vector2", "description": "The minor step angles of the graticule.\n\n__Default value:__ `[10, 10]`" } }, "type": "object" }, "Header": { "additionalProperties": false, "description": "Headers of row / column channels for faceted plots.", "properties": { "format": { "anyOf": [ { "type": "string" }, { "type": "object" } ], "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `\"formatType\"`](https://vega.github.io/vega-lite/usage/compile.html#format-type) that takes `datum.value` and format parameter as input), this property represents the format parameter.\n\n__Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format." }, "formatType": { "description": "The format type for labels (`\"number\"` or `\"time\"` or a [registered custom format type](https://vega.github.io/vega-lite/usage/compile.html#format-type)).\n\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.", "type": "string" }, "labelAlign": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment of header labels. One of `\"left\"`, `\"center\"`, or `\"right\"`." }, "labelAnchor": { "$ref": "#/definitions/TitleAnchor", "description": "The anchor position for placing the labels. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label." }, "labelAngle": { "description": "The rotation angle of the header labels.\n\n__Default value:__ `0` for column header, `-90` for row header.", "maximum": 360, "minimum": -360, "type": "number" }, "labelBaseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical text baseline for the header labels. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`.\nThe `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone." }, "labelColor": { "$ref": "#/definitions/Color", "description": "The color of the header label, can be in hex color code or regular color name." }, "labelExpr": { "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the header's backing `datum` object.", "type": "string" }, "labelFont": { "description": "The font of the header label.", "type": "string" }, "labelFontSize": { "description": "The font size of the header label, in pixels.", "minimum": 0, "type": "number" }, "labelFontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style of the header label." }, "labelFontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight of the header label." }, "labelLimit": { "description": "The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit", "type": "number" }, "labelLineHeight": { "description": "Line height in pixels for multi-line header labels or title text with `\"line-top\"` or `\"line-bottom\"` baseline.", "type": "number" }, "labelOrient": { "$ref": "#/definitions/Orient", "description": "The orientation of the header label. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`." }, "labelPadding": { "description": "The padding, in pixel, between facet header's label and the plot.\n\n__Default value:__ `10`", "type": "number" }, "labels": { "description": "A boolean flag indicating if labels should be included as part of the header.\n\n__Default value:__ `true`.", "type": "boolean" }, "orient": { "$ref": "#/definitions/Orient", "description": "Shortcut for setting both labelOrient and titleOrient." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "titleAlign": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment (to the anchor) of header titles." }, "titleAnchor": { "$ref": "#/definitions/TitleAnchor", "description": "The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title." }, "titleAngle": { "description": "The rotation angle of the header title.\n\n__Default value:__ `0`.", "maximum": 360, "minimum": -360, "type": "number" }, "titleBaseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical text baseline for the header title. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`.\nThe `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone.\n\n__Default value:__ `\"middle\"`" }, "titleColor": { "$ref": "#/definitions/Color", "description": "Color of the header title, can be in hex color code or regular color name." }, "titleFont": { "description": "Font of the header title. (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "titleFontSize": { "description": "Font size of the header title.", "minimum": 0, "type": "number" }, "titleFontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style of the header title." }, "titleFontWeight": { "$ref": "#/definitions/FontWeight", "description": "Font weight of the header title.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "titleLimit": { "description": "The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit", "type": "number" }, "titleLineHeight": { "description": "Line height in pixels for multi-line header title text or title text with `\"line-top\"` or `\"line-bottom\"` baseline.", "type": "number" }, "titleOrient": { "$ref": "#/definitions/Orient", "description": "The orientation of the header title. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`." }, "titlePadding": { "description": "The padding, in pixel, between facet header's title and the label.\n\n__Default value:__ `10`", "type": "number" } }, "type": "object" }, "HeaderConfig": { "additionalProperties": false, "properties": { "format": { "anyOf": [ { "type": "string" }, { "type": "object" } ], "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `\"formatType\"`](https://vega.github.io/vega-lite/usage/compile.html#format-type) that takes `datum.value` and format parameter as input), this property represents the format parameter.\n\n__Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format." }, "formatType": { "description": "The format type for labels (`\"number\"` or `\"time\"` or a [registered custom format type](https://vega.github.io/vega-lite/usage/compile.html#format-type)).\n\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.", "type": "string" }, "labelAlign": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment of header labels. One of `\"left\"`, `\"center\"`, or `\"right\"`." }, "labelAnchor": { "$ref": "#/definitions/TitleAnchor", "description": "The anchor position for placing the labels. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label." }, "labelAngle": { "description": "The rotation angle of the header labels.\n\n__Default value:__ `0` for column header, `-90` for row header.", "maximum": 360, "minimum": -360, "type": "number" }, "labelBaseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical text baseline for the header labels. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`.\nThe `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone." }, "labelColor": { "$ref": "#/definitions/Color", "description": "The color of the header label, can be in hex color code or regular color name." }, "labelExpr": { "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the header's backing `datum` object.", "type": "string" }, "labelFont": { "description": "The font of the header label.", "type": "string" }, "labelFontSize": { "description": "The font size of the header label, in pixels.", "minimum": 0, "type": "number" }, "labelFontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style of the header label." }, "labelFontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight of the header label." }, "labelLimit": { "description": "The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit", "type": "number" }, "labelLineHeight": { "description": "Line height in pixels for multi-line header labels or title text with `\"line-top\"` or `\"line-bottom\"` baseline.", "type": "number" }, "labelOrient": { "$ref": "#/definitions/Orient", "description": "The orientation of the header label. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`." }, "labelPadding": { "description": "The padding, in pixel, between facet header's label and the plot.\n\n__Default value:__ `10`", "type": "number" }, "labels": { "description": "A boolean flag indicating if labels should be included as part of the header.\n\n__Default value:__ `true`.", "type": "boolean" }, "orient": { "$ref": "#/definitions/Orient", "description": "Shortcut for setting both labelOrient and titleOrient." }, "title": { "description": "Set to null to disable title for the axis, legend, or header.", "type": "null" }, "titleAlign": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment (to the anchor) of header titles." }, "titleAnchor": { "$ref": "#/definitions/TitleAnchor", "description": "The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title." }, "titleAngle": { "description": "The rotation angle of the header title.\n\n__Default value:__ `0`.", "maximum": 360, "minimum": -360, "type": "number" }, "titleBaseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical text baseline for the header title. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`.\nThe `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone.\n\n__Default value:__ `\"middle\"`" }, "titleColor": { "$ref": "#/definitions/Color", "description": "Color of the header title, can be in hex color code or regular color name." }, "titleFont": { "description": "Font of the header title. (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "titleFontSize": { "description": "Font size of the header title.", "minimum": 0, "type": "number" }, "titleFontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style of the header title." }, "titleFontWeight": { "$ref": "#/definitions/FontWeight", "description": "Font weight of the header title.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "titleLimit": { "description": "The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit", "type": "number" }, "titleLineHeight": { "description": "Line height in pixels for multi-line header title text or title text with `\"line-top\"` or `\"line-bottom\"` baseline.", "type": "number" }, "titleOrient": { "$ref": "#/definitions/Orient", "description": "The orientation of the header title. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`." }, "titlePadding": { "description": "The padding, in pixel, between facet header's title and the label.\n\n__Default value:__ `10`", "type": "number" } }, "type": "object" }, "HexColor": { "format": "color-hex", "type": "string" }, "ImputeMethod": { "enum": [ "value", "median", "max", "min", "mean" ], "type": "string" }, "ImputeParams": { "additionalProperties": false, "properties": { "frame": { "description": "A frame specification as a two-element array used to control the window over which the specified method is applied. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. For example, the value `[-5, 5]` indicates that the window should include five objects preceding and five objects following the current object.\n\n__Default value:__: `[null, null]` indicating that the window includes all objects.", "items": [ { "type": [ "null", "number" ] }, { "type": [ "null", "number" ] } ], "maxItems": 2, "minItems": 2, "type": "array" }, "keyvals": { "anyOf": [ { "items": { }, "type": "array" }, { "$ref": "#/definitions/ImputeSequence" } ], "description": "Defines the key values that should be considered for imputation.\nAn array of key values or an object defining a [number sequence](https://vega.github.io/vega-lite/docs/impute.html#sequence-def).\n\nIf provided, this will be used in addition to the key values observed within the input data. If not provided, the values will be derived from all unique values of the `key` field. For `impute` in `encoding`, the key field is the x-field if the y-field is imputed, or vice versa.\n\nIf there is no impute grouping, this property _must_ be specified." }, "method": { "$ref": "#/definitions/ImputeMethod", "description": "The imputation method to use for the field value of imputed data objects.\nOne of `\"value\"`, `\"mean\"`, `\"median\"`, `\"max\"` or `\"min\"`.\n\n__Default value:__ `\"value\"`" }, "value": { "description": "The field value to use when the imputation `method` is `\"value\"`." } }, "type": "object" }, "ImputeSequence": { "additionalProperties": false, "properties": { "start": { "description": "The starting value of the sequence.\n__Default value:__ `0`", "type": "number" }, "step": { "description": "The step value between sequence entries.\n__Default value:__ `1` or `-1` if `stop < start`", "type": "number" }, "stop": { "description": "The ending value(exclusive) of the sequence.", "type": "number" } }, "required": [ "stop" ], "type": "object" }, "ImputeTransform": { "additionalProperties": false, "properties": { "frame": { "description": "A frame specification as a two-element array used to control the window over which the specified method is applied. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. For example, the value `[-5, 5]` indicates that the window should include five objects preceding and five objects following the current object.\n\n__Default value:__: `[null, null]` indicating that the window includes all objects.", "items": [ { "type": [ "null", "number" ] }, { "type": [ "null", "number" ] } ], "maxItems": 2, "minItems": 2, "type": "array" }, "groupby": { "description": "An optional array of fields by which to group the values.\nImputation will then be performed on a per-group basis.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "impute": { "$ref": "#/definitions/FieldName", "description": "The data field for which the missing values should be imputed." }, "key": { "$ref": "#/definitions/FieldName", "description": "A key field that uniquely identifies data objects within a group.\nMissing key values (those occurring in the data but not in the current group) will be imputed." }, "keyvals": { "anyOf": [ { "items": { }, "type": "array" }, { "$ref": "#/definitions/ImputeSequence" } ], "description": "Defines the key values that should be considered for imputation.\nAn array of key values or an object defining a [number sequence](https://vega.github.io/vega-lite/docs/impute.html#sequence-def).\n\nIf provided, this will be used in addition to the key values observed within the input data. If not provided, the values will be derived from all unique values of the `key` field. For `impute` in `encoding`, the key field is the x-field if the y-field is imputed, or vice versa.\n\nIf there is no impute grouping, this property _must_ be specified." }, "method": { "$ref": "#/definitions/ImputeMethod", "description": "The imputation method to use for the field value of imputed data objects.\nOne of `\"value\"`, `\"mean\"`, `\"median\"`, `\"max\"` or `\"min\"`.\n\n__Default value:__ `\"value\"`" }, "value": { "description": "The field value to use when the imputation `method` is `\"value\"`." } }, "required": [ "impute", "key" ], "type": "object" }, "InlineData": { "additionalProperties": false, "properties": { "format": { "$ref": "#/definitions/DataFormat", "description": "An object that specifies the format for parsing the data." }, "name": { "description": "Provide a placeholder name and bind data at runtime.", "type": "string" }, "values": { "$ref": "#/definitions/InlineDataset", "description": "The full data set, included inline. This can be an array of objects or primitive values, an object, or a string.\nArrays of primitive values are ingested as objects with a `data` property. Strings are parsed according to the specified format type." } }, "required": [ "values" ], "type": "object" }, "InlineDataset": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "items": { "type": "string" }, "type": "array" }, { "items": { "type": "boolean" }, "type": "array" }, { "items": { "type": "object" }, "type": "array" }, { "type": "string" }, { "type": "object" } ] }, "InputBinding": { "additionalProperties": false, "properties": { "autocomplete": { "type": "string" }, "debounce": { "type": "number" }, "element": { "$ref": "#/definitions/Element" }, "input": { "type": "string" }, "name": { "type": "string" }, "placeholder": { "type": "string" }, "type": { "type": "string" } }, "type": "object" }, "Interpolate": { "enum": [ "basis", "basis-open", "basis-closed", "bundle", "cardinal", "cardinal-open", "cardinal-closed", "catmull-rom", "linear", "linear-closed", "monotone", "natural", "step", "step-before", "step-after" ], "maximum": 900, "minimum": 100, "type": "string" }, "IntervalSelection": { "additionalProperties": false, "properties": { "bind": { "description": "Establishes a two-way binding between the interval selection and the scales\nused within the same view. This allows a user to interactively pan and\nzoom the view.\n\n__See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation.", "enum": [ "scales" ], "type": "string" }, "clear": { "anyOf": [ { "$ref": "#/definitions/Stream" }, { "type": "string" }, { "type": "boolean" } ], "description": "Clears the selection, emptying it of all values. Can be a\n[Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation." }, "empty": { "description": "By default, `all` data values are considered to lie within an empty selection.\nWhen set to `none`, empty selections contain no data values.", "enum": [ "all", "none" ], "type": "string" }, "encodings": { "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/SingleDefUnitChannel" }, "type": "array" }, "fields": { "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "init": { "$ref": "#/definitions/SelectionInitIntervalMapping", "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and arrays of\ninitial values.\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation." }, "mark": { "$ref": "#/definitions/BrushConfig", "description": "An interval selection also adds a rectangle mark to depict the\nextents of the interval. The `mark` property can be used to customize the\nappearance of the mark.\n\n__See also:__ [`mark`](https://vega.github.io/vega-lite/docs/selection-mark.html) documentation." }, "on": { "anyOf": [ { "$ref": "#/definitions/Stream" }, { "type": "string" } ], "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\nFor interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)." }, "resolve": { "$ref": "#/definitions/SelectionResolution", "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation." }, "translate": { "description": "When truthy, allows a user to interactively move an interval selection\nback-and-forth. Can be `true`, `false` (to disable panning), or a\n[Vega event stream definition](https://vega.github.io/vega/docs/event-streams/)\nwhich must include a start and end event to trigger continuous panning.\n\n__Default value:__ `true`, which corresponds to\n`[mousedown, window:mouseup] > window:mousemove!` which corresponds to\nclicks and dragging within an interval selection to reposition it.\n\n__See also:__ [`translate`](https://vega.github.io/vega-lite/docs/translate.html) documentation.", "type": [ "string", "boolean" ] }, "type": { "description": "Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types:\n\n- `\"single\"` -- to select a single discrete data value on `click`.\n- `\"multi\"` -- to select multiple discrete data value; the first value is selected on `click` and additional values toggled on shift-`click`.\n- `\"interval\"` -- to select a continuous range of data values on `drag`.", "enum": [ "interval" ], "type": "string" }, "zoom": { "description": "When truthy, allows a user to interactively resize an interval selection.\nCan be `true`, `false` (to disable zooming), or a [Vega event stream\ndefinition](https://vega.github.io/vega/docs/event-streams/). Currently,\nonly `wheel` events are supported.\n\n__Default value:__ `true`, which corresponds to `wheel!`.\n\n__See also:__ [`zoom`](https://vega.github.io/vega-lite/docs/zoom.html) documentation.", "type": [ "string", "boolean" ] } }, "required": [ "type" ], "type": "object" }, "IntervalSelectionConfig": { "additionalProperties": false, "properties": { "bind": { "description": "Establishes a two-way binding between the interval selection and the scales\nused within the same view. This allows a user to interactively pan and\nzoom the view.\n\n__See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation.", "enum": [ "scales" ], "type": "string" }, "clear": { "anyOf": [ { "$ref": "#/definitions/Stream" }, { "type": "string" }, { "type": "boolean" } ], "description": "Clears the selection, emptying it of all values. Can be a\n[Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation." }, "empty": { "description": "By default, `all` data values are considered to lie within an empty selection.\nWhen set to `none`, empty selections contain no data values.", "enum": [ "all", "none" ], "type": "string" }, "encodings": { "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/SingleDefUnitChannel" }, "type": "array" }, "fields": { "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "init": { "$ref": "#/definitions/SelectionInitIntervalMapping", "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and arrays of\ninitial values.\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation." }, "mark": { "$ref": "#/definitions/BrushConfig", "description": "An interval selection also adds a rectangle mark to depict the\nextents of the interval. The `mark` property can be used to customize the\nappearance of the mark.\n\n__See also:__ [`mark`](https://vega.github.io/vega-lite/docs/selection-mark.html) documentation." }, "on": { "anyOf": [ { "$ref": "#/definitions/Stream" }, { "type": "string" } ], "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\nFor interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)." }, "resolve": { "$ref": "#/definitions/SelectionResolution", "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation." }, "translate": { "description": "When truthy, allows a user to interactively move an interval selection\nback-and-forth. Can be `true`, `false` (to disable panning), or a\n[Vega event stream definition](https://vega.github.io/vega/docs/event-streams/)\nwhich must include a start and end event to trigger continuous panning.\n\n__Default value:__ `true`, which corresponds to\n`[mousedown, window:mouseup] > window:mousemove!` which corresponds to\nclicks and dragging within an interval selection to reposition it.\n\n__See also:__ [`translate`](https://vega.github.io/vega-lite/docs/translate.html) documentation.", "type": [ "string", "boolean" ] }, "zoom": { "description": "When truthy, allows a user to interactively resize an interval selection.\nCan be `true`, `false` (to disable zooming), or a [Vega event stream\ndefinition](https://vega.github.io/vega/docs/event-streams/). Currently,\nonly `wheel` events are supported.\n\n__Default value:__ `true`, which corresponds to `wheel!`.\n\n__See also:__ [`zoom`](https://vega.github.io/vega-lite/docs/zoom.html) documentation.", "type": [ "string", "boolean" ] } }, "type": "object" }, "JoinAggregateFieldDef": { "additionalProperties": false, "properties": { "as": { "$ref": "#/definitions/FieldName", "description": "The output name for the join aggregate operation." }, "field": { "$ref": "#/definitions/FieldName", "description": "The data field for which to compute the aggregate function. This can be omitted for functions that do not operate over a field such as `\"count\"`." }, "op": { "$ref": "#/definitions/AggregateOp", "description": "The aggregation operation to apply (e.g., `\"sum\"`, `\"average\"` or `\"count\"`). See the list of all supported operations [here](https://vega.github.io/vega-lite/docs/aggregate.html#ops)." } }, "required": [ "op", "as" ], "type": "object" }, "JoinAggregateTransform": { "additionalProperties": false, "properties": { "groupby": { "description": "The data fields for partitioning the data objects into separate groups. If unspecified, all data points will be in a single group.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "joinaggregate": { "description": "The definition of the fields in the join aggregate, and what calculations to use.", "items": { "$ref": "#/definitions/JoinAggregateFieldDef" }, "type": "array" } }, "required": [ "joinaggregate" ], "type": "object" }, "JsonDataFormat": { "additionalProperties": false, "properties": { "parse": { "anyOf": [ { "$ref": "#/definitions/Parse" }, { "type": "null" } ], "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data.\nAlternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)).\nFor example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\nFor Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)" }, "property": { "description": "The JSON property containing the desired data.\nThis parameter can be used when the loaded JSON file may have surrounding structure or meta-data.\nFor example `\"property\": \"values.features\"` is equivalent to retrieving `json.values.features`\nfrom the loaded JSON object.", "type": "string" }, "type": { "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n\n__Default value:__ The default format type is determined by the extension of the file URL.\nIf no extension is detected, `\"json\"` will be used by default.", "enum": [ "json" ], "type": "string" } }, "type": "object" }, "LabelOverlap": { "anyOf": [ { "type": "boolean" }, { "enum": [ "parity" ], "type": "string" }, { "enum": [ "greedy" ], "type": "string" } ] }, "LatLongFieldDef": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.", "type": "null" }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation.", "enum": [ "quantitative" ], "type": "string" } }, "type": "object" }, "LayerSpec": { "additionalProperties": false, "description": "A full layered plot specification, which may contains `encoding` and `projection` properties that will be applied to underlying unit (single-view) specifications.", "properties": { "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "encoding": { "$ref": "#/definitions/Encoding", "description": "A shared key-value mapping between encoding channels and definition of fields in the underlying layers." }, "height": { "anyOf": [ { "type": "number" }, { "enum": [ "container" ], "type": "string" }, { "$ref": "#/definitions/Step" } ], "description": "The height of a visualization.\n\n- For a plot with a continuous y-field, height should be a number.\n- For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.)\n- To enable responsive sizing on height, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation." }, "layer": { "description": "Layer or single view specifications to be layered.\n\n__Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.", "items": { "anyOf": [ { "$ref": "#/definitions/LayerSpec" }, { "$ref": "#/definitions/UnitSpec" } ] }, "type": "array" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "projection": { "$ref": "#/definitions/Projection", "description": "An object defining properties of the geographic projection shared by underlying layers." }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "view": { "$ref": "#/definitions/ViewBackground", "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)" }, "width": { "anyOf": [ { "type": "number" }, { "enum": [ "container" ], "type": "string" }, { "$ref": "#/definitions/Step" } ], "description": "The width of a visualization.\n\n- For a plot with a continuous x-field, width should be a number.\n- For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.)\n- To enable responsive sizing on width, it should be set to `\"container\"`.\n\n__Default value:__\nBased on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation." } }, "required": [ "layer" ], "type": "object" }, "LayoutAlign": { "enum": [ "all", "each", "none" ], "type": "string" }, "Legend": { "additionalProperties": false, "description": "Properties of a legend or boolean flag for determining whether to show it.", "properties": { "clipHeight": { "description": "The height in pixels to clip symbol legend entries and limit their size.", "type": "number" }, "columnPadding": { "description": "The horizontal padding in pixels between symbol legend entries.\n\n__Default value:__ `10`.", "type": "number" }, "columns": { "description": "The number of columns in which to arrange symbol legend entries. A value of `0` or lower indicates a single row with one column per entry.", "type": "number" }, "cornerRadius": { "description": "Corner radius for the full legend.", "type": "number" }, "direction": { "$ref": "#/definitions/Orientation", "description": "The direction of the legend, one of `\"vertical\"` or `\"horizontal\"`.\n\n__Default value:__\n- For top-/bottom-`orient`ed legends, `\"horizontal\"`\n- For left-/right-`orient`ed legends, `\"vertical\"`\n- For top/bottom-left/right-`orient`ed legends, `\"horizontal\"` for gradient legends and `\"vertical\"` for symbol legends." }, "fillColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "Background fill color for the full legend." }, "format": { "anyOf": [ { "type": "string" }, { "type": "object" } ], "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `\"formatType\"`](https://vega.github.io/vega-lite/usage/compile.html#format-type) that takes `datum.value` and format parameter as input), this property represents the format parameter.\n\n__Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format." }, "formatType": { "description": "The format type for labels (`\"number\"` or `\"time\"` or a [registered custom format type](https://vega.github.io/vega-lite/usage/compile.html#format-type)).\n\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.", "type": "string" }, "gradientLength": { "description": "The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient.\n\n__Default value:__ `200`.", "minimum": 0, "type": "number" }, "gradientOpacity": { "description": "Opacity of the color gradient.", "type": "number" }, "gradientStrokeColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "The color of the gradient stroke, can be in hex color code or regular color name.\n\n__Default value:__ `\"lightGray\"`." }, "gradientStrokeWidth": { "description": "The width of the gradient stroke, in pixels.\n\n__Default value:__ `0`.", "minimum": 0, "type": "number" }, "gradientThickness": { "description": "The thickness in pixels of the color gradient. This value corresponds to the width of a vertical gradient or the height of a horizontal gradient.\n\n__Default value:__ `16`.", "minimum": 0, "type": "number" }, "gridAlign": { "$ref": "#/definitions/LayoutAlign", "description": "The alignment to apply to symbol legends rows and columns. The supported string values are `\"all\"`, `\"each\"` (the default), and `none`. For more information, see the [grid layout documentation](https://vega.github.io/vega/docs/layout).\n\n__Default value:__ `\"each\"`." }, "labelAlign": { "$ref": "#/definitions/Align", "description": "The alignment of the legend label, can be left, center, or right." }, "labelBaseline": { "$ref": "#/definitions/TextBaseline", "description": "The position of the baseline of legend label, can be `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`.\n\n__Default value:__ `\"middle\"`." }, "labelColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "The color of the legend label, can be in hex color code or regular color name." }, "labelExpr": { "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the legend's backing `datum` object.", "type": "string" }, "labelFont": { "description": "The font of the legend label.", "type": "string" }, "labelFontSize": { "description": "The font size of legend label.\n\n__Default value:__ `10`.", "minimum": 0, "type": "number" }, "labelFontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style of legend label." }, "labelFontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight of legend label." }, "labelLimit": { "description": "Maximum allowed pixel width of legend tick labels.\n\n__Default value:__ `160`.", "type": "number" }, "labelOffset": { "description": "The offset of the legend label.", "type": "number" }, "labelOpacity": { "description": "Opacity of labels.", "type": "number" }, "labelOverlap": { "$ref": "#/definitions/LabelOverlap", "description": "The strategy to use for resolving overlap of labels in gradient legends. If `false`, no overlap reduction is attempted. If set to `true` (default) or `\"parity\"`, a strategy of removing every other label is used. If set to `\"greedy\"`, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes).\n\n__Default value:__ `true`." }, "labelPadding": { "description": "Padding in pixels between the legend and legend labels.", "type": "number" }, "labelSeparation": { "description": "The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default `0`). This property is ignored if *labelOverlap* resolution is not enabled.", "type": "number" }, "legendX": { "description": "Custom x-position for legend with orient \"none\".", "type": "number" }, "legendY": { "description": "Custom y-position for legend with orient \"none\".", "type": "number" }, "offset": { "description": "The offset in pixels by which to displace the legend from the data rectangle and axes.\n\n__Default value:__ `18`.", "type": "number" }, "orient": { "$ref": "#/definitions/LegendOrient", "description": "The orientation of the legend, which determines how the legend is positioned within the scene. One of `\"left\"`, `\"right\"`, `\"top\"`, `\"bottom\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom-left\"`, `\"bottom-right\"`, `\"none\"`.\n\n__Default value:__ `\"right\"`" }, "padding": { "description": "The padding between the border and content of the legend group.\n\n__Default value:__ `0`.", "type": "number" }, "rowPadding": { "description": "The vertical padding in pixels between symbol legend entries.\n\n__Default value:__ `2`.", "type": "number" }, "strokeColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "Border stroke color for the full legend." }, "symbolDash": { "description": "An array of alternating [stroke, space] lengths for dashed symbol strokes.", "items": { "type": "number" }, "type": "array" }, "symbolDashOffset": { "description": "The pixel offset at which to start drawing with the symbol stroke dash array.", "type": "number" }, "symbolFillColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "The color of the legend symbol," }, "symbolLimit": { "description": "The maximum number of allowed entries for a symbol legend. Additional entries will be dropped.", "type": "number" }, "symbolOffset": { "description": "Horizontal pixel offset for legend symbols.\n\n__Default value:__ `0`.", "type": "number" }, "symbolOpacity": { "description": "Opacity of the legend symbols.", "type": "number" }, "symbolSize": { "description": "The size of the legend symbol, in pixels.\n\n__Default value:__ `100`.", "minimum": 0, "type": "number" }, "symbolStrokeColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "Stroke color for legend symbols." }, "symbolStrokeWidth": { "description": "The width of the symbol's stroke.\n\n__Default value:__ `1.5`.", "minimum": 0, "type": "number" }, "symbolType": { "$ref": "#/definitions/SymbolShape", "description": "The symbol shape. One of the plotting shapes `circle` (default), `square`, `cross`, `diamond`, `triangle-up`, `triangle-down`, `triangle-right`, or `triangle-left`, the line symbol `stroke`, or one of the centered directional shapes `arrow`, `wedge`, or `triangle`. Alternatively, a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) can be provided. For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.\n\n__Default value:__ `\"circle\"`." }, "tickCount": { "$ref": "#/definitions/TickCount", "description": "The desired number of tick values for quantitative legends." }, "tickMinStep": { "description": "The minimum desired step between legend ticks, in terms of scale domain values. For example, a value of `1` indicates that ticks should not be less than 1 unit apart. If `tickMinStep` is specified, the `tickCount` value will be adjusted, if necessary, to enforce the minimum step value.\n\n__Default value__: `undefined`", "type": "number" }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "titleAlign": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment for legend titles.\n\n__Default value:__ `\"left\"`." }, "titleAnchor": { "$ref": "#/definitions/TitleAnchor", "description": "Text anchor position for placing legend titles." }, "titleBaseline": { "$ref": "#/definitions/TextBaseline", "description": "Vertical text baseline for legend titles.\n\n__Default value:__ `\"top\"`." }, "titleColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "The color of the legend title, can be in hex color code or regular color name." }, "titleFont": { "description": "The font of the legend title.", "type": "string" }, "titleFontSize": { "description": "The font size of the legend title.", "type": "number" }, "titleFontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style of the legend title." }, "titleFontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight of the legend title.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "titleLimit": { "description": "Maximum allowed pixel width of legend titles.\n\n__Default value:__ `180`.", "minimum": 0, "type": "number" }, "titleLineHeight": { "description": "Line height in pixels for multi-line title text.", "type": "number" }, "titleOpacity": { "description": "Opacity of the legend title.", "type": "number" }, "titleOrient": { "$ref": "#/definitions/Orient", "description": "Orientation of the legend title." }, "titlePadding": { "description": "The padding, in pixels, between title and legend.\n\n__Default value:__ `5`.", "type": "number" }, "type": { "description": "The type of the legend. Use `\"symbol\"` to create a discrete legend and `\"gradient\"` for a continuous color gradient.\n\n__Default value:__ `\"gradient\"` for non-binned quantitative fields and temporal fields; `\"symbol\"` otherwise.", "enum": [ "symbol", "gradient" ], "type": "string" }, "values": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "items": { "type": "string" }, "type": "array" }, { "items": { "type": "boolean" }, "type": "array" }, { "items": { "$ref": "#/definitions/DateTime" }, "type": "array" } ], "description": "Explicitly set the visible legend values." }, "zindex": { "description": "A non-negative integer indicating the z-index of the legend.\nIf zindex is 0, legend should be drawn behind all chart elements.\nTo put them in front, use zindex = 1.", "minimum": 0, "type": "number" } }, "type": "object" }, "LegendBinding": { "anyOf": [ { "enum": [ "legend" ], "type": "string" }, { "$ref": "#/definitions/LegendStreamBinding" } ] }, "LegendConfig": { "additionalProperties": false, "properties": { "clipHeight": { "description": "The height in pixels to clip symbol legend entries and limit their size.", "type": "number" }, "columnPadding": { "description": "The horizontal padding in pixels between symbol legend entries.\n\n__Default value:__ `10`.", "type": "number" }, "columns": { "description": "The number of columns in which to arrange symbol legend entries. A value of `0` or lower indicates a single row with one column per entry.", "type": "number" }, "cornerRadius": { "description": "Corner radius for the full legend.", "type": "number" }, "direction": { "$ref": "#/definitions/Orientation", "description": "The direction of the legend, one of `\"vertical\"` or `\"horizontal\"`.\n\n__Default value:__\n- For top-/bottom-`orient`ed legends, `\"horizontal\"`\n- For left-/right-`orient`ed legends, `\"vertical\"`\n- For top/bottom-left/right-`orient`ed legends, `\"horizontal\"` for gradient legends and `\"vertical\"` for symbol legends." }, "disable": { "description": "Disable legend by default", "type": "boolean" }, "fillColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "Background fill color for the full legend." }, "gradientDirection": { "$ref": "#/definitions/Orientation", "description": "The default direction (`\"horizontal\"` or `\"vertical\"`) for gradient legends.\n\n__Default value:__ `\"vertical\"`." }, "gradientHorizontalMaxLength": { "description": "Max legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `200`", "type": "number" }, "gradientHorizontalMinLength": { "description": "Min legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `100`", "type": "number" }, "gradientLabelLimit": { "description": "The maximum allowed length in pixels of color ramp gradient labels.", "type": "number" }, "gradientLabelOffset": { "description": "Vertical offset in pixels for color ramp gradient labels.\n\n__Default value:__ `2`.", "type": "number" }, "gradientLength": { "description": "The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient.\n\n__Default value:__ `200`.", "minimum": 0, "type": "number" }, "gradientOpacity": { "description": "Opacity of the color gradient.", "type": "number" }, "gradientStrokeColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "The color of the gradient stroke, can be in hex color code or regular color name.\n\n__Default value:__ `\"lightGray\"`." }, "gradientStrokeWidth": { "description": "The width of the gradient stroke, in pixels.\n\n__Default value:__ `0`.", "minimum": 0, "type": "number" }, "gradientThickness": { "description": "The thickness in pixels of the color gradient. This value corresponds to the width of a vertical gradient or the height of a horizontal gradient.\n\n__Default value:__ `16`.", "minimum": 0, "type": "number" }, "gradientVerticalMaxLength": { "description": "Max legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `200`", "type": "number" }, "gradientVerticalMinLength": { "description": "Min legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `100`", "type": "number" }, "gridAlign": { "$ref": "#/definitions/LayoutAlign", "description": "The alignment to apply to symbol legends rows and columns. The supported string values are `\"all\"`, `\"each\"` (the default), and `none`. For more information, see the [grid layout documentation](https://vega.github.io/vega/docs/layout).\n\n__Default value:__ `\"each\"`." }, "labelAlign": { "$ref": "#/definitions/Align", "description": "The alignment of the legend label, can be left, center, or right." }, "labelBaseline": { "$ref": "#/definitions/TextBaseline", "description": "The position of the baseline of legend label, can be `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`.\n\n__Default value:__ `\"middle\"`." }, "labelColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "The color of the legend label, can be in hex color code or regular color name." }, "labelFont": { "description": "The font of the legend label.", "type": "string" }, "labelFontSize": { "description": "The font size of legend label.\n\n__Default value:__ `10`.", "minimum": 0, "type": "number" }, "labelFontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style of legend label." }, "labelFontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight of legend label." }, "labelLimit": { "description": "Maximum allowed pixel width of legend tick labels.\n\n__Default value:__ `160`.", "type": "number" }, "labelOffset": { "description": "The offset of the legend label.", "type": "number" }, "labelOpacity": { "description": "Opacity of labels.", "type": "number" }, "labelOverlap": { "$ref": "#/definitions/LabelOverlap", "description": "The strategy to use for resolving overlap of labels in gradient legends. If `false`, no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used. If set to `\"greedy\"`, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes).\n\n__Default value:__ `\"greedy\"` for `log scales otherwise `true`." }, "labelPadding": { "description": "Padding in pixels between the legend and legend labels.", "type": "number" }, "labelSeparation": { "description": "The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default `0`). This property is ignored if *labelOverlap* resolution is not enabled.", "type": "number" }, "layout": { "description": "Legend orient group layout parameters.", "not": { } }, "legendX": { "description": "Custom x-position for legend with orient \"none\".", "type": "number" }, "legendY": { "description": "Custom y-position for legend with orient \"none\".", "type": "number" }, "offset": { "description": "The offset in pixels by which to displace the legend from the data rectangle and axes.\n\n__Default value:__ `18`.", "type": "number" }, "orient": { "$ref": "#/definitions/LegendOrient", "description": "The orientation of the legend, which determines how the legend is positioned within the scene. One of `\"left\"`, `\"right\"`, `\"top\"`, `\"bottom\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom-left\"`, `\"bottom-right\"`, `\"none\"`.\n\n__Default value:__ `\"right\"`" }, "padding": { "description": "The padding between the border and content of the legend group.\n\n__Default value:__ `0`.", "type": "number" }, "rowPadding": { "description": "The vertical padding in pixels between symbol legend entries.\n\n__Default value:__ `2`.", "type": "number" }, "strokeColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "Border stroke color for the full legend." }, "strokeDash": { "description": "Border stroke dash pattern for the full legend.", "items": { "type": "number" }, "type": "array" }, "strokeWidth": { "description": "Border stroke width for the full legend.", "type": "number" }, "symbolBaseFillColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "Default fill color for legend symbols. Only applied if there is no `\"fill\"` scale color encoding for the legend.\n\n__Default value:__ `\"transparent\"`." }, "symbolBaseStrokeColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "Default stroke color for legend symbols. Only applied if there is no `\"fill\"` scale color encoding for the legend.\n\n__Default value:__ `\"gray\"`." }, "symbolDash": { "description": "An array of alternating [stroke, space] lengths for dashed symbol strokes.", "items": { "type": "number" }, "type": "array" }, "symbolDashOffset": { "description": "The pixel offset at which to start drawing with the symbol stroke dash array.", "type": "number" }, "symbolDirection": { "$ref": "#/definitions/Orientation", "description": "The default direction (`\"horizontal\"` or `\"vertical\"`) for symbol legends.\n\n__Default value:__ `\"vertical\"`." }, "symbolFillColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "The color of the legend symbol," }, "symbolLimit": { "description": "The maximum number of allowed entries for a symbol legend. Additional entries will be dropped.", "type": "number" }, "symbolOffset": { "description": "Horizontal pixel offset for legend symbols.\n\n__Default value:__ `0`.", "type": "number" }, "symbolOpacity": { "description": "Opacity of the legend symbols.", "type": "number" }, "symbolSize": { "description": "The size of the legend symbol, in pixels.\n\n__Default value:__ `100`.", "minimum": 0, "type": "number" }, "symbolStrokeColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "Stroke color for legend symbols." }, "symbolStrokeWidth": { "description": "The width of the symbol's stroke.\n\n__Default value:__ `1.5`.", "minimum": 0, "type": "number" }, "symbolType": { "$ref": "#/definitions/SymbolShape", "description": "The symbol shape. One of the plotting shapes `circle` (default), `square`, `cross`, `diamond`, `triangle-up`, `triangle-down`, `triangle-right`, or `triangle-left`, the line symbol `stroke`, or one of the centered directional shapes `arrow`, `wedge`, or `triangle`. Alternatively, a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) can be provided. For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.\n\n__Default value:__ `\"circle\"`." }, "tickCount": { "$ref": "#/definitions/TickCount", "description": "The desired number of tick values for quantitative legends." }, "title": { "description": "Set to null to disable title for the axis, legend, or header.", "type": "null" }, "titleAlign": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment for legend titles.\n\n__Default value:__ `\"left\"`." }, "titleAnchor": { "$ref": "#/definitions/TitleAnchor", "description": "Text anchor position for placing legend titles." }, "titleBaseline": { "$ref": "#/definitions/TextBaseline", "description": "Vertical text baseline for legend titles.\n\n__Default value:__ `\"top\"`." }, "titleColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "The color of the legend title, can be in hex color code or regular color name." }, "titleFont": { "description": "The font of the legend title.", "type": "string" }, "titleFontSize": { "description": "The font size of the legend title.", "type": "number" }, "titleFontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style of the legend title." }, "titleFontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight of the legend title.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "titleLimit": { "description": "Maximum allowed pixel width of legend titles.\n\n__Default value:__ `180`.", "minimum": 0, "type": "number" }, "titleLineHeight": { "description": "Line height in pixels for multi-line title text.", "type": "number" }, "titleOpacity": { "description": "Opacity of the legend title.", "type": "number" }, "titleOrient": { "$ref": "#/definitions/Orient", "description": "Orientation of the legend title." }, "titlePadding": { "description": "The padding, in pixels, between title and legend.\n\n__Default value:__ `5`.", "type": "number" }, "unselectedOpacity": { "description": "The opacity of unselected legend entries.\n\n__Default value:__ 0.35.", "type": "number" } }, "type": "object" }, "LegendOrient": { "enum": [ "none", "left", "right", "top", "bottom", "top-left", "top-right", "bottom-left", "bottom-right" ], "type": "string" }, "LegendResolveMap": { "additionalProperties": false, "properties": { "color": { "$ref": "#/definitions/ResolveMode" }, "fill": { "$ref": "#/definitions/ResolveMode" }, "fillOpacity": { "$ref": "#/definitions/ResolveMode" }, "opacity": { "$ref": "#/definitions/ResolveMode" }, "shape": { "$ref": "#/definitions/ResolveMode" }, "size": { "$ref": "#/definitions/ResolveMode" }, "stroke": { "$ref": "#/definitions/ResolveMode" }, "strokeDash": { "$ref": "#/definitions/ResolveMode" }, "strokeOpacity": { "$ref": "#/definitions/ResolveMode" }, "strokeWidth": { "$ref": "#/definitions/ResolveMode" } }, "type": "object" }, "LegendStreamBinding": { "additionalProperties": false, "properties": { "legend": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/Stream" } ] } }, "required": [ "legend" ], "type": "object" }, "LineConfig": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of `\"left\"`, `\"right\"`, `\"center\"`." }, "angle": { "description": "The rotation angle of the text, in degrees.", "maximum": 360, "minimum": 0, "type": "number" }, "aspect": { "description": "Whether to keep aspect ratio of image marks.", "type": "boolean" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical text baseline. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `lineHeight` rather than `fontSize` alone." }, "blend": { "$ref": "#/definitions/Blend", "description": "The color blend mode for drawing an item on its current background. Any valid [CSS mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) value can be used.\n\n__Default value: `\"source-over\"`" }, "color": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" } ], "description": "Default color.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`." }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusBottomLeft": { "description": "The radius in pixels of rounded rectangle bottom left corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusBottomRight": { "description": "The radius in pixels of rounded rectangle bottom right corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusTopLeft": { "description": "The radius in pixels of rounded rectangle top right corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusTopRight": { "description": "The radius in pixels of rounded rectangle top left corner.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "dir": { "$ref": "#/definitions/TextDirection", "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`" }, "dx": { "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "dy": { "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "ellipsis": { "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`", "type": "string" }, "fill": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" }, { "type": "null" } ], "description": "Default Fill Color. This property has higher precedence than `config.color`.\n\n__Default value:__ (None)" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "filled": { "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for all `point`, `line`, and `rule` marks as well as `geoshape` marks for [`graticule`](https://vega.github.io/vega-lite/docs/data.html#graticule) data sources; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).", "type": "boolean" }, "font": { "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "fontSize": { "description": "The font size, in pixels.\n\n__Default value:__ `11`", "minimum": 0, "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style (e.g., `\"italic\"`)." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "height": { "description": "Height of the marks.", "type": "number" }, "href": { "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.", "format": "uri", "type": "string" }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "invalid": { "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.", "enum": [ "filter", null ], "type": [ "string", "null" ] }, "limit": { "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0` -- indicating no limit", "type": "number" }, "lineBreak": { "description": "A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued.", "type": "string" }, "lineHeight": { "description": "The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.", "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "order": { "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.", "type": [ "null", "boolean" ] }, "orient": { "$ref": "#/definitions/Orientation", "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored." }, "point": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/OverlayMarkDef" }, { "enum": [ "transparent" ], "type": "string" } ], "description": "A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points.\n\n- If this property is `\"transparent\"`, transparent points will be used (for enhancing tooltips and selections).\n\n- If this property is an empty object (`{}`) or `true`, filled points with default properties will be used.\n\n- If this property is `false`, no points would be automatically added to line or area marks.\n\n__Default value:__ `false`." }, "radius": { "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.", "minimum": 0, "type": "number" }, "shape": { "anyOf": [ { "$ref": "#/definitions/SymbolShape" }, { "type": "string" } ], "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`" }, "size": { "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__\n- `30` for point, circle, square marks; width/height's `step`\n- `2` for bar marks with discrete dimensions;\n- `5` for bar marks with continuous dimensions;\n- `11` for text marks.", "minimum": 0, "type": "number" }, "stroke": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" }, { "type": "null" } ], "description": "Default Stroke Color. This property has higher precedence than `config.color`.\n\n__Default value:__ (None)" }, "strokeCap": { "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"butt\"`", "type": "string" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`", "type": "string" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOffset": { "description": "The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "tension": { "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).", "type": "number" }, "text": { "$ref": "#/definitions/Text", "description": "Placeholder text if the `text` channel is not specified" }, "theta": { "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".", "type": "number" }, "timeUnitBand": { "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step.\nIf set to `0.5`, bandwidth of the marks will be half of the time unit band step.", "type": "number" }, "timeUnitBandPosition": { "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step.\nIf set to `0.5`, the marks will be positioned in the middle of the time unit band step.", "type": "number" }, "tooltip": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "boolean" }, { "$ref": "#/definitions/TooltipContent" }, { "type": "null" } ], "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite.\n\n__Default value:__ `null`" }, "width": { "description": "Width of the marks.", "type": "number" }, "x": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "y": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." } }, "type": "object" }, "LinearGradient": { "additionalProperties": false, "properties": { "gradient": { "description": "The type of gradient. Use `\"linear\"` for a linear gradient.", "enum": [ "linear" ], "type": "string" }, "id": { "type": "string" }, "stops": { "description": "An array of gradient stops defining the gradient color sequence.", "items": { "$ref": "#/definitions/GradientStop" }, "type": "array" }, "x1": { "description": "The starting x-coordinate, in normalized [0, 1] coordinates, of the linear gradient.\n\n__Default value:__ `0`", "type": "number" }, "x2": { "description": "The ending x-coordinate, in normalized [0, 1] coordinates, of the linear gradient.\n\n__Default value:__ `1`", "type": "number" }, "y1": { "description": "The starting y-coordinate, in normalized [0, 1] coordinates, of the linear gradient.\n\n__Default value:__ `0`", "type": "number" }, "y2": { "description": "The ending y-coordinate, in normalized [0, 1] coordinates, of the linear gradient.\n\n__Default value:__ `0`", "type": "number" } }, "required": [ "gradient", "stops" ], "type": "object" }, "LocalMultiTimeUnit": { "enum": [ "yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "quartermonth", "monthdate", "monthdatehours", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds" ], "type": "string" }, "LocalSingleTimeUnit": { "enum": [ "year", "quarter", "month", "day", "date", "hours", "minutes", "seconds", "milliseconds" ], "type": "string" }, "LoessTransform": { "additionalProperties": false, "properties": { "as": { "description": "The output field names for the smoothed points generated by the loess transform.\n\n__Default value:__ The field names of the input x and y values.", "items": [ { "$ref": "#/definitions/FieldName" }, { "$ref": "#/definitions/FieldName" } ], "maxItems": 2, "minItems": 2, "type": "array" }, "bandwidth": { "description": "A bandwidth parameter in the range `[0, 1]` that determines the amount of smoothing.\n\n__Default value:__ `0.3`", "type": "number" }, "groupby": { "description": "The data fields to group by. If not specified, a single group containing all data objects will be used.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "loess": { "$ref": "#/definitions/FieldName", "description": "The data field of the dependent variable to smooth." }, "on": { "$ref": "#/definitions/FieldName", "description": "The data field of the independent variable to use a predictor." } }, "required": [ "loess", "on" ], "type": "object" }, "LogicalAnd": { "additionalProperties": false, "properties": { "and": { "items": { "$ref": "#/definitions/PredicateComposition" }, "type": "array" } }, "required": [ "and" ], "type": "object" }, "SelectionAnd": { "additionalProperties": false, "properties": { "and": { "items": { "$ref": "#/definitions/SelectionComposition" }, "type": "array" } }, "required": [ "and" ], "type": "object" }, "PredicateComposition": { "anyOf": [ { "$ref": "#/definitions/LogicalNot" }, { "$ref": "#/definitions/LogicalAnd" }, { "$ref": "#/definitions/LogicalOr" }, { "$ref": "#/definitions/Predicate" } ] }, "SelectionComposition": { "anyOf": [ { "$ref": "#/definitions/SelectionNot" }, { "$ref": "#/definitions/SelectionAnd" }, { "$ref": "#/definitions/SelectionOr" }, { "type": "string" } ] }, "LogicalNot": { "additionalProperties": false, "properties": { "not": { "$ref": "#/definitions/PredicateComposition" } }, "required": [ "not" ], "type": "object" }, "SelectionNot": { "additionalProperties": false, "properties": { "not": { "$ref": "#/definitions/SelectionComposition" } }, "required": [ "not" ], "type": "object" }, "LogicalOr": { "additionalProperties": false, "properties": { "or": { "items": { "$ref": "#/definitions/PredicateComposition" }, "type": "array" } }, "required": [ "or" ], "type": "object" }, "SelectionOr": { "additionalProperties": false, "properties": { "or": { "items": { "$ref": "#/definitions/SelectionComposition" }, "type": "array" } }, "required": [ "or" ], "type": "object" }, "LookupData": { "additionalProperties": false, "properties": { "data": { "$ref": "#/definitions/Data", "description": "Secondary data source to lookup in." }, "fields": { "description": "Fields in foreign data or selection to lookup.\nIf not specified, the entire object is queried.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "key": { "$ref": "#/definitions/FieldName", "description": "Key in data to lookup." } }, "required": [ "data", "key" ], "type": "object" }, "LookupSelection": { "additionalProperties": false, "properties": { "fields": { "description": "Fields in foreign data or selection to lookup.\nIf not specified, the entire object is queried.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "key": { "$ref": "#/definitions/FieldName", "description": "Key in data to lookup." }, "selection": { "description": "Selection name to look up.", "type": "string" } }, "required": [ "key", "selection" ], "type": "object" }, "LookupTransform": { "additionalProperties": false, "properties": { "as": { "anyOf": [ { "$ref": "#/definitions/FieldName" }, { "items": { "$ref": "#/definitions/FieldName" }, "type": "array" } ], "description": "The output fields on which to store the looked up data values.\n\nFor data lookups, this property may be left blank if `from.fields`\nhas been specified (those field names will be used); if `from.fields`\nhas not been specified, `as` must be a string.\n\nFor selection lookups, this property is optional: if unspecified,\nlooked up values will be stored under a property named for the selection;\nand if specified, it must correspond to `from.fields`." }, "default": { "description": "The default value to use if lookup fails.\n\n__Default value:__ `null`", "type": "string" }, "from": { "anyOf": [ { "$ref": "#/definitions/LookupData" }, { "$ref": "#/definitions/LookupSelection" } ], "description": "Data source or selection for secondary data reference." }, "lookup": { "description": "Key in primary data source.", "type": "string" } }, "required": [ "lookup", "from" ], "type": "object" }, "Mark": { "description": "All types of primitive marks.", "enum": [ "area", "bar", "line", "image", "trail", "point", "text", "tick", "rect", "rule", "circle", "square", "geoshape" ], "type": "string" }, "MarkConfig": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of `\"left\"`, `\"right\"`, `\"center\"`." }, "angle": { "description": "The rotation angle of the text, in degrees.", "maximum": 360, "minimum": 0, "type": "number" }, "aspect": { "description": "Whether to keep aspect ratio of image marks.", "type": "boolean" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical text baseline. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `lineHeight` rather than `fontSize` alone." }, "blend": { "$ref": "#/definitions/Blend", "description": "The color blend mode for drawing an item on its current background. Any valid [CSS mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) value can be used.\n\n__Default value: `\"source-over\"`" }, "color": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" } ], "description": "Default color.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`." }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusBottomLeft": { "description": "The radius in pixels of rounded rectangle bottom left corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusBottomRight": { "description": "The radius in pixels of rounded rectangle bottom right corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusTopLeft": { "description": "The radius in pixels of rounded rectangle top right corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusTopRight": { "description": "The radius in pixels of rounded rectangle top left corner.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "dir": { "$ref": "#/definitions/TextDirection", "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`" }, "dx": { "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "dy": { "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "ellipsis": { "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`", "type": "string" }, "fill": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" }, { "type": "null" } ], "description": "Default Fill Color. This property has higher precedence than `config.color`.\n\n__Default value:__ (None)" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "filled": { "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for all `point`, `line`, and `rule` marks as well as `geoshape` marks for [`graticule`](https://vega.github.io/vega-lite/docs/data.html#graticule) data sources; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).", "type": "boolean" }, "font": { "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "fontSize": { "description": "The font size, in pixels.\n\n__Default value:__ `11`", "minimum": 0, "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style (e.g., `\"italic\"`)." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "height": { "description": "Height of the marks.", "type": "number" }, "href": { "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.", "format": "uri", "type": "string" }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "invalid": { "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.", "enum": [ "filter", null ], "type": [ "string", "null" ] }, "limit": { "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0` -- indicating no limit", "type": "number" }, "lineBreak": { "description": "A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued.", "type": "string" }, "lineHeight": { "description": "The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.", "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "order": { "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.", "type": [ "null", "boolean" ] }, "orient": { "$ref": "#/definitions/Orientation", "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored." }, "radius": { "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.", "minimum": 0, "type": "number" }, "shape": { "anyOf": [ { "$ref": "#/definitions/SymbolShape" }, { "type": "string" } ], "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`" }, "size": { "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__\n- `30` for point, circle, square marks; width/height's `step`\n- `2` for bar marks with discrete dimensions;\n- `5` for bar marks with continuous dimensions;\n- `11` for text marks.", "minimum": 0, "type": "number" }, "stroke": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" }, { "type": "null" } ], "description": "Default Stroke Color. This property has higher precedence than `config.color`.\n\n__Default value:__ (None)" }, "strokeCap": { "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"butt\"`", "type": "string" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`", "type": "string" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOffset": { "description": "The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "tension": { "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).", "type": "number" }, "text": { "$ref": "#/definitions/Text", "description": "Placeholder text if the `text` channel is not specified" }, "theta": { "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".", "type": "number" }, "timeUnitBand": { "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step.\nIf set to `0.5`, bandwidth of the marks will be half of the time unit band step.", "type": "number" }, "timeUnitBandPosition": { "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step.\nIf set to `0.5`, the marks will be positioned in the middle of the time unit band step.", "type": "number" }, "tooltip": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "boolean" }, { "$ref": "#/definitions/TooltipContent" }, { "type": "null" } ], "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite.\n\n__Default value:__ `null`" }, "width": { "description": "Width of the marks.", "type": "number" }, "x": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "y": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." } }, "type": "object" }, "MarkDef": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of `\"left\"`, `\"right\"`, `\"center\"`." }, "angle": { "description": "The rotation angle of the text, in degrees.", "maximum": 360, "minimum": 0, "type": "number" }, "aspect": { "description": "Whether to keep aspect ratio of image marks.", "type": "boolean" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical text baseline. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `lineHeight` rather than `fontSize` alone." }, "binSpacing": { "description": "Offset between bars for binned field. The ideal value for this is either 0 (preferred by statisticians) or 1 (Vega-Lite default, D3 example style).\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, "blend": { "$ref": "#/definitions/Blend", "description": "The color blend mode for drawing an item on its current background. Any valid [CSS mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) value can be used.\n\n__Default value: `\"source-over\"`" }, "clip": { "description": "Whether a mark be clipped to the enclosing group’s width and height.", "type": "boolean" }, "color": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" } ], "description": "Default color.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`." }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusBottomLeft": { "description": "The radius in pixels of rounded rectangle bottom left corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusBottomRight": { "description": "The radius in pixels of rounded rectangle bottom right corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusEnd": { "description": "- For vertical bars, top-left and top-right corner radius.\n- For horizontal bars, top-right and bottom-right corner radius.", "type": "number" }, "cornerRadiusTopLeft": { "description": "The radius in pixels of rounded rectangle top right corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusTopRight": { "description": "The radius in pixels of rounded rectangle top left corner.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "dir": { "$ref": "#/definitions/TextDirection", "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`" }, "dx": { "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "dy": { "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "ellipsis": { "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`", "type": "string" }, "fill": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" }, { "type": "null" } ], "description": "Default Fill Color. This property has higher precedence than `config.color`.\n\n__Default value:__ (None)" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "filled": { "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for all `point`, `line`, and `rule` marks as well as `geoshape` marks for [`graticule`](https://vega.github.io/vega-lite/docs/data.html#graticule) data sources; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).", "type": "boolean" }, "font": { "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "fontSize": { "description": "The font size, in pixels.\n\n__Default value:__ `11`", "minimum": 0, "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style (e.g., `\"italic\"`)." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "height": { "description": "Height of the marks.", "type": "number" }, "href": { "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.", "format": "uri", "type": "string" }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "invalid": { "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.", "enum": [ "filter", null ], "type": [ "string", "null" ] }, "limit": { "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0` -- indicating no limit", "type": "number" }, "line": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/OverlayMarkDef" } ], "description": "A flag for overlaying line on top of area marks, or an object defining the properties of the overlayed lines.\n\n- If this value is an empty object (`{}`) or `true`, lines with default properties will be used.\n\n- If this value is `false`, no lines would be automatically added to area marks.\n\n__Default value:__ `false`." }, "lineBreak": { "description": "A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued.", "type": "string" }, "lineHeight": { "description": "The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.", "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "order": { "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.", "type": [ "null", "boolean" ] }, "orient": { "$ref": "#/definitions/Orientation", "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored." }, "point": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/OverlayMarkDef" }, { "enum": [ "transparent" ], "type": "string" } ], "description": "A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points.\n\n- If this property is `\"transparent\"`, transparent points will be used (for enhancing tooltips and selections).\n\n- If this property is an empty object (`{}`) or `true`, filled points with default properties will be used.\n\n- If this property is `false`, no points would be automatically added to line or area marks.\n\n__Default value:__ `false`." }, "radius": { "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.", "minimum": 0, "type": "number" }, "shape": { "anyOf": [ { "$ref": "#/definitions/SymbolShape" }, { "type": "string" } ], "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`" }, "size": { "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__\n- `30` for point, circle, square marks; width/height's `step`\n- `2` for bar marks with discrete dimensions;\n- `5` for bar marks with continuous dimensions;\n- `11` for text marks.", "minimum": 0, "type": "number" }, "stroke": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" }, { "type": "null" } ], "description": "Default Stroke Color. This property has higher precedence than `config.color`.\n\n__Default value:__ (None)" }, "strokeCap": { "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"butt\"`", "type": "string" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`", "type": "string" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOffset": { "description": "The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "style": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "description": "A string or array of strings indicating the name of custom styles to apply to the mark. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles. Any [mark properties](https://vega.github.io/vega-lite/docs/encoding.html#mark-prop) explicitly defined within the `encoding` will override a style default.\n\n__Default value:__ The mark's name. For example, a bar mark will have style `\"bar\"` by default.\n__Note:__ Any specified style will augment the default style. For example, a bar mark with `\"style\": \"foo\"` will receive from `config.style.bar` and `config.style.foo` (the specified style `\"foo\"` has higher precedence)." }, "tension": { "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).", "type": "number" }, "text": { "$ref": "#/definitions/Text", "description": "Placeholder text if the `text` channel is not specified" }, "theta": { "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".", "type": "number" }, "thickness": { "description": "Thickness of the tick mark.\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, "timeUnitBand": { "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step.\nIf set to `0.5`, bandwidth of the marks will be half of the time unit band step.", "type": "number" }, "timeUnitBandPosition": { "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step.\nIf set to `0.5`, the marks will be positioned in the middle of the time unit band step.", "type": "number" }, "tooltip": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "boolean" }, { "$ref": "#/definitions/TooltipContent" }, { "type": "null" } ], "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite.\n\n__Default value:__ `null`" }, "type": { "$ref": "#/definitions/Mark", "description": "The mark type. This could a primitive mark type\n(one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`)\nor a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`)." }, "width": { "description": "Width of the marks.", "type": "number" }, "x": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2Offset": { "description": "Offset for x2-position.", "type": "number" }, "xOffset": { "description": "Offset for x-position.", "type": "number" }, "y": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2Offset": { "description": "Offset for y2-position.", "type": "number" }, "yOffset": { "description": "Offset for y-position.", "type": "number" } }, "required": [ "type" ], "type": "object" }, "MarkType": { "enum": [ "arc", "area", "image", "group", "line", "path", "rect", "rule", "shape", "symbol", "text", "trail" ], "type": "string" }, "MergedStream": { "additionalProperties": false, "properties": { "between": { "items": { "$ref": "#/definitions/Stream" }, "type": "array" }, "consume": { "type": "boolean" }, "debounce": { "type": "number" }, "filter": { "anyOf": [ { "$ref": "#/definitions/Expr" }, { "items": { "$ref": "#/definitions/Expr" }, "type": "array" } ] }, "markname": { "type": "string" }, "marktype": { "$ref": "#/definitions/MarkType" }, "merge": { "items": { "$ref": "#/definitions/Stream" }, "type": "array" }, "throttle": { "type": "number" } }, "required": [ "merge" ], "type": "object" }, "Month": { "maximum": 12, "minimum": 1, "type": "number" }, "MultiSelection": { "additionalProperties": false, "properties": { "bind": { "$ref": "#/definitions/LegendBinding", "description": "When set, a selection is populated by interacting with the corresponding legend. Direct manipulation interaction is disabled by default;\nto re-enable it, set the selection's [`on`](https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties) property.\n\nLegend bindings are restricted to selections that only specify a single field or encoding." }, "clear": { "anyOf": [ { "$ref": "#/definitions/Stream" }, { "type": "string" }, { "type": "boolean" } ], "description": "Clears the selection, emptying it of all values. Can be a\n[Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation." }, "empty": { "description": "By default, `all` data values are considered to lie within an empty selection.\nWhen set to `none`, empty selections contain no data values.", "enum": [ "all", "none" ], "type": "string" }, "encodings": { "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/SingleDefUnitChannel" }, "type": "array" }, "fields": { "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "init": { "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and an initial\nvalue (or array of values).\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation.", "items": { "$ref": "#/definitions/SelectionInitMapping" }, "type": "array" }, "nearest": { "description": "When true, an invisible voronoi diagram is computed to accelerate discrete\nselection. The data value _nearest_ the mouse cursor is added to the selection.\n\n__See also:__ [`nearest`](https://vega.github.io/vega-lite/docs/nearest.html) documentation.", "type": "boolean" }, "on": { "anyOf": [ { "$ref": "#/definitions/Stream" }, { "type": "string" } ], "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\nFor interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)." }, "resolve": { "$ref": "#/definitions/SelectionResolution", "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation." }, "toggle": { "description": "Controls whether data values should be toggled or only ever inserted into\nmulti selections. Can be `true`, `false` (for insertion only), or a\n[Vega expression](https://vega.github.io/vega/docs/expressions/).\n\n__Default value:__ `true`, which corresponds to `event.shiftKey` (i.e.,\ndata values are toggled when a user interacts with the shift-key pressed).\n\n__See also:__ [`toggle`](https://vega.github.io/vega-lite/docs/toggle.html) documentation.", "type": [ "string", "boolean" ] }, "type": { "description": "Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types:\n\n- `\"single\"` -- to select a single discrete data value on `click`.\n- `\"multi\"` -- to select multiple discrete data value; the first value is selected on `click` and additional values toggled on shift-`click`.\n- `\"interval\"` -- to select a continuous range of data values on `drag`.", "enum": [ "multi" ], "type": "string" } }, "required": [ "type" ], "type": "object" }, "MultiSelectionConfig": { "additionalProperties": false, "properties": { "bind": { "$ref": "#/definitions/LegendBinding", "description": "When set, a selection is populated by interacting with the corresponding legend. Direct manipulation interaction is disabled by default;\nto re-enable it, set the selection's [`on`](https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties) property.\n\nLegend bindings are restricted to selections that only specify a single field or encoding." }, "clear": { "anyOf": [ { "$ref": "#/definitions/Stream" }, { "type": "string" }, { "type": "boolean" } ], "description": "Clears the selection, emptying it of all values. Can be a\n[Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation." }, "empty": { "description": "By default, `all` data values are considered to lie within an empty selection.\nWhen set to `none`, empty selections contain no data values.", "enum": [ "all", "none" ], "type": "string" }, "encodings": { "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/SingleDefUnitChannel" }, "type": "array" }, "fields": { "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "init": { "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and an initial\nvalue (or array of values).\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation.", "items": { "$ref": "#/definitions/SelectionInitMapping" }, "type": "array" }, "nearest": { "description": "When true, an invisible voronoi diagram is computed to accelerate discrete\nselection. The data value _nearest_ the mouse cursor is added to the selection.\n\n__See also:__ [`nearest`](https://vega.github.io/vega-lite/docs/nearest.html) documentation.", "type": "boolean" }, "on": { "anyOf": [ { "$ref": "#/definitions/Stream" }, { "type": "string" } ], "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\nFor interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)." }, "resolve": { "$ref": "#/definitions/SelectionResolution", "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation." }, "toggle": { "description": "Controls whether data values should be toggled or only ever inserted into\nmulti selections. Can be `true`, `false` (for insertion only), or a\n[Vega expression](https://vega.github.io/vega/docs/expressions/).\n\n__Default value:__ `true`, which corresponds to `event.shiftKey` (i.e.,\ndata values are toggled when a user interacts with the shift-key pressed).\n\n__See also:__ [`toggle`](https://vega.github.io/vega-lite/docs/toggle.html) documentation.", "type": [ "string", "boolean" ] } }, "type": "object" }, "MultiTimeUnit": { "anyOf": [ { "$ref": "#/definitions/LocalMultiTimeUnit" }, { "$ref": "#/definitions/UtcMultiTimeUnit" } ] }, "NamedData": { "additionalProperties": false, "properties": { "format": { "$ref": "#/definitions/DataFormat", "description": "An object that specifies the format for parsing the data." }, "name": { "description": "Provide a placeholder name and bind data at runtime.", "type": "string" } }, "required": [ "name" ], "type": "object" }, "NonArgAggregateOp": { "enum": [ "average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep" ], "type": "string" }, "NumericArrayFieldDefWithCondition": { "$ref": "#/definitions/FieldDefWithCondition" }, "NumericArrayValueDefWithCondition": { "$ref": "#/definitions/ValueDefWithCondition" }, "NumericFieldDefWithCondition": { "$ref": "#/definitions/FieldDefWithCondition" }, "NumericValueWithCondition": { "$ref": "#/definitions/ValueWithCondition" }, "OrderFieldDef": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "enum": [ "binned" ], "type": "string" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "sort": { "$ref": "#/definitions/SortOrder", "description": "The sort order. One of `\"ascending\"` (default) or `\"descending\"`." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "Orient": { "enum": [ "left", "right", "top", "bottom" ], "type": "string" }, "Orientation": { "enum": [ "horizontal", "vertical" ], "type": "string" }, "OverlayMarkDef": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of `\"left\"`, `\"right\"`, `\"center\"`." }, "angle": { "description": "The rotation angle of the text, in degrees.", "maximum": 360, "minimum": 0, "type": "number" }, "aspect": { "description": "Whether to keep aspect ratio of image marks.", "type": "boolean" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical text baseline. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `lineHeight` rather than `fontSize` alone." }, "blend": { "$ref": "#/definitions/Blend", "description": "The color blend mode for drawing an item on its current background. Any valid [CSS mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) value can be used.\n\n__Default value: `\"source-over\"`" }, "clip": { "description": "Whether a mark be clipped to the enclosing group’s width and height.", "type": "boolean" }, "color": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" } ], "description": "Default color.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`." }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusBottomLeft": { "description": "The radius in pixels of rounded rectangle bottom left corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusBottomRight": { "description": "The radius in pixels of rounded rectangle bottom right corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusTopLeft": { "description": "The radius in pixels of rounded rectangle top right corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusTopRight": { "description": "The radius in pixels of rounded rectangle top left corner.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "dir": { "$ref": "#/definitions/TextDirection", "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`" }, "dx": { "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "dy": { "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "ellipsis": { "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`", "type": "string" }, "fill": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" }, { "type": "null" } ], "description": "Default Fill Color. This property has higher precedence than `config.color`.\n\n__Default value:__ (None)" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "filled": { "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for all `point`, `line`, and `rule` marks as well as `geoshape` marks for [`graticule`](https://vega.github.io/vega-lite/docs/data.html#graticule) data sources; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).", "type": "boolean" }, "font": { "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "fontSize": { "description": "The font size, in pixels.\n\n__Default value:__ `11`", "minimum": 0, "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style (e.g., `\"italic\"`)." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "height": { "description": "Height of the marks.", "type": "number" }, "href": { "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.", "format": "uri", "type": "string" }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "invalid": { "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.", "enum": [ "filter", null ], "type": [ "string", "null" ] }, "limit": { "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0` -- indicating no limit", "type": "number" }, "lineBreak": { "description": "A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued.", "type": "string" }, "lineHeight": { "description": "The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.", "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "order": { "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.", "type": [ "null", "boolean" ] }, "orient": { "$ref": "#/definitions/Orientation", "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored." }, "radius": { "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.", "minimum": 0, "type": "number" }, "shape": { "anyOf": [ { "$ref": "#/definitions/SymbolShape" }, { "type": "string" } ], "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`" }, "size": { "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__\n- `30` for point, circle, square marks; width/height's `step`\n- `2` for bar marks with discrete dimensions;\n- `5` for bar marks with continuous dimensions;\n- `11` for text marks.", "minimum": 0, "type": "number" }, "stroke": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" }, { "type": "null" } ], "description": "Default Stroke Color. This property has higher precedence than `config.color`.\n\n__Default value:__ (None)" }, "strokeCap": { "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"butt\"`", "type": "string" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`", "type": "string" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOffset": { "description": "The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "style": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "description": "A string or array of strings indicating the name of custom styles to apply to the mark. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles. Any [mark properties](https://vega.github.io/vega-lite/docs/encoding.html#mark-prop) explicitly defined within the `encoding` will override a style default.\n\n__Default value:__ The mark's name. For example, a bar mark will have style `\"bar\"` by default.\n__Note:__ Any specified style will augment the default style. For example, a bar mark with `\"style\": \"foo\"` will receive from `config.style.bar` and `config.style.foo` (the specified style `\"foo\"` has higher precedence)." }, "tension": { "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).", "type": "number" }, "text": { "$ref": "#/definitions/Text", "description": "Placeholder text if the `text` channel is not specified" }, "theta": { "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".", "type": "number" }, "timeUnitBand": { "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step.\nIf set to `0.5`, bandwidth of the marks will be half of the time unit band step.", "type": "number" }, "timeUnitBandPosition": { "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step.\nIf set to `0.5`, the marks will be positioned in the middle of the time unit band step.", "type": "number" }, "tooltip": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "boolean" }, { "$ref": "#/definitions/TooltipContent" }, { "type": "null" } ], "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite.\n\n__Default value:__ `null`" }, "width": { "description": "Width of the marks.", "type": "number" }, "x": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2Offset": { "description": "Offset for x2-position.", "type": "number" }, "xOffset": { "description": "Offset for x-position.", "type": "number" }, "y": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2Offset": { "description": "Offset for y2-position.", "type": "number" }, "yOffset": { "description": "Offset for y-position.", "type": "number" } }, "type": "object" }, "Padding": { "anyOf": [ { "type": "number" }, { "additionalProperties": false, "properties": { "bottom": { "type": "number" }, "left": { "type": "number" }, "right": { "type": "number" }, "top": { "type": "number" } }, "type": "object" } ], "minimum": 0 }, "Parse": { "additionalProperties": { "$ref": "#/definitions/ParseValue" }, "type": "object" }, "ParseValue": { "anyOf": [ { "type": "null" }, { "type": "string" }, { "enum": [ "string" ], "type": "string" }, { "enum": [ "boolean" ], "type": "string" }, { "enum": [ "date" ], "type": "string" }, { "enum": [ "number" ], "type": "string" } ] }, "PivotTransform": { "additionalProperties": false, "properties": { "groupby": { "description": "The optional data fields to group by. If not specified, a single group containing all data objects will be used.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "limit": { "description": "An optional parameter indicating the maximum number of pivoted fields to generate.\nThe default (`0`) applies no limit. The pivoted `pivot` names are sorted in ascending order prior to enforcing the limit.\n__Default value:__ `0`", "type": "number" }, "op": { "description": "The aggregation operation to apply to grouped `value` field values.\n__Default value:__ `sum`", "type": "string" }, "pivot": { "$ref": "#/definitions/FieldName", "description": "The data field to pivot on. The unique values of this field become new field names in the output stream." }, "value": { "$ref": "#/definitions/FieldName", "description": "The data field to populate pivoted fields. The aggregate values of this field become the values of the new pivoted fields." } }, "required": [ "pivot", "value" ], "type": "object" }, "PositionFieldDef": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "axis": { "anyOf": [ { "$ref": "#/definitions/Axis" }, { "type": "null" } ], "description": "An object defining properties of axis's gridlines, ticks and labels.\nIf `null`, the axis for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [axis properties](https://vega.github.io/vega-lite/docs/axis.html) are applied.\n\n__See also:__ [`axis`](https://vega.github.io/vega-lite/docs/axis.html) documentation." }, "band": { "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band) or time units. If set to `1`, the mark size is set to the bandwidth or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.", "maximum": 1, "minimum": 0, "type": "number" }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "enum": [ "binned" ], "type": "string" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "impute": { "anyOf": [ { "$ref": "#/definitions/ImputeParams" }, { "type": "null" } ], "description": "An object defining the properties of the Impute Operation to be applied.\nThe field value of the other positional channel is taken as `key` of the `Impute` Operation.\nThe field of the `color` channel if specified is used as `groupby` of the `Impute` Operation.\n\n__See also:__ [`impute`](https://vega.github.io/vega-lite/docs/impute.html) documentation." }, "scale": { "anyOf": [ { "$ref": "#/definitions/Scale" }, { "type": "null" } ], "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation." }, "sort": { "$ref": "#/definitions/Sort", "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation." }, "stack": { "anyOf": [ { "$ref": "#/definitions/StackOffset" }, { "type": "null" }, { "type": "boolean" } ], "description": "Type of stacking offset if the field should be stacked.\n`stack` is only applicable for `x` and `y` channels with continuous domains.\nFor example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values:\n- `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart).\n- `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized).
\n-`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)).\n- `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true:\n(1) the mark is `bar` or `area`;\n(2) the stacked measure channel (x or y) has a linear scale;\n(3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "Predicate": { "anyOf": [ { "$ref": "#/definitions/FieldEqualPredicate" }, { "$ref": "#/definitions/FieldRangePredicate" }, { "$ref": "#/definitions/FieldOneOfPredicate" }, { "$ref": "#/definitions/FieldLTPredicate" }, { "$ref": "#/definitions/FieldGTPredicate" }, { "$ref": "#/definitions/FieldLTEPredicate" }, { "$ref": "#/definitions/FieldGTEPredicate" }, { "$ref": "#/definitions/FieldValidPredicate" }, { "$ref": "#/definitions/SelectionPredicate" }, { "type": "string" } ] }, "Projection": { "additionalProperties": false, "properties": { "center": { "$ref": "#/definitions/Vector2", "description": "The projection's center, a two-element array of longitude and latitude in degrees.\n\n__Default value:__ `[0, 0]`" }, "clipAngle": { "description": "The projection's clipping circle radius to the specified angle in degrees. If `null`, switches to [antimeridian](http://bl.ocks.org/mbostock/3788999) cutting rather than small-circle clipping.", "type": "number" }, "clipExtent": { "$ref": "#/definitions/Vector2>", "description": "The projection's viewport clip extent to the specified bounds in pixels. The extent bounds are specified as an array `[[x0, y0], [x1, y1]]`, where `x0` is the left-side of the viewport, `y0` is the top, `x1` is the right and `y1` is the bottom. If `null`, no viewport clipping is performed." }, "coefficient": { "type": "number" }, "distance": { "type": "number" }, "extent": { "$ref": "#/definitions/Vector2>" }, "fit": { "anyOf": [ { "$ref": "#/definitions/Fit" }, { "items": { "$ref": "#/definitions/Fit" }, "type": "array" } ] }, "fraction": { "type": "number" }, "lobes": { "type": "number" }, "parallel": { "type": "number" }, "parallels": { "description": "For conic projections, the [two standard parallels](https://en.wikipedia.org/wiki/Map_projection#Conic) that define the map layout. The default depends on the specific conic projection used.", "items": { "type": "number" }, "type": "array" }, "pointRadius": { "description": "The default radius (in pixels) to use when drawing GeoJSON `Point` and `MultiPoint` geometries. This parameter sets a constant default value. To modify the point radius in response to data, see the corresponding parameter of the GeoPath and GeoShape transforms.\n\n__Default value:__ `4.5`", "type": "number" }, "precision": { "description": "The threshold for the projection's [adaptive resampling](http://bl.ocks.org/mbostock/3795544) to the specified value in pixels. This value corresponds to the [Douglas–Peucker distance](http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm). If precision is not specified, returns the projection's current resampling precision which defaults to `√0.5 ≅ 0.70710…`.", "type": "number" }, "radius": { "type": "number" }, "ratio": { "type": "number" }, "reflectX": { "type": "boolean" }, "reflectY": { "type": "boolean" }, "rotate": { "anyOf": [ { "$ref": "#/definitions/Vector2" }, { "$ref": "#/definitions/Vector3" } ], "description": "The projection's three-axis rotation to the specified angles, which must be a two- or three-element array of numbers [`lambda`, `phi`, `gamma`] specifying the rotation angles in degrees about each spherical axis. (These correspond to yaw, pitch and roll.)\n\n__Default value:__ `[0, 0, 0]`" }, "scale": { "description": "The projection’s scale (zoom) factor, overriding automatic fitting. The default scale is projection-specific. The scale factor corresponds linearly to the distance between projected points; however, scale factor values are not equivalent across projections.", "type": "number" }, "size": { "$ref": "#/definitions/Vector2" }, "spacing": { "type": "number" }, "tilt": { "type": "number" }, "translate": { "$ref": "#/definitions/Vector2", "description": "The projection’s translation offset as a two-element array `[tx, ty]`." }, "type": { "$ref": "#/definitions/ProjectionType", "description": "The cartographic projection to use. This value is case-insensitive, for example `\"albers\"` and `\"Albers\"` indicate the same projection type. You can find all valid projection types [in the documentation](https://vega.github.io/vega-lite/docs/projection.html#projection-types).\n\n__Default value:__ `mercator`" } }, "type": "object" }, "ProjectionConfig": { "$ref": "#/definitions/Projection", "description": "Any property of Projection can be in config" }, "ProjectionType": { "enum": [ "albers", "albersUsa", "azimuthalEqualArea", "azimuthalEquidistant", "conicConformal", "conicEqualArea", "conicEquidistant", "equalEarth", "equirectangular", "gnomonic", "identity", "mercator", "naturalEarth1", "orthographic", "stereographic", "transverseMercator" ], "type": "string" }, "QuantileTransform": { "additionalProperties": false, "properties": { "as": { "description": "The output field names for the probability and quantile values.\n\n__Default value:__ `[\"prob\", \"value\"]`", "items": [ { "$ref": "#/definitions/FieldName" }, { "$ref": "#/definitions/FieldName" } ], "maxItems": 2, "minItems": 2, "type": "array" }, "groupby": { "description": "The data fields to group by. If not specified, a single group containing all data objects will be used.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "probs": { "description": "An array of probabilities in the range (0, 1) for which to compute quantile values. If not specified, the *step* parameter will be used.", "items": { "type": "number" }, "type": "array" }, "quantile": { "$ref": "#/definitions/FieldName", "description": "The data field for which to perform quantile estimation." }, "step": { "description": "A probability step size (default 0.01) for sampling quantile values. All values from one-half the step size up to 1 (exclusive) will be sampled. This parameter is only used if the *probs* parameter is not provided.", "type": "number" } }, "required": [ "quantile" ], "type": "object" }, "RadialGradient": { "additionalProperties": false, "properties": { "gradient": { "description": "The type of gradient. Use `\"radial\"` for a radial gradient.", "enum": [ "radial" ], "type": "string" }, "id": { "type": "string" }, "r1": { "description": "The radius length, in normalized [0, 1] coordinates, of the inner circle for the gradient.\n\n__Default value:__ `0`", "type": "number" }, "r2": { "description": "The radius length, in normalized [0, 1] coordinates, of the outer circle for the gradient.\n\n__Default value:__ `0.5`", "type": "number" }, "stops": { "description": "An array of gradient stops defining the gradient color sequence.", "items": { "$ref": "#/definitions/GradientStop" }, "type": "array" }, "x1": { "description": "The x-coordinate, in normalized [0, 1] coordinates, for the center of the inner circle for the gradient.\n\n__Default value:__ `0.5`", "type": "number" }, "x2": { "description": "The x-coordinate, in normalized [0, 1] coordinates, for the center of the outer circle for the gradient.\n\n__Default value:__ `0.5`", "type": "number" }, "y1": { "description": "The y-coordinate, in normalized [0, 1] coordinates, for the center of the inner circle for the gradient.\n\n__Default value:__ `0.5`", "type": "number" }, "y2": { "description": "The y-coordinate, in normalized [0, 1] coordinates, for the center of the outer circle for the gradient.\n\n__Default value:__ `0.5`", "type": "number" } }, "required": [ "gradient", "stops" ], "type": "object" }, "RangeConfig": { "additionalProperties": { "anyOf": [ { "$ref": "#/definitions/RangeScheme" }, { "type": "array" } ] }, "properties": { "category": { "anyOf": [ { "$ref": "#/definitions/RangeScheme" }, { "items": { "type": "string" }, "type": "array" } ], "description": "Default [color scheme](https://vega.github.io/vega/docs/schemes/) for categorical data." }, "diverging": { "anyOf": [ { "$ref": "#/definitions/RangeScheme" }, { "items": { "type": "string" }, "type": "array" } ], "description": "Default [color scheme](https://vega.github.io/vega/docs/schemes/) for diverging quantitative ramps." }, "heatmap": { "anyOf": [ { "$ref": "#/definitions/RangeScheme" }, { "items": { "type": "string" }, "type": "array" } ], "description": "Default [color scheme](https://vega.github.io/vega/docs/schemes/) for quantitative heatmaps." }, "ordinal": { "anyOf": [ { "$ref": "#/definitions/RangeScheme" }, { "items": { "type": "string" }, "type": "array" } ], "description": "Default [color scheme](https://vega.github.io/vega/docs/schemes/) for rank-ordered data." }, "ramp": { "anyOf": [ { "$ref": "#/definitions/RangeScheme" }, { "items": { "type": "string" }, "type": "array" } ], "description": "Default [color scheme](https://vega.github.io/vega/docs/schemes/) for sequential quantitative ramps." }, "symbol": { "description": "Array of [symbol](https://vega.github.io/vega/docs/marks/symbol/) names or paths for the default shape palette.", "items": { "$ref": "#/definitions/SymbolShape" }, "type": "array" } }, "type": "object" }, "RangeEnum": { "enum": [ "width", "height", "symbol", "category", "ordinal", "ramp", "diverging", "heatmap" ], "type": "string" }, "RangeRaw": { "items": { "anyOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "$ref": "#/definitions/RangeRawArray" } ] }, "type": "array" }, "RangeRawArray": { "items": { "type": "number" }, "type": "array" }, "RangeScheme": { "anyOf": [ { "$ref": "#/definitions/RangeEnum" }, { "$ref": "#/definitions/RangeRaw" }, { "additionalProperties": false, "properties": { "count": { "type": "number" }, "extent": { "items": { "type": "number" }, "type": "array" }, "scheme": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" }, { "$ref": "#/definitions/ColorScheme" } ] } }, "required": [ "scheme" ], "type": "object" } ] }, "RectConfig": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of `\"left\"`, `\"right\"`, `\"center\"`." }, "angle": { "description": "The rotation angle of the text, in degrees.", "maximum": 360, "minimum": 0, "type": "number" }, "aspect": { "description": "Whether to keep aspect ratio of image marks.", "type": "boolean" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical text baseline. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `lineHeight` rather than `fontSize` alone." }, "binSpacing": { "description": "Offset between bars for binned field. The ideal value for this is either 0 (preferred by statisticians) or 1 (Vega-Lite default, D3 example style).\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, "blend": { "$ref": "#/definitions/Blend", "description": "The color blend mode for drawing an item on its current background. Any valid [CSS mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) value can be used.\n\n__Default value: `\"source-over\"`" }, "color": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" } ], "description": "Default color.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`." }, "continuousBandSize": { "description": "The default size of the bars on continuous scales.\n\n__Default value:__ `5`", "minimum": 0, "type": "number" }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusBottomLeft": { "description": "The radius in pixels of rounded rectangle bottom left corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusBottomRight": { "description": "The radius in pixels of rounded rectangle bottom right corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusTopLeft": { "description": "The radius in pixels of rounded rectangle top right corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusTopRight": { "description": "The radius in pixels of rounded rectangle top left corner.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "dir": { "$ref": "#/definitions/TextDirection", "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`" }, "discreteBandSize": { "description": "The default size of the bars with discrete dimensions. If unspecified, the default size is `step-2`, which provides 2 pixel offset between bars.", "minimum": 0, "type": "number" }, "dx": { "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "dy": { "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "ellipsis": { "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`", "type": "string" }, "fill": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" }, { "type": "null" } ], "description": "Default Fill Color. This property has higher precedence than `config.color`.\n\n__Default value:__ (None)" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "filled": { "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for all `point`, `line`, and `rule` marks as well as `geoshape` marks for [`graticule`](https://vega.github.io/vega-lite/docs/data.html#graticule) data sources; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).", "type": "boolean" }, "font": { "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "fontSize": { "description": "The font size, in pixels.\n\n__Default value:__ `11`", "minimum": 0, "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style (e.g., `\"italic\"`)." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "height": { "description": "Height of the marks.", "type": "number" }, "href": { "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.", "format": "uri", "type": "string" }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "invalid": { "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.", "enum": [ "filter", null ], "type": [ "string", "null" ] }, "limit": { "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0` -- indicating no limit", "type": "number" }, "lineBreak": { "description": "A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued.", "type": "string" }, "lineHeight": { "description": "The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.", "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "order": { "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.", "type": [ "null", "boolean" ] }, "orient": { "$ref": "#/definitions/Orientation", "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored." }, "radius": { "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.", "minimum": 0, "type": "number" }, "shape": { "anyOf": [ { "$ref": "#/definitions/SymbolShape" }, { "type": "string" } ], "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`" }, "size": { "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__\n- `30` for point, circle, square marks; width/height's `step`\n- `2` for bar marks with discrete dimensions;\n- `5` for bar marks with continuous dimensions;\n- `11` for text marks.", "minimum": 0, "type": "number" }, "stroke": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" }, { "type": "null" } ], "description": "Default Stroke Color. This property has higher precedence than `config.color`.\n\n__Default value:__ (None)" }, "strokeCap": { "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"butt\"`", "type": "string" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`", "type": "string" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOffset": { "description": "The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "tension": { "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).", "type": "number" }, "text": { "$ref": "#/definitions/Text", "description": "Placeholder text if the `text` channel is not specified" }, "theta": { "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".", "type": "number" }, "timeUnitBand": { "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step.\nIf set to `0.5`, bandwidth of the marks will be half of the time unit band step.", "type": "number" }, "timeUnitBandPosition": { "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step.\nIf set to `0.5`, the marks will be positioned in the middle of the time unit band step.", "type": "number" }, "tooltip": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "boolean" }, { "$ref": "#/definitions/TooltipContent" }, { "type": "null" } ], "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite.\n\n__Default value:__ `null`" }, "width": { "description": "Width of the marks.", "type": "number" }, "x": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "y": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." } }, "type": "object" }, "RegressionTransform": { "additionalProperties": false, "properties": { "as": { "description": "The output field names for the smoothed points generated by the regression transform.\n\n__Default value:__ The field names of the input x and y values.", "items": [ { "$ref": "#/definitions/FieldName" }, { "$ref": "#/definitions/FieldName" } ], "maxItems": 2, "minItems": 2, "type": "array" }, "extent": { "description": "A [min, max] domain over the independent (x) field for the starting and ending points of the generated trend line.", "items": [ { "type": "number" }, { "type": "number" } ], "maxItems": 2, "minItems": 2, "type": "array" }, "groupby": { "description": "The data fields to group by. If not specified, a single group containing all data objects will be used.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "method": { "description": "The functional form of the regression model. One of `\"linear\"`, `\"log\"`, `\"exp\"`, `\"pow\"`, `\"quad\"`, or `\"poly\"`.\n\n__Default value:__ `\"linear\"`", "enum": [ "linear", "log", "exp", "pow", "quad", "poly" ], "type": "string" }, "on": { "$ref": "#/definitions/FieldName", "description": "The data field of the independent variable to use a predictor." }, "order": { "description": "The polynomial order (number of coefficients) for the 'poly' method.\n\n__Default value:__ `3`", "type": "number" }, "params": { "description": "A boolean flag indicating if the transform should return the regression model parameters (one object per group), rather than trend line points.\nThe resulting objects include a `coef` array of fitted coefficient values (starting with the intercept term and then including terms of increasing order)\nand an `rSquared` value (indicating the total variance explained by the model).\n\n__Default value:__ `false`", "type": "boolean" }, "regression": { "$ref": "#/definitions/FieldName", "description": "The data field of the dependent variable to predict." } }, "required": [ "regression", "on" ], "type": "object" }, "RepeatMapping": { "additionalProperties": false, "properties": { "column": { "description": "An array of fields to be repeated horizontally.", "items": { "type": "string" }, "type": "array" }, "row": { "description": "An array of fields to be repeated vertically.", "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "RepeatRef": { "additionalProperties": false, "description": "Reference to a repeated value.", "properties": { "repeat": { "enum": [ "row", "column", "repeat" ], "type": "string" } }, "required": [ "repeat" ], "type": "object" }, "RepeatSpec": { "additionalProperties": false, "description": "Base interface for a repeat specification.", "properties": { "align": { "anyOf": [ { "$ref": "#/definitions/LayoutAlign" }, { "$ref": "#/definitions/RowCol" } ], "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`." }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/RowCol" } ], "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`" }, "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "repeat": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "$ref": "#/definitions/RepeatMapping" } ], "description": "Definition for fields to be repeated. One of:\n1) An array of fields to be repeated. If `\"repeat\"` is an array, the field can be referred to as `{\"repeat\": \"repeat\"}`. The repeated views are laid out in a wrapped row. You can set the number of columns to control the wrapping.\n2) An object that maps `\"row\"` and/or `\"column\"` to the listed fields to be repeated along the particular orientations. The objects `{\"repeat\": \"row\"}` and `{\"repeat\": \"column\"}` can be used to refer to the repeated field respectively." }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/RowCol" } ], "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)" }, "spec": { "$ref": "#/definitions/Spec", "description": "A specification of the view that gets repeated." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" } }, "required": [ "repeat", "spec" ], "type": "object" }, "Resolve": { "additionalProperties": false, "description": "Defines how scales, axes, and legends from different specs should be combined. Resolve is a mapping from `scale`, `axis`, and `legend` to a mapping from channels to resolutions. Scales and guides can be resolved to be `\"independent\"` or `\"shared\"`.", "properties": { "axis": { "$ref": "#/definitions/AxisResolveMap" }, "legend": { "$ref": "#/definitions/LegendResolveMap" }, "scale": { "$ref": "#/definitions/ScaleResolveMap" } }, "type": "object" }, "ResolveMode": { "enum": [ "independent", "shared" ], "type": "string" }, "RowCol": { "additionalProperties": false, "properties": { "column": { "$ref": "#/definitions/LayoutAlign" }, "row": { "$ref": "#/definitions/LayoutAlign" } }, "type": "object" }, "RowCol": { "additionalProperties": false, "properties": { "column": { "type": "boolean" }, "row": { "type": "boolean" } }, "type": "object" }, "RowCol": { "additionalProperties": false, "properties": { "column": { "type": "number" }, "row": { "type": "number" } }, "type": "object" }, "RowColumnEncodingFieldDef": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "align": { "$ref": "#/definitions/LayoutAlign", "description": "The alignment to apply to row/column facet's subplot.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\n__Default value:__ `\"all\"`." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "center": { "description": "Boolean flag indicating if facet's subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`", "type": "boolean" }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "header": { "$ref": "#/definitions/Header", "description": "An object defining properties of a facet's header." }, "sort": { "anyOf": [ { "$ref": "#/definitions/SortArray" }, { "$ref": "#/definitions/SortOrder" }, { "$ref": "#/definitions/EncodingSortField" }, { "type": "null" } ], "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`." }, "spacing": { "description": "The spacing in pixels between facet's sub-views.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)", "type": "number" }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "SampleTransform": { "additionalProperties": false, "properties": { "sample": { "description": "The maximum number of data objects to include in the sample.\n\n__Default value:__ `1000`", "type": "number" } }, "required": [ "sample" ], "type": "object" }, "Scale": { "additionalProperties": false, "properties": { "align": { "description": "The alignment of the steps within the scale range.\n\nThis value must lie in the range `[0,1]`. A value of `0.5` indicates that the steps should be centered within the range. A value of `0` or `1` may be used to shift the bands to one side, say to position them adjacent to an axis.\n\n__Default value:__ `0.5`", "type": "number" }, "base": { "description": "The logarithm base of the `log` scale (default `10`).", "type": "number" }, "bins": { "$ref": "#/definitions/ScaleBins", "description": "Bin boundaries can be provided to scales as either an explicit array of bin boundaries or as a bin specification object. The legal values are:\n- An [array](../types/#Array) literal of bin boundary values. For example, `[0, 5, 10, 15, 20]`. The array must include both starting and ending boundaries. The previous example uses five values to indicate a total of four bin intervals: [0-5), [5-10), [10-15), [15-20]. Array literals may include signal references as elements.\n- A [bin specification object](https://vega.github.io/vega-lite/docs/scale.html#bins) that indicates the bin _step_ size, and optionally the _start_ and _stop_ boundaries.\n- An array of bin boundaries over the scale domain. If provided, axes and legends will use the bin boundaries to inform the choice of tick marks and text labels." }, "clamp": { "description": "If `true`, values that exceed the data domain are clamped to either the minimum or maximum range value\n\n__Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/config.html#scale-config)'s `clamp` (`true` by default).", "type": "boolean" }, "constant": { "description": "A constant determining the slope of the symlog function around zero. Only used for `symlog` scales.\n\n__Default value:__ `1`", "type": "number" }, "domain": { "anyOf": [ { "items": { "anyOf": [ { "type": "null" }, { "type": "string" }, { "type": "number" }, { "type": "boolean" }, { "$ref": "#/definitions/DateTime" } ] }, "type": "array" }, { "enum": [ "unaggregated" ], "type": "string" }, { "$ref": "#/definitions/SelectionExtent" }, { "$ref": "#/definitions/DomainUnionWith" } ], "description": "Customized domain values in the form of constant values or dynamic values driven by a selection.\n\n1) Constant `domain` for _quantitative_ fields can take one of the following forms:\n\n- A two-element array with minimum and maximum values. To create a diverging scale, this two-element array can be combined with the `domainMid` property.\n- An array with more than two entries, for [Piecewise quantitative scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise).\n- A string value `\"unaggregated\"`, if the input field is aggregated, to indicate that the domain should include the raw data values prior to the aggregation.\n\n2) Constant `domain` for _temporal_ fields can be a two-element array with minimum and maximum values, in the form of either timestamps or the [DateTime definition objects](https://vega.github.io/vega-lite/docs/types.html#datetime).\n\n3) Constant `domain` for _ordinal_ and _nominal_ fields can be an array that lists valid input values.\n\n4) To combine (union) specified constant domain with the field's values, `domain` can be an object with a `unionWith` property that specify constant domain to be combined. For example, `domain: {unionWith: [0, 100]}` for a quantitative scale means that the scale domain always includes `[0, 100]`, but will include other values in the fields beyond `[0, 100]`.\n\n5) Domain can also takes an object defining a field or encoding of a selection that [interactively determines](https://vega.github.io/vega-lite/docs/selection.html#scale-domains) the scale domain." }, "domainMid": { "description": "Inserts a single mid-point value into a two-element domain. The mid-point value must lie between the domain minimum and maximum values. This property can be useful for setting a midpoint for [diverging color scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise). The domainMid property is only intended for use with scales supporting continuous, piecewise domains.", "type": "number" }, "exponent": { "description": "The exponent of the `pow` scale.", "type": "number" }, "interpolate": { "anyOf": [ { "$ref": "#/definitions/ScaleInterpolateEnum" }, { "$ref": "#/definitions/ScaleInterpolateParams" } ], "description": "The interpolation method for range values. By default, a general interpolator for numbers, dates, strings and colors (in HCL space) is used. For color ranges, this property allows interpolation in alternative color spaces. Legal values include `rgb`, `hsl`, `hsl-long`, `lab`, `hcl`, `hcl-long`, `cubehelix` and `cubehelix-long` ('-long' variants use longer paths in polar coordinate spaces). If object-valued, this property accepts an object with a string-valued _type_ property and an optional numeric _gamma_ property applicable to rgb and cubehelix interpolators. For more, see the [d3-interpolate documentation](https://github.com/d3/d3-interpolate).\n\n* __Default value:__ `hcl`" }, "nice": { "anyOf": [ { "type": "boolean" }, { "type": "number" }, { "$ref": "#/definitions/TimeInterval" }, { "$ref": "#/definitions/TimeIntervalStep" } ], "description": "Extending the domain so that it starts and ends on nice round values. This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value. Nicing is useful if the domain is computed from data and may be irregular. For example, for a domain of _[0.201479…, 0.996679…]_, a nice domain might be _[0.2, 1.0]_.\n\nFor quantitative scales such as linear, `nice` can be either a boolean flag or a number. If `nice` is a number, it will represent a desired tick count. This allows greater control over the step size used to extend the bounds, guaranteeing that the returned ticks will exactly cover the domain.\n\nFor temporal fields with time and utc scales, the `nice` value can be a string indicating the desired time interval. Legal values are `\"millisecond\"`, `\"second\"`, `\"minute\"`, `\"hour\"`, `\"day\"`, `\"week\"`, `\"month\"`, and `\"year\"`. Alternatively, `time` and `utc` scales can accept an object-valued interval specifier of the form `{\"interval\": \"month\", \"step\": 3}`, which includes a desired number of interval steps. Here, the domain would snap to quarter (Jan, Apr, Jul, Oct) boundaries.\n\n__Default value:__ `true` for unbinned _quantitative_ fields; `false` otherwise." }, "padding": { "description": "For _[continuous](https://vega.github.io/vega-lite/docs/scale.html#continuous)_ scales, expands the scale domain to accommodate the specified number of pixels on each of the scale range. The scale range must represent pixels for this parameter to function as intended. Padding adjustment is performed prior to all other adjustments, including the effects of the `zero`, `nice`, `domainMin`, and `domainMax` properties.\n\nFor _[band](https://vega.github.io/vega-lite/docs/scale.html#band)_ scales, shortcut for setting `paddingInner` and `paddingOuter` to the same value.\n\nFor _[point](https://vega.github.io/vega-lite/docs/scale.html#point)_ scales, alias for `paddingOuter`.\n\n__Default value:__ For _continuous_ scales, derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `continuousPadding`.\nFor _band and point_ scales, see `paddingInner` and `paddingOuter`. By default, Vega-Lite sets padding such that _width/height = number of unique values * step_.", "minimum": 0, "type": "number" }, "paddingInner": { "description": "The inner padding (spacing) within each band step of band scales, as a fraction of the step size. This value must lie in the range [0,1].\n\nFor point scale, this property is invalid as point scales do not have internal band widths (only step sizes between bands).\n\n__Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `bandPaddingInner`.", "maximum": 1, "minimum": 0, "type": "number" }, "paddingOuter": { "description": "The outer padding (spacing) at the ends of the range of band and point scales,\nas a fraction of the step size. This value must lie in the range [0,1].\n\n__Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `bandPaddingOuter` for band scales and `pointPadding` for point scales.\nBy default, Vega-Lite sets outer padding such that _width/height = number of unique values * step_.", "maximum": 1, "minimum": 0, "type": "number" }, "range": { "anyOf": [ { "$ref": "#/definitions/RangeEnum" }, { "items": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "items": { "type": "number" }, "type": "array" } ] }, "type": "array" } ], "description": "The range of the scale. One of:\n\n- A string indicating a [pre-defined named scale range](https://vega.github.io/vega-lite/docs/scale.html#range-config) (e.g., example, `\"symbol\"`, or `\"diverging\"`).\n\n- For [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous), two-element array indicating minimum and maximum values, or an array with more than two entries for specifying a [piecewise scale](https://vega.github.io/vega-lite/docs/scale.html#piecewise).\n\n- For [discrete](https://vega.github.io/vega-lite/docs/scale.html#discrete) and [discretizing](https://vega.github.io/vega-lite/docs/scale.html#discretizing) scales, an array of desired output values.\n\n__Notes:__\n\n1) For color scales you can also specify a color [`scheme`](https://vega.github.io/vega-lite/docs/scale.html#scheme) instead of `range`.\n\n2) Any directly specified `range` for `x` and `y` channels will be ignored. Range can be customized via the view's corresponding [size](https://vega.github.io/vega-lite/docs/size.html) (`width` and `height`)." }, "reverse": { "description": "If true, reverses the order of the scale range.\n__Default value:__ `false`.", "type": "boolean" }, "round": { "description": "If `true`, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid.\n\n__Default value:__ `false`.", "type": "boolean" }, "scheme": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/SchemeParams" } ], "description": "A string indicating a color [scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme) name (e.g., `\"category10\"` or `\"blues\"`) or a [scheme parameter object](https://vega.github.io/vega-lite/docs/scale.html#scheme-params).\n\nDiscrete color schemes may be used with [discrete](https://vega.github.io/vega-lite/docs/scale.html#discrete) or [discretizing](https://vega.github.io/vega-lite/docs/scale.html#discretizing) scales. Continuous color schemes are intended for use with color scales.\n\nFor the full list of supported schemes, please refer to the [Vega Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference." }, "type": { "$ref": "#/definitions/ScaleType", "description": "The type of scale. Vega-Lite supports the following categories of scale types:\n\n1) [**Continuous Scales**](https://vega.github.io/vega-lite/docs/scale.html#continuous) -- mapping continuous domains to continuous output ranges ([`\"linear\"`](https://vega.github.io/vega-lite/docs/scale.html#linear), [`\"pow\"`](https://vega.github.io/vega-lite/docs/scale.html#pow), [`\"sqrt\"`](https://vega.github.io/vega-lite/docs/scale.html#sqrt), [`\"symlog\"`](https://vega.github.io/vega-lite/docs/scale.html#symlog), [`\"log\"`](https://vega.github.io/vega-lite/docs/scale.html#log), [`\"time\"`](https://vega.github.io/vega-lite/docs/scale.html#time), [`\"utc\"`](https://vega.github.io/vega-lite/docs/scale.html#utc).\n\n2) [**Discrete Scales**](https://vega.github.io/vega-lite/docs/scale.html#discrete) -- mapping discrete domains to discrete ([`\"ordinal\"`](https://vega.github.io/vega-lite/docs/scale.html#ordinal)) or continuous ([`\"band\"`](https://vega.github.io/vega-lite/docs/scale.html#band) and [`\"point\"`](https://vega.github.io/vega-lite/docs/scale.html#point)) output ranges.\n\n3) [**Discretizing Scales**](https://vega.github.io/vega-lite/docs/scale.html#discretizing) -- mapping continuous domains to discrete output ranges [`\"bin-ordinal\"`](https://vega.github.io/vega-lite/docs/scale.html#bin-ordinal), [`\"quantile\"`](https://vega.github.io/vega-lite/docs/scale.html#quantile), [`\"quantize\"`](https://vega.github.io/vega-lite/docs/scale.html#quantize) and [`\"threshold\"`](https://vega.github.io/vega-lite/docs/scale.html#threshold).\n\n__Default value:__ please see the [scale type table](https://vega.github.io/vega-lite/docs/scale.html#type)." }, "zero": { "description": "If `true`, ensures that a zero baseline value is included in the scale domain.\n\n__Default value:__ `true` for x and y channels if the quantitative field is not binned and no custom `domain` is provided; `false` otherwise.\n\n__Note:__ Log, time, and utc scales do not support `zero`.", "type": "boolean" } }, "type": "object" }, "ScaleBinParams": { "additionalProperties": false, "properties": { "start": { "description": "The starting (lowest-valued) bin boundary.\n\n__Default value:__ The lowest value of the scale domain will be used.", "type": "number" }, "step": { "description": "The step size defining the bin interval width.", "type": "number" }, "stop": { "description": "The stopping (highest-valued) bin boundary.\n\n__Default value:__ The highest value of the scale domain will be used.", "type": "number" } }, "required": [ "step" ], "type": "object" }, "ScaleBins": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "$ref": "#/definitions/ScaleBinParams" } ] }, "ScaleConfig": { "additionalProperties": false, "properties": { "bandPaddingInner": { "description": "Default inner padding for `x` and `y` band-ordinal scales.\n\n__Default value:__\n- `barBandPaddingInner` for bar marks (`0.1` by default)\n- `rectBandPaddingInner` for rect and other marks (`0` by default)", "maximum": 1, "minimum": 0, "type": "number" }, "bandPaddingOuter": { "description": "Default outer padding for `x` and `y` band-ordinal scales.\n\n__Default value:__ `paddingInner/2` (which makes _width/height = number of unique values * step_)", "maximum": 1, "minimum": 0, "type": "number" }, "barBandPaddingInner": { "description": "Default inner padding for `x` and `y` band-ordinal scales of `\"bar\"` marks.\n\n__Default value:__ `0.1`", "maximum": 1, "minimum": 0, "type": "number" }, "clamp": { "description": "If true, values that exceed the data domain are clamped to either the minimum or maximum range value", "type": "boolean" }, "continuousPadding": { "description": "Default padding for continuous scales.\n\n__Default:__ `5` for continuous x-scale of a vertical bar and continuous y-scale of a horizontal bar.; `0` otherwise.", "minimum": 0, "type": "number" }, "maxBandSize": { "description": "The default max value for mapping quantitative fields to bar's size/bandSize.\n\nIf undefined (default), we will use the axis's size (width or height) - 1.", "minimum": 0, "type": "number" }, "maxFontSize": { "description": "The default max value for mapping quantitative fields to text's size/fontSize.\n\n__Default value:__ `40`", "minimum": 0, "type": "number" }, "maxOpacity": { "description": "Default max opacity for mapping a field to opacity.\n\n__Default value:__ `0.8`", "maximum": 1, "minimum": 0, "type": "number" }, "maxSize": { "description": "Default max value for point size scale.", "minimum": 0, "type": "number" }, "maxStrokeWidth": { "description": "Default max strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks.\n\n__Default value:__ `4`", "minimum": 0, "type": "number" }, "minBandSize": { "description": "The default min value for mapping quantitative fields to bar and tick's size/bandSize scale with zero=false.\n\n__Default value:__ `2`", "minimum": 0, "type": "number" }, "minFontSize": { "description": "The default min value for mapping quantitative fields to tick's size/fontSize scale with zero=false\n\n__Default value:__ `8`", "minimum": 0, "type": "number" }, "minOpacity": { "description": "Default minimum opacity for mapping a field to opacity.\n\n__Default value:__ `0.3`", "maximum": 1, "minimum": 0, "type": "number" }, "minSize": { "description": "Default minimum value for point size scale with zero=false.\n\n__Default value:__ `9`", "minimum": 0, "type": "number" }, "minStrokeWidth": { "description": "Default minimum strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks with zero=false.\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, "pointPadding": { "description": "Default outer padding for `x` and `y` point-ordinal scales.\n\n__Default value:__ `0.5` (which makes _width/height = number of unique values * step_)", "maximum": 1, "minimum": 0, "type": "number" }, "quantileCount": { "description": "Default range cardinality for [`quantile`](https://vega.github.io/vega-lite/docs/scale.html#quantile) scale.\n\n__Default value:__ `4`", "minimum": 0, "type": "number" }, "quantizeCount": { "description": "Default range cardinality for [`quantize`](https://vega.github.io/vega-lite/docs/scale.html#quantize) scale.\n\n__Default value:__ `4`", "minimum": 0, "type": "number" }, "rectBandPaddingInner": { "description": "Default inner padding for `x` and `y` band-ordinal scales of `\"rect\"` marks.\n\n__Default value:__ `0`", "maximum": 1, "minimum": 0, "type": "number" }, "round": { "description": "If true, rounds numeric output values to integers.\nThis can be helpful for snapping to the pixel grid.\n(Only available for `x`, `y`, and `size` scales.)", "type": "boolean" }, "useUnaggregatedDomain": { "description": "Use the source data range before aggregation as scale domain instead of aggregated data for aggregate axis.\n\nThis is equivalent to setting `domain` to `\"unaggregate\"` for aggregated _quantitative_ fields by default.\n\nThis property only works with aggregate functions that produce values within the raw data domain (`\"mean\"`, `\"average\"`, `\"median\"`, `\"q1\"`, `\"q3\"`, `\"min\"`, `\"max\"`). For other aggregations that produce values outside of the raw data domain (e.g. `\"count\"`, `\"sum\"`), this property is ignored.\n\n__Default value:__ `false`", "type": "boolean" }, "xReverse": { "description": "Reverse x-scale by default (useful for right-to-left charts).", "type": "boolean" } }, "type": "object" }, "ScaleInterpolateEnum": { "enum": [ "rgb", "lab", "hcl", "hsl", "hsl-long", "hcl-long", "cubehelix", "cubehelix-long" ], "type": "string" }, "ScaleInterpolateParams": { "additionalProperties": false, "properties": { "gamma": { "type": "number" }, "type": { "enum": [ "rgb", "cubehelix", "cubehelix-long" ], "type": "string" } }, "required": [ "type" ], "type": "object" }, "ScaleResolveMap": { "additionalProperties": false, "properties": { "color": { "$ref": "#/definitions/ResolveMode" }, "fill": { "$ref": "#/definitions/ResolveMode" }, "fillOpacity": { "$ref": "#/definitions/ResolveMode" }, "opacity": { "$ref": "#/definitions/ResolveMode" }, "shape": { "$ref": "#/definitions/ResolveMode" }, "size": { "$ref": "#/definitions/ResolveMode" }, "stroke": { "$ref": "#/definitions/ResolveMode" }, "strokeDash": { "$ref": "#/definitions/ResolveMode" }, "strokeOpacity": { "$ref": "#/definitions/ResolveMode" }, "strokeWidth": { "$ref": "#/definitions/ResolveMode" }, "x": { "$ref": "#/definitions/ResolveMode" }, "y": { "$ref": "#/definitions/ResolveMode" } }, "type": "object" }, "ScaleType": { "enum": [ "linear", "log", "pow", "sqrt", "symlog", "identity", "sequential", "time", "utc", "quantile", "quantize", "threshold", "bin-ordinal", "ordinal", "point", "band" ], "type": "string" }, "SchemeParams": { "additionalProperties": false, "properties": { "count": { "description": "The number of colors to use in the scheme. This can be useful for scale types such as `\"quantize\"`, which use the length of the scale range to determine the number of discrete bins for the scale domain.", "type": "number" }, "extent": { "description": "The extent of the color range to use. For example `[0.2, 1]` will rescale the color scheme such that color values in the range _[0, 0.2)_ are excluded from the scheme.", "items": { "type": "number" }, "type": "array" }, "name": { "description": "A color scheme name for ordinal scales (e.g., `\"category10\"` or `\"blues\"`).\n\nFor the full list of supported schemes, please refer to the [Vega Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference.", "type": "string" } }, "required": [ "name" ], "type": "object" }, "SecondaryFieldDef": { "additionalProperties": false, "description": "A field definition of a secondary channel that shares a scale with another primary channel. For example, `x2`, `xError` and `xError2` share the same scale with `x`.", "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.", "type": "null" }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." } }, "type": "object" }, "SelectionConfig": { "additionalProperties": false, "properties": { "interval": { "$ref": "#/definitions/IntervalSelectionConfig", "description": "The default definition for an [`interval`](https://vega.github.io/vega-lite/docs/selection.html#type) selection. All properties and transformations\nfor an interval selection definition (except `type`) may be specified here.\n\nFor instance, setting `interval` to `{\"translate\": false}` disables the ability to move\ninterval selections by default." }, "multi": { "$ref": "#/definitions/MultiSelectionConfig", "description": "The default definition for a [`multi`](https://vega.github.io/vega-lite/docs/selection.html#type) selection. All properties and transformations\nfor a multi selection definition (except `type`) may be specified here.\n\nFor instance, setting `multi` to `{\"toggle\": \"event.altKey\"}` adds additional values to\nmulti selections when clicking with the alt-key pressed by default." }, "single": { "$ref": "#/definitions/SingleSelectionConfig", "description": "The default definition for a [`single`](https://vega.github.io/vega-lite/docs/selection.html#type) selection. All properties and transformations\n for a single selection definition (except `type`) may be specified here.\n\nFor instance, setting `single` to `{\"on\": \"dblclick\"}` populates single selections on double-click by default." } }, "type": "object" }, "SelectionDef": { "anyOf": [ { "$ref": "#/definitions/SingleSelection" }, { "$ref": "#/definitions/MultiSelection" }, { "$ref": "#/definitions/IntervalSelection" } ] }, "SelectionExtent": { "anyOf": [ { "additionalProperties": false, "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "The field name to extract selected values for, when a selection is [projected](https://vega.github.io/vega-lite/docs/project.html)\nover multiple fields or encodings." }, "selection": { "description": "The name of a selection.", "type": "string" } }, "required": [ "selection" ], "type": "object" }, { "additionalProperties": false, "properties": { "encoding": { "$ref": "#/definitions/SingleDefUnitChannel", "description": "The encoding channel to extract selected values for, when a selection is [projected](https://vega.github.io/vega-lite/docs/project.html)\nover multiple fields or encodings." }, "selection": { "description": "The name of a selection.", "type": "string" } }, "required": [ "selection" ], "type": "object" } ] }, "SelectionInit": { "anyOf": [ { "$ref": "#/definitions/Value" }, { "$ref": "#/definitions/DateTime" } ] }, "SelectionInitInterval": { "anyOf": [ { "$ref": "#/definitions/Vector2" }, { "$ref": "#/definitions/Vector2" }, { "$ref": "#/definitions/Vector2" }, { "$ref": "#/definitions/Vector2" } ] }, "SelectionInitIntervalMapping": { "$ref": "#/definitions/Dict" }, "SelectionInitMapping": { "$ref": "#/definitions/Dict" }, "SelectionPredicate": { "additionalProperties": false, "properties": { "selection": { "$ref": "#/definitions/SelectionComposition", "description": "Filter using a selection name or a logical composition of selection names." } }, "required": [ "selection" ], "type": "object" }, "SelectionResolution": { "enum": [ "global", "union", "intersect" ], "type": "string" }, "SequenceGenerator": { "additionalProperties": false, "properties": { "name": { "description": "Provide a placeholder name and bind data at runtime.", "type": "string" }, "sequence": { "$ref": "#/definitions/SequenceParams", "description": "Generate a sequence of numbers." } }, "required": [ "sequence" ], "type": "object" }, "SequenceParams": { "additionalProperties": false, "properties": { "as": { "$ref": "#/definitions/FieldName", "description": "The name of the generated sequence field.\n\n__Default value:__ `\"data\"`" }, "start": { "description": "The starting value of the sequence (inclusive).", "type": "number" }, "step": { "description": "The step value between sequence entries.\n\n__Default value:__ `1`", "type": "number" }, "stop": { "description": "The ending value of the sequence (exclusive).", "type": "number" } }, "required": [ "start", "stop" ], "type": "object" }, "SequentialMultiHue": { "enum": [ "viridis", "inferno", "magma", "plasma", "bluegreen", "bluegreen-3", "bluegreen-4", "bluegreen-5", "bluegreen-6", "bluegreen-7", "bluegreen-8", "bluegreen-9", "bluepurple", "bluepurple-3", "bluepurple-4", "bluepurple-5", "bluepurple-6", "bluepurple-7", "bluepurple-8", "bluepurple-9", "greenblue", "greenblue-3", "greenblue-4", "greenblue-5", "greenblue-6", "greenblue-7", "greenblue-8", "greenblue-9", "orangered", "orangered-3", "orangered-4", "orangered-5", "orangered-6", "orangered-7", "orangered-8", "orangered-9", "purplebluegreen", "purplebluegreen-3", "purplebluegreen-4", "purplebluegreen-5", "purplebluegreen-6", "purplebluegreen-7", "purplebluegreen-8", "purplebluegreen-9", "purpleblue", "purpleblue-3", "purpleblue-4", "purpleblue-5", "purpleblue-6", "purpleblue-7", "purpleblue-8", "purpleblue-9", "purplered", "purplered-3", "purplered-4", "purplered-5", "purplered-6", "purplered-7", "purplered-8", "purplered-9", "redpurple", "redpurple-3", "redpurple-4", "redpurple-5", "redpurple-6", "redpurple-7", "redpurple-8", "redpurple-9", "yellowgreenblue", "yellowgreenblue-3", "yellowgreenblue-4", "yellowgreenblue-5", "yellowgreenblue-6", "yellowgreenblue-7", "yellowgreenblue-8", "yellowgreenblue-9", "yellowgreen", "yellowgreen-3", "yellowgreen-4", "yellowgreen-5", "yellowgreen-6", "yellowgreen-7", "yellowgreen-8", "yellowgreen-9", "yelloworangebrown", "yelloworangebrown-3", "yelloworangebrown-4", "yelloworangebrown-5", "yelloworangebrown-6", "yelloworangebrown-7", "yelloworangebrown-8", "yelloworangebrown-9", "yelloworangered", "yelloworangered-3", "yelloworangered-4", "yelloworangered-5", "yelloworangered-6", "yelloworangered-7", "yelloworangered-8", "yelloworangered-9" ], "type": "string" }, "SequentialSingleHue": { "enum": [ "blues", "greens", "greys", "purples", "reds", "oranges" ], "type": "string" }, "ShapeFieldDefWithCondition": { "$ref": "#/definitions/FieldDefWithCondition,(string|null)>" }, "ShapeValueWithCondition": { "$ref": "#/definitions/StringValueWithCondition" }, "SingleDefUnitChannel": { "enum": [ "x", "y", "x2", "y2", "longitude", "latitude", "longitude2", "latitude2", "color", "fill", "stroke", "opacity", "fillOpacity", "strokeOpacity", "strokeWidth", "strokeDash", "size", "shape", "key", "text", "href", "url" ], "type": "string" }, "SingleSelection": { "additionalProperties": false, "properties": { "bind": { "anyOf": [ { "$ref": "#/definitions/Binding" }, { "additionalProperties": { "$ref": "#/definitions/Binding" }, "type": "object" }, { "$ref": "#/definitions/LegendBinding" } ], "description": "When set, a selection is populated by input elements (also known as dynamic query widgets)\nor by interacting with the corresponding legend. Direct manipulation interaction is disabled by default;\nto re-enable it, set the selection's [`on`](https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties) property.\n\nLegend bindings are restricted to selections that only specify a single field or encoding.\n\nQuery widget binding takes the form of Vega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind)\nor can be a mapping between projected field/encodings and binding definitions.\n\n__See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation." }, "clear": { "anyOf": [ { "$ref": "#/definitions/Stream" }, { "type": "string" }, { "type": "boolean" } ], "description": "Clears the selection, emptying it of all values. Can be a\n[Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation." }, "empty": { "description": "By default, `all` data values are considered to lie within an empty selection.\nWhen set to `none`, empty selections contain no data values.", "enum": [ "all", "none" ], "type": "string" }, "encodings": { "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/SingleDefUnitChannel" }, "type": "array" }, "fields": { "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "init": { "$ref": "#/definitions/SelectionInitMapping", "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and initial values.\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation." }, "nearest": { "description": "When true, an invisible voronoi diagram is computed to accelerate discrete\nselection. The data value _nearest_ the mouse cursor is added to the selection.\n\n__See also:__ [`nearest`](https://vega.github.io/vega-lite/docs/nearest.html) documentation.", "type": "boolean" }, "on": { "anyOf": [ { "$ref": "#/definitions/Stream" }, { "type": "string" } ], "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\nFor interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)." }, "resolve": { "$ref": "#/definitions/SelectionResolution", "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation." }, "type": { "description": "Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types:\n\n- `\"single\"` -- to select a single discrete data value on `click`.\n- `\"multi\"` -- to select multiple discrete data value; the first value is selected on `click` and additional values toggled on shift-`click`.\n- `\"interval\"` -- to select a continuous range of data values on `drag`.", "enum": [ "single" ], "type": "string" } }, "required": [ "type" ], "type": "object" }, "SingleSelectionConfig": { "additionalProperties": false, "properties": { "bind": { "anyOf": [ { "$ref": "#/definitions/Binding" }, { "additionalProperties": { "$ref": "#/definitions/Binding" }, "type": "object" }, { "$ref": "#/definitions/LegendBinding" } ], "description": "When set, a selection is populated by input elements (also known as dynamic query widgets)\nor by interacting with the corresponding legend. Direct manipulation interaction is disabled by default;\nto re-enable it, set the selection's [`on`](https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties) property.\n\nLegend bindings are restricted to selections that only specify a single field or encoding.\n\nQuery widget binding takes the form of Vega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind)\nor can be a mapping between projected field/encodings and binding definitions.\n\n__See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation." }, "clear": { "anyOf": [ { "$ref": "#/definitions/Stream" }, { "type": "string" }, { "type": "boolean" } ], "description": "Clears the selection, emptying it of all values. Can be a\n[Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation." }, "empty": { "description": "By default, `all` data values are considered to lie within an empty selection.\nWhen set to `none`, empty selections contain no data values.", "enum": [ "all", "none" ], "type": "string" }, "encodings": { "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/SingleDefUnitChannel" }, "type": "array" }, "fields": { "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "init": { "$ref": "#/definitions/SelectionInitMapping", "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and initial values.\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation." }, "nearest": { "description": "When true, an invisible voronoi diagram is computed to accelerate discrete\nselection. The data value _nearest_ the mouse cursor is added to the selection.\n\n__See also:__ [`nearest`](https://vega.github.io/vega-lite/docs/nearest.html) documentation.", "type": "boolean" }, "on": { "anyOf": [ { "$ref": "#/definitions/Stream" }, { "type": "string" } ], "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\nFor interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)." }, "resolve": { "$ref": "#/definitions/SelectionResolution", "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation." } }, "type": "object" }, "SingleTimeUnit": { "anyOf": [ { "$ref": "#/definitions/LocalSingleTimeUnit" }, { "$ref": "#/definitions/UtcSingleTimeUnit" } ] }, "Sort": { "anyOf": [ { "$ref": "#/definitions/SortArray" }, { "$ref": "#/definitions/AllSortString" }, { "$ref": "#/definitions/EncodingSortField" }, { "$ref": "#/definitions/SortByEncoding" }, { "type": "null" } ] }, "SortArray": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "items": { "type": "string" }, "type": "array" }, { "items": { "type": "boolean" }, "type": "array" }, { "items": { "$ref": "#/definitions/DateTime" }, "type": "array" } ] }, "SortByChannel": { "enum": [ "x", "y", "color", "fill", "stroke", "strokeWidth", "size", "shape", "fillOpacity", "strokeOpacity", "opacity", "text" ], "type": "string" }, "SortByChannelDesc": { "enum": [ "-x", "-y", "-color", "-fill", "-stroke", "-strokeWidth", "-size", "-shape", "-fillOpacity", "-strokeOpacity", "-opacity", "-text" ], "type": "string" }, "SortByEncoding": { "additionalProperties": false, "properties": { "encoding": { "$ref": "#/definitions/SortByChannel", "description": "The [encoding channel](https://vega.github.io/vega-lite/docs/encoding.html#channels) to sort by (e.g., `\"x\"`, `\"y\"`)" }, "order": { "anyOf": [ { "$ref": "#/definitions/SortOrder" }, { "type": "null" } ], "description": "The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort)." } }, "required": [ "encoding" ], "type": "object" }, "SortField": { "additionalProperties": false, "description": "A sort definition for transform", "properties": { "field": { "$ref": "#/definitions/FieldName", "description": "The name of the field to sort." }, "order": { "anyOf": [ { "$ref": "#/definitions/SortOrder" }, { "type": "null" } ], "description": "Whether to sort the field in ascending or descending order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort)." } }, "required": [ "field" ], "type": "object" }, "SortOrder": { "enum": [ "ascending", "descending" ], "type": "string" }, "SphereGenerator": { "additionalProperties": false, "properties": { "name": { "description": "Provide a placeholder name and bind data at runtime.", "type": "string" }, "sphere": { "anyOf": [ { "enum": [ true ], "type": "boolean" }, { "additionalProperties": false, "type": "object" } ], "description": "Generate sphere GeoJSON data for the full globe." } }, "required": [ "sphere" ], "type": "object" }, "StackOffset": { "enum": [ "zero", "center", "normalize" ], "type": "string" }, "StackTransform": { "additionalProperties": false, "properties": { "as": { "anyOf": [ { "$ref": "#/definitions/FieldName" }, { "items": [ { "$ref": "#/definitions/FieldName" }, { "$ref": "#/definitions/FieldName" } ], "maxItems": 2, "minItems": 2, "type": "array" } ], "description": "Output field names. This can be either a string or an array of strings with two elements denoting the name for the fields for stack start and stack end respectively.\nIf a single string(e.g., `\"val\"`) is provided, the end field will be `\"val_end\"`." }, "groupby": { "description": "The data fields to group by.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "offset": { "description": "Mode for stacking marks. One of `\"zero\"` (default), `\"center\"`, or `\"normalize\"`.\nThe `\"zero\"` offset will stack starting at `0`. The `\"center\"` offset will center the stacks. The `\"normalize\"` offset will compute percentage values for each stack point, with output values in the range `[0,1]`.\n\n__Default value:__ `\"zero\"`", "enum": [ "zero", "center", "normalize" ], "type": "string" }, "sort": { "description": "Field that determines the order of leaves in the stacked charts.", "items": { "$ref": "#/definitions/SortField" }, "type": "array" }, "stack": { "$ref": "#/definitions/FieldName", "description": "The field which is stacked." } }, "required": [ "stack", "groupby", "as" ], "type": "object" }, "StandardType": { "enum": [ "quantitative", "ordinal", "temporal", "nominal" ], "type": "string" }, "Step": { "additionalProperties": false, "properties": { "step": { "description": "The size (width/height) per discrete step.", "type": "number" } }, "required": [ "step" ], "type": "object" }, "Stream": { "anyOf": [ { "$ref": "#/definitions/EventStream" }, { "$ref": "#/definitions/DerivedStream" }, { "$ref": "#/definitions/MergedStream" } ] }, "StringFieldDef": { "additionalProperties": false, "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "enum": [ "binned" ], "type": "string" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "format": { "anyOf": [ { "type": "string" }, { "type": "object" } ], "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `\"formatType\"`](https://vega.github.io/vega-lite/usage/compile.html#format-type) that takes `datum.value` and format parameter as input), this property represents the format parameter.\n\n__Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format." }, "formatType": { "description": "The format type for labels (`\"number\"` or `\"time\"` or a [registered custom format type](https://vega.github.io/vega-lite/usage/compile.html#format-type)).\n\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.", "type": "string" }, "labelExpr": { "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels text.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.", "type": "string" }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "StringFieldDefWithCondition": { "$ref": "#/definitions/FieldDefWithCondition" }, "StringValueWithCondition": { "$ref": "#/definitions/ValueWithCondition,(string|null)>" }, "StringValueWithCondition": { "$ref": "#/definitions/ValueWithCondition" }, "StyleConfigIndex": { "additionalProperties": { "anyOf": [ { "$ref": "#/definitions/AnyMarkConfig" }, { "$ref": "#/definitions/Axis" } ] }, "properties": { "area": { "$ref": "#/definitions/AreaConfig", "description": "Area-Specific Config" }, "bar": { "$ref": "#/definitions/BarConfig", "description": "Bar-Specific Config" }, "circle": { "$ref": "#/definitions/MarkConfig", "description": "Circle-Specific Config" }, "geoshape": { "$ref": "#/definitions/MarkConfig", "description": "Geoshape-Specific Config" }, "group-subtitle": { "$ref": "#/definitions/MarkConfig", "description": "Default style for chart subtitles" }, "group-title": { "$ref": "#/definitions/MarkConfig", "description": "Default style for chart titles" }, "guide-label": { "$ref": "#/definitions/MarkConfig", "description": "Default style for axis, legend, and header labels." }, "guide-title": { "$ref": "#/definitions/MarkConfig", "description": "Default style for axis, legend, and header titles." }, "image": { "$ref": "#/definitions/RectConfig", "description": "Image-specific Config" }, "line": { "$ref": "#/definitions/LineConfig", "description": "Line-Specific Config" }, "mark": { "$ref": "#/definitions/MarkConfig", "description": "Mark Config" }, "point": { "$ref": "#/definitions/MarkConfig", "description": "Point-Specific Config" }, "rect": { "$ref": "#/definitions/RectConfig", "description": "Rect-Specific Config" }, "rule": { "$ref": "#/definitions/MarkConfig", "description": "Rule-Specific Config" }, "square": { "$ref": "#/definitions/MarkConfig", "description": "Square-Specific Config" }, "text": { "$ref": "#/definitions/MarkConfig", "description": "Text-Specific Config" }, "tick": { "$ref": "#/definitions/TickConfig", "description": "Tick-Specific Config" }, "trail": { "$ref": "#/definitions/LineConfig", "description": "Trail-Specific Config" } }, "type": "object" }, "SymbolShape": { "type": "string" }, "Text": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ] }, "TextBaseline": { "anyOf": [ { "enum": [ "alphabetic" ], "type": "string" }, { "$ref": "#/definitions/Baseline" }, { "enum": [ "line-top" ], "type": "string" }, { "enum": [ "line-bottom" ], "type": "string" } ] }, "TextDirection": { "enum": [ "ltr", "rtl" ], "type": "string" }, "TextFieldDefWithCondition": { "$ref": "#/definitions/FieldDefWithCondition" }, "TextValueWithCondition": { "$ref": "#/definitions/ValueWithCondition" }, "TickConfig": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of `\"left\"`, `\"right\"`, `\"center\"`." }, "angle": { "description": "The rotation angle of the text, in degrees.", "maximum": 360, "minimum": 0, "type": "number" }, "aspect": { "description": "Whether to keep aspect ratio of image marks.", "type": "boolean" }, "bandSize": { "description": "The width of the ticks.\n\n__Default value:__ 3/4 of step (width step for horizontal ticks and height step for vertical ticks).", "minimum": 0, "type": "number" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "The vertical text baseline. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `lineHeight` rather than `fontSize` alone." }, "blend": { "$ref": "#/definitions/Blend", "description": "The color blend mode for drawing an item on its current background. Any valid [CSS mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) value can be used.\n\n__Default value: `\"source-over\"`" }, "color": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" } ], "description": "Default color.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`." }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusBottomLeft": { "description": "The radius in pixels of rounded rectangle bottom left corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusBottomRight": { "description": "The radius in pixels of rounded rectangle bottom right corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusTopLeft": { "description": "The radius in pixels of rounded rectangle top right corner.\n\n__Default value:__ `0`", "type": "number" }, "cornerRadiusTopRight": { "description": "The radius in pixels of rounded rectangle top left corner.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "dir": { "$ref": "#/definitions/TextDirection", "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`" }, "dx": { "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "dy": { "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.", "type": "number" }, "ellipsis": { "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`", "type": "string" }, "fill": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" }, { "type": "null" } ], "description": "Default Fill Color. This property has higher precedence than `config.color`.\n\n__Default value:__ (None)" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "filled": { "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for all `point`, `line`, and `rule` marks as well as `geoshape` marks for [`graticule`](https://vega.github.io/vega-lite/docs/data.html#graticule) data sources; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).", "type": "boolean" }, "font": { "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).", "type": "string" }, "fontSize": { "description": "The font size, in pixels.\n\n__Default value:__ `11`", "minimum": 0, "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "The font style (e.g., `\"italic\"`)." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "height": { "description": "Height of the marks.", "type": "number" }, "href": { "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.", "format": "uri", "type": "string" }, "interpolate": { "$ref": "#/definitions/Interpolate", "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y." }, "invalid": { "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.", "enum": [ "filter", null ], "type": [ "string", "null" ] }, "limit": { "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0` -- indicating no limit", "type": "number" }, "lineBreak": { "description": "A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued.", "type": "string" }, "lineHeight": { "description": "The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.", "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "order": { "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.", "type": [ "null", "boolean" ] }, "orient": { "$ref": "#/definitions/Orientation", "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored." }, "radius": { "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.", "minimum": 0, "type": "number" }, "shape": { "anyOf": [ { "$ref": "#/definitions/SymbolShape" }, { "type": "string" } ], "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`" }, "size": { "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__\n- `30` for point, circle, square marks; width/height's `step`\n- `2` for bar marks with discrete dimensions;\n- `5` for bar marks with continuous dimensions;\n- `11` for text marks.", "minimum": 0, "type": "number" }, "stroke": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "$ref": "#/definitions/Gradient" }, { "type": "null" } ], "description": "Default Stroke Color. This property has higher precedence than `config.color`.\n\n__Default value:__ (None)" }, "strokeCap": { "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"butt\"`", "type": "string" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`", "type": "string" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOffset": { "description": "The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "tension": { "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).", "type": "number" }, "text": { "$ref": "#/definitions/Text", "description": "Placeholder text if the `text` channel is not specified" }, "theta": { "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".", "type": "number" }, "thickness": { "description": "Thickness of the tick mark.\n\n__Default value:__ `1`", "minimum": 0, "type": "number" }, "timeUnitBand": { "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step.\nIf set to `0.5`, bandwidth of the marks will be half of the time unit band step.", "type": "number" }, "timeUnitBandPosition": { "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step.\nIf set to `0.5`, the marks will be positioned in the middle of the time unit band step.", "type": "number" }, "tooltip": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "boolean" }, { "$ref": "#/definitions/TooltipContent" }, { "type": "null" } ], "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite.\n\n__Default value:__ `null`" }, "width": { "description": "Width of the marks.", "type": "number" }, "x": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "x2": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot." }, "y": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." }, "y2": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot." } }, "type": "object" }, "TickCount": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/TimeInterval" } ] }, "TimeInterval": { "enum": [ "millisecond", "second", "minute", "hour", "day", "week", "month", "year" ], "type": "string" }, "TimeIntervalStep": { "additionalProperties": false, "properties": { "interval": { "$ref": "#/definitions/TimeInterval" }, "step": { "type": "number" } }, "required": [ "interval", "step" ], "type": "object" }, "TimeUnit": { "anyOf": [ { "$ref": "#/definitions/SingleTimeUnit" }, { "$ref": "#/definitions/MultiTimeUnit" } ] }, "TimeUnitParams": { "additionalProperties": false, "properties": { "maxbins": { "description": "If no `unit` is specified, maxbins is used to infer time units.", "type": "number" }, "step": { "description": "The number of steps between bins, in terms of the least\nsignificant unit provided.", "type": "number" }, "unit": { "$ref": "#/definitions/TimeUnit", "description": "Defines how date-time values should be binned." }, "utc": { "description": "True to use UTC timezone. Equivalent to using a `utc` prefixed `TimeUnit`.", "type": "boolean" } }, "type": "object" }, "TimeUnitTransform": { "additionalProperties": false, "properties": { "as": { "$ref": "#/definitions/FieldName", "description": "The output field to write the timeUnit value." }, "field": { "$ref": "#/definitions/FieldName", "description": "The data field to apply time unit." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "The timeUnit." } }, "required": [ "timeUnit", "field", "as" ], "type": "object" }, "TitleAnchor": { "enum": [ null, "start", "middle", "end" ], "type": [ "null", "string" ] }, "TitleConfig": { "$ref": "#/definitions/BaseTitleNoValueRefs" }, "TitleFrame": { "enum": [ "bounds", "group" ], "type": "string" }, "TitleOrient": { "enum": [ "none", "left", "right", "top", "bottom" ], "type": "string" }, "TitleParams": { "additionalProperties": false, "properties": { "align": { "$ref": "#/definitions/Align", "description": "Horizontal text alignment for title text. One of `\"left\"`, `\"center\"`, or `\"right\"`." }, "anchor": { "$ref": "#/definitions/TitleAnchor", "description": "The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title.\n\n__Default value:__ `\"middle\"` for [single](https://vega.github.io/vega-lite/docs/spec.html) and [layered](https://vega.github.io/vega-lite/docs/layer.html) views.\n`\"start\"` for other composite views.\n\n__Note:__ [For now](https://github.com/vega/vega-lite/issues/2875), `anchor` is only customizable only for [single](https://vega.github.io/vega-lite/docs/spec.html) and [layered](https://vega.github.io/vega-lite/docs/layer.html) views. For other composite views, `anchor` is always `\"start\"`." }, "angle": { "description": "Angle in degrees of title and subtitle text.", "type": "number" }, "baseline": { "$ref": "#/definitions/TextBaseline", "description": "Vertical text baseline for title and subtitle text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`." }, "color": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "Text color for title text." }, "dx": { "description": "Delta offset for title and subtitle text x-coordinate.", "type": "number" }, "dy": { "description": "Delta offset for title and subtitle text y-coordinate.", "type": "number" }, "font": { "description": "Font name for title text.", "type": "string" }, "fontSize": { "description": "Font size in pixels for title text.", "minimum": 0, "type": "number" }, "fontStyle": { "$ref": "#/definitions/FontStyle", "description": "Font style for title text." }, "fontWeight": { "$ref": "#/definitions/FontWeight", "description": "Font weight for title text.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "frame": { "anyOf": [ { "$ref": "#/definitions/TitleFrame" }, { "type": "string" } ], "description": "The reference frame for the anchor position, one of `\"bounds\"` (to anchor relative to the full bounding box) or `\"group\"` (to anchor relative to the group width or height)." }, "limit": { "description": "The maximum allowed length in pixels of title and subtitle text.", "minimum": 0, "type": "number" }, "lineHeight": { "description": "Line height in pixels for multi-line title text.", "type": "number" }, "offset": { "description": "The orthogonal offset in pixels by which to displace the title group from its position along the edge of the chart.", "type": "number" }, "orient": { "$ref": "#/definitions/TitleOrient", "description": "Default title orientation (`\"top\"`, `\"bottom\"`, `\"left\"`, or `\"right\"`)" }, "style": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "description": "A [mark style property](https://vega.github.io/vega-lite/docs/config.html#style) to apply to the title text mark.\n\n__Default value:__ `\"group-title\"`." }, "subtitle": { "$ref": "#/definitions/Text", "description": "The subtitle Text." }, "subtitleColor": { "anyOf": [ { "type": "null" }, { "$ref": "#/definitions/Color" } ], "description": "Text color for subtitle text." }, "subtitleFont": { "description": "Font name for subtitle text.", "type": "string" }, "subtitleFontSize": { "description": "Font size in pixels for subtitle text.", "minimum": 0, "type": "number" }, "subtitleFontStyle": { "$ref": "#/definitions/FontStyle", "description": "Font style for subtitle text." }, "subtitleFontWeight": { "$ref": "#/definitions/FontWeight", "description": "Font weight for subtitle text.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)." }, "subtitleLineHeight": { "description": "Line height in pixels for multi-line subtitle text.", "type": "number" }, "subtitlePadding": { "description": "The padding in pixels between title and subtitle text.", "type": "number" }, "text": { "$ref": "#/definitions/Text", "description": "The title text." }, "zindex": { "description": "The integer z-index indicating the layering of the title group relative to other axis, mark and legend groups.\n\n__Default value:__ `0`.", "minimum": 0, "type": "number" } }, "required": [ "text" ], "type": "object" }, "TooltipContent": { "additionalProperties": false, "properties": { "content": { "enum": [ "encoding", "data" ], "type": "string" } }, "required": [ "content" ], "type": "object" }, "TopLevelNormalizedConcatSpec": { "additionalProperties": false, "properties": { "$schema": { "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v4.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.", "format": "uri", "type": "string" }, "align": { "anyOf": [ { "$ref": "#/definitions/LayoutAlign" }, { "$ref": "#/definitions/RowCol" } ], "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`." }, "autosize": { "anyOf": [ { "$ref": "#/definitions/AutosizeType" }, { "$ref": "#/definitions/AutoSizeParams" } ], "description": "How the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n\n__Default value__: `pad`" }, "background": { "$ref": "#/definitions/Color", "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ `\"white\"`" }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/RowCol" } ], "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`" }, "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "concat": { "description": "A list of views to be concatenated.", "items": { "$ref": "#/definitions/NormalizedSpec" }, "type": "array" }, "config": { "$ref": "#/definitions/Config", "description": "Vega-Lite configuration object. This property can only be defined at the top-level of a specification." }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "datasets": { "$ref": "#/definitions/Datasets", "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "padding": { "$ref": "#/definitions/Padding", "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/RowCol" } ], "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)" }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "usermeta": { "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.", "type": "object" } }, "required": [ "concat" ], "type": "object" }, "TopLevelNormalizedHConcatSpec": { "additionalProperties": false, "properties": { "$schema": { "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v4.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.", "format": "uri", "type": "string" }, "autosize": { "anyOf": [ { "$ref": "#/definitions/AutosizeType" }, { "$ref": "#/definitions/AutoSizeParams" } ], "description": "How the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n\n__Default value__: `pad`" }, "background": { "$ref": "#/definitions/Color", "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ `\"white\"`" }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`", "type": "boolean" }, "config": { "$ref": "#/definitions/Config", "description": "Vega-Lite configuration object. This property can only be defined at the top-level of a specification." }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "datasets": { "$ref": "#/definitions/Datasets", "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "hconcat": { "description": "A list of views to be concatenated and put into a row.", "items": { "$ref": "#/definitions/NormalizedSpec" }, "type": "array" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "padding": { "$ref": "#/definitions/Padding", "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`", "type": "number" }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "usermeta": { "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.", "type": "object" } }, "required": [ "hconcat" ], "type": "object" }, "TopLevelNormalizedVConcatSpec": { "additionalProperties": false, "properties": { "$schema": { "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v4.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.", "format": "uri", "type": "string" }, "autosize": { "anyOf": [ { "$ref": "#/definitions/AutosizeType" }, { "$ref": "#/definitions/AutoSizeParams" } ], "description": "How the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n\n__Default value__: `pad`" }, "background": { "$ref": "#/definitions/Color", "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ `\"white\"`" }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`", "type": "boolean" }, "config": { "$ref": "#/definitions/Config", "description": "Vega-Lite configuration object. This property can only be defined at the top-level of a specification." }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "datasets": { "$ref": "#/definitions/Datasets", "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "padding": { "$ref": "#/definitions/Padding", "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`", "type": "number" }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "usermeta": { "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.", "type": "object" }, "vconcat": { "description": "A list of views to be concatenated and put into a column.", "items": { "$ref": "#/definitions/NormalizedSpec" }, "type": "array" } }, "required": [ "vconcat" ], "type": "object" }, "TopLevelLayerSpec": { "additionalProperties": false, "properties": { "$schema": { "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v4.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.", "format": "uri", "type": "string" }, "autosize": { "anyOf": [ { "$ref": "#/definitions/AutosizeType" }, { "$ref": "#/definitions/AutoSizeParams" } ], "description": "How the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n\n__Default value__: `pad`" }, "background": { "$ref": "#/definitions/Color", "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ `\"white\"`" }, "config": { "$ref": "#/definitions/Config", "description": "Vega-Lite configuration object. This property can only be defined at the top-level of a specification." }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "datasets": { "$ref": "#/definitions/Datasets", "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "encoding": { "$ref": "#/definitions/Encoding", "description": "A shared key-value mapping between encoding channels and definition of fields in the underlying layers." }, "height": { "anyOf": [ { "type": "number" }, { "enum": [ "container" ], "type": "string" }, { "$ref": "#/definitions/Step" } ], "description": "The height of a visualization.\n\n- For a plot with a continuous y-field, height should be a number.\n- For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.)\n- To enable responsive sizing on height, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation." }, "layer": { "description": "Layer or single view specifications to be layered.\n\n__Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.", "items": { "anyOf": [ { "$ref": "#/definitions/LayerSpec" }, { "$ref": "#/definitions/UnitSpec" } ] }, "type": "array" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "padding": { "$ref": "#/definitions/Padding", "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`" }, "projection": { "$ref": "#/definitions/Projection", "description": "An object defining properties of the geographic projection shared by underlying layers." }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "usermeta": { "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.", "type": "object" }, "view": { "$ref": "#/definitions/ViewBackground", "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)" }, "width": { "anyOf": [ { "type": "number" }, { "enum": [ "container" ], "type": "string" }, { "$ref": "#/definitions/Step" } ], "description": "The width of a visualization.\n\n- For a plot with a continuous x-field, width should be a number.\n- For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.)\n- To enable responsive sizing on width, it should be set to `\"container\"`.\n\n__Default value:__\nBased on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation." } }, "required": [ "layer" ], "type": "object" }, "TopLevelRepeatSpec": { "additionalProperties": false, "properties": { "$schema": { "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v4.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.", "format": "uri", "type": "string" }, "align": { "anyOf": [ { "$ref": "#/definitions/LayoutAlign" }, { "$ref": "#/definitions/RowCol" } ], "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`." }, "autosize": { "anyOf": [ { "$ref": "#/definitions/AutosizeType" }, { "$ref": "#/definitions/AutoSizeParams" } ], "description": "How the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n\n__Default value__: `pad`" }, "background": { "$ref": "#/definitions/Color", "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ `\"white\"`" }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/RowCol" } ], "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`" }, "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "config": { "$ref": "#/definitions/Config", "description": "Vega-Lite configuration object. This property can only be defined at the top-level of a specification." }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "datasets": { "$ref": "#/definitions/Datasets", "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "padding": { "$ref": "#/definitions/Padding", "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`" }, "repeat": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "$ref": "#/definitions/RepeatMapping" } ], "description": "Definition for fields to be repeated. One of:\n1) An array of fields to be repeated. If `\"repeat\"` is an array, the field can be referred to as `{\"repeat\": \"repeat\"}`. The repeated views are laid out in a wrapped row. You can set the number of columns to control the wrapping.\n2) An object that maps `\"row\"` and/or `\"column\"` to the listed fields to be repeated along the particular orientations. The objects `{\"repeat\": \"row\"}` and `{\"repeat\": \"column\"}` can be used to refer to the repeated field respectively." }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/RowCol" } ], "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)" }, "spec": { "$ref": "#/definitions/Spec", "description": "A specification of the view that gets repeated." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "usermeta": { "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.", "type": "object" } }, "required": [ "repeat", "spec" ], "type": "object" }, "TopLevelFacetSpec": { "additionalProperties": false, "properties": { "$schema": { "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v4.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.", "format": "uri", "type": "string" }, "align": { "anyOf": [ { "$ref": "#/definitions/LayoutAlign" }, { "$ref": "#/definitions/RowCol" } ], "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`." }, "autosize": { "anyOf": [ { "$ref": "#/definitions/AutosizeType" }, { "$ref": "#/definitions/AutoSizeParams" } ], "description": "How the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n\n__Default value__: `pad`" }, "background": { "$ref": "#/definitions/Color", "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ `\"white\"`" }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "center": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/RowCol" } ], "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`" }, "columns": { "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).", "type": "number" }, "config": { "$ref": "#/definitions/Config", "description": "Vega-Lite configuration object. This property can only be defined at the top-level of a specification." }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "datasets": { "$ref": "#/definitions/Datasets", "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "facet": { "anyOf": [ { "$ref": "#/definitions/FacetFieldDef" }, { "$ref": "#/definitions/FacetMapping" } ], "description": "Definition for how to facet the data. One of:\n1) [a field definition for faceting the plot by one field](https://vega.github.io/vega-lite/docs/facet.html#field-def)\n2) [An object that maps `row` and `column` channels to their field definitions](https://vega.github.io/vega-lite/docs/facet.html#mapping)" }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "padding": { "$ref": "#/definitions/Padding", "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`" }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "spacing": { "anyOf": [ { "type": "number" }, { "$ref": "#/definitions/RowCol" } ], "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)" }, "spec": { "anyOf": [ { "$ref": "#/definitions/LayerSpec" }, { "$ref": "#/definitions/UnitSpecWithFrame" } ], "description": "A specification of the view that gets faceted." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "usermeta": { "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.", "type": "object" } }, "required": [ "data", "facet", "spec" ], "type": "object" }, "TopLevelSpec": { "anyOf": [ { "$ref": "#/definitions/TopLevelUnitSpec" }, { "$ref": "#/definitions/TopLevelFacetSpec" }, { "$ref": "#/definitions/TopLevelLayerSpec" }, { "$ref": "#/definitions/TopLevelRepeatSpec" }, { "$ref": "#/definitions/TopLevelNormalizedConcatSpec" }, { "$ref": "#/definitions/TopLevelNormalizedVConcatSpec" }, { "$ref": "#/definitions/TopLevelNormalizedHConcatSpec" } ], "description": "A Vega-Lite top-level specification.\nThis is the root class for all Vega-Lite specifications.\n(The json schema is generated from this type.)" }, "TopLevelUnitSpec": { "additionalProperties": false, "properties": { "$schema": { "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v4.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.", "format": "uri", "type": "string" }, "autosize": { "anyOf": [ { "$ref": "#/definitions/AutosizeType" }, { "$ref": "#/definitions/AutoSizeParams" } ], "description": "How the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n\n__Default value__: `pad`" }, "background": { "$ref": "#/definitions/Color", "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ `\"white\"`" }, "bounds": { "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`", "enum": [ "full", "flush" ], "type": "string" }, "config": { "$ref": "#/definitions/Config", "description": "Vega-Lite configuration object. This property can only be defined at the top-level of a specification." }, "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "datasets": { "$ref": "#/definitions/Datasets", "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "encoding": { "$ref": "#/definitions/FacetedEncoding", "description": "A key-value mapping between encoding channels and definition of fields." }, "height": { "anyOf": [ { "type": "number" }, { "enum": [ "container" ], "type": "string" }, { "$ref": "#/definitions/Step" } ], "description": "The height of a visualization.\n\n- For a plot with a continuous y-field, height should be a number.\n- For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.)\n- To enable responsive sizing on height, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation." }, "mark": { "$ref": "#/definitions/AnyMark", "description": "A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def)." }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "padding": { "$ref": "#/definitions/Padding", "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`" }, "projection": { "$ref": "#/definitions/Projection", "description": "An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks\nand to `latitude` and `\"longitude\"` channels for other marks." }, "resolve": { "$ref": "#/definitions/Resolve", "description": "Scale, axis, and legend resolutions for view composition specifications." }, "selection": { "additionalProperties": { "$ref": "#/definitions/SelectionDef" }, "description": "A key-value mapping between selection names and definitions.", "type": "object" }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "usermeta": { "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.", "type": "object" }, "view": { "$ref": "#/definitions/ViewBackground", "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)" }, "width": { "anyOf": [ { "type": "number" }, { "enum": [ "container" ], "type": "string" }, { "$ref": "#/definitions/Step" } ], "description": "The width of a visualization.\n\n- For a plot with a continuous x-field, width should be a number.\n- For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.)\n- To enable responsive sizing on width, it should be set to `\"container\"`.\n\n__Default value:__\nBased on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation." } }, "required": [ "data", "mark" ], "type": "object" }, "TopoDataFormat": { "additionalProperties": false, "properties": { "feature": { "description": "The name of the TopoJSON object set to convert to a GeoJSON feature collection.\nFor example, in a map of the world, there may be an object set named `\"countries\"`.\nUsing the feature property, we can extract this set and generate a GeoJSON feature object for each country.", "type": "string" }, "mesh": { "description": "The name of the TopoJSON object set to convert to mesh.\nSimilar to the `feature` option, `mesh` extracts a named TopoJSON object set.\n Unlike the `feature` option, the corresponding geo data is returned as a single, unified mesh instance, not as individual GeoJSON features.\nExtracting a mesh is useful for more efficiently drawing borders or other geographic elements that you do not need to associate with specific regions such as individual countries, states or counties.", "type": "string" }, "parse": { "anyOf": [ { "$ref": "#/definitions/Parse" }, { "type": "null" } ], "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data.\nAlternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)).\nFor example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\nFor Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)" }, "type": { "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n\n__Default value:__ The default format type is determined by the extension of the file URL.\nIf no extension is detected, `\"json\"` will be used by default.", "enum": [ "topojson" ], "type": "string" } }, "type": "object" }, "Transform": { "anyOf": [ { "$ref": "#/definitions/AggregateTransform" }, { "$ref": "#/definitions/BinTransform" }, { "$ref": "#/definitions/CalculateTransform" }, { "$ref": "#/definitions/DensityTransform" }, { "$ref": "#/definitions/FilterTransform" }, { "$ref": "#/definitions/FlattenTransform" }, { "$ref": "#/definitions/FoldTransform" }, { "$ref": "#/definitions/ImputeTransform" }, { "$ref": "#/definitions/JoinAggregateTransform" }, { "$ref": "#/definitions/LoessTransform" }, { "$ref": "#/definitions/LookupTransform" }, { "$ref": "#/definitions/QuantileTransform" }, { "$ref": "#/definitions/RegressionTransform" }, { "$ref": "#/definitions/TimeUnitTransform" }, { "$ref": "#/definitions/SampleTransform" }, { "$ref": "#/definitions/StackTransform" }, { "$ref": "#/definitions/WindowTransform" }, { "$ref": "#/definitions/PivotTransform" } ] }, "TypeForShape": { "enum": [ "nominal", "ordinal", "geojson" ], "type": "string" }, "TypedFieldDef": { "additionalProperties": false, "description": "Definition object for a data field, its type and transformation of an encoding channel.", "properties": { "aggregate": { "$ref": "#/definitions/Aggregate", "description": "Aggregation function for the field\n(e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation." }, "bin": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/BinParams" }, { "enum": [ "binned" ], "type": "string" }, { "type": "null" } ], "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation." }, "field": { "$ref": "#/definitions/Field", "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`." }, "timeUnit": { "anyOf": [ { "$ref": "#/definitions/TimeUnit" }, { "$ref": "#/definitions/TimeUnitParams" } ], "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation." }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "type": "null" } ], "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used." }, "type": { "$ref": "#/definitions/StandardType", "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation." } }, "required": [ "type" ], "type": "object" }, "UnitSpec": { "additionalProperties": false, "description": "A unit specification, which can contain either [primitive marks or composite marks](https://vega.github.io/vega-lite/docs/mark.html#types).", "properties": { "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "encoding": { "$ref": "#/definitions/Encoding", "description": "A key-value mapping between encoding channels and definition of fields." }, "height": { "anyOf": [ { "type": "number" }, { "enum": [ "container" ], "type": "string" }, { "$ref": "#/definitions/Step" } ], "description": "__Deprecated:__ Please avoid using width in a unit spec that's a part of a layer spec." }, "mark": { "$ref": "#/definitions/AnyMark", "description": "A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def)." }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "projection": { "$ref": "#/definitions/Projection", "description": "An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks\nand to `latitude` and `\"longitude\"` channels for other marks." }, "selection": { "additionalProperties": { "$ref": "#/definitions/SelectionDef" }, "description": "A key-value mapping between selection names and definitions.", "type": "object" }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "view": { "$ref": "#/definitions/ViewBackground", "description": "__Deprecated:__ Please avoid using width in a unit spec that's a part of a layer spec." }, "width": { "anyOf": [ { "type": "number" }, { "enum": [ "container" ], "type": "string" }, { "$ref": "#/definitions/Step" } ], "description": "__Deprecated:__ Please avoid using width in a unit spec that's a part of a layer spec." } }, "required": [ "mark" ], "type": "object" }, "UnitSpecWithFrame": { "additionalProperties": false, "properties": { "data": { "anyOf": [ { "$ref": "#/definitions/Data" }, { "type": "null" } ], "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent." }, "description": { "description": "Description of this mark for commenting purpose.", "type": "string" }, "encoding": { "$ref": "#/definitions/Encoding", "description": "A key-value mapping between encoding channels and definition of fields." }, "height": { "anyOf": [ { "type": "number" }, { "enum": [ "container" ], "type": "string" }, { "$ref": "#/definitions/Step" } ], "description": "The height of a visualization.\n\n- For a plot with a continuous y-field, height should be a number.\n- For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.)\n- To enable responsive sizing on height, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation." }, "mark": { "$ref": "#/definitions/AnyMark", "description": "A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def)." }, "name": { "description": "Name of the visualization for later reference.", "type": "string" }, "projection": { "$ref": "#/definitions/Projection", "description": "An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks\nand to `latitude` and `\"longitude\"` channels for other marks." }, "selection": { "additionalProperties": { "$ref": "#/definitions/SelectionDef" }, "description": "A key-value mapping between selection names and definitions.", "type": "object" }, "title": { "anyOf": [ { "$ref": "#/definitions/Text" }, { "$ref": "#/definitions/TitleParams" } ], "description": "Title for the plot." }, "transform": { "description": "An array of data transformations such as filter and new field calculation.", "items": { "$ref": "#/definitions/Transform" }, "type": "array" }, "view": { "$ref": "#/definitions/ViewBackground", "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)" }, "width": { "anyOf": [ { "type": "number" }, { "enum": [ "container" ], "type": "string" }, { "$ref": "#/definitions/Step" } ], "description": "The width of a visualization.\n\n- For a plot with a continuous x-field, width should be a number.\n- For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.)\n- To enable responsive sizing on width, it should be set to `\"container\"`.\n\n__Default value:__\nBased on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation." } }, "required": [ "mark" ], "type": "object" }, "UrlData": { "additionalProperties": false, "properties": { "format": { "$ref": "#/definitions/DataFormat", "description": "An object that specifies the format for parsing the data." }, "name": { "description": "Provide a placeholder name and bind data at runtime.", "type": "string" }, "url": { "description": "An URL from which to load the data set. Use the `format.type` property\nto ensure the loaded data is correctly parsed.", "type": "string" } }, "required": [ "url" ], "type": "object" }, "UtcMultiTimeUnit": { "enum": [ "utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds" ], "type": "string" }, "UtcSingleTimeUnit": { "enum": [ "utcyear", "utcquarter", "utcmonth", "utcday", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds" ], "type": "string" }, "Value": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "boolean" }, { "items": { "type": "number" }, "type": "array" }, { "type": "null" } ] }, "YValueDef": { "additionalProperties": false, "description": "Definition object for a constant value (primitive value or gradient definition) of an encoding channel.", "properties": { "value": { "anyOf": [ { "type": "number" }, { "enum": [ "height" ], "type": "string" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "required": [ "value" ], "type": "object" }, "XValueDef": { "additionalProperties": false, "description": "Definition object for a constant value (primitive value or gradient definition) of an encoding channel.", "properties": { "value": { "anyOf": [ { "type": "number" }, { "enum": [ "width" ], "type": "string" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "required": [ "value" ], "type": "object" }, "NumberValueDef": { "additionalProperties": false, "description": "Definition object for a constant value (primitive value or gradient definition) of an encoding channel.", "properties": { "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).", "type": "number" } }, "required": [ "value" ], "type": "object" }, "ValueDefWithCondition": { "additionalProperties": false, "minProperties": 1, "properties": { "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalMarkPropFieldDef" }, { "$ref": "#/definitions/ValueCondition<(Gradient|string|null)>" } ], "description": "A field definition or one or more value definition(s) with a selection predicate." }, "value": { "anyOf": [ { "$ref": "#/definitions/Gradient" }, { "type": "string" }, { "type": "null" } ], "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "type": "object" }, "ValueDefWithCondition": { "additionalProperties": false, "minProperties": 1, "properties": { "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalMarkPropFieldDef" }, { "$ref": "#/definitions/ValueCondition<(string|null)>" } ], "description": "A field definition or one or more value definition(s) with a selection predicate." }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).", "type": [ "string", "null" ] } }, "type": "object" }, "ValueDefWithCondition": { "additionalProperties": false, "minProperties": 1, "properties": { "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalMarkPropFieldDef" }, { "$ref": "#/definitions/ValueCondition" } ], "description": "A field definition or one or more value definition(s) with a selection predicate." }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).", "type": "number" } }, "type": "object" }, "ValueDefWithCondition": { "additionalProperties": false, "minProperties": 1, "properties": { "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalMarkPropFieldDef" }, { "$ref": "#/definitions/ValueCondition" } ], "description": "A field definition or one or more value definition(s) with a selection predicate." }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).", "items": { "type": "number" }, "type": "array" } }, "type": "object" }, "ValueDefWithCondition,(string|null)>": { "additionalProperties": false, "minProperties": 1, "properties": { "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalMarkPropFieldDef" }, { "$ref": "#/definitions/ValueCondition<(string|null)>" } ], "description": "A field definition or one or more value definition(s) with a selection predicate." }, "value": { "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).", "type": [ "string", "null" ] } }, "type": "object" }, "ValueDefWithCondition": { "additionalProperties": false, "minProperties": 1, "properties": { "condition": { "anyOf": [ { "$ref": "#/definitions/ConditionalStringFieldDef" }, { "$ref": "#/definitions/ValueCondition" } ], "description": "A field definition or one or more value definition(s) with a selection predicate." }, "value": { "$ref": "#/definitions/Text", "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)." } }, "type": "object" }, "ValueCondition<(Gradient|string|null)>": { "anyOf": [ { "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null)>" }, { "items": { "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null)>" }, "type": "array" } ] }, "ValueCondition<(string|null)>": { "anyOf": [ { "$ref": "#/definitions/ConditionalStringValueDef" }, { "items": { "$ref": "#/definitions/ConditionalStringValueDef" }, "type": "array" } ] }, "ValueCondition": { "anyOf": [ { "$ref": "#/definitions/ConditionalValueDef" }, { "items": { "$ref": "#/definitions/ConditionalValueDef" }, "type": "array" } ] }, "ValueCondition": { "anyOf": [ { "$ref": "#/definitions/ConditionalNumberValueDef" }, { "items": { "$ref": "#/definitions/ConditionalNumberValueDef" }, "type": "array" } ] }, "ValueCondition": { "anyOf": [ { "$ref": "#/definitions/ConditionalValueDef" }, { "items": { "$ref": "#/definitions/ConditionalValueDef" }, "type": "array" } ] }, "ValueCondition": { "anyOf": [ { "$ref": "#/definitions/ConditionalValueDef" }, { "items": { "$ref": "#/definitions/ConditionalValueDef" }, "type": "array" } ] }, "ValueWithCondition": { "$ref": "#/definitions/ValueDefWithCondition" }, "ValueWithCondition": { "$ref": "#/definitions/ValueDefWithCondition" }, "ValueWithCondition": { "$ref": "#/definitions/ValueDefWithCondition" }, "ValueWithCondition,(string|null)>": { "$ref": "#/definitions/ValueDefWithCondition,(string|null)>" }, "ValueWithCondition": { "$ref": "#/definitions/ValueDefWithCondition" }, "Vector2": { "items": [ { "$ref": "#/definitions/DateTime" }, { "$ref": "#/definitions/DateTime" } ], "maxItems": 2, "minItems": 2, "type": "array" }, "Vector2>": { "items": [ { "$ref": "#/definitions/Vector2" }, { "$ref": "#/definitions/Vector2" } ], "maxItems": 2, "minItems": 2, "type": "array" }, "Vector2": { "items": [ { "type": "boolean" }, { "type": "boolean" } ], "maxItems": 2, "minItems": 2, "type": "array" }, "Vector2": { "items": [ { "type": "number" }, { "type": "number" } ], "maxItems": 2, "minItems": 2, "type": "array" }, "Vector2": { "items": [ { "type": "string" }, { "type": "string" } ], "maxItems": 2, "minItems": 2, "type": "array" }, "Vector3": { "items": [ { "type": "number" }, { "type": "number" }, { "type": "number" } ], "maxItems": 3, "minItems": 3, "type": "array" }, "ViewBackground": { "additionalProperties": false, "properties": { "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the view. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "fill": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "type": "null" } ], "description": "The fill color.\n\n__Default value:__ `undefined`" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "stroke": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "type": "null" } ], "description": "The stroke color.\n\n__Default value:__ `\"#ddd\"`" }, "strokeCap": { "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"butt\"`", "type": "string" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`", "type": "string" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "style": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "description": "A string or array of strings indicating the name of custom styles to apply to the view background. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles.\n\n__Default value:__ `\"cell\"`\n__Note:__ Any specified view background properties will augment the default style." } }, "type": "object" }, "ViewConfig": { "additionalProperties": false, "properties": { "clip": { "description": "Whether the view should be clipped.", "type": "boolean" }, "continuousHeight": { "description": "The default height when the plot has a continuous y-field.\n\n__Default value:__ `200`", "type": "number" }, "continuousWidth": { "description": "The default width when the plot has a continuous x-field.\n\n__Default value:__ `200`", "type": "number" }, "cornerRadius": { "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`", "type": "number" }, "cursor": { "$ref": "#/definitions/Cursor", "description": "The mouse cursor used over the view. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used." }, "discreteHeight": { "anyOf": [ { "type": "number" }, { "additionalProperties": false, "properties": { "step": { "type": "number" } }, "required": [ "step" ], "type": "object" } ], "description": "The default height when the plot has either a discrete y-field or no y-field.\nThe height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step.\n\n__Default value:__ a step size based on `config.view.step`." }, "discreteWidth": { "anyOf": [ { "type": "number" }, { "additionalProperties": false, "properties": { "step": { "type": "number" } }, "required": [ "step" ], "type": "object" } ], "description": "The default width when the plot has either a discrete x-field or no x-field.\nThe width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step.\n\n__Default value:__ a step size based on `config.view.step`." }, "fill": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "type": "null" } ], "description": "The fill color.\n\n__Default value:__ `undefined`" }, "fillOpacity": { "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "height": { "description": "Default height\n\n__Deprecated:__ Since Vega-Lite 4.0. Please use continuousHeight and discreteHeight instead.", "type": "number" }, "opacity": { "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.", "maximum": 1, "minimum": 0, "type": "number" }, "step": { "description": "Default step size for x-/y- discrete fields.", "type": "number" }, "stroke": { "anyOf": [ { "$ref": "#/definitions/Color" }, { "type": "null" } ], "description": "The stroke color.\n\n__Default value:__ `\"#ddd\"`" }, "strokeCap": { "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"butt\"`", "type": "string" }, "strokeDash": { "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.", "items": { "type": "number" }, "type": "array" }, "strokeDashOffset": { "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.", "type": "number" }, "strokeJoin": { "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`", "type": "string" }, "strokeMiterLimit": { "description": "The miter limit at which to bevel a line join.", "type": "number" }, "strokeOpacity": { "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`", "maximum": 1, "minimum": 0, "type": "number" }, "strokeWidth": { "description": "The stroke width, in pixels.", "minimum": 0, "type": "number" }, "width": { "description": "Default width\n\n__Deprecated:__ Since Vega-Lite 4.0. Please use continuousWidth and discreteWidth instead.", "type": "number" } }, "type": "object" }, "WindowEventType": { "anyOf": [ { "$ref": "#/definitions/EventType" }, { "type": "string" } ] }, "WindowFieldDef": { "additionalProperties": false, "properties": { "as": { "$ref": "#/definitions/FieldName", "description": "The output name for the window operation." }, "field": { "$ref": "#/definitions/FieldName", "description": "The data field for which to compute the aggregate or window function. This can be omitted for window functions that do not operate over a field such as `\"count\"`, `\"rank\"`, `\"dense_rank\"`." }, "op": { "anyOf": [ { "$ref": "#/definitions/AggregateOp" }, { "$ref": "#/definitions/WindowOnlyOp" } ], "description": "The window or aggregation operation to apply within a window (e.g., `\"rank\"`, `\"lead\"`, `\"sum\"`, `\"average\"` or `\"count\"`). See the list of all supported operations [here](https://vega.github.io/vega-lite/docs/window.html#ops)." }, "param": { "description": "Parameter values for the window functions. Parameter values can be omitted for operations that do not accept a parameter.\n\nSee the list of all supported operations and their parameters [here](https://vega.github.io/vega-lite/docs/transforms/window.html).", "type": "number" } }, "required": [ "op", "as" ], "type": "object" }, "WindowOnlyOp": { "enum": [ "row_number", "rank", "dense_rank", "percent_rank", "cume_dist", "ntile", "lag", "lead", "first_value", "last_value", "nth_value" ], "type": "string" }, "WindowTransform": { "additionalProperties": false, "properties": { "frame": { "description": "A frame specification as a two-element array indicating how the sliding window should proceed. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. The default value is `[null, 0]`, indicating that the sliding window includes the current object and all preceding objects. The value `[-5, 5]` indicates that the window should include five objects preceding and five objects following the current object. Finally, `[null, null]` indicates that the window frame should always include all data objects. If you this frame and want to assign the same value to add objects, you can use the simpler [join aggregate transform](https://vega.github.io/vega-lite/docs/joinaggregate.html). The only operators affected are the aggregation operations and the `first_value`, `last_value`, and `nth_value` window operations. The other window operations are not affected by this.\n\n__Default value:__: `[null, 0]` (includes the current object and all preceding objects)", "items": { "type": [ "null", "number" ] }, "type": "array" }, "groupby": { "description": "The data fields for partitioning the data objects into separate windows. If unspecified, all data points will be in a single window.", "items": { "$ref": "#/definitions/FieldName" }, "type": "array" }, "ignorePeers": { "description": "Indicates if the sliding window frame should ignore peer values (data that are considered identical by the sort criteria). The default is false, causing the window frame to expand to include all peer values. If set to true, the window frame will be defined by offset values only. This setting only affects those operations that depend on the window frame, namely aggregation operations and the first_value, last_value, and nth_value window operations.\n\n__Default value:__ `false`", "type": "boolean" }, "sort": { "description": "A sort field definition for sorting data objects within a window. If two data objects are considered equal by the comparator, they are considered \"peer\" values of equal rank. If sort is not specified, the order is undefined: data objects are processed in the order they are observed and none are considered peers (the ignorePeers parameter is ignored and treated as if set to `true`).", "items": { "$ref": "#/definitions/SortField" }, "type": "array" }, "window": { "description": "The definition of the fields in the window, and what calculations to use.", "items": { "$ref": "#/definitions/WindowFieldDef" }, "type": "array" } }, "required": [ "window" ], "type": "object" } } }altair-4.1.0/altair/vegalite/v4/tests/000077500000000000000000000000001364111050100175275ustar00rootroot00000000000000altair-4.1.0/altair/vegalite/v4/tests/__init__.py000066400000000000000000000000001364111050100216260ustar00rootroot00000000000000altair-4.1.0/altair/vegalite/v4/tests/test_api.py000066400000000000000000000725011364111050100217160ustar00rootroot00000000000000"""Unit tests for altair API""" import io import json import operator import os import tempfile import jsonschema import pytest import pandas as pd import altair.vegalite.v4 as alt try: import altair_saver # noqa: F401 except ImportError: altair_saver = None def getargs(*args, **kwargs): return args, kwargs OP_DICT = { "layer": operator.add, "hconcat": operator.or_, "vconcat": operator.and_, } def _make_chart_type(chart_type): data = pd.DataFrame( { "x": [28, 55, 43, 91, 81, 53, 19, 87], "y": [43, 91, 81, 53, 19, 87, 52, 28], "color": list("AAAABBBB"), } ) base = alt.Chart(data).mark_point().encode(x="x", y="y", color="color",) if chart_type in ["layer", "hconcat", "vconcat", "concat"]: func = getattr(alt, chart_type) return func(base.mark_square(), base.mark_circle()) elif chart_type == "facet": return base.facet("color") elif chart_type == "facet_encoding": return base.encode(facet="color") elif chart_type == "repeat": return base.encode(alt.X(alt.repeat(), type="quantitative")).repeat(["x", "y"]) elif chart_type == "chart": return base else: raise ValueError("chart_type='{}' is not recognized".format(chart_type)) @pytest.fixture def basic_chart(): data = pd.DataFrame( { "a": ["A", "B", "C", "D", "E", "F", "G", "H", "I"], "b": [28, 55, 43, 91, 81, 53, 19, 87, 52], } ) return alt.Chart(data).mark_bar().encode(x="a", y="b") def test_chart_data_types(): def Chart(data): return alt.Chart(data).mark_point().encode(x="x:Q", y="y:Q") # Url Data data = "/path/to/my/data.csv" dct = Chart(data).to_dict() assert dct["data"] == {"url": data} # Dict Data data = {"values": [{"x": 1, "y": 2}, {"x": 2, "y": 3}]} with alt.data_transformers.enable(consolidate_datasets=False): dct = Chart(data).to_dict() assert dct["data"] == data with alt.data_transformers.enable(consolidate_datasets=True): dct = Chart(data).to_dict() name = dct["data"]["name"] assert dct["datasets"][name] == data["values"] # DataFrame data data = pd.DataFrame({"x": range(5), "y": range(5)}) with alt.data_transformers.enable(consolidate_datasets=False): dct = Chart(data).to_dict() assert dct["data"]["values"] == data.to_dict(orient="records") with alt.data_transformers.enable(consolidate_datasets=True): dct = Chart(data).to_dict() name = dct["data"]["name"] assert dct["datasets"][name] == data.to_dict(orient="records") # Named data object data = alt.NamedData(name="Foo") dct = Chart(data).to_dict() assert dct["data"] == {"name": "Foo"} def test_chart_infer_types(): data = pd.DataFrame( { "x": pd.date_range("2012", periods=10, freq="Y"), "y": range(10), "c": list("abcabcabca"), } ) def _check_encodings(chart): dct = chart.to_dict() assert dct["encoding"]["x"]["type"] == "temporal" assert dct["encoding"]["x"]["field"] == "x" assert dct["encoding"]["y"]["type"] == "quantitative" assert dct["encoding"]["y"]["field"] == "y" assert dct["encoding"]["color"]["type"] == "nominal" assert dct["encoding"]["color"]["field"] == "c" # Pass field names by keyword chart = alt.Chart(data).mark_point().encode(x="x", y="y", color="c") _check_encodings(chart) # pass Channel objects by keyword chart = ( alt.Chart(data) .mark_point() .encode(x=alt.X("x"), y=alt.Y("y"), color=alt.Color("c")) ) _check_encodings(chart) # pass Channel objects by value chart = alt.Chart(data).mark_point().encode(alt.X("x"), alt.Y("y"), alt.Color("c")) _check_encodings(chart) # override default types chart = ( alt.Chart(data) .mark_point() .encode(alt.X("x", type="nominal"), alt.Y("y", type="ordinal")) ) dct = chart.to_dict() assert dct["encoding"]["x"]["type"] == "nominal" assert dct["encoding"]["y"]["type"] == "ordinal" @pytest.mark.parametrize( "args, kwargs", [ getargs(detail=["value:Q", "name:N"], tooltip=["value:Q", "name:N"]), getargs(detail=["value", "name"], tooltip=["value", "name"]), getargs(alt.Detail(["value:Q", "name:N"]), alt.Tooltip(["value:Q", "name:N"])), getargs(alt.Detail(["value", "name"]), alt.Tooltip(["value", "name"])), getargs( [alt.Detail("value:Q"), alt.Detail("name:N")], [alt.Tooltip("value:Q"), alt.Tooltip("name:N")], ), getargs( [alt.Detail("value"), alt.Detail("name")], [alt.Tooltip("value"), alt.Tooltip("name")], ), ], ) def test_multiple_encodings(args, kwargs): df = pd.DataFrame({"value": [1, 2, 3], "name": ["A", "B", "C"]}) encoding_dct = [ {"field": "value", "type": "quantitative"}, {"field": "name", "type": "nominal"}, ] chart = alt.Chart(df).mark_point().encode(*args, **kwargs) dct = chart.to_dict() assert dct["encoding"]["detail"] == encoding_dct assert dct["encoding"]["tooltip"] == encoding_dct def test_chart_operations(): data = pd.DataFrame( { "x": pd.date_range("2012", periods=10, freq="Y"), "y": range(10), "c": list("abcabcabca"), } ) chart1 = alt.Chart(data).mark_line().encode(x="x", y="y", color="c") chart2 = chart1.mark_point() chart3 = chart1.mark_circle() chart4 = chart1.mark_square() chart = chart1 + chart2 + chart3 assert isinstance(chart, alt.LayerChart) assert len(chart.layer) == 3 chart += chart4 assert len(chart.layer) == 4 chart = chart1 | chart2 | chart3 assert isinstance(chart, alt.HConcatChart) assert len(chart.hconcat) == 3 chart |= chart4 assert len(chart.hconcat) == 4 chart = chart1 & chart2 & chart3 assert isinstance(chart, alt.VConcatChart) assert len(chart.vconcat) == 3 chart &= chart4 assert len(chart.vconcat) == 4 def test_selection_to_dict(): brush = alt.selection(type="interval") # test some value selections # Note: X and Y cannot have conditions alt.Chart("path/to/data.json").mark_point().encode( color=alt.condition(brush, alt.ColorValue("red"), alt.ColorValue("blue")), opacity=alt.condition(brush, alt.value(0.5), alt.value(1.0)), text=alt.condition(brush, alt.TextValue("foo"), alt.value("bar")), ).to_dict() # test some field selections # Note: X and Y cannot have conditions # Conditions cannot both be fields alt.Chart("path/to/data.json").mark_point().encode( color=alt.condition(brush, alt.Color("col1:N"), alt.value("blue")), opacity=alt.condition(brush, "col1:N", alt.value(0.5)), text=alt.condition(brush, alt.value("abc"), alt.Text("col2:N")), size=alt.condition(brush, alt.value(20), "col2:N"), ).to_dict() def test_selection_expression(): selection = alt.selection_single(fields=["value"]) assert isinstance(selection.value, alt.expr.Expression) assert selection.value.to_dict() == "{0}.value".format(selection.name) assert isinstance(selection["value"], alt.expr.Expression) assert selection["value"].to_dict() == "{0}['value']".format(selection.name) @pytest.mark.parametrize("format", ["html", "json", "png", "svg"]) def test_save(format, basic_chart): if format == "png": out = io.BytesIO() mode = "rb" else: out = io.StringIO() mode = "r" if format in ["svg", "png"] and not altair_saver: with pytest.raises(ValueError) as err: basic_chart.save(out, format=format) assert "github.com/altair-viz/altair_saver" in str(err.value) return basic_chart.save(out, format=format) out.seek(0) content = out.read() if format == "json": assert "$schema" in json.loads(content) if format == "html": assert content.startswith("") fid, filename = tempfile.mkstemp(suffix="." + format) os.close(fid) try: basic_chart.save(filename) with open(filename, mode) as f: assert f.read() == content finally: os.remove(filename) def test_facet_basic(): # wrapped facet chart1 = ( alt.Chart("data.csv") .mark_point() .encode(x="x:Q", y="y:Q",) .facet("category:N", columns=2) ) dct1 = chart1.to_dict() assert dct1["facet"] == alt.Facet("category:N").to_dict() assert dct1["columns"] == 2 assert dct1["data"] == alt.UrlData("data.csv").to_dict() # explicit row/col facet chart2 = ( alt.Chart("data.csv") .mark_point() .encode(x="x:Q", y="y:Q",) .facet(row="category1:Q", column="category2:Q") ) dct2 = chart2.to_dict() assert dct2["facet"]["row"] == alt.Facet("category1:Q").to_dict() assert dct2["facet"]["column"] == alt.Facet("category2:Q").to_dict() assert "columns" not in dct2 assert dct2["data"] == alt.UrlData("data.csv").to_dict() def test_facet_parse(): chart = ( alt.Chart("data.csv") .mark_point() .encode(x="x:Q", y="y:Q") .facet(row="row:N", column="column:O") ) dct = chart.to_dict() assert dct["data"] == {"url": "data.csv"} assert "data" not in dct["spec"] assert dct["facet"] == { "column": {"field": "column", "type": "ordinal"}, "row": {"field": "row", "type": "nominal"}, } def test_facet_parse_data(): data = pd.DataFrame({"x": range(5), "y": range(5), "row": list("abcab")}) chart = ( alt.Chart(data) .mark_point() .encode(x="x", y="y:O") .facet(row="row", column="column:O") ) with alt.data_transformers.enable(consolidate_datasets=False): dct = chart.to_dict() assert "values" in dct["data"] assert "data" not in dct["spec"] assert dct["facet"] == { "column": {"field": "column", "type": "ordinal"}, "row": {"field": "row", "type": "nominal"}, } with alt.data_transformers.enable(consolidate_datasets=True): dct = chart.to_dict() assert "datasets" in dct assert "name" in dct["data"] assert "data" not in dct["spec"] assert dct["facet"] == { "column": {"field": "column", "type": "ordinal"}, "row": {"field": "row", "type": "nominal"}, } def test_selection(): # test instantiation of selections interval = alt.selection_interval(name="selec_1") assert interval.selection.type == "interval" assert interval.name == "selec_1" single = alt.selection_single(name="selec_2") assert single.selection.type == "single" assert single.name == "selec_2" multi = alt.selection_multi(name="selec_3") assert multi.selection.type == "multi" assert multi.name == "selec_3" # test adding to chart chart = alt.Chart().add_selection(single) chart = chart.add_selection(multi, interval) assert set(chart.selection.keys()) == {"selec_1", "selec_2", "selec_3"} # test logical operations assert isinstance(single & multi, alt.Selection) assert isinstance(single | multi, alt.Selection) assert isinstance(~single, alt.Selection) assert isinstance((single & multi)[0].group, alt.SelectionAnd) assert isinstance((single | multi)[0].group, alt.SelectionOr) assert isinstance((~single)[0].group, alt.SelectionNot) # test that default names increment (regression for #1454) sel1 = alt.selection_single() sel2 = alt.selection_multi() sel3 = alt.selection_interval() names = {s.name for s in (sel1, sel2, sel3)} assert len(names) == 3 def test_transforms(): # aggregate transform agg1 = alt.AggregatedFieldDef(**{"as": "x1", "op": "mean", "field": "y"}) agg2 = alt.AggregatedFieldDef(**{"as": "x2", "op": "median", "field": "z"}) chart = alt.Chart().transform_aggregate([agg1], ["foo"], x2="median(z)") kwds = dict(aggregate=[agg1, agg2], groupby=["foo"]) assert chart.transform == [alt.AggregateTransform(**kwds)] # bin transform chart = alt.Chart().transform_bin("binned", field="field", bin=True) kwds = {"as": "binned", "field": "field", "bin": True} assert chart.transform == [alt.BinTransform(**kwds)] # calcualte transform chart = alt.Chart().transform_calculate("calc", "datum.a * 4") kwds = {"as": "calc", "calculate": "datum.a * 4"} assert chart.transform == [alt.CalculateTransform(**kwds)] # density transform chart = alt.Chart().transform_density("x", as_=["value", "density"]) kwds = {"as": ["value", "density"], "density": "x"} assert chart.transform == [alt.DensityTransform(**kwds)] # filter transform chart = alt.Chart().transform_filter("datum.a < 4") assert chart.transform == [alt.FilterTransform(filter="datum.a < 4")] # flatten transform chart = alt.Chart().transform_flatten(["A", "B"], ["X", "Y"]) kwds = {"as": ["X", "Y"], "flatten": ["A", "B"]} assert chart.transform == [alt.FlattenTransform(**kwds)] # fold transform chart = alt.Chart().transform_fold(["A", "B", "C"], as_=["key", "val"]) kwds = {"as": ["key", "val"], "fold": ["A", "B", "C"]} assert chart.transform == [alt.FoldTransform(**kwds)] # impute transform chart = alt.Chart().transform_impute("field", "key", groupby=["x"]) kwds = {"impute": "field", "key": "key", "groupby": ["x"]} assert chart.transform == [alt.ImputeTransform(**kwds)] # joinaggregate transform chart = alt.Chart().transform_joinaggregate(min="min(x)", groupby=["key"]) kwds = { "joinaggregate": [ alt.JoinAggregateFieldDef(field="x", op="min", **{"as": "min"}) ], "groupby": ["key"], } assert chart.transform == [alt.JoinAggregateTransform(**kwds)] # loess transform chart = alt.Chart().transform_loess("x", "y", as_=["xx", "yy"]) kwds = {"on": "x", "loess": "y", "as": ["xx", "yy"]} assert chart.transform == [alt.LoessTransform(**kwds)] # lookup transform (data) lookup_data = alt.LookupData(alt.UrlData("foo.csv"), "id", ["rate"]) chart = alt.Chart().transform_lookup("a", from_=lookup_data, as_="a", default="b") kwds = {"from": lookup_data, "as": "a", "lookup": "a", "default": "b"} assert chart.transform == [alt.LookupTransform(**kwds)] # lookup transform (selection) lookup_selection = alt.LookupSelection(key="key", selection="sel") chart = alt.Chart().transform_lookup( "a", from_=lookup_selection, as_="a", default="b" ) kwds = {"from": lookup_selection, "as": "a", "lookup": "a", "default": "b"} assert chart.transform == [alt.LookupTransform(**kwds)] # pivot transform chart = alt.Chart().transform_pivot("x", "y") assert chart.transform == [alt.PivotTransform(pivot="x", value="y")] # quantile transform chart = alt.Chart().transform_quantile("x", as_=["prob", "value"]) kwds = {"quantile": "x", "as": ["prob", "value"]} assert chart.transform == [alt.QuantileTransform(**kwds)] # regression transform chart = alt.Chart().transform_regression("x", "y", as_=["xx", "yy"]) kwds = {"on": "x", "regression": "y", "as": ["xx", "yy"]} assert chart.transform == [alt.RegressionTransform(**kwds)] # sample transform chart = alt.Chart().transform_sample() assert chart.transform == [alt.SampleTransform(1000)] # stack transform chart = alt.Chart().transform_stack("stacked", "x", groupby=["y"]) assert chart.transform == [ alt.StackTransform(stack="x", groupby=["y"], **{"as": "stacked"}) ] # timeUnit transform chart = alt.Chart().transform_timeunit("foo", field="x", timeUnit="date") kwds = {"as": "foo", "field": "x", "timeUnit": "date"} assert chart.transform == [alt.TimeUnitTransform(**kwds)] # window transform chart = alt.Chart().transform_window(xsum="sum(x)", ymin="min(y)", frame=[None, 0]) window = [ alt.WindowFieldDef(**{"as": "xsum", "field": "x", "op": "sum"}), alt.WindowFieldDef(**{"as": "ymin", "field": "y", "op": "min"}), ] # kwargs don't maintain order in Python < 3.6, so window list can # be reversed assert chart.transform == [ alt.WindowTransform(frame=[None, 0], window=window) ] or chart.transform == [alt.WindowTransform(frame=[None, 0], window=window[::-1])] def test_filter_transform_selection_predicates(): selector1 = alt.selection_interval(name="s1") selector2 = alt.selection_interval(name="s2") base = alt.Chart("data.txt").mark_point() chart = base.transform_filter(selector1) assert chart.to_dict()["transform"] == [{"filter": {"selection": "s1"}}] chart = base.transform_filter(~selector1) assert chart.to_dict()["transform"] == [{"filter": {"selection": {"not": "s1"}}}] chart = base.transform_filter(selector1 & selector2) assert chart.to_dict()["transform"] == [ {"filter": {"selection": {"and": ["s1", "s2"]}}} ] chart = base.transform_filter(selector1 | selector2) assert chart.to_dict()["transform"] == [ {"filter": {"selection": {"or": ["s1", "s2"]}}} ] chart = base.transform_filter(selector1 | ~selector2) assert chart.to_dict()["transform"] == [ {"filter": {"selection": {"or": ["s1", {"not": "s2"}]}}} ] chart = base.transform_filter(~selector1 | ~selector2) assert chart.to_dict()["transform"] == [ {"filter": {"selection": {"or": [{"not": "s1"}, {"not": "s2"}]}}} ] chart = base.transform_filter(~(selector1 & selector2)) assert chart.to_dict()["transform"] == [ {"filter": {"selection": {"not": {"and": ["s1", "s2"]}}}} ] def test_resolve_methods(): chart = alt.LayerChart().resolve_axis(x="shared", y="independent") assert chart.resolve == alt.Resolve( axis=alt.AxisResolveMap(x="shared", y="independent") ) chart = alt.LayerChart().resolve_legend(color="shared", fill="independent") assert chart.resolve == alt.Resolve( legend=alt.LegendResolveMap(color="shared", fill="independent") ) chart = alt.LayerChart().resolve_scale(x="shared", y="independent") assert chart.resolve == alt.Resolve( scale=alt.ScaleResolveMap(x="shared", y="independent") ) def test_layer_encodings(): chart = alt.LayerChart().encode(x="column:Q") assert chart.encoding.x == alt.X(shorthand="column:Q") def test_add_selection(): selections = [ alt.selection_interval(), alt.selection_single(), alt.selection_multi(), ] chart = ( alt.Chart() .mark_point() .add_selection(selections[0]) .add_selection(selections[1], selections[2]) ) expected = {s.name: s.selection for s in selections} assert chart.selection == expected def test_repeat_add_selections(): base = alt.Chart("data.csv").mark_point() selection = alt.selection_single() chart1 = base.add_selection(selection).repeat(list("ABC")) chart2 = base.repeat(list("ABC")).add_selection(selection) assert chart1.to_dict() == chart2.to_dict() def test_facet_add_selections(): base = alt.Chart("data.csv").mark_point() selection = alt.selection_single() chart1 = base.add_selection(selection).facet("val:Q") chart2 = base.facet("val:Q").add_selection(selection) assert chart1.to_dict() == chart2.to_dict() def test_layer_add_selection(): base = alt.Chart("data.csv").mark_point() selection = alt.selection_single() chart1 = alt.layer(base.add_selection(selection), base) chart2 = alt.layer(base, base).add_selection(selection) assert chart1.to_dict() == chart2.to_dict() @pytest.mark.parametrize("charttype", [alt.concat, alt.hconcat, alt.vconcat]) def test_compound_add_selections(charttype): base = alt.Chart("data.csv").mark_point() selection = alt.selection_single() chart1 = charttype(base.add_selection(selection), base.add_selection(selection)) chart2 = charttype(base, base).add_selection(selection) assert chart1.to_dict() == chart2.to_dict() def test_selection_property(): sel = alt.selection_interval() chart = alt.Chart("data.csv").mark_point().properties(selection=sel) assert list(chart["selection"].keys()) == [sel.name] def test_LookupData(): df = pd.DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]}) lookup = alt.LookupData(data=df, key="x") dct = lookup.to_dict() assert dct["key"] == "x" assert dct["data"] == { "values": [{"x": 1, "y": 4}, {"x": 2, "y": 5}, {"x": 3, "y": 6}] } def test_themes(): chart = alt.Chart("foo.txt").mark_point() with alt.themes.enable("default"): assert chart.to_dict()["config"] == { "view": {"continuousWidth": 400, "continuousHeight": 300} } with alt.themes.enable("opaque"): assert chart.to_dict()["config"] == { "background": "white", "view": {"continuousWidth": 400, "continuousHeight": 300}, } with alt.themes.enable("none"): assert "config" not in chart.to_dict() def test_chart_from_dict(): base = alt.Chart("data.csv").mark_point().encode(x="x:Q", y="y:Q") charts = [ base, base + base, base | base, base & base, base.facet("c:N"), (base + base).facet(row="c:N", data="data.csv"), base.repeat(["c", "d"]), (base + base).repeat(row=["c", "d"]), ] for chart in charts: chart_out = alt.Chart.from_dict(chart.to_dict()) assert type(chart_out) is type(chart) # test that an invalid spec leads to a schema validation error with pytest.raises(jsonschema.ValidationError): alt.Chart.from_dict({"invalid": "spec"}) def test_consolidate_datasets(basic_chart): subchart1 = basic_chart subchart2 = basic_chart.copy() subchart2.data = basic_chart.data.copy() chart = subchart1 | subchart2 with alt.data_transformers.enable(consolidate_datasets=True): dct_consolidated = chart.to_dict() with alt.data_transformers.enable(consolidate_datasets=False): dct_standard = chart.to_dict() assert "datasets" in dct_consolidated assert "datasets" not in dct_standard datasets = dct_consolidated["datasets"] # two dataset copies should be recognized as duplicates assert len(datasets) == 1 # make sure data matches original & names are correct name, data = datasets.popitem() for spec in dct_standard["hconcat"]: assert spec["data"]["values"] == data for spec in dct_consolidated["hconcat"]: assert spec["data"] == {"name": name} def test_consolidate_InlineData(): data = alt.InlineData( values=[{"a": 1, "b": 1}, {"a": 2, "b": 2}], format={"type": "csv"} ) chart = alt.Chart(data).mark_point() with alt.data_transformers.enable(consolidate_datasets=False): dct = chart.to_dict() assert dct["data"]["format"] == data.format assert dct["data"]["values"] == data.values with alt.data_transformers.enable(consolidate_datasets=True): dct = chart.to_dict() assert dct["data"]["format"] == data.format assert list(dct["datasets"].values())[0] == data.values data = alt.InlineData(values=[], name="runtime_data") chart = alt.Chart(data).mark_point() with alt.data_transformers.enable(consolidate_datasets=False): dct = chart.to_dict() assert dct["data"] == data.to_dict() with alt.data_transformers.enable(consolidate_datasets=True): dct = chart.to_dict() assert dct["data"] == data.to_dict() def test_repeat(): # wrapped repeat chart1 = ( alt.Chart("data.csv") .mark_point() .encode(x=alt.X(alt.repeat(), type="quantitative"), y="y:Q",) .repeat(["A", "B", "C", "D"], columns=2) ) dct1 = chart1.to_dict() assert dct1["repeat"] == ["A", "B", "C", "D"] assert dct1["columns"] == 2 assert dct1["spec"]["encoding"]["x"]["field"] == {"repeat": "repeat"} # explicit row/col repeat chart2 = ( alt.Chart("data.csv") .mark_point() .encode( x=alt.X(alt.repeat("row"), type="quantitative"), y=alt.Y(alt.repeat("column"), type="quantitative"), ) .repeat(row=["A", "B", "C"], column=["C", "B", "A"]) ) dct2 = chart2.to_dict() assert dct2["repeat"] == {"row": ["A", "B", "C"], "column": ["C", "B", "A"]} assert "columns" not in dct2 assert dct2["spec"]["encoding"]["x"]["field"] == {"repeat": "row"} assert dct2["spec"]["encoding"]["y"]["field"] == {"repeat": "column"} def test_data_property(): data = pd.DataFrame({"x": [1, 2, 3], "y": list("ABC")}) chart1 = alt.Chart(data).mark_point() chart2 = alt.Chart().mark_point().properties(data=data) assert chart1.to_dict() == chart2.to_dict() @pytest.mark.parametrize("method", ["layer", "hconcat", "vconcat", "concat"]) @pytest.mark.parametrize( "data", ["data.json", pd.DataFrame({"x": range(3), "y": list("abc")})] ) def test_subcharts_with_same_data(method, data): func = getattr(alt, method) point = alt.Chart(data).mark_point().encode(x="x:Q", y="y:Q") line = point.mark_line() text = point.mark_text() chart1 = func(point, line, text) assert chart1.data is not alt.Undefined assert all(c.data is alt.Undefined for c in getattr(chart1, method)) if method != "concat": op = OP_DICT[method] chart2 = op(op(point, line), text) assert chart2.data is not alt.Undefined assert all(c.data is alt.Undefined for c in getattr(chart2, method)) @pytest.mark.parametrize("method", ["layer", "hconcat", "vconcat", "concat"]) @pytest.mark.parametrize( "data", ["data.json", pd.DataFrame({"x": range(3), "y": list("abc")})] ) def test_subcharts_different_data(method, data): func = getattr(alt, method) point = alt.Chart(data).mark_point().encode(x="x:Q", y="y:Q") otherdata = alt.Chart("data.csv").mark_point().encode(x="x:Q", y="y:Q") nodata = alt.Chart().mark_point().encode(x="x:Q", y="y:Q") chart1 = func(point, otherdata) assert chart1.data is alt.Undefined assert getattr(chart1, method)[0].data is data chart2 = func(point, nodata) assert chart2.data is alt.Undefined assert getattr(chart2, method)[0].data is data def test_layer_facet(basic_chart): chart = (basic_chart + basic_chart).facet(row="row:Q") assert chart.data is not alt.Undefined assert chart.spec.data is alt.Undefined for layer in chart.spec.layer: assert layer.data is alt.Undefined dct = chart.to_dict() assert "data" in dct def test_layer_errors(): toplevel_chart = alt.Chart("data.txt").mark_point().configure_legend(columns=2) facet_chart1 = alt.Chart("data.txt").mark_point().encode(facet="row:Q") facet_chart2 = alt.Chart("data.txt").mark_point().facet("row:Q") repeat_chart = alt.Chart("data.txt").mark_point().repeat(["A", "B", "C"]) simple_chart = alt.Chart("data.txt").mark_point() with pytest.raises(ValueError) as err: toplevel_chart + simple_chart assert str(err.value).startswith( 'Objects with "config" attribute cannot be used within LayerChart.' ) with pytest.raises(ValueError) as err: repeat_chart + simple_chart assert str(err.value) == "Repeat charts cannot be layered." with pytest.raises(ValueError) as err: facet_chart1 + simple_chart assert str(err.value) == "Faceted charts cannot be layered." with pytest.raises(ValueError) as err: alt.layer(simple_chart) + facet_chart2 assert str(err.value) == "Faceted charts cannot be layered." @pytest.mark.parametrize( "chart_type", ["layer", "hconcat", "vconcat", "concat", "facet", "facet_encoding", "repeat"], ) def test_resolve(chart_type): chart = _make_chart_type(chart_type) chart = ( chart.resolve_scale(x="independent",) .resolve_legend(color="independent") .resolve_axis(y="independent") ) dct = chart.to_dict() assert dct["resolve"] == { "scale": {"x": "independent"}, "legend": {"color": "independent"}, "axis": {"y": "independent"}, } # TODO: test vconcat, hconcat, concat, facet_encoding when schema allows them. # This is blocked by https://github.com/vega/vega-lite/issues/5261 @pytest.mark.parametrize("chart_type", ["chart", "layer"]) @pytest.mark.parametrize("facet_arg", [None, "facet", "row", "column"]) def test_facet(chart_type, facet_arg): chart = _make_chart_type(chart_type) if facet_arg is None: chart = chart.facet("color:N", columns=2) else: chart = chart.facet(**{facet_arg: "color:N", "columns": 2}) dct = chart.to_dict() assert "spec" in dct assert dct["columns"] == 2 expected = {"field": "color", "type": "nominal"} if facet_arg is None or facet_arg == "facet": assert dct["facet"] == expected else: assert dct["facet"][facet_arg] == expected def test_sequence(): data = alt.sequence(100) assert data.to_dict() == {"sequence": {"start": 0, "stop": 100}} data = alt.sequence(5, 10) assert data.to_dict() == {"sequence": {"start": 5, "stop": 10}} data = alt.sequence(0, 1, 0.1, as_="x") assert data.to_dict() == { "sequence": {"start": 0, "stop": 1, "step": 0.1, "as": "x"} } def test_graticule(): data = alt.graticule() assert data.to_dict() == {"graticule": True} data = alt.graticule(step=[15, 15]) assert data.to_dict() == {"graticule": {"step": [15, 15]}} def test_sphere(): data = alt.sphere() assert data.to_dict() == {"sphere": True} altair-4.1.0/altair/vegalite/v4/tests/test_data.py000066400000000000000000000017061364111050100220550ustar00rootroot00000000000000import os import pandas as pd import pytest from .. import data as alt @pytest.fixture def sample_data(): return pd.DataFrame({"x": range(10), "y": range(10)}) def test_disable_max_rows(sample_data): with alt.data_transformers.enable("default", max_rows=5): # Ensure max rows error is raised. with pytest.raises(alt.MaxRowsError): alt.data_transformers.get()(sample_data) # Ensure that max rows error is properly disabled. with alt.data_transformers.disable_max_rows(): alt.data_transformers.get()(sample_data) try: with alt.data_transformers.enable("json"): # Ensure that there is no TypeError for non-max_rows transformers. with alt.data_transformers.disable_max_rows(): jsonfile = alt.data_transformers.get()(sample_data) except TypeError: jsonfile = {} finally: if jsonfile: os.remove(jsonfile["url"]) altair-4.1.0/altair/vegalite/v4/tests/test_display.py000066400000000000000000000036701364111050100226130ustar00rootroot00000000000000from contextlib import contextmanager import pytest import altair.vegalite.v4 as alt @contextmanager def check_render_options(**options): """ Context manager that will assert that alt.renderers.options are equivalent to the given options in the IPython.display.display call """ import IPython.display def check_options(obj): assert alt.renderers.options == options _display = IPython.display.display IPython.display.display = check_options try: yield finally: IPython.display.display = _display def test_check_renderer_options(): # this test should pass with check_render_options(): from IPython.display import display display(None) # check that an error is appropriately raised if the test fails with pytest.raises(AssertionError): with check_render_options(foo="bar"): from IPython.display import display display(None) def test_display_options(): chart = alt.Chart("data.csv").mark_point().encode(x="foo:Q") # check that there are no options by default with check_render_options(): chart.display() # check that display options are passed with check_render_options(embed_options={"tooltip": False, "renderer": "canvas"}): chart.display("canvas", tooltip=False) # check that above options do not persist with check_render_options(): chart.display() # check that display options augment rather than overwrite pre-set options with alt.renderers.enable(embed_options={"tooltip": True, "renderer": "svg"}): with check_render_options(embed_options={"tooltip": True, "renderer": "svg"}): chart.display() with check_render_options( embed_options={"tooltip": True, "renderer": "canvas"} ): chart.display("canvas") # check that above options do not persist with check_render_options(): chart.display() altair-4.1.0/altair/vegalite/v4/tests/test_geo_interface.py000066400000000000000000000145401364111050100237360ustar00rootroot00000000000000import pytest import altair.vegalite.v4 as alt def geom_obj(geom): class Geom(object): pass geom_obj = Geom() setattr(geom_obj, "__geo_interface__", geom) return geom_obj # correct translation of Polygon geometry to Feature type def test_geo_interface_polygon_feature(): geom = { "coordinates": [[(0, 0), (0, 2), (2, 2), (2, 0), (0, 0)]], "type": "Polygon", } feat = geom_obj(geom) with alt.data_transformers.enable(consolidate_datasets=False): spec = alt.Chart(feat).mark_geoshape().to_dict() assert spec["data"]["values"]["type"] == "Feature" # merge geometry with empty properties dictionary def test_geo_interface_removal_empty_properties(): geom = { "geometry": { "coordinates": [ [[6.90, 53.48], [5.98, 51.85], [6.07, 53.51], [6.90, 53.48]] ], "type": "Polygon", }, "id": None, "properties": {}, "type": "Feature", } feat = geom_obj(geom) with alt.data_transformers.enable(consolidate_datasets=False): spec = alt.Chart(feat).mark_geoshape().to_dict() assert spec["data"]["values"]["type"] == "Feature" # only register metadata in the properties member def test_geo_interface_register_foreign_member(): geom = { "geometry": { "coordinates": [ [[6.90, 53.48], [5.98, 51.85], [6.07, 53.51], [6.90, 53.48]] ], "type": "Polygon", }, "id": 2, "properties": {"foo": "bah"}, "type": "Feature", } feat = geom_obj(geom) with alt.data_transformers.enable(consolidate_datasets=False): spec = alt.Chart(feat).mark_geoshape().to_dict() with pytest.raises(KeyError): spec["data"]["values"]["id"] assert spec["data"]["values"]["foo"] == "bah" # correct serializing of arrays and nested tuples def test_geo_interface_serializing_arrays_tuples(): import array as arr geom = { "bbox": arr.array("d", [1, 2, 3, 4]), "geometry": { "coordinates": [ tuple( ( tuple((6.90, 53.48)), tuple((5.98, 51.85)), tuple((6.07, 53.51)), tuple((6.90, 53.48)), ) ) ], "type": "Polygon", }, "id": 27, "properties": {}, "type": "Feature", } feat = geom_obj(geom) with alt.data_transformers.enable(consolidate_datasets=False): spec = alt.Chart(feat).mark_geoshape().to_dict() assert spec["data"]["values"]["geometry"]["coordinates"][0][0] == [6.9, 53.48] # overwrite existing 'type' value in properties with `Feature` def test_geo_interface_reserved_members(): geom = { "geometry": { "coordinates": [ [[6.90, 53.48], [5.98, 51.85], [6.07, 53.51], [6.90, 53.48]] ], "type": "Polygon", }, "id": 27, "properties": {"type": "foo"}, "type": "Feature", } feat = geom_obj(geom) with alt.data_transformers.enable(consolidate_datasets=False): spec = alt.Chart(feat).mark_geoshape().to_dict() assert spec["data"]["values"]["type"] == "Feature" # an empty FeatureCollection is valid def test_geo_interface_empty_feature_collection(): geom = {"type": "FeatureCollection", "features": []} feat = geom_obj(geom) with alt.data_transformers.enable(consolidate_datasets=False): spec = alt.Chart(feat).mark_geoshape().to_dict() assert spec["data"]["values"] == [] # Features in a FeatureCollection only keep properties and geometry def test_geo_interface_feature_collection(): geom = { "type": "FeatureCollection", "features": [ { "geometry": { "coordinates": [ [[6.90, 53.48], [5.98, 51.85], [6.07, 53.51], [6.90, 53.48]] ], "type": "Polygon", }, "id": 27, "properties": {"type": "foo", "id": 1, "geometry": 1}, "type": "Feature", }, { "geometry": { "coordinates": [ [[8.90, 53.48], [7.98, 51.85], [8.07, 53.51], [8.90, 53.48]] ], "type": "Polygon", }, "id": 28, "properties": {"type": "foo", "id": 2, "geometry": 1}, "type": "Feature", }, ], } feat = geom_obj(geom) with alt.data_transformers.enable(consolidate_datasets=False): spec = alt.Chart(feat).mark_geoshape().to_dict() assert spec["data"]["values"][0]["id"] == 1 assert spec["data"]["values"][1]["id"] == 2 assert "coordinates" in spec["data"]["values"][0]["geometry"] assert "coordinates" in spec["data"]["values"][1]["geometry"] assert spec["data"]["values"][0]["type"] == "Feature" assert spec["data"]["values"][1]["type"] == "Feature" # typical output of a __geo_interface__ from geopandas GeoDataFrame # notic that the index value is registerd as a commonly used identifier # with the name "id" (in this case 49). Similar to serialization of a # pandas DataFrame is the index not included in the output def test_geo_interface_feature_collection_gdf(): geom = { "bbox": (19.89, -26.82, 29.43, -17.66), "features": [ { "bbox": (19.89, -26.82, 29.43, -17.66), "geometry": { "coordinates": [ [[6.90, 53.48], [5.98, 51.85], [6.07, 53.51], [6.90, 53.48]] ], "type": "Polygon", }, "id": "49", "properties": { "continent": "Africa", "gdp_md_est": 35900.0, "id": "BWA", "iso_a3": "BWA", "name": "Botswana", "pop_est": 2214858, }, "type": "Feature", } ], "type": "FeatureCollection", } feat = geom_obj(geom) with alt.data_transformers.enable(consolidate_datasets=False): spec = alt.Chart(feat).mark_geoshape().to_dict() assert spec["data"]["values"][0]["id"] == "BWA" altair-4.1.0/altair/vegalite/v4/tests/test_renderers.py000066400000000000000000000046551364111050100231430ustar00rootroot00000000000000"""Tests of various renderers""" import json import pytest import altair.vegalite.v4 as alt @pytest.fixture def chart(): return alt.Chart("data.csv").mark_point() def test_html_renderer_embed_options(chart, renderer="html"): """Test that embed_options in renderer metadata are correctly manifest in html""" # Short of parsing the javascript, it's difficult to parse out the # actions. So we use string matching def assert_has_options(chart, **opts): html = chart._repr_mimebundle_(None, None)["text/html"] for key, val in opts.items(): assert json.dumps({key: val})[1:-1] in html with alt.renderers.enable(renderer): assert_has_options(chart, mode="vega-lite") with alt.renderers.enable(embed_options=dict(actions={"export": True})): assert_has_options(chart, mode="vega-lite", actions={"export": True}) with alt.renderers.set_embed_options(actions=True): assert_has_options(chart, mode="vega-lite", actions=True) def test_mimetype_renderer_embed_options(chart, renderer="mimetype"): # check that metadata is passed appropriately mimetype = alt.display.VEGALITE_MIME_TYPE spec = chart.to_dict() with alt.renderers.enable(renderer): # Sanity check: no metadata specified bundle, metadata = chart._repr_mimebundle_(None, None) assert bundle[mimetype] == spec assert metadata == {} with alt.renderers.set_embed_options(actions=False): bundle, metadata = chart._repr_mimebundle_(None, None) assert set(bundle.keys()) == {mimetype, "text/plain"} assert bundle[mimetype] == spec assert metadata == {mimetype: {"embed_options": {"actions": False}}} def test_json_renderer_embed_options(chart, renderer="json"): """Test that embed_options in renderer metadata are correctly manifest in html""" mimetype = "application/json" spec = chart.to_dict() with alt.renderers.enable(renderer): # Sanity check: no options specified bundle, metadata = chart._repr_mimebundle_(None, None) assert bundle[mimetype] == spec assert metadata == {} with alt.renderers.enable(option="foo"): bundle, metadata = chart._repr_mimebundle_(None, None) assert set(bundle.keys()) == {mimetype, "text/plain"} assert bundle[mimetype] == spec assert metadata == {mimetype: {"option": "foo"}} altair-4.1.0/altair/vegalite/v4/tests/test_theme.py000066400000000000000000000007711364111050100222470ustar00rootroot00000000000000import pytest import altair.vegalite.v4 as alt from altair.vegalite.v4.theme import VEGA_THEMES @pytest.fixture def chart(): return alt.Chart("data.csv").mark_bar().encode(x="x:Q") def test_vega_themes(chart): for theme in VEGA_THEMES: with alt.themes.enable(theme): dct = chart.to_dict() assert dct["usermeta"] == {"embedOptions": {"theme": theme}} assert dct["config"] == { "view": {"continuousWidth": 400, "continuousHeight": 300} } altair-4.1.0/altair/vegalite/v4/theme.py000066400000000000000000000025561364111050100200510ustar00rootroot00000000000000"""Tools for enabling and registering chart themes""" from ...utils.theme import ThemeRegistry VEGA_THEMES = [ "ggplot2", "quartz", "vox", "fivethirtyeight", "dark", "latimes", "urbaninstitute", ] class VegaTheme(object): """Implementation of a builtin vega theme.""" def __init__(self, theme): self.theme = theme def __call__(self): return { "usermeta": {"embedOptions": {"theme": self.theme}}, "config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, } def __repr__(self): return "VegaTheme({!r})".format(self.theme) # The entry point group that can be used by other packages to declare other # renderers that will be auto-detected. Explicit registration is also # allowed by the PluginRegistery API. ENTRY_POINT_GROUP = "altair.vegalite.v4.theme" # type: str themes = ThemeRegistry(entry_point_group=ENTRY_POINT_GROUP) themes.register( "default", lambda: {"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}}, ) themes.register( "opaque", lambda: { "config": { "background": "white", "view": {"continuousWidth": 400, "continuousHeight": 300}, } }, ) themes.register("none", lambda: {}) for theme in VEGA_THEMES: themes.register(theme, VegaTheme(theme)) themes.enable("default") altair-4.1.0/design/000077500000000000000000000000001364111050100142315ustar00rootroot00000000000000altair-4.1.0/design/altair-logo-light.png000066400000000000000000000024751364111050100202660ustar00rootroot00000000000000‰PNG  IHDRÈÈ­X®ž pHYs‰‰mhúsRGB®ÎégAMA± üaÒIDATxíÝ;n$U†á¿ºí`$‚Ž!! K½¤ZˆÎq@ÎX+¨€Œ„U°‘|Qá–dyÚ3í®Û¹"øïÙG³ xA .›Ëߎȓ6àˆê1LäSª¤iâÇ€WTÈa˜¸ xEÕxöÁçTȪ ½â“ª Ä0‘STˆa"§¨2¾Ûnz7眠Ê@îâaÇ&à3ª ÄK8Uux)oQ] †‰¼EG¬6àDUrß]ï<ûà-ª ¤wsÎUˆa"ç¨&ÃDÎQM †‰œ£Š@ 9W&r®â1Ldˆâ1Ldˆâ1Ldˆ¢1Ld¨¢1Ld¨ÒXmÀÅb˜Èʽ‚xc"#(2_‹b,Eb˜ÈXŠ Ä0‘±ÈmwµusÎXŠ dÕ¬}kÑ”xÄjFr)ùkQß¹>íÿøÐG"~ÿî]™+ê b˜ÈØŠ Ä0‘)È*.nFVL kÿVËŠÄK˜Jx)SÉ>ÃD¦”} †‰L)û@š¦7-a2Y²&>&² ˜HÖ&2µÜXmÀ„² ¤äa"éÈ6ÃDæe †‰Ì%Ë@ ™K–&2—ì1LdNÙb˜Èœ² Ä0‘¹eˆa"sË*ÃDæ–M OÏ> ™W6øZKÈéˆÕÌ,‹@ YJ4¾ÅB’ä0LÜ, ù@<û`IÉâkQ,)é@ YZÒ&²´dé»í¦wsÎÂ’ ä.öql”l ^Ê@ ’ ÄKHE’&’ŠTXm@’ ä¾»ÞyöA*’ ¤wsNB’ Ä0‘Ô$ˆa"©I*ÃDR“L †‰¤(™@ IQ&’ª$1L$UIb˜HªÄ0‘”]ÄÂöÃÄ>ÈÉ/__žösß'ó«ýá«‹&Ϋ HÔ¢&’ºe¯ Þ˜Hâ Ä×¢ÈÁb&’ƒÅ1L$‹rÛ]mÝœ“ƒEY5kß$ K±Ú€ ̈¯E‘“Ù1L$'³b˜Hnf d7™5µ«%3³⥠äh¶@¼”͈a"¹š%ÃDr5K MÓ›–¥ÉÙÙdhò@ ÉÙG¬6 S“b˜Hî& Ä0‘ÜMˆa"%˜,ÃDJ0Y †‰”`’@ )Å$&RŠÑ1L¤$£b˜HIFÄ0‘’ŒÈÓ³ÃDÊ1j û¯Edì#VPÑ1L¤D£ÒøZ%Ã0qP˜QñìƒRˆ¯EQªÁ&R²Á&R²AôÝvÓ»9§`ƒ¹‹‡}›€B ÄK(ÝÙx)58;ÃDj0äˆÕî¬@î»ëgÀâþÁúìòòwIEND®B`‚altair-4.1.0/design/altair-logo-light.svg000066400000000000000000000022141364111050100202700ustar00rootroot00000000000000 Altair Logo Light Created using Figma altair-4.1.0/design/altair-logo.png000066400000000000000000000024771364111050100171630ustar00rootroot00000000000000‰PNG  IHDRÈÈ­X®ž pHYs‰‰mhúsRGB®ÎégAMA± üaÔIDATxíÝ;n+eÇá÷³s$(\SDƒ""¼¤Yî(ÉhéX¢d.¨¨Ø Ò‘raˆƒ¢çÇžËwyž:]ôÓ|“ùg&€¬¥à ›íåú“?ý+ óÏÏßøh´HËŸ‚æ äe]Ð<p³½ºî#ÞÍÈ)Å!÷¼Û~õ6¯ØÈ3‹¸¸ØÈ3Ë”¯øŸ@ž¸Ý~ݹ9ç)<‘\=xF {»›ó‡«ÇuÀÙ[Æ›.àì¥Ô›–ðÄÏ>Ò:àÃDÎQu †‰œ«ê@ 9WíG¬.à Õb˜È꽂xc"¨2_‹b(Ub˜ÈPª Ä0‘¡TÈÍöríæœ¡TÈ"-}kÁÔxÄêr©ùkQé‹/ú¹åo÷‘‰û>KQ¸ª® †‰ ­š@ C5,ââ:``Õ²ôoµŒ Š@¼”±Tˆ—20–â1LdLÅb˜È˜Š$¥Þ´„ÑÈn˜øÈ:`$Eb˜ÈØJ?bu#*6š‡‰ä£Ø@ ™B‘&2•"1Ld*Eb˜ÈTŠ Ä0‘)ˆa"S**ÃD¦VT †‰L­¨@ ™Z1<>û0LdZÅâkQÌ¡¤#V0±"1Ld.E’|-Š™dÈ~˜¸ ˜AöxöÁœ²Ä×¢˜SÖ&2·¬1LdnÙÒo׫ÞÍ93Ë6Û¸ßű ˜Q¶x)9È2/e Yb˜H.r=buÈ.»íÕÆ³r‘] ½›s2’U †‰ä&«@ ÉMV&’›l1L$GÙb˜H޲Ä0‘\eˆa"¹Ê"ÃDr5{ †‰äì"f¶&öAI¾û|yÜþñ.›_íïß~šâ9±º€L͈a"¹›÷ â‰dn¶@|-ŠÌˆa"%˜-ÃDJ0K 7Û˵›sJ0K ‹´ô­AŠ0׫ (ÀäøZ%™<ÃDJ2i †‰”fÒ@qqPIYú·Z 3Y ^Ê@‰& ÄK(Ñ$&RªI1L¤T“’RoZB‘Fd7L|HdP Ñ1L¤dS±º€Bˆa"¥5ÃDJ7Z †‰Ô`´@ ©Áh&RƒQ1L¤£b˜H-Ä0‘š ˆa"5<ÃDj2h Ï> ©Ç ì¾P‘¡X]@E Ä0‘ Hòµ(*4H ûaâ& 2ƒâÙµ$_‹¢Vgb˜HÍÎÄ0‘šH¿]¯z7çTì¬@nã~Ç* Rg⥠Ôîä@¼”œˆa"-8çˆÕTî¤@î¶WÏ>€Ùý ŒAì"XÉ]~IEND®B`‚altair-4.1.0/design/altair-logo.svg000066400000000000000000000021661364111050100171710ustar00rootroot00000000000000 Altair Logo Created using Figma altair-4.1.0/doc/000077500000000000000000000000001364111050100135255ustar00rootroot00000000000000altair-4.1.0/doc/.gitignore000066400000000000000000000002161364111050100155140ustar00rootroot00000000000000_build # gallery is auto-generated; don't version-control it gallery _images data.json # generated class documentation user_guide/generated altair-4.1.0/doc/Makefile000066400000000000000000000202041364111050100151630ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build # User-friendly check for sphinx-build ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don\'t have Sphinx installed, grab it from http://sphinx-doc.org/) endif # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: 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 " applehelp to make an Apple Help Book" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " epub3 to make an epub3" @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 " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " xml to make Docutils-native XML files" @echo " pseudoxml to make pseudoxml-XML files for display purposes" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" @echo " coverage to run coverage check of the documentation (if enabled)" @echo " dummy to check syntax errors of document sources" .PHONY: clean clean: rm -rf $(BUILDDIR)/* .PHONY: clean-generated clean-generated: rm -rf user_guide/generated/ rm -rf gallery/ .PHONY: clean-images clean-images: rm -rf _images .PHONY: clean-all clean-all: clean clean-generated clean-images .PHONY: html html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." .PHONY: dirhtml dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." .PHONY: singlehtml singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." .PHONY: pickle pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." .PHONY: json json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." .PHONY: htmlhelp 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." .PHONY: qthelp 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/altair.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/altair.qhc" .PHONY: applehelp applehelp: $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp @echo @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." @echo "N.B. You won't be able to view it unless you put it in" \ "~/Library/Documentation/Help or install it in your application" \ "bundle." .PHONY: devhelp devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/altair" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/altair" @echo "# devhelp" .PHONY: epub epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." .PHONY: epub3 epub3: $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3 @echo @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3." .PHONY: latex 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)." .PHONY: latexpdf 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." .PHONY: latexpdfja latexpdfja: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through platex and dvipdfmx..." $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." .PHONY: text text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." .PHONY: man man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." .PHONY: texinfo texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." .PHONY: info info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." .PHONY: gettext gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." .PHONY: changes changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." .PHONY: linkcheck 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." .PHONY: doctest doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." .PHONY: coverage coverage: $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage @echo "Testing of coverage in the sources finished, look at the " \ "results in $(BUILDDIR)/coverage/python.txt." .PHONY: xml xml: $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml @echo @echo "Build finished. The XML files are in $(BUILDDIR)/xml." .PHONY: pseudoxml pseudoxml: $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml @echo @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." .PHONY: dummy dummy: $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy @echo @echo "Build finished. Dummy builder generates no files." .PHONY: publish publish: html bash sync_website.sh altair-4.1.0/doc/_static/000077500000000000000000000000001364111050100151535ustar00rootroot00000000000000altair-4.1.0/doc/_static/altair-gallery.css000066400000000000000000000045121364111050100206000ustar00rootroot00000000000000.figure { float: left; margin: 10px; width: auto; height: 220px; } .figure.minigallery { height: auto; } .figure img { display: inline; padding:1px; border:1px solid #DDDDDD; opacity:1.0; filter:alpha(opacity=100); /* For IE8 and earlier */ } .figure img:hover { border:1px solid #EEEEEE; opacity: 0.8; filter:alpha(opacity=80); /* For IE8 and earlier */ } .figure .caption { width: 200px; text-align: center !important; } .figure p { margin-top: 0; } div.section h2 { padding-top: 30px; border-bottom: 1px solid #cccccc; } div.bottomnav { clear: left; } /* Front-page Example Showcase */ #showcase { width: 100%; height: 240px; overflow: hidden; margin: 0; padding: 0; position: relative; margin-bottom: 10px; } #showcase:after, #showcase:before { content: ""; display: block; width: 100%; position: absolute; background: white; height: 16px; z-index: 2; } #showcase:before { bottom: -16px; box-shadow: 0px -8px 16px rgba(0,0,0,0.3); } #showcase:after { top: -16px; box-shadow: 0px 8px 16px rgba(0,0,0,0.3); } #showcase .examples { margin: 0 auto; height: 240px; width: 800px; line-height: 0; } #showcase .preview { width: 144px; height: 80px; padding: 0; outline: 1px solid #ddd; background-position: left top; background-size: cover; overflow: hidden; position: relative; z-index: 0; transition: background-position 2s; display: block; float: left } #showcase .preview:hover { background-position: right bottom; outline: 2px solid #4682B4; z-index: 1; } /* Example Gallery */ .gallery { display: flex; flex-wrap: wrap; margin: 0 -12px; } .gallery .imagegroup { display: inline-block; position: relative; /* Show 4 images per row, each image has 18px horizontal margin */ width: calc(25% - 36px); margin: 12px 18px; /* For small screens */ min-width: 140px; } .gallery .imagegroup:hover { text-decoration: none; } .gallery .image { background-size: cover; display: block; width: 100%; /* hack to make height depend on width, golden ratio*/ padding-bottom: 75%; background-repeat: no-repeat; margin-bottom: 5px; overflow: hidden; transition: background-position 2s; } .gallery .image:hover { background-position: right bottom; } .gallery .image-title { font-size: .95em; } altair-4.1.0/doc/_static/altair-logo-light.png000066400000000000000000000024751364111050100212100ustar00rootroot00000000000000‰PNG  IHDRÈÈ­X®ž pHYs‰‰mhúsRGB®ÎégAMA± üaÒIDATxíÝ;n$U†á¿ºí`$‚Ž!! K½¤ZˆÎq@ÎX+¨€Œ„U°‘|Qá–dyÚ3í®Û¹"øïÙG³ xA .›Ëߎȓ6àˆê1LäSª¤iâÇ€WTÈa˜¸ xEÕxöÁçTȪ ½â“ª Ä0‘STˆa"§¨2¾Ûnz7眠Ê@îâaÇ&à3ª ÄK8Uux)oQ] †‰¼EG¬6àDUrß]ï<ûà-ª ¤wsÎUˆa"ç¨&ÃDÎQM †‰œ£Š@ 9W&r®â1Ldˆâ1Ldˆâ1Ldˆ¢1Ld¨¢1Ld¨ÒXmÀÅb˜Èʽ‚xc"#(2_‹b,Eb˜ÈXŠ Ä0‘±ÈmwµusÎXŠ dÕ¬}kÑ”xÄjFr)ùkQß¹>íÿøÐG"~ÿî]™+ê b˜ÈØŠ Ä0‘)È*.nFVL kÿVËŠÄK˜Jx)SÉ>ÃD¦”} †‰L)û@š¦7-a2Y²&>&² ˜HÖ&2µÜXmÀ„² ¤äa"éÈ6ÃDæe †‰Ì%Ë@ ™K–&2—ì1LdNÙb˜Èœ² Ä0‘¹eˆa"sË*ÃDæ–M OÏ> ™W6øZKÈéˆÕÌ,‹@ YJ4¾ÅB’ä0LÜ, ù@<û`IÉâkQ,)é@ YZÒ&²´dé»í¦wsÎÂ’ ä.öql”l ^Ê@ ’ ÄKHE’&’ŠTXm@’ ä¾»ÞyöA*’ ¤wsNB’ Ä0‘Ô$ˆa"©I*ÃDR“L †‰¤(™@ IQ&’ª$1L$UIb˜HªÄ0‘”]ÄÂöÃÄ>ÈÉ/__žösß'ó«ýá«‹&Ϋ HÔ¢&’ºe¯ Þ˜Hâ Ä×¢ÈÁb&’ƒÅ1L$‹rÛ]mÝœ“ƒEY5kß$ K±Ú€ ̈¯E‘“Ù1L$'³b˜Hnf d7™5µ«%3³⥠äh¶@¼”͈a"¹š%ÃDr5K MÓ›–¥ÉÙÙdhò@ ÉÙG¬6 S“b˜Hî& Ä0‘ÜMˆa"%˜,ÃDJ0Y †‰”`’@ )Å$&RŠÑ1L¤$£b˜HIFÄ0‘’ŒÈÓ³ÃDÊ1j û¯Edì#VPÑ1L¤D£ÒøZ%Ã0qP˜QñìƒRˆ¯EQªÁ&R²Á&R²AôÝvÓ»9§`ƒ¹‹‡}›€B ÄK(ÝÙx)58;ÃDj0äˆÕî¬@î»ëgÀâþÁúìòòwIEND®B`‚altair-4.1.0/doc/_static/altair-plot.css000066400000000000000000000003001364111050100201060ustar00rootroot00000000000000.vega-actions a { margin-right: 12px; color: #757575; font-weight: normal; font-size: 13px; } .vega-embed { margin-bottom: 20px; margin-top: 20px; width: 100%; } altair-4.1.0/doc/_static/chart.html000066400000000000000000000020351364111050100171420ustar00rootroot00000000000000
altair-4.1.0/doc/_static/custom.css000066400000000000000000000004721364111050100172020ustar00rootroot00000000000000.wy-nav-side p.caption { color: #F5F5F5; } div.wy-side-nav-search { background: #757575; } div.wy-side-nay { background: #212121; } table.field-list td li { line-height: 18px; } table.docutils td p { font-size: 14px !important; margin-bottom: 6px; } table.docutils td li { line-height: 18px; }altair-4.1.0/doc/_static/favicon.ico000066400000000000000000000104761364111050100173040ustar00rootroot00000000000000  (( @ ‰‰€€ÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€ÿ€ÿ€ÿ€ÿ€ÿ€ÿ€ÿ€ÿ€ÿ€ÿ€ÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿÿ(Éÿ.¹ó1Âÿ1Âÿ1Âÿ1Âÿ1Âÿ1ÂÿÂÿªžžÛ†Ά$ΆΆÛ’óªóªóªóª óªó¶1óÂUóÂUóÂUÿÂUóÂIÿÅQï¿P€ÿ-¿ü”-Àûû-Àûç,Àûë,Àûë,Àûë.Àûë2¿úëÂÿë« ¡ë׃ëω#ëщëχëÕŒëò§ëô©ëó¨ëô©ëô§ëõµ5ë÷ÄQëöÂNë÷ÃOë÷ÃOë÷ÃOç÷ÃOøøÃP­@¿ÿ,ÂüK0Ëÿÿ.Äÿÿ.Äÿÿ.Äÿÿ.Äÿÿ/Äÿÿ3ÄÿÿÇÿÿ°£¤ÿ܆ÿÔŒ#ÿÖ‹ÿÔŠÿÚÿø«ÿú®ÿù­ÿú­ÿù«ÿû¹6ÿýÉSÿýÇPÿýÇQÿýÈQÿùÄOÿÿÓUÿ÷ÃPÀÿÿÿÿ-ÀûÒ/Æÿÿ-Áüù-Àûý-Àûý-Àúý1ÀúýÂÿý«Ÿ ý׃ýω"ýшýЇýÕ‹ýò§ýô©ýó¨ýô©ýó¦ýõ´4ý÷ÅRý÷ÃOý÷ÃOý÷ÃOý÷ÃOùÿÌSÿøÃPº3™Ì-Àû0Îÿÿ-Àûú-Àûÿ-Àûÿ.Àûÿ2¿úÿÂÿÿ¬Ÿ ÿ׃ÿω"ÿшÿЇÿÕŒÿò§ÿõªÿô©ÿô©ÿô§ÿõµ5ÿ÷ÄQÿ÷ÂNÿ÷ÃOÿ÷ÃOÿ÷ÃOûÿÎSÿ÷ÃO¼Uªÿ-¿ÿ(-Áüù-Áýÿ-Áûý-Àûÿ.Àûÿ2¿úÿÂÿÿ¬Ÿ ÿ׃ÿω"ÿшÿЇÿÕŒÿò§ÿô©ÿó©ÿô©ÿó§ÿõµ5ÿ÷ÄQÿ÷ÃNÿ÷ÃOÿ÷ÃOÿ÷ÃOûÿÎSÿ÷ÃO¼ÿÿ-Àû·0Ëÿÿ-Àûû-Àûÿ.Àûÿ2¿úÿÂÿÿ¬Ÿ ÿ׃ÿω"ÿшÿЇÿÕŒÿò§ÿõªÿô©ÿô©ÿô§ÿõµ5ÿ÷ÄQÿ÷ÃOýøÃOü÷ÃOý÷ÃOùÿÌSÿøÃPº@¿ÿ-ÁüZ/Éÿÿ-Àûý-Àûþ.Àûÿ2¿úÿÂÿÿ¬Ÿ ÿ׃ÿω"ÿшÿЇÿÕŒÿò§ÿô©ÿô©ÿô©ÿô§ÿõµ6ÿ÷ÅRÿüÆPÿýÈQÿýÈQÿùÄOÿÿÓUÿ÷ÃPÀ€ÿ3»ÿ-Àüã.Æÿÿ.Àûü.Àûÿ2¿úÿÂÿÿ¬Ÿ ÿ׃ÿω"ÿшÿЇÿÕŒÿò§ÿô©ÿó©ÿô©ÿó§ÿõ´3ÿ÷ÂNÿøÃNîöÃPê÷ÃOë÷ÃOç÷ÃOøøÃP­@¿ÿ-¿ú“0Îÿÿ-Àûú.Àûÿ2¿úÿÂÿÿ¬Ÿ ÿ׃ÿω"ÿшÿЇÿÕŒÿò§ÿô©ÿó©ÿô©ÿô©þõ« ÿõ¬ÿó±+Aÿæf ô¿JóÂIÿÅQï¿P@¿ÿ.¿ú8.Ãÿÿ-Àûÿ.Àûþ2¿úÿÂÿÿ¬Ÿ ÿ׃ÿω"ÿшÿЇÿÕŒÿò§ÿõ©ÿô©ÿô©ÿô©þõªÿõ©ÿó¤*ÿÿ-ÀûÊ/Éÿÿ.Àûû2¿úÿÂÿÿ¬Ÿ ÿ׃ÿω"ÿшÿЇÿÕŒÿò§ÿôªÿó©ÿô©ÿô©þõªÿõªÿõ¬1ÿÌ3ÿ€€ÿÿ€ÿÿ@¿ÿ.¿úo0Ëÿÿ.Àûû2¿úÿÂÿÿ¬Ÿ ÿ׃ÿω"ÿшÿЇÿÕŒÿò§ÿôªÿó©ÿô©ÿõ©ýõªÿõªÿôª0ÿªÿÿ+Äÿ-Àûð/Ãÿÿ1ÀúýÂÿÿ¬Ÿ ÿ׃ÿω"ÿшÿЇÿÕŒÿò§ÿôªÿô©ÿô©ÿô©þõªÿõªÿôª0ÿªªÿ-Àú¥1Íÿÿ2ÀúúÂÿÿ¬Ÿ ÿ׃ÿω"ÿшÿχÿÔŒÿò§ÿôªþó¨ýô©ýõªûô©þô©þô¨/ÿª@¿ÿ-ÁüJ0Èÿÿ1ÀúýÃÿþ¬Ÿ ÿ׃ÿω"ÿшÿχÿÕŒÿó©þø¬ÿú­ÿú­ÿù­ÿü®ÿû®ÿõ§1ÿª€ÿ+ªÿ.ÀúÙ3ÇÿÿÂÿü¬Ÿ ÿ׃ÿω"ÿшÿχÿÕŒþð¦ÿô©õô©èô©êô©èô©ëô©êó¨,ÿª@¿ÿ.¿û„5ÌÿÿÃÿú¬Ÿ¡ÿ׃ÿω"ÿшÿшÿшûà“ÿÕ˜ÿÿé¦ò¦ò¦ò¦ÿ€Uªÿ2Âù.2¿úûÃÿÿ¬Ÿ þ׃ÿω"ÿшÿшÿЈûÞÿЇŒÿÿ3¿ù¸Íÿÿ­žžû׃ÿω"ÿшÿшÿшûß‘ÿшÿ™ÿÿÿ€ÿ€@¿ÿ9¾ú^Íÿÿ­ŸŸüׄþω"ÿшÿшÿшûß‘ÿшªªÿÿ`¿ïÂÿ毥©ÿ؃üω#ÿшÿшÿшûß‘ÿшÿª@¿¿Åÿ™²­´ÿØ‚øÐ‰$ýшýшýшùÝÿЈŽÿª@¿ÿÍÿ=±¦©ÿ܆ÿÔŒ ÿÖ‹ÿÖ‹ÿÒ‰ÿä•ÿÒˆ’ÿªÿÿÿÿÿ½—}¼Ó†õЈ èЈëЈëшçЈûч„ªªèt Ó…!ΆΆΆΆÓ…Õ€ ÿÿÿÿ€ÿ€ÿ€ÿ€ÿ€ÿ€ÿÿaltair-4.1.0/doc/_static/gray-square.png000066400000000000000000000005101364111050100201150ustar00rootroot00000000000000‰PNG  IHDRddpâ•TbKGDÿÿÿ ½§“tIMEÛyfÍêIDATxœíÑÁ €@A5òÍ\#ÎÇA#Uï} ÛÇtœ«‡3sïòw3³ôëk÷¾$FAb‰$FAb‰$FAb‰$FAb‰$FAb‰$FAb‰$FAb‰$FAb‰$FAb‰$FAb‰$FAb‰$FAb‰$FAb‰$FAb‰$FAb‰$FAb‰$FAb‰$FAb‰$FAb‰$F€WÇ Î^ÛIEND®B`‚altair-4.1.0/doc/_static/theme_overrides.css000066400000000000000000000011361364111050100210520ustar00rootroot00000000000000/* override table width restrictions */ @media screen and (min-width: 767px) { .wy-table-responsive table td { /* !important prevents the common CSS stylesheets from overriding this as on RTD they are loaded after this stylesheet */ white-space: normal !important; } .wy-table-responsive { overflow: visible !important; } } .rst-content dl:not(.docutils) dt em { font-style: normal !important; line-height: 1.4em !important; } .rst-content div[class^='highlight'] { background: #fff !important; } img.logo { width: 120px !important; } altair-4.1.0/doc/_templates/000077500000000000000000000000001364111050100156625ustar00rootroot00000000000000altair-4.1.0/doc/_templates/class.rst000066400000000000000000000003611364111050100175210ustar00rootroot00000000000000:mod:`{{module}}`.{{objname}} {{ underline }}============== .. currentmodule:: {{ module }} .. autoclass:: {{ objname }} {% block methods %} .. automethod:: __init__ {% endblock %} .. raw:: html
altair-4.1.0/doc/case_studies/000077500000000000000000000000001364111050100162005ustar00rootroot00000000000000altair-4.1.0/doc/case_studies/exploring-weather.rst000066400000000000000000000227031364111050100224020ustar00rootroot00000000000000.. _exploring-weather: Exploring Seattle Weather ========================= (This tutorial is adapted from `Vega-Lite's documentation `_) In this tutorial, you’ll learn a few more techniques for creating visualizations in Altair. If you are not familiar with Altair, please read :ref:`starting` first. For this tutorial, we will create visualizations to explore weather data for Seattle, taken from NOAA. The dataset is a CSV file with columns for the temperature (in Celsius), precipitation (in millimeters), wind speed (in meter/second), and weather type. We have one row for each day from January 1st, 2012 to December 31st, 2015. Altair is designed to work with data in the form of Pandas_ dataframes, and contains a loader for this and other built-in datasets: .. altair-plot:: :output: repr from vega_datasets import data df = data.seattle_weather() df.head() The data is loaded from the web and stored in a Pandas DataFrame, and from here we can explore it with Altair. Let’s start by looking at the precipitation, using tick marks to see the distribution of precipitation values: .. altair-plot:: import altair as alt alt.Chart(df).mark_tick().encode( x='precipitation', ) It looks as though precipitation is skewed towards lower values; that is, when it rains in Seattle, it usually doesn’t rain very much. It is difficult to see patterns across continuous variables, and so to better see this, we can create a histogram of the precipitation data. For this we first discretize the precipitation values by adding a binning to ``x``. Additionally, we set our encoding channel ``y`` with ``count``. The result is a histogram of precipitation values: .. altair-plot:: alt.Chart(df).mark_bar().encode( alt.X('precipitation', bin=True), y='count()' ) Next, let’s look at how precipitation in Seattle changes throughout the year. Altair natively supports dates and discretization of dates when we set the type to ``temporal`` (shorthand ``T``). For example, in the following plot, we compute the total precipitation for each month. To discretize the data into months, we can use a ``month`` binning (see :ref:`user-guide-timeunit-transform` for more information about this and other ``timeUnit`` binnings): .. altair-plot:: alt.Chart(df).mark_line().encode( x='month(date):T', y='average(precipitation)' ) This chart shows that in Seattle the precipitation in the winter is, on average, much higher than summer (an unsurprising observation to those who live there!). By changing the mapping of encoding channels to data features, you can begin to explore the relationships within the data. When looking at precipitation and temperature, we might want to aggregate by year *and* month (``yearmonth``) rather than just month. This allows us to see seasonal trends, with daily variation smoothed out. We might also wish to see the maximum and minimum temperature in each month: .. altair-plot:: alt.Chart(df).mark_line().encode( x='yearmonth(date):T', y='max(temp_max)', ) In this chart, it looks as though the maximum temperature is increasing from year to year over the course of this relatively short baseline. To look closer into this, let’s instead look at the mean of the maximum daily temperatures for each year: .. altair-plot:: alt.Chart(df).mark_line().encode( x='year(date):T', y='mean(temp_max)', ) This can be a little clearer if we use a bar plot and mark the year as an "ordinal" (ordered category) type. For aesthetic reasons, let's make the bar chart horizontal by assigning the ordinal value to the y-axis: .. altair-plot:: alt.Chart(df).mark_bar().encode( x='mean(temp_max)', y='year(date):O' ) The chart indicates that the annual average of the daily high temperatures increased over the course of these four years, a fact that you can confirm for minimum daily temperatures as well. You might also wonder how the daily temperature range changes throughout the year. For this, we have to add a computation to derive a new field, which can be done by adding a ``calculate`` transform: .. altair-plot:: alt.Chart(df).mark_bar().encode( x='mean(temp_range):Q', y='year(date):O' ).transform_calculate( temp_range="datum.temp_max - datum.temp_min" ) Note that this calculation doesn't actually do any data manipulation in Python, but rather encodes and stores the operations within the plot specification, where they will be calculated by the renderer. Of course, the same calculation could be done by using Pandas manipulations to explicitly add a column to the dataframe; the disadvantage there is that the derived values would have to be stored in the plot specification rather than computed on-demand in the browser. Next we will explore the ``weather`` field, which encodes a categorical variable describing the weather on a given day. We might wish to know how different kinds of weather (e.g. sunny days or rainy days) are distributed throughout the year. To answer this, we can discretize the date by month and then count the number of records on the y-Axis. We then break down the bars by the weather type by mapping this column to a color channel. When a bar chart has a field mapped to color, Altair will automatically stack the bars atop each other: .. altair-plot:: alt.Chart(df).mark_bar().encode( x='month(date):N', y='count()', color='weather', ) The default color palette’s semantics might not match our expectation. For example, we probably do not expect “sun†(sunny) to be purple. We can tune the chart by providing a color scale range that maps the values from the weather field to meaningful colors, using standard hex color codes: .. altair-plot:: :output: none scale = alt.Scale(domain=['sun', 'fog', 'drizzle', 'rain', 'snow'], range=['#e7ba52', '#c7c7c7', '#aec7e8', '#1f77b4', '#9467bd']) This scale can be passed to the color encoding to be applied to the plot style. In addition, we can customize the titles for the axis and legend to make the meaning of the plot more clear: .. altair-plot:: alt.Chart(df).mark_bar().encode( x=alt.X('month(date):N', title='Month of the year'), y='count()', color=alt.Color('weather', legend=alt.Legend(title='Weather type'), scale=scale), ) Combining the above ideas lets us create any number of flexible visualizations of this dataset. For example, here is a plot that uses the customizations we have developed above to explore the relationship between weather, precipitation, maximum temperature, and temperature range, configured to use a larger canvas and to allow interactive panning and zooming with the mouse: .. altair-plot:: alt.Chart(df).mark_point().encode( alt.X('temp_max', title='Maximum Daily Temperature (C)'), alt.Y('temp_range:Q', title='Daily Temperature Range (C)'), alt.Color('weather', scale=scale), alt.Size('precipitation', scale=alt.Scale(range=[1, 200])) ).transform_calculate( "temp_range", "datum.temp_max - datum.temp_min" ).properties( width=600, height=400 ).interactive() This gives us even more insight into the weather patterns in Seattle: rainy and foggy days tend to be cooler with a narrower range of temperatures, while warmer days tend to be dry and sunny, with a wider spread between low and high temperature. You can take this even further using Altair's building blocks for multi-panel charts and interactions. For example, we might construct a histogram of days by weather type: .. altair-plot:: alt.Chart(df).mark_bar().encode( x='count()', y='weather:N', color=alt.Color('weather:N', scale=scale), ) And now we can vertically concatenate this histogram to the points plot above, and add a brush selection tool such that the histogram reflects the content of the selection (for more information on selections, see :ref:`user-guide-interactions`): .. altair-plot:: brush = alt.selection(type='interval') points = alt.Chart().mark_point().encode( alt.X('temp_max:Q', title='Maximum Daily Temperature (C)'), alt.Y('temp_range:Q', title='Daily Temperature Range (C)'), color=alt.condition(brush, 'weather:N', alt.value('lightgray'), scale=scale), size=alt.Size('precipitation:Q', scale=alt.Scale(range=[1, 200])) ).transform_calculate( "temp_range", "datum.temp_max - datum.temp_min" ).properties( width=600, height=400 ).add_selection( brush ) bars = alt.Chart().mark_bar().encode( x='count()', y='weather:N', color=alt.Color('weather:N', scale=scale), ).transform_calculate( "temp_range", "datum.temp_max - datum.temp_min" ).transform_filter( brush ).properties( width=600 ) alt.vconcat(points, bars, data=df) This chart, containing concatenations, data transformations, selections, and customized axes labels and data scales, shows the power of the grammar behind Altair: you can create a complex chart from a small number of building blocks. This is the end of this tutorial where you have seen various ways to bin and aggregate data, derive new fields, and customize your charts. You can find more visualizations in the :ref:`example-gallery`. If you want to further customize your charts, you can refer to Altair's :ref:`API`. .. _Pandas: http://pandas.pydata.org/ altair-4.1.0/doc/conf.py000066400000000000000000000250711364111050100150310ustar00rootroot00000000000000# !/usr/bin/env python3 # # altair documentation build configuration file, created by # sphinx-quickstart on Wed Sep 7 12:52:48 2016. # # 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 # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys import os # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath("..")) # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ "sphinx.ext.autodoc", "sphinx.ext.autosummary", "sphinx.ext.doctest", "sphinx.ext.coverage", "sphinx.ext.githubpages", "numpydoc.numpydoc", "altair.sphinxext.altairplot", "altair.sphinxext.altairgallery", "altair.sphinxext.schematable", ] altair_plot_links = {"editor": True, "source": False, "export": False} autodoc_default_flags = ["members", "inherited-members"] autodoc_member_order = "groupwise" # generate autosummary even if no references autosummary_generate = True # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # source_suffix = ['.rst', '.md'] source_suffix = ".rst" # The encoding of source files. # source_encoding = 'utf-8-sig' # The master toctree document. master_doc = "index" # General information about the project. project = "Altair" copyright = "2016-2019, Altair Developers" author = "Brian Granger and Jake VanderPlas" # 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. # # The short X.Y version. version = "4.1.0" # The full version, including alpha/beta/rc tags. release = version # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: # today = '' # Else, today_fmt is used as the format for a strftime call. # today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # The reST default role (used for this markup: `text`) to use for all # documents. # default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. # add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). # add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. # show_authors = False # The name of the Pygments (syntax highlighting) style to use. # pygments_style = 'colorful' # A list of ignored prefixes for module index sorting. # modindex_common_prefix = [] # If true, keep warnings as "system message" paragraphs in the built documents. # keep_warnings = False # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = "sphinx_rtd_theme" # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. # html_theme_path = [] # The name for this set of Sphinx documents. # " v documentation" by default. # html_title = 'altair v1.0.0' # A shorter title for the navigation bar. Default is the same as html_title. html_short_title = "Altair" # The name of an image file (relative to this directory) to place at the top # of the sidebar. html_logo = "_static/altair-logo-light.png" # The name of an image file (relative to this directory) to use as a favicon of # the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. html_favicon = "_static/favicon.ico" # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ["_static", "_images"] # adapted from: http://rackerlabs.github.io/docs-rackspace/tools/rtd-tables.html # and # https://github.com/rtfd/sphinx_rtd_theme/issues/117 def setup(app): app.add_stylesheet("theme_overrides.css") app.add_stylesheet("custom.css") # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied # directly to the root of the documentation. # html_extra_path = [] # If not None, a 'Last updated on:' timestamp is inserted at every page # bottom, using the given strftime format. # The empty string is equivalent to '%b %d, %Y'. # html_last_updated_fmt = None # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. # html_use_smartypants = True # Custom sidebar templates, maps document names to template names. # html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. # html_additional_pages = {} # If false, no module index is generated. # html_domain_indices = True # If false, no index is generated. # html_use_index = True # If true, the index is split into individual pages for each letter. # html_split_index = False # If true, links to the reST sources are added to the pages. # html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. # html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. # html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. # html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). # html_file_suffix = None # Language to be used for generating the HTML full-text search index. # Sphinx supports the following languages: # 'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja' # 'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr', 'zh' # html_search_language = 'en' # A dictionary with options for the search language support, empty by default. # 'ja' uses this config value. # 'zh' user can custom change `jieba` dictionary path. # html_search_options = {'type': 'default'} # The name of a javascript file (relative to the configuration directory) that # implements a search results scorer. If empty, the default will be used. # html_search_scorer = 'scorer.js' # Output file base name for HTML help builder. htmlhelp_basename = "altairdoc" # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # 'preamble': '', # Latex figure (float) alignment # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ ( master_doc, "altair.tex", "altair Documentation", "Brian Granger and Jake VanderPlas", "manual", ), ] # The name of an image file (relative to this directory) to place at the top of # the title page. # latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. # latex_use_parts = False # If true, show page references after internal links. # latex_show_pagerefs = False # If true, show URL addresses after external links. # latex_show_urls = False # Documents to append as an appendix to all manuals. # latex_appendices = [] # If false, no module index is generated. # latex_domain_indices = True # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [(master_doc, "altair", "altair Documentation", [author], 1)] # If true, show URL addresses after external links. # man_show_urls = False # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ( master_doc, "altair", "altair Documentation", author, "altair", "One line description of project.", "Miscellaneous", ), ] # Documents to append as an appendix to all manuals. # texinfo_appendices = [] # If false, no module index is generated. # texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. # texinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. # texinfo_no_detailmenu = False # Hide extra class members numpydoc_show_class_members = False # For the altairplot extension altairplot_links = {"editor": True, "source": True, "export": True} # Defaults for below are drawn from Altair; override here. # altairplot_vega_js_url = "https://cdn.jsdelivr.net/npm/vega@5" # altairplot_vegalite_js_url = "https://cdn.jsdelivr.net/npm/vega-lite@4" # altairplot_vegaembed_js_url = "https://cdn.jsdelivr.net/npm/vega-embed@6" altair-4.1.0/doc/getting_started/000077500000000000000000000000001364111050100167145ustar00rootroot00000000000000altair-4.1.0/doc/getting_started/installation.rst000066400000000000000000000044631364111050100221560ustar00rootroot00000000000000.. currentmodule:: altair .. _installation: Installation ============ Altair can be installed, along with the example datastes in vega_datasets_, using:: $ pip install altair vega_datasets If you are using the conda_ package manager, the equivalent is:: $ conda install -c conda-forge altair vega_datasets At this point, you should be able to open `Jupyter Notebook`_ or `JupyterLab`_ and execute any of the code from the :ref:`example-gallery`. For more information on how to display charts in various notebook environments and non-notebook IDEs, see :ref:`displaying-charts`. Dependencies ============ Altair has the following dependencies, all of which are installed automatically with the above installation commands: - python 3.6 or newer - entrypoints_ - jsonschema_ - NumPy_ - Pandas_ - Toolz_ To run Altair's full test suite and build Altair's documentation requires a few additional dependencies: - flake8 - pytest - jinja2 - sphinx - m2r - docutils - vega_datasets_ - ipython Development Install =================== The `Altair source repository`_ is available on GitHub. Once you have cloned the repository and installed all the above dependencies, run the following command from the root of the repository to install the master version of Altair: .. code-block:: bash $ pip install -e . To install development dependencies as well, run .. code-block:: bash $ pip install -e .[dev] If you do not wish to clone the source repository, you can install the development version directly from GitHub using: .. code-block:: bash $ pip install -e git+https://github.com/altair-viz/altair.git .. _conda: https://docs.conda.io/ .. _Vega-Lite: http://vega.github.io/vega-lite .. _JupyterLab: http://jupyterlab.readthedocs.io/ .. _Jupyter Notebook: https://jupyter-notebook.readthedocs.io/ .. _Zeppelin: https://zeppelin.apache.org/ .. _IPython: https://github.com/ipython/ipython .. _entrypoints: https://github.com/takluyver/entrypoints .. _jsonschema: https://github.com/Julian/jsonschema .. _NumPy: http://www.numpy.org/ .. _Pandas: http://pandas.pydata.org .. _Toolz: https://github.com/pytoolz/toolz .. _vega_datasets: https://github.com/altair-viz/vega_datasets .. _Altair source repository: http://github.com/altair-viz/altair .. _nteract: https://nteract.io .. _vega: https://pypi.python.org/pypi/vega/ altair-4.1.0/doc/getting_started/overview.rst000066400000000000000000000021421364111050100213130ustar00rootroot00000000000000.. _overview: Overview ======== Altair is a declarative statistical visualization library for Python, based on Vega_ and Vega-Lite_. Altair offers a powerful and concise visualization grammar that enables you to build a wide range of statistical visualizations quickly. Here is an example of using the Altair API to quickly visualize a dataset with an interactive scatter plot: .. altair-plot:: import altair as alt # load a simple dataset as a pandas DataFrame from vega_datasets import data cars = data.cars() alt.Chart(cars).mark_point().encode( x='Horsepower', y='Miles_per_Gallon', color='Origin', ).interactive() The key idea is that you are declaring links between *data columns* and *visual encoding channels*, such as the x-axis, y-axis, color, etc. The rest of the plot details are handled automatically. Building on this declarative plotting idea, a surprising range of simple to sophisticated plots and visualizations can be created using a relatively concise grammar. .. _Vega: http://vega.github.io/vega .. _Vega-Lite: http://vega.github.io/vega-lite altair-4.1.0/doc/getting_started/starting.rst000066400000000000000000000211611364111050100213020ustar00rootroot00000000000000.. _starting: Basic Statistical Visualization =================================== (This tutorial is adapted from `Vega-Lite's documentation `_) .. currentmodule:: altair This tutorial will guide you through the basic process of creating visualizations in Altair. First, you will need to make sure you have the Altair package and its dependencies installed (see :ref:`installation`) and make sure you understand how altair plots are displayed (see :ref:`displaying-charts`). This tutorial will assume you are working within a Jupyter notebook user interface, so that plots are automatically rendered. Here is the outline of this basic tutorial: - :ref:`basic-tutorial-data` - :ref:`basic-tutorial-encodings-and-marks` - :ref:`basic-tutorial-aggregation` - :ref:`basic-tutorial-customization` - :ref:`basic-tutorial-publishing` .. _basic-tutorial-data: The Data -------- Data in Altair is built around the Pandas Dataframe. One of the defining characteristics of statistical visualization is that it begins with `tidy `_ Dataframes. For the purposes of this tutorial, we'll start by importing Pandas and creating a simple DataFrame to visualize, with a categorical variable in column a and a numerical variable in column b: .. altair-plot:: :output: none import pandas as pd data = pd.DataFrame({'a': list('CCCDDDEEE'), 'b': [2, 7, 4, 1, 2, 6, 8, 4, 7]}) When using Altair, datasets are most commonly provided as a Dataframe. As we will see, the labeled columns of the dataframe are an essential piece of plotting with Altair. .. _basic-tutorial-chart-object: The Chart Object ---------------- The fundamental object in Altair is the :class:`Chart`, which takes a dataframe as a single argument: .. altair-plot:: :output: none import altair as alt chart = alt.Chart(data) So far, we have defined the Chart object, but we have not yet told the chart to *do* anything with the data. That will come next. .. _basic-tutorial-encodings-and-marks: Encodings and Marks ------------------- With this chart object in hand, we can now specify how we would like the data to be visualized. This is done via the ``mark`` attribute of the chart object, which is most conveniently accessed via the ``Chart.mark_*`` methods. For example, we can show the data as a point using :meth:`~Chart.mark_point`: .. altair-plot:: alt.Chart(data).mark_point() Here the rendering consists of one point per row in the dataset, all plotted on top of each other, since we have not yet specified positions for these points. To visually separate the points, we can map various *encoding channels*, or *channels* for short, to columns in the dataset. For example, we could *encode* the variable ``a`` of the data with the ``x`` channel, which represents the x-axis position of the points. This can be done straightforwardly via the :meth:`Chart.encode` method: .. altair-plot:: alt.Chart(data).mark_point().encode( x='a', ) The ``encode()`` method builds a key-value mapping between encoding channels (such as ``x``, ``y``, ``color``, ``shape``, ``size``, etc.) to columns in the dataset, accessed by column name. For pandas dataframes, Altair automatically determines the appropriate data type for the mapped column, which in this case is a *nominal* value, or an unordered categorical. Though we've now separated the data by one attribute, we still have multiple points overlapping within each category. Let's further separate these by adding a ``y`` encoding channel, mapped to the ``"b"`` column: .. altair-plot:: alt.Chart(data).mark_point().encode( x='a', y='b' ) The type of the data in the ``"b"`` column is again automatically-inferred by Altair, and this time is treated as a *quantitative* type (i.e. real-valued). Additionally, we see that grid lines and appropriate axis titles are automatically added as well. .. _basic-tutorial-aggregation: Data Transformation: Aggregation -------------------------------- To allow for more flexibility in how data are visualized, Altair has a built-in syntax for *aggregation* of data. For example, we can compute the average of all values by specifying this aggregate within the column identifier: .. altair-plot:: alt.Chart(data).mark_point().encode( x='a', y='average(b)' ) Now within each x-axis category, we see a single point reflecting the average of the values within that category. Typically, aggregated values are not represented by point markings, but by bar markings. We can do this by replacing :meth:`~Chart.mark_point` with :meth:`~Chart.mark_bar`: .. altair-plot:: alt.Chart(data).mark_bar().encode( x='a', y='average(b)' ) Because the categorical feature is mapped to the ``x``-axis, the result is a vertical bar chart. To get a horizontal bar chart, all we need is to swap the ``x`` and ``y`` keywords: .. altair-plot:: alt.Chart(data).mark_bar().encode( y='a', x='average(b)' ) Aside: Examining the JSON Output ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Recall that Altair's main purpose is to convert plot specifications to a JSON string that conforms to the Vega-Lite schema. It is instructive here to use the :meth:`~Chart.to_json` method to inspect the JSON specification that Altair is exporting and sending as JSON to Vega-Lite: .. altair-plot:: :output: stdout chart = alt.Chart(data).mark_bar().encode( x='a', y='average(b)', ) print(chart.to_json()) Notice here that ``encode(x='a')`` has been expanded to a JSON structure with a ``field`` name, and a ``type`` for the data. The ``encode(y='b')`` has been expanded similarly and includes an ``aggregate`` field. Altair's full shorthand syntax includes a way to specify the type of the column as well: .. altair-plot:: :output: stdout y = alt.Y('average(b):Q') print(y.to_json()) This short-hand is equivalent to spelling-out the attributes by name: .. altair-plot:: :output: repr y = alt.Y(field='b', type='quantitative', aggregate='average') print(y.to_json()) This more verbose means of specifying channels can be used directly in Altair chart specifications, a fact that becomes useful when using some of the more advanced field configurations: .. altair-plot:: alt.Chart(data).mark_bar().encode( alt.Y('a', type='nominal'), alt.X('b', type='quantitative', aggregate='average') ) .. _basic-tutorial-customization: Customizing your Visualization ------------------------------ By default, Altair via Vega-Lite makes some choices about default properties of the visualization. Altair also provides an API to customize the look of the visualization. For example, we can specify the axis titles using the ``axis`` attribute of channel classes, and we can specify the color of the marking by setting the ``color`` keyword of the ``Chart.mark_*`` methods to any valid HTML color string: .. altair-plot:: alt.Chart(data).mark_bar(color='firebrick').encode( alt.Y('a', title='category'), alt.X('average(b)', title='avg(b) by category') ) .. _basic-tutorial-publishing: Publishing your Visualization ----------------------------- Once you have visualized your data, perhaps you would like to publish it somewhere on the web. This can be done straightforwardly using the Vega-Embed_ Javascript package. A simple example of a stand-alone HTML document can be generated for any chart using the :meth:`Chart.save` method: .. code-block:: python chart = alt.Chart(data).mark_bar().encode( x='a', y='average(b)', ) chart.save('chart.html') The basic HTML template produces output that looks like this, where the JSON specification for your plot produced by :meth:`Chart.to_json` should be stored in the ``vlSpec`` Javascript variable: .. code-block:: html
The :meth:`~Chart.save` method provides a convenient way to save such HTML output to file. For more information on embedding Altair/Vega-Lite, see the documentation of the Vega-Embed_ project. .. _Vega-Embed: https://github.com/vega/vega-embed altair-4.1.0/doc/index.rst000066400000000000000000000047441364111050100153770ustar00rootroot00000000000000Altair: Declarative Visualization in Python =========================================== .. role:: raw-html(raw) :format: html .. altair-minigallery:: :names: one_dot_per_zipcode, horizon_graph, world_projections, candlestick_chart, falkensee, scatter_linked_brush, layered_heatmap_text, natural_disasters, streamgraph, multiline_tooltip, select_detail, choropleth, interactive_cross_highlight, seattle_weather_interactive, london_tube :size: 15 Altair is a declarative statistical visualization library for Python, based on Vega_ and Vega-Lite_, and the source is available on `GitHub `_. With Altair, you can spend more time understanding your data and its meaning. Altair's API is simple, friendly and consistent and built on top of the powerful Vega-Lite_ visualization grammar. This elegant simplicity produces beautiful and effective visualizations with a minimal amount of code. .. toctree:: :maxdepth: 1 :caption: Getting Started getting_started/overview getting_started/installation getting_started/starting .. toctree:: :maxdepth: 1 :caption: Gallery gallery/index .. toctree:: :maxdepth: 1 :caption: User Guide user_guide/data user_guide/encoding user_guide/marks user_guide/transform/index user_guide/interactions user_guide/configuration user_guide/compound_charts user_guide/scale_resolve user_guide/saving_charts user_guide/customization user_guide/times_and_dates user_guide/faq user_guide/troubleshooting user_guide/internals user_guide/API user_guide/ecosystem .. toctree:: :maxdepth: 1 :caption: Case Studies case_studies/exploring-weather .. toctree:: :maxdepth: 1 :caption: Advanced Usage user_guide/importing user_guide/display_frontends user_guide/custom_renderers user_guide/data_transformers .. toctree:: :maxdepth: 1 :caption: Release Notes releases/changes Bug Reports & Questions ----------------------- Altair is BSD-licensed and the source is available on `GitHub`_. If any questions or issues come up as you use Altair, please get in touch via `Git Issues`_ or our `Google Group`_. Indices and tables ------------------ * :ref:`genindex` * :ref:`modindex` .. _GitHub: http://github.com/altair-viz/altair .. _Git Issues: http://github.com/altair-viz/altair/issues .. _Vega: http://vega.github.io/vega .. _Vega-Lite: http://vega.github.io/vega-lite .. _Google Group: https://groups.google.com/forum/#!forum/altair-viz altair-4.1.0/doc/make.bat000066400000000000000000000170641364111050100151420ustar00rootroot00000000000000@ECHO OFF REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set BUILDDIR=_build set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . set I18NSPHINXOPTS=%SPHINXOPTS% . if NOT "%PAPER%" == "" ( set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% ) 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. epub3 to make an epub3 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. texinfo to make Texinfo files echo. gettext to make PO message catalogs echo. changes to make an overview over all changed/added/deprecated items echo. xml to make Docutils-native XML files echo. pseudoxml to make pseudoxml-XML files for display purposes echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled echo. coverage to run coverage check of the documentation if enabled echo. dummy to check syntax errors of document sources goto end ) if "%1" == "clean" ( for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i del /q /s %BUILDDIR%\* goto end ) REM Check if sphinx-build is available and fallback to Python version if any %SPHINXBUILD% 1>NUL 2>NUL if errorlevel 9009 goto sphinx_python goto sphinx_ok :sphinx_python set SPHINXBUILD=python -m sphinx.__init__ %SPHINXBUILD% 2> nul if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) :sphinx_ok 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\altair.qhcp echo.To view the help file: echo.^> assistant -collectionFile %BUILDDIR%\qthelp\altair.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" == "epub3" ( %SPHINXBUILD% -b epub3 %ALLSPHINXOPTS% %BUILDDIR%/epub3 if errorlevel 1 exit /b 1 echo. echo.Build finished. The epub3 file is in %BUILDDIR%/epub3. 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" == "latexpdf" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex cd %BUILDDIR%/latex make all-pdf cd %~dp0 echo. echo.Build finished; the PDF files are in %BUILDDIR%/latex. goto end ) if "%1" == "latexpdfja" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex cd %BUILDDIR%/latex make all-pdf-ja cd %~dp0 echo. echo.Build finished; the PDF 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" == "texinfo" ( %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo if errorlevel 1 exit /b 1 echo. echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. goto end ) if "%1" == "gettext" ( %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale if errorlevel 1 exit /b 1 echo. echo.Build finished. The message catalogs are in %BUILDDIR%/locale. 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 ) if "%1" == "coverage" ( %SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage if errorlevel 1 exit /b 1 echo. echo.Testing of coverage in the sources finished, look at the ^ results in %BUILDDIR%/coverage/python.txt. goto end ) if "%1" == "xml" ( %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml if errorlevel 1 exit /b 1 echo. echo.Build finished. The XML files are in %BUILDDIR%/xml. goto end ) if "%1" == "pseudoxml" ( %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml if errorlevel 1 exit /b 1 echo. echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. goto end ) if "%1" == "dummy" ( %SPHINXBUILD% -b dummy %ALLSPHINXOPTS% %BUILDDIR%/dummy if errorlevel 1 exit /b 1 echo. echo.Build finished. Dummy builder generates no files. goto end ) :end altair-4.1.0/doc/releases/000077500000000000000000000000001364111050100153305ustar00rootroot00000000000000altair-4.1.0/doc/releases/changes.rst000066400000000000000000000363421364111050100175020ustar00rootroot00000000000000.. _changes: Altair Change Log ================= Version 4.1.0 (released April 1, 2020) -------------------------------------- - Minimum Python version is now 3.6 - Update Vega-Lite to version 4.8.1; many new features and bug fixes from Vega-Lite versions 4.1 through 4.8; see `Vega-Lite Release Notes `_. Enhancements ~~~~~~~~~~~~ - ``strokeDash`` encoding can now be used to control line styles (Example: `Multi Series Line Chart `_) - ``chart.save()`` now relies on `altair_saver `_ for more flexibility (#1943). - New ``chart.show()`` method replaces ``chart.serve()``, and relies on `altair_viewer `_ to allow offline viewing of charts (#1988). Bug Fixes ~~~~~~~~~ - Support Python 3.8 (#1958) - Support multiple views in JupyterLab (#1986) - Support numpy types within specifications (#1914) - Support pandas nullable ints and string types (#1924) Maintenance ~~~~~~~~~~~ - Altair now uses `black `_ and `flake8 `_ for maintaining code quality & consistency. Version 4.0.1 (released Jan 14, 2020) ------------------------------------- Bug Fixes ~~~~~~~~~ - Update Vega-Lite version to 4.0.2 - Fix issue with duplicate chart divs in HTML renderer (#1888) Version 4.0.0 (released Dec 10, 2019) ------------------------------------- Version 4.0.0 is based on Vega-Lite version 4.0, which you can read about at https://github.com/vega/vega-lite/releases/tag/v4.0.0. It is the first version of Altair to drop Python 2 compatibility, and is tested on Python 3.5 and newer. Enhancements ~~~~~~~~~~~~ - Support for interactive legends: (see :ref:`gallery_interactive_legend`) - Responsive chart width and height: (see :ref:`customization-chart-size`) - Lookup transform responsive to selections: (see :ref:`user-guide-lookup-transform`) - Bins responsive to selections: (see :ref:`gallery_histogram_responsive`) - New Regression transform: (see :ref:`user-guide-regression-transform`) - New LOESS transform: (see :ref:`user-guide-loess-transform`) - New density transform: (see :ref:`user-guide-density-transform`) - New pivot transform: (see :ref:`user-guide-pivot-transform`) - Image mark (see :ref:`user-guide-image-mark`) - New default ``html`` renderer, directly compatible with Jupyter Notebook and JupyterLab without the need for frontend extensions, as well as tools like nbviewer and nbconvert, and related notebook environments such as Zeppelin, Colab, Kaggle Kernels, and DataBricks. To enable the old default renderer, use:: alt.renderers.enable('mimetype') - Support per-corner radius for bar marks: (see :ref:`gallery_bar_rounded`) Grammar Changes ~~~~~~~~~~~~~~~ - Sort-by-field can now use the field name directly. So instead of:: alt.Y('y:Q', sort=alt.EncodingSortField('x', order='descending')) you can now use:: alt.Y('y:Q', sort="-x") - The ``rangeStep`` argument to :class:`Scale` and :meth:`Chart.configure_scale` is deprecated. instead, use ``chart.properties(width={"step": rangeStep})`` or ``chart.configure_view(step=rangeStep)``. - ``align``, ``center``, ``spacing``, and ``columns`` are no longer valid chart properties, but are moved to the encoding classes to which they refer. Version 3.3.0 (released Nov 27, 2019) ------------------------------------- Last release to support Python 2 Enhancements ~~~~~~~~~~~~ - Add inheritance structure to low-level schema classes (#1803) - Add ``html`` renderer which works across frontends (#1793) - Support Python 3.8 (#1740, #1781) - Add ``:G`` shorthand for geojson type (#1714) - Add data generator interface: ``alt.sequence``, ``alt.graticule``, ``alt.sphere()`` (#1667, #1687) - Support geographic data sources via ``__geo_interface__`` (#1664) Bug Fixes ~~~~~~~~~ - Support ``pickle`` and ``copy.deepcopy`` for chart objects (#1805) - Fix bug when specifying ``count()`` within ``transform_joinaggregate()`` (#1751) - Fix ``LayerChart.add_selection`` (#1794) - Fix arguments to ``project()`` method (#1717) - Fix composition of multiple selections (#1707) Version 3.2.0 (released August 5, 2019) --------------------------------------- Upgraded to Vega-Lite version 3.4 (See `Vega-Lite 3.4 Release Notes `__). Following are changes to Altair in addition to those that came with VL 3.4: Enhancements ~~~~~~~~~~~~ - Selector values can be used directly in expressions (#1599) - Top-level chart repr is now truncated to improve readability of error messages (#1572) Bug Fixes ~~~~~~~~~ - top-level ``add_selection`` methods now delegate to sub-charts. Previously they produced invalid charts (#1607) - Unsupported ``mark_*()`` methods removed from LayerChart (#1607) - New encoding channels are properly parsed (#1597) - Data context is propagated when encodings are specified as lists (#1587) Backward-Incompatible Changes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ``alt.LayerChart`` no longer has ``mark_*()`` methods, because they never produced valid chart specifications) (#1607) Version 3.1.0 (Released June 6, 2019) ------------------------------------- Update includes full compatibility with version 3.3 of Vega-Lite. Enhancements ~~~~~~~~~~~~ - Added support for `vega themes `__ via ``alt.themes.enable(theme_name)`` (#1539) - Added an ``alt.renderers.disable_max_rows()`` method for disabling the maximum rows check (#1538) - Improved user-facing warnings/errors around layering and faceting (#1535). - ``data`` argument is now properly handled by ``Chart.properties`` (#1525) - Compound charts (layer, concat, hconcat, vconcat) now move data to the top level by default. In particular, this means that the ``facet()`` method can now be called directly on a layered chart without having to change how data is specified. (#1521) - ``alt.LayerChart`` now supports ``mark_*()`` methods. If a layer specifies a mark at the top level, all child charts will inherit it (unless they override it explicitly). - ``alt.Chart.facet()`` now handles wrapped facets; for example: ``python chart.facet('column_name', columns=5)`` See ``altair/examples/us_population_over_time_facet.py`` for a more complete example. Bug fixes ~~~~~~~~~ - Make ``chart.serve()`` and ``chart.save()`` respect the data transformer setting (#1538) - Fixed a deserialization bug for certain chart specs in schemapi (#1543) Backward-Incompatible Changes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ``alt.Chart.facet()`` now accepts a wrapped facet encoding as a first positional argument, rather than a row encoding. The following are examples of old invocations, and the equivalent new invocations: - ``chart.facet(row='col1', column='col2')``: unchanged - ``chart.facet('col1', 'col2')``: change to ``chart.facet(row='col1', column='col2')`` - ``chart.facet('col1')``: change to ``chart.facet(row='col1')`` In each case, the new invocations are compatible back to Altair 2.X. - Several of the encoding channels added in 3.0 have had their capitalization corrected to better match the names used in the schema: - ``alt.Fillopacity`` -> ``alt.FillOpacity`` - ``alt.Strokeopacity`` -> ``alt.StrokeOpacity`` - ``alt.Strokewidth`` -> ``alt.StrokeWidth`` - ``alt.Xerror`` -> ``alt.XError`` - ``alt.Xerror2`` -> ``alt.XError2`` - ``alt.Yerror`` -> ``alt.YError`` - ``alt.Yerror2`` -> ``alt.YError2`` Version 3.0.1 (Released May 1, 2019) ------------------------------------ Fix version info bug for HTML output and Colab & Kaggle renderers. Version 3.0.0 (Released April 26, 2019) --------------------------------------- Update to Vega-Lite 3.2 and Vega 5.3 & support all new features. See https://github.com/vega/vega-lite/releases/tag/v3.0.0 for Vega-Lite feature lists. Highlights: ~~~~~~~~~~~ - new compound marks: ``mark_boxplot()``, ``mark_errorband()``, ``mark_errorbar()`` - new transforms: ``transform_impute()``, ``transform_joinaggregate()``, ``transform_flatten()`` ``transform_fold()``, ``transform_sample()``, ``transform_stack()`` - new ``facet`` encoding that is similar to the ``row`` and ``column`` encoding, but allows for wrapped facets - new ``alt.concat()`` function that is similar to ``alt.hconcat`` and ``alt.vconcat``, but allows for more general wrapped concatenation - new ``columns`` keyword that allows wrapped faceting, repeating, and concatenation. - many, many bug fixes - tooltips can now be automatically populated using the ``tooltip`` mark configuration. - ability to specify initial conditions for selections Version 2.4.1 (Released February 21, 2019) ------------------------------------------ Enhancements ~~~~~~~~~~~~ - Several documentation cleanups & new examples Bug Fixes ~~~~~~~~~ - Fix incompatibility with pandas version 0.24 (#1315) Version 2.3.0 (Released December 7, 2018) ----------------------------------------- Includes many reworked examples in the example gallery. Enhancements ~~~~~~~~~~~~ - Better errors for non-string column names, as well as automatic conversion of ``pandas.RangeIndex`` columns to strings (#1107) - Renderers now have set\_embed\_options() method (#1203) - Added kaggle renderer & more HTML output options (#1123) Backward-incompatible changes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Maintenance ~~~~~~~~~~~ - fix typing requirement in Python 3.6+ (#1185) - Added support & CI testing for Python 3.7 (#1008) Bug fixes ~~~~~~~~~ - Selection predicates now recognize all valid entries (#1143) - Python 2 support for ``chart.save()`` (#1134) Version 2.2.2 (Released August 17, 2018) ---------------------------------------- Bug Fixes ~~~~~~~~~ - fix missing JSON resource in ``altair.vega.v4`` (#1097) Version 2.2.1 (Released August 15, 2018) ---------------------------------------- Bug Fixes ~~~~~~~~~ - appropriate handling of InlineData in dataset consolidation (#1092) - fix admonition formatting in documentation page (#1094) Version 2.2.0 (Released August 14, 2018): ----------------------------------------- Enhancements ~~~~~~~~~~~~ - better handling of datetimes and timezones (#1053) - all inline datasets are now converted to named datasets and stored at the top level of the chart. This behavior can be disabled by setting ``alt.data_transformers.consolidate_datasets = False`` (#951 & #1046) - more streamlined shorthand syntax for window transforms (#957) Maintenance ~~~~~~~~~~~ - update from Vega-Lite 2.4.3 to Vega-Lite 2.6.0; see vega-lite change-logs `2.5.0 `__ `2.5.1 `__ `2.5.2 `__ `2.6.0 `__ Backward-incompatible changes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ``alt.SortField`` renamed to ``alt.EncodingSortField`` and ``alt.WindowSortField`` renamed to ``alt.SortField`` (#3741) Bug Fixes ~~~~~~~~~ - Fixed serialization of logical operands on selections within ``transform_filter()``: (#1075) - Fixed sphinx issue which embedded chart specs twice (#1088) - Avoid Selenium import until it is actually needed (#982) Version 2.1.0 (Released June 6, 2018): -------------------------------------- Enhancements ~~~~~~~~~~~~ - add a ``scale_factor`` argument to ``chart.save()`` to allow the size/resolution of saved figures to be adjusted. (#918) - add an ``add_selection()`` method to add selections to charts (#832) - add ``chart.serve()`` and ``chart.display()`` methods for more flexibility in displaying charts (#831) - allow multiple fields to be passed to encodings such as ``tooltip`` and ``detail`` (#830) - make ``timeUnit`` specifications more succinct, by parsing them in a manner similar to aggregates (#866) - make ``to_json()`` and ``to_csv()`` have deterministic filenames, so in json mode a single datasets will lead to a single on-disk serialization (#862) Breaking Changes ~~~~~~~~~~~~~~~~ - make ``data`` the first argument for all compound chart types to match the semantics of ``alt.Chart`` (this includes ``alt.FacetChart``, ``alt.LayerChart``, ``alt.RepeatChart``, ``alt.VConcatChart``, and ``alt.HConcatChart``) (#895). - update vega-lite to version 2.4.3 (#836) - Only API change is internal: ``alt.MarkProperties`` is now ``alt.MarkConfig`` Maintenance ~~~~~~~~~~~ - update vega to v3.3 & vega-embed to v3.11 in html output & colab renderer (#838) Version 2.0.0: May 2, 2018 -------------------------- - Complete rewrite of Altair, focused on supporting Vega-Lite 2.X Version 1.2.1: October 29, 2017 ------------------------------- This version of Altair is based on Vega-Lite 1.2.1. Major additions ~~~~~~~~~~~~~~~ - Support for JupyterLab/nteract through MIME based rendering. Enable this by calling ``enable_mime_rendering()`` before rendering visualizations (`#216 `__). - Change default import in all code and docs to ``import altair as alt`` - Check for missing and misspelled column names upon exporting or rendering, and raise ``FieldError`` (`#399 `__) if any problems are found. This can be disabled by setting ``Chart.validated_columns=False``. - Raise ``MaxRowsExceeded`` if the number of rows in the dataset is larger than ``Chart.max_rows`` to guard against sending large datasets to the browser. - Move the Vega-Lite 1.x api into ``altair.v1`` to make it easier for us to migrate to Vega-Lite 2.x and continue to support 1.x. No import change are needed as ``altair.v1`` is aliased to ``altair`` in this release\ ``altair.v1`` (`#377 `__). - Moved the example notebooks into a separate repository (https://github.com/altair-viz/altair\_notebooks) that has Binder support (`#391 `__). - Add ``$schema`` to top-level JSON spec (`#370 `__). - Minor documentation revisions. Bug fixes ~~~~~~~~~ - Make sure default mark is a point (`#344 `__). Version 1.2: Nov 7, 2016 ------------------------ Major additions ~~~~~~~~~~~~~~~ - Update to Vega-Lite 1.2 and make all its enhancements available to Altair - Add ``Chart.serve`` method (`#197 `__) - Add ``altair.expr`` machinery to specify transformations and filterings (`#215 `__) - Add ``Chart.savechart`` method, which can output JSON, HTML, and (if Node is installed) PNG and SVG. See https://altair-viz.github.io/documentation/displaying.html (`#213 `__) Bug fixes ~~~~~~~~~ - Countless minor bug fixes maintenance: ~~~~~~~~~~~~ - Update to Vega-Lite 1.2.1 and add its supported features - Create website: http://altair-viz.github.io/ - Set up Travis to run conda & pip; and to build documentation Version 1.0: July 11, 2016 -------------------------- - Initial release of Altair altair-4.1.0/doc/requirements.txt000066400000000000000000000000571364111050100170130ustar00rootroot00000000000000sphinx jinja2 numpydoc pillow sphinx_rtd_theme altair-4.1.0/doc/sync_website.sh000066400000000000000000000010661364111050100165620ustar00rootroot00000000000000#!/bin/bash # get git hash for commit message GITHASH=$(git rev-parse HEAD) MSG="doc build for commit $GITHASH" cd _build # clone the repo if needed if test -d altair-viz.github.io; then echo "using existing cloned altair directory"; else git clone git@github.com:altair-viz/altair-viz.github.io.git; fi # sync the website cd altair-viz.github.io git pull # remove all tracked files git ls-files -z | xargs -0 rm -f # sync files from html build rsync -r ../html/ ./ # add commit, and push to github git add . --all git commit -m "$MSG" git push origin master altair-4.1.0/doc/user_guide/000077500000000000000000000000001364111050100156605ustar00rootroot00000000000000altair-4.1.0/doc/user_guide/API.rst000066400000000000000000000237431364111050100170340ustar00rootroot00000000000000.. _API: API Reference ============= This is the class and function reference of Altair, and the following content is generated automatically from the code documentation strings. Please refer to the `full user guide `_ for further details, as this low-level documentation may not be enough to give full guidelines on their use. Top-Level Objects ----------------- .. currentmodule:: altair .. autosummary:: :toctree: generated/toplevel/ :nosignatures: Chart ConcatChart FacetChart HConcatChart LayerChart RepeatChart TopLevelMixin VConcatChart Encoding Channels ----------------- .. currentmodule:: altair .. autosummary:: :toctree: generated/channels/ :nosignatures: Color ColorValue Column Detail Facet Fill FillOpacity FillOpacityValue FillValue Href HrefValue Key Latitude Latitude2 Latitude2Value LatitudeValue Longitude Longitude2 Longitude2Value LongitudeValue Opacity OpacityValue Order OrderValue Row Shape ShapeValue Size SizeValue Stroke StrokeDash StrokeDashValue StrokeOpacity StrokeOpacityValue StrokeValue StrokeWidth StrokeWidthValue Text TextValue Tooltip TooltipValue Url UrlValue X X2 X2Value XError XError2 XError2Value XErrorValue XValue Y Y2 Y2Value YError YError2 YError2Value YErrorValue YValue API Functions ------------- .. currentmodule:: altair .. autosummary:: :toctree: generated/api/ :nosignatures: binding binding_checkbox binding_radio binding_range binding_select concat condition graticule hconcat layer repeat selection selection_interval selection_multi selection_single sequence sphere topo_feature value vconcat Low-Level Schema Wrappers ------------------------- .. currentmodule:: altair .. autosummary:: :toctree: generated/core/ :nosignatures: Aggregate AggregateOp AggregateTransform AggregatedFieldDef Align AllSortString AnyMark AnyMarkConfig AreaConfig ArgmaxDef ArgminDef AutoSizeParams AutosizeType Axis AxisConfig AxisOrient AxisResolveMap BarConfig BaseTitleNoValueRefs Baseline BinExtent BinParams BinTransform BindCheckbox BindRadioSelect BindRange Binding Blend BoxPlot BoxPlotConfig BoxPlotDef BrushConfig CalculateTransform Categorical Color ColorGradientFieldDefWithCondition ColorGradientValueWithCondition ColorName ColorScheme CompositeMark CompositeMarkDef CompositionConfig ConcatSpecGenericSpec ConditionalAxisColor ConditionalAxisLabelAlign ConditionalAxisLabelBaseline ConditionalAxisLabelFontStyle ConditionalAxisLabelFontWeight ConditionalAxisNumber ConditionalAxisNumberArray ConditionalAxisPropertyAlignnull ConditionalAxisPropertyColornull ConditionalAxisPropertyFontStylenull ConditionalAxisPropertyFontWeightnull ConditionalAxisPropertyTextBaselinenull ConditionalAxisPropertynumbernull ConditionalAxisPropertystringnull ConditionalAxisString ConditionalMarkPropFieldDef ConditionalMarkPropFieldDefTypeForShape ConditionalNumberValueDef ConditionalPredicateMarkPropFieldDef ConditionalPredicateMarkPropFieldDefTypeForShape ConditionalPredicateNumberValueDef ConditionalPredicateStringFieldDef ConditionalPredicateStringValueDef ConditionalPredicateValueDefAlignnull ConditionalPredicateValueDefColornull ConditionalPredicateValueDefFontStylenull ConditionalPredicateValueDefFontWeightnull ConditionalPredicateValueDefGradientstringnull ConditionalPredicateValueDefText ConditionalPredicateValueDefTextBaselinenull ConditionalPredicateValueDefnumber ConditionalPredicateValueDefnumbernull ConditionalPredicateValueDefstring ConditionalSelectionMarkPropFieldDef ConditionalSelectionMarkPropFieldDefTypeForShape ConditionalSelectionNumberValueDef ConditionalSelectionStringFieldDef ConditionalSelectionStringValueDef ConditionalSelectionValueDefGradientstringnull ConditionalSelectionValueDefText ConditionalSelectionValueDefnumber ConditionalSelectionValueDefstring ConditionalStringFieldDef ConditionalStringValueDef ConditionalValueDefGradientstringnull ConditionalValueDefText ConditionalValueDefnumber ConditionalValueDefstring Config CsvDataFormat Cursor Cyclical Data DataFormat DataSource Datasets DateTime Day DensityTransform DerivedStream DictInlineDataset DictSelectionInit DictSelectionInitInterval Diverging DomainUnionWith DsvDataFormat Element Encoding EncodingSortField EncodingSortFieldFieldName ErrorBand ErrorBandConfig ErrorBandDef ErrorBar ErrorBarConfig ErrorBarDef ErrorBarExtent EventStream EventType Expr FacetEncodingFieldDef FacetFieldDef FacetFieldDefFieldName FacetMapping FacetMappingFieldName FacetSpec FacetedEncoding FacetedUnitSpec Field FieldDefWithConditionMarkPropFieldDefGradientstringnull FieldDefWithConditionMarkPropFieldDefTypeForShapestringnull FieldDefWithConditionMarkPropFieldDefnumber FieldDefWithConditionStringFieldDefText FieldDefWithConditionStringFieldDefstring FieldDefWithoutScale FieldEqualPredicate FieldGTEPredicate FieldGTPredicate FieldLTEPredicate FieldLTPredicate FieldName FieldOneOfPredicate FieldRangePredicate FieldValidPredicate FilterTransform Fit FlattenTransform FoldTransform FontStyle FontWeight Generator GeoJsonFeature GeoJsonFeatureCollection Gradient GradientStop GraticuleGenerator GraticuleParams HConcatSpecGenericSpec Header HeaderConfig HexColor ImputeMethod ImputeParams ImputeSequence ImputeTransform InlineData InlineDataset InputBinding Interpolate IntervalSelection IntervalSelectionConfig JoinAggregateFieldDef JoinAggregateTransform JsonDataFormat LabelOverlap LatLongFieldDef LayerSpec LayoutAlign Legend LegendBinding LegendConfig LegendOrient LegendResolveMap LegendStreamBinding LineConfig LinearGradient LocalMultiTimeUnit LocalSingleTimeUnit LoessTransform LogicalAndPredicate LogicalNotPredicate LogicalOrPredicate LookupData LookupSelection LookupTransform Mark MarkConfig MarkDef MarkType MergedStream Month MultiSelection MultiSelectionConfig MultiTimeUnit NamedData NonArgAggregateOp NormalizedConcatSpecGenericSpec NormalizedFacetSpec NormalizedHConcatSpecGenericSpec NormalizedSpec NormalizedVConcatSpecGenericSpec NumberValueDef NumericArrayFieldDefWithCondition NumericArrayValueDefWithCondition NumericFieldDefWithCondition NumericValueWithCondition OrderFieldDef Orient Orientation OverlayMarkDef Padding Parse ParseValue PivotTransform PositionFieldDef Predicate PredicateComposition Projection ProjectionConfig ProjectionType QuantileTransform RadialGradient RangeConfig RangeEnum RangeRaw RangeRawArray RangeScheme RectConfig RegressionTransform RepeatMapping RepeatRef RepeatSpec Resolve ResolveMode Root RowColLayoutAlign RowColboolean RowColnumber RowColumnEncodingFieldDef SampleTransform Scale ScaleBinParams ScaleBins ScaleConfig ScaleInterpolateEnum ScaleInterpolateParams ScaleResolveMap ScaleType SchemaBase SchemeParams SecondaryFieldDef SelectionAnd SelectionComposition SelectionConfig SelectionDef SelectionExtent SelectionInit SelectionInitInterval SelectionInitIntervalMapping SelectionInitMapping SelectionNot SelectionOr SelectionPredicate SelectionResolution SequenceGenerator SequenceParams SequentialMultiHue SequentialSingleHue ShapeFieldDefWithCondition ShapeValueWithCondition SingleDefUnitChannel SingleSelection SingleSelectionConfig SingleTimeUnit Sort SortArray SortByChannel SortByChannelDesc SortByEncoding SortField SortOrder Spec SphereGenerator StackOffset StackTransform StandardType Step Stream StringFieldDef StringFieldDefWithCondition StringValueWithCondition StringValueWithConditionTypeForShape StyleConfigIndex SymbolShape Text TextBaseline TextDirection TextFieldDefWithCondition TextValueWithCondition TickConfig TickCount TimeInterval TimeIntervalStep TimeUnit TimeUnitParams TimeUnitTransform TitleAnchor TitleConfig TitleFrame TitleOrient TitleParams TooltipContent TopLevelFacetSpec TopLevelLayerSpec TopLevelNormalizedConcatSpecGenericSpec TopLevelNormalizedHConcatSpecGenericSpec TopLevelNormalizedVConcatSpecGenericSpec TopLevelRepeatSpec TopLevelSpec TopLevelUnitSpec TopoDataFormat Transform TypeForShape TypedFieldDef UnitSpec UnitSpecWithFrame UrlData UtcMultiTimeUnit UtcSingleTimeUnit VConcatSpecGenericSpec Value ValueConditionGradientstringnull ValueConditionText ValueConditionnumber ValueConditionstring ValueConditionstringnull ValueDefWithConditionMarkPropFieldDefGradientstringnull ValueDefWithConditionMarkPropFieldDefTypeForShapestringnull ValueDefWithConditionMarkPropFieldDefnumber ValueDefWithConditionMarkPropFieldDefstringnull ValueDefWithConditionStringFieldDefText ValueWithConditionMarkPropFieldDefGradientstringnull ValueWithConditionMarkPropFieldDefTypeForShapestringnull ValueWithConditionMarkPropFieldDefnumber ValueWithConditionMarkPropFieldDefstringnull ValueWithConditionStringFieldDefText Vector2DateTime Vector2Vector2number Vector2boolean Vector2number Vector2string Vector3number VegaLiteSchema ViewBackground ViewConfig WindowEventType WindowFieldDef WindowOnlyOp WindowTransform XValueDef YValueDef altair-4.1.0/doc/user_guide/compound_charts.rst000066400000000000000000000260561364111050100216130ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-compound: Compound Charts: Layer, HConcat, VConcat, Repeat, Facet ------------------------------------------------------- Along with the basic :class:`Chart` object, Altair provides a number of compound plot types that can be used to create stacked, layered, faceted, and repeated charts. They are summarized in the following tables: ====================== =============================== =================== ====================== class functional form operator form reference ====================== =============================== =================== ====================== :class:`LayerChart` ``alt.layer(chart1, chart2)`` ``chart1 + chart2`` :ref:`layer-chart` :class:`HConcatChart` ``alt.hconcat(chart1, chart2)`` ``chart1 | chart2`` :ref:`hconcat-chart` :class:`VConcatChart` ``alt.vconcat(chart1, chart2)`` ``chart1 & chart2`` :ref:`vconcat-chart` ====================== =============================== =================== ====================== ====================== ==================================== ====================== class method form reference ====================== ==================================== ====================== :class:`RepeatChart` ``chart.repeat(row, column)`` :ref:`repeat-chart` :class:`FacetChart` ``chart.facet(facet, row, column)`` :ref:`facet-chart` ====================== ==================================== ====================== .. _layer-chart: Layered Charts ~~~~~~~~~~~~~~ Layered charts allow you to overlay two different charts on the same set of axes. They can be useful, for example, when you wish to draw multiple marks for the same data; for example: .. altair-plot:: import altair as alt from altair.expr import datum from vega_datasets import data stocks = data.stocks.url base = alt.Chart(stocks).encode( x='date:T', y='price:Q', color='symbol:N' ).transform_filter( datum.symbol == 'GOOG' ) base.mark_line() + base.mark_point() Here we have used the ``+`` operator to create a layered chart; alternatively we could use the ``alt.layer`` function, which accepts as its arguments any number of charts: .. altair-plot:: alt.layer( base.mark_line(), base.mark_point(), base.mark_rule() ).interactive() The output of both of these patterns is a :class:`LayerChart` object, which has properties and methods similar to the :class:`Chart` object. Order of Layers ^^^^^^^^^^^^^^^ In a layered chart, the order of layers is determined from the order in which they are specified. For example, when creating a chart using ``layer1 + layer2`` or ``alt.layer(layer1, layer2)``, ``layer1`` will appear below ``layer2``, and ``layer2`` may obscure the marks of ``layer1``. For example, consider the following chart where we plot points on top of a heat-map: .. altair-plot:: import altair as alt from vega_datasets import data source = data.movies.url heatmap = alt.Chart(source).mark_rect().encode( alt.X('IMDB_Rating:Q', bin=True), alt.Y('Rotten_Tomatoes_Rating:Q', bin=True), alt.Color('count()', scale=alt.Scale(scheme='greenblue')) ) points = alt.Chart(source).mark_circle( color='black', size=5, ).encode( x='IMDB_Rating:Q', y='Rotten_Tomatoes_Rating:Q', ) heatmap + points If we put the two layers in the opposite order, the points will be drawn first and will be obscured by the heatmap marks: .. altair-plot:: points + heatmap If you do not see the expected output when creating a layered chart, make certain that you are ordering the layers appropriately. .. _hconcat-chart: Horizontal Concatenation ~~~~~~~~~~~~~~~~~~~~~~~~ Displaying two plots side-by-side is most generally accomplished with the :class:`HConcatChart` object, which can be created using the :class:`hconcat` function or the ``|`` operator. For example, here is a scatter-plot concatenated with a histogram showing the distribution of its points: .. altair-plot:: import altair as alt from vega_datasets import data iris = data.iris.url chart1 = alt.Chart(iris).mark_point().encode( x='petalLength:Q', y='petalWidth:Q', color='species:N' ).properties( height=300, width=300 ) chart2 = alt.Chart(iris).mark_bar().encode( x='count()', y=alt.Y('petalWidth:Q', bin=alt.Bin(maxbins=30)), color='species:N' ).properties( height=300, width=100 ) chart1 | chart2 This example uses the ``|`` operator, but could similarly have been created with the :func:`hconcat` function: .. altair-plot:: alt.hconcat(chart1, chart2) The output of both of these is an :class:`HConcatChart` object, which has many of the same top-level methods and attributes as the :class:`Chart` object. Finally, keep in mind that for certain types of horizontally-concatenated charts, where each panel modifies just one aspect of the visualization, repeated and faceted charts are more convenient (see :ref:`repeat-chart` and :ref:`facet-chart` for more explanation). .. _vconcat-chart: Vertical Concatenation ~~~~~~~~~~~~~~~~~~~~~~ Similarly to :ref:`hconcat-chart` above, Altair offers vertical concatenation via the :func:`vconcat` function or the ``&`` operator. For example, here we vertically-concatenate two views of the same data, with a ``brush`` selection to add interaction: .. altair-plot:: import altair as alt from vega_datasets import data source = data.sp500.url brush = alt.selection(type='interval', encodings=['x']) base = alt.Chart(source).mark_area().encode( x = 'date:T', y = 'price:Q' ).properties( width=600, height=200 ) upper = base.encode( alt.X('date:T', scale=alt.Scale(domain=brush)) ) lower = base.properties( height=60 ).add_selection(brush) alt.vconcat(upper, lower) Note that we could just as well have used ``upper & lower`` rather than the more verbose ``alt.vconcat(upper, lower)``. As with horizontally-concatenated charts, keep in mind that for concatenations where only one data grouping or encoding is changing in each panel, using :ref:`repeat-chart` or :ref:`facet-chart` can be more efficient. .. _repeat-chart: Repeated Charts ~~~~~~~~~~~~~~~ The :class:`RepeatChart` object provides a convenient interface for a particular type of horizontal or vertical concatenation, in which the only difference between the concatenated panels is modification of *one or more encodings*. For example, suppose you would like to create a multi-panel scatter-plot to show different projections of a multi-dimensional dataset. Let's first create such a chart manually using ``hconcat`` and ``vconcat``, before showing how ``repeat`` can be used to build the chart more efficiently: .. altair-plot:: import altair as alt from vega_datasets import data iris = data.iris.url base = alt.Chart().mark_point().encode( color='species:N' ).properties( width=200, height=200 ).interactive() chart = alt.vconcat(data=iris) for y_encoding in ['petalLength:Q', 'petalWidth:Q']: row = alt.hconcat() for x_encoding in ['sepalLength:Q', 'sepalWidth:Q']: row |= base.encode(x=x_encoding, y=y_encoding) chart &= row chart In this example, we explicitly loop over different x and y encodings to create a 2 x 2 grid of charts showing different views of the data. The code is straightforward, if a bit verbose. The :class:`RepeatChart` pattern, accessible via the :meth:`Chart.repeat` method, makes this type of chart a bit easier to produce: .. altair-plot:: import altair as alt from vega_datasets import data iris = data.iris.url alt.Chart(iris).mark_point().encode( alt.X(alt.repeat("column"), type='quantitative'), alt.Y(alt.repeat("row"), type='quantitative'), color='species:N' ).properties( width=200, height=200 ).repeat( row=['petalLength', 'petalWidth'], column=['sepalLength', 'sepalWidth'] ).interactive() The :meth:`Chart.repeat` method is the key here: it lets you specify a set of encodings for the row and/or column which can be referred to in the chart's encoding specification using ``alt.repeat('row')`` or ``alt.repeat('column')``. Currently ``repeat`` can only be specified for rows and column (not, e.g., for layers) and the target can only be encodings (not, e.g., data transforms) but there is discussion within the Vega-Lite community about making this pattern more general in the future. .. _facet-chart: Faceted Charts ~~~~~~~~~~~~~~ Like repeated charts, Faceted charts provide a more convenient API for creating multiple views of a dataset for a specific type of chart: one where each panel contains a different subset of data. We could do this manually using a filter transform along with a horizontal concatenation: .. altair-plot:: import altair as alt from altair.expr import datum from vega_datasets import data iris = data.iris.url base = alt.Chart(iris).mark_point().encode( x='petalLength:Q', y='petalWidth:Q', color='species:N' ).properties( width=160, height=160 ) chart = alt.hconcat() for species in ['setosa', 'versicolor', 'virginica']: chart |= base.transform_filter(datum.species == species) chart As with the manual approach to :ref:`repeat-chart`, this is straightforward, if a bit verbose. Using ``alt.facet`` it becomes a bit cleaner: .. altair-plot:: alt.Chart(iris).mark_point().encode( x='petalLength:Q', y='petalWidth:Q', color='species:N' ).properties( width=180, height=180 ).facet( column='species:N' ) For simple charts like this, there is also a ``column`` encoding channel that can give the same results: .. altair-plot:: alt.Chart(iris).mark_point().encode( x='petalLength:Q', y='petalWidth:Q', color='species:N', column='species:N' ).properties( width=180, height=180 ) The advantage of using ``alt.facet`` is that it can create faceted views of more complicated compound charts. For example, here is a faceted view of a layered chart with a hover selection: .. altair-plot:: hover = alt.selection_single(on='mouseover', nearest=True, empty='none') base = alt.Chart(iris).encode( x='petalLength:Q', y='petalWidth:Q', color=alt.condition(hover, 'species:N', alt.value('lightgray')) ).properties( width=180, height=180, ) points = base.mark_point().add_selection( hover ) text = base.mark_text(dy=-5).encode( text = 'species:N', opacity = alt.condition(hover, alt.value(1), alt.value(0)) ) alt.layer(points, text).facet( 'species:N', ) Though each of the above examples have faceted the data across columns, faceting across rows (or across rows *and* columns) is supported as well. altair-4.1.0/doc/user_guide/configuration.rst000066400000000000000000000257121364111050100212700ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-configuration: Top-Level Chart Configuration ============================= Many aspects of a chart's appearance can be configured at the top level using the ``configure_*()`` methods. These methods and the properties that they set are only valid at the top level of a chart, and can be thought of as a way of setting a chart theme: that is, they set the default styles for the entire chart, and these defaults can be overridden by specific style settings associated with chart elements. These methods and their arguments will be outlined below: - :ref:`config-chart` :meth:`Chart.configure` - :ref:`config-axis` :meth:`Chart.configure_axis` - :ref:`config-header` :meth:`Chart.configure_header` - :ref:`config-legend` :meth:`Chart.configure_legend` - :ref:`config-mark` :meth:`Chart.configure_mark` - :ref:`config-scale` :meth:`Chart.configure_scale` - :ref:`config-range` :meth:`Chart.configure_range` - :ref:`config-projection` :meth:`Chart.configure_projection` - :ref:`config-selection` :meth:`Chart.configure_selection` - :ref:`config-title` :meth:`Chart.configure_title` - :ref:`config-view` :meth:`Chart.configure_view` For more discussion of approaches to chart customization, see :ref:`user-guide-customization`. .. _config-chart: Chart Configuration ------------------- The :meth:`Chart.configure` method adds a :class:`Config` instance to the chart, and has the following attributes: .. altair-object-table:: altair.Config .. _config-axis: Axis Configuration ------------------ Axis configuration defines default settings for axes, and can be set using the :meth:`Chart.configure_axis` method. Properties defined here are applied to all axes in the figure. Additional property blocks can target more specific axis types based on the orientation ("axisX", "axisY", "axisLeft", "axisTop", etc.) or band scale type ("axisBand"). For example, properties defined under the "axisBand" property will only apply to axes visualizing "band" scales. If multiple axis config blocks apply to a single axis, type-based options take precedence over orientation-based options, which in turn take precedence over general options. The methods are the following: - :meth:`Chart.configure_axis` - :meth:`Chart.configure_axisBand` - :meth:`Chart.configure_axisBottom` - :meth:`Chart.configure_axisLeft` - :meth:`Chart.configure_axisRight` - :meth:`Chart.configure_axisTop` - :meth:`Chart.configure_axisX` - :meth:`Chart.configure_axisY` They have the following properties: .. altair-object-table:: altair.AxisConfig .. _config-header: Header Configuration -------------------- The :meth:`Chart.configure_header` method allows configuration of facet headers, including the font, color, size, and position of the title and labels. Here is an example: .. altair-plot:: import altair as alt from vega_datasets import data source = data.cars.url chart = alt.Chart(source).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color='Origin:N', column='Origin:N' ).properties( width=180, height=180 ) chart.configure_header( titleColor='green', titleFontSize=14, labelColor='red', labelFontSize=14 ) .. altair-object-table:: altair.HeaderConfig .. _config-legend: Legend Configuration -------------------- The :meth:`Chart.configure_legend` allows you to customize the appearance of chart legends, including location, fonts, bounding boxes, colors, and more. Here is an example: .. altair-plot:: import altair as alt from vega_datasets import data source = data.cars.url chart = alt.Chart(source).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color='Origin:N' ) chart.configure_legend( strokeColor='gray', fillColor='#EEEEEE', padding=10, cornerRadius=10, orient='top-right' ) Additional properties are summarized in the following table: .. altair-object-table:: altair.LegendConfig .. _config-mark: Mark and Mark Style Configuration --------------------------------- The mark configuration can be set using the :meth:`Chart.configure_mark` method, which sets the default properties for all marks in the chart. In addition, the config object also provides mark-specific configuration using the mark type (e.g. :meth:`Chart.configure_area`) for defining default properties for each mark. For general configuration of all mark types, use: - :meth:`Chart.configure_mark` For configurations specific to particular mark types, use: - :meth:`Chart.configure_area` - :meth:`Chart.configure_bar` - :meth:`Chart.configure_circle` - :meth:`Chart.configure_geoshape` - :meth:`Chart.configure_line` - :meth:`Chart.configure_point` - :meth:`Chart.configure_rect` - :meth:`Chart.configure_rule` - :meth:`Chart.configure_square` - :meth:`Chart.configure_text` - :meth:`Chart.configure_tick` - :meth:`Chart.configure_trail` Each of the above methods accepts the following properties: .. altair-object-table:: altair.MarkConfig In addition to the default mark properties above, default values can be further customized using named styles defined as keyword arguments to the :meth:`Chart.configure_style` method. Styles can then be invoked by including a style property within a mark definition object. .. _config-scale: Scale Configuration ------------------- Scales can be configured using :meth:`Chart.configure_scale`, which has the following properties: .. altair-object-table:: altair.ScaleConfig .. _config-range: Scale Range Configuration ------------------------- Scale ranges can be configured using :meth:`Chart.configure_range`, which has the following properties: .. altair-object-table:: altair.RangeConfig .. _config-projection: Projection Configuration ------------------------ :meth:`Chart.configure_projection` .. altair-object-table:: altair.ProjectionConfig .. _config-selection: Selection Configuration ----------------------- :meth:`Chart.configure_selection` .. altair-object-table:: altair.SelectionConfig .. _config-title: Title Configuration ------------------- The :meth:`Chart.configure_title` method allows configuration of the chart title, including the font, color, placement, and orientation. Here is an example: .. altair-plot:: import altair as alt from vega_datasets import data source = data.cars.url chart = alt.Chart(source).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', ).properties( title='Cars Data' ) chart.configure_title( fontSize=20, font='Courier', anchor='start', color='gray' ) Additional title configuration options are listed in the following table: .. altair-object-table:: altair.TitleConfig .. _config-view: View Configuration ------------------ The :meth:`Chart.configure_view` method allows you to configure aspects of the chart's *view*, i.e. the area of the screen in which the data and scales are drawn. Here is an example to demonstrate some of the visual features that can be controlled: .. altair-plot:: import altair as alt from vega_datasets import data source = data.cars.url chart = alt.Chart(source).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', ) chart.configure_view( continuousHeight=200, continuousWidth=200, strokeWidth=4, fill='#FFEEDD', stroke='red', ) Additional properties are summarized in the following table: .. altair-object-table:: altair.ViewConfig .. _chart-themes: Altair Themes ------------- Altair makes available a theme registry that lets users apply chart configurations globally within any Python session. This is done via the ``alt.themes`` object. The themes registry consists of functions which define a specification dictionary that will be added to every created chart. For example, the default theme configures the default size of a single chart: >>> import altair as alt >>> default = alt.themes.get() >>> default() {'config': {'view': {'continuousWidth': 400, 'continuousHeight': 300}}} You can see that any chart you create will have this theme applied, and these configurations added to its specification: .. altair-plot:: :output: repr import altair as alt from vega_datasets import data chart = alt.Chart(data.cars.url).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q' ) chart.to_dict() The rendered chart will then reflect these configurations: .. altair-plot:: chart Changing the Theme ~~~~~~~~~~~~~~~~~~ If you would like to enable any other theme for the length of your Python session, you can call ``alt.themes.enable(theme_name)``. For example, Altair includes a theme in which the chart background is opaque rather than transparent: .. altair-plot:: :output: repr alt.themes.enable('opaque') chart.to_dict() .. altair-plot:: chart Notice that the background color of the chart is now set to white. If you would like no theme applied to your chart, you can use the theme named ``'none'``: .. altair-plot:: :output: repr alt.themes.enable('none') chart.to_dict() .. altair-plot:: chart Because the view configuration is not set, the chart is smaller than the default rendering. If you would like to use any theme just for a single chart, you can use the ``with`` statement to enable a temporary theme: .. altair-plot:: :output: none with alt.themes.enable('default'): spec = chart.to_json() Currently Altair does not offer many built-in themes, but we plan to add more options in the future. Defining a Custom Theme ~~~~~~~~~~~~~~~~~~~~~~~ The theme registry also allows defining and registering custom themes. A theme is simply a function that returns a dictionary of default values to be added to the chart specification at rendering time, which is then registered and activated. For example, here we define a theme in which all marks are drawn with black fill unless otherwise specified: .. altair-plot:: import altair as alt from vega_datasets import data # define the theme by returning the dictionary of configurations def black_marks(): return { 'config': { 'view': { 'height': 300, 'width': 400, }, 'mark': { 'color': 'black', 'fill': 'black' } } } # register the custom theme under a chosen name alt.themes.register('black_marks', black_marks) # enable the newly registered theme alt.themes.enable('black_marks') # draw the chart cars = data.cars.url alt.Chart(cars).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q' ) If you want to restore the default theme, use: .. altair-plot:: :output: none alt.themes.enable('default') For more ideas on themes, see the `Vega Themes`_ repository. .. _Vega Themes: https://github.com/vega/vega-themes/ altair-4.1.0/doc/user_guide/custom_renderers.rst000066400000000000000000000044121364111050100217760ustar00rootroot00000000000000 .. _customizing-renderers: Customizing Renderers ===================== Renderers in Altair are all based on the mimebundle representation accessed by the ``_repr_mimebundle_`` method of the top-level Altair objects. When you enable a renderer, functionally what that does is to define a new kind of mimebundle output. The ``alt.renderers`` registry allows the user to define and enable new mimetypes for the chart. As a simple example, imagine we would like to add a ``plaintext`` renderer that renders a chart description in plain text. We could do it this way:: def plaintext_mimetype(spec): return {'text/plain': "description: " + spec.get('description', 'none')} alt.renderers.register('plaintext', plaintext_mimetype) Now you can enable this mimetype, and then when your chart is displayed you will see this description:: alt.renderers.enable('plaintext') alt.Chart('data.txt').mark_point().encode( x='x:Q', y='y:Q' ).properties( description='This is a simple chart' ) .. code-block:: none description: This is a simple chart This is a simple example, but it shows you the flexibility of this approach. If you have a frontend that recognizes ``_repr_mimebundle_`` as a means of obtaining a MIME type representation of a Python object, then you can define a function that will process the chart content in any way before returning any mimetype. The renderers built-in to Altair are the following: - ``"default"``: default rendering, using the ``'application/vnd.vegalite.v2+json'`` MIME type which is supported by JupyterLab and nteract. - ``"jupyterlab"``: identical to ``"default"`` - ``"nteract"``: identical to ``"default"`` - ``"colab"``: renderer for Google's Colab notebook, using the ``"text/html"`` MIME type. - ``"notebook"``: renderer for the classic notebook, provided by the ipyvega_ package - ``"json"``: renderer that outputs the raw JSON chart specification, using the ``'application/json'`` MIME type. - ``"png"``: renderer that renders and converts the chart to PNG, outputting it using the ``'image/png'`` MIME type. - ``"svg"``: renderer that renders and converts the chart to an SVG image, outputting it using the ``'image/svg+xml'`` MIME type. .. _ipyvega: https://github.com/vega/ipyvega/tree/vega altair-4.1.0/doc/user_guide/customization.rst000066400000000000000000000377251364111050100213400ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-customization: Customizing Visualizations ========================== Altair's goal is to automatically choose useful plot settings and configurations so that the user is free to think about the data rather than the mechanics of plotting. That said, once you have a useful visualization, you will often want to adjust certain aspects of it. This section of the documentation outlines some of the ways to make these adjustments. Global Config vs. Local Config vs. Encoding ------------------------------------------- There are often two or three different ways to specify the look of your plots depending on the situation. For example, suppose we are creating a scatter plot of the ``cars`` dataset: .. altair-plot:: import altair as alt from vega_datasets import data cars = data.cars.url alt.Chart(cars).mark_point().encode( x='Acceleration:Q', y='Horsepower:Q' ) Suppose you wish to change the color of the points to red, and the opacity of the points to 20%. There are three possible approaches to these: 1. “Global Config†acts on an entire chart object 2. “Local Config†acts on one mark of the chart 3. “Encoding†channels can also be used to set some chart properties Global Config ~~~~~~~~~~~~~ First, every chart type has a ``"config"`` property at the top level that acts as a sort of theme for the whole chart and all of its sub-charts. Here you can specify things like axes properties, mark properties, selection properties, and more. Altair allows you to access these through the ``configure_*`` methods of the chart. Here we will use the :meth:`~Chart.configure_mark` property: .. altair-plot:: alt.Chart(cars).mark_point().encode( x='Acceleration:Q', y='Horsepower:Q' ).configure_mark( opacity=0.2, color='red' ) There are a couple things to be aware of when using this kind of global configuration: 1. By design configurations will affect *every mark* used within the chart 2. The global configuration is only permissible at the top-level; so, for example, if you tried to layer the above chart with another, it would result in an error. For a full discussion of global configuration options, see :ref:`user-guide-configuration`. Local Config ~~~~~~~~~~~~ If you would like to configure the look of the mark locally, such that the setting only affects the particular chart property you reference, this can be done via a local configuration setting. In the case of mark properties, the best approach is to set the property as an argument to the ``mark_*`` method. Here we will use :meth:`~Chart.mark_point`: .. altair-plot:: alt.Chart(cars).mark_point(opacity=0.2, color='red').encode( x='Acceleration:Q', y='Horsepower:Q' ) Unlike when using the global configuration, here it is possible to use the resulting chart as a layer or facet in a compound chart. Local config settings like this one will always override global settings. Encoding ~~~~~~~~ Finally, it is possible to set chart properties via the encoding channel (see :ref:`user-guide-encoding`). Rather than mapping a property to a data column, you can map a property directly to a value using the :func:`value` function: .. altair-plot:: alt.Chart(cars).mark_point().encode( x='Acceleration:Q', y='Horsepower:Q', opacity=alt.value(0.2), color=alt.value('red') ) Note that only a limited set of mark properties can be bound to encodings, so for some (e.g. ``fillOpacity``, ``strokeOpacity``, etc.) the encoding approach is not available. Encoding settings will always override local or global configuration settings. Which to Use? ~~~~~~~~~~~~~ The precedence order for the three approaches is (from lowest to highest) *global config*, *local config*, *encoding*. That is, if a chart property is set both globally and locally, the local setting will win-out. If a property is set both via a configuration and an encoding, the encoding will win-out. In most usage, we recommend always using the highest-precedence means of setting properties; i.e. an encoding, or a local configuration for properties that are not tied to an encoding. Global configurations should be reserved for creating themes that are applied just before the chart is rendered. Adjusting Axis Limits --------------------- The default axis limit used by Altair is dependent on the type of the data (see, for example, :ref:`type-axis-scale`). To fine-tune the axis limits beyond these defaults, you can use the :class:`Scale` property of the axis encodings. For example, consider the following plot: .. altair-plot:: import altair as alt from vega_datasets import data cars = data.cars.url alt.Chart(cars).mark_point().encode( x='Acceleration:Q', y='Horsepower:Q' ) Altair inherits from Vega-Lite the convention of always including the zero-point in quantitative axes; if you would like to turn this off, you can add a :class:`Scale` property to the :class:`X` encoding that specifies ``zero=False``: .. altair-plot:: alt.Chart(cars).mark_point().encode( alt.X('Acceleration:Q', scale=alt.Scale(zero=False) ), y='Horsepower:Q' ) To specify exact axis limits, you can use the ``domain`` property of the scale: .. altair-plot:: alt.Chart(cars).mark_point().encode( alt.X('Acceleration:Q', scale=alt.Scale(domain=(5, 20)) ), y='Horsepower:Q' ) The problem is that the data still exists beyond the scale, and we need to tell Altair what to do with this data. One option is to "clip" the data by setting the ``"clip"`` property of the mark to True: .. altair-plot:: alt.Chart(cars).mark_point(clip=True).encode( alt.X('Acceleration:Q', scale=alt.Scale(domain=(5, 20)) ), y='Horsepower:Q' ) Another option is to "clamp" the data; that is, to move points beyond the limit to the edge of the domain: .. altair-plot:: alt.Chart(cars).mark_point().encode( alt.X('Acceleration:Q', scale=alt.Scale( domain=(5, 20), clamp=True ) ), y='Horsepower:Q' ).interactive() For interactive charts like the one above, the clamping happens dynamically, which can be useful for keeping in mind outliers as you pan and zoom on the chart. Adjusting Axis Labels --------------------- Altair also gives you tools to easily configure the appearance of axis labels. For example consider this plot: .. altair-plot:: import pandas as pd df = pd.DataFrame({'x': [0.03, 0.04, 0.05, 0.12, 0.07, 0.15], 'y': [10, 35, 39, 50, 24, 35]}) alt.Chart(df).mark_circle().encode( x='x', y='y' ) To fine-tune the formatting of the tick labels and to add a custom title to each axis, we can pass to the :class:`X` and :class:`Y` encoding a custom :class:`Axis` definition. Here is an example of formatting the x labels as a percentage, and the y labels as a dollar value: .. altair-plot:: alt.Chart(df).mark_circle().encode( x=alt.X('x', axis=alt.Axis(format='%', title='percentage')), y=alt.Y('y', axis=alt.Axis(format='$', title='dollar amount')) ) Axis labels can also be easily removed: .. altair-plot:: alt.Chart(df).mark_circle().encode( x=alt.X('x', axis=alt.Axis(labels=False)), y=alt.Y('y', axis=alt.Axis(labels=False)) ) Additional formatting codes are available; for a listing of these see the `d3 Format Code Documentation `_. Adjusting the Legend -------------------- A legend is added to the chart automatically when the `color`, `shape` or `size` arguments are passed to the :func:`encode` function. In this example we'll use `color`. .. altair-plot:: import altair as alt from vega_datasets import data iris = data.iris() alt.Chart(iris).mark_point().encode( x='petalWidth', y='petalLength', color='species' ) In this case, the legend can be customized by introducing the :class:`Color` class and taking advantage of its `legend` argument. The `shape` and `size` arguments have their own corresponding classes. The legend option on all of them expects a :class:`Legend` object as its input, which accepts arguments to customize many aspects of its appearance. One simple example is giving the legend a `title`. .. altair-plot:: import altair as alt from vega_datasets import data iris = data.iris() alt.Chart(iris).mark_point().encode( x='petalWidth', y='petalLength', color=alt.Color('species', legend=alt.Legend(title="Species by color")) ) Another thing you can do is move the legend to another position with the `orient` argument. .. altair-plot:: import altair as alt from vega_datasets import data iris = data.iris() alt.Chart(iris).mark_point().encode( x='petalWidth', y='petalLength', color=alt.Color('species', legend=alt.Legend(orient="left")), ) You can remove the legend entirely by submitting a null value. .. altair-plot:: import altair as alt from vega_datasets import data iris = data.iris() alt.Chart(iris).mark_point().encode( x='petalWidth', y='petalLength', color=alt.Color('species', legend=None), ) Removing the Chart Border ------------------------- Basic Altair charts are drawn with both a grid and an outside border. To create a chart with no border, you will need to remove them both. As an example, let's start with a simple scatter plot. .. altair-plot:: import altair as alt from vega_datasets import data iris = data.iris() alt.Chart(iris).mark_point().encode( x='petalWidth', y='petalLength', color='species' ) First remove the grid using the :meth:`Chart.configure_axis` method. .. altair-plot:: import altair as alt from vega_datasets import data iris = data.iris() alt.Chart(iris).mark_point().encode( x='petalWidth', y='petalLength', color='species' ).configure_axis( grid=False ) You'll note that while the inside rules are gone, the outside border remains. Hide it by setting the `strokeWidth` or the `strokeOpacity` options on :meth:`Chart.configure_view` to `0`: .. altair-plot:: import altair as alt from vega_datasets import data iris = data.iris() alt.Chart(iris).mark_point().encode( x='petalWidth', y='petalLength', color='species' ).configure_axis( grid=False ).configure_view( strokeWidth=0 ) It is also possible to completely remove all borders and axes by combining the above option with setting `axis` to `None` during encoding. .. altair-plot:: import altair as alt from vega_datasets import data iris = data.iris() alt.Chart(iris).mark_point().encode( alt.X('petalWidth', axis=None), alt.Y('petalLength', axis=None), color='species' ).configure_axis( grid=False ).configure_view( strokeWidth=0 ) Customizing Colors ------------------ As discussed in :ref:`type-legend-scale`, Altair chooses a suitable default color scheme based on the type of the data that the color encodes. These defaults can be customized using the `scale` argument of the :class:`Color` class. The :class:`Scale` class passed to the `scale` argument provides a number of options for customizing the color scale; we will discuss a few of them here. Color Schemes ~~~~~~~~~~~~~ Altair includes a set of named color schemes for both categorical and sequential data, defined by the vega project; see the `Vega documentation `_ for a full gallery of available color schemes. These schemes can be passed to the `scheme` argument of the :class:`Scale` class: .. altair-plot:: import altair as alt from vega_datasets import data iris = data.iris() alt.Chart(iris).mark_point().encode( x='petalWidth', y='petalLength', color=alt.Color('species', scale=alt.Scale(scheme='dark2')) ) Color Domain and Range ~~~~~~~~~~~~~~~~~~~~~~ To make a custom mapping of discrete values to colors, use the `domain` and `range` parameters of the :class:`Scale` class for values and colors respectively. .. altair-plot:: import altair as alt from vega_datasets import data iris = data.iris() domain = ['setosa', 'versicolor', 'virginica'] range_ = ['red', 'green', 'blue'] alt.Chart(iris).mark_point().encode( x='petalWidth', y='petalLength', color=alt.Color('species', scale=alt.Scale(domain=domain, range=range_)) ) Raw Color Values ~~~~~~~~~~~~~~~~ The ``scale`` is what maps the raw input values into an appropriate color encoding for displaying the data. If your data entries consist of raw color names or codes, you can set ``scale=None`` to use those colors directly: .. altair-plot:: import pandas as pd import altair as alt data = pd.DataFrame({ 'x': range(6), 'color': ['red', 'steelblue', 'chartreuse', '#F4D03F', '#D35400', '#7D3C98'] }) alt.Chart(data).mark_point( filled=True, size=100 ).encode( x='x', color=alt.Color('color', scale=None) ) Adjusting the width of Bar Marks -------------------------------- The width of the bars in a bar plot are controlled through the ``size`` property in the :meth:`~Chart.mark_bar()`: .. altair-plot:: import altair as alt import pandas as pd data = pd.DataFrame({'name': ['a', 'b'], 'value': [4, 10]}) alt.Chart(data).mark_bar(size=10).encode( x='name:O', y='value:Q' ) But since ``mark_bar(size=10)`` only controls the width of the bars, it might become possible that the width of the chart is not adjusted accordingly: .. altair-plot:: alt.Chart(data).mark_bar(size=30).encode( x='name:O', y='value:Q' ) The width of the chart containing the bar plot can be controlled through setting the ``width`` property of the chart, either to a pixel value for any chart, or to a step value in the case of discrete scales. Here is an example of setting the width to a single value for the whole chart: .. altair-plot:: alt.Chart(data).mark_bar(size=30).encode( x='name:O', y='value:Q' ).properties(width=200) The width of the bars are set using ``mark_bar(size=30)`` and the width of the chart is set using ``properties(width=100)`` Here is an example of setting the step width for a discrete scale: .. altair-plot:: alt.Chart(data).mark_bar(size=30).encode( x='name:N', y='value:Q' ).properties(width=alt.Step(100)) The width of the bars are set using ``mark_bar(size=30)`` and the width that is allocated for each bar bar in the the chart is set using ``width=alt.Step(100)`` .. note:: If both ``width`` and ``rangeStep`` are specified, then ``rangeStep`` will be ignored. .. _customization-chart-size: Adjusting Chart Size -------------------- The size of charts can be adjusted using the ``width`` and ``height`` properties. For example: .. altair-plot:: import altair as alt from vega_datasets import data cars = data.cars() alt.Chart(cars).mark_bar().encode( x='Origin', y='count()' ).properties( width=200, height=150 ) Note that in the case of faceted or other compound charts, this width and height applies to the subchart rather than to the overall chart: .. altair-plot:: alt.Chart(cars).mark_bar().encode( x='Origin', y='count()', column='Cylinders:Q' ).properties( width=100, height=100 ) If you want your chart size to respond to the width of the HTML page or container in which it is rendererd, you can set ``width`` or ``height`` to the string ``"container"``: .. altair-plot:: alt.Chart(cars).mark_bar().encode( x='Origin', y='count()', ).properties( width='container', height=200 ) Note that this will only scale with the container if its parent element has a size determined outside the chart itself; For example, the container may be a ``
`` element that has style ``width: 100%; height: 300px``. altair-4.1.0/doc/user_guide/data.rst000066400000000000000000000371121364111050100173270ustar00rootroot00000000000000.. _user-guide-data: Specifying Data in Altair ------------------------- .. currentmodule:: altair Each top-level chart object (i.e. :class:`Chart`, :class:`LayerChart`, and :class:`VConcatChart`, :class:`HConcatChart`, :class:`RepeatChart`, :class:`FacetChart`) accepts a dataset as its first argument. The dataset can be specified in one of the following ways: - as a `Pandas DataFrame `_ - as a :class:`Data` or related object (i.e. :class:`UrlData`, :class:`InlineData`, :class:`NamedData`) - as a url string pointing to a ``json`` or ``csv`` formatted text file - as an object that supports the `__geo_interface__` (eg. `Geopandas GeoDataFrame `_, `Shapely Geometries `_, `GeoJSON Objects `_) For example, here we specify data via a DataFrame: .. altair-plot:: import altair as alt import pandas as pd data = pd.DataFrame({'x': ['A', 'B', 'C', 'D', 'E'], 'y': [5, 3, 6, 7, 2]}) alt.Chart(data).mark_bar().encode( x='x', y='y', ) When data is specified as a DataFrame, the encoding is quite simple, as Altair uses the data type information provided by Pandas to automatically determine the data types required in the encoding. By comparison, here we create the same chart using a :class:`Data` object, with the data specified as a JSON-style list of records: .. altair-plot:: import altair as alt data = alt.Data(values=[{'x': 'A', 'y': 5}, {'x': 'B', 'y': 3}, {'x': 'C', 'y': 6}, {'x': 'D', 'y': 7}, {'x': 'E', 'y': 2}]) alt.Chart(data).mark_bar().encode( x='x:O', # specify ordinal data y='y:Q', # specify quantitative data ) notice the extra markup required in the encoding; because Altair cannot infer the types within a :class:`Data` object, we must specify them manually (here we use :ref:`shorthand-description` to specify *ordinal* (``O``) for ``x`` and *quantitative* (``Q``) for ``y``; see :ref:`encoding-data-types`). Similarly, we must also specify the data type when referencing data by URL: .. altair-plot:: import altair as alt from vega_datasets import data url = data.cars.url alt.Chart(url).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q' ) We will further discuss encodings and associated types in :ref:`user-guide-encoding`, next. .. _data-in-index: Including Index Data ~~~~~~~~~~~~~~~~~~~~ By design Altair only accesses dataframe columns, not dataframe indices. At times, relevant data appears in the index. For example: .. altair-plot:: :output: repr import numpy as np rand = np.random.RandomState(0) data = pd.DataFrame({'value': rand.randn(100).cumsum()}, index=pd.date_range('2018', freq='D', periods=100)) data.head() If you would like the index to be available to the chart, you can explicitly turn it into a column using the ``reset_index()`` method of Pandas dataframes: .. altair-plot:: alt.Chart(data.reset_index()).mark_line().encode( x='index:T', y='value:Q' ) If the index object does not have a ``name`` attribute set, the resulting column will be called ``"index"``. More information is available in the `Pandas documentation `_. .. _data-long-vs-wide: Long-form vs. Wide-form Data ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ There are two common conventions for storing data in a dataframe, sometimes called *long-form* and *wide-form*. Both are sensible patterns for storing data in a tabular format; briefly, the difference is this: - **wide-form data** has one row per *independent variable*, with metadata recorded in the *row and column labels*. - **long-form data** has one row per *observation*, with metadata recorded within the table as *values*. Altair's grammar works best with **long-form** data, in which each row corresponds to a single observation along with its metadata. A concrete example will help in making this distinction more clear. Consider a dataset consisting of stock prices of several companies over time. The wide-form version of the data might be arranged as follows: .. altair-plot:: :output: repr :chart-var-name: wide_form wide_form = pd.DataFrame({'Date': ['2007-10-01', '2007-11-01', '2007-12-01'], 'AAPL': [189.95, 182.22, 198.08], 'AMZN': [89.15, 90.56, 92.64], 'GOOG': [707.00, 693.00, 691.48]}) print(wide_form) Notice that each row corresponds to a single time-stamp (here time is the independent variable), while metadata for each observation (i.e. company name) is stored within the column labels. The long-form version of the same data might look like this: .. altair-plot:: :output: repr :chart-var-name: long_form long_form = pd.DataFrame({'Date': ['2007-10-01', '2007-11-01', '2007-12-01', '2007-10-01', '2007-11-01', '2007-12-01', '2007-10-01', '2007-11-01', '2007-12-01'], 'company': ['AAPL', 'AAPL', 'AAPL', 'AMZN', 'AMZN', 'AMZN', 'GOOG', 'GOOG', 'GOOG'], 'price': [189.95, 182.22, 198.08, 89.15, 90.56, 92.64, 707.00, 693.00, 691.48]}) print(long_form) Notice here that each row contains a single observation (i.e. price), along with the metadata for this observation (the date and company name). Importantly, the column and index labels no longer contain any useful metadata. As mentioned above, Altair works best with this long-form data, because relevant data and metadata are stored within the table itself, rather than within the labels of rows and columns: .. altair-plot:: alt.Chart(long_form).mark_line().encode( x='Date:T', y='price:Q', color='company:N' ) Wide-form data can be similarly visualized using e.g. layering (see :ref:`layer-chart`), but it is far less convenient within Altair's grammar. If you would like to convert data from wide-form to long-form, there are two possible approaches: it can be done as a preprocessing step using pandas, or as a transform step within the chart itself. We will detail to two approaches below. .. _data-converting-long-form: Converting Between Long-form and Wide-form: Pandas ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This sort of data manipulation can be done as a preprocessing step using Pandas_, and is discussed in detail in the `Reshaping and Pivot Tables`_ section of the Pandas documentation. For converting wide-form data to the long-form data used by Altair, the ``melt`` method of dataframes can be used. The first argument to ``melt`` is the column or list of columns to treat as index variables; the remaining columns will be combined into an indicator variable and a value variable whose names can be optionally specified: .. altair-plot:: :output: repr wide_form.melt('Date', var_name='company', value_name='price') For more information on the ``melt`` method, see the `Pandas melt documentation`_. In case you would like to undo this operation and convert from long-form back to wide-form, the ``pivot`` method of dataframes is useful. .. altair-plot:: :output: repr long_form.pivot(index='Date', columns='company', values='price').reset_index() For more information on the ``pivot`` method, see the `Pandas pivot documentation`_. Converting Between Long-form and Wide-form: Fold Transform ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If you would like to avoid data preprocessing, you can reshape your data using Altair's Fold Transform (see :ref:`user-guide-fold-transform` for a full discussion). With it, the above chart can be reproduced as follows: .. altair-plot:: alt.Chart(wide_form).transform_fold( ['AAPL', 'AMZN', 'GOOG'], as_=['company', 'price'] ).mark_line().encode( x='Date:T', y='price:Q', color='company:N' ) Notice that unlike the pandas ``melt`` function we must explicitly specify the columns to be folded. The ``as_`` argument is optional, with the default being ``["key", "value"]``. .. _data-generated: Generated Data ~~~~~~~~~~~~~~ At times it is convenient to not use an external data source, but rather generate data for display within the chart specification itself. The benefit is that the chart specification can be made much smaller for generated data than for embedded data. Sequence Generator ^^^^^^^^^^^^^^^^^^ Here is an example of using the :func:`sequence` function to generate a sequence of *x* data, along with a :ref:`user-guide-calculate-transform` to compute *y* data. .. altair-plot:: import altair as alt # Note that the following generator is functionally similar to # data = pd.DataFrame({'x': np.arange(0, 10, 0.1)}) data = alt.sequence(0, 10, 0.1, as_='x') alt.Chart(data).transform_calculate( y='sin(datum.x)' ).mark_line().encode( x='x:Q', y='y:Q', ) Graticule Generator ^^^^^^^^^^^^^^^^^^^ Another type of data that is convenient to generate in the chart itself is the latitude/longitude lines on a geographic visualization, known as a graticule. These can be created using Altair's :func:`graticule` generator function. Here is a simple example: .. altair-plot:: import altair as alt data = alt.graticule(step=[15, 15]) alt.Chart(data).mark_geoshape(stroke='black').project( 'orthographic', rotate=[0, -45, 0] ) Sphere Generator ^^^^^^^^^^^^^^^^ Finally when visualizing the globe a sphere can be used as a background layer within a map to represent the extent of the Earth. This sphere data can be created using Altair's :func:`sphere` generator function. Here is an example: .. altair-plot:: import altair as alt sphere_data = alt.sphere() grat_data = alt.graticule(step=[15, 15]) background = alt.Chart(sphere_data).mark_geoshape(fill='aliceblue') lines = alt.Chart(grat_data).mark_geoshape(stroke='lightgrey') alt.layer(background, lines).project('naturalEarth1') .. _Pandas: http://pandas.pydata.org/ .. _Pandas pivot documentation: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.pivot.html .. _Pandas melt documentation: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.melt.html#pandas.DataFrame.melt .. _Reshaping and Pivot Tables: https://pandas.pydata.org/pandas-docs/stable/reshaping.html .. _data-geo-interface: Geospatial Data ~~~~~~~~~~~~~~~ Working with geographical data in Altair is possible if the object contains a `__geo_interface__` attribute. This attribute represents the geo_interface which is a Python protocol for Geospatial Data. The protocol follows a GeoJSON-like structure to store geo-spatial vector data. To make working with Geospatial Data as similar as working with long-form structured data the geo_interface is serialized in order to: - make it be correctly interpreted by Altair - provide users a similar experience as when working with tabular data such as Pandas. Altair can interpret a spatial bounded entity (a Feature) or a list of Features (FeatureCollection). In order for correct interpretation it is made sure that all records contain a single geometry (one of Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, and GeometryCollection) and is stored as a Feature entity. The most basic Feature is an entity that only contains a Geometry object. For example a Polygon: .. code:: python { "type": "Feature", "geometry": { "coordinates": [[ [0, 0], [0, 2], [2, 2], [2, 0], [0, 0] ]], "type": "Polygon" } } Often, the Feature contains also additional metadata next to the Geometry object. The `__geo_interface__` provides two approaches to store metadata. - Metadata stored as a dictionary within the key `properties` (so called properties member). This properties member must exist in a valid Feature entity. - Metada may be stored directly as foreign members on the top-level of the Feature. There is no normative processing model for usage of this declaration. Altair serializes the metadata from the properties in combination with the declared geometry as Feature entities. The result of this approach is that the keys `type` and `geometry` in the properties member will be overwritten if used. So a `__geo_interface__` that is registered as such .. code:: python { "type": "Feature", "id": "f1", "geometry": {...}, "properties": { "id": 1, "foo": "xx", "bah": "yy", "type": "zz" }, "title": "Example Feature" } Is serialized as such: .. code:: python { "type": "Feature", "geometry": {...}, "foo": "xx", "bah": "yy", "id": 1 } The nested `"type": "zz"` in the properties member is overwritten by `"type":"Feature"` and only the metadata stored in the properties member is serialized. Meaning that foreign members and the commonly used identifier are not serialized. .. _data-geopandas-vs-pandas: GeoPandas vs Pandas ~~~~~~~~~~~~~~~~~~~ A `GeoDataFrame` is a `DataFrame` including a special column with spatial geometries. The column-name containing the spatial geometries defaults to `geometry`. To directly use a `GeoDataFrame` with Altair means in practice that only the column-name `type` should be avoided. .. _data-projections: Projections ~~~~~~~~~~~ Altair works best when the Geospatial Data adopts the World Geodetic System 1984 as its geographic coordinate reference system with units in decimal degrees. Try to avoid putting projected data into Altair, but reproject your spatial data to EPSG:4326 first. If your data comes in a different projection (eg. with units in meters) and you don't have the option to reproject the data, try using the project configuration `(type: 'identity', reflectY': True)`. It draws the geometries in a cartesian grid without applying a projection. .. _data-winding-order: Winding order ~~~~~~~~~~~~~ LineString, Polygon and MultiPolygon geometries contain coordinates in an order: lines go in a certain direction, and polygon rings do too. The GeoJSON-like structure of the __geo_interface__ recommends the right-hand rule winding order for Polygon and MultiPolygons. Meaning that the exterior rings should be counterclockwise and interior rings are clockwise. While it recommends the right-hand rule winding order, it does not reject geometries that do not use the right-hand rule. Altair does NOT follow the right-hand rule for geometries, but uses the left-hand rule. Meaning that exterior rings should be clockwise and interior rings should be counterclockwise. If you face a problem regarding winding order, try to force the left-hand rule on your data before usage in Altair using GeoPandas for example as such: .. code:: python from shapely.ops import orient # version >=1.7a2 gdf.geometry = gdf.geometry.apply(orient, args=(-1,)) .. _Protocol geo_interface: https://gist.github.com/sgillies/2217756 .. _Packages supporting the geo_interface: https://github.com/mlaloux/Python-geo_interface-applications .. _The GeoJSON format: https://tools.ietf.org/html/rfc7946#section-3.1.9 altair-4.1.0/doc/user_guide/data_transformers.rst000066400000000000000000000153601364111050100221350ustar00rootroot00000000000000.. _data-transformers: Data transformers ================= Before a Vega-Lite or Vega specification can be passed to a renderer, it typically has to be transformed in a number of ways: * Pandas Dataframe has to be sanitized and serialized to JSON. * The rows of a Dataframe might need to be sampled or limited to a maximum number. * The Dataframe might be written to a ``.csv`` of ``.json`` file for performance reasons. These data transformations are managed by the data transformation API of Altair. .. note:: The data transformation API of Altair should not be confused with the ``transform`` API of Vega and Vega-Lite. A data transformer is a Python function that takes a Vega-Lite data ``dict`` or Pandas ``DataFrame`` and returns a transformed version of either of these types:: from typing import Union Data = Union[dict, pd.DataFrame] def data_transformer(data: Data) -> Data: # Transform and return the data return transformed_data Dataset Consolidation ~~~~~~~~~~~~~~~~~~~~~ Datasets passed as Pandas dataframes can be represented in the chart in two ways: - As literal dataset values in the ``data`` attribute at any level of the specification - As a named dataset in the ``datasets`` attribute of the top-level specification. The former is a bit more simple, but common patterns of usage in Altair can often lead to full datasets being listed multiple times in their entirety within a single specification. For this reason, Altair 2.2 and newer will by default move all directly-specified datasets into the top-level ``datasets`` entry, and reference them by a unique name determined from the hash of the data representation. The benefit of using a hash-based name is that even if the user specifies a dataset in multiple places when building the chart, the specification will only include one copy. This behavior can be modified by setting the ``consolidate_datasets`` attribute of the data transformer. For example, consider this simple layered chart: .. altair-plot:: :chart-var-name: chart import altair as alt import pandas as pd df = pd.DataFrame({'x': range(5), 'y': [1, 3, 4, 3, 5]}) line = alt.Chart(df).mark_line().encode(x='x', y='y') points = alt.Chart(df).mark_point().encode(x='x', y='y') chart = line + points If we look at the resulting specification, we see that although the dataset was specified twice, only one copy of it is output in the spec: .. altair-plot:: :output: stdout from pprint import pprint pprint(chart.to_dict()) This consolidation of datasets is an extra bit of processing that is turned on by default in all renderers. If you would like to disable this dataset consolidation for any reason, you can do so by setting ``alt.data_transformers.consolidate_datasets = False``, or by using the ``enable()`` context manager to do it only temporarily: .. altair-plot:: :output: stdout with alt.data_transformers.enable(consolidate_datasets=False): pprint(chart.to_dict()) Notice that now the dataset is not specified within the top-level ``datasets`` attribute, but rather as values within the ``data`` attribute of each individual layer. This duplication of data is the reason that dataset consolidation is set to ``True`` by default. Built-in data transformers ~~~~~~~~~~~~~~~~~~~~~~~~~~ Altair includes a default set of data transformers with the following signatures. Raise a ``MaxRowsError`` if a Dataframe has more than ``max_rows`` rows:: limit_rows(data, max_rows=5000) Randomly sample a DataFrame (without replacement) before visualizing:: sample(data, n=None, frac=None) Convert a Dataframe to a separate ``.json`` file before visualization:: to_json(data, prefix='altair-data'): Convert a Dataframe to a separate ``.csv`` file before visualization:: to_csv(data, prefix='altair-data'): Convert a Dataframe to inline JSON values before visualization:: to_values(data): Piping ~~~~~~ Multiple data transformers can be piped together using ``pipe``:: from altair import limit_rows, to_values from toolz.curried import pipe pipe(data, limit_rows(10000), to_values) Managing data transformers ~~~~~~~~~~~~~~~~~~~~~~~~~~ Altair maintains a registry of data transformers, which includes a default data transformer that is automatically applied to all Dataframes before rendering. To see the registered transformers:: >>> import altair as alt >>> alt.data_transformers.names() ['default', 'json', 'csv'] The default data transformer is the following:: def default_data_transformer(data): return pipe(data, limit_rows, to_values) The ``json`` and ``csv`` data transformers will save a Dataframe to a temporary ``.json`` or ``.csv`` file before rendering. There are a number of performance advantages to these two data transformers: * The full dataset will not be saved in the notebook document. * The performance of the Vega-Lite/Vega JavaScript appears to be better for standalone JSON/CSV files than for inline values. There are disadvantages of the JSON/CSV data transformers: * The Dataframe will be exported to a temporary ``.json`` or ``.csv`` file that sits next to the notebook. * That notebook will not be able to re-render the visualization without that temporary file (or re-running the cell). In our experience, the performance improvement is significant enough that we recommend using the ``json`` data transformer for any large datasets:: alt.data_transformers.enable('json') We hope that others will write additional data transformers - imagine a transformer which saves the dataset to a JSON file on S3, which could be registered and enabled as:: alt.data_transformers.register('s3', lambda data: pipe(data, to_s3('mybucket'))) alt.data_transformers.enable('s3') Storing JSON data in a separate directory ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When creating many charts with ``alt.data_transformers.enable('json')`` the working directory can get a bit cluttered. To avoid this we can build a simple custom data transformer that stores all JSON files in separate directory.:: import os import altair as alt from toolz.curried import pipe def json_dir(data, data_dir='altairdata'): os.makedirs(data_dir, exist_ok=True) return pipe(data, alt.to_json(filename=data_dir + '/{prefix}-{hash}.{extension}') ) alt.data_transformers.register('json_dir', json_dir) alt.data_transformers.enable('json_dir', data_dir='mydata') After enabling this data transformer, the JSON files will be stored in what ``data_dir`` was set to when enabling the transformer or 'altairdata' by default. All we had to do was to prefix the ``filename`` argument of the ``alt.to_json`` function with our desired directory and make sure that the directory actually exists. altair-4.1.0/doc/user_guide/display_frontends.rst000066400000000000000000000231441364111050100221450ustar00rootroot00000000000000.. _displaying-charts: Displaying Altair Charts ======================== Altair produces `Vega-Lite`_ visualizations, which require a Javascript frontend to display the charts. Because notebook environments combine a Python backend with a Javascript frontend, many users find them convenient for using Altair. Altair charts work out-of-the-box on `Jupyter Notebook`_, `JupyterLab`_, `Zeppelin`_, and related notebook environments, so long as there is a web connection to load the required javascript libraries. Altair can also be used with various IDEs that are enabled to display Altair charts, and can be used offline in most platforms with an appropriate frontend extension enabled; details are below. .. _renderers: Altair's Renderer Framework --------------------------- Because different display systems have different requirements and constraints, Altair provides an API to switch between various *renderers* to tune Altair's chart representation. These can be chosen with the renderer registry in ``alt.renderers``. Some of the built-in renderers are: ``alt.renderers.enable('html')`` *(the default)* Output an HTML representation of the chart. The HTML renderer works in JupyterLab_, `Jupyter Notebook`_, `Zeppelin`_, and many related notebook frontends, as well as Jupyter ecosystem tools like nbviewer_ and nbconvert_ HTML output. It requires a web connection in order to load relevant Javascript libraries. ``alt.renderers.enable('mimebundle')`` *(default prior to Altair 4.0):* Output a vega-lite specific mimetype that can be interpreted by appropriate frontend extensions to display charts. It works with newer versions of JupyterLab_, nteract_, and `VSCode-Python`_, but does not work with the `Jupyter Notebook`_, or with tools like nbviewer_ and nbconvert_. Other renderers can be installed by third-party packages via Python's entrypoints_ system; see :ref:`renderer-api`. .. _display-jupyterlab: Displaying in JupyterLab ------------------------ JupyterLab 1.0 and later will work with Altair's default renderer with a live web connection: no render enable step is required. Optionally, for offline rendering in JupyterLab, you can use the mimetype renderer:: # Optional in JupyterLab: requires an up-to-date vega labextension. alt.renderers.enable('mimetype') and ensure you have the proper version of the vega labextension installed; for Altair 4 this can be installed with: .. code-block:: bash $ jupyter labextension install @jupyterlab/vega5-extension In JupyterLab version 2.0 or newer, this extension is installed by default, though the version available in the jupyterlab release often takes a few months to catch up with new Altair releases. .. _display-notebook: Displaying in the Jupyter Notebook ---------------------------------- The classic Jupyter Notebook will work with Altair's default renderer with a live web connection: no render enable step is required. Optionally, for offline rendering in Jupyter Notebook, you can use the notebook renderer:: # Optional in Jupyter Notebook: requires an up-to-date vega nbextension. alt.renderers.enable('notebook') This renderer is provided by the `ipyvega`_ notebook extension. which can be installed and enabled either using pip: .. code-block:: bash $ pip install vega or conda: .. code-block:: bash $ conda install vega --channel conda-forge In older versions of the notebook (<5.3) you need to additionally enable the extension: .. code-block:: bash $ jupyter nbextension install --sys-prefix --py vega .. _display-nteract: Displaying in nteract --------------------- nteract_ cannot display HTML outputs natively, and so Altair's default ``html`` renderer will not work. However, nteract natively includes vega and vega-lite mimetype-based rendering. To use Altair in nteract, ensure you are using a version that supports the vega-lite v4 mimetype, and use:: alt.renderers.enable('mimetype') .. _display-vscode: Displaying in VSCode -------------------- `VSCode-Python`_ includes a vega-lite renderer to display charts in-app via the vega-lite mimetype output. You can enable it by running:: alt.renderers.enable('mimetype') .. _display-general: Working in non-Notebook Environments ------------------------------------ The Vega-Lite specifications produced by Altair can be produced in any Python environment, but to render these specifications currently requires a javascript engine. For this reason, Altair works most seamlessly with the browser-based environments mentioned above. If you would like to render plots from another Python interface that does not have a built-in javascript engine, you'll need to somehow connect your charts to a second tool that can execute javascript. There are a few options available for this: Vega-enabled IDEs ~~~~~~~~~~~~~~~~~ Some IDEs have extensions that natively recognize and display Altair charts. Examples are: - The `VSCode-Python`_ extension, which supports native Altair and Vega-Lite chart display as of November 2019. - The Hydrogen_ project, which is built on nteract_ and renders Altair charts via the ``mimebundle`` renderer. Altair Viewer ~~~~~~~~~~~~~ For non-notebook IDEs, a useful companion is the `Altair Viewer`_ package, which provides an Altair renderer that works directly from any Python terminal. Start by installing the package:: $ pip install altair_viewer When enabled, this will serve charts via a local HTTP server and automatically open a browser window in which to view them, with subsequent charts displayed in the same window. If you are using an IPython-compatible terminal ``altair_viewer`` can be enabled via Altair's standard renderer framework:: import altair as alt alt.renderers.enable('altair_viewer') If you prefer to manually trigger chart display, you can use the built-in :meth:`Chart.show` method to manually trigger chart display:: import altair as alt # load a simple dataset as a pandas DataFrame from vega_datasets import data cars = data.cars() chart = alt.Chart(cars).mark_point().encode( x='Horsepower', y='Miles_per_Gallon', color='Origin', ).interactive() chart.show() This command will block the Python interpreter until the browser window containing the chart is closed. Manual ``save()`` and display ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you would prefer, you can manually save your chart as html and open it with a web browser. Once you have created your chart, run:: chart.save('filename.html') and use a web browser to open this file. .. _renderer-api: Renderer API ============ If you want to enable Altair rendering with behavior not provided by the built-in renderers, you can use the renderer API to create that custom behavior. In Altair, a renderer is any function that accepts a Vega-Lite or Vega visualization specification as a Python ``dict``, and returns a Python ``dict`` in Jupyter's `MIME Bundle format `_. The keys of the MIME bundle should be MIME types (such as ``image/png``) and the values should be the data for that MIME type (text, base64 encoded binary or JSON). The type signature of a renderer is thus:: def renderer(spec: dict) -> dict: ... Altair's default ``html`` rendeer returns a cross-platform HTML representation using the ``"text/html"`` mimetype; schematically it looks like this:: def default_renderer(spec): bundle = {'text/html': generate_html(spec)} metadata = {} return bundle, metadata Propertly-configured Jupyter frontends know how to interpret and display charts using custom vega-specific mimetypes; for example: * Vega-Lite 4.x: ``application/vnd.vegalite.v4+json`` * Vega 5.x: ``application/vnd.vega.v5+json`` Altair's ``mimetype`` renderer uses this mechanism to return the spec directly:: def default_renderer(spec): bundle = {} metadata = {} bundle['text/plain'] = '` bundle['application/vnd.vegalite.v4+json'] = spec return bundle, metadata If a renderer needs to do custom display logic that doesn't use Jupyter's display system, it can return an empty MIME bundle dict:: def non_jupyter_renderer(spec): # Custom display logic that uses the spec ... # Return empty MIME bundle return {} Altair offers an API to list the known renderers, register new ones and enable a given one. To return the registered renderers as a Python list:: >>> import altair as alt >>> alt.renderers.names() ['html', 'mimebundle', 'json', ...] To enable the JSON renderer, which results in a collapsible JSON tree view in JupyterLab/nteract:: >>> alt.renderers.enable('json') To register and enable a new renderer:: >>> alt.renderers.register('custom_renderer', custom_renderer) >>> alt.renderers.enable('custom_renderer') Renderers can also be registered using the `entrypoints`_ API of Python packages. For an example, see `ipyvega`_. .. _entrypoints: https://github.com/takluyver/entrypoints .. _ipyvega: https://github.com/vega/ipyvega/ .. _JupyterLab: http://jupyterlab.readthedocs.io/en/stable/ .. _nteract: https://nteract.io .. _nbconvert: https://nbconvert.readthedocs.io/ .. _nbviewer: https://nbviewer.jupyter.org/ .. _Altair Viewer: https://github.com/altair-viz/altair_viewer/ .. _Colab: https://colab.research.google.com .. _Hydrogen: https://github.com/nteract/hydrogen .. _Jupyter Notebook: https://jupyter-notebook.readthedocs.io/en/stable/ .. _Vega-Lite: http://vega.github.io/vega-lite .. _Vega: https://vega.github.io/vega/ .. _VSCode-Python: https://code.visualstudio.com/docs/python/python-tutorial .. _Zeppelin: https://zeppelin.apache.org/altair-4.1.0/doc/user_guide/ecosystem.rst000066400000000000000000000050751364111050100204340ustar00rootroot00000000000000.. _ecosystem: Altair Ecosystem ================ This is a list of projects related to or built on top of Altair. We hope to make it easier to find these projects by listing them here. If you know of a project that should be added, please let us know. altair_recipes_ --------------- altair-recipes provides a collection of ready-made statistical graphics for vega. See the `docs `__. .. List of links. .. _altair_recipes: https://github.com/piccolbo/altair_recipes gpdvega_ -------- gpdvega is a bridge between GeoPandas_, a geospatial extension of Pandas_, and Altair which allows to seamlessly chart geospatial data using altair. See the `docs `__. .. List of links. .. _gpdvega: https://github.com/iliatimofeev/gpdvega .. _GeoPandas: http://geopandas.org/ .. _Pandas: https://pandas.pydata.org/ nx_altair_ ---------- nx_altair is a library for drawing NetworkX_ graphs using Altair. It offers a similar draw API as NetworkX but returns Altair Charts instead. This allows users to apply Altair's rich interactive API to networks graphs. See the `docs `__. .. List of links. .. _nx_altair: https://github.com/Zsailer/nx_altair .. _NetworkX: https://networkx.github.io/ pdvega_ ------- pdvega is a library that allows you to quickly create interactive Vega-Lite_ plots from Pandas_ dataframes, using an API that is nearly identical to Pandas' built-in visualization tools, and designed for easy use within the Jupyter_ notebook. See the `docs `__. .. List of links. .. _pdvega: https://github.com/altair-viz/pdvega .. _Vega-Lite: https://vega.github.io/vega-lite/ .. _Jupyter: http://jupyter.org/ `Altair in R`_ -------------- Altair in R provides an R interface to the Altair Python package. See the `docs `__. .. List of links. .. _`Altair in R`: https://github.com/vegawidget/altair starborn_ --------- Starborn is a Python visualization library based on Vega and Altair that aims to be API-compatible with Seaborn_. Like Seaborn, it provides a high-level interface for drawing attractive statistical graphics. Thanks to the underlying libraries, it can also offer interactivity with in-browser panning and zooming. See the `docs `__. .. List of links. .. _starborn: https://github.com/PythonCharmers/starborn .. _Seaborn: https://seaborn.pydata.org/index.html altair-4.1.0/doc/user_guide/encoding.rst000066400000000000000000000612701364111050100202060ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-encoding: Encodings --------- The key to creating meaningful visualizations is to map *properties of the data* to *visual properties* in order to effectively communicate information. In Altair, this mapping of visual properties to data columns is referred to as an **encoding**, and is most often expressed through the :meth:`Chart.encode` method. For example, here we will visualize the cars dataset using four of the available encodings: ``x`` (the x-axis value), ``y`` (the y-axis value), ``color`` (the color of the marker), and ``shape`` (the shape of the point marker): .. altair-plot:: import altair as alt from vega_datasets import data cars = data.cars() alt.Chart(cars).mark_point().encode( x='Horsepower', y='Miles_per_Gallon', color='Origin', shape='Origin' ) For data specified as a DataFrame, Altair can automatically determine the correct data type for each encoding, and creates appropriate scales and legends to represent the data. .. _encoding-channels: Encoding Channels ~~~~~~~~~~~~~~~~~ Altair provides a number of encoding channels that can be useful in different circumstances; the following table summarizes them: Position Channels: ========== =================== ================================= =================================== Channel Altair Class Description Example ========== =================== ================================= =================================== x :class:`X` The x-axis value :ref:`gallery_scatter_tooltips` y :class:`Y` The y-axis value :ref:`gallery_scatter_tooltips` x2 :class:`X2` Second x value for ranges :ref:`gallery_errorbars_with_ci` y2 :class:`Y2` Second y value for ranges :ref:`gallery_line_with_ci` longitude :class:`Longitude` Longitude for geo charts :ref:`gallery_airports` latitude :class:`Latitude` Latitude for geo charts :ref:`gallery_airports` longitude2 :class:`Longitude2` Second longitude value for ranges N/A latitude2 :class:`Latitude2` Second latitude value for ranges N/A xError :class:`XError` The x-axis error value N/A yError :class:`YError` The y-axis error value N/A xError2 :class:`XError2` The second x-axis error value N/A yError2 :class:`YError2` The second y-axis error value N/A ========== =================== ================================= =================================== Mark Property Channels: ============= ====================== ============================== ========================================= Channel Altair Class Description Example ============= ====================== ============================== ========================================= color :class:`Color` The color of the mark :ref:`gallery_simple_heatmap` fill :class:`Fill` The fill for the mark N/A fillopacity :class:`FillOpacity` The opacity of the mark's fill N/A opacity :class:`Opacity` The opacity of the mark :ref:`gallery_horizon_graph` shape :class:`Shape` The shape of the mark N/A size :class:`Size` The size of the mark :ref:`gallery_table_bubble_plot_github` stroke :class:`Stroke` The stroke of the mark N/A strokeDash :class:`StrokeDash` The stroke dash style :ref:`gallery_multi_series_line` strokeOpacity :class:`StrokeOpacity` The opacity of the line N/A strokeWidth :class:`StrokeWidth` The width of the line N/A ============= ====================== ============================== ========================================= Text and Tooltip Channels: ======= ================ ======================== ========================================= Channel Altair Class Description Example ======= ================ ======================== ========================================= text :class:`Text` Text to use for the mark :ref:`gallery_scatter_with_labels` key :class:`Key` -- N/A tooltip :class:`Tooltip` The tooltip value :ref:`gallery_scatter_tooltips` ======= ================ ======================== ========================================= Hyperlink Channel: ======= ================ ======================== ========================================= Channel Altair Class Description Example ======= ================ ======================== ========================================= href :class:`Href` Hyperlink for points N/A ======= ================ ======================== ========================================= Level of Detail Channel: ======= ================ =============================== ========================================= Channel Altair Class Description Example ======= ================ =============================== ========================================= detail :class:`Detail` Additional property to group by :ref:`gallery_ranged_dot_plot` ======= ================ =============================== ========================================= Order Channel: ======= ================ ============================= ===================================== Channel Altair Class Description Example ======= ================ ============================= ===================================== order :class:`Order` Sets the order of the marks :ref:`gallery_connected_scatterplot` ======= ================ ============================= ===================================== Facet Channels: ======= ================ =============================================== ============================================= Channel Altair Class Description Example ======= ================ =============================================== ============================================= column :class:`Column` The column of a faceted plot :ref:`gallery_trellis_scatter_plot` row :class:`Row` The row of a faceted plot :ref:`gallery_beckers_barley_trellis_plot` facet :class:`Facet` The row and/or column of a general faceted plot :ref:`gallery_us_population_over_time_facet` ======= ================ =============================================== ============================================= .. _encoding-data-types: Encoding Data Types ~~~~~~~~~~~~~~~~~~~ The details of any mapping depend on the *type* of the data. Altair recognizes four main data types: ============ ============== ================================================ Data Type Shorthand Code Description ============ ============== ================================================ quantitative ``Q`` a continuous real-valued quantity ordinal ``O`` a discrete ordered quantity nominal ``N`` a discrete unordered category temporal ``T`` a time or date value geojson ``G`` a geographic shape ============ ============== ================================================ If types are not specified for data input as a DataFrame, Altair defaults to ``quantitative`` for any numeric data, ``temporal`` for date/time data, and ``nominal`` for string data, but be aware that these defaults are by no means always the correct choice! The types can either be expressed in a long-form using the channel encoding classes such as :class:`X` and :class:`Y`, or in short-form using the :ref:`Shorthand Syntax ` discussed below. For example, the following two methods of specifying the type will lead to identical plots: .. altair-plot:: alt.Chart(cars).mark_point().encode( x='Acceleration:Q', y='Miles_per_Gallon:Q', color='Origin:N' ) .. altair-plot:: alt.Chart(cars).mark_point().encode( alt.X('Acceleration', type='quantitative'), alt.Y('Miles_per_Gallon', type='quantitative'), alt.Color('Origin', type='nominal') ) The shorthand form, ``x="name:Q"``, is useful for its lack of boilerplate when doing quick data explorations. The long-form, ``alt.X('name', type='quantitative')``, is useful when doing more fine-tuned adjustments to the encoding, such as binning, axis and scale properties, or more. Specifying the correct type for your data is important, as it affects the way Altair represents your encoding in the resulting plot. .. _type-legend-scale: Effect of Data Type on Color Scales ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ As an example of this, here we will represent the same data three different ways, with the color encoded as a *quantitative*, *ordinal*, and *nominal* type, using three vertically-concatenated charts (see :ref:`vconcat-chart`): .. altair-plot:: base = alt.Chart(cars).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', ).properties( width=150, height=150 ) alt.vconcat( base.encode(color='Cylinders:Q').properties(title='quantitative'), base.encode(color='Cylinders:O').properties(title='ordinal'), base.encode(color='Cylinders:N').properties(title='nominal'), ) The type specification influences the way Altair, via Vega-Lite, decides on the color scale to represent the value, and influences whether a discrete or continuous legend is used. .. _type-axis-scale: Effect of Data Type on Axis Scales ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Similarly, for x and y axis encodings, the type used for the data will affect the scales used and the characteristics of the mark. For example, here is the difference between a ``quantitative`` and ``ordinal`` scale for an column that contains integers specifying a year: .. altair-plot:: pop = data.population.url base = alt.Chart(pop).mark_bar().encode( alt.Y('mean(people):Q', title='total population') ).properties( width=200, height=200 ) alt.hconcat( base.encode(x='year:Q').properties(title='year=quantitative'), base.encode(x='year:O').properties(title='year=ordinal') ) In altair, quantitative scales always start at zero unless otherwise specified, while ordinal scales are limited to the values within the data. Overriding the behavior of including zero in the axis, we see that even then the precise appearance of the marks representing the data are affected by the data type: .. altair-plot:: base.encode( alt.X('year:Q', scale=alt.Scale(zero=False) ) ) Because quantitative values do not have an inherent width, the bars do not fill the entire space between the values. This view also makes clear the missing year of data that was not immediately apparent when we treated the years as categories. This kind of behavior is sometimes surprising to new users, but it emphasizes the importance of thinking carefully about your data types when visualizing data: a visual encoding that is suitable for categorical data may not be suitable for quantitative data, and vice versa. .. _encoding-channel-options: Encoding Channel Options ~~~~~~~~~~~~~~~~~~~~~~~~ Each encoding channel allows for a number of additional options to be expressed; these can control things like axis properties, scale properties, headers and titles, binning parameters, aggregation, sorting, and many more. The particular options that are available vary by encoding type; the various options are listed below. The :class:`X` and :class:`Y` encodings accept the following options: .. altair-object-table:: altair.PositionFieldDef The :class:`Color`, :class:`Fill`, and :class:`Stroke` encodings accept the following options: .. altair-object-table:: altair.StringFieldDefWithCondition The :class:`Shape` encoding accepts the following options: .. altair-object-table:: altair.ShapeFieldDefWithCondition The :class:`FillOpacity`, :class:`Opacity`, :class:`Size`, :class:`StrokeOpacity`, and :class:`StrokeWidth` encodings accept the following options: .. altair-object-table:: altair.NumericFieldDefWithCondition The :class:`Row`, :class:`Column`, and :class:`Facet` encodings accept the following options: .. altair-object-table:: altair.FacetFieldDef The :class:`Text` and :class:`Tooltip` encodings accept the following options: .. altair-object-table:: altair.TextFieldDefWithCondition The :class:`Detail` and :class:`Key` encodings accept the following options: .. altair-object-table:: altair.FieldDefWithoutScale The :class:`Latitude` and :class:`Longitude` encodings accept the following options: .. altair-object-table:: altair.LatLongFieldDef The :class:`Latitude2`, :class:`Longitude2`, :class:`X2`, :class:`Y2`, :class:`XError`, :class:`YError`, :class:`XError2`, and :class:`YError2` encodings accept the following options: .. altair-object-table:: altair.SecondaryFieldDef The :class:`Href` encoding accepts the following options: .. altair-object-table:: altair.TextFieldDefWithCondition The :class:`Order` encoding accepts the following options: .. altair-object-table:: altair.OrderFieldDef .. _encoding-aggregates: Binning and Aggregation ~~~~~~~~~~~~~~~~~~~~~~~ Beyond simple channel encodings, Altair's visualizations are built on the concept of the database-style grouping and aggregation; that is, the `split-apply-combine `_ abstraction that underpins many data analysis approaches. For example, building a histogram from a one-dimensional dataset involves splitting data based on the bin it falls in, aggregating the results within each bin using a *count* of the data, and then combining the results into a final figure. In Altair, such an operation looks like this: .. altair-plot:: alt.Chart(cars).mark_bar().encode( alt.X('Horsepower', bin=True), y='count()' # could also use alt.Y(aggregate='count', type='quantitative') ) Notice here we use the shorthand version of expressing an encoding channel (see :ref:`shorthand-description`) with the ``count`` aggregation, which is the one aggregation that does not require a field to be specified. Similarly, we can create a two-dimensional histogram using, for example, the size of points to indicate counts within the grid (sometimes called a "Bubble Plot"): .. altair-plot:: alt.Chart(cars).mark_point().encode( alt.X('Horsepower', bin=True), alt.Y('Miles_per_Gallon', bin=True), size='count()', ) There is no need, however, to limit aggregations to counts alone. For example, we could similarly create a plot where the color of each point represents the mean of a third quantity, such as acceleration: .. altair-plot:: alt.Chart(cars).mark_circle().encode( alt.X('Horsepower', bin=True), alt.Y('Miles_per_Gallon', bin=True), size='count()', color='average(Acceleration):Q' ) In addition to ``count`` and ``average``, there are a large number of available aggregation functions built into Altair; they are listed in the following table: ========= =========================================================================== ===================================== Aggregate Description Example ========= =========================================================================== ===================================== argmin An input data object containing the minimum field value. N/A argmax An input data object containing the maximum field value. N/A average The mean (average) field value. Identical to mean. :ref:`gallery_layer_line_color_rule` count The total count of data objects in the group. :ref:`gallery_simple_heatmap` distinct The count of distinct field values. N/A max The maximum field value. :ref:`gallery_boxplot` mean The mean (average) field value. :ref:`gallery_scatter_with_layered_histogram` median The median field value :ref:`gallery_boxplot` min The minimum field value. :ref:`gallery_boxplot` missing The count of null or undefined field values. N/A q1 The lower quartile boundary of values. :ref:`gallery_boxplot` q3 The upper quartile boundary of values. :ref:`gallery_boxplot` ci0 The lower boundary of the bootstrapped 95% confidence interval of the mean. :ref:`gallery_sorted_error_bars_with_ci` ci1 The upper boundary of the bootstrapped 95% confidence interval of the mean. :ref:`gallery_sorted_error_bars_with_ci` stderr The standard error of the field values. N/A stdev The sample standard deviation of field values. N/A stdevp The population standard deviation of field values. N/A sum The sum of field values. :ref:`gallery_streamgraph` valid The count of field values that are not null or undefined. N/A values ?? N/A variance The sample variance of field values. N/A variancep The population variance of field values. N/A ========= =========================================================================== ===================================== .. _shorthand-description: Encoding Shorthands ~~~~~~~~~~~~~~~~~~~ For convenience, Altair allows the specification of the variable name along with the aggregate and type within a simple shorthand string syntax. This makes use of the type shorthand codes listed in :ref:`encoding-data-types` as well as the aggregate names listed in :ref:`encoding-aggregates`. The following table shows examples of the shorthand specification alongside the long-form equivalent: =================== ======================================================= Shorthand Equivalent long-form =================== ======================================================= ``x='name'`` ``alt.X('name')`` ``x='name:Q'`` ``alt.X('name', type='quantitative')`` ``x='sum(name)'`` ``alt.X('name', aggregate='sum')`` ``x='sum(name):Q'`` ``alt.X('name', aggregate='sum', type='quantitative')`` ``x='count():Q'`` ``alt.X(aggregate='count', type='quantitative')`` =================== ======================================================= .. _ordering-channels: Ordering marks ~~~~~~~~~~~~~~ The `order` option and :class:`Order` channel can sort how marks are drawn on the chart. For stacked marks, this controls the order of components of the stack. Here, the elements of each bar are sorted alphabetically by the name of the nominal data in the color channel. .. altair-plot:: import altair as alt from vega_datasets import data barley = data.barley() alt.Chart(barley).mark_bar().encode( x='variety:N', y='sum(yield):Q', color='site:N', order=alt.Order("site", sort="ascending") ) The order can be reversed by changing the sort option to `descending`. .. altair-plot:: import altair as alt from vega_datasets import data barley = data.barley() alt.Chart(barley).mark_bar().encode( x='variety:N', y='sum(yield):Q', color='site:N', order=alt.Order("site", sort="descending") ) The same approach works for other mark types, like stacked areas charts. .. altair-plot:: import altair as alt from vega_datasets import data barley = data.barley() alt.Chart(barley).mark_area().encode( x='variety:N', y='sum(yield):Q', color='site:N', order=alt.Order("site", sort="ascending") ) For line marks, the `order` channel encodes the order in which data points are connected. This can be useful for creating a scatterplot that draws lines between the dots using a different field than the x and y axes. .. altair-plot:: import altair as alt from vega_datasets import data driving = data.driving() alt.Chart(driving).mark_line(point=True).encode( alt.X('miles', scale=alt.Scale(zero=False)), alt.Y('gas', scale=alt.Scale(zero=False)), order='year' ) Sorting ~~~~~~~ Specific channels can take a :class:`sort` property which determines the order of the scale being used for the channel. There are a number of different sort options available: - ``sort='ascending'`` (Default) will sort the field's value in ascending order. for string data, this uses standard alphabetical order. - ``sort='descending'`` will sort the field's value in descending order - passing the name of an encoding channel to ``sort``, such as ``"x"`` or ``"y"``, allows for sorting by that channel. An optional minus prefix can be used for a descending sort. For example ``sort='-x'`` would sort by the x channel in descending order. - passing a list to ``sort`` allows you to explicitly set the order in which you would like the encoding to appear - passing a :class:`EncodingSortField` class to ``sort`` allows you to sort an axis by the value of some other field in the dataset. Here is an example of applying these five different sort approaches on the x-axis, using the barley dataset: .. altair-plot:: import altair as alt from vega_datasets import data barley = data.barley() base = alt.Chart(barley).mark_bar().encode( y='mean(yield):Q', color=alt.Color('mean(yield):Q', legend=None) ).properties(width=100, height=100) # Sort x in ascending order ascending = base.encode( alt.X(field='site', type='nominal', sort='ascending') ).properties( title='Ascending' ) # Sort x in descending order descending = base.encode( alt.X(field='site', type='nominal', sort='descending') ).properties( title='Descending' ) # Sort x in an explicitly-specified order explicit = base.encode( alt.X(field='site', type='nominal', sort=['Duluth', 'Grand Rapids', 'Morris', 'University Farm', 'Waseca', 'Crookston']) ).properties( title='Explicit' ) # Sort according to encoding channel sortchannel = base.encode( alt.X(field='site', type='nominal', sort='y') ).properties( title='By Channel' ) # Sort according to another field sortfield = base.encode( alt.X(field='site', type='nominal', sort=alt.EncodingSortField(field='yield', op='mean')) ).properties( title='By Yield' ) alt.concat( ascending, descending, explicit, sortchannel, sortfield, columns=3 ) The last two charts are the same because the default aggregation (see :ref:`encoding-aggregates`) is ``mean``. To highlight the difference between sorting via channel and sorting via field consider the following example where we don't aggregate the data: .. altair-plot:: import altair as alt from vega_datasets import data barley = data.barley() base = alt.Chart(barley).mark_point().encode( y='yield:Q', ).properties(width=200) # Sort according to encoding channel sortchannel = base.encode( alt.X(field='site', type='nominal', sort='y') ).properties( title='By Channel' ) # Sort according to another field sortfield = base.encode( alt.X(field='site', type='nominal', sort=alt.EncodingSortField(field='yield', op='min')) ).properties( title='By Min Yield' ) sortchannel | sortfield By passing a :class:`EncodingSortField` class to ``sort`` we have more control over the sorting process. Sorting Legends ^^^^^^^^^^^^^^^ While the above examples show sorting of axes by specifying ``sort`` in the :class:`X` and :class:`Y` encodings, legends can be sorted by specifying ``sort`` in the :class:`Color` encoding: .. altair-plot:: alt.Chart(barley).mark_rect().encode( alt.X('mean(yield):Q', sort='ascending'), alt.Y('site:N', sort='descending'), alt.Color('site:N', sort=['Morris', 'Duluth', 'Grand Rapids', 'University Farm', 'Waseca', 'Crookston'] ) ) Here the y-axis is sorted reverse-alphabetically, while the color legend is sorted in the specified order, beginning with ``'Morris'``. altair-4.1.0/doc/user_guide/faq.rst000066400000000000000000000167051364111050100171720ustar00rootroot00000000000000.. currentmodule:: altair .. _frequently-asked-questions: Frequently Asked Questions ========================== .. _faq-other-ides: Does Altair work with IPython Terminal/PyCharm/Spyder/ ----------------------------------------------------------------------- Altair can be used to create chart specifications with any frontend that executes Python code, but in order to *render* those charts requires connecting altair to an environment capable of executing the javascript code that turns the JSON specification into a visual chart. There are extensions included in JupyterLab, Jupyter Notebook, Colab, Kaggle kernels, VSCode, Hydrogen, and nteract that know how to automatically perform this rendering (see :ref:`installation` for details). For other frontends that don't have vega-lite rendering built-in, it is possible to work with Altair charts using the build-in :meth:`Chart.show` or :meth:`Chart.save` methods. For more information on these, see :ref:`display-general`. .. _faq-no-display: I tried to make a plot but it doesn't show up --------------------------------------------- There are two basic reasons that a chart might not show up: 1. You have not installed and/or enabled the appropriate renderer for your frontend, which means charts cannot be displayed. 2. You have inadvertently created an invalid chart, and there is a javascript error preventing it from being displayed. For details on how to trouble-shoot these kinds of display issues on various front-ends, see :ref:`display-troubleshooting`. .. _altair-faq-large-notebook: Why does Altair lead to such extremely large notebooks? ------------------------------------------------------- By design, Altair does not produce plots consisting of pixels, but plots consisting of data plus a visualization specification. As discussed in :ref:`user-guide-data`, this data can be specified in one of several ways, either via a pandas DataFrame, a file or URL, or a JSON data object. When you specify the data as a pandas DataFrame, this data is converted to JSON and included in its entirety in the plot spec. For example, here is a simple chart made from a dataframe with three rows of data: .. altair-plot:: :output: none import altair as alt import pandas as pd data = pd.DataFrame({'x': [1, 2, 3], 'y': [2, 1, 2]}) chart = alt.Chart(data).mark_line().encode( x='x', y='y' ) from pprint import pprint pprint(chart.to_dict()) .. code-block:: none {'$schema': 'https://vega.github.io/schema/vega-lite/v2.4.1.json', 'config': {'view': {'height': 300, 'width': 400}}, 'data': {'values': [{'x': 1, 'y': 2}, {'x': 2, 'y': 1}, {'x': 3, 'y': 2}]}, 'encoding': {'x': {'field': 'x', 'type': 'quantitative'}, 'y': {'field': 'y', 'type': 'quantitative'}}, 'mark': 'line'} The resulting specification includes a representation of the data converted to JSON format, and this specification is embedded in the notebook or web page where it can be used by Vega-Lite to render the plot. As the size of the data grows, this explicit data storage can lead to some very large specifications, and by extension, some very large notebooks or web pages. The best way around this is to store the data in an external file, and pass it to the chart by URL. You can do this manually if you wish: .. altair-plot:: :output: none url = 'data.json' data.to_json(url, orient='records') chart = alt.Chart(url).mark_line().encode( x='x:Q', y='y:Q' ) pprint(chart.to_dict()) .. code-block:: none {'$schema': 'https://vega.github.io/schema/vega-lite/v2.4.1.json', 'config': {'view': {'height': 300, 'width': 400}}, 'data': {'url': 'data.json'}, 'encoding': {'x': {'field': 'x', 'type': 'quantitative'}, 'y': {'field': 'y', 'type': 'quantitative'}}, 'mark': 'line'} For other strategies for effectively working with large datasets in Altair, see :ref:`altair-faq-max-rows` With this type of approach, the data is now stored as an external file rather than being embedded in the notebook, leading to much more compact plot specifications. The disadvantage, of course, is a loss of portability: if the notebook is ever moved, the data file must accompany it or the plot may not display. .. _altair-faq-max-rows: MaxRowsError: How can I plot Large Datasets? -------------------------------------------- If you try to create a plot that will directly embed a dataset with more than 5000 rows, you will see a ``MaxRowsError``: .. altair-plot:: :output: none data = pd.DataFrame({'x': range(10000)}) alt.Chart(data).mark_line() .. code-block:: none MaxRowsError: The number of rows in your dataset is greater than the maximum allowed (5000). For information on how to plot larger datasets in Altair, see the documentation. This is not because Altair cannot handle larger datasets, but it is because it is important for the user to think carefully about how large datasets are handled. As noted above in :ref:`altair-faq-large-notebook`, it is quite easy to end up with very large notebooks if you make many visualizations of a large dataset, and this error is a way of preventing that. You can get around it in a few ways: Disabling MaxRowsError ~~~~~~~~~~~~~~~~~~~~~~ If you are certain you would like to embed your dataset within the visualization specification, you can disable the ``MaxRows`` check with the following:: alt.data_transformers.disable_max_rows() If you choose this route, please be careful: if you are making multiple plots with the dataset in a particular notebook, the notebook will grow very large and performance may suffer. Passing Data by URL ~~~~~~~~~~~~~~~~~~~ A better solution when working with large datasets is to not embed the data in the notebook, but rather store it separately pass it to the chart by URL. This not only addresses the issue of large notebooks, but also leads to better interactivity performance with large datasets. Vega Datasets ^^^^^^^^^^^^^ If you are working with one of the vega datasets, you can pass the data by URL using the ``url`` attribute: .. code-block:: python from vega_datasets import data source = data.cars.url alt.Chart(source).mark_point() # etc. Local Filesystem ^^^^^^^^^^^^^^^^ You may also save data to a local filesystem and reference the data by file path. Altair has a ``JSON`` data transformer that will do this transparently when enabled:: alt.data_transformers.enable('json') With this data transformer enabled, each time you make a plot the data will be serialized to disk and referenced by URL, rather than being embedded in the notebook output. You may also manually save the data to file and reference it that way (see :ref:`altair-faq-large-notebook`). There is a similar CSV data transformer, but it must be used more carefully because CSV does not preserve data types as JSON does. Note that the filesystem approach may not work on some cloud-based Jupyter notebook services. Local Data Server ^^^^^^^^^^^^^^^^^ It is also possible to serve your data from a local threaded server to avoid writing datasets to disk. The `altair_data_server `_ package makes this easy. First install the package: .. code-block:: none pip install altair_data_server And then enable the data transformer:: import altair as alt alt.data_transformers.enable('data_server') Note that this approach may not work on some cloud-based Jupyter notebook services. altair-4.1.0/doc/user_guide/importing.rst000066400000000000000000000022201364111050100204160ustar00rootroot00000000000000.. _importing: Importing Vega & Vega-Lite Versions =================================== The main Altair API is based on version 2.X of `Vega-Lite`_. The core of the API, found in the ``altair.vegalite.v2.schema`` module, is programmatically generated from the Vega-Lite schema. Altair additionally provides wrappers for several other schemas: - Vega-Lite 1.X in ``altair.vegalite.v1`` - Vega 2.X in ``altair.vega.v2`` - Vega 3.X in ``altair.vega.v3`` So, for example, if you would like to create Altair plots targeting Vega-Lite version 1, you can use:: import altair.vegalite.v1 as alt and then proceed to use the Altair version 1 API. .. note:: We strongly recommend all users transition to Vega-Lite 2.x and Vega 3.x. These versions support many new features, are more stable, and Altair 2.0 works best with them. Because Altair has focused primarily on the vega-lite API, the vega wrappers are far less developed than the vega-lite wrappers, though it is possible to create Vega plots using a very low-level Python interface that mirrors the schema itself. .. _Vega-Lite: http://vega.github.io/vega-lite/ .. _Vega: http://vega.github.io/vega/ altair-4.1.0/doc/user_guide/interactions.rst000066400000000000000000000432131364111050100211170ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-interactions: Bindings, Selections, Conditions: Making Charts Interactive =========================================================== One of the unique features of Altair, inherited from Vega-Lite, is a declarative grammar of not just visualization, but *interaction*. There are three core concepts of this grammar: - the :func:`selection` object which captures interactions from the mouse or through other inputs to effect the chart. Inputs can either be events like mouse clicks or drags. Inputs can also be elements like a drop-down, radio button or slider. Selections can be used alone but if you want to change any element of your chart you will need to connect them to a *condition*. - the :func:`condition` function takes the selection input and changes an element of the chart based on that input. - the ``bind`` property of a selection which establishes a two-way binding between the selection and an input element of your chart. Interactive charts can use one or more of these elements to create rich interactivity between the viewer and the data. Selections: Building Blocks of Interactions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Selections in Altair come in a few flavors, and they can be *bound* to particular charts or sub-charts in your visualization, then referenced in other parts of the visualization. Example: Linked-Brush Scatter-Plot ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ As a motivation, let's create a simple chart and then add some selections to it. Here is a simple scatter-plot created from the ``cars`` dataset: .. altair-plot:: import altair as alt from vega_datasets import data cars = data.cars.url alt.Chart(cars).mark_point().encode( x='Miles_per_Gallon:Q', y='Horsepower:Q', color='Origin:N' ) First we'll create an interval selection using the :func:`selection_interval` function: .. altair-plot:: :output: none brush = alt.selection_interval() # selection of type "interval" We can now bind this brush to our chart by setting the ``selection`` property: .. altair-plot:: alt.Chart(cars).mark_point().encode( x='Miles_per_Gallon:Q', y='Horsepower:Q', color='Origin:N' ).add_selection( brush ) The result above is a chart that allows you to click and drag to create a selection region, and to move this region once the region is created. Conditions: Making the chart respond ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This is neat, but the selection doesn't actually *do* anything yet. To use this selection, we need to reference it in some way within the chart. Here, we will use the :func:`condition` function to create a conditional color encoding: we'll tie the color to the ``"Origin"`` column for points in the selection, and set the color to ``"lightgray"`` for points outside the selection: .. altair-plot:: alt.Chart(cars).mark_point().encode( x='Miles_per_Gallon:Q', y='Horsepower:Q', color=alt.condition(brush, 'Origin:N', alt.value('lightgray')) ).add_selection( brush ) As you can see, with this simple change, the color of the points responds to the selection. This approach becomes even more powerful when the selection behavior is tied across multiple views of the data within a compound chart. For example, here we create a ``chart`` object using the same code as above, and horizontally concatenate two versions of this chart: one with the x-encoding tied to ``"Acceleration"``, and one with the x-encoding tied to ``"Miles_per_Gallon"`` .. altair-plot:: chart = alt.Chart(cars).mark_point().encode( y='Horsepower:Q', color=alt.condition(brush, 'Origin:N', alt.value('lightgray')) ).properties( width=250, height=250 ).add_selection( brush ) chart.encode(x='Acceleration:Q') | chart.encode(x='Miles_per_Gallon:Q') Because both copies of the chart reference the same selection object, the renderer ties the selections together across panels, leading to a dynamic display that helps you gain insight into the relationships within the dataset. Each selection type has attributes through which its behavior can be customized; for example we might wish for our brush to be tied only to the ``"x"`` encoding to emphasize that feature in the data. We can modify the brush definition, and leave the rest of the code unchanged: .. altair-plot:: brush = alt.selection_interval(encodings=['x']) chart = alt.Chart(cars).mark_point().encode( y='Horsepower:Q', color=alt.condition(brush, 'Origin:N', alt.value('lightgray')) ).properties( width=250, height=250 ).add_selection( brush ) chart.encode(x='Acceleration:Q') | chart.encode(x='Miles_per_Gallon:Q') Selection Types: Interval, Single, Multi ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ With this interesting example under our belt, let's take a more systematic look at some of the types of selections available in Altair. For simplicity, we'll use a common chart in all the following examples; a simple heat-map based on the ``cars`` dataset. For convenience, let's write a quick Python function that will take a selection object and create a chart with the color of the chart elements linked to this selection: .. altair-plot:: :output: none def make_example(selector): cars = data.cars.url return alt.Chart(cars).mark_rect().encode( x="Cylinders:O", y="Origin:N", color=alt.condition(selector, 'count()', alt.value('lightgray')) ).properties( width=300, height=180 ).add_selection( selector ) Next we'll use this function to demonstrate the properties of various selections. Interval Selections ^^^^^^^^^^^^^^^^^^^ An *interval* selection allows you to select chart elements by clicking and dragging. You can create such a selection using the :func:`selection_interval` function: .. altair-plot:: interval = alt.selection_interval() make_example(interval) As you click and drag on the plot, you'll find that your mouse creates a box that can be subsequently moved to change the selection. The :func:`selection_interval` function takes a few additional arguments; for example we can bind the interval to only the x-axis, and set it such that the empty selection contains none of the points: .. altair-plot:: interval_x = alt.selection_interval(encodings=['x'], empty='none') make_example(interval_x) A special case of an interval selection is when the interval is bound to the chart scales; this is how Altair plots can be made interactive: .. altair-plot:: scales = alt.selection_interval(bind='scales') alt.Chart(cars).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color='Origin:N' ).add_selection( scales ) Because this is such a common pattern, Altair provides the :meth:`Chart.interactive` method which creates such a selection more concisely. Single Selections ^^^^^^^^^^^^^^^^^ A *single* selection allows you to select a single chart element at a time using mouse actions. By default, points are selected on click: .. altair-plot:: single = alt.selection_single() make_example(single) By changing some arguments, we can select points on mouseover rather than on click. We can also set the ``nearest`` flag to ``True`` so that the nearest point is highlighted: .. altair-plot:: single_nearest = alt.selection_single(on='mouseover', nearest=True) make_example(single_nearest) Multiple Selections ^^^^^^^^^^^^^^^^^^^ A *multi* selection is similar to a *single* selection, but it allows for multiple chart objects to be selected at once. By default, chart elements can be added to and removed from the selection by clicking on them while holding the *shift* key: .. altair-plot:: multi = alt.selection_multi() make_example(multi) In addition to the options seen in :func:`selection_single`, the multi selection accepts the ``toggle`` parameter, which controls whether points can be removed from the selection once they are added. For example, here is a plot where you can "paint" the chart objects by hovering over them with your mouse: .. altair-plot:: multi_mouseover = alt.selection_multi(on='mouseover', toggle=False, empty='none') make_example(multi_mouseover) Composing Multiple Selections ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Altair also supports combining multiple selections using the ``&``, ``|`` and ``~`` for respectively ``AND``, ``OR`` and ``NOT`` logical composition operands. In the following example there are two people who can make an interval selection in the chart. The person Alex makes a selection box when the alt-key (macOS: option-key) is selected and Morgan can make a selection box when the shift-key is selected. We use the alt.Brushconfig() to give the selection box of Morgan a different style. Now, we color the rectangles when they fall within Alex's or Morgan's selection. .. altair-plot:: alex = alt.selection_interval( on="[mousedown[event.altKey], mouseup] > mousemove", name='alex' ) morgan = alt.selection_interval( on="[mousedown[event.shiftKey], mouseup] > mousemove", mark=alt.BrushConfig(fill="#fdbb84", fillOpacity=0.5, stroke="#e34a33"), name='morgan' ) alt.Chart(cars).mark_rect().encode( x='Cylinders:O', y='Origin:O', color=alt.condition(alex | morgan, 'count()', alt.ColorValue("grey")) ).add_selection( alex, morgan ).properties( width=300, height=180 ) With these operators, selections can be combined in arbitrary ways: - ``~(alex & morgan)``: to select the rectangles that fall outside Alex's and Morgan's selections. - ``alex | ~morgan``: to select the rectangles that fall within Alex's selection or outside the selection of Morgan Selection Targets: Fields and Encodings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ For any but the simplest selections, the user needs to think about exactly what is targeted by the selection, and this can be controlled with either the ``fields`` or ``encodings`` arguments. These control what data properties are used to determine which points are part of the selection. For example, here we create a small chart that acts as an interactive legend, by targeting the Origin field using ``fields=['Origin']``. Clicking on points in the upper-left plot (the legend) will propagate a selection for all points with a matching ``Origin``. .. altair-plot:: selection = alt.selection_multi(fields=['Origin']) color = alt.condition(selection, alt.Color('Origin:N', legend=None), alt.value('lightgray')) scatter = alt.Chart(cars).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color=color, tooltip='Name:N' ) legend = alt.Chart(cars).mark_point().encode( y=alt.Y('Origin:N', axis=alt.Axis(orient='right')), color=color ).add_selection( selection ) scatter | legend The above could be equivalently replace ``fields=['Origin']`` with ``encodings=['color']``, because in this case the chart maps ``color`` to ``'Origin'``. Similarly, we can specify multiple fields and/or encodings that must be matched in order for a datum to be included in a selection. For example, we could modify the above chart to create a two-dimensional clickable legend that will select points by both Origin and number of cylinders: .. altair-plot:: selection = alt.selection_multi(fields=['Origin', 'Cylinders']) color = alt.condition(selection, alt.Color('Origin:N', legend=None), alt.value('lightgray')) scatter = alt.Chart(cars).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color=color, tooltip='Name:N' ) legend = alt.Chart(cars).mark_rect().encode( y=alt.Y('Origin:N', axis=alt.Axis(orient='right')), x='Cylinders:O', color=color ).add_selection( selection ) scatter | legend By fine-tuning the behavior of selections in this way, they can be used to create a wide variety of linked interactive chart types. Binding: Adding Data Driven Inputs ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ With an understanding of the selection types and conditions, you can now add data-driven input elements to the charts using the ``bind`` option. As specified by `Vega-lite binding `_, selections can be bound two-ways: 1. Single selections can be bound directly to an input elements. *For example, a radio button.* 2. Interval selections which can be bound to scale. *for example, zooming in on a map.* Input Element Binding ^^^^^^^^^^^^^^^^^^^^^ With single selections, an input element can be added to the chart to establish a binding between the input and the selection. For instance, using our example from above a dropdown can be used to highlight cars from a specific ``origin`` : .. altair-plot:: input_dropdown = alt.binding_select(options=['Europe','Japan','USA']) selection = alt.selection_single(fields=['Origin'], bind=input_dropdown, name='Country of ') color = alt.condition(selection, alt.Color('Origin:N', legend=None), alt.value('lightgray')) alt.Chart(cars).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color=color, tooltip='Name:N' ).add_selection( selection ) The above example shows all three elements at work. The :input_dropdown: is :bind: to the :selection: which is called from the :condition: encoded through the data. The following are the input elements supported in vega-lite: ========================= =========================================================================== =============================================== Input Element Description Example ========================= =========================================================================== =============================================== :class:`binding_checkbox` Renders as checkboxes allowing for multiple selections of items. :ref:`gallery_multiple_interactions` :class:`binding_radio` Radio buttons that force only a single selection :ref:`gallery_multiple_interactions` :class:`binding_select` Drop down box for selecting a single item from a list :ref:`gallery_multiple_interactions` :class:`binding_range` Shown as a slider to allow for selection along a scale. :ref:`gallery_us_population_over_time` ========================= =========================================================================== =============================================== Bindings and input elements can also be used to filter data on the client side. Reducing noise in the chart and allowing the user to see just certain selected elements: .. altair-plot:: input_dropdown = alt.binding_select(options=['Europe','Japan','USA']) selection = alt.selection_single(fields=['Origin'], bind=input_dropdown, name='Country of ') color = alt.condition(selection, alt.Color('Origin:N', legend=None), alt.value('lightgray')) alt.Chart(cars).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color='Origin:N', tooltip='Name:N' ).add_selection( selection ).transform_filter( selection ) Scale Binding ^^^^^^^^^^^^^ With interval selections, the ``bind`` property can be set to the value of ``"scales"``. In these cases, the binding will automatically respond to the panning and zooming along the chart: .. altair-plot:: selection = alt.selection_interval(bind='scales') alt.Chart(cars).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color='Origin:N', tooltip='Name:N' ).add_selection( selection ) Selection Values in Expressions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Selection values can be accessed directly and used in expressions that affect the chart. For example, here we create a slider to choose a cutoff value, and color points based on whether they are smaller or larger than the value: .. altair-plot:: import altair as alt import pandas as pd import numpy as np rand = np.random.RandomState(42) df = pd.DataFrame({ 'xval': range(100), 'yval': rand.randn(100).cumsum() }) slider = alt.binding_range(min=0, max=100, step=1, name='cutoff:') selector = alt.selection_single(name="SelectorName", fields=['cutoff'], bind=slider, init={'cutoff': 50}) alt.Chart(df).mark_point().encode( x='xval', y='yval', color=alt.condition( alt.datum.xval < selector.cutoff, alt.value('red'), alt.value('blue') ) ).add_selection( selector ) Selector values can be similarly used anywhere that expressions are valid, for example, in a :ref:`user-guide-calculate-transform` or a :ref:`user-guide-filter-transform`. Further Examples ~~~~~~~~~~~~~~~~ Now that you understand the basics of Altair selections and bindings, you might wish to look through the :ref:`gallery-category-Interactive Charts` section of the example gallery for ideas about how they can be applied to more interesting charts. For more information on how to fine-tune selections, including specifying other mouse and keystroke options, see the `Vega-Lite Selection documentation `_. altair-4.1.0/doc/user_guide/internals.rst000066400000000000000000000207431364111050100204170ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-internals: Altair Internals: Understanding the Library =========================================== This section will provide some details about how the Altair API relates to the Vega-Lite visualization specification, and how you can use that knowledge to use the package more effectively. First of all, it is important to realize that when stripped down to its core, Altair itself cannot render visualizations. Altair is an API that does one very well-defined thing: - **Altair provides a Python API for generating validated Vega-Lite specifications** That's it. In order to take those specifications and turn them into actual visualizations requires a frontend that is correctly set up, but strictly speaking that rendering is generally not controlled by the Altair package. Altair chart to Vega-Lite Spec ------------------------------ Since Altair is fundamentally about constructing chart specifications, the central functionality of any chart object are the :meth:`~Chart.to_dict` and :meth:`~Chart.to_json` methods, which output the chart specification as a Python dict or JSON string, respectively. For example, here is a simple scatter chart, from which we can output the JSON representation: .. altair-plot:: :output: stdout import altair as alt from vega_datasets import data chart = alt.Chart(data.cars.url).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color='Origin:N', ).configure_view( continuousHeight=300, continuousWidth=400, ) print(chart.to_json(indent=2)) Before returning the dict or JSON output, Altair validates it against the `Vega-Lite schema `_ using the `jsonschema `_ package. The Vega-Lite schema defines valid attributes and values that can appear within the specification of a Vega-Lite chart. With the JSON schema in hand, it can then be passed to a library such as `Vega-Embed `_ that knows how to read the specification and render the chart that it describes, and the result is the following visualization: .. altair-plot:: :hide-code: chart Whenever you use Altair within JupyterLab, Jupyter notebook, or other frontends, it is frontend extensions that extract the JSON output from the Altair chart object and pass that specification along to the appropriate rendering code. Altair's Low-Level Object Structure ----------------------------------- The standard API methods used in Altair (e.g. :meth:`~Chart.mark_point`, :meth:`~Chart.encode`, ``configure_*()``, ``transform_*()``, etc.) are higher-level convenience functions that wrap the low-level API. That low-level API is essentially a Python object hierarchy that mirrors that of the JSON schema definition. For example, we can choose to avoid the convenience methods and rather construct the above chart using these low-level object types directly: .. altair-plot:: alt.Chart( data=alt.UrlData( url='https://vega.github.io/vega-datasets/data/cars.json' ), mark='point', encoding=alt.FacetedEncoding( x=alt.PositionFieldDef( field='Horsepower', type='quantitative' ), y=alt.PositionFieldDef( field='Miles_per_Gallon', type='quantitative' ), color=alt.StringFieldDefWithCondition( field='Origin', type='nominal' ) ), config=alt.Config( view=alt.ViewConfig( continuousHeight=300, continuousWidth=400 ) ) ) This low-level approach is much more verbose than the typical idiomatic approach to creating Altair charts, but it makes much more clear the mapping between Altair's python object structure and Vega-Lite's schema definition structure. One of the nice features of Altair is that this low-level object hierarchy is not constructed by hand, but rather *programmatically generated* from the Vega-Lite schema, using the ``generate_schema_wrapper.py`` script that you can find in `Altair's repository `_. This auto-generation of code propagates descriptions from the vega-lite schema into the Python class docstrings, from which the `API Reference `_ within Altair's documentation are in turn automatically generated. This means that as the Vega-Lite schema evolves, Altair can very quickly be brought up-to-date, and only the higher-level chart methods need to be updated by hand. Converting Vega-Lite to Altair ------------------------------ With this knowledge in mind, and with a bit of practice, it is fairly straightforward to construct an Altair chart from a Vega-Lite spec. For example, consider the `Simple Bar Chart `_ example from the Vega-Lite documentation, which has the following JSON specification:: { "$schema": "https://vega.github.io/schema/vega-lite/v4.json", "description": "A simple bar chart with embedded data.", "data": { "values": [ {"a": "A","b": 28}, {"a": "B","b": 55}, {"a": "C","b": 43}, {"a": "D","b": 91}, {"a": "E","b": 81}, {"a": "F","b": 53}, {"a": "G","b": 19}, {"a": "H","b": 87}, {"a": "I","b": 52} ] }, "mark": "bar", "encoding": { "x": {"field": "a", "type": "ordinal"}, "y": {"field": "b", "type": "quantitative"} } } At the lowest level, we can use the :meth:`~Chart.from_json` class method to construct an Altair chart object from this string of Vega-Lite JSON: .. altair-plot:: import altair as alt alt.Chart.from_json(""" { "$schema": "https://vega.github.io/schema/vega-lite/v4.json", "description": "A simple bar chart with embedded data.", "data": { "values": [ {"a": "A","b": 28}, {"a": "B","b": 55}, {"a": "C","b": 43}, {"a": "D","b": 91}, {"a": "E","b": 81}, {"a": "F","b": 53}, {"a": "G","b": 19}, {"a": "H","b": 87}, {"a": "I","b": 52} ] }, "mark": "bar", "encoding": { "x": {"field": "a", "type": "ordinal"}, "y": {"field": "b", "type": "quantitative"} } } """) Likewise, if you have the Python dictionary equivalent of the JSON string, you can use the :meth:`~Chart.from_dict` method to construct the chart object: .. altair-plot:: import altair as alt alt.Chart.from_dict({ "$schema": "https://vega.github.io/schema/vega-lite/v4.json", "description": "A simple bar chart with embedded data.", "data": { "values": [ {"a": "A","b": 28}, {"a": "B","b": 55}, {"a": "C","b": 43}, {"a": "D","b": 91}, {"a": "E","b": 81}, {"a": "F","b": 53}, {"a": "G","b": 19}, {"a": "H","b": 87}, {"a": "I","b": 52} ] }, "mark": "bar", "encoding": { "x": {"field": "a", "type": "ordinal"}, "y": {"field": "b", "type": "quantitative"} } }) With a bit more effort and some judicious copying and pasting, we can manually convert this into more idiomatic Altair code for the same chart, including constructing a Pandas dataframe from the data values: .. altair-plot:: import altair as alt import pandas as pd data = pd.DataFrame.from_records([ {"a": "A","b": 28}, {"a": "B","b": 55}, {"a": "C","b": 43}, {"a": "D","b": 91}, {"a": "E","b": 81}, {"a": "F","b": 53}, {"a": "G","b": 19}, {"a": "H","b": 87}, {"a": "I","b": 52} ]) alt.Chart(data).mark_bar().encode( x='a:O', y='b:Q' ) The key is to realize that ``"encoding"`` properties are usually set using the :meth:`~Chart.encode` method, encoding types are usually computed from short-hand type codes, ``"transform"`` and ``"config"`` properties come from the ``transform_*()`` and ``configure_*()`` methods, and so on. This approach is the process by which Altair contributors constructed many of the initial examples in the `Altair Example Gallery `_, drawing inspiration from the `Vega-Lite Example Gallery `_. Becoming familiar with the mapping between Altair and Vega-Lite at this level is useful in making use of the Vega-Lite documentation in places where Altair's documentation is weak or incomplete. altair-4.1.0/doc/user_guide/marks.rst000066400000000000000000000142361364111050100175350ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-mark: Marks ----- We saw in :ref:`user-guide-encoding` that the :meth:`~Chart.encode` method is used to map columns to visual attributes of the plot. The ``mark`` property is what specifies how exactly those attributes should be represented on the plot. Altair provides a number of basic mark properties: ========== ============================ =================================================== ==================================== Mark Name Method Description Example ========== ============================ =================================================== ==================================== area :meth:`~Chart.mark_area` A filled area plot. :ref:`gallery_simple_stacked_area_chart` bar :meth:`~Chart.mark_bar` A bar plot. :ref:`gallery_simple_bar_chart` circle :meth:`~Chart.mark_circle` A scatter plot with filled circles. :ref:`gallery_one_dot_per_zipcode` geoshape :meth:`~Chart.mark_geoshape` A geographic shape :ref:`gallery_choropleth` image :meth:`~Chart.mark_image` A scatter plot with image markers. :ref:`user-guide-image-mark` line :meth:`~Chart.mark_line` A line plot. :ref:`gallery_simple_line_chart` point :meth:`~Chart.mark_point` A scatter plot with configurable point shapes. :ref:`gallery_scatter_linked_brush` rect :meth:`~Chart.mark_rect` A filled rectangle, used for heatmaps :ref:`gallery_simple_heatmap` rule :meth:`~Chart.mark_rule` A vertical or horizontal line spanning the axis. :ref:`gallery_candlestick_chart` square :meth:`~Chart.mark_square` A scatter plot with filled squares. N/A text :meth:`~Chart.mark_text` A scatter plot with points represented by text. :ref:`gallery_bar_chart_with_labels` tick :meth:`~Chart.mark_tick` A vertical or horizontal tick mark. :ref:`gallery_strip_plot` ========== ============================ =================================================== ==================================== In addition, Altair provides the following compound marks: ========== ============================== ================================ ================================== Mark Name Method Description Example ========== ============================== ================================ ================================== box plot :meth:`~Chart.mark_boxplot` A box plot. :ref:`gallery_boxplot` error band :meth:`~Chart.mark_errorband` A continuous band around a line. :ref:`gallery_line_with_ci` error bar :meth:`~Chart.mark_errorbar` An errorbar around a point. :ref:`gallery_errorbars_with_ci` ========== ============================== ================================ ================================== In Altair, marks can be most conveniently specified by the ``mark_*`` methods of the Chart object, which take optional keyword arguments that are passed to :class:`MarkDef` to configure the look of the marks. For example, the following uses :meth:`~Chart.mark_circle` with additional arguments to represent points as red semi-transparent filled circles: .. altair-plot:: import altair as alt from vega_datasets import data url = data.cars.url alt.Chart(url).mark_circle( color='red', opacity=0.3 ).encode( x='Horsepower:Q', y='Miles_per_Gallon:Q' ) .. _user-guide-image-mark: Image Mark ~~~~~~~~~~ The image mark, unlike other simple marks, requires the mark to include a ``url`` encoding, which specifies the PNG to use for the image: .. altair-plot:: import altair as alt import pandas as pd source = pd.DataFrame.from_records([ {"x": 0.5, "y": 0.5, "img": "https://vega.github.io/vega-datasets/data/ffox.png"}, {"x": 1.5, "y": 1.5, "img": "https://vega.github.io/vega-datasets/data/gimp.png"}, {"x": 2.5, "y": 2.5, "img": "https://vega.github.io/vega-datasets/data/7zip.png"} ]) alt.Chart(source).mark_image( width=50, height=50 ).encode( x='x', y='y', url='img' ) .. _user-guide-compound-marks: Compound Marks ~~~~~~~~~~~~~~ BoxPlot ^^^^^^^ The compound mark :meth:`~Chart.mark_boxplot` can be used to create a boxplot without having to specify each part of the plot (box, whiskers, outliers) separately. .. altair-plot:: import altair as alt from vega_datasets import data source = data.population.url alt.Chart(source).mark_boxplot().encode( y='people:Q' ).properties( width=200, height=300 ) To create a side-by-side boxplot, simply encode the group column on the other axis. .. altair-plot:: import altair as alt from vega_datasets import data source = data.population.url alt.Chart(source).mark_boxplot().encode( x='age:O', y='people:Q' ) Note that the default behavior is to display outliers as points, where an outlier is defined as any point more than 1.5 IQRs from the box. Users can adjust this threshold using the ``extent`` property of the mark. .. altair-plot:: import altair as alt from vega_datasets import data source = data.population.url alt.Chart(source).mark_boxplot(extent=3.0).encode( x='age:O', y='people:Q' ) The outliers can be ignored completely using ``extent='max-min'`` .. altair-plot:: import altair as alt from vega_datasets import data source = data.population.url alt.Chart(source).mark_boxplot(extent='min-max').encode( x='age:O', y='people:Q' ) Mark Properties ~~~~~~~~~~~~~~~ As seen in the last two examples, additional arguments to ``mark_*()`` methods are passed along to an associated :class:`MarkDef` instance, which supports the following attributes: .. altair-object-table:: altair.MarkDef Marks can also be configured globally using chart-level configurations; see :ref:`config-mark` for details. altair-4.1.0/doc/user_guide/saving_charts.rst000066400000000000000000000120731364111050100212500ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-saving: Saving Altair Charts -------------------- Altair chart objects have a :meth:`Chart.save` method which allows charts to be saved in a variety of formats. .. saving-json: JSON format ~~~~~~~~~~~ The fundamental chart representation output by Altair is a JSON string format; one of the core methods provided by Altair is :meth:`Chart.to_json`, which returns a JSON string that represents the chart content. Additionally, you can save a chart to a JSON file using :meth:`Chart.save`, by passing a filename with a ``.json`` extension. For example, here we save a simple scatter-plot to JSON: .. code-block:: python import altair as alt from vega_datasets import data chart = alt.Chart(data.cars.url).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color='Origin:N' ) chart.save('chart.json') The contents of the resulting file will look something like this: .. code-block:: json { "$schema": "https://vega.github.io/schema/vega-lite/v4.json", "config": { "view": { "continuousHeight": 300, "continuousWidth": 400 } }, "data": { "url": "https://vega.github.io/vega-datasets/data/cars.json" }, "encoding": { "color": { "field": "Origin", "type": "nominal" }, "x": { "field": "Horsepower", "type": "quantitative" }, "y": { "field": "Miles_per_Gallon", "type": "quantitative" } }, "mark": "point" } This JSON can then be inserted into any web page using the vegaEmbed_ library. .. saving-html: HTML format ~~~~~~~~~~~ If you wish for Altair to take care of the HTML embedding for you, you can save a chart directly to an HTML file using .. code-block:: python chart.save('chart.html') This will create a simple HTML template page that loads Vega, Vega-Lite, and vegaEmbed, such that when opened in a browser the chart will be rendered. For example, saving the above scatter-plot to HTML creates a file with the following contents, which can be opened and rendered in any modern javascript-enabled web browser: .. code-block:: HTML
You can view the result here: `chart.html `_. By default, ``canvas`` is used for rendering the visualization in vegaEmbed. To change to ``svg`` rendering, use the ``embed_options`` as such: .. code-block:: python chart.save('chart.html', embed_options={'renderer':'svg'}) .. note:: This is not the same as ``alt.renderers.enable('svg')``, what renders the chart as a static ``svg`` image within a Jupyter notebook. .. _saving-png: PNG, SVG, and PDF format ~~~~~~~~~~~~~~~~~~~~~~~~ To save an Altair chart object as a PNG, SVG, or PDF image, you can use .. code-block:: python chart.save('chart.png') chart.save('chart.svg') chart.save('chart.pdf') However, saving these images requires some additional extensions to run the javascript code necessary to interpret the Vega-Lite specification and output it in the form of an image. Altair can do this via the altair_saver_ package, which can be installed with:: $ conda install altair_saver or:: $ pip install altair_saver See the altair_saver_ documentation for information about additional installation requirements. Figure Size/Resolution ^^^^^^^^^^^^^^^^^^^^^^ When using ``chart.save()`` above, the resolution of the resulting PNG is controlled by the resolution of your screen. The easiest way to produce a higher-resolution PNG image is to scale the image to make it larger, and thus to contain more pixels at a given resolution. This can be done with the ``scale_factor`` argument, which defaults to 1.0:: chart.save('chart.png', scale_factor=2.0) .. _altair_saver: http://github.com/altair-viz/altair_saver/ .. _vegaEmbed: https://github.com/vega/vega-embed altair-4.1.0/doc/user_guide/scale_resolve.rst000066400000000000000000000061551364111050100212470ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-resolve: Scale and Guide Resolution -------------------------- When creating compound charts (see :ref:`user-guide-compound`), altair defaults to using shared chart scales and guides (e.g. axes, legends, etc.). This default can be adjusted using the :meth:`Chart.resolve_scale`, :meth:`Chart.resolve_axis`, and :meth:`Chart.resolve_legend` functions. For example, suppose you would like to concatenate two charts with separate color scales; the default behavior is for the color scale to be created for a union of the two color encoding domains: .. altair-plot:: import altair as alt from vega_datasets import data source = data.cars() base = alt.Chart(source).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q' ).properties( width=200, height=200 ) alt.concat( base.encode(color='Origin:N'), base.encode(color='Cylinders:O') ) This default can be changed by setting the scale resolution for the color to ``"independent"`` (rather than the default, ``"shared"``): .. altair-plot:: alt.concat( base.encode(color='Origin:N'), base.encode(color='Cylinders:O') ).resolve_scale( color='independent' ) Dual Y Axis ~~~~~~~~~~~ A common technique for combining chart containing different measures is using a dual y axis. There are two strategies to achieve this result using altair. The first is to manually specify the mark color and associated axis title color of each layer. .. altair-plot:: import altair as alt from vega_datasets import data source = data.cars() base = alt.Chart(source).encode( alt.X('year(Year):T') ) line_A = base.mark_line(color='#5276A7').encode( alt.Y('average(Horsepower):Q', axis=alt.Axis(titleColor='#5276A7')) ) line_B = base.mark_line(color='#F18727').encode( alt.Y('average(Miles_per_Gallon):Q', axis=alt.Axis(titleColor='#F18727')) ) alt.layer(line_A, line_B).resolve_scale(y='independent') In this case the axis colors act as a pseudo-legend. Alternatively if you want a legend the :ref:`user-guide-filter-transform` and :ref:`user-guide-fold-transform` must be applied. Legends are only created in Vega-Lite to represent an encoding. .. altair-plot:: base = alt.Chart(source).mark_line().transform_fold( ['Horsepower', 'Miles_per_Gallon'], as_=['Measure', 'Value'] ).encode( alt.Color('Measure:N'), alt.X('year(Year):T') ) line_A = base.transform_filter( alt.datum.Measure == 'Horsepower' ).encode( alt.Y('average(Value):Q', axis=alt.Axis(title='Horsepower')), ) line_B = base.transform_filter( alt.datum.Measure == 'Miles_per_Gallon' ).encode( alt.Y('average(Value):Q',axis=alt.Axis(title='Miles_per_Gallon')) ) alt.layer(line_A, line_B).resolve_scale(y='independent') Note that dual axis charts might be misleading about relationships in your data. For further reading on the topic see `The case against dual axis charts `__ by Lisa Charlotte Rost. altair-4.1.0/doc/user_guide/times_and_dates.rst000066400000000000000000000202451364111050100215400ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-time: Times and Dates in Altair ========================= Working with dates, times, and timezones is often one of the more challenging aspects of data analysis. In Altair, the difficulties are compounded by the fact that users are writing Python code, which outputs JSON-serialized timestamps, which are interpreted by Javascript, and then rendered by your browser. At each of these steps, there are things that can go wrong, but Altair and Vega-Lite do their best to ensure that dates are interpreted and visualized in a consistent way. .. _note-browser-compliance: Note on Browser Compliance -------------------------- .. note:: Warning about non-ES6 Browsers The discussion below applies to modern browsers which support `ECMAScript 6`_, in which time strings like ``"2018-01-01T12:00:00"`` without a trailing ``"Z"`` are treated as local time rather than `Coordinated Universal Time (UTC)`_. For example, recent versions of Chrome and Firefox are ES6-compliant, while Safari 11 is not. If you are using a non-ES6 browser, this means that times displayed in Altair charts may be rendered with a timezone offset, unless you explicitly use UTC time (see :ref:`explicit-utc-time`). The following chart will help you determine if your browser parses dates in the way that Altair expects: .. altair-plot:: :links: none import altair as alt import pandas as pd df = pd.DataFrame({'local': ['2018-01-01T00:00:00'], 'utc': ['2018-01-01T00:00:00Z']}) alt.Chart(df).transform_calculate( compliant="hours(datum.local) != hours(datum.utc) ? true : false", ).mark_text(size=20, baseline='middle').encode( text=alt.condition('datum.compliant', alt.value('OK'), alt.value('not OK')), color=alt.condition('datum.compliant', alt.value('green'), alt.value('red')) ).properties(width=80, height=50) If the above output contains a red "not OK": .. altair-plot:: :hide-code: :links: none alt.Chart(df).mark_text(size=10, baseline='middle').encode( alt.TextValue('not OK'), alt.ColorValue('red') ).properties(width=40, height=25) it means that your browser's date parsing is not ES6-compliant. If it contains a green "OK": .. altair-plot:: :hide-code: :links: none alt.Chart(df).mark_text(size=10, baseline='middle').encode( alt.TextValue('OK'), alt.ColorValue('green') ).properties(width=40, height=25) then it means that your browser parses dates as Altair expects, either because it is ES6-compliant or because your computer locale happens to be set to the UTC+0 (GMT) timezone. Altair and Pandas Datetimes --------------------------- Altair is designed to work best with `Pandas timeseries`_. A standard timezone-agnostic date/time column in a Pandas dataframe will be both interpreted and displayed as local user time. For example, here is a dataset containing hourly temperatures measured in Seattle: .. altair-plot:: :output: repr import altair as alt from vega_datasets import data temps = data.seattle_temps() temps.head() We can see from the ``dtypes`` attribute that the times are encoded as a standard 64-bit datetime, without any specified timezone: .. altair-plot:: :output: repr temps.dtypes We can use Altair to visualize this datetime data; for clarity in this example, we'll limit ourselves to the first two weeks of data: .. altair-plot:: temps = temps[temps.date < '2010-01-15'] alt.Chart(temps).mark_line().encode( x='date:T', y='temp:Q' ) (notice that for date/time values we use the ``T`` to indicate a temporal encoding: while this is optional for pandas datetime input, it is good practice to specify a type explicitly; see :ref:`encoding-data-types` for more discussion). For date-time inputs like these, it can sometimes be useful to extract particular time units (e.g. hours of the day, dates of the month, etc.). In Altair, this can be done with a time unit transform, discussed in detail in :ref:`user-guide-timeunit-transform`. For example, we might decide we want a heatmap with hour of the day on the x-axis, and day of the month on the y-axis: .. altair-plot:: alt.Chart(temps).mark_rect().encode( alt.X('hoursminutes(date):O', title='hour of day'), alt.Y('monthdate(date):O', title='date'), alt.Color('temp:Q', title='temperature (F)') ) Unless you are using a non-ES6 browser (See :ref:`note-browser-compliance`), you will notice that the chart created by this code reflects hours starting at 00:00:00 on January 1st, just as in the data we input. This is because both the input timestamps and the plot outputs are using local time. Specifying Time Zones --------------------- If you are viewing the above visualizations in a supported browser (see :ref:`note-browser-compliance` above), the times are both serialized and rendered in local time, so that the ``January 1st 00:00:00`` row renders in the chart as ``00:00`` on ``January 1st``. In Altair, simple dates without an explicit timezone are treated as local time, and in Vega-Lite, unless otherwise specified, times are rendered in the local time of the browser that does the rendering. If you would like your dates to instead be time-zone aware, you can set the timezone explicitly in the input dataframe. Since Seattle is in the ``US/Pacific`` timezone, we can localize the timestamps in Pandas as follows: .. altair-plot:: :output: repr temps['date_pacific'] = temps['date'].dt.tz_localize('US/Pacific') temps.dtypes Notice that the timezone is now part of the pandas datatype. If we repeat the above chart with this timezone-aware data, the result will render **according to the timezone of the browser rendering it**: .. altair-plot:: alt.Chart(temps).mark_rect().encode( alt.X('hoursminutes(date_pacific):O', title='hour of day'), alt.Y('monthdate(date_pacific):O', title='date'), alt.Color('temp:Q', title='temperature (F)') ) If you are viewing this chart on a computer whose time is set to the west coast of the US, it should appear identical to the first version. If you are rendering the chart in any other timezone, it will render using a timezone correction computed from the location set in your system. .. _explicit-utc-time: Using UTC Time -------------- This user-local rendering can sometimes be confusing, because it leads to the same output being visualized differently by different users. If you want timezone-aware data to appear the same to every user regardless of location, the best approach is to adopt a standard timezone in which to render the data. One commonly-used standard is `Coordinated Universal Time (UTC)`_. In Altair, any of the ``timeUnit`` bins can be prefixed with ``utc`` in order to extract UTC time units. Here is the above chart visualized in UTC time, which will render the same way regardless of the system location: .. altair-plot:: alt.Chart(temps).mark_rect().encode( alt.X('utchoursminutes(date_pacific):O', title='UTC hour of day'), alt.Y('utcmonthdate(date_pacific):O', title='UTC date'), alt.Color('temp:Q', title='temperature (F)') ) To make your charts as portable as possible (even in non-ES6 browsers which parse timezone-agnostic times as UTC), you can explicitly work in UTC time, both on the Pandas side and on the Vega-Lite side: .. altair-plot:: temps['date_utc'] = temps['date'].dt.tz_localize('UTC') alt.Chart(temps).mark_rect().encode( alt.X('utchoursminutes(date_utc):O', title='hour of day'), alt.Y('utcmonthdate(date_utc):O', title='date'), alt.Color('temp:Q', title='temperature (F)') ) This is somewhat less convenient than the default behavior for timezone-agnostic dates, in which both Pandas and Vega-Lite assume times are local (except in non-ES6 browsers; see :ref:`note-browser-compliance`), but it gets around browser incompatibilities by explicitly working in UTC, which gives similar results even in older browsers. .. _Coordinated Universal Time (UTC): https://en.wikipedia.org/wiki/Coordinated_Universal_Time .. _Pandas timeseries: https://pandas.pydata.org/pandas-docs/stable/timeseries.html .. _ECMAScript 6: http://www.ecma-international.org/ecma-262/6.0/ altair-4.1.0/doc/user_guide/transform/000077500000000000000000000000001364111050100176735ustar00rootroot00000000000000altair-4.1.0/doc/user_guide/transform/aggregate.rst000066400000000000000000000037631364111050100223640ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-aggregate-transform: Aggregate Transforms ~~~~~~~~~~~~~~~~~~~~ There are two ways to aggregate data within Altair: within the encoding itself, or using a top level aggregate transform. The aggregate property of a field definition can be used to compute aggregate summary statistics (e.g., median, min, max) over groups of data. If at least one fields in the specified encoding channels contain aggregate, the resulting visualization will show aggregate data. In this case, all fields without aggregation function specified are treated as group-by fields in the aggregation process. For example, the following bar chart aggregates mean of ``acceleration``, grouped by the number of Cylinders. .. altair-plot:: import altair as alt from vega_datasets import data cars = data.cars.url alt.Chart(cars).mark_bar().encode( y='Cylinders:O', x='mean(Acceleration):Q', ) The Altair shorthand string:: # ... x='mean(Acceleration):Q', # ... is made available for convenience, and is equivalent to the longer form:: # ... x=alt.X(field='Acceleration', aggregate='mean', type='quantitative'), # ... For more information on shorthand encodings specifications, see :ref:`encoding-aggregates`. The same plot can be shown using an explicitly computed aggregation, using the :meth:`~Chart.transform_aggregate` method: .. altair-plot:: alt.Chart(cars).mark_bar().encode( y='Cylinders:O', x='mean_acc:Q' ).transform_aggregate( mean_acc='mean(Acceleration)', groupby=["Cylinders"] ) For a list of available aggregates, see :ref:`encoding-aggregates`. Transform Options ^^^^^^^^^^^^^^^^^ The :meth:`~Chart.transform_aggregate` method is built on the :class:`~AggregateTransform` class, which has the following options: .. altair-object-table:: altair.AggregateTransform The :class:`~AggregatedFieldDef` objects have the following options: .. altair-object-table:: altair.AggregatedFieldDef altair-4.1.0/doc/user_guide/transform/bin.rst000066400000000000000000000050521364111050100211770ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-bin-transform: Bin transforms ~~~~~~~~~~~~~~ As with :ref:`user-guide-aggregate-transform`, there are two ways to apply a bin transform in Altair: within the encoding itself, or using a top-level bin transform. An common application of a bin transform is when creating a histogram: .. altair-plot:: import altair as alt from vega_datasets import data movies = data.movies.url alt.Chart(movies).mark_bar().encode( alt.X("IMDB_Rating:Q", bin=True), y='count()', ) But a bin transform can be useful in other applications; for example, here we bin a continuous field to create a discrete color map: .. altair-plot:: import altair as alt from vega_datasets import data cars = data.cars.url alt.Chart(cars).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color=alt.Color('Acceleration:Q', bin=alt.Bin(maxbins=5)) ) In the first case we set ``bin = True``, which uses the default bin settings. In the second case, we exercise more fine-tuned control over the bin parameters by passing a :class:`~altair.Bin` object. If you are using the same bins in multiple chart components, it can be useful to instead define the binning at the top level, using :meth:`~Chart.transform_bin` method. Here is the above histogram created using a top-level bin transform: .. altair-plot:: import altair as alt from vega_datasets import data movies = data.movies.url alt.Chart(movies).mark_bar().encode( x='binned_rating:O', y='count()', ).transform_bin( 'binned_rating', field='IMDB_Rating' ) And here is the transformed color scale using a top-level bin transform: .. altair-plot:: import altair as alt from vega_datasets import data cars = data.cars.url alt.Chart(cars).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color='binned_acc:O' ).transform_bin( 'binned_acc', 'Acceleration', bin=alt.Bin(maxbins=5) ) The advantage of the top-level transform is that the same named field can be used in multiple places in the chart if desired. Note the slight difference in binning behavior between the encoding-based bins (which preserve the range of the bins) and the transform-based bins (which collapse each bin to a single representative value. Transform Options ^^^^^^^^^^^^^^^^^ The :meth:`~Chart.transform_bin` method is built on the :class:`~BinTransform` class, which has the following options: .. altair-object-table:: altair.BinTransform altair-4.1.0/doc/user_guide/transform/calculate.rst000066400000000000000000000037561364111050100223750ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-calculate-transform: Calculate Transform ~~~~~~~~~~~~~~~~~~~ The calculate transform allows the user to define new fields in the dataset which are calculated from other fields using an expression syntax. As a simple example, here we take data with a simple input sequence, and compute a some trigonometric quantities: .. altair-plot:: import altair as alt import pandas as pd data = pd.DataFrame({'t': range(101)}) alt.Chart(data).mark_line().encode( x='x:Q', y='y:Q', order='t:Q' ).transform_calculate( x='cos(datum.t * PI / 50)', y='sin(datum.t * PI / 25)' ) Each argument within ``transform_calculate`` is a `Vega expression`_ string, which is a well-defined set of javascript-style operations that can be used to calculate a new field from an existing one. To streamline building these vega expressions in Python, Altair provides the :mod:`altair.expr` module which provides constants and functions to allow these expressions to be constructed with Python syntax; for example: .. altair-plot:: from altair import expr, datum alt.Chart(data).mark_line().encode( x='x:Q', y='y:Q', order='t:Q' ).transform_calculate( x=expr.cos(datum.t * expr.PI / 50), y=expr.sin(datum.t * expr.PI / 25) ) Altair expressions are designed to output valid Vega expressions. The benefit of using them is that proper syntax is ensured by the Python interpreter, and tab completion of the :mod:`~expr` submodule can be used to explore the available functions and constants. These expressions can also be used when constructing a :ref:`user-guide-filter-transform`, as we shall see next. Transform Options ^^^^^^^^^^^^^^^^^ The :meth:`~Chart.transform_calculate` method is built on the :class:`~CalculateTransform` class, which has the following options: .. altair-object-table:: altair.CalculateTransform .. _Vega expression: https://vega.github.io/vega/docs/expressions/ altair-4.1.0/doc/user_guide/transform/density.rst000066400000000000000000000030021364111050100220770ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-density-transform: Density Transform ~~~~~~~~~~~~~~~~~ The density transform performs one-dimensional `kernel density estimation `_ over input data and generates a new column of samples of the estimated densities. Here is a simple example, showing the distribution of IMDB ratings from the movies dataset: .. altair-plot:: import altair as alt from vega_datasets import data alt.Chart(data.movies.url).transform_density( 'IMDB_Rating', as_=['IMDB_Rating', 'density'], ).mark_area().encode( x="IMDB_Rating:Q", y='density:Q', ) The density can also be computed on a per-group basis, by specifying the ``groupby`` argument. Here we split the above denity computation across movie genres: .. altair-plot:: import altair as alt from vega_datasets import data alt.Chart( data.movies.url, width=120, height=80 ).transform_filter( 'isValid(datum.Major_Genre)' ).transform_density( 'IMDB_Rating', groupby=['Major_Genre'], as_=['IMDB_Rating', 'density'], extent=[1, 10], ).mark_area().encode( x="IMDB_Rating:Q", y='density:Q', ).facet( 'Major_Genre:N', columns=4 ) Transform Options ^^^^^^^^^^^^^^^^^ The :meth:`~Chart.transform_density` method is built on the :class:`~DensityTransform` class, which has the following options: .. altair-object-table:: altair.DensityTransform altair-4.1.0/doc/user_guide/transform/filter.rst000066400000000000000000000140651364111050100217200ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-filter-transform: Filter Transform ~~~~~~~~~~~~~~~~ The filter transform removes objects from a data stream based on a provided filter expression, selection, or other filter predicate. A filter can be added at the top level of a chart using the :meth:`Chart.transform_filter` method. The argument to ``transform_filter`` can be one of a number of expressions and objects: 1. A `Vega expression`_ expressed as a string or built using the :mod:`~expr` module 2. A Field predicate, such as :class:`~FieldOneOfPredicate`, :class:`~FieldRangePredicate`, :class:`~FieldEqualPredicate`, :class:`~FieldLTPredicate`, :class:`~FieldGTPredicate`, :class:`~FieldLTEPredicate`, :class:`~FieldGTEPredicate`, 3. A Selection predicate or object created by :func:`selection` 4. A Logical operand that combines any of the above We'll show a brief example of each of these in the following sections Filter Expression ^^^^^^^^^^^^^^^^^ A filter expression uses the `Vega expression`_ language, either specified directly as a string, or built using the :mod:`~expr` module. This can be useful when, for example, selecting only a subset of data. For example: .. altair-plot:: import altair as alt from altair import datum from vega_datasets import data pop = data.population.url alt.Chart(pop).mark_area().encode( x='age:O', y='people:Q', ).transform_filter( (datum.year == 2000) & (datum.sex == 1) ) Notice that, like in the :ref:`user-guide-filter-transform`, data values are referenced via the name ``datum``. Field Predicates ^^^^^^^^^^^^^^^^ Field predicates overlap somewhat in function with expression predicates, but have the advantage that their contents are validated by the schema. Examples are: - :class:`~FieldEqualPredicate` evaluates whether a field is equal to a particular value - :class:`~FieldOneOfPredicate` evaluates whether a field is among a list of specified values. - :class:`~FieldRangePredicate` evaluates whether a continuous field is within a range of values. - :class:`~FieldLTPredicate` evaluates whether a continuous field is less than a given value - :class:`~FieldGTPredicate` evaluates whether a continuous field is greater than a given value - :class:`~FieldLTEPredicate` evaluates whether a continuous field is less than or equal to a given value - :class:`~FieldGTEPredicate` evaluates whether a continuous field is greater than or equal to a given value Here is an example of a :class:`~FieldEqualPredicate` used to select just the values from year 2000 as in the above chart: .. altair-plot:: import altair as alt from vega_datasets import data pop = data.population.url alt.Chart(pop).mark_line().encode( x='age:O', y='sum(people):Q', color='year:O' ).transform_filter( alt.FieldEqualPredicate(field='year', equal=2000) ) A :class:`~FieldOneOfPredicate` is similar, but allows selection of any number of specific values: .. altair-plot:: import altair as alt from vega_datasets import data pop = data.population.url alt.Chart(pop).mark_line().encode( x='age:O', y='sum(people):Q', color='year:O' ).transform_filter( alt.FieldOneOfPredicate(field='year', oneOf=[1900, 1950, 2000]) ) Finally, a :meth:`~FieldRangePredicate` allows selecting values within a particular continuous range: .. altair-plot:: import altair as alt from vega_datasets import data pop = data.population.url alt.Chart(pop).mark_line().encode( x='age:O', y='sum(people):Q', color='year:O' ).transform_filter( alt.FieldRangePredicate(field='year', range=[1960, 2000]) ) Selection Predicates ^^^^^^^^^^^^^^^^^^^^ Selection predicates can be used to filter data based on a selection. While these can be constructed directly using a :class:`~SelectionPredicate` class, in Altair it is often more convenient to construct them using the :func:`~selection` function. For example, this chart uses a multi-selection that allows the user to click or shift-click on the bars in the bottom chart to select the data to be shown in the top chart: .. altair-plot:: import altair as alt from vega_datasets import data pop = data.population.url selection = alt.selection_multi(fields=['year']) top = alt.Chart().mark_line().encode( x='age:O', y='sum(people):Q', color='year:O' ).properties( width=600, height=200 ).transform_filter( selection ) bottom = alt.Chart().mark_bar().encode( x='year:O', y='sum(people):Q', color=alt.condition(selection, alt.value('steelblue'), alt.value('lightgray')) ).properties( width=600, height=100 ).add_selection( selection ) alt.vconcat( top, bottom, data=pop ) Logical Operands ^^^^^^^^^^^^^^^^ At times it is useful to combine several types of predicates into a single selection. This can be accomplished using the various logical operand classes: - :class:`~LogicalOrPredicate` - :class:`~LogicalAndPredicate` - :class:`~LogicalNotPredicate` These are not yet part of the Altair interface (see `Issue 695 `_) but can be constructed explicitly; for example, here we plot US population distributions for all data *except* the years 1950-1960, by applying a ``LogicalNotPredicate`` schema to a ``FieldRangePredicate``: .. altair-plot:: import altair as alt from vega_datasets import data pop = data.population.url alt.Chart(pop).mark_line().encode( x='age:O', y='sum(people):Q', color='year:O' ).properties( width=600, height=200 ).transform_filter( {'not': alt.FieldRangePredicate(field='year', range=[1900, 1950])} ) Transform Options ^^^^^^^^^^^^^^^^^ The :meth:`~Chart.transform_filter` method is built on the :class:`~FilterTransform` class, which has the following options: .. altair-object-table:: altair.FilterTransform .. _Vega expression: https://vega.github.io/vega/docs/expressions/ altair-4.1.0/doc/user_guide/transform/flatten.rst000066400000000000000000000034231364111050100220640ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-flatten-transform: Flatten Transform ~~~~~~~~~~~~~~~~~ The flatten transform can be used to extract the contents of arrays from data entries. This will not generally be useful for well-structured data within pandas dataframes, but it can be useful for working with data from other sources. As an example, consider this dataset which uses a common convention in JSON data, a set of fields each containing a list of entries: .. altair-plot:: :output: none import numpy as np rand = np.random.RandomState(0) def generate_data(N): mean = rand.randn() std = rand.rand() return list(rand.normal(mean, std, N)) data = [ {'label': 'A', 'values': generate_data(20)}, {'label': 'B', 'values': generate_data(30)}, {'label': 'C', 'values': generate_data(40)}, {'label': 'D', 'values': generate_data(50)}, ] This kind of data structure does not work well in the context of dataframe representations, as we can see by loading this into pandas: .. altair-plot:: :output: repr import pandas as pd df = pd.DataFrame.from_records(data) df Alair's flatten transform allows you to extract the contents of these arrays into a column that can be referenced by an encoding: .. altair-plot:: import altair as alt alt.Chart(df).transform_flatten( ['values'] ).mark_tick().encode( x='values:Q', y='label:N', ) This can be particularly useful in cleaning up data specified via a JSON URL, without having to first load the data for manipulation in pandas. Transform Options ^^^^^^^^^^^^^^^^^ The :meth:`~Chart.transform_flatten` method is built on the :class:`~FlattenTransform` class, which has the following options: .. altair-object-table:: altair.FlattenTransform altair-4.1.0/doc/user_guide/transform/fold.rst000066400000000000000000000027161364111050100213570ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-fold-transform: Fold Transform ~~~~~~~~~~~~~~ The fold transform is, in short, a way to convert wide-form data to long-form data directly without any preprocessing (see :ref:`data-long-vs-wide` for more information). Fold transforms are the opposite of the :ref:`user-guide-pivot-transform`. So, for example, if your data consist of multiple columns that record parallel data for different categories, you can use the fold transform to encode based on those categories: .. altair-plot:: import numpy as np import pandas as pd import altair as alt rand = np.random.RandomState(0) data = pd.DataFrame({ 'date': pd.date_range('2019-01-01', freq='D', periods=30), 'A': rand.randn(30).cumsum(), 'B': rand.randn(30).cumsum(), 'C': rand.randn(30).cumsum(), }) alt.Chart(data).transform_fold( ['A', 'B', 'C'], ).mark_line().encode( x='date:T', y='value:Q', color='key:N' ) Notice here that the fold transform essentially stacks all the values from the specified columns into a single new field named ``"value"``, with the associated names in a field named ``"key"``. For an example of the fold transform in action, see :ref:`gallery_parallel_coordinates`. Transform Options ^^^^^^^^^^^^^^^^^ The :meth:`~Chart.transform_fold` method is built on the :class:`~FoldTransform` class, which has the following options: .. altair-object-table:: altair.FoldTransform altair-4.1.0/doc/user_guide/transform/impute.rst000066400000000000000000000066411364111050100217370ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-impute-transform: Impute Transform ~~~~~~~~~~~~~~~~ The impute transform allows you to fill-in missing entries in a dataset. As an example, consider the following data, which includes missing values that we filter-out of the long-form representation (see :ref:`data-long-vs-wide` for more on this): .. altair-plot:: :output: repr import numpy as np import pandas as pd data = pd.DataFrame({ 't': range(5), 'x': [2, np.nan, 3, 1, 3], 'y': [5, 7, 5, np.nan, 4] }).melt('t').dropna() data Notice the result: the ``x`` series has no entry at ``t=1``, and the ``y`` series has a missing entry at ``t=3``. If we use Altair to visualize this data directly, the line skips the missing entries: .. altair-plot:: import altair as alt raw = alt.Chart(data).mark_line(point=True).encode( x=alt.X('t:Q'), y='value:Q', color='variable:N' ) raw This is not always desirable, because (particularly for a line plot with no points) it can imply the existence of data that is not there. Impute via Encodings ^^^^^^^^^^^^^^^^^^^^ To address this, you can use an impute argument to the encoding channel. For example, we can impute using a constant value (we'll show the raw chart lightly in the background for reference): .. altair-plot:: background = raw.encode(opacity=alt.value(0.2)) chart = alt.Chart(data).mark_line(point=True).encode( x='t:Q', y=alt.Y('value:Q', impute=alt.ImputeParams(value=0)), color='variable:N' ) background + chart Or we can impute using any supported aggregate: .. altair-plot:: chart = alt.Chart(data).mark_line(point=True).encode( x='t:Q', y=alt.Y('value:Q', impute=alt.ImputeParams(method='mean')), color='variable:N' ) background + chart Impute via Transform ^^^^^^^^^^^^^^^^^^^^ Similar to the :ref:`user-guide-bin-transform` and :ref:`user-guide-aggregate-transform`, it is also possible to specify the impute transform outside the encoding as a transform. For example, here is the equivalent of the above two charts: .. altair-plot:: chart = alt.Chart(data).transform_impute( impute='value', key='t', value=0, groupby=['variable'] ).mark_line(point=True).encode( x='t:Q', y='value:Q', color='variable:N' ) background + chart .. altair-plot:: chart = alt.Chart(data).transform_impute( impute='value', key='t', method='mean', groupby=['variable'] ).mark_line(point=True).encode( x='t:Q', y='value:Q', color='variable:N' ) background + chart If you would like to use more localized imputed values, you can specify a ``frame`` parameter similar to the :ref:`user-guide-window-transform` that will control which values are used for the imputation. For example, here we impute missing values using the mean of the neighboring points on either side: .. altair-plot:: chart = alt.Chart(data).transform_impute( impute='value', key='t', method='mean', frame=[-1, 1], groupby=['variable'] ).mark_line(point=True).encode( x='t:Q', y='value:Q', color='variable:N' ) background + chart Transform Options ^^^^^^^^^^^^^^^^^ The :meth:`~Chart.transform_impute` method is built on the :class:`~ImputeTransform` class, which has the following options: .. altair-object-table:: altair.ImputeTransform altair-4.1.0/doc/user_guide/transform/index.rst000066400000000000000000000103571364111050100215420ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-transformations: Data Transformations -------------------- It is often necessary to transform or filter data in the process of visualizing it. In Altair you can do this one of two ways: 1. Before the chart definition, using standard Pandas data transformations. 2. Within the chart definition, using Vega-Lite's data transformation tools. In most cases, we suggest that you use the first approach, because it is more straightforward to those who are familiar with data manipulation in Python, and because the Pandas package offers much more flexibility than Vega-Lite in available data manipulations. The second approach becomes useful when the data source is not a dataframe, but, for example, a URL pointer to a JSON or CSV file. It can also be useful in a compound chart where different views of the dataset require different transformations. This second approach -- specifying data transformations within the chart specification itself -- can be accomplished using the ``transform_*`` methods of top-level objects: ========================================= ========================================= ================================================================================ Transform Method Description ========================================= ========================================= ================================================================================ :ref:`user-guide-aggregate-transform` :meth:`~Chart.transform_aggregate` Create a new data column by aggregating an existing column. :ref:`user-guide-bin-transform` :meth:`~Chart.transform_bin` Create a new data column by binning an existing column. :ref:`user-guide-calculate-transform` :meth:`~Chart.transform_calculate` Create a new data column using an arithmetic calculation on an existing column. :ref:`user-guide-density-transform` :meth:`~Chart.transform_density` Create a new data column with the kernel density estimate of the input. :ref:`user-guide-filter-transform` :meth:`~Chart.transform_filter` Select a subset of data based on a condition. :ref:`user-guide-flatten-transform` :meth:`~Chart.transform_flatten` Flatten array data into columns. :ref:`user-guide-fold-transform` :meth:`~Chart.transform_fold` Convert wide-form data into long-form data (opposite of pivot). :ref:`user-guide-impute-transform` :meth:`~Chart.transform_impute` Impute missing data. :ref:`user-guide-joinaggregate-transform` :meth:`~Chart.transform_joinaggregate` Aggregate transform joined to original data. :ref:`user-guide-loess-transform` :meth:`~Chart.transform_loess` Create a new column with LOESS smoothing of data. :ref:`user-guide-lookup-transform` :meth:`~Chart.transform_lookup` One-sided join of two datasets based on a lookup key. :ref:`user-guide-pivot-transform` :meth:`~Chart.transform_pivot` Convert long-form data into wide-form data (opposite of fold). :ref:`user-guide-quantile-transform` :meth:`~Chart.transform_quantile` Compute empirical quantiles of a dataset. :ref:`user-guide-regression-transform` :meth:`~Chart.transform_regression` Fit a regression model to a dataset. :ref:`user-guide-sample-transform` :meth:`~Chart.transform_sample` Random sub-sample of the rows in the dataset. :ref:`user-guide-stack-transform` :meth:`~Chart.transform_stack` Compute stacked version of values. :ref:`user-guide-timeunit-transform` :meth:`~Chart.transform_timeunit` Discretize/group a date by a time unit (day, month, year, etc.) :ref:`user-guide-window-transform` :meth:`~Chart.transform_window` Compute a windowed aggregation ========================================= ========================================= ================================================================================ .. toctree:: :hidden: aggregate bin calculate density filter flatten fold impute joinaggregate lookup loess pivot quantile regression sample stack timeunit windowaltair-4.1.0/doc/user_guide/transform/joinaggregate.rst000066400000000000000000000043231364111050100232350ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-joinaggregate-transform: Join Aggregate Transform ~~~~~~~~~~~~~~~~~~~~~~~~ The Join Aggregate transform acts in almost every way the same as an Aggregate transform, but the resulting aggregate is joined to the original dataset. To make this more clear, consider the following dataset: .. altair-plot:: :output: repr import pandas as pd import numpy as np rand = np.random.RandomState(0) df = pd.DataFrame({ 'label': rand.choice(['A', 'B', 'C'], 10), 'value': rand.randn(10), }) df Here is a pandas operation that is equivalent to Altair's Aggregate transform, using the mean as an example: .. altair-plot:: :output: repr mean = df.groupby('label').mean().reset_index() mean And here is an output that is equivalent to Altair's Join Aggregate: .. altair-plot:: :output: repr pd.merge(df, mean, on='label', suffixes=['', '_mean']) Notice that the join aggregate joins the aggregated value with the original dataframe, such that the aggregated values can be used in tandem with the original values if desired. Here is an example of how the join aggregate might be used: we compare the IMDB and Rotten Tomatoes movie ratings, normalized by their mean and standard deviation, which requires calculations on the joined data: .. altair-plot:: import altair as alt from vega_datasets import data alt.Chart(data.movies.url).transform_filter( 'datum.IMDB_Rating != null && datum.Rotten_Tomatoes_Rating != null' ).transform_joinaggregate( IMDB_mean='mean(IMDB_Rating)', IMDB_std='stdev(IMDB_Rating)', RT_mean='mean(Rotten_Tomatoes_Rating)', RT_std='stdev(Rotten_Tomatoes_Rating)' ).transform_calculate( IMDB_Deviation="(datum.IMDB_Rating - datum.IMDB_mean) / datum.IMDB_std", Rotten_Tomatoes_Deviation="(datum.Rotten_Tomatoes_Rating - datum.RT_mean) / datum.RT_std" ).mark_point().encode( x='IMDB_Deviation:Q', y="Rotten_Tomatoes_Deviation:Q" ) Transform Options ^^^^^^^^^^^^^^^^^ The :meth:`~Chart.transform_joinaggregate` method is built on the :class:`~JoinAggregateTransform` class, which has the following options: .. altair-object-table:: altair.JoinAggregateTransform altair-4.1.0/doc/user_guide/transform/loess.rst000066400000000000000000000020431364111050100215510ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-loess-transform: LOESS Transform ~~~~~~~~~~~~~~~ The LOESS transform (LOcally Estimated Scatterplot Smoothing) uses a locally-estimated regression to produce a trend line. LOESS performs a sequence of local weighted regressions over a sliding window of nearest-neighbor points. For standard parametric regression options, see the :ref:`user-guide-regression-transform`. Here is an example of using LOESS to smooth samples from a Gaussian random walk: .. altair-plot:: import altair as alt import pandas as pd import numpy as np np.random.seed(42) df = pd.DataFrame({ 'x': range(100), 'y': np.random.randn(100).cumsum() }) chart = alt.Chart(df).mark_point().encode( x='x', y='y' ) chart + chart.transform_loess('x', 'y').mark_line() Transform Options ^^^^^^^^^^^^^^^^^ The :meth:`~Chart.transform_loess` method is built on the :class:`~LoessTransform` class, which has the following options: .. altair-object-table:: altair.LoessTransform altair-4.1.0/doc/user_guide/transform/lookup.rst000066400000000000000000000106321364111050100217400ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-lookup-transform: Lookup Transform ~~~~~~~~~~~~~~~~ The Lookup transform extends a primary data source by looking up values from another data source; it is similar to a one-sided join. A lookup can be added at the top level of a chart using the :meth:`Chart.transform_lookup` method. By way of example, imagine you have two sources of data that you would like to combine and plot: one is a list of names of people along with their height and weight, and the other is some information about which groups they belong to. This example data is available in ``vega_datasets``: .. altair-plot:: :output: none from vega_datasets import data people = data.lookup_people() groups = data.lookup_groups() We know how to visualize each of these datasets separately; for example: .. altair-plot:: import altair as alt top = alt.Chart(people).mark_square(size=200).encode( x=alt.X('age:Q', scale=alt.Scale(zero=False)), y=alt.Y('height:Q', scale=alt.Scale(zero=False)), color='name:N', tooltip='name:N' ).properties( width=400, height=200 ) bottom = alt.Chart(groups).mark_rect().encode( x='person:N', y='group:O' ).properties( width=400, height=100 ) alt.vconcat(top, bottom) If we would like to plot features that reference both datasets (for example, the average age within each group), we need to combine the two datasets. This can be done either as a data preprocessing step, using tools available in Pandas, or as part of the visualization using a :class:`~LookupTransform` in Altair. Combining Datasets with pandas.merge ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Pandas provides a wide range of tools for merging and joining datasets; see `Merge, Join, and Concatenate `_ for some detailed examples. For the above data, we can merge the data and create a combined chart as follows: .. altair-plot:: import pandas as pd merged = pd.merge(groups, people, how='left', left_on='person', right_on='name') alt.Chart(merged).mark_bar().encode( x='mean(age):Q', y='group:O' ) We specify a left join, meaning that for each entry of the "person" column in the groups, we seek the "name" column in people and add the entry to the data. From this, we can easily create a bar chart representing the mean age in each group. Combining Datasets with a Lookup Transform ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ For some data sources (e.g. data available at a URL, or data that is streaming), it is desirable to have a means of joining data without having to download it for pre-processing in Pandas. This is where Altair's :meth:`~Chart.transform_lookup` comes in. To reproduce the above combined plot by combining datasets within the chart specification itself, we can do the following: .. altair-plot:: alt.Chart(groups).mark_bar().encode( x='mean(age):Q', y='group:O' ).transform_lookup( lookup='person', from_=alt.LookupData(data=people, key='name', fields=['age', 'height']) ) Here ``lookup`` names the field in the groups dataset on which we will match, and the ``from_`` argument specifies a :class:`~LookupData` structure where we supply the second dataset, the lookup key, and the fields we would like to extract. Example: Lookup Transforms for Geographical Visualization ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Lookup transforms are often particularly important for geographic visualization, where it is common to combine tabular datasets with datasets that specify geographic boundaries to be visualized; for example, here is a visualization of unemployment rates per county in the US: .. altair-plot:: import altair as alt from vega_datasets import data counties = alt.topo_feature(data.us_10m.url, 'counties') unemp_data = data.unemployment.url alt.Chart(counties).mark_geoshape().encode( color='rate:Q' ).transform_lookup( lookup='id', from_=alt.LookupData(unemp_data, 'id', ['rate']) ).properties( projection={'type': 'albersUsa'}, width=500, height=300 ) Transform Options ^^^^^^^^^^^^^^^^^ The :meth:`~Chart.transform_lookup` method is built on the :class:`~LookupTransform` class, which has the following options: .. altair-object-table:: altair.LookupTransform altair-4.1.0/doc/user_guide/transform/pivot.rst000066400000000000000000000046241364111050100215740ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-pivot-transform: Pivot Transform ~~~~~~~~~~~~~~~ The pivot transform is, in short, a way to convert long-form data to wide-form data directly without any preprocessing (see :ref:`data-long-vs-wide` for more information). Pivot transforms are useful for creating matrix or cross-tabulation data, acting as an inverse to the :ref:`user-guide-fold-transform`. Here is an example, using Olympic medals data: .. altair-plot:: import altair as alt import pandas as pd df = pd.DataFrame.from_records([ {"country": "Norway", "type": "gold", "count": 14}, {"country": "Norway", "type": "silver", "count": 14}, {"country": "Norway", "type": "bronze", "count": 11}, {"country": "Germany", "type": "gold", "count": 14}, {"country": "Germany", "type": "silver", "count": 10}, {"country": "Germany", "type": "bronze", "count": 7}, {"country": "Canada", "type": "gold", "count": 11}, {"country": "Canada", "type": "silver", "count": 8}, {"country": "Canada", "type": "bronze", "count": 10} ]) alt.Chart(df).transform_pivot( 'type', groupby=['country'], value='count' ).mark_bar().encode( x='gold:Q', y='country:N', ) The pivot transform, when combined with other elements of the Altair grammar, enables some very interesting chart types. For example, here we use pivot to create a single tooltip for values on multiple lines: .. altair-plot:: import altair as alt from vega_datasets import data source = data.stocks() base = alt.Chart(source).encode(x='date:T') columns = sorted(source.symbol.unique()) selection = alt.selection_single( fields=['date'], nearest=True, on='mouseover', empty='none', clear='mouseout' ) lines = base.mark_line().encode(y='price:Q', color='symbol:N') points = lines.mark_point().transform_filter(selection) rule = base.transform_pivot( 'symbol', value='price', groupby=['date'] ).mark_rule().encode( opacity=alt.condition(selection, alt.value(0.3), alt.value(0)), tooltip=[alt.Tooltip(c, type='quantitative') for c in columns] ).add_selection(selection) lines + points + rule Transform Options ^^^^^^^^^^^^^^^^^ The :meth:`~Chart.transform_pivot` method is built on the :class:`~PivotTransform` class, which has the following options: .. altair-object-table:: altair.PivotTransform altair-4.1.0/doc/user_guide/transform/quantile.rst000066400000000000000000000020021364111050100222410ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-quantile-transform: Quantile Transform ~~~~~~~~~~~~~~~~~~ The quantile transform calculates empirical `quantile `_ values for input data. If a groupby parameter is provided, quantiles are estimated separately per group. Among other uses, the quantile transform is useful for creating `quantile-quantile (Q-Q) plots `_. Here is an example of a quantile plot of normally-distributed data: .. altair-plot:: import altair as alt import pandas as pd import numpy as np np.random.seed(42) df = pd.DataFrame({'x': np.random.randn(200)}) alt.Chart(df).transform_quantile( 'x', step=0.01 ).mark_point().encode( x='prob:Q', y='value:Q' ) Transform Options ^^^^^^^^^^^^^^^^^ The :meth:`~Chart.transform_quantile` method is built on the :class:`~QuantileTransform` class, which has the following options: .. altair-object-table:: altair.QuantileTransform altair-4.1.0/doc/user_guide/transform/regression.rst000066400000000000000000000031211364111050100226020ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-regression-transform: Regression Transform ~~~~~~~~~~~~~~~~~~~~ The regression transform fits two-dimensional regression models to smooth and predict data. This transform can fit multiple models for input data (one per group) and generates new data objects that represent points for summary trend lines. Alternatively, this transform can be used to generate a set of objects containing regression model parameters, one per group. This transform supports parametric models for the following functional forms: - linear (``linear``): *y = a + b * x* - logarithmic (``log``): *y = a + b * log(x)* - exponential (``exp``): *y = a + eb * x* - power (``pow``): *y = a * xb* - quadratic (``quad``): *y = a + b * x + c * x2* - polynomial (``poly``): *y = a + b * x + … + k * xorder* All models are fit using ordinary least squares. For non-parametric locally weighted regression, see the :ref:`user-guide-loess-transform`. Here is an example of a simple linear regression plotted on top of data: .. altair-plot:: import altair as alt import pandas as pd import numpy as np np.random.seed(42) x = np.linspace(0, 10) y = x - 5 + np.random.randn(len(x)) df = pd.DataFrame({'x': x, 'y': y}) chart = alt.Chart(df).mark_point().encode( x='x', y='y' ) chart + chart.transform_regression('x', 'y').mark_line() Transform Options ^^^^^^^^^^^^^^^^^ The :meth:`~Chart.transform_regression` method is built on the :class:`~RegressionTransform` class, which has the following options: .. altair-object-table:: altair.RegressionTransform altair-4.1.0/doc/user_guide/transform/sample.rst000066400000000000000000000017321364111050100217110ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-sample-transform: Sample Transform ~~~~~~~~~~~~~~~~ The sample transform is one of the simpler of all Altair's data transforms; it takes a single parameter ``sample`` which specified a number of rows to randomly choose from the dataset. The resulting chart will be created using only this random subset of the data. For example, here we chart the full cars dataset alongside a sample of 100 rows: .. altair-plot:: import altair as alt from vega_datasets import data source = data.cars.url chart = alt.Chart(source).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color='Origin:N' ).properties( width=200, height=200 ) chart | chart.transform_sample(100) Transform Options ^^^^^^^^^^^^^^^^^ The :meth:`~Chart.transform_sample` method is built on the :class:`~SampleTransform` class, which has the following options: .. altair-object-table:: altair.SampleTransform altair-4.1.0/doc/user_guide/transform/stack.rst000066400000000000000000000030161364111050100215320ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-stack-transform: Stack Transform ~~~~~~~~~~~~~~~ The stack transform allows you to compute values associated with stacked versions of encodings. For example, consider this stacked bar chart: .. altair-plot:: import altair as alt from vega_datasets import data source = data.barley() alt.Chart(source).mark_bar().encode( column='year:O', x='yield:Q', y='variety:N', color='site:N' ).properties(width=220) Implicitly, this data is being grouped and stacked, but what if you would like to access those stacked values directly? We can construct that same chart manually using the stack transform: .. altair-plot:: import altair as alt from vega_datasets import data source = data.barley() alt.Chart(source).transform_stack( stack='yield', as_=['yield_1', 'yield_2'], groupby=['year', 'variety'], sort=[alt.SortField('site', 'descending')] ).mark_bar().encode( column='year:O', x=alt.X('yield_1:Q', title='yield'), x2='yield_2:Q', y='variety:N', color='site:N', tooltip=['site', 'yield', 'variety'] ).properties(width=220) Notice that the bars are now explicitly drawn between values computed and specified within the x and x2 encodings. Transform Options ^^^^^^^^^^^^^^^^^ The :meth:`~Chart.transform_stack` method is built on the :class:`~StackTransform` class, which has the following options: .. altair-object-table:: altair.StackTransform altair-4.1.0/doc/user_guide/transform/timeunit.rst000066400000000000000000000065121364111050100222670ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-timeunit-transform: TimeUnit Transform ~~~~~~~~~~~~~~~~~~ TimeUnit transforms are used to discretize dates and times within Altair. As with the :ref:`user-guide-aggregate-transform` and :ref:`user-guide-bin-transform` discussed above, they can be defined either as part of the encoding, or as a top-level transform. These are the available time units: - ``"year"``, ``"yearquarter"``, ``"yearquartermonth"``, ``"yearmonth"``, ``"yearmonthdate"``, ``"yearmonthdatehours"``, ``"yearmonthdatehoursminutes"``, ``"yearmonthdatehoursminutesseconds"``. - ``"quarter"``, ``"quartermonth"`` - ``"month"``, ``"monthdate"`` - ``"date"`` (Day of month, i.e., 1 - 31) - ``"day"`` (Day of week, i.e., Monday - Friday) - ``"hours"``, ``"hoursminutes"``, ``"hoursminutesseconds"`` - ``"minutes"``, ``"minutesseconds"`` - ``"seconds"``, ``"secondsmilliseconds"`` - ``"milliseconds"`` TimeUnit Within Encoding ^^^^^^^^^^^^^^^^^^^^^^^^ Any temporal field definition can include a ``timeUnit`` argument to discretize the temporal data. For example, here we plot a dataset that consists of hourly temperature measurements in Seattle during the year 2010: .. altair-plot:: import altair as alt from vega_datasets import data temps = data.seattle_temps.url alt.Chart(temps).mark_line().encode( x='date:T', y='temp:Q' ) The plot is too busy due to the amount of data points squeezed into the short time; we can make it a bit cleaner by discretizing it, for example, by month and plotting only the mean monthly temperature: .. altair-plot:: alt.Chart(temps).mark_line().encode( x='month(date):T', y='mean(temp):Q' ) Notice that by default timeUnit output is a continuous quantity; if you would instead like it to be a categorical, you can specify the ordinal (``O``) or nominal (``N``) type. This can be useful when plotting a bar chart or other discrete chart type: .. altair-plot:: alt.Chart(temps).mark_bar().encode( x='month(date):O', y='mean(temp):Q' ) Multiple time units can be combined within a single plot to yield interesting views of your data; for example, here we extract both the month and the day to give a profile of Seattle temperatures through the year: .. altair-plot:: alt.Chart(temps).mark_rect().encode( alt.X('date(date):O', title='day'), alt.Y('month(date):O', title='month'), color='max(temp):Q' ).properties( title="2010 Daily High Temperatures in Seattle (F)" ) TimeUnit as a Transform ^^^^^^^^^^^^^^^^^^^^^^^ Other times it is convenient to specify a timeUnit as a top-level transform, particularly when the value may be reused. This can be done most conveniently using the :meth:`Chart.transform_timeunit` method. For example: .. altair-plot:: alt.Chart(temps).mark_line().encode( alt.X('month:T', axis=alt.Axis(format='%b')), y='mean(temp):Q' ).transform_timeunit( month='month(date)' ) Notice that because the ``timeUnit`` is not part of the encoding channel here, it is often necessary to add an axis formatter to ensure appropriate axis labels. Transform Options ^^^^^^^^^^^^^^^^^ The :meth:`~Chart.transform_timeunit` method is built on the :class:`~TimeUnitTransform` class, which has the following options: .. altair-object-table:: altair.TimeUnitTransform altair-4.1.0/doc/user_guide/transform/window.rst000066400000000000000000000155401364111050100217410ustar00rootroot00000000000000.. currentmodule:: altair .. _user-guide-window-transform: Window Transform ~~~~~~~~~~~~~~~~ The window transform performs calculations over sorted groups of data objects. These calculations include ranking, lead/lag analysis, and aggregates such as cumulative sums and averages. Calculated values are written back to the input data stream, where they can be referenced by encodings. For example, consider the following cumulative frequency distribution: .. altair-plot:: import altair as alt from vega_datasets import data alt.Chart(data.movies.url).transform_window( sort=[{'field': 'IMDB_Rating'}], frame=[None, 0], cumulative_count='count(*)', ).mark_area().encode( x='IMDB_Rating:Q', y='cumulative_count:Q', ) First, we pass a sort field definition, which indicates how data objects should be sorted within the window. Here, movies should be sorted by their IMDB rating. Next, we pass the frame, which indicates how many data objects before and after the current data object should be included within the window. Here, all movies up to and including the current movie should be included. Finally, we pass a window field definition, which indicates how data objects should be aggregated within the window. Here, the number of movies should be counted. There are many aggregation functions built into Altair. As well as those given in :ref:`encoding-aggregates`, we can use the following within window field definitions: ============ ========= ========================================================================================================================================================================================================================================================================================================================= Aggregate Parameter Description ============ ========= ========================================================================================================================================================================================================================================================================================================================= row_number None Assigns each data object a consecutive row number, starting from 1. rank None Assigns a rank order value to each data object in a window, starting from 1. Peer values are assigned the same rank. Subsequent rank scores incorporate the number of prior values. For example, if the first two values tie for rank 1, the third value is assigned rank 3. dense_rank None Assigns dense rank order values to each data object in a window, starting from 1. Peer values are assigned the same rank. Subsequent rank scores do not incorporate the number of prior values. For example, if the first two values tie for rank 1, the third value is assigned rank 2. percent_rank None Assigns a percentage rank order value to each data object in a window. The percent is calculated as (rank - 1) / (group_size - 1). cume_dist None Assigns a cumulative distribution value between 0 and 1 to each data object in a window. ntile Number Assigns a quantile (e.g., percentile) value to each data object in a window. Accepts an integer parameter indicating the number of buckets to use (e.g., 100 for percentiles, 5 for quintiles). lag Number Assigns a value from the data object that precedes the current object by a specified number of positions. If no such object exists, assigns ``null``. Accepts an offset parameter (default ``1``) that indicates the number of positions. This operation must have a corresponding entry in the `fields` parameter array. lead Number Assigns a value from the data object that follows the current object by a specified number of positions. If no such object exists, assigns ``null``. Accepts an offset parameter (default ``1``) that indicates the number of positions. This operation must have a corresponding entry in the `fields` parameter array. first_value None Assigns a value from the first data object in the current sliding window frame. This operation must have a corresponding entry in the `fields` parameter array. last_value None Assigns a value from the last data object in the current sliding window frame. This operation must have a corresponding entry in the `fields` parameter array. nth_value Number Assigns a value from the nth data object in the current sliding window frame. If no such object exists, assigns ``null``. Requires a non-negative integer parameter that indicates the offset from the start of the window frame. This operation must have a corresponding entry in the `fields` parameter array. ============ ========= ========================================================================================================================================================================================================================================================================================================================= While an aggregate transform computes a single value that summarises all data objects, a window transform adds a new property to each data object. This new property is computed from the neighbouring data objects: that is, from the data objects delimited by the window field definition. For example, consider the following time series of stock prices: .. altair-plot:: import altair as alt from vega_datasets import data alt.Chart(data.stocks.url).mark_line().encode( x='date:T', y='price:Q', color='symbol:N', ) It's hard to see the overall pattern in the above example, because Google's stock price is much higher than the other stock prices. If we plot the `z-scores`_ of the stock prices, rather than the stock prices themselves, then the overall pattern becomes clearer: .. altair-plot:: import altair as alt from vega_datasets import data alt.Chart(data.stocks.url).transform_window( mean_price='mean(price)', stdev_price='stdev(price)', frame=[None, None], groupby=['symbol'], ).transform_calculate( z_score=(alt.datum.price - alt.datum.mean_price) / alt.datum.stdev_price, ).mark_line().encode( x='date:T', y='z_score:Q', color='symbol:N', ) By using two aggregation functions (``mean`` and ``stdev``) within the window transform, we are able to compute the z-scores within the calculate transform. For more information about the arguments to the window transform, see :class:`WindowTransform` and `the Vega-Lite documentation `_. Transform Options ^^^^^^^^^^^^^^^^^ The :meth:`~Chart.transform_window` method is built on the :class:`~WindowTransform` class, which has the following options: .. altair-object-table:: altair.WindowTransform .. _z-scores: https://en.wikipedia.org/w/index.php?title=Z-score altair-4.1.0/doc/user_guide/troubleshooting.rst000066400000000000000000000342341364111050100216470ustar00rootroot00000000000000.. currentmodule:: altair .. _display-troubleshooting: Display Troubleshooting ======================= Altair has a number of moving parts: it creates data structures in Python, those structures are passed to front-end renderers, and the renderers run JavaScript code to generate the output. This complexity means that it's possible to get into strange states where things don't immediately work as expected. This section summarizes some of the most common problems and their solutions. .. _troubleshooting-general: General Trouble-shooting ------------------------ Chart does not display at all ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you are expecting a chart output and see nothing at all, it means that the Javascript rendering libraries are not being invoked. This can happen for several reasons: 1. You have an old browser that doesn't support JavaScript's `ECMAScript 6`_: in this case, charts may not display properly or at all. For example, Altair charts will not render in any version of Internet Explorer. If this is the case, you will likely see syntax errors in your browser's `Javascript Console`_. 2. Your browser is unable to load the javascript libraries. This may be due to a local firewall, an adblocker, or because your browser is offline. Check your browser's `Javascript Console`_ to see if there are errors. 3. You may be failing to trigger the notebook's display mechanism (see below). If you are working in a notebook environment, the chart is only displayed if the **last line of the cell evaluates to a chart object** By analogy, consider the output of simple Python operations:: >>> x = 4 # no output here >>> x # output here, because x is evaluated 4 >>> x * 2 # output here, because the expression is evaluated 8 If the last thing you type consists of an assignment operation, there will be no output displayed. This turns out to be true of Altair charts as well: .. altair-plot:: :output: none import altair as alt from vega_datasets import data cars = data.cars.url chart = alt.Chart(cars).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color='Origin:N', ) The last statement is an assignment, so there is no output and the chart is not shown. If you have a chart assigned to a variable, you need to end the cell with an evaluation of that variable: .. altair-plot:: chart = alt.Chart(cars).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color='Origin:N', ) chart Alternatively, you can evaluate a chart directly, and not assign it to a variable, in which case the object definition itself is the final statement and will be displayed as an output: .. altair-plot:: alt.Chart(cars).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color='Origin:N', ) Plot displays, but the content is empty ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sometimes charts may appear, but the content is empty; for example: .. altair-plot:: import altair as alt alt.Chart('nonexistent_file.csv').mark_line().encode( x='x:Q', y='y:Q', ) If this is the case, it generally means one of two things: 1. your data is specified by a URL that is invalid or inaccessible 2. your encodings do not match the columns in your data source In the above example, ``nonexistent_file.csv`` doesn't exist, and so the chart does not render (associated warnings will be visible in the `Javascript Console`_). Some other specific situations that may cause this: You have an adblocker active Charts that reference data by URL can sometimes trigger false positives in your browser's adblocker. Check your browser's `Javascript Console`_ for errors, and try disabling your adblocker. You are loading data cross-domain If you save a chart to HTML and open it using a ``file://`` url in your browser, most browsers will not allow the javascript to load datasets from an ``http://`` domain. This is a security feature in your browser that cannot be disabled. To view such charts locally, a good approach is to use a simple local HTTP server like the one provided by Python:: $ python -m http.server Your encodings do not match your data A similar blank chart results if you refer to a field that does not exist in the data, either because of a typo in your field name, or because the column contains special characters (see below). Here is an example of a mis-specified field name leading to a blank chart: .. altair-plot:: import pandas as pd data = pd.DataFrame({'x': [1, 2, 3], 'y': [3, 1, 4]}) alt.Chart(data).mark_point().encode( x='x:Q', y='y:Q', color='color:Q' # <-- this field does not exist in the data! ) Altair does not check whether fields are valid, because there are many avenues by which a field can be specified within the full schema, and it is too difficult to account for all corner cases. Improving the user experience in this is a priority; see https://github.com/vega/vega-lite/issues/3576. Encodings with special characters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The Vega-Lite grammar on which Altair is based allows for encoding names to use special characters to access nested properties (See Vega-Lite's Field_ documentation). This can lead to errors in Altair when trying to use such columns in your chart. For example, the following chart is invalid: .. altair-plot:: import pandas as pd data = pd.DataFrame({'x.value': [1, 2, 3]}) alt.Chart(data).mark_point().encode( x='x.value:Q', ) To plot this data directly, you must escape the period in the field name: .. altair-plot:: import pandas as pd data = pd.DataFrame({'x.value': [1, 2, 3]}) alt.Chart(data).mark_point().encode( x=r'x\.value:Q', ) In general, it is better to avoid special characters like ``"."``, ``"["``, and ``"]"`` in your data sources where possible. .. _troubleshooting-jupyterlab: Trouble-shooting Altair with JupyterLab --------------------------------------- .. _jupyterlab-vega-lite-4-object: JupyterLab: VegaLite 4 Object ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *If you are using the Jupyter notebook rather than JupyterLab, then refer to* :ref:`notebook-vega-lite-4-object` If you are using JupyterLab (not Jupyter notebook) and see the following output:: This means that you have enabled the ``mimebundle`` renderer, but that your JupyterLab frontend does not support the VegaLite 4 mimetype. The easiest solution is to use the default renderer:: alt.renderers.enable('default') and rerun the cell with the chart. If you would like to use the mimetype rendering with the JupyterLab frontend extension, then make certain the extension is installed and enabled: $ jupyter labextension install @jupyterlab/vega5-extension and then restart your jupyter frontend. .. _jupyterlab-vega-lite-3-object: JupyterLab: VegaLite 3 Object ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *If you are using the Jupyter notebook rather than JupyterLab, then refer to* :ref:`notebook-vega-lite-3-object` If you are using JupyterLab (not Jupyter notebook) and see the following output:: This most likely means that you are using too old a version of JupyterLab. Altair 3.0 or later works best with JupyterLab version 1.0 or later; check the version with:: $ jupyter lab --version 1.2.0 If you have an older jupyterlab version, then use ``pip install -U jupyterlab`` or ``conda update jupyterlab`` to update JupyterLab, depending on how you first installed it. JavaScript output is disabled in JupyterLab ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you are using JupyterLab and see the following output:: JavaScript output is disabled in JupyterLab it can mean one of two things is wrong 1. You are using an old version of Altair. JupyterLab only works with Altair version 2.0 or newer; you can check the altair version by executing the following in a notebook code cell:: import altair as alt alt.__version__ If the version is older than 2.0, then exit JupyterLab and follow the installation instructions at :ref:`display-jupyterlab`. 2. You have enabled the wrong renderer. JupyterLab works with the default renderer, but if you have used ``alt.renderers.enable()`` to enable another renderer, charts will no longer render correctly in JupyterLab. You can check which renderer is active by running:: import altair as alt print(alt.renderers.active) JupyterLab rendering will work only if the active renderer is ``"default"`` or ``"jupyterlab"``. You can re-enable the default renderer by running:: import altair as alt alt.renderers.enable('default') (Note that the default renderer is enabled, well, by default, and so this is only necessary if you've somewhere changed the renderer explicitly). .. _jupyterlab-textual-chart-representation: JupyterLab: Textual Chart Representation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *If you are using the Notebook rather than the JupyterLab, then refer to* :ref:`notebook-textual-chart-representation` If you are using JupyterLab and see a textual representation of the Chart object similar to this:: Chart({ data: 'https://vega.github.io/vega-datasets/data/cars.json', encoding: FacetedEncoding({ x: X({ shorthand: 'Horsepower' }) }), mark: 'point' }) it probably means that you are using an older Jupyter kernel. You can confirm this by running:: import IPython; IPython.__version__ # 6.2.1 Altair will not display correctly if using a kernel with IPython version 4.X or older. The easiest way to address this is to change your kernel: choose "Kernel"->"Change Kernel" and then use the first kernel that appears. .. _jupyterlab-notebook-backend: JupyterLab: require is not defined ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you are using JupyterLab and see the error:: Javascript Error: require is not defined This likely means that you have enabled the notebook renderer, which is not supported in JupyterLab: that is, you have somewhere run ``alt.renderers.enable('notebook')``. JupyterLab supports Altair's default renderer, which you can re-enable using:: alt.renderers.enable('default') .. _troubleshooting-notebook: Trouble-shooting Altair with Notebook ------------------------------------- .. _notebook-vega-lite-4-object: Notebook: VegaLite 4 object ~~~~~~~~~~~~~~~~~~~~~~~~~~~ *If you are using JupyterLab rather than the Jupyter notebook, then refer to* :ref:`jupyterlab-vega-lite-3-object` If you are using Jupyter Notebook (not JupyterLab) and see the following output:: This means that you have enabled the ``mimebundle`` renderer. The easiest solution is to use the default renderer:: alt.renderers.enable('default') and rerun the cell with the chart. .. _notebook-vega-lite-3-object: Notebook: VegaLite 3 object ~~~~~~~~~~~~~~~~~~~~~~~~~~~ *If you are using JupyterLab rather than the Jupyter notebook, then refer to* :ref:`jupyterlab-vega-lite-3-object` If you are using the notebook (not JupyterLab) and see the the following output:: it means that either: 1. You have forgotten to enable the notebook renderer. As mentioned in :ref:`display-notebook`, you need to install version 2.0 or newer of the ``vega`` package and Jupyter extension, and then enable it using:: import altair as alt alt.renderers.enable('notebook') in order to render charts in the classic notebook. If the above code gives an error:: NoSuchEntryPoint: No 'notebook' entry point found in group 'altair.vegalite.v2.renderer' This means that you have not installed the vega package. If you see this error, please make sure to follow the standard installation instructions at :ref:`display-notebook`. 2. You have too old a version of Jupyter notebook. Run:: $ jupyter notebook --version and make certain you have version 5.3 or newer. If not, then update the notebook using either ``pip install -U jupyter notebook`` or ``conda update jupyter notebook`` depending on how you first installed the packages. If you have done the above steps and charts still do not render, it likely means that you are using a different *Kernel* within your notebook. Switch to the kernel named *Python 2* if you are using Python 2, or *Python 3* if you are using Python 3. .. _notebook-textual-chart-representation: Notebook: Textual Chart Representation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *If you are using the Notebook rather than the JupyterLab, then refer to* :ref:`jupyterlab-textual-chart-representation` *If you are not using a Jupyter notebook environment, then refer to* :ref:`troubleshooting-non-notebook`. If you are using Jupyter notebook and see a textual representation of the Chart object similar to this:: Chart({ data: 'https://vega.github.io/vega-datasets/data/cars.json', encoding: FacetedEncoding({ x: X({ shorthand: 'Horsepower' }) }), mark: 'point' }) it probably means that you are using an older Jupyter kernel. You can confirm this by running:: import IPython; IPython.__version__ # 6.2.1 Altair will not display correctly if using a kernel with IPython version 4.X or older. The easiest way to address this is to change your kernel: choose "Kernel"->"Change Kernel" and then select "Python 2" or "Python 3", depending on what version of Python you used when installing Altair. .. _troubleshooting-non-notebook: Trouble-shooting Altair outside of Jupyter ------------------------------------------ If you are using Altair outside of a Jupyter notebook environment (such as a Python or IPython terminal) charts will be displayed as a textual representation. Rendering of Altair charts requires executing Javascript code, which your Python terminal cannot do natively. For recommendations on how to use Altair outside of notebook environments, see :ref:`display-general`. .. _`ECMAScript 6`: https://www.w3schools.com/js/js_es6.asp .. _`Javascript Console`: https://webmasters.stackexchange.com/questions/8525/how-do-i-open-the-javascript-console-in-different-browsers .. _Field: https://vega.github.io/vega-lite/docs/field.htmlaltair-4.1.0/images/000077500000000000000000000000001364111050100142255ustar00rootroot00000000000000altair-4.1.0/images/cars.png000066400000000000000000001500701364111050100156660ustar00rootroot00000000000000‰PNG  IHDR_ÉC/È IDATx^ì} xTåÕÿïÜ;K2BB&웸‚¸‹¸TÄÒ*Bë‚×.Øíë_hk+µ€Pµ%ýúuùÄ.j6—ŠV?*´u+¸U¾L$$™I23÷žÿs&w`ˆYf&3É5¾÷y|ÔÌ{ß{î9ç=ïïž÷,u)(((((($ÁJb¬ª8 8 8 8 8 8 8”(((((($Å’b—¬8 8 8 8 8 8 ÀƒÒÅÅÅÅÅŤ8 ÀCRìRƒxP: 8 8 8 8 8 8ì\²ãÞ À`€zþ¤ÞP VPPPPPH+ìJ,ð’¾ `€5Þp)€ŸX–V.¨Éæ€ÝÀÃ<+|÷78À=¼*ŒP›ð[ªŠŠŠŠŠŠiã€ÝÀÃr×[o' â6³¬ð:­K!^‰›ìOÔDŠŠŠŠŠŠ sÀNàAâîð[< ` €/¸À›x#‹»Ä±xñâyÌ|oüÛFÆ/s©Kq@q@q@q@q ÔŒ1"?™Û€ÄóIÌÞ‘Æ&†Ø <ÄÁ!‹sç¸ÀFÛ-C–û0@uk^´hÏž=»[ßkÛ¶m·:Æ4¨ÍÊ^z©ä¡ä‘aðp•9(ÇïoÅ=ëV€|ß à{êˆ7A·¼ <ÄC!@ãi¯x@¥u¤ñ Ù¯¶þ‘ä ’pðG+Áà«™öJØ<¤¼IÈ <ØË(Øaã¶ j³²—^*y(ydÔúø¬) Ç)µŠä¿¿c€R ­x†¶Àƒx$¤¦‘ÄLü@yܱE{žRس£·¨c e˜ZêŽÚ¬”N|6«TM¦Jã\šmEk©š$$~AR5e£÷¶ -=âmÏ2+˜òëx#vl»¯å±EË9SÖ‹ŽnTž‡Ž8”ÂïiVÀ(h¾Åt(ÔÆ­Àœ½½0vX£=Ü^pFí¥`Æ+Ê8ëxC2-$ cUYÙ6­xHyk¶·Aèá‹1)©)㨌ò<({•ˆÑ°‹­°â¤8büu €Çy®£ÀC¸l´Šµq+σ½7n;¬Qõ±ÓªŽHÙ‚aVù‚vg`»JyJRf½ ‚ZŒöÚ´•<”<”÷£}ckc2°%edJ2ÀV»( èP4ØkÓTòPòPž ûøe`[Jû” <¤¥öTT_ºöÚ$”<”<”çAy2°ÝtÛ” õi¿”<ÔfõyجR]8j}¤}Ä€ÃÜŽD–¬yè©ñ€‰w<æu:³ÚùL¼ôùJží@n§Ø@ªR²5VjFü¯U7"U±wú>:ÍÂOO cû‹±~¾¯ŒH¸Máí’æ/ ærÏ\¿”aMë¥ä‘~ãØ)y(yôd0'G.Gh©‡çÝ Å>uMšý—R€N Gܳ:8Š’¿0¾•i¦Øà'¸À2«†Œ8yÎêÒy'€‡\l5Ôl¢š à âÑ ˜?µÊbÿ@M[k]‡ÎXÁ6îUƱmãX¿o4é´Ì•Þ¹þ¨KO<N'-Øï-õß–n‘(y¨Íª'oV]/j}¤w}\9û/%´’P$Tó8´”‘x \W¹ ³üo‹nhïƒI*J¾mmè1ÏC-€GHÑ()[ý:€Ó\e•³Ð Ý5ÿlµçžàž·:zÊq‡ü~€þÀð!?¥Õ·ôθ Àëß±ç÷ +MàAâZ;¶¸ÀGÖÇyç´Ä¡Àƒ2L-ULmVJ'>/›UbæõøQj}Øk}¤"Ã[¿ÐÛxá/ø§UÜâ«V>ª€Ésm5e$~ìµ5L±>FÁ¼{ý1_ZÖD¢4¤åaíLb: ŸÍõ‘IÝ´ƒNÈûÙ;ÐIY§sn»‡~p˜jå Jn«¸{>Ž{i©¢%2Z½xølGžç+ :1D£c”3¸ÂÂÂt5˲‹A°ІÏÖúH§±ok.;è„]!éô>ÃNàAâÄã …/"VÉL©ŒuUFSê{KÎëßHNjíâÅ‹ç1ó½-Y2uª`u%Ãíþz®o‚Û¡£8? …¹YÉÜžòXïÇ+àò¿ SÏ‚‘Ózc5´¦D¼ýPwV»5VR~¦ºQq@q@q -Œ1"mû¢|œ˜@@sKn`»7Œµéú0êN)¦Iix )¯ù¡•·*±r­°ŠYH>«\Bï:ߎF¯÷håyHþËêÊÙå 5«9Uìî4¥u芌•¥‡y–WHêf° eRDŠ .͹ǿ±³º¥¾¬’׉Îò¼½û•<”2!@&Ö!ÀÍ5Òar¤4b˜‡c "“* 27¾°èp ]-ÆÖzZø¤ãÜùéª8Ù ½HÙECrë# bow %ž)cÀ7x\X«eý8 a–Ø7/õÎñwÔ’;^^p¿Õ+ÓªÙáüvñÄJ‡/é&]½¤ë׿¬Ø#%5ŸnëÍxHn1ZuØë-P˜ØO#4—>z1Ö>·xzY‡Ú•@ÔÑRÕÌ7_ƒK¤dµò<$Âá䯍Í*¹õ‘w“­äÑóäãrÑÒ–ÍÿâµC>ˆpZ¬¿O‚š#=(~à?€h9éJkO|Ë*Q-})¤­öÏÜ@ªL¶+•&¯ É RÆZJ!\*æ:A:¢Ãì Z{ñJ4X^ˆ6ßQ‡äc <&¾ð³éѾWý¤|4šiÂÌÕ ÕJ_zÓÔÖ:4ŒŠy%ƬçÝØaVDGÆñX—Í"kÙŒB·6¶#:;¢÷ÛECrë#QÙ¦:NÉ£çÉ#8ßWÂD%—´U=·ÙAåÄ\î™ëo¯%w¼jI÷ˇ¬}ð×V볬í ­†WÒ†û·ÊR ¨h9VŽ?®µ:lŠw_<̓-°‘°*–ÀCB/¥ÀCr‹1® ZÃøe3¢ÔoO3 ¢½¡ˆkF¬þº´‘hX<ØhO0‰Géª Ð ¤Œ*¼)ÆÒt¥l&BCBÊÕÉAv CÑÜúè¤È;¼]É£çÉC¼ Ì(Ê™ëo·%wý|_*½¥þ*Jó€xxÓj•-™ˆ8À4ï8ÀñÞûQ–ç>6VJ Ü `‡åÕ—`ÎçÚk¿Ý} <$(µd†ÙÁ ½‰Ð1ñŽÇ¼Ýù{"ºÀ’ñ"ð!`ÁEŒP›# àÅ•DEª—xaxÈŒNU/•<”ì§›©È±«ïQà!ÿ,-FIÕt:]K‰áep¯fì@MDIyê¿-¾©S½%ìÀ ;РÀƒý ´ôBÑ`/½°ƒ<2°%edJ2ÀV»(`¢tLšýçám¦jƘÊb';âDièÌ3:º×4(ð`¯MBÉCÉîž Žì™]~Wà!’P›•½ “’‡’‡]7 ;è¦hè©`îÀÕW…œÎ šÕ’Û¶»ÂáµÅO?-=)>Ó—ŸZŒj³R›UÛ K­µ>>ëcïÔ©SX£Qo.›VKnmêa¢|ÀЉ´ä–¦U'4ÌØ%bIÏüØJ×”ZgXÙR"¾ã´Ü/ý/¤’dZƒ)xPà!è:ã(G. ºŒˆ†1óvª…Ú¬ºN‰(“’‡’GO1à`‚7¸\G–?¾& ï|àæ‰ÞP¨÷, t>™¼tÀÊ•µä>€”Ž–Lé)—dÀ ¨~`7€¿8Ûª,9Fe½Ñ*O-4¥BeÚ.ÒÆJ{¡ÆF:“4\ñ“ecu s>%Â03IC2êc: öZ§J=OrTq9— p¼|e«M¯vM›Zª¦7…gup„!Õ[ö@P à·öW@jªÕ Kj>hþi5½’^ßJÆ^u4V‡Ž8”Âïv0Ÿð0éÎò¥DTÔ²e8ƒëÃ÷¬X'P%žg SX–ŸºÅz¡hèyº¹÷úë¥ÿO‰ÃUSó8´T>ñ@DByåÄÑã‹öZr·~à«éÕ¯¬2Ö¬ç‰×b.€¯¬9i¿_¥²SËH‡N±¯õ›í`>àáªÙË¢.¿ŽZ†+yô<Žek½P4ô<ݯ1 Z±ªÝ–Ü»¯¿®Œ‰*ÛòNÄ€ßfV±¾%VÏŠ‡­1ÒÏâ?Ð×ê[!G÷ ¹Ù¡Ôêù€ù::&Ixi)ð0«hƒ`wð í·q¾Aði*Íä%Yl º0 )ñÞˆt.%žk ;£'vÐ ECÏÖM9Â0œÎ q´%·ÎT¡«òÔY¶Þ{€›¬ªZâ’Yà=+]å§–µ5ƒö_Œõ | 4ª¥ Ãaž•w¯¿¢CíHr€ ´]Á\’¬LËp%û¯Ñ´:ÉIì v !I¶uÛðnýBoã­¥Œ¦ººß 2ݪí-9«’j"›‹Έ¯ß}t*ìo˜¬ É†K'Oo ‡Qž à`—MÛ.tØÁ8Ú%{Ù %nÃ)?ØnàAÒP8H‰M‰•´)l!@B{½’·*^ )Ëù©K{…În4’IßlM':KCÊ««Åv CÑгÖG:tÓ:¡ÀC:$ÙµsØ Z›Oy:g:ì`í@ƒs]o':Ò\;è…hèˆOvùý³â™]oÚóºüw“Ÿÿ•¨ží™v}Ô£ßç^:ËiÀÈÂËŸŠz‚ó}%L$•Ùæ¤a˜4Ñ’ø¯‹g$›}aƒ`: ]¿>Ú3\JJ ml6¤ÀC„bƒÐ•_V1/˜ñÎõ¯–…7–ȆïyH<4]øfHÕɘx8hÌeÉYt%:R%;è…¢AmV-õÔ:a—uj^tdKìð»‚]°«èˆÏŽ8ÊN†6«&ýùš!g}1ªg»§M]J "06šDåc,A‹#bÌj8 ”Ô£eÊáÍFE²‡-]ŇŽTÉt(xPà¡í•j‡õÑ‘±Ëï 2TíÛ CjQ!À6ñqNáÞ'Ý·ÍcPV<™Í‡ræV>”ñ´¶aî™vÍXÀ­%qÜÕ"ó#Ï·“DxPà!vM‡tpQ‡£8«ÀÏzKýK+>ÚÄyL_ªéwÁlpfù[c}ï5f°Ï$9È;åõþäŒ ÌmfëÏDS ܘ_I÷–ÂaºZÛ0cG(e~têÁ6Ô xPàA‡tØ5ÒÁEnÝåyˆuÌŒ¥TúŸþ1k/½ºÓhògçï?äÈ;ô¶ÐVW1òÙH}¿)y£^½”43è¡úÑ4§þ üXP´ÐN×L£4ûîƒvVD­{Ëüèì³ãïWw37ìÀ»Ða^Ø%tZš®™K‡ ðùó¼¦Y2¯§p䥯¡—l0ßÝã×ç»ÜÞÊ¿¸}ûß•,ІƒýѸÿ´ŽÌïÿCëÿNääÇnüú’çÝØ©6݉‚‡XŠø´Ñtª‡ôBÑ <Êó <é°k <¤ƒ‹Êóp”Ò3¢¥Íý(¸ÐÌêsQÉ»+‡èFcÎk5þ)«ßîy¡#…#8â>œ3ì½>ä0\0ù#Cçù{ÃÅ?(ÐëÎ@7|cýÇ<¼ž‰—>ÿ@I´FD*W{DZÌ0ÖR["à…g?ýte*Ïjïµq+σ7n;è¥ò<¤ÛÚd~>2ÀãÏûb”Y‡ô#¡Ó9»àR­ñЛÕž÷2"Ù'’f¸ôìÚó@R IDAT H3³)»þpNÑŽF&êGŽ€";ÜDL~³à?¯yò=>yœˆÈäHéßß”TO‹˜hÓ0ÙœQ‚QÄ(b`“×g“Iµƒ^(”çÁŽF‡ lDžR‡ 0ØÚ‹Qê4T»ØïÞûêj0¯o80ÈÃp\IŽÐ©Ž¬;{Õü‡ ø˜yd„H˜Þ03íè­¶Ê;”7^ñò3á/]ÆÚçO/KE\í¥j:tY„µá2+­4éŠ=/¾GìoÒ»#» ³è>B^ ;è…¢AÚ¶"vX©Ø¸î¸G‡ pÝ. h:ö¼üGÎeöê›™1§˜Ì{5Â"6°‰ÿŸ¦i·Dà UM7Ã0œæyñ4ÚeøÂ?Þåd˜ž_tÂTÄÕY>ˆ'Åé¤%òléÉašØ%BÀ¼¥þ„èê,©¼»7 ;ðÁàZÑp¼vÚA/ì@C:ÖyWÌ¡ÀC¸l´BÃðÇÆù‚nŒ%^Ó0G“®“aîË™[y¦°¿é¾>WGÎòk¸±þçkTœæüø‘»-;`ö6;xlj{è,ŽUÐ<$¶#¢r¡?¾ûg{êÔY:Ò¡ªŠåy°# T@*«»kçPà!ü¶ƒ¶ëbløiᥦæøƒƒÄxœí["#nâØw^³Âÿ˜WÃ@m!jöÏôdšh®“vrñ 0;hU…²#\rFvíÒ|©Ñé.¬7ök•Ek ÓñÌ8iöŸ‡3è²Ë¯?Cß9MÿhS.Âogßí_ך8[Ͷ˜~Ýf‰YÈÄÆ+WFïm ¸ ŒaL¨ÔMl”y[ ˜Œ¶ñL0™Ü"êJ½´û¦i^Ø’[Cv­ÀC¤ðy[ŒïxªÈéhZB œ´×ó­ìUÑM9›ƒ¯÷9åâ«¥·…ü8̳òîõG >šuÆÄŽ[ßÈ0ì@Äøâ.ÿ*Gî‘3Yõ½¶º ÈYU80+DôŠ„™eß|- Ñ̯¹W®ïÍnþàÈ}ï&7‡^öÎõ/l)Ò–ò8V *n$c}ÁéÿZÇDŸêwÁàµ9¥þ2IÕÔ€Q&àÓ³UªfJ«çó¶>€ILMì v !1nuÿ(2 »(`WÑ1iö_J Úù&xӂ쇛rµà”†ÇêO…¾øá‚›Î*ù×Kn“ª’@s¿ aùîiSghÂ}.÷íwåúƬG¶?}™ mÊæ¬Âóœ0‘nXÝ7ü¥F4Š %ar„ç ¸ 'y>î7Ýõœ;›Bþ?6~µ’I;q²kw„¶g'ƒËrJýkÜ<ÑåF3"Ì1gÌÔÞ}o!˜×Bgk?"e Í ÖfHÜ£gàf‡»à`„Á›`@Ž'F1‘Ž:ø¤ª2]%µY%&!%f>Ùv¡Ã.¼HLƒ»w”à¿]°«è¸jö²hõÇP$TòTþKeÃ^øúŽwÌ1CgM9eò¸u//zÙ”sJýÑ/û]×_¿P#Œú¥ïü7?ô 8WþÖ/\s¨w¤é‹Sª?Ìc¢š÷4ç™·ÿá¿£ý.Ä[P§e}ù±¾gaBŸ.t¼×HÌ ¿ZóàF—ÃU~óÂYYUx­§Ô_›_î5O9e²¶ysÔûÁl!ÒzÇ— Þ3ýº (²Šv Ë.Þ±Ýãâ’Xñ§À_)@ç˳bÇ.©ªLWÉC‡Ä$¤ä¡ÀCG^ÊÄ4éó9J‡ ÈÝF©+‘|Ÿ§êÝÕÑàBψ}Ñïž:uôÑ ^b t«Ú™åq l8¼%‹0 e߉&Ò#÷ ¼'eT,Çj:°¬ñÊê ²‡_éz¥àD}ûÇ(j6^ ñ$˜à ƒ—¯\ãÞi×?D¨gƒ£G(¤Ó fäx|Gܾ=½Á¼Ñ$”c4•$Ù–Ju•<Ôf•Ø¢VòPžåyHl­´6ÊŽàa ÙDvˆXDçFãâš/PÛÖ+/Z´ˆgϞݭïe£Ô•ž‡hÀ¤3TF,Ͱ€Ë¯_“µæÔ\ „ô¬Ü|­ñЇdòÝž»+ŸŠ—Ûži׌½/‡3xã€àÁæ©»LC¯ãˆ»*æEh-`R~óQÕ'yZí‹Ríñ0áŠËWÎyxï¸Ãq9£`A@…:¿…úô{㮺BúåöÁåqÁhÊBc]¾Vs·ÄQ¤¾Ììc¤í ›v ¡+ׇs‰­;è…hHŒ[Ý?ª[7Ù¯/´Üà«^p€³ÈÆñ€·-à°€œ››­±O‡c\éÊ…KÕ®7ÕVe¡ñƒà‰Soo-Û¢-ÕŰ©ë¡CÅÅ‘Fo/M o øûß1äÉ'£™’ª©A¿l¼óÕñgé›#õ;‹µªÅ6øæ`ÉÞe*’c‘ðôé \Ë—-eÀg26 ^±bŽUHª&9’Ž©gYûõ~ßÝKÞýýâÁÎ}½*Âà›áÓªö˜V§ÚW#þ=»RmñWÑÐ=ëCÉ£ãÍNéfÇ<²Ó;ùú|ÀËã gÖRªx›þËíòO‡î5޾ñ™bŠ—»MÇÕÁ½Ã†ª‹k„B žtºjËc1 ò7I…$ÐL9& âhl3•H{ïXE¢‹gçµ×׺è7.`2`DŒÒi9פ;Ë—Q‘ôÑ0Mm-iæ0 Z4ÛB²Až_tc¼¤z)ãhŒò}¹àxêþ×áÍz.„ùaÔA­ñô€¦;á1Ãwa»œÞî¯Çáú&¸:Šó³P˜›•°dYóItì-ã‡ÃíÔ£ÿýÿÙ‹]ƒ¸|L? óå$<—¨8 8ðÙäÀˆ#ì¸/ÚŽ™vbR_²3š€Aã0mgSe÷Ûö²»pÏ—ö8ѨÏo4 G£æhêKS¤É[͆ã#bÌjëØáÊÙå µh›ìc—tãüåŒóþšˆAˆÏQ9›æh9¶`B vÍŒy#R]ÅÝ!–´*ºw}(y´½z”n¦jYºç>;ɲ Hñ.Tø|xðhð dñYc¢žÚWšîZŒÑæWÌ$¢aŒ·ö¾:ì "ì|ж“3ò Í>™´ˆËÙ«ÆïȪ¯kðÉÓœMœ3|cïH}^ƒu2)d.ù뫋Ãy‘ï \þÔ§Ž&ÝU>…˜¤R¤¤åD‹V10Eþ}çµ§M¾øÜÑêºd 3*—Žn80¸0ôÔ;\M»œ½ëÞñ ¼û¹Ÿ•¨l‹4Ù¨îÒKµq·.@%{Ê4-³ŒOÓ¡AÍ8Ç˶h.îÓìYO„Ä<üËŠ¿_àé¶èRž{-1L®Ù³O—šR[0Ú Kw†Ž¸ûnÁÕûˆ¯¾bÔ™Èì5ìýÿ„œíðÖ»I3B̼ŸÙ¹ßhðŽi¨Ð©é5cЪ§Kù”7Žó,}þ’(xˆŠk.<ù_ס®Kêhλ;²‹›tg/·is#Un¯´|eYgׂŒ´¢Á~ë#¯Xgu¯½ûí BŸè° ™”u:çîР¦óa Î%50n1^),/D›S)ð`Oã¸wêÔ)¬Ñ è‘bŸN@Ø áÎýoGªz­l:<ôKšÞdx}ò"‡œ_6M'‘³éLz?RW°‹\¡kaèŽÐ~ßw‹_÷G9 † œFÉÉ«á3†<Ý4QÛi ˜ l¼ê'変Öågô›™_5Ý{~vÔ˜MÙÿÐ=Õý™h¬¦›½]¹•µ®ÿÃl8ï“Ó ¹ƒÌvŸ¸Õ]¸û=«É0œßËPùL „’lœèuˆó}UfÞß6Þð×½fÁbùA¿]i\«üPD£!T0ó…DZŸ¹™[5â3ot¯>¥ ®È6cPu»Œ/;_©ËÓꪥ:¥wŽÿ8¯@¢à!(Œ¦¼)øÛ!#æCƒž|ò ù-ôÉ൉f_HÉmðMfÊ‘´U÷žW†#x4ï^§J]§ªÉ#Õy“¹Ï4¨ÍJ‡ÖtÖ.º™Ìzê®± X]5£^“Q¢s £™ÍíƒV¬’îžG¯Pˆµî&"/4”HënY&žˆŽTGŽR˜(Jôë ¸hº{ï««ö{Ký·ut&~ï¬N•—ÓAíClò¸Pk·ÞÝé ¡£g$ò»èP4Ø ÄØA‰è®Æ(ð)ØE;KG´ÉãûD8‘Ù¬i¿“X‚ÙĬ]"oéâ΂‡–÷ó<_QÀEe±*•±ß˯XóLøK`<·¨d¦€?_øRø‚Y<¸öásÆ·÷5;vøô˜æ€Éø¿[GÒÂ;Ö.<ús2GÛh£-.“ŽŸ;>x‹ Ÿ¹jY´Ñ—Õû#ê×î”Õ ‘MÐEÑÖæñ—Ä…x](M@t–†tñÌt(xH—>wõ< ŽÜjO¤)»B«ò\ý­âoOäüçÎpm)Úgô ¿9'Úãä6×òŸ^E&/öÜíÿEGà!V,JÆ‘‰W®”†k)_ HÚ' ›Ø˜}·]ì+ˆëÙÄö†¦ÌÉÞ¶zµÄ x]<#ʵqcgu3¸À7“Aâ½ Gß¼ÖSêï°ŒwgiHOì@‡¢A‡tésWÏ“,xÒÑò¥™ºo¾¤”´ôv5ñ­=OU˜Lßb ,ôM‘ôÇ(XF8ŸAYRÁK+hNýÁ¶dûfDƒ›/9ÿn° ›à|˜8<$E"AïKU6ô‹Ì°+§öàÐú†Þ Y=讬>!²+<ðÐï ÇÞósï¢ïº`œþfdTÍ¿ÂgÎŽ{‹çùÛHÓ.7Ù\ßknåWÛGë9Äb¬¸bÅÂTt8°ÀW*GÇÝ˼Þ;׿07Š[/\{_]¦1—uÇ‘…ÐÐÙÍJŠ|‘N–wŸeÀ«Ηlul‘¼ötVÉ?ñÓw؆tèfOâE:Þ%Ós$dìJ×¶BTŸVzQdšöVçWà!}àAf²¾¨'4¬9‰DÖÇ‚ëO½y²wãc§kFÉY9ÁÐÙ¡Iié½,1D.b>âåÄôŠvÿ‰tS©aÜÞF—Öt¢¾£ÈYÝ+«¦f°ùtïÑoÏî³d¨—ûæ[ž0]M÷ù+ƒ Šbh7ùmï\ÿ¤¶ÀC\Ðdˆ”4/X€äM4‹"~náfŠ7A@I`)õ&àJF@uøMzüýÁënÎéCŒætlñ 2nj-Ó¥µEšÒa\ì@‡¢!½öª³zaytöºêþdÀƒDË—¡äõ?nµË:eŽ]Ñ@t\ <Øc1Æ‚ý×½4yøIÒ» ˆ~¡›˜ÌD#A¨$ð̘E "ƒy?«HÖ$Æ¡<ü¥Í;͇oqÿ5ß6Gpc–ãP¶æÚåq’©ø 3W€´æ_<¥•?l <ó:˰ˆŠdê7Äæyâ c€¢eÁ*;¦tÑ=vra™ðš&6µŒ3iϤ‹†Îš;Сh°‡½J'¸î¬^~VîO<ÈñÄßüÞ¶|Gì±càáàWŸ›<ô´sŽækÚPbó#ïݕ゠‹ÿa2Fk̹,1 ƒvö5 i«›Ø°ÂyQåuúKõ—âý“465dÉA¦áA IB6ÒÀ`Í@Û¡ážÖŠDÅ*;íoW«¡3•#c1ñ¥²?à¡3‹ß¦Ðo: ö°W <$¿¢“2ûï| À G¬ÇIüÃ÷Ô%ÿøôß¡Àƒ=cìØ¢nô·&çnúÝXÓÄp’c æ^ œÌ„0î0–€«"ÉèØHìÖìóAåZÈÌ2û˜uûò‡sê=†+TxÄUgzçéïý‰I¿Ád84 ^0›¿ã[yaK­Š7Ð1 +þuéÒd 9©ô¬8 ˆëÉ@´þë˜!1ñ€BmVöÐ˶š_…‡‚¹‰Ž£„*€ŒT‚&e¶h +UÓ$xðSå«í`¤ é[é0zJJéУî˜#YðPàA_³ˆ}À×$ýµ–©—Uà!}‹ñØ5o ÆZ޶¯nN; ‡yV"ÍZÇc€#˜Qµ‹ûŸ_eô:Õñ‰ÃE‘ðHÁöwŒQýOÒ+²tbäüÀÃÁ[ï3‰w;.™ýÈ5'8v÷êm³Í°+¸Ï(2_ã1Y»Ì~È×jµlªÿ÷“¡‹¾²æ¡[1Nì|ðg¬¿õÖj)-­ÁX+Ç"L¼ ·iòSüF#ÏJ‰gèMáYÅO?-µ´^j£hf§ø`:ìÀ ;Рä‘VSÓ%“%d¬K pxRÒìÜ`€SUÌCú6ítI¾³F!ôè ñ I‡Œ~aÏ÷•ѰDË+·Œ7pd×NräÔ~Qw?ÎÿÅû×þ¨tá!Ú^××ÝO‘Ó¢µ{Í¢±!¸róPösŸ†yÁ™GKN¤½žRçÒâ|GÝ ;Œ~MŠ|%\Ïžª^fc‘†ççÖì ¢ÍÄôŒAæÆݰn×½óXÛ¼yµ#ž»§MÝL |¦ÐôAËžù§¼[k™é’…2Ž=o}¤C7:»F{ j}¤C’];G2à!–ªY `™E¦tT|À¹ÞêZÒ[šò<¤ÏH§<Ä6fÒCùzVÃHÓpT› ÞÇ1òŒÛ‡Ð^×­Y5t„ˆpÿ;‘Sç0úf_âzk‡ãà×ë/3ÀÃÞHà ¿Ýµê»Þþ[¯}Ä51«’úhgꛌû¡‚§ŒzÒ¼Ü<àêUÏ€€ƒ:f^ÿ›ì- ¢àÁUSRüøš¨Gb×õS+4"]¿jí°aªÍ*}v"]d½° éâg¦çé,x~Rûál DdšÞçWà!}F!–1æõñ­±å É[¸KLIËë€Ãud»ï¡Ú¾"MÙþ †õ?ÔKϽÆý’#—G¶D†~ò®qêÉõ]® œï½Ÿ…Æ·ræúk—-é–ºnL\<ðÂѦÈÌÍúÍ ‡k‡ž\U5bÔŠ¼1¡íÙ…û ƒ×t\H שּׂ“ 6¿¿Œ&Q9ÁK »åØŒ'M¢ß€y´F(‘w3"Ƭ¶šeu¨€í °ƒaR4¤o}tFb÷*y(y¤CºcŽdÀC|…I9¶ÂP?PaÕôoHÓ à°@ÄšSjL ¯9{ÏQà!}‹ñXã–çg½¥þOµenM.bsfÏÕ¤“¤ÉK¬\ù¬ÔFh:T|CSMñCYd,Ë;«Ï®÷ƒ4?9L欈ÁN ׇØ·,ò¥ ¯„Ï~Àëž_t£èöL»f,à˜ó`¿KÎ ‘Þ0©zó6GÎêT IDAT0@ÎÇúžùqµ#g¿É‘Ò 5;¾´9Çwë$oí¨s?ÚðÀÙ\Fy¨d\0Q53×Q•üYƒùlÿå«z·dõ]mͳìB‡xa”<’µ&Ý?>ð Ôæ[“ß´H—€Iùï㺦øZBË]¤/Ákn°<‡¬ð€Kü4îØäSRà!}àAfŠ5°b`¸øÛÊ$hKæb˜*ïy`îî¬ü)[Ü}^^ß{Ȫß|¼ê 3;ü{6œgEtÓØé.ð¾Ý«×G‘£  'èhÔj½g¼goùÀÓ¯9 Øä²ç~VÍbØ7íº(<ç®ý®Üþ^#ÄEá:Úš]H»\yA¶”î^ûü®ìü)¯ç rjŽá»ò£W×’†B“ù]’†6”¿1àãcÒø-[nGßßÓÈÑ4Txæø7¤¨ß¶Ø4í°QصY¥×N¤º&âﳃ^؆tð²+æH<¸¬2Ô1š¤0”Ük†Õ”b%¦â c,ƒ4ßÐ0Àª#qO´ÿ@³§c$€h7Å–—ö2 Ϭ{‹W¾ðþ¿ ÃÁáLZ$HÚþ›½W0¬ñp–Ö÷{Ý®&vyݤ™[ßÏÏÛý»ÿ¥®k—Ú±¯o8øJé +ÿÅÀׇ#îYkº&¼yóüºAsK¯•Fz]HÓpåMÛ¿ZýaÃÛÞ¾*gŽÿê ŸuæòGТÙ"Ò[C“4ã{[ĺE§c̽sý÷“ôeäh°×úPòPòHÚØä†DÀC–•Š)ŒZ»Ò]$J¼W[=4ä™RÑRrô_·ËKn°_‡öµ¨» ÓÄ;ž*:k„Ç¿igÍê³êwe ×ÈUtvÃÞ¯ÑÔPªÿÇ/Fžyáºú¬¯ø·69\‡sOÞð›¥×-Üo»&VmÛZ\oVß9èÊå&ñ¸ “îñgÓ¥‹+®š½ìY†©#B¿fçp%@{P¯âp5gå^wïw¼õ¬é ¾Ÿ å•3x$>Úïm;²‰6¼¯—ÇÒTíÙR:Ý-õµ}¼D”<šùa>Ø…»ðÂ&ø ]2o0€€ˆÖ.ñJÜkÅ#¤ãûYU,4Ül¥ƒÞ@ŽH„^ÉôãŠÅ‹Ïcfyöq×Ô©SÓA‡š£“Øw8ˆçßÚ‹‚®7Ú¶­¨{wŽ|¼s 1æ¶©øã“/‚ÃÀ·ö¬‡So„{œ +vôÅžˆ“ð&Üõ…XqR *4¢!d o®S΄a¾<²æ“(…Ó/†^Ù¢¦ÀŸÿYê=~Œh8ˆÁýzã„/]·SBMp._:|\ÐƸq0Gœ½GèÒ_ÆÀ0Ç_ý›÷ãpùßFpøUhpqôoÀSñB¾³8ñúNrGÝ®8 8`GÄúàØ‘6;Ñ”xz[[´|‡t[ô } ž±&ÿ2I•@¶íÄã FbƶU[[Mw£è+~²lì˜ayÿÞ¸óðÜçÝ ÇPxý†[Î 9=ÏÖkî¦s"›O}t蘧A÷¹WäfkõÆÆÂÞ[7h'ópÈ5þÎavîâï.p kÈ%Ð~blynÑôY“î,_JDE’ŽÉÖ‚y¸­¤ ˆÌÛóÜl8LFydÖ¬¿¸–,YÂhf3B¤9:êmQ¿À·@£Zë–Éà„ÛOÇ/”Тh°ÏúPò8~Qºi'hÐ1-‰€‡®:¶,‹·ãúdH&‡`IÕ@Ž1^l/»C‡Ôã¤ÙΠˢE Lª”"K¿ýäÉG{BW’‰W®\×±j2ßè!}¶É±…s‰Þ!ó³òÍ9¾HPÖT½& “y0Ë{«ô¦ØêÉçÍî~añ0ÜiŽ-xͽ×Õ›4~Ëða6ôyšÎ·Ê³W÷™YòR`ÌwkÌÞßl"wd§Ñ¿îõÈÕÄ$›Nj:ØpImÅYçöU™§œ2Yê<È}Ï÷¹f`¤fÒ€ÆÀéÙ&—©s²yD;®š±:±xWDÂø¥Üëpâv 'ærÏ\y"$CƒŒU¼hæ˜ø`:ì‹du¹;Æ'ZÒ58.óÂ0Ì*u´—@'_$W>òHŠfüUdewH­‡6/ޱ&™…;0Á›ÀF¹NŽó¿}àõ»s8ä΋4øûM÷ýY²t0é®ò)Ä4ãÊsúO^ýƾ(x˜vèÝÜñµµñàA¼·T½ã—®›ƒ—¯Œ›A¾êu‡v;@Ñ4åh%G~9pùSGu%£óÉð"Ñy÷L»> úŽkúe<6¹tÐÊ•ÇpË ‰Òj§M[hQ¼h–ˆø`:ì‹d×TwŒO<Äc}ÀI$¥R¼’/w¹•ÑïpÜ3xH <Í\ Þ¢r6ͱß;°>zlÑ'|²·Ù”Rÿ‡Tã•wýeÆtºIØÊÐG&èТù·†ÁÓVæýÀ!^ "®'Ѹ„WŒ³Kÿ/|Ñi5Üë#¿QôüÉ”#‡¢k/[‡ÔŒB[“ÓoìU®—>&G¯dú?¤²'ühÅ©YNóK“£A{qõ¢iÒ¾R3¢ßhù`8\ýã+á—Âît™œ[·g°/\åÈv4æ÷õlkr¼W§9vµ,÷õ‡ß2$T#ÅȤpH$/ܰ?¨»´%ýÆ­<´÷‡ÞçÆMâSjÉíÜãêÍ2vWR/4„³r«¶¹ûmÂëÆ³ôc±>©ð¢£;F’#§ëÈÒH8w¬Õ„¬U“ :¢Q‡¶9¤ä‘š½JVçoy$JkwK<­ÒEs€ ·zM ÏCcw¿ŒÇK Ù… ©•Ñ#ðpÉæMÿ³mÕv§ƒ.‹°6œˆýD¼©å×l{rO–†Ø\ÿ¿ß÷Íñºï!hgÓ˜üïç,‰zäªþñ¨5zVðÒLÃ$°ሣö×57Ï»´n÷ÿkÐRI2ËɆávhY¯¹ûUow„4ýùý®ü_X·müiÁƒ´¢³ûüÇÛ¯jxãáÜ+Ž|4’‘!M‡  “†€î24w#r¸Qs„äÌ9¸£×à7‰ç#» ³ͼhÒä‹Èq{ÌÑìÑÈî©SG“FGZbü1›¯Xq\öŒü–ª<Ò¹¶í@ƒâ…½6m%t®°®™+YðO• w+Y]CyOQž{…Ll‡fq‡Ã¼Ã4µ&jȾßÔy¹oÖ4ÓØ7lsmc¡ëCoôNW~ý´Ãï­‰ vkÓ®½[þPxNŸGvݯñÝÂ%K’!ÿMÀ³ów¿0¹Asž¸Ã•¯‡Žä )ilº ö¬+èk†Ütb˰“þùgDyƒ·Ôÿ©Í»5õlÉ‹¶6~¹7™£‰Í ‡V¢F™Œí2+4Wmy¬fE<-™G² Þ4¨ÍÊ^vBÉ#ÙUÔýã“×H_CoY%¢÷ZäKãªÉmU|ìêWTàÁ^F!…x4gètxKóÊþ#Gg8üÃ3æëYÁÁ=#µšpþ¾G‹Îé— n+ýŸ9ãvüü!vnxãÿþ\pú¹{Ýyá²%ß/–{ŽÕðöç•Ì”ø¦»îôeczÕ»ãG7VºF¤ÁIƧ§šƒ¡ÜܰéñîÓ=û¾0üÙ³¥3{ˆ°,šÎٜʹ®­TΖ¼Î ’ú*š.ב(ˆ …zÏ’l‰dކ’Yc™G2Ï·Ë&a:”Yð}9ºˆÿMb ö ù¶νÃ$í¬j=;§Vw3×;._]¡ä“ëì`]ךæv™‘`˜ôl¹¯Adúõ^µƒ"‡‹t2²ò8Ž®™:¤dBwD8ìjä>ƒ7þÃég00Ÿñ–V~§þ~ßhÒéA+óHȲ¼ü¬·ÔM'm©,)^†æwàŠæ7×”H´W²æÄºiºs}´çJVžé¯äa/“™vʼn€‡X}‡€æœú¸ë ¤xйV,DWÐÜî3”ç¡{‚§Ãù¢å’G É›,±¤óåó‹K&ª WÞùÄh͈&—…L÷F·#4…©gànÑôÛä¨BwD.`B/6o8Ãõe½þ{ëÁÝ×]} éŽ{ØäF°¥þÜ nõ¾¹á†}®^÷êlújîÆCzvðÿzŸTqi]Å s{úè`WH'=Û y`hZsÄC ’2Ø0 ØÐµH0gør¹C‡ Dÿ¥Ãæ¬úù¾2âÁ ÚÅÌ?UÌ ‡y–ÄA´f¤cž†x¾¤âu b²c˜ÆìwdÙÐZ°¤Ú0×>;lšŠ†îµW-í‘䑨ìîq‰€él¹ÀÙVwK)Sp€?Yÿ}*©6Ùí—Ý»cU™0 ”Ý~ÕIÿþÕ -“¤§E"J+-Í07ÄÚyG=W´—Ås‹¦-ŠÔr¾XþËWÜ&áÍ¿¾²Øü¡O(˜Ö[÷:<Ë>Î*:é‚À®ÉnÓlòEêê®À(i`Í`“ö˜¡ëÎÉÜô’ê}2¹aòÒ§¾üË€‹Êbý8˜èFyƒ¶Ä20þ?{WEyþß÷›™ÝÍnNB rƒZÄZ­xÔ*ž\±ÚKì­ØÖ*[¯Ú´ý·UZ­¶ÔŠ¢­ ¼!Ê%„+@ wöž™ïý?ïd',!!»$©î9jÔ”Ö[ß\çP`î9Û¿¿ò If]T¸G±Ä·FT'Üþ|Dd$£A’È@f¸aEñFDZö®CÀ¿ƒ­Ç@ß¹W¶•nâ8 ÚçuÃlf¢<$çaæÔÉíl$-Ùó6Ñ1>Œ»ÑÐØ5c:{b|i[̘¶óSÚ‡eNØ(R6Ûõʉ`®»µÑ)¿'g3'µ±@ÖÇúÅRàáØNÆáòK …7\4jù–m(çNt\vO™%ä”ÈÁ$NýôðÂ~fh4¡0ö+Þê,3´ã'{ÿ«y¥áé(¡ÝñžìÐÃYCõo\ûÊÂçÏ^Z0á§—5V•NjÝîó˜ÑhêugËH¡F52…+˜GºG)MÒ… Ñ Ô‚ÿ‘zæ("ôpØ¢¸²Ò*µª†óÚÂmK†:͵y’©¶HTá³Sm‹˜Òfg$µYÛùáÄÍÊ c‚ÛÅ v8Á†DÖF'œÓ[àa´%²±æÅ1=Rà!±Å±þʼnDô)˜ðè‹¿¹êõÞè<;tÁ÷jO˜Dèzt–-÷ÿœXIæ%ˆ8%î3Qª^©‹Áº±4m81¨¦¥¯OË}íåŒs(„CüÅÞï—5¹h*d¦‡À»º>ª<ô´yÅø <霖ê/Œ ÖfF›ƒê 'L½Ý/Š.ô•æM3­™«¼%;¤PèDÍÀáÑú€GÙ„²h(LP\Ai„Ó9ÿÁbF3P 2mµJ¦¡º[^UÒº+³v—–Ñò†× +س@¿)ð¢0QäK„}>¬Š×¾è¸0uÆó`çktÇóÀÀŠÏ¹~ïÊïäA--ÆÝ÷Åk[˜†ycǼ',ŽN°!µY%¶NôÆzè=œ0.œ`C¢íu¬ÏK‡>è§ À®ìhž2_@æðh?È„âõ#zÒ4–qìWO8Ù{5—꺾¼sàðt¾¦FæÛÕ4rûAWŽ ŸâßéÚfë:"X\²¸rƒ½pO¹ô…=Í.Wж³•¼î'[/j݆.i0ó£W¤Íô(þ–*¬þÄÓ¿¾Ÿ>¹ZË©&ïøÇ ÿ;?©yë'ˆx*IÈS=êÊÝC’D¿õPJÙÍŠÇc`©Z ¦…":*ÒÂÔÝýwlvg5ìLÓàºîD²:öG{¥Á*ÕÝdå‚‘lûLD‚ò¢Š +9´ãa{wøß‡…ë2.o¬bðý£ÍY2ÒÈwu½ƦlH‡xèln9elödí=ZצÀC´´S`Wv´K^l‘Rÿ­&Ü—ȯ@8¬+_]þÛé gûw×|ݵ…í¥@U`ÒVøý40Žë§‘ÁÚÕ!UÍ=³eÇÈ<#Í4›IÒõ<ÿO=ýv®W½Íë¡äVU¥ùÐt È 44ìsÕD…–»"k˜;×F'¦…J²÷ìØ@jÊ „ +ö‡bï LN’ä/ö›ZšÑŸ|{ÿ{#E›5™ ˜ƒ5ÌaŒuµ €Ð2¾Á6ÒBß­µ‡ ɶèBÔŠECUWÓ¬ÎÊ-Ï¿éØ’ ËIŠêã#û¦žÜ}ÑàH³®J!ZUTYÙ©-ÝõGwýÙ¿;Á†xH‡xèÙlN‡žµ_§W;}q¼xNù^6¼9÷߇¾½Ÿÿ¾è–E R¡!aî¿ï/³ô"zãè®-.ž³ÈÚä¢F´LSÕ¹Rc‚×x¿êñÔ«î™ZzæôºîªíŸ¯ Ú¬íA¾`ڻ⸧ßUiÙ:ÿ?|õí“Ósš0œ¹+w ´¼’5Ì\Òï¸YùtʰO×þ‡HúE#ƒ¡àl;9‘Cdš …*¦0ã#ßo£;/ßGÑáyz0ì6£­€˜gj¦Î ({enÕðºèBq®PŒ`æ¨ÕëÃû Â{‡®'¤JXW\Yy)VgmŸØÉϵmé¬Ì’·õ8.a}:ߥF­ê .aåðIW^îú£7ú¼»{8Á†xH‡xèn¦þ÷Þœ09îè™9=¿:•óÐý¢`ƒ‡®œc{Ž=xpÍÒÔðu F‡öœAM3 úÖ6o^”Ë<ËêÞïVku:½¼{XÓÉjZàømrÀÂ+îxæ6Ι®íyS0^‹¢iêžÖQÚ=°ýÙÜqæÏµ-Soúð ÊdðP¼¸¢SŽˆ½—_žÕ´… ³Ã Ž“ˆšäWh 1ÄPŒhÃȽÁµæðç¾\Õ8_QÓ–šš+½9dF=fÄkULXÁªŽÕ ½±iójÓãàG±7"[kzôíÍ¢™îâtgh©×å‡Ë»èùŒKþ½ÑÉ?õÐ+œ`Gʆî׫ÞèëDïá„þHÔÖc}^2àݼoÀoàñ†s©&ÇÏÇú…Rà¡ûÉøÕ[žÜ ³%ÁG„\nK_R¿B€‘°..<a f QPÆa‹\# oÙýï·²Jûk ó.k¨Šœ¨Ù®FõÙÿ«|}˜Vs“Jx¯™ÿøôÓOVÎHšQ Ãð„‰Ð¥© ïk:Ã)ÉØµí°ÓDøï Å•]Jh3€04õŸ~á¼1­¿V•Ö¿ú¦®<3|ª€á‚†`º·a½koþv#ì;…éRÜ¡V©»?¡°ÛRÆ$eVXå‚âEKÚI±zcaŠ—— —â:”0ù[ž§®£lAÊžÍ\åq êã=vêkûàÕ©7ú£§ë]ʆî׫ž¶q2×;¡?’±÷Xž› xàsÿ_‰â4ÇÞ›Šš…,ùm³VfrXû7@KW–ÝOƯÜ\~­*à ´7&m+º›ŒV _‹.`Jbþ„ HämEŸŒšA¡¹iç¨Ðþ1¤e¸¤!fÔ¤{¸?ÖúÕïÐ2÷¯wçÏÛ¡yŸé˜¼ÉÞ‹±áæË/k®úñ@½åxîvgTèS-»þ‚ÖÍ£"UCWÑÔI Ôˆ4]hìÏ ]{³•5 ‘ôG'jd‘ÀYË-»k‹®Æ4'ˆáX$Ì'”Õ¿/8sÐ&oëÉXÇ@¨É½6í_£U4j N}b ¾]™ñcdzlDò{o­½*Ñþ8‹Ñ‘¶CoÛæ;R6t¿^õv¿î~Nè£ù¾=yV2àŸóøN‡î€‘`ey÷ð˜Àß`œåúÞk+v ³˜WÐr¤ÀCb“ñŸ=y–ª(ß2AW@l6L³×J5ã;%‘Éh—jà³Û{4 IDAT8Ü%‘ô4ŠeE£_•(*@u-Š».,´ ùÇ5m»õú¦îÞÞ_NØæÉÊ[ŒÉ(0š›¿U³~ù-Îÿg¾ œæW=7ød4íÿNs›¯Z=zšMÀH­š¾©EuïÔ ý:@Øz—7~ÿvæðŠôÖÜoí_³ÑgèY˜w‚ÞàÎzÔ¯¸Ý¸½xPÞ„¢OÞýG¶9þÍŒÁÙÕî¼ñ„U¶ÇÏö¼vR®ÜgH2šÝ¾ëÒÔÑRìo† ‰dã \Í% rÀŠ) #mîkìr{•àWsy[Ýo"k`ÄU=$»0m¿òÊ¡ŠªX¡.½$4ª%(“ài¬ÂY¼¸òÆ‹n)_8R­6Ë]9Àƒ¡M7îxŽÅʱÆûk߃†‘` eÃgc½ê‹±áô{& ø}\1­ ÎoàðA—!„#xyÖÎ`OÛÅuïÛ€³ñ7ÅÝëbXÖÕ½SàÁ“Ñvµ›O™¯.}nrgÕ‡‡«*mþËšå›™AñÛ%—­Ó4×ÂÜh`h±Þ<€€ª·¹r•|Ã?<‚"´ËÝoݬó›2ñ¡y†K[¸2cpÁy_¨¯V°ËEïÙùbAŽl Ãè* (®Œ45½R—@dJ€…ƒ*–XÚ/Ü4õÆ‘{M©µx‚ÊÞÐ ÒÍ´Ð$þÝíO{¦c¹e²…-ÙïÁ°r2\šUYÁ‰Ÿ\­âÅ ò'ßFTS¬Œžx\®hT€u›sDËïÜÚv=‘dm8‚9Üí%N°!åypÆ:?Xœ0.œ`C·È!'$ N€÷c¶ß'sü¦߇¹ýÿ;àkLR _ü)y†3h¹ï¾ûn'¢C*<¦M›Ö‹æ¤n•l ˆWW€²k×A—Éâ0¿üå„oU]ë‡W>Úƒú{á‚‹¬ë"º ¿º°¡¾¯oó 'ƒ=øÜ7Vo½®È“àóÂÀ†Ý ÝnØ›WGäÁ¸B/h‹ÃZ™oŽ;è¾ÿù vìÂÕÕ¯CVC-@V6´HfS3dEü T(=h`!eméuŸ¼ýŸLáqÓ¯AlùÌ];À¨zLÏ5÷¸Ü ¿og'âŽí ¾þ:PNO±NA¿Ôgž¶þÖ¯ù:<òR[”â›c‚·ýifö5‡!5Á[x<¸O¼LONìH]œjÏS 6,Ù}ñóÔ<íïšL#±ðÕÊØ•¼3¼óBÜ cb›}O‘w®÷.°§ƒ%À­µ3öûµpˆÜ0Ÿò<è‚c¢mêè¶Êc~íwßÖþú×EUn°t [ 뀨 ÇFšŒÛw¯PY1$”Q ¤º¾[ãÊÈߥd<Ý xÖ^Ѳñ§ìeøOÖwÉü ¥k×TxedÈÊŒÁY[A¸ÜDªžIV8Ž6†@›äB3ˆ‚š4ž4…8> êSˆÌݮ̵'ü÷“þýÇÝ FÆÐª@t ŸÏ³J®–@_@ˆ6â§vÈà`ÖÇ®ÚÂIœÝòéþõ­e’¨=ŠoÇý%g_n“u,ºkÇ༂ÙÄz1á.Þ¬,žt)ÎB åñ•ÝÝ«·~w†Éïâ;R6Ûõ*Ž|V' ¸‚‰¢Î‹=’Ë*9 |Í‘›Ð»W¦ÀñŸŒ ÌpÖdSÀ8yñ”_«Ë–žOÓÜÓ·ÁC¼—¡ÝA¸rÙ}3¯ì<PÖ¨Q}Ö€gžáq ;§O]€ˆÇ‘I¯7ji×§“>ÀDQ“fFwŠá: š·FÍX=±ô™Å­»Çþ(chÕËôfc@ -$Øã€ÿ’ç — ¹ÜãÆËwñ ¿ß«³-¯ƒ®ÓÙwÔvšôk·ƒ‡+›«Üçmâ| ˆ ŵÅ;ö‰Ü«ÿíµÌözØÃWÁ8T0æ] ¥Í§Ìy$ëûÚ< (vwÿ#ùÝ f <ûu‰·SÆæ‘Ì«£}M2àÏ­Œ%L>Åv±|‡Þd˜ìñû§Àƒ³…¾˜Œ¶—%ÄÄãÍ&$¼<ñÛ¶—AN˜0Eù𣶯tem!ʺx‘¬ødÏ*Oáµéfô2]ˆp¦Ú–-£# T2 ¿êYRJ5ªðD§)Þé-ØQHPI‚‚ó""©º~¥ûöúg­¯þE“nÀÓì0-=šYf…}DPmšæ"VÕ|ø[??ëxÙ¸ØBjÖR¸*ÃÏì'ÃãkÕô­3þú€Å)Ñݸ»àö4ðyq “Uésk-Ί£}ôŘ8’wp‚)>ûëÕ‘ŒÍÿ…k’vµK ß{9æ`X§À»Nxáxè»ÉÈ4Î.Å}´òĺ¨YÑQ'"~ôÅâxæõëŸéó¾Ë9ñÏrQøã‡ª_œOЖǠ±Éêt9jÔ4Xç"å‘„(äú¹>À/#âùaTf}^jZá™þíSH¶(žÆB½%«ŸLDºGb£–Þxâ–lwöW?O‘g—2HìÁ ôƒ£œÿÃôéH„M>Fáµû¸- Ê'YÉŠdÒ\ÿæ [hÖ<´“Û_‡="† ‡îÕrù8­¿Z™{‚EèÐO¸¾]÷Î ý£ÍcÊŸ83Ñ9g•kº`lóÄ;ŸÍ|óöñ鿬åyÛ~tÔÏ­èJ<Ñgvu^_Œ‰#±É v¤lè»õêuL‰ÝÇâšdÀŸËšL!ÍRÀf,|ñ^Ô¶èq¤ÀCßLF[ÿÓã;‰µ&âu":v`_-Ž Ò}žÙˆp*JÑš ¼÷Û=ÿkyâDŠÎ¸jº²¨ü6t ²Çˆ q0yA@Ý/4팡ÊÇÞ‚ð>5}ó­Û²F…÷—(`FÒM}†>]+IT+ëþ™7aÆ~÷A¦+KmROI{OÉW`€Ø'3D("‰Â€X‹@oÁŠà˜o<éûäñç€hŸ× ³w¯ùÒdK@‹dµ4Éb ‹Y‰R›Ž@½u·š¡ßU|Þ\q2$Ô°ý'µ+§yÈv%-~¸IÔYt¥Ÿa—ÛöxRv¸A_‰dít‚)úf½Jv,Øç;¡?ŽÔö£}]2àm‹ÆâpE|Y%ÿ~Ì=)ðÐ7“ÑÖ „€4aP(Ë,5L¤…Ëî)cñCŽ£5í“S¡¤r6Ä®¬à„IñØcÃlr©YE„?P¾ŠHDo<“3&¯ÊW˜98Ú¨œÒºcõC…_z=GLÍ1CîÓ[ªï?»që{v~ă×ýâ¬-¾+¤0 ÚRyzú[>ÑÙ„>_6j¿ÞQ(gs’ì@À ‡ \5o.2tšËùía’8éîvJj‚*2Í…¶Í]‘D%»`tìDô3’}Fwç­1ñ¿`‡Ú 6p_9Á'ØÐݸuÊïÉ‚‡ŸÄ‚-•ÿ`n,ŒqÌÞ/ú<Ìyr.‹R1AS;¿ÀÏË/Abéi¹zÙ½WuZòw´&£½Ç‹QÙ€B?ï¼)ÚË/žÎ_ñ63#·ÒΩ—]ˆŠëQ" –TTe™®{w,3½Ò0UWSÙ“é_*ÏÕLJê^¬7¿ ¸›V0?Äï¾û«k·§åÌË2‚kïúÃÍçæ Xº/R¾ åº1\¬¹`þø]À ˜¥BšÏŠ`ý9>Y¼ò†t›˜ép6Û„Z{H@öøq¨E•ìDëØ‰èg$ûŒîÎ?ZcâÁ'´…lH‡îF«ó~OÄ &ÙÉÖxˆo—Žâ[É>£»óS›UßÌÑîÚ½«ßSýá¬þ8Ò~<Ú×õx¼èÝw´_ ãóRà¡o& @~$Qn¢À\˜î„°…Meë]X­«¬è¶àš@Y%ˆ¾WJ¢ "Ý}ÇÀs/þjóæ3‡D]Ùf(Š@JD¨®åéC7 íûãqцs˜¿‚7ö§²G6Ûa‹þzë¿ÏÍX^´:rÊI5ïJ3#»–ÿû;±ŒÍ°Ë2;[¤wLŸ~·@Kü­ýUƒ**¬Jˆ ÖÏ ,þ ½ \¼¤v:Ñyw¸°Eo…Fº³%µYõÍí®ÝSà¡ûrÊØìÞÒcF <ôA8eö¶¶tu|“q„®GguUqÑ[6ØÕül”°Î–øæDNUU/Aı߫]5aH¸±_ŽfÚtûDî¸cæ°Q£±‹ÄÀR" ‚«NI/ñ+îÌ ¢Š4ýý€GªAmÝ0¨¾¹+8Á‘ ¯JN~cþ÷^ýjš;$ j`(Çk[à î›Zwd‡YD5Ñü×OÚ}§4ÚœoL¹øÖÎäÉwN: …8‰ÜàMÍÓü({âòjTŸÍù»f^q‘”ê] Zç>߉ åTÂdjãî8NzkŽ&2þwŽìp‚ =mÇ£u} <ôAK;eö…¶Ö¡LÄuº®/ïëRÍ_ßm=F°êÛƒf.ÔÔÈüø “;óÆ÷î9Õ¿ã}EÂ:ÅÓ¼,r¶dǺÛÅ0ÍÕ©RÍ>X:ܲ/æh²V;Á¶Ù v8Á†dûïXŸ}ÐòN€N°£§6t”øÖ Á„G¾û ¿´¿Ú“×_U™å ª§Q[øŒå%nd­Ã-Jq›qºUAø @¦_ÇÍÀÛ?²È F‚0 ,EÄ1\ ê-ØÚìÎßÝ?Ò”[­¸Ï•»{³+³î|´¼w#ãaMäÄÆ/øÞ}ñ fõùRª¹«ë'Õý×3æÍžžµúÌ3ß„i˜7*–²Úhg"‘Õ(pÔ-®¸® hÀ—  ‰êÂße,Gâï°ß>[8¡žï­G£Õ}í êÉ´éé˜èɳã¯u‚)Rž ÞÏGû>½8f;~y´_ ãóR9Ÿ­ÉØQâ›ßÎwŸWºW˨ŽÑ2{³¼xNù,¯ éòk{Æã+0˜žZ A@E²†@¸ptÌÕ±ž“y£Ï»2“L‘Ùºé”ÃTÞ´¸r^à×[ýàË^Ðô]êÔ÷Ýô·j¸iÜVtEÓ„+7¿#Ç×/¸î”)®Ÿßò ó8pµ„e2Ë—w–äÉÞ—«y>ë„]4ž43Ãý…D &¬Ï–,®\°qfÙÃMšïœM®~† üª+²KÍÜ·Ú7h®]“Ú0;_•Rw[»8¡œb‡SÚâX<ÿHÀƒ#ˆò+]Ö@6ôÉu'òÜ>;'>[à¡=O!ž aæÔÉüÅ~<¸f½ôÀ–>Å‘€»Ò`ç´iãPÀ½ø…`xò$«¹"¼l‡A2F®-—º–ãß|bÀ4ÜŠWÞèŸ7`}€¼jú`8­ñö?Ü4¬þÇ'­W<þ~‘—oý/ž¸ŸÁƒvëœÛ0tl`d‡"Þüéů¶ÀDˆZØÅbtJùw(¾‹Îû¿Ê7ÿý;4$Ú|f“âŠú(*^P·¸ûÕ,Îù¥Ž',ŽN°!µY9kHõGŸm‰}vãdÁ bq9&«.þ*cºêïÄèxûÌÐDoœÎZzºQÄWQ°Ä7¿*ÌÊé¿x®ºßiÑ*°ˆÆ —´%qºfÛ€¢+â ’â+0‰s ¢D¸LE¹U¸ZÊãË"¿.XHR©/(2ýökY{jÜÙõ“ÃÒå[9Ö›ÇíêÞôò9æÇGMwú› gï]ï°üšsF|O[¼ˆÃV¤©ªmùrPNDûݸÚsE©fŒMÛ¶LÀ&ÁòâZm¨rˆôù]õ^å“’íéó›TÏÃ.’ªð·l|B€»Õû Ñý+ÿ[?~ä®Sž‡”çápëgOçh¢kswç9Á'ØÐ];9å÷dÀõ¬Œ bñÀõ0&&Ï}Ìß+>[àßfçÌ©w Ä @Ð*–}wð•ˇŠ;IZðüýeËí–8Gˆ·Êˆçxf RIðóü2MÖB¿VÓmšZt_¶ ‚%Ñæ*uÄñX1/JGùrËÞví ühóY”™»û¢f=kûðÍéO À ºÀÓ¥7\ÊÚßnÚKA¡žß¬¤K #möËÿ|ão¹AݦeÎýæÂûÜ·NX`CêK×Yc"ÕÇ|ëLÚ€dÀƒ-Œu|#ÆëÀîÝÕÀ lï$ýô>¸ œµ(ôt£°ä½õìGhˆUѶÁ¶‚Äç‹+*î¾hÎ?‡ PÎ1†*€[%˜+ìDÉÛYÀm€2`£;ß÷»2£ëÓòZ÷hYŸ0Z‹¾[»êcf›´ïeWBx†}T ªô0:RjÄ {›Ô´ K¨Qj&_ôcüæåÑSÓZ]gÕ¿§»M³X^qùϱrɰø*†xùòƒ´78·£ r÷ß3&l¤EJ¶ä¬°À‰ y”×xŠ¢«zz½ï†í®ì_E„ŠK3ÆÜô»?\ÿóoz:ÿš¦U/—è-ͨýàÒÇz:Rž‡”ç!±Í¦§ëUbOùlœ• x`Ï+g~Àða쿜0ù±š$>[à!^³ÀX_maÁw7î:[vM¿ò1å,@è߬¸ÍÕ§™ˆ"jƒ_uí[“>(OGE=Í¿}ÓYÍÛàgØZœà˜5îjTpž-rŔӖr¥†óù\ßܽmà |õsÕGHUORÜ""øwB£zw:Þè*Ú; $’?ûˆºß·ÿ‚´Œ– ái9cÞ+ù/|놧½2:i»–Óø±7A4àûBhW‘G…ÁÆ‹:–[:aqt‚ ©/]g­©þènsÞïÉ€¶ž+*X ˆ³ÎÙñX P|Éöðz)ðà¬E¡§Åáª-å7è<̘ÆÀ·„óVùŠÃÅm~!P““c„uBÚñޝdÐk™Ã4AæË¿_0ûnUÈp%DÞ¸7–sèÂŒh›š7ž¶I”Êêœ1oÏDÅ Úàó*„Šçðï‘Dí™qÅLR¸D´r  Ѽ§hñÓÿÇÚµ…ô¯œ©a´­gM—®4™¾ §>¼dì33¿7¤HÓ…6ØîùL3º7à =<¼¼üÿ0GsîötLô–­N°#eÃgk½ê­±ù¿pŸdÁ¿+iò¢[ …ð~¬úÂ­Éx¸j ›<©»×xØiHòý¿äŸFï§ ßµãÅÑùFC#»ÞI/Îgð –=4ÿG×v™£Þ(WÐý3ìÚq|•ix¢Zö¾ñ~t׆½ù»6ÌÔ—®³Ö‰Tôæ ;:÷J<œ lÝ pR,Qò7GÇÜÎZzºQ®Ú"žáp#£ ð°2H6º|ÊfwfwQ¤CŠË߬¦yuT 0ÚÈ1ƒï dVJbr&€ÃXå²íe%-P ´hPŒ½fÔ=œ¤’©øZþïÍÜ9cÚBÌg­ $*7ËÊÖF+—¼ðTî¸áïy‹w ˆ¶÷Q´@HòŸÝ´é·côº)H0R ùÔª(¢¨$y*¸ ¼ 1ÃVí~F|FOû#ÙçñùVU‹¢ÌDc‰hŸ~ù³Ó–=š~$Â^Gòü®®9mÑÑ–” Ÿ­õª7ǧÓï• x°«-øø«ípp]¼Um±³—^–½Y1þ[ú[vËúc.•Ÿ½ÉØ)=5—;ºšf%²u¶@ïœ6õUx:u®t5Óˆ$µºÐt)ºá£[#’R ³EõÈÐ@!3úTÖèï}¿~UµP஼íª;»¡€¤ðPsxïPжöÛ[¼¸â’]3¦/% ™²ZÊ8cìè3þU#ª·xsóê•´]“›6§‡µß‡¾âí{\YoݳýùMÙ2ò5IüˆÄÄT$P "Ö!‘È “Š+*YÉ6©ƒÛ"÷‰IÃ4 ΂R@¨ÖuX‘}G­ÅÆÙÛGw$×ny`>YwqEÅÜÞ~^2÷KmÜm­å„vpŠNi‹dÆñ±:7ð`W[\ p\Œó!§Àª^x ΩàòOæ’˜'Àzx)–¨y6ü uõ¬xøì ­Îœ:™Ç@ºMÖ”pèjQÚ5}ÚR@<H’ÎzÍú IDAT$ÔP @éŠ Ðû55i"Ô"š³HÓíÚ­dÚ´’Èh“È2#ô®¯xCÕW¯ix"ä àf¡°–ó§á€h3o컦O[¨Pвü±kÕómwÍoóÍ­µB ô›_0Šåüwgå¥ÉÜ¿³sw͘Î÷ö©Q}–MbµíwºzMÊóàæh <ôt¦ýë“l!oæ'€;æà°Bo¥ð¯X—€þ3N˜„ŠíåÅÏùÙ÷ÝwßíDtGLJO›6­7íIÝë3ØÚü߆‚@CsäHÀ†Ð^û7DÃGàìÙ†i‚ä/çL]‘„w‹ÆÁ¶ôþpaó&pææç44ä储Z Яù:¸î™œQaN>¶nØ{M<ÁxsAöï-®thò‡!t8;3'g@7 ÀåñöJP_{ Ì‚0¿= Œê =ĸ úóäR´º*H_ÿDû‚À˜oZ÷PÂù§-4žy_¯÷´òÎ6¤¥1¥z@4l=Çøâ™ O;Íz×Ô‘j§´À°aÃŽd_tŠùGÍŽD‰g6ç!pcgÿÎ+QS/Xýevÿ²¾,‹Ýï:¨ö8pè„Iª&òZ×ÙóRž‡­â„/ §Ú°kÆ´Wp$}€ƒ$º‚g€©xP‘õdª-dª£$¢0AH hhÒ ªðׂS64*Þ·ì}Ýå’fT”â:ATãìÒ]Ó§mÄl$øôŸ¹ã_oÌ/¾U­¯ íñÿ+gìÛ~Í3^‘Ò˜Ôº}ÝÕõlG@T›¦¹ˆÉ¶Mz¡ªˆG("¥y{¬Úb**âš#©¶`+9äÌ-îš7Ÿ#¢r!`+I˜ ˆ#ûBp÷qëP@)I¨²mèéœæ2Òh${®@ºYH(3³››×b-çB \¼ÄÒ,éX•A@UZ]‘žÚ½SÇfo¾c"÷rB;°N°Ã 6$ÒgN8'ð`ç:ŒïÂ`3pNB§›y/ÉÏa–Ê«à=`ÕN&Æa2ªÙÀÀb(ü;–cJ‡Ã·®&‚Smà2JÆcLHdŸVc¸ž¦ÜšžnhAWfQ0¬£¡Q›Û+ˆªþVfé†2GüôOÛŸ‹3€€¹!Ü€¦Z4š5dí«à‰l mUnÍû.çTHbMF Öª>ù‘oà†=®¬-i2¢\·oMöèÐþúƒ{’”Œ!” opXë–f‘éò‘¡qåQD‚ÈÑQ¸6yr7ü±à‹Oš(×½xïUuu"ÇÞ÷”0©-ª+j%ÓuÐî­„Æ6P€GDAºùçèí·?îºçWç²2*Ó}-ª¸ª³ª ë}ÖõUU†SÇf"ýØ›ç8¡Rà¡7{ôèÜ+ðpt,(ŠqHpÞƒ}ü˜%«/Úü¬`mWF¥<ZÆ ‹‚Sm¨™>õ&BqSü8 -íÍŒÁî YÙ‘ ë>õ‡j³â¦(*F¾î S=†_±hÑe•0ÐÌR\ÑLP¢OþŽM®ÌÆÆÐž’ÂuƒŠQ } ­¨Ñwvë ¾øËoì{'ãôàÎS‰dµ4ÉŠE(*ýTõ/ueí¯u÷¯©‰¶ääDêŠFRÔc†ôôh£âÍÜ©e6>;ncƒækc$Xþü}3ÛbÝÜ‹&+ÆJ€½!»6°gô0µ Ó}«st)—H—ØRåÝݳ»ßm²,Û#c ;™’ËZ;«Ê`pa½^Ue8ulvמ½ý»Ú!z»Wûþ~‰€æXàEö °Û‘yâ“#™ëáIþ(ëcsTð3¸"£Ë#Rà¡ãàè”ç œF“ šABôÕìãÎÿØ[ ô¹H·Õ˲Gµž×´é®ñ¡½×â@’´FJú¦¢*–Ž”ûJ?œm0N†ÓAÊêì‘k^hZÚ?ˆ!M&þQ8ðf¨ÝË)`Fõ£KÍ€§ÅktÔ]?ñ6#õ#ÔBõ%¯•>Ò]?ˆ¶ä•,ž¢|$˜9ð)År²T€(kÃæÁ:›$ÛÂ&áŠg댩}ZI”¼±÷t^Û^¨U\M7îø“_½ùæavûÙœüœøªŒÎ¨É{jKüõNØ4S6¤Ö«ÞÓGó^‰€»„’K2ù«ßöÄÛi—WMÛ;}V <¤&c"ࡳ›f/hU€´+ëß½¬0¾Ž®W<ÆNw?,‰4½•k ðx’ô ùõV{Ó Ì°”¤¢4UMâI7Z„JðåW}=çÁMOðF¡ýü–z"¤ñ¸ʧ â™2n8ù‰¨?÷< zrÀ£/ý„¿Ú—þ;Tõ1éõ4Ù¡t3ò¬Hð.®^¸hΓsÄi¦„»_¼f·e7«áÚZ¼¸Ò*Õ´Â mÀ(P¼¸Â'=9â¥Ç@gy–òÚ«VèÄÖ'i︪ Ûïy°ù>ÐgK¤'Ê÷‘ȸèÉ{ɵ)ðZ¯ŽdÜ8ášDÀÛ90öÕÏ,“ìièxìî¥RÍ·I <¤&c"›DgàáæIaðP G¢˜ì.WË‹yQÿ¦ CÏ!™‚ärByçàáô\1ÖÊ)l‹P¢+EP¹"ðÀµñàAy†²œ=Wc¶ñ!¸Ã³QÕû -ôôüÞÔ³–‚¢Ÿ¨¤µzBÒ£DB9Ò'£ (Íÿ+®|j^OÁ+z.ÍJX‚U„rŸqÄ'3ötbÆB†ðÙLÛíÒõù ‚vLŸ~·@ËàÂ$XÁaN>µÚ$(:cµ%Ò@¤6î¶^uB;8ŧ´EOçÛѸ>ðÀa fu䄯ή¶¸¹»pÂÑx~F <¤ÀC"àÁÖà„<‰XŽ`N|´ÿ)¿(n-MêUg7}ú~® Í/\Ö¿È7;\ÒHNú3åNö¼½é¬ÝÝ4/ÑM™½ z4Ó"œêX5Â7m{>F©ë?üÁÓÊC/óv0÷{:ÛÛ+c‡WØÒQš=Q“DÆÅÑZ§ìç8a³r‚ )ðp´G^ÏŸ—xàɼFwñ¸Þª¶èùÛ¤ÀÃAmè„EáhÛЙ[›cìk·;*^rÃ}ìî?èåœã‡ ´z‹Ü-rÍ ‘k"ĬªªZ를©rÂ$H˜òÊ~¨Dú‘éö€1\  «žHk^6›g`ÕmÈ­ÅO1½»uìš>µOÉL’ðAæè•+.9"Ú˜;(\_2R¸O^ͧ¯ïýê¦e™cNøñž7G"Þ4èâõÔ*ÿöܽ3Û¼»gLÕ–Ù¦ì©lX_Nd<ÏîÈ›»©ª™Á’ШîÈü/-NHûPºâÊJ«Ê£-,‘5¹ê ƒ½0Û~’&L½wzÇgX÷Ñ3'¢ù@`ñ1›XÊö:4_![·ë$ ðÖ Å•ég$²˜í±Ù™M)´Jª-µÎ9'ðбTóex ˜´iGŒßÁpÊ+¥<ŸßÉØ•[;|ûeÃF>d¬ó†¨©xŽAb("Õ ÃhÝ›–5o“§ kŸêSû§íÁbs?ŽŒÖA1k4w Å³[šÇü6þ¬6`} þʪ¶2 Ši(ª&C!©+>Þì¬RÏ6 8ar]ñâJ&Zƒv ë¸ „ˆFú5יᜠà ESA*D¦òVfšïxNüb`{¦!o|ÑzjÂÅ]U[Ä}±3ÁUµ9éŒÔ·ß¶ò Lü1þë¿«9ÜÐâsí|Ûs_5"œÍš(i; dQ;°ÔE‘òiÔèkÀ(ZÓu‰z6Ú¤Ùá{€Ð„L‹Ï™ªy@8ˆP.,Y´ä²¸îÖ¤ÔfÕÖBNh§Øá”¶ènì:á÷DÀÛÉ´»,†Åš,VuyŒªšã$­óRa gmÚŸ·ÉïÖFIå¤PHp>O¿úš)¥S¦t:Ömw>Fñg¦¤&I[<[^rgµ|ÃÐ=…zcÿ°ê­»Ë¿ÿTd·:ÒÂÖw&­2ÝÚ|"Hçj òz$˜@ˆ*"4¢„IÀ¹@ 0­4¬ÂáÇ ?ÝÄš0 £Æ7…¦œ ˆß$SHzž4à5ˆ  IÏ ]¿Ót»V‚F»ë5Ÿ[!Êóʨ"êf™òãîÂm›.N¶óxqL»õ–ëØ‘hNîéW>F(ÑZDYޤ–‚•HÉUQfUÄiUØýADÃq‹ TØ»®_y÷ݤè©íÒZD ƒ”¿!@ ¼ž= iaqeåmÉ.¨mñá—@JU%Û°Gx¾6n'Øp„ÍwÔ/K<؆1ˆàäIfxüpù$“×ð—EOI¢zååSžg˜£5m¯C|üÛÞÀôóΛR:ëºCÆz¼;ßj5¢ÉSWhï˜Ì6}Oóï8¾DoPˆÒ˜›uÂÊm8€V7®=c9'LÊý@¸ çhnP™³d Yˆ…€>A×FîþÍÛÚÏç|j‰e™æo¥P¦óß Š–,™Á&ìš>õÏ ($ÁNæ5@Ê%Àqu¡xMrK3„(×/~êŒî&äT´‰Pq¸æÌÏ2Ùì TQqëá&^Ìë°„óàC@hà‡e² ì¿ãÛþ@•`5—c¶8²ú]MMÕ „PR¾”I߬ãàЈ¬–­°=#Ü¿p5ÔbÛZcy`!õŠç¡ëð mU]Ísõ’$³­ùq8›œ`Ãçíc'™1âÔsœ0y-|)ÆþÈïÂ$M¬9ñnL2›U6q¤ÀÃç<Ø_Øñœ öf\|ñ”!×°²õ£fúô²Ø×s@T³;7'&LPhï<´l9ÐlÉ/fð}âJ ³hyÃÚ3V(ð¦Ú&ŒE–<6"4€)7£À'L‰#"Eï-ª|öçm¥š‡‚ z¬¸bÉ÷âÁl0¿ÇÏ À4ð7)îã"B5ûëÁBòCßê<´¿'Á*ÕÝ´ pë|¿ûö;æ²Txwž‡¸’ÍS%QP½(JØNIr“@q<{P*ù«F0–c’< 0 $óÅP àÒúƒ®G°^ GÎ+|öÙOº ØýÙI¾!u–f&±ætx©dqeB$Yñc ã¦ÙMøeaQe¥UÓ›‡6n'ؽ9ªŽÎ½&9ßauLý’É¢˜š÷±¶,èc¤ÀÃç<Ø^.Ý#“"KW (ã°‚~íµSJϿ࠱n«=Æ»ÓõHV "xPÂ'iÅ›_T¼þ2ÒÝ…‘úÍžÜwiÙÍ_$ÂtZÐøî$]Úbnm–äF Ë%Š|Îk ¢O€à¿ˆðC~(Ôˆ÷Àðá ”O7E8L¡„ÂÛ}=)x)ç8I[àCÁ¯±ä6=FºYÿŒ‡óO3!¸gü`£É£ÑOo|á}¶ „€®»f¿ôÀœ¼|Ðϱ`mú£FMë×·q,tÃÜØî™!™(¹2‘"xi›‚(®W£úìøRËø‡³gC ±”¤ø- ü‚õ~„»Íâ¢Rܹs A’hí ŠÊóíêæÍ`.·C#V)fD¿‘“9 Øýk«YÜ¿ñ€1™¨ã¦Ù)Ug$ZÉ<£»s°q;Á†xèn¤8ï÷DÀƒ­9qH&uìuRa‹ýššŒÇÀt–0É›‘~÷½¿>´ÚbºõÏ ¸súÔ§ñ«DŠ4ÒJ6e*ÂDÔ"[OpKÛ[Ñj–³Ž})?B@*n&2!²Ð–Ьð°kÒ¬gÖúŠBRêHòoìiØ}ŤÁ¦Zô ç8tØtwª¨Þþ ’ì1ÃÂåÛîÎÒ2̨R´Ößž½ÒºNÒ‚çï/[ÞÕòb…b Œ1ð°ˆËã«.¾¹œ²Æ’ |"ªF Úúì,‹{AÏJPʸª%dB?"hA…¾Q¼hIûs™pJ Žm3‰ªJ*+×ñß»¦_ñ úCF»dÉ ±ÊŽOEèú>§M/®ÐITüf®ºüëŒhæ£@82­wEh!A/v–,É ©»0CWࡳð‹ÚÛK¸Ö 'ؽ=²úþ~‰€¶‚'+‡/º:úÞÔÄžò<›»«Þ9Ú “]ªií-HU¼¹ufƒíy@‚GŠ**ž³J­H Rî!…Š­önþØ[/8l ªÒçÖZ›¥íf'’ûq- ™(P\-} É¥†i¬&T¯U”J=x=i¦?ôžPð ÛÍ΂ÄÀûM' „­ja̸b"ò4!°2§Á’K=Óšwý­ƒ.š+Á\‘-µÝ?µÅÅ·,š œïqÐqcÍëU#£õcÁ”5 à «ºa Ô`‡•k@¸ fÚ×*¿—@âm À|\õ*1©Å²2·3Ò®ŽàÁÔ³ÿF’†òz„ µ"à6»j#¦Êy­M.eA=K»Ræì*la_׆OÚJ\»óÒ$¶:zÖÑžÙéRàáHGб».Qðpì,LòÉ)ððù‰.އ$KÆ.Œ×x8ÜЋ13rœÝו$w»+žK‰ÊͲ²µêâE —IÖ\~ù¥Ò¥-B D ¯H¯  € j)®X/"—ÐLé¸Q\4çŸCÚ4:$Èr Y¨põÄØQ¡ÚæÙ{WfÐt‡.êxGm+ÑF3‘rÏ—]v>ºµ!€ ¯™ç{òò+Õ(` µ”T,Éo 1Ò. 'Ú*:±Ã]‘D)žæåf4{>3cÆ‚èáTW¹mšI»,!©OòRæÁCÖ Æ 6$4‘pR <ôA'8e:Á§ÚÀnmÍ,³É“ìMF¸ZÊ»swÛC&žC!nY›çtüš¶&os[DzƮ† ±K¡ü ´t+È…gsh¥¤b kÊ$tØa‰+& š_ùö¶É¶Œ÷…7/š¨¸•@®^vïUÑÒù7=îs©.KëÏÕw(KЪ¶0 Þ'Ó\ØYyfg†Xm$á"NNEÂ,@l¡ŒôliÝYDrCIÅS'ă±ƒîƒr{ºËG@ K¹‚ÄVûó³ãd¿;Ú×ÕØl¿ )«áÂH¨âN²=dæÅSæ«KŸ›ln%{ŸÞ8ß s4¤z£'î=Rà¡Ú;54ªÚ¢;‰w5L≦€uŠ»i© >zwìàì)UÛ›ž#¢UËî+»»sððt¾KZŒ•Ïß;ó’îB ™"m›x(‡QDÔƒŸ¤nßþWƒh”¢ˆz;ï„ûÁŒd_bŒSQnÕ;”jvT OfH«(tôÅË~' iÓžœŸ›ÓžÀJ°ª¸‚ÚÑ?º›GË"'ØáŽV{÷ô9)ðÐÓìäz§ @'Øñy¶¡£~†9cÆ:-‰°ÅÎË/?Ë®¶’*å ‰$p‘ÜSR±äÄåq8›+2¤ n¸xÄÛxqã"$ðq¢% Y}PØq+J˜Œˆ¨úù{Ëfw|;¤FÕû‡üÓ?ØìÍ+BÀ}d•aå/=ðõ6öM,„ S¯DU½‰9°VŸ2å$mésV¹(³R–T,áó{Øe”U[pXAT³çÁ–ýfWjÚ©´ø±›ÉÌ¢×ÍzVûë_Y!–˜—¥»¶èíßE;töN°Ã 6ôvÿöÕýRà¡ZÖ)Ð v|žmà¤J¼Ã$åxE™éýDsËÇ(`þÀÅKÚµ(lò$”˜ˆ«íy¨°ò¿ûyhîš1õ)ñ%àp³UšEiÌ)ª|ú¯Ý ߎ<ܳÿ²æ\@°œi­»J˜´e¾;ã`ð -cEÖðœ²G2E}ûAHë–ÝS6·c˜Áâá ø:!>_&ü„:æm]y.âï»ýÊ)c„âùŒ Ço˜, Q¾«¸Z¿ÆçÑlnS–ê®%‹Xªœ]UJéØ<™UwýqÀ#×b«¶xnéM€â¬¾ªèèΦ#m‡îî›ìïGjGOú££GjC²ïúY8?ú 2`ÇçÙ†=—^:Úô¸^"À ÞøÁíöQ$Òˆ _-^¼äJz;¦O{‰)±ã‡!S0 sï) Úbãð ä [6RîQùÓD6Ýv`+çŒñyvN„D* u´:¾Š££Èãy'õvF)çA,劔¢Ô$V™¦1÷/Ûž=‡i±í¯éï%ÒçÍÁÐûV&t⨮¹"$-¦„&"FQ¯=ðé·¶ÇË~Ûí/ûÝEy. ],Ïî–KL à{LaÎVØâ“OÖpù) øs"Õ+Ý=#Ùß0GÙæ#±£§ýÑc"Ùöþ¬œŸ}ГG2 úÀŒ#šŒ½m‡ÚâXÙ`ÖÊ0‰~+Î8ã)±êíZëk8ªÏšr ¡¸‰sà Dj’€×#¢›õTÃxð ý ¢*B,cîÚZ¼¸òÆîú«=lä—@ o¸hÔò?,ÛPŽ€é\j¹ìž²#bM¼xÎ"뺨-ã0ÿïåxdÇŸ¬( ¹þG@­qÑÅ'‰çŸ¿'‘÷ˆ+¡€\a€¤PÁ" *D3žÞÛÒ¦gYœ4RÊÀá’“lt®à0%®N¶?l DÏ?ï×ê+/oÖê ù@QÅ’ºëÓÞþ=ÙvèíçÛ÷KÖŽŽýÁa³´é‰Íx8òÞL‡#o».¯Lvô Ö-`ÇçÙ†]3¦ïå~PäžqìEà¶Ð~>çeö40ݵ‰Ê Ëë'ìdo.̼(Ðü%ëgÄ'Æ#­Jˆx‚«Ã¡+æüýŽtݸÐCFfnnÆÈíá·›5ïv]β7þdÇàðàše3[^<§|–²çá…û®^×1a²ÍÓ€Fî¸c¦zÛ-c…êù'x è~Ö±`„Šç ‰RÂ6m E¥|« HNˆé¬ ¢¦ùï6¢ÙåÄ›¬¤ZɾC²c3ŽÛƒ97^GÂ|IÆf!”i\¶šH´µ‰EƒÞˆµ–çaÃ'oƒåYJÜóp8‰ô¾n‡dïŸèù=èö¼™XÕŽL¤?Rà!ÑÞ9ô¼x8ò¶K‡Ú.Ù![&}ʱ²!QðÿÅyàËT®¿9<\~y¾áÒ^­ =û‘w¼ECj\Yj^ÎØì½»ÖŒ÷ïyaԢܙtcÆ.øêœò»™ ‚= ä D‹„VŽAÔ8(”jâ…@ô®ænù^ðÛsüî?ÿù?`É’³ˆ倥]n;öIó%Êùíàè1U7ÙÖmàu@l‰ódÞ'ÙqÑâõL˜D \0‰ªXk¤»çÛ,Óè°rž]ú PÄ©‰æ<ç§ÀC´z²“ L°né;>Ï6ìš>m 2;ä§&Àòžw‰² IDATôÓŸQW½]Ëa 5½Ðt¹®K¯ÂdƒÜg¨À ,3Í€Â0éiE8”£0·¢T&I•‚M®¤_ûÝ·{#»ŸÉ¥•yVÕFÜÑY($¾ê µhôÈ'•õë7°0‘\«€ò/Bº—ß^’|\ \Ú®mÑÆ¨é&€qÐðÐ@–‰Kf.%;6ã«_äRIò5å;BàH[£ãÿÛûp;ª*ÍU{›`DlÄ ¢tEMBn0 /%éÇÇJÚ&Cë€3#NjK &7ÒjŒÊ£ƒ`Ó BBóL€É½§j÷÷×ÝuS9Ô¹§Î¹gŸ³ëfÕ÷ùî©Çª­½Ö_kï½V£ç×ö`:ë¬Õ½ÿôë›éÑQ¯Ÿ]¤h—¯³Y}ÔÚU+ãÃW,Ù‘¿ûJöð\Rônø`yìTVúœê§&·"Óì`taíáÉþ÷ìË>‡1‡'2ÖìHh$w;dhôŒ¼ß‡‹Š2rå1(´`²)"÷óúo3l•yÀIæ0 ©}2/ó¾[^»ñ¡ãŽ›=mÁ®ǂnS%E¬îÕçtÝ`rÄfzúþ y ›? À•6ñ#$/,]ºôcÌâÚ{ô÷÷·††^å•ï^‹àñǽû݈Þsd"_øÓ5ö3D“&!ú0? ýhp ‡~<õðÚÝüóm@s°ñùäo¸ï^„6 zì±V­BXOÙCç~|ŸÊuß…¼²™=Ga<èíEõý³`vÞ&3_ø=SÝDïz×>|Nxçˆ÷ßq__¢x§}ö^Üì¶‚ß=aSú(,TΉ‰>âñ7cõèlÙ\×®FÞí‡!>è a[|ðA„÷Ý»}E®ñr­ë?Ê€eÈ×AXv,šä~ðs<’°f¶¢2˜|šeÈÛ‘­0Ú`ëcímáËjòz½-ˆy»V÷×îL1Ç$_IA­0ü:§-ÀÄÕø^ ƒiìÁ…ÇFap 3!Í,<¬µ‹Ñúg°Rf4dëî—Z;mÅ63ú¸ÛÑj.&å´E}}dß 1’i ˜Ï5:má—Ï,qH>d<´6óðY›\f×?pád’yPò0ºöZqLí¶‡vÈWÂ9Ùîhž:,íá#y¨]h˜vPduÂlo‹Ñd÷a5y½“£½G^¿$^Udf|Ô1Ww¬^È"PéÂ6îLaÑWaG?3ÜÄñ #á‡3쳘màŠIDF0t9Ì„7Aäí"øóäe¬?‘{páàà–ÝN €éÕÙ³.̶ö¸®†˜ýìî®Ú|1Ü2uÙ@"[}pìöþ\(r¨Aü{3}kÊÊ•kòje|´¢‘wËLYy^bÑ.W &õM)^iï—ä¿cùyßÀÀWÛí§Òûµ¢W²ø~__ÉÃ=ŽÊ,˜äÀKJΘ`e=`5ó°B»dHHld—Àà_B*¡Ì©×ûÅUXÑAÏ)y(„¯’%¾~Møà˜\Ë·CdÝO:JLï÷ ̆)ËÞL&.>wçáþõ{ŒìVZ°¥·²>zL?&Aøƒè‡b‚Ë!I›r#ï'YSý£‘Ê< þyÚ¹4µ‡ìý¸k„rô\¸èât×ÈÖ¦J[³!#=aVéx9R’|ó–™)QÈÛ1”ÊäZEœ¦ 2}@¶ö8ãø‰Y7Ô‡ ?_¯÷Kž~‹¼k£s\`Ñè™eý]ɃÍùb€>È¡2l_d.—<Ì=é {¿µ yøô§'5êÑ‘Ýêºeð5H`âg á=œî€‘Cd¢1ÓY(ýZ•<ônœ¿÷µ?|‰¶Ù{Áù_ ¦ñ~#äÁÔ¢æZ&¶ï±nÞÜ_‰ûd·o/äa›mÆ5}'òÈCV@ð 8"›eHë¾(yp¸š¼¥’‡&+rº“rú ‡Ê°}‘‡¼"¨Ê\ ƒ3X36òùêGϽ®÷ëW^Ô¨GGv—‡‰ã#½…Í, ž—(~R*ÁÉšIăˆƒ ’ÌC¦7Hm{ëWí~9ù¤µ=+W®bá¤ÊàÐyQ¥2Ã$½F°ÉD&i>&! ”agî¶(2mQ»k$@|$HÊVs×HíÂÉñ:>ŠìÚÚuÉ®‘êIsïÞF=ᙜ¶HwZ‰ÈnÌ™iïíË}ÐG‘ãÃ9JhÁôA•¡üä_ßQŒÀá‚`'Hüðh«Þów$˜É†kå!;˜=ö˜.Ï>{?`ž¢‹Ó¢FI㩞ðC‚àìm!‘YoÂpZ‚ ©î‘wÃp‰$)ð늙@*Iáªä4˜^<#FÚz÷È4cdz¼-î "/,Ü´Ä Èn >#]¼+&˜T»›‚»F"vâÞ ®Æ/W7í»|ÅÙµî¦ÕñQ†–Üú²ØöÙW¤ÅÂjõA¬òLmBÖŠkoU­<«ì×(yp A_ Ð9T†r“~ЉûE–‹O#ô’> ¯^WžR»#!–¨O$8™[ ã×í1=xö¹_c6H0LêmÕ4Æü:³"ކ“pÂB3ÌFá^Íxèbéyc ØËôˆÈ¶ža¦Á`#wyXáwdØÄ¿Žçœr– ¬Ø?Û¡Ñn‹õ§Î½©ôZ·‘NI¬Ÿ;çK&¬|&€ bƒ@Ø„&†1×ô-_ñ‘v‡võIeq5F‹ôe±ÍºNŒ€ƒã9'_P«,Yã¿k{¿´Û}»Â¢Ýrúp?%´à‹ú ‡ÊP^ò02ßoâ£Dd(<*±‰{Æ‚ÝÌKÅשÚy»-Òtí.…$›0\$ê‹& ÞeŒ1b¢kIŒ'(¾³jÌYi'ÖŸˆb¹ÇçÌÌKÌ—“¿‰ÌÓóÈ–K—œ—­&ØLo‹ÀÄ· Ƹ9ù”²?Œy²oùÀ¡ëæõoÁ±Áº Ž–¾#@üªòÒ+½ïªU?ËâÓÊø(CKî¬ÎGô‘Á¾oÙÀ'ÚA¤Úí¾[ÑG»e(Ëý”<8Д/èƒ*CyÉÃÖ^æ@†ÂÍ[fF;öì“´ó6æMœƒÎ[X;¤jQæí¶h´K!’`i Áßé¸ñC|ÆúþSV!ß›xC ñ, r¡1ñÈêþt—GlÌËS—$ubìÔD²ËcË¥_ž%z[q´‰…¬Œ‰Ÿœ²|Å¡¼GÒ5Øg-ÿÝ·lùÞëOígA;/o>6% Ïëÿ·@0Qô•¾7^4VòP»Ð÷K¯c´Èn %‚Oo©äÁØ.c+bú ‡ÊP~ò`€w3ËÆO…“ÞÚòP³Ûb„0&zó6 &!@^â¼Þ‚<[ÎîÀÈ+O]oÁdúŒ?åFaß\â½?×@„ÑúéûÞp×ïêìò¨]0²7`~S5ûìÜÞÙVá±Ù b^q÷ŒÌ‘·Õ¾cvÁ$ÂðS¯þÝÜ7y`ÅÈBËtÇFô–ésµ¿ýT3ýZém‘Ê“.d#XNØx»«òÔEú€!R©Ì aŒ±¶o` Éô¸8|ñ.Þ­Ý÷TòÐnD=©¯À×òa ¨ ­nf™Ü²Y}¤ýª&šÁ[ ƒN`þµ•UïiˆŽ<úòž;î8E¶ÙéðªÞ¸+»—ŸÂÈä«¢o滄1óÄB‡ÚàhŒL µ|ËNs«&bL üeã•ìVÍlo‹lÿ‡PÌ>òvyv[ÂRý£H0ÙIJwü2®VWdë7<~òÉ +áÇcÈT ðŒ¹;»Ó"»ýÐì²ó$yqÓÓÒd¿†Vz[l]±õmXÓbó%‹ç»jŒÕL_–<ÛÌ“wg{´s¬4;>Úùì²ÝKɃùb€>È¡2”›<8M˜vÉШ—B–ÈéÍЊ\i‹yv…ƒk«ï?á¢ðÖ<."\õk œÙ$›dÁ¨ d>k,øÚ’»Vfš—`‚I]ˆ‚E»šÕ‘þªY™»u¾’Èûb€>È¡2(y¨bݲ‰F½² [Ù-PÄ•ŒdbsußÀÀÅÄb‡ Îÿ +)º*¹L¹Râ$±¹zòÀÀÍü[ºÆcè¸ãfO[°°ë± Ö.òdn¶\xdÏé–m6+§çwÝ`Ú ‚6ÆÒ`åK°òQœc·dÈöÊÈëm‘GFëÍЊïJ‹L¥Yb1aÑ¢/!Ý"ÕY³f¿þŒ3» jíbdÍD&ËYÄ[¨QY³:ê–m6+§çwÝ`Ú ‚’%>mÊäƒcÚžehÔÛ‚6SÛie·@_–N[¤ýª3g~¥gÍí¹ì×Í2pb$Ó0Ÿ};†Î9gö´ãßÛõXPk›i–!í5""S™uÚ¢ˆµ¹=§ëÓî×Sò äAÉCýQUfò`KÏ4ÀÁ|Ãt·³EüHí.…¼^ Ùû4»[ ˆ <‡S"8L *f‡ »`ó– ¸wêòã‹Þ£ÙóFúvdv’ð̬ ]ºä‹Ù-«£Ý›÷ܲۉ0ÝH´Qâ I îæõQdœæ-˜ÌfƒšÅ¡Ñù>ŒF2úò»’šðÅ}CeP2W$H4† qÚíª¤ÃeæàWiسqaQ‘Ý¥P¯—BöþÍìhôéïÃýBpš»›]wÝ/¼ð @¾ëjAúÜìN6‰˜Ø)´èÍ." ·¼ ˜?òhB šÔG³zrl³UÓÊ\ëfÏ+ŠE³÷ç+yp U_ Ð9T%í é\7ÛgÕ+ ÁÄtå}v`3ù¶Y»ƒ`pá‚›z®¹†…£œí h„IQ²»UBc¶ó!˜cž0Q|µT™|2飶Ùßñú»’š-:Úa›ð¯¿+yp Ù¢ƒÑÁ£•<䀪ú(?!9}'ʬjw$[5-úƒnÉŒIæ*”<¸öæþÝ_Ƀh°*°r`ºÛ‚ÚÊø­ïD™Òäµ;†Î:kuï?}çúd-‡£ÂGl¹¨>FœÁÝ1âA9]ØøCX®2=áûøeÒ‡fYGýß}%{x.Y <|Tì`€§G{]Ým¡ÛW‡PÔI·>œ_YVêíàˆJïÆELfêÙéŽV³'5^ÿ . *23>ꘫä'?9­wÂÆ›GÃÑv$½"YŸ‘]0)æ‘L ïmô‘>CL0½A⪹=[ÉÓ}ø&ÃXtÚÉk}#½¦I×¼wø3€üÀýŽðÛt¦Ë¦äAɃ’‡ú.¤[³:»[€÷ c¬ wx~u+Ä×w‹‘>³f_^¹åæc¹ë¡“Ž?³p)IvJlúD¶ÞE­Lv»ì‰ppT×W«2d*Á^yúÈ>cÛûT/ÍkÞM}¤òù C'í`,Ïò<kÉÁ`€Óì¿?7Ìxñ€¼÷âJ”<(yŸäa,Ž.ïZE7d¨íÛ±ù#½ªò+/æÈve@Zé Ò ,|õí¶u÷ó<ð{<`†%_° ÀÃuHðc§xRÉÃè&¡ƒqpðE°ðA†íYµ};¨‰Ÿþô¤joÏÕÄ¥oÙòÇlZé âƒ]ø ÃX±ïÔõ>’‡ìEJ¾àïüÂ’NY\À ÄÒ¥K/1Æ,®«¿¿¿SøésE@(òøc¨¬Yƒ¨¯ñÑ,ÍȦM¨¬¼1ù÷ÐgŽù}:ñŒ1 YçE«mºz~Yî[ò°«—1ãPK,^…³N[l…Ä­2¨>j©6±=gjûvT?zîu½_¿ò"f´kÚ¢•Þ >Ø…2(yhZ‚p €ó €k!n0À+yPò ÁJƒUýÁçƒsôA†ñH¶ÝÙ`ž‘kûnϳ†lߎ‘ܹ28tÞh &›qëÍöñÁ.|¡Œ»y®¯™‡{ìÎ .˜¤Œßp¶ŠõÔS4%J”<(y(âT}í’¡¶éWúþ£žÙñqäÑ—÷ÜqÇiaƒ­šE0­=§™Þ í¢9Ók|a,òwòZÉC½÷çv —m­‡º)yPò äAÉC'êC h— i»qN;ˆV‹©L3‚ùÄ!ªFŸ¨W[Á— Œ/r´KEì¯ì甉<ÂZɃ’%JŠ8 E»dÈöH§òúäáÒ.Š`>Ú9>ÈრcűS×+yp€´/èƒ*ƒ’9%sîÉÜyèÝ8?-šµnÞÜ+D‚iì;‘W”É·T½ú ÁÈá-•<8ׇA i@¿‚¶êCõáò«?¶€ÁÚXäzA4C$õtÚ¢¸“÷Åw—¸{g*yp€½/èƒ*ƒ_ASõ1>õQoÁd€øæ}—­HŠ?Õ;|° %בã[*yp°Æñé Çj*>Ø…Ê0~m“[5{*2³j‚7ˆ˜§EÌEzfø`JÆê]:½’˜ë`¿z,æâƒ]¨ j›µ6ìƒM(y‹géεJஃQtžYù`*ƒÚ¦’ÿ§p„¥¶ßRÉCÛ!ÕFLYH5Xi°Ò`åw°òaŒjæÁA r|K%ÖÁ¨S3~L V~QÕ‡ƒ@äø–J¬äÁ/ǤúP}(™S2WÄÕûâ+ŠÈÚís”<8Ѐ/èƒ*ƒn¶ð;pû0F5óà 9¾¥’ë`Ô€©_º~L V~QÕ‡ƒ@äø–J¬äÁ/ǤúP}(™S2WÄÕûâ+ŠÈÚís”<8Ѐ/èƒ*ƒn¶ð;pû0F5óà 9¾¥’ë`Ô€©_º~L V~QÕ‡ƒ@äø–J¬äÁ/ǤúP}(™S2WÄÕûâ+ŠÈÚís”<8Ѐ/èƒ*ƒn¶ð;pû0F5óà 9¾¥’ë`Ô€©_º~L V~QÕ‡ƒ@äø–J¬äÁ/ǤúP}(™S2WÄÕûâ+ŠÈÚís”<8Ѐ/èƒ*ƒn¶ð;pû0F5óà 9¾¥’ë`Ô€©_º~L V~QÕ‡ƒ@äø–e!»He5^¨‡Ë’%KÌ¢E‹ºú^JürLªÕ‡’9%sEb©/¾¢ˆ¬Ý>§«A¶àËïà·î@âð(€ Äy×+yÐ@¡ir¿…/Ú9TõWã w§•<ôY²ð1KFQɃF%JŠxZ ÜÃ(ù€ƒ/rø‚Eûíö9e x8Ô,·è´EcÓña ¨ Jæ”Ì)™kì­ü 1>ø«"XùpNÈÃp%€ü Å K—.½Ä³¸Èþþ~°UE@PJ†Àþûï_†¸ØuTËR/€A‹å½À9ÉCO§-ôKW¿tõK·ˆgõá+SePUÄV}<§ äá³6¸ ×?pád’yPò0ºI©cÆÇ|‘Ã,|AõáWÐV}øHF—© ä„a €7ØW™`e½×Ò̃_NÁ‡@რêý²KÕ‡ê#/†øâ+Ê@%Ê@RwðŠÍBÔÅVɃ_NÁ‡Áèƒ ¬ü²KÕ‡êCÉÃØ(J™ÈC¡7Uòà—Sð!pû ƒ+¿ìRõ¡úPòP(¤Ö=IÉÃØð˽Zƒ•_ŽIõ¡úð5Pø`›>È dÎA r|K%ÖÁ¨ÁJƒUý¥ãCLJŽ§Ã·TòàpuŽêÕ9*y(âZ|ð>È ™‡"Öâ×9JèC£’%JЏ|…2(y(b-~£äÁ>t0*yPò ä¡ˆkñÁWø ƒ’‡"Öâ×9JèC£’%JЏ|…2(y(b-~£äÁ>t0*yPò ä¡ˆkñÁWø ƒ’‡"Öâ×9JèC£’%JЏ|…2(y(b-~£äÁ>t0*yPò ä¡ˆkñÁWø ƒ’‡"Öâ×9JèC£’%JЏ|…2(y(b-~£äÁ>t0*yPò ä¡ˆkñÁWø ƒ’‡"Öâ×9JèC£’%JЏ|…2(y(b-~£äÁ>t0*yPò ä¡ˆkñÁWø ƒ’‡"Öâ×9JèC£’%JЏ|…2(y(b-~£äAWz®·IDATÁ>t0*yPò ä¡ˆkñÁWø ƒ’‡"Öâ×9JèC£’%JЏ|…2(y(b-~£äÁ>t0*yPò ä¡ˆkñÁWø ƒ’‡"Öâ×9JèC£’%JЏ|…2(y(b-~£äÁ>t0*yPò ä¡ˆkñÁWø ƒ’‡"Öâ×9JèC£’%JЏ|…2(y(b-~SòP°€Mž Â%K–˜E‹uõ½t0*yPò ä¡ˆ«÷ÁWø ƒ’‡"Öâ×9] ²¡Ø ÀÜà(_ð½z×*yÐÀ]kêÕ&”Ì)™+o|ñEdíö9e §8ÀçLð€¼ž’ Jü¾8häPÔ_u›´úü2‡/XàN”÷ÇN𤒇ÑÕ®ŽipðE°ðAÕ‡_A[õÑjïÞue ßðw~aɧ,.`béÒ¥—cgáëíí5ƒƒƒex¯îi]Ÿ¬(Š€"ð*öÜsÏê9çœÓ£Ð4F  Av!€GmÆa»öa€ ¾f|˜:!6>È¡2lµRÅb pðE°ðAÕGã`íÛe §8ÀÑÞà6Ó¼¢äatsòÁ)¨ Jj­Ô›Ð`å—]ª>|£å)y Œßp¶}Cü¦Þ«ùà˜|A£:G%×J®‡Íe1òÅwÑ[·Ï)yH1Ú À˶ÖC]Ü|P¾2(yPò äAÉC‘£þÊ?_QDoÝ>§Lä¡V\Dyþùçse×dàËû ‡Ê°Õ ‹a,|ÀÁ9|ÀÂT] W-?xÜ‘‡–‘Ð E@PE J Á¤')Š€" (Š@ŠÀx&{ØÀcªP9w‚¶flŸ· €}ü;€; Á> “<‘yÞ+±èÄñ&ƒþ˜yX§õ‘÷ÎÒŸC›ËîÊ{ÿÂ=[ZTŸù§Ìµ”k²ÝæœíãÒ>(ÃsÒ1‘г€Œ\ÚGž>öÀÿ=eåHÇN¡:mÔýuA,ÒÕ>ˆùk¬oHýQ=t¥z6ØŒlà¯÷Œ<ÿèz 6’µ´¿Wòð>ßp€¼£fp¶SaÄðØß‡÷8 ˜¥´ÿ€ÿ`Ô]"mˆ´Xó­",¢Åºtàð û÷6>räVÄâííl‰ÌɈI§ôAgÀÝ9쉲Å:˹èœ\ë#°€ÿ à«¶**áȳG’«Â=[šTßövuƶ»”–˜àR×8´^ ‚·x§µ½ô5ö¶bù÷»ëà“ ¦M¾þÈéõôñvwøŠ}ÿ¿ð`‡õÁg®ðuç˜ à'õAÿ/;68 ÀCuÞÙ•ÿ¬gƒÍÈÖÈê=#½.ë'8Ôy#9Kÿûx$,$õ[ë°žð·X1ŒŽÂÅñfÿÿŸ_W,§}Ö§ø€5ðmûÿµ_`í”éHëYÎû$[ãYÙXÚ›ŽƒÕ:]ý8xÙ‡„¶EÒp€{;¨ö=¡>X „ÇOœ àKÐÇë-i abpà{׳G–W/ܳ¥Ie}Ò$bO; Í±> m“öȯJmëÙDZ¶‰3r|Ï´¨³s šlrGŒp8^ëéƒMöÞm³2<‡™:’ÿNꃕsi“wx—ÝŠÎ ã•=Ø‘øu–ÄQ7 Ø$PµïÌqCÛ ±k·ÿ̳Á¿ðlAÙêö4ÊŒ¼g¤ujýãê¼É![¾ÓÇ#yèðÏ™/®#àGêá¿69Ð8MÂ`õ_| Àû­ƒÚÝTf@\M¡ð˚΀œ™Õâ{¿Í ¾>3 $6tÞ.~áó«ŸYüšú·ë# N JÌ<0ëBgùÿ;¨ë-‰ I«g´›Â=[ZPƒâMÂJÂÀ¯ù!K(¸#‰_aÌPT¸°’vê![–Ä’¸œàZ›p=^³ú ™ãØ €’úÿ àâëƒl¹%˜€_®Æ+·ºÓGÑç_a§s9mSkƒŸ±zI3—íôŸy6È+ÊQD¶º=2ã£Þ3Hkýãë¼…a[žKÆ#y`€ic~Ùð‹‹ÿ}®Í@¸Ô ƒõí.´éA¦9ùÅEæÏàE'JçÝzŒ³,9¹Ù ~qók#ͺ°Ð»‘òkÓÅAâÂj @gÅ/ß¿fEâêƒDíg6eÏ©«÷XÂÔ)},ð÷6HÖ³G~‘çöli“bøEI9蜳kph Ô¿¼\ÚGm9yÌÿ ào¤_Ä®ÇkVi&ˆÓw?²ÓŠ\sÀ/íNêãÃ>à2,ÁOßÁõ.õ1ÍfåÖY=|7ç9ÕõY‡ã•YäÇ"²%= ŒÚg°½Až¤Ÿt©ó¢–÷”ñH¨9wÈT ¿òÉè¹(ÉÕ´µO£¦3"a!i ®tX ¤LO¿À §- 8gËÊ› <Ò¯¾?åã‘ýsaµ$'\ëÀÌGú<ÎéûN郑A‘YiWVê§SúÈ«zöHW¸gK ÊbŠwEÆæ˜aÐø”Õ‰§˜ØòÞ•}dɳüÊe6Ž_™$—<¨«ËÛG­>~à/lѹ4Cól`âÔ^Ã:cÔ³NÌ~0#FÿÀ¯e7ê‚©túH?nfÙ©¾B^ß f W:ÒGž RŽ¢²Õíi”ÑGÞ3êùGf`IF\é¼3)Ï%ã‘<¤iÉsì—/Stüê§#uq1sŽ0ýªÝÀK茶“óÎ\„Ä/.¿¸™Õx‹ýêæ—WVS6þ+ÿÙÖœS )Ûo·,ÇàÓ‹éNî¼à í”>øuK”4äì"´uPµ_º µïošéÙÒ‚¢j3üº§œVbzœc?]ûàÊ>jƒ0m”S\ÈKrKÒÀ¯ÿ<|Ú9^³ú`–Žã€ÙH>—„’ãΠÂ=tƨ^NŸÄ¬3隨9V¶vë#Ͷœð¹ –cƒD®ö9µúsGã5ÏùÇ5jEd«ÛÓ(£¼gð]óü#I‹K·`&å¹d<’¢ÏÀÁAƒ+Ê´]-Tä×`öà" :#~Mp±"Ù­ËÙg3Ëq€cì;3˜œÖøŽCó¤=1p3˃Ó&œ×î¤>¸ª<•AŠïÍTf§ôÁÔ/Xº05ïýI ÷liAg´ÞŸÙ0®á»ó+?=¸6‡Î“ظ²-N]Q†Ú.¸ÄçJ¿î€}Œ¦ŽMfŘ é”>苸Xô_2úHw[¸¯ÜžûËL¶‡å:ŽÕ¼wv1^Ó©ÕZä4§™¨F²6ê=ƒvNÂÊ#ë]Á†my.¯ä »f N¡[·Š½Ö:NW %‹¼Y7Ü6æEnÐä9Ì:p°2“Öe }?Ÿ‘¡›ú¨÷þ…z¶4‰³§wÚ>òäë´}0[Ç,aÖ>(W'õ‘ÊÀÅ›\Ü›ÖGÞ;wZõl¶úèÄ3š“ÞŸ?žÉƒ÷à«€Š€" (Š@PòPF­©ÌŠ€" (Š@PòÐEðõÑŠ€" (Š@PòPF­©ÌŠ€" (Š@PòÐEðõÑŠ€" (Š@PòPF­©ÌŠ€" (Š@PòÐEðõÑŠ€" (Š@PòPF­©ÌeG€GY˜…ÃX¼‡;*²”xZ©´ìï¨ò+ŠÀ8F@ÉÃ8V®¾š·°Dø@¦m7e9sþ=Û¾ÚÛPÁE`ûF@ÉÃö­}ûî GØÂýTK^À^ÿ`Åc¹íÅþl°±#'«>f˳3 ±šêù¶9{H°½òlÃ4v{½A±ã'KŸa«€²T1K%³*'Ïã=x|Ì–Ù¦¼Ì–°ÌûTÛll©-=ÍÇÌž|À<[œ•Ù™‘ Ò¦Øç±Ó)ß)¯Tuw´ OU–PòÐ2tz¡"Ð2)y IH›”±Ÿƒ?3ì¬È üy¿·d íEA’ñQ¼–})ðÉLÖ‚àÞf§@xr±« {8m›[=àÛÁö&Û3%ŸÙÓ„×~ß>`±ÏÈ+{Ëàé…Š€"Ð}”wn0#À/~’ ¶Ýæt3ÛÿfKl®‰à9Øl[Ès¢ÏÞë"KDÒ"¼v†% l¯œ¶]?×Nµ¼ÀÓVþ5–ð¶ æ: =E`  äa(Q_¡t4Úªù²Ý}Á`Ïc=N3·Ytv±÷¤Ìz(ŠÀ8E@ÉÃ8U¬¾–"P®› ià³z(Š€"Ð4Jš†L/PJ@²öÂv·F©_F…Wî  ä¡;¸ëSE@PÒ" ä¡´ªSÁE@Pî  ä¡;¸ëSE@PÒ" ä¡´ªSÁE@Pî  ä¡;¸ëSE@PÒ"ðâçÏ£“XsˆIEND®B`‚altair-4.1.0/images/cars_scatter_bar.gif000066400000000000000000077144451364111050100202430ustar00rootroot00000000000000GIF89aÒw!ÿ NETSCAPE2.0!ù,Ò‡'''666HHHWWWhhhvvvMx¨ku›yzŠyw˜q}¢[ƒ¯|…“k„«f‹´m¸z„¦z°w—º~ÀŠu~–k˜wzµ|Wªl|¨{e½ch¶hvº|n»vwÝ}7ëz/êy8ñ}'ð|4Ü[\Ö^aÎd^Ì~HÆxYÛlLÜgT×wMÙwSÈdiÇluÉyiÇq{×cf×nrØtdÕuzäWVègJædYìyGêuXægfènpêxhèww‡n‹†v‰„{™—m…™tŠ™z’€ ±xˆÏz‚ã~ƒ{—…x¹ƒW«…d¡€q±‰j´v¹’o¶”wÞ„/Õƒ:õ…é…(å‡6ì’?ôˆ&óˆ7ö’7È…FÊŠSÊ’]ÔŠHцWØNÙ”VʃÇ“cÁ›yÙˆj܇uÕ˜gÚ—uÛ¢mÕ¦{èŠDí‚Zé—LêœSò‡FñŠYö˜Fõ˜Uï‡ké„yä›eè•xðŒcó˜gó™uí¡Y÷¢Xë¦fê­té±{ø¨dø«sú³x‡‡‡‡‡—˜…‡š‚š–––…‡¥Š–ª†™¹šŒ¥–”«‘”±”¢¶¦ˆ¨ƒ—¨•…¢™”¿‚ޏ†•²”‚¶¨–ª«¤Ÿ§§§¦¥º«²¼¹£«»¨¸¶¶¶žÁ‰¥Å“«Çš±ÍžµÐ§«Áª¶È¦»Ó·¸Ç±¼Ð¬ÀÖµÁιÉÛǃŒÃ‡’Œ˓؅‹ÙŒ’Ñ“‹Ö”™Ò›£Æ¥‡Å¬™×«‡Ü±ŠÙ·œÎ¢¬Æ§´Æ¶§Á½»ÝªªÙ¹«Þº¹ì‰ˆåŽ‘è“‹ì••ò›…ð›œìž á¤œæµ†ä»˜õ©‡ó§–ù¼ˆ÷µ•㥥㬰豴ò©©ó¯°õ¶­ó´µÒºÅõ¿ÀÌÀµ×ȺäÁžúÀúÄ–ãÆ©äÌ·èкûˤùÊ´üÑ®üÕµÇÇÇÃË×ËÐØÜÃÄÑÊÖÜÓÊÜÜÜÀÏàÉÖäÓÜèÙáìßçðîÇÉáÉÐãÒÃìÒÖöÄÃùÔËù××úßàýáËýèÖèèèäêñíñöûééüïðþòéþþþÿÿ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P}b2@5ß?L Xʵ«×¯`?8`Hпq:¶­Û·pÛH7N lË·¯ß¿< _Lç^̸±ã’ˆÿ=œØê8A˜Jǹ³çÏ C‹Mº´éÓ¨S«^ͺµë×°cËžM»6l‹˜ u:˜/ÂÞPÓE>@Üì¿{ô ’ùòæ!w”Αzuè­oÔž‘;ÃNˆÿ/\P€º €šæóãÜ({vûӣ㿾{ÿ÷I”Ox›õfÈVéìÕ‰!5¸Ô8€^'w!¤\~ÿuס‡>÷áEÞ‘¨_ˆa^‰a`Þ8ù0ÞzêI@xDæÖ†ü¡$‡B(b‘•h‘’KŽ˜!ç d`:PÀƒçH–x’á螊ô½¤‘Giæ™d‰f’N6‰$CPîfT ”ã€\—|æx‚b¶Y“:‘¡‡ š¨¢!‘£2JP'VÞ?Š'ëýÃiŸè’Fú&FB”ªC«6Ôª«¥>ÿô*C³*Ôªb£˜jzÞè%ŸÂ5&›±²š¬²§š¸,­ÏBÛ¬­UŠÇk¯wF©ž6‚š×¨m â´ƒF»P­ ¡‹ºëš›î‰e ¸B˜Ð ·Ž‰‹*¼kŽoš쯚#¥âacú:Kn¡î¾ûð¢7q»W”O'Ì»XÃnf¬êűkÉ¡œ2É+³ác(\®Ë©\3¿œó¾"Ü3ÌÉ 1ÍÙ\4Îóü3¬K3ý/Ð MñÓ:LµÒýV­5ÖY; µHR[Lô?Öás?^w²ÚkÛmG¤Ï:¨ ²Ž>_k86ÙøùÿÃÌ€owÒo[ÍöÐWsMøBªPÁãP ŠAùhfHYùîm4ßýÈ6€ü!ÎÌMŸ«ùØ›sž¸BªDAžxRL!TUÅðé!âó3ùóG ¤¯^<܃o]¸á‹#¤ã±GïIäx×l'A˜XV&˜ìV!b bïø˜Tئ–në@÷ü!¸@¡<â‡Ó?ÿÔõ‹Ñ:H/=ëˆPZ8¶›Ô¥,í@'`L {î1O>Ö‚  o'”Ò &<@ ­}ijßýô—?Ž0}ÆaCJÑ?ÿÅ¥¸]îðbÀ 9é¸V:(8°—×Qÿ2È,õIL Û\ wù5O…Ê[žâ˜÷Dü9-t!P¡ë ¤†´S:Õ‰+]ËPÊÝÂÎÇ»x}C‰ôH^8G:N±ŽP¼ãBø;ÿÍ.€5ÓK>)™Ý@5úG{¬r—NØi@9< ‹ØhÄ#–Ðg•,Y/©AÔMäyYŒõn—°ó@ITˆ¼ž 3€ &¼¢aR§":-…V¤¢.õ(E^ʱ—À´#ã\÷¿ÚY„ÿÀ"$•…Uõɤ&¥Ù2j¾Ìš×Ä¥ OˆI‰4r‘³]F”9”tàN‘¸œùbKiaóhï„§6QÈÉ"ÖÓžÜ,ÈÜJQÿŠ»-†¼JG8£·xª.kþ¸>òèKaþ2˜ }¨D#š·ƒG™*Òӵʳɜ%Q‰h£g>ñYÅ\âq›%iEŸt¢½©Ë€,“ÌØæ¦®)‡)RQÚpà z@ÜМõ¨HMªR—ÊTÖ¬ô!ã(@C`=°N;M÷¡uHOœ$ýÇCºÄ…vóžîDkZGzKµ®ï©Q¦®¦Âƒlõ­ob‡'>¡ U|Âíø‡*J¡ŠêYr €H›xV¶®5¥*=id%ÛXˆàCÛØ†8Ì ˜tÈÉwñ˜@îzØœ©Â€ôj)@!½À–V¬0ëX'ÛPŠÿÚö¶(¥leu;oì!ZÐBöð„`‚–D!-ÆÞT À ¤ž €'JÑ¿~¯¡‡—[Þ¶²»­­I½ûX‡„#qàЄP&såŽWAáŽ}„"º×Hs];MƒÜc‰(nwÅ;à‰â–¶/D ‚ߪW½Ãå,A(S¯XE7 ˆZÆwUâDE¹ý½Ú' Ѐ@à(È~_KÞò¶»ne1 ìP„ˆ#½†ðèÒsULA€!Ò9 ²Ø©é´ T@|² ä(q>Ñ\êªc¯0o'çÞw9Á4>°bµcõjá}9L>Æq;éåÿ*ôaó* y•6…ÉÕ¤Zã"»P`µ­Íò.½¼åËxÁas¡² 2—ùg&ˆqãÀ»ØézyŠÏ]SCr:ÏÙ¤Z)ðçRP 1la¹Êå/×XÑ‹Öòweíâ…ÜøÑˆÃŽS—ŒCFWqónî"ˆXâ¨.ž¾sGŠˆB¿ …«aÖÑ~5µk­ãøÁ&È)Ù"KN9[…‰Ï#ˆNÛ™) ¾Y‡F]êSÇ0ÖƒÆö´¬o|[ûÚÚ6È7Ð î8¸ óÚË#™–xËSÏà³'ü Vnƒ9ÛÛfu««Mhw\ áømp‡Û^ˆx1.ÿ?hÖ>Q T ùõx¿e~qš×œã3ÇùÍrÙÌn®ì\6AJbQìãü޹Şè¦#=ézA7®s¦ïêXwúÓ·~u­Û\êIyê6Gv'|éVÿzÖ½^u°CDìfÏ9ATmX•;VãwÇ;­õ¾wA»"p÷dEöÁÚèñwì‚gÙ?~̃Ô˜?ÀxÅ[¤ÊÕMñà â¼ûýì|ÏwÚB ð`;à¨A¹5²y´¡­ÙÁRyª£=!šÿÇŠíÞw€Gýórý¿;ÿyøÀÀH>0Ž?”yØ8dÞÜ%ôÐ^è:£ÇÏ’ûÝ#ÞòŒ÷¼ÿï×>~_ùÊ?þä­'%³tÊSèÕ»»R{Î7™çþC0o]yƒßö·Çv³&z°6<€~èÇÍÇ~vaƒ!ÎñRh.؇5K´ á°D‡„h›'~ÄG€¿·\öwG ;€€Ê·¬Ç€ÿl´-VqHé Wã;h–X Aw¡V‚?Ø{ã'€H„§(¨‚ÉÇ‚Ô~.54x  aòõ‚&Ø>;ø£×vä§v_è…Fx„7g€J X„N`NèqHR4.r¹!X¡Ñ€dH:ÂóM$ú7‚$ˆ…y„þgˆ‡8Ræ‡|¨~ÿ¡"áq-æa#P#Ö7ëæÄ+h¡uÅQñ…oô`ë†bÈu`8†CˆŠ©ØuQzŒ˜|Çׂ”S‹OP/È"Ô'i8Ø6ôÀ €° !%ˆ!8|&¨‡«èŠÊxŠa|§—z>°€}qQ¼ò^ŠŠÈ˜Œ­¸Ü8€ ·‡ÄXˆ„„áx'yÑR/e‘ÑJgQSØTò¨TÜ0TA5ø˜ú¸üX‡Q5UUuƱ'؈ˆX eVL¢]Ã8¨ÝX„ËÈŒ ŽáHŽÿ8Ê‚0yˆ¼7£8<þ ó ÔPа%[À’ƒ8މ(„1)‚ª(‘Þÿ¸‘ž¥a’29“ˆÁ¸DÚàÀ~õ€X€ X~H‘é”y‘À§tP™“éW(„³õÓ ! À õ0À0 ±•#a5i“¬h•T9•]è–)uYÉ– ñK‰DÀ ‘| À”ÿ ”Û@”r9— iŒÇø“#©˜y•Q—ÿVV±DñЗÀð—Ù[ê×q‰‘7¹–߈“‡9š'™¥ù `à•ÿ˜bI–fI )• iŠUyšm¹›¾™›9u"É.ÿõæ~h|ç ó  ÃÃX"•’+|ÀÙ›¿iš¢‰šâœ‘Ù‹á;¿ÓÿÀ²x€ô\Á¥»Vhüp”Ê'˜ˆÙ˜ÔYO™ÖIŸÜt¡¸oÔ^é  7 €G)d&Ú \ŸyK²9–eù–؉Ÿ¸Išó¡º‘ªY¡L¹PÉÀ7ð€À€ZR{ ž(䗘𩩡Ÿš1*£‹™ŸXéñFÛÀn 8Ð €˜#Z¢ñXà u—V*››Ÿ‹÷ù7+•¡j›€³Xð:0 õ€:ÐY€¢ƒ U`‰à ‡] J›U:£mꦡ)¡QÉ›6:Z8 ~ƒ¥q˜À€7Z@X€U€g` Å_מHÿiüð ¸ 5j—J¡oº”:§ÜI¥qšzð;ÊÀ"@{kƒZm€—䀦$%0ùí£^yy¡pŸòy©/ £˜Z§ Á©ñÙ &Xá€Ì@¨Q`It ÓuŠ€³YI„fµª›öYŸrz´:©¼Ú«wj1Ú×h{ ÷@¨‰ ùða€€¾I“4|ª  ]Ì e+©zùpÀy´C[´K{”ÑÐ GÉzõyIIxQÿ°ŠZÄûÈŒÀ·JÆ“ téÀ"0EPm|¯Ž,pàŸ€H ÃP ´ÈšÃCŹ´Á¨È <]ípe1ƹ+ÆgLÉßçµ UrKlƹI´Pép_ª|µù‹õó@ pÐ Q¿Ð¢Ñ}ÎÕ½a\»oÉ/üÉ’Ü“Nt¡Hov5ÕìÌÈàÈÀ€tæà;€|¿ðÎɰ|=€=ð ¢Q©ÀS¥AР 9íÜÐýÐm£ä„W%Y¥¸å›}øzÀ:”¥‡zÉ× {IŒÝÌs÷UÞy´ìÍÝ<À1ÍÍ·ÿŒËÈåæ„i1Wð‰äËËâ;~ÃÑwÀœRüÏp I#0$@9 ÄØ ]|åW¬Ê ðFðŒÐÈ…;Ó¶\Ó2=ƺ\§¿fŸ{ Ô`í*ª; Ѱ­ p7°"0¨Z°Y€Ø|Z©å ¡íY†Ý¤4MÖ¶ú¤<ÌÖ œÑ×A–>`8Àz€`×F:; Y G+´®]{kú c]Ì‹~ŒyÓ_ó²0}Mü0 _Z Ä z¬XYÐ9q”nР öå ¤ ü@ Ñ KZÂÑÀÊàüÍ-+ÉŒ° 5²½Úªÿ#<: >šqàêÔ8 Yp€È þÀ= àªË̘)(˜ÏîÖ¬]ÀÖÝqGÉOÕ݉ýpI$¾=\‚ú9@¢þðÌÿà;j   |s”ópºÀ Lª’ø˜G‰Íá\ÝA]ÖíÆngàYœÚ`Ç›÷FÁÅ Û€¥Tr` {€Ûàµ09€(­é º°œß®œÏI)Ââ|â×íäîÚã»Öíß0¨Y\2®à 8©߰DØ`^ÀQ€#aE–±¤’½€LžÅ©éÉ(žâN:àZûØŽ­Øg)ÄèEfk9á¿s÷ÿÐ(† [ìnPr7ÃáâA«‹Â&^éJô©uîe åQÞçÿËÞ­7¬IÁŰ|û`ØÐ¬þ ‘ÐMvßɧÒú­· A™ñ°D¯Šm}ÛÂxžç+nçéâ§™kY®7Þê1zYŒÕ´ “ Æú^0 ÊÍýÜQÈÔ@ÝÁƒé@á%ÕÞï½DëÙÖMà¢ïÅεÊ€^®ÚZ ¦kù7ê…üà}0‚°mà[àÄ®2”™”9B®ƒãœÝ,îîwNyÝê9a*Äj9Éà´fõ¨¹6\r°JÜwðíàS°@ÀµÒÿ!îä®ôYqD˜|ðÚ MI´cC>ñRŽìã  •;™vÝ ž'šžy|‹œLd³XJ¢€¦9"°F°€ P  ð­-ìWÜß ñQÜ5Šnðôù«N:ïçnñOïx*RJó§ôÇž„Î 5¯—~»¡#\X ¨ ƒútË.°n@fëÌ‚.o–~Â%ÎÚ÷°ÊÿP[B€¨^¡>ï6ÍÀïN{t2H¢%õ~ñÿ8ÌÁ '&ÄÌ0X ‹V \P‚JfÀEä»þ¿h¯.¼¥Îuþ@ô ãtŸúO£_¯xªÿ¯´/ÌX® NT¦#€ " UPßÛ^|My«ü§ŒÍ·ÏïÝ»¬Ýzÿ$X°`:ƒ .dØÐáCˆŽ@À€$&´1"BA†\¸íŸ{âþìÑG\ -T¨ÄÉ‚C8ZLá(   ¤lX½zÀÕsHïO {÷ý¡7p$É…W±&ÔºÕ`W¯VÃ*;ö_Ù°hÍ®e»µF¸·Êm{¶®X‰á¶}÷Ð_ 7‹Ûƒ%Ž,T°XѲ† má"˜Ùá?}Å΋̳Àø=4)øÏ6‚j·ªÆÊºõ]»w]“œÿí±6lÜ¹ÏæK·ííµÿšþsa²½}·Å"…J•*SÚlQ€(¢-Vöä¡“%ËÔV•~ÞÚ3Ó¦Û¶UM øGÜïEºO_÷}üT@ ¬o¶ä›"“¶¹'œ§º*=þðb‹*°pc‰)¦p¢UB‰Â ,²X£ ”¨… ¥¢©gv0q£V³¯.б¡¬O¶ürÔ ‹ æzƈÈ$͸¨žeØPæŸA”ÊÁ)¬à"O<ù,¼ppàTÖùdzRD¯3ôBª1«!‹s­7áÄQG<ë2 €ðOÈ;uÈH„“ÿ`èС‡h¢li›1˜L ÿ‰æ %ˆÂ h€OJAS 5bó5A¼‘ÈTUm5OX±Ú·ø+é\Õ¡L0«¢†¡|pD)®¸E‰%À#ÑA ÄŽ‚ @PF‘á†l40n@FxD$&Q‰KdbøD(bPSÜH'x÷@.|2Hñjw<’´ƒ¨ Ø ŒðLá+xÂä@À…O¬°¥øG)BÕuxž™‡9Ìf¤(…=†úûÂC#0ÒFv÷kY#gGEýåNw¹¢U @žQD(Ðä7?…PJbÿà 5Ò¦}Pà#‡jP gPßêž‚0ãâQ"Ýÿ´HãÙ/›øƒäíøç¿ÿ¤oè„@¬¤.Zóš ùD–<‘ÏijM !…;ß9:ÐÀ–˜Å¶°4@˜+Â@P½ÓØG:<ñÈ@Ì$ÈTL#”jbåDóÄ‹6¿èQP:’‘ÝÔoò1¯x±dp³c)Ú¡ŠIÄÀ'YØ!ŠO”bÿàG=ø!˜p`‚ [pЀ `â)Q¡…Ávd+ÿø„"j N(âª[] áº×yäÃ8¥@äÖu'­jý$Iñ”ì.¥k•ˆZx)#¼àj§ú—BØ÷‡-lXú\’A»;ôØÿO“)ŸXDú>ºDƒ¦J[× REÒ5¬nÅ[î~TW¢mAîú¼nÏR\ÛBø± &(!úP…çÖa’)–±ÿp,( +YªV¶™<5[4Ê?(e )ëY; ÚÏrS»w#-޸ߠ’$QiH¹k–¾Ô2¥é0 »O4àë(E °§@åM}jT9ØŽª^5«[eÏ?Nç÷fÔ#5å«YY«àí>»¶é.î.€Øj®ž¥ðBö‘­,Á3ž´­-Côá¹£6ÀLÿØM²‡K¼óFÂèÚùˆ¼ À`E)È( «ðAò·½ÿW"QúDƒÖ w8ÊuÅæe+ì²øí]ž2•"ʉ•ò¹%fÈ>ìhÜâ'9òú8 AªP'f1 E¼31Ø Jð¸à€ "ÂæŽ™ ñ<:Ûå·AÂé•]ÖÀÿ<Ø!ÖupHÀ‘9€rÈ€Ñ#D4AHÄ@0§ŠYÔÀ(A |À”@zïéN×D#Ž~4¥+}ìmÛÊ–ÎÓ[òá.JrYÙË–°DÔ |ZG‚% "0@ ¥£ga„4N¹~Å?£$—QÍœ·y‘ìóæ[ß÷f¶nÒQ‘gó§œÿ€’ô¤÷íkg; :@ÂqC aãÕ™€ñ #¸ qLs+þÁÓúÑ|E_4ìïƒS›ß+v¿q³Ÿrfùßè$¯¦ =áïåTßµ¨Imê!ãB.þAaá䈵Œ`‚të`+8†6Z"Ž{\&Ì f§ b³h¹RnùÉUŽòj§Üå¸1€r³øIÚ"]¹GÖ P¬¸!y´§>Ôì,¢b;0Áã†Ð`¼¢5È«%Š?×Ú:X‰˜ÁÓ?hA ƒñ:££a6E·6íj7;Ë˞ݵçÇ\nUs³u-¨È¨ÈXævnoÿ m¬f²`‘ ̘ˆGì@¢%°Aóoƒ¨ÇYÒŒUã¶«¤ÙhÊ ¾i›Û)ö‘N}~:aCŒq-oCÚzº‡d÷ `¶<¡÷„8–ŽÜËœA*fòtà‡¨†LxðÈÃ>³PµPŸöÙƒêC àŠC£Srˆ±z.NÃÀïS2Ò+=,¿¶ØÝy=Ø AÜ ÚÛžtp¬ÛS}ð„Pøz€†Chµ„0¥x# 0‰º¸¡(¡o †p¯¿Ò¼?iê‹ì£`ˆÌšDI°ëŠ¿³ûBÓóÂ4Á¯¸¹ÁÐ2‹ÿ< lˆvZ„G‚x„±#ˆÎG°„ÆñZÛ#l@%´†&¤˜oøƒ8ø*i¨‘ð<Ð[é2•'ëB5„¿Ñ«»5<=2ÄNZ­ñ#¿°˜¿úËüK}@ à ¥à¨Cû~ø„G˜¨0HÂçk¾eH‘;”&Á͉zûº;$£­ü@ÃLÔDÙÛDX/x?²Û.}(…O ? =aò„$Q¢”QX…à„¤A;°[è†XSÈc(†b#xKP„IHç»çkœXeXÀq(0 $9n1EUX…h2Ϩ®ð?fô²O48gÌÿhÜilFíÚ;ªR|ˆ»Ë»„h'OðñÑ€‰bŠz`+𗌂Dˆˆ¨òg¨IPKI ø€ ÂÇÃÊ;$y³,a4ÈòFбx"6J¼DLœÆJ¤J©¬HݸH‰ÈH‰$—øš¯R€€û²Ä–R…@ÐKxX ;0ð†nè‚-€ÅW hð5£P ~X‡D8‚Å+¦iœ;@,ïû6+IOP‡v #8‚a#3e\ƪìʈE¬T=‚ËLPKWS1Kä%Ú[hvˆÅòÐ+ðØ…-hϘO0‚xB4Ï09VxòHÂÿˆ…bhœ?P $Èdl®„ 7Wë?ʼLÌ„NÑ»Ê0ÜÌûèÄôÌÑMîM«$MO(‚Ót,#(›3ðuü‡FPV MÛ•‚ tóÀ/Ø~h6èx»Û`N^$Èc¬²êœJ«dPëôˆ{ œÀ‰Æ‡ì«ÐK±Ü)«l©R8Ë´l„ ˜÷ê/ƒnÈ„0Ùš‚¼iP`à#°„Wh>¨ƒeHBXŠÔiàxµv(…My Á˜d”ÎéD;%]Ò}б8¿zYˆq( ñ2Õ"®ÔÌó:±óN«ü°,ñ 0M(Sÿ[ð.`OJ87Z’Pºr0ˆuØY[æc?Å4H†žBÊ#M~جyp¬,ÁŽ00}`Œ*TNêCKœT'…v¹ˆÈ•™‚+C€»tšHƒ3³Ç:9QR‡RH P-9º2p‚ jX‡S(Ó‚ÄáF‚@ˆ2X…#`ÈÏæ+¡`»¨,'C°|ÈCð‚(È’v IeÒ&CKmPnÍÔ (W ¹€+¯t(Ló$„ÈÊl'Ç´£L0 sH„CX }`˜€DÐV8„ûˆÝ;‚­ŠGx~Œ§©ë:(Ðÿc ¥˜‡zèŒ-…Eƒ>¸œFø•mõÖo¥TLMR’W7A)†Ø™Nà­ÜR”MY‰ ¤CÎå¬8îÙW¦…Dè6Ä!Ø©â1_ýTLnQ¾¥£ß3g ~ˆ‡©ÛJ-Y.õß%.d&~ˆ¸ªˆœICEîß–zH^`ÐÙ/³/:óÄšóHΈ'½ †?ÜZ †h¸ˆƒ9 *Ðmøƒ> dƬWžMCI|8 %NdD–×Ê×EÞˆ:€+¦P$öe¬@óÁ`8l€NVùDù…%‰§aجº¡Zì S–q0Â?`,(Œ™øƒÀ e‚€¬LØ,jHç4“ ¦tP £üe`Žd²5âæ@­Š €cÞJâ}NãE:V|ˆøŠæiþ:köäИ.ÿn©[Kåg#ÜÅ@Œq¦¡à†ëSˆv°ªx¢š…ø«m@†"íå~Þâ}Ög“õgˆà‘sý­$èdné±õFMî-h&ŠOV ˆ‚ycX‰6UfeÅÀ‚˜ ãH‡ <ºbÐ,虜…jèMW`ÖIg .^~Îg˜>d™~ˆÜ¡¹ëÌ`f†¸»2™àˆ¯ûœ¥œ ™³¡†Œ S…[¯hËDñ‚ È€* ãWƾ)ü6lÆ$0wÚ±†XnH2ŠAÔŽéÍ®Y±5䳊ˆÛs…d|–kˆÐÆ,éF~ˆËùU`fÏ †_@ºáÇÆ1 ð„ÿE耨n6sØÈ€)`þ†>H19~`_`pQ’Ï÷ŠÖš’äÎÖâÏmím…8¿I²O kƒnQŒª‚U_’8Þ@kfßh`@`°„éUH„E˜§CXS°BJ8ÄêCg_œ-ôÀZøvß#ˆQËkÔ.k³Îî³'¸ð GWœ&oõvˆ6$®£…²­¨`O>ŠƒÄšò ªO@N0g`tX€Ep·?‚C`±?qà¢;pVëæÂ›ÃZ î—>íòvé#§pïÖ¶†ðoˆÃ÷g﯇Dz)†xÙ>‹ð6Á°ñÿhì‘p2 <SB¨ò·8îîîGò$gò&ˆ›†ˆ,^ð.;oR¼óˆ äÔyo°ËØò˜‡LèS¾IèÑ8„ èoBs•`D‚`‘§¤fcs?Op“«s;ñ¶^òíÎs†Øó‡èseVrPí'õ¦8Î>.…m P„°n²Iè¶t÷úb\`Ï‚ X0ˆ‚NØ,g(+fn¦ŠI°z ¬î#«9÷óRŸp<'kT‡UwV×éì†ëôº‡mË"IOP„YàëØ8ÔaCÜI`à’ 90ì ¨—ôرÐ@ugHõyîÆñt¹–÷7ÇîÿSwëloõˆÿvƒw÷+è*ßböNL¸£×¦D¥ :ÐkjWŠ<ø8 ƒf@Œ% \X0Nè…éøUü¿Ù ÝÌv˜AŸxrú(õÖ¶øTr ÷lQ7ˆ+†CpN;º­ÀÚ<4Š…†iX‰ƒŒ+‚Bø8ÈCø„t`“§WŸh(ù$ôñh5¥Ë„ oún/úº·ûŠGúq@4 ‰q÷vWgzN?p¨—z«AwOvn$$›lf ®79¯‚G{²7{´?Ëꆩk¾p<}INØø»ë¥×ömüo‡+Aè(o–üˆ't¥°­®€oÿÐ0‚0‰•g†Ÿxù˜ŸùšoÚ¿d/HaØ@ƒy¨™š‡= œÕø£'z¼×~ÎÁÞõ{ìÏ~ºŸO¿¥ ÆVJŒ†Æ™ƫӻ®Š¿r®‚€xó1øã–cð‚3jÆ|¬XÌÄ‹ ]½€§Paº‡'R¬X1¢ÅŒ'bÜèñâÇE’„XRdÇ“*W²l™ÑN0Át)ÈeÆ”8Gs#5B}PS¨ª”*}Sò懋F‚x²ì*°¢ÿþh‰óGŽ×[ÈQ‹æŒŸÄzÔœ^5ãå V-¨ÕxÑîŸ>I/ä-íéÓï_Àö$\ÿXð`ÄŠ«4@ÀÌl.6¼Ó²KÌëV¯Þ0`õrJŒ¶‡ .b¬´ÀÕçÐõðý ¤Ð_mži¯Î«ç …3þxAóÏÙ #–½x¥[°æ–ÑWNWYÝzeÆÚ·o €ãN”_?Yžäuj¢rÖ ò¡;Œ‘±ÃÇ‘¤Øg½÷‡YYóüñÇCó˜…;ذÃhõ¬ BAó?ÁÄð 5ŒÖyŒ‡Rv!"ö!w%f6N>ùàtS‡"B'’z¶GÚCòc‰'5Ü—ß~ÿ´ço\5Ƕý0>ˆÖ9GØgƒ >ðS”t˜ÑÃ}:C ‚Žÿè¡‹€‘Ò˜•i"š"ãpæ?,~¦_×ÑÓYlÀÐC£Bñí C.ÈZ1`¥ç?pd!Çqd±Ì?ÒM=½Sˆ',D5ÀÈ7Œ1 RSi>|çDüD3L4¿€Ù✰¾˜&­ˆaò]›ßQ4N°ˆI¨H‘œ³Ê*&IêaåÞ{ ¥ &”PBA%@™Z ùpvGqÈ1Ç„WEsÕ# L0Ä€R ú_|šÉÏ7Û„ãOKüêÃÿbN¼Wíî‚;‘Àˆ±ƒ"ž´3 D=íÃ|ÔÍ€ÒÒ¸ýê L—û4Ôu<µKŽÀ0Q>(t€ PÃJt±Ôþj,«§~B© 18œà‚%°È`D#Ÿõò?íî Ë ,pŽ%&±Àòõ« È6󑈃Ï6lÃRgÉ–1N¨ZäùçjS=ºG±ù¦E€‰Bü„ö¿œgæb|Ô%=Ãì Ú<ÔÌ·HËžN¨ 0uý°€)ë!¸}Ñøh£Ë;x„Ì<4 K¡=tUÓiǵ÷à“>¾FbˆÙåS@¬¯ÞºŠã2ÿüéØÿ?þùë¿?ÿýûÿ?(À0ñêųl@‡vÙ !#Â!j g ÃtF:>µ ú,@hÀ,1Œ_ØÏ÷¹Ÿ|Ø 7ôá~zÐCñç %éN>$Œ!s¨Ãò°‡$3Ò‰°1l¬›ˆ¶ö5Àb¢ëÜ¥#‘$aå4=蔦e¼!0¤ñáéB@0‚' K£Zá‡âH•%DN÷¨\Vî}$~zÙz(¤Ç~IQv…4$K@ÄÅ‚MŽd“2¬à˜¤ 0bEñâƒâCÆ…:èÀ.°Ö´Jà‚G´ƒ3Cé3ÿ¾A@©? €'„3Îs–¼D¢/¡)4s™SHŒÊ™Rô¼ê{%_#oõÿÈH®ä¤ «F¿w•‡aœÙb`Ñ.Ñøs@W¡”Àñ Ú€ê!¤2tpUaà`2¸j):…èKž ù*IÆUŒaäôHY5Æ2}dØ=‘Éœ*-ë'Ï:º±vE¦=-\K»½¬Ö4rP‚fÕ­ü/ƒÒ„;ª¿R£:,Ïn€šô+²w™,V£AbdE%ãR’VÔc»q íÊú«l;ÔzRµ¤ëDÒ«^ðŒG¼ã}oìþ1.JÍ#p–èEjp«8Ïê” ;ˆÛ‚„!T ¢WñŽÜ@­¨¢:U‹ÔÃi V®ª‘y ÙÒ<~Ñ´–ÿ-wò hé±×ÆÕ½(5/éóHH¶—¼å…ïJè1ÚÁ^IÀxE]ðƒvóª®< p 8ä³°ÙŠQ99Ü xpÆ!¤5 ÅZñ?)ó¤gý­œŸ¼`9c†[òÖ¯~²E”`61Ë e9µ h ²ôeó9!•ÿ)P/Èe—_ :ÈZGQ…|5žS0ÎóñCo»…|ŒQVÁ­ ¼Aν›XAÞ÷yömkm kåZâ]ŸFpÌh¤ÄæxuC½liœtÉG1@TÈøÀóÑšV°K’Ý` U=D;”TACV `ÊeÄ<؈’dÜ\Eÿßh< Ñ¥žÆ6£Hœ¡¥àáCôƒ|H£§¤B¬ƒ'€;¨(xB)¾aF*öáUÂ'ˆB)þ!ž´M/Œ‹Y І.RHbOxÞ/” 2r¡?âãGéc"ã¾äG4E Î g¹GšŒ|ã?p#; ;xÂ7öàAÂ>Ô"VäÌA©Cš5ˆß(‰F@›|f‘šãMG4"âDÞZÄMÖ¤Etå"ÂääÉ$Yiôñ#4þÌ‚R } {üQVU„P¥Q*„ÿ!™IW&@$^¨â>„»UR˜§È_(- Z"šé›EBÜ=nFd’%Z:"[¶ÿåXî _‡í„Û}Xáý‚dF($C:¤`~„*>„PzžG²fE8Å‚èæÉQȳ5Ë6…dEìÛªÈGeº$#®fmÞfjag‚ægÎÙN,à`yÊhjEzFD1 F B"H€$Â7†Äl*D(x‚Rœ#rFÐqF¹Q»˜Šfî†I9²ÛdBàF¬ã1bàôí'u>§2Fg>ãö„u¦vê!mç€Þ%»±Â#+$'E¨ÂB…TU•qU )Ó_-fQ$IÞgUßÌÚ›±J%æ¦-:'øM((Œ©åY¶¤3^&æ¼Ìh–¦ïðKjsÿçšáÉJª˜GDV.}‚RHDN ƒPHc|ÐVø ojhbT¥ÞÄKF¨$KR„¤`)B>‡éâèÀDرq’z¦M®…íÐ)N4S¥1—³¤Sw¹’jDXASŒv"Ðã: e’z òõ·QWV,&´P(uê5¬ ¼ä¥þiè_IטVÕŽ­šÎ\fâ)›Ò °€Bt!æ=„ލ‚Zfnú©tîDSß}èäòÇPlêÅàŒ”åàÁbª ©èÅŒ‚È 1ææ ZQ¨œð˜†àZ£EÏЙ£ø‘j<–e€ìhª¢ &«VØEÌêšúè‚ÿÅ}üb|$'©äIN„šŠ¤’††¶êŸ™~DhÐãŒK’© ”ô[œ²åɳ}i‹¢êD´ÍZüäDŒ$è¹åZ–+Á ŒBÜ hÍ8iìÆ2„*Äv&hKP#“èWX¡Nl¶ìEøpEÏ¡ÙÀU™Ÿ¶åÖe»Ôšð¼ëö|b¯Æ¬½éÖ*Çj‡ÇÖ8üC>”Í?È7ùÖn-×ö§ô‚ýôÂËt­ÿ\Åý8…9ðË Ãý˜­ÿ¬äýÛ¦Ú 9çTP|ü‚‚°-ßB‰’ SÜÐ/€ËLÞb%ÉÝ&IÚâÏàÚOá²-ÙVnþ/{±DEÍ™JDÀì\5kV¼_gøÒ±¬Z´cFXç0J£Ò±îXÊÊp?~1Ï)Ãëóp"C¦‘eÉSjG _ÅeÎ 2mrâ1vN1"3òlyç`ÕÛÉj1ÓÞ0!Œ r'+²¯r’„ó 7'ÀëÅe7&¥8CæänFÀ®|ô'—q—aîr挮5Ôk+Ÿ2*‡ñcޱó+ƒhh,º¯­ÝGVÕ jp>™0H#…”E­°w‰pUQ×Q-uÿÛV†„ ðF*˜¡Eõ°ô²²3§I*O/52ós5§Ù¤é1eÈ‘%fê… ùn°Û­…’h’ìo:Sf §>W”ijGp/=‡`’X+Ò9pÓØ)—†t?£É?/ ´+t3ß ôć[DNͲé“&Ââ€a™ŒóIJ‡QG4±l°"¿Á ÐQ€]ÓD‡»®)k„êš„!¯tO´´Ksï6³ÿ*èùJ|"4ö:Ï#ÿƒ&3WÉUÊ¡1úší°òGl0C |ôæokÍ^ï0×sw(¸bµVWG³W«´Lƒu3õ<í—©¢µw®õζ µ}2ÿ`G`rfÕUŸèutc5´H¿,…ö^öÀv©¾ôLÂvl+(MRÈ3N7Þ/ð.0ï€ì&YPó,É¿”aGä.A.uÑîÕtì_ûîò}u1óîs36ko‡kW·u/6ww÷lÿÞA{%öRQ‰QÈý,¦ÑbRt¬=°›ý]邏”üƒ=@t5­Å̦ H¯ ¯„û–w{çú¹¦«Ø Ë»jÏû²ƒ»Ð—ü׃ýЫDNqï.-×üÔ§zÔ¾Ï?¸NóŠ¼Â¯ýÈ“ü±{ýØÿ|’J6̶šc{Ø|ÛÑÄ7 ‚å&¾â/>ã7¾ã?>äãÏÚ¶­âÐäÛÿÏÜ2>ÇŸDÔñüÆß½É×{Þã½è>дnS7,£ý «öÖkuÔb’&¾Í‹=¸›¾Ñë~éO0-ýûn /uìo~¼?D8µ+·ÂK½Ý÷¾ô§þ~ØË§89C×#?Âã9éû~øOêûþTç+«÷|Ýs¿ª??‚Gÿ÷üÏ?ýû<Í6&²n½ó³ÿ¶»?àÄ? ü—Î`B… "døð¡Cˆ J¤xÑâEŠ5Fì ØÀhÀê%䨑áI”&W¶tùf̉‚d²¬iPeÌœ0wò¼Yñ'Áž/‡¶,Jpd´zó€ Sxt%ÔŽRƒVµz•ÿ M«T5rÝxÕë×­`±†…H•ß0 KÚûk\¹sj­jö,Y¸wõòíÔë¼hÔø-Äëq/]Å‹cÚ\öïÏÃ)#ßœl¸rÍËO33öü¢cÉ[&íuêÑ¥M³ýö@Ñ­]ëì,s3ÎÛ¶kûÜM4vpáÿfk>ý¸·oÕ´—OüùpéV‹ã>¾º¹óì¼£Gý }ûtñU«syw”¹~7êþ½úñó[–W~Þ%{¡×™cÇÿ?Ó£ÀŸìCo@ÿ\P»´N¾©à+™&\ï®økðAÄ0CŒ*¦óÛÐCû[‘ÃïsñEIœ1´ÿEŒðFÅúD5´q"ýh”ÎDULFe4ïH&—t²Å!¥L¨Hï€ÌKÇ›ŒñI%£üÊ)ŬëJ,}ÌñL-“<1K3Ó rÌ8 ª²Ç7Ý\ÓÈ.Ùl1;ïÔSÎé”°LÊøìsK/ÁäI<ë ”À 0À* 5ÔOL3ÅìPM%´SÎ -0 1KCuSV[u+QEÜ•VYG.ÒQiÐWÕíW`_vØöŠ56Ö[_Ã0@Õc÷ vZj²!kÝSÚl•/qþÉ'€|þGtÓÝ•ÝvÝ}Þxå—Þzí½ß|õÝ—ß~ýýàÿ€˜`€¿qÿ€£^ÑLÖÊn½•Û‰!~ôS_&RL  Ú‹1^ÔVF·ÍЈEuåç2Ä€Ì5Èa53~8e•o¶9g–wæ¹Q— ¬ÎK]ý¹hе5™é¦¹šB¢ÿìYc¤§ë¬F™ä§¡&PjD[úd®Ë¹k³·V»ä¯‡ ÛS«ãN›m¯éÖ™jœó&Ûm">z洛¶öÚ¿‰[ð¾çƒ›SÂ2üðÀ¯Öºíºí¦\ñØ\r±;÷ünŸånñÄ?Ï«Ía-tÌ/?[ôÓ9wÝr¼QrdGŸv´a½wàƒ¯úvÜÜñŠ‘<ùÿÜ«e½xêœ/¼ùé—‡~îáõøè5·þúÝW?rî»×žïµ}÷þ3ÕË7?ý×ß~~úÕ¾~ÓÙÍ}ÝÉ÷~ñ«Ýúîw¾üé}û#ø*ÖÀ¥UÎvœ\ HA.ðxÌ õ”§A‰…Ov|Iÿž‡=ÞYP€<à!HÀâO„s!!õª÷Ašð„/¬ YøÌÐb8|ß [GDÒ € D }XrðòÓá¥XE+ª°‰?|b ™‡Ä$2q|!bS·Å.z‘†hLãÿJÈÆ5’Q&˜(€f6'3ª„bü"{8@N1…p¤È8Љ€Œfwtcÿ™G%ö‹€ äy‘˜ ¤\‰Ü ñxÃN*Rp,@ªþ1€†R‚Eã%¹D>fï‘°¬dGF)˜ ]êÒå.yÙK_þ˜Áæ0‰YLc™ÉTæ2™ÙLg>šÑ”f¥f“h%!3P¥×MoˆÄá&ÉYÎmV&〠PmÞ$œâüæ9ç Ï«Ä3œù'8Ñ“N\ò5Áç= ZPsÚÓ ü¬'BÚOz*t¡2ÑgBZQ‹ ”¢•¨C±¢°ªxô£WéOFJR‘ž¥!µJIoÂR™¸”£1•éLiZS›Þ§9ýV> Pj¾¤ 5 ÿ1Ç:Zÿ£&Ôtb\=ý©Kœ Õ•Ž@%e:zJÊ¥õ"ù°ËÕqà©-‘A˜*ž­¤ä)´òÕ•ˆu («@Κ֩èõ±ë?ÞºA !g¥«`ÊÃêj ˜ æ`uú’²Òª-É щBbB}•‰0.`B¥}Éf%›ÍËrµ,òZÑÞõЊn;€pò(1Ä CŽC¯ÿÀ©hÛä6·.—^ÇaªŽä#·Z)k::†Ùàvd¸ÅýYDZ×åºÀƱ^ºÖÕHjÇ‘[å ¢º†xïBèkßÿƒZû­¬K6[—¤E¼8lª I•faØe® âÀQɦrsÅ`hö4á®[1Xå‚54BHÄE®Nˆ—™¥ˆ!¡[݈+“r¼nˆÇU®]ñÔÄ™œ¯ŠÿQšöʼnqGT»Ô “Ë\:ÖˆHé[ÕJ  B6•ÒÜLаO°QTÔ8J÷ƘD±F:qËÒ*xÅ2F‰ €`Äÿ0óK€€,Í'v œ“|ÕÔ²”\)´@òA€¡&•R+rhYÜàt ²#pNþ€ÛRÑâííЉvª1¢oüáƒ`:Ó˜Æ,«{ò±ñÿàŸE&¥)Ç•2gø®T­Z—’\Õ ‹_ÒSL‚V ¹¦jÆÙb7›&…6Ä¡w½æ‡,ÚϺ*¤IÙ‘Lö4À„¥Å›i77f¬ö6C ½^ìàÔ\Î4gumKu6¤ÝÁD `®|@¶ý.å¼^pu¦£¨ïv¯QB.ãšX³°K-Ó±a— •>õ„mâÐnø_I¾å˜ªŽcû ªõé51¹’B§Ö!…^2J2ùØ?'[©îœ³ˆ7\blÚ\¼™,•Îå ‘vÎŒæ'ötÐ;bÛàÀQ÷¸A¬~.´öyÛG§8J-ß)go't»^™”ªÇÿ†õJÔ¹íÒ–ýì.©{¸ÇÁvA¸}ÐZù²Ùó¡Nv ½#õ&@Êi€”ÛÜGeö!ÃÝô‰À¹”TFö:Û‰t%ǸóŽ÷oXœò„qÞ”‡­F °Þ”«Sí0|çÒzµ$׳GüØ5")Ëk$—ëR*æeBMä®51ƒº~ÏæI)Ìcp“=£Ÿm€®‡”º¬WѬÛÀåN¼Â°Ë|뫼+寰V¸O±ª ªÿÄ8†ÅOCè2º—üru]˪ø÷ ÐPÐ#P'+Ð/3P/èŸâÔ6CPYÐKa ÀÕÿDSpJHpÅ\†Ê¸¶mÝôʯ+þ(¥±ˆÃÑ*¥ÓáR…把㘯àTÐP ÐkŽ @>ì`H-°8Àš»  Ç½þ Jë £0íz U àÌì  ;¡·ªpÞ-½8 ?¬Î$,›ê !úì×ÍÏÒY½RÅ Iµìl³&…Óԩͤ«·ž ÀâPC‹Œ¶"Ñ•Kè® ¦ ?‘Rš ½z+©Lð ÍÎh« ?1ÆJmc1+ÑïP¹òÒ !WNëÏÆ…½ñ}ËýŒ8ª»š¥”² »ØPºdÑ+ÿ?ÌìüŒßÄ­”š¥ }ð ·p©d¦‘ ·Ó,±Rº 1¡·`ê×ÑefPK°&%û¬ªü úªo¯Ïcô8xPfæŸÌ/ÿÞ ÒÑ‹ R!2!0’!#R"'’"+Ò"/#3R#7’#;Ò#?$CR$G’$KÒ$O%SR%W’%[Ò%_&cR&g’&kÒ&o'sR'w’'{Ò'(ƒR(‡’(‹Ò()© †)›Ò)Ÿ*£R*§’*«’*#P@+·’+»Ò+¿,ÃR,Ç’,ËÒ,½rdÉ&ɕֲ-#É…â’’0+ÏÒ.ï/óR/ÿ»2-(–¨•ür•Þè•30uª.÷R1“1ó²/s.åÒ~Ü’¨h.-ó2y/1“3;Ó3µò1 óŠ0s2#33Ù²2KS2‹ÇÎü,á¨ã3cS6÷24YÉ4I5S37Ué6Uó4Q‡ÚòA8!¬ ’8f9““,ks(“7Ws7Õ²7ß:©Ó{´ìªD¬¸ˆë! ÏüÐÎnéÑJ”Ó<Ïs+™³“‘ Ó6«S7ãS>Ÿ“}ê, oéþb;i¢‹6K\Œì°;ë=49Õ“0ݳ9á“>s>“A×3†‚s8ó3ÝNC9¬ÉzJ­¹‚/]”DÿcSAÛsBt4}7£2T:ëó¨ò3ÉÄ3ÐÊ¥è$Efj«qØÖÃØ‚Ù´@eã[Ú¥_¦cZ£Aú–åä‡M:¯þñìzkfH­…ëB¦ƒZ¨‡š¨‹z›iúÉ(ÏK6 úÂTZ™¥šª«Úª¯£‘™}h©ál Ž”l³ÖL°Ú¬Ï­ÓºœµZ—³¨«í¢¾šñÏVQ+®W­ÿï¯ó:¯Ùú‘›h¬WL¤ìöƸuZ¯[±[¨ùzg¿a†¶ž0Ý~Š¢³‚±7›³;»¡ÙÙ‡JÌ!ʯûˆ£ŽyN<[µW›µéÙ±±²µc[¶g››_Ëš¶s[·sÛ¶·w¸ƒ»³{Û[¸¹ïš¸и“Û¹Ÿ›ª—››º«Ûº_Zºp†(yŽÛz’ý·˜5–gJšÊۼϽÓ[½×›½ÛÛ½Ûû§p†æ¢ʾ1J£F^õ;¿]‚¾o{¿ý»¾ñ»¿¨À +À ü¾7jÀ§;ÁüÀQâ¿#|¾\Â-¼Â¼1°Ã3|Á7\ÃÿK$Äù›Â=œÀ?\Ä!ÐŒéN¥ZªÅ]<(Vܹ^¼&d|ÆM*Æi<)wœÇ{ÜLJƒ§|ê%ÈʬÐj“!Â+«ŒB¨¨éÐ0÷"„Ð! ‹î~ŠÊ—Š*P[±´«,z¼Ž ×ÜÊÈæ,²ÐJ\¸ ÑÂJ+‚ÜÄúêȳ±¢«”ü]ç*«äÑžø„Ê1Ú*Èãû±b®ê*#ðµÞ-Ñ\þ×ÿ\"Ü …åîÊoIÞlNµèJé›" â|ËÕ2T¸ …ÝˆÞÆWL®.U®M#zÏŒlÓêW,°XËë­^š­òž"g½¾ï)ÂìÚ\ qÌà_!.áÐMݪËú’àlÞ¾~CÐân­>HŽé¢äDOì.=ÁþN\Ü}%„|á¦nÞ£<©œß§ªW*ÍÓ?Þ'ß\„´< !ž?"dŽš¨Mü=ŸÝ‚"º.Ïf®ø!âcf¦ã~êã/âú‰­~å¾Vý‹.fÚÿ‚AÒý;ˆ0¡B…8 è_€‡Z¼x0ã"P£Èƒ HgH@ÿJC#1 €é@€˜ìÔÒ¢!kÞÌ@9ÀÄÀÃ: 4à@Q„ò%4€ÔgœSÓUü×)& huj§ÿ*‘âÔQ¶= _Ç!‹(ðÐÐË¥(Uª,Úq)ׯýHРBºKïbÚºäÔÍœ;{þ Úó‹; :-ˆe:$ƒÎ‡,ëÐùF;þ·“%èÒ ÝyÜâßDZN;“Át¨9‘st„$ßœO÷¿±Rÿå3`àvרµ è^Ýzª`ÔÞÁßî4{jsLš[Íݵ¹xLiG—F¸ÞiÞùw|Ý…†`‚ .ÿÈ`ƒ>a„NHa…^ˆa†nÈa‡~bˆ"ŽHb‰&žˆbŠ*®Èb‹.¾cŒ2ÎHc6ÞˆcŽ:îÈc>þdBId‘Fùa'€œgù çR‹Þq r ’ZnÉe—"a„©]g0R: Þ™&Q ð•—vމ瀓š}’cã¤ÓvR@oã  TBé,Y€Ag°Ø™·1Úá$HGdˆ@Ý¥–Ú?Êô'Y›æÉj«®¶˜˜=ùÏž„™N'8væ?n2*¥­³†ykAc„Йüy5Ó˜ÀYÀ9Ž!kÿÛV˜x½¹f[ðæ«âŽK®‡jò”®%¦+¯hZZkE½R` ¢æt¾†É¯!±À&U4Ž”Ó4f>Œ:v0Pð”!M–KqÅ++[¸¶«wÖq¯gZEç¾WåõO¾ùž,H}bÆÊ¯R²RÅÖÈÈ[TDP˜u^ tÐBÄ(Rº «T`2%p¶û’,/šô²D!+'Û±DÄR:­A LŒ’œWC P•Ãßa²hÖC¿ wкÆìØžŒæ¥&p¾‹rɓΠ'£3]}¼µÎtëž°¦Þ°é §Tf㦷ÏP´qoÎy¹«çÚhHbÖÉ¡õ!,Õ–eyX•sé ’–` ‚~ûè‚§›Ä%ñꢻÖyñÆ|òÊ/Ï|óÎ?}ôÒOO}õÖ_}öÚoÏ}÷Þ~øâO~ùæŸ~úê¯Ï~ûî¿_c@!ù,œ€÷÷÷ !ù,’ƒ777¥¥¥ªªª···¹¹¹ÄÄÄÍÍÍÔÔÔÚÚÚãããëëëõõõýýýZ¡*m±Æ%µW¶5Xa9™§X^!ÇikÀpB7˜]È€P0 Ž`Ì-RÈÁ`H .Œ…LH(†fCÁI ˆtáÀA“²Ù°ÖÆeÙoê?Æ#!ù,’ƒ777ŸŸŸ¥¥¥«««···¸¸¸ÂÂÂÌÌÌÖÖÖÛÛÛãããëëëõõõýýý_°%@p¬¹½%­WÆ9^bZ7™§H®¬…¾_6¥%Ù(1($zŽ QvH,pŠÍ€2D‰ƒC@, „"ºH( mбà428óæ<â! £îf ]|)!ù,‘ƒ777¥¥¥ªªª···¹¹¹ÅÅÅÌÌÌÖÖÖÚÚÚãããëëëôôôýýýt°ÉIkc[ªäÒ“4Aóm×”§Å °šàôÆ2[_°œÓ”›ï×âá†: ¢pD6ˆ„p5£,Œ«D08ˆë­ä ŒH"¸‹Öš`0$+Æu¢ˆ*o 6 /#O„ {! E(‡!ù,ƒ777¥¥¥ªªª···»»»ÅÅÅÌÌÌÖÖÖÛÛÛãããëëëôôôþþþ}°ÉI«½8ëÍ»o jŠ´ŒR4Aƒ I,ÇLÒíy1È7º Ï÷ N†€dê)“9ò¹”L©Ñ¦/ð£,´¸wpßa«ü3 ¡šD0`‹ œ`0$8 _ 0 v %G' <6 Œ ƒ; ‡F!ù,ˆƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÖÖÖÜÜÜãããëëëôôôþþþ†°ÉI«½§Í»ÿI&ŽdižèÈ4Ìš*ÒâšL4òY7À— ¯‡›‰‚Câï(8•Æ òéôE+S*4“ÕZ1Ù‘²7 ñà ÊRáM4 WÉ®!4Ô K; = p   0G2-( Œ@ ‘‚4y!ù,†…777^sŒcz”i‰¬rŒªp’·}š¼ŸŸŸ„–ª™£ƒœºŸ¡£š©¹¥¥¥ £¨ªªª···žÁ…¢Ã–®Ë˜®É¯¼Ë¦»Ò¨½Ô¯ÁÕ½ÁǼÄͳÅÙ¹ÇÙ¿ÎßÁÁÁËËËÂÐÞÉÓÝÖÖÖÐÓØÚÚÛÃÒá×áëÛãìåååìììäêðõõõþþþ¯À–pH,ȤrÉl:ŸÐ(’ÕbQ—)¡ê:-µ­m’å€ÅGÖ¨0‡¹D5»}† åmú»ˆÏ»Ñwk~z€}ƒusnD*‰f%‹ #ŽUk`”n#)WdB_*€#- f) %¶^)#%¦-Yq*" B$%+C!*  ÛC(,*'C&(+êBA!ù,……777Tf}Oh…NjŠWj\q‹\y›Uz¢mz‰d{•`{™[‚®\„°i€œe…¨i†¦hˆ«x‘¯s“¶t“¸~–±}™»‚™µ¼Š±Ž¡¸ž¡£œ¢ª˜¤°œ¬¼¢¤¥§¨ª£¬·¥®º···ºººžÁƒ À§Å”¨Á–®Êš­Âš±Ë¯¼Ì¡·Ð¦ºÒ²»Æ°¼Ë¶ÇÚ¾ÍßÉÊÌÉÎÔÖÖÖÙÙÙÐØáÖàêØáìääåíííèëðõõõôöøþþþ¥ÀŸpH,Ȥr©ìýzN¥N¸‹{¶_àWEb€mר«Ã\ë°|F×f€Ü­fÏåb«ýNÖHmw[656{hD;Oq4ˆ"30.l[!h %_? Z ,.8_# /›7&C:…:¦?kU<B0«9D1 *'%%D- (+>2.D+ +Oæ)CA!ù,…†777Sf}KkRk†Umˆ[n„Ruœ\u’W|¦`£[‚­m‚šu…—m… m‹¬iŒ²r‰¦rŒªu‘±v–»y“±x–º|™»”˜žƒ•©…™¯¬†›µ—œ¢š £¹’¦¾œ¬¾¦¦§¥°¼­´½···ºººžÁ‹¦Å“ªÃ™¬Á°Æ´Ð¢¶Í¡·Ò¦»Ó´ÀϱÁÔ¶ÈÛ¼ËÝÁË×ÉÍÓÎÖßÖÖÖÚÚÚÔÛä×àëæææçèéíííìîòïðòôôõñôøþþþ»€B‚ƒ„…†‡ˆ‰B@‹ŒŠ;‚=އ@8BB’ˆ•B˜š†@7ž™“ƒ¢¤¥ ƒ7&ª¥578´8©¸¸˜4“·¹ºB9>3/¾¿¥-'¾¥„+9·5Í"$<‹£˜#¥ ?‹–B—0 /:œ%#ž6*(''B;³@@°NȇÄIJ‘@ùµXð CƒR’A Ä8Å . 8E(ˆ‹~,| !ù,„"…777F]wNp•Umˆ^sŒ[sTy¢ev‰j‡¨n´uŒ¨~£q“¹{•³}š»“˜€’©ˆ™¬ƒ¼˜œ ‘¥¼œ«¼¥¥¥­­­£­¹­´¼···»»»žÁƒ Â’©ÅªÉ™­Äž²Ê¡±Â©¶Ä¥ºÒ¨¼Ò²¾Ì²ÃÖ½ÇÓ½ÉÖ½ÌÜÇÇÇÅÉÏËÐÖÎÖßÖÖÖÒÕØÛÛÜÒØàÛÞã×àëÚâíæææâåéëìììïòõõõöøúþþþ°ÀžpH,È$q×Û1•½›0÷Dîd½@š„qz-¬u:¹dhô÷BNgµdîZ•ÉÓ±ñV%kmx[+% r‚wŒZ3 &5‹Œ„! B•–n"›vanD%”v1q‚Zn9€WBY)C¿, a/"D7027#Ã= (KT;8 $B$:I44J;9h\PNFA!ù,„%…777C_MbzNo”Uz¢l{‹j˜z‹Ÿm‹­q“¹~–³}™º“˜ƒ•ª¬‚½ˆž¸–› Ÿ£Ÿ£¦¥¥¥¬´¼´µ¶¿¿¿žÁ„¡ÂªÉŸ±Ç›±É¦²À¢´É¬»Ì¦»Ò¨½Ô´¾Ê®ÁÕµÀͰÁӳĨ¼ËÝÇÇÇÍÍÍÄÍÙËÏÓÌÑÖËÔÞÖÖÖÓÕÚÛÛÛÅÒàÏ×ã×áëÙáìãääëëëìïòôôôöøúþþþ®ÀpH, s»ÒX´ oKæî…Ù¦/Ö¨ÔŠy½¹Øp]12h1÷“wI“©éP!¶û •eBhz„|3 "4ƒ…o GmŽ„W“I•– !5oDƒ-¤6xzW oKaBV C¾)d. 'D6/160Â; 8kPJZB%0RO**7åI766PìGQCA!ù,„&…777B_~Np•Zsgu†z†“m‹­{¦r”ºÀ“˜„»™¢‘¥¼¥¥¥¨¨¨­´¼···¸¹»žÁ…¢ÃŠ¤Â—­ÇªÉ™­Äš¯È£´È­¸Ä¥»Ò¨½Ô³¿Í»¾Â¯Â×´ÀβÁÒµÇÙ¼ËÜÇÇÇÍÍÍÇÑÚÌÐÖÖÖÖÓÖÛÛÛÛÆÔâÐ×àÔÝéÚâíââãæçéëëëîñôõõõöøúýýý±À›pH,ÞjG¤q¨2 U*Vê#J±®¬ë¸ÍJ”0¥4ÔÞÝ ƒªP`¶RMuFßPÈ¥ƒ¡Ìëv35/ Šv1 Gt‹Š] ‘‰”v{›œ]#~“hvD2r“)'3’\7 vHf7\ #Bf&  h. 4C1Q11Æ7+D5‚5s[7,1KB3''·éáÚ‚éeJCA!ù,ƒ'…777Tf}Nh…`x“a|šY€«k„£eгjŒ´s•»}™º–›Ÿ€˜µƒº›Ÿ¤¥¥¥©©©£­¹···¸¸¸žÁ†¢ÄŠ¦ÇªÉ‘¦À’©ÃªÉ˜¬Ãž´Î©¹Ì ¶Ð¥ºÒ¨¼Ò±¾Í´ÀγÁÐ°ÃØ·ÉܾÍÞÅÅÅÌÌÌÌÐÖÖÖÖÛÛÛÅÓâÒÜç×àìÚâìãããåèíëëëêïôõõõõ÷ùöøúýýþÈ@œpH,âXÈ$R%©”¸ZTŠkU®•1&œÕ\•‹©d©Àn§ ÀÍB•–Ð ÚTÔ8@›´€ _ !5+yz804Q†“m…‡”8– ƒ“§m uw’§Ÿ6i¯°ˆB¦zˆD»‘y, ¼†m)ˆ 3¼k8l"2Cx((,z3×[+,11(Ý8\D5^5…ÙïFD3)(¤`×/Ê x^ Ú£B$!ù,|)…777]„°e‹´m¸t–»w˜½y™½~À¥¥¥ªªª···¸¸¸žÁ…¡Ã‰¥ÆŽ©È“¬Êš²ÎžµÐ ¶Ð£¹Ñ¨½Ô°ÃضÈÛ¾ÍÞÅÅÅÌÌÌÖÖÖÛÛÛÄÓâÕßê×àìÚâíßçðãããëëëìðõôôôñôøöøúþþþÿ@•På…‡Ò¡9B’Á<¢”±Å8>H‡E²…ª.XaÈQp¨NïŽ9)™&쇊$ìÀ¡'E*%F(ƒ‰*‹GJc'ršŒŽ*)¥™§›ŽBdµ§·©B¬²q¶Â¸*ž ¢ÌÂΩ&(Ö×Ã'‡&BÁš¨F%fÁ  ðPµ‹ø¨6t ¡Ê& ¨¨· §xE,Øàa¦üÌìéàa‰ ìѸ®‘ŽB<ð!9¤H  pÈȲF$²|²® ” !ù ,|-„777\„°w—¼¥¥¥ªªª···¸¸¸‚ŸÂŠ¥ÆªÉ˜±Í¢¸Ñ·ÉÜÅÅÅÌÌÌÖÖÖÛÛÛÃÒáãããëëëïò÷ôôôðóøýýý`&fÒhfS’]ktšKF‰ûbÊUYe›Ž.àùN ÁÅ(ö~†’Ù4þ’KbÓy̳Ûê3cÉQÃÖ Ù§©Ò"$q¤pˆÐ³<{N,Cy]CEt#Œ2&—KK%$3/%˜'%—]²#P!!ù ,z.„777¤¤¤©©©···¹¹¹˜±Í¢¸Ñ·ÉÜÅÅÅÌÌÌÕÕÕÛÛÛãããëëëôôôðóøþþþˆ`$ŽÌhŽOô¤å)BQ#:Oë"uDÎ⊇`·H¹ `È3š‚ÊåŽvÂE¥M$Yz§NÕõ›q½h°9`šën€Ñ(„\¬‹Ü™ F9:Tf% C{# ˆm1'–+-›?#  —?zœ¨%+.!!ù,y*ƒ777¥¥¥ªªªµµµ¸¸¸ÅÅÅÌÌÌÖÖÖÛÛÛãããëëëôôôþþþ†°19[j8c…×¼Æ\AãáØå‚„â ° RiŒ<·w¼Î4Näer?`°‚TM“&‹¦YHdD08+²ä¥Š(H0hl ¡äB0ÚQ  n G 9€0 | rŠœ(Ÿ¢ ¤¡¢¨!ù,w'ƒ777ŸŸŸ¥¥¥¨¨¨···ÄÄÄÌÌÌÖÖÖÛÛÛãããëëëôôôþþþˆ°19›M67d,BI(Ž 4K…iœi³j Ò/Z²’ç «vû• ñ‡ƒ%{E¦Séc6u–å+§Yd}D@0 /ôtä Ee×cÂ"–Å  / j c C) 5+ < †—…‹|—T£—3¥§¨2<!ù,w&ƒ777ŸŸŸ¥¥¥¨¨¨···¿¿¿ÄÄÄÌÌÌÕÕÕÛÛÛãããëëëôôôþþþzÐ59U6/˪ÃYb8“$Jª* ”Ý—I‰¼NZM}ãŒZ¦gû•âï«(—ÀÉÚ|p³Ž/ ¸ƒBBKr ¸CbÑhY€Àˆ¹ ‡ƒ‚ðj04( r<m(‡3Žˆƒ1•CB™3;!ù,w&ƒ777ŸŸŸ¥¥¥¨¨¨···ÄÄÄÌÌÌÕÕÕÛÛÛãããëëëôôôýýýw°É9½ÔVÔJ`vÒÂTc)i’Ú¬ 7 Э<å³]óÓíxˆSÌx¬)ÇfÇŒ:¡4Ť $‚aP@p¬Ã€g@(¾^¸dƒ!A 1 t$1&p/ %€….K!ù,w(ƒ777ŸŸŸ¥¥¥¨¨¨···ÄÄÄÌÌÌÖÖÖÛÛÛãããëëëôôôýýýw0ÉIic·¶WÛ¢5ÇtA#rÞÕéZn Ò°z¶õÇ6“ ÷k F=bqu*s«äÊr-Ñ0¸ ƒBÛH9BQ- eaí †ÆX| q 4"U€‡-!~ŽˆƒL•4A!ù,w)ƒ777ŸŸŸ¥¥¥¨¨¨···ÄÄÄÌÌÌÖÖÖÛÛÛãããëëëôôôþþþz°É9½Ôb¬'kÌW]Š´ˆMZAsJ*cí# @»2ÅàºÝç[Ô/Š–M]í:«å $²à€à6Z‡Á΀P„4Â@X¼zƒ!A 1  s %!?„.€†/‘ D!ù,w,ƒ777ŸŸŸ¥¥¥¨¨¨···ÄÄÄÌÌÌÖÖÖÛÛÛãããëëëôôôþþþ|°É9½Ôb¬w¾LÄեH Ùt¢4©Ä2ðÆ3Ò6LS ¯·ÐM‚»á ¡By7’óI M©Ñi GI ‰-Á0( ¼×aÐ3 #Í€±_Á`Hl   u '#A† ‚ˆ1"F!ù,w0ƒ777ŸŸŸ¥¥¥¨¨¨´´´ÄÄÄÊÊÊÖÖÖÛÛÛãããìììôôôþþþ€°É9½Ôb¬wöW'1 CV—"-g#2VаÒk2ý" €Ï0 ƒçû-x“a¯(C´”E_îIUë´øQXÄ@¢K0 pCvü …I3 ¬„-X08   w *#,&‡5Ž •–•ƒŠ4 J!ù,w5ƒ777ŸŸŸ¥¥¥«««µµµ¸¸¸ÂÂÂÌÌÌÖÖÖÛÛÛãããìììõõõþþþƒÐÉ9½ØâíônNvœ³H è]8éJµð2 ×ä€í$#¯w Nvµž/%L*‹³¡rDNŸ°‘Õæ£0$Ö€" …Ä7”{}‡ÄB«dƒ©P$f6 } €d&,)" %0k:ŽLš "!ù,Æ­… ###+++444;;;DDDKKKTTT[[[dddlllsss{{{‚‚‚ˆˆˆ’’’›››£££«««³³³ºººÃÃÃËËËÕÕÕ×רØ×ØÜÜÜáááççèèçèëëëóóóþþþÿÀ‘pH,È$2¢l6;Î(*­ ©D‘È:åZ±Þg8 'Ëf#:M\³‡îwü=fÒÕ÷ã<]öø=!|yxƒp…†‡W‰#{fŽ‹‹K‘“’^`!~[c—˜•‰Ÿ\£U¥R§¨¡“^v‡©d«#~C´ž–²ƒ°N»J½g¸¢¬a®…¿ÀÂB"€µ¹yÇzÁ¯ÐÑÖÃMÅºÔÆD¶ËηØräåÉÕæ‚ÙVÛ×êÏB›aÒÓèÞðãéúÜ쪸»ƒ?yìÝëðà>‡ïþE èd ‚E0"‚8±áCŽùõûHQ‰Ås Š\˜2äJR/a¶½f»)½äΫ¯§üºkï¥évÙm¼Èœ°¸ïÖë/+èòšoÁaÀ·ëOŠl©Æ:|p¹ÆÞ˦Çó%Ô¾ WÛïʃìòo<±Ä^l‚šôäÈmdÇðËÓ,ë¬w¬p3Vv¢3ÆLû¬òÇ@³¼¨È[h±³DZ¼…b@.ÍóÉ$ÿûsÔ-{³ÑiˆssÓßÐã„Í8ƒ}´Ðc-sØb?ÍÎÙe¾!è=*K{-6A ^]+Þtë0Ôfßû÷ §ÖG5ˆôÛ•Ê]·ÔCzÊŽçm'ß‹›!‚”Wîæmi.Äš¡×nÿzãßNvÙ¹‡Q“(À…¡JÎ:ÈûZ†c÷ÝsC=Ú¥ëþ<*L€8p@zŠ+s<ò®ßìÑŸ»‹ÎûúìÛNñô}O2VSŽ ‚»=³«·N¾ò GþÔ×>ÒᮀÖsØõRW½ˆG‚X7¦ðÙo|ä+ßòè¾÷U¯q”^Eˆ0.L¦2— ;šÐç…gº€ÿ2ˆž)ÁP5±AË wÈÃúð‡@ ¢i„CãHÀ°Ÿ´†:|ùm|p­Tç¹,n€#c ÈA¦¯ƒ[ OS&,|û[Ññ Ð(&‡ÐUÅÜ‹ÿAB´s"ÊØ;–С14 sMÌ¢êX‡ž PÀuРª @é`ápöàÚ$8ÂøÁÏ“ŸC E9‰Df$“¦âFøl0 Ö)Bn–¢ÙÑ'Š eGIÊ0.“\̆){v‡ÉYÈ€_ €¢1h’ šdt çË_æ2‚ü"/w È¥ñŽhò+0 g^©G¶Lš•ªÔMm¶Sðì%õ: Loî1 (ÊÚ¨à£0°ÈDT€[-³ÆjöÑ g0½hÍ; ³ŠoÈ@,p `1 áà“$Q4N¸‡Kv\è;ªPwfÓ¤š +é¼Ò ÿ”¤iþ–ÃËi “(-iCO¹Rbö¢öÔ¢¬ö›13’œÇ”êq«& —Ûdh<å JzÖs§oxhÆV:¢3™SâlZ¤hbu«÷)U¯zÖ« ­x?*Œ*››õHbËJ ‘”­ìZõ(ÔªžîkråÂ]ÑDÓ)m©&º(›žJá6¤ål࣠^rBM’eÛ7›SîvW°*Ý.xµ¢…¦^P’õèÿÓKA«ÙM¨¸Ruík¿;[ÚÆ÷\¶Õîßp%Z’¶²Þ‚{¡ÚÜOÖתómkí; æ&®©œlfcC¸åeÆ…eËÓ¸.Á îlƒó›‹ùa£Ê8Si+L¤y˜¯Ãöså*Å" 'V¾>oˆqœãÂ.—ÄtXl©èÓØm…³Ëpld;ì @¨¸ã½¯r£Õ*[ù²%q°Óæ ˆ>•È·›ðQ˜7z>yYšr ‡èAK¹šÝ,•“;åã×ÃV¬3Ê,»?ÙðGÝBŸ1ôJ(É}Ýdœ¯¼hFÃ×Ѧ³gñ| Z„ÙO¶Ù˜% h> zÉ´ÀU‰ÿ®„huJYÎo†s¤±ÌcöÊJËd‚o)D¯ž(:fö´æ 0j$³9n¨¶s…l;wÕU°ÀT8œèÇFvÛt‹–·¬KY_]³’qe¿PO¨É³ Íz{l`b›Ü †ôœ«HEº‚ŠT íãu¯ÖËèMÂ¥Ec+—6cO-BÑ‹·ÕqߘÃèN7«‡mìrOáB@@Ì‚–'éØÜJ0ª¨«+àëJH 'Î#e~p’—üÜ'G¹«Q@~Œ`*xñ†§¡«ûn}ÞóeŒ|k‰6xžU½a„§\Ýö–¶BpH 3›aa …HõÚè·¦Õ¡ljÊÿ {µê`»ØÇîÃaˆg€@r„ÀœÕ<áføƒßcÃÈ–M"bsF®ò¡Ó7Õm}p´Ÿ€ÏÀä1zÜ>ø¤ç}û„Wü*äâ6¹ß¬ÝÆ^Ä\À@N9 ÑÛá6¿Ht¨ÙÇÆÚ¤–%,3ß÷Î{>õ°UºãLéJ$96NŽ RÑôz„˜¬Û{?Ñ@‘ŽqIŸúùÌoþÂkÛ{t(ëÄÂçzñkÝOtÊ£sÖ1‘Ámz¸}÷è—þ"`ía0f6Œ¨éën[˲Æét ‹£oþ¿«_÷ŸzÓ7iowté²iEa$,¼†dF¥ižöqÿøE§yäW~+wXÕgÔ1—V^'Å îÅf*¤õs'xÐç|üg€ø‚31@Æn\J,)Ô%‚5I§aï…?×m’{u{ýçK(€5ø„ëwƒQYgbaÉ—&~]§t]¾E"¾¦hr’…Y.Öh0…héçPRØ¢µqàpE¶_x€En°d_•%‡cc›xm¨iÀ~L²‚úWq–5ß7fAˆh€P&`2râ jB§VôG¸—{kØ„N˜†t`ˆ‚rW›ÀœV_‡ã…ºeZă¶Ð‡‚€B¨†Ÿ(ƒfˆ†.8bèÿrWZgÐ9õqðGS^G$` pB§ŒÝIÅ$´xQ‚Wo¶€T%9‘Tˆƒh‰UK†¦*öUòWm|"‰l¶tëXh€8,–lj ØjHõ(O~‘A3Wݘqòh%§T*–T ¨€j“Š£fjSGjˆO븋1¸çw‹@“‰ŒGÕØ ]¨)^WŽ•„Wo{òíõRÓHˆ1©pB`œ‘¤è‘¶’—u®W޳¡Å’+)M-ùY3 bóhté€<`qÜØ‹¡U"jbC¿·u±1’Ù—C¯è…k†;ò…öà’ÿi¸eªvppyIT•Ø”y(ŒŽu§}|ùUK%””2DQ ‡vIIé‰j¹–~ÃmYÕ@w|SP)”ÛV™:„ŒÜgfëÅŒKY{lÉ„¸˜‹J÷ä“IsJ8|(£Æ—À·i\™ŽÊç'ÀŠ©‹·)𹩛IçàÀ9i(f$¥Æ[\G¥–æƒSÒ ~Å”÷¨yÕé™HÉ 0 @œŽ9¦6 ŽØ_¸Âbñaž³ö(9CVÓ©˜uy4È›)ŸEðà "`ßI—©yp«©jö~Ä)¶ÒQaµqIÅQ¸R›†ž Y˜ÿšO °D lÌ<Ãsz4™Rª™öÑXòÇ'DâqYHVw=òƒ§š»9£4š˜óIŸØr0îÐnï¦ÛÓ=ßÓ‘„x“¨{b>Ãw¢Ù–bòWÛ†m£Á?B‡–*¡ðY—:sT)qõs?ùSœ!z’7&B%…m#¸q i 8‘öy†¸i£p§O(D>û8-÷rÌ6AD:¦5ÊR/ |J6™~B‚¶¤mÓÅkŠj„^؃ëe¥œ—–ʶšº© "MgÛhRdWª¦quÍ ”LZ’+†u_÷ªejª²:«´Jvf'i‡DJÄDÿ:«c 7|Y·-„vkôð72–ÒI”sú‘‰ñI©I€§y {Ú…‡GFf¢J¹„!u¤EŠ×·¤\÷ˆú·,=2dû5²‰dÙ‰Wz˜i)¯ój™º©šÚ©E z @H†ôˆ¡µ6¢zP°/JŽ5åbç—´ImŒiK:—‹Œè¬2:¨öj›û¬BBKžV™‡³Ù Ë§h?‚Öe©jkk¶QU/:Iexe«˜±ö(­7k!O¡ ­–Eøžp·• ؤ³ŠI†hŸ± Ç°k‚³ê³3œ ¡=ûŸ‰щ˳“)Ñ $ìI"ÿA(~áV‹Ûh±˜!+¨t §½à °§­žE›ôwU¥‚"§›dgë°€ò‡VvœXÚwvŠ£6µc€§0ÅÑŸf ¦¬‚°ùyY'¤Q¨¬W™&fµ8g÷´½ª±q+§Ò&@ È£¡üø¶w9â Š¨u´Îé“ü]g’nÖìd‰w±­Û¬‘kPëŠèŸ:ɱ0x+¹âUø¼Ó$#©b]–]ÓV¼ú&Í›¥Ñ‹¼êw ÐY[¾û‚˜»Zç gJAšó‹Z¬€€—[f§ ­Zºº}Ôê.‡¡„”¹,Jó+ÿZw¿Š˜¿Øw¢ñgk¡’¬k±æ»¼Ž;¾Dà CÐTÉÀ¶k.H½o蓜viûV`Up†‹8V‚»|£+½ÊëÃ?,ƒ PB€#àï[¤ÁQë…>Kê æ*SÃ`É,á†&Ó‘ ýëf Ä]ÜÁ^,Š2Øù)`€¹µ+µ%&†¾X¢–V89§+–©ªÓ•¤"~±\ÿ¸"DåÁ<ÜÃñ[§ < ÊT…—Äp›¼üà FË‚KÞ]hZ^IZNVÃÌÐU«5†K;ƒ,· œY¤™AhœÆZû¸÷¶Ax„´À  «³QºR¶á€Šÿ*èÊz¯õ±Åa¹ÂõÆ€ÌÊ€ Cö½J<8·ÃmLÛ6þµ¿©úšfÀŒV„ˆŒËÊÅ ÎõI¯ ¹1ª?«\ºÇßà_{<9+¨d@©Éw¤sê¨ÃõÍ£ìºÅLÎXÅ笹3²»ìÆÆŸ\ºh‹h&xºÒX“G™þ¦ }ìV¼ZÌò·ÌÏý\Ê(Ð*¬Æc•CÉIJX¥U5^‰ª¥UÄVaÒ+&9âþŠTËðp­i—v[z$ÐõúÌ L)ŠÝãmpu­.Ž¢ónÜMÙ®ýÔˆaxT¾œ³”ÞÕþ¤ÈÈ#½Àìþ·Îá¾ZK½WÏ­¬Ü· ] –­w¢aöJ~QÎØãþïi0 `zŒü­`ìŽÏNô«6²§Ð!˜C Ô?župýŒìÑ¿¾®Ü‚1^â{>£W‹<ðI îXEÒ^ðÀNA® ?jµpžÖ\imCÂîøäÔÝ^Ó×îÌKîðÛ ô›Á龞mðÛ=g.<%­ŽcÙí r+®xïiíÊdKM(ºTírçÌÝ>/“l€§Óÿ©¼·ÂÜ^•(}O¬ŒìIpW-j³±½ÔfÁàž²n“s"në]ê¾þñI÷”SÑ °Ù„ Ä.Öd×÷T’ üªjw±l i19ß7x¸Á_öÏSÈÕJ½Þ^@¸Šv ¢ÿ€v…Ô!^„ÅMQ o”߆]éBá$ŸÕ½~ô2nêL>@¾O Î&ßY}±´øÊ)ö€E>Õ«ó€ü&k¦¦9µën•‚• ðZ«Á/üy]üGü²Óüw|’K¶:P¬¢PàÉ‘ŠZØ6nX`ý˜¿ûJþë<öÕdOÜÕ¦jXú±¯,¬aGäñˆFÎÇ3 GÉh´hÿ‘ä"Å25”&E.;6¿¥9ËŠPC–y»¬i‘ ße‰‹çéëu‰ƒ‡ëãåïýy:KL–:]ÂL2 Ó$oÙ²:Ó$i>*_]]Ñ‚`=0‚ò`A65Û_i™x@Ø) ŠhàK83 xcœ·ä+•â´³åNüd4!;{ÂßÔàÚ°48ä$ƒË. Ôám{5 @ p1Ô(ˆÂ Ì yÂk_k4™ìl h1é$/!®ñ·ˆH{ÊVÀ´#qÆVè©ß†Ã$‹hši§;Á ‚¿ÿ^OðÁ /ÜðÃO\ñÅoœð™‰-êˆ\-¡‡örDZiŽóÏA]ôÑIçœ H]õšî¢€qÕ™êªÛÆ=•ù¨ìÜßá*…¢ÿ¨MVÆy `Žà›zî#U}þ¹z8"0Z{Œ¹ÈÀ¿àÕˆ5êÛé˜þ Ûš(_ç\/9:25KŒ#ƒ¥'‚U f7Ýíd×+ ¸‘@x „F`ÕÎv¹ á¶ŠÈm¢"*r8±;÷eƒlÑs~®P…;¸)#yRÚ.ذ ÅMz§k@T—ºÖ }_± 3ÄN<@/KGýì"M´ç9Ù¸ˆ6 Ãõé$ {¾%™0}=<Ä#ŒT@{Ó8C”éJŸ*Íht¢…$ÅIR޵Ò6,pQDHÑ•Ùе+€hÿ õ"Q%/D&£=ÖxD„ÀÆHÚ«ŠShcg:G– ! u¬B)¬Õ/1‘‚ëËH’òGÒ åa"%‰ÁDz‘’z°Àp™ËLàŒ²œ% !v“‚ðgfÇ9¢DV¶D ñrÒdM¢…°Ð‡ Ѓ4r>ªÊz2T£7ß@›”‘{<œd-}9‡zñ!ïÃc¦ · ´‘¢?'RS)«À¶ -0Og2˜Fâ4"~’Á©ä0݆ÐÒ6(pœ^‚3ñÊ9Š3?|ÏwÌ9ÝØ9š™! ÃkƒýREJ4A€›Q+$©Ð.ÒRXƒa# L´›ÿý¥!,4 ¶ ÏúÐ0§‰Î´lsÁ×ä²0É¥¥í˜A~D–(è… vŠ$ðˆÎST”¬eýi <@ÀŒ”éLßj†¬²c?P›Ž€ÌñÉg½…MuÄ‚FJºRƒŠ#êÒa”B¶ÅNÜŒž‚¸öÔòŸLg #‰µ"¨@Uç µ³^6¡„˜k…”U»^䓊ûŠG¯Öd=ìfÜ¢³3ÔO ÚDeIýeÞ2ёŠ]8Úž.×¢³AÌCÁçYž~Ó§Ú"DP¯™¦ýp #p©g_«Ú¦ÂvxN€aœ¤¨ŸRh•2Ôy¦ b¡R¢é¶… fÿ\cºH4d¯Œm5'~¿¨ßiR"J‡"šÔb}T©¤ß|e&²vÌ$eêè³6ÒÂ=2E~@4“r©Ë\³Òˑ֘/Dk]Ò.tFÉ FêC  ?«ç26r<>¹«cÑ`§e¡h‹†"ôL(‡OvWÅ"1fû¢‡CÀ5åQAë(aŠ"lШ¬ŒèpÍË–ú¦T(ßWg/°8q~WÌâæFÙS¾o•!µ£K€v™”’\æ+äþ´54M*–.¸±9*ÅȇU\SV¨’x3ˆCSYÀ¥ÝôììëêòzØtà2 áR"®žÁ"aËòžfe-©P4®µùláróºépv¯…é_¿«Óy7\{qcèµÂNœüÍþ·jl ‡·Š8г ±©”É“þ¨Ë„$ªžÝ]8:Ç͆`ËYÓÅ7<6qǯ™]…wa§5ëîªðÞB±"R¾ñGXr»Qó>ÃF–5Y'[–ÙüƒsÂ×°ð‚úå+¿CŠ"¯‚Юj³a|EW{¨Ú iiúÃîù¾CÌ×fªÀüJóšG3Š»ö Ì÷[îƒ|ê¨â¼ñ)TØå¬î꿬^Éÿ*2…e•€i#W­G–uÝý¸UÃñö§ýêµõÝ©‡urŸÓÓg¸ô¾ÞɬÉVfWDøÞÊXd¦kú'Ö@§3[!²>¹Àu‹”nƒ§»à¡õR‰›å´À¹³Îlj¿jÙé@ß&IM¾v5¹ (•©kÒOßI—-{DÞzª£xû”öVW0tl§ç#¼¹W<ÖÂ#âx™x¦´pÂ:]ãÕÄ'i‹‡á­4ä±4$ø£õyœgù«ýf’‹ŸßÇd¸œôõ¨À€)ÐeÃúð û®_O}Ôm€üï(â-†ËG@%_Ž)Xh YÍÒNÿj>F ·L‘ Žïò *Àð©Õ¦@æ@Íðfî7d/¬èkŽ ðš^Œo›à ÙÒ`ÀkÐBáÔˆ/ÏÔŒ^¦ÿ™” øˆ.ó/7£É(jðpë.‹¥þêî¦GH­åÐ&UËb0?BÁYÆN(©Ö:/ü¶!DP¢Öp,Lû ZP2 = o'pJ'q gs6‡ÇGs Et$Ñqš‰„,ÅsGs\ sH'g=*M1 7 ‘ q€d0ø0íÉžŽçv¹!ôî·’/¿^Ï«ò¬tü”ÌQŽjÉÿoùèê #¢mÎTQ €À¸ëd‘؉ƒzqgVéÍzlqÍä ²$áL4Ä@È8¤L*:¬ÏÆþôÑ‘®JÐ2®‘Lšš¬D€&Àc(õfQþøìù–þ1K€`'B¤#â$r½Æ¡Ë/RÚˆäØáà ÿºmÞ<Òûn¦!O!λñθ1&oŽScàšÑDœç!Î$ÕLôÄAow‹£mºlçÀŠïrõ °&m²áŒ’&eµÚE²¨#+"’hxÈ.»’@± ­ªP.$®L )Œñ”"_Rõžò*§ÿ’*’ÐÐBâq+qfð­ ÂrÛÆr.Ë,/-Ò’ëÖòÏÚ2ßò¡²‚ºpõì²2-³õnrs’÷k¡©¢®3k4 ñÄ^ïÎ2¥®s‘)CÓ*#S2¥.ò21Ó6+ãyž±ò z.aƒ¾j&AŸ€ƒÝRCjÇ&2‡ÆUJŸð6¡&i³6iñálÓ:­êJÉÄþEWÚ ŦÞÚ)éñÈ,¡Ñ¶JžHR¸ö±:9(+ —q!§S.ÛÓ%µS:¥33†HóDÏet&un¼B '{ Ž‘è¨¡÷pNH°&?ƒð1£éD¦ cs¥Î>ùS?÷ÿÓ:ÁªNÞ0ÈÜ¢…Î2ì¢n¶òTbójÙ¢°:Ô…náóÏ0??樓9³ÓïrGa“7¤±„DƒÂDEo-!«¨ JäEd4ÙŠ2šlÔG÷/G³ôG®G½pCoôð:Ô:Ý(etqà4öüé´,5‚gA³-Ù>¥+åâJUóóœ±.OÊçtH#SL)L±óL…ôP‰QÈq•À³ûjÆÝzŒ"‚ƒ+=Ùsp0@ßóþÁ1ÊÑJ ÉCÃ?¿ô:ÍÔT9(E"Uî•Ô!ÇJrìêGŸ\u>Ê.•^•%“ðäLÉ\ƒ5˜'QÿPç’.Ë´«rUu0”L,tvŽM€ ©µ”U“U™ÑP¡5ZuHÅÍôà _ë1ßÍжuÃŒÄ[7MY•\éÕƒÔ\UµFsÔõЬ¥]ýq±âµ¾ê“KãòúÆôYu_[Y§é¨P%R:°5%µé`ƒ_±Î^Sµ_õUdG¶\#9IqÕ¬@mÀåJ,eìX=–GÁuO¶dMv\#Öfåñ–óìzÇ)I,Tõ™Ö/JUbé dÃU\–dgòdùÛ…CWè/Í\ J²ÖOó5Ê Vgw¶j}ÖjÕÖL?Lk›áâ–öa¡ÿ X m§õʶïÎÖmo¶o×önÖùˆAí+ÓæxC3tWrVo¥–gÇ–o¯6›Â¶Y÷©Ž/Ó¾652·a!Ö¢/ n%W4”Y-×n!×iQWVaï ×âÖZcõšXF —Sq£ìÿZP]ØÅ]¢’LOWrÿpU—o›Vlõ Ðˆ!Ÿif–ÿ¢¶gû`[Ðc@Ænòö`gÓs?—xývxWw ‚3×)/´q¯ öfžæwM×u¿×{ã7u'7r‘—XH‹ÏK£×~­×× ñO±€ ø€8xØrH±3çø×ªQvhÇ}÷VxÓV~ëÿw~ÃWƒ9¸|k‚|…NÏ—a}¤ǧ|J7ƒï·ƒa8†7˜~e8„Cr7M*y¡×l7yùA‚ ”²W»—†Á„x†ívôØav›¡XÑw%w·—{©ö…k؈'ÔŠ¯8xAbˆs–Š«xY‹8‰¸È µ‹á÷TQ˜Œ{‰Íøƒ½‹ÓÝøé¸^§8Œ‰çø¹ù|/ýwÇ ŒÛ8d Ù•Žå˜‘é´xç‘'ó^Ø‘ó8ޙӴ&ù}‰Á’Ç“Y“9¥—“7™•S¹H™’U¹xQ’]ù•MÙ†u¹“Gy¹y–=˜—ïx•oÿÙ“Ùø’sù˜…y˜[¹–m™˜—™™‹ya•Y‘i—§š›9‹¥›³9šû"–E¹šÃYœŸ9Õµœ½yœ}ùšyØÙ¹ží¹›Oy‘ùã¹”ÝùõŸóùžÍùœúiûY– Ú™ÛyžÕxŸš ·ù‹ºœ': :“1ú¢%š£!Z˜º£ÿ9¢šš=ú¤¿Y¤“ÙŸKz—¹Y¥7ú¥az¦Y Ú­\ú¦M:£5š¤Ú˜c:¥e:§ÿk§ƒÚ }º§‰º©š§kÚ¦“gCzªq¨­ú§?:ª±:”]¸Èù«·z¥¡¥iڬ˚¬³š©ç`ú úÿ·ª÷¡‹:§ÅX¡Ÿz­Ù:­Mk 0®åY¯ÑZ°{®…z¨Ï±[ª½ìq!¬ËX± [­ïÚ¢Û¨+;w@ ˉ ›žÇZ²'›±½:²Û°ƒ™‘pøµa;¶e{¶i»¶cëX1 ^ƒM›´+Z¬ëº«»·¥ì³±…‰[¸å:³A;´}›±î  !‡»¹—𫳡»ª­PŠ—{»›¹­;¯Q;µÉû¨ñš¼Å›®¯[­Ë{¤³Û®°‘ú½¯:¾•;°í[«ƒ¿û–«›½Ï{½Í[½ü°ïá³ü²±z¿÷z´Ÿ[¿ üc¼ÀùZ´'\© ÿ¼ç[Á<¿Ã»Â5œÁA¼ÃE¾ÿ»½1¼üÂ#|¾Sﻹ›Å?Ü¿SœÄoÇUœ¢e<Ä9ܲu|ÃgÆe3½ƒüÈ]\¾{©K{¼sÁÃ-Â<ÃïÛÆ…ÜljÊG<É­üÊœËs\ÊK|qµÅw\»‡<Íë›ÊùyÉ¿ÜÁÎ [Î)›Æ£\§ßœÎWüÇ;Ìõü´Ùü[ÝÈżËÁüÌ•\£XÊN¼Ê}ÌûüÑý¼É[|ºœÉ ]Ò'½Ñù[Ó=ÓñœÐ3ÝËß<ÐãÜÔ±ÛÏÑ[Ôÿ<ѱ|Íù<ÒA}ÕeÔQ½°o½Î½Öß`t­¨ÌÔE=×÷ÿ\Ñå x·]ûÒ]Øy½Õ§<Ö“[Õ¡ïcD dx›ÙGÝÖí|Ë·Ûw}Úé €¡†¾óœØÑüÕ™œÓã| ¸µ1Þå}Þé½ÞíýÞñ=ßõ}ßù½ßýýß>à~à ¾à þà>x æ,øÚ)(oó6ÆÁšÇœâ+ž+>ã5þâan…ÍÇÜÜâ{yã9~âI~äM>åU刅XäY>æCþäwâ1~ågçkžÈ‹<çKþçeÞç…~çažèuÞè~q!è–žéA¢éçê£þ驾êëAê{ë³Þêy¾ë½þëÁ>ìÅ~ìɾìÍþìÑ>íÕ~íOŽÿ`á á–`á%@ÀhÑ@¸çÿ Üã^ GBÀíáž–F´bêþî á °` Ð×ûÀfÇ HW³ Gú`º¹ ï-¡  Äåò)a._ÂvF€ó=ÿ%ÄÅ€ò]¿ôûÀ0jf¥VDW÷ýžªoõ»ÀPfÿ`,`]*€2@>þº @c<`Œ"€\oŒ&@F@ù™ß $¦¿ú¯¿ 0¢  À ’Ýwí@`\F ]p"d’Ê%3‰i<Ê 3b 2…I³» =$¢¡)T0‚ÿ‹ãà}$‡DÒ‘È”‡Å#¼kpd<¨±¹aiqõ1Ed„ E`L¶½1:$u0ŒTº)ŠŽŽ†ˆŒ@4viÐ]E(PŒx°z90hJxŽhÜ2A8xtd˜¢ª/i ˆˆ tÈÒÚ.ƒŒihÂ6<Œ !±B(¼*XyX $%XÜZ<HhX HU(Ü^y „è ÁC·o‘÷jA„¨cçŽT‚.ß>V *| p&Ƀzù‰žN"\&³ÏÈÌ\R!@{Iæ´` „¦cF(˜(³€Ô¼™s„Üøté˜ ¯$8ÿ˜FØ»WIB$HÀ+I Ëð}kdÙ ¡n­ àj4±Ȳ²ðÊ.¬ÑvÙ ~1œª{—•”``Á/à.•/?p`Á穦›Dí5ÓCî XQq&´ ¢åE{)Î! $ó ™/ÀN2›«Í¯üÎ lV‚"7˜ nƒT¨…ÊÕ²¼ø4«Ý@tR‚“ Ö»vR"pë7Cdò·*  !,0À,н €üià˜žá!€ÊÞÌ %1Mä$‚äÀ@btSA¾¨a!†2Ñç!ˆ3™·Í80ƨ”ÿ•#d]°Î\ð–ã( €=ÑŒ@NÁäõ¡ééXa0ïWD4d‘¬$ `Uj˜¢“·P@JÐ9Äci®ùɈUU¥œš–"€ƒf`rÚ–´“-ßç' 3IJ]¡‡&JãQ-ý ðdT%0(Є¶Ü-p)aÎóiVÞ§ P0€mjªtì ˜¬:àª(!žŒZê¬HP++ ÄçÀ0¨»öúµƒ¾(\³¾ò9•4ð%¦° 00À¡i×%‘Az1Éô„Hœ›®i˜T'¼òÊdA!˜ÿ›ÝìIJ 9Ô®[¤—â2ì^ª@|åÁèN´ð òp"¨²ê;`1)!´ ;"óÈq0ÄÜAÌkÒüÎí*ÑAÈ —[´ÑG#´ÒK3Ý´ÓOCµÔSS]µÕWcµÖ[sݵ×_ƒ¶Øc“]¶Ùg£¶Úk³Ý¶Ûo÷ÜsÓ]·Ýwã}ô X,Á*y¸àƒG(AFF¸â‹3Þ¸á±)Yi¹5Â8R€p | ç#<Á Ì3¹Z65ÐAËZÞÐ ,0‹ Ü„oã·ãž;)†cÔ§8P˜aÞ@$€ï„üTa¸†ÿ¼Ã6X"€„…î磟þ†`•ñÐçK… H•P¹h°½†ƒdU@ü pN@¡8â3L.ˆ”H}œàí‡8D)§@G(P< ¨|a[Ìg8Âô"r"@€!|#@;ÄGÁâpÔ 4* gTç ˜€^ƃà€føÐ*©áh8‚ç‰ ã;\»èE¸íP…TpŸ[‚H†Oañ0`¸½À c„ž[4 n™À^ WÂìæ‹‚dÙ2yTà(ðbÄ"00, ÿHXP¢5É%‹.pÈ$Œv+û$!KiÊÁ®=§\%+)XØ®•²œ%-kiË[â2—ºÜ%/{éË_3˜Â&1‹iÌc"3™Ê\&3›éÌgB3šÒœ&5«iÍkb3›ÚÜ&7»éÍo‚3œâ'9ËiÎs¢3ê\';ÛéÎwÂ3žòœ':E•{ºŒžú”Ûyf˜Á}ôm/ìÆ…”ЃªMÛ@(CÙfG\èm(EÃFª¦¢õš4àQªr£"µZ&Ðíåê)K©&TÀŸÿl)M¡Ö xÀØé:SÓŸ6M-(P‹Ê´‹ÊôEF]ÿj¹°PG­a*Uùô'%´Ä‰«*Wgb¸@@€@@üºjÖ`ˆà3,@ P¹³Â•¸ÀÁ–pà5¯zÝ+_ûê׿6°‚,a kØÃ"6±Š],cëØÇB6²‹]©Ò–—`¶>qÝì%`*ÓŒr6´LނӒL´ª}a>UëÚ%tà_ ³y @³FH› u-Ò%ˆåL  Ô‘"u„ ½fLe;·Bi«]ˆ­š”…ý•RS1@YYê €¼uÒf³²hÂXPÀš2вTÀðuÀëH‡á1c¥ê@eâ¨.(ÄÆ§ÁÿÀ€ØxbHFæ DÀ-±pÀÒË×–¡@—(¹‰,!ÑÂ"_äžHÅœ"jM ‰•` îï; ì£ 91‡õŠ—Ã@­81L'^è>MT…)V¢¨ý™€ÔR3¶SaÆ€l?÷9\€ƒŸõ±Iˆ€Â™JYТœ @ÄVBól9g‘~Yƒö ¬O>€BS«™±ùa%L¯‡C²œbóÅr‚‚Ê\æ%@ž¤!ý³d锾^ð h"",€ŸéÉ”œì)Ü4Ì,C¤lÁËz¤Ê£¥ÿi-#z×m¾´u¹ØdíCPÁÐpyœ±­¯0àié‡0 ô„‹ U@w›jl^@„#\Sy‰\ŒB¯×T)J] =Ã8ƒØgŽ @$À «að±½ýáÚ_¹cù*=@¸ú„B}H.lRŒ©;Ù$n1 üÏcÐ8*&À%*µy Ø×„ 0^ÐA 8ë¸IúfqPº$ÚSÂ$%@sاåDa°0î×¾ö¾k¥,ÐEKÚÞ=éJ_:Ó›îô§C=êRŸ:Õ«nõ«c=ëZß:×»îõ¯ƒ=ìb;ÙËnö³£=íj_;ÛÛîö·Ã=îrŸ;Ýën÷»Eã=ïzß;ßûî÷¿>ð‚<á oøÃ#>ñŠ_<ãïøÇC>ò’Ÿ<å+oùËc>óšß<ç;ïùσ>ô¢=éKoúÓÓ2!ù,z/<ƒ777¥¥¥ªªª···¹¹¹ÅÅÅÌÌÌÖÕÖÜÜÜáááèçèëëëóóóþþþÿðÉ©¦½8çª-ï`øIË‚azMyªðj¹olÎÒlö=›µžŠEóa¨VðBiœÌe5¦¨U Öšå]»ÏbL.›Ïè´Ú‰Í•t½6Eãn´އ}'¢ãµ-y9woƒa9ƒT‚9 :wM~Œ~%‘މ‹€ ‘E^ŸX£¤§’”S–¡ c¯ †%ˆª ­¦v¤ zv_ЬT @Î@HµÂ ĸ |ÓË—Öd¯ÛCÔ®eÒÜ«ÞoBTÁ[UîÌ`¿ïôR÷ø\ÀóüsºÙ(g ?'¾ âCQ$ Àj$àÈx±P½…ú$>"”€"Ľß&I *ÐS² Š*XÙ e<1 <0óA©5@ƒ’yÔ‘gÏšYµ)j”¦Í¼>î!ºÓèѧê”À%’ǪVö(¢IB‹š|0µzÕªQ1 ÐÓ‚¸!AÂÕ+wgt P@› 7šöžDuåàžža]ö*Ú$p1% ð °ÉY·>;“¹ ÌdÌäl+gÏf4u`ÁÎ@Fq4ÆÔV5IšÒr®‡kSÚܰу €wÇŽú‰Ö‹I[A‡È¶kz© ´Ãˆí]A!ù,z)5ƒ777¥¥¥ªªª···¸¸¸ÆÆÆÌÌÌÖÖÖÜÜÜäääëëëóóóþþþÿ°É¹¦•LiUûxeÜ¢y›blŒe¶(º­,½˜"k´bË­‰Çº(DB7T-Gär笹Kl‚Úû-”‹’û”(ºÆ™l¥€Å¶ïŠÊjí´Ù½4L'w~~|eƒ93†‡…m‡ˆDŽŒsŽU”•“xƒš•–}ž¡) ™¤Šœ§‘‹ª˜‡&±²±z¶[¢¡ >žƒ¾ƒ[›ŽÃi ÆÂ[˸[Ïʾ¸qÕО٠ÛÜ×ÇÚáÖÑßáÛè‡êëâÆïðíÒåàÕÜ.~ê @° ßž äfͦi hp@y͈•`@5"- Sƒ"5î0(û DÂf~ Pà@H„œã'éG!ù,{.Jƒ777¥¥¥ªªª···¸¸¸ÆÆÆÌÌÌÖÖÖÜÜÜãããèçèëëëïïðóóóþþþÿðI™¦½8çzÝåZ(N ¤(ߨ†å‰Zå*?í Ï8=9 ƒÅ9Q픕§TQC*—B&t$NYÒ«¦úÔv·ÞÍ&A.›Ïè´z}ñix.÷Œë¨óìøœTxørXp'.‡ ~<}.‚‡†‡'‰‹z =}Qƒ“•–p'›Hb .”•¥ ›I©‘„ ®ˆš±´œž¸;¡¢‰d¿ Ž–Ÿ’­¢~ ³|± €YÏ…Ñ/ ß8Uº¼ÓË ±Ú¹Æ¯ e¿ìTåݾf6Föï½Ø.‚ó÷HË@hÇ öCøJ!+n ¯„ØPâBŠÿ¦LÜ…Ïb‡{ÿ5^°D°™GœJbɨG&†¡€hôcÁ“¾ü€¬ÈÒI˜7{¶ÜsI•]’*]jHÝš§P‰Í¡j£9“8˜é@ÅG*V{N¨›€H¥*µrr@ “וhm áVxÎÆ…d ¥zEtmZ+ì 8ɾu’gxÊžohë±›Õå&Y=ênÅð¢íŒ[df‰A®BlzC°}0 AÛ¾7UpÚó S²69ÖØ‚h£–¡Žš&Y¿cwø\¸íßææîͼyíÔ[\cG®ºõáRê ³²xóà×µí^FÝüyçØw´ Ó½p ôP̈¾ò\Ì@ƒ p€¸6Òqß|cÃnív pð‡JfÉ,ã@½q À8@W d Mþ'ß$•À´u s‘±ZŠ$h-„€/°µr§%™[uÌBÁ>dá–[|¬ÀÀp`%¦™dôñ\–1Cö@é“ ¬wH!ù,{*$A„777“““¥¥¥¨¨¨···¹¹¹ÆÆÆÌÌÌÖÖÖÜÜÜäääèçèëëëïïðòòòþþþÿ`CžPô0ŽÃ˜QëDtm—/ƒä¼ù¤"Vh£á^»Þ ò32,ˆ‹Q¬uÊå*õ‚Ö\Ä/©”. èë «^ÉCÇ⬎N«Îœg~Χ9abzY&r-g 1-xVc…RT ’ƒH‡r 3—˜XYfPŸ {ss–¦A„¢19®§´o¶·n±»E¹¾¿Ž°eõÂÇÁÆÇy™ÉÃËCÍΡÌÍÒ|Ô¯Ï×ʽÞÑàÓÔÙÛ:êëìê,«ðñòsæKØÜÖ什õm·8`ÆiÛµ¦*{-õd áÂ_WBì"‚„ #ÊµŠ± ‹" :Vùh#¤H$kƘ4/GB>G.˜˜8›œžŸ ¡¢£¤¤2(*2¥«›448®¬²³´µ¶·¸¹º»¼½¾ˆÀÁˆ.  ‘G8†ÂÑÀÎÒÕ…BÀF9Û9DÖ‚Ô…>•‚ãßàçßáéÂëìÓïÒîñ†óô„ö÷ƒùúüú…!ÑPà‡ ý«·pP‘‡E|@œX¤G‹B€ÄhñC’lí™$Dâ9÷PÆSùŽeˆ…\¦“9&>›ÓBâÐàÈB qÒŒqœF“ú0qaŸZ IZ$˜½qUŒT‡s_×#C­…ûu¬¼¯`Ë¢}Ô¦YDEÿÇ!U:®Ä…ã`\Ð1DH‘’äÙ‹;î'Yµ]߆D,”qãÄkÙµ…©Øá¹t¡Ž˜aƒY%™ רáÃS?VíÖqkÖ‘«MnX¹Ðeºãxx!‚~• Í6e×´ÑÖ&m*5B$Œa \H|7ɸ҆7âø‰Ñ˜8#L)&¡„Z#‚#" ÿŽìÐè“5ñ¨ ”Òi”}ø]@G†¸¤’ñ)Ge—^2(%">æØ u¸ùp^ÐA†ÿÙ¸#˜f–y¢ˆIêyfšwþc¥Q;x† 6“茉šŸ?Ú¥¤'£Á Ú¦¢‹á™'Ÿ_z©¨£BÊ# MÉf›tqZ'©jšš*¦gQZ©­±¡:© «²êߣï|t£Â:+®ÕKlZÈ®¥ë­ku¯£%{R¡-«,­µ»«¬ßZJȳdÞ£)n®ÂOI~öd³‹r/¼z ­¸@ÉkY¯ÔVÛ-;[ W¬½å† î½}\0¾äk.¿Ô¦Ë!IðÿhÚê«.½¯*¼ð§ø¤1Åû*±†„( »á–1Çì°Á ƒÊðÈÕIÛ¯Q'—§• ¶ïÊl-Ì1×L³Í ߌtÎríŒÕ‘ý$0ÂÆ$æÓ>{|´Ñ_{í,΂œÛ*Õ@rõÇM·½'Óo‡I¶ÖÐ}° (À@`ãÎm6ÑN]T¬bÏ ö¿JËÍ5Ý‘á€@. ‚$äwɬö̸hI•Zx½‰+þyÇ£'ý• ÔÓ|dØpØ(b¾)™EÑÉvÜn{:î¼÷NxW8Ð | ˆ41ô¤Ãí{ ])ˆ#Å_É%™hàËÿøž”äÂù觯¾ú@“K,îÇ/ÿüô×oÿý¬DFŒ1È8ëœzâƼi.[DQŠí6'=”Q¯zK]»†–á)BX€å÷·_!0æXGÖR6šµ9ðÓÛÝõŽ5A FP(:9Bzâ*F/vì—ÄjW˜pîgÂñW Uø»殈$"öB&2Ê]ÀØÊ8¨Á2w•#0&t¡u·E.&±‹H<â©–µæE10%¡ÆÅ²ÂôÝP‰,„c­F1Î1d6ËhÀ3feŠW bh@È7‚ñŽ_ÙuN¨.t¦ D§U±ºÖôœxìi3)c”•¶+AÚƒ•ðtu[‹Kk/mZS¸&´…‚ ÓC„0Îù¸+˜ÄA-eR5µ¡µhrt«G«ªYª˜kz’‰ƒ¼o(½ìH3Ss2K¡[-ì^¥ÚVÎBG«‰¥­5’™2N õžª]-_JÖ¨Êöjí,[kûY)áV´É­g^_ÉÆVüv¥0å\p6÷—íb¨l*‹ä[g«Ûæ^u¹¶Í•\1‰¾ò•IfXÛW°^rXA4ÍÏžiVá–×°ÿ%ïx¼Yõ†–½Õ¨ÊCD“ÆK–Öi¬ÄÿQaYW|¢–ÀFQ’”v¹Ö¿ÇÕctÍ‹Þô˜§Ø7Èá—Kr“•}ñDÃË keØ |W“„˜â-ð‰,âس‘y.‚;g ¤Æ¢áDqÙuÔW G–UÁdÚBa ûX4þ,lc+ä##ÙÌY]¯Šì $œòM) §h·òÎƆ3´ ÔoÒÄhf.‰hB#×&!X@÷Žà€4ànÊKñk¿Q„äÀÍ`y…XBIȲϧ-í|Bø3Bb#²›ðç¤3 èB·ºÈF†õB&Á ¢à@­78æÜfÊÒ—FªaÎoâ©… M…ÿÖÝ?vBÕbF,tcä2š6^@46Ò½ž¶0*}„K[+}°~sfg;‡©r -k"Wû¼ô¾·>@`€HÀni/yÜÀ6÷›õLÚÎý¸*iìªC$‹ŒùÌ×±¾ó½ñyÓC"(À ! JX"|âßÊCA”ÛÜçŽÅu•zO¥j:ð»çÊwÎóžû|å‘Þ2e¢gµ‰É s…ƒå©ö´¦Û׉—Æ»Ãü÷«;¾u®Úã`ÿz“€ „€ AHÒG,ö²Û˜&Ô)®sßÒœâ$8ùúì°_ß~wuÛ/øÿt¸ÀÑ1ä‰Oxmð5WÉÒÀÜ•ñ¼àÉ|÷K]*Ö÷qz4=æ;' ­æ—…ÛñL.üØ$=r#äÀ´ ÞeWœú±¿uiVée¬iÒŠ„ϸµ…ñzßëIVóªÙŒ7aòá-IPëÒ÷þv™û,9I’XVm—df´•|ã¾ëñ<,ùÿng„à|8¸þ2éªS™Hµs9¨HÂlŸÅØ%qgoÆ¥qx|ȧzh¡d¨`€O.ð| “Ve¨5sÎ 0£¦_{F\iCeÆT H|çW~#h~%¨€_Á€Ë7b=VZÑX.æ –O7—j±”ÿ61;83¦`Ùu€Åw‚(ÈqéGmB8F¬wŒ¥T$ñ! / gÅ”F•WEõiÄ!Y­…F0^]Uuz-˜z$Xb&˜„i¶„ÖÀy­P -Yçg„YF¥5}U\àÕg@¶‡Ä&€µgzGˆë·€Ê'Y7 Ö€sVnDZ á†`jÃUød/tA„žx„¨†F,hˆ|7NYx„C%,(Å…XýU6Ñ' #ñ`ªv†xEcŠfX„£HfΕˆmˆR%qVæ_á§…T…D#µøal¥;ŒC(Ч‚ŸHŠÂX FAsÓà}A ±Ðÿd×%jEÓl”6‹Æ„R%ì8€¡bñ(¸ŽæhÆC¥¸5Üh‡ªEl}e]øds¯wHlσ‰Ò€‰:\ U;´d×è‹èŠÇp0Gpñ°c‘càd]ß?3ÇbÇØ(¶a ćÕE%„ñWüXˆ1yˆ‚‹ ,·˜/lÜ·ˆÆhT9G6†âŽh”ðèY˜ôX‰€O) !`r Á‘¡Õ“+•iB‰6‡wE zïx `ùãÇvì÷‹¾6i .pi`mú¸0‘Fá±R=&sHõ“¸ÇŒt“’"X,™”)ˆ‹h)nj¹–…)"`ÿð˜ð?s¹“DŽQ´cò%’Iu}›g7aZž@T†˜PÙ”Nišhx–9q€Ø#tyRÏ$àØ„B”7§i†O­D}ÎƒŽ¤yšÔ¸˜L©˜Â)‘‡ðæ–9Ù7”éP\ë e4§TA#V~¹¿‡cVœQ™šØhœª¹šàIG€à÷`•ÞbqÅÑc•`¹×zùMUq’°°{}øÝy˜¿É¨éi 0Y‘ °ž¯I‹^¸‹µWZ§•…z—c¡–{Œå2ýôpÀIœþI˜:œºšph :™dX†W÷œV±aöçMæ8}¨ Øí¢ÿÀ÷¡ãi˜âÙŸ=ê£[×–pF‰¶hy³7ŒG“¾èTõ 0™Ù•÷•2Èy@µR¦…¥œ ‰]¢?ê¥ÀÀo0³Ak¶F‘39•³v½H‘±±ÕG¥<Æ•*?5Ö –f¥7“fÉ£I¦M"—Û¶:EÐ:pŠ„;ÚZjw/•RÀ×§9‡cT¡’~–†š†@Z¨b꩟ž„°MwiIžýV‹†Eà›ì©'U¤ƒ#„Äöã˜^Y/ˆg–º%랤ë¨+ªÇk²¦ª` 'º‘3+·tæA¦‰»× ­4Ÿ¡VZÕé³hÌv5Å «É‹º©û¡Ep=qiGÊÑ{ ³i™jè‘èÆŒµú[y¥eöGsæÂ[q£i¶ :¸k‹¸a*À²Z³ë¤ãÉXÜ«¥“š•WÔ`?i]@é“6´Á@¿†{¶lºåk¾Š! D еãËWcèÀá.†û5ÿsò:¡4eL¸<Üà Œ¶i{ºŽ>ÐoECз©—a$¡i“:Ž£vjëØµ646–ŠÀÈûÁ§›´;êàrÐ4r™Ä %µ# WÁ6'a‘elÛJuºÚ¹Å¢Ã­Â>üÃ\¬Ç{ P‚ G€ +ÌÀ|,‹^¹Á*s§•p§õ¢ÚÉæØŠnzÌ‹Æ Ä" @¢1Ïë¾Jüqï¶Ã¹š‹cÛd®T«’:É,ÅáW‹yw³¶±”Zl¾  žìŧ+@ð PdwÈ;œ.ŠË4H"Ÿ™ö`Nì |IŒ¥†Zöª‰—ˆeÛÿÁ¼ËÀìÇ›LÈ s¥lÊiÜö4û‡PÍv(ÉÕQš[ÆøܼP'#ˆ9ÚË:šÈà¼Å}üËG@æ.7P‹È]|‰&Á…·›wÍx«™›iÏ'ayõO™\Äû¾äkÐål °œM´ÎÑ’yûYQü—.¼ÕŠËH؉.D ¡‡4Û âüÇäüÐ=ÐA\ €Ò *,šoÂRƒ@8VóB•™±,”Éæº|Åf;5¦aâ+Òíz¾ýÓDmÔ3k½ïK®RW]©`|É­”ú·Šo}] tÅ9ÍŽ_»yAØÂ,Ô¼ì×éPÔhÌÂâ@]ñ¼ÿH É•™¦E’ZÊ*£†­/•.˜ü¿LµvÜÓ ÐÄ*¨¥k„­Î†>”¡‹dµú3 XšÊ.6¶{mw¦ÍÞ¥b­l]Ô¼ÝÛ$íÛ¿MÖ„pÒ…íÐ# •“WÇt]Ç5=¯°V°¬L•?ë&ÖQ ~±éÙÌÙAÍÝÝ݇ð ´ ½ÌI“»?plw´Ø³ÛKU›;ûëM½[-C‘l›‚íËýßØÈ Î /°  öhÚC„ÖˆÄÖü[w'”œbûÛ•^M–•)Q3æÕ7}Ê#àÞÃBú– ™„ à¹&¹¶kìúÿ×–ÔÓÔ}º‰°|Wük÷[ÕS*áw¹y· ÞíÝÀ­äK^âGråpÆ$!ÈGðdìmùpÔœúM6&sÚçeŸ0_A¹Ù*‘‡¨ÍtæäßäCÜÂÍÅ8àºÌ²'p±›Ò¥ $j@Vu¨†]`›×÷E¯nQš—›ã¶ÛJ1znÞä“>çLnénž—æ0B°`<$7 Ó>åZ­wG 7Ø­[é­“l›´M «žTøwê¶~ëÖz±§ TÐYatÌ0\ÞÉÈÒ=£æ<Óc§ö†66ÙÖ|]-å ?`Í84¿÷Ùéÿ…DiÜrNâpçì DÌéüéé vÑàÈþßí¼Ã–˜ãX V}¹o½½]‰ßD½Á»JݨÉá-ÞIŽð ?¸  ‹DGt¨xtrì#^ï€8BŽŒ7‡µ¬ý`ÙŠÑùǶ¤…ZOe™ƒƒO(Mé ÿÉšJÈ|iP¯–ÍÜÒñÖÆchíV³Ô¬OÌÈyBi— ºXœÊñ.“3°‹§Ì]îœóMéÀÄlÌb˜´¹=kßAÀR•–ѧµÔ‚),_ÑšèÎ#.îý=Ö$ݸ—†yŒ&`-Ižõ/L±]?ÙX¡õ,z¹R%êÕÿpm~ö.ßôà~éVïä±gžè©Âç]õn,>Ÿïýôµ ÃE_ŸI¥‰™«W`‘è'Y…¹«ÒNŸb•aª é,»w_I³ÂŽÜlZè7:ôtR٠ŋ߉ˆ¯eßÍué•þø1/óñЖ·³f-âŒ|Ý=íÏXa%RȽ!Ëíc·[_šö1c‰YìøêŸüÊÏðŒyªÃ\Üèý©€ILËQÿ(Q”|__ÈO%448B>88>4>GG…EŒE>BG>’E…“Œš›š8›•B—’œ¤¥¦¨©¤žª­¦¬®±§²´G°µ­·¸G/ ¾¿ »ŒùÆÇµŽÿ£œºÃËG‘8‘™E‡”•‹†>ÒƒÙØ˜×šÑÕÒ•ˆ‹®°çŒ•ÆÏÈÎó¨òõ¶ø¯ú«üšÂÆŠù›5ѽTæšm:H+!µfEÀ¥C„cШˆÛ|Ü𴬨BÝ 9D-–ÇLÙâ$8!2—/WæÈÀÛ.aª¬©[O›,ýìé Ô¥C…)}òÐDƒ@ÜÔ³’7Ú€Úûd ÓΕ:w…Å5–¬Ì²±j<+s¦2m òªÜHu’шЀ²ˆM@‚¬ Öe ×MâGÈàmâp€"E 5 €küû# ÛÇ>n¼ñmq3]ðFªRHh|a'j0ÅcÚ¸£ )é¼ÿµ’®‰¥kV‘ZfÀGÁñF—IÒFìâdkt m]I6XyÇÅ솗>N5Sê O6–’Ùÿ9,Wã/7X 4 À¸âò©Mrb³ÕqÕ÷B–¹Ib5_Ú_4b7):‚sG´*¸ˆ¢dä>ÎÌ’¹JW¦B!y—.V¾zeŒŽ ¨NÚŒ&• ´EE肟Dd"0ŸÂ ¥é1Ùñç;ÑÑ46YP2” ÂJ¾PPWôòœ-'»,¸(+5ë¢vGÆzB—žN)²j„HYæ1ŽÆE iacG“l³<.…¨,B°€®zuh¨A;¨UÂãK]Š×‰T§=W)Å1§ú’ DÁÎè‚”ª@ UÈÁm8ÆYKí\VÑSÆbMX¨!Ç™SŽ5ÿŸ»+Ç4¦1£Ê, ¢URôä‚™%•N6Rbeœˆå}Pãö±¾4')Ö€0àVa] @cØ‘7›lcsÙ@}´/ªS`¶Ф©výR ì’¢ÊN©c¸ “­¯ú$hXCÀÄ:Ø×>Vޑlj’VY=«U`±À/MBt%…WTÝ‘<â†&\7±¨(«ºÜÔëCÍ{Þªùí Cu«ÝíV¸9Ì«”J«ju5?Ô(¬ŒJ_SþK©Zéˆ>S+/«8Â!YPú)!˜%°«kK_zá˜î‚·â¦ÿî1oíà[*^”‡…˜-ûŠøÀ"I£k8E­%ªÖøÛˆ •ºÁjžZ1’ª4¶°ÅiyUA[Û*’Èäåqœ-ŒŒôr¥ì¥Á ø¸"DÉ5žô…••¹d-|õÕ¹FQxàj‰åh]É’OÞ,8ŠÁ¹ÁIµÙ:¤Åb†»ÝÝóÄls hÅóg·¹Ø0ë—ÅLïn¦ îaNæéåV{ñ]ö¹Œ;¹»ž–³žEmÕax†µŸa,³›­dϲ´ÕÅ MÍÖ jÃfT˜³ñüG`t+ƈc߇ÓÝ%*¡;ç÷¶-±@2ŸUMí`N7ãñJÿÑ®É x®›9MBàS1DŽXBš;M` —šf—ßýžv[ô½ãe{zU¹q¹Kj‹hxÖU€BïH^¤x0ÚËž ÌRÐÜîïg$-h½òÝ^\ã2áxÆ.8ŒÛe‚1yj LO„DU?¥e7yÎ}鎙 %Òç55/UûçõÆwæPŸ°º×1¼–¦öŸ¨c­®øÃA¡R·“$Ì1ß4J£ÎÍy¸Þ 6»²Å® ¡ûøë‚ý¸ß´GPtæÌ¹nÊ9FŽæê8~x³º=˜§ycä]uQñ^ÖÒïúØ©&¼MÉ®ÁÏÞ7}ùr÷e=§MŸ}»º51ÿݯµ]æf0MAù\¦ÊF_2:sxÕ™õ¨Öà BÆ5àlîŒUÞ W뽘HÉ>%`(”ì|ø¥Hx£’±äƒ]Ì™>vëólú{ן¬ñ¸AhåÑ,«é£-¨·Oi¶†1\½AQA‰7-÷BpÖµ:x‚¡§|øW/|÷~Îg †gô¦xö—û×S€C_ÿ—&€L6UÑ"¶°9Æ= ¨.QL£$z#AzPRqÍçJZ§v}·}>×€Æ0}ëFOE8ØW]XÇ|\„q¡pU‚¸¥A/Ä·}€·Zøägq'~è'  ÿ `<ãIEh„!yh˜z9{3Rkĵ7‘v{u8Sp~Ú—7°Œ–JÀ„Üô9{h:«6(F-N…,‘5FyçW=X °  ’ÃE‡ˆ'‡ö&f³GŠ»ðmïf~sc{¶°bð§'yÅ4ÂõpÓoUu ƒáˆÔs‡‡0u¬f‰ 7€óÇ àx4  Ȇ¨tÓ€tèu¨à}Œ(!ó)˜Õi6gƒü‘‰PÿŒ¿sÓsÈôh‹/ÐB,ÔBPT’&y’0DDG„’F£’EÄ+¹D.™CCôCÅ…CF„ TV’5ùB9É’@éBª×‘Gy𠨎y‡a}ZÈTúpé:8I‘w…(•Ó×tJC~WI;Ó„I%™FA~}C¹ŒPÀ£¸ hŠzH—ó   õ…RÈ”4‡, ’ƒ Ѩ7…°¹¦/ètw”V6žçz}†¿5¹—/º `N©E€pœ XA+ÔO‡r®Ëúec¨fÈFÅš¢Ízÿ¢(­k*±Dʦ±PŸu>xØ3{º|£t*·P(…9szúºfª€šZ×&¿Œh±b·ªíJ¦‡š±[¯Ð¤® ˜QЧxtU:"% ¥BT)RÂÙ.©IšÔA™O+UE³øf³»³iº¨ÝÓGÐ3ÍÓg¼ÒBÔÝÑAì¬M½ÔCMÔ?ÍÔU½Ó -ÕclÐSMÕ*ÍÕ}Õ÷ìÕ`mÁõ|Ð6ýÔJmÕYÝÕb=ÖI½Õd×f½ÖaÄtMx=×öìÑeׄ]Øo]×v}Óþð×|­ÎˆÇŠØ‘ ÙAíÖ’}µF=Ù}­ÙŽÍÙ]ÙƒmØ—ÝÒh ØlÕPmÙ£Ú‡ýØŸÙ¥ÝØ-Ø¢MÙ ×N­Õ› ÿÛ¦}Úz­Ö´Úª½ÛºMܬÍŒm˳ ×µmܸÛÏ}×ÍýÚ¤ÝÛ{=ÑŽÜÒ-ÜÇmÛÃMÝr-ÛÚíÚãMÞ¾ÜÜÝæ}Þн mØoÈ ÉÝêíÙå}ÛÓ ÞõßùÍÞù‰¡(ß™Íß­mß×Mßý ѽm ÍøŒfÛÊíßÌ]àß­ß Üí] öˆvŒàáNá.áë}àøF)!y*ÄÈ•üâ0ã2>ã4^ã0NžFÉIÙákÞ&nÒÝíÜû=â .Þåé–pYË!.âAnánÝ_mÚi‹ ùŸ9àDŽá¾ÚM~ß#Nâö-Ñ=nàXžÿÝ`Næ >æ¼mä?ŽÚéýäR^æ]NalåâÝænÎåý}æ_.ÀPžÖv¾äzþæ„^胾Ør>äfÎçf^äî肾ÍiäŠÞè‰çwÞ¶åyé†îÝ–>ém½èx~Öç®æYêy®óêsé®^é¯ÎéL^ÔªÞÌî鲾磎޵¾ç~^ç€>ìÂnêÄ®éFzë¿}ꔾë¹îäÏîåÕ]ì™Îì¡þé¥näÁáŒ>ë־꺎éŽìJëÎþëÑ.íÞ~ì‘.äé.æÍ.îæ.ïñžî½îëá>­^ï‡Þïþîîènï´þïõ°ï×~îí ßíëNíܾÿíí®ðùð?ñ ÏðôÎïÏê¿ñ_ñïñ!?ò/òênëÙ>îߎë¯ìø.é)ñŸñàNò'Ïëç\ +\W_ó7ÿî÷¾å ôBoó©PÄ—Sîoò3òFOôÛ=ôZõ±ðÅÉÆÿôSïã[æì.v‰ŒZÉóóîô%ö?ßòd¿ô­È‹<’p÷r?÷t_÷v÷xŸ÷z¿÷|ß÷~ÿ÷€ø‚?ø„_ø†ø+VBøÉÉÊ(_›ùÓŽè¯ïáMù•Üä9Ë$à™¯ùŸóù úOú¥oùä™ÌËlú§ïút®ú£û±Ÿú˜?û¸OÿîÐHûðþú¹/ûÀûÁoûÄ_ü¢¯û,.¸¤üÌ¿ËïüÍ_Ï/ýÑ?ÓoýÕüÚ¿ýÜßýÞÿýàþâ?þä_þæþèïýBÀ  øÈÀU  ø  pÍ¥@†´‰ öÆ`? "GB Gˆ‰Š‹Œ‰! !ˆ B˜" ˆ8 œG >™§>ˆE ¥G. ‚§™—‰ 4GE µ™›ˆ„ ª¢¤¦ÁŒ©« E°²´Ë‰ž Ò£¯½¿Ö‹ »/ Àȯ™â䉈ÜÊàõö‹ .Õ÷ƒBØDàÅ8‹Š(pÄG LÿäGòíëwOˆ‹„€(xПŽÈ"¸·á@D2_0@PDÀ!í¹h€ž/Žì|QàP½“)!h@£˜"dÒ´‰3Á‹©=­gÀÁ °j]ÚÔž†/PöÔà‚µ31½+ñŽ `ÅÌ;±p&!¤ehP˜ÆM¥|hÀð $n|¤À®‰øÀñ±bÆi (RdÉ”ž4 ŠF_<à%8q$õ! D $Õ ñ €2¦’ 0B½Ùª| ‚ƒ†ݼ}[Žh0 Œ#WŽÀ¶J»{§n½^ÿNETEô øžâ)r/AÀ@`ÿõfÙ‚ŠìwD ,B/D‡Èv……`€5pL$…5 @$à „†0À3Yx†yx„màlGðÙr“@›!Ò@<÷LÇ \™v „ÙW,º†£Ž÷„ðX€A1¤?UQ2YŽ.$¶d“àÁ€‰ìóȘTf¢&›8B`SîÈ e'r6‘  ‰IáÞD­‰ð‚k2!\ˆöCú鸰¡ˆ£*VNòÀ”ô€ê$0PD— Œi‘ ,€ 8$cþÈHCP Üg©Öœz€ÿh2±êª5½Ï”/˜‰«=  À%B,0Àd¤fí´ÍÒ@‰Ùî¹ GÒ<°ÛDB Ž£“á0@aE@’ tI!ž[Låž‹±°¹bm}-Àªô$=§¾õ™ÇeÄ‘5FŠ£€Ñ¹&J„÷È(ð¹!ÌÛÂ<"b¤¨'±= L‹S½iüÇà|@€ ‰ÍË#cb3ΰ@¢¢0“,®a?f _†8àô ! Zã2D\  yO³<ÀPÒKOÄõ@-5Õ5j ÒB4«4—œc6·V§§¯–úh±°ç$"~ÀÛpûsjX©€Ýཌÿôê„GÈ·ßË(0¬¼€Ó(ÀÛq/¢¹ÓþÞyDåG3ÈJÛóB´g°Ë¸¹Nä ½èÏP\òzìöˆàи¯‹P@ á_¡!èf488„¢AíñàÐ+¾þh`t­ˆ,J•Í;ЀrÑ?0½5Õ¯²XÒhï÷àQ;KJþ€öpp?÷ÃYúÖ—ÿÕîèÓ_ëÈÀ:ðŒ 'HÁ Zð‚Ì 7ÈÁzðƒ ¡GHšð„(L¡ WȺð…0Œ¡ gHÃÚð†8Ì¡wÈâP àÞPãÃ"ñˆH\Ђ˜)‰PŒ¢ÿ§¸ÄB9Qø‘p°8/³@DdÂh<,`YRþp€ƒÉáÀàÀ8&Cƒó-ÀwSÌ£÷h%V¢HŒ²¤¥ÝÈ@HaR–(-1d($–8ðL‹^G1, (|L¥*W©ˆ%`Eˆl ¥ €žÜ+GpÀ¼(€Р“X"'€”̲7€!J¦H©¥ˆé¡+§IÍ BP†ñÎç—¬õ«`MâÖ²š•š HÏÊÖ¶ºõ­p«\çJ׺Úõ®xÍ«^÷Ê×¾úõ¯€ ¬`KØÂö°ˆM¬bËØÆ:ö±¬d'KÙÊZö²˜Í¬f7ËÙÎzö³  ­hGKÚÒšö´¨M­jWËÚÖêµm/ˆ-ý\KÛîjžÚ¬­niøNݘ s» n 7Ðáÿ7†6U€¹Üã:—„X­¥žK]ØÅ.Y%6z÷»à ¯xÇKÞòš÷¼èM¯z×ËÞöº÷½ð¯|çKßúÚW¾/à8¹Ë‚€€€LàøÀN°‚Ìà;øÁް„'Lá [øÂΰ†7\alà!¸ÍmÌá›øÄ(N±ŠWÌâ»xÅlB ‚‹@O$ñ‹wÌãûøÇ@²Ì=•.÷·Ôñ—Ìä&;ùÉP~1÷¢bufE+:–¸”å.{ùË`3“¹ç¹ xØ'RDÙ|Àfò‚F›A&æ:ÛùÎxγ„¹§´D¨ÿ%$3R"6P›› ðA ð ’B(B ¬FpYϘδ¦7½d!Ò3Ä|(e²EgR„^ÒMhs„ì&>`¢2¿(h—æ´®wÍë^_˜{E8À< Éd/`³)R+˜ÂÙ&sî@€¡ÒÈv¶}Íín{ûÛž- DмEzª QŽLa!ù¼K¢æ»…>°¾\ƒûÞøÎ÷—q`<è@Z>Bª@'4¥«6E  8È1à›.ˆÚ@jEØ[ßϸÆyŒ €XºŒ¸^íp¦¸`2XØfà—®!&0x–Þ¸ÌgNóã«>ÿ(v>çëT<¯¹Ð‡Ntó³uò€^ô¦;ýéà@«RuÄPϺÖ7>åOw‚AߺØÇ¾iîùhG;Ð,v²»ýíbæž ÌÇÕ ¶îxÏ{“ñePÜ& ç\úD’ŽÂžA†¿Gâø-Þ¯GäÙ×xÇ[Þñ;-ÀpaƒíÚ½èGOúÒ›þô¨O½êWÏúÖ»þõ°½ìgOûÚÛþö¸¯=pk^”ƒ‚GHðï1|â3¨øõ@~ò¿ åƒÃùÖ€>Йßüê7_?ÿð©oéOßúÝç~ø-ãýZ”ÿç׋ø “~KŸ(®zfÿéÀ¾~á×ßþä¿÷À?þüûÿÿýÇ~Ç÷Y²ä´v#¦n¡€ €ÈÑ~îøç€HöçZBNð_„€…‚!‚#È $x'ˆ‚&¸ )(+h-X13¸ 5hƒ‰€sÛU]<؃>XY„`‹@ –бF×ÀÙxƒV ¾³‡ Aèï0Ww GØ8° plË0 Š…õp á08v ½  V `x çà…Á@†Šð®°ƒŒ! @…ƒPzX í 'x؇™€ Ú.³ ¨½ L>f¨"Œà ʵó0BÁ‰01ÿa¾Qg±†˜À‰%Ñ&ðyµ‰Õ°Øös˜ð‰c‘#Pãs P¡Š²¸V‹0¨”{Öð ‹éÒ#µ‹‹Pt1Wˆ ¾X*\ø8!ÕÀŠËŒÅ…1Ë Šh“Da‡Šàؘ &bÐljà á;ÃÂë‚"¤$‹‘°áw1É‘‡2 ™3üøŽ°ªxf’B²8sˆèì!» „Á€(‘ˆØ¥2 ùÁ‹Š°{Å•ЀŒ¸ø¬–Â4’ŽÀ‘Â*S Ï’;ÿpËà‘cQ“Ðõ €`މÀ“«0ÿÞ•“ø±“«Ñ„·åòy â’t"4ã"02hœñ% Rpˆ Xé]˜jÁ`•úKËÀ*ÇÖPŽ2 [ù•™pn9¸&à`C¨Ïb sù ½T@•‰€—6¥%å7!…b–È¢—‹À˜{é•1”Ð’9P‚à ™€³"ZÓ ‹´#yB}âg…â8Qµ•®’,vÙœb( ÐFEH“”¢:M´A•Ʋ ã œ,Ûb˜ˆÀ—A!G”¢ŠQ# j”œŠp>Ö(‚R”»ùu¥(-âáÍÕ°© ð8p3Ý(ìÿ9»€Ö°œ‰€)š¢‰ŒP/Fúø+!D.oä/ónŠ1RQ -ÜìâZ @…‹  æ’c2T‰ +³$}Á›9©ŠŠž©f¥ò3öàœ  ¤˜ É¡ à}xi@³©.ZKº (zŽ:  º7âD@•é²t# Õá£îÙJ®Y¡l²:="2 #B`C¯ñ gCŠŒãG9’s‹™5S³Ì5h ™ YZÇײËð¥EpT­Ñ*” ˜ÇÀ\t F⦎²9/Š ÎyTEi’µÐ(|:@6“w˜¦¨` °SZ -:/`ÿ¨Yš9‚úF¥Ô4Os‘‘ã4 ¨~&"ªfÁ© 0)j:ŸÊ\cS6Œ@xª>ÇÁ:Öe>‚€jò`““¸=«öS;çÉÉ”;ò78<¼p  @Á ?ø5 a>‚x Ìì~A¬Ï' E  D;õãØJ ±ÚÝz ° >`>ψ~âz CsÁ0;µCØ ­ËP®ªð®úJ;gÈÇJ;!0®!Ùˆk;ýºë’÷ã®»°U$ø­ˆ0@?رû± ²";²$[²&{²(›²$ € @¦×!‘Q Iu rÈ 0¨*›X @N@N±™“O„ S÷ÿ¤^rS”Sâb°¸³Š—‚ðá;¡8óóã® µrT VF 78 &1U DQ(E@‡ P(c €8ê2 ñ0S«„oë´ˆ9Ó>P£äDõS^’Ê$l‘p¸ïxJå?KãCµbï2/ ÎI‡ôKDÂ!ZïK¡""£€[XSGD›Š°ð9Šë–½ÀD ±¸­tP¢`SªH¸µs4p`L«“Œ& ?[l‚K%a½ÀIøºx%¸”mLäp·Ë¸¨$J‹K2å¸$©(¼’ŠXEØO±†[ÍŒðå˜I&óB 2ãTÛ˽w¥%“%$ú9îj»k›»ÏÖ!C»Sy›ÀìKŽ5"c*õPE VqÎqRÅö´´sÖë<P!À‚%ãt€‘%ˆ4ä$IäÛÀGKéë1ÁBÂQð.ÄTàƒHÓÑI½dÀP#7uJî!I I ªÂu¥= ÐÀöW/+;@™+A‹‚‡ˆ<<ƒ@ ‰¢©¬Š«­°¡±³D¯´¬¶·‹¹ºª½­¼¿»Âˆ¤<,ÇÊ<'*¤*%Õ+©¼¤B‚¤·ÁIJà¾âˆßàæÂè¿êëäØîDƤÉˤ&/¤.&.)^Ü2¬Ø2 Þàb§‹aB…† †ƒèð¡DBYÉCV0f”À@!ñ6v4H ¡EŠ3Æ’93¦Í›#ºÛH¯žŽ"Dà!ƒIR8R®THVS\8aJ|ú.jNª,çuä‘á<Œ4ñ"ÅŠKáaµÖ•Uµoÿɵu›S'9ž[SX Pm‚Ô¬U•:5®¸¹ã3½Z×®8¼KD°P¢„…%t¤0qB%[ÇAC\Nt:ÆkÁƒ\fR’I(Ûö¹°év¶s/Ö½»1iÖË$S¶üúí´îH/¼ÝK9Fæ Qû^­¬ç2½|IZ@1{poÅpy‡Ÿ\zÝßÕ·v½Àƒ‡Ýk“//^®ùñßóC‡|YŽF•0Ã2ÇÑ5Ÿ}õ…¶-ÎMt ~Âô·UG&!‚Žv}j˜zÇX7!…Þáwá9 2˜bM+F·Sz#NXaiÄaãr-“£Ž ¢¸ã, jãV3âø Žèaÿ‡§õ¸$“ ÞãõùÜ/§!Ä)¥8¨d“P6÷£|a> Ž„T¢Bæ-Ýr m zÉá—`Ò)æ˜NQbšU–O#­´IÄ›rÎi¢¡‡bhçÓ½¸'Ÿñ¥µ +Yn)hœª9Yç¢/%ªè†N ©šKµÄ¥K  Y览²Új”œvŠ'!hRi¥] *((6¢º*¬žú¨)neÊ:ì,µyëD¹²«Š³Z¬°± j±‰ é²™rƒŠ1ÄbË¢¸ãV[®¹.Jù訤8è¤á¢Ë#¹y›.½Ðª+$»ÜÚbŒ¯÷Ê •½¿J­ÀÖ:ºï¨ýF+­ÁfN»)Ä{SÃÿÅg¬ñÆwœñ),„,òÈ$—<2@x¬òÆ1´¼òË0Ç,óÌ4×lóÍ8ç¬óÎï}Ïô[÷ˆ9%‚P3 Úb@CÄÀ}ޱ\i×@NP‚çÂ[‰tÁ£0Z`¹CΉð„%LXþRˆÂz5J_aW»L·> ªï… F&À=‹$Œ¢ç‡ÃVQ+$‘"RfÀS‰ì«Áõ|è­øõïFÅ›âÕxE*¶±‡ŠÈbŸ@!=/ºŒralIæDç&4>Oi| Ù>Aò~©#Û\qŒõ‰±€]¬ÝÅ mXj’IB$CG#âRÿ“‹Pd¤ÜÒ PB $(W÷9¤Y©£$(ùØ=r²“çÑÓþ„6õ‰‘‹äÝúè¹8îñ‰Wòd1­¸ÉYÒr‡ ¥ãø V~1ƒ¼³e%!qI×’‡püä¿YH,:‚›’H§:/h#R• £#÷ø®ârKZ2&Î7úóŸ&,§É L² Ò“ÞàŽ(LlçEäÀVÁ:„¨J{Þè!5ªMgö“mE–XI9ÿ½+›vœ^#yGÒË!Æh„2~‡ÌŒŽó¦8 ©NwÊÑŽê¢UkeæX‡GŠb ¬D—ªµ¼eSu ìÖ-“©LY†ó£ÿåÚOKáÅ‹™4Kv”ž)Žº ÊÍj^TD÷¶f^u™ Ý(@šÕgÞ¢R×,Ü%yT¯¥Í:„Y¹9SÊ•§>}«U™éÖª.ö 5 ÕŽ1¨£6¢bÌ[)+@¾¶-cQ•j-ÁÉX»Æõ°uÅ*¥HªÁEtõb„8ÕqÔÖ’x؈6Öl%jw›ØÒª¶·§+oSá?1²”ž1é6ÚBšÓ¦Â%mp;]êŽVºwmå6L©AzÑ ´Òm"nhÝž–×¼ZõíoUѳöê¬e,D ZO—9’}öÍY~éÞþú÷¿°€w–^õŽ¢ñ5@Û¶Ä_”i¬µý›éÿ7œø\¸¢×´ÕÅð…5¬ØÇ®cD€‚¹LŒá7˜ú—Ì‘ÛÐÆéÅ×Êðz±Ûá‡)!1æ«P—ɳ}…xDSÚáž7º4Freœd%GLj²‚ŪD%jÈõlê·˜@à5™®F>2b¿ 朎Y#P޲Žëke$–u¥]B]u58³‚ÆÐs™Éæ>sø©Ì±š§Ü‚S~‘}2ó_QÇO¹ižà¥êu—œZ ›yÏgÖóãÒ¬fßñLJòLUcIÿµzÊýs¦U½êSzÃ|®1éI+NwZÁÂÜo+Sv4X†Â×m n} ÝVÛØ–v2«aÿ}l7á—–²Ž ñÂ_žŠ¿,-Pél ʹ¼Æ¨¡cq9ÕLÖ˜Üx{_*”hâFÛ50BЈ`LuîJ»¸œR#×’M5ß1ꈭS¹úÕÊn¶Ÿcýe.Š‘4ÈE \o³àðÓ£K|YšFÇvÔ‹ÐK‹U…ËúÒ'GyÂ]ÔÊž2x¢Aˆ ïô*Ÿƒj§#à Šú1x·]w—ZVƒ‹p·ÂžÇî<#Ü[ë; Ä s"ˆ d5ˆMùWT6ÒÇT71Ú4rN‰Ú JO·¹Ïl€<ŒŠàÁÕ ˜`áâ>åóë«Wà3ª׬)iÝÀÿ³·ÙföáŸø¬±’êÅ@ð -ˆà;z'*¿X8Š‚|µž]j…ªâ€7íkg²Éßø ›>Èëcp DЄàâ(³ï»4ø+%÷õ'¬Z—ÞŠ€7íN?ø²UÎp¡W.,A XPh1æ÷ÄŒú• O\µî‘øüò™.éI/|õÎçÆÎýcì»LÛPõz¤ßõíÔWºõ+Ç?¦5Í|þ‹ÔÛvôp…_SÇ>mÖ:¢ð{C|‰F4j÷+ª§ç·xý÷túiœ§ üõl™wGxÔ.¡F=>óžeŒwz&)—Ë·‚e|F$Ö%v}^…»cÿYØxå‡zx6–‚*È‚AØ\†U*˜v-£sad€8ø;^u„D(vBX„@ˆ‚Ø‚_F^4²VµÐ„yôv`dO{ñ7…=X…Xx‚T¨†è‚\¸LƵD7B‡yÕ{¡ðAgÈzkXZh8„~ø‡Ýæ\lSóiü6VÕ³>'zPøH^Vˆi˜…VȆ—ˆ‰è'ˆ‹T„ÂP™'Q|qìÆM –[0Ø|ØŠ®Ø‰Ê‹þÇgµ )“OmölÙO' ˜%‚S Q~‹Æø†¬è‚û‡ ØV_˜'Qncb%æU³‘jšU[‚¨ŒÚ¸³˜Ü¸Œ¯¸ ÿOtÈ]^u1¸uY.“2Ÿ%^°Tz ˜‰€xŒÈèÝh 1`úØ15¨„î×~Òx}û5¹y™ [áX‰$n;&X`@£T ´êÃ: x†Äæ²Hˆ÷ø‘ò8!)NÚS‹Š@uÔãN@uT,=ø1Œlñhˆ–h‚š¨“h¸‰Åha{5Jå”ÖÄ’ìs*¹“QY™%8€„¨(8 Ž"9•ƒ8’œØ†ï2‰ˆ¸ ÿ•„s `x\2E@Æ X…jGx />I’IX™“sé=—"^m…‚e_§x:TQkUV7ˆ^Hù,Äø“uùP©˜vÿ)|HÆ]öAo£‡€igŸEOO‰}‚øƒp™˜Œ™Œ8QxtÇyt¿g–¬QJI*%Ç™lå™ÉW•Z¹“<™•>I”«š_ˆhfYÎ8@%Ö+IIŠ®V[¨ œtéœT—r‰›¹™s.’X9F4d€ÀFíä7¹…}e')”%t%¸›Ñ) Ùë9šÓY[I=Ž$8]U€ñ$@Çg:›éZÀw˜>(Zˆ)šÏ) =ôRΖA›¥Dò?–?g_Å–%©žíùžošÔ™¡™† ƒLWæ2 *†Ïö…ÇÕIÜ÷œãWnЙžìI ø•\g#Ø‹'%ÿ€ñ”ŸÔ#Sj9:j•W ŸŠ)š“ †=DÕ6øU ¹ˆ>ÒÈ~M:˜E•9Õ„2•è¢BꞤ[Z¤ !‰Û´ àbpñP=0„YRšy4jQvFvº3M¡$•Dª¥_º˜z¤ºÙ¢Ì£>¿™7Ü6^›e¢bY_ˆ>5¤6¤ˆAg(ýɧ¤™§Z¡^Z©zºZÛ°mÑÔ  û¶ˆHT_6"VÆ0uq† ~'”®‡¥†ù™ê†èi§–«˜Z 9 ÖÔˆ¸LT_þ8ªµ)QÀs¥ß™*µ ·)©¯Ê›´Ú“ͺ©¾ø§4´hV¢>Ÿ¢`4¥ù‚ƒãy×I¡ŽÖÿ‡Ëz…wú¢u*«]ê9Ú9 bzFÈ©–kÕkUC -ÙÇáÉ”¢°—YÍ9®{ °z®C:«rrhE—¤‚Yï‡ÚwD=J5O5ð°ò„v‡è;,1OØø¬xª¬ «0Š4ªI='tj@ E£º—ŠáTÎhDî2›Ž7‰ ²Ì*°Î:©èš$ ɤEg /Ù>{WD.Ñ—œ‡RÌ)l9Z”A'ifúÎò˜øT”C<škG†èCLxè„|Ù±:[“ºB–XK©é:²U˳+iªÙ?‹?(;Ž(ÕEOÊ_˜”w!ꚤ’øº’Ó„ÿ³ä·k°ÛQ‹C_÷lq¦‹â9#@- SßWP·õuþz)®Ê¸¹`a7Y`7ŒCÛE”G¾Òö*ž&%°Fc)‹š¦{ºV[·mÛ¸Ž«j‰;jéc-åu“}j*³ éo fõ»Ê¼wk·ZK·ª°‰tLèØŽ…–M™VÝù—KÈ’}׽ܶ ã€Éj°½»r 9`º¸2œ ±˜;ÿØQJ3œ;€ò4¿<À 3;·^­«ë-¥T%ÕŽPê}Et¨¨¦D=°¹¸M4e‘PX›Û: T ²1f~æŠA·úG”ŒÇ”³ ‰ˆ¿Î‹»Sgñ1ÿp5°ñ۳ة^jÂà[ht€qœQéKa•¿Ø'1Ã@Œ*ಋ$\·9¬Ã¨+· ì§ |Aò)n›Û€9(–d€ìf»Þ&t lP> ¤Y«½ð; \ÅþÉyjÌ7⦇^¤¼z„¦-óE þQrJ¦Âkþ™©'ŒÃŸ¹¢n¼“ÜK jǽãTuV‡l–J¡ŠD Za¾ÔHšL[YLÅS¼Æ!lÅ£ ’3ÊE+üAgy¬\÷E,yhE”©•Ù±ÕÃE£nŸ ʉ¼È"˳l£wлLÍ -š m½…¬¼ïHÑ$ií¤<q¹ ðH"èJn+8¾Ò]½ÍÐoÏ¥<ÏaÙ©`FÊu1=ÀnçMETØC¬Ý´³$ÍÃlÜÎ8º×,¤¿L£ÇÅŽFã«a×,¹(µÌŽk¨FŒÎn©Î,ÕRíÑXô´VyÍ{•O>§%9JV~µ¿2)Ó£KU¶À¹€×ËÓS]؆­Óû¡ÿ€ÅÛ­¸ª¸IµR¹ÖÍÂÄ©åüf•%½tšÓÊmMÐn]&BV=ݦĺã¦,±Iœ‡“obx'Y—-Úš]г}Øî\½·=ÍÿçRO™¢å×|‰‹¤Q&ZR*U3ˆcL ¢ü¾´]ÕÐÝž=ÝGªØÿÌØ5 ›í"‚V–k“] >=LUÆ]Óó½Ò­Èo,Ýl­Ë›£Âw¸ý£1dú´ÜœGT¸ÜµÈºÎç]º©±Þ×4iïðß)½Õ4 tƒÕÇ•2b»‡ý½Ö.żœ³~l>í.åqô‘©nUϒͤ&f œÝÙ¹mÛ-þÙfç}ëÿAâÃ$*æe ÎØD¦ØgøY!+NÊ/^Û.~ä„=•#í ¶+Œ0ùT6ì°<Ñ5X×HŽÞªåþäuÚᲦÈ;™Zƒ\•@yL軹ì +–á:Ìå>ÅW=³ûûlc{TaÙ«¡ê‹>¦1- ‚íÈ7Т\䈞èH¾áøËv>жûˆ¢¸óÄæå yl‘Öåã¾³C>àˆíܸôxn€[G7>OGÙÝß;ÁaÇ fy»e¹çþ!p>د0L`¼¹íÓÊ‹–Mº·„{Ço©t\/÷dS;ëòUëº~ëéPÀÒ~3íwç À- ªýk¿ÚŽÿ3â9íàîÁ˜½^®èR5X-­– ½LúÊE™9FÌæ­ëŸ7 L¹:ÒJîŸNîFNÝÿí,“íÕDíKi×–»hÖƒm‡ ¾ÙéåÐJBuªç©¢ÐžK­Å~çàâ‘íå¹àÕ&§¥Ñ+d®Y´Xަ5ÿúì¢îïMôW)ËAGÄÒÚmŽ$æÛ\—ç]i =뜮¾Mñ-ßï›}ñBß>Vö`ÍWKX Q÷6jeßšt5Iõ‹y9p­ïŸë,¯‚¢ô»×ô÷ehQ§bÚ×fž—Ãc*l î4TpÏ{õ.ÂEoîFoîÄ8ªÀo¶—Ihe LRæˆÿMY^ŽWž¼Â¶` ðæxßåŒê{Ÿäùû†}^ý¶ÐȘ54s6™màN™Â'ŒÇVí¤0ô¸Žô ÍîšñÁÔù_ek€¾îŒâU³Ìe¬ñCÎ3å¡®•–M‰áy¯Þzûš•hÐÖîx$¶Z£ÃžP-ó¡0Ä]1ì·@Å%ë°§RgÎÛƒƒéZüKÚÇGQëé`ÕÐ/j¶°bÛoG2C¹Wm"šA¨ DD@15B51‰‰<ƒ‡Ÿ†ñAÔ—hÖG)£ŽeãÈu„È‚Ž„ùh锄:çÕ'Xfì-îˆ6K7ŽÚ£Ý³òÔtŽšµt³ É­®ä’IÃdÜdà !Žüˆ«JW®Gnéî©SíJk¹ŒžKIºr±ë"ö%¯NŸÑf×öâƒMLöŠëŸO1,¢¯j"EÝsq¤OZ³T¾öiK°=¥3%«êM÷²²¸Ð’x–Œ³hÒš\ OE,tÿ†€õ®qã*Û ¶ÿfíu1&µÜ*–"ÖOÝ!úH³ÒM†×¤ ‚ƒš…1–5u›Oˆú*6)%+Ê*kÇ,ó«Éþu0˜bÜ(´â¼ù#8|ÿBg7åBu¶Ãœ6ZƒŸ×";iËìÊæéù {¢?޵åÓœ0™Èð<,ÌŒI§ä¼Å­Ú¯‚KcõÝ“]ëg€4Á¤ª™¿·6ÔË7ì\M±›GŠgoóìóV}&®X"Õ3[Þ ‹Ê2õ .ÑžCŸëÆÄ<`ž ¥:ñ`ΫºkêS> Ù›HÀð€L ‡2q,ðtà] žpT‚” Q (ÿAqt°- ¼ x>ˆA’0ƒ·¹` Wø@§ñêf–C"Z>Ý]-;[óÝëh!ÍÏlž(„_^-®EU×›ÄÏÄvDD Ïzãù_‡¤½£qÒà N†¦ž¢¹0âáÁ\ŸÓ ¤A’ Dz/g!Ñ‹¹abÂ~” TújFضǽ‡ÕNYÄ Á»®ÁN^·‚EN¤Ñ.÷™EÚb*“¯P•±lÔI!ýC¸ü9ãV^‘¤Ù I;‡IEŠžä£*ò-Á[¬q` Ü’'‰›ËY°ÀgJo]+:I‰ífhÅ>ž²—A&1|‰ŒzG?‚½¿ÿ( :õ£HçÞ—I?~raϼ¦ºÔ¿/†Þ\\1ÂL52W ÙTŸÒÁ®[Ìí8¢¡Ä†øTnhfÖüÄ8]RNC–Ò˜ÉTæb,2¥Õ±Œ‡#{‡"zVË`ÞÒyÝsDúÒÍs²²w—°¥K„EÌt®rEèDlµ“¡ò.Þñ N¨1ÞC$“ÌÒï.©ˆßP\åj„'œŽR-(MéIMªÔ¦ÂÅsê LC2QåÕô"#KóõÂ,³š£æÌ) Ò…J€LªZ=ªÎµ&4?( ïÈ(] ‘Ê#ÖQ”6apé$²h’L¥Ž o;dU–ÕÂÚ¡)¶•ÿ­Keªd[q‘O,³9Ð6á§¶iBˆÙ1Ì4¼¯ô¥°2)£/ûÔÊ€Ó°NuëJºP„¢ã\–Í9ÄWƒ}r£¤Ájç0°G?T}´D"jK:6Þ±wÑ(Ÿci@ê¶Çº‰ûƒbÜ̽²®8Ý%^ñj ­­\~-ÏI˜ä«ÁÆ%¼|Ô/ñ¤%Æ·±¨L¥l£‚]øXª‡ó•i1y_¼4OÕ`d,Î(Q€Ur!Zð4ÑÉ ky‹,dc»a¿U»-Eifå›6’ئ±RtôÔÈYmF!Xl›ù8sÇM6Wtþ°†gÛ_„í8"µçb ¥-æ²S½ùÿM/.÷Ë_•6Ùɵ}lCªâ×z+,)è.p”äþaŽÇèìðdÅLfãìžUžÅ ÁˆåzB„ˆË'“£üc:×¹ºanH3“C&F¢È>r»ŒDŒŽÙÌs–”Á¼hƒt’qç{Ù…‘cÙ±mño#8“cFßYÑŸ¾.”ql°ŠõQ½­ U2Œö…ÅÏÍ¥ðe:ýäPg7Ïžîô_Ek‹ˆ‰‹¹%•bP(Û9Ñ¢66¨÷+çbëÙS:¬µ=7}=Xç¶Á>´´ig'7û‡=‚6¬om´•ÇÚí5·—­ím·»ÛÚU/¯õ ‘_Ï›ÜuM%€}_*ö8±ÇF6ÿ¾iMjg?ÛoŽ!#ïB¶¨S_{ºëN¶­.pM›nÖÿäé·$ÓoÄÕÃÕ]qG\â'·øÄMÎФQ±àêwKžqv¿Û戦¹Á£‹ÙgnÄÊ$O ‡Nô¢ýèHOºÒ—Ît¢‹P… |úÒkŽól—9çWw÷ÍQÞòïŽÛž}–ù¿©Nñ­sÝì*O9ˉqêŽkùwp„¸²«®u¬g=àwǻݭµž-ãFÏ6¦w£ënõ½þð„G¼Þ·<ßj­œî‰_|ä%OyxÞò«-îu^v´¯=ï˜ç|kEÝ+.‹‹„ÆïÌAvÏ“=í¤w¼|Ÿx•±wžõ·W|å!ÿúØ×~t»Úyß{ÜÃÞõ;Ÿ|ñ ¿åÀËù¹×=ñ[oüÏ3÷Ô—þô•¿ýã_ùÚ>÷Åþðc?ûã÷þ÷Ñ~òwßúëO¿úåÿúù·þæÇÿýõ_}þ¿¿þþÇ~åGÉ·(€˜€ÿw€àöx 8zý÷€ˆ€è~ Ø€Ã'²}ˆkù§¿7w8‚$8ög€%h‚*‚!è€è{›(ƒ/Hƒ¥wy6¸;ȃ.Xƒñw‚ XB˜ƒ7˜3„E˜‚Ih„>ø,(|¨ƒH„Ph…WH…Ø„Lˆ…[¸„]¨…(è…C†bX†`˜†Nøÿ„_x„Uè†S‡=ƒsx†h¸‚\h†l8†vH„x˜‡wø‡}¨‡{ˆ€(ˆr¨„ˆ…RX‡ØÖ†…¸†-ø†‘(‰ƒHˆt˜…—¸ˆ“H‰‡•‰¡¨†‡ÈˆÏ§ˆ¦t¨XŠÑt®øŠ°‹²8‹´X‹¶(@©¨Šš8ФH†–؈«¸‰œè‹¿xŠ»È‹¹˜z8è‡Ã(ŒÉh{Ĉ‰ÀŒ‰xŒŸ¸ŒÌȊΨÕ(Š×HȘ‹ÓhãȇÝhŽßŽé虃툎ïåhˆÜŽÑ(ç(H÷ØŒûÈùXŒÆèŽó(‚爩ÿ˜ýèöØõ¸Žì¸øHÿ‘½¸Y‘ ‰‘Éé‘ù‘i‘©‹äh’âèOÐ(’)‘ “1y)¹‘3é’2 ’$©‘6Y’8É“#9”!©“)”Dy”>ù“ ‰’@I“É’-™”*ùŒø”Jé“Ry•9Y•/™•'é””Z¹zê•H‰–i”=¹–TI–eÉ•] —aÉ”c)–Qi–7‰—y)—5é•Eù–|™–`¹’S¹“„Ù–a¹•"è–ˆ—é˜)˜vY“ŒùƒlI—†™nʈ™”Y™‰©™V™u ˜™9˜’©–‹©—OÙ™‡ù˜«ùš…ù•³9™ªYš¢I›¹yš¨›~ ÿ™¤š»©˜º9œ”éšiœŸišÄi›µéœÌ ›¾‰KÒYœ )œÙ™šÏÙœ¼¹´°â9žäYžæyžè™žê¹žìÙžîùžðŸò9ŸôYŸöyŸø™ŸúYŸÅ°ñ្ ! ZÊŠ º  ÚX ŠJ*J¡ êj Úê¡éFº#ê %º 'Š¢ª + ¡-ê¢é–¢È £ýù¢VA£Ä€£Á £;j£꣌Áñ!¤’A¤a¤GZH¤Cª¤Nú¤!¥R:¥TZ¥Vz¥Xš¥Zº¥\Ú¥^ú¥` "° ЂÀ Ðÿ_ 1À‚ Àðe"  0ƒÀ `¦tj§"p¦iº¦´0!0 °…J   ðv¡¢à ШDÀ °xº€rª  4J¨­À ©ŠÊ¨Žê¦* ð–Š©ÂAªð‹J©¬ ª ¡ °ðÕd  ·Š1¼ê« @¨Ð½*BPà@ U­ D€ À©z&!Ð!ЬϺ@ð`ª "5ÀËê p øÚ €B `®‚Ê ^±ÐD°-P|Zÿ;îjªÐ1P!`¯#€¯úʯþš-p±[°çê à-`À± ±k¢Ðî:°ÀÐ.›¯¼°3ë®$ýú°  @­Rá €­à¦DPsÚà¤Ð@  010Ý05`´HË®`ØJ´ ðš ‚Ê«C«Ë   ð§Ë º±à°À! ÎЮfë€<°¶mû¶ 0´ àŸ°v‹·z‹ `«iʶK·„k¸ËÐ…*±‚ð ฻1¤« 'kÁÐ+‹;"`@€ÿ­ `ª ¹ ÑP¨Kcj0¯·K¹Û¿K#0´àbKµÈ CÛ M+ À 1¸š0³r{µ<ë Õð¼`»½Ý à+"#P¾Dp¾ ‘±hz´ÜËX›\ñ+T »‚®uŠÀù«]Làó’ð§à°D°¹õ®-¶ÕKr; °mÓª¼NÛ#0,®#ðÁ‚ ÂÔ ©ûKðøë¨=ìÃÀB À €ÀΠ¾+\<°ÀB;¼g{²  ½,ÄC{T‹¯H¬Ä•Ñ€¾øÛRÿ¾È !µp´Aü jÌÆfì½ò0*¶50b§ À@$Žû´öúÀ¶ñÅzÌÇ1¿i»à:°÷† =ì³s:wۭ⺠êË« ¶ŠÊÂÑP½{,pÅ•,— =¬¾@P—ëÉÎl쯯 ¦ ¨Œ @FZ¯ÊËmK5ÃL¤,`§¼0¯Í- °,Û#ÓJ·À ¼füÃÓ:¾pºñÍ Ó\Í×üȦj 0Î@`Æ€Á¼·Ck Í Á:¼ÄÞ‘Â^<‹ 'ìÎ @Â0Ïõü½C›ÿ¾ ÀÏþË@Wì! ÏôL]ÐÄ \ìÐÍ0ÝИ ÒѬȿÐ0Ó_ Àã»`Û¯í·1ŽÂX+¢ æ ƒlà0äç{à­Ý¿N‹Û` €|®>ä·NãVNã6®ãü¼¹üìµEì© >.ÿ»<в Nܵ\î¼Dàä±SNð @à®}åzŽàYŽÛ ëàèûåÜ;åäæÍ­]¿¯ßèK¿Ü:æèÛõß!п ¼çœ>Û2­ !`ª7ÍU­·íŠÔ‚OíÃt­¨ @ê°f:  ÆmÝ”pëÞë¾ ­ª¿>ìÄ>» €ÝÅžìʾìÌÞìÎþìÐíÒ>íÔ^íÖ~íØžíÚ¾íÜÞíÞþíàîâ>îä^îæ~îèžîê¾îìÞîîþîðïò>ïô^ïö~ïøžïú¾ïüÞïþþïð?ð_ððŸð ¿ð ßðÎ~ÿ‹ñ?ñ_ñO@ñ¿ñßñÿñ ò"?ò$_ò&ò(Ÿò*¿ò,ßò.ÿò0ó2?ó4_ó6ó8Ÿó:¿ó<ßó>ÿó@ôB?ôD_ôFôHŸôJ¿ôLßôNÿôPõR?õT_õVõXŸõZ¿õ\ßõ^ÿõ`öb?öd_öföhŸöj¿ölßönÿöp÷r?÷t_÷v÷xŸ÷z¿÷|ß÷~ÿ÷€ø‚?ø„_ø†øˆŸøŠóÁé™w©_Ü™£ûYù–ù˜Ÿùš¿ùœßùž?Ÿº¥9-¡\:ú?ª¥¦¯¡‘úÁúZú°/ú±ÿØ®¢²û¨?ÿûYZûTÊûÑàû&ªûX ü*Šû޽¤WŠüVªüUÊüTêüS ýR*ý_ýÖý_ z:±žºº`ÜX›ÊÝ*¥áo«›Ä!Z´úhª¦é¿þæïý! ¬ °ÓÐþÈî ôoÿÝþ’1 D„…†‡ˆ† ,#…5"‰–—˜…, <†!- ™¥¦D›†‘“•§¯‰-… ¢¤°»…²´¶„¬”¼Ä#®D¸£Ä¼ÆÈÊÂÊΖBÕ…@BD …" 15Ú°"ž… D<ç§éë†ãåó§Þ íïâé+ň?qäÌ Ä$Dׂw„ÜÁ“ÿ·ÐšCˆDð)¬HÈóbd˨‹È hàˆI;BZ„¥%—†N¦\i3‘H…bάÙóÐÏB:U=Ä¢D„¡¹T“S¨IyVaÈs" ‰D¨E "5ºU-„³—L"×i[ölZoU…4Ô-¡¸Kõò5d­ÚµBh9ð o^Å… ß­(ÄQ‹àí0"< á,wîK"k (mÚPh"£M jÄwªåÒ¶ Z4é¥1 A5îÕUƒ/þ:6e (^-A bA@¤Á„—ƹ=£±Z¬És÷^üR 8p¢¼iˆóŸ‹Â—O¿<ûðkmöt`~ 0`þ} M@ŒtŽ4ðˆš)›ƒø–à‘âh¡—•zq¥Uk,¿± e€‹•ç¥bHT´ù9JŒu£ £á´œJhžd€TÚ `ÜF†šù1Æÿ©Ö½bÚ»ðÆ[Z†…Ò» ½HÊ)ƶå’A/»<¶—©¤½†T®¹ÿ®ðž†ÈïÁ«££~-òiâ¾k;F™PLqˆ bœ±¬d*h£G†üÕÈ3¬E¾*WIJÌÎ’ÐÁ*ãKòVˆj¬ Ì(§j"[Dæ‘ÄhØB.°JpnW´?ŸV0Í„º€ÓƧ.Ö×Ä)[#ð«4Óls~`LMŽZˆíó?h§ítªL¯| Œ`Œ°ßÜ#Õm÷Qº½÷É©%_höਠaøá ^Í—£”*(㫳Áþ(9Œu^çÂæ?îtäzCl!‘!¢¾µÚ[ÜܺúÁ¯;›a oB@ÀÁ Dôíå’nd{A;=jC ¶ƒÍmÒê¡_*=nî 4|°n=1Âi»8™4Ît})@÷ù–4Wú5¤É˜ÀóÄÇ"÷àO{¶"ÏÎ6æòu §³ùÚ3¹a`g\•XÞÑ(Ä4 Qóùh+\¤AÍê—™üƳDú`XHåì^89`þÇ¿þ¼ðc÷’S‚!ù,)Æž‡ ###***444;;;DDDKKKTTT[[[dddlllsss{{{Mx¨Y‚®a‡±gгiŒ´mµp’·u”¸—´y–¹}š¼äWVégIèiLækTèlRìzNérSèp\ê}TéYånlètcäppå~|§‘~¼—võ…áˆ3ðŠ*ó’<ΊJÔŠFЊIÜ“PÛ˜[Ý€qÚ’{ߣjÜ¥sÜ©wîƒBå–Iç˜Lá•Qå›Uí‘]êœVò–EñœRñžYê‡fì˜mê–wêzð [ê£eæ«pï­rî±}ð¥dð§hð©l‚‚‚ˆˆˆž“‹’’’›››ˆ—¨‚ž¾„ ¿Ÿ§°¢ Ÿ¤¤¤«««¾²§³³³»»»‹¥Á”ªÄ™®Æœ±Çž²È£¶Ê§¹Ì®·À¬¼Î´ÂмÌÜÚ¬€Ø¯‰×°ŠÒ·žÏº¤Í¼¬Ë··Ê¼¼ä‚‚䋋튊å‘åžžî“’ê¨æ œî´ƒì¹Šì½“䢢跩山帷ò­­ó¶ªõ½ªñ¶µñ¹¸ìÁœêâæÂ¿ä̶é̵éϹêѽóÁ¬ñÀ¿÷ЪÅÅÅÉÅÀËËËÃÌ×ÃÎÚËÓÛÖËËÚÄÄÜËËÕÕÕ×רÕÙÞÚÕըרÜÜÜÀÐàÛÝàÞàâÚáèêÌÍçØÉèÔÃèÙÌçÝÔåÝÛèÜÓìÜÜôÅÄóÊÊòÒÒòÛÜø××ùÛÛùßàåàÛëæßõæØâââççèåèíëççèçèëëëïïðïó÷óáâòíìûåæýììóóóõ÷úýõöþþþÿ‡ H° Áƒ)P``€-‘èd ‹ RÌÈñb®‹Á<‰ô´«#ÁiѨÒ$Á.cÂŒÙq&ÍŒ6obÌ©ó Ïžrü)T Ñ¢¹0¥@ZDê“*A`XÑÊÊX(4žrÙš„&T.²e»ªÝÊU`K¹¶Ò8Y%jÓ`2LR))C… `$™Ñ`å“iÊÇY+®’1íßÃwúÿÿ8|aðäÓ .ØüÕËÙ/{öBIÓ— 4PN¾üzeÌ­çÝwéµW ±¹WÕV)È{|9¸|þb…D Aè§Ò}ý]_kHI8Xy 6˜b‰è%¨žNªÈwñQöId8A÷1‰Tçß©Éèâ‘(®X—’K"ù¢K1R%!þ™a¢M`¡VÚ#™ä˜ÂµH&‚N¢ù¤IQ²8#…×}_|aA_€bcP2¤qŠYfšš9è™j&ºfFm6i•×yç‡xñ§iaJi¨¢‚rª)¡…‚º(B 5%œ¦ÉI§“^ŠªvŸŠÿê&¢¡Ò«­³ŽÊ(“4Ajš•Xâg®¾*×­‡&ë)²µ*»¬£ºbTê]‚ùŠÙd›AÖ h‘Ì6û¬©›Škî¹áFÛ¯1Y{í~¡‰·Øšî½ÐŽK®¬ùê»—ºÒ²ë’»ôºši®Îvªð£‹ï¾“*°IüçÁý:œñÃ'Ì1µü<í¿kñÅöÆ”ËÊ'âºqÃwì/ÉGÌÔÄU|²ˆ)›”²‰/á,S¹ ¿ óÇºŽ¬Ó©õîlpÏÅ• 0q½¦›Ðºl´Ì1s]´ÈXc¤³ÓÆ’ØÑ[ÃÄÕв…Ý›ÛCÁwÈê*Ø›M“ f XÿmµÚFôÝtÓ<óÒrÇf7lx«·ñå¢ eQÓ2uÕm'~^á†wݹçˆÛ,•æïåý8¦—urywý,øÑ°Çîõà„×ñâC7Näé¨S¦:KVc´ò€lÎyí¶Ï.»ò[×Mú@c?žÝïnÏøñ×'Ïüö cŸû“YH!P 0`½@¸gMUôzOÒdÝkÿáȃ^¿ýÙƒÀRÐ…÷2Â>²¹orh Ýq³@Êïs_›_n À€¥(f;Ð͈:mDZÑ`þè÷=íI0‚¤] só(e È‚@ €‰Š&«O •v¢Ñuµ˱Ҫµ_;±€¸i{+ `¶Ýж8‹– ¹-W‰…: SZ€ *h=*eŒå›Mz9£³^i³,9¸YÛ°7‹ºa«p±GªÇzäc>} ±Û¯PW€ó¡o«\ðE‡a²ÁmžÉ‰yy [º~û¢]Û¸+¸ÐË&!Ö‡}Ú×?ÿ@;¥¦ÿkeCäV·‘ðECÚh‡äºm”XEÅ´žÏ ¾Óë¼\û¼Í{»:€ ô½Kºw‘˜c: õY‘ÐtcÚE©á¦•œš¿|Á`‹Á<©!è [J&ˆ‚¬GCŒ»BKOwŽj©:Ú _´t÷Fñ§|—Pº¬<ºá[¯÷ Ò»¿I±D\Ä 0…ID£`…W¸‡P¬…qø‘p8cCj·<ÅshÀ\¼–QüÅ`Æb<ÆXÔ‡.ˆ€$H'Ü·B<0“‰¨œGÅŠFEM·‰ÜAœ)ÁªĪËÃ=¬¿}ìÇmÜÁÂaŠP€ŠÿôI·Ëƪ[’%‰û‰•uË‹Œ¹ñÛyÝöt=JǯX=zW¿üÇÌÁ4kÁªgÄDŒÄÑŒ àKÀôoe£É“:7ö¶¬¼'‡àiEº<5gšÀsS¥œ¤¬Á|Ì·©È@L5T㟋ûª8{a¡ z>a–8wÈGÅ;érV˜6¬¼E›§Œ?|ºÌŒÎ¹‹»á‘ @ª†|´ü,hÓ‹öõ°ë¸mÇ{,G:!Œ‰’L'qà9K¢<ʃ Èé ‘S=»°{¶Ò<}õŒŽkKºnV›MxëÏFw“X]zÎÕ<ì´íÈÊ }O0´ÀàñÌ©&-<›ÿH‰SÓž¼£TƒtÊúÍ(·Ž'Wj$âœJ„%͸]ÊlÊJíÁP0 ¡¸\:ÓÊyy·œÒF1cYEÊ[GÇmwE(JʬƒÓë¼ÌX-È íÃI = @»=1Ï]Éáš¶_Z·íË‹¿(w»È‹!=“Ä\Õ•Öø‹ÌÇÌÔJ-½Í{Ö³æo¾•›Ìmð‡rúi·ÈW§Õ3Øšˆµ)ŒÒ½‰­Ø¦Ý ® ÐýØ¡-q·¨¦Àv´äˆQבX쑌¤q–š‡½Ô½ÃÁ=ÜÇÜ ¯K 'øº¾4ÕH½Ö9ÛiCÙO¹o9¡Uª;Ùp{ÌÖÐÿУ­ÖßmÁj € °«ÎÑã}™Ø,Ù»y“Š6ru÷À2†FBÔ×E’¿=Ö§lÚžÌá-Þ~ PñÃP¶¯m¿mÍšñ§w˜¸z=î[“UL «q²–cÍ@\ÚÆ-Ò>àÄ} `¸Ð3R=×üºà¡ðCÎÛQjòE|ôݾ–Û)—žáGuÆlâà}àêÛh­äÑ@R ZP¦øàá1Hœ:üŒÁt4¶rçˆ ™ÝZ‹Š˜ 89q×:êÙHîÝï]âX.çïm±¤úâ0NÕV¡æv m‡K‰Qšn·ò…·“¡Ÿ>ÿ¹œCNÓ!NÐ1¾ä ƒ˜àz·{kP~|NãÀpúZãb^Ùô}“+“£PÖè¯⿨œDkØ#Nâ)žäL.Þ péÖéÞ®ž3¬qr膻[LœW®ÇšáoÜÙõlpËéFçþæ'Þì³^ÜÁ¶N× ó¥.ñ¹8<ì'Fë–p&j]¼á6µÙ|ÔÝÑÅçèzŽëÑ.í°^ÔÞÞ°=žZ]–ÞæÁ¼FuYæZ|·!º›Œæï º ÈnST˜‡¢'-Ú é1ïyþÜï¨Ó€RW™ßùí»“MÙ¾îþ<æÆûX îæÕº(9籞äϼÌ>íÕ~§Åÿ_{Ë-¡–XAjj„û¼£"GÎ ÿÀöâƒd8nN¹òÏÞì-OÚFžµNï¾wŒÅÝQ7?ð.§®“YÝ3Žw'A|ȪυýîÉÝüòñ¾ö*Ïömÿô‘ à›º+í>[Q 3?¯h")Ù•l°Ÿþ½Éжšon”ìHMoàf繑\Z€‘° 0®{¼äz“—þ¾sª>iÉÙ-Lö×§:‘¦{:úë^µ™îôo÷κ¸jÜJÀ}îÜ}•¿ÆžÏØ®]Ü¿ÌÙ—CúÞ¡–ÿ¾áuתošm»h²÷SïìKÿ_ÚPXà_ì  > ÞøÖÎÎ>SÓ©!ÔˆZŽ™wwWĹ<.eÎÚ:lQlXY5x† $XÐàA„&dØÐàB‡B”Xq E‹1ft¸‘ãÅGÀ€1|4€‹ 0@壯—0c2–«ÓH‡Àhå"H«ÓÍa>vÂÔÉgП<‡åò¹“(&¨´ƒÊ”VU…9wö”J˫ס8‡yœ™µlC²gǪM˜V­Û²p%& äÆ\ d†)ÒRRA!Lxèaĉ/fÜØñcÈŒ¡B…\tèäË“1?µüSóçΔ=wŽLô0eÔ›K¯fÝÚõkرeÏfÿ|6 "Xp°@œZþ#°Ñ%Ûƒrg*·¨“0£Ïzi•ºÎN<…b*}v¨œ6?¿Š©–Nî#zÍUs+Óö6¥dŠI)r‚Ì_êçÈ?£ÿÿðS¯,ÈZHÀ HpàÁ. (  hI@³0¼H@¦Fºi«†œûj©Ã”²ûHÄD<ÌDãŒ2ïÖÊé°ù‚úÊ»¯¸«?-êQ¢# RH 7,k àXRè (Ÿxd˜)x E‚ŽÓpÈŽ8”îC,ÊeÌÊ‹J¡ÎL))Ÿ@ 4œä‚n¨ǼϹ±¨ÃK´Š”qK?ÿÜó,` ¨ ÿ¸ÔrP?ù,È9èôÌ(—¢Æ$ÊÄ«D¢îF6Û̫Ô4ËÎ'±º>†:K§0Ïr´­Fc•Pµ¦XàJµðÕ‰0´Š»V§³¾ô–:껦vên2\žz.Ô¢`–&ö,ÝÑ UÁd´H^¤•ÛYgZàP‚µHWív*›Jµè*¥(©…°«Ñ'›,û”ªh£u6Ïkýé+£¨uJÒtÃÝUá…Á-ë6@€ÎB¹u3Ü–#J³ËSL4mŠ ;æ Ô~SóPUcA˨|~ÔvøÛs¶9&)P ˺˜­Œó‹©¦ö`ÉLî®IÇkê´(ÿzQÔ‹ô¼Ñ«ïKfƒ ;ÈNWÕec³oŽé´‹€Dšiè·ÒæøÆV‡´jL¼GµÚÍ69IÊNÐ`”O*¶ŒÝÌߥ*›Ëf"Öøu™5ú0µ[Å*c‡kÜ™ÐÅ.PÔkÍB6?%ŽQz©ÀgN™i+ÊPw=*"Ç*Ÿ¥`‰[Ü> 7ºáÍA"±€' `€ÌRy^óvU"g”.9KBìÐètW1 Œzë/‰lg¹Ñ°Ž›^®ê½)д‚ À!€.8àz0„û vÉ¥Ÿyf6I§½²Ø4ä©ÔÕÀö+ÎDOT¹ñY}X›æ—!HR“œD² ÿä °Òw¦ûJx¨ÅÙvœe¦6ýÍ)é™ñd@–[®èLiZî–ÖH<v°j^3Z?R¨C%*!%á‚ø2 `â QF¼1¸º¯!3$ VΪ¸Rö"xCä`ž™ '°‰§üçK„ OB«ò²—aØy La CT§ZÕ«æL‹ÿ›–Æ1.rQcHSëÖ¸‰Õ»æu¯}˜™txÂkÀ òœ8à N6 Ÿ-éðž/Y¡uµOµ•9–PuP”Þw•SfþrŽr âZû,äg£¢¨ÔÜ¡Ž<=È]Ø Л=;7ÚêþsS–*ë5•h{ÿ¢êΤN„S9îÏM>Ú¤¶ùÇŸ8~›Ã[Þ&'JR¬4Ag¯»Ò"?Ÿ¢ÿ‹8àþMTÖQª•­f£1N:‰kÎV¦Ç?‘¶6Ýl–2¿aË‘.4 xÄ3¶kKLrŸ?—d^‹ÊS¨JÙM5E“©fÇ4%TF¶P|Q·TnéjöœççNú¾Ï”hîݨԷŠGÞïAeÐm"v¾"Îm^Šeðò¯ƒYÖ«*ޫǦúš\“‘*ýí?‡¶Û_òK;%­¬‹g|×I>¹®³,ðõ·“-lÁuÄÂKl·º?ŽÀDLÆzœ‰¢ò±Fñž9" Œ±3é­£‚¹úÀ²é++œÃh! °S`ÊŽðQGÿ²[Fî+;¤‰<ÉË¡íËÈ|³ÓGaª+"Ʊ.ù ¢C¬CŠt<ÈQ5¤Cš8>½ÚG\ì(”27b½AºÇdÇØ ‡ Ç1üÅvÌ¢˜´k §E†@½BDs$Òè1Zí“èZ¡ òÄYtG±K`$ʆ0ÊFÜD²”0©Â˜Ô­‹¸ÃG‰ª§È‰v¹-¸„«ìJ³AÃŒ[ü%^Šš««é;¿»,À£LJ³Ì·£SFµDÊT!ªÈ•A¢ é˜T½­ƒKœ4 ™„+jÒ?pJ ÖZ—_ÙŵTLÕ\Ì,i;­³ÇÄ´í‚ʶ°ô¸1H‰⫎÷X¤6””ÿÜ*ÔŒ®¹º–nÉMsÊ¡LMÖ´|MØLK欈•„%—ñ,GCˆl™·4AHêM‘¢¤Ák5¥¸»µbýƒKÅ \Ëô”Îæ,ˆçF-IŒD“ÉÀ ¦ GÎê±ít™÷ÔřӤ™Ojù Á“¾«BˆîlB£° K\αlPøŒÏ˜Oû¼OaªÏêk½šÂQ3cÐ LN„èÌàd“`#©zOZª4—)ü¼è„Ï|ŠPò2:ĬÐÕ”Ðþà„‹ ôˆÿ䬅KÝLÓ°‰—*žÀ+í˜JélCÌJ•ÐV"ªØ¼È2R ´PÆÜQèäP^Ä }™ÿAAy!Í#mRÙd=»òº,KD×™Òì¤O"jRÂõDM‚¹ *7 S1•O×ÔÓÇ,ËÔóÐëQÛjÊDÒÍw¡|–&J FbѧÀQ!ÊJäTíj¾.•PI=Õ™¨˜p&«Á1­Ñ2mÏ'Ôòz ÍÐÏÏ’"‹¾<´Õ˸ú•>¼1Oý¹‘Ú®^…Ÿ9bÊËLNôû«™±TUý-X€ø¥›‚c4 %@2ÍÐÝUEÕ1_²Î;I0øùU¦$ÁVr´« ƒ­:REvÕÃdˆi£?Ç¢ÀgzÏYÅ-p€mí ÈÓÖlÌLLMH…´3e‹ÙÔ9ÿgäMsÕŸ,UŠMs„‘º,13·‹®L5§íP¿Ù "/Ò2Ë\8X”P y ׈ýÈšåWT¼±u™L¹üR®sÖiá×ÌÔü°Êc•;94ÂtŒŸ9!E¼UäÓA¬&ì V匉— ¿ŒR3µ_ûZ°UŒZÃ5_[[; Òˆ ³e Z{CW[[#E!œ¶ÛÓ[VcͬáˆâˆU›½Ù±{Xs1Í§ÜØ%Ñ“…¥zZ}lÌYgaO^$ÎN¢\r À¬ :†½ÖØ[ ¡ \3ÜE]1‘WäÈ¢¥ÐÅ劰¬ÀxyIcõ²]¹þ! Í¢ÿ¤PiD]gœÝZ}¤³P'ýW[]ÐÑ’*ÁÓ¥UF…̬¢éÝ-MR¨¥]uÚlS^99nœ#ÒIúàÒ-3âÒúÉ™hP×ÕÕO™ÎŤÙA•^/½ZÇÔßK•0Ü ¬`ÜHAœÎýIòÅL˜Â_n|!§ÜMª”^1µßvàÙÓÐûM]j1Ï»(š1k ÁáÙo⥶€!Í`æ\0Eá!%–§ÍÜCÅà=]æ_Cåa¼ÿùºKí¦çèÔ9<áúC¼œˆ4Ý«RiYÐq®‘a65YµP&ÌÀÝaúÝß.¾Ôêø_Ì`i©Š Ö\ÿJ`œ}ŽZÈ.¦^0ΉÍ. –ÃeÍ,ÞÞÞà=æã‰sëV#’#ðÍêÚ#zyP:2ß6ÄO¹ë`laߨ vß ¬a¾àDÍä;öâ/ÎÁ¶ÊOíd£›.ÜåÇ•"#ò\ª©°Å#ô2H–]eJnVBÂL<nN€.j-Ö`?žÐ§êè¥CHú H^½,@6¸]n ±ØÏˆXë4Þ²ðkŠ·£.’³þ\¤^kžä²Þ¯Ã½–5£³ãÇëÜ_¼›nìúEë´æàé^lnŒK»–âæ»RÄdí4C»±È+þgÎÖcÑæäÂ>×ÙvFÒ –ÿm’—ÀfíYqmÅÖdÄNlq®mÛçÐÝÇŽcÌ“Éæê(ÞA»AǤ&îq¥í×Þnî>îëF±ŽZòå\k•¾>^€ÌÈsk!ìï†íâfläfÝ-þl²tïQN ¿NA>\4µ˜Vñž±åë“Tî@9ììgÍöîînXf¬e££%ZÌŰ€pû6p?ApYÕîá^ðåž^á¦ïßvWô!PòÔøÆ¯ïÎíŸopqSÿ#W+OpähqÎpñ÷–PëNî špöŽ= / qa¶V†ùª/ãñ np!ò¿nüöð¾ÖL±ÝñðìÿØ&ˆl=Ø ±‹^Ïr¿r,Gi#ï$wò£ÙWÒéFõ¶ÝkÙÖðŠ(؃m2`x27‡q:÷rô:×ò-Ÿs³‰çA–sÇǃ5<ó?D]qFÏòH—tù†ôL?õQhÕÞLô Ÿ”M¿3R†ÁðZ¼½u\Ïu]ßu^/[´Íµ_[½=Xec¶DòG'õdWöP_ôf7Jgi Žpfï냭·{«òöR¿vsWõo×£V±?ÄMõòÆsGÿh-ñ¸¸ávgwr_öQGuQ¿÷F¿T¯~ëÀ–äq7u¢ôqµÞwÏwƒ÷×rlöörÇ÷ÿm(ž÷€Wxk·x8ÿÙž­xŒ§woõpWô‡‡xhGø„u}^øƒ/ùˆy•×w“y–Ÿyš_ö†y‘·÷‘vyL?y’¯y‡z¡ù@}QÎÎQ¶ãù‹ÿy÷y§—y Çyõù§wvü xqŸøy×ú÷ø•z¢ßy+_úªû°‡ú¦Gû¡ïù²§ú–ûŒïxއy«g{µ—úv_{²x‰?ú€Îû³¿ûÀ7{»'ü\é{¥÷ú¯O{Ã{ºo|Å|ÃF|¸Ÿ{¦×{Ç—|Æwûºßû·ïv¼¯wÌÏü¶ß|Î?}ÓOýÐÿøÊ·|Á/|Èçú‚}Ïï|ÒçûÄüÿË_ý8¯}ÔWýÁÿýÑwýϧxÙÏyà‡ýäWþá¿ìÖ×QÐþå¿}Ú§~È'þØÿ{ѬG~Þ—{ì~éŸ~Ý/}ò é~dÿ~Í?ÿã÷þñgÿö—±~æ§ÿê·~ñ¿ü·ýòˆa$Ø© „ \èð!D‡P"R,ذ"Æ‹#jÜø°£G‡ C&IÒâIˆ&S \ÉÒåK– aÊô8±&Cœ%u¢ä9æI !…z$ZÔçO¤-•.Uj§ƒ ¤$¼‰ôiF¦X)nåªõ+Ø«aÅ:eº0)S´T볫J·<á~”«“®H»8ñÎ4«“L&­¾5ËÿWááze&ι8fÙÇ)SÔ Ám#s.ÜÙ3ÙТçJž\Ú'¦HÃr  5ì”ر;Ñ®mû6îܺwóîíû7ðà‡/nü8òäÊ—3oŽÜoB-ª‡I˜ôé¡Ùµ¾kxûFÊ=GC¥@6“÷Þ}ï÷÷5ÅŸÕ~Eú§4x‹=hí͇_~rŸ€Œ!`y]çž| F(a‚MhÚ…VØ BÂg`\b]$æ%"Iú £âIhb_(r·áˆ0"fã2rè"…4¦ˆ£b>Î(äQ:†$N˜ÈÖ=¡)ÁÄ7…Ä]R&`À&¥€Â´$Op-:‰£ 0€1€N04ˆ|€T‡‰~*Tld3gDäøM¨†à’b„ @ОyÕ´&… ØÈ4SjÉ䢘 …K˶™ dÂpªSžV„máVgS×há¨i[€ÿl äR ëK‚Ö±Ó ÐLTa:0¶Ã5ÑB"1T0µ†@Ë0pDp5$ @¾ú5%À¦6Øa–$ŠF¾)$nyó¾™Å$@¢™JHŠ:IHn4­Ã.7òYL ³#-íi7’Zp@\›Ø?n›"¼›iaÛaà6$ÀPÏ@ iCèW!×]ÏÀÍ·¢¤, OB‹‡˜ŽWO"Ò.Db¤ŸMSÒ€á‘M •ìkzCÒ…a­5 €b . ë¬I£-)€'0 ·$ùƒ+ÉjWŸØžu­oæ#ÚµÕ¹ø]ð2­hÓ®1u" o‚7áü¾xÿ­È}íšCB[x!apZ\ÛÙŽH.pbHxæîö·!¢€;à‘@¬@_{K› ûŽ5™Ç;Œrü€Àˆ ž=‰'Pü zKOò.,HœX¯9¦þóðDÜ#] þ0ÞAüåB*Ó©ÞTÍB¡âTéĉ»…DƒX õ!jYžÂ\æñ!0 ú„ÖáÜOÉEÅeÙWëù|®™BÔ;uû}!X¯øOˆNõ ’½ìf?;ÚÓ®öµ³½ín;Üã.÷¹Ó½îv¿;Þó®÷½ó½ï~ÿ;à/øÁ¾ðnï"ƒ¾ñ޼ ¤ÀL(`ºÿ¿<æ3ÏÉO§ò­ƒkÿø€6g¡å @£yæÓOa…A}k§Nzã™ÂxÐãšÿ=ð(ù6€¶u€qV OH@Š€\ ÿ`¦äpÜJ"ßÊ/î²oy™ ¸PÜ$3øî?%Ì6_¤ÿ-ëàeÀY(½ &ˆŸH[,3 Àý•Í?!¥ßqEB@Vmü] Ö çQPY ~Ù–˜U0Tû NEûI^q¡ç!€Àl*¡ ^Fqå[î 2Å~ Hy•HT…QÑŒÿàzÐ;à0h& €bVG¡ 6]Æ0X0L“úM^~!òÄzÞ2ÑU¡i]úa” ó=‚äõLM^Uð()PÅôÖõiAqMG"!JÜpÑ]ÑOMÊ D¸\ƒ€Œ]z0ÐAÁétÁ! ÄÉñÞŠtb!Ž")BŠä©X)¦¢*:$€ï­",Æ¢,Î"-Ö¢-Þ".æ¢.î"/ö¢/þ"0£0#1£1#2&£2.#36£3>#4F£4N#5V£5^#6f£6n#7v£7~#8†£8Ž#9–£9ž#:¦£:æ8‡;¾#<Æ£<Îÿ#=Ö£=Þ£=.@?ö£?þ#@¤@$A¤A$B&¤B.$C6¤C>$DF¤DN$EVäC²ÈËX¤Fn$Gv¤G~$H†¤HŽdHbdHì#I¦¤J®$K¶¤K¾$L¤IÚDLÖ¤MÞ$Næ¤N®$QDfY™ì¤P%Q¥Qê$Q@$ÐSÝØdQ¢™“SšÇQV¥U^%Vf%C&e„IJñÒ @ÐBðŸ°h_.fÐXUh%\Æ¥\Î%RæYYz_.x%uñ’R-@X= -Lž<ÁB­ˆT ]&¦b.&cjdR.%S6ØWš–k@Ð_¥ÇkµÿãÈFc†¦hŽ&iú#W„^†ef¡j - ÙEõG.äBÈJ–&næ¦nZeR2@ÀuÁ@Sð¥k<¬[¼1À>­eübî¦tN'uÆ$QÔ\ÅÙ8À#ÜÍ\D-]”-žØ…Ü[V'z¦§zv¤IæZEÜæzƧ|Î'B^ijE~&0ø |Ò§þ'}6&œ ˜ ô'€&¨‚NgCÌ`8™6‚.(…Vhh*^?ÕË„Z(‡v(\ èø9ÙDhyl¨‡ž(ŠeC× zà§œOà¸Lß Êh°øÅLÂ Ž†&ôh¢¢É4HŽNL~ ©ìÿ(‡ ©Ê”‡’jÔtBøý_”œ„®€•^)–f©–n)—v©—~)˜†©˜Ž)™–©™ž)š¦©š®)›¶©›¾išv‚`R‹º(¤@œæ©žî)Ÿö©Ÿþ) ª *mt-pA$j˜×ª£>*¤Fª¤N*¥V*˜ ¨ˆŠ(‰.‹¥vª§~*¨†ª¨BêŠÖ) ’™Bð‡ùŒ*«¶ª«¾*¬ŠjCüÛÈ©H{=„r…Aðj©šïái¬+±«±k™6¨Iá ÌÒT6˜füX&Ö0ßé@§BH[¶NÙŒÿѱŽ+²&@S¡ÙÙ+¿ö«¿þkž60À â«0W»jè]TAWÐî3)u˜‘ã,Æf¬Æn,–j&tË-lV@'@UM$&Ì ½Áp¬ÍÞ,Îk'œÜ/ÝÕ]ÅBç¤E´Vâ”t‚hòIÅÒ¬yä,ÕV­Õvj'@¶¨vl5ZeA%FEEâ"=)O!l¤\-Û¶­ÛöéA-lÔl®eš-FëÛî-ßöí˜6(¢Mø­á.â®@Ct|˜ún£&®äN®Õ–*×òŠÞR®ænÿ.Æ6-hè‚.ÍIær®éž.¸6Ä#D(fKé¢.ìÆ®«„¶h<ë²ÌI“ê.ï&iï éï2©îö!ztì½hðBÇîú®óïó oô2/æØHæn€ön/÷v¯÷~/ø†¯øŽ/ù–¯ùž/ú¦¯ú®/û¶/ø6/ôÆ/“*»>ረûæ¯þî/ÿö¯ÿþ/w/üJ¯ü2/2iØ6œ„07°?0Gð 0ó./ŽvûÙ àèBYÞJ0‡°0S0’ðŽ>Âq¡`P©H@§›Í© IAgu ç°ï0›¯ iÊŠÜiD¬ÿÔ@(V"DSFºô0G±‹ðÛ¨Ž1FñkÕj` „Ü4ÙO1—±ëoéŒâˆ'–ê8`mq")œ±ß1‡oñ#JVHEò=ÙÀ}flä1#7òï1ß¼ ŽÄ›ÙXQY Dˆ­˜Ô/Á82(‡2C2àì c NÕ%a¢Ð…QŸ(ײ-K0)û)É~žX ÑÂC9y”PŒnß22'³ÿæòá43álŒ2G³4³/3?³ߨ†N³6oóøVóÜDrÜ@3739O°Ÿ².s8—3;K³7ÿÎ5_ñ:·3=ßò;Žé<×3?ƒò=Ë :;s0AWðôžpA#´A£p@“né<4DG´DO4EW´E_4F[´ ŒÏûdO‰’®Hô•Œ´„ê£I‡4IçîJÏÏI·ôGKJÃ4ýÄ4÷¤tIÓ4ïè´ùÌôKÿ´JuN 5KµK5u°ù…R÷‡4u=õœ@uIµU¯#VgµV—cmPAèÐ+>DWG“IÞ²D¡æ…5I¥TdØ]¨©õí…\ÃYYÃ5NØ‘¨-Xë_#l^Ÿ5¡jƒ­µOtªö¯½5’‰’! „*ERHHö!uÿ‚¨Å¦2EXe+pHSûýÄf/’N “:‘Yh§v:)ÛŠœvgcD­-Wµ6NÔv{™6góD”nãÄo„l—›avA 7 ÔtyåÝMCyG9÷Ô OøPt/kM`w„UuëD|ùÌ@””xÕ@€wc+-€†™wM°wUi˜zû|ãÄ}D}{–t˜S^-eÚfÝpE x¤ŒŸóùDQ D³µ¶¡‹‚'/N8—ƒO‡Ë„…Ì„óÄ#lp =¸N|øô%xåQøæƈ‰xMˆBIø‰“fhW•—€ÿÅš|ánB ×@D‚Þ`0cÿDƒãÍŽóD‘/\[ž$5€[ÄU,N̹? ¹Œ©“@ù‘O¹–ÿø’cùC\Ò¬€E¹ÔQ`¯Y¹ŸÛL+Y1Yí‘Ù™•ëÜù@Hk ’oÛÝZ £æŸïyMHLå¹~Oš¡‡š†“¤£Gº§—ŸCúK¼žº¾nºt:™e: o0<Ù‡„›º ›`­ÙšaW¬Ã,µfX2øŸçÔ¬Ã6NÈVN5ÀèúýB™¼ÅÚûz²Õ:"%;½á:±»p{º¤®ÿº³ëù\ûw{±ï:O¼x¶7;jð’´‡û±Ÿ“rÿÀÎåÃ5ÐÈÅP^B¢BÉÄÍAb‰9E윾Û{ø|ÒÚÒ wÔqAÁÒ½#|Å)ü¾÷»Nì\/¼ÊM¼Y¼yH¼oßÅ7|Çk<¿|)E…ÇQ×mµÊ¯<Ë·¼Ë¿<ÌǼÌÏ<Í×¼Í^Œº])1ºÀPù,¤5N<Á¶ß¼0ZF㢠ڞ“—D ò2 ûùšL€'#ý0Jl að&Ñ0)€ýòA8m 9î ªbÂÏÉò2M‡ØVª+Ñt,Tä[Ì™‡@U,”H¡%©@®Öób¼‰qS¢_å&bbÙÿ–,cIþ@$Òø5Ÿ‡• Ð!ˆ­”•iYPuóE‚äÁÏqýÓ Òß&]Öc!zã÷"ã2^z#òkœå;¹M%]>j&! ð…#S‹JA¼&,“ W’q랃øÝ«ÿm¡þ ƒþ=Aøùûî«âãÄÄÆä%çðc~ûßåÃÙgS";?A Ópâef‹ă †&€à°h0PaA†A @`9vôødH‘#I–4yeJ•+Y¶tùfL™& È2Œ ]8¦¥gN)à ¶QŠ Œœ`(¨˜<á¸0ÐĹ(†é¦€u) å@€¤5sHX@@®\äj%ÒYgöõûp`Áƒ 6²ËEŒ + ¦ÚN0ŠT©B æª\s0ªV b-H`À°èähe  ²O·¥Ü¾H¶²‚ʹ7~yråËwjÀ A§‚À@—ŽÓ.V·oœ2e­8ærÀÀñ\Oìò„ø°)O¼7ˆÎÛzÁ. €—³ ," ðhqÀ>L˜[A“!ù,C)‹‡ """***555;;;DDDJJJTTT[[[dddlllsss{{{Mx¨Y‚®a‡±gгiŒ´mµp’·u”¸—´y–¹}š¼îs=ï~7ÞmlÝrqäWVå^VégIèhJæcVåd\åjSçl_èkSìxFìzNèqSèp\ê}Ué|Xâa`ålgåmlæqbètcäsræxuä}{§‘~¼—võ…áˆ3õ‰&ð‹+ó4ó’;ΊJÔŠFЊIÜ“PÛ˜[Ý€qÙ€Ú’{ߣjÜ¥sÜ©wîƒBë‚WíŽXå–Iç˜Lí“Dî›Ná•Qå›Uí”]ìœSïšYò”Cò™KñœQðžYê‡fì•hì˜mê–wêzí£^ð [æ£iê£eë¤ï¬rî¯xî±}ð¥dð¦hð¨k‚‚‚ˆˆˆž“‹’’’›››ˆ—¨‚ž¾„ ¿Ÿ§°¢ Ÿ¤¤¤ªªª¾²§³³³»»»‹¥Á”ªÄ™®Æœ±Çž²È£¶Ê§¹Ì®·À¬¼Î´ÂмÆÑ¼ÌÜÚ¬€Ø¯‰Þ¬›×°ŠÒ·žÞµŸÏº¤Í¼¬Ë··Ê¼¼ÛºªÞµµÝ¾¾ä䊉튊å‘åä¬ƒê¨æ œè­žå¹íµƒí·ˆí¸‡ì¸Šì½“쾘墢䪪ꡠ綨跩山帷サô¹¯ñ¿µð¾½ØÉºìÁœêâæÂ¿éÌ´éιéѼ÷Ç¡ðÁ¾÷ЪöÓ²óÖ»ûÕ°ü򼮮ÆÈÅÁËËËÃÌ×ÃÎÚËÓÛÔÌÌÛÃÄÜÉÆÐÏÐÕÐÌÕÕÕ×רÕÙÞÚÔӨרܨÔÜÜÜÀÐàÛÝàÞàâÚáèäÄÅãËËéÌÌåÏÐçØÉèÔÃëÚËåÓÔæÝÔåÜÚêÝÒîßßðÇÄñÈÇôÌËñÏÐóÐÊòØÀòÚÈòÕÕø×׿àÛíáÖóæØýèÔâââççèåèíìãâèçèëèåëëëïïðïó÷òââòëìùíàýíîðïðþõëóóóõ÷úÿúöþþþÿ÷ H° AƒË*\¸ðÝÂ|Ì"2‹Çð Cƒøà L—®âÁ„C~Ir È’"O¢ ©r%Ö.ÂŒ9’æK›gÚÄÇ_ºž@ñ=ÄìÝ:_ƒž½Cš4¨ÓŸNß]Ü÷î'J8bŹÕfW¯Ye†­96gY³c¿–ôÉ1®¶pÓõɈc  yàdØ›¡Wܸoÿ.[v‘ãJµ1>KPñbÆZ!G–¼ÏqIË7˲åø¯ž ¾8öÊP!ƒž^€4Àiö·m縄ÙN%‰™6åÚ,)W¾Í»7dÜdÃnvÛ:Ý]<¿ŽåÉ@ACÛÏ¡‹¿Žû^ºÙ¶}3^‘{wíg½gÿþ]V<ÁáÓÛ:ƒ#!B o48縀¸­¹ ŒE¤QøG6ìy½*ÇÛâ‰/ ‚#VlK%"1ŽrÄbØK 5yBBvÒŒ…Lb=ÂÄ^E1é(ÇÔÞ˜+fŽ”ˆÅøØG/fÐ}_ã(qy;^’ÍwƒÕÒ†…1(„q¬4êxÇ‚˜¯–›ÜP/wéI$Š2Œé›\I‹´]¡ _h‚baŠÀ`V„ÅÔ”Dđш¾Ä¦ ©YÍ\‚’oiêW5¨Vÿ#|¡5¨9kbHå€ÏT¡éyO{^3ºdh×ä)’Rrk†­pKD ‚-”¢ŠÁ0(UŠ•`Íbƒlè-ãùÎyJ4ˆ/u&"×µ‰/È"‡`A’@5RDÅXYP½·EvFÔ¥HMêC[ªT–.Õf3½¨Ú¨Ñ„œàNÔÂO‡ºG‘ž¯¨ Ué4›êÔ˜rò“…¨£Ê,m˜á WØAV ‰WHA1p1’–°š'¥eYá™Í•ÖÓ°‡«!µ™Ï~a£ q­&"QƒˆO`;Þ@‹…µ1YhAÜ SŠ>5¥iuè`É ÍðmÓo؈ÂÊÐÿl€WÀÂná’^ò¯*%íyâ’ZÄŠU±§%laM[\Ô³r‹˜Ú¬ ƒ*´B°†6”!•¶dò¬pãÉÄJ«ÖÕ²v±ÈMîy¥ùK4VN;s…'vpŽ`C¶x¥OóYy­u*‚õ¯5—Ë\3õ¨>nL,ú°ÎÄ‚=((4aŽp céXF1ô¨`Œ7ÀSmbÓk`Ô6·À­Åçø8RY“Å_àA¼k¸c0¾5ï¡2Þ‹½$qyuLdòº„Á’j“ê†pŽ“#±ø¦œ0 v\Ø·³ÁäÏTR1ŠÉR*–„ˉ‡,d2ÙÌg>ð˜ÌV>%(ÿnðŽàÏ/`ÊJƒ%Àá Q ÷4Ú¯_á%K¸ð5n)óšMìãw˜Ñ2xë7>˜¦P°táÄOpD‘Æ2ðáI„ô'³ GT!Ÿˆ”-<1tÖ8œfH³ŵ6ë¤%}k6?w]òIGMå?\Np阤¨ß!Gã$dõã‹m8?–Äp¡û ÚP¹ÄºFˆ-y-î3¾ØpÆ o€?ÌÐÓéu(³ H CÑÆ°~2\BÃäOßÙÆ·QîÄ9zÑ78¹ÞÞssk¦Ñ…~ð&|á wNíØ oŒâ’±^5†3¬oŸ8$!üÿ†Š¬Qúí\+·Ì¶.··ÁMs¶ùLÇxÑr°ƒôÀpÉÆ$iAŽzä;ÐF aöÁ–ÝüÖ»Ó†·»V#«¹æ VoÖ­Ž$óiIqÂúIµŒÃU‰A´¼‘ëŒÜ!]Öbü¦.àƒs=áu7.Á_Þk¨þúau‹+°ÀIP¯T¹âûË‘k[ä:³Öºä[îòõ"ï!Ž9Óo.©šÞT°P ®H ýZG?iÿ.FF­°Rþò–‡ýÖa®ùÆ\ðöÔÖßw?@B4 »ÐEJ0„F0Â.è¤ÁY P鄾†qOýê[ÿúØÏ~öõîá¿÷Ë­OŒÿ VðŠt„b.xA hùåØ ³t{C Ïr¬OÞþ÷§=ß÷{ª«x|NYP§p 5`' K ßà|ÏÇ_2u³$¯wwýi¸ÆØwîå7» vT $0+ f  «à€8ÆUÛ–m Q¬÷»¶˜•×2‡fáuÜòuD @¢€ ÜÐW~…P)ƒh›‡Ek9hƒˆy-Su8{7¸`œÇ,q ™€W”0I¨ Lˆ@Nª–GЦh;¶§<Èp8¸…:¸ƒy؃‡ä}8ÓÖ@P´`=ø|!÷CªÖ AByÿ”2Ó\²·‡xH‰胓h…Yø+F>ž€R`‰p Uñ€Ó'4­fhNÇc%41Ñö>T…ø7‹´¨‡šÈ‡ÜçÂÑPá¾ö@1¿kAa µ  æ@í'}£V@%dr¸cÓ§Ò˜‰µ(‹ÙˆtX‡ºX{k×uï‡ð§ð¥HÝåv$µˆS2j&p5x?ØxªwuÝÈ…Úh‹·øX¸‰}Ö…ñG1ñGr$EhÖcar µv£„Iܘý˜w¹Ø…úÈ”‘ :¡ÔñWíH\£¥Š'c#‡4Q‰™y “I“ݘt ÿÑ‘!¹=‘hiGRlAR2'\ç!Ÿ…2ùCwÝØt;–P~¤…‰üx‰µj•É0ì…’›á|HkU‚” &F\´y÷ø”V“Ûh“W8Dmñ|B)ä˜vóƒ@Lç‚Ôæq·F¹yב3S–ôh‡˜H•àˆ‘wèÈ%rZ 4×/8rp‰@®¶t}ÅaЦ’W£ŠÖF…%že˜‡ •ᆖ‡‹×Œ"÷•œu@•Á í¨•œ…™ k¤„tjÒ~„2‰š¥‰‹ÁI˜–(š+±j˜Y™ÅÀ º Í —¦a³‚)‰ qSa4]×_À9“¦‰…Lÿ3n8œTqŠ‡Øœw°°¼ ›“Yƒ“¡›™ŠÛM žm¹‘¹ûÉŸ«™5Õ˜t$Õœv°О͙†9°†›ñ ªÉPžÞˆ˜‰i¡Si‘Di—I#Ó—ž¼p  ûàWfT9™oðã.šIšú™ŸúŸ1)“3 £‹ …ry¯9™D¢%ª š—&Á†ð£šKÔ—ŠY˜  MZ£8ʤ6JQSø5ü&Š %j¢“‰™ôGm‘'žø)£RéŸfÊ–dÊT®§IûÕ.˜¥[¤' —w¢z¤aR–:¥ez¦Æ¹§|sßÙzç”B3}™ËÀ ëÿ§rŸy§\¥§NJ£k‰¦˜ú§€:ž‚R¥}kñÓ„Œª¥ŽÚž^Ù™ ¦õ·©cJœbÚªZ©ÿ)ZÁE˘žÅШ j¢¡ üu«#?H*«®ºýy¬™ª©Å¨ÛÓ¡Q@^Æ Ï7¢jË`0º m@º°aËØŽ,:¡”š–j¹¡~ª¬š8¨¢$ªÚžº0&:v  ²)?ñçá›éº®–z©OJ°°i:š×ö‚‰Jê)lÀì t€a?©¨QgŸa¶ŽÜv®v—¬«®‹ÚW²ÔŽo:™ÔÚs0¼`¯¼ð‚)}(ÿ ¯8k²:»³<Û³>K?ÃY¬6ãU'ŠrØœº`w°?t0±î¹Ž Ú¯JŸ#+´ÄjµËš°¯z£ ëNÎZ´¹ˆ>Ꜳ™w0 Ðù­‹ˆa×V’ð3L9¬+² ²U»¤Rªµ»hlH«Ñ·­Ùxpù#Jø*›Æ¬`J  I/)²=©·W‹·£é®}еKuRª:–ðH’ûviè€dËŽŠ‡rk;‡Oˆl‰’”û´­k¬±ë9ZSƒ”j‡‚ÖŽL8…¡•ûÕ¦ûF¤ô„Im¹k·ÈÊ®5Ê©ó¢5“:p”ûšÉY1¶ë»¼Ó&‰b–®Aƒ¤¯ »Ìÿ*»Ê»·³ HšLiš—Y1B)¡àº_ðxºìô¸û¸¦á ¨Qz¹ãK¾s‹¼|ˈ~[¬‡˜§ÂŠ~E oÛ]󣺒ZÏÈGߣÆË¿ý›¼±JF^KŽš?D§‰ú€P;ñ*c Û;ƒ/š¿£©Â[[¡ lÁl“Í'!ê[CÚvt¹œ/º¿é¸¬;ÐÁ\[¾YûÂÇk¹ƒÔW<:›nÊ„–th¡ë•;欙ɣ LÁF|¼L·u»ÅþÛÅDì¸^Õ|‘ø€O¼cÒj—‘HK™©±âûÅû{·\¹à{¿&#¥Ž5Ü¥‡úo‘é|n7jðËNUü„ ÃYŒÅ^ÿŒÈ‰<²H|dÄmÙUÏ×iLƒjè£Dr…‰¡—´ª“kÇ£ÌÂo Ǩlʧœº€Y>Ôty—lÛ°4«É ­Ô‹Ãe:Ê“<‘Ê‹ÌÈa¬ÅÁÇ\µ *·Ã`ž‡ ¨}E³Ë¹aÔ9ŪVm, ‡œGÅ[Ì1 Æs¼ÊÞœÊ\\ÙtÔ«Œˆ³™L³Õl‘•ãC¼Œm@¼Žã|ÌÂÎø+Ä¥¬Ê.ªèìÊظ@Íl[Ëú|ñ\hËr ,ci¿]ÄûœÑÃLÌþÌÅÆÜ}í§Ì¡¥»"Í›8镚œtØÁº…,4÷hÑ­¿ß<Ó4ÿÍÏXlÎÇÀãH—VѦÏ8K¬ ©u:B¿ì_T y™¾¤ ¥1íºø œl3‘œÐŒK™L7Í(KÂÑVm‘¸ \mŠgYhVœIl±ÆØÕ-ü±ýÖÍ0ëm/㊀ È·JÃJ7¤#×QH³‘øL}Â>œª¨×P «O½¼u äÚÁJ‰‘†‘¨<Ò^µ»oÉoBóÀ'í•(ÏÒ±,SÌ\Ó}Ór¼Ø­Ú¦8¶0ÈK“aÉkªVÍ” hÔì™´\Ésºˆ’èטr*ªØ¬Úш Îu·¾êðاc×›Lr1Ãi¢ªç~M¸ÉþúÔ ÿ÷ŠøœÜ«}ÜýLÞå-Þp=iUíBŒ©lŠ>*ŸÿªÐEÝYféÏïÒ•›¾l-Î˭ȧmÞ¨-V9==]ÀçÙYìëÕk‡—¸* ù$$ €ÆßÆÞ ÌŽá>àøÝq#mjHÝ©H?¾õÇ=Ç ÙŠ×¼jwzáýÐ1ŽÜΓW¡˜ædAÝ4?1rGÉŠù±_|…c$žm4ͬƄêàj` 7ÙŠ_*pE~æÆ]Î<(è]ƒÙ}ÅÿË¢‘»œ\í• º.¬m‡Ï™ÝÌ+¼äã]ãuKè©IЇnŠÆ ˜‰²‹^ÙÿßÎU“~¤k‡M§æèšá6íäÿMëžž›i.Ò q˸íji¤¥X Ó,¸¸úok.^WŒŠ†¾ìþ}ëÈëGLž4ªÇ9Æ´™aºªö|í€×™üΗy éŒóêÎþÏNí2ÝäNN½‘ÝÁK|1ipr¨“_)ä`ÞÐMŒé% Àí âÛ¼‰hOõ ßó$è(±ÔWƒQ(%‰Æ–<‡BŽr$çÒ¼9ñgœÖ%ì_GÎö³~Þ#ò‰oÄrßä×YÐL'”"‡“Ï8™“Ù¼±œoSw…ÿì ¿á?ëì®Z¿e\ŸÖ^ÿÕÒÚ¹½ ê@öH9\ø|[ØY“ö¿øn¯ø¾ßû?_4zòTÞòGBE-Ïý6™‰Ñ¢ôÓX’Û|ÏÝ ú¼?÷ /úpoÕ^ÿöŸÂß·^ö†ƒâ%×Þ1¿¾©ôÒÈ„¼Nš9oõ¡ßû~ý ?ú¨õ þâlü¹¸ž ËŠ-KG0Ý>|éÒáK¸pŸÂ}ï–|§á>Œ1.ÓØÑãGCŽ$™‘cI”O¦d¹oeË”/a’”9ScM› qæì¸ócE|ñM<ˆ¨H ß=,¨°ØÀt'.8Ð%Ñe@"ŒúpâÓeA%N$¨’'ͳhÓê\˶íGŸiãœ{¶nλFr-«7¨ËŽJ1¦K1hSª`]Bͺp«àwO%.\¬¨É·f3÷Ü|³3æÏH?çEIz¦é–¤2T¨ð¾Š—kºNÿHô¯Q²„Ád qõêÅN-G¶ {âmÀ¡Q§|tsç—‡œ³¹é±S™¶¾]3ûq„ï^®*Ù<ÁâzN%ܸjÕŒ„‘W/I¿þuüùŸ¿µ¯vÊï–ŠH<Î4âM2‚ r¼O¢À¤Zï© ‹‘(™¿šO¿ÿ¤ãÐCå2ëo¤ÝBé7‹¨ÓH"ó’ùj!à ì2Ñ2ªí5Ý´ª½¯d*.è~Ô¬C‰´+ÈGz¬+#ËÅ…Šª¡e𥡠!ó(,°‹n3!‡,òL4ET3IþXZR@ MHǯ,7¢f$ Æ¡ÎãrN-3z0N#×,´­ÿ2 <Ô¦D= 1%÷"t±.\Ï!-£¬è5²¾²°*áp´ê¾Íbk´EåBòQDWMÕ£ØT1¾Jk «¶Nr­½vë³×NûBkдZ# Î4ÛdõUž„<µF2a‚m< ¬ÔÓóÆ*(OÝÎÓr¡öX4FêŒ%¦ñ±ŒÍV—M¶]x™Å‹Ãm{µ¬[ÞtŒJ ƒ¾•¬"Á« ÌuK*6&m²’ 1••—QWß…˜Ýµž}‰_€‹IH2ØU°¬ÊžâÁ¥ÔUpÔ‘Ô…ÓÊ™¬LïáÓ(®øº`k¶ùfœsÖygž{öùçš®ÕVOßÚã÷ŠÞÙã€&ëZ§£–zjÿª«¶ÚiCa¦‹^ÁÄÖR‹^jÏ·5ÈΩ6¾ëàXné@¨n‹­á­ÝÍZbUÖš¹e›jpè[ƒï×݈2Ö8@‡«ÏXYf鸰d4Ù˜íÖï#/Öòx ?zÝ,3…¬X¬÷ÛU|a®Î%éN¦˜ ª¡Ì÷~<âÍãżYµÕí@ ù•}Û¨HŸl«Èn5ûµØª•re×I‚ˆ#ˆ¬ÜjbÛ­“¹ö™·ç½ïËžÚ˜B~3–8ªo¯c)Ù¯Y[/ú‘Z3è°ËRŸ–î&sßýûìõÏÌšË4Ö­™/_Š©•X4¶‰ERfrMl(—§0ɂ͋Èÿù´@Rq®{º# æô¶©ŽÝ+`[²H¾ð5™Ö8Ok ý†Òs•Ä‚I¹¡Œ%%¥Î?ÿǘ7"q-ûãÊc´aëkŠQ¤R¸ÂЭ!/ÊEVD ùý0VÅðCä•*]pR%$áÝÜ@#:o-mƒPGä¹9Eñ‰•P·Š“£ò€Ç#®¹—ô'¿í슊J2œvBHÄÊ%‘{J„dÝÒ)œæ^ÁPŠ,’4Ét+""Cß>BVCXu¥1jÄc ²$a,$ÉúJcGYÁ‘mäe+É·´À—ê †”B%°Ø‹#u²å(òǃ\~‘cåP’ÿa­ì¥6Qrˆ‘Ffå–alÍ$ßhÂ^F2Žñ;‹0m¤H2^‘5œRZ)™¹Èä Åï‰æ;H•M„x‡sàùü¤§m*ãD¤Õ¹ËþRŽë M0éC9M(s Î{fHœx’ò}üÊq˜ÁèI¨–}imŒ&<6/RüSÔ›tyÎtšó¦8¥$OèøëuélÁÊçú8.¢ÚËW å”Ó!Ç‹£ìÕXb¿}Цó’¤Ns LŠ®ñ,L*û48 ®ŽaÚnÄ™Ôl=²¥»ºâ@hª.ËëªK§à«†­¤ þ+D{ŠN_v§›\ý`Pÿd$¤ Ô#i«Lå)$M³ i7ÓÒQ@tèCyzدÞÎ{\%RKYùÎ^µ1üÃk…^'‘¿fFÁé§ý¨˜D:Ħ2¢ÝhmDÓá¶«‹(jS›XÄŒ²•fRò ”ý$ƒ%KXõ.SÝb&³)‚šî›t»WhÍq»akt-É^EI”$‘u\O,´1~Ò“íŠgw¥ÍO’%  ­•W¦ÕÜO¾\p{ÝË\çò„­gL^ËTL f®ù³_ã–r”_ K'$ÓG«¤éb¸–>­Wa•â#º¸¹-f­ˆÌó?%KPQR†öM£¬Ï!´1?C2¾P’ÿó‚uÙ0#ÑãHטÀ9d茣lÚ£«8¢åe'¶#ë—°ýnâW·TUÓTãKfæ¥yE×­Sƒ g0ßYÆÞ3„•Œh¨}£ôœ|]–X¸ù‚#5¾±U6Æ© IaE”<ÎÆÅÜyëë`èf9ÔV¶  ¯r@|þÑгìÑkS‰F+mÓ%.œœn"]v~$Kö£ŸBWéXîT¹Óݥ߉ûìgdKy-{êGºl˰±¸ŒbFîIËyR“Q$m˜%ßûô¬mËrÚg.튦dé\+6Úr5–EíîYæ²¢r¹±û¼DÔÜô8(ÔÔ´Ü Ûb\s#ÿ÷jMÆ’,l&â;W=Þ“« R¥1“wº¦ò·•}å÷–$ÇœnË„•ËЉ8•û>ïGÌUmgÊéW“¸œØ¾íx™âº°ã³Ÿ;TÀD;7ȱ½M$¡1½Ô-*Ù À ¤së¯)‘¬Ò3?ãsÀc[ÀDA<&1À¨¯é "$I»lÊ-v 49ÙÀ›6CÃAp1»œ´w½#D¤8;±>êÑ¿~‰6#4Œr‰|ê0µÙóÁò4])ŠÙ´È°ºTÂ%Œ?;3B²Ã ÿÇš@9«ÀÝø/kº¡ð°a:ÊXu˜ˆ7K¿Y=ä”Wº®9TA4LÃ2,Bôû*„aßë0»?ä;š¬°;ây™þkÿã˜>ÀCl‰ã0f³7qcAõS¬TÄOt/qáÄ£§H¤R)Ò(sÁŠñ+¡8(S‚¢NÁ`;¿#[8ò’ öSÅy;ÃSLÂE$»Ú°Œq,èëŠØë,‘¢¢ËÚ¶}-ÖÀ”¬À/'ɘ_4·ÞSC AÊ >f\Ee6T ;áˆñ¡-UŠ>¸º3 »zA”Y¸{u‘ Žx 9‰¾süGsLbÇ\ÆutLJ„Ètb@›Çÿµ‹Á~ÑB i¦|zA뛑•0/”± ‚8ƒ4$„l?d»ôŠÈÓ{GSŒI™lF® I3¹3 ¨jt¶k›6¼•M¬;Ä”ûÚ“pÔ †Ô‹rTI”Hº¤DÆ¢KÁ™dÇvd¾V…$•ÃJY• 3\ä¾m™>à²0oë Ó#³`,#´¢ܽð ¨|I?FCLÅTlÄ1»4§r¨±p*0’ ô½äyó II@ž{­Ÿ?5z‰—›Ë§”ÌDÄKËœJ‡ô©tœËÚAX¡³f*À¡>nŽË´Ë»ÄL‰¬Ê„¤Ì“ÚˆëñB ¢¢¬(E˜¼ÿتÔDMÕäMšlÈÿÞlMtÃØ\Ȧ¤Í1l'#Møá LÆàÎÝüM©4CàÍ$§\?ÐLKiMWÑÀédÊ5tͨ4Oº|®„¶ä‹¡O Å̉ÆD±‘ËGŠÌÓ”ÎñÌÌë´Îê¤ÎÐ:ÌŸx?;ê9Fòšç¼­ñˆ û Ï|³õÌOòìOª¤Ð ýÏ mnD¹+j“_;<œÌý„N ]ÍEQ åÏæ,¹ÊtKÐÌ|%îpQEOæ„/dÍ E6ÝìÑ–8 ~Û%½CTGÒõM]ÒÖO%…”Ý¥œ½$ÑèÜÑò”P]QM6üÔOìt»Ry+œ¤5d2ÿ¸¬ËôLÒåÒ.…S»ŒP1…š{‹-zÏ©ÏÛxË–tÓ?Ô6MQ&S'­Ó Îi”щ³t»/EO,õO/-ÔH•SDUHª@¯•œŸIM Ð UQUR-US=UT}¼É;<È=6ÍÔKÍÒ•ÕóÄÔ(eá°½sÄGýAKUJµÕ[mRZ­UÌTS ²¿ï\¾5uÉO%Ö`=ÔaMTiÕhõ¡µÌEF-ÐÇ„Ô_ýÖi5Ôj5Ök-ÖO©÷ÌQDlVgµVh-×w¥ÖqTœLI-%Ôp}SaÕWs}Vq…×xý×½¯mW~×|E؃X•×~eWÞC˜èQWÿ˜TØ…uØ€mXV†åØàâŠ}Õ{­TXµXrÍX“¥WUDÖ‘•Ô–ÝX…Ù’MÙ—}XˆÅWwEÙ™õW™MØõY ÍYŒÚž Ú‹Ú¢=Ú˜MÚ“%Z¦UÙ}UZ“ YƒmZ§¥Ù›ÅY©ýY¤Ú‰«Z¨Ú°µÙ@ÕZ«}Zž=Û¥ÅÚ²5Û±íØµåZµeÛ‚×·ÕY£ÝÚ¼½[¼íZ¹Û½¥ZAM[ºERÍZ—­Y¸åÛ«ý[Âu\Åí[¿ÝÛÇ¥ÜȵÜËEÛÌÕ\Ä[Æ[ÌíÜyÜ-µÛÊÕÛÉ ÝºuÛÏõZo•\ÀU]Ã]רEÝԵݶ%YÙýÚÁÝ\ÿнÝÚÅÝÖ^È]²]]ÝÞà%^åe^á%]ÖõÝÂ}]ØuÞåµ^ì…Þä^ì=ÝëõÞî•ÞâÍÝÆ_äM\ã]\Õ=_ÏßÝÛðMßê_ò5]÷åÞûÅ_ù]ßÙÙæÍ_ú­_²Õ^åÝÒ=Þþ…_ð]``T}`Ž` ž` ®` ö_ý`õ}ßÃÝ_ÎÕà ~^Ž^þ`öµßž^ê}ZnßVááòýßàFáÆáVàæßÎ`6áàÞÞï­áFâ$â!á#^â'Îa"æa(và"F_)vb+þa×õÕùUâ þ] ÎâãÆaÿ2â+vá0ã(nâê…ã2Žâ4vã®cŽagYcæã)öâ9¾ã3F`.6_<6_9VãB\?ÖbãA&á66äHþbH^d¦Ý7ÆdžäG®âO>dDæd&&åM¦bOîdQÎäŠuäK6eðMd;åU.eX~e@fáF¶äTVåJÆâ_fãZîe[ŽáaÞâ\že0>æXÞå@¦å`&äd¦[f¶agVäiå[åeŽfjöf^&fdÖãmææ*–å<ÖäPFgmÎfF.çj6gyŽgqçVç=†gpÆgx¦gfçwvg_¾fežçîç}VåƒèfèbVçuÆàÿS6æ„.èy®h‹>f€nh‡¶ç{Æf=V‘i’.i“>i”Ni•^i–ni—~i˜Ži™žiš®i›¾iœÎiÞi˜nƒÌPèêÐêÏ ê¢n£ÞŒ¤Vj¤nj§>ê·XêŸ~êÎꨦj¦Æê©ê Öjž°ê¶ë´ë³ ë²öê°îj®^k¶®ê­n묆j¸~k·Fëµ0ëœÀë¼¶ë™ÐèðëÐìÏìÁnÂÞŒÃFlÃ^lÆ.lèxlÈŽlÉžlÊ®l˾lÌÎlÍÞlÎîlÏþlÐN ;X€ðé}`h€mýˆb`Œ ƒ`2J ;P¸ƒˆ`0íÿ³¨m°Œ@mÕ>‹; ƒ`€0î}˜`2¤4 HçÞ]X€Àm›xd‘m„hÐk(n£`€ˆîånîçÆ!ôƇH€ŠëÎîÓ0o æ®n÷o›HX2âÒêü.6ÿðŒ˜6Àˆ¦h;€â&^øï%*€xˆ 5 €bÙð6€}@Ð…Ðnù:hƒx: p 7º ô.€4°ƒX]p8€™`ƒHŒèq^`À`gT]h¸ 5^Ø#ç…àm™qôF€(† ƒ¿ƒÿñ òÿà.Gr%oq˜0àx€0ó*¿r˜Pƒà…Gr5Ðhƒ9÷qÀs=÷p—×ô´(!§r5P€9Ððµpðp6pí}(€ÙΉ4p€‚à…w€ Hƒ8‹b†€e€tI—qˆîb0tPƒx„FõïFW€)O°Àˆî–°ƒ€¢°ò˜r8:P€Û|€Wˆ`‘t¨õ[Ïuhôj5X`vbg ÀïÔ¶u$÷ug‡ö–hãÆ‡ðrŒx€Àv$g%wG67pm{Çõ¶ ƒà…eLjjïmxoôþí³hÿ(€Hy߇ÑN €ðñ‚߇ƒÏ †ß‡;ht6pVߨt–°ƒF7ŠH€KLjXð™hv„Ès^u–t˜ùb€Wõ“Où™`yŒ°0¸ƒ˜ß‡™· /GíHGy]uSâyPdȯí©'ú#Óú}x°×z•W˜ à6€)߇rç |8q^Põß^ø¸u:Èp‹Çôœ¸ƒÐ¿·Çˆ¸ùè6úÓ~€¡_ïŒ`üÓÀ‡¦o€©‡ ›o€X ƒt°zF· Ÿgó0ù¯‡ü£oôðô¿ü̇”€z^ý–g ÿ:ø°€HüØýÞ¿ýb@ít~Ÿ¢fõe€±²íhz°lÏôаuž€}ç‡~žðyC_€6p€èFríÆÇóÙ¾ƒ`qo ›÷o€eWõåÞû™ùçˆ}ûÔ4pf>ø2lè°¡¤Û÷®€Üyè±aïD(àÝ€eûæ,øèr] 4X¸¯dB›aÊܧKØàTèò(C;0åe‡€Rxq_:i¨z”W6 ìK M€b^?‚eÃF€S¨R×zlppŸhßUƒ %]HÀÿ4 ¾ÐI—bC¼n`3ÀN`v 3˜3àNß¿™÷ .‹ ¢‚Ä‹Ó}  :¡[:¨|9°‚LðÀÔè~{̽;)ƒ}³G7䕿yµs¨aþ¼ Ž´.Pw„tô¾ïNƒ=§W÷n§ç»ô“I7xàxí2:Õ@Ͼ¬ J£©áí“FúöžUãaFŸ}£å'>"¶Ï¸Ö;Ð¥™õÙ„ ‚tµáá2Êb„CË<Èâ}æÙx#Ž9ê¸#=úø#A 9$‘Ey$’I*¹$“M:ù$”QJ9%•UZy%–Yj¹%—]zÿù%˜aŠ9&™ešy&šÝÁ@€l4&œqÊ9'Cl0ŸÔH'Ÿ}úY¥xê9YÙíó@Ì_ ”§†Žž×@ 0` …Ò·Ì2±Z]‘αO1 ر@wªº*šv*z:€0•F4@ïÌzÀwÚ)€­dÍZë­vÐÆˆu´k‡³` «Ýzû¥ P¬žµO @€J è¢ PL´Ø©ßwš+PºïÀ@   vØÊË,àlrß:üp– ”g:ÔN¬§ 4G®°«-!7`gEv2|1>ÿp@Ôð°!€³B|3ÎOJ¼Ož‰5–Ø %‡¥Å(Ç`õ€.÷–@1ü<î!SÀÌû‹Ï;`{gÎa‹äÎ=«!p±Ù а­ [ÌçÚtÈÅvuö¸dW ð¬÷>m  ÎÎ76â‰÷èœtÜ5 ªñ`×é­'ß>÷Џ1‘3¤Fç¥a z¦b8ºâ©«è¶«»þ:št$*ìµÛ~;î¹ë¾;ï½ûþ;ðÁ ?<ñÅ<òÉ+¿<óÍ;ÿ<ôÑK?=õÕ[=öÙk¿=÷Ý{ÿ=øá‹?>ùå›>úé«¿>ûí»ÿ>üfr:?ýõÛÿ?þùë¿?ÿýûÿ?(À°€< ¨À | #(Á R°‚¼ 3¨Á r°ƒü %(%mÈH%4a’–²°….|! c¦°†6<’ e¨Ãò°‡>|! ‘tB" ‘ˆ)ü!“¨Ä%î0ˆ8¼á…ÈÄ)R±ŠV! ¡ˆB)^±‹^ü¢ ¸Å( ñˆ`<#Ó˜A1©ˆBrãͨÆ9Ò1l4bµHÄ:ò±W¼ãà$ARŽ~<$"{È8汑&L$$# ÃE‰>²ä% )ÉMrRƒ”,¤#ÇøÈN’²”üä0É#U®R“¦|e'ÿQ™ÉP¶Ñ•°¼%$eÙ#Vꈗ½´%.ƒÙG]¶’–xÄ¡0“‰HbîÈ—8ræ3©Ìi‚‘™¿4f õ8KlV2‹Üìæ7AIFp†s›ã¬¥6YÎ]â î|'<ã)ÏyÒ³žö¼'>ó©Ï}ò³Ÿþü'@*д Ýç2ªÐ…2´¡}(D#*щ24¡½(F3ªÑr´£§E?*Ò‘’´¤&=)DCŠÒ•²´¥.}iGU Ó™Ò´¦6½)=eŠÓò´§>ݨN*Ô¡µ¨ý ªQ“ªÔ¥ ©L}*T£ºR§JµªV½*E©ŠÕ­rµ«ÕªWÃ*ֱ¬d=+Z¯jÿÖ´²µ­I]«[ã*×Âu®v½kKëŠ×½òõ£Ð”7ωNÁS”†-¬8 «NÅ’“±‰=l ? ÙÉR¶²–½,f3«ÙÍr¶³žý,hC+ÚÑ’Ö²,d³)ÄÒ²¶µ®}-lc+[Òž6Mm%g«ÛÝò¶·¾mm×YLá6ó·Æ=.r“»Ûà:6•¨m£r£+ÝéR×´ÏEì`MXÝír·»ºe.n›]èz·¼æ=ogÁ;^ì²÷è}/|ß«ÞöÞv½‘/~óKÝùª¶¹Î]­~,àßòw±öí¯v¬àöÀõEpxSÉà SX´/„œÛ s¸Ã˜½ðýkNòÿz¸Äñˆéû`÷š¸ÅFñ.m»â »¸Æ †ñp#âÛ¸ÇúÅq3eŒaû¸Èðò5Ecâšç¯6r²w e!ïXÃ3¤²¬å-s¹Ë^þ2˜Ã,æ1“¹Ìf>3šÓ¬æ5³¹Ín~3œã,ç3‡nHíAÒ”g='iÏEò³•h! šG…Ò¡”hE÷YÐ~ô‘#I÷ˆÒ;²ô¥!iMóÏD´Ž@=iG{šÓŸ&õ¦‡Ô$­ÚH­vu’^]$Y«ZI´Ò­ã§ë]óZzé¸K‘ÅÚ ) `€ZŽt‡©i<#3Ò;p#!(= 6ì›!úÿØÜ  #) ¼@@ÆԆèÂJƒöÆM$˜µ¡ %pµ{éE Ú¼@‡6¼LHëF†dlyÉÑŻՙeàH hÃ…d´bH90éÀ;–QŒo©åRÔ𑘎Se£ÚÇIˆTš#¥Ão2Rps"±AÅÈxè0³¤[ã#Ëé¢â4|\]RA|Òº!ͼHha¶ í„m¥#N9ÉTŒÉ¼2(/xÔ‹”déÓÅg„” Xa÷QÕ‡Ô°i=)ÀÝw ëB’@ØEÄìgçTOx‘ØÐ°¼H WyÇÜ‹”w! `L©óÆ2Öéçz.Àt">¤¼xæäz6‘Úò–Ãýˆ °ËÚÈï U:•’ä°õ ½ã÷ê®Ïð}$,Ó‰I§Kér½#É* !ù,\&r’‡&&&666HHHVVVhhhvvvMx¨{z›Y‚®c†®a‡±gгiŒ´mµy†§p’·u”¸}—µy–¹}š¼¿o{îy:ò}(ð|1ÃirÍt|ØlgßsjÛvuäWVéeEégIêjDèiJçjVì{JèqSèp\ê}Ué{Zähfçtdäsræxså}{éww{–¹‚U®‰g®‡r©|¼—vÓ‚<õ…ë†&â†4ô…!ó…*õˆ$ó‹-òŠ4ó‘:ÍŠLÓŠIÖ”VÍgÚ€zלeÚ’{ߣjÙ§xíƒFê…Wç—Ká•Qå›UäXî“[ìSïšYò”Bð“Mñ™JñœSðXê‡fæyì•hì˜mé˜zí Zñ [ë¥håªqâªxë¤ï­sì¯xí±}ð¥dð¦hð¨kù¨dð¬pù´y‡‡‡…Š’ž“‹•••‡Š¨‡—©‚¾„ ¿œ£³¥€¢ Ÿ§§§©©·¾²§¶¶¶ˆ¤Ä”ªÄ™®Æ±Ç£¶Ê¦¸Ë®·À¬¼Î´½É´ÀδÂмÌÛÁ€ŠÌŠ‘Ò…‹Ü˜›Î²—Ù­„լװŠ×¹›Ï¨§Ïº¤Í¼¬Ì»¶ß¿¿ä䊉ꆆ瑃昘ꨋç¦å¶ˆí´‚í·ˆì¸Šâ»•ì½“ì¾˜÷½—墢媪綨跩龤ᰰ滵ó¸ªóº·Þ§ÙÈ·ìÁœûÀŽúƘâ£êÄ£ëǨëÊ­æÂ¿èóéÌ´éιèѼõÀ¬ó̦úÊ¢ùΩñÀ¿÷ЪúÓ®ôÒ±÷Ù»ûÕµüܾÇÇÇÃÌ×ÃÎÚÍÑÖËÓÛÐÏÐÙÒËÕÕÕÕ×ÙÕÙÞÚ×ÔØ×ØÜÜÜÂÑàÛÝàÞàâÚáèãÅÅåÈÉåÏÐçÕÆçØÉèÔÄïÙÄèÙËåÓÔæÜÓåÝÛèÜÒõÄÃõÙÄ÷××çáÛýáÇþâÌòãÔðçßôèÞþæÒþìÝãããççèåèíëçâèçèëëëëíðïó÷òààôêàþîáñðïþñæÿôëóóóõ÷úþöóþû÷þþþÿÿý‹&° Áƒ"$¨°¡Cƒ æ;ÇîaÈ3ĨQ#ÇŽ?‚|(r¤Â’&¦ô¸2¤@”- ÂŒYš›jô™œI3¦Cž+õy‘èI£G‘nŒÆ´©Ó§P£JÊ™ AȨj} N^ ŒÙJ¶¬Ù³hÓª]˶­Û·pã2šR^C~ÒòJ£7Ò.BbÀtú¬ßHº;•nT ‘qcÇ!G–Œä\Æû2ïk§¹ó¾j…¤É{w¬P5y¥M{^Íyõ/`šÇýR·Ï²äÉŽ+wÔ½›²ïß¹_*ÞÜ®x±âÈ‘û¡@¨8! {äP˜NÁXòëíŽcÓW»rgºtÿãÜ8cÞѧ7¯X½KÈ—•7޽8 ÇŠ£ð€cT Ç4õчÝ-]tQF‚žWKì)åÞO·MX|þf¡AóeWàsz$ãÌ8Pr÷åW vš¡`(È=¸^„Hm˜7ÒhŽ*aˆ›Q²x5r0 € ÄQÁ‰Å‘¨b}BbWÎu2¾çcpWb©åyúÈcN‡G6‰|è¡›ØUIR—[¶G'—Yâ‰å—ÉE‰\ 80]ð!uÖ¹é'œrR¨#Q<>–§„Bªáp}¸‡ì±G ìAM |ø‘ œo¢cy“ÖX©O‘ÊÿôjO^bŠÜ¢íèj“ è¡j¦¿:Èj”¶êª±–Î:ÔDYߦ~ºk°©þÚè…Ȫì²Ä›-­|ÞZ  ‚–ÁÔV«êµI}ÛR¬Âm›˜»ï^*°Ø‰)Á¾ÄA µ¸ÈnŽòV°Áô¦o¼{Új`}Óì±äΤ«.ª÷˜ð¼Ýz«çÇ îëp}/vð°v® aÇ;Ú‹”³%›œnʒ¬íƇì±Ï13ëÍ5Ãyrœ É£´Ê<ÛÖ´Ó:Óú4„#_\4vGS‰Ö G]ïÔ/,ØïUuÑg¯j<íȳÛíÈêòŒ^]·Âw¶löÕ¨¦ÿ-¬AÅÄöƒ ýs±dÏ™¸â ß+.ߊ^Î-²ä‚òA 4x×bï|7Þ‹cû9Â{C¾brÛ„— S&''ÛnÃ-wèívî¹ívîté¦c\9.zâ w p ¸ë³ëÎ2âʇÝ2íóÞ;¾ÛtÁIqà(hüÚKçŒ;·ßƒÿ|ø 7>3¾Ó?Þ.]t‚Ü‚­ÿMwóóO>Âô×/²ÃV÷Îâ7 ºE9dÑ2lqùC ýx¸:0YÒK_µB‘  ŽyÎc`Ш@æipƒxŠ`ú¢t‹1”Ä þ<ÈÂŽí~Pãà…D8=¿gɃáò\x»öЇ4‘KSÿØVŒ"ñˆHL¢—ÈÄ$: KØ:„HÅ*ZñŠXÌ¢«È¹¡¡rݸÅ6¦”5uÁ ¯áÅ y˜; JM‡laÐhX3PTP á`8P R`#9ÜñÎ>€†{XI†µscåøB8ΈŽ#à ¹Ã í€£”È$%¬Qœrh3„<Ç!9JF6Ò”o$¥â ™®ð„£8dèB$Š3 J`⨠D%ÀQW‚ é *ÉFb‚P‘âÛŸãHV4O–9žè‚#Š“Iä`‚×(Ž$9! `¼bÇf2ÅY>U sŽüóœùð̲™äe;j™ÍâØ± ¿0‡NJIÿΞ!³œÿÄ"£—ÎÞ™ÑEV$¦TKLX#—»LNí±Ãb´ŸþÄh Í9ÂÔEUB–P\ ‚*`A&SÁ‰.ˆájÓŸÒü’JV4œͨM©æÑéU¯€GèB \à”ºÀRèR{0 ùò€ èF¥zÓîô‘=í]‘-ŒÀZ0&§Ðƒ2È‚ =øÁ7È6ؽ-sãÄ©\çjUºÖ‚Y5]K-ׄ *vàƒµ¶£ =[ç×ÍÅõ”9Õ©]9Ùe±²dvô„6–Pd‚€Yla‹Ã(¢8ìZc+YÈVö±w­l¿vY‹ÿ…cAˆM *Q‹'˜`>àAdäưÜ*;ÊζϽhd£ªÌó©ozß b¥  J¸€#(npƒàB¸C Á2¨þc¦ü|mk]KßèJËìä¾Ñ„n¸@¬ èKP Á™vï Š›£ª1 3£¢Ó[^Ó ÕQRpE.ÈÀÐ@-EB!ædž8è­4%˜…½GÕ××¾¤Ûp '' Oô  ŹÅ' dpAìµ1B6CS¸ÊÃO†r…k¬dpéØÈÁ…~@†PÁ¸ hÀ€„$ƒsÉm+ˆ“§|ÕøÊ—ÿºÓê±j[²räb¡ì‚¤ „—lAãs*äŰ›°”/¼hǹªVί:á4 RáÁ #-iqpRØ >XB‚ LcmÅq[…ߦjÍu/†Ʊœ}æš¶y•W¶˜˜( :¨]0,.”ƒ` J<@ _ˆƒ›‰3˜4K n©þ×àk[¿Î߆´·ñ*éÞõÁ?‹` äP ¯¤ Ä(àŒ\Z@‰¸F=Ä p0¥8ÿ~Ðf˜aâd&9±[³›e-n玛á Uµ¤v´´û®×ŽkÞ¡_s€6à qXÂÕÿ®M;˜b¸1ƒÑ–ð{Y»ð‡ÛüæÐu8Î%žët-‰v¬ÁaÇwÇ{  Jðr&G9yVžæÀEƒm)HÌGónë<ç_¿ïw>¯‰£êÜ|(†F`3ö’ºD„!qM‡î»ßÿ^yÊ™ª·áo•y•Ã>_ˆ×šð…§mÏ©åŒCµ!Jýb‘ŽkÚÒ§XÁ Zàlh¯|Ú,ÿqúÞ6„kÛ)©Íá­ÝhÕÓúð–]<µF5!@ À6,v¢i%¤@¨n›ŒR]í4³úAzgJê»øz¯#~Öc~yÌþ«­fGVØB%0 y¶ƒ]8Ãÿ-nq†_d¤8/<×®þšKðأÏór§o¯Ù¹Åo5ÙïâDó{t ª`H±ÑÀ.«µ| ³€y³zFe!QEDÔDH‹°HPDF@D ’à*ÀDðH°Œ@Ъ° “à ×Ô¶E28ƒ4Xƒ6¨Ì×Dc:·¥ M€'P ó„R*à” UšG+ˆ †qØÖ6(Á\ ç|óGv‰vWˆ…»#{“]#u. Þð]$ J°) €p¢° /pj’jpÉw€àFY¨…}ø‡€Ø…ö'AÆa º„ $@'e0#ÿ`€:ð½ $@‡\'p+çy¸|†nðç‡{hxòWv^X3Ç‘K-ð$@ åà V°°S0¢pã 90·‰ A…íg…q[(ŠÐLJ96ˆ„¨Þ  ¿… [@ pb``>ª >°‹Éñop‚ó`pEu©Ç€Ðe˜HˆkÊ(A,Ò Q0T‰xRð ãå†Ùèç0z§W|àkÚ&aò mÕVhØ|¬·Ž ‰ ‰_ÖÅL#”ž`Oà[F]Ð7 %  °ðùàXbhi;™rNu XŠÃŠ/ “Éøúå&·@I)ÿä;É eð>@žP±žUh_"y— ºšlF¡ښ͒›Kg T:p? +’wç \° ±ð ^àË@pT)m/xu9“ž‘žÄ!£ù9zšŸ(ŸÌIŠÎYÒI-?Eúév ÅÐRé¬z­à­@p9p2Ú :;QÈ£Phz.Œ|x£p30…cŽ3Ÿ;)ѫѦû ¿§ãবÖ63¥4ðÀ å0SåÐ {ú61˜¥8*x ñ™ð‰fÇVX0#ÿù£@ê¨õ¤¦(\ºóð6Z_éPÁPã §±£ ZmÒc ±£ª9ø—¢‡3e:7’“ö «ÇyªùßÀ PàŽ0¥˜© À:•¡ªA¬fÚz®ç£~ɪ›w|•š¹‡vÄ5Œ¶1ìÆMìÄU)p¥|aë—Ñö‚ܺÅ<{·y`«kyð–*÷°ñgšÈÑÆšÿ‹Äé›Áœ¯J³/¶3G¦‘°š#m€Ê³ÿàk`·`Jš’Sç¸j–È›;Ž÷:»ÌÈ­ìÊ<³ëG¹W‡¼º·€:œJúvÐËÅÈ ÅmÅwÆPÉÆÏ µÉ*ǯüÈ3LÃrÉÇ p9 óŠ|ÅyPDvÊÿÕ£3•‡ÿ–Æè‘mü¸Ì2üÌÌÌÎíÜ#ÒÜü`ƒ;¦jvD[ËÉÙÌ Ð@²Ô ·Ášœ¬‡ÌÓlœêü·ÌÁÎëÌð,Ë‹£ý\µÙ<ÆÛ z§ŒuÑ ­:šœ3ËyÉð¹ÄмªëÇ6|¦$͉œ°Ù\ 8 £ZWuè÷‚ÿm‡¤Ù™µ Ëo¼È mÒщÒ¬Ò~‘°JʸÔÓX;Ó=´þ¨1ξî\Òj,ÕSÔÈ:Ôux’™YµDÜ­3ÇrÉGÓ£©|ÄL®ëÇ‹iÜÌOüÓUíÈmí(ñ<3UšQ7¦» yý³=¯&û°ŸgÊa‡m ½ ­Ð< Ôp¬2sM_šÆÂ2z¦©uÿFp ûÕò›¯K­’†‚3šqÕ>íֽ؊L°æê™oK¾vÙd`juNÍ6ÍÏ ¬—Ä縛óô\Ðí'ÒÊÚÓ;ØŒíÐuœU‰—CËk¬w÷»°D¬4 JÚ•ȹլmšTœÒ¦ýÖˆm؇ÿm¸–ÛÇ<\Ä䥕Ùó Ý2‡uvºžÇãÏœØÞ«<½¥=Úß-ÜÑØ1apŇ3èÁ ±¨Ý°ñûy…vZjm:½5ô—¬ ÜV}ÚÁ Å>cÏ}~}§M1g|Øæ¢ùKÂV ´W áwÜÚ¿zé¬Ýøß¤íâ/ËrÍ&A¹×‚~­‡û Ñ1*¯R(£^½r>Þ¸<ŠÓ ^ÁÄAÈ¡™.Ú×0ÎŽy‚Ë)9N( £ ¯]}Ù J¢ËIÌ8kµì2Ø î࡚u×SÞæl-å4ž'L¡f” gÓº™aà¼ÇÈÁq3ÙKþ¾VˤËh“f®ÿ-álþ挮è‹NPì!mt޹"qçD~pÿVªß8ª^mIãå?´1Øäo]•~WßB­Õ3åQ.×yƒËî0çÒ•å?«wž™{ýå2z#mµÝ*Á÷ß´¬B¾ýÎkÞÝÞçÄbã÷¥ã•{ºb¥½{º×”B1SóA×.sÅNÕÁ>áÇ.³4‚ábÇáNqçT ¨@>·8‹Ù­Ó<aÑZâéüííè çnߪì÷¶YG¯¶®‰Q1è—Íä2Â&ÙråLÍáþè¬.ñã¾ïs<½8^€siÇy8èýXÔT׺¡.zÓærœÒ¦Ž×[—ÿ.îÜmñúó¼ÿþ¿iѸZÑÜ?~ºïï6Ÿó5ß×ö«¿4?ôDOô2Þêâ ¯¬™q¼Ñ†µ˜Yð1 £>pÜêç­‘j06s¡Jß'ŸÚìü>öä¾—âÝÑÖ­îC4õ£êî´­ÅêÖœÞxÌÓç…½êf¯ßOñûMÜ&‘ökÍmyM¨ +¾yΞ~=ÛÁJ8˜îÜÃÂV·ô.ÿ÷2¯Ø|?ÜOn—Jï¿Øåyò4n´™#3 sâŒØ.ÚÑ8 ZS£@¥J•yÑàE¬÷ÅêpäÖ9Ò$I6¦ÙšhCöT[¶-Ï•o;²™ðâXŠtK&Ì™UÞ@£Q§2sÚR±ƒ©>¼øÏ¢ÄV‹õz¶bVÈdõªÝl¶³f¹'Cç;zâgŠ÷©†ÛVõcw-EÿªÐèN̘&È5âA‚-.”MïÚ‰Åz6}ºy鿍iJo)ó9ô”Áo­V»ãÛËŒ5²Cá„Ë“7xÁíËa7.É’ûAúÓ¯ ¼N]¥ÿÿúÃÎ4¿»Ï¹¶ o¬}Ô»ˆ+ˆZ¨A‰.: !øì»+!þ: 7äâÃ+?˜tIÀçL4IEËX´L¥×¬ê­*O'w£Šµ£Üù 0È^zLF ³q®äÂI<ýPŒÎÉ'Sp4íbÁ›†b('®îiÈ!L«å~’ª®¸¤ˆ/†èÛj ÁË -Ó’òN< œ24qÒ Éìü*ïA%ùn¨ÿ£šªmµ®[,£÷°šP¼Ÿˆt"±8Û¯N8½4Ê(=ý”Ê›$ókÉÌlòÒ¡0íªMÌ ŒÌ‚XkÌCÛj•ÏM¡$ÕW^ Íó×½à¯2 5š‰;B´m©ÜÔ{58‰K”0ƒ<äjFbAÕsØnU4p=RÙï–¥TÑB[ÖÜ £ÖXîä ?EÃòÛrß—4`å².`K­õÔ„ÜjSI£Ðô¶Å"œUNF3,*({3ò·÷å÷ãpCxÏ‘ûíH[81ÛÉ&”£1ÈOsÔ!H‹l˜)À`ªMf8&¸`“5ýYèŽ=Ö$”ÇÊÔc™eeõ.ü |š²ÿÔz{0(Áþ‚FÙž.9h:‡:Ô^Áž¨Æ#þkªÃ :¾üHö²¤œ02©h’öV䯿å»ï±Gª¶ÓÓòv )}‡›¬¯ÌÔ¬Hï—ƒ¬§°øoÀÛ|ð¹Å-›ssé½róxcM”Áå^­ «ŒV³)ǽûÐãîÜs±™ë´ÐwÛ$´ÿÈQ¨3(ÂD%j©k×¾X·Ù>ë8!Ð?ÿx²·/Q%+sGÝLä›bz¯îÂ(B¨¶jJñmÏZ­¬tó¾ºûñ¿3ûüa¶ßÁ\k*‘Zú£·‚¬OzRÉÌZ0C?øP('2›ïºWÁ&y«a„Áÿ%æ¶µIDbRÑR–”Ì5Ð#±3ŽYòã0Òù dÂóÿ0ø½ãÙ(³Ù¡½ ×‰ä (:™œô4õˆ¤A#R¡JòS³ކ$ú¬xE,fQ‹[äb½ÈEªÌ®|¶{‘‡>2Â/‹ð³Ý¡w@7ÆQŽs¤cíxÇ,®pSÌày°ò.F2-ÄÈE Rñ¼I'ë+ ™Á°Hi Ð õgÉJÚ0†¼kSa683ÙAQl˜ÊÖÆ¸Ó$+O“ÛŠ\æ2ú`F|•ÜäùˆCMFQ†îcPŽÅ¼¦ñÆ<ç) ûžFɸP&‚­TbëÊSž—1“‚µ&)ÿ˜Ë[^!]¢ ÝW¡¦©)cF²€ƒ-‹ GÒ„ÎØé‘ÆÄœ[2V³IKjÖptºä$~2³C3E%đԢ›ï`d,fRZ=»ó˜…A²YWÉ ‘ü·¢ b4£õÑc5ùY¸'öÌLÍcVTൺÇA„8lË–Cǧ6I4" …)}§Ñ|r/§MÂæÑ>ÖžŒÒvM§¬(•ø„I!d’Gܳ°a†$¦Ûyª?‡Y¼8Ýsš;Åå>µêT-Íd•b$áv'IJFMB‚‰UÞÒö(:f5kÊI’æd—r¦f®ïK ³êÓ¯âTp^¬YÂDzQN¿ãB§’@ÿ´~ˆ#w)ŠHT&'«ªÏ~Rí´þ*ņh=-MjÔ“«Å0¶*¬fg&„ 1c bS×Ô:¿rä/B¹•é¥/sñfm³äÖTuXŽî°¥…ɹn+ A„Q‹\*OªR•žó•c2'¦2t Ô8Å*óN`À£¹-Õ8]ìÿU{ŠV†¢Ûèg›ëÛ³i¶œ½é™ãꃮ.»±}%š Ò]z¾+·)¥‘ç—BUFÆK*É…YhR¹öå$içK–Ó&)‡Q‡rÃÖŒ ©³í‰”°ÀNšVãReÀDÄ÷¹ Cë¤Uʼn¥ÃW¾ýl}Ý‹–Êÿøœ¤”„ @_ºOŒ’¼ífÓ»àlÐegÛIŠuCžüh'i8 r|™ûá’y˜ÈjñßKˆ4+˜þIN”A[»ìY^R…¸û“mø‹^Ž4("Ö}æ{²%JzZÊ-v)>7|ä`©Ù–ë󞡹$,+‰U!çíÜ«œ«ýÓŠSO{ Z<+¹THFòè£CtA®j3\C²´œ†IÀPRÐWË+X· &ºÁù=`fás87ÉÍ&{ñ_~¬aWJÒ­ò^Ô[è\w䈉ÑKBf 숆¹Ñvº®]-wªðz†´ð¤ÏL´å¢YÞ†Õô;U:›&^¦µ2ärL­>ÓµVÿí¦k#ê5³¨†UÏÆ¡55:mh¿›,vN4^M»Ò-;}–p— ¦^"k.z¶ª‰–kŸ ¦€©uÃw:¿Å{ÍÕžÎTböX³JLªße̹h:/‚°Êw|¸›Yñu†ãæògiñÔ<0¹²Ä!™‘»ùKöë÷ž®èˆÛÇ¢l·`²VJvF9{Öúê>êî$­³å†¢º™ç­h¬Dº =ç@~2½ÍÝŸ ki„þÒ¥Õ•‡ÖJ"¤£gvâ*oµöù«©™î©ËNÞ:¥e„IïôoUÓ̤S„&ÅŒ¹îiËÚã"¿-—cVsxæQÿvÌû§;ë¥nv»îT«,Ü'sbpAòö¤¸ª›V>O$¤cm'ìÞåqrÍv|ß;ÜûHƒZõ9cs(7NÔxu«ÞÕ¼ÕÐRQ$E>àù¢oZ¿Ê ii£¨°FsŒ°Ò¼¤‚¯©;— ò)ºŽ‚$Xé²òû%Ú»-#¸÷À5i<²Ú²¬›Ú 4© %r6ËzÉz./1À+»&¬º“)>êC·xžw¿@Ó> Ü1T©%I1èú‰œð¥)ž4Á>Çc0a"ǫԟ't´°Û,{qÀŽÁµïØÌ+ÿ »ÈÙÁhûÛ¡k±ÿA·ÙsÀ“ë¤ÿ®ø5z*¯(t <šC:Ô¢6j£:Ä¢;´Ã7R£:ÚÃ8J#×êÀ/b£kù¯9D+2ĹãÁMÓºJž{¿|¼°ÿ·ûŠD’–B1‰!'Êj ,ä­òÚ3&Ì Ÿ?Ì IÐë;}šF}”Ä}„ºRa ‘'Ü‹—Ö2¨*T²\+3žð<¼9ÉX˯`SI¾‹-5´“‰ÄE™„IÎ+‰AòÇÛÛ1g!¡ˆä«­h ƒŒ±Œp‡’THYs¢Zi!L$°­ÛÆÖXÊ$tʧŒÄаš#é3ò®ª3R¯Þ c)Æ9K©`G¤ñFj¼‰þ3G¼a {|Ű´º¦¤¶5!«eD[‰©øE=k0Ì€‡AÇÚ¡ †ŒÜùŒËbJ§ê¿g|.´$µÜĶtKǤ›ˆÐ/äÅ2AH`1ƒêÇè{}ó1Ä÷ÿxÙ Ô­|'݈LÆ–?Ò´»˜tËS:¯®ÉÁwy¦’”®2Ä–Œd‰yC‘ ½û‡¡Ì^dÀ/d¸>=uC‘ÕÌçtͦ\›¼ã!]s¦xJì¤Bí¤Iî´CûÎÆSñÌò´¬ólN-TÏáL3Å”BÆ„O·ä!-ó­ $ÛŒ-„ÊͱüLÓ·9¡Eú Ãû‰­½N\Kó\ÛÓn|Ð…|Oçä¼Ú¡€«B¿hÁ8¹T*blCËL¢‹3¨÷˜ÁÉÊ=-„GÓ’Gݹ¨åÊ­ªHn¡¹%¡2¦ËdܦöÂ÷ðzšR#±F?Ú‰z¬ ÁŒ”lÆYêQÿIIL—´H(-Q¶lÌû""¹Y;¤á ·K8SñO<ÙJ(lÐ' ¾}Í8m •¼ŒÞc@ûQ±¤¬ ürŸüÓ6R}ÑBT‰Z‰,ÜBEU°ü»/8HÍ$@ÅGAµÔÖDUš(Ë$QQ Ä<°x|MòSRT8MUU•S%@9óÂO|<ŒEÄô¿ØŒ¾Ò|$‰,UŠ<ÕÅ„ÑhUÁW=ÍnLM­1=×@Ò"e½j&mV\UÎ^ÅÔrÖÞd -‰¯Cç¤0Ú>74g]W­Ô{ÓQW$ã¹Ôä°Þ2•¹cÑö|I]EWB}Ê}¥Tz»À]Ë€=˜eÏÿzEÑ„=Ø@µ:[åW=Ý7wµTxýyeØ«XÖ¼X”=×|¥K0uOzëÂÑàEx 5ktG‚5Y—ÅØŒ•Ö•}Ç_µWv5ÁаQLÖ_½ÅãdÐqMZžíY^5W•ÝYzˆ©4ÏädÚ’]Z°tÚ§ÝÕ¨•ZE¾ê4ÎMÔ­•CGL[µ][¶m[·}[Gd#?£>„ÛaN‹íZ¯…Ú½å[„•¨ ýÖæsÕФX­mÑKõ[®UÜÅíÛtœ%¢MRæ#WiÄÛ“ÕÛ¿ýÚg…V°íˆÑ|̇mA’…·ÃeQËÍÙ”Õ\{*i*XÕÄYƒM]Æ5U|mÜÌU²aÃÚÄ•ÔÓ]ÿ̵]àí\ٽݿËBÊÝÌ+ÝÃEܰZáUYÖ-:×MKØåØÝ%^ì ÞçeÜÏÍÕæUÊêÝáÍÞíu\ò¥]Ã)Ó³-_ÞuRô½^íÝܦeßøuÞ÷%ÝÞµÞïÍ[Õåßþ½ÜÿàÊu_ù…_ú=àûÝ_Ôý]NÞü_Nà¶ßV`ß`ðUÞ†à¾àÖßñ­ß Þàã=_ þ`FaïÅ`ÿí* &à áVáánß‹¤aݵ`fa6ߎá&Íaä¥`#þab^ßvaÞa^à%f^Na â†á¶a$æb.â-Æâ0~¸ð]á)¦âÿ(îá4¶â$>bã™^3ã1Vb9îb1–â)¾[-¶ã&¾b:öã?nc>îã[}b&vc<ä9d/Vã<>dDvdE^dJdF¾ã/žä7.ãÆäLnd6äDåQ.ä=.eO–dRVåUåTve2~a"®ãO~å8ÖäZ¶å²€ãN&dP¾åV†åKöe]Ö;»=fdNfe^ffnæF„äJFebžæHæa¾æj¶æ,žå`îejŽæ\þfKçp¿S.grfåbFã5æ_vg”å7õæl¦çz†â3¾YyæÜu6ÝsVgqçäd|¦ethièƒNhlÞæy†f†¾gÿˆ^èˆFhоhêÝçÚíçåõ燞è×ÕèùUh€nèt†g’.isææw.hƒÖf‹Æh”6é˜ÎhCfç—†éŠÞižV铞é•þhêŽé‘j~¦i™êŸvi\öéšÖii#h–ê¥vê–ÆjŽÖ`^Öê”¶j°fꦮj±Žjéj²¶ç±Æé§†êž벞j£®b¸öj¥¾ê´¶ë»¶é®ë¼ÖëµFk¶îfµÞä¹–á¯.l¼þëÁÎjÆÖc–Þê›ꤖèÆvlÈ&꛾ìÄìÀ.jå:ìvŽk·^lÎÞkÒ.ížlÐîëÔöëÓ¶ìØvèÊþlÑÎçÛ~äÙ¶mÿ×~mÅVmàömÏ6ë]¦êÝ~kئìFíßî³6nå>jÞîíá6m}fíÍŽnºîdžnÆ>îÅlíÞîêvîæÎ‹5Hoõ^oöno÷~oøŽoùžoú®oû¾oüÎoýÞoþîoÿþoðüvƒƒXƒý0ðç@ðæPð¿‡pŸp oðˆðÐÀð·Ðð¶àð¯pÓðpµq³ q²0ñ§p§‰o‰W‰‡q—ðÏð·ñ/ð¿ñ ßñÿq qïñ/†ý0òç@òæPò%¿&'‡r'Ÿr*oòý¸r,Ïr-ßr.ïr/ÿr0s1s2/sÿ3ÿr ðpƒ0€Ð¥f0€ƒ°ƒ6ï5³Èƒ(€<@(5G <×óƒ`s7t;X‰>?ô shÔÉBð}8hô(†<ßsš8€ã0€rÚ‡>ñƒÈE— gtG1H/u0Kôê(õ0TwŒOgñèÉ1;ídVsiB™ÌÈCŠS)O¬'¯8ÐîÀ£“Šmh€›9w£úÏjÛvè*¯ÀG¹`{fÜÛÿ·.37ÚÍýÖ¢Îhò&ÜW ÔŒF¡.#< úó?ÎIçJF´"³roVtx°-Ðk0y•@ÊMu_ P¢ÞŽye¶Öºv€Ûbs—' 7ð¶ú<]r;ʱ‚ÄXhwèÒ–'Xìò€´=î3],€5e]#´þ¯]k0uݬ@o¨(Ô}ù퇚LŽQÄU]klGYn`Ú™öR^Ã!tÑ?h ÜrY¸Dh8Þt¿·ˆ¸”<š™fG†ªøP[”e¦ãŒ©äI$ÙÑkôfG…ü5×?Å„ÿÖU_6t€,º6’aé"j$iŠÚzXE£T•UÆ5ÑžQbBR$ Ry¹ùø­gËU´A%MÒ>›1£î^žU̹:eÆŒÑû(®[ȱPS|û$Š3º„›~º«†«+©Ð Ç5ÔNŸcÌŒÆH£2È.84\w }x\)ƒlGÎæ¡~<òK³av¸ˆ%[º±˜hœjVo7–}¡kÌüœeþ#*ÏÉ›>®ç–>ûí+k`º??ýõÛÿ?þùë¿?ÿýûÿ?(À°€< ¨À2°| #(Á R°‚¼ 3¨Á r°ƒü C(Â’°„&ü!ƒ(Ä!±ˆF<" Ä%2±‰N|"£(Å)Rñ‰z‹¥d•EXmñU]ô"­¾Ø*1Ž1ŒU<#Ó¨F)^ÑNµ"#àè9Î1Œv¼£רÇ=òÑŠX|#cEGÔ ’2…ÌË!iÆ>2²‘hlã£9«Dþ1\´ä%'éÈMrÒnĤ«(ùÉI‚²Œ¥ÔR4:©ÊNBÒ'¢¥ ÿO‰JYÖ‘–„\%.ÙJ˜¼2’¤ü%0cLaæ1—ÆÔã.MÒKWÚò3Ëäe3 )Éb³šgLfIž©Ìh*’›mѦFÀÎEZ³œl¬ä0Á˜NujÑ›ß$§9ãÙDlŽÓ°Ìä:MÙN{>Jžþd"=3"Nò“™…f>õ)È24  èCºM‰f“¢Õ$CýéÐ…@”£%èG#šÐYb4£ñܨB:šÒz”¥+iáiRk¢4!*µ©KqšÓTí”§%)Mѹϡ“¨ø,*R½TsÖÔ§0%dO rS©Fu|wœ*UŸêÌi&5”\=*XÃêU«F«X%«QÙ™ÿÖ±®•­‚¼\ã*×¹Òµ®v½+^óª×½òµ¯~ý+`+ØÁ¶°†=,bo0 ,&¶±Ž},d#+ÙÉR¶²–]¬,«ÙÍr¶³žý,h‹ÙG…¶´¦=-jS«Z¿ŽÖ•«}-lc+ÛÙ¶µ¼¤-ns«ÛݮֶÊä-pƒ+Üá&Ö·Ù$.r“«ÜåÂÕ¸ád.t£+]Ø:W Ó½.v³«Ùê>T»Þý.x Ë]ކ·¼æ=/]Ç›Rô²·½ÞU¯MÝ+ßù2¾©¢/~ó \ûJU¿þýolù;>¸À¥p4 ¬à_¶’g5kU!¬Õ­N¸›~'ZÛJR o¸« õp‡ÅêV.ÿ~ Ä&>1ŠS¬â³¸Å.~1Œ]ŒŠ¯ªUÄ®1Žs<Æó¸Ç>þ1M<ã²F˜Èe 2’“¬äùÂBµqˆue)ÇqÉV¾2–›ÌáZn™Ë Žé‘±,æ1ûXË_ö2”ÁÜe ;ÙNd~3œYlæ4CµÍ÷¤2šéìÌ8ó¹ÏsÆs×Ìæ3ZЈì3¢ßüçzЄvt£!ÊDS:Ë4f4¦3=åGúЕþt’ÍéQošÔj~´¤w êUÿXÔ¥>µžSýê¨ZÕœ?=wÍÏžóX5EÿÓЉŽó£#}VLoËÓ¡žô˜OÝUQÇÊÕ±¾tžWÝæ]×RÖ}v±Ýç\wº{jeDD÷ù|ÈG DÀ îDRFKpÜ$ÞQl‡õ¡Æ¦Èe|Î+Î!*º†ZÄ" ¢^€œHd´!…<†d¡O_§Ç8Ì‘@-òG/¦÷àËqßÿÉa[´€H aÖüˆ6Ÿcœ¢Xhc€Àà3F!ã HãR䌒Dˆ~œZjð…i€Š(I"Õ…’˜ Š8Ož`£! ¢«¬‰¬…À˜x‰3Î]p`Jž¤÷u ¤O¸˜ÐŽˆÓ}ÄYlFdÊ•dÉgHJžO¦#G öD@!ù,\*rއ&&&777HHHVVVhhhvvvMx¨{z›Y‚®{…–c†®a‡±fвiŒ´mµy†§p’·u”¸|–´y–¹|˜·}š¼š}w¾bg¹kvµuqìz/êy8ò}'ð|2ÏzS×lWÙwGÆefÃirÍt|ÖmhßsjÛwxäWVå^VèhHæjWìyHévWähfçteäsræxså}{{–¹{†¶‚V­Šk®‡r©|³k°Žq»•tÕƒ:ô…ê…'ä…5î”=ó‰)òŠ3ó‘9ˈJȉRÓŠHÛ’OÖ”VÈ‘fÚ€zÔ™cÚ—zߣjÚ§víƒFê…Wè—Kà•QåšTäXï”Uî“[ëœTïšYñ—GñœSðžYê‰hæyì–jê˜yí \ñ [è¤gâªxë¤ï­rî¯xí±|ñ¤cð¦hõ©dð©lù§aø¨cù¯oð¬pú³x‡‡‡…Š’„œ’Œ–••‹‹¦ˆ–§ƒ¼… ¾” ®œ£³¥€ ›™¢ Ÿº¦–§§§©©·¾²§¶¶·‹¤Á”ªÄš®Æ±Ç¢¶Ê¦¸Ë®·À¬¼Î§¼Óµ¼Æ¾ÁdzÂгÆÙ½ÇÔ¼ÌÜÁ€ŠÌŠ‘Ò…‹Ü˜›Î®’β—Ø®…լװŠÒ·Î«ªÆº®Ïº¤Ì»«Ì»¶ä䊊瑃噙ꩉç¦ã³…ä´‰í´ƒí·ˆë¸†í¸Šâ¹á½šì½’쾘ñ¹„墢媪蹧山滵翸ÉľÚÄ­ØÇ·ëÂúÄúƘçÅ¤áÆ­êÄ£êÅ«íɦëÊ­æÁ½àȱåκèóéÌ´éιéѼ÷ΧöЪúÒ®ø×¹ÇÇÇÃËÖÃÎÙÎÏÐÍÒÙÐÌÈÛÑÇÕÕÕÔÖÚÕÙÞØ×ØÝÚ×ÜÜÜÄÓáØÜáÞàãÚáèåÅÅåÈÉåÏÐçÕÆçÙÌèÕÃèÙËåÓÓçÜÓåÜÛèÜÒøÜÃæáÛþãÌùåÔãããççèåèíèåáèçèëèæëëëïïðôëãüñæóóóòõøÿ÷ðþþþÿýùë&° Áƒ ÜÇp_¼†÷…›äíÞ¼i“ÂÝØ1¢Ç‡=kØÎ< TɲeA‚.c"„)³æJ›6iât©s'Ëž>U :SàP¢ã)¦´iÓD )…TÁž X+HsÊ5Ó®fÄ,‹çŽt]•îSx”¨Á¶noÆM7n]¢wƒæÕ;—­Ñ¾“.MïP…iJ¥U€Pá4Fô|#ì5­21bÒ`vEy-]ÀŸA¿=šôKÓQïõ¹'ÌÖ.WNKµP5m†*<¸ÐÔ0bÂ_»*S“Yå‡~QË% »fsçÊŸÇ”>=zjÀ²ƒs§§ ò\ÿà­4÷ï´Ú»º;®6¹jëïᛦޒ~}øöf'ü-σïä‘Û!Ó0Rd”¥Ç^Zž%sBß|Ê-'Úk¢í—#<€•rUV[%¸ { ”ŸP‚¶¢{RØ"`‚¦aW†( !†H €!à0rH"Õ°§à‰N¥XÚ„16餋3Òˆ_†NO!?–§@!HÖ%ƒ0>)%“böõ¢ƒdBia\7r•ãŽ=fÙ¥•]*yZ”s©b…z.Y¦™SÚX%az¨›Š|I'’v^'ã£执]|ŠÝ iõ7Á¦ä1Ùœ_‚ZšcB©[}ÞI* kºÕ&Wßÿ2ž!Ú„ºè‰¶Zê©xUºª¤“¢êè\¯†zÜ­ 暪ª¼òl¯¿+£žÅ œµI†yá³ÎF+¬·ßNKeSÈb[îq ÝsϞ֮ܲ»àvkªšÔbŠí±÷*u>M5¸ì°jÎp³ðÆ o½äæ‹ï½ÝÜ“®R̼ӿÿê*­Ä[ÚWµ {‰mÃ݃œÅokpÁç䫸‚&Ü1z\­£Œ0Ìœ²@"{V1Åïf|²k+Kˆ°Ç/ÛÏ9fafÆzÇ5üp<›,0«?«\µÕ,_êrÑöºCœ+½„Ë‚ûöõÀR§ŒµÚ2í¬1±Fs=ÛÑb¬¢Ô:™%»ºì^ÿÝvÏ@û]àБ¼Ç·Œ¬4¥Ói‹ö仲=øÔT =.Ñr§fʸ#Œh$+yå”gn9O„žõÆqs­,˜ÕŽЧ«žzÉi÷¾;ïc=·ÜÃÇ£Ìi¬r;î£bN©à—¯~_ëƒ ®±×¯#*šÎ‡+ýôÝC }}Ý”oþù觯~ù"GãþûðÇ/ÿüô×/'UHAÅñÇsÏú  HÀð€L ÈÀ:ðæ˜«bw/t(ãëAÖeÄ@1ŒÍlÍû‹Æ>æx¬²^ÑbQ;3°#8븅)jA§„e,eƒ9@È=†ðwÏ Ÿ¼ÿ|è vltÉ Ë*¾²RŒâ‰£‡RÜ‘7¥¸B Êàaß„ˆ2ßQ|Dì!½6W~Œ^ÔÝFÆëQ†ŠihÊ;¡”'6Å£‡R¸ %f뇃ô»˜ÉÀ‘p„FTØ Éb6Æã‰ut£$•ÂB¥¡qgC,9KÚò–ß e¾6H.˜ëq£)Ä!G::Å‚䊲‚H\z¯™AÜdàt¹KâlA bB–q‹¼ OÄÅ*Ä`†,Fî‡êZW4¡ùLv²“žÔ\Ë8§°s` Nƒ f0ÿoÎ Z‚@…0ŒsöP™í¬å:Ý9Dx®ÍdÔT {á0¬À_°…ša ADPa–2ÿí bïThBUšRZºôyÍ×8kÆ ¬ ˜±…„0‘Æc BÆHa„R䬥Îl¨Cÿöɾn[{ ]a)´€§ÝvÚS¥„á™ÈÆö¶XÔ£*õ¥+E+RºÔêRnìÐ P¡àRã .€Á„ aá@ÀCÑ’â̤"ƒÚZÓÊV–ž5©…é[å¦4U ¨Å X°‚ Á>Â~A\à0 aj’NÖ5“Žådle›ÂÉÿOT \Ðl ­2㈠$bµ[Äß"Å:µ±TkdÛX`Åôe¡HZ@µÐ f|ô9Å8ŸÐäú‘%j9©:OHÝŶwºî/!çYÆ¢ECfÂp…¶ eˆ–¶ C, •KŠQ%YoQa YMJó¡mDmK<Å hËP EÐCaÙkdÁ–.mUì`†Â×Y×Í—;˜Ì)ŠaZH‚ Û‡9ÜàOLjœôŠl½D~ïŠO/9—Î×7„4ˆ1ds›JYÆ5{Ð A G8BfXÃxT#€8Ç;ÚÁ½½9,ÿdËmn Üd:Cx¶-#} I™þTEr>ÅàÓeDÁ80…¢  ŠâPÌŽ b¤á}K¬¾ü‘ÚÖÎ9ŸõO¨'a=kžÖBDc41…è!£û`-Fq‡ hCŽ Á%â8Ç<Øa c`‡5˜à6ûÃ!ØXWRâ‡%¶Îx¾s´]ÝèJvÏ/O<Æù‡ ,bqv‹$Ñ)>Ѐ%x$ îÀ,îÃ~¸´Q•‚K:¤Î5+SLíjN¾O†VŒ¿4p°X e= Z(¢H FQGS¬»ÝÊx·Ü€iˆ5,øö̽ó=²}ûÛm¯ÿM1‹§el©úÑHB˜‡«Ÿ6qŽ– D% 9L9Ž"u¶°‰ÝäémöIkr;÷ÛéMõ¨ã3ð.icDu‚@‰ Ô¦¬’oL‡-`1ãÓ®\‘ QpAÒ¡”l YÍÆæ´ÿðí¿c«Ë3 7Ýóð½çyÚQÇ{húþ¥‰zE\)Lq‹:Æ£b`ƒ2”asÂ’Þ(>¬³sê•KÛ÷O}èk‹m®ÍÔ+ÊÈ+MQÇ+*#†¥ˆÂ)Ì»n䪬%¿;ð‡¿}í3Úf‚ ÿúÚg¿ò—_Rà_4šÀ‚%ˆB(x –à‰'HaK@Á XÀOÀoò„ Øp>(~x€˜€ ¸€ X@„t/q•Tà.` ñ@ Þô30 §°P@vüÆÔóÖÿ£G¶tà÷}Á'|®Åo/h]-§0••M]0¸›ÅQ0àZàðpU1°JÈ‘ê¢p‘yå³yIp-è‚ÜW]VèVÅG<^!sd üçe+°\ÐR[0,€íaV÷†^sW…Jöy0Ø{Yè}×vjõõ2L!G2 ,P î0eÈB†ZF˜ dÿ! Ðн°"r*ˆX¼7u2¨‡XX‡tè‰VCzÖòé€ ye `ÀY`5-ÃC"!c XNg æ\H'…çÕ}1¸‰Áhwœ(p5è‡MY°Oü×Z ŸU„,ÐC° £ƒù q Õ!g’‡3Ý0€•WŒž÷{yˆ‡Š…#ŠØã®ÀW0†MBZ-Ð0æ0N˰ðà³°iGG6oêR>a‚êÈŽW¸Žç8ƒé8uîØÊ DËÓé! i@C€®T> $IZÀ ª€€ð þ ÷&&(儸1ÙTÿˆŽÙy<Ù“,·…H R…ÇG µÃ8& « añ vpFÀ Ȱn0YŽáxXÖ·Z™I‘l)—\Ĉ“)‘P”ìáp°u$)‰3i¡«g`«° ½`‹â T@ Â0ϰ'Fö•˶lÖõ†dÑ–XŒ©rYw¢7…0vŒi ÛuEi@N¡„¡P^æѰEŽ¡i_‰íAyÒÔš(Œf铟X™jyiPüµ @EU\Á Âð|îÐ «P—L°v° hà  úiËÅ\—×(õq¾x›^‰‹ÙG–“ žÀÿ8Œ¦;ÂyH˜AB° l°Wq©‘iáaipé` \Àc rRÐ ½pqпHÙ™‰u‡­Y ‘Éyv8ži™]¡Fl0P>@埚ДzèÀB$yM[`°8Q°Òp=`À Z@Íà'n¶qL¸˜›¤ im;ù =ê£iɇ×cObð¢BPss©Ã…˰ ÀÕŠ[pcBÐ"Ð!P’0? ßÐq@q°$¬¹£ 1¦'Xo'ĉEw(G›³yrˆ3—uy¶×ãÅ {©8vBÀ½ P;ðc"0w0>ùà¿ÿ@oP‡É‰ &¸Px€@ÐFð¡õ Ðð¢˜v':꽺©ì˜µé©™“ŸŠ›BÊ…£úhÀ›ñ ÷Z>ààvÐ[£%P¿ð C ïP¿Êáz©nú¦áÉ ?ŠŠ-㥗b°†DÐ p@ å‘`!=`j ¿à B¦štß –ë/¤6¬@j¬Åê°Z˜¬_b>ÇšKÚW—P¡…RÐ#°tPF \ ÚXy ‰>2a¦< ±äy®1{–ÿ;_‹$èsî°¡± G± D@Ac ¼@ „° @€Ö[ öà Z o/áç#©vè*³ Ë k³æˆ³ØÑ ‘Nj‹¶Ì÷ Í·èàöpôÐ Õð Þà Á°­&Ѽ ÄðˆÅ>,èµæz‡_‹–ˆ›¸Ä‡šŠøÐ û€âº×™Níð ÎÐ î{»·ðð ÎàîÀ »p &åhjØàú¶Ä:¶³;³ê¸4ø.ØÇ¦ó6Ž 3ŽØp ¿€¯À Ý 0 ü@c ¼Ð k ˆo÷кñº‡E£*»ÜÛ½ÇZ»¶ÿ›»'³‚Ï&ËF€ä8½Hvëp ǽp Ûðqñ°˜{c¸å+¶‹{³à‹»éú½|ÇLØi`tqT–:€˜À ‰dñ0¿õ[€ á»”—µ À`{Á̸ú»¿û`žöÿófœÀ Ly"¼ |Àø?.«Úûo,™4 ¬+Ã[®l!Áæ£ÀL½eU>Ø œ6½ô›°w´›Áüë½Ü¿þ¤8œõ–yø?êKÄ,ŒyQ½QÅG…^©NjªµªÄIlÆáû¿M<1 ØÆˆÂ(LÂr\€Ó‹ „àÀºtLÄ@L€~ÜÆ€È‚<È„Ü@4\ÃÌ%–]ÿ|t LÂP¸.GvB y\¿HgÄóV‰‘[³N\ÆhÌÁi¬ÆÌ+žöÁ*Ѻ,Los ÁÃÂvì@ÉzüãwÄÞ¹äêo0ÜÉÛËÄLÕ¦ µÔG¸Þè 9ÂU w@|DZ,˨À ÌKÌ\Â*žœÚËœÍÚü˼š…ë4ùKL¸kwLŽéõÊÍ,˾ë„!çÍ jÃ1!ÍÖ,Êg¼ÆŸ ÊÓÌ®é\`œÉò|oDÜÃ&Ø Ì¼Îy,€åÌ>¢ì˜MQÏ9Íø¼ÍÍÍ“RTã» ¬Õ‹ âøºfeа¼Îì¼.HÍ ™èŋٗËp:– ªÑB¾†ÿëvò|bõ¶7xlé|Ð$ÇYÛ ²yÏ2Ir)âÒeùĈŒÍíØÍ!̬Ү›À° ÄêLɲlѰÂM˜>ñÓÁ\y6Íɾ\ÑD}Öh½ÏN½šËeÊœ·¦8-€ÑÀÌ€  v„P€PÇÓ›Òâ.ÁŒ‰Ô3¼ËeÖº°J­ÕÛ0Õ{ÇyL ËÓ>\>Û@Äè?_í(C-®dŒØŠ{ÓÍØ ´Ö¢\¿êwìr`xŒ×9m©&­Ê{\n}‰K Ö1ìÉMÑ®ÅÏmåÚ2yÇ{×—=b]yŠ9ÇÑιGáºØú¼Ý¨ÜÂÿÀŽÝݶ ɨ.AL„0×PÛ’—y"³Ã{ €Ì¦ «{ö=ÜL]ÜfÊ©­Öám]é«ÒŒÌ Äs-Ĭ»ÕV ØŽÌÐrGŽê¤úÎÚýØø-ÕŽádÛG‰…£l“­¼iÇÄPây½Ç«¬¾!,y!—%Õ`YÍ]›áßÏâMãw‚ÜDËdüâ»È ½Õ"ƒâýÙã˜Û© ÉÈÕ¹Ò]ãÆÍß8~ÈU~:NGe}¡ÍÓPs¿GtüÆuŒâæýåJÑÙ·¼²±yŽIá¦}»Ä½ßT¾áIÍZM~“a½Ã7ÓÏdnÕç\ÅÕKrÔ[¾î?ÿ~»;㼜ߪ=çtÞØcy¾=®è~]é–úà ¾Ê §È'Fؾ]Ž¿]dFÍèná§é>zÝ ×8Ñáñ¬¶ïýÎ#'Öš–lŒ¾)NyoFÎG]Rš Ù =ÖVžêªÎÝÇŽì¬Þ"qü˜àŠN“$Ü•ûpä|<íÉíÜ Ö>í}Ž&¿=ê¶lÝ­ç×,åúé«!– æJÉÀÛéš]ÞVLÇL< ßüÎÍ3ÚOýÍkîö¬ìÞèìÂÏåƒÓÎ.A­ ¼\æ¯ظ‡o'¨l4 ßøF±\1މ°?îèunð¦nã7Þd2Ž /[!ÎíóñŠ<”WoÿõèP3Ð"^ì<­`”×Òÿì%Oò@ŸüÜîòð²ïŸyPÙE.ÇL¦èÃà L©%úæ&ðýêBòþ&Í~VÞõ¸èíÔm'ȦëPoñëµé$¾kñþüó`ïõSNðßê•î}²NÁF¼àlöë Ç€¾Ê÷ö±¡LïÎcÍõÞMÖ__ð? Óœœõ¬i©ï\ÇL_‰êCŽ ÞÇW_ØYyKî„uoù’Ÿ÷A?ù¥‘å®ò?¾x“™·Ð|n‰îÍ•“çÈ ‘ÌŒduAûPÚ·úé¾ê”Ïú­ï…,~Þ.@olø ŽâlOÝ¡/øýeÇÍÿßýÞÿý ¨ó“OéýéO“t CÅï•ÀkíôýÀò€lL÷o˜oú…Krž~ç˯îCßÿEþ$XÐàÁ‚Ý.dèï^¼}þºí‹w¯!Åxã9ìÖ±›E»a#ù‘དÛH–,ÙqeIˆ^ôØm£@#úÓˆ-cC g%JphQ¢G‘Uº´aS§gB*´*‡'V zÏ+Η7ŽôrßÙŽG¾Äæ’-ÉT î«)ÖáW%ê¼*µïÓ¿ åþL8°_‰‡+ÆH—/Ò{m½Ž4ÛY9ÓZƦ’dF–l?Æ›ØP羇 f•HQµâÂ}cWÿµ¶mŧæÖÍÛ!h®K-ƒŒ|Sm^ÒÕÚ\Yo-ÄС™?ˆÑ+J»Yo}}ø¶ÓïHÃO޷̱çÑûF]ÚépÅã“Fns i”m×úÜ'½íç½²›«#ìCÈ:›bâ­¼¤ÔKL=ƒŠ°!tÁÈ>ʯ²Ë02ð7Ôô[ ´ÿVZK+Ö~£ŽÀüœ ¸t°Bß&dÈÆ/LOǨP»'Æ„®âì3C̨¦Q­$ÏlÚO´±øÊé'ºL(º ºÎ0ÏÃq1/yüÌ¢Ò¨»«2Ó«œPR‹´·œì,­ëÞ‚ »ôâ "ë&s±·0ÒH¶Ç4Ìÿ.kLQ¤kìо=rÏ9#EÒ€¤Œ³Ñôi¾\£5êr¼¯"RÑ4/Q-d5·Ý^*EQƒ ŒÖLƒ«rÏŸ’ µ­=;úíÇ¡pµÈß$ ”ºdq“Õ»g¡uÕPH‰2¶Z5©Öþ:RN›Žý4£mÚnÙŠÌÜII÷˜ZVµfÁ+4Z.]E”Z[=í1£“”>åÚ[ò¥­bêHNÍ\TPÍÔHÁ 8µ«ðí×^Eé%”ÆŒ—r¸ÔõŠ*r É¬D)¤)Ý e‹†$)O>I¹SóJË]t­x^Œ[íÖE;^jd«Êl“×ä~¬ðº*["³#턉¿ÿùÎd,Ÿ$ó.UÅã™Q¡ÃšcŸÅ^è߉›mJ9¿uØ#8Û‚ÓI*÷é'%+:mkؾ6[ÚŸû&{l°¢•@’TJÔ#I ÷R‹ÖRîÑH •«KKŠˆÝCþðÏë-|l‹=/Ûpm¯5èZ9 7¢¤%*Iv'³º6²—°v)»Ò|ôß—¶wß» mTzÔKµæÈS˜ÈJ.O»µÊú3Ü!RRS7Þx¿[%¾÷ï8o9§›â¼4¢ã¶sºu \²ÓÐî»ìâïÁôÐ7¿û“ )>x1ûäf¥à4¯mé’Y Þ·¨a%ÛˆËýLG¸üy¯_ÿø0x‘êEŒdO*×Hø$%±Ä‹l"©Tô€e ÜÙþôgC.ý‡ÚI]×hD–Ž”Ð„È©›5™‘%"ýaËMâÑ$ˆ‘σÁ;]§Ã Îìr>< çF"J„@ˆãÐB°8M†\+ZkèFgí°†X¤!rNè¼|ÉNj ²‰õb¸‘ÔT)†|gZ8|™‰ŽVä#õ·È¢Îj"ÄšÔL„™šØG90,Q%§¸)kKɉÇ:¢²ƒ§”W£¼1H¹¬%qÊ[(e)¢>Â0?+cÊ”ú—þü醩\ $¯8ÅF/s…‘ôLØ"Ú é!&êˆõ:ÿ  ˜‘bUQ©Éo‚sxÈfÙžÉЬ$Duiœ?fIb™H\VZãÙL‰a¥YTƒc+ûéÏeR %hA zP„&T¡¥¦%Eã–Oî±&j¥A+ê´…Nô¡åhG=úQ†T¤]ž8ˉÁé=QD¢yXªxr½¶Í,iIçl´y´÷짉óf1YéÓŸz­x' 'è’ã¤' -HЧ‰š‡¾üüч2ÑŒ/Á3‘‚ás’´ êªäÈÕ¡ŠÎ‘¢£‹CG’ŽQ4ÃÉÉ"7~Yå:;Փȸâ­S…@ý§P¿ê,c&ty³ÔZ(8Ä̰¨$¸ÃˆâÓÿLÒTy‹©ÕžÞ³¼Zvu`í«W;Û °rФ¢Ûçe†'ˆ`îLð£SŸ—²Ö±”mÖ^õÙ¸»¥P[¯ôìXE;Zÿ‘S¬( \†´;ÆÍmv.)âdLé2 ζ”ZST€Cå(ïcS¡oßøYe…ö»Þåì°BSPÂ.µÒÑJìØ<Ü¥u²É’Är2+šª¾§ÒÙ¿`9]òª2À­ ,Q«22¥h&©²dC_/LI.nÕ¬Œæríixë }1<Ÿël“BàÅÙ_ ,ÜßFe»ê{eRo†V•Ù $.Kí;õó_ådÍ4èC™ÛÛ…öÅ#&¦_IL¡ÿ·Gvƒ ì²–’GéDrû’Cà‰;‹¼s4¢Øh|ˆR2uúC2ä\î­º)6°`‰âñfërJQ$I~3Ì4—%’k톋Õ&JwuÜ9P7¶¡Û™z= …l’o8Ÿ‘0@Wib¾öWG±gîÜ!T 2-¬e.­ŒU˜ÁDÐÃ’ˆˆ òÔ–f·MhÔ*_RsÑÖÇÿ푉|i_S2RL¶¯LžÜuÉnÂñe¬•]Kj˜nù =±íÓEF†5õ­bNRÝîÈë|]«¼•Î4°‹ÜÛ«¬¸Ø%ͪdÀ·Ìxee}ÒNWäZ$+ËÒ‡Ma1&ÿæëµ¸\T7çÎãŽoò˜”2ÍŽsÍ¥äb¤¤™®5Ò Ó›Z4gOŸü'³«#xÕ¼9”>ŵÜÀe³Â»Úk¡q|ª§¡X ÄÅ’%¼øìvÔê‚sP+zñ¯Š–G†{ççF÷1_¾ôÓ Š»ÇçXRDßÏÄí"(ÙbÍL(æÿ¦JÞ\5[×åù»G\ÇôÊÞö¦'¼+LVå$¯ÔSK×½ZÕKÿGulܬk*«ÂDòé077¹ãÞæl«Úc‘`:…Ù˜©÷,5GU§S$å]PSoͺûÌ«òJçÓ)Íòœ~¼jªaâì‚l0QQ½Ö äÿ kÊ*·§ÈS«É>=V4|ïɸZî-otš×“dæÇÙx/Ù m&=3ãž:£$›b¢ßKøl²Ôm~‹_ÝcÅSCFøê{¬3œA_úËt~f?Ó\ôvtLO§-–¬À¼²Ø?Z ÚãµØH›/“ æZ<¨û¿ns¾X;ƃ=ñ؆±À3Ø*ŽÃË'%‘Œ¢¨­››“y±-»–ѹ×C¿ìš/íX?H ²ã3•êÀð’?†k?ÛÀÀÖJ'âàfñ@—ˆAüJ—f Ìš›)ÑÖš›D¿êJ¾ý«5ÿË£þ±Áø[¸ƒ£?¤° Ð:¼#ýó¡Ô»Bƒ°*ûê–ÿp‘¬ù |„hÃ2«0ÐS½Äé99\¾2¼A.´´"ä.‹y’êã%A’BÒŠÊ2>³P;t錛øº3!?Æ#šC$#¬P<„Àï ;‡ƒ³ôC²?t»…°>aSŒ »8ó;DÔ¾™ã1ÃY#‹ˆ±‹´íB+˜ %†h¥ã +¡0:$Q>ÏDKâôÂ@e¾-ÓñC±L=²½ý5::a,zQeœ¦4£Ñ!Ì%»/,$þôRM Õ`%OR±7Ã!BŒƒJ…J©Ô_±Ÿ³zË/kKϹÅn 6ÿôPR|Ìpõ˜ü´¯´4µÂ ʯyOÅüT> XQÓ’ÿwÔ-4ÊÈaG9«¯1¸sØ Ô‰×ýL«³XN-OSúˆàØ9ëØélXo¥AÌÕ‘õWü’¼ìàÉXüˆ¼ŠÁ"†ýØ™K‘-YœýUúâ­SÊÑV-=Êt³Wz•8˜Ó×>-Ú~•Ø›åZƼ·­’A¹À×Y14 3U%\ËîâÖ¬å×,XˆíÚˆZ£Z)ÃC6»5x›NeK’EZ¯­P½Û%4Gâ°}‘@1áÐoMZ¥\ÃYšeFEdÛ‰eÜrÜiÜËmLº[µۭ՗;DCÇäÛjÒ[[Ýך Ý£ýZ`%\£Ó\ÁU1MT 7)EÿŸ3K²µQ¢…Û?­]Û%]Ú]Z¥™Üc»ÜÀ»Ñ‹‘PÌ]Øu<æ-Ü XîíÞÑ ÁŠ˜LáM}ÜÀÞãEÞíUßõýÞ •å|ß” Yï(Iû½_üÍ_ýÝ_þµßŠä¨ÿå_ëÕÞð”Ü&à¿M_.ÏSÅ]¯¼Ï×}ÛØE\Êmß¶à Î^éµÃèE]ø£_OÕÚ¸­` fßFàÈý¿£Ósõ¸ìUÐ¥`N` ®a>á™ùÉâ5ÞUñUvß þá âäÕÕL`ï\Þa&â¦á'Na¯<â‡5á-<_Ï\b$â"öWj¬6¾b-®â!†b'.aÿ+–b¯\a&nbQÄâóEß.Fa5æbba7æÑ1á<–]Fc;>cAä7ÞãNã:.c?þcB^d¹UbâÝbEvä¦äJ–a:¶d ÆÞFÆäL>]DÖäPåQ.š0Nä9þdÆekfçr6gb¾g|žç æg}Þgu>gxhw†eКæŽçv.hyîgmfèÿ|6åt>èuŽhƒvè‡è†Öh1¦çC¾hŽžh‹é…ÎhögN&锆è‘vé—ÆèŽiRè’–h˜>é™hžÖé›nišjŸfi¡îé›Æéš®è£.j£®çwnê¤þé©–þ½j¬Îj­Þj®îêþ i“®ê§†j„îèoFi².ëþg§–iª>ë·†k³k‚~>¦–뱦k´Öë½–ã¾ö넾ë´k±ÎéÂ6l©NlŶk86d¾žkÀŽëÇÎëÈ^ë•Fl¼Îë,éÊÆìÌÖcÎÞl¶>l¢nëÒ^ìÁ†äÑFíÎöìÉví×vkÊ†áÆæìÖ>íÏ–mØêÿcìØÆíÜFjÖ¾máîâflÇíËÖmænîãþmàÞÞNm¥Žnâ6mëVnÑ•fß¾nÒÎî8ÖnF†ì íð®móvlïFgô^nçÆnøŽoÖžnéînñïݶïóþÜöÞîê–oãpêþkÚNîýNoWïGðÕžïoðïëò†pèð'oýVpóMpÛ¾ï>o ço§ð ÿn /qolú^ï7qn·çŸp÷~noq¿p ñ{Éðïoÿ–ì×q•òñ·ñ—qöFr#?rr)_qòürü¾òqOòp/‡ñ ‘2/sÿ3?s4Os5_s6os7s8s9Ÿs:¯s;¿s<Ïs=ßs>§s;9˜‘@WA?B7t9tÞPôEOtGtD÷FÏI?ŒJŒKÇtH÷Lÿ‹N¿ŠO¯ŠPõGõ¨0õ¥@u¤PõUßôFwuJ‡õX't@tY·t[§u]ßuN¿u\×õh˜‘`Wa?b7v9vÞPöeOvgvdŸiŸvj¯vk¿vlÏvmßvnïvoÿvpwm'€?÷;(ØÑ†Àˆ@@÷*í B(€ ‡0€(wy§w{7wtW÷ƒ „@ |xxwðÎiô}8Hxÿˆ~¯Šx h¬}ÀwV €AGx…OC†ÿxˆ‰¯wðøøˆ‘ ?uzo,‰ywG÷|’ƒ™ˆ@(÷—'„xHy´à 98ú_Jz;xøhzM €ž€{„¡§w59ô¯'膩'„§°ƒ 8ûhøø};°¬_Š·±öÐwkñúAxl€@(û³Oûµo{ˆ†‡û¹¯{¤€ˆÊG|´ïû¿Oõ¡÷ú¸—¿·Ì_ˆ¥¯ h÷Ñ÷ÐùŒ0€£·ƒv÷ˆ÷ÿS?Òˆ†{€ˆƒÛ¯ l€³€n(€×};û@/|h}8€€—ô`{(€`‡ ×~è÷¢0{¼¿€`€xwq~ž°~šþê¿~×þt'𢗈øÛ ÞA økèð!Ć€M@à p/¢DŠû|°ÑGƒ÷ˆ6 ZC g‚$4àFr Dó§C p±!!†@`€¿—1?.©Ó! í(@1*¶ª³>¼G€€툅˜pŸ€h¢Ý°Ï6¨mƒîÄài€n^»ÿ«V¬ ”víá†í ŽÍ.^½‡÷Ð-@Ò¯…r†zà!µ• ð)ÕŸ€»‘$ô¹ÛUsgeh0F¬jyc í³M˜°eϾJÖ×Õñ"?‡ÀÀ¾Ç(¿Nh @7âaÆ–øðU¿J§žxÀxhŸ¸Ù¶«/ß59P|tOPÔÞL x6”Ń nuqP ÝTÈlŸÝuZ…õ-$!…Ä¥\\ídsm='‡†=G€O‘%$Ç…OݦRèí4aCr ôb1Šõ\B8ݘc[˜’÷äaÀ)vTvÿ¤¤CZ6$WM¹øåiÑ"€ðUèNþ d¤f¼]ÆFgÉaQ…wÚaÜšm¤âNQéDÒerH9ÛspšÛl 9´Û|B¹Wn&hй×8J)é”¶U×@’袙‚vX™§p™­ ŠJS­$"¥¬ É!GXäöfAlùÍ@TõÙlAmÊ[j(gl¡ÄÙÖÐ=)—Ú`VÕÍWÃËnx8[¤W¤}Œ*w´¿†;¹´Ùnºë®j®>+›‘ܵeÀÝ ÓÀ4!l®CÝäØ0²[|1Æk¼1Ç{ü1È!‹<2É%›|2Ê)«ÿ¼2Ë-»ü2Ì1Ë<3Í5Û|3Î9ë¼3Ï=ûü3ÐA =4Ñ¥¶®vE+½4Ó;ÛÑO˜5=5ÕU¯ü´r`¦(ZqH·RæÈcOÂQfÀtþpÍÖÑݸêÏ;Q66$å¬Õyë]óÓ €],ÆAj†“$xS-=ý1N8!ù±$ †{8!•žöÞ¡‹ÞòÓn×P eP‡Qà*ØNaÃÒOØRê°y¤!~Æ5Ƙšô¤áèÅ2ÖQ“7œÖ)àá>ý†L÷tåÌÛEÀì‰NÓ€ccÇ›þÇÉë†zl%y]Ab£5€PÉÿíþdˆÍPû¸¯öá.2>×íƒ^ƒú¨ÀŠ©¯y{rJ~ü¿¨ŒpØQw8ÃAå†c‹_(¤5¶<Îp¨Ü–¨ÂŠ%rH[ e¬xŒ[±VCfÛ D63äŽØöÂ_ÙÍ  “¨D= ‰K|"eà-ŠV¼"³¨Å-r±‹^ü"Ã(Æ1’±Œf<#Ó¨Æ5²±n|#ã(Ç9Ò±Žv¼#ó¨Ç=ò±~ü# )ÈA²†<$"©ÈE2²‘Ž|¤Íº!ÉIR²’–¼$&3©ÉMr²“žü$(C)ÊQ’²”¦<%*S©ÊQ" •®|%,ÿc)ËYÒ²–¶¼%Hæ/•í2e½DÙ/OL“u—Æ<&2“ùJ]¶l˜%s&3YÍ‘S™Ö¼&6£¹²iŠŒ›!ó&ÈÀù±jb³œæ´¥6yÙÌuJ³™ç|'<—IMvn“žê”f<óyÎtúÒžýl'>õ)Pkò˜þ4(@·9Ð…"³ Â<èCÊK†Rô–%&D1*Q_V´£³¼è33ÒÓ£&•g7E Ò•Î3 '5)KSJÒˆÖÓ¥/íhL¿©Ò–ÖT¡7õhNùS™öt¢?Å)OïYÔ.µ¤G­hPÇ9TΔ˜O…jR™ªÔ­j•£WehT=&N±NU¨UÊX;–ÿVŽ­ucmÕØ[3WŒÍõbm­«ÅðZ1½"‹¯oòk…KÁò¦>8,b«ØÅ2¶±Ž},d#+ÙÉR¶²–½,f3«ÙÍr¶³žM¬.?+ÚÑ’¶´¦=-jS«ÚΆvµ®}-lc+ÛÙÒ6²­­-ns«ÛÝòv··í-pƒ+ÜᲿ-.r“«Üåªö¸Ì}.t£+]Ç:wºÖ½.v…[Ýìr·»Þ]ív¿+Þñ’³á-/zÓ«ÞÞw½î}ovÛ ßùÒw¹ò­/~óÛÛûê·¿þ-ÿ+à—6À>0‚3kà3¸Á kÄÊ*Õ³B˜­&kd‹¯ «•æ05S âÿ“¸Ä&>1ŠS¬bÿDÃö°[a ×f®¸Æ6¾qŠ[,c¹î˜®=¶+Žƒ,äëÄDå*B›*Ì!3¹É".²’5å‘NY—N¾r¡ŒdšnYÊ]~&–Ã\c-w5É_®pŒ¥)æ5£˜Ìf.3—áìe_²¹Î,¦‰‹“ç½ì¹-}ËŸÇEc;ÛÙÍq~3¢­hbºÐxþq^!½WI÷µÑu6ôœéES™—–f3¦;-gQkšÔKþ´˜C晪U1ªÃ¬ê¬–zÕò¨­¬ë+Ïص¦5§mM×a›×¿võ™‘½iF3»Éņv°¥mêioÿ­”þë·îÁ6`æ>7ºÓ­îu³»Ýî~7¼ã-ïyÓ»Þö¾7¾ó­ï}ç[Y‡É–Êž2£Œà'3¸É^2…“Œá4q¸È 2‰ƒŒâ³¸Ç0Þ1sŒãjk™Ç5òŒc%¿ØÉ-–òŠy|åÈrù›`^!™‡æ¼±9»@>›¦Œç(óùÉ€n2¡—Œè$3úÈÉ¥3½é{‹ÇFŠteu«ECWVµ h‡ÌÍ'U÷·Èº.œl½H Ë×~ö±kdPÖBÐæ;ØAéÛ†CkÍJdxÀp6Bw'zŒÆyÚ>öŽœ‘v¼ß1;Äe>úÿãû´°wÔå.FYêW¯›ãˆkã…ŠËÖ†3ñÛÏö$³ƒOº!€Ö«M÷L >FæÚcÌ$jI‰L8 žì1GÁʨBÆ!À8 7Np’ò}¸pßû$Š®/þóÃOå·;qN“šÆ0m1=V‚c2ë‡ßøÚN Œˆÿ}Ìš@7¨ß÷yHÂMŠÖôß3=ÍJ`Ç0ˆƒ@ˆXðKŠìŸZXɈ ÊÈ<Æ= e$pK’À‚Ìg|E nEöyÌnÀÿ„àÈÔ`˜à ^ ™˜IÜ|ÉaœE ˜òèìf‰ý…ZHÊŸÌÇt†­˜Eò‰ÈHái Dí¤ È¤Š±Ä†žXaÈxáßXÉBáÆÌ_°DÞmHÏåHêIÝÑåˆÛÈaÈĹøO½Œ Ë>Ôa楴Äa j´â7MLùC@!ù,{*R}‡&&&777IIIVVViiivvvMx¨jyž{{‡{z›Y‚®{ƒ”c†®a‡±fвiŒ´mµz‡¥p’·v”¸}•³y–¹|˜·}š¼Ÿoš}w½z\½cf¹jvµuqìz/êy8ò}'ð|2ÏzS×lWÙwGÆefÄjrÍryÖmhÝxeÛwxäWVå^VèhHækWìyHévWähfçteåywƒ|‰†z—¹{†˜„x¿ƒJ¶ƒW­‰h®‡r©{¶‹d±Žq¹”t݃.Ö„:ô„ê…&å‡6ó‰)òŠ4ò‘:ˈHÇŠTÈ[ÓŠGÜ‘LÔ”XÍgÍžrÛ€{×—hÚ’{ߣjÚ§wëƒEë†Wç–Jâ•QåšTäXï”Uî“[ìVíYñ–GñœSðžYéˆjæyë—gê™yí \ð [è¢fâªxë¤î¬rî¯xî±|ð¤cð¦ið©lð¬p‡‡‡ƒˆ‘™…œ’Œ•••‹‹¦‰—§ƒ¼† ¾™¥·¨€€£’„¸œ„¢ Ÿ½¤Ž¹§˜¦¦¦©©·¸« ¾²§¶¶¶‚ŸÂŠ¤Â”ªÃ’¬Ë™®Æœ±ÈŸ¶Ñ¦¶Ç¢¶Ê¦¸Ë®·À­¼Íµ½È­ÁÖ·ÁÍ´ÂеÇÙ»ÅÒ¿ÈÒ¼ÌÜÁ€ŠÌŠ‘Ò…‹Ú—šÎ®’β—جƒÕ¬×°ŠÒ·Î«ªÆº®Ïº¤Ì»«Ì»¶Ý®­Þ¸¸ä€äŠŠç•ˆåš™ê©‰å¤ä´‰íµƒì¶ˆí¹‹ì½’쾘壣媪蹧山ⷼ滵澻ﵴȼÈÉľëÁêÅ¥æÁ½èóé̳éθéѼôͧñÀ¿öЫøÒ®ÇÇÇÃËÖÄÎÙÌÒÚÕÊÊÕÕÕÔÖÚÕÙÞÞ×ÐØ×ØÜÜÜÁÏàÇÔâÒÚäÒÝéÛÝàÞàâÙáêåÅÅåÈÉåÏÐçÕÆç×ÈæÙÌèÕÄèÙËåÓÔçÜÓåÜÛéÜÓíÞÞñÏÏöÛÂòÔÔàßàåáÛóäÙãããæçèåèíìääèçèêèåëëëíîðòèåóóóóöùþþþÿÿõØÁƒýÀqÚ¦Ï^4Nàô=„ˆ°¢ÁŠÍœ|×l^ÅÿBþË&²¤É“(S’LɲeÉ•.c¢„)³¦Hš6eâÌér'Ï–>¢,H¯è³¢H‘Fº€©(¦ ‹ø\˜zZÒ«ôŽbm“&=yrÒ ÃJ¶ßM¡5ƒ¢}¹¶g[·oUÆ•;wfÝ“D’¥×èB´¢Ð.H¸Ð¥ |¼íÍJYš4pßZ|ÕlHµq1·Õ¼–sç»&= =tɼŒÉ>U$ÍÚ¢ 2 íûw¯V¬Èâ@ÎE¹òYÓ¿“æ9œ8ðËÇG&W~õí«ßø<`ÀàÁž ²‹¾®Mö9Vy½±Zÿf~¼¸Mói—£×™|=ûæI½#õ¶'u{^7ŠFéBâÅò…GÙxîÅT Pí©—`y ‡T€ôPBASA@A#RQe€vhPpÂ-¢ˆ¦È’‰'&çÜ^‹0@Á"‹PÀÀ"ßPÒH$Òô¡‡¾!G"h(Úõã]AžT¤‘*Æ·—"3jÇ€"<îÈ#R68â•X9$‘I>È¢‹0ʸH”SöVå–sÉš™±Ù¦ƒz‘%!…°Q ™e.v&ƒ|f©eŸ%ZiÚŠdÑWÁ¡졘‡R–¹§Ÿu© b €þYé]„ºv‹X3e£S>J)¤i j騤ƕiž”Ê£¨§ÆÿÊ¥››ÑZ+œ©±Úª®eM*k¤¶~v)°Á µ*¯X¹JY7J묩¾%©¯ÄF+m—q"Û¯Öd87ÔV‹ê¯â’ûæ°s«­—º:B˜apn©èžk­°÷â;¨’ë&Ë+v³Éëc½×\p¾¥û“ºýz·2Å(# ÀE5"0yÿ4-ÆãB۱Ǡ1¼îsç„õXàQæna‡]¼1Ç Ç,3½kŒm®ý²û•n·Ã.½uKÕà\sN¿œ´Â6ãªl™·“F-E­YxÌâøl¹3Ûû1Í_ƒ2¿9ëœL¶ YÊn-v×}ÓÆ9]6Ùê<†Œ<ŤÿñF¨óz ÷­ëk®àu‰¬ís¹<æøX¯÷á„Ë^á†cJöÝÞ!ãµ@¹ÑaO>xå”g~:ZŠ#ûô:á¹øÛ\¯ž°å——Õ3¼÷îûïÀ/üð¿›ÂE[XA<=údãüóÐG/ýôÔWoýõØg¯ýöÜwïý÷à‡/>÷­O‰2瀪ciè–Ð{Énzí´Ó?ûýø·U¾‡¸8Þ;·YG/b±‹q$…+^KÌ?É¡ÎvMÃÜíJ7¿tmNW}Wj¡•u¼Â tE8Š"«åi@FI—:´,ns“àǦ3^……EyCTQ]¸"âè…+ÿ^;zÜ0‡i8Ç aÁºáî=O„‹ y²¿ð”HA¡)ŠB¤ÄÂâ(Jk±A=9PuõËßíWÁ4¾¥ŠáAàWÂÂCz€°ˆ> cQúw2.Qi0Ì]4E'ºbŸnÆÐ†T€Ç‡±‡‰˜”ó¥o@gta ¡8Èi7{Zor“1„! Y€C2zQƒÔ„¿¨Eڠ¶ùJ¸T£&?ÃNÒ…—2c‡¤æ·*¤A5H¦+†#8óŰ%éz´K_ ˜Ú$'i˜­uõY9à d`^|°™p(ÆŽuèQú`^?âI5ºÑž÷D£.«yÿÈnjK–+… ^p…Çð¢ G@‚;é!h¾DEI<ÇA êsŸm!?¹‰3mõïæÈB ` ‹¾™¡ - Š ŠjÄ¢õ ÉD/ŠÏ6bÔ¡æ‰,vD¦¡WÁ+ŒáÐ GHC1ÖP#èá”0ˆâ©yF”¦XÝhNqÚD®&î‚ÚRdžY¸¢0xA @"¡ExB!2àLN3)•h.¥hQ­vµ—}õ«yº.ulÁogAB †14ó­Y€L%. »Â —úÊUøºUPj“³,GEÉ#U˜¬™a †2ÖY¬B–V Œe‡S”ÿP•ÖDÒgqX~•°#{X1nq1oµkÐð 4ÅŒ,dIA2’«þ²·^ecM·Ë]ÖµaHI’ð†\L¡©€€” >H5º)™®H¬{Mìz› Õnwõ]dÉCŽ$a†'ì ©¨š`…o¼—‰,©­U©{ÝΊÖ‚Äp†wêO]yÃF‡P*UY”d˜rC0²Ð„&`€¤‡4"1ˆQØ"š2Ú<«ªWê¢&¦žÌmhLÚmj8&¤ }. %0ؘiXh2°°ƒÄ¢ X€‚ XÂp-n&³'z%³=Âl6ñË[û^Xÿ¿Yå/p§´²QhÁ|xFßà· WäáÖ¢PŠ qxЂ ‡'¤Ð,¡Ff‰2¤T•žÙ½é}…¼&NwºŸeÀdˆ LâlT£Ç ‘¨>Ü)ð" ò„Ò#x@[¥éA ¼†¤ ÙòLßœOÁÛ·ÇF¶ªú;%ì|£A°À$úÇgWèB˜ÀPàŠ"ÆbÖµFÆ7p†[ôcõÌF<ƒm` ;dž³²5Mlz×ûÌæÑÊžñ„G6 õà?Ñ O|1’BtÅî èA4Z©çÎ,Ièì‹XÚª@Žw²3mo#Ë{ÞúË·‡„v;Á™IÿÀqÕ¾øÃtð‚4x¥£q0·xÌA·rÎléPüyy]³§á»ñMYè &íbjÔ‡'|á P^(VP8,È€ é(J5hl…ZÔòÜÌ«ø¤qi™Ÿ;/èù-ú½mºßŒ½%IÏ7³RŒ1œá±èEéÑ79 a©e‹ÒëŒKTž˜6z‘‘îfwÜãƒí0¯šd5„±(" ‘!@X`AvíG6Ðîów“¾Â‹O»ÚÏö¶ódwÄ‹=ñF‘å=ƒ 0Â*VÁ‚¨@ §°BH!¬08…ð*aoHãzÔ ô¤?¾ê[ÿúØÏ¾ö·Ï}éŽ7>…Ìÿd cÐC­t¥+d!†+Àù4 äUú³DpB-TÅ8Ç]¯øÔ·Ùÿÿ÷[’Ç+b…JdP¿hX€4 a "0!0R5 GHAs° Ý ‰° -av£·qævˆzg‚‘j C È'l/ðc"ÀNb€0`~I±˜`ÛŽ‚Ðsz(¸z§„Œw‚I¸lsæ:ô D5à0° ò 58Gƒap _Q r0€`Ñ`à‹Àù—xkW‚$(‡ýÇ„M(€,82E‘³`T±pimàLH04FP ôZ°|ÿPþà‰@ =6_@Fqðv‡v€)X‡§‰P8€‹ƒèÈ„|!êÀV!€ÉÐ7o åÐMðõÇÖ ›Uz2• ÒÇ<¬ÇqH‡ÅrÄXß×!Ïq càH0^§tn1 H`²äô  iÛ° Ú°sq[TÕ<ìV[KØzÆö‰œèŽïˆoQ¸ȰA¢ã/I‘ pHð·ÐPD™a  ´àƒ@ ÞÐ7ævòU]1UÀ8‚©z숌Æ8Œ©‘Þ5X ÏÄNRwâ1– µ€ \ xÐKàA€i  R‘Öÿµní&ŒÒExövA6tA9Z"s€ryX´-d¡µnµ Äjp¡°NÐNNU"a·%”Fi=Ix<ÙYôô“õÕx똌)g¢ø‘¨…Bpl#rô îóª [æP  êˆ?vf––(¡ŽW3X©‚Dù„ò8—WÍd\µÐPI—s¦ ÅÀyò@ µ•SÐx o€Jð Tf{…dçW¥n™˜lD‘§HlV”@_z)`iGP r€TM‰W!\ñppé` c0j@t`,ædp òóµI_7lÿ©[½I™pù–k!L:$ÏDI@d!£°’JDèÐ?iJbЇˆX°ÐÀC° @Y¸ð(;†„²ÉcD¡½Æ–É&žŠ9d»å›è‰•™‡dALa@œ÷”qY‘ ÉàX„(v1`!P8  jP?@ ×ÀžrPf='‰™YôÔk2ô ô´›D–¡q‰‘rÉ¡O•n xX[Êp•‘A`Ôxr@ Î f'Z@pÀ@ÄgR–… wV˜¢Ç4¨!¡Ÿæ– ™’¹¡JpÃCÍ”µ€TGµ DpzàFKPn•iÿÐL¶p&ê¦&©™4§ñÅ C9™ä §qrY&wªo™ôÔèVD x°Xp’Š šcã™”Jtrª¡¹zŒ–zž.±Œ½[VYJãE smŠР%@C°qàLn%ð¶fz›šeq×z¡æé«¹‘èÙ‘–¹œ¤‰ õ)¢$ªTœIœDÐTH`Ð'ðv Kcàü86y¸$=5Ñ£oꄛʩáÚŽ»ªŒÁY|é8]±òIŸôP Ï$ïZCÐJ  `M6b@dbЗ‘Ðs¦p7›k¤ãª°âj‘ L ÿ[±S3¬qà™d#qpJM EpN°(ö7¢@prHp`9 ‚xÎsià9‡HÚ«3›°Y«µIú4wŠ”gE ° g@uΔ(fJ€S±fpCÐÐ Ûð@zÔ`ÃÖµººµ\뵈›¸9!La[c»->„V40 k;^·À<`  ±p9ÐA –0„–ð·#¸2¥­¼ŠµŠ[¸2;»´»07+KUy•; À0DÀ`Fåtb£;ð“»  Pm0(p™°Œ—@µê¦†û­µ»G »Þÿk³Ÿê°}±âC#4e0°v YNjp Géà 70 (`ò² ÐÎ#‘ÏòáÛ©Û˽„ûºàKEqñüÐ ì\iîÀ ü0óÀìôÀ˰ Í ˜Eð • ¾ ™ý  PQµk!» ü½ ÌÀ<ÜÃ?!©qKíÐ÷pCŒY>:›çF–ÜÀ œ` § |—˜»6mªÃ>ŒÀ |°ëÅ剽ºÐ Ó0 ÁŒÒ¡Ô‡ŽeGà° p‡’–0qg÷k<)¤¬ÀL³àŠ¡›x¸ÄÑ}ÑC}­À gÿ¬ÆÑ×ÈŽ}ÎÉÎS }°•ð<<}šŒÉ†ÜÉžüÉ Êl¡ƒ"i"!}>—ÉŽlv>*O¨!zVl–ÿp«€Ü½8œÃ1ûǵ¬Fj6˱ɋބ÷È’œ›èll…'zÐCa¹Yz˜š©ìǺ,Èš ÆÖ¢²Ô4ÚLÀ÷Èk)‚É ŒUEq™ü“™ËCqÃØ|ͤŒ°ÖìΔù†U«½*ñ ¿f<§ÊÁ˜¦½ViÀèsüs™¸–[Ü‹/;Èñ<Ímù›qj]y<Ë®KtÀ&ɼÖÏe÷·ý@ ³ t­n5ÎàùBaÜÎ5«ÎѬ+ÑDÚlü‹;lSúÿð €;‚˜ˆÎHáÃÖŲ$-”? ÏëHÏÙûÌßÊk¡$a¦ÿ,z6=~Œ<éÌÅ‹iz -Ï•ºÃZ¼ÅºÚÍT’°Œ¼ÒÇ<ÎÏ€ÿPM Ï É˜%ÎÁÄ[]gÆ‹†ÔmÒ ÝÐ…Ó˽̵C:_«Ü¯÷y¯çy^;½®lÁ¾²õ4õ—†âŠyòÔø(^ÜœñcÆŽÑÝõBÏíÙ®íüÞÜiµT¢ñOÐ;9=R­ÆœÜ­´YŽÂØä d‘OùÃô°OEÿd<ŸÇ‹ÌM]ëv«ükÑ÷£¶ç=ÞÛÞ<÷xÿ¿ú¯¿÷ ïöìÈÙúŒ,ñòžîTÝßþÝcþ*?Ö¢<ÿô_ÿößú)z¢Nè¶…WÀúþÑË–Álôúýû× 5jØ R+¨Äz2ä˜ãGôèéë§oä?“$õ%äh’š@1eÎüè‘æMœ mæä rgO ?ö:thQ£ M.Ìæ&M‡"E¢,X¦Cƒ³=¥q"E­¿RTØ1g¿ª,J¹p Èƒô’æD:Wf]»5óâÄ»W§_¢€?.ý×ôdN}‰×~•Û‘¢U†ý$[}8VìXˆnûFNÛ˜aâ§Q ·¬·tÌÍySÛ]ÍúôÍÖ=£¢%ÿ=TÅį^”Ü–-eˆ!ÂkÙdSœmK–IØ0WÁ±“J?úÚ´õ¿ØQ[7y‘9Ћ0o7>™ Èã 'â˪Pë׬꿃Œ Zmó²Ï­S¯®`í Ð'ìJB.©ð>Û%‚Ì» •›È½â jo4ÏbB+!‘îÓ=Ý:í?±#‘®OìÏD»nÛ*Âݨéí¼–r1«¸Þ›(+¦c¹Š"ÌðCïD1ÅU„ ÉÍš«$’f:ñ¢ ¡,)®´TŽ"áÂÑ2Hckª ¥òp&´bÍ/%—ô/I&›0©îлk¯îck¥ã*ƒï!l¬ 3­Fâ°¡ÿ©ÞšÑ¾!¥ü(*©öj“¦Iï|N9çj¶Ù¶ŒÓß"‰J„:ÎHÝ¨Ü !ï>+ QÐ[:G9’5%ÕâÜÓKåäÏG§<õ X‚‚m¨ ·¦:Ï­~(z Ù”Òt•Ù“¢:”§Œ}+W^wí•ÅL}U['‡·ØÃšõ¨C/ɨY¹D ”A¦8ª¯;·V*ÈH7aµµÑ t}­RaÁõ5)P_½n¯„×ÉÀU-ë´ zTí.;ó¤ÊwL~k]ëa\]ëvà‘Iw®:çÃX¶ÄDÌCCýíËáü¥r¢j‚\I);?æl+íSRüÖÛƒŸlÙcžRŽÕ̇5mÃÿ°*šÑOÌäÛXªw#UaKSŒè’K#˜À² Fú,åö\γ¢@„™2vÛ%ËÂóäJx¡©ôI9¦M>Úhµ×.Úl €­¨FÍè;©CâLEH ø «hÕå¨õ2äô]íÂ7œðÐG¼'bïóQ(cU5•oS ÓJv/—"V Û¾ZLÂ!Ï^xôÓK¾IßËe[!HANTÓGµz°ªnn×K2ÛÎ/ǃr·qßßI>º´Á?Ùtš<šcã?K 9+×¢ùσ¶žü¢UãƒÈV»þ{ÀŠ_™Ñ'æÏØÒ‡5êqÍ}^‚™}èÓ§Êt"+Á†fò—>ï pä ÿðú”½Q z_ ”A'&Ï,ïˆÚŠFîæ,ú‰E(þcÉæÁއ<ÓœS•šÐ<£‰ž<“›GÉp!ÍKcèÑ%~ц5ì`ÉgCn5í\´2ž…¦§›!ZŽN„ òП†TÍYŸ1 þÄwE6…ÏŠÄ“£ãN6ÐÉŽPdYíÄ"—h­o‚í¡Ò¨ÖÈŽYÄ"#÷F-*Ї»ÛãŽz³¾xý ,ñQˆý0‰-”´Ñ.lyÉ"E¶ÃÒŽ2i_¿’µ÷mår‹»ÙŽð¦Y6[CË iàeʹHñ‘ f·Râo&ínæ’ª1%85ËIüfÿÕK¸áqƒÛ„$1ã¸JF2“J.”Ñ*¹„e"$ÁÐÔ%•CB¥”>¥gâÎSzs:IZ_?ýùO€T õ§-+iÎéˆP‚|L|ÚP‡´ •hE-zQŒfT£åè ¹O[ÁL"—ù“rpåU•ªg2äj¬é´¹ø)!.«#«øM|ÎQƒ<÷Ø” U¥e_#[ ÔÐìÑå7¼4ʾ CFIæs§:jUS)º3´fA} Öp©Ìr“[£–¨BžËaŠ’ÙUoêÖ·r“ªÃó©²RA!ú&HZÉ5è¥  –J%h¶›“©¬uy>*fNAêXÿ¸v“tËËÌÍb‘§¡g‚–{‰ôÊÍþÕc¢¡çP V–åÕ¦• „ìŠP)Y¹ât[ ©¬A1û¬ q–ˆ¹)e-+(Ú°‰*O1õŽxÐs±õ,h¯mlk¥×|FK{Òãž^É2¡‰dŒU¹«ÊWÆ™°1Êmˆ´þÖ.WŸ®]ïsck”ö ef„ºJwÕù•§l·2vã‘îi/É(¥c$<5`W&dˆtn‰˜+[«&nOE™Í s,’Ò—’ñs-;&ª¸$ǨmMz>[¾s^˜Ánê0#ì^„Y)|ÃRD:Õ‡b÷~¹KÌfﻪFájU\TŸúv®û,ÿ¨|¸kk¤²7ØÁ.ެQRdzÊ0È ½Ùí{*'–&£„"Yp§Ur%m±’õF?#­I}R±+ \e¿x®°¥’eâ?„Ë\} u F17%9+”™D¹‡äœ»×žÐø1²¦4PikúØöL‡¡&ÒŒ~²< _²Û/wû*æÎn6Õ|=,<«å"~.yìôòF¤[½;~XX·³é{ñ Ýæš‹k§>¢eìT¦÷áwÃz³ÐŸ„íè¬i)Ç“Z½~‰ïGj“·"FIfö™é~]va2óU½ÉûÛq´"ì4d“ÿâ& ¹]õiŒUZ›¢fq”“Öp†Ë,ª21éIykÚâÆBNÕÛÒ™›¨Ñ#ÑMS†ÇŸ$à×s²©\ìnBŠÈBïl1‡¦ádù&ê¡ÏRíhód Ó¤!v¢H‹AÛ…çRfùG®n6æ·17g%“]t“î$Õ°™dœšö«Ì#ðv[Ï£`²Îéc§=Ýy6¶•v-)½D#ß•mP‹<\‘ÜÄçê¤PÑÂÔöî5³ ÔW¬JˆOY0ö~rh.=ç‹ßçe• “Õ3¡fG0áÂ[#çòå:Òkg{sDñ–?Ýl_qK-CµÌ&?Ú}Ô}yä%r*µTÿòž †&¦6§"…6¼+_sÕ#Ô‹ßÆ]ÄÛ§Ifôî$Âi²Ø`g‰ÓÌJh„š[¡ýù`.þ$¯¯¼™›?õìí6t²åÏŽ‡ì(¶PúÃû¯…ø[––+`×6ûñ¦³£M£;¿!>¬;=õ³ªùc¿¶s¹ö{?‰?“:¬“!û“½"Z¬‹é!0hÚœxJ@ú˜´ØK0>A»[¸ßS@æÀ8$=˜ë¥æs–çk²Š›9³¾ó+ws ± kî @Ÿ0!:>»¸_£;7‚Á\>å;8û+ž/i=Æø™Ï¼ÙCÁPºŠ¤£¾ˆ˜º¸è<]b¹V ªèÁº2J?ÿ1¢k·Eš<(lÀi3¾Å‹šb4dÂÈCAô C²°…Žƒ)´È™4ܹ•X¹°2“n{2y¹¨;·Òk&C´à2»·sÁ'DÂÂÓÂÁbÂŽ™BÉ Ðê1%ë—úÁT|Awû*d±#S“Dt«Ä˜@ºóD¡º¡ÀÐ+®›À>FÄ"Ž3Ðê—±#AQ\¡[œ›G-¬ Åéè(k짪‰¨k¨l„(lL‹lä¨nÄ(5ª óFnGÎYGk,Ç‚RÇmŒG‚*;å«AL\Asa'NÄ;.tFž EŽ+’«+¤ö˜¾ë<~¼@*ò:€”Ek¡FµsÀ`¼BWĦÿ"Ù¹à³CŠ15>© üBÅÍ{¢º@¢–ÈíR¡U£Ç$+¯[¶a%“l¼õC½ñâBÿ™ÉBÀÀ)L ±'ƒ”ƒj[Ë”l‰6ªB–4½ôƒÃ'aª£¬C:L¾ª´JD,qªéK‰»/®¸¸7 ¶ë‹Ÿ«kB[±ÁÂM¤Kœ§ZŒÈ9¼J›„¯tq–µº?¼é+ÍÊ]l³ž»‹Ø2´”KÇ¡À¿´ˆyºT¼Æt̬ÄÈ«˜—¼ìAgÊ*ÜIÅÄÌœ0’÷[ Tqº?C̩۶ÅlÅLËÔTMJì “âJ•ñÊBY§0K0»«»N™‰"©‡XÄ ÇT”ÿkËDƒ¾ß<¼š¬K\Ž™"G$ $ÊJzW¾W1¸yɉˆ"ÔáÉLÜôÿr½(dÀÈ”HÒ‹ÖsJ؃›ì+Z›´™i“ªÈx¼±€ŽÕøCãôÎDd#¡®ñDθ4LòteÚ¸ó;ÁX1Kœ C» L‰l±¦h¡V©?*iJÙkÈýôÓÐã$Â]ÍÔŒp!aS«méÍ-C41uù—;%C–ûÑ ¸\Èû;³M«¼Q ÑuÒUŸˆ@”Ì>ÊYÑÏ”c,—™Ñ-ŠQÚòˆ•®¿#RÁÂÜ=_ôÍÄQÖlÍÔt!n ÆÿN:)9ý?¼Û—Y™P²Ô¹£hQÛD®"ÕJé›)úR3TBË“‹•‹ ¡Ô£$eÔ5â7:ó œ‘|Ôû¬‘ÕMŽÔ¥99üÕ*O¬ÑBU{é“a¤Šlû4}É6d•ÿjòùè#ª<À™s%©=ã©âÔHQ5UÐiËðZKÔѸ{Œ±;š":‘T%Óa…Ì`%ÖiUS`¬LŽRÚ Ô´ ?ãs#UC-Só$WaEÒT˜mHHûV £gí:©Vj5×r½Ö!ÍÇÛìÁ?UÈá$¿¼h˜8I/t-P|M×REØGY»HêãAžOÿe‹D\šˆóU{•VíØseMõI¼àUÄȆ‘Xœ€Ê–Ä›~üŸP=XkõØÕ×>ÍhåØMÁ1¬2M«ŠÜ¬Ù_­HšÚ…ÙqÖbeŠ4C·#k… T1…Ù{Mؘ5Ó£Z·SÚ–-Ц=¡§Í•Zœ-Ú©%QƒEÚ¨¬>/=·žÝ—ÕÓ íɸ•ÛÝ×—$/´E™5ä ÑÔ#/’ ["Í[™Í×ÂeØS•·±Ý”E¼2"@SÜOÚÁÅZ²-Û˵ۺ%ZÓ2ƒTËkT±Õ\ª­Ú™=\ÄÍ\V:‰Ê”…[ÖGÙ]Ú­]Û½]Ü­(ˆ G‚Ú]ÿt¬]Ø=]Õå\Ã^Â5ÞðB‹ÏUÓ ÞÒ]\…EÞîœÛéµ×ÀUTÜ=ä£ÜÅ\á•^|Ü\âÞtI¥èÛA@¨õÇÑ_ò}ßÔ_çÝÓ[›× í^è…_Ó-^ùÝ¡×ùÕßïå_.àø5à†_a¬^ñõ^vàÎßý`ÒÅ àF]Î`Þà ` ÖO þàþå^ ö`–`FáÀ5áá ~á.aömßã` î`ÞavßNáÆaÖá Îaâ#Fâ6â%ZËb"Nâ"fbºµá&–á+þáÎb%æâ-~b(ã/®b+&c'ãÿ!öâ1žâ(Vc6Öb)~ã.6ã3–ã5ߦc®á:Æã2¶c@ŽcAFã6vcC&äB¾ãVäEäCFä9fà?d=cFvaKvdH¾dL~^M®äL~dIödJå>e?>åF.åTVåNNcTŽeÿ…åMþdSÆâZfåVÎã[eY~åDeZîe_ædÁue`†ã_NæHÞå=^åe>fd–æg&¦³e]žå`&æavæbææmöæi¶ækŽfûSlg\æp†æ\ŽfjþfunçŽÈ]{¾g|Îg}Þg~Þ(wfge6gѤg>^g€–çg‚Žg*>hc>gÄ+?ÿ…h‡N焞çfÆè†Öh‹ÖfŠžèŒöèé¾h“>if6f†îf”Ni–&éŽvél–é™.èj[r–hŽé•~iš~gx†éšîé…Îini¢þè¡6êÊ­è¡NꇆHƒæè§fjê¥jh„jx¶j^Þ饖ê=öê¯Fjˆnj°~j®j§ërÎjtæi³Öê‘¶é­^ë¶f뼎ê·Ök¬öë¿Þë´êŸìÀ6칦kž>kÅvë¾lÄNì¸Vë†l˾lÉžlÀÆëÈîl».éÌFkÌæìÃmφj¹&kRvì£FêÐÆ_¾ÖìÍ®ìÒ®íÙþlŸ¦í׆mÿÖníÓVíÕ¾mÔ^ìÆ¦lÜ.j±®ëáîmÞ6îånƾjÒ¶mÝžn×¶îêÎní~îÓænÓ>î…Þí²ïI¦nðVnïfnéÆîóViàžjóŽï÷†oöNoù.îh¦ýÞoþîoÿþopp/p?pOp_poppð : ׎ Çp ßpÇŽ ·Žq° ñÓ ñÒ0ñïpWñ×@qÀpñq/ññ½°ñ¼ÀñŸñçq÷ñr¿Ðñ¹ ò"ò¯q°}†arípò'or)Ÿrì€rë°ò+[-ßr.ïr/ÿr0s1s2/sÿ3?s3§`B(ð+¿@„(D@ (< 9§s†À7GY™@BЉ;ôhshFŠ»ð~8Hôx†9¯ó¹8®xó†¸s# Aÿ  € GtE¿EFÿtXIçó¦úôXQÏôØtŽ ƒ9÷+Iu6ws&¤õ€óCÏóC×õ† :(ö½ ‡cǃø‡G† ô BÀÐB€To‘€ wD€lvD8€H <`t†Oï‡ÀlôH7ð :&ÿôg`Oœo¿ðG§ sGwugww'€gxtÿy§÷l7Š8€g¨ø„Owx£Högøvy§ƒǃŒ§ ÿv€5/ù0€bǃ5ÿðõ"?‚x}€… ƒ˜· jÉ€l(€Agvo€ 7x†0ž?€†{§õvÿ‡`rz˜ö©'jï‰sÏw†ø÷`ò‹6·2t¯ð«pzyú˜úXÿZG„¬ßzžWws¶û±v£0€AïPúhùµz"ü†˜ø0€5?|yG„Їbgz†Pu»0€€ —s¿€€t{†€ú¼°|ºïó z†šçú©ÿ  ˜_ú€Šÿ¾ïn¯úœÄtO ˧ }¡wý€ý¤Xý÷D¸ý0€Ü ƒ÷sC{O§à‡/è~sG~凊ï/ü@„5ÿi—öl°|ªÇò¿/€§ßv†@ÿ½@„xs7}™V™tþ!"ðïž@ï Ĉ#„ˆ'€~x 4Àp"H‰(!zúý£f0$Ì[Ð'SáG‡1CVü7à½6vü¸3b?ðü[ØðÙÊ–/F$ €M}0têóaH«X¡RÃS€ž× `€è?Ù¨Â4pà €gX¸K$\N³ø ÿr&5 $Øo¯áƒ=é &ù%D‘ŽüGgm€zç*°Yæ@ÂéØu 9rÏÎúô̙փ\ë @Ú´aBy! ȨÛ5KŸ|¶v@€Æÿœý^ÖNG„šP1tXæþÏûÅgˆÐùiuC5¡ÒÁ}ºç}é<î+ ydATsB]¤Ùf3ùäQˆÐgßfµe†[üg˜>nõEȃ¦Ø`düÔT}à õ’ˆ&B„G¤QsvÙôÞy6Nw€¾£ÌýCˆ‚æ9XAJf€†eóQÒÁT6vÍuUÅšQ° ÿ©Âx@“=9#kYVyÀ•é#%š™—›ág6p27'LwJ Q6b2‰#¡…z(¢‰*º(£:ú(¤‘J:)¥•Zz)¦™jº)§zú)¨¡Š:*©¥šz*ª©ªº*«­ºú*¬–Âx%\±Úz+®›â€D•+°Á »è®½FULýs@B„ècn~V€œo`À–á15k60´Bk1DM¹ {.º“îz­¬t À]b[íÖ/t¼îŠñ;ï‰KVn7€»ˆ r/`¥;1ʼnî @ö®€bqíÅñ\ÐyëlÆÔÌ,]ñÿÊ1^d˜$ÆP!2¯z?ÌQÅ9ëŒc±‹Eì–ÏgÕ½rA|ï[#ÀÍA ïxJÍvtfLï|5ÖõÜÔÆÿ=ö1GIáA¯VmÔ3»2Ô5÷óµg÷&€AÐõ¦Ã¼f½7ßmík?ãe¼Ô?5D·»ÔÀ+€½ißkïv‚ÛË5sÍÔ¿öò°}{žõ3t€EÈ@C& %‚`&)$‘Jª=¨éA4%A¢/Ùã?yJü9⦅¶ëî¾ ?|¤„p#ñÉ+¿<óÍ;ÿ<ôÑK?=õÕ[=öÙk¿=÷Ý{ÿ=øá‹?>ùå›>úé«¿>ûí»ÿ>üñË??ýõÛÿ?þùë¿?ÿýûÿÿ²!À°€< ¨À2°| #(Á R°‚¼ 3Ø@p°ƒü C(Â’°„&*Š”‰2%¢@©ÊPRòˆœ\¤'ÿWùIQVñ•´|”,eyKG¡òP½4Ô/ •ËUîR¶l妆©Êbòñ˜›ÜY0 MMó=Õ4Ï5¹“ÍRms3ÝŒÌ7äÌQvŠæ<':Ó©Îu²³î|'<ã)ÏyÒ³žö¼'>ó©Ï}ò³Ÿþü'@*д =(BªÐ…2´¡}(D#*щR´¢½(F3ªÑr´£ý(HC*Ò‘’´¤&=)JSªÒ•²´¥.})Lc*Ó™Ò´¦6½)NsªÓò´§>ý)Pƒ*Ô¡µ¨F=*R“ªÔ¥2µ©N}*T£ÚÓgªÑ•V­*VsN3³–W•ã¦Z Ö±’µ¬f=+ZÓ:æVf.j«tq+Uàz¹îD­v½+^ÅÊÖRvõŠ}uT^+ص"¬†-dV35ØÅâu¯§ü«1¿ªXÆR­ŽE]c’Y˜l6$IeC[ÖËú²Í”,¦D«Ú˜¦mëkµZѶ¶PŸÈm%’Ûˆì"³ mm¥ÛÇ¢öR¿­lp©9\Ì.÷PÇ¥lr­Ù\××RÏelt±9]Ûn—P×]lvµÙ]åV·RßlxOÓÛƒ¬7wã}Ïy›^o¾W»å¥T|;_pÖW¼÷T~óº_qþ—ª‡Mm€ï:`®˜œ †T@!ù,g*gއ&&&777HHHVVViiivvvMx¨T~«iwz{ˆxv˜z~ Z‚®~ƒŒ{ƒ”f„¬a‡±fвhŒ³mµyˆ§rްq’¶u”¸|–´y–¹|˜·}š¼Šu~š~l•yv¯{[¹{X½cf»iu·swÜ}7ìz/êy8ò}'ð|2Ïc^Ê|OÉzVØjVÙwGÝwYÆeiÄjrÇtyÖmhßsjÛwxäWVå^VègIæiWìyHévWãgeæteåyw…z…†z—nˆ˜wˆ«xˆ¸}‰y˜„x¿ƒJ¶ƒW­‰h®‡r©{¶‹d±q¶o¹”t݃.Õ„:ô„ê…&å‡6ó‰)òŠ4ò‘:ˈHÇŠTÈ[ÓŠHÛ‘MÕ”XÍgÍžrÛ€{×—hÚ’{ߣjÚ§wê„Dë†Wç–Jè™Uñ–GñUéˆjæyë—gê™yí \ð [è£gí¬tî±|ð¤cð¦ið©lø¨cù¬lð¬p‡‡‡‚ˆ„œ’Œ–••‹‹¦‰—§ƒœºž™¦† ¾œ¦¶¨€€¤‡›£’„¸œ„¯™ ¢ Ÿ½£Ž¹§˜§§§©©·¤°¾¸« ´­»¾²§¶¶¶ŸÂˆ¤Ä”ªÃ™®Æœ±Ç´Ð ­Ã¥µÆ¢µÊ¦¸Ë®·À­¼Í§¼Ô¶»Å¸ÂÍ´ÂвÅÙ½ÇÔ¸ÇØ¿ÈÒ¼ÌÜÁ€ŠÊ‹’Öƒ†×–šÎ®’β—جƒÕ¬×°ŠÒ·Îª©Ìº©Ìº¸Ú¢¥Ûµ¹äƒ‚敊嚙ꩉå¤ä´‰íµƒì¶ˆí¹‹âº’켒쾘ò½™å¦¦è¹§åµ´ñ¢¢ÉľëÁûÉŸêÅ¥æÁ½âλèóéÌ´éθéѼòÉ®õÁ¾÷ЪúÒ®üÖ¶ÇÇÇÂËÖÄÎÙÊÒÜÕÕÕÔÖÙÖÙÞß×ÑØ×ØÜÜÜÃÑàØÝâÞàâÚáè寯äÏÐçÕÆç×ÈæÙÌèÕÄèÙËæÛÖóÇÇöÛÂ÷ÙÚåàÛþäÏôèÝãããççèåèìèçèëëëíîðíñöûæâúõïóóóþþþÿÿ H° AýÕKÈП¹TãòÝÛ–Ê\>Šj\¨ÑÚµ„ð¬ÑÓH¡@qSª\9%Ë—,]œYP&Í›ÿlâ„©sgLŸ7{M)t¦ÂzH³!]º´ÓRHIm¸DhƒÕ Ú˜j­§tëœ8ÒêÉ»§ÝÖ³Hýå:³(Û–oÆ]é6nÝ·wñÎU™WåѤh1m؆TÛ† 0iÕ9´\ÏF‹§å`Ϫí;”³OÏ;A‡ÞK”´AÑ8QÓTýïoä³R-qûvi…KFÛuk4;•‰eÖ¼ÖtMãYóDžœùIçÅ+ÉÚuo­åIpà@‚ ¸‘ÖÿÞ}öúVyÃÑn†ùt¹Ò¡¿§Ë~>ß¡ÖÑ’DûAµa² (8™yé%¸ž| Æ× sö•ö {ø1… R `@U`€IUWeu`‚$.µ ƒNH!Š+²h\u¢u‰\r \R(˜tÂÍp–¨^{-ùb}*š¡„)•ßY–ä(ž–¤[Øä–F颒H~IÓ“[ÍXãR–x%–LiÙ%iK—$œsÒ)¦Q1ž•ᆶaà‰•l¦ç¦—\Z(˜wîgsNæ¹Õ~Dº ©èpƒ"z¨‰ÚU§¢Ÿ¾D棗€wÉ7X®yi¦œ¾ j¨zuÿꩬ+z)o·BÆê«›òÚë\‹Â+[0.¥ê­Ç²¹+°Ãv毳Òêl£ÆæšY²™íØã iè·šB«¸ãº “­Ö:è7 Z•ղњ¯¼å‚®½xV›ny¹f’Øb‘o½÷l°¯ø"|ð¹êî«ï¥àå6ØÀÄ6 T°Â’;­´Wø°Ã×ãN4ÍL“`ÄHéFñÆôVlñg/ÃÌñA ƒ|;dQ6z™ù«cŽ­Üṇ̃ŜšÑGMº÷&pÁ,óÕ0ñ{VÝbüœÒA=Û2Ë_íÓûöÆN¿ åNeéiëcZÞ.<¯Üs·š0³\ Dvº½Iÿ0KYƳBˬ±Ø‡6âw³´·µ½­G4ò4^tâ›sž´çŸ/^Ðã¹^G e¨›¥lÜvÓírÞm!Ý5ì¤#«U4sÔñ‹ê«kÍ:Þ Ï|ì²?vÍM—艚‡ÞøëÃ/»ñî‰cýõØg}>\eãý÷à‡/þøä—þ,i ‘Fæ{_O>ÚÇ/ÿüô×oÿýøç¯ÿþü÷ïÿÿ `ü<‡µ#ì@ϱ&àÄj™ižðDç¼çÍuг`JjG¢a nîˆ2va t0å+aKÖÁß‚„ájŠG= Ò,d—²œî¾ò‹®¸#@â9ÿ"¶!%“k¡ï´ÆD¯Ù°s2¬áM8˜²,¯tˆC-bŒ\ìâÈâ­ˆ”,²C‰NÄ ãžXÁÖ©Qq8¡bfŠX‡¥ qHâRv‘‹!ÖC‡¿à!¦\X7…¹ñ/dc ™¯Z …b!Ëë!F.öq)ÔÙuEH‚!²ŒLäá8Ê¥!M ÎæP ôtñ‹aÌÅ&ëqÀ ª“,e 9ÃéIoxrÎoâ°5Ä u2~Ѓ¿ˆÃ¢¥Aå㚢ü¤'µ™Knv3”¢:å¥Îv92Ä?Hg3¡¡+¸Ó Í ‘´¢–ofœ Ìç6ñiÿÏpâ0W\WÞ¸á@lgšA+`a–ƒ´ ÷òáîÕcŸúìgF/èMŽòÓ/â T4M& äÀ ”9F¬p…+®ž%ÒR½z®±£¤Ôe/£÷Ë(3= Æ:аðÂrnXiK‘*¼ÂÌkÏLRSZÕ£½iVµzO†ýóVî°ÌKÍÀƒ\8# <ðÁ¬‡fÌ UÄ@¡ öL´¢SÅêF¹ÚÕ½æ§PœbHå:¼T ½ÈÅtƒ\a S°¨à…Gt`0·Ô =SrÍ|ô”—RÔih·ú×¾:n°—rG.÷ k(¦;©€†ÊÿˆbȬA:»A­P‡†¿.|¢8ZÓÖ µ—ªEÎÚ©†eL£¡T`‚-¢Y†Äèö&iÁ«géãËá7¸<¯O‘¨lŒ¬Á°Â Éj@6pð QÁn÷yeÒw½ ÚÏŠ¶¸~yÙÔ·+`Ä\#0 d! „¨«grßüžF¸Üín†÷Ë_Àšò«¹’Ç4ZIÄ8\A ^H\Á%p¡ å0N²;Ñ“v‘7Þ¥‡qà;ÒZäàÑ$äpÌd"EÅ”‚ªp4p g ¡ ëÁN4Àˆ§‰ÚSQŠÒ›­ñ­«×ë8Çg&soA,¤ýl ÿYx±9ãpEiœ! KØEÎðØ ˆç0ŒžÌ…4`n2±(R<»ÙðV¼ý…t¤Çlæ4W:Ìl.‘Ï`‘&"–ƒ`±o„‘2h(ˆ?¤A‘øƒ’È‘nxö(a E-Øï4¼ž4¥1zÚL“(bÑ\Ä>á·´Õƒ˜T!‚ ƒìÑ€€B;ð‡¿ÕCùÐG7Ú¤·o_”ªÝ²4±¯Zfv—VÍï.öožrx ø„E cxb`€ d‰”]`[ÛÑ(·ã€pç„{âH·B"NÓtÿZØ÷ÁpÆlÑþ->ˆž\[;\ñ‡@ÿd…*VÁGX²Ú¯n„¬ÛúmÏ¢ÄÜÑ5^Ï­nw÷Ú×^·Ïy,ï×XËjðC܉-«^tÇ1|àgöqô“ ‡ßü}ºÆ/ölzñÿJÚìÃ:ÑÕ^nc“hG…ðBè0gˆÚ‘˜gà®è +—áÔì:E#þ¾Ö\³žß¾ÙƒÎvÆ7Þ¿@w<_‹Ž­ÆA  ^üˆŒMZîшYŸ™p›ç¹+¯×ÞîÖ»>Þ‡<š1=ok”+ÑHkwqE$FÃÈÐÅx‘ÙÅ$¯Uíùë>{ÙÃöé÷ÚG}óÁ ìËÆt[ØÂ= AÿhQ4Ä" 6¨t@ ò‰ üæ×n`ÏþÌ¿þ÷ÏÿþûÿÿþG@F·/aUhÅÎPÆÀLÍ” ¼°f@uëç§b©°n¡zæ|—æxvÍ‚÷qÃQXÇÄ?Ðy‹¥gp>Àj) (PT?àGKuÐ ° 〠,‘xÖc|"ø|¬·|I}J¨|kV{Ms@´ ëǹ“9°(µW  ÈNA_ú0™0„cÇ|!˜v±Ç†“'toRnW^õF?€:` ò XøR\¨o`ƒÈ Ípz°þ0—°ÿˆz’Ç„’8‰K¨†kØqc2`©¢6½V»ðŒ…sàNW >°UÐ *Di „0ä0 ðeÆsæf„Ça¹¨‹ú…q»èqš(HÑhÕ‚( îðX5¨(pÒ`9tàê0\€Hß@{S5Uðc…‰–؆nH‰N‡æxCPX6L kW``Æd‘µ;W°Ñõ0 q–` ã°4Vx5 7$Ø„e‡v˜8‚Gxi‡;hÃ;[aÄPXptÀŽò¨‰j0 ¾Ð ä`9‡¶v|çÖuö§+™çŽâø‹‘'“äÿØvéÃðNewPÈ”á…j@ ¿0 _Q ÀZÀPq`2Y“øÅsWOT¹f¶¦a6y“ãH“ Ž>6€Ã!zÀtiuÄ/gá¿Ps@¿ Ërð®]À] PˆV•Qck¸v\H1n÷UJ•˜½è‹Æ•]‰„ƒ9`ÃÀ\HTï88¨åDµ`]ëÐ ˆä†®‰Žv+hø|[ñ•`™“bY‰´9™sXuÐNëõ /…š bÓÐ ¿'Ëð o)ðÒ@pMÀBIU`v‡÷Sn‡SG!Ù˜ ™—Ø’ÿ©“d EX`¿pkµ–yòð”QìàÎ[r°{PNgupE4„çFx‰“|Y)'ù˜žpˆŽå Ytï4Xð GyF´äAYLíxŠWpî  J I{€XAZÒe¸èÕyù€˜*qßè^)žáÉ %8`ä¤éirmiµEÒ€díÄRk`bV°/€.P¦ TРzÑ™šKÁ˜Žv5n3#£õ¢K¤q8ê:JyBâ–pIz[A]ÓP—–qbòhw° îä.ö1i0uÀBéµ– B˜Ýi˜¹&qMÿ$X] ›µ¹jº¦=z›%Ru  eÔNXð kejð )0~]P( TYXí8YƒnXy£_:«÷Õ¨qô¢³  Ê‹i ‘Á˜ ˜Út ›õòYS 0ðZ“å“ x b ´ªÖz«hÚ«¾Š Ýê­ e‚ÃA]tIL¶ z€•‘'0$@.ÐR vàN‘¥¥Ñ‰¨Ù)‡‹jS¸ú­ŒÂ«àꘛ‰–Jœ œY¤mÕ›é9puU0#%ÐY Ä4¹R¹פ=4¡h´ú¯[°“ú«;Ê­Žº“[Á™¨扡ÃpF¿ÿðNQ±T \ gR°lÀï¸)™L=‰Z+Õ°»5 вã)©U+GÑ4—ui¿é(OcL\€T`]JÖ=b N°tW`GÀ¬¹kÖ³k­Yޱ™·z‹·‘jµÀz›˜º·‡+u¨ <ðõÀGàNq dU`‚àV `𳂠äðbzÝPOÉ7“}‹“²iº¥‹º|k›.«‹ƒË/]´X>Ð Šk`Á°J >œ€ &¹ fpi  à âÆs⺲Z“* ½Ñ–ª»º~˦$’µåʵKÈàiÿe{°d°pIÀuKa a|0b AP0ã0 ïSQu»s º·×»¿© ©Ö;›äYy0‹:úÈ]4Dv¦0` d&`^Po#2¹° 2@°Üà©€ ÖÓu×Ó´ü+À(œÂé¿ÿK©rغZ°5 $·P’@º°~1"Ð3 î‚çp ÀB  Ðà– —P·";:ºÊ²9Ê£ÒKµ+Kų'®é! ‚À pEÐ=f<а 0­4•²  ¢À ©0 $Û¯¬{­.Lº¬Â,ȃ\½ÚXyBRÿ°ƒ@C`Æ»ÀCÐ>0 F°Æ¬Ð @"Ú@ —° ¼7W„å¶]djÂÓ Èý{ÅP{²¯¬$Ò×=ÕWËã#  Ù@ ¬D °Œ… °,à pÞƒð=0„ÖSøWÍ÷—͸ÍÜÜÍÞüÍàl=ˆÈ%¢  H2Pâ0@°.à &Ђ€°èì3‹Q Þ`s{\˜©i«„lŬÜÊmȽʔQ AQ Ñ} ã€÷€ Èðî Ñ¸ ¢` ÅÐ xL©ðÁ÷À xœ © þ°¼ ‘=÷µ€ÿ¹ÐZ\µ6Å,È+<²/¡@­×Ôú «å@¿HïðÕ@ Ï üàÍÐ CM¿/-ÔCÔðCQßfÍÇ’LÐ~a7Å:íÊ»µ¸äª—¿«Çä  – ûðüüyp ¸ÃO £p •[97n‹ZÊ„7Âd·˜,f±\Å}º=ÖR‹QyeÊ-žó€x¯&•°` xŸ;q×-‰ç¥'¼˜KqÖԫГв]ÈÍ’-á¼™ žüÀ s ý ¥p œpMé6£ç†Ú·(v´Öb]y•¨& Ë•MÝÕýuÑÖඨiW†ÿ=£¦™]ÞsE˜x$lq¯‰ÂÈ—Óý }Â9}Û–¸´fÅÍk͢˴‰çÕ.YukÜÚãÇe- ·faí ÙNÙ×]Åyñhæ†ez|ÖŒ˜÷íÕžØ\áüšàêÜú¨òmÖ!¾Óñ=â5yà0Þ!‹ÞhöÇÜÙ¼âþ}ß`ÇÚ»šÞ,á°MÛ³-Ù¶ýãðmâaéÝÛÞÍ{QW­Ñ ÿ0^áÕüâ‹6+˜‚éã¬å‘=äBÞÂk-›FNU,¾äþÝäÿP>åþâ2þÚš­ ~¦SKä±ä ¾U2êhö·âlnÍÅi®æžëÕ6>¹ÿ¦ØƒåþÜ`Þåžàsž²K?SŒnaíÝ€Ž_m>nÍK ƒNèÝ m¾Ú1îÛeU~·ŽÎÓ_îê[ä±>ë)~˜Np³ŒÝ#lkêì„î=¾ÕUq4m®qé ñÞ‘.é\îìÏnç¯^lþ@xºJ•w;S(ñæÀ.ìîÍËhï3žUU=aå«éáiíÞÒÞêðïµçCî*`…¿E±Þ ßîP®Èi4Þ’±ÚǺº˜oMï"ÞîÞãÑíÕ^«9qïÐM„}®‡Ùëþê_•Ÿ›šgÜŠëï³ð±Þd‡â8=ñóNëòNíùÿríª Ýø·eTÊõ÷í@èAêŒé؉öYžòVÉÞÛ*ñ^ó1çqÃã8¦ÞYŽìaFx·¦h¶ví;ŸæÐ =ाh6Õì‹n£8>‰,ßða¾ôLÿò=¡á—Nâ`„üÞæ{ß4nè>òÍ› Oþ”à„.öÄ^ã8Œî¥Gñæ‹ñté°Žù™ÿîÜ:ÞúÎQiã6ÎõàÖe~óÞ êÿððäà£>áoŽ‹ªîØ&O·VoùÓ.ó»Ïðro:!Îܩ۽6S¦÷}ßÛ¥é„7Þ'èfO Ù øÀü]ÂO›Ö».`µÿ¨ù%îð”®û½?÷ÁÖ¼ž÷Tlü߉qã>üþmëÇé„ê=ÿQ5â¾ÏýÇâê ô÷Ïà?q.dذaB‡%.„8ÑâË)jäh°bG‹AY¯[=öĉÔÈò_¾zùò‰ëv²ÞÊz/»‰ƒYÓçÎ< úËçÏh·l‘f«)Ð'JIvXt¦À(§Ž Éõ¢K¯ Á†õHVâX²h[2¤é³àH°YÛúhÐ$ݹtß*Ì—ÍÑŸ?Ž˜þ¤›ï_TÃe/Ê,*w§á¨9›eKÙ¡Z¯˜¹jÞl¹²Y—0µvvÈXæJœ9g6µJX`bƒ3³e£ÿ4›ðmž1·JŒœ•èÍîö<¹¸ñâœA*_~œxfçÈ#VýígÁ¦'¯½¹2{pïAi Ü‹™àoÃWc¬+Ý2óŽð×F—?ßyýÏʼnŠÛñÁî êÎ;ê.1˜°"L2jÍA±&úÏ®œ²bo¥ò¢CHà éÓ¿¯>DmDK4ñDSñ' D ¯¼ð‚1F×Â{Q¼_\(›ÊñG ƒrH"‹4òH$M¤ Ć"ó«þ:O´ón2¬;íÈã®­pðBé.{¢:i£‰¨ƒ)½˜ö“ì%“`KŽC&ÏúÎ9A+¦‚øÓ7 U1±¨æê Õº¤ËÇÿµto¡'Q[³Ï·²²é>:=´ôÒãâ\”+<šp"ÆìúiM„ÄÔ¨•ÄÆšÞ¬Qœø’é È’êÍ:)Å4Ó\ÃÒT!'¡ì(ŸÇVÔ$£„“+·š µé;Œ’¡)÷l¨S=Ý\²R]»õ×´Ž{ÐZÚŒmL6! ´ªîîꟶP‚–G§Èe´ªÓH]ÛOßã–×]Á8Üãö›ö"su’,Á-åi¼¹ä¥—Çœ°ò/µ›ô¶*aøcCö×΀3"–'c¹ë&ÙŒ EéäˆïÊ«­<;eÓZœVÓxc“Fyäo=ûõ²^¡‰¨¢ˆæÊÝ“&ʦ?÷cv'ÿC ¼­)¤ê3§FåÚ™Q–BõõߟI.y[³9¢ÒÞMÃ×™Î5àÂI•±«ƒ›i¸Zÿ©2¦|C¤µÏ±‹ÚðÃÏŽ$'Ì/¬ÆÙó;Í»\?±ºéé±vѵù?3ÙÆÀ4Ï4Zq‚ƒN\õ憭߶5úü¦ |¸ŒßjÐÀîØ,ª¢Ù!co8Á³–x¸È^ä²S/\í×Ùþuöl‡ÚirœÆÓ­Á ë±›Í<üÖ«0/þSä[Gýyæ—oÞ>"÷ù9®äçݪT™ÞÉñ•ì‘Y4ãôf4k›_D>:mqdh£c]ÚÚ‡6çÉn ̈Ó¥ŽÏBá•ÿñ®Doäl&ûª 醒ª®ˆ/+ì{ Ý÷¾Ó±0~29X‡L6Á ¦É†Œi¢ÈÓV5¥goY›ðS¹’IV \â ØBM†R”ÐßB·&–p +Z–ÕÀ¾ýM@~zÍy”ÖÀ(>†1\c ÑHBÝÅ*6£ è2&³Ë ¥- qTn~£;Ý`i/‘ƨÄ7²ñ…‹T#ié2@¶|È™Ì^# ×”êzÚócðtòQ]ô£bÕÅ2²‰äTàVúQ§]ý)Ÿ»¬V 0ºR+4HMbâK©õçrbyÌ)žÒ”„DÍ•,”¡}‘¨ ô[ƒÿÓ´9^¨'¹ÙcM´2b²2yëS¤*S9Nq2…/™U8í2³;–°šÚ"cê(·¹±ÇA⇫ÀIÊFš3™Èè9•)Pž±¬†6$äOìÆK…N΄îÜRc„8¿‰çzEh9úQt•¨äKô˜hˆñóE ¢à›ÒŠ@Ó¼d¼×”(  !-hO}êÈŸ¢Ó"ž¹”Äý5¹¦=¤.Ph;ë\‚â^†ÅMïÄÃ;ì@ÏàD?àíÕß¡ÜÿíSáYÞh+TxrmŒB¨ì\E¢O/ß ÜHÔÅG_ú°×ù„BíƒGªž“Õ =Éãí½\Û®¹9C¸U òúºÆ¨šµÒ|ØPiZƒõ²W?oê3^ìÍfßùi^-4ùƒSŠÇÀ¨U»¢ØÊ¬ˆª„8«ZQ¶›ñ D û»¿žÛ¿×»«Ù‹6^»¹óÛ®»‹°Ù8uã™$n«˜IY³Á¿{?“Z>#“Žãó ƒÙ¹és½üËA°S­#?Z?”9‰#2!÷›–ôã%I:¬à)3Ù# #´>ÅË@ º@4‹³²b«žñ‚ô–™¼VB+¼ 7]#ÿÛ“«#,óÂêÃ? ä?‹+—= ?UA¬i¸]úü;C“iÚ#3óˆêº3d¶kѺ{;4´ÃX37 Ô¿ÃãÁø‰Hé Ã Cäk¡DÁ+²á蓤uÓŸGɳǹ¾Ð* œŠòÛÁŠ D ¤E\ÔÁ¥iŒ:™Ns&£ˆÄ{Ã#8H –f"µ|j بÁVô<1[¹„» ÌB‚‹Æ*ÌÅœ¸  1A¦9žO$YA%º‡A:™•溬Äaņ‹Å‡+ G”GþƒÂ[ÔÅØÓÇÌðF¤«4í"–/IÁ"4G Ÿ5Y[Ñž>ÙxÄ.’ÿè2³ÀS¹3C¸~l,~H¼Ã¤ ^¼_L™1tEb¬@Òñ±ìÛ1ñ«Že„ŽDºÙ‚¹a|’8,)1;Ä"¨”Émt6›J¸ÐDÞC´úÄ?<ª g䎓 ^‚UœÃÃà>CE†˜ÂéÂÌʤ‰+†RI—4Êlt5¦9D?kÆB*¦ü?Ž,©Jìð»UË+¹‹K4Ÿ¯\%Ä· kÄs,KK¤Å“¤Æg”Â4áB‡ÊT\I?ìIÐj/R·» 9œ<#ÌÚªI“à&–°ŸÂäÆ+$®„1ÈŠ, dÁAH?4µ„¤p ›¸‹§Gí:®'¼Èÿ´|'Áô9ã!ËÕÊ/äD’¯ä\Ή/9ç©¢‹N‰/¶Û#òªNÑÎäDN9¬IäCƌ°ØÂT2ߪIÔóIã""ÜÌxF2#ö´ÏÔìÊÒ3Óœ2LlÌG[Kk$‹¦Z6[DKH1ÌØp>MrÎ, ï‹Óà‹?i¥³\DFD¶º,©<‹QŒ©·t¶:|½¢,P)QPÉGÝåµ;šëôÒ˜mÐfZ¢Ìq ôìÊ¥•É[¼QÍÚ-‘,QÔ ÎlÑŒ0 ÑHÚcFžÔI®ÁÏÈl"ÜP%lTOÕ¹Þ¼D´ PòLÌ‘äÿ@Ù¤å;¸Úº¼ª€¹×¬:4 ŠG.M<(œÓp<ølÍ.UR4MS2uE@ùž$ãÐÚ±ôSªÄèc Ì(aÐTDH>]ÍÎJN=R¬ÄB@ý­`|Rû<<š®”i7+Õ Õ£–¦Q ‘`­¥ ÓÓ/ûEOÐ$=S35ÊßPžY–àðPå+”™£X  m%7É‹œ2™ÝÏ òËÛñ.ÍÕ T^-Tô¬V1Ì’¤¼À›hi—­É ÍѨ¢‹îÚ¶lmɰÔU‹XJY‰ÅÖ<ÅW&]ÒPME&ŒGhÔHù4I…'å ô ¿5dG1QÁ©yW2¶}ŽÿþÔYÕÖ2åVB¥73žo 7¥’¨•P®Ý\ºÚ™*Éy:"­oüoBÄf-5ÛÌØ{‘ÍŸäWÄ”Ä^¥Y],ý§KÝ4›Tp„»“©ï¡à1©Ý鮄xÙR‰Ù2YØ”Öy%GˆT«Å؉ÕÚ´l.×ÚÈ'1mÀ‚õ4ZÅ„ý*þñÂ1´Ë×÷ÔȤU{¹XœÝÚ¼Õ[ÓòV UC}К žvù*¹›ËÛ(>¤I6Óº•@ÉK|ÅçX4¯ÍÚíWPER ÍÅpЛ¡¥{|Êt©—½øÕg*¶jò™k-Âh-"}QÄu±ÌÍ×ÛíÚÍõܽ#ÿÔ2™i„ÜŽøÏKÀÜuCýÔjä]}5ÆL]¬E˜=cM¯ n‰TmäÛäuÞçõÞÝuÓè›-“êÝT ФìÁîÅÛÎßå¥[ ú] F§,Ï« ^Ž0ÞnAÞÝußæ…ßí¥[Ì\ïR¡õtÕÏrÌ]QÓ`Iã`°öµÔ–ß FK n8uÑÃlÐÿê`ÿÒŒ-Öí׎_ÍEažÝXîTÿÕÝÆ£Ì²ÉH ‰×¾à›ý^îíÞ†5í࡚Ë*E»ßœOÜ _yåZεÃîa·É“Ö)"®’Y`%¾áîT^bVuœm½ZV%f1–Äbÿ†á-f^$žØ Vã ¦Í;݃#ar¡DåÅá<^ã0æãfãuã> ® ÔÏÓàF`C¢à&nãFvd æâ.ÖâR‹#æPlLâ4ÞcIÞäGfâHîd=ŽM¡ýSRFGNV­ð\eVneW~eX–Ι¯YneH†b?þãAåQÆåRÛKξöÌá ÆÁ^öe@åPÞeÓÆÀÝ_ËMeföâIÖdOFæiÎæ^Ю¤c¬*F^æ>Nfe¦æ,¦dræOËÄfm†cvÖåqNçj&æyÞã$|gxÎgz¾fs>ç}>æ~ÎÅ{h€¶æOî]ƒÎåƒÖa|^è(…¥†vèÿÿ gy®ç#ÞÕxîcn&h…ç„®h~æh.èff<.év–h}Vi’þ玎hvç”féŽFcŒ^阦é—é™ÎiŸ¶éræéŒÆiŸ†i¡j™Fçž>j¢fjæe¨é–¾èVj¤Nꦶê«.j§~ê™j„Fé¬ë±v騖ê³Öj¬^k¶æjµnk£~k¯Þj°f讎k²†ë»Þk¾Îkªki^j¹Æk¿&ìÀÞꈮk‹þk».lÃfìÅVlÄîk³Në²>ìˆl®ì¯¦hÁlÊÆl½mÒ.mÎ6mÑvkÔÖì^mÉÞlÖmÇ^íØ®êÙvmÏþìÓ¾íÿÝ–mÞNíÇ®mËöíÞžëßn´nã&nàmäNîÎ6fÛ>î×níâVmê¾eç6ÎÜÎìçžlÚ®îåoì¾îÇænéVnòNìîfîïÎlô¦Bï>ÎX®oû¾oüÎoý®oíÆíö^oç~oæŽo:<ïÿpÿNoèïlGð_WðÇiñVïò~ð ×ð §pº>ðà¾ð ‡oïpñ‡pó6q ßîþÎîð‡q·ð?nwñ_ñð>pgp/ðÏpïÜŸïon—o¿iWr×YØ>ò&ê r ‡ò+`·h*ð$×r1Ïñ%?ñÿ0'ó-çò(—òQþò wóó"o^8ð:ïñwo7¿sçs_s'r ÷ó1Gó??tD7ôBßs9?M+OtEô9gsA'ô1·tI?sFÏsAÏtN¯tM÷ñFu&óO'òOôIOõE'õRÿiWÇò*õ.Ws¿¶ôUô8?u;u^ÇsZïõ_ïs_v`—u=õ¿n\wt3WvJŸîÔnvhgõKuúØmßvnïvoÿvpwqwr/ws?wtOwu_wvowwwxwyÿö? Œ=Ð{Ž|×w|ïwwŽ}?Ž€ø‹÷Œƒ·Œ„Wø‚/Ž…·÷ÿ†Gxyx² x°x¯Àx®Ðøx†÷xˆçw7 ŽŸˆ’爔Wù‘¯ø‰oyƒy‘'‹¤ˆŽšwŽ›Çy Éùâàùžßy zç¢/z£?z¤Oz¥_z¦oz§z¨z©Ÿz¦ï0G((Á° „(Jx (€z' ¯{ƒø­á… Gðˆ±ûÈz0edËw8¨ûȆ¯û‘87ÙúÃû•7·  €|§{»o-¼_|(¿GûøXü(Ç/ü8ü=øzuó{ÆÇz­?ÄÏ/®ÿ Òç{ðp„=x}ÄŠý?€ØûÿlÀç”ø ÈG€Ê甀|G~JqØ}J8€‰?0èφÅ÷‡Œàïì€5ÙHŠÅÏ({Ù9þ|ßûnÁà}è—~ê·~Ȇ½×~îá8€lØçˆþ MÀŸ 2l¨p€lø °çàŸl( t¸¢D Å0ðO#ÇW:<`@ä“ÿtcióãzâ²åàïß™7Yv ௢¸ŽþÕ0te>{þuI0èó=e¸§…²1ÝöJ]rPOáÁd¼uT`­Â¨¦Ö O\·z²nÅ ÿ¬Ø©_)Mk˜â?»ƒµÒ¥ù.^Ký¨ªÐåäÂ5kÀu€“¡ýf; ŸHSÿPÛz¡ðüæÛ 0P®BÖÂeÿ>ûç€Òá5 3f˜˜ $lmÙ_ı=vSi˜y7Æ$]úoÀt¼Õ€’v‚Ý Wýý}6>Qe^þ`JÿÁg“p%&)_i$s´‘%AwUäˆUrø[Ù „ÜL?-7Õ|Ï)øugýóGø“iÞ½e@âàHSäɘÙTéq5Ø‹­Í7@NáèÞZ‚ Ùš#ÀU>ÿ°T’+e¹e€ÝøWO˜†ùSX%å'€8#N6“F?=8â“щ€œEZUÀsSU¤¢|gA4Ý|Žéx˜—r±wÙmÌíùÐ`‚¥äY–Á–¨mk°åg–æó¨]†¸áL6†J¡ ›ÄÊꈰ•·øœHØíÑÙˆ»Ò˜ %ìÁdŸÃÉfZ€{|zÛ’<¸GEB¶èBcýãäF‘ΆZ–”4û,¦ aÇXÕNÔêP= v€#ãÞÅm§]Àäƒ>¡¼,Ý»/[&õ;âp ÆÕˆ'¬•Kõ ¡:’!‡âæ•Ú†ÀnW⸷È{$„áqÞF-C@Rÿ %uFe€msü”Ç ùÊ$›¼V>!ï¡–Ì+·ö‡ÏâøLVÐ+òBâÄ<ØÌ K=5ÕU[}5ÖYk½5×]{ý5Øa‹=6Ùe›}6Úi«½6Ûm»ý6ÜqË=7ÝuÛ}7Þyë½7ß}ûý7àeGhr~~8âvÿÀ†˜8ä‘Knöâ èlvŸ=çH>Õö›@sW€0bžÐàâÀ»íTþE× Ì N>;íp/NúK>PŸ}YΖ$€i»ÇøâÆ ’ñ½S2¥#lYÒ¯OÉóÀÃX;÷ÝS|qÀWdÕnãÇI¼œ×Mô,&ãº)´›»¨ÿ %ö+ýóByÿ?½V9±¸¥$¬f²<8¯ÜqËŒîc@Úø„ØKILC¼¦å>ü ±6@ Žï(Å©ˆI ô‡n8.K©Ç²ñ>´tF7&äÓ¯:C¼°ÇQÁãB(Ä!rh„Ž»™z~—  ^7v·ä¯>@I┨¢ &$y¿sÄóPEÄ1’‘%ÙØŒ1›‰åègyÄ0Á‰mL!l„’È~ƒF…@L-FÛ^)Ȭ-ƒ<$"׿ ,‘Ž|$$#)ÉIR²’–¼$&3©ÉMr²“žü$(C)ÊQ’²”¦<%*S©ÊU²²•®|%,ÿc)ËYÒ²–¶¼%.s©Ë]ò²—¾ü%0ƒ)Ìa³˜Æ”¤8’©Ìe2³™Î|&4£)ÍiR³šÖ¼&6³©Ímr³›Þü&8ÃùL³œæ<':Ó©Îu²³î|'<ã)OuZ¢k;Û=ÖO}–Móü'@*ÐÔœõäÚ>Á–P¯-”¡ý,(D#*щÂó [k¨=ûi6Œ^”¢ý(HjQ­qô¢=)>CªÒ•²#ÍZIIŠR|>´¥6½)E_е˜Ât¦bãéÕü‰Ó¡5 : êF}ÊO² µ¨N}*;j5 "•©Ie*T³ªÕrJµjTªRZÓ­’µ¨]¥ÚW½ÿÖ¯¥ujM-+\mzV·^•¦kµg\óÚÒ¹J­­tµê]ª×Á†”¯ ók_‹Ð±¶±5ìˆ{XÅš«Ž½lA!Ë!ÉF–²2µ,fC PÍ ‡³›õlOA+ÚÕV4£¨­*`SÊÚÙº“´·1mi_ ÛŸŽ¤®¼Õ­Z‹Vß.··îpck×å2WŸSx.t£+ÝéR·ºÖ½.v³«Ýír·»Þý.xÃ+Þñ’·¼æ.6ÐzÞõ²·½î}/|ã+ßùž7½n¥/~ó«ßýò·¿þå®}ûú߸À>0‚ŸàÃ&¸Á~0„#|ÝGV¾0†3L_ oVÃþ0ˆCŒ]ÿ—VÄ&>1Š%LâÛ¦¸Å.~1WÜqÀ¸Æ6¾±yelã¸Ç>þquuŒ¹ÈF¶±×Bä#3¹É"NrÇœ,å)gÊ4£2–³Ü`+eÉZþ2˜õËå›x9Ìf>s{Çl“2£¹Ín¯šYb2ãιmîRñ,VÀÒyÇvN¬r«g¶öó†>4¢­èE3ºÑŽ~ô¢“áç?w–Ò§µti!­éMsºÓ‡–ô‰»ç@zÐöô4ªSjP+YÔ„Æôqa=cUÓºÖŽfuÇ\íPYOšÔlµ5°ƒ}\ÓL×®õõ®‘}ja3{Õ½6õbyji+¹ÙÖî4±»lìh+›ÿÛоèµÃ él“yÛ•íö¹¿MRq³›Ñä^³¹?‹ny«¦í¾7¢ß-çx§vÞý®÷Nñ-p}¯¤ÏÓøN©Ýj¦ ß÷ˆÁŽðÝæyâ^mø½îˆçÚßÿ®¸ Šñvk¼!/¶ÇžrŠ+täì.9CN®í•ƒ•æÁŧËÅ ó¦ñ[å6¿³ÅÑšópï¼· GùÏôÃýÚEÿ‡Ì˽ôÉN½Òv:¼«~é '—ë@×§ÏÂ.ö±“½ìf?;ÚÓ®öµ³½ín;Üã.÷¹Ó½îvO{wfC6½‹ï}/›ßÃø¯ žð€ˆÙ ß5Å/þðŽã¹y­Ífò”ÿ<ä1ÿ÷½'Þñ–ÏÚç¯zÑk^ð¥Ûè«61Šõ`sýëËû¯Í¾kµ·½ì©ûÝóþoA™Ó×(á ý‡k²Yjr¤5€¥;Ièºf—è&5 *²rPô¤«I6’{ªqÄŽ¤3$ÕÑÐt!`ÙÖ¢b¬ùý Q_¤UÄ1€?üáúVHø@EðŸilMz¨Ÿý1ÿ_Â0ÉA ¨‘UhÍDDGøÿuÖŒJX DG•Áÿ-E> `€^øÉv¤žaÄDˆpÖiK_pÊÖˆZàÇE ßÕ¤ 뼉VMÿA]lÄK#mó…ÅjÿáÔ †I°P7˜L€<Ñt s´ˆö UüŠã°`k\GvÈw[ä†ãìI@gdÈçpMn˜ð†mtCXLÈÿAˆIDÏšD=¨x0 ÕT¡s\¡ÖøF6ÔID ÕЈ< ×dƒõE6¼E±t?dç¨! FÖâä%pÅL¡Õ4± š¸‡)VM™œI7Ũô¡mØ ÇŸ˜aÖøÆ¼Å lÍ¡ðQcøZÀ~ä ŸhM ÂÅÎÌiËL¨2^›¼á´Ð ÕdC¬c¼(#ˆ<Ç¥|M† Æ¯(!ÖøÆ,’(ZÍHËPKX‹"J Dì‹üdjph†ä„E×LÄÄP¸Ì_×ÐáI¹\ˆ@ÄĨé ÖXÌ?tNÄxM> £l¼#<†ÌÈ FÔQ‚ÏÔÃÍ„!×T_w„߈ãÕÄÄIF¤KÀŸ1ºGÒ•m¨$W!ù,{)A~‡&&&777IIIWWWiiivvvMx¨U}«iwz{ˆxw—i¥z~ Y‚®_…°~ƒŒ{ƒ“e„¬fгmµy‡§rޱp‘¶u”¸{•´y–¹|˜·}š¼Šu~š~l•yv¯{[¹{X§mw½cf»iu·swÜ|6ìz/êy8ò}'ð|2Ïc^Ê|OÉzVØjVÙwGØx[ÆehÄktÉtyØlißsjÚxxäWVègIæiWìyHévWãgfæteäyx…z…†{—nˆ–vŠ™”«yŠ·|‰Ê|…y˜…x¾‚I¶ƒW«‡g®‡r©{¶‹d±q¸“s݃.Õ„:ô„ê…&å‡6ó‰)òŠ4ò‘:ɆGÇŠTÈ[ÓŠGÛ‘MÕ”XÍgÈžwÛ€{×—hÚ’{ߣjÚ§wê„Dë†Wç–Jè™Uñ–GñUéˆjæyé˜fê™yí \ð [ç¢gî¬tî±|ð¦gð¬p‡‡‡‚ˆ„œ’Œ•••‹‹¦ˆ—¨ƒ›ºš‰ ”§›±‡ ½œ¨¸¨€€©‡˜£’„ œš·€Œ»…‘¸œ„©– ¢ Ÿ½£Ž¹§˜§§§§¨¶¤°¾¸« ¹ª¸¾²§¶¶¶‚ŸÁŠ£À“ªÄ”­Ê™®Æ±Ç ­Ã¦¶Ç¢µÊ¦¸Ë®¶À­¼Î¤ºÒ³»Æ­Á×¾ÁÇ´ÂвÅÙ»ÇÔ¾ÉÕ»ËÜÁ€ŠÊ‹’Å’š×…ˆÙ•—Ûž¥Æ­—β—جƒÕ¬×°ŠÒ·ÎªªÌº©Ë¹¶Õ¢¤ß¼¼å„ƒæ•Šæššê©‰ä£ží¶†ì½“妦蹧嶶ñ¢¢ó¯°òµ¶Ä¿ÅÛ»ÂÉľÝÀ¦ÙÊ»ëÁêÅ¥é̶éѼñÀ¿÷ЪúÓ®÷Ù¼ûÕ°üܾÇÇÇÂËÖÄÎÙÎÄÑËÌÓËÒÚ×ÀÆÐÏÐØÐÈÛÛÛÂÑàÛÝáÜàä寯äÏÐç×ÈæÛÖôÅÅõÖÌõÖ׿àÛýãÎôèÝãããåçéåèíîååèçèëëëìîñìðõùèçÿôéóóóõöùöøúýõôþû÷þþþÿÿ Xo AûÆ)wï C‡b«–kÕú=ÜH£ÇÅùP$É“M¢<©r%È–.=ÂŒÉq¦G}8õÁËÉS_¹UãêÉÛ¶ª\=¢E{*Ý©”Zµœë¨½SJ•'Óœ47ÚÌjp+×”_e†Õ:¶dY³$uÂ[›m­[·Ÿ6œZ{jC¦AònÐö¶/¼¶~éȉ¯9èü*~ Ø­¾³^¿Fæ:™òÙƒ•ifÖ|R-ÛÅ›6l[«mC… ›´‰ê0ˆÜ⿊£É‘sXްם¯}\v³Kß+¿Ü•xHãÇÓ2^\“7q™6Pèà6ôèźßF;lgîÜ}yÿÎù?òå‘£¹ž}çåŠË ¢ðà…?¨¯~]qö¾í|‡[vâ…ÕÞGŠe^‚5-hÞyï¹õßZäüAŸ}D·É6¢lÐx†è9¨Þƒ ’u¢‰#y›b¢`@A^`° ^zñ¢ˆ<¾èX‰+—¢ŠB²X¤r.–Éd’ dRŽ(›|âÍwö¸ãn@éå—— é˜cFø™b˜D¹ß˜ô˜¥–þ…×%qdgd˜wâ‰ä™~-Ùä“jòø&œ}‘Ø[ž‡":ž¢‹îéc_1Î( ¸Ihˆ†6 æœt2*Šf>úV…”ºÁ® z©€™è©e¯fÿUgrA‚äâ›äd’_&âh9誢øi­zËé±Ènt+°2»åNɺjl´ÃnJíAË:§¶#Ê™¨µš‚+­¸ãÚ ·ç^:e•W&ù–°°’¯¼²ÆZ¯£¿®š/nâà˜—ŽÁ^{/½w:í·æº‹®Â„r‚šj¬¥ÚjµÌÙÁåVœ0Ÿ ‹ªe~Õ‰Æ1´«ñÉ_Œ±CÙv,j:Ñ@#Mˆ ¯eÝÈðlòÎ<—œ²Ê{Ì­nèÔ&âæpj«}°ÏP‡‹rÔ÷¬lº 7f˜mÏæ¿þîÅ0ÉRÿü¨+Ï;õÕc£Û:¶­•m®k%Ö9muÕfÿ—¶Ú7aí¶[²Ý¶ÖaIÃ91àTS¼6ße›ÝrÇÍ=X;ÐÈQ‡¾ÞFî9äŸ;Þ·ß- >ô[Ã̦zb—.®óèéý­7ì±½/¡ÙEC‡°Þzç ‹Þ¸ð¡3>¼A“gÍc:–¾K»{²Ï~¼ôÓ ôW6Øg¯ýöÜwïý÷ÛߢFj˜>øðÔ#Îúì·ïþûðÇ/ÿüô×oÿýøç¯ÿþü÷ï?ýÉ:¢ŽåK6´™Í×°<âÏxÅ{]õbâ›^*u³¡C:*gŒ_ão a¶æ»gå‚öBa Ï=–®m„Êï# À¤£8Ä¡9ÖÒº­EƒaUÿ!èÀ"Q‚DâC,§Ã0uC.ÖBŒ^üÂÆÀḖ(–;CTâ©—D>îÈ3–zh·ñkÁ¡[~Ñ‹ÂC†Â !¦ÂHÆ1šñŒD ¤ ÂD-‰°0‡™"<´HÅ:ºƒG{"7AÒr|ô^8²K!ð0l C.TÅ+f±’„Ç ("×õ“,l¡%÷†FBªNÛ‘Ö ‡4Ø!ÆøA~€Cc‘„Q\xôQˆÀr–š|É ¡)¹[ nš+ƒxðƒn3k¸‚8¯ e¾¥öø‘Ÿ‰’YÑê’¯„e! •ºgü9àÁŠÿÃpÚu¸BR¹G·ˆ£ Ì\ ;kGK?Æžñ´% Węق98ÃlŠá†+`á‰l §¯ÞrÐÔƒlmè:JwBh…ó„Sêz—†è™{CG?º–8Ta½R•AyÒJS–íD›ÅRªR‰vXéåÎÀƒ^DC <ð® hС VðÃD!Ôµ”4¡ð`é&!šÉJ&¦Ö$T:êÒ5£?ÐAv€*Pá U¨Â"Ñ‘Ô-èTçAšéÌ!•¡Mmk%»Ä¸^*jÐx‚°a—â¬BhCŠ |¢•Ëlfeß‚ i¾õ±-uíkmç²µÿä¢6á\Ã3¤Ð*8A@4jPKÉì&¡-l×ÊVjN–©‰©¾` a\ k‰`5àœ8|s9,—®æL…:v©Î}îl#KY–YöwÙÅBê0Œ1€uЀ´0ˆ²Ž·²åMëy›»^ö¦×¡ÐeÛS™ÕiŒ’‡rÀ¾°°"Lè‚Êá_”:ä¸'M.fd[37š­Å·ÈA¥JÌ¡—¿Ìî.§0+`! ]è<Bxxã …0ÊY¨·ƒìX‡IUû xÀ.0Š¡|!ˆð0Ç/n@Œtœ’ø ãëÖ«µÏ~t-#*éÒŒ:@lÄBQ¸µÐ1§"Df@ƒ9Þ Qbø·*öbÍV¬ãcØÑ‹`<¹¨žu‚Õ+k»:ýXÊ‘º(h ©st/ˆŠ X€3@¥¯ìh”cÙ¶¹a•QEbšcÚë¾¶‡Së/ÖQζ{ÃÝ£¥eã 9­ž¨ï^¼‚­ £)1½‡M?ÂÓ]5GÀÛ‚Wb¢šŽÆÿH_«þj‚üÄ‚68mÕ¯¼ìÁ âÌ‘åFG+¦£>ð1ë¸ ¼9Çrµÿ¢ï:ß9ÏðhŸQÑòr„'\æWÇzàÞ£)â j¨Ã— êF]¢mx¢8€la$Sß¿€‰##ÙzRÿ6­·­m½·×¡¶æQ=ÿ 6ÀÁŠÆ¤ £‘Ëd¾FäÏ^úC¼òn·\AwyÖaNèÛ‰¨¢‰FVsø‹'1¦ö€! t˜cvü¯yÿm˯tï|¿¼•'x½óùÞ{´Hƒù²AˆAº¸Aj \˜! µà l àÂ{¤„$Hѽôýïûà¿ÿøÇOþò›?~QTiƒU†Âf/€Á†3½ú>7¤ô2ÖLQþ¤O¦u1guUFuÆrà¶`«2W½Ô?xy¥h€>Àk *°)`S?{kQtð ŸPX¡S§\U§y›Ç‚H€W[y¿P}<°;9l* Pl€:àxkáUýU\z–wˆ{KÈ„¶ç„OXkX¦LYô8 ÄÐsƒ!Õƒk˜r˜cw°p¥q„Šõ³'€Üæ†oÈy}çwM6…#é Yõ p W)@â„+à;`а5³¡[0Ï„ÿ 7Äð ì0³u·{s…w{›È‰uÈuœ³è€U˜k}•:X3š“è@]pz my½`ga^ê³>é‡Þ¦‰¹ç‰t8ŒNUh΢ÂÀj€òÅKWðW;°*€èpzk! r˜€ ¤ÀtÅdì È@{éÓ‹;ñ_˜w€ÀŒíHŒt˜~„CC_„5Ã`Y€u°ŒÑ¸þ˜k Âà ä9s6ƒ’§wf='(¡"f€-¸Žì(‡îøŽÇèyk1 ã$Pd÷TÚ8?¸à à ¹À]°Nq 3#!"÷ »Ñÿu¼!‘[WR+h‘‰‰‰‘Ø2…íp9çWÐFÛâé v°;¶ Ï s€² ^Ð^`OŒ¡oÆ Žän8¡ŽEiV¿H`8‘v’y@ù‚.ƒ"2 ¹DvàŒ‰cYë§:¹0\è ‡àÝ‚‹º¸Xçä\Tèåo —B©{™€ÈèvNØÅY—á& Ѐzíð •c | uZð_dC‘8‰KÔLSg^u‰òd^fÙ–?™P¨‘RŠ&YpP¹ULÙ-~Ñ‚1v€0óYs€x`8Öe‡7_!›m8AµÇ“D’›Ý”ºÙ› ÿèQdãDYP…!dÃÀ:è:þ¸KÌHˆX€é  L0K xY°@bwJÖ°ù‰ê“–쵪‚ÞI‘è W曢8kœÕé”v0Z³Áx åQlaW°0/`©0Uð¢ æYœ>âtxF¸€½ÒBjÑL·ùN ƒ™¨‰òø”Q)„}\ÒP•‡!aѸ”Ï NPa0 } T°œð`]. §–j½àš[W–$£..–`ab>:”iz–ãy)v`ÌÐEá”°UW° T°~àV[P•rN Uôoÿ@myÿö êLcê8±¦ ¡qH”’É‘"ò¦€Q– rE*ÀXy§Bˆ¨Ò¶¨1ê¨aŠ ‘ê–ù£˜ê‰òøyr`T©Kòõ w~•(@%P/àS°湤.ú"[JG^¡`*µÚ –Š«”ª«vø™(©žr“¡ªSxœTVX`$@2`z [ Ktl0“laj¿ÐMv¶n2z˜<ú #†¦qÉ­Ý*ž“Ù{¹¡¯Ñì™Ö%NR®U0]  ÀeSÀmÐÎÈ © 9„WÉÀ)G›ØR ¸ žÛj°·ª¦»pmú@ÿävHª™çb¼ÔJPWàK@cOP%˜8‡gð@ŽðrgJ?g•׉VkŒ»y°X{µé÷¦e‡¯Æi ¾Àpyâ$4fZÀyñopS  ûœ ð°fn jŽ)ž[[Œ„+ŒMȵSèµ?$“àÑo:àÁp¶ò% \Àäã ›`¿pI Q " À köD~kR*«µ…Ë›WÛº¹ºwéw³¿j:+!§d oU…€5F I°IçÄ t03ð ˜°‰`E—FµX© ê²/k½‹£S¸° †‰ÿ b¦1€@c'p_@wƒ‡½Ð 3P°Þ  @Ý„C? óT+¸°Ëº<³Ú»½3'"àÚžX² F@ £á Õ' à! .@ð/ka†À  ð FÀCÐMûúÓÀÄ` ,Àgª­Ü£ ‡»«0 Hįð @:’Úp ™@ Àð $ׯʨ½©£«°bÿœ½¬È—ªµ½÷{’Ì=¤p ¸ð 2PÙ  Wi Ð2p€=€Ù£ 0†=7 f¸>¼ð¿p~º¼Ë¼Ü˾üËi‡<¢ À kq3`â@À/ 'à #¥ K£§RLºpÅ]Ê¥ú¨±;¸‡KΆ{Î@W,Æ.úúAübÉÞ@¤`4wD< <' €ª2ÍQ°Ò1‚`‘× Ý 5` É0µå›­6|ÃYkѲkMZö¶¯P²è„À wxIÀ®0Z  ð«Ñ@¤Z‰¤ÿ»¯` Ù°E ÆL«g}áºK4©×ëÅ_¼ÈG]M ·4R3°qúçª ° ½bZ}Ï€L LP§œÌöKÑઠ Ï+ ä0€p¯ÜpZ¬º ŠÑ1ÔaüÈz]À1 xÖT3ð@3Ð ¾æH`´²¡ûõb5Ö´j„ ²°ªà!E‡Ðÿ6«8œ“éã} ³Úã¼µó”V؇ØmM×ÈI°>Ÿ p Ø‘`Ù˜í!Þ½ÒæÙ -ÔÙyÚÆõdêHÑ-Àå\ŒVQ81IQËxú€Ó0 ø ÝWÿ!Ý«P ä ñP ¥Qa 8¦Ð Ó½ ÞP«ð Æ ûP×½0 ÆMÚ©m³W{3ÜÜÎÎýýÜ&õ ¡ê°à î¨#Þæ] û ø°íÐë QñÀXõ0ÜðÓrG Œõì“׌œÜ•Ì ÆIí×Ƚü° £€ öÐêp É€}£p šP”Îà áã  Ýà>ä€ ” /lâðsÜ5ÌZÑÉÕâHà.þâLà½ØLïcâ”8Úò3Ú\ÜŒ)«§åJ]Ú2ãK‡Q½è‹çq‚RX?BÍg*b9ÉÅmàþåDÿ »nuNîCæMv£¾?çá‹Ç­â|ÑrnΉ~èˆþRK•£´·>b~ææ¸>I?Þ‘:á‹ØªºvŽâž¾é€=àNà³ÂL93ªP&žVRÞ+í“ )‘ SNêxç‹¡æçHå³në·^àÑ.í ^6*ëÁ%jaŽi)¦Â~çìc ÿ0ÿ€=ï#æ|n‰Û^í.’‚X1ç¦ íŸ>ïŸN&j!¦;jK–ÜÂ>'• âä.Æ.ì%E£Ê¸ÕN„îüíåq.ï…þìÐN&ØÌ\¼íº¾}î>ÿ ðçaìbžVjçBý-Ñî±–Õ ñìÈñÿžâ»iñЂñW.åliV“¾>ò"Oð%¯º½‚ÈN£/Ïï9Y ‹>óðñßIñ…êAE›bjõð@Oîï“eþ𘞖‚®ô /óPOóœNíÔn(Ãx]ôáá'åêuT5£åíáò@ôÆN£âñî3œéìëŽö1Ïå[¾ðY7î÷µ¦>9ÓñyÇ÷ó³ê¬Fìòÿõ`èdâ'oéyÝôiç‹ïøX§î½(=!vç¹þîcnP\ßùŸâyÃìVží*‡Žð‚ú‹Oü¨ ¨Žw’ÏøB=êëƒçžìW/ìiÕ‹œ/ð"߳ϲ<ÿº–VæQÿæªÚô>ñ\žüI¸ü¬¯PuÏê'x‚ñë–x£µ&/ xÀâô‰#(ÞÁzÿþ·ÐáC‡úà%TÏàA}BäØÑ#Ã!EnYò!I“)Q¦4¹RåC‹ðôÅ#ÈR#Çzë|y9V|17›&š§è¨)hà+Ôí¸™MMv Œüú¿8Ùî+q‹œKêµ=5ècl™ÿñC&‡§cTs` c·À·504~›“”Õ,tüaHAjHƒe.|o)—¡p¦ÂK‘0ˆBLßûd•9b¹xÅëi8æ¬6€9,œxŠR(ânˆ(¤Ý!’ö-±v7 ŽÄ•ÍÇ4ôÉt'„Ä+%›O­çE#â1E4¡¬%¸¹dM¡Ý@†ñG‘t±OÙĸÇÙqQr'ôqòG>k%«jÏöÓÆí\ã‰ðRGÞqf–d $W™3Iª¯i«CÉÁª²µÈEî‘g"l¸ªº²•}Œd,ƒILjU‘yblפ˜„ l'! !SÿcHKÙÑŽª&%FVFJ‡)œ&ë@bÉKQŒ”Q²—ÀczS˜],æsÎâ‘ñMká¢X—'Ѧ”§iŒüþô5|N²žß¼§1ï×PC&Ll†BÈÉØ•!×GRkAÕ2ŠÌnÊ“Bö„H!!úIy…¢íÛÁ2z–q+4J(,IÊ>z¾Òyœô%(¹Wtž‡×ÉäF– î¤85f%ªÓÊ…ð”ù)Y)còÏÓæGsÙÌ@Ž¢K›$5yL½éS¡š«¥U­kek[ÝúV¸ÆõCñÔ#%;ÙO£Æ0ŽcKТÄv–¼N©EyêÎ*Òº"–ŠÕiLŠÆÿ«&q„ÝÍs\êѬ *¦î­’Ä2Ì.6±]ê›úºv63µE[o’EXªEZ„kíò¹Í´¶d(YËz@Æ2Ð+¯=e]0Ò#Ó˜F‰=˜QÌø¸Zív+î[u8Ö“ÎÓ¬!-i½XAZ¡“7ø»àm³0r ïºÐM×KmÔ¸š¯pØioszXƒ–ÖOàhUbLçB“ThÊÈÂzf¾h†¶#£Èφ—Èêø·N=í.ƒëÛ' —.œhOÅÕŸ²ê¥IqÈf?R>Ó‘Ø|_‰Ú,ó{áûrœ†ö6ÉUÚxnC_•jPOA¦ØRdiæRR«dÿÏiGÍ®~m:a÷9yPA$ÿrü£²HåH½¤»b°,­ÈC ­†ÓÔdo×·¼ÕnHt§üì—M F*ÚÔ6V&ó¨ÈÌȹ(%14ç%UQ¼f)SXÑm>1Bžšèf`Ï ñRè ¬–LJ•  µ›ð„]¼LåFͬ` ±Ì½ÝÅïhg åV%Ñ*¨¤ ³Z¡àÙ1˜..a—«äÛ2¹Ä••`4/hC:¥6¢‰0ÎÄ[é¥YͶð6Ȱ Üu·rgí¦µ]–á åø0õqe]ˆ3ã¡¶8DKûÉlNô'ˆí‚©Jt¬¥K …kDRëÌÿ™t¡æ“äa]·J.0&ñïG\âÀuõül\buR4Utu ž½BãZÁ³-Ù ²ºx¹3r€*ÓQvæ*’œÚõeô¢£]qߎ ³°OØÞÕ1o˯m#k!fù¤¥¹›zJ%yâó§³ZÆ­dLhǤ ßøÓ{us¸œi¾Y\ýE6ò–˶óÕ%7‹|hüb¸{WîÓƒgoL&±Ei¯ÑPlu­dÊJÓå:ì{”%ó+TÛ¼Þ†ú´ÿåó/×𙂦»V–W'…Ö™£3Ÿ¤ÏøbÝð]ȽOó›Ï}êƒ=¹’k•ÚFƒI5WO6±3oÍ,Ý(t2ÿìècVæñ [õ«W]‡?q µ¥sj§{;]+"g2ÌbÇ2åaèëd_««&¾dÑŸúá‹Y‹Çw¼IggBï󟧑RmÄðO¡m™> Ûà&ù1×…>}Ü|â+¿³Øˆ“#?‹.çs8æh¯3%ÉS™i©åó?õa¶—R)þ x’º©ó4Æ#¿yÜ*39À¯JÀÝ›hŠ$a)¹C¶Wƒ—ʲ>`šf+2ìâ¦ÔœšR<ŽŠôŠ€á9ú”™#7ƒ :û) Ò œA û©+½$̰È¿á3 m OJ!›©&-Ó1d¸@ÉA‚C û˧ÿ9!6“˽ì2)MÛ;9úˆ)‰¦±»¸p¿lµ.ƒ0¼Œ ×ÄX;Ã3‘ ³ª+’Ÿ‡šÃëI¥?ä*W¹ŸmMª)pó¨› ¨È3Bö3=jyBÀênC)íYµ%r7‡)º@|ß)) ÊD䣷ï(Á2äÁ°J’»ƒ¤Ã\9÷³D^8 [—¹*¼+Jäš@¹ªFk¼FlÌFmÜFìÃì!íñDåE÷EÄBVLµè`Dþà á;w3G)ô S¬¼k›F ÁåÛE^ìÅ Æõá@ĉšC1šƒÑ ¬%sâ¾Þó=ŒsºG£²ÃÛ@ÿ"Ÿ/4-(;4ô’i*‰èC3‚dÜ@]B[7& ²–‹” ä!ˆtIÌ*$>¡=ÁA¤I}ÄEyãI–hŽâ¾ÚøŸ $GYÚš[ÇšˆÉ¨[@ ʼÄ)ôÇ·›Çþ³J–œšX8&¼¡ó2ŒË:' 3›:úA:Aëº;ÜÅ.¬J¬ÜIZL”­ô;°cRy°c*úº²´‹³¤±¾³»/iË—zKX¿o´«È4Ï›HFž€¶ö;Ê$$šX Ä Q4ÊNŒÅÆ Á«ÔIÓWñžÜCI¢ë·K›Ôq¸h9ÈcJü¾š4DuCДKÔÍÝL8ÿ1ü½ækÄóJÈQµ6ŠszÄÚÄ”HÒt3C¼È‰DÃͬ9ŸôC±ñ;äžX!FüL $™Úˆ9’¼D›¥ÔBªÇ¸tÊü£MjÃÎÞìIðS.±Á;ÕX¸õìµ›*º$ „:;È3›2*Ù bÄ®,)<öüÍÅÌN?”1ü¼`¼­êêÏÎÒÅÎùóQÂÓÐõ3SЂ)FDµ”OŠãM ŒPðÛNwbLÏÏH›J°iÌSjó=ô¼*õÔÌE ›{ÏéjL·É’ëôMmÊ N€ü9˜d¤t“¡ät=þÐdK­ÁSÆWQÄ8ÑÃÜá¾G2©&½EÅ„ÑÿúŒÓÉ{Hp|´‚tÍÒì$Þp›ÌÉA±Hqº·ŠdžZ 3À4uRCEÓ)‹ÊyYžéñ¶ï²{ÜwëHú|ÑC%Ô55 Â|ÝŠpÓK³ÆM¸ùdÒR5ÕPÎôEëT;üT~RY›FRMU5µTDÅUÑôÈ[ÔõsÓýóR©ÅiœÔS Í|tQœ63}¯€‹š%4¿é UŠ<1Ñ /HTJEÕ½Ô]=¾‡ÚSÄÉAQÀ®S%,¥Ä[‰f=Ve5Ò[]ÖoÍ'“×’@Bºe+À|eÑnÅT]×x…×ZT”½G;#³TSR´,Ô\µW %Ðÿ†õ’jñ@¹[X2ªX€•XˆíXx1cÎù±Â~U¨}ª“õFƒMÖ Y%Y[×qd°qÖ›Ü *!W‡…Ë–uYoÚÕÀV½ ¯“‘rÓÀkÍ ›|ÐmµÏLUÕˆ…Ù˜ýY§|ÌŸ$Ò$Z™­Z«Ú Z¯e"ȹÜK§%Qn\[¶m[·}[lüW Û‰åÚ¯[»eB¯BCrCRçœÛ¼u×wíZÀ \[UZ û¹¬$Ó~<\ÕÛÂ\±[Ç]Ih3È´àÙÇõ׺ÝÜ´•ÜÉ ]v+RÈÝÏ5]¼õ\–UÝÕÀ\©…]ºM]Ê-ÝÝÛõ;­;]ÔmÜÿÞ-ZÚý]ªÅÝà]é²ÅÚåÜÜí\â Xá%\0CQäm^à­^ë…^æ¥Þá}'ÌšÞç½ÛëÅÞå-Þì-ßñ%ßÖÕ^ñ=ßð}Z¨u^öÞ%}_øEßúµßö•ÝÙõ]óÅßü­\õ]ßûý_¶]ÿàÞÞøUà_ù}Øv`fàÖßäUÞôý^÷EÖþM` &` ¶ßùåàaÞ-áNa áÁ`–àÞàØXžá–á—a ¾a†áf]þ]`þá ÎàÞ­áâFaVbaö`^b!vâ6á6â*Þa¦â æb&¶âFâý•b"îbÿ/6c0î`2â6.b-þâ'¾ß7Fã9nâ3¶ã,Vã5Žc>¾c<îã?d1öc:Žb,6ä@NãAÞãDbEžbB.dHndG^äI>c¸ÝdNîdOþd*½dI¾âD®c=ŽdJ®dScJ^eVäGîÙÄ´dTÎãW†eL&åFä\ÖåVÆÇJeÖuå-fä^å_Žbb¦åJ.e`æV_¾ÛefŸµå[ÎdcÞåjÆåcnænöæQFfiæåpgnNåiþfY®¶S®ås¶æbÆfy~ât.gwÎft&ç|†ãz¶ç~NæY>ämÆg€fçvþgxç‚6èkŽæ„vfeÖçÿ‡†è€¦h†fc‰~ç‰öçg¦_uæŒÖh‚é‘.éyã>is6i‡&é–Vi?Fh–~iš^陾g˜Vå”®i›æi…^hhFéÎi™&êîi¡®h{þi—Fj§fê›Žé£Æi˜.ꪞj©jŸ†ê«Æj«Nê‹–ã®VjŽÖj°æ6kªöé¯Þã¶æê±k±~jïmhºîhžë»Vë¬&ë.k¿þkÁnêÏÅÃ>lÄNlÅ^lÆnlÇ~lÈŽlÉžlÊ®l˾lÌÎlÍÞlÎÎì‡è‹ mõíѶÒ>ŽÓFmÓ^m֋Ԏ׾ŒØ–íÖVŽÙ®ŒÛ^‹ÜN‹ÿÝæm³èm²n×Þᶉâf‰ãFîÚVíåN‰ä6‰ç.‰è–îæ†mâ®nÚÆn‘ ánõðîï¶ð>Žñ&oñ>oôÞõ^oöno÷~oøŽoùžoú®oû¾oüž PH(ÐK(€° 0€àƒÊðW>ðï„}K€ß0p ÿ‡þ6€t|ÐÖ‡ g 'p²8*ùo¤0ðèŽp51í Ïp˜Øp7€ŒÈ†w?€Œxñ/€çÆooqþöïØ¿Àƒ$ç¨¿àƒøφñP Hà¨H/€P=í1·ÿŒ*?€¥° >P5Ïׇ‘-· 9€(ÁÏ@ð¼sÐöpq€×Hó5g‰6óèðlðp:·ó„€ÈK§rKPóøó@7n/s:Ç@çMçôŽ8Hr>ØïLÁƒ°ˆl¨ÈÇ”ó‡r!sKÇzЀdßòÈÇéÿúÃ'€ÔÇ:ˆèûgð „ÀCX Û¿ø°¤ð¢Bx 0©b6xÀhÒ % HY@_O*¬À€@H!G–”HÑ"Í„<²¨¥$Oêãc0ÎzAƒB= Uß@§š´dÀÄ4rí¶Þ×°^,{P$ƒxæâq*§8·ñ´5©á?<õLjÿ°^V kûº…kPŸ`¾ÿîÈë¶]<ˬ—Ofq™!r&lú4êÔªW³níú5ìØ²gÓ®mû6îܺwóîíû7ðà‡/nü8òäÊ—3oîü9ôèÒ§SîÕ2Õ·sïþ›€°0önþ ¡% O› ð)`ðH8u8óE´QÄu—%H•„Êž@Þ 0ü"pÓ…ˆib6àÀ¡iÈá–À$8x^h‰Œ!&!A¢€H^-þ#@0 ×1ABŸ‘pu^\ãe“¤ALÚÿôU‘!YÂa62êw“iªéÖzšÿŒSIbùdˆyò@Càɨœä°aŽPÏ…y¶ÀVk:ú(Bmê¤>05€vúð'Îx ð9啧͸l‘yá–{þ9è˜Ç¦y㜳:ê©O.:l¤gnújªË>»Þ¬¿æúè°«F;ï½_þxo¸ç~ºïÅµí® »î©ÿ<ô$ßÚòÊ7ZôÙû>=kÕSýiÚ‹?;÷«yß=ø¦¿>êå«v¾ùéÆ>ý–»ÿŸüïË/yýý'~?jò‡¿ý¹Å4O#À°,|`í€w6ß,px øº §‚¦ñà9ˆÁ’P5T8! S¨Â²°….|! c(ÃÒ°†6¼!s¨Ãò°‡9t‡ƒ(Ä!±ˆF<"“èC *±‰N|"£(Å)‰T¼"³¨Å-bÑŠ\ü"Ã(Æ1¶Ð‹d<#Ó¨F#šqn|#ã¨Â6ʱŽv¼ãéˆÇ=ò±lô# )Èêq†<¤! ‰ÈE2òŽŠl$$#™ÆGJ²’–Ìã%3©É/Rr“žü$; ÊQ’‡¢,%*SéBwX¯„»¡^ÿ`K^°8²,Ë-qIËWîÒn¬Á0ƒ)Ìa³˜Æ<&2“©Ìe2³™Ë<Æ÷zI8išÆ™Ö¼&6³©ÍmB}Ô”`-S³Íq’³œæ|f4]™›\r„ç|'<ã‰ÍnÆï›rÓàTä©Ï}ò3˜ôÔŸ=7вô³ -ç?8Ð ªó4}(D™P.Ô‚áDMD3ªÑbNTølÝGi²Ñ‘n´£!¬(HQ*R’²ô¡&% ;§SšÌ”¦­i)N úÒYª´• ­fNƒ*Ï6&¤>½¨C…ªÔsU—=M'RºÔ©rª¼üémÜIÕ­ÎÓª¾ŒjVoÊÕ±6³©í4ªW×) V²²™f•)Z½‰U½´µ®Æ|kPjz½b„¯}mM@!ù,{*J}‡&&&777IIIVVViiivvvMx¨U}«iwz{ˆyx˜i¥z~ Y‚®_…°~ƒŒ{ƒ’e„¬c‰³mµy‡¨rޱp‘¶u”¸{•´y–¹|˜·}š¼Šu~š~l•yv¯{[¹{X©lw½cf»iu·swÜ|6ìz/êy8ò}'ð|2Ïc^Ê|OÉzVØjVÙwGØx[ÆdhÄksÉty×iiÜnqßsjÙxxäWVègIæjWìyHévWäihæteäxw…z…ˆ{—”n‡•u‹™”©xŠ •·|‰Æw€y˜…x¾‚I¶ƒW«‡g®‡r©{¶‹d±q¸“s݃.Õ„:ô„ê…&å‡6ó‰)ñ‰4ò‘:ɆGÇŠTÈ[ÓŠGÛ‘MÕ”XÍgÅyÛ€{×—hÚ’{ߣjÚ§wë†Fë†Wç–Jè™Uñ–GñUéˆjæ‚wêšhê™yí \ð [ç¢gî«tî±|ð¤cð¦ið©lò©r‡‡‡‚ˆ„˜‡žœ’Œ–••Š‹§ˆ–©‚šº—ˆ¡ž˜§›±‡ ½œ¨¸¨€€©‡˜£’„¡œ™·€Œº…‘¸œ„©– ´¬¢ Ÿ½£Ž¹§˜§§§§¨¶¤°¾¸« ´­»¾²§¶¶¶‰£Á”ªÄ™®Æœ±Ç ­Ã¥µÆ¢µÊ¦¸Ë¬¶Â­¼Í´¼Ç·ÁÍ´ÂмÇÓ¾ÉÕ¼ÌÜÁ€ŠÊŒ”Å’šØ…ˆ×”–Æ­—β—جƒÕ¬×°ŠÒ·ÎªªÌº©Ë¹¶Õ¢¤äƒ‚敊四ꩉå¤í¶†ì½”奥麣嵵ô¼¯ð¾½Æ¿ÇлÆÉľÝÀ¦ëÁùœêÅ¥æÁ½èóé̳éθéѼöÊ­òÁ¼÷ЪøÒ®ÇÇÇÀÃÑÂËÖÄÎÙËÌÓÊÒÚÝÀÃÒÍÑÕÕÕÓÖÚÖÚÞß×ÑØ×ØÜÜÜÇÓáÛÝáÞàâÚáèåÅÅäÏÐç×ÈåÛ×óÉÈ÷ÒÊôÛÜéÞàåàÛùæØãããåæèåèëèçèëëëîîðôíîðïðÿòçóóóýööþþþÿÿõØÁƒýÒ±2‡ÏÞ6Véð=„ˆ°¢ÁŠÖ®|gm^Å/~üG²¤É“(K–Kɲ%Ë•.cº„)³&Jš6sâÌYs'O™> ¤G”¶¢HéÚŠhª žm˜ºA[Ò¤G¯Ú¡#ž<=tØ]‹4ëØ~BOM{“-P·oá¶\+÷ݺwm,j6é§ ÛˆjÛPaÃ'm¦: :GÖèØhtèà‰¬qã¾IÑÂÍë–3[ÏŸë¾tZÓ-÷Å\ôi§nâåd¯ýöÜwïý÷à‡/þøä—oþù觯þúìŸ8šìDÃy‘BFGot(Ýãæ®ÿ»ÿ¯  k2YYfí\1|1Œu e+]ùJXüÄ?ÙÅÎqi³`ð.˜ÒQép©ÛJ0²Ò^˜Ð„ê Š<ÀF”`Ž‚­Óàÿ¢ÀÒî†ÝòàÀ’;zܹ Ê0ÿxá uÄ=ä!Q~¸ºXAw¤!û7E*ÍvTZ!ŠâÂ[Å„Eñ/RHC„Zœäü†A6®QxPl›CA¯€%ˆô@¢ÇX”ÒÁ=Ü_ ÛÈAž°«]p”á sˆE*Ù¯7n°C.È3Ä"‘¤Güæ—¦ rƒ‹Œc? J•Í1D¼¡ƒÚ@‡5àAÅ‚€`Âb¸ÐÑ@Æ8 xŒò…4dä˜3L”¼~‘¹ÃèÐ 8s–ÐhC¦™gØ )%—°Ó›býèN :TXµƒ ˆ“CR7¬ršWXƒdN±Qt›¼ÔiI¤C!¬†]O1U;¹¬åâeÒl3¦!Ï+ÿ@A.Dƒa>»»’e ø¸ŠN{ØÔÒǸÇu 9—1g# nØ]5ðš9„Méko‡‚ß––EÄemx“Ìâ²e¹¬£‡4´°…;£ T4À. "«1,HwIB”á"×´ã-l"ëôþHÓ˜¤ é …6„¡ TeDœð4 ¿ÛýÇoûÜý&é¿þ1xE7ÙÉ­þ37Sb`à$Ì…“Ø@)âÖ51^¢Q‰ hFb /ì@ ä&g4‘žæÅ1†\t…ØÕׯv‰µ½íŠ5a@‡å¦ RXnѼ)6`Ìà¦ôõ± ‡es-›ê@ÆiIFSO»$ÕŽ5”>póÊ:¤Ͱ†k6=ü+,Zá 1Z²Ò€Àt%6USÃ1nå·©yjU÷»ÿ/¸xI¼¥ûY^'.Ó6,Ls B&J;ÄHÄvã? å·±6ßøÍÑö…Q²)gÒ{Ú³v¶UÎ烗•àQi•C„£D„ ÊŒL=¹¨J5ôà = ‡ÑŒ\zÍ„¾ˆ…ÓéQä#êÙ“z·©þr¾¿ÚêW§uÌ dN£8à r b1y8=D#`q{cFŽf¥_¥Î&guʳøÍëŸü· JŽa#M=¡/zèÂhŒºjøEyÚ¡Ž]ñ*ªxÎVÎí–»|êœïüIˆW½â'k˜6̰2èB8ðA È€ 4¬¡dÀÁ v°\,ï˜ÀÄÿ)¨w½í£}èO¿ú×Ïþö»ÿýß«5Š*¦öàô†,gÉ‹_¸! @Ç}?oH Ta ’j«†r¼x?z èws£÷#iÕJo‹÷V; jð=Ð* +)·GD×£0 {U Âwå wkžU|SÆò'%#ç Üר£:à) óäZ°ø‡K‘]Oq_´"ƒ4è{6¸w:ø€WtV¥sD@;0 òPD8QHØrP‚Hf8z° ¸1Rx xrQ6kX¸… ‡pyØ…[§8: Må rW)`Ó¤+ð<ÿ€Î A‘Á]€°!‰ sÃà ‹G¹Ç_å°{}‡ƒ£HŠȇ}¨u‚vMDÁLÅ)Ðí0W$¸) Òp8wÐì`_ÀTÑ G1r'”;Ÿˆ=ç'\9hŠÀ‡Š{¨‡Ïˆ«XQ\äl ìÅJYPW<À* ìàB]AÓ@cÐ p KWKŸ–n‘jPg¿µŒÐXŠõxŠÌØŒˆWq:\ÓDCF€[ w em°[ÐÓ `P ¦p‡gFaj–gSïHåp~h¡_ôè‡7xú(’#©Š?" Ô4Ocç…åJØÂ °¹_ÿÐP0sPze‘EFh\3H )Tààa½g¿§…ùè”û¸Šò°7·Y°E³rí x`` ÒÀ tPÛ! l_çTÙT íøqš±1à–ÔUü¤´ )·s»ƒÑI·µ¦¨d7±³R ½Ðr@}°ÓD2†\ÀSAqU  5K   ô€fEѶd”SÐ9²Ik·Ñعž+zøšzÛB> ,û¶? ƒË^ÁàN=¢ð é i°0l  ð° €f=$K›«Q¢»´É«¼t «YXk.–b9µ—qIÅM¥|0c´°M€tEÿ1 d }`e0BP£Ð à[U mû¶^Õ¼»¼u{¨ô[¿÷ú´&{9ã˜Çúe;Jð2vi‰06o'à 3P°Ý€ PÎdBB[ª ë¼Òj¢óŠHÎj”]ª¯Ú#»€š½À}2"à4@䂬‹À 0 à HÀDàL{±³¤±ñ¹h¿!ËÄú‹·]"§@ à€m+ZL‘° @±`3  _ ð| <‡By:ZÛ´ø º¡›¿G‹´¤û´\§`F@Zì }@>ð _ £ÿà!Ü¡ ©à  `£p¼àЖ¬$|='פ®z¢w쌣{·.A|Æ—ÊÇs @Ø€ ° F€ °pµ °- ð pŃ`<ÐD°ƃgæ}¯ŒÅuç§=Ñ Ô\ÍÖ|ÍØŒÍ=X Úp @ë0&P†,ðR°Ap.@"¼ô@3ˆÑ(µ¤ mäÅö#q Ä Kˆ `ô @€å¡øÝߌùÐ ¥Àèy~æÉ"JF¹îÏnnél>™NäsNTòé¡Nv¾¤>à 8 B@¬~=¯. enæv‘ŒñÉæÌÊë¿ìÜÁáÞ+! qîè>—鎃µýðÍ@ A Í` Ç ª  ÅP Ùð ÀuÝ`ý€#§ ëŽus™=»‡ëʸëfíÞì@.ñËú˜×¤u–Ÿÿ0ÍðñÍ0ÿǰïÅ€ ñ dƒ%Æ Øpíe~ãûÿőɸ_8á‰xèÄ•îëêé?îBqr!úžè¡œÕ°{Xú°‰qç³ÞèØ@Åóç7XÇYë¡Øã8!J:nÙšþà`?ö?/ì~šÞDîaÛî]ñÑ‘Çiœððàð 1ß‘Ýå‰ ß]ç„EôÞëL ñnÞœ-ö§º™ô)zu,Q¾=Ø÷0÷àðòI‰Rºä ¥µŽ[g,¡—9/ø:¿óƒßÏþÜ&}¿ø)AÒ|õ¯¥ Í“ÿPùÿð /?Xžï¤¡X¥ßuóž¼ö;®{ÊmÞó<Ïüv,—œÉ¡´Ï™Ì9Z+AóÙsû¹¯ûÅÿCó{™ƒºëÞ('áΟúªø†_øSGé?!ô®òD™õCÁ™Ýµ€Qªjnß‘”¿ýsذ+G¾~ÿöc¨Pa9‡øè%ü×ï CŒÿð•+‡¯¢ÁŒ3Ž$Y2¤I”)ŠTÙò¤K˜cÎd9Ód͇àt‚£³ßÆž Ò+·Sg¹„ýÈåXtgÁûaûÀªÕÿÀ <ÚñfÄ‹Ãb´H”àPqÚüʶåZ·#áÆUK7åܸ8é›Õ-\‰ø6ê4Ë·_ÑŽƒ "^<”(§ªW±jåz6h]‡ŽAŽ4ˆ0êD¹vÛŠ&‰×®iº¨S“Ƽ’åÞË.á‚TÿÌЩӴ{Ïä[PcQª’¯f=Ûô —`Ç’»94ëäÐWJoM]u^ë!ÁeæÉv6=±åÈ1$Z°hî§¼‰‚_¸+€¬jûuE[]¥Å´ÿÖ zÝ;uû óϦ ÌN(Ãêáè/’SÌ ŽÀÇ ‰Œ:j±üæ«j€rÀløDÝ +«§õ;觇B@™`ü'E˜h”MÆT˨Øn$i(§ÒS¨ÄÅ,$¨' ³âÄøþ±„N*£ð£üü ! §,k:mô@/U SL1’4KºR°¦ ’ð6Ï,„j!‘øàã-ÙJʧ㥲\”1þœ¥ÿC•1Ñ’m´Léüëì'Ç+(¡ ËMÃAdrz°iª+B_L‰?J=úìLßbGGŸ{uQHIc±ÇŒðËŒ£„Êã¨8ý8J (²Oþ¡ª"Îl6À\›O³¦LµKZ±Í6µ6»õö[p»e*ÜQÛ|êW#Ñ] 8°‰R!w‹\—TrÅ5—  Ï­w_~ûõ÷_€x`‚ŽN´ÝÄ5³‰(uÑ"¯ÊëíR:wÂÆ’@FÄf"Ý걈¯ƒ\ÑÏÀXdO,pò‹ÖmkÐå¸$J©åH ”¶6Ó‚¸O3¨ØFe ÍS²4B†]R½“_nyem£f-Vÿ±fÖU¥+‡4ªiÄ„]ȶŽöh\#u¢Hµ£[U(ë…@RfÒ¨†6n–¡f-aþfš0±óÚæéDÇ„%’0݂쓨…—fÈO5A£YeºŸvúZÊ#‡ÎÙš[Ú+­ Ù´m7-h§{œš(ß|GÏÜ¡²®T{$™g¼zòÊi·»öÓ¼•­Í×9<ÐO&j0uOÇ_Ógtn$Kl:ÚƒÞ¾îÜ¥¦þ?ëaڛ͔ý&o=°~’—¯Â™2{ÆØÅ+ÂÁž‡Þ0ܧ–\þùWcë'äJ‹‹È¾â„°)Ïî(K)NÙò¼i<̓û˜·¶a§~¢‘ÛŸâ'A½9r®bËÿ™£Á°™']f!‡°®d@¨¸é#ìAUgØä@Y­p(öËý.HÁëÙ¬…D³`\NTˆLJ7¾:âvT! iêwéÓÕ¤w¡Œlu_º! sˆAjM³ë¡[˜ˆ¸°XJE YEæÄòˆ!,ù¢G€¸~¼`zÂ&7EO†ÿ3Ò/2¸p°o#ñ Ãèä(²N3V´%Mpÿ¹G<¸*+é<ä°Ñ—èjSò„½JìH¿1/íyR24¥øD)ì©6‹F =AÎz<ÒQB…Rf¼È„ŒÒÎ_=ÏŽŒ”(öŠjÔ–R3ŸæD‹Ãº(Ä’%!AÉÔ™‘0>í ¯æ¶Ò£ZS¥÷$kC±–³1v’¨këVR|9$ÃÉ)­Ò(C˜/îô¢˜d©Yõ¨Ô¤2­‰§} £Ñ`†ES-:Î2É2(ÿ7â9[wîè×¾‚õ¯˜,guˆÕÑüÆ(%, hǵ@ Kˆä¼p2Ô¡®5³eõl.mÙÇ…æ¤)¤-­[çȈ8ö™#…XHÀH~•¶šmgk‹Ôͺ”§´`× Ù7vic4Ña˜Â,×—º°­etËÜåžzß[XMâ:´2Îh^Z‘¸Rf:ݬö:rcUy›Ë×ÿŠ5¬Þ¤®‡Bòt ‘bŒen³®íB1‚ûJ÷Æ àçª7¢óÜf4ÛI69}¦¤þÕ¥öÒ‘¸Â0$Ó¤pR~VzÂ8Ƶíí$†ßÒ,Ñ¡v‚ÄueT1FLôD›ÿЇ†.“›œ^ ƒµ´Hü˜Ùöfœje|käÙ+Œ6 «ˆÂŸŒ©h^ ‹©`kf³·ÎeÀt‘uqZ÷azŒÎmæsŸýügƒ)7ÍHÝO"Ç—Tù)…#b…õ±ëyIÅÖ¦Ö;YÀfŽ#§a ×õ¨‹”iKŒwÓÃXþ/¨VKàXL¤ÐŒ…“Î4Ÿlë‡zÚÃyoÙX.n3‹eL0ßIØlŠ’ù¼©˜ó¶¥(C¹Ö¸>³¦gü™!:e<½-ûŽâÓí¤oo ~´*G3É"—Ämήè’gŒæigxÓð&ôÉÌV¢c´3ÏúÕ)Ò;ýüøÒÿ핦ðÒ-²ýôÊàf|kµ©ýnzçÚ¡TtνßÌ1D§çùm߈4žEæVEŽd5JÔÃ9n†À—÷­[.ñˆoºd\¥ªW»}–ï¤m„ôi¹Ìm3½8k!Ëa2Âbƒ&î²è}ù†›q¾5èÄ4’΄vè0kjP¬]LÊRæ¯]f Tß^˜×K¯i–‚Žö ]oi·„Àðäò¸¬.êªØ0…«tr~òªR+\Znl{íÓ§å^¡þô’.½"_QÆ“À‰Ü&H%ÒH³|ê‘®|›Ž~ «“íÔ/ªíÅj¢Ð`JÞÃfº}Þ1o¼®'úœ°J'áùÿÛŠö¼£˜ò¾wŠC>ÑÇE^<©îËK9RñF¤EŠß5ÙÛ~}ì?žéäiMZ§Þ“gäì¿ÏƒÝâ'S£ÇO;ú¦¨©JýVƒß-|ÞôÁ×» Ú˜žýõwÙ3 É‹¢•¨¼!;“¬*Œò£û¼Ï“/ÞH"ª°eƒ,`b›©;Æ /Yº*öª=Üz»ü?̾¡C‹šppÓ¨‹hž^¸€Ë1^;• œ¬‘™ ´ë<|ñ  H‚¦O A§³6›! ä³#)ês¥Ø` ùs7˜CÂÿ5Œ;%l¨-,¹Dë©úZ6…ø6Ĩ½‘s˜ëŠ0’ •*™-Iº²ã?ï<ì¿%ì4Æ[<z½-\š‡H摬Ý #g*-úò:«?!¤ŒÃ@Ô:;ºØÛcDÈc¹ís‰Ú мÖÛ”À7’1d¿K{0ðY›Â 9ü@7O¢ [LÅÐZE=¤½¡[#;”¯ÕR1¼9¨†!™ù>@Ê<š%B<-¡’ŽhTº7DÆcdÃd$*TŽ ¡¿Æ±š|µÀI,UÙ”ÛH·JËÎ0DWüÅÆa$GGD<}9edżà½ÃÀ+²ØI>_ÄAGJ ÚÇõ‹¼Á18ÿ¢Fæ:Ä‹ iÄdžWHrüHº˜«<Ü×S‘ÅÑFþ•BöÊ™÷3Ü`nzI)2= é7Ü5uËIUIŸ¤ rxˆ¢øÎÙ»9RÈË?gRÞC1Sâœxª²ŒËC’,¸+±ÃÏèÈZ È l.aÇEÌÊ¿(JáCJßÁ¸§T“¦Ô¢ãpˆªR $ºÊ2K^û'sÒ39DJ±ÄE²ôǰ,IÃ8ÉÖó¸idÉÌã?Àœ¡¿;£’ W¢ÉgÑKSâ1hlIÈ‹,ÇÿšÃ’#/>ºÈÂL ƒŒAÂx&?”.ÙY;d »Ï2öàDÃ3®3ë°½,§Z<9ÿ“K ´™&„¨H<ÌV䌭AÎý¹_BÍ´QHÇá¢~z¥ZÌKùb LQÇ][¹ÃH¦’ÂD¿S·ÏKCAÿR°4©—CIìÒé(2 Ò@ÏTôs*1®‹AÁhÍO#Döé-Í<1ÑI¦Š-¹1MÍ!¾ÕÃH·€EJ”©¶là¤ÏvÇ"Ý𮤠³Ñh#êEÁ<ºò»—JOX´‚¡—¥ÃÈÒÀà»7Q'õÀRR·*ÅNGÉ}ŠGf”Å\RÑ4ÌÔ\Õ4š0: 4ê'ù‚м¦‘Ðæ›®›`‰£d;V¥È¥C¸ÎAÕ$ÈTMBdÕEZÖ¿kÖÌ{–o}J2Â@Ë€Ó« ÓVg’Vµì¼ƒcOc×pÖ˜H4^ùKf*"ú±”ÍÃ(¨Z˜¹R×Ó~ZIÿ_]X`åa]ÓcÝXŽUÕ…€¬ØØÂ„üSމ@*,Ñ™+¶ ­äÔóÁÖÙW@ñÍÂ+³2õ×líXm;ÅèT;¿³(@„]Á$Bµº"ŠžaYð ¾;4 ȹÍGÙÒ&šõEB•ÍbýWÕÙ1‰ÑÕ~zÓcÊUˆpÀgq¢r¦ûÀGK§fE"&ýR€ÅIYzÚžÌÚDÜY¸#žxYl6·±Vž@¿#IÖ×@Ú1¤’Cr -+@8ÅÉÛ3SûÜV˜íÚqµÜË%ÈÁ(Ê*Ã]YVñ(@õ†TŠÃe#Q<#2ƒˆKtF¶ƒÉ­¥PI¬\™ÍYœµ]U­²ÌWÛÿ¾DÏ;Ûiä•TAÆuÆ¡Ë$jÝ]u©ÐŒÝÉL&Õ[®­]Ü%ÁžõÛÚ4”Õ4‘YBª‰ËNú+.D™ü‹ÚÈÕM IGåÍÛ_ê­Þ¹ýØø:+Ä´¨pH”ãH¢¡”Äj%š›}TÄTb\Oñ¥5r¥_èm`ù…`W¬ÃçéUWÜÉ÷ÕïQЂûÀùý` aÌÍ[Èu?$!Ì—ìžòÛ×î>K‚×ú%aëuàíW—ÀWi¢Ü¾©võ¢Ý~àá¾Þ">Í_Þ,e=ËàöMPK"D"Ža#>â>bøÅP•ÍHɼáS%FÈ5‘ZZ¹+âÿNc4.b3þJ¼Ô³Z "èv¶h5Nfk¦g.¦#nVèP^fŒfguiõ…bÖÖä„fé–N剦è–Û—†é…¶á’i‰^g’FcØ iÖé^Žé›þc¢®é‡û鈾è¥îé¡>ê¦Þiž–dšꊶjƒ–é¬.j‘ê>i¬ÞjÚÍi®îê²¾j­ÎhPm^NFj†vë·k²>k„–ë¹^:£žê§öj½†ê±vê½¶k©N뻎êÀ&ìÁ¦ëºfkœl¿Æk³Vl¦†ëÆîk¾¾lÌ–ìÂ6ìÇfìÊÎlÊŽìÐêÎölÑæl¿fP—ìÃmÒ¶lÄNì¿–mÖníÚ†íØ.m¶iÿоmÜvíÅFíÞîá¾ç¼.îÙ¶mâÎíßöíâVmÞFnÓ~íæ^nànèÊêNîÒ6îÓæîÔÖeÇÞnȦnéönófîëžlçVo÷ÖìÍ.o´†oòžîù^ïø¶ïû¶îö¦ïóÎní~oüÎoôÞoþÖo±îï§íopùnð^påŽðÿïñpÏð‡pOpïpöþð Çn Ÿp ÷ïîð¸vînqqqÿ3Wñ?q 7q¿p ßqÇñ¯ï÷p ñ!×ñ#çqòÝi#ÿèÕ.ò/q$·ñÏîq)pOòÏrGr.¯ðnÞr+?nÿ,×r"/óô^r1ó÷ò/?ó8ò0×m½r:‡òèfó6r8Wó5Gsor?Ÿs&§òðvs¯óCGô>r@ßrFô=òóžt t%·t9ÇôNtWôMÏtCïtOçt>ÇrPó?wtJoëçvõTŸuR?uT¿õZ·õR§õ'—u\¯õUó`õ)ub×ô.GöW¿ñV7öd×u8‡öavhWö÷õ\×óçõbwòn/ô]ovowp¯öpÏvpŸögW÷*Çv g÷)²éSË4 5À-Éç½rØðè÷Oز"Áè§°\Kÿè;‘䀓+€{ÿàŸÂ‡~߸Y`#½—7 pZü¦Å þ pÑRË€OFÆW=‡[æÓx`“®9M®¼X€[Ъ{öü´ezûÜu7ëÂûÀi>­…aÛ¶ Ñ@çÚzÄåÜY1øé´:wಖ×CÄG€X ­ûîçô1[ns”uÓyà¥×?ñYG' 'ùq´Ÿe+ò^ƒØ´õÏ€àõcÿÅ¡ƒ2xÔ¼äR9Óýóx×…¦%Z]Wœ€MQæáV#G'Ñ׊ÍwMÐ…Ëñw‘”C€%| Èäbúÿ¤Z’Þ=EÉ _#Šni%ð> W˜"Å9§‡àÐX(WDîöSut‘g¾WND ¢Ž´w’Bn-9PSòÑGx¾¹f§A þö]p'AÊ©j˜*ºigE÷iur0ç@¸Š©À-–ãFb=™««šN¬fÝ^ÀUb¶§Õ}ÉíšüȉIAI*ã…9ä!·‚GŸM-ò¡P‹CNf¾”ÞI ÷"墺ا”ÝÊ.T‹±¥Ú-åk®¼µ–U@P-zØâœk®H C,”𩆑ðP? ð¹¬%2ÿ)ñ²&ˉjÆ.Vƒ|ØÌH1P¨uëF”%«hÎ,I#ó2ûEó@ýÀå³Î<Ë…ÏÍ|T†´¦p -W U—SõFXËÔõÍ’š}6Úi«½6Ûm»ý6ÜqË=7ÝuÛ}7Þyë½7ß}ûý7à >8á…~8â‰+¾8ã;þ8ä‘K®7Ì…Z89æ™k®wCÁðáæ¡‹>ºÚÃöa¹øåÚž%ø T€m£^-h(™:H•—S0A'mø8#ãJ:ñÅÇÝPí^µu€„*€CÌ‹§QCä •õÎGˆ%ÌhFPÏI„Ñ+i<ûíŸÝ‚з•XueÿÇ•x·>8áО4B?D``@‡ž£‘Á.Pî{ ÁcºYÄTÈwâ=BE¯ƒ‚ÊLC"—ÏõƒL B½R†B|! g2AfÇ.ãQHXF? NG)6ø§† ‰TFŠC=ˆ§$AŸFb(Å)Ò$ŠÌÈxÖÔ™¸LˆÔ󴃽èAï(X„H©Ï${гD„‚EÅ9>|P’%ê•2)YmY";Ù@ö¸Æ,&CÎ.sÇ£™¬2_[#)I®ef’–¼¤Ü,AŽa²“žü$(C)ÊQ’²”¦<%*S©ÊU²²•®|%,ÿc)ËYÒ²–¶¼%.s©Ë]ò²—¾ü%0ƒ)Ìa³˜Æ<&2“©Ìe2³™Î|&4£)Íiº­Ö¼&6³©Ímr³›Þü&8Ã)Îq’³œæ<':Ó©Îu²³ÙD<ã)ÏyÒ³žö¼'>ó©Ï}ò³Ÿþü'@ûIëHÍn5¨ÜªÐ…2´¡}(Dé9PË”nµhB#ªÑr´£µçDg¦·‹Î¤iû(JSªÒ•æ3¤KéÞLŠ6–Ò´¦6Õ¨Kå"Ó·í”§½)Pƒ*T|æ´,=mÛQ‘úÓ¡2µ©7-êR’º6©Nu©N½*V= ÕŸP5m]õªU³*Ö±2t«3ùêÙКÿÖ°’µ­nÕ§Ye¢VIÍ•®l}+^ó Ï¸Š¤®5òë_ïª×Á’•¯!,Ac*XÂ2öª†b)ªØ¸5¶²…MlÞ"+YÊZ¶³ŽÅ,Þ4+RÎz¶´B}¬DD«ÓÉÂÍ´®*j#¢Z£²öm¯½-Mc ‘ÙFµ¶‰ã-W}[7à7³Â=qåzÜ’.WnÉUnܬ ÝéR·ºÖ½.v³«Ýír·»Þý.xÃ+Þñ’·¼æ=/zÓK]~¨·½î}/|ã+ßùÒ·¾èe¯}ó«ßýò·¿þý/wñ à¸À>°Œà3¸Á~ðv á S¸Â®¯„/¬á s¸ÃÙͰ‡C,âÿ7Ä$>1ŠSl_«¸Å.~ñxY ãÓ¸ÆÒ•±s¬cãxÇ>þ±…{ ä!ÁB.2’“Ìß#+¹ÉN†/“Ÿ,å)“7ÊT¾2–µËµ=÷°Í[—½l\˜2.Ì©ý2ÜÌ|æ1³ùm9x3œã,ç9Ó¹Îv¾3žó¬ç=ó¹Ï~þ3¹Læ6» І>4¢­èE+ZЄFhÜ-éISºÒ–4X=\¹]ºÓžþ4¨ëìèТùl¡>5ªSÝèL“zÐnV5¬c-kL£MÍ»-µÙf­ë]§zÔw³õ­#Íëa»Ò¾†´¦×Vìe3ÑÇÞ´« ÝìiS;ÏÏÆh´ÛVíms;LÎ×fn¶ÙÖíqWûÛÎŵ¤È­nf›Ìè&Òºã=ìv§ùÝ5’7¾gMoŸ†[Ùùþw¯Yýk{ƒàõ¾«Ipë¼áN¸Rû­¶€!ù,È„777‹‹‹‘‘‘™™™£££«ª«µ´µ»»»ªºÊ³¿ÍÂÂÂÄÉÏÌÌÌÇËÐÌÎÐÅÒßÓÓÓÓ×ÜÛÚÛÒÚãÞâçâãããåèëëëôóôþþþ× FAXv%JM“ja†YW%1jê<º\ fYµAK £Qª&¦N±h2-B£‰ #T«&ÙºH'sÌj4€sã;±¼˜˜ÈGëêJ[|}^OUvQ„… u\WpŒg+“\˜”•]-‘Šœ^‘ƒq}‘ šzp ¬yf} +ŽGo²P*š‚ ¿3E¥ ¸¾É«+W˜ÃnQ +vN Ñ Ev3,E†  1U¥1Zô@â/!ù,{*»}‡&&&666IIIVVVhhhwwwMx¨U}«iwz{ˆzw—i¥z~ Y‚®_…°~ƒŒ{ƒ’e„¬c‰³mµy‡¨rޱp‘¶u”¸{•´y–¹|˜·}š¼Šu~š~l•yv¯{[¹{X©lw½ch»ju·swÜ|6ìz/êy8ò}'ð|2Ó^bÏc^Ê|OÉzVØjVÙwGØx[ÆdiÄksÉtyØhhÜnqßsjÚxxäWVå^VègIæjWìyHévWåihæteäxw…z…‡{˜“m†•t‹™”£l€©xŠ •·|‰Æw€y˜…x¾‚I¶ƒW«‡g®‡r©{¶‹d±q¸“s݃.Õ„:ô„ê…&å‡6ó‰)ñˆ5ò‘:ɆGÇŠTÈ[ÓŠGÛ‘MÕ”XÍgÅyÛ€{×—hÚ’{ߣjÚ§wì‡Gë†Wç–Jè™Uñ–GñUé‡jæxêšhê™yí \ð [ç¢gî«sî±|ð¤cð¦ið©lð¬p‡‡‡‚ˆ„˜‡žœ’Œ•••Š‹§ˆ—©‚šº—ˆ¡ž˜§›±‡ ½œ¨¸¨€€©‡˜£’„¡œ™·€Œº…‘¸œ„©– ´¬¢ Ÿ½£Ž¹§˜§§§§¨¶¤°¾¸« ´­»¾²§¶¶¶Š£À”ªÄ™®Æ±Ç ­Ã¥µÆ¢µÊ¦¸Ë¬¶Â­¼Î´¼Ç¸ÂÍ´ÂлÇÔ¾ÉÕ¼ÌÜÁ€ŠÊŒ”Å’šØ†ˆØ–—Ę¢Æ­—β—جƒÕ¬×°ŠÒ·ÎªªÌº©Ë¹¶Õ¢¤Þººäƒ‚敊嚚ꩉå¤í¶†ì¼”奥麣嶶ð¢¢òµ´Ä¿ÅÉľÝÀ¦ëÁøÂ›êÅ¥æÁ½èóé̳éθéѼõ˯ñÀ¿÷ЪøÒ®ÇÇÇÂËÖÄÎÙÊÌÔËÒÚÝÀÃÐÏÐÕÕÕÒÖÛÖÙÝß×ÑØ×ØÜÜÜÄÒàÚÝáÞàâÚáèåÅÅäÏÐç×ÈæÛ×ôÆÅöÛÂñÕÕàßàåàÛôèÝääääæèåèíëëëïïðúèèóóóýóóþþþÿÿõØïÁƒýؽJ§/Ÿ·Wìô=„ˆ°¢ÁŠÚ¶”§Í^Å/‚üG²¤É“(I¢Kɲ%Ë•.cº„)Sཛ÷¸áÜyÏÔV7YmµhƒÑ ÝxòÔ©4Ïk÷êõ¹óN©ÕL¯ö«Ù’&ׯ^¿Ö ë² Î¬è”möÙh§­öÚl·íöÛp¿Í²ïTóq$îu‡hwÄÿ ¡ÐL:ͦ9Køò¶ðx¬Ì0ȸ³“SPIE—€S*øy„÷ØÈ>;e Sð#ºèíÜTOÁ72åKËzyy™:UÒ÷èqG/7!Ì0í(#:í³ßd;ÐöIºðà6—•°„§ï“ê»Ü$:NÃSú=œãy’•K›òë'Í$äQM…û=¿çn=N‡ß‘í·ŽrÓß§ûìz‹G½§;ï¾ üîQ·»‡f«ýV¶¼…æq€Ãܰk(C@‚蔡ºØ‚4$Ç—7€a•¹ #’‰Œadú& ï(:†/¨KSˆ‘¦úMÞÁIŒ§ðð%È{‚.Xcdz€Ç;ò †G:òè’y²­›£Ð´|`ižyº?/oèÂI%È`úÀ*èÂ;T•{\ãf(T!æ *7Á÷P8Ù&o–47¬?Ž6ÉÿÔõâ9âÕ•}{ðBô`Œ6fð÷®aŒ1`"ê™gs]R£/‰¶è°n[Q¨•ZpWl^4w)KÐ x T æ}$d†}û5‡EdV(sñHdå;÷±ƒ=jJÑO× „~ATÅÇ} 5TK3Poÿ¶x‹³@ídÊPBR¨‰ýð}\Ø'ôøtW,{°Î <4äÆðI\Æ Y0†0[` Àäw@CûǺÓa VBɈ–’б_$™*OÉzˆ÷pÅLY  @„°MÂô€W‰’hY_;Æ–÷ˆ{HYŠX¸€½W"ý„tRÐà^ðKê‡$P6/€`À5Li"@)”D9Pšø–º7sX¥]¨¸ˆ×ˆf(¡ÔF^°ŠY@J]°$@3`ð`Ay ~q0‚!BÃC1$é$y€Ùh 9~:t†Oõ`UáP5ÿt½©X _° ‡…q r |q°¾ÀCû–eÌ„Gðˆ¯94ÍXª„BÈ…$õÀ$O \0P@VTÐ  PNÖlðCà—°„@@3ÖJ°Š$Šy§¸OigÌ (Ê ?P÷NPCw@V[ð`‡@\€` ž‡0 ­p–…z=Žtylwâ'ƒ÷¢©#‚¦±a=Å £'e a]S ¢€ÃÀN Vð" 0 –E;¤¤"êŸNº{±Ù/J™*¤ tÐIðe… N_fEg €hÿ@DP¦  «¤ ¢QG§ ˆÚ™LÜÙ|ž‘–÷ÐX= Mðdul@Œ€0F 4P°àÐ p0$:÷):ù9¢Çø˜œ ¥QA›Ô¸¿°ÀÂn3"ð5pŸríà ÀE  Ðá° `0ôœÐ™AÓ—F¶©™Ú©%¢ ‡ÀpKð¡3p¯5@ °5@ á’%¤0-• €’«š0eϵA*¸Ké˜%Ú¤¦(›%²°‰Fp¯ÃFAp MÀ¯³` @õÁÝÀ ¡@ À` =ˆ¹–!ÿÙš|¬‹Ȧl>;5ªp‡À ¼0 3Ü °Kn à3p5€R£ `Ž 59PYâF´9@ é¶nêoh›¶j7îŠÝp£pî@&€‰0-U°Cp/píѦ÷ð-sq%ä k=ªùmy…U%¬íZs[õ(ÎÙ8ò"´à ª°50h÷:Û:'ð€® +Ï`V0˜±аÁ0_ß 6`$ZˆS8û¸;¹‘VX:: ÍeMUÙw{TÐc“j@œ©A"’=ÙÎ46“M§EPœˆ Ñ Ø0óÀ ¢­ ñÀ ípZ΄!ƒmjdcSgž˜ÒîÈ©!Ë}Emý°[qj¾Á-uûþñÀ¸ü ð0]¨]Pç@ØÛé6y6bdÁW1¡Èk ÉÜÿÌØí–9deÃ˰;Õ3À nëÖ×ìLiÑ]dvè²/ZÈØÝ ¹¼Ëá­ÖQu¶Ëèç­A¢e¶­íÓðÝÈٷسU•½Í߬ÁÉ¡Æ|Ò¬Ñ}Ú¼_÷`¶¥•ü üpØýÜÞƒm…Ó}Š<Ô…Ö)Q]Ž\ÐÞÛ\ÛA<)ñÜe… nPm×á§6€gsâƒh¨±¾g½˜ô¸}Ó…‡.ão÷Ñ×ìt›ør/y­]€ÑÍ%ÎÏÕ}ÝBž}[Î ªÁ ãp‘7Ò-Ëfæ¼ßlMã¾Úå=¢Se{(îÏG¹ngÖB®ÍVaHæÿÍ6®Øeÿ¬â–½}îøä{u.Pã@åžÈŒûÑñÑmØ^^… žÖ>Žå×ü ÿ0@اVŠZ¸€¨åÍPçIé#ãpS“>¢UPèpd]6‡ÍéŽânZR>¤¦>fèÖ)nÙã èè»7çý€‘®jÜçV¸ãŒËçžàeCC^ìÆ^èÜðrSXéu¸è¼þᯋ¬>MéèŽÃ~{åÓ]žÍKRf;€â>îþ¬ŒpžãœHï|¾!Ëk-’LúÜKÍNxnjÕÚWˆçþïoæ.ÞëD]n^Ëè®ð•WÄFΑGiÖüŒâf-èhCìÿ0óÇÿžì¨Ñ{Õ‘¼Nd“—ðâ¼ÖåAPVNs­¾h5ä“·…]ÒÖýÑÜ€ñ2OîÛ¼ÍÎNÝô/ó1ì]¯õCnâÞõn6áœNЊŽj÷òʰÝÏ;Þ°=æâ>ãn˾݋ޑêÎà-—D|ÿ]ÔëtéfCU¯œÍh{[ŽìÅ>èø™ð @ŸPë!KÝÍšˆÙÞŸqo_"-é„Ýý.ù™þ‰ƒNê¦þ ™0îÿ f^_ú ¦Ýµ¼á¹½ø?Æ/òèÚ)n“Þ};ñíÝ.¤þ„@¥™ÿ€ìfÎíAÿ4Rà­?ã±n! àO“øÛ^d¸nÄڌ듇Íô@æ ïû»?9Áös¾”fú¢»÷ÏàÁƒúîõû‡®ß=}%N¤H]EŒ/fäX±Ÿ>‡)ÞñŸ¾qOÞÛøàA– Ç¡ÇíÓ'nã2ýà_Nš)ÞSI±:‚D_z$ ’(C‘QJ•¸‘jT«WQ¢XÒàÃqý²,ªðãLtÜÔ"ÅiÐ&·  ¹.4¨¢F‚2‹%šêUŽY© –úQßߪ€aŽcìWàY¥H¹~DªqP´Ü2"”IíeƒI%]ðhR²NhRqèׄEÚmÿjñuݦ´!Î%ˆ¹qïqç* ¼ggÎË»‰þkðéØÖK#KúöTŲ9Žût¢ö«ÜÇ^l 6¥dˆ,3fyY!R’*Í~½[^¡ëŒYíßÝ_+]æøC<ªæ Ð!þNû§´ ‚ªŸ™Dj¥Ã¬2ð¡ˆÆ[N$«0„i¯«Ì° Ô躄tÉCæ"Œ¬½¼Z,ˆ(áV’ë èì‚ $¤‘>×6ÌÎ?ªÄó.1\h¼!¢l®Æ.ã®!tð!i&»`ñ´Kpº»ï61*“"Ýð;±ÈÇâ‘4”$ ©(Ù 0¢+#¾$²+H•NSÓ¶-$“ÈÿðÚ$4ª4›TÊIìNzŒN´àëN©:£$È/Üà¼Ó9ö¾\ÔÍACD4É {®41…$¬)ø"£ ½ €ëm9#éZîM}\U$;sHFU„/E¨óðÑ+ób‰«†@£Õ¬ñ¤4$ Ø_Må6ÕbL ·d%b±Ù¼F‹±Öh{£VÅ»PŠT´„÷[-…Å·ÛíV…ó#W'*ïYQ³ÍÓV²LóW®”®„ˆ½'V_b÷ø$É õò/²í‘9EÛË49NW’•$Þ.cl1‰÷Í×[‹ ÌØ¤Ö¶mPÓ„k“àÜâ¤î=L ¤s’ ë^|/FúÛ‰sõµ[™ަÿ%½Rȗ雬Y¬4Â¥¹Uš_±¥ªÖÌ+šj s̲.Ÿ¿¢3$ëTéžs¤´¹ìŠ“6ÞR_¦ ¾Ái2ÉCZ—"Í/±|»¨nÉÀ–´Ô±±:•o‘œF[£‘“#‹áÈ ºï´ÈK ª¯’À:³òŒìbõŽ.ntsz;ÿ­»Œ_j å™’;JåÜA¬è¢šQ,Í+Šcfó00kÿÍ7÷?6ÏçgZå¨Þ"/¯óÂícw9R¿aš;Tíoo7¡Ôo̲Ë>*o{9b|Ì×\Õr—ao>Úô0Æ\3àá*£:‘ÜUŠ™õþ¢£–Oy4$Ë ]ظ™Ug±" e¾f¢á•5X“Jt·!o|2¤s ×9ÓDŽp.¤ {38ëIŒÑ¡KsŠtǫ̀Ž\ [ Lj79l~¿Ó£KòâžÆØ¨.3ÁÝß&F }0ËÉc“É%*Ñ’`žÖ·,81&"t"THb’<Ñl÷²ã&©2'«åH>"#&5IÁ°Œj „c„H™#ÃyMj 1Шr£³«ô…?z›B`ˆªZŽjtòB]¥Fÿs=÷±'‘râÓ ±ÄG ¦{ùuVƒq¶2k˜K’an„Î9y¤áûÌç¬Z‰ìcK™#? ž ¢Í8ø Pܨ)šßVš:6)BËŒNÌ*£t½ÆïiMiG6¦$ç°ê”äœP¡‰ª\Éf4B Δž‚Bí%R^%ëõMái.ÃØB²T"éÔ¯"[yf’j T?m%4éÎa8Ú;v‘2˜'a$ôD·¿ù (pG9ÇSÞ%®—¨1ÅØ`ZÔÁ++йÒRÂ!z¢e¦T2ò¶r”=%G‘€Ä#þFE'”¿ùP)„ÖëÔ2¥ðä¦ÎDÿªÕJ^\‘©(çJµf=r EY²”ê8©V½»j«¢³š”D¬ÒOY\X›ÓqdÕž{÷›Uây¤²Ñ³i΄¨ŒG®œOÜÖéG`¹“|GÊYkÄ‘ÏbSou©ŒÜØ(¾BÁ)=µzÚW´98âÒŸäcÚ³‹Ì‘,iL£KJF¢÷À2îS '¿F<'5Gäegy©ã©Œ„Œ¡)¦¹B”í€D\Äì^ÍE=Ð8Ê;æ/r3©²nh.Ý…WhJ »¤$CZŽ(ìVÒJ‡¬N-Ù,ÜPÑ‚“sNêƒ"š&‰e½ùݼn,¿ò“‹->îIñ¥Ï#"ÿ³n*]´*§«ÅsˆóY t†gPÕ¢ˆÈÖr”LyQ¹©¯uNfÑäŠÄæP9Ÿlk–k^nÅçwÄÃ’Lð¤^,þ÷ÆrôhYªöãÊ䙆+só¡ú—´s„†©#¥êõ$ˆaI*Q&&ŒâT]3›G¡pÖ$4MW°ÐÌ/$®oY%],è É%A˜—à·éCÇ:Î~ïVºrg š>{ÎmEÆ ÏçÅ‘s"´‹ü7];±^v^ è;f¹”y¨ýçÓúÙÕÐ4L»Å.²Q_ æ2 É)é¬Ì2'[½¤ä nsÙÛŒªóTG…*öÊ8¤¹æ)wpÜdÓrÈIÿ“™0kh‘0%õM­†OÉŽ9>< owDlm Ðp,äxÇ5xÂz\ä!WáUò‘—.c%÷ 7okVN“³Þ»eè·ò]êª[Ù) 8vAåSÅ{Ë£^©[¼8vC¹Ô…^÷ÓŠüø¦5ByGÊ™Dnõi6Ôæ£¸®gfq¶SÕ¡º¬;íß qà^ rBÛ¼ó7›ýì/V ‹:<>R¾C¯zýžÕ¨’Ñ;Ìåþwº#þ•êe{žïóönk¹ï‰§¼¹€æ+Ïm/:Z–áŽð¹W~Þ†žÓ'%æl¿¦ž|ÜÓ®xɳ9²àŬtè˜Éëà—ÿýèCOÝ™‡Ãx´dI£õ;X¿þØÊ÷=kh’há3e”ÅÿôñíÝzУù±g {æ–‘—Þètf½¼¹ÿûæÃcu²¸’Äî£í¾oÚG¿ë!xùÙH”Üc•òêoúS¿p@Þë=$À{C@ÿû¿L?þÙ¾T@˜aÀ4Àì @ l@sé¿ ÄÀ œ?t&¦Á$Áåó@=ãÀÁ˜¼”À$§ýá»ÃsÁ.bÁKÁ¤ÁœÁ2Ô²Á,Á ÁäA„@QÁT DÂ&B(|@'4Á#´ˆ”ËB-ÜB.ìB/ìB&¤B¼ÂóC¬ÓÁ®Â'ìÁÿ4¬ÂDCŸ£ÀšsC)œÂ6”Ã0¼C3 B2äÃÿÙC ,C8üÃ(D+ìÃ5DD[2Ä7´Ã8dÄ<|ÄA$DG¤D=œÄÄÄEDC¤Ã:TÄC<ÃJÅQÌD6”ÄRÜDM¬ÀS´DPlÄVôCY4ÅWüÄZLB<ÄA[œÅDD;ìÄ\ÄEHÆB\Å9ôÄbüE5 D^ Å^$Å[LÆTdÅhÄ>f¼Fl„E_¼Äi<Æ`CN\Fg|FrÌÆHtÅmŒÅrGjLGw|ÇuÔFh„GsÜÅx´GUTÇz$ÆnÌC`F~ÔGvôFceTNeU^eVneW~eXŽeYžeZ®e[¾e\Îe]Þe^îe_þe`fafb.fc>fdNfe^æØ€Hg~fhŽfBj®fk¾flÎfmÞfnîfoþfpgqgrg (gtNgu^gvngwÆæs~gyžgz®g{Öæx¾g}Þg~îçmÎghèvh‚>h„Nh|Vh†nè„6h‡Žhÿ‰®gˆžh‹¾èt®hŒÞhŽîfîhiøh‘.é‹&i“Ni‡Fi•ni„fi—Žé€†i™®i}¦i›ÎéyÆiîiv¦°dLd4ÌýÜ2Ô ÌÐ̈,Xj¦nj§~j¨Žj©žjª®j«¾j¬Îj­Þj®îj¯þj°k±k².k³>k´Nkµ^k¶nk·~k¸Žk¹žkº®k»¾k¼Îk½Þk¾îk¿þkÀlÁlÂ.lÃ>lÄNlÅ^lÆnlÇ~lÈŽlÉžlÊ®l˾lÌÎlͶë MÙüìÿ4jÚH¢®8mÔNmÕ^mÖnm×~mØŽmÙžmÚ®mÛ¾mÚÜÞm„ÞîmßþmàîÕÖmá.nã>näNîÖ&nånnç~nèvmæŽnê®nëîé¾níÞnî^îîþnðæîìoò.oäoóNoõæmô^o÷~oØnoøžoúÖù®oüVïûÎoþïýîoßîÿp§î/poîOp7îopÿm !ù,{*Ö}‡&&&666IIIVVVhhhwwwMx¨U}«iwz{ˆzw—i¥z~ Y‚®_…°~ƒŒ{ƒ’e„¬fгmµy‡¨rޱp‘¶u”¸{•´y–¹|˜·}š¼Šu~š~l•yv¯{[¹{X©lw½ch»ju¸szÜ|6ìz/êy8ò}'ð|2Ö^aÏc^Ê|OÉzVØjVÙwGØx[ÆdiÄktÉsyØghÖmqßsjÙxyäWVå^VègIæjWìyHévWäigæteäxw…z…‡{˜“m†•t‹™”£l€©xŠ •¶{‰Æw€y˜…x¾‚I¶ƒW«‡g®‡r©{¶‹d±q¸“s݃.Õ„:ô„ê…&å‡6ó‰)ñˆ5ò‘:ɆGÇŠTÈ[ÓŠGÛ‘MÕ”XÍgÅyÛ€{×—hÚ’{ߣjÚ§wì‡Gë†Wç–Jè™Uñ–GñUé‡jæxëšiê™yí \ð [ç¢gî«sî±|ð¤cð¦ið©lð¬p‡‡‡‚ˆ„˜‡žœ’Œ•••Š‹§ˆ—©‚šº—ˆ¡ž˜§›±‡ ½œ§¸¨€€¦…˜£’„¡œ™·€Œ¹†“¸œ„©– ´¬¢ Ÿ½£Ž¹§˜§§§§¨¶¥±¾¸« ´­»¾²§¶¶¶‚ŸÂ‰£Á”ªÄ’¬Ë™®Æ±È´Ð¡­Â¦¶Ç¢µÊ¦¸Ë®¶À­¼Î³¼È±¿Ð­ÀÖ¸ÂÍ´ÂѺÆÓ¾ÉÕ¼ËÜÈ€‰ÊŒ”Æ•œØ†ˆÙ–—Ę¢Úž Æ­—β—جƒÕ¬×°ŠÒ·ÎªªÌº©Ë¸·Õ¢¤Ü¹¹å„ƒæ•Šäššê©‰å¤í¶†ì¼”奥麣涶ð¿¾Ä¿ÅÉľÝÀ¦ëÁêÅ¥æÁ½èóé̳éθéѼñÀ¿÷ЪøÒ®ÇÇÇÂËÖÄÎÙÊÌÔÊÒÚÙÃÅÚÚÚÈÕãÙÝâÜàååÅÅäÏÐç×ÈæÛØñÄÄöÛÂôØØåàÛôèÝäääåçéåèíêãäèçèëëëèìñóçèóóóöøúþþþÿùé¨OÁƒúÐÑ2w^8Zèî=„ˆ°¢ÁŠÝ¼t×-^Å/‚Ôǯ¤É“(Sò+§²¥Ë–,_Ê|s¦Í”5Q”ÇóÏŸ?SmˆÅ3ÖQ‹6(ݨSy>Ÿæ¹£M¼>wÖ=Ý 4*Wƒ7Uæ ks,Y™fÏÒl¹³'WRÂñ·¡ÂRàXuXtî«W ÙîÜÙ#˜ÙW¿‡Áª-™v1NÇ3C>Ù¸-T®FC+'j…?áÊåú0ŸÁÍ“NLÒ±äÉ+a»| »rW®èQxð€Â¡ yv½µ´Sxªn½˜6dç®eÏf{{ë¹C»{êL*« |•'ÿÿÓ¸Sæj¡7—.–}{•–ÍËc…‚R H%]ÚT<ùñòý„ÞYê¥çJ_uO‰ò¢ˆ‚Á¢ Ã )©Œ“X€ÿÇÚsR¢I H]y\…B¡p„ò‡:ã€d•–7á˜ã‰nmå „®HŒ1¢¸ˆ#Æ–¤ŽeñxÙVôÙ窼Xdr3"9"“h%ɘ“ò]—Á˜Ò×Wª–etKzÉe— i(À‰RN‡D^¹æzmöé§N ¦¹š þmEãn&ªhJñZ¨£rruèŽøæZqö©Œ„Zˆ¡†‘ªeˆ—Â䥒Œº©¦E–³ŸRý=ÿùÕ¤MVê^©¦f*몬ÆXÊ]yíuæž n¹¨±ºæY¤²\Z\½>EkdÇZzªm¡®Z;ÙX³MrÎò$Z´çj­­·‚Ék ë`%XÈö+^z…·«¨l"«ï¾'5º®¦ðœÆL5S¥v˜«K1•m¹ù’Zí¹©. ©WëÜa˜<ì ¦š§ª*­¹é¢Ë¶äNü“6ÿDX¼1k¢È²áú^Ä%;êUÆwd5w葦Ë5><òµêþ»k3‚%­•ž6 ±ÃB äñ¦¥e“ÇÌ,Íô‘N‡ÌïÓýNmòxìXÉ5Ÿ_5Tß´íöÛpÇ-÷ÜtÃÌn¼±FÝ|Ãÿ-Ï=å.øà„nøáˆ'®øâŒ7î8âþBºN6ë Gd`wœv‡Á66Ôi«Mó½i"ý.;7C“Œ3ê5UUWe¥¦çÅ‚nûí&E.(ÏXOÅLTì#¼ðéðÆ<1“óìg׶סëž&VeË£ÇÃðäÌ1ɤðÕSÏÓõZ?ÊðçÏ‹½Øÿ¿ÇOÊÓð?%sLñòðÎŒïXÒþrè1#Z² õ:«`%{òŸöî÷ÓÝ!Õë\óþ‡;õUPjëæN‡< 9ÛëÞ÷ŽAyL®rò_Ð`VŽŽY‰Éáp7ìAЄ èB²À-h šè´òÈ“//4º‡<©eKiN3lŸL;ÞÐÿ³:ü )ˆC°XN7 ¦HE ½XÄÖ¡Ç2ò#5ï©ÄABjîÂ"ª±:ja ÄPÞî²ÐY„'¹Çß0EÆÉl’“4Ú7¸e fp!<ÉF95 ;Da§¤˜x“ð„¥ui'ñY3ByE]ð‚š†dN€øÂáÌ¡–¤ E-ÉQ§SÏ®%‘‰ù,<¶ñAãÝ¡ p ’ù@DA k@GWñ%Ö‹¨4¬¹j©=•SGãBžÀC oÈm  XØBÜ 1´au­“Ç8R _0ƒ‹œú 4œá hHa…¨D•XK‘Y´C×Ù€!¾€×(ÿÞ¡zÚh¤Œ9´¡ 6ÈÁ;éR…ÊŠá “Óö†ç y”ãø@iIä X² Ö¬‚l"yæå‹7Laßà™Á¶Wˆ ”ã{% A.øxŒCâ xà!Ȱb­ZLÁ ¾ö?óú*kP>Tϸ¨…-ìÍö¾˜˜¯1ûÛ\Ÿt³ÿÉý=Æ‹*à*¸šf„±j¶Al!‹^m;íÇ=v<#Aàáý±âV¹%NT¾¸\á5÷¹€C±ÙÚõ¥u<bÞ Ûâ~wˆC~ ‡ê•ƒ³k`F1&¼däÂÒòmiy‚éÀ­˜ÅIl&¯£4BÅq¨÷ Ažõ!ÙÀʬ¿gáJú)£óXUVg÷Óä)$T²!Ìá%£zÊË‘Ñe¨†é(þ°­éK™žT&pèØÖ·~ÇÍnØÛ7ÒЃ3ƒ9‚ Î Œ5¸ágÈzÐaÌ­›ØD+úý·Çyüã ¹È?Nìér0ÁÿüÁ5äá îðʈMñ Ù)ßY +”m{˜Ûùº§›Z$lÖPB`¶7{І6ápP VR aÞøa ]ú¾•ž×Y߬¥èK¾5v,C˜É¨Ã7S‡,vaAðÁ¬;Á¼ ‹ØLgÑNg$ƒÙ¼®·sïÔÐÖµ…Ÿ$OÖÌ¥§ìçÔ{‚.hƒgz`Ç:ò †G,%>‰óÿðÊ&öLß©ºÅ¼è¿MôŸ…qxC¢JC.Ó>PAÖ¡¼ªÈcw`¡ ­0i=t_:æ\Ï¥cÒ…oÁ†]dçIí÷Vc1åZ ´^Ðzö"èp° Ì0˜À çÀ3Éýum t ¼všVSÞ6gCòÐ ZdG§F.(uÍÀ Í0Ã@bS`vpßR/K2ˆR€Ó6è;`ewƒ„nVá€&‚\ð>²ìÀ {XÁ ÚP w€¿Á o0b0jÔ_ Ø\(µñ€™r~ù&`è÷y&†Í QÊÿ³óÇ2 Æš#Ã@Rë` `O~`ts`!`<‘ˆ'¯DeO‘~£Wx{€E8‚^ ‰´ Ö nðP ÌÀ†h „  z`_@<¾|òUò$Fcõ\Ä·~qÒW´òR"RX‰qwÐZ”^ÆãYͰ4ë€4"8Pñ{]ÐìQ€P à^À9»¢k¦Eˆ\˜Œ8+…ƒö¦…!93C‡v\ñDp€^¦†|`P‚¡ ŽEP]oÅ>ÿ)K x TÀ åà}À •–€Íx¢¸Rv'Ýö‘K…VûØNlD_!RÛ ‡„WöÇ}P YTw3Poã(6ÕO2Bég¦5-‚(ˆ_%ùx–yy’<˜{°Ó0>XäÌ@L\Ì Y0†0[` ääw€E-Ûãd 8-ö(5€…—¨aX•ä˜Q¡®(w`ä”*@eN?˜˜Óö$›Él–”Ó¥[8šÆ'lØEz"Rq˜jQU ~àãÔ(@%`0ðX|EäT”Õ—r œÿ4ˆG$šæ9•&†V‹ù”“ÆI^€YL]°$@3`ð`jyÐq0…=ADÉ@EU$%KY]çù”.–žUI‰IC_©6•EWPŸZ€bð 0[Xr ó-H `ärŠO3Z÷0 ú…`H•(¹Ê‡rÈ²È CCbðZÀcE Uðg]À0Np @qk"@Pf~$Îø¥ë‡œò˜¨F Þ˜kÈðu €àYtµ_ÀJqtÀX  #z¥ ò \?¡¥ø3K^z|"¡T•dÿš A´@ ÑÜÐð ÐÐõP~ãõðé 8aQ]è”Mí žyÜ Ò(kád怆æ€2aæ°â+nâ-ñí í çÀìÐ~È5 ÎÀã i*u~Ÿg܃Ü*áÌR†äù¼Iæ £p²0  `2Ï ¥Ð“’Æ¡ÿà¶»,`Î` ¹ºî…FuÊy Úó\Šj>玭ñís&k¯   ð *A]t[°RóJE…Z?ñ\‡ Œ€’ s UL™ý7ÌßœËÛ™ëGÞé}m„ê%a¯@ ~ž³žºÁ8ëÃçsÈ>ï‚ó ýÓ5zȈ¸ €•ÑÃîÂv;ò?ÜÎÍ ¿æ›­€ ñøÜ?§”…ÿÓ6Œñ ˆî!oÃ9|«¬ìëÔíŽÙ:’ñ~î Èð̘8ø8óŸÀ°6Ožž}ŸiDžóBÍ×X¿ƒsò(¿Ñ׿84ÂÙ„ó MOôéÔÕ<ŽA[¯îÂFôu«ðÓ¥êøŽôÙðò\]÷^hÏ öPÏŒ¡9£ç¡ò¯tÏ_ïétOçqìKYï¦8éÂöƒ“ö…¿ö6xΈñ`€M„)NÔ—RgÁ+Y¤8pãÅ‹‘"Uê°éR…5 ÔõžÊ«åVv,×ÒèÀ/Sʤ9 ÜÍLŸþÊô-ìQ‡Fõeš0ãÆ®¡N|º×©Å¾~ f$©*É•Wuf”Èu c&í•#;€ß§L8Ó~ûfÒpÔÇ!O.¼Ëñ³àˆ¨ùV½pnW¿ˆŽfÿ\бAÄ))Ïä÷ç?´”;¤ê°'ÕÂÆS…ÛÚ``ç;WGOí7«h­¶IzMTcÖ’d3ÿ–y€<ΰµVÅøø¹À¬?AnNºóûÏϽW_¿`˜Jú®?ÅÔêµõÆ’é™2€Ë:cÈ(~À‹%Òϵ§‚j-?Õ@”Î* ëúO0ÂB*1A}Ò­0ô,H¦á J'¹BSŒ5ƒ¤º51ȃ¤âÎ?"2Rª†ã*2kΤO!äc¯£œ¤‹Ç‘<šë4¨’,L¤JÊÄUS“+.m+©Â 铳+Δª¿ŠÞÔ‹I¢ÀŒ3L ©ShÈÿ½üdÓLÒ¶Üΰãèгz"Î$:ñê14 12É¿…*”ÎB EQ¨–ì¥èT%‰NÅÒÍHŠÊ™'@Â*Ò£ ÔêÂ$Ì¥e Í4K<4ÕଫnK7ÏÖ¬Ú(£=(EÜt:ŽÍ`¥ THSOE)þ€MÒW½,„OS šÅV îZ¤ÖÎö µöZæêP¤Ëeu:‰tÕËqŸZ¹—šÔ3ˆ‰ru#¢â#¬¥PÖUã6ÿÒ˜È7Œ½¦âÔ0@`ú(¥Z#»KQ~?õ´Zs?æ¸ãŒm¾ÈÏÑÚ;ªdà óZ½X†øeG?oΘE¸à›Q…ú¢ÿƒÅÌuボ„‰½ÙöƬÕaDpJŽMê\û–ZºK^OlV–šiÞˆ{6A¾Y¾m÷7m·SJ `¹›žTY~·Ö±dƦʤ¬~†-qCÕf;\S Αëp—~QìqÇÅzÓQÆÔÞš§Üc×'‚9g†ðöVLÇ­È”6:Χ»e~º\Í üõ‡f_ö=¯UÒnå‡qÔ°¥ß1­ÓxÁ-þxä—¢‰aoyÞéÇ™®ëUòLå'7G°í¹—¿s·§]q¼½zV{éÅ»çÁy¨5îWt¤FmTDl!q,ù5ù1†™Œ]ÂòBB´ ZΣœšd³ÄñD˜$aD±Ÿt*]ÇÒ¤ iËzÆd¬£Üž®ÿ£¸Ä2\œ"V+õ˜/iIÍÄb9iµ Q ™7 acöV6j]-*M± ìÜÓ£žä¤a£9‡gNç,“ž{Ö—8Ä( n Ts¨‡†©¾zÊC½”/ùs›lÍÿUGò+Z4ªO¥1nÄ´ cÐ83‡½ôtâ(j\ÕŠMΆ2 ùH‰^Æ“•_Z 3&‚ðì'(´ P³ÃAyÎôuTSà7'Èx¥? £VË®93Eú ¢UÉKƒÇïT5‘0iND;é<ãís£ÎtÏvUÆd•KéÓJPûúÔÊQP›íYYFâ¸_YsE~£Ó¯”ÿn‹˜åœªjnšµ¥êt=d…’ú<›W§BOrQíØ¹giZ|MªÕ$ö9`µn°R娛V„Ù¹½èOÍ+hðDÆWIžö—ƒÉ] äPgnNº«ÊÛÖæPÅï~­(f#ØíF‘¤×qskÐrS%« ÓºçBº¨ôÇ)ŸEÂ$G³Pu}˜ »^¨Å—®ßóÑKé+=†ÌöN’ßU޲ÊKUL˜&eš³™´ôNVªûgekš(Äj=Àúv’§¡J}†(Ìõd"F\¡( à æq¿WW1é7À[eêx-U•û*ÿML{RfO)Y~ò4™:à‰åëïzç3×{1^âôàÒ"¿ž¿|ØX6–Ø{†d³}LØ4o•¹Q^þLD³wI ûNÎ Uc˜5ËA¶ËþÃjh3µBåLå‘*Ù‘ Ùv …Äœ›®‰-ý!‰|ê—G•q*sËÞ‰”®¹¸j\=ô¤.aO¼«ô•C”é¶»Côt×@ ‘Éó6µ ^SÍ4VÓôÒ ¦}~ª•k&9ÑGŽíaåÚ­ßÁ•‘4Î\ínÍÏ€ošHk-Ö²â`E“F“!hõYüé1-[¸gJZxàì¼ÇJg4zXvÀÆ^®ˆ&Fª™Øÿ¸6t¥©Ê'VZÑ®é颷åÚo1V^ãWj ¶¤v"›.2mU£b ï+½*L¾a)ÌStoßêšLûD2+Æ\æ3§yÍm~ó¦HwÍGö­þ¾ 'Ú ¶pQÙ_ze¥â”‚òˆ0þs¿À;Ž› æjëÛ.»J]xˆG¢Ú²uÆÉU¿¦[»®d·LçºupÑwr¦»A±uA«—êî¶òµ£ tv¥¨v)¯ŽðµªÐì²ìžßù¾—AEªIxß!<Ã@§5º…ìûÀ‡.HÍiòÎnÙTœ·£nEXóTw¼Æ;ÿ÷ؘñ†™qõÕ‹™Ÿ‹ßÿ‹ÎãÝú³+)rþyðžëþß‚sq½RµÇñÃù×?¢ê<­¼üõ¤ÂLÔAP ¢ÄP´ÄKEà;#.ìD9DEPTÅW\¦VÄWdÂBÔD]ÜÅE4Å]”ÅODBŒœ+Fcm ǨÉEgÌFrüFhFl EqÜÃ_ìÆX,G_”Gz¬GxF)tÅgÜG~<Å{ÇsüÇtÌGoDÇiŒÆ‚HnTÇuÜFDÈ„dÈx4HF|Hÿ‰œHˆÄÇZ4¸ÜHŒ¼ÈŽôÈßëÇwTH‹$ÈTlÇjÝ-ˆ¥]¨Ðá{ˆá>€–T*®b+¾b,Îb-Þb.îb/þb0c1c2.c3>cÿ4Nc5®bÍ•ˆØ]c8^co ÔèØ8¾c4žc­µcÖ[zÛLðÔæó Í5Õ[í¼ Õ6.‡pí=ÝMuÈÕTÆã2öÖKØŽÚ¸‰˜ €šp`ã€oõdQþoE[`VOeue (Ž]à0åOPךˆULÎãš8ÛšÀ×hýZan³}ä@>ÛrÈŒðV©clæ™5^H\ý­Ú€UWN5Þ^îfƒÐãœõWng|%ÛLåVFÜš¨‰ã%ZoUWŠ­c} €OØj¾Úu€Ÿöf8gyöÚ‘Y×VB(YgEÛ 9UvVk]WÆ×ÿjØu5åy5Û¹8€\Xîf€îX€æP-è!SväVNeoM\œiQâÄ çP]eQN ŽîhLþ†?Љg­TbÞxb¶á¡>]gõaŸžÝšeäîa˜‰rhjœžêÖðV^¦j¬NÔL €KÎj¯þj°k±k².k³>k´Nkµ^k¶nk·~k¸Žk¹žkº®k»¾k¼Îk½Þk¾îk¿þkÀlÁlÂ.lÃ>ìŽ^LÅ^lÆNLxlÈŽlÉžlÊ®l˾lÌÎlÍÞlÎîlÏþlÐmÈ6Ñ.mÓ>mÔNmÕ^mÏ&mÖ~mØŽmÙžmÓvmÚ¾mÜÎmÝNmÿÛÞmßþmàîÞnâ.nãVíá>nå^næ¾ìännèŽîã~né®nëÎmê¾níÞîÕÎnîþnðþlïoò.ïÊoóNoóFoõnïïfo÷Žoë†où®ïæ¦oûÎoãÆoýîïß6«´P¼TÑÿ¬ÑEÑÆ,Xpoppp Ÿp ¯p ¿p Ïp ßpïpÿpqq/q?qOq_qoqqqŸq¯q¿qÏqßqïqÿq r!r"/r#?r$Or%_r&or'r(r)Ÿr*¯r+¿r,Ïr-ßr.ïr/ÿr0ñ?ðÿPÃ¥ÑÇ$ð E@hs7s8s9Ÿs:¯s;¿s<Ïs=ßs>ïs?ÏócŒ?tB/tC?tDOô=ô…PtGtHtItFWˆI¿tLÏtM7ôJOˆMÿtPõPït„uS?uTGtR?ˆTouWõ:_uƒ€uZ¯õV—õ‚°u]ßõMÇu~àu`öG÷ua/vc§tA?ve_v;'vfvhosgvj?öi¯vlökÏvn¯õmïvp¿õdwrOu_!ù,_*iއ&&&666HHHWWWiiiwwwMx¨U}«iwz{ˆzx˜i¥z~ Y‚®_…°~ƒŒ{ƒ’e„¬fгmµy‡§rްy—¹Šu~š~l•yv¯{[¹{X©lw½ch»juºrzÜ|6ìz/êy8ò}'ð|2Ý[[Õ^aÏc^Ê|OÉzVÞhOØgVÙwGØx[ÇdhÄktËrxØfgÖlpßsjÙwyæ^MãWUèeHåhWìyHèwWägfæsfäxw…z…‡{˜“m†•t‹™”¥m€ªx‰¥}‘·{ˆÆy‚y˜…x¾‚I¶ƒW«‡g®‡rªz¶Œf±q¸“s݃.Õ„:ô„ê…&å‡6ó‰)ñˆ5ô‘7ɆGÇŠTÈ[ÓŠGÛ‘NÕ”XÍgÅyÛ€{×—hÚ’{ߣjÚ¨wì‡Gê…Wç–Jç™Uñ–GñUé‡jæyëšiê˜xí \ð [è£gî«sî±|ñ¦gô­pò´z‡‡‡‚ˆ„™…œœ’Œ–••Š‹§ˆ–©ƒš¹–‰¡ž˜§›±‡ ¼š§¸¨€€¦„—£’„¡œ™·€Œ¹…’¸œ„¨Ž¡¨—¤´¬¢ Ÿ½£Ž¹§˜¦¦¦§¨¶¦±¾¸« ³¬º¾²§¶¶¶‰£À”ªÄ™®Æ±Ç ­Ã¦¶Ç¢µÊ¦¸Ë®¶À­½Î³»Ç±¿Ð´ÂѺÇÔ¾ÉÕ¼ÌÜÈ€‰ÊŒ”Œ𨆉ÜÖ•—Ę¢Æ­—β—جƒÕ¬Ö±Ò·Î««Ë«³Ìº©Ë¹¶Ù¦§Ýº¹äƒƒå”‡åššê©‰å¤í¶†ì¼”奥寲麣嶶ô¶«óµµÄ¿ÅÉľÝÀ¦ÝȲëÁûÅ—êÅ¥é̶éѼó̦ñÀ¿÷ЪúÓ®øÙºÇÇÇÂËÖÄÎÙÊËÓËÒÚÚÂÄ×ÏÐßÐÀÛÛÛÄÒàÛÞáÝàãåÅÅäÏÐç×ÈæÚ×óÆÆõÜÅðÝÝåàÛøéÛäääççèåèíëääèçèëëëïïðøæäûôîóóóþøòþþþÿ÷ H° Áƒûò)Ìo¡Ã|æX‘«'¯+sõ,^|ȱ!GlÙ²ÃöŽ£I‡OªDhpË—0ºŒI³eÍ›g⬩sgÌž>a J&CxH·!]ºt†THSaðtƒU ܘj…§t«:Ôà¹ÃC'ÝÖ³L»¢]›æÐ¢ßÂ(w®L»ëÎÕ»¯_‚G“¢ý„¡Rn*`øÄ͆CåÖªeJ²tŠ­•¼™­Û¿qAç=šô>¾EQ§6m70W´R;}ç  K F;™2Y<Æ:ó~¶íOÖªƒ&W޼¹sÖE]÷^jî…( ²º´öî³Ó™ºÿ#>œÑ £¢xŒ$æ)@\Š0€1Dxè°<$ÎaØÆB2Š5|cÙä˜Â$Nm‹ð#ù¸”úìŠLcèÙ8ÆÊ“ŸÜ #—â@²¸Á¼O¿F``rg $\&çÆD²q²“NÄe.£5JRš² tX¨¡Œôà@Tí–Â1…„&D!ZèV<7USU· åñzɵ]î tàÁÆyLj´! èÌÂ4œÉ¶ qšµÔå!¹K½IQBܬ$¢Áÿ9ä€qHω‡iÜ! [x¥ ™²J0JUñÔ&mYÏÄYO”¶›O† ä –I² …+ºA‘[ÊC÷ØGdEÔžÙ„iE7uMfÔƒ™IÇv ƒaX.#-)Ræp…ZŒJR*u%RXZœ—Zôž„¤áLiºÁ„ÜTMê0eÒÀ`Pƒ <ð²@‡iØá XLÔI²ò¡.*='*O©ÒU¢7¼*VïpÒ6?ÐAv +X! W¸B.a•ïdò‡îléRÒa m¼jœ§"íªYŠNÕ\zý“:Øp99ð€$pƒΉØ5\æE•žYÂÿnŠɃ>6ùY§>”¿îãBû'^`æœmˆF5z(ô‰hXÌl‰3µh¼CxoïܘRÕ»ßÝ&qME²i# n@ 5‹ÙÌ! O™®pª±¶¶àÛíl]9Ëß¹rw¸ÉSÞß´°…;£ hÀm¸À…C´u¾õÝÇ}óÛ_6Vx³öï"Çë!wT#•D¤ƒÚ†& u|pÂÐ`Žw¦º×Í.…5LãcøÆ8ÆW>Ëq£MÔ!˜ÃTïj«P,ha _ø‚¢‰”oŒ¢¶(Æ:ùµeãÊ b4Ša ³à6ºq†s¼ß1{ö¿vâf£Á…ƒ“ÿW¤†šðaÀA b˜ ‚xÄH!É_`CàÜÅ #«¨K"e-‹Y1“Y¦½•«™Ï¼á÷k1¶`± Ë]­‹ÀÀ8‚ȡÀ ØP‡L" I„Ç9„aƒC·òç¢2Sh\hÔ„ª£Ý]4w£–þw8 ”pKcˆ Ä@z´A ¦D bm…Þ³))k8ð@ËâÉ&ib‡7Ò™½°»ÓÌáÎXŧ›‚³O÷i`ƒ°b TxÐzÛ`1‡·3Ùs4£‹Èìã9Ìî2ÒaÝÁî±Áû9a[ÇõÚb¶†$»Wÿ„,0`Ñ Wìñ­©þ«+ñê²æú¯lÄs Œ8ðÚ×gw¼mLiy—yÞ§7³†?`[˜2ÛöèEu$Ã>@&»?'Yвö"W [h ºlØÐL¡¯F?zÑ'-w'ûO6BDØp‡7+t)Htƒxð†+ŽãÉh(F3!+ Y˜VÆ2<Ö…(@AîÊ8Ç}ûnýÂ=îÀʧéöÉ•i¸A^T&uH j¥íháùž…q¡ý'`HÑ<¼ßþyºCÚØS ¹p6Êj„5ˆÂ¸"©AÂ`¨aÂQÇ9|!Y¦¤Ì;¹ç|Ç5žtÏÿÞû?!`ÿö¾'¿ò—Ïkxß6Ì 2ô¢6èÁ È  4¬ád°A t ]œï˜€ §?V!>ƒp¥>ð@?â×€ø€8dSw7)ˆ†`Åaq ÆtLÀ0 nXÇ>PpLáWa b{D“}í6wH·}›ƒ2GÂ}Y´oðªX: jà<Ð%P&@<õÕÇu±åζã0Š`G™§}Zhƒu×{3¸…ô!zÆÂsÂÀ< ;9n@%€Pn :{ðàPRá`hñC6 6`-¥{ÀÇ…^xƒ]8ˆv×AÅ¢aô8 Çÿàu†'Õ†m I˜e•ƒyð…q± ÕJWˆà×y¥Ø} ÷}N#†ú¢ÄV ‚Ev€NZ`>°X0 SclЇ0µls  zxTpÀÐÇèvÆSƒCGt…Xl†98]éV@Hm ……„:@ZP2—£é`_°WÑ JÁsAÔ<’t =‚Ç@Š©hŠ÷ˆŠÒ8†ˆÃ2Åàl LYpX;°% é°|HA_cÐ p c—L³æoð°JxL­´`È{ÔxŠ4¸{ Ù:C¹“S.Æ€[ wÙ4¹mP Åÿ•` å`9ƒÆ¹F{É5Lv×ð‘ÏH’KY%‰6C:ÆNõwˆH_–ñ†m` \ö¼_ÐP0spqi”IÅ6ÅÔY†”/qãP‡%5å-ÐÓ7îPG“Y€hôLÅ€º“Ôàku°´v_ü”¥ ‰sU&D<ç‘a²£"—Þõ= ˆ—_šü•yYoÆ€\H„)K¨ˆ†:¼ ]é0 ‹ >vî¤PeçoÉ’}G\[ñ”úè{!™ Õšgç”^2¹¬éðP ÓÀ|î°eƒYÔpsÀQpF>dŒÈÿ¸‘—e½ 2ñ=]CšµƒžûƒÖ4—ñy—Â|È©ED[ƒ9V€y+[á_ax$£Zu°{€HÖf(wç)HJê) Á™óIŸtÉ}#©tõ–ExNV°gDDQÖeHAYt@“«%¹¨j ÜàUаk°¤3å"€QõÐGA?Ÿ™MjUŠMš¡NYŸøToÞÔûù [‘U®e­·Z¶è"–;à$ÐH  upQ` ã¢ÿY+»I™ð$ž‰r陣’7Cê™É2@ ¦K`ÅàNÐ>¢ð <) i°0lÐ ÿ# {vEÆÔ»äW¢I¼mk¹À{ªkkGë¹uûk’ÑJÊa•{Pd¶°MvKq d |`eAP£Ð Ð^F‹j’{¹óJ¹Å;šð›¹O:¿l“´rh,ç*g:ðJ D&iˆ7D A`® `ð Í`D0N@D¶ï´³Nº¾¬Á¬¶ñ{¼¬e\V¢Æâ H  † üÐ+ Ûèª ÀB  €à€ 0ã$ 7kL9ÛMÓ0 f1¹î+ÄC\Çík¼¬ÁŠKq ƒÀpH000È2 °2 /ÿ¡0 –cì1| Tg™‹–ƒ:Ñ Çxl±D›¬Ÿ ÊF»¹T¢pPF0ƒ, |0=àÆ ˆ NAÒ.©à  `£ ËHné •HDìPÄC ¯ž|ÄMȨ́á€äg~Ô<>§pƒ° º 0`Û Xk°  0p>ÈÎ 0Š >6 gþ§Í6 ác¸>¸°ÖÀ€Ð=Ð]Ðh¤Ü#Üp €è!0…)ÐR°@ +°·ÑÐB0ƒL½PÉ|„©Ê»n• Ê,ÊÎüÌLÇw|ˆ«<ÿ†-Ðd[RˆÍßP§€2Ðxƒì_ì"À€«ÀÏ0Sð¶q†€À nÞà30Ç䦖cšEÚ°Ò/C±ï Ö?Ê­¡Wbƒ ‘µˆà(ƒàx€õK ¯0\À ð*ˆDlv{à(„ ʰ `0pÕ?ঽBÓ£³¬<ǽÁ”ÄH\¯.h1¹’± ž0Ÿ0*¸vd Œà\àÎ 7LÔ0 «À Œ åp„`° „À©™˜ÑàœüZ1ÙÜÌ/ÙÎÝ"z•22Þmf‹œ•Á jåÚ¶ÿkˆ ´€I}\'ÕC„„P¬@ìÒ1á™qjÄÓìû¬DÜÁõzoH1ÝÕmpé{›kÑN°Ø3 ©àðp âMÞñ ÌG ·ÞnªT—|Ç*ðYÖ-ÍÜó¼Â+Ó²ÙMÁ+yfò0ãÀz±=Û«° UŒƒà¼íÛÀÝ–*D÷ …γn7±býܘâq;ÓšÉ.kÝÖ)¾ß ØQ‡ÅÐÙŒð(G`BÃÛÁÙ16àŸp ]Ô6Ð I`>À —UÙïù™G!ß—íÞu~äwî§¡7ãpÓV9^åPðv«Z`§ÿ10È00 0 £ ²à „ð(!=€'0È- Ëf»µ”LZ!ªD.´,ÝÜF®çIœR=’ ‡› ÉZ6àF@k4ÀÀ(Ûa ² F'p6 :pÇ€]ÚõŒÁ xªÜ#NßvlßõMo­î<Z ¦‡6À…°ðŽ>*ÞÐ@4EpóÈÉŽ ¦@*ªaý=œ‰ïÓ.â÷ çcMÖs¡Ç ½Üîíðë:îA W=AÐdãI©†Ø3À:ʰz GåžÞ²®öÎïÕníÔ^ò&íïê‘ˢ=Æp¸Æ0ëZÿЃ EÀ³@BÀŠp ÁnF€'0<À-  Ú0 â±Ø#t:¡ïBò–½Üx¾ïUoõ­ä“¢  p¸+°å(ãPèyè?Ô(0ÈC,LJ60ÈHØ: éÅŽ<€ ì óÀáÙS¤=!§ž©õË ÍtNø…Ÿ±³Px±Õã`«`¨0…®iLØqH@…ò7'€7€¦oú<  ÷—q>*sÞ®®á2 qõýîï¶¿êÒ.Ó‹IÝ Ü€ ¼ › ÛÑb®)vÛ 1 g» 1@u:é8Âà=À qÿ΀ŸY¡C¤4‘܇õY_ûvžç[¿ûµ‡Ô\‘ÔÅ.%Êà `›gñr² ×v³'(~äÈñ£G9ŒëÁl_>xðÆƒ·o_Ä|ûÆY´1"¼ŒEZ¬±^ÉŠ"7ŽdÙÒåÈ•/eÎÔHÓf˘7uæÔy“gO @=FÜöÑèQ¤I?‚ÂÀ Þ6n@)hnBG‚08r,©:aÀlØ0éà'zìíBe 9–¤x2¢Åœ&QʼK¤Ê > <óga˜ˆ +fìrèSª‘©ªÂÐi¦NTIþ6ˆƒ ˆbS¦ôœ®pƒŽÌ˜!…ZneãÿæC®È£c–¬ç··Ë¾ûJ†ÄÛ§ñãÈ+×Í|¹sÅ‹"HQrÒQ0\À0*iõê²hêï0_Õ#‚ß6Ž›‘~ü(2(;‡ìƒ°êåÛÏ1ßÿç†ëžßXªg¢Þ&XõÕyz;lÞ¯³nÅýåzïéÄoD‘pÙ§)7JèÄ‹Ïè~SGžmíné[õˆm¸ãõnµÞóÆlvÉþû±§×¸í_SĵO7ãëÈöŵ!rÛØÆoŒÄ¾|Í€¹Ëî¨W½úÑ/ƒú ÿþ J AvúMñ˜£p` T úÖ8øM©{#éß !t½ùapƒÌžöâG+š$u£ ÚL2¼êÐcd äDÒ4úG/‚Y½Êæ¿Îin‡yÓ"óÇœ¿FˆúJI)=à!MmG-±=Xâ±ÎKØ×²*ŽÄ#T’•¬‰‘«f‰ç£…E‘%yaž@ÇiLt’R¡ëhP2‰Eq)æ¡ÅJûzY‘Åɰ:á°Èt¤%L¿xÊGA’;)h«< ‡[¼àB:¹Cþ“Vö›(÷J8,WnLnŠ$ ,A—²IÑ^¼ ŸƒÅ’ö0^;gB_jșē¨0ŒT·0‚a‘+G>‹R·œ<&$Íì£Iç·Š­ô†MMëS“”h¾õ&¨”àŸL²©õ«"‚ãÕ£#†KOI\ÍÈù½¶²u.õ£[#*”ÿXÉueF û³+éõ„Ô4 âê¿á•WT:&2[jÚÓ:¶Tµ#8 ³ŸÜÕ\ûr¥µÔs[oºs°sƒÛ—ÊÔߪ¡ë\ícgòÐNf’'|]œð”ÕððxS“i1>èµÛe)w»«ÚáÎ埌ÔrS¶Êþ,ºÕ‘®ÓÄ&ÒF׺T_cSû]üæ÷¥Å­¯÷6[PØò)lÃÃÓ½V‰Û½êÖ®œ¼“ðÄße2v­Á®cY«_ð(™ûÙÅYÎâv¬-sZVÙÛ±ôõwÂö™}½»ßðÎ…€Â!f„ g®óVÓ\TZî4…Ç/ã%Å~qi1œXcÿÂL²*àrr´¶°p0“ßOŠGÏÛâTEP]±„Üåû>uÉ’ª®où¹¢”kv`ý£Õ‡¨(%‹Ô˜c \/ÆŠU|Íj¶ .ËsŽ”¶ AùÒˆvæsïŒg ÙÅþݪ™CWè3ç‹7ˆvYµ>J­ƒúðp®pžjaFÛ$®f ñÅÄ×¾#¢™Óm'i“B Ya3xýáþvp¤c¬A‡BÉùWåã_¾•ÒI÷Z×»F5©•j8á šaí51á2]m©yƒ Î'“LHk+5Ò©¾ = Ç/¢Ùuqßþhˆ$ïyEMzƒ%7lE;mHùÔÿŸ³]Á ~p„'\á gxÃÞ¸t‡š”Ímµ¹d<|éØ:7ýt¾k&nÊŠ1Êâýw©y=ðhïùܦDñâBgÀñíGÎòÆ”ëBÈ2{'Ëâ¡?’ëÜÑ绑9k½Æ¹m+òŠm ®’‡ÇÎNjÔ|´ËQÚê8µ»^J£û‘aõ$\¾02¼{Ý«ÏC\Ö«ëTu•!uë`«IÖÅkTa¯<ïz§XØ·Xnî š¹²]¯´29F ‡Ô¤VãwOðø—à•®A—vå-ÏP¿¯ð¯Vs·<4½ìÈcɤ\õ"XÇ«×/CõçÏ)¯g” ‡™ä¦Ç®¢)¿:Ûóÿ ƒí wºï#“ížG²§&KüäH6µ2iÙËŸÄL'¬èÊU—Ã9d €~FL¤hrÔÝ'o¨dÐ _žùËw>Ñû󟸪_Ý´¼bŒÝîðûˆ¥úrº:¶s%Ô®”‹=õk¿_£´õXÄ©­­Ò4c/DÚ¦+©æq £"±I–ñò·ã¡ÂÚ;M*@t[@®ó5¾[»3z? ¤f¡'ÆiœN“S¶ÒS<›r »z¯šJ0o“ ¹½}Û»ð[¿D@Ìs¿»C›ÃR–èi»°a: L6,;ZËAçшqãšÛ’Óƒ¿DÛ0ç9?„šoŠº\Aÿ3[7&ü EB–ª-ž‰ªÁ¨@Y0Új‰Çs‰iÒ‘ºy ™ÃA£ 0TÈš¨3lï[,7DÁ¡,‚’±¶)›?§Ë¤3·z)BEë3:ë>K´ÂÆ£iÄñ3¯“=“«6I\ŸX!¨ 8Wù »“Qd;ú›±½“ÞØÅõÉÄSü‹T$9ÑŠ‰5›ª€KB$t«çC2`›‹sžg›;~R»5<+ßQ6Ù²MSä#«:;,flFWLAh|Ã6Š”øÁ -|³Œ›0:)÷±CÄÎ;12dD~c<õñ¾ª:¼ƒDö;v”,‡š ¾p/4<;‘ º©ÿÊÁ¨6-ªé'!l“’;.ŒŠlÄW|D/ŠÆV,ŒM«£oIJ¹C˜Ýé Ç#ú'rƒJ¾ÈË£B‚ÉsLÀ”T¹æCHÆÆY¡ÇÄ¿ØAxä¿ÐA4lÌ´i©ÉrTµ«éBg Êï#É„DG 4í[¥ê£/+Ò,²5!ä%‰JŽ¡ZsÊ™ &£!Kå[¾¦,º…l(åÈ( A‘I óIEÌÇ‚IœÌµÝÛ7‚ Iøy» ´BPK±tÊT²¿”LBY Ì#¼HŠôÅ ¢2c²HÒŒó8³ZŸ)‚»bÁÉÊØ<9ôËXd9Íÿw»BB©Ò”œ˜b=)º–§CŠç²®½Ô#|›;óÓ@°é¿ç<ÀÝì”$JÄÌaÑÃʪFÿ ¡Ó>郠|»ÚJ¼m¼Ÿº@ËúFÀ±½ý3À$4LÎüµ£$Áú)˸”JŠ\JˆºÍŠL¡Š /ÜHp‹ÍÉ›5lI¾ÈŸ¶ ®¾ÔÎG3ËÜ,Jí+A¤\ПPô#ÃŒ‰)›9–ÏòF;2HÞ™­![½»R+ÂMwÙN¡D [­•Ü?üÏ õ\¶çѸÄ©Œ;{OÌ-1+'“´uä3ÑlR*-Œ‡œÇZQL¥T½—.…‰é#1öùDb9ÿFü¥ykO?„ÑH©)í ‡«S;½S<ÍS=ÝÓ‚›ÓgÜÂÜQæèQlüQßTJõ”¸ŒšHj10®tR¹34úL)«šÒ)5É’ Ó¸tĢĴÖB,7õÃ÷&4-B{ÄñµÛ|²@c¶:ôÌ‹ú·h¢¶tžØOâ"5]õTÆp³ÿ!I%¹U¡ŠŸæ Qª-40îÃ.£!&K¿@ºò•¾Ä£ZìT…ìMþÔTuL½"ý–GužŠ3š)Ì­DœE…M°Í$ÔMÓmeC'¥WYµ:Ž«»”ª ßÓ?9äBêbEœ0Ñ!kWr"Î-E¶SMÒ¾ëLi…½?«Šÿ¬ÛW:"É'Åt/€tÏÁy°ˆÉ„½²!bØuXûLÇëL½))»q Æ,3¼„×äŽxaW¢ÃOxÏ]åÖ íÊÌìˆi2–¼ Õë=Ð eiÖcÄE•èP›Öo ¦NÅÖMÄÒü´×‡UˆŮ œV2—QUœüœrUãä´2Δ՘ ½×a4ZËUԛס Z® JñÙ°‘&€j°ï TnD¸QÆ%uÉldÕ¶Ò½Õ›¨IÉT :­ÝÚ T;ñéA¬|ÃÂSÝA¥sŸU¬•g È FYìV›ÈΨ]BŸõU•u\¶Ã+¤èâ\‚=S¶óÿ‹‚ŸÑýÈÎ]M‚MÝÓ\ÝŸµKâ´\» KʭܨÝÛD#UqýÛ© \™-Lq#œÂ*)‹Ä-[噬D¥ÝÓÏÅíYèÍRÌÜÔR¼®PeÉL ‰-CÄÇ«&dmT²] NÂ1ªÎ ­Ö¸P»™<õ½ÛçE`÷õ¡U5PŒU^”Ú(lÖ£¸d ÖPŠ´Qñc‰ÂÍ' ¹vÞ†X¯ìZ‡:×<‚ÜC²L½Ô#)Íššm^o}=æÎö=^€%×PèÒX‘¯¬éXžÜÎ[¾aY)ZÞ ÚC  9m"$ƒZ%NàP™“C-Ñ´CŒK•aÝRÀõÅTÿ”}]¶êôÄ2ÏÇÕÖ †¿ãê’ƒ¼šU3cÆb$ÆÛî`VS…+ÓàYlc»RE=ЬÞbóÍâ#>áfݪҷMÉé|·Äd_Ø=c?ýã$V<||d¸Ñ>T9ô\Y¡$a>FaPÆÛ*N^)6e » UPÙmeGFå^¦dˆdZ ļãoÍäž;HÉ]_fæfÎa–Qôc^2Sí¹Lá’g]´H£f-6âHeX¦ÐW†¬ce;.Ö’Zfhfå>öcqŽey®çÇeœq=ÍÍôæÙKcNŽçp¶çovfÎÝú 'VããS†nh‡~hˆŽhÿÓùäy®h‹èw†çq^bÊgÞ‘T¸=IFãØeÈ_f@ÄM’2YÕôÕcWŽæÆhHhšŽRÅËSîÈzDOiþgz¶ÆÆíé˜ÎÚ=–é¡.g¶i§Ó#énê‹vj«Vê¦fê›0ä}é¥ÖŸ+Æê¬Öè¯k§®Ô]®i°j¶^_ªnj5ê“>Ù’–kp6k­Þê¯&ÖÖë"&è´è¼lÂ&몾j¤>jRžiÄ^ì²vì±6l+nëŸvë°–ìÈÆÐºîëÆ~fµÆkÐÆl¿žìÍæçÎfÁ.lÈíÌΙË^mÖ>m”flÕöìÏæÍÊÎmņíÿÚFíÔNì¹6é»íÞöíǶí߯í¤&îâìãFîçžíè¦kÝÞmã>ìæîŒæíµ.m¯Ænæoñ†nðoצìåænó¾îÖ–îòÖìên»Þnònoçžî`yíú¶oí¾mõþïýŽmÒoöæïùöïÏîGð†õn…Æï§mçìÐ^oêNïŸpÓ®p/pÙvo‘vð·6p ·ðû&ñ çðóq©ÆpÿðþNîoðøî?qÿnWp‰îqÿq ò>EoùŽp/q7ò÷Îpà¶q&Or$òq Wqwqßq(Oñ-×q§r˜.r.Ÿr%Ïqÿ/×ð3Gó§ï·r×r2r)_ñ5gó7Wó7ó‡søÆò;Çsoó.Ïs=·î,Çó=tŠÖó÷i?ó#sAôDwó?orÀ†ô%?tK×t>Ÿô8'r'ŸsN§ôJ§ôF‡Å:gðKuI/uWOsL·sOÿtX'õ[u]ßõ 7ôVõSö`ÇõZÿòE·õ_'ö2GödÏugöüõQ‡öegöjGtwfõbïôkçöW§v9÷pïu1—uTê@ovqgqt—öLïvSÏvçõm÷vsWvxöTWÁGÏw}owvêr'tc÷zöt?xaøa§w…wxÿƒøu'ø‚xËvwZ÷wˆøc¯xŠWtoø‰ù‘÷u‰Ww”×ø’Ox•/y†gù–?y™ŸyŽÿö”ïx·ø~yž¯y›_˜ÿùžz¢/úw䨥_z¦oz§z¨z©Ÿzª¯z«¿z¬Ïz­ßz®ïz¯ÿz°{±—z'©%è0{ç@û´¯µW޶w{¶{¹Ÿê·7ŽºoŒ»Çû¹g޼gŒ¾GŒ¿/ŒÀü©¶ˆÁŒÃŠÄWü½‡ûÆOúLJüÂ_üž |°üË|½×|¿çüÎ/|‚ŽÐwŽÑ'ý )}å@ýÔ?}ÖoýÂ}Ø}ÙŸ}Ú¯}Û¿}Üç!ÿ@(Øi˜0‹°Þ·N(€(™z0€Æ(þã·ˆÝï}Ĉ$¼P~K~ÞgiÜ0û|80€ŠØã/™À8€F1¼R~Ìßê ³~ð#îÈñþzÿÈùxûò(°g„ *ÜS À¸}Û 8¸ÏR&t1¡%@L,Àñ$Ê|ìƒÀÒ–(g&t2À>¶àD“f½!Ô³DòáÏ“õ°Ø”€q<9t! VÝf€@¾€½šÐ+€ûöضïë6"Íî[Ú¡Îq,M­JaÖ­ûئÿ3ìØ²tØÆ¸¯U¸rÿÆÜÆ4잸€ £¬Ìá8ö°ÔÀ_Ž °4zŸ€ˆ©;€'µ€|k_ÏÞ7.@¾°ãJŸî½tÀA½ ì1p``€z”)",à^OÁ|Ò¥šaÜnÄø÷øAìõƃçºtº\[€“vîfèÆø>,vå™D—¦å•L«ýÝITÖŒ&B ö¶'ÔÃsÕé7›Êa8à…€Uîc!ˆáØÄí3€lÝ †P=àÚrsýEÞ@Gmƒ›nãX•Z‡¡±Àp¦Ý˜£Y3bÀpä[BÒÿ¥ 6Š—›oKþE™S‰I%Chv'º›n½…Å OãtHÚœ½QÅy!†l3•‹ü]Ø¡•€Ô(åjU¹# —¦FdAã`‰KIîH`re9'¦¤WYÉS=‰ïáSœš£«)]€˜>Žén¥¾yB®'žÐ8x·½;ï½ûþ;ðÁ ?<ñÅ<òÉ+¿<óÍ;ÿ<ôÑK?=õÕ[=öÙk¿=÷Ý{ÿ=øá‹?>ùå›>úéWi€l\ªÿ>üñsOÖœÿ)?þùëÏ<ýÕ‘Yó¸â(KÔã+÷A×CPg€0i]>IœØsµÁ$LË2'¶¿ rðzdÉkrs,eé9@ÖD#¢ŒPEm! ‹À’–*€°x%¶ `…œ€ ‡ÕÁ!1ydÀŠP™Œh‰QÑÕ¸"Ãàd1ýxÂÄèˆÆH´U†Ú•ûˆ¦ˆf<#òúGš´”qa®PÒqß! T^c¿|`È QVHÇíh †<äïÔ¸GgEa A1œ—°¨%¹bN¢ÂȰà„-ÀVT”¥ü°-ˆ<%*{£Èܰ%‰"±Ìÿ@¹ÂqŒpD/Dá ­ÒÊ.‰k Oh ¨ô)•Æ<æI¶±‡À!|ÓÔéx¤ ½s¦„`¥8 -SpôM7‘)Îq ,B$':Óùó©Ï}ò³Ÿþü'@*д =(BªÐ…2´¡}(D#*щR´¢½(F3ªÑr´£ý(HC*Ò‘’´¤&=)Ù£Ò•²´¥.})Lc*Ó™Ò´¦6½)NsªÓò´§>ý)Pƒ*Sµ¨F=*R“ªÔ¥2µ©N}*T£*Õ©RµªR-\ñF×;­nxVý*XÃ*Ö±’µ¬TÅ*ñ¸ºÿ;µ®Õ«f}+\ã*×¹‚­Ãc«ÆðšW·Òµ¯~ý+`ÅjWáéõB…5,_«ØÅ2v±ƒ ÞagYÉ&¶±–½,f˹¬r¶³¾Ë,hC+Z§>x“ýËiQ[ÙѲ¶µ—-íïR ÛØ®Öµ¶½m_gÛÕ´O¶(Á-pƒ+WÝòηI1îqk+Üå2÷ª›å-t£Û»æR·ºP%n[¥KXåZ·»ÕÅnÛKñŽ—»Þ=¯pÁ»WíBÖ¼è}¯mÕK(ò¢„¾õu/|ó+Zù"–½¦Å¯~üÚçÞÕ³þ€ÜZþöƾqðƒ·kàöú—¶ö„’a…l˜Ã¾pq'Láÿƒ8»$>1ﬠ⳸Å.~1Œc,ãÓ¸Æ6¾1Žs¬ãó¸Ç>þ1ƒ<ã-´MÈF>2’“¬ä%3¹ÉNV2‘5öä)S¹ÊV¾2–³Ìã(JË^þ2˜Ã,æ1¿˜Ë"3šÓ¬æ5³ùÆfîM›ã,ç9ÓùÊožMó¬ç=óÇwNMŸ-èA×ùÏ!4¢­è/š.‹~4¤#äF›EÒ–¾4¦mLé«dºÓžîô¦“òéQ“zÑ¡þI©S­j>Ÿš&«~5¬ÛÜê™ÄºÖ¶ó¬Qrë]óºÊ¹>I¯ƒ-ìI‡XÄFñˆ?Œìc+»Ù»-qxÍìd;{Úÿ•6¡p íms»ÿÛÞþ6¸Ã-îq“»Üæ>7ºÓ­îu³»ÝîV73ú íÔ¼»Þö¾7¾ó­ï}ó;ßñnpo×ï¼à?8ÂïýoÊbûB 8Ä#.ñ‰»{á©é0îNñs¼ã/¸ÅUÛðÞ|¼ä&?9ÊÇò/üw)9ÌcNñ•3à.—9Îs®sË{ÙÛ9Ѓ.ôrÓœÀ>ÏöГ®t¡=¹#ŸÍÒ£.õ˜7ý'Ƨ®õ­s¼êå}:½¹.ö±'Üë3¹ºo²Nöµ³ç6Ÿ÷_Ú.÷¹W¼çÕþ9Ýó®wr›ý¾`ûÞ/øm÷ý$h‡ðà¿÷ÂGøïoùÑ‹ w»SûÚ‘ÿ—|ïL§ùÍs¾óžÿ<èC/úÑ“¾ô¦?=êS¯úÕ³¾õ®}éÑe<‹ ö³ý틇ûàíþw½÷ÝïŸ{ÝŸxÁÏ|ñŸüá+Ÿ÷³_¾ó¡¼ãóŽúm³¾Æ°Ÿ}æ×^ú¾~óÃÏýè‹ßwÅÞù—þß­ŸýÅk¿ùß/ÿù£´þö¿ÿ1›S­Dʦ$º ÙÛHÈNðÎDT„3eÄ9¥†ÝèDy ;йAÔ>Ä\(ˆ—´³H‡žØHïÜPKàÿ¡Œº…ÈÖ3€tÈšßI XÅÚIL¼F˜ŒyyŒfpÆîtÅW†ANÛ\ 'ìNHF^ÿÈS'lÈXPNÛx‘@‚'^ˆ¯ ªl¡¥‡”„aïÀýÜJ7^H>8Fã¸EPÀâUäÿŒ^l;ÑÈîXެÆÌÄÅðŽ6rãž–#œpGa…ü 6„¶ï0LàËÃìNº€†”dKJIa@‰ †—`ð _ Ä´´MØOa„‹(æÊC¬L$‰·hŒÝ€Ç¼FI¢VF^\€¾ü…HÏì— Í]´MØd‹Ò0 ïh…θâ˜RÛÂ^ŒÐqÍî…ÉELðM-¶M¤Üs(Æ„èã. Q.“Ç@W^…S²… :‡<Î ćè˜w,ëäUì`È5Yd∄e ï<“lLÎVe`8‡B naZ¡6ÇJΆ^J Ý\È`ºE@!ù,{*D}‡&&&777IIIVVViiivvvMx¨V}ªiwz{ˆyx™i¥v} Y‚®]„°~ƒŒ{ƒ’e„¬fгmµy†§rްz—¹Šu~š~l•yv¯{[¹{X©kx½ch¼kvºszÜ|6ìz/êy8ò}'ð|2Ý[[Ö]aÏc^Ê|OÉzVÞhOØgVÙwGØx[ÇdiÄksÃzhËrx×egÕlpÝqiÙwyæ^MãWUèeHåhWêzIéwWãhfæsgäxw…z…‡{˜“m†–t‹™”¥m€ªxŠ¥}‘¶z‡Æzƒy˜…x¾‚I¶ƒW«‡g®‡rªz¶Œf±q·“r݃.Öƒ:ô„ê…&å‡6ó‰)ñˆ5ò‘:É…GÇŠTÉZÓŠHØŽRÛ‘NÔ”XÍgÅyÛ€{×—hÚ’{Ϥ}ߣjÚ¨xì‡Gé…Wç–Jç™Uñ–GñUé‡jåƒyëšié–wð†cí \ð [è£gî«sî±|ð¦gð¬pô²v‡‡‡‚ˆ„™…œœ’Œ•••Š‹§ˆ–©ƒš¹–‰¡ž˜§›±‡ ¼›¦¸¨€€¦…˜£’„¡œ™·€Œº‡“º„¨Ž¡¨—¤´¬¢ Ÿ½£Ž¸§™§§§¨§µ¦±¾¸« ´­»¾²§¶¶¶‚ŸÁ‰£À—¬Å±Ç¥­Á¨¹Ë¨¼Ó´¼È²½Ð­Â×¹ÇÕÈ€‰ÇŠ“Å’šØ†ˆÜØ™Œ×•–Ø¢ÞŸ¡Ï®ŽÆ­—β—Ù­„שšÖ±ÑµšÎªªË«³Ìº©Ê¹¶Ö¢¤Õ¼¦×´·äƒƒå啋嚚ꩉå¤í¶†ì¼”奥麣淶ñ£¤ôº­ò¹¶Ã¾ÇÕ½ÂÉľÙÀ¨ÙƵëÁûÆšêÅ¥é̶éѼõÀ¬ñÀ¿øÒ¬üÛ¼ÇÇÇÃÌ×ËÒÚØÇÅ×ÏÐßÐÀÛÛÛÁÏàÇÕãÛÞáÜàäåÅÅäÏÐç×ÈæÚ×óÆÄöÝÆúÞßæáÛøáÌôèÝäääëíðîñôòìëóóóöøúþøòþþþÿ÷áˆÁƒøÒ­:G¸U鮂ˆ°¢ÁŠÝº|×m^Å/‚‰oŸÉ“(O–Kɲ¥K–+_Êœ¹/&Í›0qêT¹s§Íž7â,ØÞ·¢Hé™Â°ªá* £a˜Š\Ò¤G¯êÁ“^<>xØ]‹4+Ù³i úr-Û–nßæ”+3.]“vïÖJ´¡Ù¤£ª6‡¡TpK¡;û·h6®\` жj™l6°|”a{ywÚÍ¢áŸ;¥éžÇ}O™\`ê±éQxð€Â¡©²×>Ï7oïI5×ÿ]Γü^óçÉ7ǹž=ꢽé¡;4½ú¡À£cPÌ<øø˜‰×zí©…^zËïùEÖR°a[TTi·»X™€£1hž‚ ªçᇠEÖ(@Ø£¤cÊ(¦„S™†>‡!‡Â‘¨ãŽ Ž(bO}™8–(,6„¢(ÿÕ˜¡’8×#Oþ(å”CÙXŠ£¬8J’JÎȤPâxa7æ€@Z‰„SÁf —]öWc“ÌùXÜ™–)ž9îd|óUxÈbÞÑØ¥¡dÑiœbÈgzîY"€èU9þ!Z£¦W)Z•2j¦¨£¦ _œhqšé—!Féê«¡‚ÿ«N¢*§­W©š˜²JJª^.úëKµâš+ª.Â(ã©sò k©‘Þì§½ÊT¬±júWŽTTÑ&äÎÞ9¬´ã†V.K×bë`—¤–¡ºå)^çžV/PÓÒ{ïIéª/Rةݿ¿‘Y-¹û*-Â~fklcídƒ6»LÏlë‚Ûª¸ w–°NùêÛ0³êfL;’á¡Gwhµ›ß»&ƒ7/‚Ìð³¾vŒ®Ã¸šõÕdÖl¥ZÛVè-Á3‡¬´£»÷q¿ØšÅÎd µfÉÆÈs€áÎZ³Íæ‚6­[£jÖc”5Ë"Ý5´8ç÷Ís»õÃEYÍU<Øàÿ±Ç¡¬\÷؃¿µôÓeÇù—25.–’noìõä”Ëýuá)ÝÝsRÙèÁG2C8šbÛ«³é˜£^%É%sÚœþ%ÝtPLŸŽoí;õÍî¼÷îûïÀ/¼ï»¼áÆk ¯üò»7TÎóÐG/ýôÔWoýõØg¯ýöÜwïý÷à‡¾æ5²“ ;ÝúXd íe³’Ã}ùüòWnùMäûÇ8dz´cV;Í0Æ2Ö”­tåg¡»UìÞv¿úÙn„ Mòç¾}n+ÉÈJ;†ÁAª£!ñ¸ZC’ÁÌDNpôk U,Ü‘u]Ëëè±<ø¢!ˆ1ÔÑ ÎP† ©aÿ/´Àø±P‚+l¡íngª˜Õ(„|( wÑÅÃø =,˜ . ~(Œ áR¨ÄÒ©‰ó½–ÒÇ8ÌbQö§²¾OcaL"è±%"gR¸ZXâ _t'‡;ìá0ìx²ó±íŽEÌ#Ç(FÃÍŽvMüªnƒ‡8ÀnàC6šƒÍ ¡ºÒ¶¤P€<‹ìü2’qe|¡ã45¿©=‚0M™ 8há˜ZÀF+óÖAÊ’¹¼%.ûhF&Žl—]bœ5ŒRô€Ìà 1ù€=h Œüb Ç±Ì²š £¥ÓàO]jÒV$¤˜.z ÿ6@†sÐÂf‡d®ª(íÄ¢;ÍiRRÔL5íI0²0tnàÁŽÑ7:t  ¹n©B!%¡rtgC#*M–VòŒ/E ýÓŽAj =F6ÞЃlA xÀ†°C`àM¾ù "yØN†1š1hK-‰8Úª{((1 ì@<ØÂ® ,`a ›˜Š· ¹Áf.´(ìPF2Þ±Ò‡B5ªõœ*U¯yOcµã ~«CH@‚8xò˜XpCdPqÔ¤º2€¼ÊúðÐ oèC’w¤]ºWzÎTI¾Œ1á` m˜ Qø ×Çúæg¥•G7®YÎÿ¢›u)^cÕ‡E ÉÐB’²b€5wS\»mPÍ ÝàCmu«ÙÎêUª×åWEGÜ-paÊ8Q'›.ta&õsÓ†èN7·ðïm3[]™n×?ñІ!Aˆ‡-Àa N ê#ñ0¬!"ÌÅ lµÁÚ’N¢yÍn„q+_ûö¶FèxÑ'òJQדV°B¶à0€¡ °lH8L‘ \$C™XAJ3–±Œf€ÐÉP†X&[ÙË>Xµ¼äSm;_bÝ·22D üK<Ì0mpŒ1‡67è :3ƒá i#Y;¸Œš6®„qk]­»Û Ósÿžž=rË ‚‹7DaßèÛÐrX ”£‡ ˆ,˜:ŒCâ yè!ÆPBz¨Ã7(³"Õ¡Öa2Ú°FdØöN»ù͘u¨)Š+ìðGE[C°˜ÖC0B1˜ÁoP*”„ Ú˜³¬Ã”ªc=àËjH±†tÈpöt²Û¼ì Êù,SIã¨pTÆíyËXŠƒE®šÖ¶ÎF:p=™¶ª#9<¥ìaã¡Øû1³×Ìf ™ÈÚ½°\ö1˜X±|˜a[‡ñ V´‹ì,ô ‰EµÒË0QWÕ]éaÐÓš¶¼è]{߻¬*6µÅ­Adá˜\ÿ€qÕ°¨Ãv0ã?8e¹ìe0;Z‡Fië˜9Xæ<¼A bx+Íñ‹ºè®oÇgòÙݸˆcxÚœN)v² =à ËÁâ5$ƒ•m5†,xNטÛŠ‚¢`ˆµ{ÞCÆwÒéKw»=»2Ú4 6âP6ÃŽÌ'‡N–ŠgÙcq™~øCô¸ƒ|îuü§=ÝtßäÓ(Ùèi1Cf€ÅhÃ10Óuã­‹À¼õvýèï­·ëM¢;æÙ¾w¸pCò¾†˜á¿¸h`^¬Á ¹0à l°ƒð"x¨à'P¡¼©ðî0ïœ'¾î{ÿûà¿ÿøÇOþèU~7fæO{Еe”Ò”Ã8FØóæÿÀÛIY U´Åìñ±÷q²§tG]È[#§$XJrçU;Ðmð=%P&@¨GG¥H5åpŽpHPn‡t“wŽ7€rW€-q~ÿQqÆÐ|=à9: q@%pNq°;@xJ±\ôðèEt3p7ðV­w€Í6{+(…SÈtwçX=9°ËyƒÕƒpPhc|Ã}0 ÚAG8K¥Hvô„‘ç‚/…sH‡1x…_ÔÈÐSÆP_EzpL[`?ÀY€ ?oà‹ÿÐÁU³ ÆðwU„Ãà•€òF…£¦lŸÈ‚ha ¨8pÅSHpÐb…;@[ 1~Óì `ðT! GQqô:p´ >'‡uŠ¢˜'°7ŠùVŠ€#Eqð[à]Ÿ¤dÅí.@-Ôx="güP7ÕU=Rñˆ‡ ^ Öb½“׋5Ûñ¦Û‘ÍÛBÿ™ÂeS4-ÑZ–*˜õAM¥pp ÈŒG0ã{@1p’0 ¨C>p¬ 7ðu@WŽ–Ûɬ9MÙLÛÛ^JAYSÜŒ´¯Z)Çå-zЦ[ ¨ 10Ã0@ ` ¦` ²Ð ˆ€Ì!>'0Ã-°=Ðc(¤–3Á˜øÚ´¶½à•-…±lBJ =Ë ÌÀ[07àGi5À…àÐ×a ²0G'p7Ð;psÐ`‚ƒã2±q;îà’mÂpýÖ?IàA[À ¡ @x ôð @ ☗ûF…f'Œ=°åJÐ^~°ÖN»Ö†ÿnæ}Ðß½èà=Ű³æmÞB¾r.¯ÀÏD *¶çt-MÍ·0À øðÕPR…z›§úÖŽ~抮ЎžææíD= åçl  E¾ C`0ð 0 4 !à¨0åGp(p4Ð,б ñ@Yú<cˆ® ŒN¿ >æ>ëŽz«@ ‹°Þ•ÁXR¾A>€3L PpKx3œ.½.~å9Дմ=°ù`>Ùeë;íÝßMëW¡ÐXD3‘ ­Å tN¤ªÁ)­ï1$8|4p9€9ò)ßsUÖy–ÛùAÿ23áðÔÌð:ó¾]îW±àÀ Á«îcAµÜ×`H±Aˆ÷ íXÖ •5àU8°-ž:` ?àéòh§˜‰ÉÞî÷*îà¾ðx¬óÎóIÑ.Mñ OQôd¡çHÒ À`9' ¯kñz(9ø~_¥ À8 Yúõ…öpé)ã<ÞããÞð6ÏЕx‚ñ Dépˆ€BÀHðÏIELx”0‘Wî9xõX¯ Íàˆ_›ª~ðˆYöd¿ê¹-dj/ùgïûÓÚÐ5²«ôDxáÐÂ/̰0Öc¡¼0‡€ü<Ïîþ®ò)¯õ\ÿ/ ¸Ïí°™è|¬ûÛÍûáùdü–®qá"ñÚLâ£ÀJ–`•ViÁôV•š%‹Ø«fߎÄ$È9$ê˜ã„ÅÜÉ{·Ï#>=–I¾&E®ÜG¯\9zûð©\I’åMœ9YÚÔÙÓç>ž?…ÖZTdP£B‘ i’Þ7§&ËQxPõÁª¨Yµ:]EjÖ¬èaÀ@Õ4€¨£§Ž‡0q©@†Ñº!ÉT:cÔé" 4lüxöŒÏ5IÌ’¸™Crpܬ(ÿ)£­Fù||ÏÑ!µQÒF)­44E:ÇI/UYSœÒ9gÔUNIå›UVQÇ}îÁ›lØ”µq„iwàÉɤQÓQ§f¶Æ˜bªiGI÷.j=—hK(K••ÔH£¨í,Zi“Bª ð‚sBóÌžQB …* (d“eÚñ0ÆHn’CZ†|e™{nb¯pPE˜ûˆjªI&š ]–F§0‹)Q‡-µöÚh/ []ÉžSB% sʧÔUÌ9¥”oÄɬ¥`j©FzÎ9UY„q¹á–0Ãl•pÄ‘E–\ÄqYâ†óK âf3£¸cŸ Žšcÿª«.9㡘 ŸöPò¹ÙdÿõÙç–¾&Fó£1µž]8[¥¦ÏjJåM?JÙcT'Š›E©i‰I›2—¤úšÇr ‚©½Isê;¦¬0K›îº)‡Ôî‹<{sÎ;÷üsÐCýPö`³EW}uÖ[wýuØc—}v×Oƒ´)®iôií¬”\¸i°kûìoöàôÅßöX'­!‡Xy©2ÛŠ+ÇÚrm%Õ½ŠϪmÆ[zÀ}&Ýøã÷'õg•þzÇõ/\zG1Ôbìë·O{÷¸ç™yšNzãûˆš2c¾Ò@§ûF긷•pMb7j˜Žœf½ëá/ƒ¼šÿ£pwA£€mpâCÖÒÚ¸ó)p¨s Tö¦ž%iæ&Ûë^ܨg?ÛqP‡C¢TÄþ·¬·Žp6aOTÚ¸ª0}ã{™÷ŒH? z­†óÁa1xE,)o.yaÖ‚D—¤zÉÃL•ˆ<³Å¤‰9:¡8¿.î/Tœ#ñ¶Ã¢ˆ0|z»L¦žWÆ*q…‰óšîZ¢™†Ï‰hÃãåêxÇFV+4¸Ë¦¾†»ù]R€DßÒ·’oÒ=é‘ µþ0{ì` É<~ïQ£)ÐË8óoåð¤&@ñBhb5/K±”J\7då2›9·¤àŽ’V4¥ÿrÈ“€ i\Dåé@¡‰ô Ó`žJš‡Ll²Í™œ;ÛÙʬ…í‡v3¤Þh"AlBî€¦é  [¢’påœXô XI†ùñ C©bãÞéJýÁòae|êÉÅ{¾äG,ã>4áËr€sóšH–fȦÅñ~ƒçC]úJw®Ò(Ö|ÖòªiLÁýÑp>ãZŠÒy(o ÊÒj¤•ZñœëŒ¤›êT¦ÆR™=¥!7ê¶„Fls;"銇:TÐ)Ę̂òî–Lj1¦6\+[[:”iVôa8zbÿà'Á³-选Ó!‚ÙBFæS%Åo7ÊÞ3£EâOÃj,/¡“|dÒDöлËT`#ç3 —Ôz†dÛ›Òò™r«xe\) wJèͺ'I›t™wýlhï„vÓ¦vµ­}mlg[ÛÛ®¶’ Õ ¯Ù»=Kõ6?"géFMÖ‰â%ïJæoÃ;Þtnòb GFÎiÄæhï$¬l·uºZÿÜó_–Žkg;6×=v´®» :®21¯.ï6 ›ÓÂñW•=± gu7ÅS7á ‡æ¨¾IÀ•òšVµFQÚ^«¡,M s=nÜh|Þ¼f°©!4ÿaùµfõ¢•å[µ¢4¡Aÿ†sÎBZäž:¥«þóZ}|Cç²ÄLˆé"+]©éáŒAåg(²÷Üä:ßyŽ×^ßðî5ììm5fЪáñmÜÈ,98 y¦&¾Ц†5p½yžs†/Ü'”«VüpCX¬äM²¿ØÁP|ß3¢¿2ßg½S•äl—7½Û>׈Q–ß^ýã8¼±Åч³Îo1µBÝûª×ô¥Gÿ<Õ}ox¸â4Gäö(O¹£ÜÇæ¼Ù}t¶]Ty¸çûªQ;U‡_]ê¤ï½jËÙøäû “®¶;–¼z罆7öø¿_ÐÊù³#t{ŸŸ}í‹ø£¤m¸‚³…1¿¶A¿•k> x¾Êò®Û#›³3¾´+9Û#¼’»5î«¿ü³ áÛ‘£»ø©¸–ëÃ;v›=Õš<9©Ösžl,c¢Àй(eC± T;…Û?Ô³3ÏB2s+¥5ãÁˆË+•Šü£ø“ F —Ã9*µœ²<=üû=)„¬’Ú‘£²0y"ºáIÂ=z¼ 2Çë0©¸<À&<».â‰ÿ ƒÁĽ ¬À ÃL%daÁÜ94òB§æÙ´Èà²õБÁë³*ª­¹¿8œÂS<©[šÅ“%š¡2”»G,0–:¡'ÔÀÍyÀ§Ã­l1Ï3 ½ñ¹í£BÞ‹ÂxR¨‘;"›¼e3;–².r57‚°ã,!ó6OÛ, 4ÅÝCD_,»7 =tó³Òq Äüâ¬Ã1Æ'„””ƒŸLá·W”"$+­â¼OÛ­?Lºe,<Ê¢5ƒšÁE<³D{/y´˜"‹®4GG…¢ŸÚ3§r|° 6n„"¥é»ñ"#w,Eg;)]Æw4Œ³;å7'ÊCÿ7”Åb¾ÜCH“ ­Ÿø®Üž^|HÍ«¡y$Eú° Éq£ŒËEæÁGZëZœ¡28ø; ¹1|IŽ|Å„|/ø’´’hHl¼FmQÉ_û¢ä@žT¤L»"JÀmŠœüEc«EÊš0ŸdE« ³¾!Jk,Ê—<>—³>Š ÈããJÕJ´7[µ¯ëI <Ý«HIT½ç˰4&¼Lij‹K*ªÇ4$¶C[?Ú»§Ï“´ði£H œ& ^Ü ‹#Æc¦Gľ“ô"Æ3ÙÆ¾<·Í <}ÜJj¬>ž´åôøžÇä.ÚÉ›Åȱ̧$ÈS¾7„ÈiüF™³¼´,ÍÿtºËš0Âä³>µDãôKÓ<6 Œ, ”šÌüH¥¤ÁùˆDµd:¿[#’IuK5 ú;+¼JêãÌûÒ*õ“§çÔnkO÷|OøŒOùœOÑÙË`”¼õ¢Î:ûMÞNu¼+ÿü3´™³Kþij”C¿ëM4ÓÁ‘´O’T˜„й²5´ PãD¿;ºšhƉK·ÀCÝbÈwËtÔ¼ÔÓM~2nÌÆª3P }!ÁÐ •?ÿË$žižÈk¾ÀJC=¼ÎÊœ¤NÓ2 4JE¬ÂûLR©ú—<„¢ÅD¾’$¦g”Lº‹Q$]ÐÉX—ÁM…íF¾DKЄ–b.$Bÿ¦tüÃt¯P31´NöB:€‹SCýœ©²2S(-:²Ä´Í[Ť¨‘ 2ŒN>UE:Jr³A=ÍMÓ|tRÚÈJòÊÏ»¢Ò³ÒÁRHmº;L§.MÎ=UR…œÔ`ì£.:)|ÔQC3¸#0sìM Õ¿uÌSD1G#µÇ,]RJMÕÒ»%ÙkKEÊ»SÌqQÖ›ÜL 9ÑSE6ÆtPíJ0V15EMsÀµ¼Ô–,KÝ‹»dQäÐÔ0¢ÉieG…N<ýU`5ÅsR'òÓ¡zSðüµ{” Ïé#‰tsJµº/e —üOyÕV± Õ1«W¿¹×œÊ×ÿ‘ ¸/*¸2"îÌȤؚÄU¦ÌÄvuMUÙ…ÕUU×íV» '%·OÈ‚¹å,ÆCW@3“ ÎÐSØþŒÆ†=XTeXk$VŽ3»Š•œ¤mYW]¯Õ\/WM€TSÒT©!E’¾C.àUåZ”Ý9V¢­©ð´E§}–>b׌“<§\KȬÙ]¤´:”Ôm S‡$Z&U´Ý,I-PQÜÀ Ä®­[¼ÍÛ ÙšC«ÂÎe@¬Æï£Í6Ü»ýZ¯uØ”}JBeÆK©LÈ|ì?«™\¡%\Ë5Ý“M]ÈÌCÑdPžÉ›rNÚÜÒ­\ÕÅÜË¥\£À^51ÿ=Òý„[¿‹Ÿlœ[lÍÜÓµ]Ü=Eã QȬ¹ ÅZ»‚LlLµ4Oä½]Ý Ë°¤ÝÚ¦itÃT]Ì4CÜïå^Ã=\ºå9Ò=ßXMàòG½\^í5ß`M^ôå¾öµ_þÃØøeÁÈÒ^EeÄÂUY†õ^þµÂºl2ò½ÞÝÞô` 6`üm^ì¥%¤ÕÆòĦêe7xEIúU^ŽÃòu_>%ÃùHÛ·]ܬEÝÎßû}á ¦àúåÑßP …a»Õážá¦a>5:C!Ù•6úLb%^b&nb'æZâ –â(¦â~Ê—MÜQ}à*þa/þâ>ÞìbøAKíD”ÿá.Æ_fã&c/–VÅàƒúà·ëavc+¾b=æÙ…ZO5æã0cá7®bY$äBÊÜ]ã>c8†dC†FjdõUäKÆä6ä ®[võÙ àl•dGŽäG~d9>â<æâCdNfå=^_lNKÞdS¾e\.åIÆãXîäEå1ÎeWÞeRf]&fXæee^æS~åd.fYåxfc®æh¶ed¦æk¶fM^egVå^öåL†âcæF>fnçq~æfàiÎfmVgoŽgrÞæC6çEFg{fæv†g}Þgyne€†ænèþfFnd|ät®ç‚6è€gÿ(^èufg„®åH}h*¦hlö熶è‹~gæèyö胦g‡Žh~vg6é“vi•^i˜N阦iži›å’þçšFè„é–Æi†èžF顾g‘þè›æéœ>j™fê‰Nê—jp~j¨vj‚Ö袦êŸfh­îg®&é’k‰^j¥®j«žê³Fk'nk·~k¸ŽkÕiê®îè«Fk°¾ëºÞic&ë´VkÀþê¼ì­i©l ¾ã¿.ìµÞëµöëŦkŒ&`Ÿ¶ã­ìÃfìÇÎì†ìÁ&lɦÍË6j¬í ÖkÏþlÍFì\NmÒÆëÄVlÕ¦kÇm³¶íÛfm½®íÿÈÎmÝvm®æí¬¦màÞmËÎèÕÖíÍælß&î|ÆmØŽmäNnÓêânìë†îèkÑækåÖnážíæ®îÑnmæ.mñFï×oéžÃìþní~oø¦îñ^jùvîÓïû®oõÞnÔînÊ^ïýîoÃÎïù¦oÇîóöïr^pönïQNo×ïç>pþžp Oðå–m°p ÏðÇoð Gð'ïéFñ7o7ñ×pqpñàöpçîïlŸì'ñ¿ðÇqfãîq/ë/òs¦ð ‡ñßFr)·q§ò.þ,Ïr-ßr.ïr/ÿr0s1s2/sÿ3?s4Os5_s6os7ws–øl‘óh¡ó:Ÿs<ÏsK±sJáó>?‡”@w”A't=ÿóC—”BŸEgt@OtA§žF7IJ·tH7ôL7ŠKÿŒNçŒOõMwôQô;/u¡ø*KQuJaõVÇW‡”X—uX¯u[§\Ïu]ßu^ïu_ÿu`vavb/vc/ðM(P(€(z0€ „ùxöh÷B`vн‰o j×eçvE£s|80€˜øh/Ï8éiv™ öP_‰oo  :_vu/÷Èw@ vÏvmÉ÷@ ~Ÿz÷th' v×÷ÿqïws|h‰úƒ‹‡È"„؇tÿ†pwL €¾zÐxL9 ó—Hœ‘?€ÓI Bð›ÿ†|LJð+”O Ÿz~€âÉ÷ok!—§ót/¦š¿y£Èùßtÿ†tz¡ïö8€o{‘›ß¥gú¤Ðøopy ÿƒ¥'„²?ûœÐx­7€‹'„d߀š?€÷Ä¡@‰?Ø{q €r(qü–9—z0€Â?™€nÿƒÈú(zù¬'’ ³7ú¥€âÁ|*€š³y9ÿ|°1ËúÌß|(9×|ÿPýÑ @xfŸ}ÌWýeO w|˜ù?ýË_¨ã…‘ºxÊ¿ýÞ7þ€ É߇g€8Ô÷Õêß}m?Æ÷ˆ]â õ/  ½Ÿü¦O Õ¯xv‡ŠÁ «ˆ},¸ÏÀŸ}å \M”3h± (A! ºhR`9„"NüŸÂ'Mâ3 Sà· Xî£xRgÎrø6s¦ûðÐ$`£È£&Aø–Ô£ûÀ”jqhF„ð@Ï+Á°bÀr¤D´œMZŽ€&z/j”;2áºdãšõ»ÿOí€ô x{0.ÚšJ–u ó®aM œ¥W é¾²g/j*P€’QT4<ÐÀrÂ<۵بJK,÷_…OCMÈ´«\µXoìK”kºûþ˜nt_i×C} üÛxähÕJ§'@ís¿8 <žÞCìJå:Õºµm{ðâ :h~|ÞÝœKc=EÐnR(ü‘p%ÔBÐãÒ빆¶ýÁ”m\E7QF1ö t† …¡f pè¡aè=·‰˜ˆ–^° ÉŒJ­¨“_$f›K¶ #Îg‘‘¹…l(XåRÐb… ÿ`€Vš¼œŒþ}©•—ìçU9qýñæ% uƒ~ÈßhÞAæW™jÙbškJÕ¦”ÞÝ9gRÑçÐÚÝn†Âh9ŒõèE“V¸)§zú)¨¡Š:*©¥šz*ª©ªº*«­ºú*¬±Ê:+­µÚz+®¹êº+¯½úú+°Á ;,±Å{lZ´æ²Í:ûlª„ U{A{-¶Ù'-µ{uH@Iû0V^¬×"u8JRä‰`I^–SÎâ&´KBíd¥¶ýúÛ©´í ÀKtäQlÐ$jkh°CÓJÛOAŒ0G„hg©)8Á p´0¿ÿš|2ZÒ2ÿ¤ðK '@x.WäÐyðÐÆã Qµ9½LWj0äVÓr¤nj(+½´TÜ¥aÒ¡µ<Ÿf ³¶0Ö$i¸´EU-> 0€‚B›‡5Ï}Ä4Ûmä´ÔLqÅTÌ"ÕDD;7äç7ÒJ„šosß<ÝÂ)¥ÝSx‹‰<­Û3 7Ø Þ<Ù>lM”6ÁôV¬pß +,“ä ËÉÔ%M¬°&Ùç8ëþ~óÇhš\(f¤Óµ¸Ø™Ñn”ß°uE;dq;T[*D|ëÉ+ßôÖË;ÿ<©šP2ôÕ[=öÙk¿=÷Ý{ÿ=øá‹?>ùå›>úé«¿>ûí»ÿ>üñË??ýõÛÿ?þùë¿?ÿýûÿ?(À°€< ¨@îÍ«| #(Á R°‚¼ 3¨Á r°ƒü C(Â" „&ó©Ï}ò³Ÿþü'@*д =(BªÐ…2t¡×h(D#*щR´¢½(F%úÐŒr´£ý(HC*Rnt¤&=)JSªR•–t¥.})Lc*Ó¶t¦6½)NsŠÑšê´§>ý)PùÉÓ µ¨F}éPªÔ¥2u§M}*T£ÚФJµªV½ê¨ŠÕ­rÕ¨Zí*XÃŠÓ¯Šµ¬feéYÓªÿV—’u­n}ëDÛ ×¹Òõ r­+^óÚÏk0󅌧.ýzNx –óükaåyØÁ"v±hÉd#+ÙÉR¶²–½,f3«ÙÍr¶³žý,hC+ÚÑ’6´ÎÀ$nJ«ÚÕ²¶µ®}-lcûÚÓ*Ö0²½-ns«ÛÝò¶µ´ ¬kz+Üá·¸Æ-ío Üã2·¹Î}®n“+ÍÔB·ºÖ½.v3+Ýl'»Þý.x™»ÝpR7¼æ=/z];Þ ‰2½î}/|9»^à´7¾ö½o|çÛÇòâ·¿þõ®~ÙÝÿ¸ÀÏ °aêkà3¸·ö‹‚,á ϵ˥0†3<ÚrÀþ0ˆ5Ëa´D8Ä&>qF¬Jþ¢¸ÅV±,q!ù,{— ‡ """***555;;;DDDJJJUUU[[[dddlllrrr{{{Mx¨]|§}nŽs|‰{~†xzut—pt˜wytzz{œo~¢p}¡Y‚®^…°r€‘b‡±d‰²iŒ´z‰¬u”¶v•¸}–·y—¹~š¼ªk|¾oz¸vs¿tæ}4Ü\\Ù]`ÚnOÜg_ØxNØ|SÄbkÏbgÏfkÄgpÃirËkpÃzhÓaeÐchÞ``ÙgjßhjÐlpØmqÑsxÙvyäWVâZYãdTâa\âhYä}Në{Täecâhbänméofärfättä||…y—‰v“u‹¢sˆ yެz‹±y†º~‹Ë†¿ˆV¬’{³qß‚=õ…Æ„EÏŠHÌ’ZЊIØŽRדiÓ§~ã…vä‹qâ’dê•|ð…aø¥bù¨d‚‚‚ˆˆˆ’’’œœœ‡ˆ¤Žœ«“±‡˜·‚ž¾•°œ¥… ¿‹¢¼˜¤±¥Š´†•½š¶›¨¸©œ¤¤¤¬¡¯ªªª½® ´´´»»»†¢Ã–¬Å™®Åœ±Çž²Èž´Ð¢µÊ®¼Ì°¿Î¸¾Å¸ºË­ÁÖµÃÑ¿ÂѽÉÕ¼ÌÜŒʌ„Ù†‰Þš™ÞŸ¡Û¤£Ü©¨×½¥Ö¿«Ø½«Ö»»Ù¼¼ä䈈啖曛軓墢䪪峳澽보ñ¯®ò²­ö½¬ó³±ñ¼¸ÖÀ«ÛÁ¬Ú˼ûÇ›ïÈ£å̶ÄÄÄÆÇÉËËËÃÊÕÂÏÝÏÏÐÍÔÛÖÅÅÕÏÏÛÄÄÛÎÎßÐÀÕÕÕÕÖØÖÚߨרÜÜÜÀÐàÌ×ãÏØâÒÛåÜßáÞàâßçïåÃÃïÇÆëÍÍåÖÖäÚÑäÛÛìÝÝñÂÁöÌËòÓÍýÞÄðÐÑ÷ÛÛøØØàÜàáááççèäèìéãäèçèëëëîîðìðõõàáóóóô÷úþððþþþÿÑ}ø ÁÆ@tXØaÒÁ‡ VR¤§ÄfvNœу†< @û-‰—1(»ÐQƒ#PHmÒÇ‘3SM–@Q£dŽ;vÄ0âê›Zë’*UŠL)¹oä’>ºtÀoȈ!#H•iÕ¯`Ã~m*¶¬Ù¤dϪ­šv­Û¶g¯4xÐN“ua,¢ßƒt.:‘¨‘ˆþð¹ácÔ*4-È|%ŒŽ!A¨XÒ$J)R£H=jZ%,0»0‚¬5m´…m ì@rèÈ!ÛŠn¬Ûßëà7+|ølãj‹‹•[ð ³…Í¢hø·zàƒ(P|StBƒ†]•®ØÿXŤ¬€À̈ÅÏ ,ìK›5ÊT5U¡/åøeɘl‹lØBnlUõT` ÔÕ@Ç!Gœ„g)G!ZŠeaƒ€=äAÎHG]u~]GPvß æÝ.»œpE¥”1(Í1ARdá|QŒQ*Qôà‚NE 1!èÀ²Ä)ÃpµÔ†_9¨VõæU†`AI¡–Èqiœ—I1gât(<¢—}‘‘‰q—È"‡%VÇYR'cˆáÉL€ALaE¡Q5¤dÒZá‚ idã ³PƒÎUVÜm¹ívP¦`ª¨XfYªon‰ù/1äškFÿdLq´rÒI0™ÆPÀU\ A LhÒI5 J0»8r‡ E0ñ„+®œA 2QI‰¡ZâFPVÜZá·§^™®ºëŽúp—^úM¼ñ†#ɽÌЫï¾ûÎË/9¼X"°%”xc8^zË,䂎2»D +ÒŒ›¾äˆcñ7Ë°Ò ,®t (Ä”Ì-ƒè.÷PnXi5ÐUì¦ëî»ë¦,³„]­›sY唣T9䔃N:ÉX‚›9–ðrà:@ &Ðè`sÍ5ÖXÍ6Ü`s¹»¹ êY/³•n[-¸U̧μ–ÚÖlóol/§[¦*?¸[oŒ  Ç"‡œÿðVë`Uî:Om%Í(Qp"Š&â„Yò‚?i–·Sù¸w£]jܺ͹†pï&ú褗núé%›|úèZ‰žúnÅèA %$¢úë®§þ '¡üLëY¯úê¦üñ©OüòÌ7ïüóÐG/ýô¥'x*¦[ÍkVØ †íÌ.Ê”#81‚konðÇà>ï7%Cžå’o•؄ϯüõ³óæn¿Í¿çúÜRžÒdP.,̱ÙvCO+9Ó 1Ò÷º G&3Ÿ¦&7:ü­,)!þÒÖ¿ ÖL€¦êRºœŠ%\ LÞ¹6¸x1°eÉ+.’¢ ¦ÎJZBGÿ¸´0A({tà SxÂþ±m‰æšCJ°ì“×ú0÷”’Q|È0Ä: °Ž¾®pIü ÷Pÿ ›¨Â„|û›þ¤B>©î|·)_êÆ¼b #1tq¼÷åшP9ÐÙÂâFfŠÖ££&‡ƒI«ÌÍ8ì£JáW8#N2pÜâZê ‰ÈD®C†Á9Wƒ<5SFé6S¼™w9GNòr8UäÖH -ž’€Á| V €f*ƒdaýØè) Žð–ïKã%KØIÿ)1€ÈÉ ‚˜8ö­Rœ¹áèpC¶.j…‚Yc3YFb åe—#ˆUhIÿ¥¸†[âæ/ÛN`$q[Ðz²­<ðu-;Ÿ¢‹VÎS‘ÜaAè¯ÛHòš‚¤> ÚK]n’Tð >3I!L]¥)œ2§àʆ•L¡ƒ™ó¤g!ýh%)qj*ÉYÊOáˆÒ’’Ш4û4-)À¥ÖeB„©>©d¥oà4§®dŸSÌ'¥—ʲsæzH“zÒ£–•¬kqêþšÊÕ§6P+•ó¹dÕVÀ•K©($j¾j“‰”ûjQÏúM¤®m8.]iü.”XÀýô†9|£¿˜ibÜ5¸€C!¹æX©{Š- mìGT¸ Ô°Û¬#JNµ Ó)dãJSصÿZÎAèØ! Wƒ½ ›B§¿¨>r±Q©j ›Zæ¶Í8¯m­Y@•ƒ”­€°ÅMm;hL1®ã o#A \볬õ–L5(]€’Ô¹EísáÛY•r…eø.³'8³CŒD tÑ[4'{QÔbo Û]*¤¨I#ü% —e©žÚ*«âS*™“¦ÈÐ.ÊË[ñ®Ã¼'cYOéºÝÞ,ЖÞl.}—;áÁÖøÂm=¦ùà¢^ÕÍ•ZAÇ"ËC#³­cËa [×GäÞØ¬޲¡<9û5¿jœ_ù„+:öõŽÃ táác*8"l_É×):™ÿÊO.ìŒ!gJ®3Ÿü'éz]–LĆ0Ĉ³ÒW.²¯¡&+Ù”Šùæ8ÎÙ—ò«”§{gÂ1f~vQV¾†‹Ç…«eûp¨›c‘Ñš“ó£§ìhV«ºÊe/K%˜:‰ZÁ•#.KM)® ’+pƒK7M¸jÓFZ´~!’AÇàÙšÐFW$Û¶D5ÈVÉa“¿Ï${ØÄ®ó…ž˜lJ.Â\kY×°•.gørl¾ÔCg;<¸JåÒ~µ¸ã[ì|ËÖ¸F·¶!JU4»Nó#Ýã iÎ^s “f;m¿Kc8ãØIÌ^òÀ“g@1Z ¹×Gº±úƽÿ:È]ñV»ØÑÍ8°#ûP“ŶË3çø\Áš›œ-¡>…üóq—ûß/Ÿ´£ÇÇðUΕÐÖ4¸9õ7uÑЋíSK¼ŠYò†å»t]îh¨›“ç%Kgki¹Û=NˆgÌ6í]!‹5åøc³Ø]tÑRïï€gî6®íÜ!oã žòPǺÅC¯ð¼ä'½][\Õæ6“#[%ú½ïÃ3½M˜Ès.mµå|à×ý(kHO<¨-×÷Ò:¾wœt ›wù>%Áƒ—)Ö :' (YŽb<ö}—=Å_?ß}–QMwÍOv®N“Ëe¡=ùGù,ظ0Hª•ã~ÿÑ›¿ï÷òÝ轌­LÑw˽¬|kΨ¢¥Ly‰ŽÝ_l`ÇoË_–ÒvÌ'içÇoQ&Ki7u-³>ÕÅ‘³nÒJ'J­§.0ÃQåÄvÚ#K+säwyÉ{ˆlº– 8x W"×ëv’´GS7A.V)ãQ¢—xÄz|Åz7ød§|"¨tª6é”fó`ë3W«”:"UMõF}ËÂwq9#oU!|õW–÷ƒ!èƒ@ˆX nÖUs‘³Oµµy©c7 ækª£MW¡wJ/ ‚oµÑ=öÄaæGáÂu‚è'€BhP²õáw:×@¹³qTƒëãv­ÿ£M·¡QeñAø]ô{„CK „å‡|^Ø…©b_ű`ê$ƒøô2Ç£LL¸f9n… ò}|Hˆ¼AmNuJMöBV”˜h3Ãe€Hg~è·‹8T?Y!/Ò+¼È‹|D|¶U?ITI¥5zÇð2G¶bgSzÂuiê·‰ÍWæ7Œ$8‚ó×2Ê}ªÃŠÎ¨?ÐH8A† ÅÐHÔ‹í6‹BÅOöÅW‘ø:ÄU%õ³‡×ˆ*~åÈ…Ÿø‡-%ŠB•_¥x †f8$ògO¬(„öaÔ–eŸgne["•p‰mDHmY(‚jÕ_؇©T 5‘NÁy ÿU™¦m‹}×Qu‰s86Ix^•)ÌH6¹–Ž/Ö‹èò’žŒIŒ®†£UUüUˆ{%I¼‘‘H)ކw’–@Sá•ËÑ>!~LYiÓÔziá‚•0ɉæ¸\d9‰þTDˆ`bas¿6ޤ%jCÔ—ÁvZdføZ²fmŸ"•3yޑɅ‰ „Á€6jÁ39ŸVºö‘ûxK…g|‰¹lçrh“‡áÔ™‘)“19—iuiç’bdEÁtq9¸Kš”‘`„?î¥VºéoÈ9 é˜Ëך°i{™ÍÖk?‡=§˜— B„.بxÇÙ’xMP$4¸œÿI•Jǃ”=(d©lÔUS8†¬ÅB†cc!–\‘}^‚rmI'ã”SùŸ)—œ”üµ`“°‰ª[JÃR<Åž(A?Šv%%à‡ É›Œ@œªaB¶•ÂIwp¥ÄhÆÄòSÄQÃT<Ãoü¿ÄÄÁsšeBTC+ÂúCÂÓÛqSÂ-šÆ<çøŠÆPl˜0lÁúÿ›Áä+ÇŒì5—¨oèu†;oš= ü©ýՊ멞i¸UàŠ°|%½ú«¸{ʨ¼ÈajO|¦;³«™˜¦ˆ¿[‡ž”y[´3¬g¡Ÿ½9ˆ¦ŒÁÍ+ÌÁ¬Ê¥]‚e£iÕs8 ]YÌÑKº©ͬ«AÃ鯗Y¯•±Ð¼¿\ÃÄ Ç›òª˜ÍÛ³G¯ì©Žß,ÃŽÎq<Í8†Ì×T®àÂÌ¡ŒXÏLÎþÏó<νÊã„—ÙÄaShÍ*®5ya{èÂò<ÌÆüÎmÜ–LkiâË”–>²,!ŠkÐn<ÑíÆâɽŠçª°»; ÑMÒÿLÏ?ÿ{n)V¨jIü ‚ż{GÓ7]žÇ«È:‹¬ÈÓÞyt-Ñà<Å(mÒ¿¨èÒ¢ÓL Ï=ÓÄ­M-ˆ9¸B½§!íÓŒ;¾âLÒÔkÑ)­ÕWûs{(ÁJÓ2 ÔP]ÒDw¼¡M»ÔZ-Ðv×gMÍáô}»éw›ØŠ½ØŒÝØŽýØ¥c<+{:V×f=Ø]mÙ—M×xyÇ­:ú×u ؤ]Ú„íÐy4Éì\Ù¢Ùš ÚÐ{Ú1ݶgË×¶Ø›ÍÙXmڲݼ@kr‹ÚYÝÚ»=Ú¼½Û,ªMÁÛÅmܽýÚ°}ÁɳÍíÚÃ}ÝÇ­ÖÙ}ךšÈ}ÿ­ÝÏMÜÕ=ÞàÞØg4zÕåMÞëÝÞÜ}ÞæMD¿·Ü#߸MݺÍÞ‚­Ûd-ÜðmÝ÷ßêýÞ¬ýßú½ßŽà žÛïÜßÌ}àÝà^áÎ à~ÛÛMà>Þ^ßöÝáîÍá!^â‡,áßß$ŽáÎàÄýáÒÜâ.Þ#îâãÕ,ãÑã"¾â>× nãžâA¾ã9Nä4®à(~âI®ä¾Þ8ŽÙ,nâ>ãOîãQî×MnåCŽäWîäF.å5.ä:ná=æÇå*îãcæbÎæXäKÎä_Næe®á®æEîæknçgîçSNç].Ò ^åfNåmÿ~è„~äÞ艎çÎåi.ç[.é‘Îç}néñ ÙœÞéžþé ê” éŽç¦膮èîå˜>çà¦çs¾èoŽæ¤žê¬>è°îê”®é¥N뗮꧎ê«.èÀîë½nì¶Nìw~ëy¾ëƒ.ëZþì¹~ãξìÌŽèÁÎëÉíÃÎí{^ìží­^éŠ>íÒ^í¿îÚåèŽíâ^ëÝîíº>ïe½îï~íîîÈnîÖ®ìùnï÷îïÎïéï/ïôîßê>îu®ïðÈÞíôÍãÇþð î?Ýìÿïßñëí.ðÛþê!¿íßðoðð'ò%/ñߎï&ÿOðŸò5_ë4_ñ¿ð<ßó2Ïî¯ó6/ô*¿òFê9?ó/ÏòIôõîó?ð$ô?NõñÞôL¿ôû®õ?ô#/q ¯ñO_ô]Oö^ÿõTõG_öQ¿ö;oöåÎõo÷tßönõ-÷j÷u/òh¿jàø‚?ø„_ø†øˆŸøŠ¿øŒßøŽÿøù’?ù”_ù‹_áå6™_3›ÏùýÓùéú¡ÿù¤¢_*§%©¯ú¥ïù­¿.«!±o³/!µoú%tûÆ¡ûÃÁû½ÿú£ûšüÁïúÆüÅû²CnÃü5ãüÏß?П.ÓOýÒý%”ýÚ¿ýÜÿßýÞÿýàþâ?þä_þßO ƒ° p‡R  bD  q!𯇴p  äÖ $XÐàÁu† DÆ`ÁÂu0ø†ÐbÁon¢s€â:\ ºXrÝ[‡®‚7&/*HŽA'V”y0ãÆ  )’dÏ‚ 8 *ñ£K˜%Ñ(°î[€Ao ½xuPë0À5à(Wƒä| @n]  -HîœÜ € —CÐ]ç@‚‚u1@€Nœ8méâj€çº7t­c¬«@ºvñDЀXA¦kñºŽºJ;†ÿ,­º éœË±ÿAªZ§äx4d\Ê2Ä€ÍÖ ±HÚ,옓d pþ"êöxvIdö¼ôˆÃ#Ê¿×ÞPn Côë,´²”Oô.¢ÅÔ¨ÛÖ#×½s|-Kr èð]ºP ¥#çÞ@òE¨`«pƒ0±;Žª’ÒÖ$lãPu)„€7vû¶G@&çØ7øÓ—"·»¸UO ýu€gÍÉù3€˜gÞõµxRœu¸'ÿr°ÕA`–¶àZª+×ÑÅÖ ±£Ì8j^ì i \ „˜ -$îuÈy»ÒBØ›š+d zà ¯DÆÖh™{cjW²"Âî®É>ìû¿‘ |#ëÜ êp犠ïïòs/tuÖ[wýuØc—}vÚk·ývÜs×}wÞ{÷ýwàƒ~xâ‹7þxä“W~yæ›wþy裗~úç a q8®£~{î»' ÍRÀKïË7ÿüÂÂÔË7¤ ûqÑ;‘ú•‹$·ãXà#ÌÜ_´d k'‰IäbTneC_¾5€ÔqÀ›àÔ nH@ÿ$rTðÐ ø§ªTÐ,â,¬Y™1PˆÀ2ä!Á€i°;Š*€­4 ÀŸ@ :| Y€f@Ä÷€•Ô á¤ C€CÍêa¾Jïd\ŸcPˆ Z:@­´Cðµ°QãC p74«-6¬#øsC3&²|hu¢îlGT-i@ˆ¡ÀÑVáÍבh’?ZG CYC®c„è° Õ§HXN‘mÌL¯4É4Ò†Äx€3ˆ ð• ƒ©% ¯D¦°`òJq( ÑÂJÅRšÏÓ…xÿ2ˆœÌ‚û]Þ†·@ì-}ƒð›Ü°M‚¼4†°&»ÞÖd´sšó¤gútUO|æ-ƒHõùO€T %hA zP„&T¡ ehCúPˆFT¢¥hE-zQŒfT£åhG=úQ†T¤#%iIMzR”¦T¥+eiK]úR˜ÆT¦½ `MmzSœæT§;åiO}úS U¨C%jQzT¤&õ§`jSúT¨FUªS¥jU­zU¬fU«[åjW½úÕ§>v¢cXÍzV´¦U­kek[™*Öב•0n¥k]ízW¼Þ®®“+]òúWÀV°‚ÝkëúŠ–Á&V±‹e¬V ˺ÿÃr¥±“¥leûØÕE)–ålg=›VÌJ³=ùliM{Zª†–G£• j]ûÚÒª;¬5 lm{ÛÆÊ–9´- n}ûÛ¿ê–0¼½p{\¶ —.ĵrû\¯*-ÌEt­{ݪJp…Ânw½ûÖ±r÷»ã…®v5'^ò¦×¸æí u¢^øþ–½2qïtoWßåâ¿ö½om·ßöú·vÞîõ+`Úø fpƒü`GX¦p…-|a gXÃæp‡=üa‡XÄ#&q‰M|b§XÅ+fq‹]übÇXÆ3¦qm|cçXÇ;æq}üc YÈC&r‘|d$'ÿYÉKfr“üd(GYÊS¦r•­|e,gYË[ær—½üe0‡YÌc&s™Í|f4§YÍkfs›Ý¬b“8ÀFðìä<ç×9¼tγžcwgúúyÏØ!B¡ }hD'ZÑ‹ft£ýhHGZÒ“¦t¥-}iLgZÓŽVǦ=ýiP‡ZÔ£&u©M]èNŸZÕ«fu«]ýjP§Ö³¦u­m}ëMË×»æu¯}íj]ÿZØÃ&v±!lc'[ÙËÞ5²™ýlhG›ÔΖvµ­}íHSÛÛæ6¶µÝmp‡[Ùßw¹ÍÍkrŸ[Ýë6»ÝýnX§Þó¦÷¥å]o|ç»Ñ÷Öw¿ýÍo¼Þê!ù,z*>}‡ """***777DDDJJJWWWiiivvvMx¨W}ªiw}nŽx{ˆxx™l~£u} Y‚®^…°~ƒŒ{ƒ’g„«fвmµz‡¨sްz—¹Šu~š~l•yv¯{[¹{X©kx½chºkv±j»szÜ|6ìz/êy8ò}'ð|2Ý[[Õ]aÏc^Ê|OÉzVÜkOÙgWØwIØyXÇdiÅksÃzhÊryØegÖlpßsjØwyæ^MãWVèeHågWêzIéwWãgfæsfäxw†oŒ…z…‡{˜“m†–uŠ›~”¥m€©w‰¥}‘¶z‡Ç{ƒÓ{y˜…x¾‚I¶ƒW«‡g®‡rªz¶Œf±q·“r݃.Öƒ:ô„ê…&å‡6ó‰)ñˆ5ò‘:É…GʼnSË‘ZÒŠHØŽRÛ‘NÕ”XÍgÅyÖjÛ€{×–hÚ’{Ϥ}ߣjÚ¨xì‡Gê…Wç–Jç™Uñ–GñUé‡jåƒyê™ié–wí \ð [è£hî«sî±|ð¦gð¬p‡‡‡‚ˆ„š„›œ’Œ•••ŠŠ¦ˆ—©ƒš¹—Š¡›—©›±‡ ¼š¥·¨€€¥„—£’„¡œ™º€‹ºˆ”¸œ„¨Ž¡¨—¤¶œª¢ Ÿ½£Ž¸§™§§§§§¶¦±¾º¬ ²®µ¾²§¶¶¶‚ŸÂ‰£À—¬Å±Ç£­Â¨¹Ë¦¼Óµ¼É±¿Ð­ÁÖ¸ÂͺÆÔÇ‚‰ÊŒ“Å’šØ…ˆÜØšÕ“–Ø¢ÞŸ¡Æ­—β—جƒÕ¬Ö±Ò·Î««Çª²Ìº©Ì¸·Ù¥¥×½§Ø¸¹äƒƒå疊嚚ꩉå¤í¶†ì¼”奥麣混ò®¬ô´¬òµ³Æ¿ÈÝ»ÁÉľÛÀ©Ú˼ëÁûÇ›êÅ¥é̶éѼúÊ®÷Ñ«úÖ³ÇÇÇÄÌ×ËÒÚÙÈÈÞÏÑßÐÀÛÛÛÃÒáÛÝáÝàãåÅÅäÏÐç×ÈåÚØôÄÄøÚÂ÷ØØæáÛôèÝäääíîðîòöùâáþñåóóóöøúýððþþþÿÿýãGß½‚ùµ“µîÞ½r²Ú=”1¡Åƒʼn+8Oœ=‹ b I’ À“(OªKɲ¥K–+_Êœù/&Í›0qêT¹s§Íž7º4èð¹¢Hï±â Ë¡,©"q˜Ê¡\Ò¤G¯úóí^½Aà]‹4+Ù³ùÍ ô%Û¶-ßÂÍ9W¦Üºïâ­I“¨C³ISUuXŽC¨å–FbwpÑoþ€ýó -YÇ–“ªµ»×¥ÞºŸAwŽ;šni”¡ý%û•9u‚1p(*Øêe²ßÀ‚–y,æÞiמF=œgñ¼Çù=7uY²í"a˜0C£©´ß>[¸oïW7»ÿMμmyóäÓ«—©ú÷=v¦Wo$8Ub‹ƒï¾·xÏë wPú €}=7ÖR²q [TTi·Ý~½õ—Ù¤-wàiêÔ!N‚˜`Qî¥2T‚MJ;¬¤ÂŠ9–YH¡‚3bh‚n8Zˆ4ñØãˆ‘…ŠŠ™ˆ 3V˜äAÂåXœM>©ãŽ@®6–‰(r@¤w2.ÙåY6¦åxNJY&‡É)ÇI18•l¬ ¹$Z_’&qg–6&™föéçPl"_„0Æåœt.y§qê™æž6êèLíÅŽ`P©³_r^”8JJež£’šR¥ˆN˜*VЂЦ©Aÿzã«°ž„ꪬâšk®N*j¬Sî%ë¬-ݪks²è"Œ$¶ÊY­¢‹×°xB;P ºzz•:RQe›•¼>ûë´J­µÆ«mRª ¦˜¡ëµ(rÖÂEmµ¡æ«o±ØâoQةݿLŠ»o©ãž{0€6{¬ÃEÅó7àôð=µ!.Ÿ [n½è™{-ÄÏdÒZíÚ÷®ÆΫfÇäŠl¯Í7SÚïªf}E7[ñ†·~K°Ì÷Ò›°Â´Ò\óš$«[<”9d™)ûâÎþõʰ¯Kç¶Ø/¥›ícU;ÖÊ:ËqÓpÇýõÜt£d¶¿GöM=Þüÿ!ˆ—n2M¸ÈwóŒ4‘5.V’G{ ìà‡ÞSÒJ—Í5¢Ž}È Ï<yà‘:Ý\ᦓmzâ©rœ n¹8Wžºê,ýEÎî¼÷îûïÀ/¼ïÁÜaÇs ¯üò¼;¤ÎóÐG/ýôÔWoýõØg¯ýöÜwïý÷à‡ŸýÈ0# Ï7ðt×%d’E&tŒ¤[÷Ó³{X»í —¿$ã‘Yñ˜3¢ñ¤l¥+>~’„´ûÑŽr¼]È ¦¿õ t[yFV⑌vЩÖò ®d&r“Ûä h?¶‚àšX^wAü‰F2˜áŽit†3tˆ ÿ¨ªý4Ð…AA =†¸ÍG„ƒ(J ƒá…Éá=.øŒ *‰’cbý^(ÁË)‘_QKÒ½Þã‡9ÌbQø—2ÂŒ)ÛÅXƮΉÀaXòbtG‡<ôa2ìxó¥8(|›'IÉöÑh¬àŒró‡<àávÄ7¦Q„!¡ƒÓ(a ºÒ6¤p€DËǘD’qôË_ SE5¿ÉáB(‚0Mù <„á˜aðF+­æÁÊ2Œ¹¬¤%qyº&¦qNŒã†Qúð!ðA4æ ¼!ˆ0Œ‘_Œc"áh'h2Mš|¤&îà)Öͨ„†~@ÿ‡ÈHca óÌM!…XÔâXfyIÙÒ¡´¬% 6Æ…ÎAB3úÆ€ Ô!~øB/4u¨¢ TŽíÌãüÞIÏjFôG:»æ’â1È0ÐAÉøÆ„@1„áÞÄÀÀÄ ’HAdÙ¹Pwº´¡…*LÑÈýÄCŃ3’Q ü bð‚Âð…/¨!SùÖ™ÙL…N Ïà†>œ:ÏiÊs‚RªædЍxÜÁo}B ROó vŒ+ŒŠTW €Wa_dÄAW¼ÞÕ²-­«]YbÏ9c2ÆÄ7ÀQÎ/`¡%œTÛŸöâØ‡J7KÛÚÿFs¥,=UUgD‰yãaȃC¾AV¸Æj` k3Ž´ÝCã˜m<3«ÙÛÚÖºvÛí2¿!†1oêdC2D¢¤½ine¼]éb÷½ð}êeñ—É]®ªà0dÿ <¨¡ C­„!¬p†9Hd¹–q-8`+[Iⶺñ…°|©ÙYï°£E¥(E9\Ov¡ `ƒÎp†:ÀÒ!æ`Å'|ñ eîêÓˆF4¦Bn<b‘ì(ëÞÜN—ºô}°„+Ü›A1‚ þåhø:Tá ÌØCÖxЅщÏp‡õBL‡ŒMgBxÀU®• òu}a̶”ÿÈ™i™/H£oBÓá"8 ’À¹Xj2¡ˆ;bŠPƒ ïáfð@ÌŠt‡;:ØÊ€ƒ’a[Á¼f OXÈj^3œ-ƒv¨Y/ÑÚI Á8¸"±r@U³•wˆRwìAƒX™ +&¯4›‰ÍkÙ\Oí¢e*í`܌ʸ<'#KÑl°H‡8šÖ\iÇ­)ÃÁ,^C‡§Ô¢¯-ì?;8Ëö´›A}ì—:uÔ,ƒ 9Ô@âÄ‚†åN†-fA ,®sЉ0ô' ÔIGc5\M÷¤“ÁKc:ØHaè|1 äz+{Ùø> Ñ80s .ÿ¶wi§Ìb–·ÜeFïÐ(åsÅ ˆ;¤! w`e±ã=ïӛ㲳ÑÂ"I¨á‚P2:¥ØÉ:A4T‡Šçð V–›¹Ø9ŒeLcna! X`„Z7-»·Ýí¥Û8Ò³Ë×eÓ(ÞÈCv8 ;^ðœ:Y&nefŒ¥e÷ÉÏÐ9môÆ;žÙŸÆmÈ-ƒO£|ƒ§d Kø.£ÍÈL<Üa ·"åb[üÛ;>÷ÇGÞõ¯ˆî˜GûÞùÂÉ#€à†bƒCÈ„1;ü <Ø€ Œà¹B¢p…ò¦Â»Fl€½sžø¶Ïýî{ÿûà¿ÿ÷Égß9y;BW¢QJS&£y ÃË—O„n·)BØ? â_¦ú¸³þ–rU(€õEQcqU ¤EÐw]uPD x *°)QE`z…aTKÁXd¡@ Mà‹°v÷ˆ‚É6€+X€C"Ç Ë'Ÿó?) æ”b‚§ÊuOq^dÁA<€<À¦w‚G€*¨W,….ø‚«áCEà@ õ6HP:ˆ}`4Æ7ƒ@™ …A„c¡TŠÄHL˜t¡{E×fsØlu7'ä <Å }àU)Ç$+@AÞà3‘qe ¯!’ÿ`5ÑÀ }WEö— C ‰ý'?pèqp§‰rX‡äg€ ÔH;Õ€)€ñV) ã7ñp•@¨pçA¯GÑ0î÷plçM˜‚ÃØ‚ÅhŒºu‡€#EypbÐ]ŸcA bœçÍŨ€ ®€s¨Ôh×vˆÄ~¦¤H4ö†ŸÈ‰QHtq_“ç9”AD ƒ0b Ï@P^€þ8x°`ið ¬À}ãeF1i†G‰÷Pn¾˜6÷pêH‡ìø„ÆÖzð¸tЀLæ4uÔ\‘ÁƒxWаÄ gPX°~àne¡&• VCJC@cŒ¶ÿâ<÷€l‰‘±y?ŠÞQ„prþQôø ƒð9”ñ ˜×Á >wi MeQnÓ ŽÀè‘6qé˜I$5;HÑ“N¸‰>”£ ¡UBƒðŒš¦ŒcÖ8İZðà •ÀW‹ÍdE¡s㈓ÿcYFWáŽï”òŠ£6Æ$\ûhNq©I÷ÞÐyõ`cLù ß ~@Y@D‰“x16c™8˜;YðdD!{‚™9(&EŒtG™I!B0aÀ”>•”{9õ°‘1ð 1……P`0bHöoK—q-áyao±¹z‰˜i©tÊX6ÿ4Èäc@^Áb8æföþèIÍHˆbPñPVÐU`…`cð>1”š6i›Ajá…yYÚ‰ÂxŒf‰Œ¢¦]½„¾)WAS‰¥7ß`X•üA0) O €ðYÀ ê@žÂ .€Ù•`šeYš28ªñšž¸Žß™˜jélñÀ”«t©uiíÓ_Òˆ”ÜpLZ@`3P‹p^€œ÷\+š_‰JJ ZO˜3 5ê9Z‘hé““—ƒ0Ù DÆ4ÏàSa€Ï ^Œ`eðc5îù› ¢Cê˜`‚³3#w&Ñ J‘_ ¦¹ÿY~ˆR¦Y!y cå*ð ƒUVÙ¦‚—~ê' ‚:  º¥·™¨@ Š;žû‘ZPÙIÝÅ „0b…(0$2]PäY¤+j%Uš j'XúšªÊ“ˆú¬^z–ê)™ycèi5ƒp¡@EPcà›^0Tb#05`‡@eÐI€yðn8'@Â4LEK/z˜ŒR›ø‚¯÷ÚŽ §]s©7Ü¡žb\ÇÄßú]pdðÀGÖy zðŒy€ÅÐLís¦§vˆ!ÍjoÑÊªŠ žº™%Ôu7™óŸtTðaUðaYà"¨ÿ &'tàG0ž€a—H¾xpi£ Š£ÒŠ´¸©¨bª]eJuîš+Ó° BÐ÷`SpLða`@TÑ|]`` ÛªÐVV¾¨E õ¢!+… ­ŒÇ´Ik‡%‹OKB.yèDà XÛ]Ï`Vp<-RÌ@S`[p!Ð'ª`e4TJn‹RM·tËs[·­Ê˜Úu²³Šq—Ž|ÀS“P æ SP5÷—n`†o`H¬€ p ;ÔCC+hE;›ûÚ ºŒj·K‹·Žz€(³h—1ªM4 ða'@j [ÓÉ€ÿ@ 6@Àæp °ÂÔAëLp{¼‹™¼Ê+·az·B9”6¶žtb O@ V± ËWÐ 0€סî@ IÐ Àçð ÂÄ ñZJóŠwé ¢3‘È»¨"¼¼#+º°J!®Ð ð¾X0Œ›ð€¹À«pãÅŒ à +÷A`Y}Ó8X Â%,¿!l¿ñ«Äcš5SñM 0Ì † C@Ð 5l bi% ©€ –Øk »QB.‰ÄMÌÄqLÂs¼¼³W{x¼;®°@Â` 5ÐäPàUvðð5ÿ°À°;ÔÉ ”À;ÍÓ‰`Þ! :+ Ò@b°< Màh:‹àƒÂ ¹€M`,À êÐæt C. HIÀ50  ” &@ ®åMÐ-À9 1 ¸ð ¯C÷ð<›f†® °žèß¾èáÞè=n²  ‘€Þ–±X¢þŒÎACÐ0¬$0pHÈ0ü' ,^å>ã€P›‘íÚÞš?á匎۷MÓ9þª¸(rS¯°ZÒÀßDª,ÒúnO‚Á—,à=à*¯òBÐb­©“Ûùªÿ!3ÓùŠãc®ãà¾Ö'lëÆU¢À»ê>…ñÊqæJ7×[6Peð 6 ]Õ@°â>ðÌ@CŒqð¬©láí/aã7¾Ý9OÐ?ëåNíÒäðFOw~$Ó`  —cap¹` °¯,ÐE`ƒíçUÐЋ2É‚ªí² ö:/Š}ófÛ:/î‰Iëì2äPôLwŽàHNࢃEIØšðU>6hõW Ó0‡Ïš©Ž Oö.aÝÿæ8_öÐÌã=Ÿ­! A„ga*ÌÂ’p ]=î èÐN`Ï8ðìCàï+¯òY¿õ›fûÜÿއNÖ'1Û«Êð“¿à&¬?°ñó2ñ_Õ,â© P@œ`“ÖqÇ „«  ¹ÊlM#×Ä"D”Š ñÑðGC,† Y¶lÞ¾ùm̘Q]Ç{÷øi ÙÑä¿{êÔÝûǯ¤É'eΤy2fMœ9ÿÝÔÙ¦O yí9t¦Ë÷È% ©Ã¨d1¥Z5©,U‘¦Re׈‡§ ˆÈQÄÝ=wAºœa»¥ 5r)’lL¬Ú1›X¤6ZäÈ!jâºÕ¼™4£ã“HU®„,”(P£—k.ÊYgfÏ6u" ¹”i£ d¥š€²UØ¥­ªâÿŠ8Q²‘#Ù´=)Ð;f†Ì :”4Ñ1¤³dÑ¥G'‹ƒ‰ä,±nÐ<š<«ÎLêR¥H™ C{\Sýú÷¡ãËÍÔtÈvPÙ…ä 5öÿû˜úêÚ € Yš¨Á9µ´ é2h(¢L8xbÂdâ.fâ™&ºYz[ˆfaÆkñ&¤‘~2‰©£^B‰¥™æãÌÆÛ OÇyì1'Ò”¢Š‚ ÚáÏ¿ÿ` 0© <°š‚™7Î8&$Fx‰'*¼°.«¢)"‰Šðˆ3F‰Çšj IFË€B ¤×ZdÏGñŒSÏø¼ÓÏù‚\²?\a‚ÿ×’¤jÉhKEÜtkDƒ'2<æ 3ޑĂ „ ƒœ‹ÆªxÆ|Â("šePÔ&žXÜÓ§òRJÔN/ËUW?û´W_q”*sžŠj+E«b4¥H¾z*O—e¿9È(CK,iZh¡‰%\©JZÃá‰EX8ó0jÜÙf¥–dı֦΋—Æ`õÜ•¨}1ëµ_´¯*vRá•r’U¶vX±ÍÐF.Ðà«F؉¦ P"YV‹# 䀦XA¤†l€‚‡Kr€Èjl=OÞú˜’læ9ÿÔX€;ûõßšeSxh¡“d§YVÊ1ø‘èŠÙ‰Ô1Pÿ 8AWµ¬ÃŽ(‰b¢!’™Ð™ÏÃU'ICiæ¦ðíù3žþy%Zau–­ ÊT˜Ô ™³RyÚ‘F ˜X”{’¹„U倇dÎá‡&b&¤xä‘'){gß’¨šìlºw.ÝÇ·áÆI¤»['ZY̹ʕi⹇Y\q%÷kdÙoldIø§™æ§¡fš³BÒÇÉ¢—~zê«·þzì³×~{î»÷þ{ðÃç^&|u䟑DB?§uÚo§}u4§‡ÍýùGwd‘…œÞ×É'£|¬CÆ«í7?yXãxæ)_¾hB/–Ô ^IIy”ºœ`p3§Cÿ¿ð$+uä¬&í8E O‘Š|XƒÆ0Ɖ2BdPâ¡E*`aXÄb8˜2ΡŽsøÑ`Æ£‡Ñ„G‰Í(XA ¶GƒäÓÄA÷|=!”QMð!‹VÈ¢(9GÏ/}„å˜àF–XX°Qze´^‹ÅÄ&âkN”±Óã†E)þ1`‰§^Š&”|b¤fL¹6¥2^D&õ^IrxD–ö"¥ÙÿÆL™†¦$|~ Lvsu3ë#%:ÖE2%ä0Å? °“Ñíäp‚§"…Õ¶Jê(˜yâf?ý©ºËrGœ)›#XPó@2’yk'Þ Í˜ls# =5*Èrң J!ÊÓÐø4•\I+) h²´¥ïÄã!çAšÎÈ‘»((­šSú¤_Nͨ ŠDF¾„¢RàJZDÑ´t©3j XKrNªæI„]äUÁ¹Ó‘nµà¹ªK¨„­EYK`©Öµ¦¤#AšgR¾­CÕQ€‚ŠP„)t+Sô„Žm—hz)«^¬:w½ΉS{È¡<ŠF-›;ÿa P¸þÕåY½ôᑟì%ñM|b*&£f&„#󒂘•)„"ܙ߼¥ä§O•Þ)EœD—XÁ*F¯l-ËYÖÆÿ—E‰ì£Ì¢©P€B.€RàÅÙ\*T‘ íãF½d™ÈÒ5ð™ø^Žžt$?]'9Ha v‚âÆ!xÉ©ÐèÑ©Ëç3˜‡… ÞÿùÓEnòrï{Èòâ"µ™xjf™ÆN¦Ó÷t{¢l>À»¯)ïÁîøÆûÞÒ?¹ÛŠŸ]Ýo{Ô/ë°¹Úñ„´šV¯âa­ýÒ;ÞËó‘ëñOûï]fÈ}½åë6”³¤.Ú„t«*ÓË>á{8ì«¥-Â5úÚ8Êã-‹@5û³:7ލ¿ò¡®z‹Œ L<„ó·\<»£?zŒò; ,8g26V«#¬&¦s¢˜ª õ;[:¾ßë½ì)ËŒ“$b‘Š,ÕK¾”² ÇH;3«½¿ª¹ÛÁy£-k@D@-„@ƒÀý«—ÌŠÀ<3>+¸²9=ÿµ3¨)\¦Jó¶³§ªJ?©ƒ¿ø#¯\1U:·¬Ìr&&L¤3ܸó+4(„»D‘9«è¶ÄKö¨´¾ Z¸,¬Ä|S¢!¬?¡À³ò¨'”²¸9$Ä×A©¢A¬¨6z¯„ªÄÄØ«©ÈÛC d@<¬ÁÜâDdb#;Tb"Ì@K²(ÇÈ¿8l ;)(%¤¾‚*¹\›Å.äBXd<Ì¥ú“½ÔB®-+›d,§œF·‹@Þ;º<“YiFðÒ¬ÅÊÆ; Bî >¼ë'·ã7³+Tœ:Ø«C_û,㪑m+9A7vœ•ÓB½[T@ŒF= ’ö‚Œ—ئ£x=©´Û+¬ÿC\Gêi?HŒ¶Rë-d AÍ(&¼D=TH[Ü+tòˆ‹6Uä7˜2Ç4„6Œú;t¢¾{¾í›­{tGƒ,Ƀ¬Å„3$ªÊ¸¬>‰bD©Ò®\Ã.S¬¾#LIx I$\ÉwüAiäÉv nÌ#=rDKÊ¥€ì7òƒ‘Ѓ9|윲LŠ«êr?«”?Kä4}¶óFB«A°„ÉB3 û¸»ŒƒK¼ëó4,|‹{;„¬JµÄÊ·ÔJ³r5+°]*$ˆD›Ý£L 4ý[,P›$SDW¢Æ-œFZ$M)ЍI;&wƒÉqúK˔ɔû´|+BÜ¿«\G;M×ÀÄìÉ“ŒÇÿÒôGHÍ_<> jÍ~l0;d y¢0ѹ8XºÍ6<&;—¤ÊÁÄÃM¦{L%ŒL¤ÔÄWÂÎêtBÜFú MéN:ü¡ä½ÏüMà\OhTN·Ü§lƒÁE2ËkÜ 6ä@IÜìÀãÇ·‹0 Ìt¿±£Jò²ÓËÎùD΢\LÇt,²bÉäôBÿdP'ªÂ› ž—‹N}„4œHJ»cãÀÌ·íÑö”РÜÉk„/Â|O\´Ñ˜ ¼0´BIü´—ÚPgM[¹Qɰ7úÌJ¸K¦ ¦‡ÄNœ\Pª‚IJ”§”C´RžZJ¡ÊSz¤Jú+$µ ¯+S3=S4MSÿ5]Ó2•Qß$R-Ðè›Ê) OÓ\A¸üˆÕKÛRÉôÒ¤A΂Ð}yQS9Sw³­¦tSäÍåëD S'ÁFüKÆâ@u´ÌO\ÁM¸TÃ[BTûŒ«R&OíM9ôCéCEâµFtlÕüŒJ­ÆEýœÊØ<ÙÛM UL¹4É„ ©µJóäG |"¡¼ÉèZRyÃÕú¤9)¤ÓQÜPSeÌÆœP!ÜOÙìHNŒ´.m"•4(Y =Æl­r}ÒtbÒ¾ŠKVUÒ7õ¼âúÖ®*‰Qk7lr×S¼K]›=ËÄs=á#Õ¹uÖaÕV¼ä²DäJx‹Qÿ{¤M™ƒÏ=}?‡õBµ©Øò‹Ñ`­×iÝØÞ<§|Ú-׌U^k>VB¢ZµÑ[ÍÉòMŸ`ÊQrYþ\X‘Yºs9´Ùá¬Ô”*PËT»$Q•S4KRkJYÅbÑb%Yš•Z L¨ ÃÅ´[Íï\9ÏÒ&Ü$5¢º;ÓXN}TiÍQ„;TyZnmÛº„CPû<}M×£;Ã{m¢¶Š6CêDxêÄòñL›ôI{…J™%[†eÛÃÊýã2ñÌ=±íĺý·œ+ Ê[£L×¾eOi¥R¦%Lr=[Ð%I·M\é´Ú<ÃË¬ÍØ%¼8÷š½E·°e¹"ÝÜ}Ô‡MÛ<]ž%Ý;5Zÿ Å@âs¬m»—W-*½¦Ó-:¼¬¥½Ñ]%ÌDPç{Þ†ÕÝݽ^“í êdÖLÝKÓ¸Û‚«Ú5ÌáâO0ÄÅP-ô+L½^÷ÝVÞýÙ{ŒÏîÜLÏ(TAzÅ…ߥ×÷ݯ*WÓbMí…DÓJ·2T™ôÈÐÍÝø\ëå_ܳÒ&Ü*ºí ©/ì¤g4ÜþàŽÚž.k­Q³í^`íÖFR`§\Éöõßÿuàþ}ÖµFÜó….ëÂZ^œ7b"†a*bÿÕ_ù (:­Òܸ³Ý®Þá1†ÔîÝÿ¯ÊKÄœZÝ00–b1þ`+–`ÿ=cö¸]ãZlc™{ã-bÄ•ã8Æ^ íÜÁÅQAóâ(Ò;äy¥cH¶â#&ctËRªÐôì"ST[‚õã)ŽäO^dJ–Êcl¸BßóÛT†Ô*þdPäVveYÖÞ¶±d<Å]X~åGžc^žå\îevåS=ŽÒÓcSc>fdNfe^fïae]d@öä]öehÞ+dÕ`åä‘üe`žfoþfi–*àÕcmŒWn>gpgu6dj–ææ%_Ž"mæN4ávfgt®æëjJNçzvdnäh^çƨ^å!~ágÖç{.èvh]ŒEÿg~e…îæ€Î⇆h`¦ß?Nèµ%hnhÎhŒîáÎÓ‘^h|¾èQŽå|g³íg†~镞i–fdª­ifçŠé”¶hþiŸnéXîišÞi¡>êVê’.êFꤾé‰j¨&jŠ~ê¥fj«ê­Öjœ¶gê•j„vi›.k³®ê¯V£뱦ê¬fk8†k8^ë³Fë©öê´&é®>gºê¦v먖밮ë¥îk»¾kÁ–éàük`6ì·&lÆÆkĆ콞fÇlÊÎk²ÎìÉö뮾ìÈ–ì0ìÁöìÎödЮlÎnk®Öl•~lÔÆjÌ6mÖíÑ^íÛžéÔvíÿמmØ>ìÜî0ÞíÓîŽîmßNîжlÙ^nÜŽëç†nÚnžnnÕžné6îãlçŽíNÖîÒÖnÅ&VÞaf>oôNoõ^oñ)nå¾nñ¶nø~ïòžeâ®mÛÞîÖvïîþí–oþîoúðùpìû¦nÿ>ðúÎïð^ppüNl ŸpìÖoû®ðìŽïïæðmæk ÇpOpgp¯oq ïpoðèÆðð?q ¿p7ñ»ŽññþIðÖq”Æñ/p ßð§ñ wqÝñr·ñ%Gòßï#7ò)¯ñ§ò&òWò'Çò.÷ò§^Wò0sÿ%ó/c+¿ò*oóáFs8ÿð—ó$gq&Ïr6'ò"ws<ÿo;r@ó4h'ŸçÅtAÿsDçó/¯m3§s‡ô<ïó¤~tzÞs=¿ó2—òL‡òH?ôEït/ó8—tL§tMçrC'ïQ·tPOô3WôV/õKOõ¸tuV_ó;otQ×õ—u_uT÷ôIçõaGqZõ`Ÿu`gôÓ+hviŸvj¯vk¿vlÏvmßvnïvoÿvpwqwr/wsw™(„^Qw?a÷v_wxw>qw=¡÷z' {÷‘|ç‘}çwy¿÷Ç“~o'x|x}–‚…÷Œ†wxÿ„÷÷ˆÇ‰‡×ŒŠ¿Œ‹Çø‰7ø_ŒŠy¢P5>!y=1ù“ï”÷‘•gy•y˜™Ÿyš¯y›¿yœÏyßyžïyŸÿy W‡ÈP@€Ð S@h§{H°±õHú¥ÏE0zr6 ó§—³(ú¸ú{`w~P€øú ¥o'ÍP€ò9ú–púψ¬G‰8v÷z°ûºO€‘@û©ç—ºW€‘Àû·G€¸/¥ÿ´·{¢·úl"@‰…B€õ¸‡ÉWøHrµ'(E€{…ð{‚R€`w(S€¼}x'¢P„8€ÿŒ¨}rHàà/Óù|)ˆ&ß'€úéb}vï|u ý¢}Û Ü×ý {rè|à~=. ñÿ|S¨ýXþæÇw ÖþB ‡PóGÿ“P€°|Eú €ÔˆB î©#w/¿…ükèð!ĈÿÔ àÇO€: þ”èâ= MÐ0ÁBÿ.Þû豂 ã(À”†L¹”hJA€–ÿÈ(PS@KPzF 9Ò&Au÷¨dÉ"L™ÿ„‰S'Ï«$TJu%R¤ÿ”Šu˜`#¿ê4Tà¬U‡¦ Ü3‰rfض ÿàÀ܆¦– ŽX@€€ÿŒ6TÛØ-ISZ)ÐØ°€ºËšÞ;p@à ]þ§–r4&T'ùò_u"cô<9tãÑÿL(Àꓬ/ÏUäÛ(‰·óK0ÜÍçÀњ®îïÖš­O.½ŠîðÔãM ‡}¯x²ãUgÞÜyãd¡‚…ÿS$ ?É©†_cj%€€:€BÛDZ5–[PªÝ÷™~m WÀ@" øu ÀÚsäD§Žƒm"-݃€=§?ÄÀj© °]kgý[Eÿ( Ò|*µEóÑWÒLœ‘tQBÁiUÀ}õ ¦L,…ÑZŒ=ÿHR‘ QµdNV¦"SVÙØ)ÖEæ=\²%(ˆ·#€o¢Õ$itŹÐtã‰È]¦"—‘ƒúGŽ)‚¡‘à€RP"b€—ûiUÀ?rÑò]fÙL5ixSŽ$MöÖM–bÚšpTÙ&¨ ˆ*Ö=4þŠ«KjåU`ø#9ü¨@w\š©C6DU íJv ë]âÞ|Ý54Uâ™BŸ‚©ƒ_!éÂÚw à(ا-ØÐB'^H „5®å¶unCü,o»ï2uº…ðÄo“õ^¦HÂê$\ÃFZ|1Æk¼1Ç{ü1È!‹<2É%›|2Ê)«ÿ¼2Ë-»ü2Ì1Ë<3Í5Û|3Î9ë¼3Ï=ûü3ÐAŸ<.p }4ÒI‹¬â!ÒQK=ukL;]!¦-§g &ÐfXY.¼ •õié©£Ž)@’sž}·˜´TÛ}w”À)Pœq* €²À7!789LG]8qŠ€¢w®(7ÀqÄ8Þ¡‹ÞÓ@FøEèvÑ“ Ðö‚k,Ó.6]XC†t×nÅîÕ4q§ÞèÅ/‘Õ3E£ò1v"Üøyô42ÝÓÃ7oÀä…ÐçÕïtÜñå›ß_ÓÍ @ÖEý·Òjp¢d!5ÿ>ÿ?@û)ý\ “Çð#$¦ ÎΧ@¼%o+ñÞéXó¾Ésl“㘶›âü/‚ÙÍVÀÇ \ ïFŽBªÚ‡–|…«!0¬IíÈeûh]Ãa¡bî‰Õ-…F<"D®‡Ä%2±c 8@›(Å)R±ŠV¼"³¨Å-r±‹^ü"Ã(Æ1’±Œf<#Ó¨Æ5²±n|#ã(Ç9Ò±Žv¼#ó¨Ç=ò±~ü# )ÈA²†<¤ÆÖ¦ÈE2²‘Ž|$$#)ÉIR²’–¼$&3©ÉMr²“žü¤& ÊQ’²”¦<%*S©ÊU²²•®|%,ÿc)ËYÒ²–¶4¥D Ö1]Jä–¾ü%0ƒ)Ìa³˜°ÌåÈxc2³™Î|&4£éJdŠL™‘&6³©ÍmrS•Ô ™5ÒÍq’³œæôå7AN‡œ³î|ç;Óù±u6žö¼'>¡)OÑóùü'@ZË}îR,=(BZJ‚r¬Ÿ }(DóÉÐ94¢½h9'šHƒb´£•¦F3VÑ’´¤Ã )ÆFjÒ•²t–(½˜J[*Ó™¦ò¥‹)MsšS› §:ý)Ky:Ÿµ¨êxúÉ¥&µšÉt*TÕU©¦tªü|*8±JÕ­rÕ%^ø*XÃ*Ö±’µ¬f=+ZÓªÿÖµ²µ­n}+\ã*×¹Òµ®v½+^óª×½òµ¯~ý+`+ØÁ¶°†=,b«ØÅ2¶±Ž},d#+ÙÉR¶²–½,f3«ÙÍr¶³žý,hC+ÚÑ’¶´¦=-jS«ÚÕ²¶µ®}-lc+ÛÙÒ¶¶¶½-ns«ÛÝò¶·¾ý-pƒ+Üá·¸Æ=®d—jÕ‚.·¡Zgs[Õ¬R·ºÐîF­{]¦ø »Þý.xÃ+Þñ’·¼æ=/zÓ«Þõ²·½î}/|ã+ßù²Wô½/~ó«ßýò·¿þýo|í à¸À>0‚<^+¸Á~0„#œ`K¸Â¾0†3 ^ k¸Ãþ0ˆóËáW“¸Ä&>qwGŒâ³¸ÅV±‹c,㋘Æ6¾1ŽÝ ãó¸Ç7Þ±ƒ,dyÈF>²†‹Œä%3ùÅM~2”!¬ä(S¹Ê÷²•³¬åõbyË^þrxõ!ù,{*R}‡&&&777IIIVVViiivvvMx¨W}ªiw}nŽx{ˆxx™l~£u} Y‚®^…°~ƒŒ{ƒ“g„«fвmµy‡¨rްz—¹Šu~š~l•yv¯{[¹{X©kx½ch»kw±j»szÜ|6ìz/êy8ò}'ð|2Ý[[Õ]aÏc^Ê|OÉzVÜkOÚhWØwIØwVÈdiÅksÃzhËsyÙegÕmpßsjÙwxæ^MãWVèeHågWêzIéwWãgfæsfäxw†oŒ…z…‡{˜“m†–u‹š~“¥m€©w‰¥}‘·z‡Ç{„Ó{y˜…x¾‚I¶ƒW«‡g®‡rªz¶Œf±q·“r݃.Öƒ:ô„ê…&å‡6ó‰)ñˆ5ò‘:É…GʼnSË‘ZÒŠHØŽRÛ‘NÔ“XÍgÇžwÖjÛ‚z×–hÚ’{Ϥ}Ü¢kÚ¨xì‡Gê…Wç–Jç™Uñ–GñUé‡jåƒyê™ié–wí \ð [è£gî«sî±|ð¦gò­p÷²u‡‡‡‚ˆ„š„›œ’Œ•••‰Š¦ˆ–©ƒš¹—Š¡›–©›±‡ ¼š¦¸¨€€¦„—£’„¡œ™º€‹ºˆ”¸œ„¨Ž¡¨—¤·œª¢ Ÿ½£Ž¸§™§§§¦¦¶¦±¾º¬ ´­»¾²§¶¶¶‰£À—­Å±Ç£­Â¨¹Ë³¼É±¿Ð¶ÁϽÀĺÆÔÇ‚‰ÊŒ”Å’šÙ†‡ÜØ›‡Ö”•Ø¢ÞŸ¡Å­™Î²—׬„Ú¦—Ö±Òµ™Î««Ë«³Ìº©Ê·¸Ù¥¦Ö½¨Ú¹¸äƒƒå疊䚙ꩉå¤í¶†ì¼”奥麣巷ñ¸¸Å¾ÄÉľØÀªÜƲëÁûÅ—êÅ¥é̶éмñÀ¿÷ЪùÓ®öØ»ÇÇÇÃÌ×ËÒÚÖÇÆÞÏÑÓÐÌÛÛÛÄÒàÛÝáÝàãåÄÄäÏÐç×ÉæÚ×óÇÇõÜÄôÖÖàßàæáÛôæÙäääççèåèíêåäìéæëëëïïðõéèðïðÿöïóóóþøòþþþÿýñÈOÁƒüι*wÞ7Wçî=„ˆ°¢ÁŠÛ¸l·-^Å/‚‰ÐŸÉ“'É¡\ɲ¥K“*_Êœé/&Í›,mâÜ©sçÍž>i ú² ¼£ÞŽ*Uš*ƒ«£®2˜z”¡j†oK³ÊKªÕlòàâ£N«Ù¥\ϪÍÊÏåP¢-ßÂ])w.ʺvk敉7oß¹F‘ž5uõè· ¤~kúȜڴK±ñá3–ϲµg!cVÛ6îÞ—á†ýÙmiϧs¦^xëÙ¨¥À‘#\!ƒRÂX3ŸÅ6³Íf5×ÚYõê”Ç‘'‡¹\ïòÑD¡ûl-üè¹G @¨°¨êíºÕÂÿœÌØx†€ >C…~KÜ–²Ž&pG˜dÝ3¹Ë4 ò&ÎÕ÷>ü@Èd%6êà…fzá³ÌÚIX¦\ú’“$$ç<‰“`n&rÕØŠxðƒ<8C„ÌÄ5þà0ðÑ’Ky¤‰¸ òò‚š¤¡6·éÿƪñJ…ãÅx‡É8^øBíðÌN-…žòð"CuÆ^n›|áæ ¥vÈ;E®tsðA’¸< T¡GÙrÁ)E=T’ýb=­yQ‹ÖŸ8Íég¼‰™u(Ò qøA1°A‡á ^àÃ5üÀ….("u‚§RäÉwžÅžºÔ©-ÈÕ®" ”ZÇZeC=ྰ…-x \8Ã'ª®>Jsš=Š:˜´bõšùÔ'FK¤Qšð8ë ƒàôð˜À¤l&æ@U@UªJ©%:ÉQf<½©Wï9ZÀv:`u0*ÃÌ:T#ìäB‚¡B8ÿH³›qàkUx™ÐR«¤Ýªp‡û¿Žòb×X†ìpl¼5±ÙÜ‚[Ìdkn»¢o{Ú6–¦¢Ýijq´¶/€áÌ`CS)P›0„á.ÎuÛfE¥1¸¦µ)wõ»_Ï÷NðÈF#Mȇ/Ôá Rhê$12ÀáñŽn³Á[ûV¿á%n~K»añþWCæÑ(ú`JT6—”ZÐB¾02A›= 8RÑ ],šSÊ3šÑŒg˜°Ë`FYä7@€¼ýåp†³ªäßj¼˜1”"Âààbò!‡Øƒ¨€ <È 6ÈÁÑq˜+¸˜ th›Ï~8ÂføÔÿ³`Ùk_†d~~·ÎÞí.OTõF½Lt¨Â#¼8¢ý0 ÇC0ƒZ̳‹@ú Dœa…ò@2ràæH¢"Ôƒe²QÏÆ Ï{þ%|T=¢ýy¸ÏòŽ 7U¶Å‹s]$Š0ƒt1‰À 3€¬±YÌ@”i¦ñð#‘#ª7ªgjó7ÏÕ6,”×R•sD Pœ¡‹ÑŒ¦\ 3€é¦ƒý•sÛ2!üb4~ØJ0¢ƒÙÎÖ!´O}ß&ÛùÎö÷¿ ë½Ìgp1e‘ÃxC¯€…!)ÂEbÒ°´RAÝ ×œµÞ .FF]ê|³eÚ«ÿÞ'¶1ìdòÃæ1ZÑ…f‚ÇYó"×ጠ¡•_,ó™Óœi n%Þl¡›û@3˜²”v¿5¼d&S½åW/Ù¶×#Hœ°²U±8J9üà9$á° YƵPº×}ASqr!ê§™3¼çB—+Ø/H;s8"V¦tBàxhÕr Aðup'€& RBW‡UMqYgA‹ J°‰Àwõâw­Æj;¨r¿ÇrZ‡'rÈÐ}?0:<Àv`'ÐNvð=0yòÐO!Q_gB9P9¸GgS'zX'†I&xƒ÷dBø8C$;ÐÍ}„ Õ„u (èc€p àqXhTQ'†VG†ehˆ+„Aq,$ëÿ  F… zV&àÍô(>Ð×à@“Abð²A5Í€ ŽGG9T @€Š(À÷w¸8®öUiH^J¡Eõ&PëÀV'Ø&ð#8ë ~@“`¥!7B´COÍØq}Gˆ£—Ú8†ÛȰs‹Ñ$Ë`tðæUJ^àV>à'ðêàzGq]iP ¥  GçJšFnòðHþÇJ‘äc9ˆU7yˆ…ˆˆ…çOÃ!:–‘D9¦Ì`ð0ŽéX u@afÐ ©`£f[j—GGŽ(BÔ¸‚Eg`ØyÙ “‰èrÝ´uÌàLíÿ4v}v]“ñ„uÀWÌàÀ€d U€{°o«B’JÁEލJ@w'aäp4M{iaþ@g-¥MZ˜>|Ù&‹§kÌÄ\ ”ùaÙp ¯@¦–l0ˆ€ °a` B§˜ŠZAw&q0Q˜fÒFñœ¤9|Š8“™jýÔ('Ä`àjÿ‰Tfù+Z^Qdê@1Õƒ0]ÐbTÆp[ÇoÖ Й9Òiq˜Š¹˜1ɘgøj°©;δ`à&dcB¦W‘ƒ‘¤DŽšør°ß0Z 0sõãOÌÙ!üpmaÔ3˜úi_ý©•«éšÙ©¤W g1Lužô©>EY“y‘•PvP`^à0`/À®Ð\`©@ZžU“túW‰†é…iwòP6(š¥ÓÉ8^©šLi¹–R¸µEjóc`éX–ÕÐLWÐ`0 ‰@[e¡\PÊžæ—TŠ•FÑü@‹ éŸÿ : f˜Iÿ£€ÒpDÌË€T^PËp[pŠ`]`bÀn|ÀL"ÉwtS‰Õs˜-j„70£?¸¨ÜÉQ¥‡#Ê0›òÀéèV[pPˆàXp…“—:y¨ªl«Z4WÉŸ*ú0±Øƒ/j­­‰­¯Ù¨YQ[n9JæU m5‘%!`/ÐZ Ú¦P*.}êJ˜F¨×ª­´ÊšÙZÛÆ›AÆ ™<ªT á¹Mõ] #Pa £äiцš…LÉ$œÅª÷`¥ÓJ­û:«4ɯ%k²¶˜« gâá yêLY °\ dÿ 00eZ`wpæh" Óô@÷…ÄQ¢‚¯H²'«²Û LPÆ[ßjræù3¥DQÀ^`RbV0#¥p5÷q°Dœ°qIÔHqHQØi«(›²bZ­úІ,›]d—±æù Çðz „ÍÄ)Öa`‹^ p³‹p O!fJA`$Q3u¨2*“Ÿ+ ·:¦Pö¨} ôÖA  …k^Ë0SÀ<2ò‘ÈP0X@ ,’§ f9´J›«lk±]Šú’ [«Q[·ê)T[r·‰ÿ˜F ƒ bºR@tSµ@~ÿÀ3P ¥•DBô¶¦“ƒè’É˼t µñ+¿3ê)–Ù£c’ªYÖ1ðb$g ^s’Ep°0!pÑpH€L"d´ÔÔ¹ð+ºÊ»¼y;¿ôû{ûck#ÂÀ¢€ÇÐ}2ÀÐÐ5Ðà’Ð ` LÐG€LÈÀ±«ä±“t ×À Æº‰z¼õÛÁ,Œˆª° ðÀÔ(Z\™À Pµà€¨@ì•:l ü :×—ôz#9véœsËÁw‹·.Ú¯w¼­TcUÑJpZŒ „p@Ìð_, ÿ’tå ¦P а€¬è¬S*¾¡BJ ˜ˆÇž«ÄˆÊ¢ì;ÇWÊã °Þà ² Jà Ài5À,  €Àc~½ìG Á“aö}«œµ<×Ç Àà Ê'<ìWÒ<ÍÔ\ÍÖ|ÍäÅjñ p G‘30äÐD°/p @$ÐÝQÞÜ€°® küE~*ŽJikrÜÉvÌ•uü´NLÇþŠ!æ,šuKjA© æ  LPp§Å`Ã@a@NáÓ€XpòŽÀÅ€lß` 6`¬Ä’ãë¹C8w°h·yÜÏŸÿ¼ÁÈ ìb(U±²€Wk ‡wgP ±pa /¨BtÐtƒp!Œ Ïà  2pÒBÀ’ž8@”™Ä¬!«¼Ä ÌÄlÓ L£ï/J0pë¾[áÈúÁ)Ÿ†cQ ”0a0 Ëï†JØ ®ð ç æðŒ²  ŒÐÅð—yÕp›`}Y1Ö£\Öœ=ºžÌì’150¹Á¹xÒYtà^yðT~­ ˜ € Pá‡!Ò%”Œ0¥<Ç2‘¥Yº¥ü,Ó3 ÐÿLÜmxÝv£]ÚÄ{µfñŽSÕ“ ®òð ±=Û¢ˆ¾_ÿän¹Í’ë s¬÷¾¼ýùYš¤É´³¦Å½²j- ØÖo­DÜÆ"Ž @Øƒí ®@¢¸†ÀØŽ ÙépÐH•çí齟1mÜÃýÄNá.Á.2Ï==fc²à€ÚQ…ËPæX”ÏK FÀÝÑÖ309` ¦  ?9ð MA ÕàW(w¥ÕÜîÏD^ÓhÓ Ô5äpÐpͲæ@¥.~`©_àªÐ3 Å2p ©  µ ŒÏ#0@°) Å/Ð?`jö²4‘†ê´^äšmÖg­màèP8â fë Î_€9ðJ°i7ÿЉp†’ µPJ0)9 =xPaä’š3á¥wÞÙž-ÜFn¿v¡Íö yðÎpÌ…9Ð ² \Î)àà»òPqIÔø—Þß¹ ÝûÀ'…y˜ÇÞÄï-ÐvÞàyþ•{^;ä‘ê«.~Þ¯^²pÒGP2†ë‡Õ6Ð}= ¯ OÈý0)þªd}äñNêÏÐ¥^ŸÕµrm äÐêqÀ þF2 ` µT # ªðèJ *6ð.ð´P©`P ñÐÌÅaÉŽ¥#‹ç›êCþé .µÑ®p P…Rÿ|!‰6åæXå!* ÅGÇ…9 ÅLÕ=€æ“¾mNâƒÃù@ ÔÀ)‡©†™¥7}òònòXŸõŒJ5/ˆ0˜ÐU«p[Î椪@LÕA?L0ƒÓg)°:°tO÷?° ãx÷ËA®­1U)ÖÎnõô>ï\ïÇßß ç+ófqÞ|ÝaYB—ç ë0aö ™07€V:Ðg¾<€ Ao8×`ñÖ@òm÷0çç…¯õ(_ç*ßûðÍ­kýÞ•·Î$Ï Йf1qµ ½Æ±) B„ÿ—VÌ0Åÿ ò³ð ínš(ø½=õé «¢>êö®ø~¿=/Xá ”ÏuÝÁKP °£™s# 9”`DHŠ@xð²Ã!fÏ€“'O³vöäÝ»WÑŸ?r?VäèQäÉ‘òDväw2$J˜1e¢|9ÓæM8uƬ¹ÓgOŸ;½É¯bEoG•.eÚô¨« ¥\*•Á•Ó£à5x€Ò¬bÏœ¢ó%nÑ6j¨HØÃáÛÈ‚i¦”ŸÑ£"kv¼÷‘ïL“þXº$ú³°áÃ8‡&†¹˜1ÍÇ6ñ"eJÎTÔoX±¦ÊC†TLÍ¥2•Š4¤&!4eFWL7Ãä¹Bÿe«–1Yϼ)™aÈ$! ¾M䨱e×äµ¼ÛRïÊåöy¹¾x!G–é˜{ÎïË¿½¼t¥I•’«Á=„«š›º:õ(¾Rs‹:·Ðàƒ !Б´ ã@, alèAˆbnÉÁ’TÎA¦ !ôøa„THë…zøÁŽeœ#O°üJ%¼®#ç(êž;ï#︫ñ±ËQÇÑ;J½£À*S ¨àEùšR©S2(­‚ÐD’l Êf˜1 !‡ŽPâƒ)æL4Ï\ªÀL!D zƒnº;‰©˜HâǺM”qÆ ´°A‰*ÔÐÿý™Lž%ÏqÏœŠ2€/I%›êLž&hàW”Á §©¨“0bBK2`âÔbÖ1³dÖyæÌWª ®^¹;ºÙÓOð [‘Åa3ï¼CƒJV¨D—e¶ÇE—”'ΉtRJ—’6Ò 0Í@Óo¾É@ aƒ ÙäQ„Š`"ÕU!lª!lHHˆz #”uâ\|H"̧éD’ÉèþD6Ñ`îÑY .*½¥$Í@•"#@8[ʘjÒ”S ”r‘ ˜hu2Æ’ д"x3¨.¦Ö©— FšØ!ò8¦ aàQ´"Õ“O».O⛘žÉi;›M4Úÿ¥Àiï½û8îx)rÙ^FâHáC v«XD‰PA%P…)W`I«&I!ßwÀcšuâɧ`wâèžÉ\Ì.0¨yb¸ñ~xjŠ—2ç²R2Óºr¦Î!-Œ¡à‚Î1§5Dhàˆfhë/„!4M©T ‘A…šÈ¡àÚ–aÔ¹æŒz†ÍqÑå:r‘hÆ¥vÐ硇–ó͓ܶ)s¼Nå›Ë93 ŠÈM/¸@“¼­ªˆÍr˜A' šèÔÖ§žlÞµhœˆÞ3E¤uä`*)Ü䢷´"pz?ª^’žÑŒZˆE>â2ÅQ2pbÈácÄÿVH y£8EEš”X¥ÅAFE¨ñ‚`ç[ŠQÃbB8x„k×áŸ}(9 q<ŒòFxD$&Q‰H¬EûÚW‹%1X„30øÂ­PDÌw$`ÞÈ0ðˆ">5˜z·È¢ˆ¸€aRì¡‹4¸H{äcýøG@Rƒ$d! yHD&R‘‹$Õè”YeÐg’ SòîeÀ{lM‚Aš}‰PßlTtÈ!,D2^ƒ^ÀãdÐűdr4ndO/‚v~(Äð@Ζ œ‘#É”fdQ­¡VÄÕ™ <‚Í@†0„ÿ šµ øÄ' 𣤂A!hAŠ!„Zck8ƒ.Ô¡ŽaôIi7Ô#s˜´{Оãæ0ƒ™@~RŽÇD¦2½ÁÌ$‘ãsÖ"G8„­ƒÑ("8FŽuÈ¢¦€:‰áPb|”㸟xX@ÉÔó$‡‰v,= ßéçÀ Õœå4G§;åiOïâm°Ã(ìІ;|zT}îpúh_·§Ã­£¨ìxÆ:ÖqzXU©ü˜Ç•S”øï/2 9pøÏ™Æô—Äd˜`Γv°ìÈGa~%ÄI1Ú+>˜ƒzÄõÐÈÇ=ÖAX¨*¬!±6Âÿ^’5:fZ×jY`bV¦çq4áŽÃŒ:Ö! òÐÙ’ÄA aÈbüpHö¨$Í„¶ݧcI›°€¦525E©ôÚjÃà†OõåÐÌÚ"{²Ä:×iEÈQDyÃE-ÁN£ël$¼’±.p“kÜ̪õ²è TÁŠ\Ÿlyîý­·\ùÞöº¤ðÇüQÄëЈhùÌËn‚ZÝ…¥8Ú,{Ï›^¶úD€‹œrI2añ*/¿úµïá¼Á_ø÷º/úíÐè¿ “6b'Aƒ…ëb?øÅ7D±y‹Ë¼Üź÷Dœ|󻑃ùéºÞðBlÛå©ÿÈ9Ãec£–’ûVQ3•«|\øÞd0Cs2Ô¶lÊRg·NmÂv#™Ä{1sŠ ÛÛ§µ´XpFÌzÕ ááb9Ë6ù²”÷”>‡Y:¶î‹–—Ú¦ùÈË© ^JâÝí>‹Ë£³¤cLS+†¸ÖIŽsÌéÃxzÇG»ŽbõøéëYÑG¶‹ñ‰a?™Çÿsr/}ççÚÎ|VJ­åÞ• $!AžUÂäyÕ"®áw)=èæÚ¤'-æQ¦§|k\[›Åyo¡0Ü—õè2XO5¶Ž­›ìU™Ù*‚ѤSûRiÃdÁÕÞ5Œñlïß[Î9íõÿì9”a_´»ÿ…¾®²pdˆ::  ÿd­kÍÊ8âÇ6¾y½äñ*ùÆLÖç¡7\äãàžð"A oüoÉ)Ú°Y£RbZÛ¶†¸Ì»éA:º  á6,n‡Ä¿¤ðÄ‘=A ö¹/& ð»“lS}_¹âôžºÍ£nbsãòß0Ñ“ýdR"ûcˆè/<1âcט»H /ÒvéòyN\îÙž;Ý«®i@Û—ÀÀUð™Ãí‘ì׈ðÉ‹>€{h×9.µ|M]ÛÀ yæ4§¸Ý­žïšWGï‚áˆ-[nè^Óh¿(÷†'Êþ_?ýíáÍ/ŸœsÒ¸_>ó¯{ž±Œs‚©=Î+ùÿ#¿'›<¦g&`îñòjûù˜[^ù´—}ågOu-·¹ÖÅ$§ãè¼ãE>zÊ[zjE-6ð‘†úó¡ï|æ7ÿî„’°ôw/úðz=}Y¬QŽøÜ3×6ÿ缯'oióûÿ»¶«S¸÷j˜@*¯µS©Ú¿R[dzé'Ú´?K?Û«·Ú;?^k·÷sº@Ò±Û*³r«¾›7ÆXé[>T? @ök/À‹7ƒ)$¤I²Ï«' dºŒkš¥xŒ£­JcA©»º¼¹lš;Y¬3¾5ã%'ì.>ZÀ§óÁ»«Ðú·X{A ìB/ä¼³¶“/ 4+<0Üâ#Ä‘?ÿ+4œ ­1¢`œ-$B\¿#DFÚC>ìC?üC@ DADB,Ä>J¾ "}ÊÁz+–[=Cc=1+5 Œ˜œú¶Ðº- @ô C;LD$ÀŠÄ?º ¯ZC[Š·«§Ô‹pS M3+Ê:±ÐÅ/¼C<ÄE^,B4¶ðã0¯Ê‹wû¼£èÄ8yÒŽöJ‘Сè`Æ"EeÁ¼$¤Aô¶øÛ®ñbž¶SœÚÚ2×+Ã(Â`Á!9Ô xF•Œ-ÓEj¤¼OÃi ysF,”·>¡LƒE-‹Ì~TŒ­LÉ´TÊ¥D²¼¸Ó ÍüBº¾€ÓHpH?,«³b1ÖS¹Í”À¯ë<¿`½ÿÏTÉ”øÉˆ¤ÇâùPÞk®_ÌiÛËæ$?z2Ev„ŽÝ<9Ï?éÎ:4JäLNõN BžWtÄ¥Ó¥Üzšl:(Õ:c”6ŒIí(JX– ÏuÐ=ÓÿÒ ¢ÉèKj3‰îz¯6ä?™Ø¥•‹Ã4d¸-œË¦cE¹Ó{ò‘a˵ŽNTÓ5µÆ4uR˜78Éï“!>é@KPh$ÒÊÔ¯èòÍ??tì- ,¯MÔ'eTDõÄȈÉ+íì3žtÌÆ¼Ä\Bìk3FSíĺO 9¦ƒ·RÅÆ¶Â½ÓÜ 5ÉH¥ÓÊ䮂¡6c=Œü3G$ûLAÒ ¶¾tªîUTMJ$ÕEýV¿ }K[VÀ¡p=œ ÔSæ€9Ááô³ãùÁ™¸ÁàWrÝ7bDSÒì×L¼ÕdôL_¢RÝ‚Õ%õI"ýU\¾& NBEDÿ(£µ|ÍÒ 5Nm2 X&¥©—Ø®€|9}ÄS>3R„¤´m½øL–ÚA§ûØáK±»ôËÖÓ2N=ÐzûÔŽ]QŠeLÙ,Ùg»XÅi¿Ç W‰óÑ~\M­ShMוz¬nµ ?Z<ãY€õYŒ>LzZY]Á_ÅV¬%N•=4Jd<›$ÏùFªÝ7!\R­Ùò{>„íÚEVa &sý9t5GÛÌU³‰Ý·ŒƒV’h9jU` Fy­QÅZIEÛ†Ì+ ¼Wµ5UåºÉµÈ8Ö#‘iEMA |:Ùšè#*ÔR(ÅD¤V;½‰E„½ªåGE­ŽœWÿ]®Ž|8îPU¼ÝÛ«¬Û¼ÛÇeÚûŠÂwûO£,J¹]Þq<ùšY÷¼FmÑ‘U1á]ŠÓ:3J5\w\X#¸£EÙÌX²ìT.kÃ’YÐ]_`YNíeUCÜ_þí_ÿý_`þ¥ØÞ}%`å´Òâ-[ú ÍrdÒœTÇó¸Wl4Ý3Þ¿¥Üv,sÛ\=#Vc ]&I¬LØÎý@Õ5Ó­ôM먡TÔIÅ"«VËÑÏtÖ#…©ÉZÕ¶Tí]ÈRMoÕZu¶ þŽnÔÞ-bÞ­µEa;cáÄõÆ¡”'¿ÜW¤ËØ“·$Þ6ÍÅ1|Í'*\~â1&㟽%ÿ]r½«u`FÕYöÚf~_²šÂ%&çj•T5ô±Ê0´•Ú¼ýƒOnžäºTaM~ÃÉ=bañãî[h^gÑ=-!Åã«`çìãY[.ÿZ³`a¶­âKC)4fœPÞt¶Ý4–2 ÌÛL®å‘vf %62_ú T-µÎêLÝ1K 6»S!„OÛ‚ONY-è„5Y‘>Ê[fPtæä*v.I&–•FdøÜ­—&œ˜¾§™öÔ–nÙHÎiÆT(mFŸg[îè¡&j ”ÀS]8|Ääyh_·KlM¾ hs[»‹öÇëýéªÝଠ¶c„ážUç.ÔÉN|3}†=41þŒ¿Üu<悼ý‹¾DHæbîòâî9‡|æ îkƒ6Ui>Ôßl,ùÌQÐfam6i>FÑ,ásÅÙ„ÐÇ×âÂÄ’fç`%齦ëUàÞâØÿFÅX‚¦Ûi09öë¯æéâ¶mâ&ÉF.®í_ÂŽ¹m¿•ó`½Íã6éädÍÖnc ßwlnÛ}nR¶°én0¥›í„În¡^ïí4ÝöÉ+4Ü{†î& …£n]Å\öæÛëÆîÍêÈM[ÕÆI¼ÝjÎmÝå3¥Ê+K“mÌöjîæï÷\Ï×^båDY¼‰bÑDáp°îoÚîênä¶+…õl€åVÆD_~nRßo §qS=ïwof•ïŽÕSƒÛÎß7ñ»Þ@/rÆ(Üß¶mç7 ¿=!Ooõ®qÍFqÿ¶ïO/¯Ei®&q¾no1—ð 7nÿ÷.Éòhá†ÀfÛb/ñ)?è8äöq$ŒÚÁ–á­ò×t|s½s9ÿïôAŸpna¯Ë<s0ÇmB/t*ŸtJ§óNsÆRν­†ór`OÿtPuQõErtK?tD—tT·ñÌîî²öã¼ôc®í+Oõ·õ;Wp&NÈPûâ/ñ\ô[7ôV¯ôbß;°Ró$wó gåc?uhviö°ô·ZÇõhWõl×öiva7ó¢…_SßöU7vnïvp7÷s§öL‡Ô@'vxgwr÷vlOño·w¶ö!Gït/wÿwtÇ÷z¿v¼Œì_xyx‚wzgu…ßwÿÖîw€gx‰xˆŸs‹—òG?x‡W÷†§øŠ_÷ù…Ÿx‘Ÿw'ù’Gù•gù‹¿÷”‡ù—ßxŽ÷ø?ù˜7ù„WyGø™÷ùqÏxH§yNç÷¡ú ßy¥_ú›y›úš×y§wùžGú¨§úªÇxœoy¨/z«¿ú®÷§ßúŸïx¦Ïy¬Oú©{±ÿú¶gûY'òµ'û¬çù¦¿{´O{°§ûº—ú¼gû£7{¼ÿû³çz¾|»W{½÷zÁü²O|ÄûLJüÉ÷{Ã/üÊ_|Ƨü·ü½Çü¾·ü̇û(W|ÇŸ{Ð7}ÂG}ÖoýÕ?ýÐoüˇ}ÕýÃ|Ñ}ÿÏß|É×ýÛçýÜ÷}ן}Ú'~ã·ýßïüÔ¯}á/þÏ~Ü×|å~ä_þçw~àÿ Rß~îï~ïÿ~@d~ñ~Í{¹}ôOëÏ~ÒwöäŸ~ìÇïa-}ò{ó7úëWÿê/ú¯ÿõäü,hð „*lèРÇFœh±`Å‹ fÜè°£G… CR$)q¤IŒ)¢\Ù2åK˜+-Æ$Y3äMœ3Eî,ÙaÎA5%úóãQˆIU.åØTàÓ¢¥N¤zò)T¬L—Ze‰µ+Ò¦`ÃrúUëÖ¤cyšÛÖ-ܲoµ®õ)7®Ú¹yñ­k—®ÞŸ~î9ÿxaᇕ¢Ízw/_Á‰Ovy¶ñb§‘%o¦\YfgÏh3;†ü¸ïgЧ9‡FÝZõjéM’®}yôl¹=ÚÞ-Ô÷oÌÀ§Þ6íú5íáÄ…#·Yü¸qèÒYÇ®>³wsÝÖ¯+¯ú¼ûÕìÚ£ËïU<ïÆ¥§—GoÔýûí°ÉËOy}çæÉÒ ø¾wû5„]~ã±×Þ¦' [ .è`|ê'!Mß!x ZÆ`x`‡ýqây$â'â|¦x¡Šöyøa‚(ºøb‰2ÎØâ„4žˆ£<>hcŽ>gbCƒy$’I*¹$“M:ù$”QJ9%•UZy%–Yj¹%—]FÿyÐ O…ÙÔ˜dŠy&šK•™Ôšlª×æOpö$çœiºiçQtΤçžoâ'V|¦$¨I„úgˆª©hŸŒ®dhHFêè ªçÍS˜6¥é¦™zúéRœ&%ê¨ê™z*ª©ªº*«­ºú*¬±Ê:«¬ä@'0)@Š?÷P"3õú+AˆèzOJ¤xÂѰÏú“«ò„$Ϙü@@µþxã+°!ÀlA»úÃϰ’ä,AÂ0&µÖz„-AèrË·àòfàï¹éFêë@ß¾‹«®ò*4ÁyRì´ Ÿ+€þÈ€'ƒTœÒÅà·Þ.I÷ð0÷xÿ"À·”|€cÆL äˆLÊx„È”³7üò"ˆ¤¼QÐ(<˜òë_tÌcrKŽžÜœóÎ=ÿL€7÷m4¹ p€7go­óÓQo¤±70=Ôˆ¬]$Ë0sÀ­w`@ňÜê] r€<6ß¾ƒ nSü MNÏ^üòabMŽpne[İÏþ€©<#—NÉá¬4AP€iÖæºÕ™[:9äÈcÀçC‹>é&ä¬ÞúDü«kðµ×ñF<ËOÍÿ <è×{ýÑp+÷C“2À=wn<óÕ @lîO¯+ ÿ@:ÏNPè&­¯|²P9‚  (,È=@ÁqNj™?XvºÅá‹:óÈúÈ€ü€rÒ* GH³€ ô‡8•¨ гcœ@.¸tÉðf-aCh耷ºáÈDf«1.%ÃÝÊâÃfÀ7ÛáðE’ÿ•ü Â.r@ "àÇ ­’é ‹ðÄÅ*XºêiîhÀ»a]Wº³É#ga”ÖEЀbÝÐ04£G<€0ë8™é°ØAÒäP–æ?ÍmŒXÓФ¨‘jŒ!dÝÿ­Å°CήƒÔàæDé9TF.„¥›^ú^Ù¾‡€?ã¥Ér;¬ŒSøâ1A§Êƒ43v¾ºŸyÙ®Š¥Îq2$‰­X12­+áì¢7H³³qLâcÚ=ü8ˆb†ä€=ãá †ÆCçÅÒ E´ãÈB²>Z/ˆ˜§Ë|I*¯ú”›F¼hí ôè0R€³ñÐ<ì¡<é©~´ K iBÁ;àyÏ#A×¹þ–ÑUŽOSž¨IH¡)a@S>ôN¤…¤bÙêTɧAÐHÇáq#:m—L•¼iNEZüpR‹:”{ X?•"Sw†$r S_m"„ÿ‘p•Vn}+\ã*×¹Òµ®v½+^óª×½òµ¯~ý+`+ØÁ¶°†=,b«ØÅÊÕ‡ 9!c#+YÃMS€ád3«Ù¾VÖx0œçfEO¸ Yþ˜¥WS(±Ó*°XŽ%Ew&eÒ½jéfs«Y£é pŒ;@ÂÏå›RÜû5Íhù@Å–;\š! $ߘ6€ä’‚fÆ£nÃ;Y£m°¸Œ{Aà7´KÞ¢¤Å9¬{£=ë²"Ûü$j€ úñ|M£Ù¯ø&Þo¶³¦Sš€<´„ Ò¸…3.„S;£Ñlp—å„Ë´ý¦Â`] ,bÉÿøÂï“þ†v+t!‚rËŸÅÐF_ÕìÄCûÓ²÷aFŽjÝmÚˆƒ¬Ø3ŽiøÛ£?¼HÀ'¶Ð-®7È[\¹¸DÝà‹åÜâz‚f¤2˜ëAÈ+c¸ŸPÃEµšž¹§\ÄØTÛŒÇA¸–ÌRµ­@ìæ=óÙhàå3 ½O·‚>4¢­èE3ºÑŽ~4¤#-éISºÒ–¾4¦3­éMsºÓžþ4¨C-êQ“ºÔ¦>5ªS­êU³ºÕ®~5¬c-ëYÓºÖ¶¾5®s­ë]ƒºw¾þ5°ƒ-ìa»ØÆ>6²“­ìe3»ÙÎ~6´£-íiS;Ù¸6¶³­íms»ÿÛÞþ6¸Ã-îq“»Üæ>7ºÓ­îu‡›ÌÁ »ã-ïyÓ»Þö¾7¾×ínÜh%ßþþ7À.ð§{ß1j Á®ð…3¼áå6¸…Žâð‰S¼â¿7Ä9Ô‹s¼ãÿ¸¶3N¤‡€¼ä&?9ÁE®#‰ ¼å.9»U$“À¼æ6¿9·e.¤à¼ç>w¹Î©ƒðŸ½è:‹’bô¥3áHÏÐRš.õ©ÿûé#‚7Õ³®õx[}CXß:ØÃ>Hâb?;Ú·MöE=ínGûÚƒÔö·Ó}ëqïªH“–‘׈ïüñ{ƒ"n*½kFðB_yˆÿ+d Ž<ä#/ùÉS¾ò–ÿ¿<æ3¯ùÍs¾óžÿ<èC/úÑ“¾ô¦?=êS¯úÕ³¾õ®=ìc/ûÙÓ¾ö¶¿=îs¯ûÝó¾÷¾ÿ=ðƒ/üá¿øÆ?>ò“¯üå3¿ùÎ>ô£/ýéS¿úÖ¿>ö³¯ýís¿ûÞÿ>øÃ/þñ“¿üæ??úÓ¯þõ³¿ýî?üã/ÿùÓ¿þö¿?þó_þ¾#þïŠ' ¿ÔõŸÜÍ\ Þ!àübÅ< F N V ^ f n v ~ † Ž –  ž ¦  ® ¶  ¾ Æ  Î Ö  Þ æ î ö þ ¡!¡!&N¡.!6¡>!F¡N!V¡^!f¡n!v¡~!†¡Ž!–¡ž!¦¡®!¶¡¾!Æ¡Î!Ö¡Þ!桚a@!ù,\*rއ&&&777HHHVVViiisss{{{Mx¨W}ªiw}nŽx{ˆxx™g|£u} Y‚®]„°~ƒŒ{ƒ“g„«fвmµy‡¨rްz—¹Šu~š~l•yv¯{[¹{X©ky½ch»kw±j»szÜ|6ìz/êy8ò}'ð|2Ü[\Ö]aÏc^Ê|OÉzVÜkOÛhVØyJ×yUÈdiÅksÃzhÊryÙegÕmpßrhØwxæ^MãWVèfIågWêzIéwWãgeæsfäxw†oŒ…z…‡{˜“m†–u‹š~“¥m€©w‰¥}‘¶z‡Ç{„Ó{y˜…x¾‚I¶ƒW«‡g®‡rªz¶Œf±q·“r݃.Öƒ:ô„é…&æ‡5ó‰)ñˆ5ò‘:É…GʼnSË‘ZÓŠGØŽRÛ‘NÕ”XÍgÅyÕ†kÛ€{×–hÚ’{΢yߣjÚ¨xì‡Gê…Wç–Jè™Uñ–GñUé‡jæƒyê™ié—wí \ð [è£gî«sî±|ñ¦fñ¬pû´x‡‡‡‚ˆ„š„›œ’Œ–––‰Š¦ˆ–©‚š¹—Š¡—©›±‡ ¼š¥·¨€€¦„—£’„¡œ™º€‹ºˆ”¸œ„¨Ž¡¨—¤·œª¢ Ÿ½£Ž¸§™§§§¨§¶¦±¾º¬ ´­»»²«¶¶¶‰£Á—­Å±Ç£­Â¨¹Ë´¼È±¿Ð­Á×½ÀĺÇÕÇ‚‰ËŒ“Å’šÙ…‡ÜØšÕ“•Ø¢ÞŸ¡Å­™Î²—Ù¬ƒÕ¬Ö±Õ¶˜ÎªªË«³Ìº©Ê·¸Ø¥¦×½§Ü··ä„ƒå疊嚚ꩉå¤í¶†ì¼”ð½‹ô¹šå¥¥ë¯°éº£å··ñ««ò´¥ò´´Ä¿ÅÜ»ÃÌÄ»ÛÀ§ÙǶëÁúÅ—êŦé̶éмõÌ¥ñÀ¿øÑ«ûÖ¶ÇÇÇÃÌ×ËÒÚÕÉÅÞÏÑØÑËÛÛÛÄÒàÛÞáÝàãåÄÄäÏÐç×ÈåÚØõÇÆøÛÆöÖÖæàÛûâËøéÚäääéìñ÷ääóóóýóóþøòþþþÿÿý['° Áƒ äÇ_¾†ù¹{Å._>s¯Ü]|•1¢Ç‡ÇkHo>(!‚LÉÒ£B‚ cÊ4s¦Í„5oê,˜sçÍž>g *s(QœýçÐb¾rN£æS¥á•ÅWNAÒÀUƒ9©R¡‚ýÓç[>{úÄË6ªØ¶pÁòCºTh]»w‹æ©4o_¿{_& \°©Å·ROyµhNÃ…¬æ¨Bj±Óo}ú¤íÃ,n[ËžáÎEø·n饧Q&½ú`꣯ƒÂŒmÓðÓ¶XM[§Ø‚§Š¿~nû-m f¡Ù‚N.—nëÁÏ¡G8útÚ>±ëœÝÚöò|î YÿˆÁ#®À‡k¹r÷qG»®®ýguëÑëÛÔ¿Ÿ¾ôÀÞµÕ#ã•Ljb§D¦Ád•ÁßwÊG“×ÝÇŸ^R˜ß{ÈU¾ià›V]©·žƒÉAŸ„Z¤£)&š‘̱h#aT.ÉäjeÎ%šcÖ…cb;žÒã)]z˜É‰‰_g²Ùg`iª)cšoF"W¾©R§'Ú©g -þ èšdJ™!¡V‚5`‰ŒPæžG‚êÙ£”NZê^¶iê Ýeª©bY­ÿã ¨³2j©’vª®2æzw«j«S´.ê¨s|öªl”¾þ:e«Äûž´a ‹ë²~6«š¶Û²¬«ÔÞf'B­­×&«îºÙ²Û.³˜žîav®³UW‰ËhºÌbûî¿•îêìž‚Km±R¡™dž"Ì¿¯ê¯ÄýNŒªªG +­ÃN¡§¥zKqÀ_Ì-Q©b¡QiÉ^>ч`XÆHÆ;¦±D1†Ñ"d¼a£¶Bv‹˜ë¡/%DÓA1N™¢/,²D§$ÃNÌG™qÄYqBzÜNæð¸ÇHÚ‡`7òŠhx–´˜1m<#"¢Â¤‰Ñƒ9¬ãWÉÊÁ…P„&û¢4˜–;ü!íA£ÙhŒS棂dîtèJ;Þј•äâe9ËZÚ¡tÄ7¦1„ a‰Ó˜âÌ9©Èã…1tOCRr')Ãdw=/Ùmtpè†@Ok~Ã_Èç¼ÑÿM˜1±‰a"&,JPñ!3™ðêc¸fǧì¡@Ѓ4–ˆÏ@x_ƒ/é]®1”¡§9_9½VÔ ëÜœ&“4Ešõ=Cf¤‘‡/€AŒwØg­œÒC&rT-i9iR¡u™ ¥Öì’G‡ø@¢ÓCMoj>tA²úTTz:Ê¥GEèA%©Å<2“Qò¨åäc|£@¾Ðoü¡ ^X„%̨x”—m‹H‰Vt–U¬c½äYÑ ˆœÚaÆ‚zð0p _èBÐ ®ä •xûgW£f0ƒ§l•‰ØÂ^Ò’ýQ§›Vj'yÿÔat{ Np‡;à3³tÐÌ*öÚר|†2”Š3ˆ¥©¶µÅLllYkX>²sˆÔ Æfðin€£]°‚0¦‡¬79^óî;ó¯’3ºE+|]ÛÅÒ-fÞ`Æî`‘odVºáªrÞЀƒqù Û«Júâ¶>gu5 ÚÚé-ßCÑŒ6ൾƒ ¡U昽<]ƒç{Ò÷¶˜°Æ}ídpàò‰}ƒÐ0¼R¢T(C4R`ϤëUñIêâ¯VÂd¥pÁg§v‰~€¦4ûëÛ-lÁ ` CÊ0äZäªðÄ.˜ÁÏj9eÿЀÆ4žÈ f4c-ËÕŒsÝ;RéNÊ4^f ŸM-B BŽgÄø9L¡ ÉÈÃÒp0ñÁ˜ËPöÊ L„FZiGÅÒž6µ|†±“ŸÌä>ûYÆIeTÓvQ+@¢¢¡u°Q4°ÅGÁˆDÔÁ¢H¨˜w$C¢æå;Þ±Ä=pÜг`SÍêWÇHÐß÷“d»” 2=SäÄ^1ÃÞCv–‘0 l`H(" TÔ@"îjK§±«ïÈš Ç>Ðìa܆îªnÔ…OØ‹±¶WÜ1»,ìuvº64¨‚Р—yö½Ëâ}sF‰ˆÿ¼¯™È€|id<¸’–ìmÁöá­vµ©힦• cn Ĉrc̱8ä.—ÈDÛÊ®+µ¡q›È²œÚÆÐõ³Mp„¯Øá¯¥nØs®êé”ÊI"›á…|†¡Íx;då! !ᚈÌô¦;Ýì4>å ^¢¨ýP‡3œ¡Üô:ÍãÛä†;^¾,6{…Ñž$ E u„¢+Å>Üa@Àƒבæ80ƒ›(O†-Ÿ8Ë9ö²Â¬°ˆÏŠ,á8¯¹ÍÅh²#õº±#eŠë;ì!Ó8e¿QfÃë–N[š¦ )’¼°¸w¿}î'øájéÿS¾W&&CŒSüÆ7‘1e„FïÆO¥b3œ]?RÙ·ïsÏøÆ£æéÃ>þ3€ï³ t°?åà>À :7À¿tÀ l 9à>ð ó³ ¡ «À?\á>Œª0?€*¸‚,Ø‚.ø‚0¸@¤æ£pf ÕdMÆ  w v§BrRA]q‚pA}Os3Ømý§s‘y`W_7,ò@Ft€C|’ås0Bv€('àTC0Áª€„|ÅëÀ“°L ¶‡6¸eÝ·‡c§{~h…àg=å€uÉ @p<=Ðwp(ÿQw>xAV‘XAbm¡D:`: l¨‡_÷xþWŠeG…¤XBp` 3£#ñðe@ ]a PuL”=¡ AàƒTw{£ˆŠ¦xŠÉp©˜E«¸e£Â;´ÃK¼)¿ó‹´Î¸¼`ѼW¶Õ²r> Ë`½Æ d@ù$`™ ruð °#€ –&FÕľ£ šÇ˜¹u‹¼»$uº^&ÛuÊ”zW’@_¶ Q0|×Ql@…ðm@Fpª` ` i´F¾;l|y™Ë¹p·ŒÄIüœÊ+*£F;{íšæ2àe% h }ƒ–Æ` 4  çp ô´D“ PîëÁÅ+·s¼Äžk¼¯ƒ·'ZgOz'ÃУðÈ 3Ðàà6ÿpêñ“àp  €MàH@OÉ€¶Õ¤¶¤å ÞÀ¤ÏÂLÊuì¬F uê «ÀÐ9´lšÐ `¶Ð„©P ¦”| b r×DÀj¢C;º9”E¼¯¦|ÊŒÊÎLV«ì%§ްH@ËÉPHBÐ P˳"ÂáY¯p  €J莛‘˜qSô¼Ä)Çô ¿ñ»ÏúÜÏÛñ‚H€Ý>«ŒP¿0 3°å0 0YtÐ Ð3 Ð>#¨Ñ€“à>:PiˆÐ:` íC½Ð>½p€ð“‚1øÒ0Ó2=Ó0ÿ¸±3Qƒ(b€ 4@ëàEÀ0€ P%àçá<Í„ÀØ$ Åœ;›âGÅö©A[ÊBzÇvœÊ6MÍxkeår\áë`ÐçЫÐ6 z´  % Pè¡ Yˆ "ðM` þf—p7`Mm):°¢dwZ¬7÷ÌõËÏþ¬X#»)\Á³ðO•ë‘À)«Y2š H R €„ST…G%Ò³0 å K0†=m Ž+”Ÿ£l ÍÂ=Üø<Ù”-Ö¡L¸4ð»C\é| ²2mïÜP T TpmrÒÿô j@‹ð æÀáÐÐ:0 ›ÐN` ù‹‚À ¥ûÛšœÅ}Üsz¼] ÖÀÒÄqa36@ÂѾs˜Q"¦zÕÝ»Àl‘@¹p ÒíDмùmlÑá’mÜ!^Ùý¼÷«"g^àl¢l“Tä£  ¯ “ù NáäØÃˆTrÞ–ò wçWŒG¬::¡Ù%ÎßMžÇÉíËÝÜBŒC¾#é°ËÞâÍ[AŽŒpëÝÞï-”E7‘D|ä7‘ä ÖOÎÕŸëäsåŽÖ÷òÔ›}iwçP äq‰Ì`(i•ðÔLÿ°G ÆçÁÜ4@:p §° h: N B°¨uÏÍ<N‘¦œ çu.çx ÍÄ I<Ç7ë`ÖC¬´ÑŠa ùòÚ ° N@´<Hào¸ ¶ ðÔ$@AÀ*@Ë0à@ mo¤ø-ëùét~êù<â$>hzL’(" µ+ Ò `:Kðl8àŠëç¡ ¶`K@* :0> ydÑ^¯ÕNퟺä›ùÕÓ¼ßv~âÖƒ¿q¡` Ñ ’¨àù0 Cðë²r JĦ*p‘@ïNEœÁ @‹}¡®©nªß¥Žê nð¦kQÿGÂðŸàîo³`ØH`g¶ñLwÛ7 >0°‘˜ã@þ (m:ê,íÙóUoõöë¯ÁžÌݧ°/Í0î`À…"pJ0!à·ðMÆ@“° ñ¾K°*p@ð0P ÙÞEô`òQ)ŸòWßò‡OõS¯ø¿wçáò ¨ —èÃU"ë`ë(‰ëJ+@ËH Gç‰:@ËM€Û> ìõÎÏNè¤óDÛ°¦9ñï‰OdzOð!ü¾ÕUÍ¡„@\cÃÁ æ% z Qñš<Û£OM@‡x*À;ÀÔOý@À VÙ²B‚ÿУ9azrÁûX/âå¿íŒŸûÝî¹a¡ÀÓÏÁÓqDf\~Wò@• š4p ñ±ÃGîçÁÐ!R}LŠÌ#KÊg° ÔH9ìlpÀ§ J $Î¥ê´ËŒ¨uN±Ê³îˆRE 2Ð@¤ÚQåUVŒÄ 6ñìcöxã bòy%•[l9f–iÊY‚†C™„­ýzØÏ¶ A†™àäG° “˹‘òYgc¬A { ó¦1m*ÓL 1<“% ZÇ‚âŒÀ©MzHè$ªÒ4€@¸aˆwòyç‡ÿ-ÊP4 FD a†|Â\t¸Dw’™m H a…ú`ðÁ î`fAë@:©@‘Û’KV«3M #LsÍÄn•²6‰b$‚¦N‰ÀXëÄ,)¦X´@6™„†ÚËã3ˆ!† 1jÐ$–À!ˆ!¼2f\r‘*¶UaT·æèã*Tp8’Ó’Ëxw­×Ã,ä·¥ÖµVÉzÍÈ8ÛÉHƒ95iC¢Ḣ)0ç•%fQm2òD ʺDƒ&Ê2WÜdä™f\X eˇ`Ñ4ˆ;ö¨§z¾40A¡ÃRÞY¶Õ_ZžŒ`^‰‚8 "pgá†Þ)ÿ‰)¶´%‚H¦2rÌg‘0¢‰‘Kž4)h†¸Á¶!xð¡ Qäq !Ä™Çk€†ÉK‹×hèŠ:h¢ Ü#ƒ¡Ö`a%(ÖØ¥3J•e›eƒ&Ì%¦ 2ˆ‰„‚*vÀˆ!Á] )yÔn¢'xP!=Aȇ<êÙÇ«z ¤ÉÞ-‰¢òp±^ï}7»Äó9N9õt8r-!!ÎDO…ãcŒ°­`d Xa…%’X©Wb©Ï†&QÁíQá_#žêÁ[÷ã2ºìÕ.‘á .€,Ò“¼|´ÃC¦‘Ô¦†w¬HŒcD0@"F´kÿJD¨Ø‰Dtˆ¬€NÐ%nÀ…À ÞøÆÝò¦/’hG8÷‚ß øœÿˆ,àЀ‡@&z)’ž*Ìá!GŒK0ÖQ1 ``í#Ž4.Ð`OhË\Êä@߆Œ‘3fI#—ÁHïLÂ%!J&ˆq„Ì÷øC=ò1(HL¢I¦ [¸g3 9…I4€cêTlÄy.Š|ᙘtð•úÜ -ÉÈÈ6Ð cˆ£0¸¡ ¯Ä³¸iK¿#â 7´[‚éU»äe/}ÉKÌ”C˜Ã$f1yÌbÚâ5¯±2‡©Š 0b˜ €~ÿQW,ÂYDB2Šrè  €„0!‘a[/äÁ f!Ì\ ±¿x‡4dðK|æSŸûäg?ýùO€T %hAûéJ2‰+‹ä/Æ¥H¥ðéDOÔ@#I#'cšÌâÑE¨4!7øTBFùŽdÀ@¾ØF<¼±‹àÕKâ,µÄ³æ2§„ÃeÐŽ¨´B¢-’E¡Ñé¦ië€F€„&œŽFI8@p™D¤Ö‡p ¡ ^èB7âAZ¾„»´i`櫞òt§s¥«-ú° "•…*GQ¹³ >Í ì®’‘Ô‘Ô:0ê:ä1 ÿœ":ÀÏÚxV/|Á ñÈ:Ô±ÁDg­ü+r¼ÔC¹Ö5:Umz…:¡ðy¨ÃT1¬Á)«+›Å;hÔž]¢ã+³¨M[j3‹dôàaðE>ì¡m|6# }‰þè¸ýqć¶d-wS[DŸ"¨y= *ñI£ÖéWY½-#2‚Ê_d„FÃàe1ŒñB$ƒ-*ˆ…7ÔRtä#_Ä6zוèØ]hæÚZB8®­u 3¥)ÍÃæp‡=Œáyˆcóøp‰§ôŠV´cJîhÅ+¦byLi⇆32iPÃ;>ä;îQj„C#Ý 0:ðˆ`•ŒÿöŽ8íÙt³Ká OØ»ß]í™\+ÓD­h1Š[¡ôcÖ¸Ù<æªì€¹ÓÀÆ;¦1h˜¹ÏpF¼QfÌ’#O¦G`Õ»–¸ Íॲ„ mèþqM€ÉWgb DZ¦`´5&5.hôn(½“‡ØgDËy¨Ã<‚Žlù'Ù5Ž’¼7 ÄªBŽò¡khãéÄ8©BÌ+L¤ÃÐpÏ/ 5‹×ƒÔ8s9Hñüå°#\ùf]7e™×ˆ;ÊbMkoç:¼àN2¶ýÚ½™»#¼ãÿò!wÔ£8æ?mÞTA‚ñ’½8UíPÛÿ¹"·aü(n\\Žü~°Ñž¼i¾vguDÕh;€{ûyºªbxÿn:pÆøðß;A8¡M~ò*—&o¸dXîàI|ºí¶cv^eoŒGûÈÑ!ªxØè£½RUÔQ¸˜ŠnôãÛs|2ñ©nmúϼd´ŸËóœcd­­òݼÜÚ¯y]wÖÝ]­”§\Ào÷d×1 tÓgΡWÞÑ—ÇH9Jõ¬ë9à6E }Âõ>ÝìˆFyÙÇMötŸÛÑ*1‡²+“À;ÃÓµ;ÞóNÝ…äÚv:etÄßºð„·«Ê ¯Vsû›g±~{ëg¾Ž«c\ö—åä7K;Z7è¶ÿwè{ï{¢§}ð2å·ß­Ä“~ÜÝ<¼ø½3®œª ùÔeþ•®t4ŸèF4=éÌð¿É}s÷ílï¬cøD9‘ˆR”#úýæ%ùIëôÓCyû¼ßµ/xÔc:ßaÖM+ŽW¹ºh+…OȸOˆ¿Ž`´ª«¶©3@ÌC7оßã?ƒáã@ûã£H+Ü¥ˆ>-©¼ B€6öƒ=Ìã œ>È»@ ½ÑÛ@ýë?´ë> ¶š¡Á+-¹»Dø„OX‡€¢ˆAË·|Ó;½Ã@øÀÀ,D:,ÌAÀ³=–È ä0<0Ø«·õû‡«ëÿ|™Â-©£úÃ?ïË¿³«C;„°.¼Câ[º0T|Š9ýù3棌U ‹£®Cô;æË—ëû¿ ÜÂGìAì#¹Ý©¸‘#¶&>ì%ÌPBİ^²¹PÂmÁHÔC„D2±Â+,: lºRÔ''ó `Z+aC)Ô´{!8,Û¸IäESlŤsDa¬ÄÀ+Å1ô¥ ÓD3äÄDÔÄÃø<µ[²_»`\ÅaÔ@ ÀÎÓdœ»f<Y”:"LŒnCŒìZ+KETÜÆvìÀüÁ9¬5"tCš{;?£¹©3Á|¼?ŸÀuÌœP<:,Èy”Ç ËCƒ¬µÜ›¥Ÿ›>jœ»Dì’†­ÿð»Ä•[=‚ÕìFÿ1\»›p²ÑÜ5á˜ÉÊÊƽ¤Í˜Œ:¿¤Á߼ɛ‹; tÊÛ:Ôäʉã9íÜ;@ÀÖŒGç$ʼ´Ìj”Ì‚y<9z=Nì»}‚¥Š\Kä¹·ôÎ|‰•Æ»£šð”ÆRôJå¼FJlÎç\ ¤(À²\°…Æê“:ed<⬮®»¶]Çè4>ä\ΗäÐì3PóL(¨Ë!›|•ª Dp|à =²´”)qPŠ££—ÓÈê¢À«ä‰ž,FPILN`DGKÄÑ×+‰Yb´™¬?Î\0Ã|OÒ|¼ºä9Λ© íŸ*4°Q`õd¹Ó Т<Ð?ÝÑ®R¸ºÌ=QüFE ÂÝÈWC;XÄV¡’êSÑÕ¬>¡ÔÔò´Ë» ¾ÙôÔ cOŽ“ÉœÔ·ƒÐ ”Ô³ BõŒ;:­R¡XË’V[õºFSL¤ÏÝëÓPõRÝVÃë¹üáɨC2¬ÔÇ,•R÷ÔPëÅÀð’A½Ó¯ÓíÀÖlíÔMÈ^½WÔŽ,“@­$»NÔüÅÔ¸Þ$Hc­ÎaÅÕ“¨K ðÏ_­ÏóÔUÿ|ýÒ>ìVRŒÖ=ÛHWÛEù8¸ŒVÓl´tÕ·ŒÕÔ‚uÍ xT@ T<ÌWŠÅÌ• ÄÄlÃðË!š]šl×a­=¶ºÄwÕX¡uɶ{Ê=M_M9‹­×‰õIÝ;(­Sñ w=Ç‘SºTÖ0TÖke;¥ÐHUoýÚ…Ù-µW3áG8ô»C9'5M&Öä;A­ÅYhÌYêÍêÜÜjÈs<ŒìYçÍÁÜEÎÝåS´‰›²¸E•Ôšd\£ÝHÛ}0­@íHÒ›½X€©@6iܽ\öÕÆðÕ]³Õ^°]Çÿ¡ºŒ¹ºÝC­4^ÄØ&ó;9-Ù¿÷üXrÅ\êýBò¤ÍÀ%¸ì¥Ì•û_¯EGµíÎduÛ{Òí$_¾5TþEklµ~_‰Í’bqÖÌ#T…ƒQ^«`—Å\÷­\QUG^ÜrßnT=s´@sM\^ Z,[¾%Ó&›<¦àûµàã(Ýž=ÚÞ E`ýÇד;%#?ªÜbÈ¥F$VÃ\8ÿnkbßeI6nc7~c8Žc9žã€"Ú–ÙÄG6ŒÈÃbSΕßÝëÞ]ôKåÝР­_@¶]AT5¶ßÁÍ[Ô-^•Ùî-Z®äÌ:½YìœÊ7”P1TÖ ;InÏ£MÐÆ5_„ÚÞ{äEÎßê…ŒV[(æÜ&NrU½|º²%ŒiÍØ~¬O ‘á üÕ>ûåþ}å'¾ãÐåÝ]ÍH Ôa_>Ò¹CM¾T+ŽQ]<<Ž_šÊÙï¥dÁÅØXŽæ¤EÊ÷õߎ˜ËÆt·å»Ù*Þ¡ŽÛZCý›_,ØyFÞДÍHÎàoNg¤]gøtÌjÎǧ LyNÂUǨA|öQÿ}fh© ^^ýgMÖ׀݌v“ü]ï/1pöÎð¿fq)rÏáÿ€kWN Fo¿0ÞÈýQLÅpÍÕp‡r1_ê%ïqA…ßÖ’A˜ÏèFp:÷q;ïpÚDq=×kªåNÏ~Ls‹éŠmòS&ô1‡ogFôAWiíbt³vt„tfVñÌvoJwîÏóL§p¦W—õó8Ou9rP¿sS/t÷rÛÎ,Æ2ò~+S 8'çV‡u2/ó(Ÿõ)¯t›€8ñYÎ×R^ñX§nd/ö·ôj·veçÞ°ÕëΕv&ö07tZOtr?wl¿lw^vÓÌu1¡cxwyŸwz¯÷8uR/wb×öl7öc¯u ýhE‡nôqç÷~¿v×÷ƒÇo½m`ÿšˆv|¿Xénø…G÷‹Ow€OøM6\OswOjQ`„ßx“Ïw†vã-òЏ–Ÿô?ys/y”/öʆù˜Ç^ƒWù:ßv[×øšßí›ùŒyI'úŸú}/z¦Ozè¹—/Œ¨ê¦wz«÷ù«çx®wš§øÇyŒ¯zŽÇz²xžúAû‰·x±—ù¥oû ‡û¸˯Gú²w{¶Ïú±ß{¼Ïû/Ÿs¿çû¾û®{½Ÿ{…§û‘Oi0çùR|»|Äÿ{Y‡|ª—{ÿûÉ—üÌ×|¯_ü‘'y¥|Î'ýÍ/}—¯ûË?üÓoý™/|ÇÏù×7zqý”·ý°gýÿÙO|Ýï|Íý£|ËçúÑÇ}Ø7~ô ~âçýÞG~Ì÷}ׇþè?µýç7ýÝo~çg~ÔßþþÚ÷~ÏÇþìñ7ÿVýå×~Â/þöwáŸ~ò§~õ_ûóïþø/ôÏé×ÿ߈,hðàÀu2,¨°!D„#R$8±"Å‹!jÜØ°£G‰!#‚i°¤É„Q¦\Ùr!Ë”1e¾Yóä̓3Gî ÙÓgN‡.ƒZ$ªÒ迟•bdZÑéS¤I¥BÍHu(Òª¯r5ªõ£Ô©Y»zåúìØ´j‰ž…¶­Í²dƒ>„—í\ºyoÚÕ¹·f_œY×.lÿø0âÄŠ3nìø1äÈ’'S®lù2æÌš7s®ŒU.h¼_.:ºeé£kõŠ]3õgÑ¡Y»æ{µÙ··MÂŽýz7oà@…/õý»6`ÝÈI+Ÿ}|9îÖÎmC>=9ñ½{KgÍ}{víᣎ·ZfÚïåI6—íþýsøñ½·§-Ÿúuæë·žž¾þ| ˆ]~úˆ^é—`qû¡u ‚÷!OÆá'¡u§á†Fè¡ r(žƒ W¢[ 6(—ˆ Vˆâ]ö¹Ø¡Œ5RעިŒ18ጠâøc†A’¸#*&©$yC^˜£ŽP)å‡DNy#€OZY¥–]zÿ ä–þ±˜e”a¾ˆ¤yL¦iä‘¢9Yæ—`ÆÉåœb²¹¤›dÊ ggÞIšìõ(Ø›{z(ˆ&z%ŸFW(£ŠÚI夔úié¥ÇAº(§fÚç§Žzª~›V *f®(¬¶šç B©¹&¦«þ)¨«Â:뫵ڪj›·ö l°šê)²Éž*꨿¢ê,v¦’ªì²’¦J, Â‹e¬¦åjb·ª}ëã³ÅòEºéª».»íºû.¼ñÊ;/½õÚ{/¾ùê»/¿ýúû/Àø&"!aŒÔÁF%¬°T åðà K<1Ãÿ@œÓÅ5eüÒÆSLTÇ-…lÒÈ#•lòÄ'‡ÿ¤òF,cäòËG,3Æ4׌0ÁÛ¬±Î8ûü3È;óìs9aÔÑF%­´TKåôÓMK=5ÓaY}5ÖYk½5×]{ý5Øa‹=6Ùe{MÀÀÿ$R€ùf€@Ÿ°ÝV)PÊ?ùP@Ú)Õ}·@k·í÷'+í]ø?rîQ>ósƒ—c7Þ!!àö@(ÄÏÞ0 T âzp°â˜oÔ¸@œGÎÏ?“®Àzéÿp^€ç„Ø­Ðä£ÇͶéé^ÀDŸ¤]{)€.€ë/ñ#€yð !ѧ”Ïô‰ðOäå(}ÆÏ'ÌÛ=R>pðú¥°Ž÷¥0€G‰ ÿ@€@ó—;?$’Èø6²¿ E‹]9Ð7Фo}‰Ü:ð‰øÍ¯~÷Ëʱ:ÿ0xÀÊ1P~T`˘§¾þ"‰(áBªWõ­pƒá?  »Âaï%0@ô·à+„8@>à‡=Öbˆ< ?ú·ŽðèCÀ Aèа]<Ýáï(Z>”WFT®"¥@8€¢…1q8 –Æ$®Co_ìŸBFàÎbw[c)"Ú±ía¬£Ü6b€Âñã}ÖC€¼Æ@æ’@&sèHòpŽ©£IJ1€|DO‡„L¤Gÿ €[üGÝZ2€€~¦ü*CâÊR”1 ¢@àb$@Û °ÀŠÔñy“+Ç“B¿Xj½ À§L0—J!D.N3# Dæ?æÖ­c›áœ=ãÏq.Ÿÿ@ÀJ·}Fo¿\¤IúW ï­Ã•f„FöÆò}Ή!I^9âwPÖd˜ÅDÀ>9Érª-àÇ:;’:îmøD6]*ÌnºÍǧHRNæc~)ä= €í³óLJ1ò‰Àmù(@øÌˆÓ…,µ©F]ÇÚž:UBnÛK¨Ý`Ô1%š$¢÷X‡ÿ€/šä§rëêW;ªEëñíëG1RÎê=¤œl\©Û†×K†Úq¦Iùjí Æ¼º±Œud¥_a 45w}¤B"©Tæ D'µìbR¾£¹n—ƼìãBXŠõ°&¬Ì[šhÏ‘54|&!Þ—’Új¯«%DkMâPPæ6F%e/ZÆûÀ®ý(B=̇þçßãf2'©¼ã&—œkd#eŸ{€è2Ð†Í {GëJ¶!áH€æ”»wDÈ{›ËV\Þ0½ÉEWfê¼´í‰/)°Ûg€önD 8Ú'<’… Do®(ûÄ©k` =@UÁX˜ÿ ¨=ZOŒa gqüh¢ˆ“bS¦4.]xh†KŒ8Œ$B]ëPWÑpÌâô8] ©œÍ¦ä%3¹ÉN~2”£,å)S¹ÊV¾2–³¬å-s¹Ë^þ2˜Ã,æ1“¹Ìf>3šÓ¬æ5SD I)›ã,ç9W€G+ÀQé¬ç=ïÙ΄<*rÑ&¦±{Ýðn,Màì™só:P8lmÈlhÝrÊçMsz#dçy€s¢ó‹€m(€ñz—`/½V—Ú}‰øšjÃÜ`Õ¥pª5Ýéaû ôæ©ç9KвeÝ¥¤aÊËuàú,ž½g=Zb/ÿ“Þ4ª* è¾»Ù°Øæ>wCülÆñ•{Ýý»ïRQ]DTÓ[š û†ˆg~`Y´áøVMo6¦Ý?xà øggG‘—ýƒç1Åéõ2o$¼6÷Þ7ˆo/·–þvÉôýZá?y±Õ½ïÜòr¨À": °êuÀ‘–¯Fõ©éÇòS{Ø›ë¬Oý ÷AåFŸs99êÅ-“®\ú2 a©«mz^äh„Ml±G+½¢*þ±°.ö±wpìf?»Õ>A€°£½ín;Üã.÷¹Ó½îv¿;Þó®÷½ó½ï~ÿ;à/øÁ¾ð†?<â¯øÅ3¾ñŽ<ä#/ùÉS¾ò–ÿ¿<æ3¯ùÍs¾óžÿ<èC/úÑ˹3¦?=êS¯úÕ³¾õ®=e ûÙÓ¾ö¶¿=îs¯ûÝó¾÷¾ÿ=ðƒ/üá¿øÆ?~ïq5. ¿ùÎ>ô£/ýéS¿ú´W¾¶Ldýís¿ûÞÿ>ø¥}_5%üæ??úÓ¯~è[Y?üã/ÿù£¿ýåz ýó¯ÿýóøögOôŸ îßÿYËR . ~ßR‹O4 N ß6‹vT n ÞÞV jt Žà~à´È ¦    ^ `¬ Æ`üµ ´† Þ ‚ šË æ þ ømËý½¡ßâÿ ]!6aò !F N!Î^f }„‹… ` B`z!ra>ʱ` ’º­¨!ŠáSpÆ¡Î!Ö¡Þ!æ¡î!ö¡þ! ¢ "!¢!""æ!9œD"6¢#>"$F¢$N"%V¢%âá":Ä%n"'v¢'~"(†â#f¢Eˆ¢)ž"*¦¢*®b ’bB°",Æ¢,Î"-:¢+®D-æ¢.î"/Îâ-&E/£0#1Fâ/®C1&£2.#3Öá16#4F£4æâ3N£5^#6~b5f#7v£7"â6~£8Ž#9Þa8–#:¦£7ž£:¶£;B#;¾£<Îÿc0Æ#=Þ#>Æ¢=æ#?öc(î£?¤@Râ1n¡®á"d~¡¦aB^¡ H‹ ¤BRd‚á>äEòt¤G~$H†¤HŽ$I–¤Iž$J¦¤J®$K¶¤K¾$LƤLÎ$MÖ¤IÎÃIؤNî$Oö¤Oþ$P¥PeIâ¤C%R&¥R.%S6¥Sò¤QZÄSN%UV¥U^%VºdT&DVv¥W~%X†åNnåJˆ¥Yž%Z¦%X’eR¨¥[¾%\Æ¥O²å:È¥]Þ%^æ¥HÒ¥^ö¥_þ¥Yò%`&a&S ¦a&¦b.fM"&c>&dF&I:¦dV¦e.&e^¦fnf_fÿ&g~&hº¥g†&i–¦Wަi¦¦j:%j®¦k¾fPÒ¥Ab¤C.$Cž ÒfEêænÊDÀü&p§p'q§q'rÞKÚxE0ç ÇÍÌHçÍT uÞÄÁ8çs^çÐpgtZ'xNgÐ@gJdgÏ„gu¢'v’gy²'ʸçÊä |z„v2D}Úç|¶Ìyާz®'Ñ ÕEÑÕÄ€¶Dî€"M€ è‚’žƒ>(„6ÙISPHÜïh¦ƒa¨ß€ © £]Oì NUyÎMÞìM;y„Üç8ÝÛ\¨]`膞…ÙTà„¨IìÕ•è~U„裱Òÿ옎ÿMOõ´Ä‹yIS"°B`O"$Ïò4OJx¨ÁÝZK$óTP÷\OdÏøÔÓÿ0F@ZMüP QYí–˜Ò•ƒ¤bD=„¥Z‘YMSq*ã„aøÑ&á˜TP˜’C½NJ•ëR®‰ÐÑLú€’QÉ\R™•IÝR.}i«ZL®¥WK¨Òk«šF„5%k¢^Ï9A?ü´nD°ŠÿÕB\²j‡7íR8%a Ñ»š±Œ¹~é}‚ZYTH8“ÔÑ—ÉÀ•ªípjØ™õÔK”êv)Ä:äYH(Cë²2DK½?ì?ìéTÚl”߸M"¬ÞXSSM…Ô1[_˜Ò¢¾Ä:¡ˆ‚OÂ\Z\uT¦â’ʆìBlAÑ?ýhýÌ$Eih?„ÕX©ªÙÍ`ÌÚìâðЦD£ „ýÚ!íJ –M¡VõDØl½„)¥‘lÕÄ:õµEU*ÍWsùk9­t@sÝš!Óš„úDØ"á–ní¨ÿäVC €ÚU«I¼–ÜÀÛšÄÙ­öiªÅVqýVpùë$­OùØVáV(-Õ¼ªWàxQB„Ô¶ŽM½.BøÖJüиFDÒ¥K€Õç‹¥KáD˜ ¬)XîFDÖ ŒÅêšØìÞ‰EšŠ}k&=D„ÝgŠ!ŽðÒnŠ!ÙÕýC@!ù,{£R‡ """***555;;;DDDJJJTTT[[[dddkkksss{{{Mx¨b}§iy¡Y‚®gŒ´ír<Ü\]×^bÏlrÏqwÌt{ÒeißbcÞgiÓpuÓv{ÛprÚxwØy|äWVáZZèiIã`_âccällåopåqqç}qä||õ…ï‹0ð†!ö.ó’;êŸWíŸ\ä€ö©dù§a‚‚‚ˆˆˆ’’’œœœ€½¤¤¤ªªª¹³¯³³³··¸»»»… ÀŠ¦Æ›¯Å£¶Ë­¼Î¿¿À¬ÁÖ®ÂØºÊÜÌŒ“Û„ƒÜ†‰Õ’’Þ˜˜ßº•ΪªÝ¦¥ß¹¹ä€á…ˆä䕕暕囜ì綇ò´žå££å­­í¬¬î¯°äµ·äµ¹å¼½ï¿¿òª«ó²£ò°°ñ¼¼ÏĸÝÀ¤ÚË»íÄžùÆ•ëŧêϵíдùÌ ñÀ¿üÖ¶ÄÄÄËËËÔÍÆÒÎÊÙÌÀÔÐÍÕÕÕÔÖÙØÔÐØ×ØÜÜÜËÖâÞàâÜäîåÁÁãÉÉëÆÅèÌÏîÚÇåÒÒãÚÚéÛÛôÃÂöÉÄòÌÌñÕÕñרóÙÕóÝÝíãÚáááççèëäãéèæëëëïïðóëìüééóóóýööþþþÿ5I(‰Áƒ*$Ø…Š ‚‚¨tYxpO"FIA‚„Bb±C% #H„"K<\°°Á‰*V¸xáÂ%;yôhâÄÉÑ£HjòÃÔ$¤–¢*XtàФX³j%jt«×¯\ÁŠÍÚu¬Ù¢gÓ–M V Aƒã.CÅŠ (V¨Œ‘›ÐÈ FŒP˜`d ]&‚ås…Šc,²4±`áÄ ÊM°”¨J¥HjÖäñcI’Ÿ«[­j*miké¡§%µfëu-íÚ·ÁÚÎu7菉u;.ßãR !ùÁ„úÝ‘œJ”YÔõ’…ä$Ltÿ¿¼ÄM‰3îXŠ£Æ=NõÈÞê6ª%§®%Á8[øÑàþø›€¼X YWsÎÑ…{18t…I2]u×IQ T 2Б`,œÀÁå—ž$mÀ`òUõ”VK95~4tŸUþ×co?"eàmC$Rš$)’L6éä“Oêå”Iþ„I*ÄI6"!I2‚Š(é%$…ˆ!g€F!˜ÁœXò† [è!TQ¯UÚ|\9u_Œô $j=I›¢j–£hA Õmš\r ¢“ÞHœ&H¥—fB¦"Š@ˆŒ`∊`r c¨ÿùŤ.‡Dñ‘†ðqÅcBœÔHŽ^-…•}JÊèYËšÕ¬³’ IÛŸ:’Å›C ¡µ²MqÆ{ Bø4° …S‚0ñÁU”Q†"”Ôá'prGðÉfc°Tq¢šŽQ‹ÛTé³b!¬›²Ñú˜–[Iòœ»e”Žš$òZŒÁ”lˆÉ&GéQœP¯$zÆ7cŸü¶†1k #53 ‹2ì¨Â_ñÜsÞ3@ 7´iDË”¿ùëÔUšè©GÊ*¥GÀGÝšÅý.<Î]³åóÀGŽ­•Ùg©Ðú}ݟÿÛlQ_lšS~ä»5|Sÿàw½¤­]ߟWÝǦ[••4Ó¹¡míÎëÜp³K,­p•›Æ´%«1UšÔ-C̉ž(ûýwÆ,1·m{MÔÍo79ä´×í³ÜÆôX«qžµáÝÇïAL®çSDKRÇT›øžYWûúŒ5ê^ô×7.yŽO<ûä”F…øî`åÎô²Áö;çÅÃ×””Ã.ß¼ó£Co~Ò,Ë×zÚI!k°í?êÞåø=î™%s7›ÑÚŽ¢£Ýˆ4ÃÊ[éLG¿¥en(TáÆ·ÀnσL”Ú·òµNXÑ»Šm’gCéíny£šª†¡hÍiyƒÏP ÷±ë°€ ,Ûÿ(±ÈM0[! ò÷1ßÝe)3€fÈ:ä@A¨ÃjN8Kïu-Ë›ÉWĈˆe¼s¿àmQ»ÁØe8= ¬^AàAÕz„:å‚Vs¡lŽ×¹Ó ð‡f ɘÆ!"ˆQ< BP³›H²wW1ü8Ð <ð Y§~‚9Ì!¡ÇÈ3®Q‘¯„%ÐÙÁ¯Dr6þ+¡Ó@‡·ƒÌ&oAà„zÐ=èÑ– ¢¶h£ÞHO÷éƒ YYËG:Ò•BŒe#·Y¨6rpƒ’ZŠçÍ¢ÄÇd'û$'P–F -3M¯XÖ”^2ˆÙÌ'"õyÿMYŠå†üãŠûü0Nrºm)èK%QôpÔÔH‡Á2¡$чÐyŸøÌ(7­9KmB…‹ÖÛ]Þ>6Ò¼Ñm>%£%êÀü`”JÊaË":P{ÖI*>ÔèFý¹ÏžzÔH¼û×þ|(S‰6³m)=”ë@Ïz^Í™ùã=kö£?ѲšØôéNušUlþ’¨XOãÎ¦à‡¤|K¥~R9Ð.,—¹9ÈÕ~š³Dò´ŸÉ: &¶Jãµ—À{ŸÕü:RýÐ3œRcâÂEM±[ýŸV9 >»Jön|Ó_b «R1ZíœWËß@a£§Šê+‡ÚbHÅÒµ§YV{¯…me1JÙ@ÿ~N(¢]M[‡õ”0J}R \ÝbSúÌuzqUà¡b[WÚÖ6€f®t§KÝêZ÷ºØuªûÄ:Öö±•»Ñ c*±ÛVñfWºF=¯z×ËÞöº÷½ðïÒîYÙ: ýkp ’$š±Ì…xs Ý<Ï!¥Ö|l‘g43ö²™¥èç®;?Á«¤† ;`jOÏ 3¬oÃ8>:ïÚfÊŸQœg[:Ðs*Fuš=aeÓ&s¾Á þò&Í_­ußò±5•£Rç}C²4ƒàjwôFNX§ÿÕJ–Vm°–ÄŒfxÌ“Ìn£qÑ6VÕS)ó1KSy¤3­´Iý¤Ch?f),ÊâÚIP«¼æˆü‚èú²vðÀX w÷»g®u¶È I:Êß΅ŸwãvÆ4ÑK¼µšü£­¹VžðÁù’—Ãæo)Ñ ó€¼ÏÐb.ד=ø ·ÑÓpœ¸úÐ`1¦òçV®4Ñ.F&v+Äý÷µ/íV7­1ru—‹Í×·/ýÌ Ï:á‘lóx~š‚IY'„ã°§VÿlÆŸÊoF-ã#%³Éo=Íî€?4Ík>ÛÔ3Zü)V Í\½¯­´Ìà —@òdVUC5e®d€Ä:˜² òM ç|¨×nÈ–QÄ‘|âhÄAç÷LäF÷5`#fúóví$ZÁnýw6WOˆ=Õ6ú×EéS…fÈ…^(:]SdÝ162ƒ7ˆƒ4Ø|]×Xå×~ýq~3•û1¨‚T-}cùÒ3Á¥gagfEWYÁ÷ÿ‘n['ÿn‰ê¦H “Iù&m…å}27J¸>DvtmCˆs‚3–w}g ¨rã>ɇ¬ÖŠô'‡Uˆ ÿcèƒC†«å†î—HäMgR ¦`yÈA;®Qe•f‹·8wé‰Ñh‰¥÷H}(†K‡Ò„®8R±8löC(<Þ‡,p&3éw‰`g}ÿÖ}ñá}®A‰×ˆj_Ö….gù8 ÙhgðĆÕïUf]ãNb6€ q[êX\‰ó‚>ù0Ôˆykv²X‡tØX‡’~+§v¾ØM_‡ªYVá>úòNÔâL9ŽÒDžÅF'Y‘%ÿÇŽS8=ý…†û¸“Çl@™h{ÇÉnµ{}˜|þ£$ b(}0#•<(˜r.ghf'Xð&„^aöŒÁÒlWÅŠ¾V‰‰y›‘A²} jY‰&ŠÂ¨w¶dSÐfH~%‰eöUKÑvZ ‚Ü7wÕw8AéztňÕx–PÁ‹-wQÂY’6ù†8yy=3ñ¤JQEep 7€D“VP©¡kóÕŽ£9óÇ|Ï—¼çEø(@;h„`'p„>Y„ñ'$Ãr<.cÜØ˜C©5™„:É@ƒ˜¦‡š‚GbòÕœáU^måœÖe^Ñ^fe^ñEí•k™¥]Øy]åå]âÿÙœÜ9]á)è™]Ž)s#9t¢é —’Y8YB¹˜eaõTÇs‘Hóù“p—“¦i1(…9wiùžþ‘yH‹ ptùm¸duõ[wc㔃kÁ~Ãc{‰8C2Iõi˜¹ÁˆXóQ·Ù‘@Ù?B™S)<“Ž­t,ôxk-ô_cD8Ä%c* ……ƒ|½÷6EÕ€Ft£H"–¹ÑŠj”¡9‡«™ ¥c13‡#w.z[Õ>oŸÃsšß”Ÿ™h·ÁŒ^ÚžÀYú¨–ËY‹(uƒ`F…eeþöz|¢Ë×eÁsNØ¢OI›d¶­ù¤ª ¥ˆš¨‡*‘pÿº¡Å÷z…Eˆ­ášxº{ ýVˆB¦lÁ‘±©o©˜j*ª£ ¨])%†³þÉL´gj=ìC¤‡–ú1 ¥Y£Rú%y¦ŒI£ÅI¥Šº¨‡ÊL}&~Å#0<êBà…S׿2AÚylEºžóè« ó–yÇm(Ø™nº¦ ê­CéŠÆ3>öñPÄRTöáWͪ$BJS{X?Ñö§IA¢¿Z,Ø{8÷¢ÀZªSÚ¯Ì7k:vª(i‡¢Ÿ‡vVê’úB0`jNR#à(vô «¡ºjŸ±sU °,jªfIu½g(dtÚ§BážY–4q:=e!œ§µ4:'PD ]ÿ#›áªWÞˆ«à £¤*¬Û}‹uÔ4›r*f™Ês*«CZ7’t1Ó²£c3k55›±P‹±…"¨û³!û¯ÁúµD;°Â¨ª«§½’°u¦‡£ZŠ#T¤±$AU˳{w±lš`¨ sû‚^Û­=K­ým …‰'5Ó”‚Š>OÔ¡¦”¡{¨‡uVfiZ¯™ JJ)e©K†ö·‰ ²b ¬ÄŠ’è¢Ce8±ã?ëÊma™£Rs-„ÛZ>Hº— 7Hê¸_å¹z ½K…¿ks±ªXÌøOÎèžš{x’3«ºaë¼þš«zËHÇ‘¬5W¤a¨W(‚c µ§÷¼Ÿÿ ¶ÑÛ¼€ÛXRY½;Û•ØK©'zs’s©à¼¼+¿ ¾·á¥×“4ºrϸ¤BÕ½i–@ ½LÀA °;—¬‹£Üj3 Ú¾&šƒè†’»cjâ{ÀñK¿ ½̡՚ÑT˜“¹ÒÈ+ʹ͸];¾äk¿¢ ·ƒf(À4èˆM!:÷Z¿,½œÃ‡ ¿9û„K)aÄ_ßÄmêÂ=ìÃÌÂ@ì³í;ÄVÄÿ"“#”š1<¿Lì¼Ìû­þ»V4ì¯6|8aì·VX¾lÀjŒÆ*ʯH̶é«Fd¡iÂ]š»WœÄ;ÌìÄÑÂYƒ!ø#ÛöŽèÈŠU¾ÿ»ÅlÌÇMÜÇ~ É‹¥gQ¼f¼Èô©ÅŒÉ,É›\,&ÛÀF h—< éyʨœÊª¼Ê¬ÜÊêÛyÕ©Ê‚«ÃœÆœ¼Æ¼Ä¬¹Vþi³{»±y|ƹ¬Ë{ÌËZˈ¤…,Ê'8b¥¬ÂÑŒÌy ¼·ìȺl¯ƒ+Ç6j=}k·ÊìÉŸ|ÍÔìÅi,zÿÀõgÍãLÎáÜÉð¼Ë–›µ+üÎ-|ÌölÌî,Ι º7 xê¬Fz¼Ïü\ÍÒ<ÍùŒÎ]ÐÏÅ,ÏmθŒÏ–;¡µlËúÜÎýŒÑÍÝÑlÐ ÅMÐMÑ'ÒÌùÜÒ* ÑýÆ%mÒ0ÿ½Ò,íÑýÒ5½Ó9­Ó>MÓ<Ó$Ó=­Ñ7ÒF-Òš\Ô ]Î2MÔ@ÍÔGÔ?mÓ}ÏUÝÔ.ÕS-Õ]-Ô ÕQ=ÖI­Ô3­Õ[mÕOÕdÖH]ÖkíÔC=ÒœJÌ\mÖgýÕmíÖlÍ×T½×xÝ×~íÕW-Øw]Øi ×s-×am؈؄×­×ŠÝØŽ-Ù`mÙMكً=ÙÍØ Ú•]ÏoÝÙ€ýØ™=Ú§ÍÙž­Ù«ÍÚjýÙ¤MÛ­Ú›Û± λÍÐtÝЗmÛ³-ÜÚ©Ù·­ÚÁ ÛÉÜÃmÚÍÍÜÏ Ý¢ÍÛÑ-ÝÅíÚÚ­Üٽݥÿ-ÛÝ­Û× ÞáíÜåmÞÎâÊê½ÞìÝÞîýÞð _ØýÚÔ}Þó}ØÜMßä­ßèßÄmßõíßÿ-àNàùmàÖ=Þ àþÝ Îàý}ÜŽàŠ,Ö^áË}ß ŽáÕýàîÛK-Þ®áâ¹}àŽÅîÝ~á^Û$^â*îâ nÜ6~ã"á¾â5Žã<¾ß?ä2>ã,ã>>ävâä/¾ÛMnáEÞãQ.äGáHžäÓ½ã.^×ì|å]^åS®å`nä9ÎßbæO>âRŽâ[Näenæ\þåJŽå^>Òi®ã&ŽÉhžçPþæs®çhNæl>æknå„Nå{ÿÜ翽äuâ~žåwnæ“þç€>èþÍ•Îä|žáˆžèŽ~è-.ê¾èŠç§ÞÛn餞êœîê’Îèn虾ê´è…>êµê¬Þê¼Þë–n粞נNç¢.è·ŽéÅ~éÊÞìÉîì¾nìË.çÀíÈþìÑÎìØ~íÜÞíŸníÞ¾í¹îg^íâ>îèþíà~Ôîîþîðïò>ïô^ïö~ïøžïú¾ïüÞïþþïð?ðøžžä($ ¯ð²ð?âðßð?ñ ñbñþñOñA¢ñÂáñ¼ò¹!ò#¯6$O'Ï)¯òñ-ß#+1ÿ/ó&ÿò/)3?9/;Ïó6¿ñ?$ìt$C/ô’Rô?‚ô=¢ôK)LïOõj3õT_õVõXŸõZ¿õ\ßõ^ÿõ`ÿõzÀDÑ À˜?  L–À  ±ö À<œ ÐÜœAÐ\Á à÷œÀ ÀÎl370†¿N °ÁDð6h,  ;ß÷~ øƒ_ø‡Ï@ž¯ 0tðø‘Ï,œïCAøOú˜O7  05u° pð°—µûGÁ9@½,Pþ=€ð’ ü: œ€ @°úÓ"= ÿ` =@u`û÷ûàùp?¢$AàÀ9p @î_ €š WÔýiA $q"ˆ@N Ô) ƒàCˆZz@àA ôèAG@$ŽŒ˜ã@‚ÔɨI@,‘¤iÀA<‚©¡Cš#q¨SÑ%:tì IshQý`À‰©H ¢æ¨Ê©€ž a9Ýp ÉOK4m 6¨žš4 ð£€'IÜŽ¤h࢞¨ q4xÀÉå̽o(@ÉIBI~ ˜àGb‚?ȉá„öP€™Sß‹’Xò£GaÃ'^ÿÜxN8L®|3µ<ÀvytiÌ z°‘àƒÄe“TÎ|¦U¥ÿ0`)jƒ‹Ž}›~Ø@@ œsú±€|DˆMpõ{‚à9iœÃ]‚ Ë´#È’à*¿ÞÍ0¢Kk-=D"O?=˜.9¼3À‚X“$o£:4€µ8©ð=M0à!:øÁÅIªñÆø¡*¢ºôs !üPtÏ¥ Ȭ+ü‚€Žƒ0€IàšÔ/DNrxÀÅÎ03LÐäÄî"ïÁðò¢ÐÀäþ’ ÅÿÜ4 ÌÄÀ< ¬Øt31ÿM AëˆQ<÷êaf²dî"“¦I+uT%qQÆ`àDühżòh­ZÅÏPý`U [@.ri-jÀ (ã h1.Nxpï‹l-¨^cÖÌÆ´¤ÞŽM³*MÉWÙ •Ö4 ã¡6Û_Ij÷]«HÏ?t”2²°°IGÅ”2Áš[µà¨ãpÈ ×ð°KØGq@`Ú`LÀ^ç ²Ë7}Œ“Bu|OIìx02ãß3 T@dHÞ˰u ˜ÝKy¼½ÔêdŽ @cŽ%2dÿY‡ôìé˜ S±lgk’Ž® s qW ":|y`·UÀ×’è˜ü°m1óc¹ÜnлA?°Uõ=ê®S±êd~{lßæ~ îÄî&H“À[«oþN̽õ¾Lq`#Ç32¿ÁÑß圦Ð3ÈÄé^õuØc—}vÚk·ývÜs×}wÞ{÷ýwàƒ~xâ‹7þxä“W~yæ›wþy裗~zê«·þzì³×~{î«dàïÚê~|òËG>‡ƒR FóÛwÿýÛÑgrýµpHPÅxåîøo? ÐÁÐû)ˆ= ðƒ~ƉàF¼‹Ð¯ÁOƒäÿú†Ó¨Å#"Qa€Ü !,1 à 艤4B”ðÐP)SÄÀvpP‰KŒ åƒÂ¹HÉ+pIª<$ð`€|èô-g€ ª4@Ct("‰êìÆTL¤ca'?õqfŽŽQ‹Ãƒ UH@!S”Dôí°+ôC€pSÉ„ˆ…€eŠhGLf21xäã\€3—¸¤É0ÔƒÈIB'aäD—OÊg,…ÜH%9CMPĈéÓd/}Y^ÒÏ Ol(=TI"êá‚g *s(Qœ/ÆtX¯i¸¦P¡®Òðªé+ ¨"iتA\Ô¯õž‚äG[=y‚ü´Ë6ªØ¶páö£©Ô¦Ñº<ñ Õó®^¿ù*ì 8(S§mQum*Nìâ¦FJ÷mTm~ü¤õÃ,n[ËžC?¤+aa¥§Q—6½:ikÒ¯ÿn}8lÛ«§ÆSlATÅ^?·Õ–VP3Ñ`A#— ûuj¢Ï¡Ç&8]vuëÓg¯®­¼©ºH"Dÿ°ÐhëïÅÂáÊ[žœ}è¹y³W”þNû:ñçŸïº4÷¶é4Þx(†JdLV™{ËuÇ TðQ'ß„:Çß…±içŸ[mMÕ›½eÅzé=虃&Fˆ]†²XakúýÔ⊂ýÇ*`¥X¨¨³ *«Œs¢‰¡¡ø Š1îõ"Œ3®–¤’.Æ·!TžÂcS8žÂž‘DÚÖåWH6YÚ“E‰)™}͈æ@6‚…£Ž\Ùà— Ò asL.餙|­‰Ô‹~þÓæWnÕÛ*[ÚÉ—î…©ç™×Šçž|6)^ƒFàˆP6§¢_1Êž£QZX)^’JYjžªò•©¦ŠaÿuŽ{¢>X+r¤šº*«ºöê+¥­êõª¢·Ò êhÁŽy*ªËªÖìQÖÈá±TR[-¨¹òªí¶Ê> ) ´Mkm±lù¤×*š-°¿²Ëí·ÞZšl]ÃÚIîWçhÅUp^ª{)¼ív»«ÀL£«âR{oT©@&™§ 37oŸÏB[q}‘ªnº wi–èEÜÖº¿k°»(§lp õÒ š;Úd³h×bØþKq¼ò¼3ÏuE‹0ÇÇZÖÎf~²^\ ø0ÎþNܳÉ?û<5ÕÌê|TË_¾…gÖu\\ùŽÈ¯Èl‘|rÉX}1Æàn—pÑPµÃYSîhš¹AÎÿý¥ÚU·í6ÐÎn±ÖDqÝå[˜uÖTZK3ˆ6X€_ͶÊcžyÉ,ûM,Ty—%O6~Bää`">xÁk·¾ùå+o uÇP5“Ùík™ˆzT•gÍúëÀ[{à *hÚ"3¹ë~lï«[-|ð¾ÿ^ýÁÂznïrî$š³Ô×k>ýøá‹ô9觯þúì·¿~>a…#ÿüô×oÿýøç_¿/vÔa‡ú  õW|¸ï€L ÈÀ:ðŒ 'HAöGZÆ#R;´ÑŽõ0 3šÉÌØ†ô= Y/zÒC¡ùTÈ9ÙõëK¶Ë Üñw@#Î`GTÈb–¯5¯NQ3a ÿ wB" Έî*ÞìˆDºå‘…bq‡1¦8Åu4Ezk 3ÊR¤ç©‰Ã£ ]'F#*ñ…DJK÷ê?£)Î0F2Ö)®QMiãKd'葌äcÿH<¢‹‚€Ê}Ñ”)B%ưb=šÈŒ'ŠfwwŸ ¹ÉòÒ“…”[Äó¤åõ°##Y»ÛÍð’^Ô$!99KPÒòp«:ãî@˜<"ë‰ãëhŒ56eƒD&›âG\±–Œ¦4‰=LiAÄñîà‡:BÐ Bˆ0Ehlf‘ÜWlˆC6ê‹Ô\!4çOyJž:Qœ{ìVÿº8øDè8µq0 ÙP'è¨XÅwʲžŸœæ=‹Hω qhK„¡¬>ô{xÆ *ˆl b0¦2£"L:ªr9Í´è!:H™ÎnÍç5´Å™õ=˜Cfž¡0„ax@¨± òRHJWøÄé3izK©NÕªº<–í˜W‡ø@¤ÛCQÚ”>xA³úT#‹Ù§Ž*ª>IÕEo×·Õ5nSÊh—ÜÑK0ÌÆÐ†€0„0€ÁÙ„¾À j¥Pi)1Uú¸ÞÇ®—5œMí‰UCRËHê–a "ø ?Cº/x! ¡Ø ¿Hˆ7†ÿ²ò+íh3¬AYdÍ5Œ¶¬ê])JÕëeÕZî°Céø„œÛ4¨ê V8² »aÁÂÌ"rÌ´ì~4»Ùˆ7¸(<®µ‚±™‚ÞÁÛ8©® Œ-Ê+Ø Í×à»EÇeò·æ-o€­ÊY·P”zµ̲Á 0à¡)Úh­rÓ‡4P%¿žÙÆÝ—HÞ‰WFä5ð€‡KÜÎ"ǃŠ6 †@4à ‹­@oÆ0†H¨54v"S—S×TÀÂÍlˆ… `¥è“AòØ0¯è‡0Ü! TXl% Q3ÈA7öÌ~·Ñ_9Èãr˜¯êã©©÷KéøQ)þÐÍoBxÿ›\àÂÂP3˜ílÊ8Vñ‰]0#¡¡Š 4œá h\ÑÌhÆZº«ðú¶š#&2™%]`këÌDÚ#Æ`eúaÚ ¬ =ÐA 7Ð×ј,ØÙ vð/ÔâHEgðõv\Ìín{Ó2£W¢¾v°ÍèY:5mv¸B$ÂAº±Åq8GE@[¸ÔP„þ0 E¤‹õXG2t`kb®cSäg¶aF{¦×–®4¥+ìx8¯(~y¶Ø Ç6®­Æˆm#$qØà‘:X„¸¨EÜÖª–ãmס |7~˜Y\à=ïHwüÇö¦7±O¼»­¨ÃvZÿp¬íœm gL [ë1n…—E çŒ#)8’S’·øÒÚ¨q‰}ù×ç­÷˜éòPâ{wM GìL]A¬qçÆ˜,bÉaN±‰Øö'¼Xt;Ã6¥ý9º±‡u·ûâÿ°]0»tyƒXÌw?ºavºœ²i _0¨7HÊÑÏÂÈÉV¿:Öá–cXvNë)Úúv@ìθ÷¸é`®»È“^Q?]Q>’DìO÷V‹Ú¤ò°ÆsðYÌHçΓa Ë×cÐ…®G¾®€…+0b¶#“;”&ýñÐÏîÏÿüL޼Ûq”Ùxàƒ¡aÌ&j#›oËÿÚU ¶4 A ò¼ÞKzç/ŸéÍ7n±ÕÓ°hƒ°TLÆ·¨ "ƒÊî°ÃðT_Q37£~rñ‡t@æ€x>t@ð3@h?»Poàm  Apmð rP¼Ð:>à¿€?¬ ¢À ´óÓ° T@؃>øƒ@„B8„tA•oDrk‚0X@`Î Nãd Ê€s x-83SÁ:ç÷4 (W è~ïgwÑWb–†itZÝ”DÀ}¦åt@Cw€('àUD`€õÐ޵…ÅçДÀM°È—6ÊW&xÿ—wð‰‘x†c˜8|w:k— -ÊÓ=€'€(…aàáWSQõp6ÖR¤6 :à‡Œ(}¢çq·È€¹¨‹¨†ŸSGDÀ>à òðž˜T¢x| ‡†6:‚0™€ÑŠl!Y/et•¨t’h†e8z¤'S¾¸=õàË@XÉÀ§u€`PaCð_ _“v@‘ Š! xã ÉÀ}kµFÆý†Ð×Þ8lß#wzÖÒ/í0Xqxwક‡>pa3¥ãífP \q O±vTÔ=ªä A…g—|¶¸¸è’¼H‰“ø~áè2QÁ xÿ`aÀbܬõ?€aÐü×¶§p ¬0yå$n-WÂô„ãDL†V‹ë—íYÉ~[IM5 ÉÃ{47Í b€“>yl)wÀeh𠫤#ká€nå·Vã8E)Ù‡‘·’”Óˆiòˆ2y]‰•’ö•lÑ …R¯—o–¤xºÕ d Š`dpZÐçxÉTÆ€7áUivÉÇç„鈭9˜hx˜¦‡A Æò0‚Ç–`ÐaíÁîÀ ‚ <œ¡ íöå‘ ™ghÀQn±sÐà”€ù{U´vUI9‡1+¬IfðS@ù’ÝI†®é+ŠÿÍà^[$;éhµ :HãFøÕÙP ŒÐ$y«Tkr¡£‘V%áÉ|0 ž°)žó‚PP¦–b žHXÛ ý'ˆœn@Š  Ðc€{Eüè`|Õ™6úIð£"Æ^ƒ‘1¯Ù¢ùŸãÉd~ `œ†Å›ò@ÞÕ0]P…ðuÆiVw‰£R¢²ÑÄu¢áÙù'/J¥ òGrËÑF‚pP] cy~¦hÇd;l¹M9ùŽa@î UÀT@…Pb0B/$¢ì¡ Ìðg ÑÄS¥‚¨Vz¥ß©•²™†êüÿt6š¤`ÁWÔ•ß]F…M?'Nð àX° çÐ¥:ú•÷”¢±E·ã ÿ°³¢YL‘Û‰¢‚9 3ùŸ¹Š«3 :À‰Npa_ìBNæ“»i •U3°vЂ° vªManÔÞG®¥bµ1¥…º«0› ¸´Ù i$ÓG%Ì`X`pÌ€]Œ€_pdà¬%~PPv¹J@§ªqQ”õ  ÞÀ-Y˜Óg«¬£¸Ê‡š^‹j'‚ bZ~à“¬Õ(РÎåZ¯á'q4°ÑÙ‹° {• ‰˜åJ³XÿЍK׫ìa_Ä©M,f ƒ «u–&"p0à\@]j¬:ê%ÖZNتß'Û*³9³6˰1ɵfV±q!¡‰¦x#“ŠXI%6Ú‹_!0$pc@Úg‰E7y7PEî䬚W›\¹‹®†™¨‰ ¶®Øž§ò0¦ÒzP[À¶^Àf0 @°i\€y;‰²& …ŒG‹l¡§|z«Šë{¸7«”¨³ýÕ³p·(PÜdSà`€TgX$§sÀF ž½7L)éuY(‡¸¶ëµ8[»´{»ŽÿË«HŸ™Ѐ @Àõ`R`P~g_0\Ñ{\@@Û©Pª))InS°û°äª½ß;» ,£á ã {{h>çC° ìËbÌPUà??2—É0R@Z`°9¢© jk$N|[Pµ° ¬µ2̸¼À¼ÚÀ_‘»oÇ NA•{@X“Pr¶ R@Ym@†n@Gp«p p rDGÕ{mÉ’XKÃÞ»µ1œµ3ܸZŠ·v;‘ë+{°tà2g%0i }³—G€±@"€0Ò€JPS¤º õV0¬«‹[³aÿ\Ã^ÌÀcŒbK¦qÃà¤àÈЂ3Ðàà6Pè±”à€  @NàIPÉà·â¸QŸÙ@¶,ºÅŠ Æ¼¼Ë\Üųy„Ëô¬Ðà)9Ìl›Ð `¶†ªP2¦ªŒ w †7RÛ¤s;Ìi•†ÛÈ+±ç,»ˆ;|,8§ÀIÀÌÉ`ICÐ Qͳà!Á![¯€  €]§ª˜a¬ÁÿU΋ ̽ÌÈMÑqE„«?¸Ñóà Ðáð ³0LЧUÐ-0 òcƒ3ÿýI@ ó£©ö‚!­¶ ?'Ø òÓ ˆ?<ˆÑHÔJ½ÔL]AF˜=£ô%â©Ðì@$p`,YÐFP.P½QÕ_¨PNÂÐÍ‘t­õP»ayÈéܵ_üËw׎Ìp‘fçÂNÛçðÑã¬à6À{Ì ¦ %0@æA Z ‰"‘ N` '˜p70N€I:€¤mDx^ÑͽÝËÚ6\×_ÛÎ`±)[ѳÀP¬ ’À)½WZ2 › I0S °…[d™W#â³ á L0 M€92ÄÃÙË& »vÿ½Îß=® ¾²ý_È4`½Y] ³rnëÖ` U0Up0sߤ k@Œð â Å¢‘à:0 œàO` Õ錃` <üh1òl¨ymѾ¬×7\ÞQQ36@Á1À¼;~`4¶•ß»n’@¹` Ò›mEàKÀ-¹ÛYOÈþã­áâ­Ú6Á5&×â.Ü›mA”U è³  ¯`°¡àâ0~SI8gã€é†§بNº¢±°ÝÚääÍ׿ç0è­Þ@qB8"ç­ýý߯ ÷؈pà ¾àU‰u%©ÅDÿ>eþªg^¥Þ¸náîæ`áwh}Û«6É¡1"ªÈ w°“w` hÝL€w\èM4 ˜€ ¬GA °ð:0|À[s­ËfΚ*ZÀ=îã®mÎiN±|s€Åë é §À/€¯a¬ð4ÀÌ3° «À ¶ Ž€Ö$@AÀ*ÀÌ0à@ànÖ*Qa_®‰ÎæÃÑ÷Žï4‰Ã§c"ÏÀ¼Ïð sz  ÀㆰM±)«` 6À$ * k¬zÐeï.Dþ9µéè\ì¯ýèn„:»T ²að MÑ ¥¨ðõÿ0 DÀí³2(œJض*’@à*ðXÄ»Ö茞ðCïBNòjÞ%ìNw®Ã¬¤l¡ò,_ÿî0³ÚIpz–ó_7Ý7Ђ>0°P¤x;ßE*‚*¥ÛëôOO×C.®…zòÞ#í çàòsÐ n(H°3p 6d $@ ¬ñLÀ+ 7/µð®b_x{à³+’ô!ú#ò!Ïô¥oúìLévò © ªèÖ5"ç0í;YíR+ÀÌI Z‹:ÀÌN@Ý>€îÏíê¦Ó¤ßð àÀñ´M/ò©ìØŸý…÷¡ÿ±…p]d³Ñ øõ {RM±°üÜÁON`ˆ#x*À;Àöoÿ@°§¦ËFÛäûßñûwîßÁýê-¬×áCˆý$B3)¶ty‘nݹx=ê]É·¯_Œ,?TÈP&PÄ6SùŒ‰“(Ðq9ëA†‘ÍdKmÍ¢aƒÈg+ˆôèA$H=š9 b¬ž6?~€ÿ$O­ zm^è0c¾…oŠl·¸ñãïú]Î<¹râÇyÇL\}æbq1…>¶©Î¨£&G4qVÓ]f:˜h:MD…Š ¤µnU ­õÂvÍüÜd Þ7BüÑíŸà€«G£áÎ·ŠžC¨9¾ ÄKº(¬ÐÁ¡“¦Ã¬³§S^á‰1ÄÆiÄ2„c ±i_Êi¤‰n°aø|ØjG¼ &w‰ÍprÓ 8¸þA2£•lHC-tIÊ“¨, à £Œ®¸é:dèTrÊÎC†VÑ@ƒ 4X…¦tVAe7%yBN²[Ç>à€ƒ˜z^Qå[Ž™šp˜ ÿD(1mÇv„/da&†¶ÉÆÈ,Ü­ž$)Êçœsà*lË笼CSAJUU,Ûа™Î± Z#ø‰Ì…^I%’[aJÇ( f…Àn bzÖù 3šÕ¢h˜áˆ00YEdÚãhX¡F|ð<˜‰Á#9UÐÝ—êõ†:ͲT,LnÕ¿Pm•TÀºœ©‘|B% èÅu!/ZìM p€JžjQÎ †˜2ƨA’`‡ ˆÈÌ”S6ÆœHYsQ£Ãmbw$š. ®ŸOée÷Þ}óåW£¡3*Úè¡L`†Ô¡5…4°uaÿ†k:³žÅp@œW˜˜¡äe©Yè“1dø  œølå““q”ayÊ4^€¥Û ðàÃg ¹Ù­à.R¨Ó&>îèÀ’ÖRq|•˜Ã™$ˆ©z¤î׆£Ök ´G(&‚HÆ 3ø¬‡‘8 ´Õ¶¶&gˆ¸>"xðÁŒQÜA ˆ!R~ÇqŽGH^›/qäW~ù ×‹i†¤Ö€•ƒ%PxáÌ9G%•ˆ'n'V&ÆŒ2ˆ‘„‚´vàCK./)Ùpä Tˆad´òAuîìÆy&qŠg Z׃×8æNhD^B “q̪V—Ã\MΉ3ÍêêSBÿ( &‡1!uWhÀ€¬€ J`ÅMbQ#8a*°¹jÈ_œcÝØ‡Aò–|ðf^¢jR#ú0 ô×]=†¤#L:¡¬j¢7­‚z¨ÎÔˆt8ƒ #p@œá§a‰ ZSLVˆ¬€OÐÁ%nÀ#®À 䃕˜‘é48óêMؼ%&‰D$ÐüÅ*%{lÂà*ĦG L8 Ρ5 `€2$QËÒCJ@á4­ù `°!9ø#uÖž¹«gœZ½ly¼61‘Šd`r É™@öpQb„‚ŠèaÀÈB'ÿq"/Š¢ƸÄP²,¥F78 SêQ W:ÃDpåï~Ixè@±ƒ©¯F擉Â,Õ¼üùO€T À GA zP„&T¡ µEzÒc‹…th„A5@ü"®`„B™%d@áÐ2‰‚F"6ÈîȃÌ¢ ¹pe8~1‹È@=hO}úS U¨C%jQzT¤&U©>5_މÌÉ  F(k¦M~¥¦Kj “Ó¼Ó„qn†r”‹(eÚ‚pqm¥œëH dà‹jÈÁ røGv¶$$ ð@ï ?øW}î° |*2Õ‰¬pÜé}@Ê™4‰ÿs8à IH‚Þw'%  @ÄšÊ$-L †Z)Ìð/¤¶à#)ÒîUžÅ›­Â†‰ÄC3·Ät¢J ÉÃÆD±Õ9G‘rŠ$÷§`ˆ;d×\ëÐ P àhv<(íÀÐðvá؇k#Û‡!£RØÏp»Û÷ÞÖ9~%ì¡ ¸MóT]Ø*§Yyn³èUOfŒ’%cï9Í{f‘Œœ@ ß/6®q|È˽éM.í8‡œCxÕ­|õrO|–ؼxù-pQÎÅ’‰`žõo#¢Î_,äNÖ2†3’aÙÙîÇAPA,²A<€ÿAÉ`à7|aâ}žœz‹/1¢)ÇSÅ€,‰y˼úZñ¾É\fUq5ã…ÔøÆÆÈq²Œ!„•-äÇÉÐ t`š¬ÀÈHîfÃvø¢)Üy¯geÁ§½\îr£·ìåù¾“ÅöóL&YÿZÀ°1¼ã×­y¸è ò|Z@XÂá6Í–P=ÉIñ$à.5RŸ™øÄð´®/ÔÛ“´81´É¥«sŠZE€¹tF8Q¶Œ;ÃwÒƒ;È¡8A*0Ö:íˆ?Pøí¨FEz3[†$„ØÄël=õ–^3úËòžw>Ã\5ª´&ÆÆt#± €þÂÇÿÅ89>sða€ª³¨.’‘ h€ÊÕDZ-z}j8£’§D ¤qV­W.»æu„Jnrú>G"_yË]þržñ-0Ç%Ìm~s™ 'æoy4¢±™ãÃñØÇÊs.pìc—VÖ”árW-#mx\Ò„‚éë)]}°ù’r»õñ}¸·ëOü:Bô—°#ÞaïÇ×cîž9$ìðþT?ÒtááºÐRwúÔIîWG×Ò(—t|I‚÷¨§Ø%ˆÏr’`k^Ò‹¢òeä $bÝF8²æé†“7byþë*¹'ŠKßÔG·»ÃçF½oW//y±gƒügaB|{È‹€ ÿñ”Yo Úö+ö=½ãxÁoÙôu~âÈ™«}—Šv Lz áéÞŸá8H/Ùe ÂíõñcWZ ?ú*¼ø]^~]Þž¸ÃÃäé_à‘f~}G~û¦ø Ì›µÀ1Ýc=øK/x;?ãS@ä3<{ÓºÁ›²üƒ:ÙJ E;´XÓ?í;îÿÛ=Û³½ÐÛ%™ˆäY@L½äSAl?¬Ã»Ý{ß0‰ì#íã%P‹úðÀ‚1Ä{ºÚSôj½ãkÀ\A%Œ7DAµ“5…@´¦£AxÙÀú‹²œìÁ$¸Ó¥¼¼",¼$\Â2BÚ¾-äB%Ѹü»½Èã \144ÃõKÃATCõûµà©¾š {ò”!|?1Ü¿;ÄCÚÓ=Ú£=ž@|¾CüÄB$ÄPlÁ54D·ð§$Q/ÇÙ@ºž*lEPéÀœEÿ"$$íë™ìÄÓKĬ<6´:`F¬ AÌ µë)\:·"•J¤Å<ÌÁ(„EÈ(#ÿ TÆ[,(½$6ÇkIgôˆÁ”¿Â¤L)AÓüM·¤N¸¼G”`â‘<Ÿ’ˆ€´;áì F¬5æ¤?˜¨˲½š §>ÄL?o„Ï›„Jß”ÏÎ*ìÓ·€>àäÎØ:Ƽ¢\ã8’È›§'!ÐÞ\Ìú´Ïë¬N|ü«é£Æô¬¼†(@žâ)'ñ ]”Ì7Í-½½ëˆá8ÐГA©<ͪ\PDŢ´Çf”Ì9tùãÌ!j:yI’\DÑ$е«|’&a=I|IÍÎøŒPOœNË Ì2}«Ak"Í›½I¬§ 廨¿ÂÄÂYÛ¼w©$ÅN#=Ò2¥ÊSÿ'‘=b(‡($‚ôOŽÄÐýüQu‹ÃtÓÉÀY/wËÊó¬¾=,SÔ´Î÷TR4eP÷‹>“°¾Ú "ÈÈ¿L4âa—•s ‰D·á¾”¸Ôw‘9œHúDTRUÀCeÒߨÑwO€JN ÒÑØ’L7½%Q-œ=+­S]’X#?=4,u DC´+ËA+Ý‹ôÚÓ%TaUÓ%}Q]¼~4‰˜tFÚó¸ ºÀ)ÍAÎ$ E¯¦{Â=COAZWì‹Lì” õU¬œº?UTURö#Ö…åÇ/ ÍsÉÿwœ‡"¥WÐÔŲÌ×O-Âä°u{½Í“×åÔT‡@[lÏÌËÕÃ$×45׆MR™u¿×Ù'Õ?é¤Ð }VoÍXQó¼²(³µêÛ™€:¼ÂÖc-M( Âq ÖµÎSEW=­œMFÊt—ÇÓJTìOÄ?¢5Ø<„‹‰GˆNTtÆ&ÑFdÙv ǨeØr=S‡µÚàQT?õ <Ç/<Ç?D[©×‹­×ƒÓàÀÁy)Í®ÝĶ}’·}BmY*›\ºYAeLšÍÜy $žN] Û2•œýPº$kÌ«QiZP‰- ¹­Ù©uЪÝ2å §4¿5ÿÏëZíËÛÑ!¶l}‰ DÙl­AŽ4d±OqZÜå\RÜ\p%Sé ¿ŠðXÂð֞ш˜äÚxŽÇ;Vd·ˆ$Ø~ŒWíåÍE I¸•ZÌuÏÛUX¼íˆ¼ÝÀ•(´UŽTK!mN³ ‰ídž@ÅPuÝ!Í0`éM×ù=\A|Øë5S™Ô0픋_‘Ì»³dTçÔ”‡ôßùÚÙ’Îa\J¢­²` ßL¥ß»Þ_E" ¶BG%$Þ×xRá²ÅU¥MÐÀDÞ1tΉäÝnõÏø¥]BDb¶Þva‘=`wýÙF`@jV˽%}µ=»">=ÀzCk-Ýÿ%¦Þb…:–u¥á¶áŠËõ™ñ%a{5\•­sÓÄOùÁT„·i“ãx±EæJ²]ÕË5Câµ[(6d)V‹XÜ]% mß$Öã«ÓMñ%ÿ¤‰LœD5îLúKUUå­à|dV®_½_»BÊ*+]òóâ-¾¥<ÝÛÉ“FN¥Æ6öˆŒ‹AJu`TÎ%<žÏXî8â{å¶_~Tås’.ÂÞá‚à׋PEO—YÅÕáܽÊÂÅãðý\[FáˆÐÛ“sâ†eÖ™!ÕÑÄà/]¯zWþ\Ùß“ (ÀÔB#ÝÉû$gèëDz®LóÅÚh.Ûadÿ-åU[æd÷ý!ѵSgna \´Vf³dSjÃ*ãV¾sÝZ3fIÎÊtÉxÉ?y¦Ú‡žg‘ME“¾è=ÞÞ—9MîføEÙâ^»¨L ¿Á]dd\^Ñ=´ež`e¼Ÿa¼™&=ݬj«¾j¬Îj­Þj®V*{nfiÖÚ’ÇçÈ_ÆåR^S®àJý^²„LžüÆbVöé}­›jÛÕëF¦g„>Áâ ?§…ç‰ÆGìæ¬;J¾ÑñŒµBFÀ‘ˆÜ£-v¾ÉÞfêã ®2À¡fh–h2Æhj^$Îþ¡^iLíºéPý5!RFŠì£ÖcÂ>m« ¢jÆÿ$–í+mêxæk&¦àº®]ZDØâh$ñZ1~B»Û¸×+Ͷ~ìyt 6VkÛ‚V‹Žè7k°önšV=W݈½+Ñ”FNnMß…Úý-áº"ÓGVï³­cà혖_âŽâb xy<òQó¦å¾9¿Ù•ÛöÎ÷6ÓøÞ+ß½dŸJáNkðï 7ìÁ¬§jåGMÌÅoýTT4lŸ±ê¶^´6k¥µâ4vœûîkYn}Ì¥\‹¢æÖ¼ñýLŬqÉ®>{±íùôaÔž"I¾ÝgîÆ^ýÎï"§ÈÆÞ0 Êæ9fìV-@šhÅô2á ®rN–Ënr#ÿëÒ–Üÿ˜—q8~r…Æ 꺣QŸù^í¾b‘6c¹Žn@îß,DÇÞZZfæØ¦º¨«îÝþn GôDŸg ÆßÈÐ è µéÆËá©»»õUËþÁòœæQ6O´ž>t™mÀ®[ gÑFXQÿoNŸc£¶×óïÐÄôp¤uN—tOR}-npeAßkSOj öuRusˆÄðä–sAªå±Þèzò°<ïÈÛ‹WPné×Ó»6ö=–ˆ6ô4OõEwüÎ㎵ -ásÏB‚$Ö–¼p<…È‹U_¤¾ÕÞ w¶Ù„e¤"åÆpçöw˜µÊJý!²­ìO_¾’<¤ñÿuWàôHÖIÜÓÌÖ "ƒÎÈ ø5/lãVs•Pñ84ãEDc§ÊkÅq]€ÿx1ùÐFõ˜MÏW`ŸeŒpæ[׫co ö¯.øýVôr·î›ø;‰] •›> ©V Ë€¯y£?ú ‡qu}nÑDk„wúí.P–&—úî¾z’Ïú´OôÇðƒ÷½@Ù¿Æ‹lŽœÓm5íø—zœ^{r×ú°Öûßøã+»øß0áGÚw^ÆE¸¥Á«ôx¾vÀW{‚?ú²ucÕâ|/C•µäÍza?û¿÷{¢ø˜Ÿz‘×øöì‚ßT›áæ™×\Ñ/}™?õ‘OkÔ}ÿÕïgzsýÕ攋|§¦üÊŸüð¾üÔŸ´ÞåQíü±üü¾‡äÙÇz´'}ã§ý×mü²þéäPl·güµýz«zÌÇ~â·z¶|¢è5¦t/|™cÂw˜/ê¯þõÇÿü}8ßp›ˆ|ýòÕË÷ïàÁs2lèС…R¬(Ñ"FŠ3rLØñ£G7ЬH²¤F”Oªüׯà?…õê|iðàL†,["<çó'РB‡-jô(Ò¤J—2mêô)Ô¨R§R­juªNž&µ>Ü©ÕëW®Å6ËÓ¬J´ gö;GðæG¶a^$[·§Ý¬yCîU‹Ò¯HÀ ÞËÿ÷c¾Ä_Ö;—S$ã™4õö¥\Ù0᎙5ŽÙyóÈÏ"%³u˜ÏmËÄpïæ% :ãk‹±·ŠÆ\Û6îŽoçN.ÛÙsîío'nwvJãd ?þG°ßXåb]ÿFÞUútìaµŸ]ÛûyôàÇ-¿lþüxñéÑcÜM°7ùõå…˯¿¼:÷–Ö¯«ÇHºtá±—kóÙG`\íç[~i•¤m n‡WƒUh¡„Ý]؆Š· ƒ*ˆ_†ú‘(â„(jHa‰¶è¢Š&vøˆ8¢÷½XR9⣌@b¸£‡, ÉãŒ4&Ú’°5éä‡'¨#‘…Uiå‘Ef‰%}TNÿ‰à–J^)f˜œ=)[|^Þ˜â—?¶éæš+–ɤ‘oÊçjê¹'œ|ö &pcÒigž€úÉæ¡AÎ exÂH¨¢Ž¹èJg¢¥¥ÉQZ© Œn!¤Ö×c£†šz*¢¨¦ú'«­ÞIj—®F*)’zJ«–¡ÖZªª³öꫬ¢âÊå°Äª k ºæZ¬™Ÿ‚Êì Ê‹,¬ÕJ í­ØrꬦR›)¶^Êm¸Ò’Inˆ±;©¶ÛšÛ,ºi®Ëî±×&*ì½ôþŠï¼ËæËãU <0Á|0 +•¼ý»¯¾Ÿûn´ÿîê­½û«ñÃOlqÇGû­¸Ï¶k2Ç!ÿ*rÅ€’¯,»{2Ê2 s/Sœ-ȧì³Í5Ým²;ÏÜ3Ы*½4°L7ýjÆC—kôÍ4tË?µÓK- ÕScͳַêvºT ½ò×iM6›g¿]5Ú ³ÝõÅuÛ©Üe=÷ÚOß-8¿m“×·á1ã½ñâŒ^xã#9¼j_í÷߉óª¹p“?î5åY‡.úçyë3×¥;®ºÊ„Cîºé€í9ì«×Þúë·'Í:îìÒž;è¼W.ûåœ}zç©ë><ñ`7ï<æ/¿5¸Ð|ôÅomõiÿ<ðà‹{öb—o>œß“?:Ü“î~ûÓ¿/ªú¶ÿ¿>ü™oß½Û.+¾ýî×;üånç³^Üþ'ÀÝPz d H@ú)p‚dÞþø§8ùÅ‚Ü\hÁ’P‚& 5 ¦À9Œj @$Š @ÂÕp0´P„"– ÿ² 7…@+Ž”“#QêAöyŽ€B«\õ*XÅZ€pTô¬i]§E€€p(Ö¯]•+]#9€pHÕ¬…‡áXŠb²RM´¹Ùs„õ(„ܹS­ à?U„6ÿ1€Ø ‡K¡SˆØþ%ý0ë9R«S@•«h<ÇOM»[¸$ˆ­jKk€VÖC¦¥-:;²Õ¶d®hehÂMD•h¬îisæšõ¹œæA €FÔšâºÙåˆ8jMö†7¼ò4HàÎ~`5§ÿhíz›û\»D­8€6Ü^•Âõ»q®9 Ÿž6¾÷É0€ÿ`¯&O€tÕÂÿÀ0J:\߃(Âý23c„ä£ÒŒíêÚÿÞÔŸ¸tÎÑU,@pã™c‘ìøª€)`{ óˆ®7þ.’c²äš`ÌZý2X ÚU ÀÚD³N €pº8¿*1«)ŒzŽÿcº-gsAa`7›3áÐjT—¶Æ_>©EvLÍ Z6m?ø­Ä@!^’ƒ•Í…0+›í,ÿ"ÄÏ«>*“-`™Î:çæ7Q±Kp W1¡es_q®ó£ Ü"P,›gÍñÐuvBø• ˆ;Jò¬Ð¾Ÿx½I<›hÆ=#4?Ÿødv›iv¾2ªzÿ/üFyÏ~ìöñŒ'L>šN7g¾‘­þˆ"ÞÞÄV’þðI={‚ÎÖ;³ö¶¿=îs¯ûÝó¾÷¾ÿ=ðƒ/üá¿øÆ?>ò“¯üå3¿ùÎ>ô£/ýéS¿úÖÿ¥›#réës¿ûÞ÷*\ãæï“¿üæ§qøûæœKS¬5ÅB ŽÎx>È&=û͘ýs ÀåNg³é]Á X¤•5¹’!À•1W€Ö…–,ª\¥‹@N]à^•"€äZh½T )\•›¶  RDZ9Y"™ˆĈ™UµáXôü­Ø9ˆ ¤•;\Õ l9Whÿ€“Íš)\Y8\8…Ö N!ZDZ½îTl¡Y=Ý­I`µI w¥ÕUm!’€¾•n˜vaYÎ!¢Ò`~™•oQšG)Bpñ‹éÔb !QaUäáŠ5’îêà@´ÙUáRN"^¡øqž ÂâV ÿ€D`8Ä`vÕ[­¬ƒ“©Ÿi`‚B$R¢, ÛMFOm„%:YÞøá ¡ááâé‚þÂd¸Ùåƒ1Î"36#F¤ :£4N£J€B¸5f£6n#7v£7~#8†£8Ž#9–£9ž#:¦£:®#;¶£;¾#<Æ£<Îÿ#=Ö£=Þ#>æ£>î#?ö£?þ#@¤@$A¤A$B&¤B.$C6¤C>¤1-ŒDN$EV¤E^$FRdl$Gv¤G~$H†¤HŽ$I–¤Iž$J¦¤J®$K¶¤K¾äI¾ÂáÐLòLÞ$Næ¤Nî$Oö¤OÞ¤LÕd`ü¤Q%R&¥R.åK¥åÐPÊSN%UV¥U^åJ:¥öÌÐVþV~%X†¥Xþ¤VöWš¥WŽ¥Z®%[¶åG–åÝT¦¥[Ö¥]Þ%SÂeÿZÚ$^þ%`&PeÁ&b&¦bФ^Ñ eZ,¦dN¦`6æÉ¥ajen&g¶ÿ¥eþfvPQv&i–æU~¦ºœe\ަi¶¦k%jb_®æ`¼¦mÞ¦NÆfôoâ¦oþfVæ\Ò¤T§qgHê¦åì¥~ §s>§ržNo>'ugt>h o.§c>æSf&xЦwöehnËvJ'ÎìfzÂÌyG¼'|Ƨ|Î'}Ö§}Þ'~æ§~î'ö§þ'€¨€(¨h} ÂJ (ƒ6¨ƒ>(„F¨„N(…V(}*¨lX¨†n(‡v¨‡~(ˆ"(†šDˆ–¨‰ž(Ц¨ŠöçˆjÄŠ¾(ŒÆ¨ŒÎè¶hWÐ(Žæ¨Žîè‹Ú(Dð(©iƒúhYÿ)’&©’.i|©N0)”F©”ʨ“JÄ”^)–f)‡ViOh©—~)˜(—&D˜–©™ž©}ŽiL )›¶i˜ªé9¸©œÎ©”Â)Þ)ž©æ)ŸöéŒî©Ÿª š( ª¡ª…ÂivŽ'm¦x:*dª&sFeWg„´§¥¦¤vçp–g¤Z*y2*Dð©–ª©ž*ª¦ªª®*«¶ª«¾*¬Æª¬Î*­Öª­Þ*®æª®îª¬C_ð*°«°+±«±+²&«¯¶F²6«³>+´F«´Në®.ëqP+¶f«¶n+·v««Zërx«¸Ž+¹–«¹Ú*¸Nǹ®+»¶«»fkº*ÿÈ»Î+½Ö«½Þj¼~Žî+¿öë½æëYø«À,Áz+ÀêGÁ&¬Â.,²lZ0,ÄF¬ÄÖªÃþÅÄ^,Æfl©V,h¬Ç~¬Ârl`€,ɖ쾊ì`˜¬Ê®,»¢,°,ÌÆl·º¬fȬÍÞl´ÒìHà,Ïöl±ê,£`ªæmâ­…j§ŠjYÓ6­Ó>-ÔF­ÔN-ÕVm•(qÖ*m-q­&áQ׆í×zíØ6Ø–í%‘í)¥­Ø¢­Û’ÚÂ­ÙÆmKdíCØ­CàmCèmíÛÊíߨòmß¶íÚ²-ânàÖ­ßîâBH¢Éå…ä¶DåªÄå¢DæŠÿÄærn/åè†.Yt.D–®éž.2!#AqEÝý?ÝYlÕ„]JT@”|Ý™>ñÓßA6VÄE±T7©Ä7 ØìN^I´™GånKôCÁõî5iîì¶ÒEí]F@¯A ˜}ÄEÅ“1—n0”iï–™"D#F°MlJXã I“fž¡¥EÍÕörÄX1TŸáã•ÄTyœ)•OAÕYÝšOZYïõò”i VdÍwÿº^FTZƒY¡•Z•„§Þ@dV¢DÇTè}—Ìe„^ñÕ†¡ULçqYû6‘nžH(^?µ–Y—E.v×zý.ðBØü(6c„)D„äi…"XdvkÅÓçaîhSSe§EkibÛÕ_ÓØj!ù,{*L}‡&&&777IIIVVViiivvvMx¨W}ªiw}nŽx{ˆxy™g|£u} Y‚®^…°~ƒŒ{ƒ“g„«gŒ´mµy‡¨rްz—¹Šu~š~l—zx¬|\ºM¹{X©ky½ch»kw±j»szÜ|6ìz/êx8ò}'ð|2Ü[\Ö^aÏc^Ê|OÉzVÜkOÛgV×xKÖxUÈdiÅksÃzhÊryÙefÕmpÞreÙwxæ^MãWVèfIågWêzIéwWãgeåopæsfåwv†oŒ†y…†{˜“m†–u‹š}“¥m€©w‰¥}‘¶z‡Ç{„Ô}‚y˜…x¾‚I¶ƒW«‡g®‰xªz¶Œf±q·“r݃.Öƒ:ô…é…'å‡5ó‰(ñ‰4ò‘:É…GʼnSË‘YÓŠGØŽRÛ‘NÕ”XÍgÅyÔ†gÛ€{×–hÚ’{Ϥ}ߣjاxì‡Gê…Wç–Jç™Uó—FðUé‡jåƒyê™ié—wí \ð [é£fí«sî±|ð¦gñ¬p‡‡‡‚ˆžˆ‚š„›œ’Œ–••‰‰¥ˆ–©‚š¹—Š¢ž—©›±‡ ¼š¥·¨€€¦…˜£’„¡œ™º€‹ºˆ”¸œ„¨Ž¡§–£·œª¢ Ÿ½£Ž¸§™§§§©§¶¦±¾º¬ ²­½¾²§¶¶¶‚ŸÂˆ¢À—­Å±Ç¤­Â©¹Ë¶»É±¿Ð­ÀÖ»ÁȺÇÔÇ‚‰ÊŒ“ÊœƒÅ’šØ†ˆÚ‘ØšÕ“•Ę¢ÚŸ¢Å­™Î²—Ø«„Õ¬Ö±×¶˜ÎªªË«³Ìº©É¸¹Ö¢¤×½§Ú¸¹ä„ƒå疊嚙ꩉå¤í¶†ì¼”夤麣帷ò©ªó´´Ã»ÃÉľÛÀ¦ÖôëÁùÄêÆ¦é̵éмòÍ­ñÀ¿÷ЪùÒ­øÕµÇÇÇÄÌ×ÊÒÚ×ÈÇ×ÍÔÕÑÌÛÛÛÈÕãÚÝáÝàäåÄÄäÏÐè×ÉæÚØôÄÃõ×Çö××åàÛöæÖääääæèæèìëëëëíð÷ççüôìóóóýóôþþþÿÿõØÏÁƒýØÁR—9Xìò=„ˆ°¢ÁŠà”®^Å/‚I²ß¿“éNª\ɲ¥K–)_Êœ¹2&Í›/mâ܉’§Ï:Þ *TeA{HÇ!]ºtUXHae@)ƒÕ ä˜jµ§t+ ?ÜìÑäçÝÖ³L»¢]ËÖ`Ï¢CáÆ•K“(ÝšweÚÍû6ïѤhQaEJ.ƒ…©äœBZ·V-Sn~üõã¬íYÇ–3»Ê×åÞ¼ŸAwnšniÓÿrE+õT¹t‚+dX*8+ZÌK¹‘ôL³Vܾךä<oq•§å&/º\hsç©Ó¢e©Y¥=ø6[zÁ‡ÿÏ<ü¹Oó<ѧ?Žœ}_öê]ªno#ëØ F•8ÃâÆãiF_€K•çqðˆàqñÍå^ƒ,͇–S²e UWuçm È¡a]"–h¢_Ò… S *쬂Ê*åtÈ¡7žb‚!žÈ ?ò%áY§¼ˆÔЧçáK¸c<ö%”SÒ5äV+¶˜‘¾5I —á=Y܈z)HfN@ŽÝRôQh•l«(™#€sj%æhgzffšå©§)ne_†Œ0Öe—!ÊÔ}òÙ¨”TF*ו‚ 6U:á9ž¦¾1Ê—Ÿ0í ©šŽ E©¢«¡Ê¦ª›j\•¤Âÿú訓ª*§rªê©h´âYê]®¾zשŠâºUŒ3Ö¸ª®ïÅ*©¯½~**ŠË²j,SéTu•m©¢º+°¿‚-¯ãþD,¢×.• bŠš.[ߢV®¸²J.OçÖù®=ÛÙݾhūܽÏ[°Á;å;'fðp³M7™õkOm€1» ³g<ë³+ªŽ½3™€€ÇÖºüµ[±·ÍB[¯½/Ó³O ç¨ÖX”eóUole›!·ëØrÇ.Ï|0Ç0ûq±K½CRðHf²4.=§Àp;4Ñ\'´¹Vë›ÛÓH‘eò¦¬bÍÁY³ Û4ÕÌäRQƒEÏ6~ÂaÐ[©ÿý¶ÑGkìµà¦†½0SÏD¦¸Y_¦½5¹_ËL¸ä“Ól¸ÍZqˆ Î0Þ¸ÅZ_\tä^9¾—Ï­<¹²,zדÞ6³çÅÕ8¸ç®ûî¼÷îûï»cGvÈüñÈ#oO>é4ïüóÐG/ýôÔWoýõØg¯ýöÜwïý÷ÝËÜ;ܼ^“IÏ8ºúûÓʾ6Ü3‰¯Yâ‘ZðH³ 4î`ÊW‚3ÏÑÉ}ô[Ow¿Ê'ušÁç¾âŒ®ÀÄ`;B©!Å`± ßìô8ÊÁ.v¦;¡ ‹b?Ë…uö„†h cíaøB¤ÈЀB íÿþ¸ùшJ«‡:(ˆ¥€HÁàR–Œ ÚC‚Π`fF¸¨ÊëˆD<]íÀX?ff€b! í±ÃVq)ø# Û§(¿ý¤C¼£q’§¶%}dÁ †âP‡È˜£=Èg>9îuƒSáåF1âÄ äüPApCD0( ",hcJÿþ@'y±t’„e$gIK°)qNNË[ü"øR”ܸ† †m¤jÔ +!‰ÂXŽÑ’•L! Íè›Äeƒ+|èö SÛÄ È-2Å9lc˜^ùLiÖr’ÐŒæ4o™#Bì@èÁ"ÿ =€! 0ÄC13ÅuRÑŠÁ±ãyöè Jê‘¡+Á¤e×¹:üÀÌÀÛü P¤ôÁ ¼ÀÔ¡–bÐ7®“™+l¦3å©Òw¢Žž7‚G Á0 ƒvÂÂ?l^øÂ"2'G.ˆ,'y؉Äx>”Œ ÌcaÓ@ôÍ@|Ѓ„¡ ]ƒ¼PX…[t¼`2Ú´g8#JEŠB£êЧ֕®w}‰DWg‡¼ñ'8ð L±ÖA2¬ ªQéæ?n%}‘ÄÙºˆRxº³¥)ͬf_º2U c2¼C6º!N/\ ”ÃTkœ„•éSYºYYÿbÖ²—µUÖ°m8 x@ 7Äš×ô! Oam[ºA6{¢‰²­¬mkÛΕÚ5¯Ü-æ„1ân*d3†1@b¤™anl™(4éV×¥ÓÅ-|ß[8íˆÝ $ý†;¤ A¥D!ª`9°½­%Ëk›KY ôðB(PFx|‚4v7‚0˜Ð……gTêDo2Èw\øtóÕ…^ÈYÝr+PÓ :µ |ÀU'Ãÿ)0?ðÛ€3‘ad ¯!‘5а ‡Eÿ‡ AЍ€7x{P7ƒ4è~l¡ïSxw_õ>paà0yïf@ Wq J‘qÄ:m ApgwZuB†‚8Ôm…2Lá x`aÐ]›aõ?€að¦‡̵§p ¬ðs¤iÛf†T¢„H4–…–÷‡[¸Š~¨zµƒšC@ô1Ï b àx )wР΀ž° ë€7`Æ—y¢hjµŒ#Øs͸fÏØ€ü؈'i¸ò Ä4N[ÌHxnõ _1 ‰ÿ`dpZÐÇ–IRÈ5 ÷HqðRé6(aMYƒ¨˜Š€ò€4.Ç`][Aðà ‚°9”Á œöÚ± EghpMi¡VÒ!Év”q÷ˆùo·…(œÁÁ ÎÐbo—ýÀ<{ Mñyrói{µ÷œ IŸRךk‘Kwpê¹2uX‘¡x„õˆxÀ_`ð1p0à°ð^€«ü¹jq™oÉ ¤8•‘úp—CtuÉœP™¢(êœYJš,º]ù•K¨©µiêÓ_à˜•Ù0LY@`10Š`] fñ[HŠ•&—–‘x‹Ç &Ñùh%j¢Ð¹¥÷i’õ5ò\ÖàCÂÿ$ÎÀS`p΀]€‹€_pdàa%Š)bCLúh­Vo†*‘ªN·)骇ڥ7ò\]¨i~ŽaÕ(À5V-©KØ¢ŠHÙçh§Ú‡ X¨ÏZ’ŸÙŠëYªr –~€„b ƒ `u&"p0à\@üy¦Û™*wJJy*ŠG|ê¬Ó ­õ*­ÍÉ€üöw²yc 5‚@£>%Pbp]Tað!3@†0d­€px0o?ç?¾ôKDÐJÊjf•ªÑúªÐت#K²ÿH•ɘaJ:§Ä´ë\`cÀÿIÆxyÐxp‘ÄLö‡sXxÊ¡­r¢Â¢¥í1¨„šŸ( [Øêq‰ÂA§éf0^h@†3r YÐra0`RÐ L¡v‡´Œ ÷ E¯ùНs+²øI·'‡²ÏåD?¹!Ò  @ÀöPR0L~ða_0WÁ{\006Ë©X¶ËhE5 {¯v{·ÑølŸ!(··Ô·‰Ân>0Í@¸Ýå ePÄ##¹ s  vð À" XC¡¤¹&·# º&K’£ë¹ËëwQ–ÇšIa{ S’@ Ö R@ z[7®žIz‰œQ¬Ç>Сìé*É*u¾{рτ:ÐŽ`µ@VŽ)åð»lthK Ë‘þÕ¹¡6ž´'a—í)ì3=ÖfýéÇŽìa(­¥~êö€ç>°êGP &G€b´ÞpV}Ôç3 ö€„Šãq;2¢¨4]ìÆÐ2ÍîÙ5ê¥o éêsð {(H°3 ýƒ $0 ¬èLÀ+ 7/·ð¨ÛÚ {° ç¾—Äžìíîîìñêª © N؉•!éÐäÝøä+ÿÀÅI W…:ÀÅNpÕ> æÎgÞázóH‘!ï‘ãz ê#¿î"ÿîO/äòžˆŠÕ3V­°ZѰÜ„¬B,Õ9ON°‚Êw*À;ÀlÏö@°¡?C„~®W«Ü=Î÷èÍãx»ÍLÑä è›ògQߌÚq`ZqA7ð@W& š@8°U;àaÎ=° Ch¨`s_Î`÷¢S—8QÙéÍôMÿàrÞé*ënMëk1ëI" Åp’y ‡ µ@k«+@Bh\õ Ê8”é£à¨¯x?º½ô€ä!?Ê®ÿûtŽ¿ã±.Y1ŠÏì ÐGÐM°¤1'Ò:À™à‘BØùžÿ ÒC¹H‰we äÜ¿é"´g/_¾† %.Œˆb?‰ 'näØq¢F!E&Y’#H“)Q¦4¹’åÄ~ Ž“YÓæMœ2ae8+Ô© °rÊ,ǨÁ ‘l!“–³]°sŒšÜ¸ac…Š >xlåºlHh5áôãGP=„ !æ³èÐcÅ3¾TI·®Ý‘.ñnÔ»÷£_‰1eÒ´™OrC‡®ÊC†U7×­BµŠr¤'"6%n‡Œ8ÆìÁR• W²ZÒÆ1¡qèÐ$"A¸öàÿŠ5ˆ2eζÉì¶<Œ$ÛÉ–c¾téØ þ ¸c_ç£7Ÿ>·:uÀ‚g®Á;¡ŠqÂJ)|ÍuŒwÐÄ "íìµûÁÅÌ}-ŒDИqÃdtÑá’UØY&ˆ ˆàhX*|ð<œ¹)8µÜŠKÃÀJ.™Œ[:ÀH,ñ:ëP”NESÒÎÂdb‚ P ÅÃ)ÆšRÉ ² h`“Ih¸)=N8ÃcÊ£pH‚ \,³ÄžHˆR ³¢ÃnlÂP¢›8j(Ÿ~1¸Qlq¯9íª“®;ñœîEÙñn†2OÇqjÌÿh€X˜˜!Áú®iÈ“1d ‚ˆK2pâRd๙eà‘ËXŒŒÍ‡b90<ø€š¦ì9S"ˆ8ìPD¸°».Ï—x½‹EGܳ&í‰v”P›Š 4D3P”r2`"ˆeÜ0C4{a€#œÈtSq‚†ˆ°"‚Ìž¬€"˰f5©8Šr”5Î]ƒMË__[òwE¿ø´IÐ X±1}™Ýî&QI%È!¹À‰N1£ c"™€E8‚µú thä TˆaedóAv:cÊ^“Öl3¹šà ¸¤Ÿxh¢3¸¦rºûî<‡. ’õ p dÿ%@TŽ1Èøö F˜h`V`B Vn‚EªlpBØ•Ðm6€I§3hpé!6eúp9¸‚Éï¿‹–s`À:½ÃNI¬ibsb‡²Uf„‚ cdhØ¡$ !­=ŠP²šV9d†hxBKnàj«`ˆaãQëþW¤e…èÆ˜»XÁû ¶pˆÿçpÆut§u ^…œÃÁ’ ŽH-E/¸`“µƒj¨Kt a( ™Ka€!؈!‡›KÖ6ÝrÓ!ívxƒ¯Îø“ k0ÉÓ‘4 ‹X)¦Z¨I.€ ù ¢z0JåBadX"©hˆÿt*ªÜAËh6Ô ôp_Û¾¢¿Â$Çgþû £@¾LFãàa}øC ñ‡¸_øp!Ä®Œèa& ƒ`Œã‹h€ö’  „b:p ÁCH`ÀAˆ’ëxpƒZðpêG0jðÐ!¢cíxG<æQ{äcýøG@Rƒ$d!‘G@›Œ ‚ÁÀR™§žçEK5Cƈ‘Ž j{ŠðÞh4„8h+#lÇ2` ``CfCïä×­eClBŽþÚ¢þÙÐ98ä—ðŒÖ8Dš ‚0¢›xªÕ˜ @"ÐpB’à“uF Hÿ™¬‚?"èOÚd“ "˜á ^ gÁ »q¤t´å?ÌôB{äx¹œçàtù’C³!(”Ï8Š)žt@.Y§p@Ap ™ ,”6ÐA4¥ÑزÐÁUÒÅp~ ]à(GÁ ŽWª“´zˆá"’#8M‡—½Té=O|êS‘Oi$ãVq#Ët›£ª%™ò)dX©*° Qk±Œœ@ õh´“t¤TMô“eGäU[ݰô´'W L}Ú…Èø Éš6#lÞ”ûDF0Ò!ˈ ºØE× ¨@ÛèAðÀ‚bx‡>â™Õ9ä! òÈU]XCÿ—Ò)²’…)XÃZ"€hmˆZÙêÖù Cj]—¡è 67XÁ^ûЇ.€! ‚uÆ;Ò’+˜ð,L-WY¯·«õüê/[(Þ´9…ÀN‘ÑS¸–‹­íÐ lÖÞÀHUjGÁp`Ø6!rÙ‡xv¿æMÄõåpÛë޽ĔPäIÓ,˸S|§0 ¬ ñAô]ŠÐhǹˆ0ŠHЀN àƒ>3tÀ^è(0àqÛ}¥iúb,î\‚·—·¥"ñ/kSd’î&ËsØ*ÁˆUŒKÐ óa È@#ösÝe,CÕP:ÀÀÿ‚;‹ˆïz×ÛŶ3$(É_Vº?ö–8Ëv‘¯bv¢8Xž0:îLm x4²”[AÆ$. „\¸¸怇‡ŽÐPÌ‚F°Â3þ Ãv˜¼øŠ%bH‡ÔODzš¬íè=õCÒô“t¥-}iI¯ì4;`±LSÓ£&u?æñyHúÔíØÇ7â!é}Pƒý(,Úñju”•¶+ÈÑqxƒã6ZÖ¹A»E½¸-žIq%å^muË»”öumv¨Cч:ر‘kãeñØBöxø#ó0·¬ÿ¡rÀù¸;ò¡Œäƒçø‡8Äáë~‡ƒÿÒ²+ãò!©6!eö¯¦bø Wâ%Q‡)P±Žu ÂêÈ¡säªyÌãJÇðÇ•Ö=ÅC«¨†9ÒAŽU–~Š8+zaˆhB‚ÄÀ©Ü³¶=/hJtU!Mbj#=é‰+LñtS¸âÐ.zœ"cdPC!óÐÒŒÁ V¼‚ãP¾È¡=E9ׯ†¢J«5!záÉ wÇn+Wû½çûÒ_¢W¸‚ãS/I­âŽYhPƒÝ‰õ4Ès¸œ° Ç›´“ŽqD"¬0:ÌAŒ´=8†W¶†â‰Ò)ƒ»¤yt´•ñ¾ûwO® -û¶‘5éöô†çÿ]Kñ$„±‚™t†õw¿ZIú9­wýÃYÿz¼\™…]á†ÛIÞ•ú°§ÑîpIÇ~üÁ—a²ÙÂ}œwvgºV¡}½kyïÔ'Îa‘½Â웞lrg÷…/Cñ¿ñЧúc 7ù†¨#h“>é›>÷s¾ç›¿ â{Ûk'—ЙÓû-õßûÁà‹²âÃÝ:/žÙ™·Ã²ö“½Øƒ= „Aù‰Ä¥w ©|»6á¿þ³£q@t;TŽÝC¿äÈ—”bÀø›A&lBœÀ‘¨Aã1~1B¬½Âä Á Ä›íãîs YÁrBDÃlAÿÊ‚@“¢ƒ#¼d§t§vê…ðB/A7É›Þ;B+Ô•|Â4„Â\ÃA„»T¸´È#[*(ÛcÓÃ=LÑ;;²%ô“*%d>‡;DBDD5TÄ»«;ùa§:2|ùCYÉÃñ@‰ »²»#d[=AÅ6dÃ\ÔÅ£ãÅ»ƒCÄŽ=ÊTÀ~àÂñK‡€OBH:A倪9á¥ZiÀNtCøÓFF3 Ò3Eù±B<š4cü½à+…OÀO(…q˜Ã‘:*ô‹šÀ¥÷ëEPÅBÌÇŽØÁ„ÃqÄ£ûáðCB àcFÌÃ*ºËD Á»½p¥u‚¶DÜFnìÆÿ{¤Èá²BáV¼ŸL„OhÆt¿ÿ[¿¼ *CË F\´Ç‰ÄȘ´Èö:¯Ó£Æ¨ÊA½‰ªdGt<È`GºÃDk‘uz¶‡lÉ~ÔG|dʦì•BŠJ©œJ=ú!vDˆ¤J­ÜJ®ìJ¯üÊ©¼ECÔ²íûG1TI¶à I$ U¤;jlHIûF»0ÂßJ¾P|J½ÜK˜|I‹<,-Ç Û6¡£Ò=Ü¿”Ô‡„Êur2,ÜÅ™l¾ŠüÄÉd *ó#ýÌ?T@žÉBŒÃ›õòq …ˆˆl8ËôKÊôÅ×¼L‡»Ÿ ¿Ïì <Àܙѓ!œ¼ÀÿÔ+E¹{‰“²CãÉtMÌ\B§”Iáê…äÈ7q‹ÚJÂ\¡x2Ž1DÎåûÅád Æ4>D#Žªkͱ[‘4 ­‰_¬Ã¡ÐØ”M­Ìô*Ï ÝÈ;>›DE“l!b å#©EKÞk¡%0ÜO,P=Ð…M¬NÕ+Ì%Ê=ÒN:4Ë~Ì=ÖD4™ÀÈ ‘ì¤AiÔÑ3LOõ\ϼLNº¨@Q§þ3Qâ³CÎdQ…èÃ><Éÿ½a6Y"Bp¬¥ú9¾ê³¿Û¢RåHÓ½¿•4ÏætN,åÒ—H¶•¸Æ#ô¾IË›9¢Å½Jõ+SÆ"¯û3ÁÇÊ-”ºAÝÌ›”Qd«ÒM@ÝÒO UQ-¼9ý9ü)Ô›„ĵ΅¤G2dHHm‹´4º‰ØÀž)¸©#'u¥µÈÑ…Ì¥üQíQPÕR–ðÒx"ºÉ‘5ÝélUå@@4eU•PÜˉ¼%ÅúÌã©=G}Ô¢k2Ú»O»3¿Q5ÖbýÐ?õF!ýÎ9Œ;ë;Ò,üÌo]¯ã˜RM½ˆM„ÑM]ÔÔ¼¾}‘BáÎIU×>EW?]×{!Q¢ ޲ěúS,ÜWÿ‹`ÔoµRS•RïK¿}|ÖÔ¤ÇòrIÀÕ`ÍS 5Ø,UÙÌý|2YZ‹ˆÌÖeÖ#DÙB3Q”|;š¥âëV`´O¡cÁ9Y”V–M؃}MíÐÑ*;N"\JësÐ]A†ÓÝÚ~tO´Ã'ÕZá¬Ó ©å2ä0Z¥]Z>Mפ¥A[¬ˆ¨íØ;u“»éÏnEJ¸ˆÕ[BÅë³Eó»Z±Ü‹kÜÓsEXÃ=\bÅ ™•§â™F:U':¢U˜WŒ€ ÜÂ!ÌM…EÜåôÐÒ½Š-/)Óº•ÔÒÓPx²Õ¸“ ΤٚeT) Æ:‰G«ÚVÿÍUÛÓu[+½RàØ]iQô{Äwì]×Þ‹‡XM9…ÒåuQÜÕp3Ê ·gÞàÕŧ Ó]Ûº|i¥»4\p ]r½ÖHÅÜ55EîÛÎ…[Ê)´7…Vï%ß½ÄߣQaÝ%@8|…SiÒÝ_Ï Ø1TF1j<¿®_ÞÊOk=Žî^þ UÀ¥à”Ý`Ì`*àéDÊÆÊÜ”ÐÏ †*¬_›ð> ¾Y)³Ý^uSþÚà|½Þá6^2ßBE_úDË nEÑÍa™¸ÖÁLÔ œß½ `¾è>n…\$n_™½`ÖEõý_åÔϾ!ä}ÇÚmÝ„(Øÿ!­ß­ÝH[Ò½5±K >žò4Ò½×ÃzÙ¹Mb9æ?l¤ÀííΊLÞ-ŽŽÔc­â{m^%Ö㉠ÛF¬£b¤# ¦KGµÝ…;[‘(KŽ…»\eÎ4–âÑV‘e¿èX\îâ}Œ\,WK‘}Ö\¬£`d-ÆDmeâÍ"”á7,¾>Ñ8æOWeRv¸Õ[gûN;ö¿ùÙ¿Ùɢܰ)dÔþ[Ý#fF|‹hnäRõd¨Kpgqgr.gs>çže©P&âQ\ÅM4Æ…%#öbnNœ}ºÝ=ÞùÝ©e2U4P†;{N,_öæÂm[]Fäb6æ=â%h¢ûÚÿOFŽEKEYÎÜÓ³*ä Ú‡º„›“äæNö‹ç],’Þ_ÂCZCÎæê@é³EzþäÍ Ïx.¯ËsÄk=¬ÞŒâZ¬èÝÑÆ’ébX¼_ÆtØêEèÄ]Y¦~jy¦%Âáz6KjöYyògXÂg^vÀâ}!Û3@xŽQViuþê™Fë0Æ' Ù0’`¶“BAݪ%eÀúYDž]Ö$ôDá|!¨Õ×aÆe@þaˆfÛïíÒ¶>­U¬MÁ(¦ëáŒZsÍëÜëñík㎪[^‹žCïà ŽÔn‹ÕÕG¾j¯ŽhFnîôª^˜ÖSÜ>ëÐÎîÑUYjD¿¦hêäê3Mm;”êi\‹’å\áóÃÆÞå•h‘,FàÜfɰfoÒ­îú†êµ=ÀnÝäÍMKã”á©f¬zKøR‚ëe¾e­è‘ÈÛömp?6aÇîÝNÛù†h §F©EÍ ‰ŸæGQDËtëF4ñFDñLX´ý™Î僖pµ^ëô¼oIžŸ£ÜoÝâ;-bÒŽ*EðÖ†Kû[ÓØŽBVŽqÿyžË¬º2ÙFZ'ÏË9<ÙeÃÀMçÜaVääÝ»è›-SçÅ×E&W~LïÙƒ]~ ô&m Gô6¿dž.¼vÆË~½6* ïßö힉;4ùmAÖàÞ-iÁ%jù ÐWtR/u3ojº¨m¢{pG·Ùvfk`üe åPT—ñC7õë¶uâlcH]ražUêf A•¶É®õQ§ï'wéÏ–ç´èõîì)ÖÎfÞ»“õbOôSÇöl_ô[¯ÛÂÄ-TŽBý-®‚.­6vt×ö\?v37t%þíeðZ]j»øFÁˆEÐéöuOwud\õ¡†ŽçwŸÎ£–göÞì›c]g÷ÿ~÷w\‡r‚Óˆ÷ã+F[ƒ½á^ñçwŠŸñmŸx€çf¼ùTwV4&D²~Ò•_èdl6'yeÅk¯yÁUyÂÕÒ–§½áUs¾yš—ùD<÷’?jUÖx'çx¬òx&x‰Gv‘GùQø£ç;FŠžŸ…wnz¡{±§ú‡w÷‹/ Þ¼Ž8j|‡“ðýx¨ÿwœŸð¡÷ìe¿úºœ#~>rV‡{ˆ'û¿|°?ûº‡y¤×pyÏpet•@gÇ|È|ÉŸ|©üúÁüËÇ{Ç|nßõ*ÇípúÀŸû©çü·üÌ'}¶·â›>MB÷ûÔ'zë&ü±×üÍWý©’èÿF~uauÆ}Ù§ûÓ—o¯}ܯç8 ~á§}æ7ýá‡ýØW~ÃVñ~”õ™7~é/ýãþìorê·ûÙßþè7ü˜ÿò7Ã^pšµþ»¹wÿÎç~ôçí‘Fý÷'ÿâw~©¿ýîçÿùˆ Ìg Âé2lèpà‡FœhaÅ‹3j¼È±£Ä )ŽÜXҢȓUNLÉRáK’1ºŒY“åM•9uΤÙ3áΓAA%úsåQ‚E;.5™âSM=F•u*ʪX³^ÕZf×°bn éõìÓ²Õ®E›”­Ì·nÉ~…ës¬\¼?íÞÍ›v.]½=ù<ÿ¸®à™„•"Nl³ñ_Ç#Sö[9ðeÌ–5o>,'äΞ?ó$]Z´bãQO6]r1TÕ/a[uýZöìМ÷ê^½Û÷ïÔ¶GÒ›™÷qáÉ•³Îôp£ËO§Þzt§Õ±o}{wëß…>ü<óñ·³kWO¼wzäÛO»—Ξë|òùßßÇ_Ÿ)|ñ¡' wá™'ßí%HU- –„J8!…Zx!†j¸!‡zø!ˆ!Š8"‰%šx"…Hígߊ6hÖ‹qµÈàŒ4ÖèŸX`ŽëÝè`yúýämÉ_‘2.ˆ#‚Kéä“MJ9 T긣xSZ)$”FÆÿØPqÅ×¥’="I&˜V‰e–[r‰fa_ö•dšrÎiæ™pª¨çž|2fgœtÞ‰§‹‚jhŸZ²I¡,*Úæ¢Œ>zåš•Biž“Jªé›œvꦈÆ&ꨤÖfê©~–ªê˜*誰Æêi¦´Êj«²Fi«£¼¾ê+“ Ö*l¯Ä‹é°ÈÞª+Œ€þ‰j®Æþ*m°Ê.ˬ—¸Fkí´ÜVk)¥—Š.¹Ÿz;ë¹»R‹nºÍ¢¦šå†Šm¶ôÖéìªÀ²;î¦íºkï úªëo½ë ®¼ÉòÛ/ÂæðÃG|(À/úW¥›~:ê©«¾:ë­»þ:ì±Ë>{ëé Ð'ÀV)PÊ?ùP@"1õþ»@‰èžK¥|"ÕðÏÿ“»ö”dÙý@@õÿŒã;ð%Àü@»ÿÓÏðŒ;ä|A`6õÖ„½@èsÿß÷àçþøÇ~úJBß-ä{ïÃîä× "Ÿ(^? €ØŸ ÄYRÁàÜGÂw’|àÈÇ'ð½Œð0Û K€t€°ÀH1ä†ãp_?ˆDœ$?€ €Ë¹o(^GòáB³q/øD o˜Ãö㸟‰H> àã(cqØÄ'‚ƒãpa áÄD¤Ñ!nt¡Tp»`‚‰¸Ý?PBÀ4ÌðG@ %ýb: ð¼ ¶pd³¢@ °Èœ/c¼Èyø\Î!%Dx"Q NÀåÿ`½ÜDŠ–¤ '!dp2ˆŸ´H(R² °¨T¥Eà?ÝõR–²œ ;b€çõc†ä#/;ùËòQ³ˆ0€J1€|LP“ÂD&H €˜üGï^2€‡°ˆ'UbNc&ï’ÈšÂÏäƒøc&¡’gFð{ã@$þÒј3¨g")½€Žd 2JÐ@¡Lyâ?ÿËD*d¢ AŸKk˜RŽ:¦ÿ8ÀJ¡ÎR€Ðvf#%K†×É D§Í À8jxÏ@âï$ûe"ü¹Qjd ÿHD БN³$Ï^:ð‰ FT”é¼dy9ÿSª®R”e´Ç ¹*= Å›é8XÖ‘|"`^> PÂQNÕ!}ýk^Ó¡<ß@#dP9Hâ§,‘ë?ÓÑA}^2ƒÄ;Ù‚ØÔŽ ƒh*½j=Ö³§Ð,IE7»ÉÐ:²£¢|&9Q‹N‰à¯=¤- BËŽ¤sÐêo;9Z„ו¾›gA&hÊEºô$yê ªÄ²\«ã(Å ËT³}S‰ùÈ+!z[’î§„"N•©Z‚5®!„-y§Bôª×¶1¨1 _8FQ8Å"ÒËBûîö!(#NóŠÓœò7š yð„bÔóAñ‡ã‹‰‡™§½pÿœ™û„9›—9á s:íßk¤·´âÙîXy/AÆ*EÎ$<-Ã÷âånDzýX$Žk¼”|, xCÞqWA’ˆ¥¥ci—{rC¦¬4ˆ4˜v^þ2˜Ã,æ1“¹Ìf>3šÓ¬æ5³¹Ín~3œã,ç9Ó¹Îv¾3žó¬ç=óù':ÈHû,èA癈™+K ­èEÃÙÐÂdizÚè~Bx½ \ÒîØ Åûs:ð<Ð^Õwϳ]ï¶ÉèU3šˆºëc"€€”“@‚ k)ÎúÖã b=0AYÓ9µë'ðW=*q© qÍVVS›ÐD¼è­¹N°3ÿˆ§¨+MÏt$ûD|¢A˜Av"œÍ«8—(Ãßé±Úönõ]A@":ˆÑì+®‰ë—´•D”!¿IZ+Ñ'|öÀSÒ{S|ÐŽ¥¶•DGf€‰ˆ¤ëIA3žÛƒ3\ç#éù%Z<œg?¤X ‚®â6·óÅû­DzÚõW©ËŸjaûúÚ·ÆáÎoMã‹b¼xÀ¾õ'h~ó©ßy„ßqN‡OŠ&Öz‹¯jA^6ÅQ^ù§¯^Tp¯ÊÓ¦:ÜmNķǽîv'.T}÷½ó½ï~ÿ;à/øÁ¾ð†?<â¯øÅ3¾ñŽ<ä#/ùÉS¾ò–ÿ¿<æ3¯ùÍs¾óžÿ<èC/úÑ“¾ô¦?=êS¯úÕ³¾õ®ýßQ$ûÙÓ¾ö¶¿=îs¯{Ù# ÷¾ÿ=ðƒ/üá¿øÆ?>ò“¯üå3¿ùÎ>ôŸ_ ]k$Ñ¿>ö³¯ýís¿ûÞgþôö-|¿üæ??úÓ¯~ä‡ßgû"ÿúã/ÿùÓ¿þÂo?Ãòûó¿ÿþÿ?ôá_Ð  E   b õ9D> F ù-àÐ0 HH f ‚_¾ßþm † RàÑX`Gˆ ¦`’`õ‰_B¨ Æ ÿ±`·è_Ê æ úÑ š üé áöñàøàD!&ÿ¡ôu`Þ >!Œ a^!"À¦Œû1D~ánaÁ0á ‚¡¡ÞLR ra– Æa ®áº`ÉÐaâ¡¡Ö ú¡^D "!¢!""&¢"."#6¢#>"$F¢$N"%V¢%^"&f¢&âl¢'~"(†¢(Ž")–¢)nb'ž¢*®"+¶¢+¾",>b*Æ"-Ö¢-Þ".æâ,æ"/ö¢/þ"0:â.#1£1£*#2.#36£32¢2>£4N#5c4V#6f£6®â5n£7~#8Zb7†#9–£9â8ž£:®c6¦#;¾#<.£;Æÿ#=Öc/Σ=æ£>¾">î£?þã(ö#@$A^¢@$B&d#ÞÁbÀ†CŠÊCªJC&ÉDJ$D’JDšÌ½¨t¤G~$H†¤HŽ$I–¤Iž$J¦¤J®$K¶¤K¾$LƤLÎ$M†$Ô$Næ¤Nî$Oö¤Oþ$PÖäM%Q¥Q%R&¥R¦äP.¥S>%TF¥TNeSN¥U^%Vf¥V¢dUn¥W~%X†%Qv¥X–¥Yž%Zš$Y¦%[¶¥[jåZ¾¥\Î%]e\Ö%^æ¥^Âä]î¥_þ%`~d_&aæ\¦a&¦b–%b.¦c>æU6&dN&e&¥dV&fffO^¦fv¦gÆ$g~¦hŽæIA@!ù,{*t›‡777W}ªiw}nŽx{ˆxy™g|£u} Y‚®^…°~ƒŒ{ƒ“g„«fгmµy‡¨rްz—¹Šu~š~l—zx¬|\ºM¹{X©ky½ch»kw±j»szÜ|6ìz/êx8ò}'ð|2Ü[\Ö^aÏc^Ê|OÉzVÜkOÛgV×xKÖxUÈdiÅksÃzhÊryÙefÕmpÞreÙwxæ^Mã[WèfIågWêzIéwWãgeåopæsfäxw†oŒ†y…†{˜“m†–u‹š}“¥m€©w‰¥}‘¶z‡Ç{„Ô}‚y˜…x¾‚I¶ƒW«‡g®‰xªz¶Œf±q·“r݃.Öƒ:ô…é…'å‡5ó‰(ñ‰4ò‘:É…GʼnSË‘YÓŠGØŽRÛ‘NÕ”XÍgÅyÔ†gÛ€{×–hÚ’{Ϥ}ߣjاxì‡Gê…Wè–Jç™Uñ–GðUé‡jåƒyê™hé—wí \ð [é¢fí«sî±|ð¦gð¬p‰ˆˆ‚ˆ„š„›œ’Œš–•‰Š¦ˆ–©‚š¹—Š¢–©›±‡ ¼š¥·¨€€¦…˜£’„¡œ™º€‹ºˆ”¸œ„¨Ž¡¨—¤·œª¢ Ÿ½£Ž¸§™£££ªªª©§¶¦±¾º¬ ²­½¾²§¸¸¸ˆ¢À”ªÄš®Æ±Ç£­Â¨¹Ëµ¼É±¿Ð¬ÀÖºÁȵÂѺÆÔ½ÉÕ¼ÌÜÇ‚‰ÊŒ“ÊœƒÅ’šØ†‡Ú‘ØšÕ“•Ę¢ÚŸ¢Å­™Î²—جƒÕ¬Ö±Ù·˜ÎªªË«³Ìº©Ê·¸Ö¢¤×½§äƒƒå疊䚚ꩉå¤í¶†ì¼”夤麣帷ò«¬ò³³Ä½ÇÉľÙÀ¨ÙÄ´ëÁêÆ¦é̵éмñÀ¿÷ЪøÒ®÷ØºÆÆÇÂËÖÄÎØÉÅÒÊÌÔËÒÚÚÇÇÞÏÑ×ÑËÙÙÚÆÓáÚÝáÝàãåÄÄäÏÐç×ÈåÛØôÆÅôÜÆò×׿àÛôáÎôèÝääääæèåèíëââêæéëèåëëëíîðôëéùóíòòòþþþÿÿùèÁƒþÒµ:§ÏÞ·Véô=„ˆ°¢ÁŠÚ¶|§m^Å/‚Irà¿æNª\)žKzÝ^ʤWJ‚*—ª$„J$¡§o3gÆ šçÎ5zñöÜa´©Ì¡N£Jué%K–_B)JÂ7—Þ$< Ê[ÍDè¢n}yíÎ¥w”Mmºv®]ƒV¯ªÌê².N  Ä™ %Á„—]¿:õKïšÒ=Ëî •L¹jJ½'ùÂtš.‘ƒ êù’°bºRãQž¼Ú®eÌ™Ÿ:EWèsèB„E};›vq뻌Ë| [3㚆 “åé¨ZásƒCÇ{³q§¡è$œ TºR¢J‰ÿ›*}zyáÄ­Ën ª»Ëì (Ÿ>¿uz½×›fß.Á½äú­XY^êiår=VŠ|ÓI% d÷]•_P´ù$A!½×às!Vë5…a:™³Úƒÿuè!ø…¨¢/ºøâ‡+Mãf7ö•#u°µcŽ(Îô]xãý#{Éøb/™Ã\OÎáx#’±#“.B–Y ¥cŽTúø%Ó‘æRbcÉ¢„Jª¸V;×Xƒ]fÒƒ¦”jV×¢•KÊÄ\w䡚TZ–Å[š3® "Ÿn¾”T\Õ™TNZ%–R…iã•/±—Kí¼5×âµ¹¡¦¦nU[r¹¤Ô îÿˆ*£BªQñXs‡ÐaÕ¬ˆöùÒ2nË}²*Zcª ®uM{(s,²`*›$­ªJÖƒÕêyLÝ„+î¸ä–kî¹è’ÛËn¼±FºðÆ+/=ú˜cï½øš³étì\ÃŽjçµõ–[“’—¬·‹+±nåÑŽ­ÎÃÌ:2uÔ£Ór8¥µU*Üš®Ñ¥ÌPíc²É긨.)cTt÷¸ïoJmKwã3Ä£Ž3&Û\³K8gì[·23{×Ê{¼är/.™üÒ1ĤLÈʈl—¯N‹'t#¥”Îô½sÕÃëðÖ1§ô]+GÀ¨Æ³Ï@c³Kýþÿ«!Ònc»šcwÄÇnìq3=èЃÉθœÇQ±ÊÔNÄCç5×~º¥‡wäÐÃèŽ_G¨gaMå žŒ2z‹ùuƒÄVS6ä@G3&Ÿ¾‡5zd±ÅÞŸ·ÙöÅ>3t.ÏÉK6°áV3sd¡…Íq¨~¢LÈSmõj›ÇH¬´nàp2ºÒQýõ.ÙqE.&¦øR÷h'𲂷֎ÜY°‘1×xCx …,ÜÁy¸!wûòÀ§¼·­¦zÈ’AŒÜÀ8Ђ¬…+\A šèÉi ö’’¹î{Z†2ªA¼™„/Gíxîê€ †CÝÿÜðS4ðô¸œÄ(6¹e°²aó`Àåtp¨6‚w(Ãek S£-º¬U+ºßµ<¦*8YCYˆƒK®QBÀˆÃb°É£‚O¹ªiM¹!™æ¨…-èagP` Ã.$B~véc«˜Öµ)²:ñÀFÝTv-ÀA MP`#üà„/¬!œË£ÌèÇ4&ŠwAx<Ä)nކ«B° 7|á mX¢KÄQŠKèB«cKœÁ f8CeÕPÆ2˜âÄ·Dq8–œÝo*D.˜tw°Ù5ÚЄ'cm fp2u„E ¿üÂÐ8&žŒû+ÖËØ!ÿCþ*›œ+”.Þ…DtCW“âÙ $` m µ 1 !ˆ7à‚ÃË衎cÌŸyS‡:LV‡¸`£Ö¼‹ Ët—U¢¬r ÕRXE¡/˜Ú 1…—I@Ÿ²';{V?uÌ!P$Úæä€v¨'é ÖH¬„ƒ5€Z 7™î´§×HÇOãâBuDƒg³šQ‘:(œ1u.+…N¡º!†_q6s!1dáŠWPíx „E/‘ÑŽ”›é`ZGJ :˜¥Imª;¦ÍÖTJÀê¶LPQ­gíhxð¸ª}Cðüå<9Ú3˜¸Ðž&Ã'Þ†0ÿ¼r’}å%)óEˆá ŸsK V¸6ä@63G1×  ʹðµˆ-=˜éLz8 Q€!¢W§¾¨v0±FêÐ3gì d× nÂXv£)…ÚM—24•¸6¨y0¹ÆOv ›¹ì—3F1—v¨C0”IL£ÒØK^—.Üð®n áfF0f ˜ÁkpÃ.Ì0Üà¾8—)6± SÀ«'â*DJazåëÆËN>÷ À…s16ŒöÄ<èêLjâG%¾‡Êmàv«?œ¹A=0¯oІ6ð pADóõ Á§m “Øs‚ÿE0 ¸[_Ç8q eÄ!^´pƒõÒDôÈÉ#R²¼`3Hp¦ì|£˜­5¸3â‡>g/Ðp¨™Ÿ™«=ð!^K—¢Á¼ ·’“•çP“Äd ðuø ò€:-ˆ€8À‚5å–7t!‚!Œ"@ÅŒc˜7jJ&†œ-åQ™Zô`‡· 8´C„c¾´§]µƒyøB#|Š˜0ödÛ23t dÄÖ9Ö9n–L”‡7h¡‡Ë q€ƒhÿuIÉ P˜ÂµëèU!Ø3 ;.oÏœ4¾-ØD‘MFËØÃ´ ~ (ÿß°¡Œ0\¢èÐ=»1Ò÷B;‰&£÷™Ykïn–2YFê„÷jmöÑ-ƒ†ƒ —Q`â ]€Âì°Ô§Ô|~ÄãtñÃNEû0‡>¦\٦ă›EyÆ´C{€V\®R<Œ´ýBl÷:Câ=Ÿ.Ê›q§ˆÝ&ûž®í’e`Ñe{ø÷5©œÏbCŒì°F#ÑvÖº®†°xTì5öøY»ìAÙÃéähò-L¾ìذ€ãM¸Ÿ‚¸†ìÀ…(dÍ~vP¨[xÃë %úÀ ›€¾²;l! p/ Û•)“xå‰ì€ñЇ>`Á—ÞÄ+ÿÇ%Cz”¸äôÂÙRg…-|)Çœ&߈…rÃõØZhC;¼á„*4}à[P0xB|”q Ê€LÖux‰‡~’á)wÏ'~A±?DäéDÖ”8  G° xpQP æ°~Ó¡xRá2Å"bvô@vòvqghûvkpRãI·vÕ€:RPJ*ÀƒðV°LG+¸Lƒ9s^êÅ#6˜#{°Ò@4§³ÊP@YÊV„X]p$´}ëÁ3j%z/¸Q1e_’…C¡«Gw p$d!P >dBC†ë5rè^ÿ7 ן‚‡÷ŃtW8…T |°#4r )pUÐë„Ó‡#!ExSøé¥GA‰NA{Òô~ ²x@Ù³Ïg ¤X Àð\Ð…“#oåZ3:¤ÓL‰úÔ*²X€²QfM˜:Tà‹WP_ÀÀÐMUr ÿô ®d¥%iM€ H”FÍY¯7&Iq8_ÀWaкá R YZÀðK` 2]xCo€Ut÷¦[¨7YH\ÍÈÎ` 9PôàK€:w KXÀ>QtUÀÀåX£° ôÿÀN/AoVã=¿qÉvøåhu< &YHÊàNÐ.àsÇÀKÀSð0Ú!£ÀN6Ó8=Y?ôsŒGgt‰‘EG´}°Kº°M°Z/Á fÀ~gÐ@ð¥ ð=ó3)Q©q •‡Òˆãt+  KÀb ¥‚s@¯Ð ÑC0:&#¯ó“ù8´(" GÐ _a 'Æ0€'ð£ñŽÈ`A0 ãp £s ÐØ8Òè'Ö` ¶(Eb¹‘Ða …`G@o,Ð/0 P/ÿP QF °H0œ™šðYQH …§+ÅÂw†y…9"VpE Ýy ~ :ÀË â) ÈáP¢ ¡à`àdÒVT¢×ƒéJ°ñ`¶¡áb PÝà ²ÀEÐ PäP&Àác3zBÀâ2ë”b!:µ.!Æ á /6vcø’oÐá 0 .±-Ðæp?P) ðp£aNZ(\R îY5¬H–U'‰ôH©9²D$J”9£÷¡â€¦p/]Ý™¿™À ¬@Ó0S…‘ˆpÄÿ0Tá 0ŽÓsº’Ù‡3k‡)Ò… /$Š`!…]´K0 ± \ÀLæ2o@[}`!† ÎÐ P,©=ÐsÄÖ0ýø×eEЩ¬ … &"RêPFŽà\à£c¥8×@ @¬à ~¹ è†0²@ †€ðé(Ö`jÕ0¬ÄÚ¦/Q'/Ðá S`ÙyNÑoÐHtÀ@ت ¥ € .1¨‰pZŒš2`th?›Påõz¯ôà“GãçK`/¥   ‘¨ {°]"Y5bå°=ןÕ_Ý5Òa¬ÈJ˜ÿ#±Ú¡   æ@…Üê­¬ÀÈV€`®èª®§Wð–‘öixOò©¡z³N!¶7A–pðopàbE™9ÇÚ-0 ¦À3:0®€3ÀuàOšÚ´œñ”æ§…Iô0"€qy†Z¦€-Ð, P ¥@ µð †p!Ð:P#Ð)p9Rlê-2!k;¢·MÑ Ù ÍÀZ03EàQ1`ƒàR µðEÐ#03Ð70spFs{2~Ûót ÍÐx„6pô =€¸&‚²Nj2…@#@o9°»HÐ| (·øXÉÿ§xɧ¤½"Å{¼ô º7 ¼@ ‘*@0LZY6Å«0pb7À®@ƒV,g™ãä‹ms¡ ÍjËÐËPºZ€eDÀ`¶p9ÄÐŒ` ³[E@#9€)@ _¸Z¤Œp «Àôrã+¼w± £89Fd!æð·ÿ¸%£$ÐB°|õh3ÐGЫ7@¹·[™›µ¼Âƒ¦na ÷áú|ÃsÁdpD”Ò¬§ éK»ãˆÉ‰«EÜGðf#P4PtLÇ9€îx3†cn1,¢¡ÅR1¨ à ›à—¬ aÿá¤.1¨4%ó^ÝÐ-°N¿0 -D70¹5`ÇÀ:°ie´Çrá2ï (WLY³–%‚ ƒÊÈS Ó% ÀyMñWµ 8#@=ÐgAöAË0oY'0Ò§E!<,ZݰÈR‘£aF`.èY:E :w»:ÐgžüÉËà :uÙF{P êÇ,bÅXüÌ1 ¬pÈPÃQ!×™Š0 ëÚêà äPF©/àÁ:ÄuLÇ¡<Ê–ƒ3ØÇÂâ›Å|2€AgvÁÅ^,oª¸¢ H°”ð#UiÃ@«@ ¶P Å€«Ýÿp¬€ŒÐ8ulu|½:` Æpô{f…ÿÀ-±)æPµ pµ”Á 3œÈnº›Ÿ0°sê€âøKSP…Äs f[ ép :ÇC‘K‘z¹˜›ÇzÔ-,×›R9›?Ã;…R j”À• Ÿs`0 Ãà\à3BP1à8eúyƒÚ='ÖÐm ñª'Ák$é½ÑNÍ-3AZò›ÞÀ ¼ê8\= .q \°£ p¤é²&Ó_yã •Ü87€®€Ö:0^ÍTx‚Åc·) LÚ¿á¨-ªE0mgð-M„ž@ÿp¶ÛÓ@ÇŽ“i_À íÐÐû%]F½x_Ó` ÙÁ³Ñ _d1 M …ŒÚÃð^0 [¿i@p¬“ÚíÐ0péJ¹*@Æ0¹70"%…qEµ aµÜ$ÌñpàC  i±ÇžPPE`@$PCðp3± ¯ ÐG0qŒ¿™veÐ æàuöÅ· °B{-$Oi ¢P à™‚ÌPpœÌÀ ¤`Õà¿ùÑ4,@-à¶ýÉ) 4ˆ”å;ãÚ@ßЇ`2Áíë æð›”ã¯L• i-ÀI@oë<:)ÿ20e 2°®lÞÌT Åç§ ó h vn×é™›P60¿ô %î©’:m.A ‰ŽV­þ½=¢¡*/µiö£éR *.À3b©@ B0° Ý0GÕ ‰/°¶1@æ5².¸è!* *°âr¤Hj/öl!å R±çù…H æ@ °ç}¾P5¼ ·Ýa-@t<˜Ç+Ð Ô°¦ÔÙ«"HsÛiÖ‰`ÌpB G`o#5AlF…»½ªÐ“ë8=ðX`BC49ï½|ciÿˆ”ò”¨ ÿ0ó âà8õQŽøwŽ& ¯0 Ç5 òš5BF¯:‘.å~î’Q ¡¡¸Ÿá@@# Ÿî)Ù²@Î:p»²p 6½8Bçú€xUá€1"T oví@N_gã ŽØA±¥œŽCæ7`÷#ð ÖàiC[Ð ñ@ƒŠ§ò K“^éwÑö.ñöq?÷; dÊéQ¸Û80@|ïi$T@îØ ©lzðÝÊÔGNïP«PHõ#EšsY5·€SIpù00 ^öG½àùȧ|Êí¹¿!Ã7™±­Ñ ÄÇ CµœÌ @Ö d{ðÁ3òpl8BoøÿøÙ+ÿLÖtR…P -è hÕA†NoD` ûP/ÇàlÑð›`U€:yPeæèÑûçoà¿ ¤×áCˆYIå( ¬":ŒØÑ#CgĈ©S'ÒW;‘ÎÔ«Qƒ#Cl•*dh\»æ€Ð«Â'Ëð,Ó·O B}ôü!4¸p ÇGe8qÔÆ¨Y29°d­’ǼêÐAO‚YÄè•*%Ža4†èíÁcÀ=ewÞý3‡ð_Ò¥•>„ª•áTô¼I¸ ±°a\Õy%–³±=ÌJ¨uÌ\·TâÌ „{h.»ôôèåëw¡¾¤ýÍnÿJÛöíÛèZ›}®:ÜJq'N^6w³ÝeSÇ9?ð AãwN\»{úꡃ­Ï>SÑðq£f ?mÚúµvý0°_}~åϧÿoß9üçöÕ_ßÁ}öyÏŸ}àqç@wøéA±KtêOÀ¿V±0sâÉ'žîú’/¶þäóð¿ÿÎA•sü‘DøŠï!g˜öøæ™ÍgsLY%fcè3E1eœrÊmI¥rq¾Y”Ê)™RÈ)z¼‹Í¯(Êr´!͉&—¨/&e»ò «t“K7c ̋ҠÉÌ Ì¤F‹ÏLºALsü‘S0ÿ*ßt³Ëÿ5è('íœO„ÈdÒ»„úsI>ù'¾F3´IDÛT´JFý[HH†´d“=ù$|4ÈË4ÓS@M0á^ôTTßÔÇÌ<z¯Ëa-¶À,5ó3\sMh©1w5XSõ/Y?‘‚-Q¿œ-óÉLÏ\RPÒÓQ!…ÛlÝ\uÕÿVäöÙ é}U¡¾ÒU÷¯¥ ñWxIÔ–>G³¬WD|™´Ò; a#ÓŸ~ý•VÜ÷.XÅ8I¥”c.m]²?JmUªb‹uífIp7¦ïàI×$µ¾63§&ñU ]‹ÿu¶e—¯rL…×f|…|V©h6Vkß hå) ÅÔ`¨‘~6Yg™þ'WsœÆ¤›>ù$'ª§†Þųk“¹îôÓ>ÁDZL>Y9j§–Úï¾ù´tÖBïhϹÿé£OÈä³½ ×zrÊ+·ürÌŸõTLƾ;€†ÌL;èµ±mûp·u¾2©øºùäsìnüŸ•‹ðÒ=]ÏÉg[¶n‚w]P¾ööVÀ‘Ç]>Š+—mòà?É$ïB3ÝåÜOµ÷mB9¥S!K¿ôrÈûöú³W´m‚-î v±ÛÑ8³Ò(ÕSÿEcm?TÂ1‰R{ÝÈ(–¥d!ù,{«Rü‡ """***555;;;DDDJJJTTT[[[dddkkksss{{{Mx¨yv“}y”{{œi޶v…§v†¨z—º~š¼œÄktÌv}Û{}äWVädcäooäpp€~«{õ…÷˜CìŸañ [ë bî²~ñ¤bð§i‚‚‚ˆˆˆŸœ’’’œœœ–§›”ªŸ™¨Ÿ£¸¬™©²™©¼œ¦¤¤¤ªªª®¨¹³³³»»»‡¢À±Çž²È ´É¬³Á±´Á»¼Å¾¾ÉºÆÕ¾ÉÕ¼ÌÜʜ݃†Õ’’՘ߖ–Ø·œÍ¤¦Ë±¶Ý¥¤ß¿¢Ò·¹Ñº¼Ü½½ä€âˆ‡åŒ‹í‰‰éãœà Ÿí¶…὚壣㲱⵹潽귶ó±±ñ¿¿Á»ÂÈ¿ÉÖ»ÄëŸàÍ»ñÀ¿ÄÄÄËËËÀÊÖÃÏÜÏÒÖÕÕÕÖÖÙßÓӨרÜÜÜÌ×ãØÚáåÂÂåÉÉåÝÞï××ìÝÝôÄÃñÎÍôÞÊôÖÖøÒÒóßàéàÚáááççèëåäêéçëëëïïðòääòíçòëëóóóþþþÿ (H Áƒö¸Pd`‘ =LH±"Á.Tì ´C%É*Y6zø $TÕ¡ÌÀ2`JqbÂA[Lôa4‡‘OC‚ùhˆ‘@Asú\Ê´iÏ¡‚ŠúTÚ´ªUŸO¯jÝÊ4+ׯU½‚Ë“¬Y¬gÉ8Ñ"E ²¹àC¢Û»1jÄÑ#•."A”İ$‹— 8ü3ÆÌ6¡ÐYjT AÎÙ,lV¢K©¦­<ú«ØÒVO£vºš«êÖ–ÙâMHä"Ex\ bwö]0T¬Ø±c…J<ŽØÉ2ÒË d¤DqBcJq0sBLÈq$C„gL¨ÿHDÚèÁΘ vvÍt ¡E@¥Ž~ »|ý¥ô[ç׿êÚ‚¾!ôÃ^ðEm¸ÙA›iAŃÄ„TTñDBaCd¸Á×bCXPÁÈÀ\ ñžX˜ÉGÕ"›É§•Wÿ ²Ú~7öÇšŽøñØ•K-"¤@Ciä‘BÒa„t I¤“N"å{ðMÉÇiðñ$ i¤±‡"„èAˆ m˜ñET‹ ’¥”uABH!ïòFfŒ¤•yR òÆx^uÚ”üi_8––¨¢†6%£ŽnµÈ!MjÈ!AbúSU”u)"{äAˆ{숔˜NYT|†À¡ÔQBÿ$”R†,ˆ™‚ºè|ºöêk£h¹+P•.¸±Á¹ç@I…1ÅX\!Rs5ÇŸ=ͱ#~"ž Q‹­Pµn–TX¿ú¸ëYëšÕ®»Àö(,YÈšwîOxŠ·ØÆa‡p›”µØ2ò†>½ÁY½ ÙùçŸSa{­?Λ®ŽïŽ•±Æñ&Ëã®°þW§h§¹'Ђëåi®ŸØú¹#ðÔSȲòèŸQá g«ÛèÆ¦]ŒqLJ޷n¹1r{ž¼L!Ís•!õðÔkèÀ1g–^Œ~V+µÂGœ2Ðì m´ÙgwLöVG›[íORîÚµ'•A}.¸ RÛÿ€užB}{7ÝÌþY«];6Úõ­=#ã°9îäMÑ(ºÇÒý§›Ýkf¢½úÆÕ~Çüž½ï±l·ÂüšËzÏÿL9j’çªöìÇ‚»§íX)¼çSLÔQSŠNzéüŽkÔÔ8O%‡ò°;¯Wl혃Åðî©uå»ÔKÚÊÆ.ò²ßèÇüÆ/"ñµYš}ìÓ§…½Ü>ßn=W–§Œ¿æÌS³2¿àqë|èCËnö†Ô½®lýÁÌýð'½üí¯~ì2‹ž"»pjsˆ•ÛÎ5&ðo ,àÊ&'¿Õ¤„×E´ 2m,Pƒ`ò@@l•‹ZçzƒÕÿJ÷7¦ø°‡s B\˜÷%‘~„be7ÃÆµ§s„[ ø¤•‰lˆxƒpƒ°à:`ŸPèö¼;ÅsßâàXHv9V1rTŒ— =VA›E…ey||·7¤Ø¨j0cÄnð·è@ ntßݺö÷¹è‰gçîX¨)öc# ¥(GIÊRšò”¢¬[?ø>l!’,`ÌÈx°Vò}¥$$ÝPIÊòò—À ¦0‡IÌbÓ\´c 9çuŽy“R|xò²Xs Œ4€v£j2QpÜàh¾&Àõܪ“Rü¤:9™#ëÒn«W7Í5%5è@;ØfÉÿ5 ¬V·äÞŒ´Dû…0„TAˆ9ÆNÚåñz1$ â@ÍS—kPƒ2ºƒÑ ¡zƒŸkö¸)%%p¢Áážz¢”š¥žL[C­8Sêiæn8c#ŒÜ(+jåLavʨ¬©†U)L„1ú&å¶/¥¥E),µ‘hêeÓt*3¦XÅ£;“ø§@æÔsË›ál¶mùsV0Ü¡T¨š½—Ne©_!ÈÝf•D’æ¡YE§Ukj¿tiò ^õX‹R¸]ÚìNå’Òµ;5Ä婎¼Œ{ÆÙ­µº3øÂ^÷JS¾Â”³ZÅWp–Bžõ~Z¤Ê˜5°Vz ®CKA·Ò"¦ÿI¶±ÌçüÇ;Ðêuyýlkrˆ[Ö~P|®“ó\d«¯­Îw¼5O·R6$GÅ-4KLGm‹+Ño¡Ñ»*p; QÏÒö µªÊ”vÊCä>“•}šZPT§9žUÅ=€â BPJ1…ú ¼*ÜÛ‚f^‰>ôÀâ-åTƒÖÂ!®f²Ú¥æ˜'Ã9¬(ÊjJEË“i^¥VAÁìöîe0Ø ¨0k+Ü»8¸…͈U¸ÑEqÃÃ/Ø ¾Åþä¨H|¬ÿ…P9ÂH²"Öˆ-Úµ”µð‡ÔRqyÒb™Â˜¼ãÕ îhä–=ÇhJnŒÆÚã´Úé pØ¥ØúXkyøÿ¾…”ñ6B쪧ÍßœeÞÝÍfù·ö³‚å̬ö$qbR“Ã9'¶K‡Uëanà…ý¨:ÌÞw ùµÊ/c,éšl—`[3š0Û?= *Rîퟫ|媮fƒ^™*4'ÛMr7b³¨HëY|¥õXq#–¸BÈ݃­\NŹܖêøé.ÕÝ ´ ¥Màú×ÐQ›äz-cÒ“:לI3JÌ6Ûú÷ÆÐ³Šûî´ãdŸÚiòIo?sY’ºúÅXŽè´É[#ðÊyšñц›rÄ–»#+ì µâÚ6Nº»}ìÒ`÷Ÿ>ï;´­t¾­ìi×è­XasHK7þÕªRÜÿƒj~En_¾õÎÛ#¬ð6|šî*øäÔ®vy3žÁW_7Ù^ë³$§dpõbzOMmiEŽîP“øÉÏN:&'ˆÄò¼çzÔ·©ïð»±­41¬æª4iî)àijk„é)ÐÊtuºŽÆnoޝzãxÇø}¾;î­»`Z!2h>þrŸjYì%± êÖ§.×qQ-ü0§ßlw|[Úɬ|Þi7µ¨É7¶¨=ï›ùR8"ü‡ä;ÌoÝ·±øí-ÏjÔL~®VŠËGÖG¸î[™jPÆÎv9~íkò±yæ›b2Ê; ¨áÃ}ï^|¬kŸQ“ÿV÷ßÏ÷’´Å"´C§5ð¥7Ü„ò*a¯su_ÖÒš¦}¸ÿóúÿYê}•s‡(â'3€U~v~Ø•~ðm-‚'c#«3IxÃ2óWtªæ…¤x4¦XÖG}§C¸€Þww÷Ö¿Ç:g¦X0ôomgnAAvs”[ (I“T[óU¿6€3rƒntt×k¢¥T»Ç{Ä÷þ§y7Yi*æl(·"“4…º¨ÌD-C¶emØ8Ç”¡„K¸¤¹¤Kº´nÓÅÄÂdK6n¿ŽÏ$fÚˆŽâè:Þ8¼4}zG[(–ŒÑX]§‰|Ö}"¨i£æä9g–<…X{˜,¥æ‚R†# 8p vßw‚ÒøyÃ#±IÆGƒ­‚w¦^×U+2@DB@Á9–^™CO¹÷Di^V±_鈭QzŠÿÕˆ’Ø„¶Ø4L˜‘<’“ÚÓ¹’ô8•R·²‘¬”‹vÆ‘ðÖ4ý@þyDY9kX4*呉'rØ“xupX‘É7jœá5‘ô¥Jc•;+ò*ogqÓu2¹yú5«’‰k–;¸}~c”ƒ&>¬U—f3­EZÛdh!bÏÖƒøXuy*…~¼(l¸ˆŠ˜–µxû²*i˜ ˆ˜18V‹¹€æ˜Í8#È/‹#mx™ó•™J¨q”y›WËW.0òjÙ2c‰>ù–L&‹Ä8]ƒ‹“‰›¼É‰çu+8|v ˜d–Ú'8U#X“=…iM)|øÿB{x•Üæ=ªÕœR m@#…q7]Pè”ι›Yàx=]ëÕ‘9œRM7F‹ˆMÃlCQg 35’(4ù‘•„‡RÉ"?iŸõ9Ÿô‰nÈhôwî–üb*hacU}8ØEZqIÕ-ˆ a3‰™pE8ƒ#³ 5D‹E©›Ö©^ÀçUB·RNÅœ6³SkuTÜô@³xj|âDøÑ-ªZÉ˜Êæ ’ò‹öH‰ŸI¡º}%~<ê‹Öò£¯©8Éxf¡©’oÅŒ¨&IKÁ:Mºƒ8¢|碕©šr*–g¡9jy^5leù›Ëb!*i#Ú›œGô†œkv*Ú€^ÿ¦žŠ‚™I½ÙvX¥z¥XŠ©šÁi“>ÇA^!N·š¥yê™ci¥Ú£— 8£c±‚Ù‡ù+¥–©ÙŠ­çZ­ ´¹$W0ôhš)zPQ©hÊ'ꪫך¯éj®¼Ù˜îJ¥`Q~òújÖø+1ǯ›i§wz©ýŠýˆIù­Øç¤i1®ÕS®¹¹±xŠ«Úº°&w:w Ÿ0HfÁ¬ ­‘¸mƒˆ^èÚ°ûê¯0ë±e8¡+ÿIÎÚ¬sàL;©†²Z–[´a˜•/£۱늣Ë“«á‰ Å*æ+Fû±3k­1‹´úš°Rzzس‘ʘòÖTL˰[K³E[¶Öªµ7Z] Z©GhY£œ¹T;µ»—v šÇGŒfë]QÛ‡t;·óS·yÛ·G›Y6ûµ7ŒAIn—´2’³•ꨆ‹µúZ¹ôi«hk;Ó«zÛ-&¦*Dëi7¹uz¸˜ë° K¸›{¹'ÛEHx—ÞJ¹¨kµ¶{»®›´ [µsJšj!°§«ô8¼Ä[¼Æ{¼È›¼ë8ŽáˆJàØ¼Æk©W«º«{¶k[»ºë{1»} (¸Òÿ›ºÓ;¾â[¾ÙK[W)]ŸÊ¹´ú¤¬;¶Ø{¾Ô[¸æ›»|Øk$­K¶×;¿ô+¿ä[¿+y0º¿2 À\½Ö ¿–;À §¿ŒÀ¸k¿<ÁœÁ ¥ƒû¾¼kÁ ¼»ÿ Â!,Á [ö*·üËÀ üÁŒÁ/ ’€ë¾-¬Á1lÃ7LÂ#¬Ã­ là•Âú³ÂŠ+Â=\ÂlÄþ[ÄŒÄ0œÃNÌÄMìÂPœÀK,ÅV|ÅJ¼ÃOŒÅý›ÄSŒÃ\ÜÅT¬Å_ÌÃb<ÆfÌÂQÆC|Äe¼ÅdÌÆqœÅt\ÇjŒÆvÜÆ5<ÇpœÇIÄg ÆrÁ^|ÇnÌdž\ňÿ¬Ç{ÈiœÈ…üLJ¼È’ÜÈŽÜÇ—ŒÉo¼ÉƒLÈkìǕɞüÉšÌȤœÉ¾x É¥lÊ Ê¼À®¬È”<Ê´ ˬÌɵlË‚ŒËªÜ˨œÊ³ ̹¬Ë¾¼–<̧̬ÌÌÆ|ÌßûÊÐLÃÍìÌ·\Ì»ËÒŒÍÙL»ÄÌÍ­ÌËËÊÕ,Îã¬Í“<Í¿|ÎëÌÎÞìÎïÎèœÎÏ Îö|Ïä¼ÊølÎõ¼ÏÁ<Í@,Äù¬ÏýÍÖìʛР½Ð ÝÐýÐÅÔÎý\ÐÍÏÂÏmÑ­ÑM‘ÉLÑðÍôìÏ$Ñ-ÒÍÑ ¾}Í­ÎÓ-ÊóÿœÒÿ|Ó%mÒÝŒÌ4ÝÒ;ÍÓÛüÒ8Ó(ÝÓ>½Ò, Ò]ÓF Ô.-ÔDMÍå<ÔJ}ÒRýÔ*MÕY ÕQ}ÔZÍÔSíÕ]-ÓIíÔ6-Ö\Ö[]Õ'MÖe ÖX ×qÖlýÓW]ÑkÔ¹*Ït×~Ý×r×QíÖý×:mׄ½×s}Ø_Ø|ÍØ ÙjmØuÙf-Ø’]Ù–]Ôa ؃m£›}×!ÍÙMÙ—ÝÙ§½ÔŽ­Ú™­Ù“íÙ°íÚ²mÚ¤½Ø©ÍÚ·m×¢ÚµÙ­½ÚVزüÚÄÛ0 ÚÅmÜ¡Ð;§Øº-Ü€¼ÜÈÜÀØ3ÍÛ»ýØÊ=Ö*ìÜÇÿýÖÌíÁ³MÛ±ÝÛ£Ým}Ý¥]ݺýÛåÞéýÖð­×Þ­Ýæmß÷Ûù­ßóÚýÍßÐÝÔÞÃMÞ¦»ßÖ=Ý´Mà>ÞìßÔîÞïá#}±”á¾áÞáþá â">â$^â&~â(žâ*¾â,Þâ.þâ$Þ²$3î#5nã†rã:¢ã;žã>þãñÂã÷!äõAäEäSžUnåHÞãYÞWn]îåR¾åCÞ(_>egŽæb~äkÎ#$oî#q.ç†2ç:bçw^çz¾çDÓç~þç€è‚>è„^è†~èˆÿžèŠ~èoÀ> ÀÛ…:  ð2†À ð°Qé `5Œà Ð^«HûÄ °§~ Àóz_+0®ÞO °/3 #’n  g®O?Á ëŒÀêµþTƾ jpë¹î.ÄîBìõëe¾ °£³ 3Ží[ÁíÞ¾7à>Aî‹PÀ-€,@(ï/ Œ€  0í£a€/†€°Ýζ@Æ^+ 0j ;à.p à¿ €‹ .0ð¶§ Iİ-¿Àé´ðÆÿŽ ð€_ñ¿ñŒ0ëk@ó!?òàk`óÏ-ÿògÁ° ò, ðL¿óV!õTOï<޾õ?ÏôîŽÎ0éi±À7†B± °o0B2s 7ï o±þ`Ï,Ð``{Üîó °-‚ :€>‘ N:ð@1.Û"6‚ ÀµøÜ2%†øŠ¯>¿²Ä ù“_ùcA×>ê‡òÿù¡o °O‹6ïЩòrôûFQôÀŽ~ü¯MôÞÆþé«ÑPÃÿÏ:°­a0Ïù>aú¨AýŠäó.à|ïa”:àó?‘ €ö>ÑêžžoS Ö °ˆÑ›Œ.dØaƒ 80`Ž‚ ¼qر¡Ž u0`‡  ¸ðØRá›.0jTSð`B—10°PÍ3mt¹³ç:R 50`Ç‹ Ì™³ÁF‹à( 2eÕ–;¨ù¹ÃÀ… ‚í(¤B˜ bËð-\ ¡T™±îBt¯ÎA€CÍ7!ÿªŒø&€!F Ì]Ìèî‚àÙoÝE °dº±â¿8(€lhÁ€Œ”=ªfÿmúLAL(H€Ags*?| °€÷kƒ3ç hÎø … ^8ˆ¨uíß», pd´B;†f´b·€P…ßÀZYêt…,$wO^ù.{C Ðáû¯êÖ²ÁÖ”ü’2KË—!G&[ö°áTwž£Aî¹¶Ü%F¬\Ÿ>‚û@[\˜5íÛŒOÅl’woÍWãî[%g±ž ÇE…Žh΂ÆkØöYp‚Eí—»÷†ºÃÿ>rqçÑ ¿™~aò¼ï AX°£ºÒCWW|ïû{ÿ‹5¶Þ€jÖE"X A "ôŸZî02_}Œ€–Êi¤¶€·YÇa^Ž'âˆæ-X"‰›uv–‡lQ‹rÑeuû}¨‹6¢&–Õ B?Ç#ŠÁ©ˆÖg ÈÚ©¼ÃJ*¬ ³Ž9RiãŽ'I$WAŽÕ#—BZõàY¨0 T*  â•²É!–>~ æ–ѹ[˜Syf’©,™Êš9nhapŠÕåA‡"*狊§¨‘ú°ØÖ‹Ð±è y¹ `¡sjéiœv2úi‘È­hX„vQÀˆjÜi꟫ßqÿZg–£vJ뭆♓ž@¹š\ì|류ª%«¨¸æêdä%šâ£¥Y,¯ËݱŽ&k+¨µn«,´\Q[å´â^³Ë¢Û-²Ú²Kj¸¦’+í‡NB)e¼òb«n»îzëï¿ý&Zn›6²#c]4Z‹›¾29û.¿ûr»n¶ÏÂ;/¹ Ÿ¥Ši¨±š1m WÖ(ÅßBqÉ‹‰/Æ6âw¦~xnÃ#Ÿ 0É(ç\žÊOkÛ<à|Îm.ë3]ÏņœYº43½´Ó)±ÙÀ²&Ol}üÑŸb_Ø1Ò˜*uÍMOlóÍ6 ¼²Ïg&7}m§˜Á©&,¯Ž3‹ õØ{ŸÿÔì—jƒ=(bòÈÔ<°ÑVo”Toš÷Ó&—9ä“ó .Ï‘Þ9P®Í”`[¿ª¹Ø¿õí·éê‘MùÃy®],bˆûuÏ7}BðݤŸnöÙýÎZyé—·.xµjEóÚñ„U=úã–ÿ¼óÆ©Þ|ÊÂo.¯màü4É+;óÏK }ê»K.>ë»ºŽ©«óKnîÑ—¯·üÓŸÏ%;øç¯ÿþü÷ß?Zæ HÀð€$`0è0:À!Œ ÷â¿ Zð‚Ì 7ÈÁzðƒ ¡ý§«š4î6ò‡<úÃ&×Àæ5r›Òò¤>ûùNgh3úL¨>ï5˜ìÿªÁŒiÄC-}ù‹Ûº'¨|Owã#_[ò·-Îz6¢Ýöú½Ì#`#<€rÄ~¡MÌ?)Úð†9œýj¸³ê­ñs}hŸ>ÑbeÉ`<ªF= F|dbœHC(NQA¨s£Î®xÇ2â,h PÀxf$cŒúÐ"4¸Ø¡F’ŠŒß#!Y+J*‰€ŒõQÈ?~ò,?Ìšeø½TJ‡½ ¦0Ó6µ~Ç…‚¹ÃˆÑ@ ’ÉØ¥>R¸BÜÜÑ0müˆÃêLœÁ1Ž«ã&‡wÌdÚ¡s8ª!„ŒÕ@ãþ":µÌƒˆF4—/µYÿÅ9:ò8se± W»7ôÁBH¨;Áa/8Ô ß¨çáÂ(Æe•þü'8ë×MbBꚸì7"µ‡ø@ÔcCñ @x Ò,åYœ9ÈZ:nŸÍè/¿ÉÓ€“œþAãЀáƒÄá5Ôȃ¾ Ç;@TXj±©'A韋²r•0ÁéU± ¤Êä„·1÷æÐ8ƒvzP*S‡-ô"X­Šj42Õ7=Q•õæ0uØQ¾ SóH¦âàƒd€ƒ>¼Їoüa \X,eMµÐš1½Ö]wºW¾ö”w ç_ §ÚáÉvЃ/hA ^ØÂÎ „ÿUö,_¤(UÏ"h@ƒ™5ÖfùyÊœæÕ³ŸõëO±X¬yСv{ðA Jp‡;44¶s€+&{[Üâóˆkqák: ׸}E®^×Ë^å~TsĈMCíÀp¸t T(á —îÒÆmõE£çuÞ­¦WŽÇEp‚E»\f h߀†îÀ¹ØR€9|8ƒ[ü»˜pîs—Äf³Z\o”Ž'ÖèhÙÆ¹/€Ñ`d0„qŇ=gÉÄX•Ä:ål{|`Ž®xP÷3ÉØ‡/Øá Q€,% !2À(æ`üakÈAFoŠ5 Ç#sÈO*…ЩNÎY7ÿ YàÂæ@2È¡ˆàE+>á hD´;g©Æ4¦Q 2rÑ ŒxaSÞµüx&_ó‚9:æ_šÙ?¨ZD¬lМ'9j!ïüäª[ýêo2R¹•5ií:˜Á t çÅÝ r‹9¹êõh´˜K/VDâ tD§uÆ;ÈÁxÐ#;ö hÐ3·ÌÀÅäõ!hBëÃ`T¨A#¸sžAýDzçAÏà÷Ëx#UööÈjìR‹àÀŽ·£vT3£0]Ãÿ†6/ï¤3=œÌGÀê)¡F ‰ #3ôˆFpÜsrpmæcìV-Es4äÇq’6wdvw(¶#„A4A@¾0dmÀkP Å€?Pk p0¿°8p<ÀÂp@® ¢à TÄÀ  Xƒ6xƒ8˜ƒ:¸ƒd~QaLRk€X>ðÓÐNî” Îpqpx%1§ma2˜á÷5¨|Èw|ÔãyŸ·~Î×\|4x Ö§Z< r>`&`'Pe%ÿ7“5…”UìÀ“ K Å2qçƒê‡€xUdv'zCzë£vÌÿP‚> =;°wP&ðRwð< y@Ño¡qc†ñE8@8€ÿ'3\¸Cé—€ÀVˆŠˆ9Ö„$:ÀÓp~0‰Nu‰v°qXh³‚€ ú1¢X—eSÆW~ïF€g€èSaÈ2ú0ÏX̰«UàP_pAÐ\ð nót Р ‡3 Ì`}›sÉðñ˜…Ò(d¯èŠç‹î5z³øò€XhXv0®‡µ4 ?„f'ˆ«(N­8ý˜ˆÿ¸ˆ¹2Ðptð.vN^[=Ð&ðòP@ÿáai€ ¨à Oà¶rúàLGèNÐThªèŒËgˆúz%©bìÇÙ#Šô Ñ`ð€°’1i^ vÐ`ŸÀ î@;°fæö}óx`Ô‘tèx©þ0ˆÏ˜MlL™—Íß õRºæ!ö™h¾ }A ‰@b@WÀCwkyœtìôHYvŠK!J¹…¡Ù…#I’')‹Üq‚ðw^é!–)£  =²ëæ÷Á –Gf0R‡‘[Õ”sÉ{b¤vHY.Dâ é<ÆR€ˆhšz¹—b–wk ó…Fà’&rµv<ÄÐ_òÿð ”°°‰‘ÌhK³¦Iôù0п"ш—_¸üxšvÄÐPÆ•`ÐŒ˜“ß`÷ph²Éà|U H^ò˜½wœ…Ñcá €ói:RŸÑyˆ^Øq`è—·QF}^ ›‹õš€¶÷Ðã%@S]~@„Àt¶iUV·!òÐð “¢f¡Û$’øI¢%*¢Ö©|¥`P•€Ñg‰½Õ^i],9Ž_ ópRQà„0`CXt¡ÞÐàg¡Ý@?HÚJš|öi¢ÔibQÊ[¯a,ú£yXÙõÙÿg]àxMæ=ð%àL ~°UÀ ì@¥0Š’'”·FÇ3Æ£œƒ úœr÷§ÐYšNz¢(éó ›ó”û¥n/äd1éšÜàPVPe/Š@Z„!aŸ äfœ´}Ú÷òv¹”Áª„èÓù”ÒÙ—³J.Ù@q аX^`Ð`Z€‹`\Pb°°^Ú¢ÉH>'ªŠ“ú°oà’KºMë§“•˜®{þ©}“°¥&pÓ%[™®œ¸ú œ¹þ °F—­ùé”Ûj²'Ût;(ûe›}‰`À ‚¯••$ÿð P.ÀY TÚ«0º9Í OÏ Ù'ô4²w9¢±Ú¤|©­ÞŠš©yh[:а¨åT`À¢ZY_Àð1 †bð²•w@tGD ¥PB^ kk¦´ÖвPk’)»·F¶²‰ñŒš÷ ¥ÉúPXе[dà iYpx€.y°V …„‰—ŠÈ9§°£ÉŠúª£KºÔˆ¢£Z›n' óçDP°^`QgU%¨`~÷q`Dðž º÷LÙuQ+Õ*šZ¨¼®*¢OÚªLÊ'®˜4™5R Ëà{ …ðÕpÿÆa`Œ ^ иŒ  ojgÑ‘ TW7ºÑË­O[²|‹w~kÔ{FÖ[C™Z<Ïн. c  ô$fÉ qðpt°$  ¨¦Gí4¿WUÉKš¥ë¼#L²úÛ·Õ8·¶·º«q”zX’@qæ O7Skà…ðl E¬€ ` 4HÅ[mº’ö;°k°þ2¨‡ƒ5ÛW rÀ0àg#g Œã–E ²  €Ø HP`¤¹eWM<ÇÐH§û­¸q ˆ†¥‡a L@ x± %P°,@÷ÿ¡ð0 €FP@éÀp Å oÛNq«ãù |l^t\Ç&Ü´NûqÌ»Ÿwã Œ€ 0LБ10Ë4  p4€ X¸ @c0É—0Æ¡0xÅI´@A;Çã›IIÊKË´¨Ü¼v‹ªL.6GŽ G0ËÌPGðA N€Ëµ0)Ô0° @ UX÷±®¡¤Ê¶"6ÊË+ºø›¿'ÁƒùÓ€øÏ®0Œ`ÂP 1 æÐ°Zsp°10 @@.hÑ p“ @8pj'HÐ8€ ôÀ@À Dƒü¼Ò,ÝÒ.ýÒTÊH„ÿr  @2 ìàD .`@#À÷8}…ªOÅ@ÌŸä¬úà~ÿÚe>ÂøŒ·z›·'œÕ(Œº§âÀèpOx67îà L@¹7ËðÈ0aðnÚpW€. ÀÉÐpçp 5Pî4—´ó6ÊGŸ[ÏKìİúÌЬ+y‡*uÁµ [Š ©Âº—Z0ðš@ GP@ 0…hD–G©ÒµP æ@J-syŽ@ĺÂeÏÝÌíØOÜ¿@q…J Æ›ÄæpÎ,å[V RR}sêià‹ ç Ä¢àÿÐ8P œÐM Ç9Œ‚À ¸Û/áhw»¿[Ý­\=ßP™ÂkQ44 ÔA¿l®A6¦’5ݾàm‘à¼2|=FÐüZ¿)A(©ü¼ÐÛÛ€zÊÕ Üú@r@‘ßûýÁ°™7)O€?¬À þ ®àë8ÄŸds>—ó0xó׌.{z¿ð-ßñmÊù¼áö­ÂMÜHÜD‰AIrÎ Àì­×ݰ@ëȇÞã]ÞHyu©Ä;ÎIQ°ºmá2íÛy·wªRÙ©v#´BŸ và’vP ª²J`c|Ã-2€— ®H?€±ÿÐ8{\l4\ŒÁ§ï­ÕA®ÏBŽÕõíÕ…±8ì Ö´ÆK‹á+F#€®_ð®Ð20Ë1pÀ ¬À ¸  *" ? (0Ë.À>ÀnŠ-æ=~­Øêã”äÈ~é?nin#C ¼K Ô_8ÀJn6€ŠÐ+÷Á ¸@J (€8pÅ(VÕAŸ:1ìÆNßÉnéô^ïD®é¯Ã!zðÔÑ ‰8€Ž µ ®,èÁ´dmI€é<€M ¢sêèìͧ ïöžáCÎñ˾ñÐ ÅõûÞïúí<ðEP }E Ó^ÿÛ5P‚<± ™xô¾mæ“.ïBÏ¿Ež#°  ð‰‹±]©Â¥î’§þE?³| u¦ˆ³Ì²Íº^î:ðëun;ò‰_ð…%îN÷÷©á/ú£¯Ÿ!7 2…À]sSCñ ýE z€R›É­ ù2À|¸5€::0üÃïsj¹{d]~ñó'ÅŽ÷uá¦kôÓúã¤ú²ç Bÿ ø…18 ÷eöôxæ02pjà 2`ª•<ë:°Ì?‹[¦ü³Q…¢ñTúêûWÐ ;ƒ .dÈaCˆ>”XÑ¡EŒ3n,H‘cE?J¨Ï\I”)U¦TE–IXT­ˆŽ*}ÕŒIX´’Y2f¸jÉ !Ä(ŠBvìòãѦýH¦\Ÿ>_¼º§ïOyÿ&,I2¥Æ‘ ÓZ ¹va[· áÆI÷â[»dž¤ÙweËs&ÏÉìûŽ…FKŠ X2M弟8p(ÉäT ?–þÐÑ9j5ªåEëc'7@}¸ŠÕ[¢@ƒ°åæÅÿK­íޏëêþ7—.\ßiKòõ[|`LT°D¡ré# &D²•¬ÚJxÂÔ1ZR£™yt&¯ƒYŽÎK5<‚cÅÊøZ¾ìݸƒÇÝ¿¶Úÿä­·»h.%vR¹)0ãJb… & €•”Üa%V.Œ¤ 8 ždöpÃcôe•\pQ¦–jÌQB†C™¤)òv /³–Yšo çpæí>ùækHvØ ¿Üx p¤'9Šr£)©8Ü,‰ðr—ŽðCòROi[9¢³Qnæ¼°´ ^}ì¥À•W_âJ²U\ueD&¦=†Œ1މÄüE ˆ›ýº¤y¤f¢‘&t@á=–ጇ<àѺ!Ã’S²M=·Ô´Ý5õµg{{暺üÒL¼Ub»L@q$B¡Ž0ÄHš F”@À€RP WR‚Eïh`B¬~Ôz5‚aDõ¾5+>’TܲÛfm»RWÝüÚ „] wD…AwVé Y¡›‘$€wLC !@À¦q"6`þšƒƒÈ  8°D Ê£ƒ¸à„£Xÿ÷Ê%®²„tFŠÙ§Îw:ô¥¯uås Üê·’¼ÑĸcÅ9ähcE`;ü% pbzÍ1¬…L¢ N¡ŠQ\à‚à@ /¸èÀfpŇtá“únƒB0¾,…üY_ ß÷B”Tc¸Y_“ŠP@ɈS*vØèøOúH†%Ã/ à(Þ©S˜!mÄúXdœÌÁ=¿ B€;¦Á„# êŒÀ‚BaÅž@À§èq¦YB ¶pÔ9ü¡[WT™øˆD¶Èj£½äê2IUªóŒì,©IPêväïf¨H@Y€D® 4ÀM«Ð ²ÀAx¦¦ƒ¡rÁ Zà+_½Ð#ïAd“E*l¤ZU«Nõ7'D¬1e¿ÿ‘„bt<ñÅ Xe¨K;¥X-<Ïg%£Y̨fœ‚™Z0c%Ã^ýª…/@£³…déL–&©ðªºUìbÙæØurZ‚|\ƒXµSÌ2B ‹†@@ô§dLƒM‘šÕ¦ûÈâK¹ƒ¼ë…îjÁäG ÊI~|Ê­o;êŸÝò¶±YÚêHÕÈÆúW É]n2š+§daZ™.3p€4¥)Ð.wµà­„÷ý¨G áÁÞ £Gâ¢z=ÊX"«‰¥¤ÌBY¾³Ðì8› Ï>÷iý…‡.ˆÒ„×Àªem_½¾‚C,Þ>²ØEYqÿÊ,±ˆÝëä'7¹„t nq`¡ UЮÊÅAÅ—€ 5†l‚d¤Q„0 xDM¤ˆ„ dÀ àMŒ$C4°…¾j ó‹4‘ÇÊf‹LìBlûÇ–XÊ#&ñ¢[_¿1¾0æh²ìœìgý;x&´3ɘ„ L7"BBÒbB1‹ a Ѹî@ÞAšIß®óCQw£ Ħw½å›Uá@š&- SLfRiwÀÿ¸Ñ!å䔸Q Uá„ð«V7Bðƒ¿ô>p#€^/®Ç äjûõ‡ƒ- ßҷسâ·@óï-‹Ià "xtÛ¬„…n&.Äàˆ‰ëÁâ© ‡÷Îb©IbÄ#"voMîô§Ï÷u+r`‹d§ÄÒ:köç„më$Ô)ÕxÄO 9 dÀ“Þ7Á ÕÜ#°:ºZ4Õî¦C9ê‹fô½§—˜¯DÒ¢tàÓ2‘Y(— stOò¹h)8zªA j1îÝcIC:2TaÓ¨Ç<úÑš“u„Ðîê5ÊOŽè’ï½ÞÄ^ö¬®œåË\ZÓ˜ÿ'„A‹ÙoÒ­F5hÄ&XB2øJ î@†t \°f ƒj\#ö8r®‘~ØB›läá½”bŸ÷Ù«¼ö(¦º_º-GP çx$èU{°G*Ð2 §õp‡8ÀgЊ(0„_ˆƒð€“ ‹¤-ÚµDû»¾‹2{ó;F‹@Kñ³‡qà¾à@€Ù‡‚h‡—ÈÀ„è‡q ‡ ‡k¸z`ÁLÁr‡üoðl0‡‡h˜kؾuÓ¢Mú>%û"¾³@$¤À 6#| Ì{ ‡Óû‡~ ‡shƒp,4Á„ „Á´‡),rðBÄAgèˆÿfB¤ۧj TÂ$dB¨s=E;B<”ˆz {°‡ŸØ„Sh…wÀ:T(›ŸðBk0 kðÀ‚ ²:Èqàƒ.(À`ˆƒø‡ø‡ŸhÀÞH2QB:¼Ã>\BÙCEô3<„’¸ff¸~H…S¸ÅSx‡²{,ÒyFNŠÀ@ dE>LÅ:LÅj¤Æ@’tHŒ‚…V€ôo4\0†tø¸K ‡mÏY‡hSe\Æoé0§’ÃM9ˆih„Nh…ÎÎhvæÅEbFnèÿ¶œæ †dv¾a_~·ðýãá]iË×jYMb&_×=’¶å=Îêʵ]p.Ò“¦ß¸Ng½®èPÜ_ ÝÇád2A«¨»M^„k‡žÍéýÞ5íæsë¼FéÈÆëQ=l^¾-ÅdãÝeìÍ6l¤Cì½þçŦëuÞLÈNì.ëpÖQ³–á#£áˆ.P¶†çU6k¦FmÆ;º¶Xÿ“>íЦlÜkM±W3%Px£OpÌZ5îS¶ßpµêÕ µÆÖŠUéömžlàFà@ÝÕžì[[,ÿ•Ùr®ja–ÐLái:íÁeîÑ]êL¾ëÔnánP*¥Õ"Räf¼#S®EÍÔqWlžå‰¶hnÄj.&ë±fðc NÛd#É_•-âËîëä–^ÃS Ÿéʦma2NpöÎnúFê6ðêþ¾ æå¿g³îSŠêeV˦•ÝyVqoS¿íçq þí.¾ï¿ÔýfWúÈ]ðð5äßbŠ=`)ÿpÛúñJ&rWíè¶oiUTðæïPÈÙÿðîðéniû ]XÕ*RíÞ.r!?Юž¨² êmýÜÄ̦ŻڮînŽWI²ÞZºž&aì–l-ßrívô²äGÛD6£ o›ím9Gñ!7ñFŸs8¥M?ßq´…WÇna€^·õVù†ôOuOu%uņï0¶ÜS×ßÏVõÎÖôí­óGwuYßn%¦è»¥rUkéœÎÌtV]tbvivFoÓTþ DYegéÿžVd÷æõöahŸïWçt.vŸå5ïãmogüM[o [7ðV¯o:¿èsÇw©E÷PWeÞ”Ù 7÷8ÿu}¿w£^ðú^u‰ñ€OBvkkÿ~÷õ¢^øi§öŠïr…q þä#|x/qVw‹'÷r/øtvöƒ·t×H€·ö”_‘·÷’7ùaŸïÉ}y–^y^s¡mê,öMøj¯ù‘öy¯ruJ´ëÝUÛR\,nƒ×ø|§ù¡¿xX¯ú_um˜Fð«ª÷«·zz{ªá†ïqöu’…^{¶o{·{¸g{Š'{œŸúºö¯§û¹Ç"­·ò´¶˜Ïû¢|Á—ù™ßû˜¦ÖÂ|ó” ú²'y¢7|¬‡|iïi5_ü½gæÀûÃÏüÂÿ|ÐúQ¯ïÍ}Ê×{©ÇûÐ/û;†úΧÃÒG}Âoý»û±·øÿ×Gz»ÇêÙüÚçüÈ·ýÛÿíIÿùÉ×|Ç/þá'þÕÇ} ¯ùDÿýƒ§~Ïþæ§}ÉO~Á']ë÷ýÓþíWýÜÿÔ~ñ7å'xæç~ç/ÿ÷‡ì'ù§÷ðoú~÷×~õäˆ,øÁ„  DhÐ!È !J¬H¢E‹3VÜÈqâÇŒC*I² É“SªlØä×0eƤYÓ&Jœ9u®äyѧK ,[=鱨Q •"%ÙôãSŽQ¥2­jÕçQ¥K…^ÅÚUçT‘_q†Õ8v+×´^ÏÒ,+Ñí[¶2áF¤»0«Ü—vKjÝ›Ðï͵‚y ÿöoß¼D«%ÌxðaÅ*ñ6Ž Ù²ãʘ7“}œy§f›…JNZti§ž9£½ŒútÛÔ!G“v[6Tĸ©Âž»[ìo³½õž¥ÝsøäÕ‘'g®:xGÝÎgC>=wõºÙµ‡6Ô¶ïíwÅ¿ÎÛ8á…~8≞HB„hå8Pû$ùäJQ®Óå˜[¾9ç•”9N Ó$ºL¤—Þ9O¦¿¤ºJ¬Ÿäúë¨;I´d;G¸ç.{èón“î_èÃÿûè¾GŽ|òË;ÿ|ê ™£Õô@UïÓõØ+•½NÜw¿=øák¯ùå›>úé«¿>ûí»ÿ>üñË??ý™ÿ"€Œÿ“ˆèÓÖŠþÙå~0Å?ô1€üÉÄ€Ü_ÿþ§S€¢! ¬à?è?’èCr Ü 9ð÷Àlp pȇGA(PÓ ?ÒAöO !<àl>(À $…µÃBnøB.„@(ôÃè‰0(€Ò$H @Aˆ+¶¤‰IÀ?úgŽ(v1‹‰€>@1EüD€Ü¡ÈŽ1šb\äH" €Nqÿpâchs ³ÀôhŽè/#n„ :Ú1$yÜã?YC@’#À"AÅJ*’‘·ëã@ˆE&‚’wü*ÿ€ºr%˜€+ØD™  ’‰à?BøoŽ»ü1‰Æ?²Cº\fHy.â²—é¤ðØÆé5ñ~Á!GêØÉENñÿ  íè¸&êÃA &6-bDLº™¤ç-ÂE “ÄdF€A°ƒš½ì§BzÍÿ}2€Ö4gA@ÈrBt‚ÐÇqùÍ|’€ *o¶ä£ fõâù’ô—Έ0CBRâï—=l$G:¹FsS¤$t;àQ‚¾4˜S!)?j ›f§"adQ§¸LŸ’ðŽtŒ*KH9€:†ƒ1¥iHÑW’$Šcd‡F·Ùÿ?þQ#æI h:Žu­Žkéa*H‹ÌôŒdªBCbÈ6=(G4Ôÿõ2ª{­I?éFÀb0±Nì*LÇØÄZD¢øŸ>EÌó±H©>ÎÊ¿ÐzU‚M”ÜKƒúü‰vLýêI*Õ•$”-4I¢X.æ/­ÁÍI·è’‚ó#†œ§GÏúOáu™Ä4.IHjHŒ2—£ÁŸÛD„ “#j¼Þ'M¹ãä¼6ÄßG¹Þ@ñ æ0ÅÓ+Œb‘˜d ÉyEü‚ - ðï›ßÞþ¦¸Dãç™]Lê±—Ž›e%Ë*H$’‘dlp0jVUÿjó#̽ç1ü߈4ñ “$ñíxFïFD åAMáÄÆ¥/-a<s̼i¥‰þYÂ÷2¼[m`/«Š#ǵzï¬^, Îqh=aìÚ+AbVÖÄVîå³l”Êr_ŽJå†@5 „Ì–,òܦGg…$bn+IóCë'èAºÐ†>4¢­èE3ºÑŽ~4¤#-éISºÒ–¾4¦3­éMsºÓžþ4¨C-êQCÌûÓ2©S­êUK$Áßd/«c-ëU»:ŒÖ­éMÚBpÎsζ%â<WG)T£ü‹íV?;ëe3›'gìŸÁXH+ÎòB5â,?ªÀ¡"òÿŒCͨG?ºU'z¶Å¦¶) (TÓ6»Ý·…*Ô?rñ£ôFˆ¸AaX¡²C¢¶­hÇXo4bX¨tE$Xíw3¼á­Fä«[üê?bR¢B¦¼…úïÿÍxᢠ£ \HŒf\á4v8Ê^ëŸÔÚ¦m›™Å“*Ðg¬ hƒÊÅy˜ Ý£½˜nˆ§¼è(_9{.TÆ-üçE+·mžñ+*ý²A£hï,ÊÕè^g8‘%¨Eö’Ë|'(Éžö›zÊE¦° !Á,#rÿ:Þóþ‘@ê½ï~7ßÙý÷Á¾ð†?<â¯øÅ3¾ñŽ<ä#/ùÉS¾ò–ÿ¿<æ3¯ùÍs¾óžÿ<èC/úÑ“¾ô¦?=êS¯úÕ³¾õ®=ìc/ûÙÓ¾ö¶¿=îsßùñ¾÷¾ÿ=ðƒ/üá¿ø#"ò“¯üå3¿ùÎ>ô£/ýéS¿úÖ¿>ö³¯ýís¿ûÀ™É†6›î“¿üæ??úÓ¯þõ³Ÿß—Zø—6þöÓ¿þö¿?þóï}ð¯MþPÑ?  nßûaMü5S 6 > ý ½¤ÍÛˆ^ f FŸ ZÍdl Ž `Ìψßÿ• ¶  ¦ß :L¶Í¾  Þ N_ ~Lÿ)àüå !îàÎô þ &ÿ¡Š 2Ìò_ .¡N¡6aÎ#4F£4£2ÞÅ4^#6f£6n#7Êb5–D7†£8Ž#9–ã/~ã_˜£:®#;¶#9¢ãC¸£<Îÿ#=Ö£0Â#JØ£>î#?ö£)âãEø£@$Aª#@®DA&¤B.d4dC0$DF¤Dú¢CÄD^$Ffä*V$;h¤G~dFr$HŽ$I*¤H–$J¦¤>ž¤J¶¤Kd/¾¤LÎ$7²$MÞ$N:#G¢#ú`$f¢ÞáOÚaOeP¥‚P¢!Z¢%6å' ¥'F%RN„\%Vf¥Vn%Wv¥W~%X†¥XŽ%Y–¥Yž%Z¦¥Z®%[¶¥[¾%[²\Î%]Ö¥]Þ%^æ¥^î%_®¥\ö%`¦`&a¦a æ_¦b.&c6¦c>&]&&dN&eV¦e^f_J&fn&gvÿ¦g~¦h&hŽ&i–¦iæ¥hž¦j®&k¶fW¦¦kƦlÎ&gÂ&mÞ&næfaÚ¦nö¦oþ&\ò&p'qçW §q&§r'r.§s>§l6'tN'u’¦tV'vf§e^§vv§w*&w~§xŽ'_B„R‚ %UVåSJåT%{zàd(}Ö§}Þ'~æ§~î'ögá4’ñ|ŽæÏ€6öÎ&èé ¨h€ăB(ƒ6èê(…¶D„D†Ö™…V(ƒn(2u(†Šhëh‰*è‚^舢¨‡†(‹®¨ŠžhŒ†Ù‹Ò茆ˆºèâèá„÷˜~Mü¨JéIÿ)€ )M i’©’ê”F©”2Ú/ZyP=D"8D•¢šDþèpñÛ-ráñ™f˜e™©É0i[<™’¥ÝGÔéôÜÐÉED—&PŽùxD^E“eRÙ½ÅA)Ô!$‚Síõ‡™ÒRõ¼‘£F“A‘)lQ(U!íQÿô™¦&‚DõÛq¼ÅR/9ªà1Dí‘mÑIHTñ£N®né9ªJU¦ [þ´RHœ—Å‘}D$BA9êž®.Ø*R½9Èêh“!•GÑ SX4Syê?,RHp“–0qØKÕÝ€Íÿ•JôÏÝÖT`ÔK O ×$ýOw…„· DŸík¹š;¤–OQYE°“; ÛS¸ÕC¡QYÑŠ…“¬NUÅJD9M¬©„DhÁÚ²Q¸]I¨QÔ¯VD!œ%…TŒAÒ³*DX)”h‰VÍ&DÎF`=*‹•l&Ôe}ÄÏm*&1•H\A˜hÑNLa•>2)ìBèNÑY@!ù,{)s‡777W}ªiw}nŽyz‰xy™g|£u} Y‚®^…°~ƒŒ{ƒ“g„«fгmµy‡¨rްz—¹Šu~š~l˜{y¯g[¬|\ºM¹{X©ky§{e½chºkw±j»szÜ|6ìz/êy8ò}'ð|2Ü[\Ö^aÏc^Ê|OÉzVÜkOÛgV×xKÖxUÈdiÅksÅwgÊryÙdfÕmpÞreÙwxæ^Mã[WèfIåfWêzIéwWãgfåopæsfäxw†oŒ…x……{˜“m†–u‹™}”¥m€©x‰¥}‘¶z‡Ç{„Ô}‚y˜…x¾‚I¶ƒW«‡g®‰xªzµŒg±q·“r݃.Öƒ:ô…é…'å†5ó‰(ò‰4ò‘:É…GʼnSË‘YÓ‰GØŽRÛ‘NÕ”XÍgÅyÔ†gÛ€{×–hÚ’{Ϥ}ߣjاxëˆGê…Wç–Jç™Uò–GðVé†jåƒyê™hé—wí \ð [è¢fî«sî±|ð¦gð¬pú±t‰‡ˆ‚ˆ˜‰†š…›œ’Œ™””‰Š¦ˆ–©‚š¹–Š¢—ªžœ²‡ ¼›¥·¨€€§…˜£’„¡œ™º€Œºˆ”¸œ„¨Ž¡¨˜¦¶œª¢ Ÿ½£Ž¸§™¦¦¦©§·¦±¾¸«¢²­½¾²§··¸‚ŸÂˆ¢À—­Å±Ç£­Â¨¹Ë¦¼Ó´¼É±¿Ð½ÀĺÇÔÇ‚‰ÊŒ“Êœ‚È‘˜Ø†ˆÚ‘ØšÕ”•Ę¢ÚŸ¢É¥ŽÅ­™Î²—Ù¬ƒÔ¬×±Ó´—ΪªË«³Ìº©Ê·¸Ø£¤Ù½¦ß½¿äƒƒå疊嚚ꩈå¤í¶†ë¼”夤麣常ó¾¥ò¶¶Æ½ÆÉľÙÀ¨ÙŶëÁûÀŽöÇšêŦé̵éѼõʦñÀ¿úÓ­÷Õ·ÆÆÆÃÌ×ËÒÚÛÆÇÞÏÑßÒÆÙÙÙÃÒáÛÞáÝàãåÄÄäÏÐç×ÈåÛØôÆÅöÛÂ÷ØØåßàåàÛýâËûëÜäääçíôîòöôçåûòëòòòõ÷úöøúýôòþùõþþþÿÿ Xo AûÎ)}6ã9úª>‹a‡~þ¤$Eªh%Bh!q]e£t6²v8Ã>ÛÎŒ‰LeÎsdJy\3öL=Äa cˆÃÝÒŠÈ ™§dˆnAš¡í ; ÇÌÑÉ6,ãnC-[Rš2HŒÂ¤pæF­¶‰•å¼9‡;ÿŒì^+˜6ζX´Œu˜È8KŠsƾp~ÜiR´>†!ƒcÓ†½Žñ†d¦êÆïLZ,¹ÖšAÖ¶Æ›,]ÀáZàPCÐŒ`Ô€2@ƒ/Ú‡] ¡4ÈA|ñ¬Tt¢©ÀÖU”…ˆœ‚¼Ý×·ÄUÁ΀oaiÜâVŒdÌÁ xÕ¯hÚ”§`åÀkîŒË*˜e§~k£Ãp»¿¼á >ØF0ˆÀx?Ø®K®r ³ï,æ@Ä#Ž€C|¼Ç¥`ÆŠ ýî`W8ÀÁD0ÑÍ 9è­S¨X©¤- «A jP'¦¤í2ÙnƒfÈCÿQÎ]•åpŸ²T}ð%dS—/Ÿåt\«ì!“l1Q¶CáCÆø'‚=$Ž $ð´>&_`DdäÒˆF5¸½‡‹ÁP“Ø n“¢À×bÈ¡ÿ«qDÀ0ªìØC •Q,e¬ #–ÒšÁ õµeS–1‡8pá‹jÛBu ƒpÑmÉÍ0ŠQ¤"°s£§Kë¡5 Çk§<3lÏ¢+°lRÌèC¸ÀfK[øî‚ 9Mœ¦Z&8ô\Q;naÅÎñ_ÍbõŠ •\+æÊrp 3¾ŒB„á R¨Dš‚O¯&ÿ„[º½Ê–³qƒëNŠ<üW|oA‹[áM;–ч]FÿÔÃkpqØ0ŒÁriyÜ3ÄÍðÒ6l¬éf÷ ¹á n$;1Ì áÄúðìW"w+Д0|ÈŽl@â9ÿ+ä"8Øq¯¥hõðFðAhÐôqL´w¼NqmgCºòH%ÏÓÀ€BhƒxðÂX–°O‡z+¦úYÜØ¹Ï£î‰Xº°žç¢lŠ<¾²Bv|©ƒz ´`ÉZ>ÕÄÌ! ­äóð-ëƒâ°Ð…w‹å“«üZ¬ð¶fKš ohG8 p…'0pè»2yÑhc ì™`–± o\ãê~ Œÿ8ÿz°÷!„Ù­m7;nA,Á ’À =da §0‡îA¯–¶7-#+…/Ü0yÃÂsv³<äOêrGÒvsÖ8TàG,à†XÐf¡Dü×øu†¡[¼UäÒh†}ÐÓ 2ˆÓË0>[ Ë0X@‡0Z _Ôy€8·4Aåv(O…$¸!+Ø|€wõÒ@X0à…°Aq3Ø[]!2Eøg‘mõ„Ÿs£ÁC@‡6_d ~Ð4o!À +Wðº g$!87#(»E½õ.§J¾×(ç'+Ù;]ÿÀyX€>\ À.ð‚à_€6{0os`Tu/„S8?€Bm€±L«‚j°g~ѤeL!À׊c‘˜W^P ´ts@tðls°LÁ9¦WfÆnØ'WJh{_‡C´†hõ*F£6aàY°cð’4è1 TðV\àM L1Z[SlW5qȶ„m±‚–Š¢ô ǰwPЉ“’¤^€ˆ`[p  À‹ˆP Q1LIQl<ã;’ƒ†õ@Cr³ñS9àÊÐ_´ `Õrÿ† nÐ PqP ÃÄ1p3‘ dÁÿ2gÅw»nv>Ž“¤ Mð~e:hÀ°iðBð§0  #S2î˜Nð¨nà×a—~Ú†eø9ÐL@’n@ )'à /Ð â P„³0ÉØ0ïa‘b‘JÁ§ÂŸ Ç _.Pp1ð²¡`0 0I`D@8È0ŠpSŠLQvÙˆ.}ç ©€€Åæ²–P´0b¦Ðe$˜9 nÉ tõt€Ø¦"+H§•òèXW¡G@²‰ @<àÌÀ· ÑÄ ¤à`ÿb¤ÆQnž€öXDáE^î©,©ˆ¾ .pà°À?pP€. ,f @ ,5 LüEŸ5@ ÉB_¼,¼p^Ú’` f©V"á¥Ðëð`Š'°TPA)ð”¢"&ˆ07Á0œ;#‚õ \eˆEH†šì¡H9b/š$(ò)è I¢%›@™^ÐPÔPU@ÓÁ‹Å Qá0 2 qÃp¦²¦ç1θE[Ùrˆ ³ŒIÑ2ZúÓM` °@^à61qpX€`‰ Ïÿp.0¦?Àp–&/Àn6ªF\dѸÙá$QSQÅhá¹÷ñ ÂhwVE ±ðP£X&ðQÿ6aüà Ćréòyµñ´¢ÄÎËÄŠá$ZT<´¯‘H €bè8:CfGP G¸<egŒÆÌð <€r&8|}` ¹7'#ÌtÌÁ PÌek!¬éš ½ê[¾@ˆ€cíË Ä?¬ÆlœÅSzÍË¿+PtdmqÂ)ÌBÚc¤ÐJЗ útk°ÃÐe¦P ´` Š š:ƒðpÄ8Ä£ËÇp ÙçwÒÕ#jû¼ÿ½·g#›RL½ѽ™« 2 pê ¹xIU€ædÁrc 4{ é€ —A_kcZ¶fKÄìéºlÿ‹áá­=»³ur ài—ð^Ü«u b0 Ã^50Dp378ºvSñM]ú%Ío O°´¿K CéÀ  5ÜUNB™/á¨qãÑÔКà-@8“ I—ûº0ÏÅ5­àÅp“*Ð *͵UJ’w†^Ý¿ó£ Hd+gimáPGPjiñ\‡`›Bu}×róg?°ÃqÃfaà í ÍÍEZ½•› «ÓÅ‚©TQ ?} ˆ^ÚÃ`0 ÕZ”iB ©ezíPÚI°«bËvp a›uOʼnØò(²¬A²¿ÂlÿµPÜEÀ |Ñšh›R ¼@&`GPßÖ¬à Ïœ†ÀÃÅËf9p½`,÷Œ–¬dJûÍÓ»‘"ÛˆÐsI£èÐ gàœÙ ¬` Ý@@™ãìƒà&ð<+ 2@Íh¼,Ü&Ót)H°kQ«ër¡  »Ï`” p öÍeUMf/ðKPl³L8+°4PgÀ4Ì>½œ¤D ‡=Å>ÔLC 3ž¬9—4’ð¹h-À5¦dZj-Q EþSkκñžäE dFf-§ ŸÊ" Püµ ‡ ž@E5ÿÐMàÀ9;!~2 É‚ ENŸ±À-À,ª`OŽøä ×}~ëâã9Z J æP ’€ã:.N%;°)/`?|•Ȱ-Ð ÕÐ4¬B›!`9pßJåXÁæÐ I@DǦOE0 ƒðcNAµð¨Ï¶qóa B ØäЋɉQìÿ-(&£pð~÷Ñ(¥ýPö$ÃK'f¤à 5о;|ßþV4ðºƒÝÃ!¡>ê‰q ­Ñc«Á>& ÖÝ«Ã)Õ±ÀÊ<@¸±€ 8 @ÒÆ<÷ H¬Ù‘QÇž6Í> Kã 2¬?„ÿõ™qâ9@ó%à Ùg—;X 6T÷ ÿÊQ>å*/¨-Ñò/ó=ÀaŸYO… 72`:g4>>?/í w%ïäè^Û¢ÁðàðHït¯Oyi:;c µS/²ÀñOðpˆwcyj{Éþ+ѹ¬£!Û= ‘× šÍ öŸÐ2›à¾rî€>8ð£Sy}s$¼÷†áa‚úô4ŽáCˆKI`e0œ„RF䨑a³bê ª+F‹d³‘<~Ô“ áÇd/^Ô(†RšEõúØ1` Ÿ<Û ü·ð¡Ñ†=²’0Š«Q5*¥úðY±$‹ùj‡õ™:dùTÏ~Ü)ÿCÍ9çœt=‡(Ac3´”S“NON% S(6MœŸ”Q&71FŽ”OS SS8KL½” 4 SÅ !HK2RŸQ¯ ÔÕS#DK0L‘žNP9+ãäBNéë’N?=,óäEfpóöÉE ÿÈÅPâÌ "<^œHHîI»(ˆ8ñ4„bÅ‹C9 2.9^!…ÈÔ1)B…‡A\Ù¹Ò%Ìb@D#¡"Ï':}6áD€ðÔØrå SD!Dh'@TRu2„R*ÀŠp:%­Îža]r–ä” i«î$‚”çÊ [?| !ÕoÜoH ÂX…Ô¸AM*ÊNÆp#?«ñí^Q§8œôÔgžSØ9êøÌôÅ.E¶#+Ú¡Õ•“c å’ôJ²;wtGéa !ù,ÔŸ"‡777PPe]Yg}^Oa^ml\mtp{›¼»p+½x=•mZvf¬u{·x{¹qtÍy2Ðz=ëëà{:ÂTSÅZZÏ[_ÓY[ØWWÛ\]Ø^aÅt@Ñi[ÜfSÚl]×qOÚ|MÑ}PÁiiÉ`eÆmvÃrdËwiËpyÞaaÝ|{à}Kâccá}hâ}±yÚ€ªƒ_£dÜ€)݈=ìó„å…*ê‡+ê9éŠ6ò†"õˆ%óŽ2ŃJÌEÈ‹XÒŠJÛ‘SÉ–jÔxØœdÞŸ|Ñ¢vÒ¤{î˜Ká“RæšTì—Uí›TíZó–Eãfä€ñ [æ `ä£ië¡cè£hæªuï¬qò¤cù¨dú±t”‘“™—š›š¥œ“«ž°£¢¬­«¬¦¦±°¥£µ§±¹´µ»»¼¼Ì܆†ÆŒŒÐŒ…ÔŒ‹ß–‡ß••ܘ—ÝŸŸÌªŒÕ¬ˆÛ¨€Ü³ŽÃ¢¢Î¨§Î³³Ì¾²Ü»¤Ò¿±å€äŒê‡‡í‰‰ä››ï•”å¡Ÿî´€à³”ä½šê½—ï»Ÿã¢¡à¬®í¹¡â¶»å½½í»»ñ¦¦ó¬¬ñ½¿ÓÀ±ÞË»ð–öÁ›æÂ£àŬëǨàȵâȸêηéθæÐºíÔ½òàöůñÊ¥÷Ë©ùÅ ñÀ¿óϹ÷ЪûÔ®ðаðÔ½üÓ²üÝ¿ÄÄÄÍËËÁÉÙßÒÆÔÔÔÛÛÛåÃÀàÏÍéÉÊçÍÑæÔÃèÙÊçÔÔäÜÕäÞÛôÄÃóÏÏðÐÐùÛÛýãÍýëÚâââëëëïïððîìûåæòðîþóêóóóýööþùôþþþÿÿüúÉÇC{\xðph Ãd!²Qu&Y›ªì°!B•G¿€½ùŠ…›;‰Ät$‡#&K¡ÁB²ÉŠÌ¸q# –L0e&Ó¡B28—H°Á”‡¥˜5`xpi²%5lð°ÑCPSÅd²ÀРªÕ)8šl}"åS)TS\(  îÙ%;l`Áu«”–°É6p`¶.N*lhè·D©# ¾ªãc-¾’ý‚ñ&äÉW¬âTj 2c¿p½RU5€U™Jœ|J•دE«xåÚK.1|СT+¢í(pXãTõŪ˜!B. ŒˆšŠ:¸ ÀK$!U,ÿÿ’il‘ 5É(0¦ RZ2È ú#K(,k€üà°€÷d ˜P‚ Œä DÀðáJ¬Ð‚ÈPð¶äÈ1¨íHL¸ð.4$0€f„ü’‹¼Ø¦ 1¤€"Ê.ÂHBÇe¼’È$« Ì‹1Ž—L/¥„âÉ(§|Bˆ•tbˆ"³äÒȆ¨“L1[d1H`ÎĘ' Ð‡ 0"R2Èl &°ÄÒ !tœÁÊ#Ž2ŒLi9DFôŠP¨ƒZHÀØfd2‰J]¡ÉôËHF:äÊ/ÆdJ©–¯¸BÒ¥Œ†d I#¹âi¦“’:Þ@¶yꪩžŠ?ôJª³j+¬¥v:k§!ñ©§¿ÀÚ*0žJ:P­¦–jª¡ÞZl³Ð:{ë¬}c0¶”lªÉjJj¢£N›j@!ù,Õž‡777]Yo\Zqk_bd`naazmk|pm~›¼¼x<…]A‰hW˜y]Ÿu`ž~a­rA¬u{·x{¹qtÁl#Æy3ëá|;ÁSSÁXXÏ[_ÓY[ØWWÛ[YÔi[ÜfR×qOÓ}EÖ~MÙ@Ñ}PÁiiÉ`eÆmvÃrdÝrcÞ}tÞ{zâ~~ƒp…±y©uªŒxÞ‚*Õ€1Ý‚6ëó„å…*ëƒ!íƒ:ò‡%ö‰'óŽ2ωIÚ‘RÜ›_È™pÔ‡`ß›cСuÒ¤{Ú£tê‚Nå‚QäMêAí—Kã•Qæ›Sï˜Vë›Xó–Eæ€jä€~àdé“iñ [æ `ç¤ië¤gã­}î«qð¥dˆƒ˜“–™˜—š˜š¥œ“«ž°¯£¡­«¬³§£³³³¿»¶·¸Å¼Ì܆†Ï““ԋӎݕݔ”ܘ—ÝŸŸË©Ì®‘Ǧ¦Å¬¬Í§¦Æ´ªÍ»¬À½½Ð¹¤ä‚à–ˆäœœæ¥î´€â¸“軖䡠ମⶻ潽ò½£È¸ÃØÄ¶îÁ—÷ÄšãÈ®è¢ëǨçÍ·çÏ»êηôÅ¡öůô˧ùÅ øÌªñÀ¿÷ЪûÔ®óÓ¼ÄÄÃÍËËÒÍÎÐÏÒÛÛÛçÍÑàÖÎæßØñÑÑëáØýåÏäääíèèñïíòðîþþþÿñ°XñáC @D¤À#H”CQ›Låñð ‹‚Šº4Æ”©4væ¨Aâ’I“lä˜ `êN!<†hÕ!ƒ),}İ‘K£‡0ÜÄij‰…5t(r¸aÂP¢Kh䨱ƒO– ž¥¢dª“)²;–å•5°x2!AkÙ¢4‰ÚPÂíÛ*Dµ934Q£øÙtéfM~»ˆi¡‚’&„Wšºä…h˜=ú$rSØT.+tÙD¤ #Q+â˜`@ .8Aõ°â 520ÚÔ0€ô°XäH Þx„£Å P¤4)òdÏ ¼qÁÅ—?Y˜@2Ñ# ‰ -2Á±%A)J’&}"uÈPB£ÂdÆT¨J‘ó„áƒ)ìƒ!é†+é†6ó†!ð†+õˆ%òŠ+ñ2ó;ò‘:È…FΈHÎUÒ†BÓŒJÚGÊqÔ‡`ÔŒmÙŒ`׆zÜ‚}Ùˆ}ßžaÓ’vÑ£{äŒ@í„OëŠEìƒXì—JïœUèž_ó•Dò˜Jð˜SñžYèkæƒ|ì•jêžaë›wñ [ï£aï¬qî²~ð¥dð§ið¨k‡•”„ˆŸœ˜“–”´’Œ¤¢·¯…–¥–’£ššª—’½ƒŽ¿—˜«ž°²™©»¬ž¨¦²­§¸´¨¦²¯±¸¯¸­½Î½¾Ë¼ÊØÂ††Â‹É‹ƒÊŽ•ÇŸÊœÖ‹ÒŒÛ†‰Õ˜Ø•”ÝœœÆ˜¢Õž¢É¥ŽÑ¯‘Õ²‘Ç¢¡Ë¯°Ñ¼¼ß½¿ä€åŒã•Œä““曓åì©„íµ‚á»›ì¼‘ì¾˜å£¢á­¯à·²â¶»å½½ð¼ ò¸·É¼ÇÕŸëÁœöÅ›äɯêãëǨêÌ´êϹëÓ¾öƦñÀ¿ùÒ¬óÓ¼ÆÆÆÈÆÆÍËËÙÁÃÓÑÏÐÐÐÞØÓÜÛÜæÀÀåËÌçÍÑåÖ×çÝÕåÝÛóÏÏõ××åßàäàÛýåÏäääòííòðîþþþÿe)8¡äR¬@9D)ܾ‡Òê1Äß²7j-«bÅѤiÓ®EÜG$ þÑQ5¯ *WÉœÑHˆ-þøÔGY'S Áƒ— ™È‡F~Dð@çŸNžDá3ÌìRÏUÓäŒ  „àAF+Ô4cŠPÆs3™4’œÁÆ ñC2aÅ4EEâH!8#‡bp"Œ!.„ 2ÉTQ¥Ó`Ò$Íì<³]|Ï!lx¢@6¼fSŽ=ý˜CN9÷ôÓM7±hÃ9ݨ#K6÷À†’>Â’sÎ9ä|³7ä`c<!ù,ɉ%‡777gcv|w‹zzš~†Žyƒ¥p±u²|•¶y–¹~š¼‘>>žBC“\g˜cmœ~§FI¢LM¤]\©X^¶HHºTP¾Z\«|\¿jE¹}G§py²jj¼hl¶lvµlz½ny½u¼zrír<ÎYLÁTTÀ^^ÏXPÐ]NÔVUÑWXÔZ[Ý^PÛ[\×^aØ^aÇeHÝhOÒc\ÝeRÜa\ÝhRÚm^×qOÖ~LÑ}PÙsQÀcbÁdkÅhoÌ`dËelËjmÂktÅoxÉmtÂssÄpzËt{Ïy~ÔacÒchÝabÜfhÜhgÝjkÔoqÞrcÓpuÖ{}ÛrrÞzuÙz|ä^Vâ\[çiJãaSâc]åiTèlVâtSåv^ésWê|Vâcbãjdãllçtfäqrä}sä||Šx„€~›|’§n€«{¡“µuƒÆxÊ~†Õ~‚¯ŒÕ6õ…ä„*è‡*à†2ïˆ0ó‰&óŽ2ò’<ÎU׆BЊIÛƒCÔ‡`ÔŒmÜŽaØzÒ£vÒ¤{å„Vë€\î˜Kï›Zò•Cñ›OðœTðžYå‚}àŠìŸaêtë›wð [ë bî­sî±|ð¤dð«o•ŠŠ”…žž€–Ÿœž–•™¹”‹¤˜™ªŸž³Ž¢¸ž§¹¢„™§ŒŸ®„•¥”•§˜˜·ƒ²Œ˜·’ž²™©¸©œ®§¸³®º¾¾¾–«Âž¯Ä±Ç¢²Ç ´É®¶Æ®¾Ï·ÄѺÇÔ½ÉÕÆ‰Ê‚†ÈŠÊŒ“Êœ‚Á˜˜Õ€ÕŒÜƒƒÜ†‰ÜŒÙŽ’ØšÓš›Þ••ۜș¢ÖŸ£Å¡”¯ŸÔ±‘Å £Ï©¨Ç½½ß¬®ß½¿ä‚ä‹‹ãå–ä™™ç¯†íµ„í¹‹ì¼å¢¢ä««ã´²å½½Æ»ÆÕóØÄµÚÄ¿ëÁœëŦêɬê˲éθéлÅÄÄÈÅÅÏÏÏÝÂÅÕÕÕØÑÒÞØÓÝÜÝÝßáåÂÂäÈÉéÉÇèÙËåÖ×çÞ×åÜÚåàÛäääþþþÿ=¹i®_¿}Öª%T¸Ï Ã‡C¨ ‚UkZ51Tx½‘2’9}öÊ„Àß² b¬´ðác–/’,ñ Ù¯SQþü©òТ…”BXZ8Ú&‰M°Øù à/•Ša¼diñ†Ÿ¤¢Û>DªÓ]+²hÉâƒW¿Ey®Æœ"Í'¼ú †„K ǶåÑcn%=‰*EáAn\¦QR°à"IQžJýð1Ê“v †û£Ò¢Ë¶m‹¶õ«Ä(‘¤tA~˜È¬¹oû,I2·È´Ñ+v°ÖPD` 2K‰%ÕbEYìÁ.Ô°Æ&PÑÑ!ŒŒÈCw¸€„P¡ÄC„Ø‘ :ha ? á%G$a"€`„;ðÑÖYa… 2!ù,Ň777jTaly“w}‡y|œ}–·z–¹Œ;;»S7›INœQWšVX¡EE¤JJ¤ZY­V[¸PO»SR¥Zb¹]`£jw³bg¸fp¸ss¿tÊNJÂSGÈPOÄUUÇ__ÊRSÎXVÉ[ZÓYDÕ]Jß_FÞ\MÒTSÜWTÞZUÛ[\Ù]`ÝaOÛkOÒc\ÝcSÝf\ØjQÖ{PÊ`fÎekÊhlÀgpÃjsÈipÌptÊt|Óbe×ikÞ``ÞikÙor×wvÑsxÛutÙvzÜ|{á_JáVSã\Qã[ZæcEãbTãbZçiVâhYávQèw_ê{UãdbäjfämlçugåpoãrräzzŠq‚Šš£v‡¯yˆ¨~‘³Ã}…É}„ЊIÏ€Ûªyç˜Lñ›Oä€àŠêtê•|ñ [ï¬qî°zñ¥eð©mð¬p–…˜„‘ƒš™›Ÿ†‹©š ¯…•£•–¢˜™²€¶†”¨Ž¡°£¾¥ª½® ¯Ã¡²Ç®½Ï½ÉÕŒʂ‰ÊŒ„Õ•܆ШšÔ’’Ñœ•Ôœ›ÛŸŸÃ—¡ÓŸ¡ÞŸ¡Õ²Ã££Ã¤¬È¥¦Ü¡¡Ü±±ä‚‚äˆˆç–Œé›„ã“”å—˜æ’æ››îµƒíºŽé±™í¿–墢䬬山㻻ìÁœêâêηêϸéѼÄÄÄÍËÒÜÍÎÓÓÔÜÖÖÛÛÛÞàâãÀÀèÇÅçÕÆåÖֿרçÝÔåÚÚåáÝäããÿþþÿ¥X… ,2  šB³æS'4hPáêäQ.V‘~J•*ŒG‰ “ŠÒ0¹rI2ª §ˆO¡á„KÕ ¹äšäª`)4idÕRƒ¦®Y ä ÓUÏ[l BLs —–2Íå×­RlÚªŠ‹Ë‹Ò6íY°mÁ;gµªåº %J™f¼š5­_ІܥTÉÖÑ,äþÍu¨K— SÌòÓçâÅ‚<¬HòW©´Øš2e )Êp*À*4SW£ãèAÐ@ Ô^na3W*;[Háâ… A¸µ"”Rœì0ú £ ‹†8òb!ƒ öÔÙaëCŠFš 3£F…WBtp=—†GŽ8áÄIHs\@à ’R"¡ P„rKVTQÅyAˆÀD0ž„%¸ä¦ "„À %p( •à²Å=à ‚‰Iq EaÄ‚ ⢅ p¸AGPa„HQÄ&JaÉ%ǯl"‰g< *è Ã I,I%„¡Y š³b@BøBLDAÉ,›Üµ‰-¢È = © ƒØåV[¡XÁƒ‰UÁÄ|Ð!ù,¾{‡777_XlQcyVilct_j…_~§en‰lo‹nq`wez”fz˜rirv|rrt•~y—|zši¤Z®|‰™oˆ§nµrˆ¢p‹«u³z’­u‘´”µz–¹~™»…h~arku“s~§RW­RW®Xa¬ix¼cm¹hh¶nv»ht¼my·r}¼p{Þ[WÝ[[Ñ^cÙ]`ÞhOßbPÃaiÁmlÌ`dÎejÈhoÅltÅwÍquÌrzÓbeÔjlÞ``ØeißhfÜjkÑkpÒuyÖyzÛutØwzÙxwÛz{æ^MãWTäZRã[YçaKèeEècHäbRãe[çiVãvTésWãcbåhcämlåpoärräxwã||†xŽq‹†{–ˆ~›‘l†q‡‘rŠŸs†œqˆš{¥m€£p„®w‡¬yЍ~‘µt‚ɇ۪zå„Vç˜Lñ [ï¬qî°zñ¥eð©mð¬pƒˆ—…ƒš–ž—™ž˜š‚‘¯‚”´†˜·‚½—•ª”©£¹£•£…𝅕µŒ¨Ž¡¢ž¡¦˜¬¤¢¢¦¥¯ ©´§²¿²²³°·¿¸±½¿¿¿–«Â™®Æ°Å¦®Á«·Äª¹É±¹É¶Á͸ÂθÅÒ½ÈÔ΀‡ÈŠÓ‹‹Ú‚݇‹Üˆ‡ÛЋӓ”Ò“™Ú’”ÜššÂ—¡Ã˜£Õ²Í««Ë«³Þ£¢Ý©©×²²Ô¸»Þ²²ä‚䋊åä’’å—˜ç“åššî¶„íºŽê²ší¿–å¢¢ã­®å°°ä¼¼íÁëáêÉ­êηêϸêÑ½ÆÆÆÃÂÍÉÉÉÂÊÒÈÌÒÒÏÏÜÄÄÞÏÑÑÑÑÜÜÜäÂÂäÊÊåÏÐçÕÆçÙÍãÒÓçÝÔãÜÜåáÞäääþþþÿ]ò´íH­nµ`¡†pW­j#v«Ð¡ƒ7X£¶!ä²°áC‰1\âàÍ›*UÔ„)ÜUMX-[A~hæÈ[o©–xá¢E —Zµ‚ìbÖonÆBâe§/Ö$b3f Û†D&5YŠ5[µ†E,6§ìœhÝ mZ7jµ€!<6Çί^s(!±v«2J®”œR¦ ŽœV„[u£/ÛR^Ävã5'Bd‚À¹óÍTªÆÎ¡sM[8æ|“–ÛnÜî˜ó©S­¶–,)+"·bwðë6íÒÎr7R6 €ŠSC#·éíQŸ­ ô0[. ¹>qÿºí-›MZ±Dò6°`ky@#› ùIZmG"K›S‹K„ò<¤pB &„€èyóE¼°ƒOÄ€5,‚¢HSR&hrŠl¼C HÄ1EÒ(^”¡@$ðÁ@!ÛH1`‘ÅT,1£ !a<ÃŒ$TÒ P‚¨CTTA…,Œ‘† )@°Ê6±˜â‚!› ÒkÈVÐP 2Ø`Ã-JF¡ƒnäðÃN¼ƒÔpá.¢³D;¸È!Xñ N0áDO„šM-¹t£L6;ü`Ä+ŒìPS0gAEO8….[tó.§Œ²ƒ;uà \@…X`1E¾ÓÍ6¸Ô¢Äl(’,/b…´Öʬ0UãJ4‚´=ÌP$¢NÔÚ„¸bÂJ*·Dº ;ì¡"ÕêDŸfˆE@!ù,¼u‡777Ln”PjŽYk‹]y™Ow¤Sz¦U~«ft˜by–e|šiv›n|”}{…p|zš^‚ªj‚Ÿ}ƒr‚œ}„o†¡k‰«u‡¨s‹¦r¬zˆ«q³u‘³s“¸z–¹}š»ƒZe‰uu”ss—w”}}žq~¥]\ª^]½W\¼z\®jy³ed½cn¼hs¼my»t¼~~Ó^bÂajÌ`dÉciÈhoÀfpÄkrÈnvËqtÜcbÙeißhfÝjjÜnq×wvÓuz×x{ÝsrØwzÜy{çm[ãdbälkãssã}}€t…z–~‘‰~›‘l†™n†’sŒœqˆ£l€£pƒ¥x‹©{Œ •¶tÆw€Åx€ó/ð„9ñšNð›VðžXè‚lä€è„pï©nî¡r‹ˆˆžƒ„’„œ‡Œª†˜¬ˆ™­“³€™µ‚œ¼Šž´–‡ –‰¡Ÿ–«†¡¿Œ¡·œ§³¯‡‡¤‚– Œ™¥––¤›™©šš¹…’¶ˆº››³œ«¢¢¢¨¨¨³³³»»¼’¨Äš¯Çœ±É¢´É«¶Â®½Î³¼Æ²»Ê½ºÇ¸ÁνÈÔψɗք…֌ۄ‡Ý‡‹ÛŠŠÝÔ’‘Ñ“™ÛŸŸÄ˜¢Á¬šÅ£¤Ð¬«Ü­­Ó²²Üµ´Ý¼¼äã䚚峈춇墢⯯䱱彽ã˵ÄÄÄÏÏÏÁÉÑÏÐÒÈÐØÕÕÕÖØÚÜÕÕÜÜÜÝßâåÂÂåÉÊåÏÐåרåßßäããþþþÿ·”ÒEP×*‚¦BÕ"X+”©.ªfíÒ5ë ®„ u545f«]»f "˜*”¨ZµD…JõEÕª]v­’uj”’›I(¹å…ÔK11Q&'’$¡B‘àóè®N P!92ʪPXØ kÌY³¦f¥"®]Îòqd,Ž%ЦIiǨZW]`X wî.J>’„ Åà€„¾~+ù؉À_¯NA‚„¤$Õ ¸€žM%þò¤ÄÔ* `îôÇ©@6±„¨#DÀ ç“'P¢Â¤úp!î,PpÊÔÀ¦t•ápaÁ‚&1êìÞ•‚F’èÒ0ÎJĦA‡@rºsFËÊ š6úà&‘‚'ú¸úÇ!|ùÌÑŠ&èàI, ôgJj4ÒˆÌñ gè‰í­”Çk\ALlÐÆVà€CEìA‹dqà 5ІâÇ%¼Á!b±B£ ñhDK r FAºD¢ÄŒ³èòÊ…è “E@à„$=ð…]™å–`(áÂSÌЙ䂊(0Ø¡È%dàÊ2Ì0ƒ/LâˆAaƒ X!ù,¼s‡777OYoV]uqmu}buLn”Rm’_s•]y™Ow¤Sz¦U~«ft˜e|šiv›n|”}{…_‚«j‚Ÿ}„}Œm…¢lŽ´u‡¨v‘¯s“¸y‘´y–¹~š¼“II…ai•l|“s~—w¤KK®WZ¯]]»ZX»^c¼z\·nm½hsÍ_cÁkkÎceÅlpÍrvÒbfÔllÜcbÛhgÝllÒutÓuyÒ}}ÜwwÚxwØzyâhgämkãssâ}|€tµ~‹ÆxòŒ/ñšNð›VðžXã€ê¡cî¨mŒ‰‰‘ƒ›˜‡ž”’—™––›››ˆ™­‚“±¼”‡ –‰¢ž‹ ›™®†¡¿¢¸¤——¥™™©šš´¶ˆ³¬ª §¥°½±±±´²¼¿¿¿‡¢À’¨Ä®½Î¾ÉÕÁ††×„†ÓŽŽÛ†„Û‡ŠÜ‹ŠÕ“’Ü™˜Â¬šÂ¤¤Í««Ñª©Ý««Ó±±Ö»»ÜµµÝ»ºä€€äŒä™™å±ƒå³ˆå££á¯¯å²²å¾¾ßÉµáÆ°ÃÃÃÎËÍÀÊÖÆÏÙÉÑÙÐÎÎÞÇÆÑÑÑÜÜÜÛÝàÞàâåÂÂäÎÏåÏÐäääêááþþþÿ… Y4)Ò¢A‘öÁÃOŸHBŽš4i‘˜„€ðäqä(@Bö š`Ò E‘:JèÈáA#”\´¨‘•‘ZöSfE;>6vüX$POŸspøðу‡HDøõ醯=Šà2Õ'zýÁ‚…IÒª-©æNB=(@«ví¤D(õ¸ø‘€nŸ)ÖñcDhú›އ&bø0ò`Á’“¼`ñY‚E‹>1P€x’$h±CçN#€ÈH80i@'ˆ²È”¤(§ÃAL“Ô“À Š“£MPnè˜çŒŠtâòˆÃ…(U€b©Q#“$ZÐèñ0‰6PI3'Œ'VÀ`‰Â3…ŒÁÁŒD¡Ä ht!EQðFBfpp…!ˆH$LáƒJx[àáH#nøŸVhpÅ!Q,aà 2H@!ù,»q‡777QYo^_zpf~Kn–Jp›Yf…XuœS{§`m‚ft•ax–ly˜xvzpŠ||ƒpr’t~žg}¢^‚ª|‚jŒ²t“¸x’³z–¹~š¼œXX“cl’{r¡LL¤QPºRQ²`_¶uX qz·dn¾hlÁ^^Ï]\ÌflÃktÈssÌ~~ÔbgÒklÜedÝikÒvuÔvzÚvuÚxwÜ|{ãlkãssâ}}n‡‚}‡‚|ˆ”u‹©{Œ´޹~‹ÆxŸ‰xé‡-ëˆ-ìŒ5õ‡"ò‹-ð†9óŒ0ÌVÏ“_Û‹BÛ‘NÞ|ÈšsÉxÝmé‘Aé•Kæ”Sè–Sè™Uñ–Hä€ç£jí¤fï¨mŒ‰‰ŸŠŒœ’Œ“’’ž—˜ˆš®†˜·–‡ •‰¢ŸŒ¡›±„ ¿¢¸—©½žª¸¯‡‡­‡”£››©ššµƒ¿žŸ´ž­¥¤¤¨¨¨ ªµ¦±¾²¦¯µµµ¿¿¿‡¢À‘§Ã¯¾Ï´ÂпÉÖÕÝ…„Û‡‰ÜŠŠÓ’’Ü••ÜíšÄ°ŸÖª…ƪªÍ«¬Ô««Ü¯®Öµ´ä€äŒåššì¸Šå££ä¯¯ä±±å¾¾ÄÄÄÃÁÌÈÆÌÁËÖÆÏÙÎÑÔÑÏÏÜÁÁÝÕÎÜÜÜÝßâåÂÂéÏÏåÏÐäääþþþÿ•`Ù$*§P“B)\ÈÊB¢Dqâ”p¡¤G$)Ì"$‰¨í,|´¨ä¢G¡A" ÈI%-bäÉ£E’ªiÒÒ¥DN¬xRèéd‘(ƒzúä$èÆÐPE¹2I©OM4hÚÄy„ !«>ɸa£Æ PF¦8ëó‹6Jêè„mÛ@ž"-ªà@AÏ>#FT¤°‘ZÀΤ.@ÕèI EÉñâ3‰xõ¦ ± "°IÔâmÜE8µ…Ã:k\~jAÖ,( 0ñ AŽÔ¢VHÚ*I "H8'SDD‡F4 Äj&ÕnY³ÁC7ÜÍd)O0‹¬D2H… jÞ”Ä%ƒ…2dø`ÅX}TÒF /À…ÒZ\AŒÁ$”dÀ ,°`JLTðÅ–Ü‘Á”F ~¼!Æ8¡QÁ í‘—dÐÃ"Ci ÆI!ù,¹m‡777:Tq_WlNc{nitimzzu~VpŽQx¤R{©_~§bnŠbn‘gw”{q‹pu—uz›|qi¥}ƒv‰Ÿ}ƒ~žgˆ¯hƒªnˆ¨b‡±lµy€¢t³s‘²t“¸y“´z—º~š¼¾y9žV`“ffŸku™zk¥ss²ai¹hgÏsÍv&Îw(Æ|7Ër0Ì=ç8Ä~FÀ}^ÌflÌsrÔcfÖklÜiiÓzzÜvvÚxwÞ{zâedälkâpoässã}}Šjƒ•vŒª{¹~‹ˆ‚¬€X«‘y°nµ’rì‚ëƒ$é=ôˆ%õŠ*ñ:È€@̈IÊŽ\ÕˆBß„EØMÛ‘NÈœuà•QìYðŸ[çƒlä€í ]æ¥lí®xŒ‰‰‚ˆ‘œ’Œ“’›‡’ ‡™¸ŸŒ¡˜œ ›±… ¿ž ¢“¥¸¤ŽŽ­‡” “‡£››©››¹‚¹†’»‘‘¯­­¦§´¬²¹¿¿¿’¨Ä𝯬¶Â®¼Ë±¸ÀµÃÑ̇ˆÃˆÕÝ——ÜÄ££Î¬­Â¾¾Ô¥¥Ñ¶¶Ðµ¸ä䌋䜜罚䢢㫫䰰彽èŦçлÅÅÅÄÂÍÉÆÆÏÍÍÃÌ×ÎÌÓÖÏÉÜÁÁÒÒÒÜÛÛåÂÂåÈÈæØÌåÒÒåÜÜêØØäääþþþÿ“,ùÂ…R©ƒ¥*ZÔá¢EX¦\q„ð`¥QŒEÕhÑ£Ip̘*å a¥RŸ>d4jË$¦Ly*™ð (H"*UE Sd–1в%†X¬3yùtðÓ“&-ÞÂ%$„.J(LXèÅÊ©Zµaœ¸ŒuÐ!A~t‘ãj¬1câðñ#ˆ”ðt9N!nêÜðÑ”… €šÂëJ˜rø KAÉŒ˜ ÇS'O@v—††©.ðI³”T"H?XƒêHE ü”ŽnÊFÈ!HÒ AE'îÄD¨‡È?2dÀ @‡90p@ +è ÄaŒŒÉzl°@´aÇ%:äÐW]T¢añ††‡T¸ƒ!"™ô!ÂEbH#^¬”#K,A†¬¡†‹ðp–&tàCg[h… ˆ Bh‰%"Qà 7!ù,¸l‡777JSdWXpS^{XjnWfxroFe‰T}«_~§hyhuškx—xm‡|rŒxŠpu—vxš|qa¡i¥v x¡…Ž|–|Ššhƒ«b‡±h‰°t‹¬t³s‘²y•´z–¹~š¼¯q8ˆXB“YY†k^—fpŸd¤]\¨[_³yA¹x[¯cbµbl¹gg»ihÏrÊo1Ì|5ËooÒjjßiißhÕuuÜwvÝ|{äfdãlkãqpã||Žl†|™–v”…{¯‚Yªy²Œkµ’t΄?Ø„?ë„$ì†(ïƒ8é‹8ó‰*Ç„FˈNÊŒQ×€BØMØ›eæ‘Eæ™UçšXëZðžYé‹kä€å¨sí°{ñ£a•›‡™¸˜œ ¤‡›­‡”§™™¶€‹¹£¤¤¤¥±¿©°¸¼¶³¿¿¿“©Åš®Äœ±Ç ­Ã§´Á®½ÎµÃÑÁ††Á‡ŽÍÒ’’ÜÏ«¬É¯±Î±±Ô¦¦ÛªªÜ±°ä䌋ᕖå䢢娨䱱彽ãÁ¢êÅ¥æÏ»éθÅÅÅÃÌ×ÑÌÌÞÂÂÞÐÅÜÜÜÚÜàåÂÂåÉÉæÙÍåÒÒãÝÝéÑÑäääþþþÿÍĉ„(‹ L1-šä'PÂ(EŽ`Á’(¡B†Z™ò$“"HYúã§Ð¤@” É” H„‹0IòCÓO—+,2hù2&¦J„ª‚„D&;]*´ˆ„G‘òô‰ÐÐ #pÔD• iMÂA4½z0‘rBg¦Eg¤º˜£‡OI ,`) €Ndú4ùz„™J@€& ÒKúà‘•+PÐp;SG…^¹@çÅ ÒbÍ´§ÆŽ-¡ÅD˜„AyP 0à É?ÞlØÐ!A‚e<ÐÀvì@ÓZ#ŒÀˆlp €´!’=øQ ,¢a1††‹ìpƒx,â†m0‡`ÐTˆÔ´V@!ù,¹k‡777ZX`W`xYexn\kzi\xroOsšYqT}«_~¨`mjk‰g|•ivœk|x‹pu˜wy›}r’i¥z€Œhƒ«hˆ«b‡±hбv…§x€¢y‹®u³u’´y•´}™»¯p8‡l^†i}¹^^ gN¯w@¼|B®jj¤»fj¼grÏrÊo1Ì|5À|EÁmlÁirÏtsÝllßhÓssÖxwÜwvÛ{zännâ}}n‡u‘„z––v­u€Œv¦…h¯Žp©x΄?ë„$ì†(é‹8ˈN×€BÕLΆeÍžræšWîžZã€å¤lå¨s‡“™™™‰™ªšš£®ˆ•§»¼„¥žª££¤¼µ°½½½‰¢À“©ÅŸ³È§´Á¬·Â¬»Í¶½Å°¾ÏµÃÑÌŒŒÇŠ’Ò’’ÜÔ««Ü¯®Õ¹¼Ý±±Ý¿¿äåˆˆä—˜ãœœì¹æ¥¥å¨¨á¿¡ä±±ã»»æÂ£àʵéÐ»ÅÆÆÊÅÅÃÌ×ÑÎÎßÂÂÞÐÅÛÛÜ寯åÊÊåÒÒåÝÞéÑÑãããþþþÿ-òó¤ 0gýI4GŽž2…ø<±#PàŸCrê,"2„‘>bÔ¸#F… U\ØPOž Œ T©p‘!9rœœ`@fÊš‹á)"‚gÏ™BF8`ôh¡/!ÇxizôÍ;„þPuZh$I¶:e³ÃH ±Gáä8r@Ï£'OÞò‚g€BtùBE…5\Ädô§ËÑ1fäP2â¤*1dq³&Žž àÀŒáŠ ´ † DfHå”(LVôÀ`…ÌÉ6iéá F‹Ì\P „P$Pàñ@Aˆ7@°AƒÎŽ 4(Pàa‹ \ê@Á"š0Là &©r>ü™¢Â,óå # !ù,·h‡777ioyU}«_~¨ivœo~–ix|u|z…{pu˜wy›}r’yzœ|‚|ƒ“k…£hƒ«kˆ©b‡±jŒ³x‚¤|Ž¢zŠ­x‘®u‘´—³z–¹~š¼¯e"´t8›nG”vg‘{f“|s©~Vº{C¼z\°dc¾hsÏtÈn0Ìr0Ìz1Ðv$ÅkrÉrqË||ÒxbÓ{zß}|ännässã}}„y•„|™nˆ˜xŽ˜“·}‡¼‹˜…{¬‡g¶’sß„.Ò‚9Ø„?ß‹?ô„ë…&ê‡,í‚7ô„$óŒ/‡NʇMΉIÁŒZ×€BÞŒBÙNÜ’OÝ”QŘnΘhÝ€ÞmÒ¤}îƒCç•Së˜RìžZðŸ[äˆhã€ï¦hï¨måªvã­í¬rðªn€€€ƒ‰’…˜˜˜˜Œ›®ƒº“ž©‡ ¾Š ·Š¢½•¢²¬¼¤‡› ƒ½…´š„²‹µ£“¤¤¤¬¬¬ª£°½½½Š¢À’¨ÄŸ±Æ ­Ã ´É°¾Ï¿¾ÊµÃÑÉŒ”Ü€€Ô——Ý››Ä§Í­‘÷­Ä»´Î²²×°°ä€äˆˆåœœä¤¤ãªªâ¿¡å±±ã»»êÀ›ë ãÉ´èιÄÅÅÏÏÏÃÌׯÏÙÊÒÚÑËËÝÀÃÞÑÆÜÒÉÑÑÑ×ÛßÜÜÜ䯯åÊÊåÒÒãÜÝåâßãããÿÿþÿU] C¦Î†N«Vqâà&aÂ2]¸p™âä'R}8ÄIˆJR2¢XYj2‡ƒI>šV™rä¨ ¦M¬X¡ÒæM UšR=rDIŠ8¬°šTÊ¡¦SŽ ­j²D+BKʼnTi¢)%žBe%§Nž«B!ÒºUjÊ•Ž2‰aB¶ìŽ’ˆ@ùÐv«¦©«„P·ìÔ ?Øôõ©EZl³‘"FX< J1Mfðì1dC‰‘AY-³5¦M‡l€9Ò"&ˆ4AäÙ4ªT¥/\¶Taå¡ÄQ¤¬ú$ ’-^b¨XKžØ¬`Ìøâ( ’'!Œ¨£iTLF/™ƒ¢”dȃ Èp ž2R%Ìâ-& ˜AÍ‹Bò­bgq… 7TàÇðð$ã9‚ƒ„¸€x"ˆ;Ô`K¦È±@90@ ôà€6Ô`Ü*H A  8` $Žì´Jp2HÀ€€¤ä Ž!ù,³f‡777iozprxf~›jyžuw}{…Z‚¯q‚š|‚’n¶yƒ¥{¦zŒ¯u”¸|•²z—º}š¼j?°_½j­r?½q-ž~n“|s°rH½z\½`c¾hsµuqÏrÃo Äq'Ïw(É:Úz"Ús:Ý|4ß{9áx/å}5ëw5ï5è8ñ,ÏlVÍyRÞlXÒsMÅkrÚ|{ålRço_ëxAässå||€z†…y–‚|š™”²v˜…{¶€N²p·“sÛ†:èƒ(ìˆ-åˆ3é‡6ô„$ð„8ñ;Å‚DʆGĉPÂŒ[ÓŠKß„EÞ”QÈ”dËœqÝ€ÞmÝcÑ£}îƒCéˆZè”Jç•SçšWê›WížZð™PðžZæƒké‹kãžbêgð¡_æ£jï¤fíªoä­ì«rƒ‰’œŽƒš‘‰“““‰•¤ƒž¾Š ·Œ£¼Ÿ¨³¬¼¡‘„§—ˆ§œ‘»€Š·›ƒ·žŠ« –££¢¯¯¯¤«´±µºººº‡¢ÀŠ¢À‘¨Äš¯ÇŸ°Æž²È¢µÊ®¶À­¼Î°¾ÏµÃѺÇÔÉŒ”Õ‘‘Ʈʨ–ŰŸ×¬„Õ¶›Â±¡Ç·ªÃ¹¯Ê¼½Ð¬¦Ü¸·ä€ä‰‰å峈壣娨山潽À¿ËàÄ­ÅÅÅËËÌÄÍ×ÅÎØËÓÛÞÎÀÝÒÈÓÓÓ×ÛßÝÐÐÜÜÜÛÝá䯯åÊÊåÓÓåÝÞäääéééÿÿþÿkÜx5«`AS$2$!Â!ƒ³VÐÀTkV«‚†"(*¨(Bˆ+T\ªUKT™3x ˜*X*ˆ6R<ª .PšÄ9µJP„9cyR‘ÂQ-5S•qB'‚Ó@£f½Ê”©…‘JG‘ÖBµEJœ@‰f’¥)Ó§$Y eÕŠ†ÄQ°2m𕆋µZQ],Wî,2UàÕÚjïØ²Ÿ¾L"0˜ðŨS3™‰" ±ã¨³„~©2 k­$IªÂ\ «>Gúl‡R›=FCtÑCÍZ~öhå3ŠT+Òbp0@ršô´Rõ¸ ¨L)Jh¨E¡ÂIvÒRÅ·`§L'Pˆ¯!‚‰ Èkùë=Œ#~ˆ!2äC$Ñë1?÷°F “.\¤!DÔ_²|² ¸±„^„ &8asYRU†DG ñ9dDÈõÊ'N½1ÆB(Ѐ$ðF!‹Ì2C& ‚ˆ+›\áƒAh±A<!;ÊÑ,žL¡€iP!ƒ Hw¨øÉ)Ae²ŒÈМ <Ü€U!ù,¯b‡777SXahio|riz|‰w}‹že‰²|•²z—º}š¼†Y/h8‡dC„jRŸoš}w­tC³P¼df¾bh´frµuqÅlÊf,Êj)Çk?Íz2Ôt.×y#Öw>Õ3ázé{#ìz/áw<ç{0à{9èv0ñ~!ð})È^NÅfQÆtLÊ}AÏzSÖo@ßlXÑrLÅdeÉh`ÒnjÞmfÔutØètKâueæxfƒ|‰³w‚˜€w¯‚Z¬‹n¯‹s²ˆa²pÉ€<у;Ù…5߈8óƒä#ã‚,ë„%é‚,î‰.ä€6æ„?åˆ3ìŒ5òƒ"öˆ"ò‹-ð…9ô0ò“?Ç„EÉ„DˇM͈IÅŠRËZɃRІBÒŒKßGÙ‘OÝ”RÈ™nËœqÝ‹}Õ–aà…Eé@é’EçšWî“UèšWìYñ•DñšNðšSðŸYè„lêŒkð [æ£jë£eî¦jî©nä­î¯xð¥fðªn„œ’›‘‡‰£‰•¤Š˜¨š ‹¢¾¡‘„¥›’«Ÿ•·›ƒ½£Ž­«« ©´¤°¾¬³¼¼¼¼Š¢À‘¨Ä˜®Æ¢µÊ®½Î±¼Ë¸½ÃµÃÑÁ€Ï«‰Á©“ů›È¨ŸÚª€Ò´–Ë··å€åŒ‹æ¯€ç´Ší·ˆîºŽã¸”켓⯯ÙïàÄ­æÈ®èÀ¨é̳èÑ¼ÆÆÆÏÄÄÌÌÍÄÍ×ÅÎØÉÍÒÍÔÛÒÏÌßÎÀÞÌÌÜÑÈÔÔÔ×ÛßÜÖ×ÜÜÜæÂÂåÎÎåÓÃæÞÖäÜÜåàÚäääÿÿþÿY±ºÓFÕ°ƒóêS°Seˆ­â¥°b°^7lÌ FÌ“#W CºªÄˆQ%W:j¨ €Ø.Š ')˜©`RŠˆhÉ æ0Y H’´@ %tî$Öó $–ZRbI ¥KSÕÁƒ(¬ƒ±D)¡ëÒp)üuk1 (2´ó×;À®ÉñB‹Wô&FŠ©„)p|˜è°‚%.˜8Ö2ÃOÂ(@~x‰!  9âÄdOÂ#~F$tD€ FSŒ’  ð‡ %$¡J(Åo°’ÐX@ .±ÅSLq„|(äÈpAWlAGzXQE­$@ XÇrPA¤$TAD"É#B<g@°C‰$!ù,¯`‡777Qd{v_Kiffbgquw}~‡‘e‰²–²z—º}š¼Ÿj8´k%€eM’tZƒwmš}w«tC¬vI¢xQ¹zB¾cf´frÊf,Ëk(Çk?Ä};Íz2á{áw.é{#ìz/âw<ä{0à{9èv0ñ~!ð|*Å\LÀc[ÎkUÊ}AÏzSßlXÓsMÜ{@ÄdgÒnjÝmfÒtsØãuDêuLè{Wæufæxfèzeæyq¸z…¯‚Z®o°rÏ:Ñ„<óƒäƒ,ë„%é‚,ïŠ.ä€6ìŒ5êŒ8óƒ"ò€)õˆ#ó‹,ŃJÊ…M̈KÄŠTÁ‹ZʃSÏ“]Ò‡CÑ‹IÝUÙNÕUÇ™nÈ™nÍrЃvÓ–`ÝœdÙ©~é@ì…Xî“UèšWìžYð•Eò›NðžZåˆi䀿£jé¡dï¦jï©nä­ñ¦fð§hðªnŒ™œ’—šŸ›‘‰‹¦Š˜¨£¼ ƒ¢š“¶š‚¹©›¦£ ª¥ ¤«´±©¡²®ªµ²°¾¸²¿¿¿¡µÊ®½Î¸½Ã¸¿È¹ÂϵÃÑʪů›Õ®ŽÞ®…Ë¿´ß¬¬Ñ°§å¯€å²†â´Œë¶‡í·ˆîºŒä¹”켓×Á®çʱéË²ÆÆÆÅÎØÓÒÑÐÖÝßÒÒÛÛÛ寯àÎÎåÔÄàÕËèÔÄæÞÖäÝÝåàÚäääþÿþÿsÜБ&Í(O |TYHæÒª3al !µj¨B|¾TâT‘Ó&5¬N‰ªH²d*H\X±5²$É2P° Àª¡N8sÂã+4Y–4¤À ?®l‰pA‰!’*ZH"DTHUJIÍžž’ˆÈ°U©›+Qðù€€Û·4)=ɳVCY·4%e F+^¥*U:*ƒIËÏŸÐh€„&šÎ¸a4“Õ:JTh$ŠÍ˜'*!˜ ÀÏ 9#UaÚÂj…‚ú-ÅÃÔªR¤"9q2ÅÒ¬6¬A%æ VB!z°He G2)©áBDЉº4pp —"m’øFèA¥Å ;W:`yôi“7AæÜ¹b$„”!A† !S†‰¥ PÇ"1L,‘fp‚ÀÀ @@‚A,Ç*!ù,¯_‡777Z_hYh{~^@smktpqzsp^unt€}†e‰²~•±y–¹}š¼ªi.ŒqY•iC|^~aš}w­sAª~W½aZÊf,Ëk(Çk?Îz*Ã|:Íz2é{#âw<å{1à{9èv0î~1ñ~!ð|*Ä\LÊ}AÐlVÓsMß|AÅdgÇ}qÝmfÑsrØëuLéyFáwTæteæxfçxhèzeäxpá~}¸{…»‡W¼‹^®o©Žw°r¿“j±–؇<óƒäƒ,ë„$é‚,ä€6î5ó!ò€)õˆ%ó‹,ñ:ŃJÉ…HɈNË„SËŒVÓˆCÑ‹KÜ“OЕ\ÙRß”XÅ–mÈ™nÛ›cÕ£vÙ§yÙ©~é@ç‡Yê„Wâ•Sï”UëœZñ•Dò—Hò›NðŸ[ä€àŸfð [å¢gé¡dë¤iä®ñ¦fðªnŒ™Ž‘žƒœ’Œ—“’›‘œ›š‰‹¦Š˜¨‡œºŠ¡½™¤±¨“¶©ž¹©›¦¦¦¤°¾²·½¹µ±¿¿¿Ÿ³È¢µÊ®½Î´»Ä¸½ÃµÃѽÅÑÆ¯œÍ­Ü¬ƒÓ³•Ý««Þº±ä‚䊊枞ãµë¶‡í·ˆì¹‹ä¹”漙켓䱱ÞÈ´äÆ®ëÊ­éË²ÆÆÆÍÅÀÃÌ×ÅÎØÍÔÛÞÓÉ×ÛßÙÕÒÜÜÜäÅÅåÍÍãÓÆãÔÔæÞÖäÜÜåàÚäääþþþÿ'UZÕ Í¤=u¬ùc§ŠP«&Ù˜qŽU¤ø˜ÂqL&Y¬&#c,U²LÔåR(Y²`Q õIˬYªPÂܹ“¬H,fÀ©“çÎ..Ì0TT!QP¡*$ˆF K™݉¨×"0dÕšSVF‡‘ Òa,YU†,‚Y¢È ·Z-aP &ðj境)TB<ˆÀ¸±Ö-s¼&Ö5€Ö›7ìá#ÄË]¦©,ã$§G“G0ÉhÊ"t!õ†à….é=ô‚ ò‚*ô/ò€2óŒ2ó6ŃJÏ…B͉KÂŒ[ˉPÊŽ\ÔˆBÒ‹JÜŒBÜ‘KД\Ý“RÊ”eÍžrÖ£vÛ¨vÙ©~ê‰Zå‘Dê’Aè–Nâ•RçœZë•Sè™VížZò”Añ™LñœRðŸ[èŸbî¡]ð [ä¡fà¡iï¤dê¤ië©oæ©tà«}ë­wñ¥dðªn…‚ƒŠ†‚œ’Œ—“’™”’Œ‹¦™§‡™¸Šœ¸Ž¤½š ·¢“†£•‹©•„§œ’µš‚¥¡žª¢›¶©ž¹©›¤°¾¸« ¼¼¼‰¢À¡µÉ¬ºË¸½ÃµÃѽÇÔÆ†ËŠ‹Ã›•Û—šÜ™˜É¢É¤Å¬—Ѧ€Õ¯Ñ·ŸÝ·•˾²Ü««Ö¾ªãã‰Šä–—äššé¨‰å³‡ë´ƒì·‰í¹Œâ½í½”å®®å±±ÐÆ½ÕɾÝοëÁäÂ¤êÆ¦êɬç¸ãɲê̳èÐ»ÆÆÅÃËÖÆÏÙÎÔÛÛÇÅÜÎÎÞÕÎ×Ûßß×ÑÜÜÜÚÜàÞàâãÄÄåËÌçÕÄåÙÎèÖÆæÕÕåÜÓäÜÚåàÚäääþþþÿUyš BÒ0ŸôØÙræP(fh-[Ƈ…„É&†"q'GÄe ì˜)µ,Õ˜-ûµlcLjÁBš1uÌ“‹G˜1ÓÅi…§ñ’?À@ÂIĈOÍ„CÊ…KÏŒKˉPÖ‰BЊIÜŒBÚNД\Ü’SÜ—^Ê”cÊžwßcØŸlÒ¡rÙ©~æ‘Eé•Ká•RìYðŸ[ä€àžfî \ñ [å¢fí£cí¥iì©nå¨så¯~íªpì°zñ¥e†‚ƒƒŠ’‹†“‘Žœ’Œ—“’™”’Ž‹¦™§„›ºŠœ¸™Ÿ¶¢•‰¤”’¦š·š‚µ ¶©ž¹©›©¨¦¸« ¿¿¿¢µÊ©µÃ¬»ÍÑ„ŠÝ“ŽßŸŠÝ’“ܘ›Æ¤…Æ ‰Ö¬‰Õ²–Ö·œÎ§¦Äº³Æ¸¹Ü¬¬Ü¿¿â‚≊四ᢅ毀䱅崊봄⧧䰰ÜíÝɺëÀœâ¦éŦãijáȲê̳éÑ¼ÆÆÆÄÍØÜÊÊÝÓÉÓÓÓÐÖÝÕÙßÝÖÖÜÜÜÛÝáÞàâäÅÅåÈÉäÔÆâÖÊãÙÏèÖÆæÓÓæÞ×âÞÞéÝÒæáÛãããÿþþÿ-êƒNý|ÙR„I-:¼€ !Ã(S¦þhà²b‰#S¶(@àT¡K5rô¨)¤"NÚÃÇ’>^²44±O=§œz£ĦHNÜXjÄ&§…# c¥5g„ú¨hFT©§aÂH–¬ ¯Ò Å4¶¬)ÄC‚LĈOË„DÊ…KÊ]Ô‚CÖ‰BЊIÚŽLÐŒQÚNÛ’SÌgÉ”dÉvÈŸzÞœeÓ¢qÜ©|åŽ@ëƒVç’Eé–Ká•Qç™Wè™VìYðž\ç‚sï [ñ [å¢fí£dì¥hçªtë­wí°{ñ¥eð§j„†ˆ„…œ““““š”Ž‹¦‡™¸Šœ¸˜žµŽ¡·§˜Ž¤–“¦˜´ŸŒ¾ ‡±¢”¶©ž¹©›¤¢ ª¦£¯¬©¸« ´³³¿¿¿£¶Ë¬»ÍÀžƒÜ‘’Ú—šÜ™˜Öž£Æ¢ˆÓ§•ֱ´µÄºµÜ««Õº£ä≊䚚ᢅ䱅涋봂湓寯岲ß;ìÁâÂ¦éÆ¦ç¸äÊ´ç͹êÍ´ÆÆÆÃÌ×ÏÕÜÜÇÇÜÌÀÜÏÏÖÖÖÜ××ÜÜÜÞàâãÄÄäÇÈåØÌèÖÆæÓÓåÚÐçߨìÞÑæáÛãããÿþþÿ‰ð ‘ACƒ‘!ñâE 0¬‘ä§Ž+S~!sÅæ64iº£Š#†4°i“£$M¢„ôA¦›ÍéP§J_ÔÄÙ' 6|dƒhÑMŒB&:FG NŸ> )RS¬Âjåª)lj¬aq2sèhÓnÚª‰C…¸r·^[ôiË–6€ °(€-r¤„IƒÃB››Ühy:†Å &ä´L°à&1f(±ä#Æ& ¼ÉRÓ BšôÀ˜@aD ž7à‚FH;øè¸A§e)@ Y’DÈBpP<@ Ë"-9"DÈ /°<$š$H¡K™íÙƒ¤F(…˜1b¤ ¥Jƒ† 9òJ‰.!ù,ª\‡777l{–{ŽoŠ©sŽ­w“µz–¹~š»žU¡T¿g¾e¯d!¸p:•{v¦vJ­tD§nw¼myÅY9ÐsÝxÊk5Î~7åp=ÄYAÄfPÂjsÆpxÞo`Û||àcCèlQã~{«‘y¼Žb±q·”u»•s½œÖ‚;ç…-àŒ?éŽ=ñ†5óŽ4Ë„EÏŒKÉ‹QÒ†DÖ‰BÒ‹JÜŒBÔPÛ‘NД\Ý“TÅŽtÉ•eÈ™nÈ›tØ™cË zÙ¦yÙ©~ìXç’Eê‘Bà•Qæ™VèšWìYðžZä€îŸgî \ñ [å¢fì¢cí¦jç¬xí¬sî±{ñ¥e…‚‚„†‰…†œ’Œ—“’š•‘Ž‹¦™§‡™¸Šœ¸“™¯£–‹«›¦˜‘³•…¸œ„¸¢±¢”¶©ž¹©›¤¤¤¸« »¸¶¿¿¿–©À£¶Ê­¼Î€ˀ†Î•›Ý“ŽßŸŠÛ—šØ™šÆ¢‰È¡‹Ê«Æª’ש‚Ó©•ß´Ø´•Ç¡ Á¾ºÜ¬¬Õ¼§Ü¿¿ãƒƒâ‰Šå››ç±ê³ƒã®®ã±±ÈþÔÁ°ÝʺëÀœêƦç¸ê̳èθéѼÅÅÅÄÍØÜÊÊÞÑÈÖÖÖÐÖÝÔØÞÜÕÕÜÛÛÛÝáÞàâäÅÅåÈÉç×ÈçÚÎèÖÆæÓÓæÛÑäÞÚæáÛäãäêçäÿþþÿhJôa‡: *äEK'j²à8€à‹*9L¡BeèÖM"¡B ÅªTÙÙ´±ãÇžHŠ#AUU)RB¨ –‡g$úG€›s>ˆøTé@ P‘ âDÉèQUt,mÌäMD"9é±zµ§hÑrêAö*§³iQ}øC¢íUJl(éÕ+⃻nánâaàÀ+=¡Áj€«)SbÚèf  F4z,σ4kü@‘B&ˆ 6UÝsu F$)"†” Øæ’$RJ…’Ò‚… U 0à#æh* H$mœä"Êž,¤p°[ÕeÞtfz”É‘"*ˆôáÁ(å¢*/bŒ0Á¤¢'R  9$E‡7ÐpCZ¥è‡D6˜A@¨ˆò\ 2É#‘˜rŠ#ˆÜ·ÃZH20 E(R1 )Èæ„W¬0Ä /Ô!ù,ªZ‡777ht}ƒz©v’³y•µz–¹}šºžS U"¾f½b®e'´a9”{{®sB¬{Q£lu½gpÅY9×sÝwÊl5Ïw'æq=ÄYAÄfPÊ|@ÐkaÞo`Ú{{àcCèlQã~{Á€®‡r«‘y¹Žc±q·”u¼•sÒ;íè ç„<â‹?ï„9ë=ñ‹/ñ†5óŽ4Ï…BʇKÏŒKÉ‹QÊZÖ‰BÑ‹JÛŒGÔŽSÛ‘NÊŽeÅŽtÏ™hÈ›tÊ yÔ¢vØ¥wÙ©~çTè„XìXç’Eà’Nê“Má•QçšUìYð•CðŸ[ä€rîŸgï [ñ [å¢fï¤eê¥kï­sì®xî±{ð¥dð§jð¨j…‡Ž‰††œ’Œ—“’œ•‘Ž‹¦‹¥‡™¸Šœ¸¡•‹¦™«š¦–“¥š‘±’¸¢¶©žº¨™¤¤¤¸« ½½½š®Å¤¶Ê­¼ÎÊ€†Å”˕ٖ™Ü™˜Í›¢Ç¤ˆÆª’Ì­‘Ô§‹Úª€Ö²•ز‘Ç¡ Ä²£Ü©©ä‚≊嚖䚚䴉촃궈绔ẙ娨岲ÜʹìÁ鯦ç¸âȲêÍ´èιèѽÄÄÄÏÌÉÃÌ×ÎÔÜÖÌÄÒÎËÜÇÇÞÍÃÜÏÏÕÕÕÒÖÜÛ××ÜÛÛÛÝáÞàâãÄÄäÇÈåÏÐç×ÈçÚÎèÖÆæÓÓçÜÑçߨæáÛëãÞãããÿþþÿU´x±D‡Ž#ˆ©š5‹7€‘@ň iDµéÀ ƒ:Œ*DkÏ„<© :dF “*qÂ@@†-<¤&ú0&K³Ð) €VZ¤JÍÚÙóç)†ìH àè§B" •óÒMCFP­JKÏŽAÎ*•i,ÙPJ¾)²hm·dK)eÈ·T¼y÷2ü0È`²™ädZ,âÃÃ"ñ°al²6mŠbh„ª"]Fsç9›gIAÁ(->kȲɤÉÑ,!@\°™@Qi@yºâ •TÐj°€Á5Uer’åÕ*0vÔÀ`¡‚ƒß´†8y¹ÄpFEJX¬pÁ!ÍNBt´©cŠ 'Nbƒbm±2dGXlÿÅF‡/è’ÉJ|aŽ|2• 02E@ ¦‹ôåðÀ ØáË-¢ÜáË)¢˜² /œ ±„( ðF)jˆÁCcĸ.¹ŒbEG´áÆ Pü ÃXh‘…T0Oì’J 1 @€!ù,ª\‡777ekuz|‚yx˜}„o‰§x„¥z–¹~š¼ŸV¡b-¯e"½u5–oK¬vI¿o{ÅY9Êk5Í~7åp=ã}2í}1ÄYAÄfPÏlVß|AÀfpÃjsÍt|Þo`Û||àcCèlQëuLêyFâwUçxhäxpä}yŒ{•¸z„–„w°ƒY¬‰j©u«‘y³k¹Žc±q¿’i·”uº•tÒ‚9Þ‹?à….é=õ‡!ò€)ñ†5ó2ŃJÍ„BˇJÏŒKÉ‹QÊŽZÖ‰BÑ‹KÛ‘NÚSÙ•[ÅŽtÆ‘dÉ™oÈ›tÉžyÝ£oÑ tÑ¥~Ø¥wÙ©~ã…WìXç’Eá•Sæ™Uï”UèšWê›Yó–Dò—Hò™KñœRðŸ[ç‰jä€îŸgàš|ï [ñ [å¢fë£fè¥jî¨låªvï¯ví°{ñ¥eð¬p„€‹†…“‹‡œ’Œ—“’š”Ž‹¦„›º‰›°Šœ¸™Ÿ¶¢•‰¥—«ž’³ž§ ›·¡Ž±§ž¶©ž¹©›¸« £¶Ë¦¸Ë¨´Â­»Ë½ÆÒψ‰Ðƒ‰Þ‚ÚŒ‚Þ”†Ü›Ç£„ȤŒÈ©ŽÇ«“Ö¶›Æ¤£Ó¾ªß»²ã‚‚â‰Šä››â¤€æ°€ã³‹ë¶‡å¼šä²²ßÆ±ÜȺçĤçɝ鯧åÊ´êÍ´çÐ¼ÆÆÆÄÍØÜÉÉÚÐÆÞÓÊÕÕÕÐÖÝÕÙßÞÔÒÜÛÛÛÝáÞàâ䯯åÈÉæÕÆäØÍäÑÑåÛÒãÞÛäääÿþþÿ¸òd ‡F´^º3§JArÔÁƒbC]1} CƒL)] !8@€ƒ¢\7v,%+¥D)vyú€iAKuâ8$ÇÒD»v1ò`Œ¥Y¨Ä ÂT¬S»ìCâË-Œ­ŠÂÉi¤]¤nÂ" £Y³°–€ ;5ÓY³&ÁXËvѤSxóžø€„.ÛF¯ÞNñ€Á/ÛT°ÎšqÁ0[X‰1†ÁñãNhÚ„!am¶AƒVÉâ%… `€ú¬ç‘Š=šØªµ‡¨»éaûG‰‘Oy¤aTÁ‚¨ö¬zBÄ¡X^²ÙÅ  J}Âæzó#ˆ‹¸4uI"Ĉ>Èw€d¥Œ°X©2S凤 …ìÀ²5*.S¡‚K.@!Ã)kŒ„dáµÜR‰D1€6P1„ZlÑ]\QÂHñÊ!,Ô°BoäÀCdð ƒTA ‡œqà †¼!ù,ª]‡777yvw~||{z›}„s­y†§z—º~š¼œh;žyXŸc·_L¨bA´x@¼|D£lv¿adÅY9Ãg(Êk5Í~7Ñs.×x?ãs<ã6ó!ñ)ÄYAÌoKÄfP×oAÜfPßn^ÁfpÆktÍt|ÝmbÜnnÚ||àcCèlQétKèVê|Xäteæydçyqä}y{–À‰–†z¯‚Y»‚S¤b­Œn¯‹s©xµŠd³kºd±q¶“u»•sÏ€8Þ„.Úˆ=ô„ì†$é=ô„ ó…+õ‰$õŠ(ñ†5ó2ò‘:Á†N΄BˇMÏŒKʃSËŒUÖ‰BЊIÛ‘NÅŽtÌŸwÈžyÝŠ|Ù©~ê„WìXæ‘Eî—Jî™Oà•Sä˜Täœ_ê•UêšTîžZò•Cñ–HñŸWðŸ[ê‹kàŸfîŸgï [ñ [å¢gç£jï¤eí§låªvä®ë¬uí°{ò¤aðªnð¬pކƒ—Ž…œ’Œ—“’‡‰¤Ž‹¦Š˜¨„›ºŽ ¶ž¤¬š ·¢•‰«—…¦”¦©Ÿ–¶©ž¹©›­®°£¶Ë¦¸Ë­·Ã¬¹É±»Èˉ҅‹ÝŒ‚؉Ǩä›Ãª–Ȭ’Ъ‹Ô³–Ôµ›Ç¡ Ì­­Å¶ªÄ½·Ü¸¸ã㈈╖䛛毀ꪄ촄칎廡岲ÙÁ­Ý½ÝË»êÁŸáĬ鯧ãɵâ˸êÌ³ÆÆÆÏËÆÄÍØÎÖÞØÇÇÐÖÝß×ÑÜÙÖÜÜÜÚÜàÞàâ䯯áÏÀç×ÈæÙÍãÑÒåÚÐãÝÝäääþþþÿ*$cD dM¡äM-d !8@€Ä¨c 6¬,)J3&™e*«Q£õ g‘”¥Š­záÊ`¸ø¨ÂÙ1_ÉT‘áÒbM1„»1Ú’ ™¯NÉ’½Š5GÍC„XúÂ’,@2QZX ÊŠ…§ÉxµBÄ'[pãÆ@q%­ÚdZL˜µ‹‰vïV:Œ¬œßÕ"Šl›ßuåë¬Ùw7àw.ê|(æu4är>ç{2ò~"ÄYAÅfPÍj\ÝnHßiVÞo`ÜriÑsrÝ|{àcCäjSãn^ë|Xçteåpièzeärrçyqž€ei¯‚Y½ƒL©Œt²Œk±q¶“uÚ-܉>óƒä#ã‚-é…&é=ò ðƒ*õ‰%ôŠ*ð‹1ò‘:Í„CɆJÏŠJÊ‹TÎ’^Ö‰BÒŒKØ…MÚŒHƘjÊ’wÈžyئxÙ©~ëWí†Xæ‘Eë“Fà•Sè™VìYò•BðžZê‹kã—fâ“hâ˜fñ [å¢gì¦kî©nåªvä«|ì¯yñ£að©mð¬pއ„’‹†˜Ž•’Ž›‘Œ—“’…“¢ƒ”¨‡™¸¡”ˆ¦œ”³ž‹µ§›¶©ž¹©›­°¶³¥¥£¶Ë­»ÊÁ€ŠÌŠ‘Ò…‹ÜŽ‰Ô˜—ƨƬ–ů›Ð¨‹É£¢Í®®ä‚å‹‹æ‚å—˜ã›œë«…ã°„ì³„í¹‹ã½œâ¯¯á»§é¾¤å²²ä½¶å¿¾Ñÿßɶß˾æÄ¥ë èÈ«ãʵéÊ±ÆÆÆÄÈÍÏÏÏÄÍØÝÑÅÛÒÉÑÒÔÐÖÝÞÖÓÜÜÜÛÝá寯æÉÉç×ÈçÙÍèÕÅåÓÔçÜÒãÝÜåâßäääÿþþÿýäH‘£V—)¢'˘ü@C !ù,©a‡777Z_hoghprx|xyQn{}•}„œe4Ÿc9¢Y)¼c#¾m'†cC‡kXŒrlƒ{w¥^i­sA¸a]´uJ°}O¾pL¯qm·`bºbeÄV:É\?×sÉc5Ì|5Ê:Òy*Üz%åzèu)ë{!êy/ær4î|4îy8Ä_MÐiZÞp_ÁcbÞmlßsjÚxwÙ}}àgNàjOæjUån\èmSèmZä~Kéw@ízBêWë|Xälgäweåpiårrâ|x¯‚Y§…g«‘y³k·”uÍ€=ß„.Óƒ:îó„æ‚$ìƒ"åƒ?áŠ=é„4î8ê‹4ó†"õˆ$óŠ+ð€4ñ‹2ð:ò‘:ŃDÏ…BˇMΊIĉRÉ‹QÈŽ\ÕˆBЊIÛ‘NÉ•hÈ™o݈|ئtÙ©~æŠVëWí†XäDã–KéAèKå—Wå™TèšWîŸ[ð˜TðžYê‹kä–`å›bèŸaè–sè}ð [ã¢hå¨sá¨{ê£ë®xï°xò¤að§hð©mð¬pއ„šŒ¢•‰¥˜¦Ÿ™ª›”¹£¹©›¤¡¡­³¹—«Â£¶Ë­¶Â­»Ë³ºÃǤ‡È©È¯›Ä°ŸÓ§Ó«Ò¥•ͦ¥Í®®Ç¿·Ä¾¹å‹‹ç‘ƒë«…ᲇ쵅췈山翸ØÀ¬êãêîëÊ­æÀ¿áɶê˲é͸çÐ»ÆÆÆÞÏÒÞÓÉÖÖÖÐÖÝÞ×ÔÛÛÚÛÝáæÉÉå×ÉåØÍåÒÒçÜÒåÜÜäáÝäääþþþÿ‡ †ŠO5<ìüˆkÒ#4¦ºâS(V¬B|b ÜLà©:±‚¥¥†ÔÆ.bx:Ó†S /hÔøD«¦ÍAb;…ÃÇ4~ˆê¸qGšĈÝ!"…Ž@x”‡±Äà4ÁBÇŠW'…áÙ@ V5dx(k«™Qd±â#X¯(P>.¬Š/S|d Ì"…ÌdÊ~`•ã¨Ò®Yr¸|¦ Q—/DŒ ³Uf5eI˜âŒ3L-Âî&Mz«+E½5•  +8£LDXhNa~Tc é®’°‘ ³…›#I(¸  Q.KC’Ap¨J“Ä&4`Ði‘ÙZ”ôD•ä2…"€q‰<À1Œ±Ä ¾ sÅM<ñG #DIR›TÀÄUdñWK¸D 0À „ÀDUPA…!Y¤˜Å&d *\‚„иDT,Ñ„W8¡-`ˆ^H!ù,{&Gm‡ 000IIIVVVu]M|cMqg_nnnMiˆMx¨iw}nŽyzˆxy™m|¢Y‚®j‚œ|‚‹y‚’g„«fгm¶z‡§rްz—¹žT®[¾e¬k.¡k8‚TQ˜V`”yu¦UX³]`®zJª{Y¹}G¹{X©ky§{eºci»kw±j¼r|ÐnßyÎn6Êv'Î~7Ó`=Öv!Ü|6ê{êy,êw9ð}4Ü[\Ö^aÏc^Ê|OÆ{XÜhMÜgUÖyMÖxUÈdiÅksÆvgÊryÙdfÕmpÞreÙwxã[WçfIåfWézHèwWãgfåopæsfäxxx¥m€©x‰¥}‘µz‡Ê|ƒ•„x¼J¸‚W«‡f®‰xªz¶Œf²q·“r݃.Ö‚:ìô…é…'ç‡5í>ó‰(ñ‰5ô“<ʆGÅŠUË‘ZÓ‰GØŽRÛ‘MÕ”XÍgÆyÔ†gÛ€{Ù•iÚ’{Ϥ}ߣjاxë‡Gê…Vè–Kè™Vò–GðVé†jåƒyé™gè–wí \ð [é¢eìªtî±|ð¦gð¬pú°s‡‡‡‚ˆ–…‡š…›œ’‹•••‰‰¦ˆ–ª‚š¹–Š¢›–©žœ²ˆ¡¼›¦·¨€€§…˜£“‡£š–º€Œºˆ”¸œ„±š©¢ Ÿ½£Ž¸§™§§§©§¶§±½¸«¢²­½¾²§¶¶¶‚ŸÂˆ¢À—­Å±Ç£­Â¨¹Ë§¼Ô³»È±¿ÐºÇÔÇ‚‰ÊŒ“Êœ‚Ç•–؆ˆÚ‘ØšÖ”•Íš¢È¨Ä­™Î²—Ù¬ƒÒ®Ö±Õ³–Ω©Ë«³Î»¨Ê·¸Ø¤¥Ø¼¦ß½¿äƒƒå疊嚙ꩇå¤í¶†ì»”夤麣常ŽÅÉľÙÀ¨ÙÅ´ëÁûÀŽêŦé̶éѼôË¥ñÀ¿ûÔ®öÔµÇÆÇÃÌ×ËÒÚÜÂÃÞÏÑÛÛÛÆÔâÛÝáÝàãåÄÄäÏÐç×ÈæÛØõÄÃñÝÉøÛÛåßàæàÛýáÊýìÛäääèìñøîäÿôêþþþÿÿ Èn Áƒ&,¨°¡Cƒ JTq¢E‚3þ«¨Q"ÇŽ ?‚\8r¢H'K<¹¯eK”*¦Œ9SeM›1C椸“çHv@ƒ J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕ«@Îtù2£È®ÿÀ^¼Y’,ÌžZÑ"4Û‘­F·o{¦äÚõ­[üd&+Ö"\¯j!^9˜pá¿~ cÜÉrŸÁ}ï`¹šìêïŽö5©x£bÄœ?‹>Ü4ÂÌ óäç®]»w®Û9D}_fÕiÖÖ´Þу}_.Ý“·fºûn¡Øî–qÍ ]Ž|Þ™1ðà×Õ ^’ë9ä.Ùiÿ€A:K\€|ËïîãË÷>¿þü콉“ÞÏ$}ðî G–¬ :³”çN|ðÙç K >(!~ré‡]ùör R@ž‡°Œ7`{ J(a„&ÚG¡u+æ´Oæ¡{°<€,ë=Ë;³À2K:ó¡˜b‰C:Ø"Mfx$’ÝÍÞ+:¶Tã+'YŸV‚·dYIj·%—M¾G£8båƒXf餚ñ}yVŒÂçtkÒÕá‡ÌR%›à¥É'uL^(§‹n¾é_\8 ¢ù'r~òYh\“6(¡aîã§;ëÝÈŽ‰‘fªš•ŽÕe~—z¨˜nت¦¯ÒÿUjb³†&è­¹Úê¨Eòje­:§’À†…裾ÆÇ£@Ûj±Ü¥ &®^fš,¨YŠ·(‰°Æ*´? Ë"µ¨ÒÉj¬×"Ë*x®·Ðê/ŒÄ‚³|¦Kyê±÷n¬ó’ðZl­·Ýº4O8àˆc¿Rú›0¼ö¶%.¦ä›+¾lF(Ï"‡„œ>ó­{`‚š4ªï„SÚ²¥»êÄ»º„ÈÕx“È!Ö̧íˆKú²© 64ÑæÒŒ¬KòRMKó²H}Ëþ¨ë«Ev´­õÆ<ÑÕ6ŽÓ.Lò+?˜õb[Û¶ÛI§}¥Â!‡ƒ8‡(b¥Ü*¾ÿ­×8ùý÷Æÿ.í’5!'.ÏÞo¦q¹€OÛõä26]á$²H5‹3ÞøÚžþ¢Àoƒïƒó쉰è«ZmÛšž#ûì´×nûí¸ç^û1øñǺ/üð²·„ÕñÈ'¯üòÌ?e¬åEÊŽ<$:¶Ô!÷<÷ç‚ÓKùãà‡o‘é)".ò< Γ4×ÄÃÕÎáìsó!ËÇw}¬ç¹ä„+=$Þ›ÛY5à3gЀðh >¤æ’j"~Aj ·¿putTù$²ÔíC‡PFK®ñ iÀ#ô`[Âúiu4X Ó2CÆM œZKxŒ–Ð%ÒxFÿ÷ÀjÐ>÷»O µ–A—}O|_ Úƒà'?‰p)¡—¸Dx0‚Ük"ÌĈ´'ʬIÜÇõ@ˆD(ƒd$4! ŸñÅ}HzJc›–È62ÒÊœ™ÃÁF@‹G6¤ð)0L±Åõ±Ï}¤âcè49:ò8Ћ^È¡‡C8A ¨ld8‘†V¦)ŠP¸Å,éï“¿Áe.Ù*ÄyCS…X‚ ²ràPDÖPG$r%Ž'Ìâ¯8Ù: šc¼|”f ',!ÃÆ Ò â•”ô![Ä!é–×´æëp¹Áò9M~h¦ÿ7BŒ³œ-1„†ñ)G¹Dší´%5á ¹x>¤ž&šÓÀ'<#pBÔ†C€#f8C%òdP-ÊQšï\¨JÊ¿Êù/KóPÄ9AgH Kh‚ÊP†4˜Á r@y¸F¨Ñ²–\‘‡5rÖL-­”¥†š'T5(Å"Íãy+„npƒ@‚•>õƒÔjARgVr}íCÎõB¶ˆ³íQ—òzjC¥êR="G ;+á q(Ó ^X†÷p£<>h~}uàÓäÃйBQžtÍD{µ0pT# hI8|ŠW¤ÃrÀ€sÌjq­%‹Ðá[§êDÖŽ1²}hU{å’pÿ¨a аÆB:± š(i}L»Ø*®Þƒ-6•»ÜºÆ âx£¡@Èa !õÄ#¸ð†=¼C¸óA¬8{\זѼd®ëœË'wôˆˆ8d"5ûÕ1Œá jðÃÞЇK¶$³01ªKºD(׸F6èjXcqk•š[ÝÓØØZ¹É•ìl루J°¡»¥<„Ãч-tAƒèÃŒ„ÂÃ~ßð‡Å®‰„¼†D÷@;.ÕMEN…ÏèX"y|.Ùˆñ/hâxÓ )v PCøE4Ÿa‰Iüª˜„z¼xH# :ž#<àaÀB8MÿÞ°‰†Ü\ GU½² ¥„øå@Räil‹ ¢P-±‰) ¡@L%ÂÐc L‚l8nq k A8¡­,<„ÃX†aO¢—kxn©†õü ò¼qaÈâ¤üŒk$È Â:÷qæE?ðŽvÚ,á¡ :rˆ•¾ôÙ@¸iµÉõÈëµóGýR™ìrدXáÁY>ƒ¸ÈEOÊeI|Ùbö(›¯+›þšÍÏ Ä›ãŒiNn¶á»áF>ýLghå µ –p؈B)DËx¿5.s 55KPLjøCâð‡I;ÞF;¶‘•½—$χG›ÃH² ïÃÿèƒáAvxÕ€à,¥ñ‹‡ïÁ Þ‡x¼ð/T‚¨FÒøÆëô! N@ƒÿ l€ƒèS xߌód|=¹‡–èD¬@ ¾÷ãLt~\õ¿ÿz{ëè& ›ç‰€Kàÿ5°L L`qû £u å”EI~}ƒ}Ä}ÑGvve`7gSJÀ×€„°2 `~På·`w³Œ cÁåÐ4G&·Z"ØZCøZ‚7}$ˆ0D % …€S/ðð„`QÐgó2К찛5× P§Nô O`†îV„çå†éu„¢F}§:òQÜw1ð0…„ð7p “7ó ‰ðž0 ¯ðèv@©ÿ“E×ð¼GnAç›d‰$oóV}±ÄÕ jplÀ‡}ø…`g nצE¯ð µÀpdf­¶q¤{4G Ö èipjrxaÙ$!™sO/ÔÖ°k ‰@¦xŠˆàáP q` ³àxccšÂfY§Nû0K’ˆ~ G‰ò‘:txsvê8uh ®´L&‡%⊥øxЉÀ “Àmàa`šæÞxPÏ5‹ô½8nòAuã ~‡„í8‚ì˜g³ÇøÀúÇäi2‰ÐшS¸  ÷qðKÞ1KÙ`‹æx‚B„n½k4åÿ0bÄ»ô‹š8Œ)œh {å@‹ ŠÆ1ìp#I’ÿ0 ì àà •) GKÍäp·T´å°ýÀZBÖÁHo@i1ã ‹ÀJ™õ‰Ë””¡Ô ÁДN ‰ðlð.Ô-óP†gˆ8W“àa\-ñ•ù –™á8ùW–=y–DÈl¾²@‡°iP G™ªe‚Èwy}xб_Fmœ¨–ôS˜‹‘"(Šy‰>™q¯ ›þg ´®Tk°— 4`ÖJ¥W~p ŸpP@à~°Úó.iŒÕ@`D$5Õ åð ÄšÔ‘‰?ÉqFÿè˜Á‰M£W”IšÈ!QbU7áðU­DŠRø»à §ˆ m\•¶™™ ¢•1)”8Oc>ãþÐDc™aâù† ê tˆt•d™’ƒgØS]iPfà‘ …ÆY l@ˆ°8—åŸ-¡f4YRGuñ#=óP)²B–䇊£z‘)’ZÛÀB¬´ÕÀQf0ÿ p©ð }(3ÐSk W•ù$l[) dh<‘ë8‘hY:uh©ŠÀ–ûpi@.-0 €"ú3`ñUÚ 9­¨F§Õš^ú˜9j–ƒJ¨;Z‚;t{qÿÖ€kà Œ°e@g`6 €  #€­ÔS™Ù-,úH.*5S2—޹ª]¨§áqøÐ`½éì™8L·L”É¡g°«)!àÐZðmÔŒPl ·>¨”JR€I|ÊcÜ8A­:­Ô”Õj­î(¡P“WuøÀ›(êJbÀ¡EúlÀPcà‚ ¢ܸ ´´{Ç6Yüö-˜XM×*¨Ò—­<š¨1Çnp¹&7cHo t[`__ ±` \ojÀ 0YP \Qsr$‰Ü„¾È˜Ïw£ÂX¨ ™’Z 4¹¢Ñà…°­ÿtöEŠb „c  èj ±à-æ’8D 5MýªªÄ¸‰IƲ‰Š¬&èkLÔP³·U nÀ¾Ó#Ù( |` `# -æAŒ¤´H5$Nû´&k¨{/ÚzrNèr摼HÅ Žp_Ä[p.q v w0SP³ð  %tB »e"{±ù$k£w‹­x;°áÈ­U×'yJbLYöE| ›`5áø S`¹0*`Ú`S€Jd¯”IMË¥¢›¼—·ò#«ºi`Ìp«ÐѰyB @&ÐE $ÿÐ 0  W0¾¨$ ËÊHÍšTàÏ+„u›²( ºù¯¯Ê¼R –ÐpW ‰BPÀE0 ÀEð Ëײ0½•æ ·‹ þ†@-Úx“8,9²õ[²÷Ë ùK·*+¸†˜PSPÀÒðSðQ` Y À¼Ð!$2T·  `ȧ†”¶•c³K2TK¿!‚Ÿ+®:žãSxP<;µp–pÈÀ BPÈÉ8å À< ð p²CzgìSÐ ³“,ÖyVœ¿ ;•g ²c ˆ7<ª{|ÜÇ~üÇK!{ˆÚèp±Ðñ0,ÿÀ˜0;ð`ÀS@=€rÈÊG ´ <“¤ª·›¦¥œÄÀøÁøÛÄš„òá^ÌbIiì@ÅéàµpE@s|â{4À Zü a’€  ™pÏ iè F`dŽx“òp}ûÊXÈ«¼N<ÂÚ\žA£(äa ¼@Køê&¹³5gS¬; »0l  ðÆç@ qް(—À ÙpPBðÌR`Ž[(2ëTÇ{ÐKÌÄB4ÊWC² ’Ãò)k ã ŸÀlÀ@ƹ–Há@P ÊA¹©àšp IÀ £p Xð 5yƒŒà ÿmÐýÃ๘¦¬Ðú»ÍQ¤g³E0$²´}cƒ—l@#åÑÄ@f› ÂÐh Ì „—p¥LëRü깤\Ê¡ °Ü¼¼egj-1ÔE·šé¬ÈY³@ƷЧ¨ ÕT]éP¹B„k[mŽóàol×|6}‘Ó`Ö²¹Ó<-°‘ÒЭ¹Éèf"Z5òìð¢"MÒ·0_h ‘°Ò-ýÒ½hmŽX‰2bغخ™Ðb]Öd½Ðzö32Î.f?õ‘ð¼ý£U € Š€ð b*|»èáÐC0I °P $ôI€ XQP@ƹ£vá9Ö±ÿÝÓ:êÝÞLjUî¼¹¼Â)Å-‰ÀQ䔵€CPÀB0 0 ³0 ¿ —@ ,0O 9PÀ?ÀNзB¸¥{Ø ÓÚŠ­Ó…Zšªc"Øp±Ø€ | ƒ'Pgv @ -¡(³ð EP,9}À90ä…Í ôÕTe¬ÍÚ.Þá ÛãMºéd"„ Ø Œ˜ € ûÀ R`ߟ²×‡l@–@9 ‰NàâX ™Õ™Ý ú-4îÓ¬ Þ'«ã;.Û>>áäC¾ÎF>¼ðÌS0ÿµ¶XÄeþl›ÇB€ ûЀ‰Ón î`n·<>æƒNèdÿ>Èy+ѰÀÖp±Ö€áj}*0T )ÐÀ >ÏÀP &^U 9`Nà?à Cú¨âkа¯ª˜€j¿…nè$,æa®Ê­r ±  £5dµ(ìÐÞ¢èŒô:PÀS Ø–IPÀWðÏL à*®Üz# ¨!ÃoQ£¹~뻎Êånî3ލÆweËäq ï` …… „@Lzº¾úíCpñyFJðíÕ)¯ôUTr}¡àãŽîˆ~è ¬ë‚Üëë ”ìàc‡Üèñ]tQ@Ywó0,– £0GpS)àJ°ÒO°‚ÿðOÓ§¯úÓ›qãþÚð_ÎóY‚ëâç@ï{M%ÙÀ P•à±m¿À ‡¶¬9 R°K°{8e ‘x×ÃQ˜¶3ÓãIã:?·_JOa*ëÒç ñòñèq V`ßV ý¶ÌIP£0Ž*þVÏò-o ÙðéczµÞP›gî óܽØáänë“/áóA¯p /Zó‘ÿÀ›Ð 0íð€ ë` VðÌE@êOPí¯/ó•BlU?³J÷¢ÚÝ=ù”ßógµ…†ë"ëÞî.ÁÊø ›€*0 íÁf…yÐ É! Àð РÏçàБÿ ÀH¿?åO Ñ`®oè´¡˜:÷)/ùßûʯ+ì°Û½ñâëÀûtg  48aD ¼}ðšŒyS1Œ%C„a"å°$¡f½“ö䉔BNX ÑaÄÈ&Lœª6ÐæÀ9qþÛ™Ó§@vAmúÌÉŽèQ¤I•]ÚÔ©O£O¥":Õ꿪W§fÕÊs๛–`¸ëv7Õ®ÝVm, °fQHÐ`T§!FžetN³fnØIrdJ•#'¥=cܘñ¼[XÎó “>‡Â±ÝGTmRœû„&åÚuiiÓJQ§>ºš5Ô×N]KµÿéVà»Ü Äðàgà¶mÜ·At·ª99‘›@Sl‚H‘ ÃêÏæ-~&m^6ƸòJ¹ìWÉ' ]»–í³çžGþìL:öéûøóSÝÏ¿ë×j»)·wxó 8΄ˆ8ãCƒ*žæŽ7š¨˜â ë°óh­k¤0"‡“”`â Uæ¹Ì‰(»æ&­æÓ)-aûÏÆ™Ê«yìq¶§n¬ZÌz€FÕRP ¸`‰….»,±à íšyÃf6‘€ã8lˆ“^Tk¯¸ %r‚hž0qxàa̽øh›O4$ëÓ1G _ë3µ?M Tпº)ÿ„r;0ɵ–M“ƒZè¸)PÙm6ÚÈÐ Kªh`t¨bŠZÔº%—Џ‚’LŒÉÕ:ŽaGN1kt*4 Fó ÇíÊ׫€µJØa hIw`ÁàteËÑ}Þ™E®"-™À‚ƒ,qçš:Vðòš[dYH…)ŽÃ`›f‰D†À" PŒPbÞy—øˆ+Á«UϦ`Ì•Æ]÷ìµGùü‘`bé;ÖY† MÒHgAGYL[æ‚)xɆã,°`”UÉ(²É’¢,Lzâê~ø‰$ꉽ†ºµ¾Ð„(-^ÿKXªŸe;xèÔ„l8Él®ù…Nà„eA žÿŒ/±¤lSÙçP0ˆ…I ’èÎ%#L’F n\¾†eµa¼™>¯vЍ ›ªÛn¢Î;ÆsúöûoÀ<ð_’0<‰_÷{– ,ñ ’@æœ[*ÁÚ‚)¦¸ •s’¸âMúÖä‚"ž(L^%Œà¥oa\>^€ðƒ²ývÜs×}wÞ{÷ýwàƒ~xâ‹7þøÝãnëhÁ“™9+è܉1¨Xj9±X†®=™‘÷‰ìŠ'Œ`i^³á‘æ‡ Žéf7öx¯ß;ëïL4=â·¿»õ3xÇþ©ÆXËcgÖ‘sÐ A:4ÁŽk\!sW“œ2w‚D]™…ÿFT°‘T¹é$RxÃÌpB?$b3uRíòg³¸LoÜÿ6@hpl‹ÄŽid¯p@ðŠÉ|EHB³$¹H‚r0"%Œð i(C»˜p°4.„¿æ#CŸÝ†kd£iŒ¦Ã›8ЫYÃfq–YÌå/â4'î Êkô¥¢dèÑn‹Xü¦Qp|…¢ðФµçbcu¤p x„H «ØÄ†p\Ñ#$$A ÌàÅ2¬aé§>”—I$ñì)¥c°ÔÓýL@ ­)ÃfÑÀsí޳°„%faJÆ\k›ªÊLB…`àÙ¨4¤‘ m‡$Ã0±ÿkˆ£Hie¿*V¡•1šf=hlÔÚ3˜º±­ŒŠ ³nñŠð)”yr”Ó8ç1'õÍëÀ0èz ulU4åB….@0….X#k2ÍáU[Ùï’c-ãr ÕY?A7ºl]ØÑà¢ÓÈ|í&9lËù 9-"&ÙÇAxñŒ}Œ¢ ÝÜGb/±E â8û¨Æ!¼yÀM¿ús¦õ°çΡhM+™w]H¶N8cNìà­o oÿbøØ$ ç—Ù”Þ/Å@[qh­|ešV÷homà·{´ ÒÉÓ Qk –Ö6æBȈ„À‹yÐ ÁÈ—PÀ‡7|A¶„‡|zR#–ú/ÊS¦²teèCS—€Ì»iNŸÕ]Ç\cz¹Ä.ÚCÀyØ2Ù ‰® Ãa¯;‹ÄP€‚1œ¡"o ¤ zØcÐ2¢µÎ ¬0ÏVY¦.Þ56m¼PîÆÇ­ÅD\ÐñVMìfÑym-É£æ£2†àƒ ¦qÏ-@¢|¸ÁF1zHò´¾ŸÎýYñzÀê^·¯µ¼Ð/;ËÁÏÀÖ@”Õ¬e—óE·¤¥I Â@C¶·Ýío‡{ÜõY)Fƒ§Š³[šA笀§ÂqRý•¿`3~q v@ªøÎ÷>ÔaT˜FóXÄŽ˜fcÕ­~u¬]öÚÍmFiDzÏ-žk¶c²Gýí×>q–œ[¼Ã3~þN6Vè¶~Ôûœ>ÌŽs 䵟{´…+è.ÿØå§ëûßdžó÷~RøA”ãk^³$þGò“Ÿ“çÿ4<ËyÎw®óž_\ãkw;÷½¯v??Ó¿ºßÝ ¿Z# ´û¹Ã™Ä)¿ýïW>þò× ïññcÅ…¸3ÿþÅPòÓ9ÝÁ5j¿à£¿DÀ>ñ;7ºéý À³;#ös!<)·?Q«Ñ5Ë3@Ö û˲²˜œó‰##›Ð΀@*Á@ 0L´ùëÀ·+>ž DAÜAþæó5¨ÀÁÌ<3BOŠA¡;A ô¿´€<ý{²s?öÂ(c«!DBæê>Ì«Aí[7s›ë+Á°ZÁ*üAý“+´,ÿÑÊB.,Â7„CAA:¬C;¼C<ÌC=ÜC>ìC?LºÑÂ[ßÈc?r+·©>@£>É“ œ ·CÃ+ìÂ\B%¼5¤ÁÃŒB[«À<ÁÀÛ!´¢HAH£Ð¤G„!ÌÄVtÅ-¼Ä¶“@Þ!;þSÁðÁQ$EUt)6|A©ŸÿzE„?JLÀbìÀ ÔÅT¤> LDC?É«>çJB#EÐXÁ]A?"Ä›8$ÆdG/ü¾Eܹ ÜÆä ÌŸÿ£8D±nô3BdCü;BY\À{Ì?X¬?ñÓ¿ë›@¯È(”²\Åi,¾¬X Ñ’!…[ƽÌæš¸²´ÊžŒÈ•,´q<Æ¢1#¾TÃ\©, Áœ8Â0\;Ëé ÅYKGìs¶ Ì€ÁF•¼Ê»G˼̮ìÇ)Ü ¡űŒKuĽÍj&ÿÎã¯sœ5³$Èå*IʬǺÜJ¼”CØDË D1C´E2¬Âë³EëÌÆ·¼¤ŒÄ¾ÒÌMUÜ/¤LN3ŠGkÌK«DÆ/¤ÍÞ“Æ'»‰³s?ÇLÊñ|ÍósI O14¿ëT˜þJÈSJæ”M”PÉá A‰„ÑÙ\ÏäÏ}@5l©y¼ÆÂüEú¸ÅzQtÆÞËàœÌôtNôÔPá;£scÄâƒÒ …PâDÑuLP 5R LKóÐ ÊpôP7’Oåy@ï4Ìÿ`”Ê!]F¶ @DÃÈ TÒ S0ÍFÄœQ­”&ù,A=©Ïl3Ô$(<ÄÍQ¸äO 47¸ÔÈHÕÓjTT)ÜN2eRR#J}Î"¿Mœ‘M›TK²ÐýKÃI<ÇÄD=QÇä¹N5OÞ;ÒAÒtÃÓQõ¬¨ˆÆvœUBT¢dE—:U¶ˆÏšS½É_½Ó_Çbíng¼n<ÑŠÚe5ÕÍTS˜¥H_åWEm¿=ýLÊW#•Gž×±rI5Ô•áTIˆ ámÙ¤íÇãÀ­øC´M[µ][¶m[·EÛ÷sÚ¶4Ú>½Ù«ÕÙ¦5Ê:ÍA $ËuüÈ~»°…ÊR;‹µÑýÎ¥ÑËôEfÊÐ? Ð\|Kþ‹P“µ½¹e)æcÕ‹%Ù¥m\ÌýØ•[ÌÛ'¥ÓvEÝà΂P´Z™ ´øÀŽåQK ’äViÍÓT%ÐÿÄýÝF8œu&†}ÉÑDÎheÄÝÓB+]Ðî´×}íÝå,WÓFÝ[SÄ×2YÅDV˜üÞ‰œÌqZD”UÞ­Qé^ĵ“ïY,íM)åÞY¥ÕÜ˸]_–¬,òUþ=Úô]Òõ]œMo}<ý„^ç­Ò)UÞûýßT®Ÿ­ÙèE_ ®`UÕÎÕÅÏò$H¥|Ä܌ݷœ]3MÖa=ß±â9ÜÝØtàfaÿeÂlMž«Üê,HµÈÍÌuKù”DÑ>aÙÒ`ž` nN¤aØÍȾåMãTW!\]­Ö²k`\Û[c%ÊRA>µYü•ͼÜìÝ•Fœ®ÝOÿð Èa„Òö­Š@W"ÕVöR.fZ".âê ã~W2vãfÌr¬Í_¤À6†I~ãªõâ¦ãV_<®ÞßeFvebáuâÖ<È(;Ý+_xµbõY,ÜâFæPê…ä Îá=¶=D-cÚ5¡P&CúÄ,nåQªÍâiu&²‚T\~d9öåºUåHÜŸ:éÚ]ÝAb&D}]Ì&Bµ„Ï'ýÏåûÒ™ýb¾fG]µRÚ8à'ä6BÎ>e`æ#Æf®ÄY½¤ßPMËÅMçÉ#å4e$¶ælÞzåmŽcšug^&ÛL®¦yvR{¾ãs¾grÖæ&Ã[¥ÆBgkçÿÆgt&åQ6h²åÑ ÐPÝXÑ*J[n×öähE¦h„Nh“¶èuæ€6JQ*Xöœ ­…\5Åè|>è“®hÖä‰BžÍgÔdç’Þé›Ni•.çÚ­i¡öä#Tù³Ÿ ¥çž.j”6j¢öÝjšrêíƒjïMjgª®ê±`‰&h,üiq jš.è«Îé°žj³&éðíØ§”Úwžé Öj¹†ë£Fj¦.ë¥æëù¬»þÖdf¡:®Ô_Æi›Žë¾þë.àà­“ÅvU´ìºnÒ̶ê·q_xÞ¤Ÿy[Ò.mÓ>mÔNmã lÈ–êÖîl²lÉöi,ÖK˾跞íØöëÿÇ~íÆ.a þç¯kÞÎíÞ.n±öíß–mw}Ú›%nÝVnÂFîÈ>îèæmn†nÇ^néÖnÏ®nã¶nãÆZïÞm×¾nôNïðNîîfmx4çí†oóïõoö¦n#FËÂía·–oæ®oûðüžïðæèÃÕlÆ%p?oú¾oúvÁogððövoõvð Çð ‡mŸpÿo q/ï Oð·püVñ ñgñçîço wqÿžqñ_q /ñ÷ñoqïåÿñ!7qrŸn!çðWò%Gò&7r*‡ò'GqpÎÞñ$çò(—r+?r'¿r/'óÿ2rïr"ÿnÿòÍ.å0os4Oó8¯r:ws,Ws&7s0_òjFð<Ÿò;çó1óBïó9ßsBsÜ^ô@ÇóGtCtGÏñ—óI·ôKgôþÎtMÏr³ô5góC·ó3OtD÷ôQqU¿ì-WtT/õ:7uXÇô!ÿó"§õT·u^ŸuI¿õ.Þõ^ÿu]v_?u`·ãJÿt=—õc¯õb?tÕžvj¯vk¿v;tvdvNu-‡óm§u\'ungvA'ög7ög÷MOwm‡ör_u—÷awtw÷nÏu|§ôVotOÿv¯w{xx_÷`÷‚'xu¿w…Gø…§÷ÿsOø†Ïwrßws‡ô‹gx‰øwxНø‰ç÷dgìùxøNx‰gwVÿ÷ƒ÷x“·øŒ/yˆÇøš_v”÷öPxއù˜×øž÷ù›õwgùy7úfz¤Wó¥·ù¦_ö¡wù.~z¢ÿø–÷¨Wy¡Ïz¥y«u¯Ÿù~Où“ßyïø®Wv3§ú±'y´ÿú¤ÿyg{­O{·{±¯{¸/{µ¯ú¼Çzºü€çû¾×û¿'|Ì6øÂüÅ—y®—ùœçy»¿ûÉO|š|Œ|Äu¼| xÍÿüÊ÷Ëû×ûÎÇüv§yÏ/ý©7}Õ¿zÇ}ÖwuÒú½Ï|ÿ³_ýÎo}ßÇýÓ}ÔþàOýÝ_ GH~å_~æo~ç~è~éŸ~ê¯~ë¿~ìÏ~íß~îï~ïÿ~ðOþ£p„!ÿ1ÿó/õ_ÿAÿqÿ÷ßøïù—‚©ÿüÀÿûÐÿýgÿøˆ,hð AG.TÈð!C‡'”Hñâ?‹!jÜÑãÅŽ ŠYÑ$G” U6d‰°¤K˜*e¢¤YÓ%Iœmšä9ñœÎ‚@ƒJT Q¢Iƒ.ezéÓMuNjõ*Ö¬Z·ríêõ+ذbÇ’ÝÊî€ÀS°cÙjÀ€Vÿö0É-\¹ÿ&­Ý‡²Õ)gþ§ÿö€_û$€XjÞ‘²X×§AÀé px8ñÆÅ”#¼ñ,iÃ}-ÀœnÛs:§]ݶÀæ8åh7Ê}½'øçø½#…Ÿ"¾ïTÙ–àÐz+ì·ªîqR–£7þ`’óçíÐÆçÜÅH׺@Çìœâî}#xâý#i祇Q̧`rÞÉGßF¿­·ŽÌ7‰À‘DÞnx7 ZÿÐVOˆm'œ@Ž„8;Å™Ça¼Q‡ß~–©b{Î&Ð@ ׊€(GQw9J¥P9ªZu ·;ìÐ…#h9²ã?­eWCNÿÜaT*9F¦pz(‘™Éf+ìÓ¡Cq¡Ä^Pã?o©”'»EÇf• £ˆ$b”è@û ˆ–Õ·‘‘Ñõˆâ?|ªP‹jÇèˆAš]ž­T:à¥íÇWaѹ詡rGª£U—rgÕYEu± @ÝýwƒŠx'¢.k¡Aºh­ú¦G9ÖÅŽ§pÊ-H‡vªm]К*`‚÷][X™çe+r‚ ˆÑ) à×>ôönnÑTï½p Píª¥š´¦ˆñ¸"HëÆØ"³g—¸æéo$B*$H9^©¯¬m-鑸gä¡C.nÿiŽsnì%DÜk#¡Ú©¶tF%HYÊ åLМ¼©¨áHȸۤïåê‘ÑÄço “|Ý¡í!çˆÌ£ë˜¸Õþ—m•=H_ráR]o+Wg}n~Bfí5Ñ §ff]q0?4@‚"§fÚv“yßjTßz“¡”xbê½²ßiUlRÚ›EÞ'±S˜#;r×Y•¤‘·)bkêPSêÕÔm>Š…¾4D‹y.ë°Ÿ~Ñ$ž;ÂŽï@å¾Pïž—u<òÉ+¿<óÍ;ÿ<ôÑK?=õÕ[=öÙk¿=÷Ý{ÿ=øá‹?>ùåkÕ‰«š¿>ûá;Í£ÊíË?ÿõïgÿé"Ö”Zj&gvnigwø2™üÝ}g Œ¸øò°¼Å_ô{`ûˆ³–] (PyB 2ˆµjå‰.¢‚qDÕ! V+;“ØÜÞ£›äd'ƒ„ É fÐ<ÀÉ“ ÛrÁSx+ƒ›#ؾô…œ¶ÇkL|²—jۉò³Ÿ¾æ?ó©^ 3x€ôä‰÷3ŽnÞÞ9eQHes"ËÅâŠMl ÑaÔ›6ÒåÄ ÌÀZœ¾MzQqèÒŠì+†ÌÞ3’Å»x1OÈÓY>hÇ,î¦] õu—ö†‡ü¤÷ÎáˆÄøFrØr„^¦¤ S厙;…‡ÿØõ¹>²XŽëT-A©KPh—¾ü%HN!€³˜Æ<&2“©Ìe2³™Î|&4£)ÍiR³šÖ¼&6³©Ímr³›Þü&8Ã)Îq’³œæ<':Ó©Îu²³î|'<ã)ÏyÒ³žö¼'>ó™¼(ñ³Ÿþü'@*д =(BªÐ…2´¡}(D#*Q~& ¢½(F3ªÑr´£ý(HC*Ò‘’´¤&=)J/ÊW…v&q)CR*Ó™Ò´¦6½)Nsš€•º®¥:éBt*Ô¡µ¨F%*O)T,õ49*T£*Õ©J5©iªSq‚Õ‚Pµ«^ý*XEjUˆlµ§Z}jXÓªÿÖµV•¥?}+FØ*×¹Ò•¦c}HY• ׋Ե¯~ý+Gïʼ^u¯,b[WÁ.„°d5ìD+ÙÉ‚•±q,^! Êr¶³GµìA0;XÍ>ij¦=íMAkÑ6–´1E-lc[RÕ„µ—umPe«ÛÝÖ­gý-_y+ÜáÒ– ¶ -n2Üå9îj“{æR¶ÎŒO{Øêr·³×íTv]]ÍI7«â ïyµË’ñ>½*a¯o×ë^”À»å5«zé;ß—n¤ þý/€,à¸À>0‚¬à3¸Á~0„#,á SÂk0H…3¬á s¸Ãþ0ˆC\á ‘DÄ&>1ŠS¬â³Á$&H‹c,ãÓ¸Æ4~ñ@l¬ãó¸Ç>>0Žòã!¹ÈFqÿqä%3¹ÉN6p’Ÿ,å)SÙÇQ®2–³¬å_yË^þ2˜-Œá0“¹Ìfp—Ϭæ5g9Íl~3œ—ìæ8Ó¹Î;ž³ó¬çãyÏ~þ³‡û èA:‚.4¢ dƒ!ù,{*Gi‡ 000IIIVVVYZkgSOnnnMx¨evŒiw}nŽyz‰xy™m|¢Y‚®}ƒzƒ“h„©fгm¶y‡§rްx‘®z—¹œR›e?¸_%®c#¡k9¼z>’LPtZŠu~š~l—{z¥ZZ©|Z´}K¹{XµovÈmÇqÖuÇv-Êz5Ô|)Ü|6é|#ëx8ñ}(ð}2Ü[\Ö^aÏc^Ê|OÆ{XÜkOÜgUÖyMÖxUÈdiÅksÆvgÊryÙdfÕmpÞreÙwxã[WçfIåfWèzHéwWãgfåopæsfäxx†oŒ…x……{˜“m†–u‹™~”¥m€©x‰¥}‘µz‡Ê|ƒy˜…x¯‚Z¾‚I¹‚Wª…e®‰xªz¸Žh²q·“rÎ:Ü‚.׃;ì€õ…ê…'èˆ5ó‰(ñ‰5ò‘:É…GÅŠTËZÓ‰GØŽRÛ‘NÕ”XÍgÆyÔ†gÛ€{Ø—gÚ’{Ϥ}ߣjاxë‡Gê…Vç•Jè™Vñ–GðœVè…jåƒzê™hé—wî Yð [ê£gíªtí±|ð¦gð¬pú°s‡‡‡‚ˆ–…‡š…››’‹•••‰‰¦ˆ–ª‚š¹–Š¢œ—©žœ²ˆ ¼›¥·¨€€§…˜¤”‡¢™–º€Œºˆ”¸œ„ºš›±š¨¢ Ÿ½£Ž¸§™§§§©¨¶¦±¾¸«¢²­½¾²§¶¶¶ˆ¢À—­Å±Ç£­Â¨¹Ë³¼É±¿Ð¹ÇÕÇ‚‰ÊŒ“Êœ‚È‘˜Ø†ˆÚ‘ØšÖ”•Íš¢Ç¦Å­˜Î²—׬ƒÒ®×±ŒÓ´—ΪªË«³Ì»©Ê¸·Ù¤¤×½§ß½¿äƒƒå疊嚙骆å¤í¶†ì¼”ù¸€å¤¤éº£å¸¸Å½ÅÉľÙÀ¨ÙÅ´ëÁûÀŽêŦé̵éѼôË¥ùÒ¬öÔµÇÇÇÄÌ×ËÒÚØÆÆÞÏÑÛÛÛÛÝáÞàâåÄÄäÏÐç×ÈåÛØõÄÃ÷ÜÂùÛÛåßàåàÛýáÊûëÛäääïïðõíåðïðÿôêþþþÿÿ Èn Aú*D˜ð Ã6dø°âÀˆ3j„¸±ãCŒC‚ éq$I&OZL©²"K•,'2T(ÓåC™5K¶Ô¹eOŸ?3¾ :ôgQ£A/V¬©]Ã…+—ÒÔ3iT«îÔºkV¯¹¶ ô&Õ ÌÖ"ͱ`ÛÆ%8—n]ŽuÉ’Ô»ëÙ‡ûÚݺծß_û2»˜ñ]¾<ó>žL9ic„ƒ3ßšÊÖàe«Ÿïb…Ü‘téÊqMoTMóç„´.H¸ û-v¸q¿n½»·ï©® ÷¬ê²©‹ÿÉûu,bźà VSÝ¿ƒß®P;÷ïÊG‹ÿ>~u.ùò-›s†U=ásXß½.¾ððVÏ۔̿úî»=ÝtíqWŸ}»ˆànø%¥ßG 5s¾ÛlµÑß‚ôq8\„HØÓƒrù§’zSµs m´]ÒΆö¦`ŒP™'âˆ7•£T ÍØÎtÑ9#œÍHäŽ'‘Xbr&.׊DV%”Sv–’Ib)Ò„OJY¥>FzfŒZFfc“╹–—UŽù›;´ÄBK:TV©æj\ž©çž'²9¥›½±³ ‹ ã§h^y'rN&êQDº›,Ñ¡Û&/‚ùåT‹ •'“|6ú_›’Ê!m Mg¨¦¥Zé`§ž:ÿ*á¢Ò(Ÿ<â„3Îp¨ºW¨©­ÂºŸ¬!†êk‡FJS<Œ â¬"÷üFi,–^€)°¥ ¡¶_[쨬nªÝ=ÍVó"ˆXó› „®n¶ÞvÅí’¢‚ ®¤ói"Õ$$"Œ§œt&å¼)™0ÂJÑjpŒÚ‰Ã¯BÍF‹ ¾ö1lW¼:›æNµB¬Ð¿ˆˆsO8ˆ,Â!ÆóiŒÇUÁ3È‹I“5ÎæÏÊ­º:«ÇŠý³Ð…l3Mâ(ÂH5;óÜ³Ë 7L4ŽcÛ&wò ïÔòÊÜ—×_§wÎØd—möÙh§­öÙÇò |¬-÷ÜtVnxç­÷Þ|÷ÿí÷߀.øà„nøáˆŽVÍßÅ#N<ÑŽ)1ÀΪÛáÓ`›io½Ç~Ú§Õâü¬<ÚÉ£4ØÀCºâèC."MûÆ2x™ŸµË/ßK$ÊK£[Mpò<#¼ðï$tÀ USòåÁÖŽçíÎ?O3è6›µ>‹ ¢LBØ<#Í;Ú½õ e»Œ=‡64çGkôFw|À )LBÂ+$Í3ÅëÃ{5¾Îì¸=÷¡‡}ÓXçºfmOâãÿ":D(âzÙI_¹Ö±Í!ðQŒÎäš%E(#ZÝû^øžA}8rÛàv6èÁ~ðU]¢‚ÄAÂ@ ⌇6ÿ˜&OÊSDëìs«Ó¥ŽF4¼á·¤8œįqÎZÄ&x±ˆâ„ƨ†p0‘&ÁÞ=Åöqpfo4‹„³o€ÉE@B!²!<12"‹PZ(@š¤|äPmèÆ2’$WäŽòve $¡ÎÊ!Ô°†ë ¢Œù¢I"÷׿-2hŽÄ!üBÈœ1íG0Â4PVˆMv2!‡@Ã0„CQ²0!¤d£‡ǰ¥R• Œ’ áâ–°5 "Š@C,aÒ{ˆü¥"‡¹-rv«˜ÆüÜ»ˆ$E|2ÔxŒP„#¬á gPÐ0ÿUÐÆ]™׸,k˜‹¯9%2©Ø5tz†•ó‘ Rf$À‚„õù€Õ¢›…D£U7•É9‹ëB××H†6T2ü2š…1âã$¾° åñ!:½ÜÎëpª¼~Çœôr)•ºT+B4_¸ G5Ô ˆ„ˆCŸ€E:1‡ l&¤ÃÇÄÂú©© [)ÕV9G‘Yu lX„5ð Í̦ mØ„7·#V£Îï7j]ë1«ØR§¶uA÷Ç ‡ˆ5b\Ðæ' Ñ8ðÁ{•_³ˆ:Ö³:Ôvh•Ú` ’H §qrE"~D«j´ eHÃþ8ÿøu$M-PAŒj˜84Ñ6°¡ ã}£ÖØ™I–R…vcŸ•Þh S"©è–hƒe·ˆˆë‰Ã\ð‚4á:aÃ{:.†ÚÂF•R÷†‡eælyñ0è7Ê™À¾´° 0»i_ØÄ9Pf¹îUâìß zð‹p^‚€H+(1‡åéãÒB}WøŽwÏüÇ7˜Û²çænºdj–r¸Î¡Jy¦°ÄŒº?^‚OèÁô7„Jˆay ÄÄæ‹^ï­ñ„@Jˇˆ]Ñ.ºŒ’ñ–\übÃÖA´qÎÄ`œ5ø؈ Ðq†ØÿÈ%sG’ù•Æwl£{F씥l±ìY™€.Žtµ¬9B¯‰ÀÙÖ9æPÛŽ2âzi|/p‘‹ý©Px—˜D†QÁákšš’gžMüŒB¤xÅS¾2Œ› `T´Éô».0‰4Œ‘ ¿õ×þ¼'l,a FäßzÛ[[ø~Ø{`Jã|…WßDBrÄUýê,·z¡×Æ6$Ÿê8qb€Ð¢³ø«å ÂHÄõر[>Tc‰i”Æ/˜­á·)›ø¾` €Î0ОË6i]íå˜r¦Ž` ‡ á=m`wâࡇ{CjôJã5ÓªÖµ¨-pêVû}«fui¹ý›I‚IÓÿž4®§c‚èï·¾qÒ$6,B{o2~©Lºçüxä¬í‘×kÙûà ˜àðyÁ~XƒÈ±dÂÍõ±^Û ^C»aÇ%_¤–ÆÖ‘ ´"0ˆ ±#L6^MÈ-¬Õ›à áCÂêsybþ|ËÝ÷~ÿÁ[åšð1FÀÆ=a|@¼@ù0Äé‹{2F4b¿b=õwsÈ’Û³ßWhAcH€¾÷eÊ¢ò@ Ó$ †@O0ð‰ð0 Kpi¯ã,€à›ì0œà/Ø ‡?âô I`‚GyWy0ÈR(Gh+ Òäy0Pá~0`0°¹’2òŠŸÀ"°à¤6Àu3ŒÿÀk uðp†ŠðiãP r€ ´Ð(_`bb‡‚ (Wˆå¤Övˆ’b 6¥<Œ †Íe0ìpçø‹ËTñŸ` ErljDHË–‡½Á@úPŒÀ!×_†(‹1¸…*I‹—ÇbTUÕðIlÐsä Á‘¿ÿ˜ “ ‹pmŒ<%x‚œaoùø•"‰%y>#h]6‹(•<‚ˆ4q<ˆÀjP ©fÕˆSqнfy–gH e@[Úõh¦µÍÒ4"yJÅ¡•‚–—w€’’=Œ@FgÀŒh<½•\ ‘_5õey–hùx@ðÀ–ƒ-FùâP ¾å?S ãPàðFvy’))t(Yš,i•Ëâ, •nÉËÔQÎq5Fi°˜ð‹Ñ·ñ—_©Y¾¡<9Ó/¢Cøàqd’â7ƒ@G•°È…¿'\©D½áS*F9Ž¥g€o@‰ ¹ÿ ¤@€€°3Sõ› Abø('q­ã8ò€%œBš±ˆšSyšÒ©šöQVÜP>bÄÕPMhÀfø©@ ¿˜) ÚTS[ÙÝ£g9œ¶c‰…i•9Õõ%e‹ð’ú€j`* PfŸ` -€·ÏšÓXrÚYê³’û©ŸÑišü©o¹>%+Æ|lð À*ú P  P‰ãP‰0Fùô•¬âžGŸqÍò|¯8c*ZÚø–÷p\†9ŽŒ ›×$“Z©¢+°,0ð¢ÿP€PB(–l§ãE_Ä$Å£ÅyŸiÿ:hš…EJ¤aZö•3Ï–…©ždDfð-ÀpР ! , yƒ †‚ ŠË F}lÛ§š™k5Bø ¤Cú_Îy¦UTJÊbâh<.‰p°ûZPc@ð3š}N§@ó¦BRxi†‡ gúœ‘¤ù9©UVÉ£ŒÁª Ñ€† c$°u›`… e — ›^ !…ýLãÔ¨Q à*¤¹êåjV&'ŽxfK@ ï WÕð]ð6qrÒÐYb&Ðq²€^×CDKPÞê¡Ú¡¶z«©ÿ))¾Šj4Ù~XÓÔ [Ä\`l w xÐO0´  ठÛNÿˆ3«¦[ë¨ Û°äzy•:›²“£ße;€![.ÐsÀ sâ/Ïð =ppé°  ^$<¯J3 ÚܹÜõmßGšYóQk a Í7 úÀ L ÛN‘* AÏp S0Rˆë}X©™”ÍœPÁÑý¬ÜöI}ßýipOmüíßúÝF àOÀ ŠO >ʶË@°uFÀ¸ Ì—3©¶¡£Éáj½Öôm³@îÏ?JÛ!ÍÔ à}` Õ½›wP0<`ÇÀ`:ÏpžP ãMT@3H€9à Ú¤ã l‹@«‡&ßEçr^Æ"ÝÜù-· ›ðU¿ñQ„©-†‘éš¹ªØ£Q%3n9ÑéžÞáþéœ]ÔÆ}äx~Ú« µ|þë5Ä ±"˜5Ásqç =p^ÉP =ó„~¼ME Kê·YÄÞ/3MêaËú\À¸ƒ,¿'”²Ѽཡàð¡ Ì@ù–ö ¼ d†:4ÀÆ×wôd Qø ú09Õ4eèÒ4¼ªáϨ^Ëì͞ܣêf\%”b(çpíݶ"˜POÀUÿ œºfÈC@¥ŠçÆ—îên Vkñ.„3Àßà—ÃéoÖ‹CÔA>ò¢nò%¯ô"NÓ ·0íÑçéл¿Ë ½Ï»ñȰ—PŠü`žþëDÀîîŽFÙsR±óæt±LòÊNäS¯Ùøí'!xÚöqê©®hLÛ±À Wp¥`(&fz Í ·0 Àð ÐpËçÐÌ’ ž@D¾^¾áI Ѱ™p.çã‡a%×ᔋqپì¶NìP×w]íI®ç¼¯œ\× À'ªøGPî%—0anDÀ€Ø´àÒŠ5a4 ÈÀÜÂÿîYÞjwܲÿ½ùN!Vs Ða¿ ¼¤5 1-´€¿¥à áÏ„qÐ ÍðmàCA¢P ’„‰´g &”wë‰!Af1’ĈDâômäÈñßÇ7‚$éQ;vúH‚d·ÒåK˜.[ƤYóãL›9WâÔÙ“gO?†äx®£;Úm¼àà–H¨Qõ…zá‚>Y0@w‹ ƒGÊtÛˆªÍ&LD]°’ö™<„ϤÉÓ–W L,âÀ%-IA†°aÓueG˜#?*–9Ô§ãÇm •ܸrMÊ=;Rå˜ÔS§REoäÜÑ*V­\Ñ] ’D8Í6ZZÿ°à‰•µm™<‹Š ‰ÃJžE$Kb9”ñI$3_¾IætêØ/kß~y³È¦jÅJšr´Ôҳƒ%áƒR—(XyÛ Î›fœ ,ØÊà • b*y~³“+ˆ˜A‡B¢Ib8BÞy'¡Â¢Ól¤“Ìcìî$ëÐCë`úбIô®(‘Ò‘ ©¤ž:½¨ØÙĪèO U–⣠7jûâ*P€¨¢¨nÉ ~°¢’†£HJ;ŽagÂ7¤É¤PJi1•ª Ѳ1w*ÓÌ3YJSºIƒªX.€EK#wh‰…–ñ.‰€«.i;N` ÿln™ÅÆšØêZ:¢EhèáŠ!B‚N9-"î«+Ë0kj®K”0,µD XmuM1×t52ɾ«óV[ÏkgFZЉ3“„–©à ^´ag+ ((åÉ \t¢!zð䊿’x&­rb;tâ™ µ|I1“RåèËXÓœ5(X9lwÝœà%ÊM\oÕ›_ÂmµX8º€‚gÞÑ'–a1¹„@WÑç™P.e£¬†‹I þ’f#o²ÅæZ›3µTUÏE‰MXåÅì]”S†lªsZvùe˜c–æ_†°yˆ_fv™– .qù†@æœ[,A˜‚(¤¨`•s†°¢‚MZÞ¤‚ÿ’ˆhS"€à¥ea²=^tØfT½4ûl´ÓV{m¶Ûvûm¸ã–{nºë¶»íy§ª÷źF†ÂÑÚ¹R_/6à ¯X††“]¶’f7rÈŠ$€èN-~Gšv8Æ>ààðUâÒtt‰JýL“¯SYÝvÝ­,×½¥ÚXàs°4…°dð» 9²±gHŒT·º„š÷ÂKldcÈØÈ„vó lHC/¿Žƒ˜‹p¡‚PCÕÀÇ3ä(‡9¶Ô‘Õ<<_ˆ°˜EØm‘„@¡Er¯|ɯŒgt@õ±Æ6>C oÙˆ¥1„ A/@ õ(ˆ3¨a ¤ "ä!r0â‰"ÒP"i>-³„ÂæÊNhIÉï…1œ¡7bCºå‹F~ÿpV¡D4¢ÕÀ† ~/—ø(ߪ̓ªùÒ‘Wœä:Û©“Jâê²…‹ ÒÅ[Á‚E€Å½ƒ ‰]+-LÀÆ;|ÄVp¢=°Â ¸ì‘ h°àØ ä2y›b/)"—hÐDï´¢$MjLz¹°wŠ >oE‹K\‚`L6±1ˆVë/S`À0qk^AÒÐÆ6¶²”Á`„5ÆQG€IªU§û8Ú’b•˜èãbí2§[À"r"qi½T8¡g CÚ§žá H0Å„:0z’'0@º¼` A°Aƒ4ÇF=hºÅ«ƒˆý(­¶êÎÿÇB¥ñ«WVœå°{"S å/&t1}¼ã/ú° /xS *dRFÅ„>‘ˆ­è£ˆøF8â’ „ŠÅíø*óH’E¶¤'uL<_dÙ¬æadÕì'9ÚgxŽm4i/i,TŒ«e@&\[ˆØ.ã8,ùBâ%Ç>§±ìÊêoÛë^¦TžrºEXÇjÜÚ5!je«_’  MHbžp…Ø‘×½Š€’ø"q-™—t“Yì¼àK\®b8õ:f½h±Òæ1׬ƒ©P;ô$Š€ÂÑ(hUÈ*£‡ðBXºG0jÃ'œ p+âøŽ_úö&U n9×Ë^ Kÿ¶˜‘ä°|ë5Ïz&óV4…£àz‡‰]&~òˆ£6´¡—áX!6Cœ\!8(¯ i€C›}Ð&hcõ0r˜Èe®“ýr¸ÂÕ*“ù\:Ê6¿QÑï32qX ãÛXJ õ±V8ê¥ÅMH!чALc–\ˆD1ú+”BóÆTÉ…: Yv¾°Ÿ—üjJvXÐN ý  (ŽÄ‰NŽÖßø—Ý`ãÌ„¸X Òð)ØÃi ÄUæñŒzä6Cè=/! ë17]ØV²sd=벊ÄÖÂ5Ä.'ëîz±V° 3læ°! HvÖÐl}<;ÚçÃÐÙs¶Fj{Õÿ¬†ŒÀ>ðâ~[ÐáîH¡è ÊÉ> _"0ŽTC~„"6ÝéO‡zÔ¥&ÊTÍuò/eèÚ&øH[îòÉ2…2ÿâ/˜ÁŒ_`CF+ݵ£õ¡Žîæœæ‘#áG5 ¡Ípxsœç\N”—Úç]y¶Ù™dë\^ƒF&Í»¤°«#%yÚSªÓƒuàœbG›>î6ÂÒ1RQ‹‡Ô|⛶ʇ\õn³œÛ{vµ·i½ðzEÝNˆdªôCòŒ˜pIR.>ôN{êÛüàûìùÏÏ®]ªVd¥¸X©”/å GHþaŽrð·2™zÛÿ½yÎ[ý½ßÿ=ïCDzÑ÷d$þé{»‘}xì#Å/Gì÷AÖ/É7§Ù†ìï(ZµóÛ|÷½?ƒÇzª eIã¡ó‘jÂÁˆ8„!=’¶¾gÕ¼-Ó¹®þòWõ>Ï/¯¼û4϶ŰDp0Èøãµ>w©„ëô=üs¬Â¬“"àã‰ÿk<”¸%tÊ@³Aµ TÀT{ÀÄX?ýË¿ TÁ ”¬ì;Ì:•ˆÁ¡³>üÀx±³*‚'LA ä¾ïcAУÀ!™j£"€sÀÄA€+BTÉÁÞ2!–8A!BÂB^º-ÜB.ìB/üB0 C1C2LÀ˺×1üÀÿSC²‰?sš¿ÉÐAó¢¤&<>4\ÁVkA˜ÃB˜ƒŽ”À›%¡¶3—rIÂ9<åk•–`¤: =Ý‹À$B>$<¸Y$€ƒ¿è¿¶ÛA5QÄ(ô¶D¬P¤D?DA$?I¤¿js<ëë@„Á‘yŽ‘9BÆrRôD Å’?¬DHŒÄ+ÆbbŒYŒAR tâ;A—¾óEÿ²X¦^¬Fk¤0=4ÅSÄÅUÄÆñ;Æ&T´¹AÆ’¿#¬E]ÄÀþãÁÝŠŠGdÅmœDbÜC+ì³C”:tDµ@L•©|4Dn42›¨ÃmS¾SC2`¤Çz”Ç<“) ²,¿¶iÆ^¢ÁÿZ—óÈò:“ÐÈudŸT„ÇxTÅ„äADÒ»<Àëk¼ÛëÀµ)Aj´@ iCD"=ù3Go,É_ÔÉœIŒÔ-)ªÁ^ü øË¼¨D€Ô3 Ê[ô Ô!²Ûs\H…ÜI«ÔHËû¥Ìó»QrD§jCJR,=^ä%U±ÆŒô;<ŒJœÜ?Ž¢Â3ÆyÔÆºL¸­D½YôÊ”ÌÄ/AÆÛ#Ëk´°¥C¤Ie´Á«ŠK]T“PlL¸ôI‘´Ë ¼ ,E”+L~¤ÁikEsÌLTÄõr@©È<S{@œÈ-ÊlÈnœË`l@ûËÅNÄÄ5´6ÍÃDÛ+ÁDâ’sÜ’ÿÜËÇÄAúcM¬¼ËÊDHÉüÉ£ÅÊKL}Ä@±DJ¨,H©PL´´>õjÉÔ¡Êæ\ĪDN׌MºÏ|ÌÄÚ­,ìÌœäÈÝÌBí<È¡¤C‘ú ï¬Bñ,OT|Í€,'”Oõd¡4uŒB<óDHµ,ËkÔ¶ŽÌÆÖÜOž”P” Å¥=#”Évô­íÔ»Li,¹uÌú#MþìÏ«Ϭ¼LÇËSµ’OÔ\L©bCÕÁñÓ’GŠQ¹ìÉå,²UŸ5Ñ<Ô“ìÔ»ê@Ìã»Iß\IÒ»ÃuüÔË)MQ…I!…ÐðÌÅÌM‰„ʇT¯F2H%ÎĸC%ÑÿCªÒV´¶ÝÒ [¯ðÓRxúKp”Ê6<$Ì\ÄQ=ÓͬÎÜÓ³*åÄéÌOòŒ"œÓ݉™0J;K¹ )3ÕÊÔÄ<¤Ã¨<ÂÉŒS T›äÓA­ÌÒ7ÅÏíxÔcŒTÕE/5É:<¿}AäTÅP%„I5\SQÕ:KL„;U†¬;EBœÏÝÓÏ’ã;X|C7EQ\=T$½PBåS_…" Ó>D ²Èt¤.5ÓJEÒ³”Éœ(ÍÙhEÑ yOŒŒIÃdV ½?^•Sý{U’tHì¬Ãq5KG”I>eK3DJ„$w=Ó¬ÈwM­RFMØcÍWëx?ÿWÕÔ]´Ö cÓ)ÔÇμIj%IØo¥Ô¡cÎ.¡×DµÒÃpF"ÛÑEªØR|WŒíÓ|Ã'Ë·ÌÒÍÔ\Ù•ÍPÓíl-¸2,Z£=Z¤MZ¥]Ú¢…M•µ<‘åÖ6QV=ÝVŸÍXlµ¼ù3ÔT HµØ«ÅÃÐÔÁ¡ÕÏ”…Ú5Õ‰íY€UÍs½ÏM\$|Á‹T$étÓE\Ô·R¨0 :Ù"EÕ+åÕ°5!)Õ`ÅÒ…=§òš–äJе}WmÝ: ëY|íÔÁí\Ï=ÛÒËÂÔËÇ¢ …ÆŸËÊýÜ5µ0ŠÅ´•Øn=ÎÙ…SËü»5=g5ÄÕ™¢ÿ´ŒYG-?§PmÑ—uÃ#Á‡ RÐÞÜ5ÐetI~;Þå%¡^Ú}Û(ô]ä=/å É[­] 5¦ÀÝ%åÌœ}ÝÔN9TSÉÌSöõXA…_aUNæI¬ªÄ”ܯ4?Ý ÄÈíÝv=Òĵ\üeÄéEî<Áå½ß ÄRqµÑNLWWDÛ§TL4UÔsÛߊVÀ]Òò%_Áe]âåZìMäU9úmÊg-Ð^¤^rdKVÔ¬m2«½áa]Û5[+eO®Öfʼn‘ÁYáü»ËÜÙ FÀò;î(ÕæEh\Ÿ6á&O!®["&JèeÙܽÈέ‹¡íÍSãÇ1UÃ[ÔZ ¾BUFêÐÛ%EÜBbDÎePVä ½Ð…Øg<‘%&ùtc\æeå7¾]_žT¦ÜÓúÝÅìUãäcÞedÖeeæ°›ˆ0g>Óæçf“ªæÂ eOFçVçÐmfS&ÐYíÑ abÆÑuÖætÆç{ÎfÔ•ÙÆ’× \×ɢ煵åIÖXíÅæm¾æ…>äóì é@èÿ•hn¾eu•è`µeÖgcfè|åb>gQœÙØd¼è•V~VèVé}6ds–]),Wä {iÎõè–féŽ~Ú—Ö_‡\$`-érìg©Õé›Næ†æè£nߥiæ\“ê¢Nꔦêª^ét~è„6I’&Ö#»èÆj¬Îé±&k³Þiàµiç.ÕUoæää¼ê³Fk¹¦ëºnêiD_“$d+_µ6jkFê²ÆkË<éAnÐfZÅ^lÆnlÇ~ì¹ÙêÁlÁ¶k«ì¿æ^½d êk:lÊVêÐíÌ~gˆ~j]ÝËm”ŽkÌníe^í4uåøòiœ¶lÖ†íÊ&ìÿמb$dû…`±fgÞ–mÜžëâ&k)î6¶íünâíÞöm^î&mÕÞméžnçîíÆê_–ìܾnî†nì¦n×.oñè[¾íînîïï÷NoãNnàÎníïãÞoþŽïþöoûp×ï×íü6ðóFïØ–ïùVoüNp˜^päp /í ð»®p /p—ðÿFp¿búfp×pwpæñwoïðwñ_ñ—ñ ‡qopßp§ñ7ïÇñòèÖñ÷ñúÞñöòGqò>ò"/q"òÏñ%wò*¯qÏp)Ïò'Çp&or÷ò/qòÿs+çò4Wó0Ÿr*ws%gó6s,çq-¿ò:'ó7—óçó>·ó/Oò?7ó;Çs$7ò5'ô@÷ìFUô1÷ë-wô9§s@OtDŸt=ßsI¯óM¯tLGYï6ôC‡rQÿñLs?ïr8GõNuR_õB÷ôOÿìYoôV§NÈÎu]ßu^ïõÈFsNõTôKv`ô[öd/ubWöbGvgve?õ3?vW‡õX_öatjÏvm—uh—vl·ôg/÷f·ök§ôtWwUgwS‡ômgöx÷p÷Iôuïvoww?w{7vtçw|_tx§÷|/xƒx}tZø~Ÿ÷ÿ„xyø‰ÿv‹¿x…õjxЇxs¯xŒ—xÿø¯wŽïø/y“xrŸv„'ù‘y”Où“‡y”_ø{Çy‡¯ùŒGx_y–¯u[ïù†§ù ßù£_ù²}nOz£ÿy¥y›Ÿú¦gtçEz¨owž—y£wzªçú¯{¢z±/{®ÏzWy­_úPù³—z³Wû´÷úµ‡û·/z­§{¯z»ßú»'{¹Ÿ{´ü¾?ùÁwûÀG|½ßû¸_|ˆ?ü™{¿Ÿ|ʇü›/|¶‡ï¹wü§×ø}oüÌ/ó¼·|É7|Ì÷|_wÎ/ýÐgxÀOüÈoüÕû«‰G¸}ÜÏ}ÿÝß}Þï}ßÿ}à~á~â/~ã?~äO~å_~æo~ç¿ý•x„v‘~X¡þêŸ~ìÏþ5±þ4áþîï/“ðÿØÿ1ë@ÿô×þïgÿËPÿ÷wÿ3ÿÊ ɰÿû—ò×ÈÀLjGÿ,hð ‚2lhp¡Ãˆ!J¬8¢ÅŠ3:ÜÈ‘¡Ç C~<'R¢É“SªlȲ%—0 ÊœY°¦Í8mîä™ó'РB‡-jô(Ò¤J—2mêô)Ôˆì L5À»™¯ xõOŸ”´rõúÒU}-_¥8u@ÛV ¨ý¨¢tu–=¹— ÖaI:d;ÿ¬€…sër¼ XïÀs}9N…,7­à„ArÍ*9qUÌœdý ÀW©¡n©O5%ÿôž`öäëT±õ¥ yn€]íWÂ?R @°ï¼ÿPÚÍñœŒ0™÷\€±Á¨—]€TÉ—slþüßwÈÔ­g `ü}ÛË¿‡çÈ;j<%ëµ6Qt¨°%T™VÚIÐ…Ük9x;²MÇ\©Wz‚Iè vþ ðÞ&½öÊ{ÜV‘r%êtšI%ZÕ˜p½¦;ì€E"c8fÿ<ÒU‹/JÔÚ\@Ú\FÄu\k .8ŒI‰å+èÿ£àB]µ”]â?[ÁT&¨ù†e ‹5ØáƒÕI>Р`âq$£o)Vøšr ”a›Çá„íi\™¯ Ÿ ¡‡V\¾i˜¨œ&÷h¤ g[mS…Ù“DaaÙÛ@Ê­Õ]roš6&ïÝÙiœíyT]ºåG%†ÅŽ©ЬHs"jlX¼êùž}ä W”Ôýóhmn½—Q*  –>¨¶­´ …;.W{)¤c:è©`Štm‡âŠhkb9;H{²VÚž.ŠTâ‘æzšÕ9«¯‘ .¤!G{–øeÁJF$À¸"ÂyÜeõÆ’}€MÌÐÈ}ÿ™š„žT[ƒ¨ùÉ]©×Í×]—¬Ùë0qsjWÛ#L­^ÎË^±A¦_x¶5Ûs¸¯-ô´æ¹(ôÑ.Kôš•ê (´p±iìÐö-X›•R %Be[IxØýÕ’Üu-8vÅgWõ¯JR¦wšWŠÄN\þÈXS&FÊZˆmÅ)ýh–r;[D8A.¤xÍÝu¸W•gNlF”þ;§›$:C¦ì±Ë>;íµÛ~;î¹ë¾;ï½ûþ;ðÁ ?<ñÅ<òÉ+¿<óÍ;ÿ¼îÊ•v)ôÕ[}l)™{=÷Ý3Ÿ=‘ýg R"&¦‘})‡Ö_ã%ýTm9‹V¾lÿÕ«÷ùëo§¸ – _›ÊD0hÁ*XÕØ4JA –q(±.®qç4¶1ñ·¿ b€”M›ò¿6eE€©P ÷®s™«6­AàÑX+œ‰Ë8–ã ­¾mi'Xá›”ÂE@H}p…j›y8›Óp';_ú ‹œ–Ã)vP{ l §ã P‚Cª !XΛ¶¸+CX” w¨d&ÓÈ,¯0«¨(Gãíp{i$àX’X&”i* ãQsGm1Їca SÇ92’yçxD]V³7b=Â,?ºÏ$M2FÁÉeAØB\š «»!J”<%*¥ÁT²²•I…ÿVéÊYÒ²–¶¼%.s©Ë]ò²—¾ü%0ƒ)Ìa³˜Æ<&2“©Ìe2³™Î|&4£)ÍiR³šÖ¼&6³©Ímr³›Þü&8Ã)Îq’³œæó©Ï}ò³Ÿþü'@Õy€´ =(BªÐ…2´¡}(D#*щR´¢½EK:§Ž#ý(HC*Ò‘’´¤&-(F7 Ž~„¥9)Lc*Ó™Òt¦)ÅÐJâÒƒÔ´§>ý)PzÓŽê´¨ *R“ªÔ¥>t¨-ÍiNvj¦RµªVjF¡j©äª^ý*XAêTÊhu&\%HXÓªÿÖµ"t¬š*+LÎ:¶Òµ®_uëåàšÕ£Úµ¯~E*^+"W©Õ"=,bmº×¨¶"‰},dEX‰ Ö!•eÈ`#«ÙÍFt²„ml\=ÊÙÑ’ö žµ¬^UÊ×Ò²v´§mÈe1 Úˆ´¶¶›}­lg«ZÃÚ¶·‰ÅmBb\Ý6Ä·Æý+p"\å·(Ë5Ès¡Û\¢2¶ºÖ5kjqʔ脻ÝîSÁûVñ敼‚åÈÒ«Þõ²·½î}/|ã+ßùÒ·¾ö½/~ó«ßýò·¿þý/€Ïp¸À>0‚¬à3˜¿n0„#,á S¸Â†ïƒ/¬á s¸ÃÖp†?,âi“¸Ä&~oˆO¬â³¸Å N±‹c,ãÓ¸½0®1Žs¬ãßxÇ>þ1Üã ¹ÈF¾ï¬ä%/9ÉL~2”wìä(S¹Ê-ž²•³¬eo¹Ë^&1–¿,æ1#8Ìd>3šœæ5³9À×!ù,W.vЇ ///QQQC[wdQMhhhvvvMx¨fuˆiw}nŽxzˆxy™m|¢Y‚®{‹z‚“g„ªfгm¶y‡§rްz—¹‘`3©X"²c¹n)ŒPY˜NM”MP€gQ–{w¨Y\³|X¶owÏpËv)Åu4Ý|$Ú}6ë}'ëx8ñ}'ð}4Ü[\Ö^aÏc^Æ}GÆ{XÜkOÜgUÖyMÖxUÈdiÅksÆvgÊryÙdfÕmpÞreÙwxãWVèfIåfWèyHéwWãgfåopæsfäxw†oŒ…x……{˜“m†–u‹™~”¤l€©x‰¥}‘¶y†Ê|ƒy˜…x®ƒ\¾‚I¹‚W«†e®‰xªz¸Žh²q·”tÌ?Ú,Ö‚:ìô…é…'ç‡5ì‘?ó‰(ñ‰5ò‘;ɆHÇŠSË‘YÓ‰G׎QÛ‘NÕ”YÊ“hÅyÔ†gÛ€{Ù•iÚ’{Ϥ}Ý¢kاxìˆGê…Vè–KèšVñ–GðœVç…jåƒzê™gè—wí \ð [ë£gíªtí±|ð¦gð¬pú°s‡‡‡‚ˆ–…‡›…›œ’‹–––‰‰¦‡–©‚š¹—Š¢–ªžœ²ˆ ¼š¦¹¨€€§…˜¤”‡¢˜•º€Œºˆ”¸œ„±š©¢ Ÿ½£Ž¸§™§§§¨¨¶¦±¾¸«¢²­½¾²§¶¶¶ˆ¢À—­Å±Ç£­Â¨¹Ë³¼É±¿Ð¬ÁÖ½ÀĺÇÔÇ‚‰ÊŒ“Êœ‚È‘˜Ø†ˆÚ‘ØšÕ“•Íš¢Ç¤ŠÄ­™Î²—׬„Үر‹Ó´—Ω©Ë«³Ì»©Ê·¸Ö¤¦×½§Ü¾¿äƒƒå疊嚙ꩈå¤í¶‡ì¼”夤麣常ò¯¯ò³³È¼ÄÉľÙÀ¨ÖÅ·ëÁûÀŽêŦé̵éѼô̦ñÀ¿ùÓ­öÕµÇÇÇÄÌ×ËÒÚ×ÅÄÚÏÔÚÓÍÛÛÛÀÏàÃÑàÛÞáÝàãåÄÄäÏÐç×ÈåÛØóÆÅôßÊö××åßàåàÛýáÊûëÜäääïïðøëèðïðÿôêþþþÿÿ øOÁƒ*hPa;U,¨R§OßÀŠ fܸ±!Ç=‚)räÇ’&9¢L¹p%Ë„._†”ù2&M† SEŒ˜ÊÆŠ[ÞÌhshQšGe&U:ThS˜O.}:•eP„îØÉÒ*k»}`Án¼õbY„dÏV5¹–íY‚mAÆ•û–h]³ ÙÁ’Õ®,Xì¦U88já»jÏ=©¸±cÄJ¨e}©¨ª¨ÊAªË /WMºtèѦS§~üVrGÖ‰aCÖxÖ2êË%BÔ¬Úvïߢ *;ªk»wK…¬œnmʤ[Y‘z+á·‡§Î®}uòâÆÁ7ÿmu6Ü·¾C·‹´ÓB¤vØ»÷æ.Ÿ´x£Ìïß$?Ó<ÎçÑWÑCM4œ€õA— wuñwž~HA¡9˜Þ‚§aH‚JXS~ß…(¢*¨ap'¢˜âe²äàƒ ¶è"…¢gâŠúpØ›;­¨ÒŠ9âˆÑˆ±YÖ‹5ʈ€9 `‚êTÒ^97 ©$I Æhä‘4ÒVV+ê˜Ú*•#]%ð5éäZ¶éf‘­eI¢O:)¦i•j®y¥s[Rõ' s2ygwÙÉãM7ßô–'gðy¨|ƒª$'œ˜fziS`¦x[<†"*!÷ŒYæ™iNÚ]¥¯±ŠÜ›šºÿŠV•žuO¨ÐlCˆ Ѥå”´®(ërÖ+—4–X§¨Å#4É#ˆ!ªñè#Á¦XlŽ·-·…~™-†¨yó,P¡–ŠèšlÆÙ­·ïî·é¼7uz"jÒ âÍ=ÝRH}ªj÷-ŒÇ ¯¼ÉÒÙ'Ž·E#êÃñÌîaðl°ÅKŒ¬¸Ë2|™7„Mij;ð˜²Ê*»p˜ÀÉŸÉ+§„d’#\3[êôìóÏ@-tÐ’côÑH'­ôÒL7´0z䡇NWmõÕFW4ôÖ\wíõ×`‡-öØd—möÙhm¬aãj7ñ”*¦¹ÓŠÚ«jw2Î9OÿØ·ßá²Ýq‚*¾Ô4# <–íê>· B²iy ··—³ìîÎ: þ²|ýм+4£É£Ìé§¿SÑ=Ó¾xO|ù͘ÇZqæ{^9h¡Ê¬O!‚S‘4Ê4ó5§ûÞ{EÀO^Úî¿ÍNïí¶S?›ËÐÛÚzE¯ SÑé@5£Œêú„ÍèóÉÎ9¡›·_}Æ?e¯vŽCªðú$?üø@.!¾ÛŽúpg³éÁï}3ö4D·PñÅ(ñŒ‡ö]Oa¼Œ³ÿüUA¡Ht¡7ö@†&’¡5´ŒéPÇ¿éÐ}ÃbÄ9l9„‚ð‡iœŽ‰†èF!È`† ¦(<žþêsE2¥‡Œ!Ç>— ×5*AðÁD5 ?¡ ¾ãÃd™9Š|”Âc«$ù*-†Gºóâ³â‘ üÀýúƒ!Y‘@„ÁÎmYÅHîЇ[Œå%)é–¦H$  oè!D(Ñ B„A °Àu6h™8VÐz£%±¤¹6;Þ±e]\‘< ¡È=Å(SD$hä š ©£,sgÿMÍqÑ–8’‡üˆ ¤ |àÑ™‡i¹B™Ì”â ÷±‡MK]¥Ñç,-i½}Ró"mKP1B%&îaßXc°`Œ×ÙA"íMäPú:h™F£üôèûÙÑz…`Šê4ÈÀ‡ŠxH…9Ñ È"¦ªùƹ*bjÝô£‘1`uºS­Zå§ò)WÌPˆhÈᘠÎÎP UGª6eU3ŠU‚q´«9å*O?2¿Ýã\ ʰ‡6TᘙP„Ô`Ÿ@553ýFMt×­êõš•µìÀú:œvôèƒ@¡ ªP/xA eȃÔ€ÅQÔ­Å/ EÿéƒÒ5V· hD#bt•!0jŸº¢ì•yDnrãÇ)°ªf=€Ä[DAøÎx¨Âšá<¸!%3Y]Àƒ2ppÚÓ>ã5¯›u®©TAŽ6¬¶¡†ð]¢xÔ`è¼Q —¦ÓámFhúk&  ÉÄОŸ5 èº|8~Ì‘7€‰ºføîuÞÿ5˜g¨Fï8Æ<-ó(}ì ãÔ.5©§™q7(m]+Ö†n´_äjä˜Ãâ` cð@9ˆÃ0ì`Ä;øÁ†Á4W‚®¨ZDމ ´‚èZºÚ×Îö¶»ýípçZ5›;¸¹×¿ Âã¤ÑB*Ã|¸ƒ®µN4_F:;9{i(Ž*œ÷Ûç;ŸûF{þg™||8ÛDaŠðpþx Bö ¬ ž,ÂÌÇ«LÄ/34êˆ&šà„Gà;zúÞ8à(Ïq˳;n†Öƒ2ø@)PùP†8»"Òyª>dañÒ˜Ž8àfÞÝïþñ!”²ÿä}Z÷{Ýœ=ø4î1ãë( ÃqúÝòˇèD¤*2Þ¶’Æ™s”o‘§j9Çsh€Ö–Iv-ÏLÍ┄ðƒ(@@ Ý9¢¢hP æ a Ñ" ÍpßcxÊ 'ølH€à—_¼ÇbÌ5—·.¿äy)0ç È÷)P‹â/ò„ ™°©P†:2£?Ò ~—i¸7€Yå}у½÷7E®ÃzPc•hðð€(Pñ€r!Uo ©à ÄC&fú0A|çB´[Ý—{‚8ƒ°hå— ³IÏsÑ`fÿP… gð†„ y Yl ­Ðý’^9òa—‚ú0ET¨zÂf…¦!3Z¸…Wy°ø‚‚ñ{ÑàDlômô!Ub8‰P‰ÿ zP Ž h€[Of¢àSŠ,$€ˆi¦ÑpàƒHˆ–"~©–…×ö÷p²¶h´!¤!Ððn@‰½˜†¿À½ ljÀ`dSD y¨Šç7>ˆ¡Ñ@à àB–Qm\Xˆ~‹™_ &õ:†@†ÄÕ6ê@긎ÿ` $Ý NHE†GT„ Q?ú †À=—O:‡ùŠ9ytÇG¤aLTTÐÿ Hf‘‡¨ß ½P‘) £gΣ&ò`‚(¸¥[¦!W@’ø°’AÑ.0(“Z “](‹ÿpƒ¬#f@Ððd0W¶e+„°‹Bi‘u°ZÓ•h_ø¡B2(iýÔ.XiW^y\}é— ¸j= ÀcNf”«3[¿•ƒ#ŽyÀmi‘[ð‰fp7ó”üØÞ ´U>Ó ß Ü€;zI1¨ÖŠ÷OÝØC´c)— K %* §PMTF©Žà‹1 é0gy!Ʀ‡½ñ:-…øàÄ’˜Ùˆ…ÜXƒäG“åX–3T.5buCXdÿpNƒÀ ”çð›š0 g  àVœ Òaû¨ ×pð•rJÂ"-ù—S¶•\I“1˜òQUØÀdEìz¬oꟚ¬jóÊ=õš!söDð û:VÐV 5=Ò êÐ w °z ÿà± áå;-D±­´®ÃZ_›ª]²@Oú,Ì*j§ñ‡L—§õ RPÁGqŠ@r`H0­ ›P<ǃ®ömW§ýY¬ãwî ¯)ñ…îõ0Ïç‘¢xð4`Z'pm` ?-Ê€@ 6 `æp °Ht:¼š: â¦28´â—•4A§vª˜¢q O` T ZWð!0€ì±† ÀI`çð  HÔ ÚB’jÙ œKWA»±lû®Åk¼sª¢¿á ‘À PO@…50½8à °8  §¬iu³ÿË „; ¶†¦0ýò0óˆÃ»š{¼ËWÊ[-1 M ÓÛ Š B@ÑØ{ Ò!|ÒN²  p @Š·‚Aj…æbö$*zUíˤ•«¶kkq×3BGt ì  ä0 ·PM@°â”°/PàPF3v7ÜJ€ GÃàÅu%̺`4T F Gw5i×ÁLÜÄNüÄP,6ì…ó›åP«Pðp¸ê0 Gà2  p'ìAYÌxîCÆP¾úx¾àV¯E:_L¹ ¿x,¿êY×¢r®Õj#líà O€í6½"ðº"ÿpgN•'Ù°[ÐÓQ ”ðÊpdåÀ 9.¤ŠýBñyÁjÁhk¬ñKƒ»|iƒm] ·@E¾ –БànàDRà ¶ g@àˆ÷:z l‰Ð’p Ô@Ð5ÐÉE Š8*Ð D ë§Îæ- :+ì=µ­Íée.ÛôþdòTälýNPýÔp Б¡ñhºp <ÿ©,ÐE`|}'NÑ0…Ê¢¢"LM¶+$£î±=ÞëN¼ì¸ôIÿ뺽"dB%äÀï¦áì! N€ à$Yk™ÌMà §hàB`| ïðÑ@ BÐóô˜†° …©.½ÎŸ“Øå ïNOéc­÷é}é!ßÔ— ²€ïN•æÐ¼Ïk ¸@ФñÀ‘àŒ€.±î=ñ/EÀ#\“ãè_)Þ³h÷4=Ø>Î÷¨Œú’Þ¤´"‚ö®È®ì–ÁÇЭ –"à Tòa€@t€ ÓÇ »  ËÀÌäÎŒÀ˜ÐBàîàÞâBÀ ÌšqØ )GÞ^žúàÁ£ÿ/تOìïMß÷;ý2êÙ’­ï¿¡éœ°Ù À"¨ø@àæµ‘°`°þB»<8µr×Lˆ"€‚ˆ°Ñ"G?~áMßEŒÿmÄÈñâFÕÔR]H”)U®Üx’åK˜-cÎTé’æÍ6qÒÔ¹ÓgOŸ)3’˨/’ ²T9 ®èS¨úˆ>]eAU+ xÂd#‡2j~R¬A†,Í™UÙQÉšAgUœ¸ñKÆAF–,³2Ï˃1N½è΃v-8Ø4çŒ,è«Ê€A9YMj ÿâ%ÛÅPgh)ÂÉÂÞÊäÁUÖLµ¸³¼ác–A!|I“F°æ…{\IY²÷ï™S‚oL¾¼ø˜æq-úÙhÒ¦£Æ¨šµ×åÊYh"¤™5¹’@â ߀+B¨¤)"êá5J‘‡¯ ˆKš¢vÊîŸÃ:2 ½IœÌDËLT/¨+kq&öRCÊ•¥pJ>¨è»¨*UVÉj«H(xB8dÔHK XÀ5h„8|JžŸŠX˜áf„˜ÐwÞ‰Ë:o2Œ¤2sBQÍ5_¼ÉMÌÚ\Ó1ñbÄÈ >û¬4s„JJT˳&—%4ÿ;Î@£@,"i‚Zh¡‰%\yJZÂá‰GX˜P¢OáF1¥ü&Ã.É)îR$Î8U”sÖ9K¬s³§ÚQÅ‚TÊé3*;kå*#‰€Õ"iG8D`@ ida…PŒpÍ‚V2j…‘Z° 6É¡rÉõA†ŒDÎÔíPÕHU4AlÖô椦{!³·V”ò ×_¾(Ø\m¥œ]'‰Ë˜ ¸…u\£€O8Mê"»ðâÁL 8Hex“A†x€c†À*é¥ìμQÕyi•E»Û—ßѳS`ù¨‘F2MÛO•ú(Pæ}TiX’H@–}”ÙÄ‚ÿUv´€‡âÊá f.ÒfdiB»CwAú¨¨Um}õæ™Ûv½Uã–{nºëF“¼óÖ{o¾ûæ[çA¿ón¥‚Hò¶†!'Hœ¦@‰%* …ž¨ ¼+©!Ô·‡nÁ»—‘Éæ–hØ^»c—}vÚk·ývÜs×}wÞ{ŸÎÌvæ*äŽfLÓÚ‰[„-Pøh1¡0F©'®ø‘‹õ±ë !rhˆ\®ßiF„ÑÆ5츎å³Û,D³án™é¯¿Öš±“jxÓÂFšœRÉg?ª±@%Ô!'(A O’˜–ˆ€ÙÂH+lPÔ@k ëÿBŠ 1„A„y `ÒÄ’¸µ‹lò Q»Ä“?àÙo~/ÄYÎn50þÆR  |Ô1,‚è# bR*yàŒI†b‚a‚‡8ÆÁ>Œ°j%›”×ÚDÿé¢kbÓŸ*1â3 ñå,•QK}ˆi¹È.›Áð€99hA0‡É0¡ ÈÜ"!ä!qâ’bŒ¦ ÿÕB4z2›ù¤ÚøÅÍSzó)ÃQ%°Ç<ùQ€¼å‚0â¿]ØP gpÁHGv‘ fࢠŠ|MˆaŸ4­Jœ&T›5„(ù'‹U¬‚O•c*ôä€Tø¬:ÒÀZÈxSi¼ÃAE0…%l`ƒ'ˆÀŠ ú`B†.‚Á ò¸H@óÁB¡I~ø:hxzžœêô¦¦ô)ÏZA@lùIŽ­ˆD$Z¡Ê¸HcaãêÇÂX@ i3šAÿk¸f!ðÂ1÷`ˆh|CˆhUË2bS}éÏ ;i¨ ç*C¹¢ö2ÝÄ‘]z%‹TdµÃ+^ Ï)1‰\ÊÀ–° ¾Jâd= 0ŠZ|àWˆÌÀfŽã¬§r_&ë¿÷u'¥u•jÛׇ’h¶¦© ŸìRµ¢PT`;L§2t!¦®¥ó úPÍ-ä‰&„S‘•„> 1×è‚ØF7â?͈D»6Cp«XĶÓ~7µ^mDUÞ‹ì½ã]ïÑléÞ¾!ôµošqUVî—“ðï\A|ƒº+<ÌHÞ”`ÿÂÞå[)\Gŵ²€­l-œÃÚŠÿé¶¹…5(‘A­a"cR‡q‘û0b‚0Ä=:¹²õ±»Ö}°ËrŸîJ@ ¦—gJ%S;†Å‰¦æ’(J–Ë<1è•ÜB¥º/ Ä€#ˆàjÈB)tù”€y^ e0v|c3ë¼<Î4M‚  XÞò( [T'ŽòÐ%5¨Áœ =aƒ^q Á5DÐ bPC¯o`ƒ"Pcõˆ©ˆZ¯ÐbÇ­›î1šÏŒ³žÆQ¢DýU’ã2 «”㮕´/‚Û\2§ÏPËøp‡>8cŸUX0î‚'xBóhFg·s6µŽÖ¡?æ·B™Ýlh‹·ÍÿÓVoQØ+&dadW¾òv{9´K\dAÒ¸µº¶1 a öÀƒ±šy(£3‘Ü8’Âñtš´*Çô¿]®˜Oç°à9¸2n5sÔõÃzs@6qëTœCf6~‡2|\!9ßgò’£|ß0Õûíož \çÓøk­ l«BÛPÖÖÁíDƒ¡HÃ4ø€‡>bÝí~w¼ç]ïjæ}¦7BLAélM~»;ÆŸÖÎõÃ÷ÏçP^ÞðáD‰–¢³>äaˆ=“ aèµ~ìa{ï°KÛÉÿ^u«§ë‚g¨ág.óõ.žCîâ˼Û"ôƒL@ÿ‚bç¡{ {0÷ôð Q¸âÑÿâûÞbã–ô„»jž>Ë[puÝ›¯¿ˆµï¨×Yz)5ÀàŒË ÛR#\öòú f³±ªÆÏ·ñüKoZN¯>ÿËf=\áÈýáÀšk¥ñ¹'x‚­)g±„óA€†UAð²3¨¸™ ¹¹· <½ýã¿ô¿þK3×C<9û•œŒ8F°ÐQ@`@‡[¿AHuè= ØÑ‡}ÀÀ ¤›1K¹—óÀ«Â!D½ÕZ}[‰z‡y؈yb›&àk°†ys¸†j˜u(t¸ˆ'$¶qh¦1z@«¨£1ªÀÿ¨[ ­£>ësÃ8|6ñBBœà‡yÈÃyà– ‰z°†w´@ŒŠØ‡|gâ‡܇~ø,”‹$\£0ò‰ÏŠD"Ô¿"l½m"<Õc‰?´†(D¡ ¹8†s°›û§¾ƒÄ¨³?šÂ— ™²DM Áë ÂÁ\|¶Ã8‡d8Åæ£?úƒÁPCç+½¹¡Å–¸·Kƒ‘yQFÄÅh”ÆNÜ)#ä?µª¿´qłʉdôÆ1оh2›jƘ˜Å93[¼ÅWñw|GxŒGyœGz¬G{¼G|¬Ç5ËÄiœ«rÅdô¬§ËÁ5œ´§#Gf\™õÈ@e»DkÜE:,¼tL6|>ÿ€„º ,Æ Ì·ƒL!e´=ÛƒÆñ8 NJÈI¼>ˆ\¹‰¼•¬´ÓªíHFº)‰ HZ,ɵ2Çi*ÆjúTÇk¬ÅuTIj ¼Šl>ûóÆìjÅù›¿¼kÃ4Ì.KÔ ŸÉ+ɧüIŠLI–,ʇäJ””0™â$c\J´a•‚Œ? ¤)s¤J²Jì:£¬tº® J]Ë»äLj¸±LÃplŸ¹G©dCWÌ1 ,¶“t¹„ ÄÉêóJ¢Ä>È K¾Ä·`,=ËF§Œ©cLKQ­s £ž 1fŒ»ìÇÓ¬F‡\MJŒÉHÇ™äAV<¹—I!¨ÓJÛI§{—h MøsIÿ¼”ÃÉÌKÕ$ÎÖü¬¶ª›I“µ\źÑM¹Ô$Ik̵š¦ÑÎÔ4ÊìüJ½ÔÎÆð,Êh¡m,MåÜÆëœIíꈗÑ$ùkŸÁ°©ÜŒ´ëdG4ÊàÄÎðjÉ}lÍ÷|M§„î€M“+KÚÇ¿-jjÆxqOµ,ІdÊW¤È߬Ëû¤O‰Nü„92Íq”è3#™DK’`KûÆô4£“¬@šŒŠÛ$BdGϲÏîôNN,NÔüNftK ÌÁMFÍ4O¤Tʦ\°‚JB˜!FKÓH†L•Ò|Ju$¹µÑ(ÕÏýäNYDóKµGæ¤MšRN餴TñK–±M¬ì,©»Eÿ(ÝKLœQÖ”Q)õ4×l°’ ³³ìHª|ÅØJ´:KèC!K/-ÇItK…¤Ñ6S+MÔEõÀ m0&͉¶Ñ?•P÷È© LckRMÿ„Ë*}SãÊ­tÓ°ËU•­Ö‚Û:=¹H„(a5ܡŎÑÍR­$VbMÚVTSºÌFh$¬ÔZ=]ÉÍGþí_ÿý_``ÞAÞÇõU¼-_­;ÜqÍYŽT5Û’Ҷıuà‹ÕMÏï=^v\¢Ú†êFlÕJ\ÕÍK36ÐÊHLÅ]æÛÞWŒÅBuÆÅRæý²ÃøTÎ`7u[Õ• ï¥am«TÏ“ÊÙT_ªÜ4Ù]sÕ`£½ÒÌÉÙmTþØÕe]ñEÜ6lYýéÒ1[Ì&µÎƒŒY+†¦ÿLjÞƒTÞ,ß3áQ=`9ÅÀËEP%åÑêÜ$[½Uy¥ã¾â×l֘ķ®5XÅcDNäÆ5Zo¬cÚ Ç¿-=Úô¾ø3c@f_¡=#ù©Î7†ãEÆâ66^ -P/¶´—eãLãJ&_¨Ä?C>Y5N`ÕÞLžÚZ^Þ×lX?•d÷aÎµÈøs]ˆuâ†âCÖ†™a.Ú[ÆåQÖåO–ÛAÅß0v]HέI†OxeÈ?¶ØdÔ bKÛaL–cEå›MÞy=¨õ„¿SѾ³L$¶à˜4Û;vá'–ÙÌ¥†å~f-žfj>àÍäçG®¦?-QišçI‹ÿ› 9ondq g¯uc•5L5ãaCÖhu^gQöRÝ[†¶ ‡^˧üSs¦h”&É—v!ûeVfäNêètivbƒnçíMJÃg ¦åcs‰á%פÛ½Ë逶eL:!œÆh‘ö鞦jÖÈÐŒÎÛ LÄDJCUÑÂÌÝeö\pE_)FU 0á‘®jhÞâµif†1ý²ÝÔ5¨#ýÖmf²ŅȗNÒÔ­é©æiÞé¶fk4æÛ¦n]Á½a‘€° þhÂFìq¶ì‚&èflšÙl%kF.9¶YS·¶êÃ~ëÓ6íÂÆ$Î.×2ýìÁ.צÒVìËFmPÆìÊ>èÿãd`{I¨í•Õß¼SëĶíÝÆíÜVnÞvmèÔ·Òm]gö†\ãþjã¾mæÞnÕ^mí6ìÆÌj.^Hb†ìcŽË-ÍÐì>nÍvjïþnöNäÉNngôíNtć¥ïÔînÝvï÷Öïø®miæOGοKme©Žæÿoÿ^nþæmÿ`3qÍõvãçc /mðvð çðø†ãùnð ·oFÅo Ïpäpø^qWñÌì_#/˜ Ü#Fñöqîîðþ&åî¼n™íì[ßðÍœ¦lðçñ%oqòT=e`Ù¨h÷h ñæîq¿rX=q›¶À6!`2/sÿ3?s4OsÆq%os&oògð$s••òú¦rR"î\fs:×r8s¯a"G],ß9÷s7ïs'ïr/Op# Ðï#otGÿóCGtEt×îÆ¶ò,çòßtMõBÏqFïé¸tRõ-ouK¿tVOtLGôT¯ôWÏôXÇuXÏõY_ôSäNïçOwõ[çs_õU·uYÏõèö_v^?öR7ucviWõ­vk'vhßuoÿvdçv]ÿõýws÷bŸör¿ve?wuõmO÷wOvOvtïvp×ö|×w|'w9¿÷~çw€wwlxïuv¯÷uOxg_øx÷wÿx‡rƒŸwqgø†ÿ÷ƒÏø‚'øÇxow‹?o{ÿxøGøŠ·x]Eg…÷xŠ—÷’7y”—ø“—y’¿øˆß÷Žù*Çùœ¯yšzù ù‰ßyzoùŸ¿yŸOù¢7zŽWú¥çyv%ú¡—z§z«ú«‡ø©Gz­ßz¦×s$çz¯ö°oz˜{¨Ÿù®yjgz¹_ù=ûªg{°{¸·Ù¨Wû£Ç{ÀÇú¬?ûµü¸o{•h—|Ãïû½wøÂ÷{Ç'{J—üÉ¿ûÆ_|Æü¯Ï{ÂÿûÌO|Ì7{ÒG|›7ý´çüÎýÓ÷|1RsØ}ÙŸ}ÚWó¹}ÊGûÿÏ}ÕüÝ×|ÖOýÜyÔþÑï}â/þß§zC/}åwþÍGþÃw}»Çýã§û²‡~½ÇþÊ·|Ñoþêægyïÿ~¾w{í/ÿÖß~ëoòWÿ·þ÷—þËwÿó7ÿº~ôOúßÿðˆ,hðà?u24¨°!D„#R8±bÅ‹7 ÔÈ‘¡ÇCŠ,H²$Á“(®\¨råË’1EΤÙ2ãM‰9î4ÙÓçÏŽA…e9´&G¤I‹ŽdªãSœE£R¤ÑêÕ©Z·2Mé”ëO¬Å‚ÖìN²e»zE›S­N·7á6•Û’.O»AñæÝ«æ_™_ÌÿÖâ`¿„ äÛv±âÈ’Ù:~|òä´ŒoÞXña¢˜{~6:ZóiÔ™ß&>\ÚôåÕ¬SÏmMº³çТeßÅ ÕwUÛªcó.˜voàY‘'7n˜9ñèÃo+[Ý:ôçΧSßÎùúZïßÅçÿÛ|\òåÕKÍnÓýûЯKÓ>›}{é÷ñÇçÝÿúÕ†^]6ôZ_ºD`6§`z>H™}Bawwa‚fèaŠ¸ßˆ$rgâ‰7%²"‹-ºø"Œ1Ê8#5Úx#Ž9ê¸#=úø#A 9$%ÂÔ‘C%Ô’LÕdOPFù$•U†&åNXªh¥“Jrÿù“–-…¹Ò˜dêöO™(¥)Òšµéæ—Y"gNord§™tn饞böé'Ÿ]z9L:Ô¡A%ªhQ‹öäè£J:陕Zz)¦™jº)§zú)¨¡Š:jh¨ €#9"@úÌU€@¢°ª–© ò> ÚR­·þ³j«(¡"JGºû¬Ár¤Ï’°ê*9§úÊ‘®TÀCºâ9аå*@’ÉZ»³×²*P´¶&¥«±>+¶nžªPºá¾»P"ó$JªÈÞ«Ž À°¤{Sà €(‰(ŒÀüð«ä 1ÃŽ (Ÿ*’>äÈ«c1*"sÿäH$29ºþ°ÆãRóÆ%@¡º’@¿…<²@³ Ê*oIJËÿ8-¬4çŒQül5Á*û ôF“£2‰üìHÒi°ÒêkÙ5]@¾ÄÜ’(ì¬ÿ V"Õž<7šyÓ4ñÌê 7áËŠ|¤:Ã]@»3ÛQ¾M P(À¦=-E)Oý³Á’ûKîâ 룎:¹F>uE•}d¾šSÌyD'»:À®ÊºQÇÐøË@.ëõN¼«ÿÏð3$ Ï¡‹^*è£0Ü›£T ðÿÈ^’÷Ýë}hñ¼)»#λ7Gããz*ÞðÿÑÔ“xøê'@÷~w8Ào#²˜÷PQ?æÝ/#@àù×?Þ™ e,àBìæ4 Vˆ>€[IÏl"!˜ÅÔ‘=ŠA #2›YÇÒAañ e%ÜÞúšÖ¾ N."ãÓ¬x<ŽäLW†ÿšæ?µ¹ r<Œ_Óª64!Ë…£Øû,æ6Ž@O® !ðHÀîë{úHáªBø>o…m TÛJN%€µ-ƒižÁg€È‰„ŠoLÜ÷0T I€¬ˆìöÙ©‹ˆ®ª\÷R8:ŽdŽ+$ñ>"»œ]‘´ƒÈ©¬…IÉýn’éX¢”7Q’ ¨Dשÿ¼×>CÊ{´ZõÆGˆ) `‰Ð J,Ö>…jgb¦ÆÈ‘˪á€pÛ˜Å\E `G²¥ÒIË9 h£$Éz‡Â°}lš³Õǰiˆ r@9]&2}²!"¼¥Ån‰Šh–ó ÷Ü#·ØOtµH!¢XáMú³jµd¡¢,@= (¼Ct[Ù§·&*Ãæ%åX-J• `(!Q ¿¬¢2ˆnt—P©â/“Ò§0‹E·ê Oº²‚¶¨P8eˆ#Zd_ý”TF=*R“ªÔ¥2µ©N}*T£*Õ©RµªV½*V³ªÕ­rµ«^ý*XÃ*Ö±’µ¬™êàChÿÖµ²µ­IfÑZéÖ¹Ò¬p¥á*×/´‰ºjdånZ`YK¯âÖ:Þé´#­êõb]#+Y”hŒUv›˜ºç½vœkó^ÈÈ3Pa™M˜-æˆ.¶sg¨EÅÀHÆÉÒ¶¶!mg'f>½é~›¨èñ5Œs´ØÃ@»6îñŒ`ÞSæ÷&8ÛR·º¹ëÛ×™5 zÜ[né˜3z®m»"ÙÚ6V>Úê›Ö}¯m±Û[âé6oƒ5ÃÌ2rhŒXsTÛÈ&ázÏeÞÃÖBø2Ø­òpgSU^ÞŠðw§ s«°Eø›cªpË0ÿ7¸Äu%G"¬Õ°X Ï£¾Zi(ªÑþrô CDSªP‘â²T;61ƒ¼š ¹ÈFþ‰¬f{ä%3¹ÉN~2”£,å)S¹ÊV¾2–³¬å-s¹Ë^þ2˜Ã,æ1“¹Ìf>3šÓ¬æ5³¹Ín~3œã,ç9Ó¹Îv¾3žó¬ç=ó¹Ï~þ3 =ԺІ>4¢­èE3ºÑŽ~4¤#-éISºÒ–¾4¦3­éMcúžþ4¨C-êQ“ºÔ¦>5ªS­êU³ºÕ®~5¬cýéJ!(?š’5®s­ë]óº×¾þ5­=UkŠüºØÆ>6²“­ìYŸiØËáÔ²£-íiS[ÚÁ!Ríms»ÿÛÞVõµ9•í†|»Üæ>÷´Ã½©q3Ýî~7¼s­nM±{!ñ¾7¾óMêygªÞÑ7Ào~cÊß8ÂÞm‚_ÊàQ8Ä#®l†[Êá‘8Æ3ÎkŠsüLÿ8È]ÝqÝXœ !?9ÊK=rùx*å.ùÊ]Óò—Ó<ä1§P§j®sß¼+%È΃ñžWè©?ß ½…­tl/½ªG‡MÒ™.uq7}S`¸:Ö³®õ­s½ë^ÿ:ØÃ.ö±“½ìf?;ÚÓ®öµ³½ícÕÝ.÷¹Ó½îv¿;Þó®÷³Ã]S{ÿ;à/øÁ¾ð[ï{¦ ¯øÅ3¾ñŽ'<â1õøÉS¾ò–ÿ¿¼Ö#)Ìs¾óžÿ|Ý5o)Г¾ô¦?}ÖE_)Ô³¾õ®w¼êÏôúÙÓ¾öx½nl¯ûÝó¾ì¸Mïƒ/üáÿþ0Ã?>òi_|¶$¿ùÎ/ýò»òüéSßòÑgJõ³¯}Å_¿(Ûÿ>ø÷Þý¡„¿üæ—ûøƒrþõ³ßìéÕÓã_õ¨S}êT•¿ýé¿îù÷ÛS=ø?    & . 6 > F N V VàM\ n v ~ † Ž`f ž ¦  ® ¶ ¶„ Æ  Î Ö  *  Þ î ö F`þ !a ¡&ÿ¡.!! 6!F¡F!N¡^!Ö`f!v¡‚à~¡Ž!6`–!¦až¡¶¡f!¾¡ÎáÆ!Þ!ö æ!öá>¡¢ Êà¢!¢ò_Á)bÃ1bÅ9b¥‰$N"%V¢%^"&f¢&nâ §X” l (‚‰§Œâ”X•)ÊI§¤b”¢+®âU±âž|â+Ò",ÞbUÉ¢'Šb-ò".úbU-˜¥c¥ã™£n ch(#¡š3>#4JeÔ®TJcÝÊ·4Ðaä ¶àŠ®hchtc6ZJÝ –7Vã™ôÊ9‚#Sàð`Ë8vEºÿ‹¸°‰*QLŒ¹×a(˜Æà#Êœ Ë| 1åcD! Ïø£>²Åõ8Âj!dAEÄôcÅ$dW4LÝlÌD>dKŒÉ´ÍG8 ¬Î/ÉŠ@ÞJãˆätJÂìO^µ¤ÏB°$Iú Lš”LªØdQäŽÞ•\QDý„üèÆÎüŒ )‘np¶<ÌQ²…þ%S²E­ Už ÷XVVJ ueQÌ‘€}PÁŠQî$STMB%Z:E2±¥V‚Ïá(åa5æ8×FÅ%ñÄP]VÊ%\NÃ4Ϊ¬QY.Ì˸”<†bnЙp“ÞX@!å©D’)&S I^¦VFvN%&­= àLæP$RßÐÒaž“1ieÕìQK)é†È1Á¦¿qS1Åæ•忏 “Êøf$ ŽpþdØÐ?U%F(Ó*±Ô™4 ‹FÞ0”Ó8§¥”ÔuNçOTçCqç£@ÎwZ F5'xÊD‹µÔ?!ù,¬g‡777~Y6QS[_tŒv|u‰pu˜}r’z”|‚|‚hƒ«hбy£{¦z”µy–¹}™»T+œ_&˜j>¥g.¿q&³q3‹jLŠu~Ÿo¬xK¤}[¯{[´{E¶|TÇr&Æw.Ív'Ï|.Í|3Úv ßz"Ót;Ú~5ã ïw6ïz6ï|<ó ò~)ð}2À~AÅwYÄktÁpsÌvuÈrxÜ}}êjDèiMçiVèmSìxAë}Kçucƒ|‰{™nˆ”x™ƒs¯‚Yº…T¦…g«‘y±‹j¿Žb·“tÌ?×€,Ò:ß‹?ëñ‚å€#ëƒ$ï‰-çŽ<í€6ïƒ:é;ï‘>ó„#ò„+ò‹-ð€3ð…9òŒ3ò8ñ;Ï…BʇMÏŒKÊŒQÖ‰BЊIß„EÜŒBÚLÙPÛ‘NÛ“TÙ“XÈ”dË–kÞmÒ¦~è‹@ç’Eá‘Jê’Aê“Lå•Qæ›VéšVé[ó•Añ–LñšMñ™TðœXâ‡gå‚kèŸ`ë˜tí \ñ [å¢gç¤kï¨gä§sä­~î¬qî°yð©mð¬p‡ƒ„€‚ˆŽ‡„‚ˆ‘–““ž–‘™§Œ™¨„» ¢œªº£†š¢•‰ ””£™’¹‰‰¸œ„¶™š¯™ ¾¤¹£¤¤¤¸¸¸›¯Çž±Ä ­Ã¡µÊ­¼Ì²»Ä¼ÃʽÆÐÉŒ”Ò•šÆ¤†Å­™Î®’ܯ‡Û±‹Æº®È¶¦Õ·¶å²†ã³‰î¶„ë¹á¼›ç¿¸ßͽá¨êĤêîæÀ¿éιéѼÂÂÂÉÉÉÅÊÑÒÃÄÐÐÐß×ÑÝÝÝÛÝáãÄÄåÖÉçÚÎæÜÓåáÞäääþþþÿsüiá" ?\v“Æa*´¼ÐÂg ½¤EÖÈѧ‹²dáÃ*Á¢5*ÄòÎh^ ¼€¡cE—aÀ 1‚ælQBS déÑãÅ—gº cHl×iˆäØá¦±\kF©bLšiÓ~)Úµ¨P­IfÈQBHЛi¦ùâEÈÐ% ²ð¬1³fY±iâ*Êc ‚)iÏ€mªÄ+àÀÓp¹Q@i#Bc’äóò,HœÌ)%!3Ò„È‚Hu6§†L‹ UÊ‚52=Τíºò€ñã ]!ÄçɈÇ ƒ%Ë–'%@½“(BD§EÜi 8A® &M",^T\;a\h¥ÈJ)1LC¬‚I`ÄœPÅü `@ÂÜ7 M,ðÀ`äRDt°aÉ*`Ý‚‚ (qq QD¸$S )¤xRC’,GM¤ G™œÂŠ1Æ s¸2ƒ€  DA+ËHÓŒ& „ ¡`€ ¯¨"Á%Ì0„  4!ù,z-Dz‡&&&777IIIVVViiiiozvvvMx¨ch‡iuƒgvš{nŽxzˆxy™m|¢Y‚®o–~ƒŒz‚’g†¬fвm¶yˆ©rްx’®z—¹šU$¡_2¦f0²o2·p-¼y<‚h[“pQŠu~–~j—{y£tJ«|Z·}K¹wW¶nvÌlÉi%Âo5Î5×|7ë}éz ëy9ò}(ð|2Ü[\Ö^aÏc^Ê|KÇWÜkOÜgUÖyMÖxUÈdiÅksÆvgËryÙdfÖmpÞreÙwxãWVèfIåfWê{IéwWãgfåopæsfäxwŠn‰…w……{˜•m†–u‹™~”¤l€©x‰¥}‘¶y†Ê|ƒy—…x¾‚I·Wª†f®‰xªzµj²q·“r݃-Ö‚;ëô…é…'çˆ5ó‰(ñ‰5ò‘:ɆGÉUÍ‘XÒ‰GØŽRÛ‘MÔ”XÍ”gÅyÖˆiÚ€zÚšeÚ’{Ϥ}ߣjاxìˆHë…Vç–KèšVðŒDñ–GðœVè…iåƒzê™gé—wí [ð [ê£gí«tî±|ð¦gð«p‡‡‡‚ˆ“…‘ž–…‡›…›œ’‹•••‰‰¦ˆ–ª‚š¹—Š¢–ªžœ²ˆ¡¼š¥¸¨€€§…—£”‡¤›–º€Œºˆ”¸œ„±š©¢ Ÿ¼¢¸§™§§§¨¨¶¦±¾¸«¢µ­º»±©¶¶¶‚ŸÂˆ¢À˜­Å±Ç¤®Â¨¹Ë¡·Ñ´¼È±¿Ð»Ã̺ÇÔÇ‚‰Ê‹“Êœ‚È‘˜Ø†‡Ú‘ØšÕ•–Íš¢É¥‰Å­™Î²—Ø­„Ôª”Ö±Ò´˜Î©ªË«³Ìº©É¶¸Ù§¨×½§Úº¼äƒƒå疊䚚꧇å¤í¶†ì¼”夤麣常ð¸·Å½ÅÓÁ±ëÁêŦé̵éмñÀ¿øÑ«øØ¹ÇÇÇÄÌ×ËÒÙ×ÈÈÞÏÑÛÛÛÌ×âÛÞáÞàãåÄÄäÏÐç×ÈåÛØóÆÆ÷ÖÊôÛÛåßàåàÛþâËùéÙäääôëæÿóéþþþÿÿ Øn Aüø!ä×NრB\˜p¢Eƒ/jÜø/#ÇAŠ$8²¤Ç’O¢¼¨r¥Å–#aþcØ®fB‡3qN”é’dÏ”?5òü9”hP–G_&UjÔ"M›7sê„XÔeU«K©f¸•kWWQ†&C[±dÙjx³¢Ð¯`áÆ…;6¦ÜŽrëŠÔ»·¬S]³nÝš¥KaT tïòý¸˜ccÇy#Kî9u ?x𫬑sRÏŸ'w}Œø+i¤¢Wzv÷®-‰æR>þh&£R®8g¢íÍãˆ"˜2’tZÎÂ¥—`&Ê¢o‘šÛ£Jf„Ñåsi6á0ÿ¢ˆ6Ò©ä’}úijvz^·+¯ANJgtó(’MBô(âÈt2Òhc®!Ž™æ¯.êk•ˆ²Ý8ÆÞt馮Ê*µŽ¢j¹åŠ-…Ñ%«È8ùˆ£H#슪h¯ç¢ë¾ù2˜­“íiƒéÀóÔ+ª´{N«ï\üú¥êÁÀÈ#Ùl0¥ ã•q£û6|Ѻ¬®GO€ö"œªÇné^,¢ãòË0Ç,óÌ4× ó2H6÷ìóÏ/'TÓÐDmôÑH'­ôÒL7íôÓPG-õÔTmÙ¿Î3Î<›†É­²˜ÒJ`É*—ò†þ ¢À™ÒÓn7Öl#O[²ŽÃ«ŠX,âÁfŸÿm¢ß󉵃òR,k6ÌÑ3Íâ‹Ç“P>Êޔͻcómm¿€Ûu9æÁŠ+Ý¥#óÓˆ"Î$´Í4ÖÄÓÍ⡃žÐèz;çù€&_›¹æ·÷¸²àjGù² M¾LB‹ßdÍ4ŽóSx6‡£7;€µsž°Â¹G‰mïÖ}÷¥¥óúéÈßĶ"Œ„þ Ù›'X=•ë³ÏûóÍ}})!Œ8³é驯>ùüh͵zð{OßÌå°öÝ©s8Çü¡@8bÝxž°¸nLŽv£pè7¹Ek€Ô# úDø±ÁQ¨Xóâƒ"–ð„NpƒXƒ ×  ÞDqŒ »@8½“‘0e’ÀÿÂñ"D a ‡àÆâbèq4b màŸóÚ‚?Õ}o\ébÑöC."pH“”2–€?`ІXBGB¯-W<^òÂÅC†ðŽx ÈÖ#°ŠB I¸†¼‘Æ5&$i8†¦x“8êŽ[\ Ç:–GÛUoê¡ÇüÖà‡%LcX‚ذEˆƒiP&6€RuVÜß#¸.Ö²‡vT— )DF´qؘÆ’€%° hXCÒ@‡U$IN•CVy“yhVR$R-YIéá²;»ü=1/D,a3 !b¨L@( ¬te[8·¹El`ÊWŽh©ÿ"~âΖ·Ôc8?äŒK)"†ƒ9ž˜†0ífMl>H£xåé¥[B¨SÈD:y‰ít—Ø@;V· #–™°D Ñ KÐrüˆ‡5Œ\ýÅ#‹C„±ÈŽ|ºÓÍ¥€üÑ­çM“;+¹…Ñã93ž„`<#\‚ ”Û€%ºu\Þ¢N‡ñ0Ä@û:E J€£= u½x×ä§ÎI<FV ì»ÓØF—0ð È’ó½ð»à¡acá0ß8“âƒkt' €µxZÒ®¸CUO§ÐAĺÓ¡Ãá4€Á‹^/‹ËD%Ö› ÷šÿ¿Û˜“0—Œßib¿ý%1ŠëZ­—ŠÏ}ÎëˆlµJ¨A†m,²Ž‡:zpà N  ò~\Ä7¾¨{»¸ä."s˜C 2¸ç*«¸Å,&pO;“eõÈÈtD#`›Íà)‚XB!B×Çö!Ä¡5†Ñi~Tö² éDÄL@SÊ~Îé•ÊQTcÙºâ‹ÄAD ®æ+Ü8_çÔ™·ÖPN§>õ¥ÿFÛ®Ö¦öª]\`'…ñEã%㬺ɃƒÕøÃ5¦Cx@cŽÞœpUêi÷ÐéRutÓ2 YÈÏС‡$àáÏ0†€fôÉÿÀƒŠ„$0ƒf¸`+pѳ$½,°ÅÅ™Sµžûüç@ºÐ‡>µ«aÛAÊuD(—`·mHp‚Ó¸!üé–;áÇÁ¹•γî.µ»áñ~¸©ÿqù6n~ˆ¸;fãåˆG”‚á¿mjsª¨¿ZgôÝ.;¼?qÒÞ`ôÀ†(­b΀2dCÿ œ 5ˆo˜ Ä:¡ŽvÇÈÚ†5ÀM¼Oƒ ó»Ä©,ýè‡]ìºt}!“óJn7ƒ@ÇdwI0l(óBóÀq J" ¿QgŒ32ß³ Luq–xЧ±·Sg0æTÁCÀBÅ@kLJ 4Àóào !Sv ²€ šVAò•cü€?N7AúƒY®7‚·‹7oü€ð#1Æ;“ÕÚàmÀ m„ƒð…m0ä s ¶ðòR\/‚_éVü€C¨w˜‚Ïá6%h‚L{×ó<Ú0CPä|"S˜ÒyƒpMÚ +Î` qða@‰ÿ`bìÁ†4 ÈAL€„pöäç „!q‡¨u‚Fç9ùðˆö…k`SU˜ô ŽÀŸlýµáa  s@DìCÝ„th{ÈSgH¨òæà™Ó§–‡²GoNxmž£ 59Žà‚¡µ.ô°ÿ Î Qó ¡€ D‚i9$Eœ&„Ρ=àpæÐ•f'Š¡ÈŒÍX]žã1dR\E׸Kä ÿÚpu@–0n T˜8òGÉqlèRõ"û`úáÓG}Ohh}â9ŠÐkàŠ¤¤Š7’ù +·vÎððŒÿ jpX®f-9$—R0èàŽû`K™ÒötEõøb':Ê2ChÐTø8ÅY(0_¸N€ÿ5Ùºðfà €Ðb“-éã ‘¥<ÊÂæP”F©G¹„ Ù„Õ'’£¸(4(铬èî„)ã¶Ná§NjÐ_ –ÿyPb°ŽŠ?™Ž¿ø“30ÇÂ6ÆÈOò˜”~ٔϨ‡Zå­øŠ Å_`#V1˜Šá,ð˜Ùg°CRªÈö%ŒÓ!näÆ\ãà ð˜ŒÊHš{‰šýç$I'5¯Cm ¤´ƒ 2p›ð©ÿtP)Ù’§ÃdêÈ™ðÅ`¾Š¦Ù—§yNñ”ëQSÌÑûÈŠƒÉÞ žá™24 Çç™™(8Èì9*žHILie¥ùž¬&€QãÐ_×áðm€LmŽ  ßY“pk°Uœ4œÊ2n—BjÑŸ4Z£!ÙœÎyvÓ‘š…•Í¡I‡iJmÔ(‰©¤.€›Z“‹eš7-äBO`O ŠOj8£Î¸¥\Ê—]ê¥ø(2…˜Î‘WÙ›3TFš/9i3pi7ñ 9ôt’ÖzÄ—Šæ ÷‰Ê0ÏI‚©©•¡þ%!7á* ÿ]  s€ ð• p ÅÀ `¨ÐÄ–?ˆfXG;îi= ¡JIùhS÷¦¨ÆV K€ü \ C„`@“ÿ° –™pà@™@ /Å[7ñÉ#G³”ª‚:¨€*­Óª£ÏQS’‰ŠªdIàØ`«B• o0± @“ ¯àb*À$´À[¡#AÍJMÐsªŠ£#9¡˜t¨yö¾q„‡ JŸ „Õ\pÿð° í  `©°wRp¶ 0 °Ô £KÎ'‚Ъ1j²ÔªªNi¡o8¦å:[Ià[Pfÿ8›’à ¸  èú Ð @°°êð P-´8xÚ8b¢¯ËŸxè¯ôÉ£›U•Ë Yà LR -÷&@( *@´€« ®   °YðTÐBÖ0¥T¥mŽâ€µr¡Q+µK¹ª¦‰‚ ™ðYð?ð¸B` Äj^]¢°  ª €T ·¤ hËh#œ !/£‹IX²“­„»¯üŠ‚ô#I² W@k ‘@LàÚ° ÀÐ%@sèP´é° ³` ð°u÷bêÈ-ŽpM˜¥Ï§º»¸óøl±sÞ‹ ÿ èÀ ÀðW€àÄ&à9ð P°€ Eû2T /c»õrãkÃà2'§ .£ 4BCt ÜÀüÀ tI'é´ò0´í° Q€<00 á‘TÜuåQAÏ ºÁØ¢üðª ú\'»º(«½Ì)¸¬*{å,ôäAÎÑá«ï€ Y Ãö¸+ð°0ààRod@•°Ð œÓàaé@ C0D‡òÂóv}z½)[Ã6ü‘6z£õæ«•$™ 9¤§7á ·’ Ä&L>À¦ð Tà]ðw“Ós ·ÿ¢ ÀÐ è°Wð_ütˆ~™"°Ú4ÃÙÛºÛÆÐø]w@@ª#‹È› ý_÷õV¢ðnð ¿Eö@ã`€ »Ë ïÐ š`À` š Ó0ŒÄ÷á€É™,)y©ÆŠªiLÃjrt…ÂBr⬰JŒŠKu«$ËÈ_ž@Æ¥× ¿¥Å޳šžX”6Ë©²8\¸`zÏø ¹"c qÍÙŒ¯?©7ø\P¶ ¿»° «`Îèì%êбÈCdïL‡ôÀhümþr5zéÉ9ÊÉÛKµGÊ£,²²3¯ÈÐÄi˸¼ HÂ~™@ Àÿ,ÌÄŒ„b¶$+8]­ýÑõìºõœ+„VtÜ[{óê`*­Ò£— ƒà‚ƒ åW0 ¢ @`¤0 ¸p:L`¼ Fàˆ#ë§¼ó>ýÌBý¥ò™Ï-Ͳ=¼Ö¨âMŒlÀ¸ @ð¸?@` ¶` ÃÐ šPåÅG`ËI°‰ú·ó\]‡AÏ=נݯ¯;ÁÃ!ÜÀ~À Üàl`F°W0_Dð—«e à W°6`FðI`†pQSE]]Ð9Úƒ ×@=Ô±«‚rlÀ ¡ žg° ü O€Ø ÿñМfV`¸Á­& —j½Ì‡qÜ¢ýÙï-×ñ-߰˲@5 ÒMÝüpÚI€ÝR _LRÀXÞÓ ‘<-—?À üÐy£gíéÖÚS«ÜмÆl\¡v>êqÊýaÝ~  «Ík·S`?ÄÄÀAÓ° € ¹}Wp60K°< ØÉ¡äÀaØŠV íÝÌËáþÓNߤ=$»@ 0zÒO·Òí‚­8LpK+@fªg›’œ“ÝÛG€ÙQM/óÐyl€)’5&£I×ÔìÆÎmßèñwx?œ$»¹ QÜpI„ vÿÛÈbY0x#76p’>éi—„p,¾Ä@_32Ò²ÙÍÜÍÍäöLçM>"¥' éÀ +åÊñ[œáÁVó”iè@@°[Í` @@Ä{’}H` NÀº÷VëÔ-8ˆ0F®ÏžîÌH×x.ê£ÎìzÎ).õ"¥÷êÍñв`lЀä¨g6 À0aSj7ð—÷tĤ H‰_³’›"+BY×îMíž¾ºÒ µ¡n¸8¢%L‚®þðš€RðX°™‹¶ÅFp¦‡½Í—÷ëÀ® K‰ý£•Ž£Cbr¬ÖÓž-íIêKíþî"§¾ ª~íJ¸‹ÿë ÁPÌÍÌÀ™€_,6ÎfNéG ìÄ>O£óYCänqï$Ÿ—ú¾É(ŸÜÞ$î××Âç~~;¬Ø³à Z°¦À$ø…{°Ñ@zµ@ Ã@ Œ¢L ” 4éH0éäÍÕP q™ƒi>J»Naîìv~ç¤>í^êíÀÔMÍêåŽÏqÌÔ°ÄC ‡ñ f \d åUæD ^m ð` qhNåu_lÙ—}é×[䜱À‹´Ñ&í‡ò - ™€Ò³°HÐ}b Êû¦ ·^̆0r ÑnF@TpD0A,|Ž¥·Óÿo-ôð²ubtL4ÁOÏï)û *}'ùŒ”pü %J|¼‘ž{íf›aP%M¬YFÚƒiâágD5Éä YágšQ6 E¤®ŒhˆÁ!6²F$p@ÝÆSq Ó);6Sú°ÎZm½µ]]5«ÕÎÑб÷^|óÕwß|‡¹ôÒaø½×– 2¹w Œ`]0*ªÈ€tŒÈ"ƒNìí$!˜0‚.{f€éÁ}=üðe˜c–yfšk¶ùfœsÖygž{öùg™óäµ×ö J–™èJ{'“(Ý Ðd¡Óâ™ÿv¨uÒK$‰Ò,˜ˆºô6kxðapúˆ£¥Ì´©C•XÑCéŒWÞXïö^‡&š´q•E'ÃöÄÒjƒNÚÙ& *¨È8誘b…(‘r$[€øa…¸íøˆ¼žˆC4J„‘q’êéå¹Sz´wùžWöÙ7ÓóoÀ“½ŠðöÚÙÑ–§d`xdI¸¯…0ònâ1BˆYz1âî} 5Ö@cûí×gº>¬›±<‡ÊNN½÷Ž}}öówªŒŽéSÿ¶% l±%½Ë!æ¹è,„!y±0l€&Ö@ ڠ½î¡ Ùp졪Õ%0™Éÿù¾“>îÔ®}v뛟ුqMC[êU&"p¹ûeB$ãb†H #ÂX£"vÙ‹Ø q  „XC×@D4 B€0‡ª\¥Á•p0Myk—»H(Ârèv'¬Ê¯‚?Â02ä m8&$D$:´†l`„Š á@"!а6Q{Œ Ç2ÌqL;¯ªÉ¡HÚQ‹Š|Œy¸èžÞ/û{¡Hü@„Œ$pÄ‚´ Ç!ƒäÞÚ°½Ô¡cæÐGEÔª5©ŠW\$úÉHêl‘h» -ØÓ'.ÊB=ů@² myj OØF<êòWx@È ªÿ'Ñ¡ iàÚ@«ØÃûØùZeCÎ)ŠŒÓ-mYËw6R—|²Åá¢T͙Ȅ-RÈm0c\ØäÔF¬ð€ hbÔ‚5¬Ño|Å(0ƒámðá!âh9ѹº º.EUa‰ÜÏ\¾oO”¢Ñ.d¡µ¶=r$òƒÎ4˜Aè­KÓª@Œ}jbà´Ž° _˜ `Ð!Ú@ˆ%6qŠåƒH…¶«‘žôƒZݪíTj£®LÊZÀ”iuÇè :ßBëFø¡`ÌÅWø"?"ª ~8b_áG6q,£í(ÝҩΩ&¶ðìjI¤+ÿGö*¬"˵bZÖÀQ­„±a^ÞºXcš+´ë6‘×C𵊠Gª\‰®ueåkWOdÛÛz5Ÿíaé.\ SÔ•4eÈMsª&tƒœã(¤v©&x%¡Gäõ®ùðVÕÚ2‘ŽmlJwÛžzîr—õÕG¤óŽ‘"™„QJMÇÍMäÀ G†òQ ¶< +ðCÄЊmXc÷X'º^9Kð„Ô»’)©IÅ›Û ß$²»ìå/Ù»§fi‡ÓÄ/@Â+z$¸ݨÈ^²0ŠKE­!Ž D(g5ÄAÇAÂŒPŽîÂDȭʉc&La’âÿ6«~Û<…ûU«w›ØÀ,ÒQÏNäç}8%LEîËL†‚~(Ä5òè…I$Ã3È‚)†Q NUÈq;ça­ˆR\Ò2Ïzvßyeêgž:A‰Œjô>Â金Ë6hlˆo B R¨>þ Kl÷¨Ç=ÎÇ&˜)F|ˆås©«ä%›÷Éd± §Ahlm@º$\<*Ò©F‡äÑ…iƒPi?°!Ó›îô§éü2Qš]LNµ©Ë»g-B¹¬€N‰”©låzI—\nžFž` e$„øC!qæ4¯¹ÍÃ(Gœç,“ÑÀDjj ªÃ íg;û\N.µSRFo#>ÿö<ô–‘›<3$ôpÄ Œ¸†4è8<ö1])o—![1õfö½õaò:Ñßðù oÍL~èˆGØñNõ²9+H!¡ƒál>цAˆy@†*p‘à‡4Þò^ÌuNbôe‡äÏL…I” ¯ºäRÖ‡·Áœ!ü`sY0*)xªy`W»awDÛhòQ5ÝèiíÑíäŽ/VéM–öŸ{•Y´rÖ*8ºu²Ð­'ÉgÜÆ8Á;BÚ}ˆ‚|ô¶ÇlUO:¾ó}ê¸Ë½Ï«þp{ðÎ;|¦„Ñ”Ø@Çÿ€Áç}ó³!¦Q6<‚\V¡Å‡êÛã«OÇÿ|æ…âôÊ[^äœ.Ÿ¨I‘ü… Éx†-²@hÀbT[4NE?°a„®aVp³{ö⟚ŽmU9¹*ɾÏÕúåY÷G–ܬƒa!«ù¡Ãa@#eÒ¸×:üïÿ¼+„D„E(„iÀ†¸t z`Ü“;s»#óªb?Ù²À ¼ŒÔÀ¢¨‡r(‡z8“• o(Ao`@Òè‡r7~ð@dÁ ‡u5ó“¼ÕA |¥ ô8<ëADŠvÙÁÍh0‘"Ÿ‘ðÀNó@»oè´x诌‹-܉Ua'¨ÓÁ·»“,Ô¦ÛÂöƒy FxäAkÔ³6ÃQL—˜É½|4?ÿVÔ¸vt—ª°‚ÜHB„”•w\H’ÌCc•¡ÃHZÜĶÓGWäÇ ²}c§£ÀA9É_Ä›k¤G…ì )"Bšy0›ÇAºÇ¶‹‰gœI"L™I›Æ‘äÂy¼³†ÌAuAJ—˜¡¬™É£Aš)$Ãr"üÈ |ŒƨôÅœI“ŒÆ4 JGŽÒÊ1<ËdÄJ7ìEÅÈGÅ*KCʳÔI‘ÊÆRLKI,LÛE GrÌÇ™¡ÈXºHXÄG¬Ä‰v$²tÅ®”°~º$ ªÀÆdHµìÉ&SL tÆÆœLµÛÇֵɜF¼4ŸtäF#´ ÝÃA«Æw#Ì¥3LÿŽ3ÍÓ|ËÙ‚7Mä e\Æ´»H—ÙÇã<$CË¢lÆ€@¬ºMÂâIcóMÑ͘ôN±lJt”<ä|ÉQ¼ÈÈÔÊ&ƒ°AÏñ`;zKøÌÀí$MĬJ©Ï}“Ø Í ëDÊcNÈ;O¨$-‘ä,Èd#¤Á¬<ÿ´ÏßlK”P{г«B¾$HðX“£üN¸yI; ì¼IP$µ-IüLÑ/Nw,'§¬B™ÈH¢;ФCÌ<,ó|­ìÌÌì¤Êî°ŽµäIíN Õ°±ÔP C#­DÂâQ€ d¤Nhœ¢±LH‰Ný,Í!åN.M)Ú„ŒyûËÙêH ݽ§ÌÊò³³ÿÞ¬R¶ÜެÌÈ-íR¨,R<üÑmPÝ»PËÄPkN×yÈÈ$e³Ð6½ÐT½”S5ÔÃŒPmLÊ›Ox T=•Æ«ZJªÚJ5%Ч,T ËÈnS"¥ÐõÑû<Õò‘ºôÌ›TÓ¼¼CùtMì($£üL¥LÔPÍÅ •ÐêhÔQ}T ㉺œ<ÙìÑ r@-¢­p¼½2ÐåÜÕOÅU¥TFmQ^=¬4UG…ÔIeEbUP³T6Ÿ´ÐRΪP9œÓŸ$5$WMÔàœ»Ë ÒïüŽrµGVÅD#ýÒ+œ@4Í×0TN´LR‹Ÿ<õTÎ]£×÷…aˆ½Ý î]¦{I°”Õ­,ÊZœÅæ\]qÕ=Õa™”޾ᚄZ)b*â! Õ÷4¬L”ÌæK‹T?e=Æÿ0æà£èY¦Üâ‹=2Í¥×sœÊz=VrL×Ê\G94º¶]»Ë €Û?ÞãYbã)­ã+<ä8¦ã9ŽÞ ~ÖŸmÚ)"df…͇ä)ES]$dÓÝOîeàDîÑEvdþUá:Å5X¹ã³TÆ ’Ü©P×tPæL,Ž}­_ n`"¾à vO_^á÷;Üf\æìÜÄ$ÎDêÍjfg}ÞgÿÍO{Íßl¦FÍKöd»¡FdSög_ÎguV߃eSÿž%h]-΃^Ÿ„nä†b.vç~×WÅ`yÎU7¥a÷#Ñuþè^æengù%^è,Už¥g ÜÝ>È¥„Þ,mi—fè&TÕ¥;ê€Ù:ÔÖµ•çh^é…Þe–Nç†Q§ŽF´=_uñcžNiÎj­öiôÍh.i‹Õ7¦„j‡.ë­fê>k¥¶è—®e ë<ëOÖåµîi´^êºæg|6ëDžj¬êÆj…îèSÆë«~j™>çfÒÏ Û£6ÈCåŽjµ>l­–ç,Þ „ Ë#ž]h¶ë¼~h¾æjÂ.lÐv¢ëu¦M^ŽæçʶlÓví×ìd ìPHzù[ÝÞmÿÞîmßþí>,\Ò>mØnÙŽmÑÎc,i ’ììÒ¾kâ¦lãga®hnÅnjÚ®n•.nïVkØõÖÌèEçæîÑoäþnðm[NÇÌîôvoöînúžíô–è6lº–ïÖ>néðO_ýÎìú6ðõÆïùnooðî/íð§n ?ðÿ¶ð ïÄfmŸæÉ¦ðûVïqR„nÿöðç6ñäþjôÎpñíNë¯ðwpû¶q¯ñþpÏq‡ñòr·öo_ñçoïq—ñ&î!r&Or%ŸðÇqoqò)§r#r(/r_ò.sÿ$÷ò1¿r2ßï/Gó4·r8ó#Wð-7s ó6ð2·s:Çó7çp"_s5—s??s>×qAt)Oô:gôB¿s7‡ôHoôA§ôJŸsD¿ôGÏô8Ïr'tMŸô>uP¯tO¯rB'õEwtUçr,—ãVwõP×ó=gó?·tE—õTuV§õ^?ôRïtX÷õYöU/ö7tc'v\ÇtNwöcßõe¯u[Göj—tf‡v]—ödÇöiïöQÏvm§ö\ßöqÿucnu_wvoww_Dqçuk¿öpÿvt§÷g?w|v}Ÿ÷r¿÷}ö~vF–w?uTx…x„Ïóxxÿ{?øagö†¿õ…7øf¿xˆ÷ŸxŽÏwŒ×øxsgx'ù’ùMù‘GpN¯xeÿx_y~§ù”Çx˜÷v™¿ùˆçv”x—Wy¡où çù7úŸ÷÷OzŸ/z¤wz _ú¦—z‚§f‘ïù«gú©Ïy çz–'z¯ÿú£úóþô§‡z‰?y´Ÿzªû™·yrï‚'ú¶W{ªÏø¡Çú¬_{¼Çy»—{«‡û¸·ûºŸ{½ü´7ü±Wú²OxÄOü‡üü»§ü½çûËüÈï{Šÿû“ž|ºwû³/üÀÏûÃûÏ×rË7yÅ×zÎ_|¶}r'ýÍ¿üÊ7}×Ï|ÿÂoü0'{ÏÿýÒ÷ûÖÇ|Ý~âÇýãþà?}Ô7þÛoþ®þå‡ý×§þâ~ã×|Ðg~îÏ}äzHñò/ó?ôOõ_öo÷øùŸú¯û¿ÿû Hh—ý¯•þˆ,hðà@H2,¨°!D„#R$8±"Å‹!jÜØ°ãFŠéÐdÄ’(ª\ÙÒåJ†/MΤ³¦Gœ!cÊä)Ñ'I A…Z$ZÔh›HY.ý§sçÒ§¥NmJ5eS§1Ñ5åºÔë×®bÇ"kÔìÙ¬jײmëö-ܸrçÒ­k÷.^“í TUÀ@;ž° €õÿŸ–6üÏÒ_~+a©¸·@å~ HöÈo"œÿ¡klAg€U¸JY b7§Æøy ÑKö¸—‚¾‘YS…D8piÙÂGC à0Už¯äÝR€¢Ñpl’_U–ðS%€÷w®‡ wXx´4€€Àùèrÿ `i|míG^Bp•:,f›z‰ÖŽªÄ7_}÷åG:ºùàF €Ž‡Ò‡ ‚!§^$h‰ˆ =„€ÏYÂ×?†$¨ÁgK4ê•]í`]z(¡j\rT~ÿÀx°DI€wÉG i ÿÀU’ùµ?ó)?í´ƒ“a†¥@­9UØ•YFDÝfm¢©YÙ{ÔÁ¸¤@nÄ,ðóœõ†’Hþ3XL}_êdE^¥% ùÏ7bd%Aü@ÀŒª-¸‘¡çMÉã?íÐ瑨íÀiBf–ªG¬^ ÀÀë?ÌŠ„ ‹–íÊëµñJìBÝq·—£hùÙgæ ‹#Á:ñyZãJ¢[ê¶ 6dìcðÅìŸ#¹™X;¨‚kÀ#õJà’õ¥‡eÀofÀbÛRkY”©@’ñS@xRkoœPà,6ÆÿËäy@"À¤IÙ&õJb:ÝßB/zXJ^kµ¥>÷*$ï­Ô6vèÀ²ž‡ñ>4@£äQ ÉÕP tßË ð2u'WóaWuD¢¢ú§·NîFAcøá(ÚvòËZ¸ãÝmT€‡/Sû2°ü8B˜?¶Û’$W´jùyæà•*’£ä:l¾{….̵“$ÍC²Ø^¨ Õ@÷qæ^•¹û¹„Ž´|B’G?}DŸ9oòácO‘%ÎCÒŽû\¥¿Ð³yÙÿ?þùë¿?ÿýûÿ?(À°€< ¨À2°| #(Á ]7b3¨AŽÇ+¨ÖC(Bv0N ¬òSªåæQECŸ³†ã”W-Æ‚í@@eœ™™ík#üáÇó—U ÈJVp€ÑLä1¢¦ 4Nà9PD¢{,¡ tìdq€aáž%Úˆflàx~¥ÄjIJ “êÊ4…Ãmjy@Àx*óAîPgRÖñݯ¨•(¹§0';#"3XB)‘çŒì¹6¶D-±’Î"ÐxÜC£jgF:yœXI,)+‘¦Œà"9ÙÆþdG_²Rtÿ8u˜åQ;ïY妜²D?šš¥ tÊa¢Q˜ŒÛ¦(Ö%‹N¼a•ˆŽ4*‘>ÈT"ô~ÅÈÅLQ‰ªp¸ˆ)΢‘N_|Ç<Çlïwétg½§u&¤†æì÷àWÆqòS„ê'@ºU`Ÿ=(BªÐ…2´¡}(D#*щR´¢½(F3ªÑr´£ý(HC*Ò‘’´¤&=)JSªÒ•²´¥.})Lc*Ó™Ò´¦6½)NsªS”ª©§>ý)Pƒ*Ô¡µ¨F=*R“ªÔ¥2µ©N}*T£*Õ©& ªV½*V³ªÕ­rµ«^ý*XÃ*Ö±’µ¬f½j]ÈGÿµå¬n}+\ã*×¹Ò5«iÍ […R×½òµ¯~ý«W¼°†=,bVÁÞ…°>Q,d#+Y¿2Ö.ŽåÉd3«ÙÍŽµ²ž5 gC+ÚÑ~v.—ÉhS«ÚÈ–V.§]Éjc+[Ê®¯j™-ns ×ÖÆåµ(Ñ-pƒ»ØÚö¶Â=.rÑJÜÆ7¹Î .oáâ[“<·ººî[¦;ërW¶Øu‹v=ÒÝñ¦ö»m ïFÈ«^Κ—-èÅÈzã;Ùö®å½ú³¯QðKý …¿@ñ¯O\Ü3—À–µmVРà3¸Á~0„#,á S¸Â¾0†3¬á s¸Ãþð‚"`„ÿ€¸Ä&>1ŠS¬â³øÄ"VK‹c,ãÓ¸Æ6vñBF|ó¸Ç>þ1Aüâ¹ÈF>2’k<ä¦$¹ÉN~2”-¼ä¥D¹ÊV¾ò‘§Œ,s¹Ë^n±–òå1“¹Ì3Q̬æ5³ hJ›ã,g,¿(s¾3ž“\gŸä¹Ï~îñžyòçAÌ9†q¡­è:&‹~4¤/Üè•DºÒ–vð¤QréM[:ÓÿÓ1J@­¸Ô õ÷H}`Ów$Gx5¬c-ëYÓºÖ¶¾5®s­ë]óº×¾þ5°ƒ-ìa»ØÆ>6²“­ìe3»ÙÎ~6´£-íiS»ÚÖ¾6¶³­íms»UÛÞþ6¸Ã-îq“»Üæ>7ºÓ­îu³»Ýî~7¼ã-ïyÓ»Þö¾7¾ó­ï}ó»ßþþ7À.ð¼à?8®ð…3¼á8Ä#.ñ‰S¼â¿8ÆÇ!ù,e/c‰‡ ///QQQZ_g_csbVOiiint{sj|vvvNtœ\j€[s]u“Mx¨fk‹jvƒiw˜}nŽxyˆxy™m|¢Y‚®z‚’h†ªfвn¶y†¨rްz—¹²o2·p-¼y<’oQŸqH•x^‹zz–~j—{y¦^e«gM«|ZºM´xU©ky§{e½fn¹jw±j¼s|ÍlÇg(Âo5Éy5Ñn#×{7ë}éz ìy9ò}(ð|2Ü[\Õ]a×mTÇdjÅksÆvgËryÙdfÔmqÞreÙwxãWVèfIåfWê{IèwWãgfåopæsgäxxŠn‰‡u‡…{˜—m„–u‹™~”¤l€©w‰¥}‘µy†É|ƒz—…w¾‚I·W«‡g®‰xªz¶i²q¸“s݃.Ö‚;ô…é…(ç‡5ï‘>ó‰(ñ‰5ò‘:ɆGÉUÍ‘XÓ‰GØŽRÛ‘NÔ”XÍŠ|ÍgÆyÔ‡gÚ€zÕ˜fÚ’{Ϥ}ߣjاxíˆHê…Wç—Kç™VðŒDñ–GðœVè„iåƒzê™hé—wí \ð [ê¢fíªtî±|ñ§hð«p‡‡‡„‡“–…‡›…šœ’‹–••‰‰¥ˆ–ªƒš¸—Š¢–ªžœ²ˆ ¼›¥¸¨€€§…—¥”‡¦š›º€Œºˆ”¸œ„°š©¢ Ÿ½£Ž¸§™§§§ª¨·¦±¾¸«¢²­½¾²§¶¶¶‚ŸÂ‡¢À˜­Å±Ç£®Â¨¹Ë³¼É±¿ÐºÆÓǃ‰Ê‹“Êœ‚Ê’˜Ù†ˆÚ‘Ûš‹Ô•–Íš¢È¤ŽÅ­™Î²—Ø­„Õ«’Ö±Ò´˜ÎªªÇ¬µÌ»©É¶¸Ö¥¥×»¨×ººä„ƒåç–Šåš™é§ˆä£œí¶†ì¼”å¤¤éº£å¸¸ñ­­ó¯°ð·¶Ê¼Å˸ÖÀ«ÙÅ·ëÁêŦé̵éмñÀ¿÷ЪöÕµÇÆÇÄÌÖËÒÚÙÆÅØÍÑÛÛÛÚÝáÝàâåÄÄäÏÐç×ÈæÛØõÆÆô××åßàæàÛåååìîðìðõôêæþþþÿÿ H° Aƒð ܯ!¼}÷ý‹¨P`Š3þ»¨±#B r Ùq$I&OVL©ò Ë–aÊÄø’áC‡)Òœ¹’gOŸ1|é“èL£2‘&*´fCˆO'BDÉthU«W7fÕºUiK¯*Á†Ýºô C‰†K’mÛ®pã^u ’n]²0>´‰Ö£Ý’dÿRÍ*xð\¹‡ñªìk"?~SC2f:™2b¦…3fþ™˜°âÅsFYhiÓ—›N t3çÏ!®-Úá^Ú¸#ÎÎÍ»wÎݾƒçží¹¸ñª®]®†íQ¶ðç¢C.}ºpâ‘/ÏŽy;óŒÎ­Sÿ?žüõÓGY·VÏ3¹òïÛï]]¼¼[´nµû=?8víÇÈjìÁ7|ýáVßtðxÒÁƒ°£[‚ô¡WÖ€bX”wšµÏ‚~Ø_-ÐÂÎ-x‚!ò`†¶W`z†&b‹Ñõ÷`D´DÈ"Ž"¾¸ÞŒyYd ýØbuö˜SÎ9ÂíQÞä„BnhäXYj‰dcV^)]=0b¦#úøF¢‰(ª¨ä’£Œ]ÒXg‡oRœ>ebCŽ#Œdã[ƒú˜§žq~µ%—s^ب‡ö\=Œ`‘=Œ@Ü}ùí7á•X>ªè¢oÝéè—† $pæTQ™i’ÿbˆÿugªœæª+ªRÍš p˜2bŽ>å0òÈ|¾þš(£»Âh«¨£òšj²Èæ”™ØÖS-¨ÎÝÊl³^‚®´‘n‘9Ž@‚¶æ‚Z«³ðÆ;®¼ó¢Z®yÔFdÏtùâ»ìIî°À¤®ÅaR¶%¬ð²­ãðÃG,ñÄWü°2ƒ2ÈwìñÇCµðÈ$—lòÉ(§¬òÊ,·ìòË0£ìÓ½ÏÕcN=iRÛj¦f ê·ÝB ðÁC =´´Ó¶xí™öËM5ÚГ æìÃ'#ìVô»E‹K§Ñ¬;«. Øìf4l³=Dúd6Âþ¼õ¿¥‚¶Þ~ÿý%Ù½•¹ï>0Ò DÚHSÍ<ܰ=¸àž5oýÊŠ÷Þ^Û™9®›Ãxnqk ÝÊ@ÄvDÕHóö>fcƒöyw{{´ìyw-ÒŸçFµÕe¾ãˆ«ÑÒŒ82¸o•‹Çu½Ì7¯ù³|“•;n;—iˆ#ͤ™øâKsü>6ã\·Ëmû·ô>=¹ªÎgŽõ…0"$æpEP°Í ÝŽT­¼höxZÔ”E;̯vëK ½Ú×JËŒ`&ˆ?s‚ dC9þ§¯¶¹MR—»K ˜¾S)ðo œÏµÈñ!E$ ‰ØÛ.‰r<‚ nøì‚Ç=àùk„}[ÿ£¤-$…æ¡”’Á„$ÂLÛ@Ú08ChÐ:ÒñaêVg9 Ñ‹†9 y5=Þ\k]‚X‚¬Q¬DH‘ŠYDŒq›þÎ{ÙbµÀ¨¿™ï„ÎÃÉcë±L†9Á„'´ Œ(‡#Ò †LtàБÎöçÃ.±Bü¢I¸Àä ǰb!®! ((! KhÐÀ†4¤¡¬xP•ìv) O4õȆŸtH›ò©¯k£b2•É>S>ǃ0–"˜ Â¬¥ 2…‹KŽïR”šhvf&HÄj8!df MˆÌurŽŒƒìO3ÊĈ ‚ç¸aÄàÿ ºý¡DßôÍÕðI7KQ.¢ä݉>†2§ŒþiR9°ÁC@ĵìÀ,Ú±ˆ:t@íÍ9\Hˆ|ÜI(èÐc¢Ð™ã3GÜðˆlì’È@ÞðOd:#5hè*”Ò×,“¥îâI}œ#{pcD Q‡/PR“ƒþ Ÿ>g ç((Q?©Ò¢*d`"ñc *šxàý.ŠÍ3œA m„䨉³·PÅ1°±ÁE„ÚÐ7àFldC[äÌÔ9„P¤¶3©¤ $;_¢xh¢™xÃV!ȈÁ™#_C5ˆ;ám›;:@†½ÿÊaýÔ>×6m[u æ0‘WYP’µ¬G5îq)ÃTá¬éƒƒ'ÖQ,Ÿ%€Gã^apRš¸Ä áŠKÔ¡nû˜G5ŽàÛîÍclSD¥ÎAÉò«¸ÈméfzÙþ"‰­ÙÝPqÉV4u¹ÔÄ'¦„! î˜(CÝ:p Wñ¶Šûå<ÁsFŽPú©Yß3â $W¹Í уäq­2\òZÖ•†6P´ ûXo„…% WjmªGâò·º w8V… ñxJL°•¢³™ýosƒ³¦uÔa¯Û„Äà€,_ì‚©ë!x-1^U˜7’ðÕ†ˆZIdøJ#ÿ󭯇E¼\×ÙÄú}g)CD¨XB tCa/•:ÅÙcOxBþT7ÛÚî·éU܇€Ì[¶ù¶ƒ á?:ŸØ¨yn¨fõÌÙÝçuÄ#HKÌÑ1Â`Â!Àþþr5„aé} V± ñ„Æ †LìrÉwn2“±’le/¦fd ©kE(ŽÇ3›9Þ‡^Þ¸¶ÕÀÍšN”¢y:ÔJýôYüä=ãH‰2G#ÛVÁÑͤF ¬{Ìã\”öA¥û.;­ìµùû•˜5 d?† 8¶>(AÎpÆš@=,ã‚@†Ž`%(aÿÃE+Z‹Ž=èašàÀ- þ0‘Åìæ8ϹÎwÎóž·lfS~f™ ÁH&TM÷ß4¬a@$ÚäOÀqNP¡™ófÜm27²Õmg®ãÊ"4"€iƒJù Øv¥ˆ'0¡;Øt F(|³½$Õ1™xh"XÈ&Ž}žƒ[D­ûu騿3öḹ&gBº’Cè`84D”Ðiˆ ¤ûÐEŠx³¶# áG¸ûÏ ÏÖ£õð g.´Ö8( A ÚÐG#(oEÌBs_,±  Sj¶>ÍÍ&»×ꃺñ¤føât,^ꬆ"^©G`° À<À\À:ŠÜÂP AAðÀ Rð?@ 7ð €Øë lÒš ?Îp¹ªã›ûo JRÄå¼Ïk‡:¯Ô—,nÕ)äW½×Ûñ€ Z0»&¸,@À7ððQÐPd` žÐ Z Æ¥@D€?nX,ŽPe×§Îg·Ÿ{‘/ 䛞!šð ¤§ñ …¢ ¼ÖJ?Чà Uð^à@uWè’t …² ¿À ëÐXÿZ nh~g’¯ÞèÂ„ŠÆ]*¯HÛX‡Aà©”Ó»š@ ñ^óP&ä0 `ð` P¶F?æ€ ºÀÛ ñà ›p¿p ›°Òð‹Ã ä É“¼Åȱ•lÉ\ÚÌÎÌxƒ4pCUR¬Š ŒƒÀS‰`I­ÜÇ€^ŸpÅ¢ç ³UÅoÓ›`žÆJ¸¡Ì1|É5*Ãú¥×]µÓ\Íîê¼Aƒ`Ð q ­¬ Ê âLÎ)Ò«:=¶Înh…Vo['}ᓤº±Ìö jÏ9±É|±åp®½kÀ)Ë´¬ ¢~šP ¼ìËÀÿ\„\– jÑ©Ïô<Ïò¼¬==6ƒÔg"ìÆ±¥5½Ñ€Ò( zØP+X£ ÂY€T@¹ŸÅÉAGP ´€ ‰ÓG° [pO 䀱Ar:ѽÑeœ¬g|‘Â)yþE\Á=2 »äÔÙŽ€ [‚ U@·p § ¼° "AÐHЂûJÀö5ÆGä“’Ìì×rÏôÔxÑx×lÛЀ° Ûm€GÀX°^E@˜k| Â0X=ÐGJЈ VœÝ™¡<ýÓ@ýÌõ¼Ìt €^%‰ÐÛÙ°yG@œÿ°¿‰ý ÍÀl£ WÐÈŽY–i}ÌmíÙ+Ý£ëÜÐkß²w‚ÖݱÚJÐÝSð Z\Så}Gš°ÈD`rJ»°š‡-‰4m Ý>ߢIÚ¥‡³§×ÂÊ¢¼Ý€ ¯Ýg÷Tp@à0 $ 1 ¸ÐÛX€>ÐDÀ Óéøä\øƒ†ó]\MɦßiŒ#ºP žz¾ÑM…€½‚‚½6Mà‚[/àe§w‚«Œ¬•ÜH ÙP},õ ym`&…õÊÉžá~çx>ÃWBuàM9ü º ¹PÛ1d kÿ{ÈbZðwG=€’>éi^–tJ8Ø$,f²/µÚynçŸþÜ¡.êÐüá´!z~Ý +å¸1[ Ÿ•Ï9±6á¶ö¯Å §EàJ·GÙHÕðM{¦œé–RƒïBß`ÂÜ¡-ºž¹äÌ\çBmê¢A" µ¢÷ê¹Áгàkϰ݈a& ¿Ð`QÚ>”—t¯” ( +,U¦˜&€’“Œá韭ïINÆs}ß$$"!ëàê½!Ÿµ Y0“IhV|Xp kÜM@yÀìÙÀ M ïà•@F™3mœ6²Óp í Û¼Jب­Ð³  ªÿþQ¾Ñ|ë·Ÿ Áœó° ï  Y ÅCãM`攎Ã^ì³^8åÄ.F^‘Ì.(ÿìÿí>í£~ÚíÃ~ExÂÁç~ž5¼Ø´ð [ð§ !ð¥}ÐÐz¶0 Â0 ‡¼œ\ • ÷3éI0éêÝÔ@ fiƒúxüÀÿø_í9!(mn% ºö $XÐ`Áu÷uè°¯V Øé¤ ”%gÄ Tõæ(¥:h)Í^5iÒªÙã–rW"Pš(ù±«Z“&†iÓÆÍ`ÂAÿZtè>¡ …·ÔéS¨A›F¥JujU¬F¯f底kV¯_Åf˜°  òv° Pá[‚f 2tQ"»XšTÛ#ÚÀL&LÑ"’$i µA!Òã"%r\Ù›ÉäIJiÚ"åª4è>xµŽKº´i«¨S«Ž–5ë²s-tÀÿE mh¸på|H«VNiÚ Å$49q }º0!"…)X‚\Ô|Ðc-›¶ éñ#µ&Í›—Òg쯢Aãö,õõS×ïÿÅMŸµýûòåÇ.Ø.Z´ÜÊí­Ý‚džþ«à9+X‰gŸ?Þ€C014Á‚ |ð +p9H^ˆ b-0é2%”@1eà)¯º}€ªJ½à±‘³öðCMÇõÍG¦€,ŠG!¡â¯ xhé`vÌ­@‚ä¹…–[jÓƒ Ò$mò€‚*´ÑÅ–_ˆ"¢n)è–J€ð!ˆ-Ž …$ê¬3‰~H®%eŒÊ £lÄí¨ ‹$’´ÿCÅJô«E-µ#”t3'ãAðv”ä$%g8˜ânà‰hƒ N)±·té †#Ž"”-pjBò4âˆ<~0BšóbäÌH•Z¯ Ð ²Ñ®E«e™}Ô´H'u’m„é.¼h!¨ƒ ¤™gZ<ÝD ²leiHé –:B%‰À©šÆÉSZïÝŒªö„%ÖÆ!•}¶ÙÕŽX?AVxa…ËZçaˆ#–xbŠ!¦ÕV…©â[8Ðâ.8b™utÉ¤Ü ª°‚ƒVÖ9B 'ˆÑ†”A¯B¨a VÈG Ôp‰¬£®¡°ö™à-Eº¢Ý´™‹mì5#îÓ\vC-XiŒº]hG´07™ÌŠÕ>qµfÜ  ÐmÀµ®y­¿ÂýzÒÁ&¶OæwÃ;ÙÖusá¬@ðιΠÝR´ÄK¾›@¡ÿß"6 ˆC8ÂЈV4£ išræ˜/Öz¦ÊxeØÆÊ8;}Êf÷1Ûäì‰Bt‘ iȲ¶Üei|™¿ÃâùÂ’â•[úÒí¸¢æÍ¿g-ä|¦Î>¤D%öøªP@Âë®0þX3ú`„ èB â«ÀʼnSL`ÜäO¹ïçÅÝñ·ßîkþ8›çÚ[‰á!^§¯–¢©Ü¨}õ±ÂC"pKIܺC#(ÇC¾Ýr»€+oyº·¹ÞͦmftSlkA ò‚B (ð‰?jÃŒp’!ÁˆÃ³Å*fŠäçÓ0`Ûžã—§ÿñÐå=÷×ý‡œöôZUW¢6+ýéS_A#B‡hC$\Ž/÷3aÚß~™ÝNyð÷¾ès=ºð™--¼_+©”Á `烾¿`~†7ìˆ6„hƒ5œ=pG³~ȵs1¶#³×0Ó4ÞcÀÌK:iY:­{’‚;YŸîøÙ (‘†@B0„C†| ”ø…g°y`Kšþj ‚”3:3D±Á<:z«7¿šœ–£@‚¸_8‚:a&PØ©g D@™H ªÃ *`{ˆ\0ÀY˜Ì)ÒÈ‘þÊÁñ; ߃&ó{œ¹€*ÿhp‡hˆ(PG@š‚SØ"ÀMÀ‰ÌˆÂ}˜B^À‚h@LQ7.d–¢A¦CÃA£sÄ8bÄÈyÁ™®ZªoЇ{ø†$³|øp`nøt@‡oø†{ø‡oèN´?ø‡xÐv£4€y1á‘D[DH,­1$Ãú¨ F¥²‡Süs(Ænè†$ÅPä†{p¹}@Åhü{xv{°‡‰X‡ªéFoüFp GqG¨ ?0{p̸ix‚'À‰_B_ÐZH‰{À‡noøi˜fØ)Ø‚‰ÈBÒB9~ år1¸:Gñ>ÌK¶ S#gÿy xk@†g‡ˆ¹|¨ž8±À(øa8…IèY˜…kJ·†q®¨‹:\l;Œ¡lÄ2ÔÉ„¦‰üI­Pwpq‡w°yŠ¡$Êǃ7Œ†u¸]¨6Ù˜ ­›l<Ïj5òþA¶˰T- ¬HŠ[ÈÛ‹«u3š¦¼ÉŸ›Šµã¯ç­šT ·l.±ŒÈ‡„È+Ë7Ê$ÀŠ‹+)µ„ÌŸ­66ûÊÈ-ºlL^äKLëEÈñKŒÌÈ3À¸ò9Åü˜”¼J£H0M`ñ…(M_ËßcM ÂLw3œ´S7_³Ê¶„+Š»Ê¹³ÉIÒäÍÿH[Ms¬Lʬ.Ø„ ‰#0¶%­þœHÜu׎+]Ö÷4£›aé=[¸ÞÃäBöe³JY/RÑÝÒ œt_„%KÐái¥ÖÇß§µÙ´SSuÎü}ΈÁ#}Ù*¾]‚IY­Ùkm[ÿúmZÃÓuËÜõ_=­^påß …ÉßÅY‹5S{åR'Þ]ó…ß56 ÚëÊ7öP/åSÇfþ9]$U=nV Fœ-äâ[ŽÝàeaÕ df!bD6ã>ÆäKdÞ­Ý/–㙽J ¦4ÐbK Ù–ã}Ýè2[&Õ3ç?Vãp(Û´ŒíáŽOÙäÐFß¶ecnæ|& ‘VtgdÎY|¾gÿì…Ë?µP·üS€`NþS&àò¼½Ú!Ü4æJmhk~hWÆãvhÅÜ‹¾ŠŒNÌ¾ŠŽ^dŒöZ™V¦‘ÞVõ½]D…aˆ~dhk5a…ýÊ%áhå¯d)z5ä îéÍýiHÎI¡^éeé–öe:íÍV=Òå]æMÖ]ÎÖfe¦åûÕáæñMØÍX¯NT{–h°†æ0,cï#ÒÕP¾”‡õ$¾¦aðUOT #vkºê¼æê®V鯦ÁFÙ…&‹£ENh¥\Æ«VžìºvZ¢VhûEà¾Û¶>eR~Q®d?ÆjÐŽlÙVH‰#lŸæà l]íÿ6jmb~íݼëà¦YÚ®ìý]á² àÝžç̼UÏ.æ^~ìØvì)eÏÓEb%Þ8Ml¿ÍáGÅîúì¢&nÈ.oUå$ýônBMíXæçC†gîfá®áù.éÇîlØ&mýåNYÕåLþUà¦o£îÃõmWìäTï„n+bÅ뾄n‡–ìñÎk·oð4Y¾\hç&p…ð”–p»fMüæpEÜoSîïÞêé.ïgñ Çãó>p_ÏRjkÿ­NÒRñqÑí÷jõžÖ[Wéµl¹Fi¸m*–îŸmêæqìœå¸þ`qònq,·rÿq(‡!B¦müÝ© s2/sÿ3?s4Os†¹ò&ò._ð7‡s'd)'m*GrñÖò-Çæ9Ïr.Ïc3ñ±ý*ÿs7?tD÷ó%Wr>ßá bï¤ýf®ïÿÞs9OtEoô–!.ôEïs=gòPsçq’þpP£<7tLõTgu??õ$gtæYõOuMÏô\oóM·pZÿÜ÷uR'ña'öWïNÇsŸõböVwõgïkIgsŸ\ödöJuXçu¯vlŸvK/u\ßuhïörwmo>èh'÷mçvw?w]ötî_Ïïv‡w|¿w}okW`s¿õu¿ôxt§tp×v‚÷|Oø…gxUïwÿˆŸwzwq§xw{ßwÇøŒgw‡×xy7xuøWxïø’7y~ÿö‘çx¯w”¯x’Où‡gù‰·xcxšÿxçùZx‰Gõ™—y—wv¿x•ßyŸ'ú¤Wz§gú¦Gú†z¨?ùœ?ú«/z£/øy˜÷zœÏú¨û±·ùÇz²·z°û­/ûµn³ú¡Oû¥¯úº§û»{fGû·×úƒÿú¶Ÿzªú®ï{·ÏvÀG|¶üšú½ç{ŇüÈŸ{Ã?üUsÌÏ|Íß|ÎWsjW{ÆýÉ÷û¿_üÒ7ýÏÏûÐWýÑ·üÓ§üÕïùŸ×ûkwüÚù›—üÿÔ—}»gý×'ý–ü˜ïýÙ·}©ýßþ³‡ýØùÂo}×Ï}å_þé|æþäþáÇûÁç~âÿ~ð'üÝçýí¯|í7ßÏþÆÇ}ê¯~[Oéþø÷vãÿpô'ÿò¯Ç·~ùˆÿà ,hð „ *lèРÇFœh±`Å‹7 Ìȱ¡ÇEN IâI‡&Svd©peJ˜1]ÒÄXó L’9uÞDÙ³åO ?w~$Z4èÌ F7.eŠ´éE¨QŸR­ŠT¤Ô’V‡n½™U«Ò®^¯ò kölϯÕ®K“­J²Xݺ„ ’.K»/ñ&E+wªßšzG~{ÿu0N¾}ÿæZØð㼇—Ìx¯å“ˆg®ìøsÚÉ—‡îìy¬é¹©9nö9,hԫΦ[°è×[ -]›´ìÛ…×÷·EÞ½ƒ3o^ÜùsㄉK¦¬šzuìšsKǬý4ô쾿_o¾;gòG­¯Wßþ|tÜè½Ã¯Ë=üâúâñçŸo9lîÙ¦ß~ò 8`J’(¸ ƒ :ø „J8!…Zx!†j¸!‡zø!ˆ!ŠÈ`M’ ebP(¦x"‹-þ¤bO0Æè_B2–èâ‹8Þdã+úø#ñèÒ,i¤Ž=¹c’J)Б'EIÒ”T6IäUU~¤%G\vÿù¤Aë %fPd–9&šiþdfOl¶ &œqÊ9'uÚy'žyê¹'V´ŠÀ‹ÄòÏ>p K„*Ð%îsR,«t¤¨¥ÿjÀ¤í£b’þ³N¡‡~”@§ ªª^T©@‰¶ú§¨žª¨¨Ÿ£–Êš¢ ÐÊ)«®BY(A¤Îªi­ IBlA«0ÊR À*’H{Ò>Ô^À?®€©"eë,û¬€±â&ŠìÆ<߯².G— €@뮣è?\²mªí[®ˆ©è:<{Ñ>ë¢(<¬"/½Ù‹ï?¡’ê§¿o@ ‡ .½+¼‘µëÐÿ €$ _Bñµ5¢[1<äzRH{I®¨% ªñf åÍEqÛ/<X:ôG ³;еHb€¯ý<Ѳ f¶„ ô¨FóðÀ“hÕc_”õ×&.ëu·áZtí¦q³ìFd ïµ9S-Ü Žø¤PôG±°´R­7GD,Þ$q¾ù?è2N’åx_j¦>s:¢…ò¬êÂîÖLž¹‰5o¯Ò¹¾ÞïrËìÿP{T _ú·ÅxÌò>?|C:gœ@,sî·ðXÞ­›cLíµÝSj°¼¦—~Rê¯~ýÕ…ÿ¾­ŸÉ/þý¤Š&½Šî0¸ÞŒjô{Æ@æ4ýeJ#šcÔõ¢7^d›Ô>@­nµ®~ͺ`ø"åÁ‹JƒËë™Z½£% j"a`ðj¿Þ]kQ @Ñш‡1k1o`ÛÁ²¶¹ðŽw9ÚÔnˆ¸Èƒð!æ$R¨N)Ñjð*bÝWº›U1‡9™ŒÅ9æ5MZÙšÚô>ò­ÕI«P’¸"IÖ¸­uHÎZ.üÈø÷Æ}|‹nžZh"´0IÜÖ2¦0pá±]‚Ë ÅįJ’„¬ÃlÖ‰E_ëÚV"µð[-ä^%©Qž² êsɳÿö…*–È’Š%ñG¦UŒ$± S¢ @¦îÝQ#ðȃ%¾dEF$Z‰Ìœ™Š˜XiàÔP´Ì¦|jA‡²&4ëÅ x0HLàTÈ%HÔ\ò©î|'<ã)ÏyÒ³žö¼'>ó©Ï}ò³Ÿþü'@*д =¨?»Çä!´¡}ç¿æÅ‡R´¢tŠh·(»|­€Š[Ö¾¹¼ZeQ …G,¥ÄHÅð–¡Ec*ÐmJgÜJÀæ8ç+ðtY6ã\Ã~g°mýNZ8!ßu ¾ÔfoDj,ÞÅS˜Ê´ªý$*OyÚ¯kqn«Ñé*ÈÓcr[–Òà·¸Zÿ.›iÎ`àâ;÷.ïYµ®þĨ³•+ ö cä©Ï²ÊÓå ”6“h·¢õFÍQN°†b¤]#ûO¼r‹týªl®–—4j‘®aë0kFkv-­¾‘p+·UƒI¶µü¤ì?JËSFµ£„×QyúYÁJK¶þ:"·4È(¬Rë]ås-rå¹ItªZz2MÕ0]>W˜ÿ0« 5]!™”¹ {Ü¡ÈIÕä’·¡+/zÓ+@W½î}/|ã+ßùÒ·¾ö½/~ó«ßýò·¿þý/€,à¸À>0‚¬à3¸Á~0„#,á S¸Â¾0†3¬á s¸Ãþ0ˆCÜa·ÿ‘¸Ä&>1ŠS¬â³¸Å.~1Œc,ãÓ¸Æ6¾1Žs¬ã›Ø>þ1ƒ,ä!¹ÈF>2’“¬ä%3¹ÉN~²ú!å´E:T>”³¬å-s¹Ë^þò¥L–+ßÅÊ—3šÓ¬æ5³™Èb¾ÏeÈ\æ¿´¹Îv¾3žüföhÌgÎ3 -h0ï@ý‰óŸ­èE3ZÏS63¤éÜèISšÑ…>P|#gTºÓžÆó¥ûÌgQÓäÓ¦>5šCÍŸQ¯ºÔ¨~5¬Ÿ¬j½fÓÓ‘K¬s­kGûÙ8¶^H¢w-laÏ:ÓŽ4®‡­l]Û>¾îŽ­—-mX7»@š†v°§­íJWûÿÐùuz’½íqOºÛÛy6²ÉBîu[úغ·kÄÍîyçÙÜà¹vºñîwc{ßüöw­>x/gàùF´Àþ40¼á8Ä#.ñ‰S¼â¿8Æ3®ñs¼ãÿ8È/‰xœ1!?9ÊS®ò•³¼å.ùÈÿ“ð ¼¼æ6¿9Îs®óÇ¼à —Ë΃.ô¡½èïù@ú½p£3½éNzË‘NpŸÓêV¿:Ö³þp©+èZÿ:ØÃ¾s®¼êb?;ÚÓr²Ïü'j;Üã.q¶ÿ{ér¿;ÞÏN÷’Û=ï~ÿ;Ô÷np“¾ð†'ºàN–Ã3¾ñ7O¼¾½îøÉSþäÿÿöe*¯ùÍäƒï;çC/z‡_ÞÝ’=êC_ú^ƒ>õ®ŸüêáŒù²›žï¶¿½â?¯{ÜGž÷³o;ëë.$¿øÆ?>ò“¯üå3¿ùÎ>ô£/ýéS¿úÖ¿>ö³¯ýí+ÿ$á>øÃ/þñ“¿üæ??úÃï}‘¤¿ýî?üã/ÿùOý¡?þó¯ÿýó¿ÿÆ·?GøŸ  :nÄ. 6 º_jÄN V >_^Än v f Ex Ž ÎND ¦  ® ø D° Æ  6Ÿ >Ä Þ Æ` :Dö Šà6Ä!N`*D&ÿ¡à&Ä>!â_"DV¡¦ßÄn!¶ ³Ÿìõ^îáï YŒ¦¡®!¶¡¾!Æá‚„°ÐD"‰tÜa‚t‡J Gú! þá æ¡!âk¢•"#&"!ê†"ŠD$¢Ì#:""Zb#ŽÆ$~‰ncx¢\€b(J‡(’E)ªI'Š˜*®"+ÒÓÍlJ{%³ˆÏó\ €M¤‹\d@ ;ÙáãTM¨SP„ °lÊ•ñÌ㬊¢lâKl²èbM‹¥ÊÑÀÌÎŒ´¸ )…¶” ©YðU¿üKâü„Â,Ul¡ ÈdcÒp µX YTÿKΔ‹ÉÑM°KÂpÒ¼¶ø‹N©Šß\ÅþLÔ8ãA,—ðdÐÒLÔOD ·@ÑUPŽÛ˜$ Yø ‰%ö\Å¢X Å-Š ãI íLË×´ŽœéŒêcOØË6’ JNãäìLfá#M|Ë(á Á0 Rð”ñÒÃü¢Kœ KB YhP]Ï`ìÎÓ0ÍÙâÅä.¾‹ä‰?Ö„ÂÔ 9eV4õÄ>˜ÊeWÒ#Ëø$ÒFJ‘…¿D ë4äM´Ë,eÍ£ûìNH"E:©  XŠ d¡È•Ö %¥˜ÊÖ˜ŽF^Ź YÌ\Úüháu—?”þÃöî/¿†'É‘HöˆfnºñF]~¢Á‡Zv_Åàƒ‚„‚’…fOÚˆ‰#Ûˆ¦YgÓH!e 2¥ÝC'¢hßU+æÜˆíÁãˆ6FÅãˆ$£µ“‹-¹ #Œ$^7\„Cz· ‘Md{äÌxT†÷"Œ%‡ä‘Ef©e’SRšŽcÏ8ŽD’_—^ ß•&¶è›) äkÛøg'ƒ\¯ÄÝR¼¯ŸÓ”âT Ä1m ãhÄÌ…ðQ×P³p>kC°x?J.Í[޵Ôß™‹Y¼óö7r>*“lôQè:ÉÊ â ^ÍÿN]qΔ #¶ý!É3–|rÊÔÏ´ÕÆÿf5s2÷‹vÚ¢> 5—@’÷!Ž" 9ÞLÅ{1$òV7[<캛¦§6[|Û£³½su2– ˆ#OLáúääâÆìnŒ£9d'üu¡ƒg¬öÌ…žÑéÌÕ)ŽkŒ0ñÄ"Ý ,»$ãDâz3íõÝ]cêôÚ½û<ðßODÙÿMc²ÆŸÉÙà);8"vìhhÜã`9G5¨¡ o è0ˆvõ¹hE2´a»È¼ÆÜà†7&mlO¼‘ +#JE’ò‚ûC¤8¡eNɰƒØDê¹:G¬Œƒ®¡ˆAäáJÀâ96p†‰Ò¡ ìT>J–0n|ÐNÛbËæÍ‹4 _µ9Ó8¢%£e…9È´­’ibëHÙ ˆ@ Rƒ™(Ä#b‘‰;D,¬Š7w¸aŒ˜Q9Ä¡ÒM…UEÄüçá^JSAb«ˆa“@Y4)rBV ‚ˆ¦M !bÈ„“¨šT“íΊxB ]vlÿ>v+·ÅÙL ‰‘ñ†3í¨bX§¶RƒºÉˆ7£Ö´ajGjg”;w€£d”;le¥Õv“¹cdÁºÛo.’B2Ç&jGI¬ìŠÁè…/І½»bB¯­èë Ëå1»‡¥Æ"ËØÙÚ¶¼:œlLõ·`ñÕ42Ú&Ú0;8t´FE3Y<º!)PÎhKmêD¡ X“¹&wTE˜UQ;Ø¡™;°‚e:cÛøÆ{pdt$Š;"=õâψA@*Ò„€¢ f(Ã&¨^ÔËÇs˜Ï #ã¹fˆ`„ɼA6‘Cÿq½L€“zÉ (7»éŒ)kÞò4žŽ%S>×ã„ »ÆÊ FÎYcØM<Ü,B&=ùXcÅ,Y?»Ð8.•krEêd¢VæðCø h( GàC3AeðA IhBšÑ*]Àº°gPÅ ä‚Ô©Ú•³–Íìf;ûÙÐŽö±*ëÁþH„O7$79j`‚è°®¥ÐÜÈè¦3Ç¾Ì ¤ç.{:œœ&ï»á8=±q‰˜›Ø„A B O8pƒp –^j Ï-Cʬƒ¤Ø4Áe¦…׌ãÝN¼å]oN™#À×ÐõÅ& â8ÿ˜"ÞЄE7¹Ì/vs™ƒ)ÁJP‚¥%vq ´˜×8™õô˜”Ma Mà†=Qòø¥üŒ(øHÇ$‰I¤"DK½&ejˆ7!‡²« õŸüi±ßgÐ_G6Nx F ñ˜Ýr '´aôòO!ä t¬C:¢¨7®Áf¡•›P üžÍS²Ó›ñ§ˆoogx˜ß78D<–Hð&Üà å)S<à :”¢3µxL€ö±®q Ýî¯ÅƒÙŸwòã$«Ç!£ Dâ Ìdœšè'àà ð`´Qx©‡ZÔB'®\`;U“m{rx)Ïi[îëvÞ‘wpÿu5#{}l’€Ã"Ñûáâýp8Ä>íЊ\°ƒLQuÍaëlx+" öWb²‡êÒRçxh~9V<´3=^ç¼ä+w\´ ò ™@rPhÐŽð]úgbýgE‘ÚÇ_˜g…Ð!=WF÷‚c…Lù4 ö~nLEñ  ’€(3BŒõ8u -Fvp<²‘;Þ0}8e `Ú7pcGÛÐ=tÞ'^=çsu.1’|+%U5çHþñ šãP ›°'«wC^SUW1áÐø0S’q{¸×g}臽e.’ ;¯Ô~pP†""å0f%ÿåƒ}P™@‘Ðq`æñ0x…'T6…“ÁM®1ó ‡HÑR0è…àÇ[ Hmçäpà>˜B:ø#’aHð@…€@ ”еSîe‹KÒxbx(N|"J©ƒÐ8ƒ_(!# ´³p‰ ³Q'Uyuò~sä{uwƒç0j @ „Û’ˆŸä  …47¢ l¤ ƒÓŒ„ñŒ'V•2y©s±XŒ’ñAväo6Gr‡ìdNÐÀ]À Àf ë`:)F}°1vB#èBcÓ;{Èq|æU[È…Ó(=øƒ.˜´XÙÒNÃÿ—ƒâà5@.  …°’€'­Ô‘FQXR8ngò2-ê„…Y¨’v­ÈŠ’‡v’ñKá2²ÚBnpÚ€5 ýýÐ>ÀM$‹¶X2Ú’˜¡|ù°YÞÒ’ª¸Š€¨€W @òK– „˜Ž0|M´6ýj M8–.gti*(x©—ù—þh{T˜“G˜$„DÆLâ0 pÀDêg&ð˜Ùzð³ÓDµhJY9Ly#oÖ18e˜Â9vÃIœY ŽhRÚxi'h6=±¸.ô4à°›P ~ˆ ‚æÀ9×à:¯ÿ3}¤™X•À™€¡¦žÆÙžîyv´qUv2“aÜh”´“ÒÉj@p±™ IQˆР;Üöa;G…ôxaé—,é™ÿ48ŸdšÆR 3ˆŽ@aÀn`b  ±é$P%À ew{õåu³¡V˜5ºž Ÿ±ñK‚_ç ÖðŒ•³ãj02`¢±) ðÀ ·KIu°w4öÃ;:¡Ý·’Úq£Á£C&‚;ˆ]M ÙP¤Ì¤ r€=À¤±*ÐÀ·T+#9XJA”'ƒ\ú}^z£âZ`ˆÙ·'4 ”ÿðPÉb°±i.` µ°§`2(£v%£ÛG£_Fªc¨¥*hñ‰†qV— TM _@Ejë@©¦à 0&à°è®ƒ0 ª0’ž9ú¬ÐŠ•ïÉž È3%Õ¤ ] Ÿa º6% ( *piÙ´à ±I À]Xà:á)ž“Sž{3ã°œÁ´¥ )t¨zªªÚ-ºÀ  а7kªð¤+ Pi ¡ ` ¯¨`ð …ºidb'J8ªˇ6šª-ë²q¢•’!]à [ÿ€{ •€P Ûð0±° `ꪫº  ¶p nˆ÷Z Ù$’ÀEþA¦ÿjªZ¨µ,‹£¹G¦‚l¤¦ À æÐ Á0[`ðHD%€)` °  Û¯p*X@ ¨¢HÅkg«Äp*´¶ §² §†lÊ&m¹’;¹”Û,®¨'ç ·`ï@1°žP<gð@*°`   ‘ ›À ºÁ • #k4K™…–—½ÄU~°Ê—}Y°—aP<‚àé9—±e‹ì  ]`Pæ°,À4Ѐ¼ à `ÿðc` ª ŸÐÔÐZç€ Gp“3€d »2úu¿{¿\ÛµƒJ7Õœ º³ G!  QfDBª XaбÉõup.F Ò Áà æ°[0í;˜wÿq¨_„¿ù+°U)¨ÕJë¶D£úÁ ¶À ¶Ð†åý!¦0q00ðšWÀˆzP±{› ì  Á  àÔ0…T7 â@Â%¬S ¨) ³^û—Å©£”iF@ì‘¥ƒD…ŽPÕ´0Ä ˆ9¢PÇ`3 K…¾ ³`—Úv‘’.yÂ(ü²[»’;ÿ\FQÆģ;xÉ7` ¹Ä¼€—¯`Çx¼èÀ©F#]<€ñaŠæn¢ZÈ+«¿+lg·‘. Ãi|P§2<°MYÄ±Ë ›Ñwœp N ÅR¬}WÄz3šÊÐ⬠¼µ'¼d±3¶ÿÀÝ„èp¼ÌË1§ ‡|‡` ØÌ[p ‹S.LD ¨` ºP2P ½àJ Œ ¢z6i!$«ÜÊ®Üʼnü‡§£#<²ÉÛÏ—ÂÒQ T bù  ^@;X¹ ª@ ¾Ð ØDK  Mðe¿:sÃ]JÐÿÆÑ*­±LtîÑ o ÝÐ ‚ðŠ ,°‚…  FÑ¿¹@ F°1 : ƒÐ: üäÒ„,yÛÍ&LÓ°,ÆRS‹ðÝ`ÛÀrJžÁ0ÝŸ¼¹à Z °÷Ví 3#[Éý m€a}Ó`<­_û?£¹)ÕQÖg<ÝkmÁоX`F1×\sW|ºÖCÐ ù°rv’¡ù"Ø!ÈÈ5ýÅ_ªÈ2{~£!Ã4¼i-ÛÔoo/pZ0.ÅÀ9Ô¤  N½[°:pOð@0 a ’´‡ V‚}Š„š®ÿýÚ¬íÝ®½Ø°Á · 1'x"ë ÑÀGÑ;à°Xðñ…sJà°]àÁMpÒR½,=Îf+÷þÑQ±ՉmÈÁËà3mбýrœ¡y„ëÀ± šÔ ‹À<˜i¯œßDÐkG Kâ*àôX ù DŒƒ-[L­6~ã þÊâÓ2s ›šÞ“±T›k8uOãabßIHå ª@HpDHgÒKÀ× P t9Î @ŽK¢«°¢ SLîÐ êÀ \оFÀÜPÐß+¾Wžå¸2ºxÚ¶ÎÕÏ,æß]ædîÅãý7KçFá ÆÛѶ ^ðªð‡ÅðÒ s¸P ÄP l.| —@ ’£âL âx Ö` õ¸|ŒH6ÚÍùÃÜ-îˆ}æá}È¢9ëàÍß,ä±aÞèmS8¥º ×{èNПÿ…œ0WüM9ÅϹÐ×€nDÒ;о*½Ò.LÛýÒ{ñ¸ŒþèÎÅïñÇ œ Ë¶0Aó#’ L ª@ L>ÅŠpu Ò0qPJ€X°H09·«;ñ0s1°ö: kÕ>­j‹HÓ÷qßà:õØ…/˜FѼ¬g¹Lòºti¶a½}ÑÁ“ó]™­Bà:¨°]¬¥Œ0І7½Àä’Ó?Ð =iR èσ|ñª,L?øÓÜôN³‘ÁËHÞøÐ1ùpKµ‰×tÐïù° Oj]ðù¡O9“±m'>9HG±ÕÿŽhR¶—I¢ÊX¯ñÁ9æ8mæç병Ë ´¼ŒõŒ]·q ]¯ œèÒ@s u  ´²…”)Üò-d˜/Þ”#]:yY¢#È"kP–4QäÎ5jÞš[ØÏäI”)öË·n]C”ëRΤYs¦L›9ušÄ¹ÓgÊž?…ú“¨Ï|$¢»0Áé^ ¥N•ªTê:P640B–WìòŠ#çÁƒ2œ¶@p°cÇ–,º¦òòu䈑.štllÒ„ïfë>*\¨tçJ†._š,ɳhÑ£sF–L“re ˜}^¶™t*;[j£ZzªU©írÙÊ¥Ë' ´rbÿÇm X¸ñÂ% *7äj˜ëÒD¼(9udÉóçL€¡3Ç5žóé”ʲ¥Ë’ûqÖ<¾¼NòšÓc^Ï^²vÓñå£6Í.k®s¡=„¦ÁJ0oÖ(ƒ TÉkƒ¨òáeƒ”P‚R¼€bBj¦˜ ’Pb ’i$ñhj 1ðÛαójj¯²k²mz‘%úä³q!o¸!F$ùÎÙÀ†6È€wò±Å¿N8@6Xò¡æ” nYè– ” æ»Ž˜ðš…ÂÁ› ¿lȰÎNôλÄ\Š)FËØlÓÍ5áûÄ“$ÆÏd$7|¯fëCŸÿìäľ›¼‡vð; w¸ÄõGÔh\ñŒÇƒƒFð ŒÍuÎln€CÙZfm8b43S‰Àà rЃúZ"ù6Bñâ·HP IX‹§L 9âFެT! %Äܰ,DA"tá_3žÉP6˜m pøŸ9 áˆ{ ém%J"zäe>~5‘M ŒÏž¿\,l8TârÁ NäâvÇk˜Ú8!LjèÄ fè…k\ÃàÈP †ëBÛ„#$Á3Åò*s ¡Û`r>AÞ,—º<¤ß4^Ô¢[ð"aC÷j4#Ë:×s¨AŠ d¡ìD:þÿ×+@à¿(AȰ DÀÜ“<ú¡|Ñk;oó#ÜÖ ÈvR‰ó¤çOÞ*%hAR"f1ƒG¤ýã#\ʇ;&”­ƒùPÅæ—Rv"’xÄ@òDqŒƒÿ;g:O+xúKu÷Â¥Ž e2óòÆ'@–%RLcYëÈæ6KKˆÃ•öH*ÝÉÎx¢I¯î¡*_ëéÄÙ!R‘ë§±¸È#v¬_ÄI9ÿ~ŒGB0â1{ã,¨B A3ÄyÄx‡ÌØ)ž#æUPªI{Ò¾ª¤‘ñ‘"K3[©L;ÎZX'€ÑEíÄyÞð†ò6Ò…S8ˆZW’"èЂ¨¡ t nˆ0+¹C©ýh‰T»×’þu±e‘J»ÊH‚}•žøÑ9 ± l™ØQd’E B‰À†Å` eâ]P1@KÔ‘ô;·Ty%CH‘Šw¼V=/Wo44šÊ†!¡!ÍÀ–<ãI!Øi®"¸tˆ6X! õD2±s@Žè´%KdŘX٠“pJ]ûZ{â–„Bþg‘2¼†Pÿ jkHÂÜ¡<(T;")±BàІ¯ÔCoxqŒ©1cÚxXbn[!aûã ÷ØÇ­paå£^öÚ½  “£&ÖÉy!Ú@Ä  ÿXÀ605Ì]žÈ͈‹ùNfМæ3GZÒH!rí*?('+Šì°|Ç®Êå°‘Ä!®ç6P—ÖÅ.‘ˆ¸hXÝÇŽVóyvì³I»I`—Ú¥É8¡„äC5¬Á`±–9…%|L VàdänjGÀáù=D!’á ]Œ¶´¶Tô¢_¢¦DÓ:ײ®;Há6ßóo qÜàÐ CPöc]È&*Úí xÌ5ù–1UÂè˜)†Ìÿ7s¹Íýè5×ZD¼&X¥1\´w/Ê]è‚–¦ˆbÜ ‡# 1\I8‚®ñðÆ5H[D‚GVÝMy„ÇÍK…û5æ²M·…môð›Þ¶!À¾Ä>uñŒoúU5ñ†I8$rÙMô˜iåÎöœÜŸyyÑÝæJ«—YVt&²PöF‰…¼A¼áˆ0İ‘¿+¹ÃÀÓˆ5Së.æÖ²)1箺‹øî>†Ë×ÎÖׯéC{!Õ j B†@D"¨Q A.јF=¬òZ±Ö_xÅLøD^©'üå üx=êø æÓPðËžð¿ì  »ÿ4”§EÔ7ȞМt|~Á³:ýxfVú"6ßê}‡‘ƒÓza>wƤF– E4CPE/ްNPè× %¾/¶0hăç5ó7Ã]éoNù÷;Âmý÷ «9—@Ô¨/äyŽë€‚!‚‚¼P‚(«(‹˜# ‚b˜ùã…K´4¹¿‘ª Ôâ¿ê£¾:!/¹!\AlAÌ-Qb †çpç¸ÚÂJP‚` †ts˜bè‚-ðiø^0aYB&lB'|B(ŒB]!í‹=´³‡ˆ@Éi(‚„À#ÐN«›’jˆÎêaÓÿ š€[{™ \9["Á¨£ºÕû¿««°*4 Ù»’hàExFP%</à‚søˆhˆs‰'ëAU¨„ àv¨¢zY¹Ó+¶b³C•3Ôa°éËCÔK½ÓÑPD ” ‡oxÅWt{‡kZˆËbŒxÈE©ÈEù;¥ð`>x* A÷‰›3yªª2Á@ò¿ÎPEhD }ày ‡’à]ìzˆXÒ} )Y¢b7»¯öQF¾AFqG™CÅedÆ[‹Ç ·x˜† % LÆðYŒ˜Yª8,3@r*ÓzB4vŒ¥f4ÅvtÇsÆðB­òI‡hÈäÓÇÿY½wº;¦"GÖÈçû™ Z­Q$½×qÈ…ÄÃdƼ#‘nK‚ÛÄo FpCo˱€T R¬‰œÄµÕ©â1†<ɩ˻ Ê1YñÑ :œX9 ª J”ÌJ­´ë+“ðù£¸IJ7\Jk›|Jœ I¯DGªˆJ5¬J˜ƒÇ®ÔIš¸ =½„ˤ\›•hCd´uıèã¸äÊ©ÔC•ŒKÅlÌyœµ:ÔËFÓdz¸€ûG™°?À$„dq ‘$ªL¨+Ë»{L‘|Ç¢,Å”TH«t¢ØGïàHÐsJ~”I–«Í#ê̸!IÓ¼%ÿÓxÊ™)•4H¡T½Õ,¸­$È{H7Œ5Á”Iéd*1»;oóM¡¥‚ü<¥ÒÍÝT'püIŸÍUäÉåDNÇDO¼ŠÈ¼Ì=ŠI[a¹Ô ½2qËy¸Ó±M„Æ2{LòLVEM»ÌÈÎøULÍT½ÔXÐÖÁ‰¾ì®w2Fy9Õ Ç€S9ücPêV+ÅÑêìÏ`-ÓdyäÓ¡`V5M„ÖóVI%Å ‚ÏÒØÍýS-Æ`­:Ñ>U8q]ÒïÂSZ­Nå»Ö2ÉÕc$É4µÕ4W&õ@î Q5T}…Õÿp}™q=Xу0áBJFý®±?¯ŒØh}Ô‘º5HýTdPÄd×T‘@µ«¥ÓUU¤˜É§ó΄DP”ÍOý@°Ü»ØÊ—‹õÑnƒ*B L@ºÕ‚UÙ´4GIê\°‡}RmÚ†Ø*õI%­Ë¥ELgÝS4剨ýR°¤Úöl>*mÊÍÔÌN4Æ„5‘¯Å×°ý̱%W)ü[À \Á\Â-\ÃeBŠUÏ·ôZzµÙ<ÅU«m\‰ýI§zÃnY®­S‚ýתÅλÀMVS-Ù}EÓ>âÙ¯EU°4ÌAíG÷$Mœ¬ÜþüHß\–É»!½ª\L´%PÿnSÇm‰­ÙoÝVE#ÏŒ¼›ÁÛ²,Y¼BKàTÈ­›çcÞsZ%SW\'5Ì©$K¨ÛÑLï%вí^½‚Úó=ÍÒ-ÖJ%WWÕ ˆ4TíG×ÊÆ Ñÿ\S7$^™ÕU}T[ï=Û;]…ßù…¾ÿ%Æû="³Ô_ò)ÌÏŠžèÛèUÜi]GþýGZJ_NàNDz”Òå]X»ÛZöÝÕü<_ÖàW]ßÇÕZÒYVÖ¾áÙÔN’õ¨äUÞ»ü6¦ôÖç%Ô ®ÚÐ-WFµ^Ní]–ÑVåÞæWåØ9Æ‘M nâ¦óÙŽµÝßMÜÍ b Ö#í áÿÞÞ$GøäŒì,`¼£aÂl_šœÇýeSŒ„Ý—…ºá=b%=:áÖanÞžÚ3ñbk-áúmN»íÍM;•\î×øâ5&äLŽVrÜÛs`EN­FkäÙ|äP 7/VÚ †[úeÛ@Î^'~b)¾\P–Sqa9~V¼«c±õ@ãÕX{a>¦ÜW>V>ãA–UZÞä»en#UINÓ[¾ðÛ”£Ãæ<½ÛGê}QUfNNãfN]{-Z$fã—aÑå[g|VØL§Ž•ÞmÝÝWžÔWAgr^f†Rƒ-fé[¾&áSö ò}_4†b5NÝBfà€fGÿñ|×ÓeÎqä»þUh6VfÞè‡^O†Ù ÖÞ,U¶1Œ³öèNnhm]h«ìMwFæ™-Çò@—ýQóÙç3Õd‡né‚éRíæÅ-ètüJ êc3QæçZîh§væí²J¼O66j‹vcèTjóFY¶d˜–jŽG±ɈP¤i°æÜ¨þi fé~ŽLµnj¶ßÔS'ãg½†êžvi¶îëp>ÈY>f»^N¼ìµÞëækÀ†k†.Tñ|Z™î±´Žì^lÌÎìËk¦Vì£vÛ›6išìÕÒ$æÁnë—k·~ì}ê9ì—‚TUw&ÉX–_Övl×Þì±Öíÿƒ߃µÚÚöÓ•Æí²~kâ^í×t`ƒ®à¦:\ç~nèŽnéžîÀcÆÖlÞŽëÆ>îÔ>fß¶§ÍõãľîÝÎîÛÞnÔþk¯´KÐŽéµ nŸîîôöló>oòUó½éÔo¿¦ïú.níFïûèñpëÆî7pûFð/o‰þ`ÐEn_pÏmãžïÓní¹Îéÿ–pÿpõ®p oð:Œ\ñqžVp ïpùð ïf¿pŸð—q§qŸØ'qwpÿñïqqÿêáÆð÷ñ _òòrÿr)wò&¯rÇñ¿qr&·ò-Ïp?òÿr0×rÿ"Wò+oñÏr4Oó3Ÿr*'s1_s#§ë0‡ò27s.÷r gs<Ïó?Ÿs=t8ïr?/t>ó8—s;tB?ð6WsGô@§tDgôF·ôEWôMßs7çôD÷t,¯sÓsI¯ôLGuHGóCïtQ?õKÇôUuXŸuWOòHõOu]—u[OfSïu_rZvcçu]oõ.ßu\/vdôeïsRÿõh?vh¯ögovDWöPÏvMÇvoOug¿ö=öp÷[ÿvp×öugwbOwt‡÷RÏukwwfovêÎw}ßw~ïwÂ¥ö{÷vø€'øa/w:·ín'÷ƒßñø®wÿ{çö‚ŸwUvsgøZ§r‰?x„§wŒÏø…Ww+ßxyƒ/ù‰·x'w’‡x‘oøçn—'ø–?wŠ÷—‡y…ùiWù•Ïù™¿yyøQßyޝùzŸÇy‘Gz{Oùwø“Wú¨7ôž¯z“z©×ú¬'zi7z”×yáz›_úm¿úŽÿù©/{³ßú¶·z°§z¬û±çz¨Çz§'{¶O{¦_û¤ÿ{–G{‡ïoÀú°—{¾÷z¹ür>üÅGûÄû»g|Õvü½Ïû¦ü˜Gr½/|¿7ü’Ç|»Ÿ|È}ÅOvÍOýº}Ë}Ôû½ü®—|Ò‡}O7}Ú§{ÿÂ÷|ÖG|þn|ßWýÕÏýàïûÓçýÞ¿üÍ¿sãxÜŸ{ÝþÇ·ýÀ§þÎw}ä'þé~É~ÙŸ}è/~îÿþ¢Ê—ùØ÷þó§ Jh÷øùŸú¯û¿üÏýßþïÿJ,hð „ 2lèð¡Â~ûQšhñ"ÆŒ+jìèÑ"Ç"5†iRbÉ“#SªɲeÇ—07Î4)óãÍšsê¤ØçϘAI%Zô"OI•Î\Úô(R¨Q¥¢¤ZÕªO«NanåúT+Ö®-Åž$kkVªfW¢5kë[«qå­k—ê\©yõ¢íë÷/àÀ‚.lÿø0âÄŠk\g@¢+Ö¥%@­~ù ÈTùræ~™$çëIË•DÇP÷‹l 4Ì|!îgtM°%Næ-`íi‰›C®;$çǶq·T økßf)]¦|›xkãÐ À¥î=ó}Ï ŸdsB×$ïÊ|>W®·G€ã}ZÖ©§ef& ‘}æpÖ™À×’ìF oqfNž©”}I¶N®ô÷_KØm·=–à‚*€…,®÷ß„Ž5ßPBa&Їt—‰rP¦”nü‘‡’r5­s‚ë¬æ]}÷õÃ!o”ð‚»Ùt™D¼ÿEže]²g’JDá|Yf׆R’—Ï:ël†¥™*Q7"qÔ…‰Þ˜#‰ço®©’¬í'^WJTçEäÓöÙ’€Tö³§N—ZÚOšjÖé¦#fBkBÂÄ©f—É›…-Õ9Ÿ—GN¹#¡-ié~O‚:¤J{êw)-¯öc@¬*q8Zªê¥†+¡;ö竪Ñ¢žcîEéˆß‰GK’3égN¡BKiE{žJ­–dŽ([èLfræ¤+¶:9©K–v%»«Ž¸b›ó²Fh‚è5Ëä¾-¹‚iiùðÂ9šÑeñ[í¨XÎÇ$XÖdð“KöÔ¯x!ÿÀ“-íÞ{bVoiwZŠí èNɤ•+/*n· ó¤]›ÏYî—³IòÍ@’I·ŒÑ£ÞYy.ƒ þw„ÀΤž‚Òrߊ'㩃êÝ ´Å„\!c=£è½eŸyE‹D*¨…®§6—w‰—qƒxyW"à¡\â½^K¬²z!#pmãïfd¡ºÕ9Òè¬Äå ß:]+\éq+rs¬ä™cxmçEù"y°Ëqa(ºD¯+y°•Õ~»H² ”™ð»HÐ:½Õùå›>úé«¿>ûí»ÿ>üñËϸCÿ;?þùŸo^\ëÿ?ÁÇ¿.ñÌU:U¾833Šà\£‰;³©É¬cq$ªÈhJ&:´+€ŒŸy$ã£ó ÀR—zRHx] C¼ŠyxÕr'núÉÄÃ8/ÕúIa?(DöÅ0…)Dx.…DÊœÐùJá:†ó fbêI¢ƒâU©­çRæÐfâ5Ä1Âo€èÉ¢rü‡)ÈQHFL!²Ì”71ž=ÜP¥õÆ0ŽŽŒ~ŸÕ(ž#ÒYNúΧ0d*žqIƒ<„µF%bȇú#&ÑHH¾Ñ3t¼”äöCÃ.ò݉d iwĉy¦ˆßW&ÿcI>sP6àLédšß™—½¤¢¢|I<ÏТ–Á+]f¢DY2€)j&4£)’È,SšÖ¼&6³©Ímr³›Þü&8Ã)Îq’³œæ<':Ó©Îu²³î|'<ã)ÏyÒ³žö¼'>ó©Ï}ò³Ÿþü'@*д =(Bª½81´¡}(D#*щR´¢½(F3ªÑr´£ý(HCêQ´¤&=)JSªÒ•²´¥.})Lc*Ó™Æt~A`pšÓ¢Ð´§>ý)Pƒ*ÔŸÚ´/:½éaŽÚ’¡2µ©N}*TKZT´(•ªIåiT³ªÕ­r•¤SÅJUÁzÕ¡tµ¬f=+M¿jÿ•°®u¬AA+\ã*W¯"µ0lm+Yçª×½fU­T¹«TX¬òµ°†ª_kW·þä°Ž}lMëJÁB…²,f3‹ÒÄVÖ0–-Êg3¢ÙÑf–³G íOP›ZÂ’¶µ…5-h=ËØž¸¶¶|…íPT«Ýî–µ¶ýíYqÞ΄¸Åõ-p“»Uá®v±²Í«r£«Uæöĸ͙­N¤«Ý¨R··Îýnc·+^¦vWIÏïb¬«,ìîô¼ƒQïz­_“Ì—¾î}ï}cÜ5ð·¿þý/€,à¸À>0‚¬à3¸Á~°%a‘úŽd¿¾0†3¬á s¸Ã°„'Ba‘ÿXøÃ&>1ŠS¬â÷7Ä©aïLX,ãÓ¸Æ6vñ”` ó¸Ç>þ1ƒq<â”ÈF>2’k,d·$ÉN~2”;¼äüÖ$ÊV¾2–¶°éìe3»ÙÎ~6´£-íi[ÙÔ¾6¶³­íms»|Û¹¶¶·Ã-îq“»Üá·¹Ó­îu³»Ý¶F·»ã-ïyÓûÙð®7¾ó­ï}ÏúÞüþ7ÀNn ¼à?¸½®ð…3œØo8Ä#Þð‡K¼â8Å/®ñË;ãÿ8Èò‘“ÜÜ/9ÊSÞì“«¼å.6Ë_.ó™ßš!ù,`8h€‡ ...IIIVVVCZtPd|nnnKi‹Mw§X{¦gw–}nŽy{‰xx˜g|£u} Y‚®|‚Œx”i†ªfгn¶y‡¨rްz—¹©p=–sRŠu~š~l—{y£W\¢\g©lJ¬uB¬|\»}H¹{X©l{§{e¸ej¸iv´|k»s|Æ~;ßw.×y5ëz/êy9ñ}'ð|2Ü[[Ô]aÎd^ÂwLÄwYÜkOÚgV×xKÖxUÇciÅksÆvgËryØdfÔmqÞreÙwxãWVèfIåfXêzIèwVãgfåopæsfäxxˆnІv‡…{˜—m„—v‹™~”¤l€©w‰¤}‘µz†Ê|ƒy˜…x¿„L·‚Wª‡h®‰xª‘{µj±Œr¹•u݃.Ö‚9ô…é…'æ‡6ó‰(ñ‰5ò‘;É…GňSË‘YÓ‰GÔŽSÜ‘MÕ”WÍgÊ›tÔ‡hÚ€zÕ™hÚ’{Ϥ}ߣjاxìˆGê…Wç–Kç™VðŒDñ–GðœUè„iåƒzë™hé—wí \ð [é£gíªuî±|ð¦gð«p‡‡‡„†”„ž–…‡›„šœ’‹–––‰‰¦ˆ–©ƒš¹—Š¢š™¨žœ²ˆ¡¼š¥¸¨€€§…˜£’„¡œ™ºŒº‰•¸œ„°š©¢ Ÿ½£Ž¸§™§§§ª§¶¦±¾¸¨¤±¬¼¾²§¶¶¶‚ŸÂ‡¢À˜­Å±Ç¤®Â¨¸Ë«½Ò´»É±¿Ð«ÀÖ¸Á˺ÇÕÈ‚‰É‹’Êœ‚È‘˜Ø†‡Ú‘ØšÕ•–Íš¢É¥ŽÄ­™Î³š×¬ƒÕ«’Ö±Óµ™ÎªªÇ«²Ì»©É¶¸×¦¨×¼¨Ù¹¹äƒƒå斊嚙꧇å¤í¶†ì¼”ö¬…夤诱麣常ò¬¬ò±®ò¸·Å»ÅÔöëÁêŦé̶éм÷ΪñÀ¿üÒ®ùÖ³ÇÆÇÄÌ×ÊÒÚÙÇÆÞÏÑÙÓÌÛÛÛÆÓáÛÞáÝàãåÄÄäÏÐç×ÈåÛØôÅÄñÐÏöØ×æßàåàÛåääîîðöèéþþþÿÿ H° Áƒß!\Ȱ Â†>ŒH1aÅ‹ÿ&b„¨qcÃŽ%†ä8’dÉ“A¢¨ã-Y·úY\y°%J›'qæ¤iPçHŸ?y %ÈoèÀ¢%á)UJÔèQ§¡ 9ucUŒW±Bå‰ÔhWðnÉûÇOÝ-¤_‡¦å™µb[·RãÊÝŠ2¿»xóêÝË7¯Ý¾€óbÀ€×uwÿ^Xñз)·B6it2eº%3ÞìW¯½qâÈm\øpbΨ;ß}<·rk¡–?b®›:µæz‰ é>´oñ+ ®ÔÅ€)ÞéÚ¨Ã~½Üiì…Ï¡Ï>©yc¼ûrW w¨µÅï0 ÿŒø¸uÆÊÙ2Wï|=Íèt«Ÿç«¸^¡jwíJÄX^,W±¬£Ú|×­ÖœkîÝ” ‚Ó$Žs^¹õf݃â•Þ{ îÔÞ‡ 6¸†*¦_!ãì#N!ˆÌGb‰x±¢ŒÖh£ˆ½H fÖèæc=.f؆+Áדd•$Žéd^ã’H5@>)ä^D2xã4vé%“9yž˜ùÙv%}1r©æšÎÈ&UïÄ)çœtÖiç;‰¥£çž|öé矀šÎ1|ìÁ‚&ªè¢~Þuç£F*餔Vj饘fªé¦™BEæfõŒSOoNJ¸Ÿnß¡w&–i²·¥«_¶ÿé&˜ }ºX»Ùcâ6Ò`CO^ÝÃOv…TYશ*k¬Ë¾©å«´.d+`+NÙ]5Ùó̶ÛÎs×>ûáU Šª"›¬°:û¬º%yd´MÛWnöÜ…H!ÊÜ…Í3Ò̳ͶõòC¯½Å–k.?Yzm‘Kzä®CðÆ›!¸üÝ5î1wm‹—4ÏxËOµÕ\»™¼É)Ëð¬Í¦«òÊDò^Á›[¾ü¬oÇxáZÈ!/öòÈ&¯ËòÉ +\tËý ¥n¹ýqˆ2½íÛï¿ÏôÌO¨£r¦´ÏAÍn» […$Ò m×8MûQȉŒ³ÍH,±í6ã",rÕÙë¯&ÿ 6ÊD3+ôÐdÿcv^ö±xG!G,áxÜãøaÆäfˆƒw^Úr‹³•‚{ý5Ua‹]8B‡ç\H8BÄ‚h³­ä‰ˆƒˆhX 4^Rûkó˜]ÿ}´ï<Ò¥[\ˆhÆADºiˆgüGåµi¶;Ç_Ø»’¿s?<è¡ÓZ#Žj˜áw‡ 1Њuâ 8Ëí6CŽ Ý%£ ͈È"šòˆD$ÞÁv¶3 Ö C'@ ¤! ˜° c: HŠËZIcdJ‰ÊÑÎ\û Ô¾Uˆ3øá Zˆ '±6àAº\LÉñÇ_–1˜Ä,ä7ÁiL‚”.ÿQ…!ÖÖ¶HNQ b(ÃöÀ6è¡W]\G,HAÿŒjXN/šÙ6°±o…£ÖÒ÷F4 шd' IÊršSHñ &‘k.®‡´ÀiBpø¸5u`à õdy.~ì‹[Ø ÈÕÃrí¡§Œh*Å9T¢–óp¿q1øÐL¤cE©Ú—$0ðŽ¡€¿ÐÝ3( >‘x¹ø1i!§T›Ç<¶5ˆû# 5P‹ Q¡1„tM¤H3.QPPB€ä˜ )‘ 'ðÀ‚$À@. DbB7])¿67@!º—h,Ì‹¨ëx‡a2‘lHƒÊƒö3ðö1/×éŠöö‡…)"˜×'ç~ìñÂwág ‹ìQC°ãi…]ÐË­zÙ H@6y®w$£\:ÜîöQž—jügp¥ÚÌC#g¨ïÒÉ8´¢³xðÜÊÚZ›òËØq£ZAO^𔃸ø =i‘¥û+ˆ9K΀Ó³ÞØGƒ¸éRÄ"+¢)ÿÂÖÚ帓p[™Ÿwƒ7]òÛ÷|üþyÌLË”£ÒÔIÝ\Ü>d Ý¡ ‘ÀjÐ`@Ä¥!äW?ÏoƒÃ7^e|*õWÇ7Ç ò)û ý…}fJÕöP ‰ %÷1pe% Æn€:~‘9ÛÀ{ì§cÝ‚^ÃǦ’Vô•-—ïârÆ·d"ÆÖGã’©×P5rn¤Ê Gõ œ0 ¬Byt381¹QÀ´K¨|i†|É—pœ‘’IÖ‡Th{AâPgûpP*H 〄^ð|¬DBnw{±c?ÿȾ„0t–†ha\,±dørœ.…€f ‚ d‚’ûÐLSŸ!E†°‹PôÔQÔUŠBr†s††”?L§róÕ‹˜hLŸr/‰@9c€ˆø-ý”PwÑCoäStz`wz`ê°b °{€©‚‡Ž˜ãP þô1ûQ L„¹ø»ø‹x'z™-Ÿ’8~г¸dEºqeSÔuÐLf`9ð8P·`dà±ðÃh‚Ša½·ãâ#ø+{À3–u¡†oˆ„ÆmhQ¶’‚+¨qzGou*ÎÄz%“óÕ”; |0‰$ŽÄwÿ‘V>ÈV†eÂ*Ët‘y×z±†J(I i. ö"9hP d~P 000 lEj@1„oŠª±/Àõ1{üX5Å‘ u”˜”ŒL™sÈ…Àz140Ðð‡À3”T©qA–wA‹–jil)_ì(ušøŽâc.xä‚…pqhŠ€04}.p q°j`“C¤ø:97<¹W–6FY›¶9™íèŽ÷•}ˆPLj÷è#â0=hŠcAgP'àÿÿYÀN3}°Y‹Ä+Žó8KÐE‹¹SâG›Cyw¹ÿ)”¹wLø):å#$iŠÉh“”ÇIbÀ+`ÿÎI{€z ~Ë 9Çv`&„âø_Žé†o —F©  ‡Ù‚ìu‡5•jÃY@fàZ + ÷‰ŸÿÀ/ÀÐX0 ycS“yÜ¥tœWž¹‰I£5:zqJl¶tÛ G0üÀX09…Ob!*¢tÀ  ”ð g±Rx‘yƒ=œã É 7*ž’ ¨Jâ²€hâ[E Ô ¤®T k°nI*¢–à|@ ƒñ +0ps¥;T=ï§›_*¨Éž^ªJœñG˜Ù^bÿ$|‚ @š°ñD X |q*¢Õ ;à ­€žÀ/þâ¢Z£Äg£ú˜—È¥]º›œ‘žù؈)RE WÀðÔyЩ"š '`°ß`Qà8Û2 Ý²#jž¬Úªn™„Óúk¨Ñ›ÊØÌP©€ÑPj;Ð $`' À*¢“ÀUÐPà8Òp³ˆ#âð›¢Ät·I¨…Š›ƒ ­à¶J³@ ðP™· ë¡À ÀU¢ ¢à N`¦`=èšw±">bƒ©*£J©ªÔª¥[ ¡«‚[` S + ŒHÿ Öp  'pŸðk ¦Œ` `Ô6w”õ’>¤ÖéM(»²Ñê‹|×»æh³¶(³p”ÈÀ ;0é ÀB{Ð PÌ霙` " ¥° àP° {"*ujb+¿ 'Ÿf zb ’ÖµµÖkŠ»¸ŒÛ¸ŽÛ)N¡Hêp¯pôÀ*ð–Ð4€_ÀMÐ PÍ –` ³0”07Ëà±³“ü°£iéI?%”û¯¹ÛtKžrè ë 7øï¶ë³P>pc [ Ð%Ðð`  ¥€Ÿî°@˜ÿp Uð ’¥Ÿð?7ì·"‡ Š÷‚ K‡»þÚ¯ók¨½;£¿Û5”À šS x‘ 㔀c*¤X »#p™0èZ±ÿÞ;•À Û0;€¾KÀ~d· }W™º+°*k/bmSÀ/:$·à ”à x¢VóáÐ [[0G;‹p Á[“p ꪧ˜P BÀ ¡P Vð ?tŠ%lÂQ”V[µ_l²qy¨Í€Æ>Àå¥û „…À·$€q]P·–Âp‡ .5¾Þ‚•`–¼Ã¯ÁaÿLÆôë»ãéÈz¦ui¼ÆJ‹z!{[€q ¶P o0 éð™ÀÇ~Lë ªƒ[…Ì~ö`r¶G]ÜB„µ®ºª`Ü–[mÀ!/Ãm,Éx:Ãï ^µ‡`€Ä·p âv”ðQ<ÅU<|ÖUy1èrËY{„»,­Õ¹Æ+ƒÑ¿ÿ{,€±pÌǬIÕà©ç@ÀT0O°±õÂ<ÀBð ®0 û‚B€ V J0ဪ‰(¿Da ޜ˺,ÆàÎB¡#þ ï@¼9u»Àk­0d‡0•gp³`<À°; po¡ð ¹P ¬<ÿ€C  ‹Epq¿a„DéÅ)Ñ)kѼȄMh./£ gÚ  yp %0f w±¿±ð >0* 2 zP2ÝäÓý Ô Ñ5¸<ÎC ×qͲ«ò2‚pÚpÖ€qBЖÀ¼°,'«\¹ÛB R ™wfmž(Ž mÂkýӈܠ½r'üͳáwçq×yÍL]}í¼€¾PàwQØ5³Uü¥V;€ üpq>¨U(GáÐÍÈö›Â|¿}Gzœ1Ã5ü{ÖÕg@n(ðR°'ÐÀ 7Ï ›0 ^=S02ðGÿp8à R¹™äpÚ‡ÿå“M•ýªÀ=ÆïmÙ—Mkt ¯€ š´X4Àï0Ò©WÒÚ‚3À°P€Ø5rBÀ°UðÁEpÓb=<-Ï-RwºñOêÍÖ»Ûȿͻ¾Ýáe¼*ÒvYd¼ƒ!´ GÚ ­“˜òªÁ .±ü¶i? Cpã8áâøŸü`Bjc*õ¢@íáD^ä½mäGâWâq!} ¡šß|áR•{…Mžá`é`< RÉ <+Ds6=D J€6§ÃS4!³—í­á˜½Âs-çqNç<1>¿qéàqSÞ«Ü :Æ à…|±]¿À ‡ÿ•20KqÇÆBÖ€yh*£ØÝ$B>JŠÌË—ýÖv®rô½*¿é å!U Tà @;œCrS é'ÖHqcNæÖ° Hð€WÓ#~á Œ¤#k=ä‰lËiáétÎìó½ãÃä·àä™´ë`°› ½`Å}1ÈД@èëÜ žãC`æhŽ9÷’ŠŽ¹ÞÛÓÍË®Ùîýá'KÑœ¨jGI·#^ây¼÷æ ™`( ˆ±Vƒ`vÐ üp ° ¿ œ/ü° pƒãD€ãŠÑ ãH{{Ø3šÛ”=†')Ïéø.ß¼]¿Iÿ>uxñíìÎP>Ü÷óü°¿ß  ½? ~ó`óYO`@ WÅàr ÿ ò éçD4=è«Ó;ÍãmüðT‰‹ìuþòõŽä2¿á4OåÅì @ó¨{‘T±@H ›°åV/ÐÍÐ k= @Sq»šc§€/¥fîze'¸ÇÞ51²òäìb¿ÛŒ¿°zòpÌb†Àó›$„ñÑk7Fï”ü@ i Žó PÊËÛ"gTƒ [7Ep¸ õHeõˆ MÙs%ïH)×âÜì(Œ¨xqÌV.ú¤o0¦Ï¨ßêàRSÿ@wtÀÏ“±NP´oûrÃÆVãqCsl€ ö`îp–ckÉͶÜö‹¼ù÷®ÿù[éø ˆ†Y® @xGÐáCˆüB|…ÁÕ+ „¢d¡Ê3{ÍØ¬i–Iƒ)Lád ¶ˆö–ü¨RÉÊ9EC2¤H yóž=ÛFp"¿I•.]Jð¿w *}ÇÔêU¬V«fåÚ5éV¯a™‚[–lY±gÑ®e«ôèÀu.¼Ñî÷ßa€A®ƒ” ¢˜ŠÇO5 t¡4¥Á‚3¦D™ñV®?|T‘$Ãg‘"Ÿå{'æÀ£]êŠô©ëjÛ^•ÿ=[«í®µqÝÍUwoàÿòò‹ç C+uw•£¶+/–«X )M°Ð—Rÿ‰(Æ=Œ-j\c)ÓHJT–å•+BÎ-Z±/‡9ð!šŠ÷ì‘®‚Éç›°@€ËJ°£’PqBL¡‹4 Öøþ€¿DÔc ý^Ä®©$0É6Üå7MyÆp¦òkIÑŠâ”Nu2qLà{Æ/„¢§ Έ}áÅC1…òØ•àG" ‘~t1â8Æ>5)<‰’6@ à¢À‰Q‹^4£\y%Gâ¥*¤"éK:¶y¸d¥°‘4Y=™6À5NQrð'H›„ZÅ•¢ õjG- ëºTqbŽœ·0':¥:Õ#uî„§4f´KôìN›pFºÞÑÏÿv 4÷¡Vjö"pšÄº<»âP©À¡(„TÉJœôJ|äR<žó‰?êG í\]yƃì€ö0Í>‚¡˜4Áy`ƒPA¾_Уšš…Mk¶–M¹Î5´»)­“F‹W«¼’_r¤£j%TKý° e•ØEÕjòmcæóI<á"yÕ)`ƒ L †2°A¿=àÁèD&0.×­; Ä¢+Ýë:(Á Æ®W´;¡ ²s(–°ˆ:V‰‰Â`v ïÔùjû’¡âyÄ4R¨G#/¨B(~1”nrx3£6+êÍ¤âø”:n0V,¡ †ÍªÕ!ˆq’£a«Âÿ¤|âcKô3ß@èÉepBô¡‡2DéPÝ<úÁÐÎ>…Rvîw|æ»æ˜Ç=Î.`ïäª …ÈrÂÀ:G“ÍÃ|H¨‘~Še˜ ¡ ‚ÑGΠe.é§a6Ò[]fˆ®9Í’í‚{üãåDX°í¤°+,ŒëÜyÃ…m™R?è‡8qŠWÜâƒdš3l-æ³T—IÓe0¥+Íf»Ù.o$äŒ^²VÉö0쿞XÖòÉðÃüÌ@ý²¿þ)Åøí1»ÕÌHU3¹ÑÑtgão&—ÇÖq‚ì¹ UÀÓTЀLã(Ä!Ò›ˆB\ÖÛFr÷ÖNNŠš“êfÍmni£Þ¼Á;vÏãÜï²ÄØÀ@°ŒŽt¥×cÄx Πi¯î¿ê‡<ÖÁõ¬^¢]7·×qö°ç\Ýëþë„$ÌqvoX—?èÙ r‹ ÅFÛ°‡Îà‡?ôá Ó `æñ ^0E+ŠGÃûðçH/t%­Ø¯ø¥èWÿ¯õ"?ġo2À‘gŒµ ”æzÈCþˆgè£FªãÅ#0u¬Èý Ög™dc¶ôÏû·7ü”lWÝÿ~µØ0oÆÒl$„fG8BhfЄž=bæ D <Ì{›‘'P€x(V@›Ö¨ï›·ñªxÀQB¼ ¤À¥J?ïb¼£x']ê‰!8„@(ØPÀ…˜J ‘b[¢Ì…'H‰o8ÀL@™ ôŒJ(¬~cg@…àRÕ“…þx½Ã;0ÿÀ”lª¸Â£¹]T< ÜÄ!|‹òé³%(‚ØÏ€Ø*P=36%8kê讉Á”Ïš7\”ª8ž?4,7^,ÇœûÅ¥áD‡Èª\ÄE²<¿‚_¸ =+‚#8(>˜œØ„Wˆõ˜;É‘š0[ Ç©±EÐ"ÇÚëÁŒBGQ F‘ ¤gXDÿKð pg°7H—C8%ˆ†p—ù 0Ã52+’è"‹„<Ô˜‚4?†ÔÅ^̹3‹œ ‹‹¹sð‡¤ø†YЇ{à†lø†yðn¸0‡{øt(oxÊmè†|x nà†«LI¨Øº2kɸ‚I¢µ¢*ËØ³¸Ã[Ã6ÚI¯`KÕXŠ{xÊ œÈoȆmð½¼Ê¸„ÊsÀ~è{¨¤§è­$’1Â5G»&—ܬðëÊpœ Ç<Ëò#¿ÊÄ.]ËÌ¥à†gÐÊ{€‚`Û³§T{¸@hv@øg ùJ"7mdÌPGèê:N …ܵšü:ÿµì!Í”=× P¡àI ñÀ$à†¤ÈiÀf(p‡j„"`f oˆš0Ôºp«!3”‹Ù¬þiˈ@0´¤Éß¶áì ˆP‹¢ô†|(›Lp…døbj.vøÏw`ppvpgàgðJYÄÄ‚LÕh+ޜχª±,°à\È÷d³øÜåÒ È„¹Ì²A§9pC K±1§È[dI–l¹æšÐeOÄÎötÏ ôÍ}Ж»M­AÏÂÄ¥˜‡c@³ p”!™l!ň°[;ËÉ´Ls´IÅÛÐ2<ϳèpôQe@ç R¯Ñ½ÍØÇ“L»OÿN² ö°´ÌÑmºQlÊP̬Ƅ8iQÑ Ò† Q†KÚ?©!#JÌZQ—ó,ZëM°h¶´ÒËÄ+HùŒ+¼º€ÄEÅÃå3Š˜MåŠG{¸—$³òdÙ,Òq„Ó ”ÓI½Rë**È„PÄLÌGk9ÿéTÉ.CÁ:6ìS-ÈQí,QjLZÓ ÅÐ}ÕŠ‹R‹¨mÉ=…cEL"•¡1CÓEÌàÉRÜTCVBWuHp 0õÔÖ2eÌ?m¨ËZÓÿ±”C-K™$ËX•=f¥ÒœË׉{L2LWߘ¡ßT²¬WUÍÓ|𥱅½WùËp]Õe%Wÿ}X•Ö"9Õ0{œåbÑy1­‹.7-Õ9 ÇéMqXTâ×75YÁ›QˆóÕgý¾È$Ö35X­Ëœ­Õn­Ó T·*±ûVŠ¥Ì›œ(ÁÖ¯Xþá—dšÝÄY¦½Å­UÂkP‘Ö ½Ú)µÙ­mÕHMYùT™£ÐDmR$0õÖ. CªV92ÅÍ1šÚ®íWóØ6bYMž­ Ñ­ƒ×¬µ[ÝÖ­µ&µU™EÕÝMˆÑÚÆ•XÃ#Yá,Ú]•”¿-Û%ÜkRZžŒÒ®,Ó†›O—[\¡ X‚4ÏYÕcµÐ£Üçá[)ÅÐõÓ[ëXÖزp\Qÿ-…ÛÌš?íÜ‹%^½½Ü ÅݽíÁÖ•[IÚª­ÚrÚŸõ¾' Ãß­P×MÕk5Oµ}\Þ*]ÃQþ!Z:Ý·[òŽ[µY!ܤYÖ5_•\Úp«puÌîvX¬EÚËÛŒ’]€4ÔÓ5Ù“%^´Þï[…—ÓÜámÓ}Wí=`ª•–éN7]1û$Š2‘mؼm`wÍÖð߯¼àŠrÔwaä]Q Ž_q³Ü±¸DÞaîaþa b!~Ù°•\þ`Æ%ÎâÍÝÁ›ámb ]RÕÚo½Ó]àí5O(fÛñß»í[Q•^®¥]‹9WFý\ÿ3­&ªÍKeÒ2ÂUHs\ðƒ’ð­Åv%c¨½c÷…Oæ%Úê`46â'ÆZ†sTí¾&é}˜ñŒ´ù-\­‰Ú26Õ¯ÕW-bA¶dŸUI…®j9ÏÞÖ0ÎØˆSK‡’(ŽÑ#`°ÅäŠ}Lˆ“ßt½ðå¯0XU]ÚX.YW–Õ1MåÀÕPÎâ^vbXÖå#å/•E[XþUðtÞKF‹R%ጠæUæ$>_d%ãK×àù]‡3`TÙÎ-ÝRææ™=åTFâce±=Z¼50íÕt¨O¶Ó>Ud»ed"^_-.×F™ÚÔÝÔJžæ/F_MnÙÇmä\ŒÞ Hÿ[#]=6è˜EMudÕ?­Y䊆YaNÖmVY£-žiØB a•4[µU@eÄ­]p“fh}à+=^‡Å=xÎä…cðôQ7žåÁèo\Òdî¤ÎjT[ÎÕ¢ÆS^Þà\¦i&6K/nHuŽç„îæxj”–_¢FÜ•n.¥Vjáùj¢¾v5ᑦf®êžVèy¶j‹«[ÓÝØÕ@ç~½0M ÂT•¦e©>å’®S,vk„–ëb6fÄnè¦ç0<ü­Åá5Ö3ÏŒžäù-áœÞÝÖU ”µœhyfhò?Æbr<[ûÔYÅi•þiÎÅþh=`g•TmÆàÄ&æÿ¬Þäïì¶„\oæàÉqÓliÝmŸ~kξåâØæìôÌìϦìÏîà¸Îoýæé÷ÚÏzi¦f1–o”gŽžY>¾ïô^nop˜lXEáüþݨÞðóÖð§Vn¸Vo¢*qî£6GϪ`ÅÞWôNqöíõ¶aßlJ-Îßn†­oÞ®Òñåß3>P¦4or9è%ïpçð+¿íµæPˆÅ×OZᇙã)÷q+Çòÿ+_q3‡î§ÝÒêò¼Õ¦ð5ì3×êÝ.ò×ñ*ŸsŸídßb9gñ2Gó4t:¯óäöæ'l{¥robGtHtIŸtJê$ñ@'t!¿s<ÏtÂæsEצ?ôB¿tL×óýæôShÇÞÉ8sF÷ôT—utZïô^Q<>tGq$Ïs[va×t‰Ç.†õÐVr`'õMWõ5‡j¡:ö1OöUöR_vfŸu vé«®ukovT×öln¿ö^ÿv\÷uÏvr'v«ÝrSÝ#'ó[Wö{Çwv¯ân?nu×wvxwwxo÷_Ùzõ|öp÷†'øÿ‚Gx_·÷€¯öˆø‹gø‡'j×øƒ·xtwveUñŒ§÷‰WøŠ÷ø_ø‘Ÿ÷–7ò“—öù•ßxŒ/yÐNx™'i•¯ùïy‡÷wžyl÷yœ·s–Gú¤çšŽ'z‘Wz›¿ù ?zyO÷¡‡ú¨zˆ7z®Ÿzªï÷¯?w¯ûw{z¬·ï™×ú­/{²w{¸oû¸çxû®Ÿ{ƒ¿{¹ß{‰_{§_z^üÀOù¿'üœy»û¼×ûÅÇ{©_ª¦O{³ÿuÁÇï¬/üË?|¿—|Æ|¾÷üÆÿ|š‡üº/ýÍç|ÇgûЧ{Ä7ý«G}ÑÇüŸ7ùÓ|ïúÊûÿ؇ýÝ¿èJÿ}à~áþIw}C·ýÙçýÕ}æoþÊm}è}Ü¿}äO~¦7þã×ýåw~Ùï|î×|é·üÌŸþñ'ë¯þÉíÿ~åýÞ7ÿôGùòOüÔï~ïW}÷ñùW{õˆÿ½hð „ *lèРÇFœhq`Å‹3j|ȱ£Ã G^IâI)U®\ØÒåKŠ1š\YÓæÌœ(u ¼yÒçOž=…$ZT(БI•¹´ãSQ¥jÑêÕªZ·6ʼn”+O¬Ųüj6¬Q²]‡žÕ©6$ØœoΕÙÖíZ¯hïÊ;³®Ý½‚ç ÿøàá|úýÛøebÅ… ?nce½„/f<™igËi3§¼Ìv³çПáª.=ºuPÒ±Q§^]R6IÓGi‹Æ šwoÛ·aç~ ܵoÊÄ‹ ~|ösæÑ¥ã]þ»ùØäPWŸ~½¯u娳‡§ªÝ¼wñÝ׳3=zøÎÛs–Ÿõ¼mÓú¹ƒ·ß?yåå‡ß–E_mý!™{.¨ÙƒÈx ‚ZØ bnÄ_}Jè!u Ž·Ÿ€ó]È †žˆ"†ï‰¨Þ‹Û•XàŠÖØÑ"9ê¸#=úø#A 9$‘Ey$’I*¹$“M:ù$”QIÔ"TZy%OU ¥å–XêÿÄe–-6fNdÎdæ™^–iš/µÙÒ›pŠ©Pœ)ÕyÒxª™æž1å9ÒŸ€Î™P 8öéç¡r&ºR¡5êè ¥CÔ¤BUj)¥™jÊÓ¥:uêi¤¡Š:*©¥šz*ª©ªºªQ‘ `? P)¯¾µÊ¬ò? IK¸ê*«°¦´J)=ùšì?µ ?\ €±éäºëHÏ dC¾>*²õ*€–ÎÆ ­´Ô dí°PM;k³¯žë- ¹d-¹´ÊëÐ"öT °°ûRð @)‹œ?GÀ?Ô¦¶$5 0ü”"p®€– ¯À;¯ò1H‘ÿ À¶Oû‘<|îEéñ@‹0é´é¬F½‚,µïPŠÉ(w¤2Ëÿô¬nÌ3w€>WM1Ê=ÿŒ£Ë°ˆÏ‘$½0¡]÷À¬É6Ü’(God-kÉkÿ3wiÃüÎjë íÇU½íÜðâìèM0ië4-@Å|¸ÏÃk­ ]eÃü¼óN¯†ÓlQ¿ŠWÙ¯ãDG>ÑÂΊŽsæÀ,É ·Ý¶@‡#4{î±R=k¥º´Jül€–í’ts0ø?¸®Ô<[~ùIÈGßôÛ} 7H©Ä¼½-ÐÎq:vCß‘öïP=ÉÞÿÿ~GâÜü*ç;¾T~f?éí}ð#›Éx“¬àdÿ¨ÙHB±‰½C{ÿX\J|•» ^$Y:Lv½‚D{â볊¾¦ýãa³òï@‚3_½C¥p e'¸.ë{£“\Ó¨&42Kv1»` 'Ö“Z¤@¬ø1„!ч q")è*äo$É•Ðæ?ü-nJtšGBDïÉ/ƒ‚[د,èÅ‹ˆOa äF‚³~M‘€‰üv(ÂiiŽ@쯀ÇÕIDP$\ïH¯ŽlìRTˆ¯x=v5Oe KãIŒw°¹‘${›Áʧ3²œòaé Þ'ÿÝø=äelb‹päð‚H-í¡Mi2?ö0FNÄ‚Tsâ*l‰Ë r¸ìe)Ò°Û!ík¸&Å:2€ß]ívÉ´æ²ÍÛ Ä¥°àK€f3mdój`°ÚV©s~Ë É—<;Ê’0kGÀª ·HB¦2†á«Tè°u²}^¥ˆsÓ@£-íj¡93èE"±£wìhRmˆFu„b²ª¤&=)JSªÒ•²´¥.})Lc*Ó™Ò´¦6½)NsªÓò´§>ý)ªNÆÿµ¨Fe•+2Å£2µ©¥JêõvKó¡ovãj+j€bkªÀj“¥=W±±t*Zúÿ°W} bÌkÞ¬ægM´5¯WôÛÙÃèw¼êÁud‘Àâ4uV0Šl~?L+bqšW¹B¬zßk,øàZŠÎïNÜ*§8±…Õµ—óáÎF¦+´%¶´;…ê§©ÔƆ³Yrcň³a’6ª+˜Înf<ÆB.›¦ý­MQ ÙÜ5^[åÂÛ«t<,Ya”ßÂæw·Ê6eÍãUAÜíÎT¸Ó•+°j[ÝæUð®Ìe¬ÁtÞ.BlŠÀZ,´ËÝùº4‹8WÂhÕ¶~b+tUÓ;;ô«÷Õç®8zXú2˜©Rk0„#üR`Á¾0†3¬á s¸Ãþ0ˆC,âÿ“¸Ä&>1ŠS¬â³¸Å.~1Œc,ãÓ¸Æ6¾1Žs¬ãó¸Ç>þ1ƒ,ä!¹ÈF>2’“¬ä#®ÉN~2”£,å)S¹ÊV¾2–³¬å-s¹Ë^þ2˜Ã,æ1“™Ê83šÓ¬æ5³¹Ín~3œã,ç9Ó¹Îv¾ó›ƒ³ÝÐd2|Æ3 -èAºÐ†F€ž»Âç æÏ‡~4¤#-éI£9ÑMY´dÝJsºÓžþôš-Í¡Q§h" >5ªS=hQ—ZFyq´ªc-ëY«™Õ3úÎ¥7Më]óúÔ¶žP|4m”^»Ø’þuŒlD꘻ÙÎ4²o$íñäÙÖ¾¶œ£Mí\7Zÿרþ6¸Ï¬íqûÕÞ7ºŸ=níÙÏçN7¼‰½îy+»Õ‰7¾å]ï[èÜBÉ7ÀiMï ÛÜÃ8ÂS=pè¼ÝO8Ä=½ðù»áÕŽ8Æ)=q\/Ø&ª8È;žl‚‡ÜÞù´Éòm¯\å&§‘NÆ ó™Ó¼æ6¿9Îs®óó¼ç>ÿ9Ѓ.ô¡½è>Ç4fºm£3½éN:Ô£.õ©ïé§q8Q¨®õ­s½ë^ÿúÍ­¾¬ ìf?;ÚÓ®v™‹½íMY;Üã.÷¹ÿÜíJÏ:Ýó®÷½§ÝîÇ;ß/øÁ;Ýïdç á¯øÅWÝÝw/;ã#/ùÄÞâ1ÿŸ<æ3O÷Ê—<&šÿ<èÑÎù–“$ô¦?½ÖGÿr… ¾õ®gºêù-‘×Ó¾öGwüß!oûÝó~æ±÷xCz/üÝÿ~ä>ò__ü”—>ùÎ7ýòY¾zuøz¼åI¿ñ~kßÖ§~÷I~†ëdæ??úÓ¯þõ³¿ýî?üã/ÿùÓ¿þö¿?þó¯ÿýó¿ÿø¿ˆÿ    & ¢. > F N þŸET f n v`û5 † Ž – ý  ¦  ® J ¶ Æ  Îà ^ Þ æ  ¾ ö þ ò !á ¡&ÿ¡.!ü!!>!*¡F!V¡N¡f¡² n¡~¡v!Ž!º  –!¦áŠ¡¶¡îÅ_N…TŸñÍ¡ì=„”ì!ö¡þ! ¢ "!þÈAÔ“ "‚Ä"Š"NF#BÊ#Nb^DâEX"é@¢&RâZ`âDx¢D€¢nb%’b'šbWˆ"¿ bS¨â˜°"›Àâ¢|‰,bJa|JSà¢Qè⦬/Úb^ü"§,1£1¢sáÓ¯YíJ¯,c–Ø vA£PÔ3ÐLܰ\£P‹3ú 6¦Óíp 7òYD9~ɾ¤cø0KÙO,EÌÕÿÔI€ÐÃÈ£Éè„ÊØL*Íã–ì >úÖLÌ8—?æÄÅÜ£ÄdL$LÛdÌBÒã™MDê£Ë°LEjNà|Ï"ŒLA¼ËÁÔ—„ÌáMNDB‚T1ÔJTNû¬¤[ Àç„äݰ$žÐÍKФP˜Ý˜äL¸Jõ¤M~í´QMÎÐ@ôHÏ?ú ¸´–NÜ ·,ŒSæû4¥T6¤ó VN%ýOSÚen¸R]N¥LÚTF^Bã¸eùåõ%O(A(f6Æ _&B–a &\n±Ìå¬ØÍ€ÍµÄÄ0 g¦F`ÐýegúI®TÏæK Í÷¬¦h^Ä€жÄfI,Lhê4ÂVmêD2ñƒñäf¶¼‘Rÿ¨’$åÄÇÜùKr>æ9¥’sš!gb(LtFÌtzJÌ Œuf‰}g™ÍÍhç*Y$,™çsÒ,é̹¼&Á“N$ŒH¡‘DžÄÛg>oÜ<²¿e•Zfa 6W€Ù Ç]vljEmÛLƒ™Ye nrØ¡~³xú RÈ2UaÍ4ñls"Ž7V¥£†ÅɨØvб¨YU/"SÕ‰VMŠú„h͈w!‚ÙYˆáŽSBƒ£XêÓ`!‡àX›’tyX#p‚õÇ!Ëå#Bšé•­Å'˜Ùc§…ì‘È8Û,Ä'nóâ!Šö=NH¡ÝQÆÛ…±Ä¨Žã‡¨š!Ž¥W™ˆâ•ÀqÿÊ`!á86G¢Í‰§&""f áæiWíäØÑ¸s/’£Ï1G‘GXÚbÆ8þ¡jd‹!«•i²*ç²ÄgÝFAÍn‚X‹mU„ALyŒuëç·°Â&+tôØiFG@3G(q†…ˆseLr-õûã±÷ºÆ$‡ô ¢­Õ@³DDqÆc˜Ao¤bXb]¶új¾^]ã×°Þ)» ŒôðÁÛ G¼ðœjò™Ùò0±­fJ!V†•H 5ÿ§>Ë€UÈ©~„C°dtÁÌ‹x …ô]|ÑJ΋–%9îÍ2¢CÏ8âXcÆUcò°¨CÈ8ÿÕ2^ä¨VU"Oæu±’¨"×ÐÁ°\F˜D ¸àNnh³’ù“犅œáÇZ0Ì #[°<–“ –Öhk.uvïtÖŠ!‰.ZwÐbˆQÆ{°Á†.­-§cͪã]µ 6Øl³b8Ö\£\Ó™AÝáĽCÉ“¤¡:¨…à8ŽZp1M zÀñƒ(Æ“Î_Ïi/Ùã«Øô‹ŒóY8h¶½µeç,±(º€ tìÆ@>’ÄÚ!$ð£D$ø`ˆUDâ 0ÒG<¦!„þõ)ñ8Ñ *CŽpd/<›ƒŽaôñ¢R<,5i³’Ê(‘ 'ðÀU‚$ÿÀ£ DB5>‚ü~”¯xâO3R!œÕºÙ1Ç0ð8vBk©xp/7ð0be\oøRXr"[£#*ŽÍŠÄA :Þ <¢%G®‚F/r¡ +ñéD”€OñÁ„¥ŽÑ‡Çà˜Bh‚….Œb?DÂe@˜w+ýˆÚP‚ u¥ùÕOxøáãª$ž¨†àƒÜÀ‡JmrNÀáL&ÞÀD€P*Äôp@à¨ÈÃ5*åªiã–úx^ôôA˜.x¡ “`Ù/ÉœãÔÊĶá¦ÃP!,K%á7 ­ P-lqË8Ùÿf9fCÑ4pô¢q`Jz Æ\èf„ë*3¬J,ÙР?EG1ö@tÔ¡s`3„€„Ì!x؃1æ „ ¡Éh-T¡ [ØÇ0è¡„h‘ÑõÐc`IÁŽp!l8êQРÆò Ê—*¡bVYËaxZ–{®¥-ådv2–(@,+‚ô „#ø0ˆÁ Òµ„‡ÎïaR…ØVÚA‰ML ’çµ*tTr/=uˆ@„?¼ÁúÊà˪¬Åo¸`KYL$AT —M ¡ØÈ‡!«-Äúaj•žn¡PPTó«ÜVŒÕ'dÿªm³m»L5 6A€ì‡@Õb #”Ae Ô€ u´c¢™¸ 6¦ÁÎ2áH î>§6‚…õ~ ÇÈÒZ„œn¼¡Ç<ÁN]©$ŠÀƒ,l ©ün9´kügP¢ÌP2#g˜GA«¸8 Ä´ŒÔ¿¨=õQ}’žfñȘéTIÍ»Ê5†3 ¿öƒŠÑà‡³¹á´xÇnòç˜Ö³LúpÕ}Û*ËüÆåAÜÃË5R,Û(paQ¬dv À,#lPCÀ@ˆ)rÅÆV¡RŽ… ?2.ðäƒ8,—|(B”*6CáBœzX#ÿÔ©Ì8\hˆï C—lpC­¸âªmLØÇ½R%5¬•:Í@|Ë5°ö¢DX{qú±Õ² ±ÍCœ˜Äöäë-«Ø’Âe82Dæ¸$âTtC1 É­CÍõÞL‡Dbˆ D¼âM·ºYÑ&¡µ’9Ç,8Ñ[aQ!Ð`†7lÍ3ºJ>ã´y¼ h†XÄ"Ê<ñý1ÚÐ!5:Hì­è(©@¼"åY¯*¼š‚ößâžAôHÇÄ …,bhs««"ìÆŒÃËËRf¬¡³´•[+žò³¿ÝæD-,ï špÿ:3!/ÀApa2xíÿ@÷šõòi@ÇåEȱLƒöЦý.ôÍ”* ØZH ÑXÍá@ÕR—ƒH‚cH„rä¶r‚§hÐsq'ð^`! jPæ!Jü;Ò2B£"Õ–F÷ÿÑxö’þ_c±’w/=Uaø=ÿÄÀ†@ ™Hƒø@ø4fÆ«ŽÊÊÌᤤüó‚¶Ìk²f|(ld`n b°ðð¦ fPyÀM€¦p×Ä'÷uHPÅ-A&„ã"Vf8Ù$ G0úÀX€*…Ð;bÿ X . P°@ ²àðc÷…%à’,•·!˜LÎ×E WÀ½ÓyР‡{˜ <€pêð £r"ô—"±òeF=ïÍP¬ÒðR;Ð $`'žx…•À €°UÀP0*Ó}Ž2}^!âp{$˜†Ìa ”À`Up_;ð> °`MßX À%ÐÀ€ÿ ‘p…° ”p U D'’Ÿð?ð(>¶‡`m:’·Õˆúà=‡A ½ð*ög™p@ ×ä1:€¢À P0…ù 0 € i°ªY ½° èpS°–¹>–\bцlšV5<À‹ˆ¸ ” åBñð:°5°€Pÿà ƒù0 ¸„¨ ï€ • ½@ •`Ð@h«¥áÀœÍ¹¥>À,3„É4…À“ó`°¹ù“ÃP‘… ó™*r•jDèŸÀ:* UA Q“ ¶XÐé êH q€ -1¡ªª…x%iÔ¡>F¦4P{LXñœÑ©ˆŸ¹†¶ ðíÀ›!À §€žê‰ …Ñ\”ðòIŸö©a4_Œ¸žd¤iš²³ê0MÚ¤NÑÅ , yÐ «ISðîø=ÐÉ< Ÿ ¶à#H ¹`B ƒ0@niUÿÁžÑtÙ?‹ï0Q° NƒP'S‡` VÀ߸PÀ´@ ¤ ºP «©<€C ߈Ep/ô™ùH„¡ ¨ ÚgBPS@B@À’P¢I ÀàS 2 B E ;GºüÔW°!g  Uq ‹% ` úÐ K0ªå£L‰HR ÷uÓjʆpŠÊfå!¤ ²­ÝZÚ® à½`™PàU¡®’ ”Pœ?ðRE°¹ Š…ÿi÷Š”Ìá%YQ×Ùàš×ЫgàU(ðR°'ÀÁ€)Р›` Ë:S02ðGp8ÿð ^‡Z³|~€¤¤›­Ð ²€ ~#F£šíp`m‚]3ðP€ƒdYBðU`œEðªÏ:´ê&¦ó XgÌóØ*#ReGc—† ðp b£ ‚ +rÇŒÁyµåXW%õ20€¸^‹pð—#Aƒa‘¶âY—ª „x´Z1?LYß#¢.SOnÃï£ ¢À@ð1ŸåªC@Ó HZ¯s¸–±`ØgáÔy•‹¦x“MÍP𦆠½ðCÑ'3°„uT s ö vÏF€¡‹k±¦q‰”ðð=•@NÀTàr¥ÿ¤DB0¡°cÏŠ„Eº¥{ ˆ¨¼b{~ápn‚ŒÛŽ‹ Û7r¡Ù¸™à ÷¹ñ ì@ T`™> ³H°µ‚;§›º­¢#ÕF±<¡Ï…7z…kÛ¶W—¥ ™`(@ ‰‘Bƒ`và 6: Á Ñœèð›à(Kë®H Òp kn´Œí ¦k*¹xA´F›¢yjê‚ù<F@~”`AZ )Áà§´Ó°c<ê3`™²:«…[A›”†Õù@/˜D 𤰠œ{Ÿðmà ΰiÐBP0@ÿð(hù*ôY*pÈ2ðR ¬ñÔœúp¿Ú¤ú”¤J|GV1Cg˜é€ Åù(W¬uúp i £ò P©è£'2P}ŠTÜÀ7 cŒé=Ã6pdÖ¤"êÉ“¢|¤öº_rïù0é0Q–p"Ì`» í˜P¤àÒük£ÉBÀ›`÷…“„8B 9¬øJÏ Á<¹bSP° l] Ù8Šª Iž@»Uqôd™—™]U€ýF¥m-Ñ‘FÙÀpY—õ“õA !‰BS¸0 YP  è U` „˜`>0¨@ ÕCð½pÃØ#Ù 9 õñSâqBÉàÐZ‘¬gÿÍòhÌÐÐà q=×Y±\R<0€›ˆÓ€:€ à€ªÓŸ‰ qçWºoe˜ÐØPPU_)OP%ðråX :z ÜCð(KÀšz24'{®û}ÓeMžÁ:°Ð&Þ°€{ýC%$w~VY±  B ³~[á£J$“ãÛ‚ÓÒ+ÚÍÝwÑPªj*WBÒ }ŸñÈȽp¾Hð¬½0 Dð¾G2vov¤t«‘‘Dð¾sñÆrÕ”°?É wsKÍø(Z]k.º ¤EdÚ2ˆB4ÌÃ呱Ø}bîXPæ g.KIPFKÿ@BÐê(?0qNZ%s0uÞ&ȸ ÙЦ!äDþF.H Šžv%ÁðCVÐè?à RNå:îycp!èplù-DÛƒÚ° Ѱ lذDΈ ñ`TKÀ ™À§U€3 ).#°v9.,Žñ¼U¡É!U†ñàà´@ ”@ -— oä1}}_RÀjA>`Ó@]ߘ ˆ*ñ{  ò4m,Ž[Ê‘[@Š-„Þg#¸Ð° § Ù^ ëðLÝ› »ÐMÀ×ðhÀqŠ¢õ±k¡œÉúM‘4K"t_ú`¥©¤0Œ]ë^ ú†˜k†ÏÿTÄ_×׫ñ¦ñx)Ôñþ(!Ìȧ_®ëN®‰ ._GÂLó‘¿'Q××n­w"Éàï½¼ — á–¹ Ï)íð ÏÀ†-íŒAíQ]ÎwQp¡ÙŸ°D__/Ãè;`A?°½ÀP_”Â0Ž Ð&là«0]À@}zž±²@ë'*-÷ÄÊ ÛäkÔÅeŸUžpYi9 ‰ðl`&à;öÓ<°ðƒ%þ`öݱX1õÐ` hOXµôµä((2*I$KÔp0ZàÆ/P£Ðš8ë˜~: £hÅ2¯ñeÍÈJ;öEõäeàQÿ€zP‘pè.Ÿ[x±üÍßÙ¤HyG•æÛtý„eÀÝï«á?þWRþüÅ®–.ÄJGë¥wúô¡SØ4hÛâMC²dZ¼†ú¬ýÑèÐ3ZËó¢Š(`é)ü×2ãK˜1e6d8&¶%H*bk‡éÂÏ éh¾¤GÉ>léÛ† Û6}ôù1SÕ 6Y{ðX"F}ÿö¹´Y¶lM³ qê\‚Mqö<¯P¢|ú\'zÿi—ò¿Ë¹Ú-‹í«ÂÎnAg̉¤J•U0ȶq…=Þ–¨PlzÛ Kf·î˼mú|¦]¶.øPÎÜ9¶yò‚茢»½ÆK‡+aeðÌo&;ê,¢óÒé(v˜¡4|€h‰%¶¡G3üø£3¨ÑÇ·‹€é…‘ŸpQÀmp&ßn¸† bÆdd˜±4 ÚéL<úøhðÁkhzy„ bqÇS„13§>K°!£(bÆ#ŽØr†&|„™œ $'hôÉK§'`@ZôÁ%J)aZ±ÎÝ‚fÁц8$"hØ”\~˜‚ÿžCSÍ!Ðå ø&Î9¿ÃsÊKk#‰ç¦™Q3$LkÊ8I„à/Ném x`‚VLÄ…®…бõV\sÕuW^{õõ×[“`fBˆeЩ(¢9€©bЍ@‚Z*ÍÓoóTˆ4!Ò %’ÕñI(ñl¢çôÙšUhB… &ÀÅ»píì3,—À ¯"RØAGeØŠtâ)n %¹fœ>Q`¢‚ŸÞËÒêX\àøD"[dxðÑÇáeø£>fLvYö¥ìcÿ B³µDPp♼ y(¢CŽPBšp¶l Ù!â¡ëf œïÄÓ.•Št@¡—¢;›FŸDfšvDg¡ÑxòŽc«Î(k}¶Þs†LåTl²™æ™všif¶‡î6ÄW|ñÄßfüñǯǜ{þéç[Ú¹g›l¶ÙÆoîéÇsú9§œ•ô©'uz¸á¦r±\‚|vƧò}6¶ýžzz¯§?\pùæsoú¡luzVÊ'ŸsºIÞnŒw) !ù,€9=n‡ 000=Z|IIIWWWM`xiiiioyvvvIjŽJl‘Wu•Mx§ov€hx™znxzˆxx˜g|£u} Y‚®i‚ž}ƒyƒ–g†¬eвn¶xˆ¨rްw‘¯z—¹]2®_ ”w[Šu~š~l˜{y¬|\¹|G»zV©l{§{e¼di·iv´|kºs{Ñu0ìz/êy8ò}'ð|2Ü[[Ó^bÎd^Å}JÊxVÜkOÚgV×xKÖxUÇciÅksÆvgÊryØdfÔmqÞreÙwxãWVèfIåfWézHèwVãgeåopæsfäyx‰m‰†v‡…{˜—m„—u‹™~”¤l€©w‰¤}‘¶y†Ì|ƒå€y˜…x¿ƒJ·‚W«‡g®‰xªzµŒg±Œr¹l¸”s݃.Öƒ:ô…é…'æ†6ó‰(ò‰5ò‘;ɆGʼnSË‘YÓ‰GØŽRÛ‘NÕ”XÍgËtÔ†gÚ€zØ•hÚ’{Ϥ}ߣjاxë‡Fê…Wç–Kç™UðŒDñ–GðœUè„jäƒ{ê™gé—wí \ð [è¢fí«uî±|ð¦gð«pú±u‡‡‡„…•–ˆ†›„šœ’Œ••”‰Š¦ˆ–¨ƒš¸—Š¢›–«Ÿž³ˆ¡¼“ ¯™¥¸¨€€§…˜£’„£›•º€Œºˆ”¸œ„±š¨¤¡Ÿ½£Ž¹§˜§§§«¦¶¦±¾¸¨¤±¬¼¾²§¶¶¶‚ŸÂ‡¢À˜­Å±Ç¤®Â¨¹Ëª¿Õ³»È±¿Ð¯Ã׺ÁÉ»ÇÔÈ‚‰ÊŒ“Êœ‚È‘˜Ø†‡Ú‘ØšÕ––Ëš¢Ì¤ŽÆ­—β˜×¬ƒÒ®Ö±Ô´—ΪªÇ«³Ì»©É¶¸Ù¥¥×½§Ú·¸äƒƒå斊嚚꧇å¤í¶†ì»”úºƒå¤¤èº¤å¸¸ñº¹Ä»ÅÓõëÁêŦé̶éмñÀ¿ùÒ¬üÚ»ÇÆÇÄÌÖÊÑÚÚÃÄÞÏÑÕÐÌÛÛÛÙÝáÞàâåÄÄäÏÐç×ÈåÛØõÇÆùÜÄåßàåàÛûêÚäääîïððëëðïðþþþÿßýH° Áƒ LÈð྇6œØP"Å‹ 1j$hqãÅŽ+†ÄrdÂ’ QšÌ¸òß×,[¦”9“&B•4q¶Ô¹’gÏ>GMæÀ¡!‘µy“iS§1¡þSºT#U’-!Ô:UjT¨W?zå8¶ëذb­–y¾‹\¹¢¥8WäÙ²f½Ö­yWmßú1¼bQ¹x÷ž\›˜ñ_½÷••Lݹ˗ßNäÇ™sAÊcAKUüô1XǦñN­ïÜ=‚—1ŠÞŠw¶SÒqçF=º±Æ—Àƒ N<ÝKrˆ²½d„(ñç/CŸ>]:W›º¿žNÍ4»ö†ÔÃÿY"rùÆ!Z$~¸õöíßo‡Ì{~ïú«áïͼzú÷^€Õgßv‡ßm‘Þ€ä(ÂH6:¸Ï€ºg ƒÜ)ØaN¾É–!t>WÏ~#’¸¡‡ô}(“wG…W:4Öhã8æ¨ãŽé,ó‡ìÁãD™ãCï$©ä’L6éä“PF)å”TViå•Xf©å–)G9ô8WbpÈ!Â"Ú<ØåxF±xŸ‹;-è¦akögž"õXW7Öp3pŠœ·O>ÌU¨âšÂÉÇa‹Œ&ˆŒt¦¨Þ„f#]=Ódš©<åcæKÙZ ¢Á):碢ê裿uÉ܉û,ÿ‚ˆ3q35òx“)¬¯>$«¡ÏÙ¥©¬¦ªê±§"ËP—ž2*"Ë<”éKÖLÃé>“fS©š¤ ¸b±o îª ¶šb ä Ê­ûìZ«µ/Ù‰žÜvû±åŠ;®²ùê‹Ðše2'ˆ"Î8g+®ºNëC_†)ž°)âû¢œû&[±ÅD,p ˆøÁ9Þ0‘™zª"é8àž}þ™¡Äq³¿3ÓlP·ô˜·ˆˆ ÁÄÏ#“HD§1ŽÊÀaª)¼Âü“ÌOÛlŒ1š['"â\hHHÒM¦C32Î"i¬±ðÃÀœ«»:=5Åý’[s¸‘®j9û(ƒD|˜ÿ× !i¨« Fë÷ÛÕ^K ÛBÁ=1Ô;~3©ýQèÇF\£^!€ þÐ!góŠ/!ÎôâßÆÍ¯ê?ùV¤Ö#p| 1 9 ±„i 2Ž"g a‰µÄ—ö­k+Ütê®Ó-wÔίîP·õ,Bx ØLÄE¡†f¤qÆr¨âê MÞÒ§¿D6Ùˆs¶†m^ÌzësKŸ?xöîSÏë1`Abhâóƒ™nA<õ‘‡O~N™ÌÃç‹yû³ßý6ؼè-«ûpÆ™†q”ƒlgøÂ3BµÈÂÔ!ÖÊ*å\°~Ì uØÁç}„é¨9ÿÆ‘4â!äŸb±ŽCÈÁ»€átÊ‘œå8ë†×É!ô<¨Å·Iî‡ý³9Ô°†EhãÁÃ@<À6lÂxâ¡¢ ›u¨,ö<Ìã}Hþå£ë"Ô9p!x €DÞ°‡xÀ1<24a ëh=zñu¡Õò—5Á£²pE":ö1$° e@ƒüð†7ô¡eYG-PŒl­TÀñ7¸áN‰#ÚÐÍdA6ÙÑ’‘ÃdU¤vÉN¦—ð€%ØÀHž!Väè¼` Bôa@‚¦ä¡„¡•oøƒ £ó[iвó Þ¿ù% ƒ{Äc>w¸ÿO~‚qD³p!2þð…M¤C=iÚ‡­*áwèj=Fò.A‰?$‚”ƒ¨äa!À3aòG¦ ‘œrˆƒ˜¤;f?ï¨Ïdr±‹}ìÒùö*S96¬–ù.щ'ôàÔB%Æ (P¢Šîç­˜&B ¡‚¾BÞYÉ•"Ó¥|L ¤ò“¢óÅ£?c ^j+nÔˆ@”·Žõ<ñ0jr”&pØŠd×jêS-(«©Â0«™ÜjKµúئ( ²H‡Z©@FÀJiÓ/zQ-„eê“°(*2ê;‘rãBíú™µD:B”ô¤P¥*`—ÉL¶ֵÎÑ;6q¾Iÿ hk¸åCêQ­[Õ£KXɬUÎs¶Rû©5.¤4wf ž‰øCâð‡”©VÍ|éU[XØu)µè„þ°3óØó!¡D0X½c–{ÈFÊ”fafû0|ÁéKiU³‹]–»˜ìV²vPAâVÞXؤÈAæX—8¤çr…ƒXuœuððjý¢Lkw»ÝºÛ…È¡;MYV¡"ÇžªÑ‡kP§ò€†â‚3Ó‡È}".0lOl`™(F22ü ¤tàÁvxÆ3† Ø{ðC2ì0!ÁÌÐÑ-V±Š[ é|5ºj‘d!iÿKp޳œçLç:ÛÎÔc#r‡„tqCd#›Æ5Á‡à~y lÎYÏGÎÅ}ìÂo$¦†ðƒ! ¡ÕÔa\¯y=n˜–ÛÜ."~µG#p#‰H6ášC¤º—éaD#HdWcû9jKØy±8`KO:ØäF8¹AZÿaCwÖ0÷` ¢©AK8Æ!Cóü¡ ›XÇ;~܉ÝrÃÿ–[§‘”ïÝ ‡¹‰G<óLwË:ôȨaˆz|ÕF€†¸žzÐCo£caÒjêDîâFýÙzüÜÛEp¥±ŽbuƒJP9–†ðá1P=bü*Ò!±¸sKÆÑi|ö`YÂzn|™¥ ¯ùÁÿAýD(9ÀÂ%p´Áˆ5¨aÙ œAù5‚†q@E-࡞u^H¹¥›†ÿ25uV'×î7·ÖiŽ•·>ÁúÑFÑÊ6ðQÑ<Ïü´(gPâ møÂ!U^å» YøîYèTHèÕWlÂËüõ¯…O>[ʧáŠ÷Nÿ=²Á %‡'MD4!Ý7Ä!kRš7ê^õ‡€”´|NÀ˜ÐÕú½j®—¯E}ÂÚ@B¡ÂbWLÞ2ñäÎàBû@ã –pONÇ6í´4õ7è²áP(ÓsÓó›¤IÝÅuÿDŒ04GyeÀìDå02–¿D~wp”@‹pl‰w)'—r‘_ù7tt!lXZ¡R8€ÖxèÖž‚käÇ;à§xÁ‘BAô D”ðhÀJÔäX ˆ("˜"˜U×…'˜‚$Øuâ!+ŒP4f°‰×)µL Ó”w@`—qjÐõ ]P\ÿpàk } g»”„ÔAÙ`KØb&Ù@6$‡¢A‡‚xØ·ué&9ƒ…l(²£@æAadq‚0Hip:9`»gµð{Ø…Öá\¨¡âÊa'~@/#8…%ˆCQŠ×'€ÙãW~Ò,dRf2HC>Œ D‹¤

f$ÿ”@@ã3{ yaÒá‘Ñ|Ó!’$y/ÿw’J¹”wøwT8ˆÂBè‡϶âÐk>Ž÷*°@7Pm°‡e÷}Šw%cfBaV’ÑxŠÕ—ƒÇ’—¦8LHŒ ‹¾C8k…fU@P ®Ñä¾=ÐC0 ²p ¶’CÀ W0K`ò3*äkX—üÉ©ÉÍ<Ç:àE¸ïp¸m:œÓ?¶Ã/q. àwp %œ­<P µP ÃÐ ˜ð»-ÐI@3­9`H€R­›Š´;EœÉÐ̬³Û’ˆ1С 0ðÅP oƒ0(@P a»µ0 ?@-030}`3@“´Çü0¤ÄùÏ"›Ä}ûÁ|sRhÐ Iÿ¢ h`C™°ÀÀè<:e̵—530uH ÒWp…›xÌ^8:ʬ¾€û·.}¾è;ĤbÐÏQjÐ Ñ Ð–ÓO ¤OK ÔÓp Û _f<À ûðlþ‘Z%éÔp ÕTÍÒx=Õ!ìuá1¿—P¿ÚžÚÐ | ¶P0< @ {2 -ð · ÑT@40@€8°VY‹ [Öa×ü¼×U-Õ«ÕKÙ?»0 ›PmÓÁ@¾ûŠ vb‡',GÙ+ YÝ6ÙjÜkôìÑDÏðxølj`·4 ']¯Î,Ћ!ÇÙ {¤²hÿÐ@Ðñç³ ñ€ Ø …à5C ¬×KÜ=`µVe@0DPßö½Ü›˜›±r@ça^•(Õ­Á»¡ÝÛ½Ò×M§ˆrm± «`¦´=åĵMMœ4·Â\=NÍP =ÛÓnóLE` Kï–¿ü­l§(äÐý”-ÝÚÝPQ$¿g e ø pÃQYà ?5™3@Ll€Æ=Ú u¢W&\è òàÉ~àúÊÉ)Xã@–ñM˜POUÐäQ-ÞF¥PzÉâ"® j*zHˆå¨‡b^pqáÏÌ×­×Z>9 ÿ¾D»ÐàP4ë0­ÕÚ Á0ÁÆ íp U@º?ÙI€Ü÷M$nâI#+bˆÍ¨¡Žå²[à«þâÙ#·DºÖÞ ÞÀ1¸ê, p+P é#R†y ÖF Ä0 Ôp½éྒ Ÿ 2ö]ö]ÔIP ÕÀ‰mgƒ sÚ£XUûe×Y¤Ò­®êH|èJú§ŒÊðàâÛ³-¶ë§<• ¦'GК­4—QÇM2İ˵ÖPzÏ4@º÷ŒÏúmL§~Lo6:D<è…Nèz ÕÂq ::¿/¤æBµ ¥ð >Á„p ÑàlàCÿQ@A02s»4õpm-0ó3ðeÞwê…ñçüêIRIâ^î1¾å\š¨i}ÌîRô3P”«»°½#“﹨À;ð3£àV Zkì[ à .2F€¼PðIà`—HôÞ•1wíêãNî›Üôxø¨ÜÄU:‘õ°õåD-wo@ìû` ÝúVpöiO2Ãñgó=2íö¬PÞb÷å–ÔGï÷Ï øª}ñøzø:z ²€Ê/`/X³@ò& ð¹õ oàÑÐ J¹ðîkºâÇ@`LÏ:PÕ0ÏF@!õ®ÿíLH?û̌ݥÿ‘åªñÁaÊê¾îA, ,ï Ä/ªb{ ˜Ýúj@4@R wÁ± ½ éV•f1R ‘:ËÞÉ›ÆmßÃtþ£XÑ¢ÄßmÜGq"ÅwEŽ$Y¤I”)+†TÙr$K—1ÿÁ”é’¦J‰9áÉòK]N AƒF¯–¬Z·d]°Áƒ‡Kð¸Õa! ·]´&DXÑ$Bµr֒ăF+CD!Ò¶m‘:Þ¸ñÖP"Ñ$fÜ·ñÝļ7k¢<ØdaÃ/«D¼Øbc½B%O–Œ—2¼MaÕñÌ4mÚ3O€y{÷uÆRV*yØõp—‡C†ôøÿt%ÉíiL˜äÈ!dHB¦y»›³äGŒ}ÿjìxÒñáç„£—„츺u™”µSöÆmqíê<È’èaÃ4yûd…Æt)‚ÓUû¦‰ò0ëá,C¦YÒÿ¶µ‡Âá›ÜÌɲãšã‹/6zl:’®[LBÃ(Ì ³KgC;ôðCÓF6Ù† ‘ÃZ8¸„C.‚™tt±ä½ ¢‚ƒUÒ 6Ùp~Hbˆ Ø"`64†·t˜F‡N$Ê/*«´òJ,³ÔrK.»ôòK0ÃsL2ýÚîÌœêBÏÀ“ žK4ãÌ3yºâ™wæ;-µÕZÛç5+’¢ÚúOÿkrØa™pöxc Œ¬£äû«¢‡.…ðÁMEÂP¦Oc UÔìÐD“ÀôÒaÈ!ÊÄ{ʃMÞáÆŠ(¢°‚U†¤€$K¢ZzàaúBH"’Ðí 4ÎpÖEÈ)#êÌÄÔ82ÍkÓQmê”Óog w¥RMÝÕ}TµK»wŽª%ž}b‘`^ b‘¨&ýa\½‘gˆdéefb e™@# 3n8q Â6Bk¯UpÁåÂí¶¥SêXºqÅÉÜ3Õ”‡ÍáH®…‚ j©% ~­ ˜:۴Ƴi”µ˜f¸­g`¬)†5~Ø 5²aDˆ·½¨9j#;Ééÿè>Yã­†nd’ÏõL?Vͽ$æ‡V¾ä!™yˆ!&<ãÆ&”e˸“˜¡—qŠ(B4úNƒo3AÄDšN9“> ‰êç´¦.kÈ#w©ë’½sSl²÷1íiÔÞ‡!%¦©ç!¸­b†!₼õÄŒ4Ôø›aEêYDF¯ñĵ½BÇ#”üÛàãšòí,3wå–_Î|æšu›F"T‰éá‡+V"¡‰v85–6l‘6[9Rî÷‘´·xO‡ï~p[BþÏYfñs¨ûc¡à Ä¢;ÜèŽ~r£&pCÜÐM+:уXakÞPœÁafXÃÿèÒ¡DÐã!üÀ–úúÂ>á‰$j‰¡¹Þ'¿ù•Ke¯ ‹P”§²K\¢Â7˜A  ÞFˆS &Vp½+XÃÞÇW P‚2ø-ŒÐ†Áˆ|hjA rcT8± …LdX{! QB¹×ød±` ÿî'“1¤sõh¢Ú2Ol@ ĨÅ%0ÁŽÑõå P…/Hà/hCkÄà!B-.¨R(4ú4!1¶pŒÄˤ M…?½Æ>‘z#õг¶i ƒ!úÜmöñ`L¯TøÎCšˆ‰}0"_ÙGùÄ1Že2’È9!%+¹EdfÈŒÓѤ&7‰“®ò!âåJÿɹô|.•«Z›²^éÝX‚`ÛG3‘ËBðrˆ(Gºö21åXˆ&yaœ·–Yµ{âóxæJã.ÖØFR^3Žža‡ƒ¨ÛxCÄ2Ö'¤Ñ¦w ²$ˆ€$ÄqÅ|¸#$¤ç^8ö4JÕó£ùÄNMj?ÊÕ‚†¿ ¨©xelHDäˆ3Õ «@à0걪|ˆ€RÀ‡7€oÆ<¨µÀDòq éHOëburÈÛEþö×Ò3ñÐmpz&~A@ÖãmÞðFÜbQÈ=«d„ Þ‚” oà«zÀýdÓ%¦GÔç±öUÕªdd,'IúÅÿkÚÐ¥t’c&Æ£•nˉA˜œ&Ð3…q Ùq!Éà ¬PŠax&×ÊVFLhÌgr«“YÞn·Y7†õ”ÚtŠDxòJ„›pk[Δպ@@ä€> HÇÍä1LJUɰ«ŸVk^ô¦÷ŒÀ ®×²ÉâÞÇëà¬rí"¸¶mh®CÖ€†\—jØnwÑ^ÛRi¼äuÎyÕËÌÇbrŸì­ïv: ËʳPÙlrbPYCgÙ|H6чA("µ«míkc+ºŽ‚d9êãH‚ãÇÛÞâXŸ:ž…+|®ü&ð™yr=¼zˆÿXP×»Å>^ŠdFÂoi8_ßàWÀ÷¥ñŒÅkØ;X·<.)™!ëã#kç³ÊrˆQ²œ Ó‘ DÖžàLàÌ.ù@ÄAÚ@ü©¸SJL/'Z9+¹I3}ëX1çø·h¾ád.|9°r# GâÁ°¬0ÈQÔl8ôÀè>HͰbêRñŒg‚\Þ1›™…žõ„)\iÉ K›ako~­` («è*¹AD(b­Œ@DFëá k459~a4• öjXK:Ò;†ô¶{ìc\ E×ܬLNnÃIx@HLv±wMÒbƒPC#Œ³Àªc›}õ•,–Bo7ŽÖÿÊ”µÅ(=Ù¹¶i2x©‡@,ðt?ðŒn¼Q>¨!‚„®±YCÃ$ž²‹uÀÃLë³±;¥‘G?˜Û݆&šÓL±®«Ü™†[ 6Þ „ÓAXÈ4úÀ@bÓÀGnn ID²€ÇNø¡%Ü’k…‰É‰TcMó¯ƒ}½6·džLË(9 Fh Àv8X’xFÜAˆ¸Moη‚"P ±ìð∕²r=}‡¯uÀ%\pôœì÷rîmÚ¢B¡<(/€@…Kàæ³zOV/ ðpž5šI•¯©­—j%Œ#äkâL ÙüÇìµÿLÞßÖ–º$¡ÓÝI‚j†ÚÜ€¶áD`Âzà•V ü5êД Yï1)v½³øí»ïý‘IIüã'ù¥ì! cm‘M[|¶ö(@bÀ ùˆ†ŽÛ à T@Á{0`‹]¨…2@,@<@LÀ.ѽ›‹,†Ë;ÏX»$X÷ ¨„K¨£›qˆœ™V(ªð€ È…‰©±Ec ¨I¼ìp=š¹°{AìÉ›AÒ© Ü0àè™à*Pü:·%Pm ‡M#‚®p € /×;<8+¦Øã˜Xœ#‚;ë>,»7² y¢Ûè¿ Š¸ƒ!‚aøœü2ÿ$h¤?p "˜OПì+¼'Ì:+ÐÂEF`„¸™3æ«ü#Vá ü²ªš§ 0 ߉¼§RÁ@”9U´½.¤FS9oˆ‚ÈbX¢‹›Ä·KC`;ÐÚD"H-Ë”D³¶u<³ÃÃÂgJ¼ÿÂZ,z,³h„Ç[£0õ± ƒòŒ+€„ÓàŠ`K\™h€BHBȆB€Cs´8³¶/‹ ¯›ª ˜K ÉÀHB¬Çä¢iŒ,+Qžg³j—Nè„fP?i¨Iv`H†ppv¸ `ˆÊ®KG,9e”ÁSŠœ¼ˆ.{½ï#•´Ú«9Š”F oø†ó—ä`»’ØÃ8KœUãI³\<Ÿ­F[_á­NIŠÛðšWæÞù•ζ_Ь×>ÌK;M[ÿM[ŠQµDoMS¶-F^ aR>¼¶*Ü˼]¹ ÅZ@PõáïåKÂZøTwÅÕ.ØÄ*KÞe°IÚDëNO\ám™^M=œ„½ò\SÍàVàö^þüÐ3YˆŒRÖ ŠÂ3KòºÉX¥^‚•bña¨^'&áÿFã'¾OŸ”¾ÔÃE«aÏ4ÁßmaqõÕ.;cãfu ‘ßD¥ßæâO¤âëôÃëÍl-Ðëû]¿MÒN䨅¦¹eÖžÛ?¾aKäÃôK)5dÚBd˜PdF¦F.ãG–äûÍO&ÅË] 5íäî%ÞA†âö™QÈØÚ¶19F)­c²íWýÅÍVÞc³¥ÍPc®_¶åZ¾ÏGM°ôbåì:Ö4Q`ÕO£ T·•Fë…ÛM¬M~æ5Nã"ýÏÉ‘*ß­Úx,¼UÂd¦PBîæq}ÚÞÍ]×ÔãsvfrVc fÞf\Ÿ—•aµ=©‹,æ}6ç….ç¾db%\ÿRÌ¥ç-\“zd…–Ó(æcŽædJŽh è…Í^ðÅhÆÒhefhAîgué>ß´=ÞÕ,è ®ãnKè•vè—†é>T@\]o™“U¼®ãTš†ÓL}[–fàŽ¦es^ê®^¢¶éêÌepeOqž\föèŸöé––h­~9™–9½Ûíg~nj§îj³UéwU¼©¹Uµ.`^æ¸æé†Öë¯^ëm}å9MÕ÷ ]÷ER¨æj°nk·>쇾k¼†[‘6k—Ek}Þé‡îk¿¾ì°>×f6ê}“O?UÍÊ>âÌîéÓÞkÔÞêΆeúYÞ§•È´FìÔÆl¶NâÅfìÕ_ÿ)h÷-m¦æëÍnÅ®mÛÖlo-PƒÍ?~\ç~nèŽnéžîÃÕdÚ6îâ¾mÜNl”_ß®gÓ®kâ–åYÎkäÎîñïÚì¡ÞèðNïÖ>ïíÆnô–o‰•gXÆçøVmþîïáÞmùÞoÑ­'Ü#oðãpÿþïÑënj@ÎmóVð§piJ*ðùÖn¯¾p¯ïïpcžmâŽpî6p oøq¢|lì6qúFñGð—ñš›p î?æßðgq·ñ·nßqÝîq7r_pçp r¯p)¯q!p%wq'?ò)§ò OränòrGò./sÿ(s0¿r,Ws+gó"'óOóó-¯ò0_r.§q9‡s1·ó9÷s>Çóßó:ôB7ó3tCßrBÏóD_ó?÷ò@‡ôot:?ôGWq7îEt"çôNuIŸtM'õR·ìHÏôSwt-Çô>uFÿt÷fuE‡uZ§tWGsYGõTuD÷uUs&ßõ÷¾s\¿õc¿teWvKu[wö`vdoóJ'vßôY‡öhÏögïôfïvpßv^7ui_vo·v /ïd7÷_¯u[§nxwyŸwzW\t/Ý÷qŸörgö{ÿwu_÷pö8ø€§ö\ouv×÷bõvøÿWxm'x‰x…ÿö‡‡x†O÷§vw=7øŽ×xНøŒGøXGØ’7ù…ygùU÷t”gøk'w‡Oùšwù—Çx™×yœWù‰oy]ùžïw‹ù¡çv›nž'ù¤ß÷•?z§ÿyA_z gz¨oø^·z­¿x?ðÇ÷oz§§z£ßú²?{´÷ù¢Ov²ù§¯ú´W{±Ÿùaz³û›¿{·_{¹ÿx»‡{¼GúïúÓmû¾ÿú¿üÃ×{•7|¢çûÇüÄßûw'ü|¿zºOøÀúsŸüÅgü¼WüÏß|¬¯ûƒ|Ä?}Ô}Á/xÏ_}Öçü¹Ïü·'ýÒ¿ýÚ§üÿ¹w|Ø·}ŽÇ|Þ}ßû,ýr~Ùß}k§}©×}×WýÖþåG~Ü÷÷×þá¿~ì}çzèOþÔùìÿ~§ó?ôOõ_öo÷øùŸú¯û¿üÏýßþ·ÿˆGÿ,hð ‚2lhp¡Ãˆ!J¬8¢ÅŠ3:ÜÈ‘¡Ç CŽ)‘¤I‚(S^dÙpeJ˜1]‚¤YÒæÄŒ2EîüØÓ'΃?uZTáQ•I•ZÚté?§O—J= 5*Ôªµn͘ê×¥aÅ‚-k6騣iÕ^mëö-ܸrçÒ­k÷.Þ¼z÷LEÀÀ;š¯xõÿoŸ”6üÒß},_¥ø.qå~ Hþ¸"‚œÿ¥klAç€U¨Jy â 7§Îø™ ÑKþxy‚´YK}D8piÙÂ#3Ü Õ£.§¢àŸèt›¤n}_ª¼»#°Ðü+ï´¿*ÿ‘R€˧Ëý¥ïëHýÀW¹¥Àb¶•·hï {îqŸ|ÿ„–Žnøé—Q ¨ávî H GÑ¥ã HIƒÒ%D‰XL¨­çÜE-¦ôÎu÷½C@e4Š´Ïÿ(¨Ú#w_m'!_9÷J„pWQ{ýí€xHjFG@šÿwX#ؑVê´ä@­EUX”SJ¤âfe:'™_™z*"`€‘™y õ–’ÀCþ3˜K‡úO–Zšè¢R‚.˜”í3À,ªV GfŠ×¤ŠÚ)ކª—)¤›ZÔ颮¾"ê?š‘‚e&^ŽªÚ©"iÛÁúbB”þÓ$K‰ùÞ@¯ØhRzé°)±"QJë¥Ç&)­Ð"®wŠdebï Jª®*$º˜þúmD´fèe¹™eTèbÇjg™»¥’íCÀsËλ¢Èz$°óiR¾™âØ,«**†ÀB9rDkt0Ò*å¹’‡0°Õÿù¥GedÇ"Ñjå>ŒìfD<_ÇΩÌeFáÀ´ûÙ\‰d+’v—Jê²~Ô´ué¼b^†»hÚ=¢³ÌƇ€Ñ½´E.ûUyÖá,‘²DüŠ×`4²”`›í EΉƒ%‚Ýöv!ÙÚ‘Ý‚P}¨Ñyg{¾ý1Ÿa¥¢lJtÖy´}ŠôNf˜þÈb—! õT}uV¤¾‡¤ŽI;1G¤«¤¬ê¬;ôÙé†Ý¾{ìQrú#ï ÿÕð|9ÿ<ôÑK?=õÕ[=öÙk¿=÷Ý{ÿ=øá‹?>ùå›>úé«¿þQÒˆ+ûñËß}Õizÿ•Î1´3€æ@·DÑi†–*a ,CW;!³•Æ¼à…Ž©Ìe2$È!3£)ÍiR³šÖ¼&6³©Ímr³›Þü&8Ã)Îq’³œæ<':Ó©Îu²³î|'<ã)ÏyÒ³žö¼'>ó©Ï}ò³Ÿþü'@*ÐöSL=(BªÐ…2´¡}(D#*щR´¢½(F3ªÑV”ý(HC*Ò‘’´¤&=)JSªÒ•²´¤EñT`º™&…¦i)NsªÓò´§!}©\l Ô¸Õ!>=*R“ªÔ•.EÅÉSmÕ„,µªV½jO›ú–©º„«,ñªA°*Ö±’u¤Zu XM’ÿÖѹ¤¬n}«UÏÚ–µú&¨m…+^óºS¹^…®¹³+Kô*ØÁ¦”¯1¬SïJØÅ2Ö£†)b·ªØÆRV¯­idÑ:ÙÊrÖ­—=Š_y•Ùt¶´ž Jh-’ÚŠ¬V"~5-lÅúÙÙ¢v´‰-n«J[¨Úö°Í-pº[©ö²¿ .ru:\š´6"ÍuÈk“+Ý–.·«ÅÅìq§«Ý“V÷«×­d‰úÝîÞh¼µ¯fÑ›Xõ†w½îm¯IÌ ßùÒ·¾ö½/~ó«ßýò·¿þý/€,àx¾ÏmÈâ×3¸Á~0„#,á'8!FÈ‚'¬á s¸Ãnð…bƒÿdøÃ&>1ŠS á„Å)±Šc,ãÓØÅ–1oCh¬ãóxÃ6ŽÒã!¹Èÿý1’]bä%3™ÉIf¯Hš,å)ëøÉï2•³¬å[¾XÞ2˜Ãüà.§7%b>3šLæ¹*9Ín~3~×Ü×6ùÎp–³oÍlç=§ÏÆÕ3Ÿ f?cЂ>ô” ^– ºÑRV4yÿ e6OzΕγ—ÿœiK_™Òæô¦3B„Q“ºÔ¦>5ªS­êU³ºÕ®~5¬c-ëYÓºÖ¶¾5®s­ë]óº×¾þ5°ƒ-ìa»ØÆ>6²“­ìe3»ÙÎ~6´£-íiS»ÚÖ¾6¶³­íms»CÛÞþ6¸Ã-îq“»Üæ>7ºÓ­îu³»Ýî~7¼ã-ïyÓ»Þö¾7¾ó­ï}ó»ßþþ7À.ð¼à?8®ð…; !ù,]=k{‡ ///QQQnnnChHj‘Ut–Mx¨hu„kt˜}nŽyz‰xx˜g|£v~ Y‚®~ƒŒz‚”g†­fвn¶x‡¨sްz—¹~À­_*¡c-¼g'šx[Šu~š~l˜{y»YJ¬|\ºM¹|X¨k{§yf½dj·iv´|kºs{Ùy5ìz/êy8ò}'ð|2Ü[[Ó^bÎd^Ê|OÉzVÜkOÚgVÖxIÖxUÇdiÅksÆvgËryØdfÖmpÜseÙwxæ^MãWVèfIåeWêyIèwVãgeåopæsfåxxˆnІv‡…{˜—m„—u‹™}”£m€©x‰¥}¶y†Ì|ƒå€y˜…x¾‚I·‚W«‡g¬ˆwªzµŒg±q·“t݃.Öƒ:ô…é…'ç…6ó‰(òŠ4ò‘;É…GʼnSË‘YÓ‰GØŽRÛ‘NÕ”XÍgÍžrÔ†gÚ€z×–hÚ’{Ϥ}ߣjاxë†Eë†Wç–Kè™Uð‹Cñ–GðœUè…iå‚{é˜hé—wí \ð [è¢fí«uî±|ð¦gð«p‡‡‡„†”˜ˆ†›„šœ’Œ•••‰Š¦ˆ–¨ƒš¹—Š¢œ—ªŸž³‰¡»“ ¯š¦¸¨€€§…˜¤”‡ œšº€Œºˆ”¸œ„¨Ž¡©˜¦«ž°µ›©£ ž½£Ž¸§™¦¦§ª§¶¦±½¸¨¤±¬¼¾²§¶¶¶ˆ¢À˜­Å±Ç¤®Â¨¸Ë³¼É±¿Ð¬ÁÕºÁʺÇÔÈ‚‰Ê‹“Èœ„È‘˜Ø†‡Ú‘ØšÕ•–Ę¢ÚŸ¢É¥ŽÇ®™Î²—Ö«„Ó«“Ö±Ô´˜Îª©Ë«³Ì»©É¶¸Ø§§Ø»¨Ü¹¹ä„ƒåæ–Šåššð›œê§‡å¤í¶†ë»”ú¼‡ø¾—夤躦常ò¬«ò¶µÄ»ÅÑ´íÁœêŦé̶éмù¨òÁ¾ùÒ¬ÇÇÇÄÌÖÊÑÙÝÁÃÞÏÑÛÛÛÙÝáÞàâåÄÄäÏÐç×ÈæÛØôÄÃùÜÁõÔÓåßàæáÛåååîïðòââðïðÿôêþþþÿÿ¹ûG° Áƒ¨°¡Cƒ 6Ô§¯ Å‚%j\¸±#F3‚”(rdÃ’&¢L‰peJ—,?Ʋ=zöܩϿ¿ÿ­'à€hà&¨à‚ 6è kuöw§ÍCÎ<ù¨F9„‚H‡Ø\G!mÞ)¥[Vä™è[xßù5áˆ6aÓ!!†Ðs=ÝL³ÚtÍEi[iã±Ý’k²©¢dRŽøavúBÈ2mÍ4ñt³%sRd'‘Gšy&Uo¶™¦›Œ6údu#‚‰ˆ˜„ CÑ–6M—úP‰ˆ•„\#¢¡¦!Ù““-ªéhªMºh¦@ ÿyç¥ÐЩ'§úÈØa£’Jš¬.ºj«ª[¤#rè!!~²L†zòég­QYˆ¡pÛùjê£Lk,·Ý&§¡ä|èG„è9Ý$aD[v3¦!@Z§Ž:òã¶?¡šh±Á ®„¾ÎÓá!vRD ¿KNeD\Æ8öF¥%—›î ì¿ßÜqPþ;.©2Š£š B7[BŒÈ8‡”qÃmŸŽÈ/ÈŠ̱À>óL0©c–£Ï1EG‡ÜR†tú1ñrÅ嬦¸VŒ¨·@ÿô©!‹ë*ɡΣCTCe NCMÑ cÃ^ÍQYµÎsý5Ø=ëÿ½7HPZ§‘ô˜[E@CÎE aF„ŒcÈdDr,tÛtó´4kßÿ-ôÇ£ƒ®i¾ÒsˆÔ}XMCA„bˆQÆc¸Ê¨ƒ­Åg\Ú<Ø\#NçÉåmz×~7¿<óbí«>ôìAÈ!‚Á ~œñzx8Ëå¿[œãަ)Û!"ú¹ÇÐÃ/ºÈáެ¯Ë|HÄ}ˆSNÌcà3Æt‡ ¼¢|µ‘•ÿÆ$*÷Uæy^›_ôHG¿*uÓS =È1Žk”Á!Çí.àŠu  ¸iSŽPÙ“r`fJ'Á Ɔ5”ËÈ2xr˜á ‡ÀÆÿ(' \ h°DæjÓÂJª;Ê“Ÿ'E*V±‚§œ™òQŽg}‰f胲@¹M,B k¸<–H–ƒPܭدúápŠ6´ aôY¼‚…H׺Bx®0„ fÐÃÖ‡|Qd²0E1®A±Ò§ÛØF7¾$Žk`ƒHêóPûP³3,ÞðŽsL¥*í·Ã½CˆÒ˜0BЉyȦˆ<¼?àR<Ôq/,r {h l4‡±mnFd"žñWª(Ö±ot4eŸrJ“ì‘B°0`1öÀK¤ƒJ!Ò‡ž qwøé9øΠ!‰G졪x„ȤÿxLãΜV<â±%A„ªâ¥v¬‰Ê+®²¡×Äf™òMîðNc"Åå8Ô@MíN˜`Bv©@â dºÀ#\¨'hsO‹ ŠÀ>AÂhlœ¡6ñèЈRp¢eIE­Ã;xÈè —“Q:õ´ Y\  ȵ®fR”’* ÕÅâ=Á‹S2¥iûì„Óê¨ êN³¹Ö¶Îd¨Ë ç+Òá†E†tº4x‹\hJZ[’„#îi }FŽ ÛÐÐë¾JPhâ  ­iN»ÉJ;ºÕ§?ÕáØ`äKðÎdˆØ*IzhjOôà¯MÓ˜‹Lf?÷¤Á-ÿµÔ¶ô(ÄÚІ=Ôk²ÛÜHà¾bY´¦U¸÷£0©I}t– ]àB$|·P9öT­—…oe%:ß,úªdª‡±§nÐÌSä(?SÓØ`Nã4rU‡S-ñŽö¾³ÁEnqë›Y¼´ÒHES 9Ç¥iÐiLäÀ‘4òP ÚÐ#ÍÈZT.J‘WôÎÁ|o|åËMúBø%P{þóŸbèa?é ÃäÀ füÀÂ’AŸY¤"³èïÞ# È‚Çô PŽÇLæ2›ùÌhFs„ìKªg"‚ÿqEÒ6Üõ.hTÃxX­”‘0Õ¨8•w—ËE¼à—§4®qèØj\ ëQ‹0R]ºþÿÂnyȊЇ´À,@[TLÌËýs¨q‡$4)@‚½‡f´¢}\GGØ1&U:; )Áˆ‚üÀ‚ÈÌfÂo)âTêãP"j´ôƒüà*.Óƒ-á Ïš²¶æöFàj¤Õø) AÂ6òQaKÍØ}¨7™q "Ÿx±>ˆ)íÓlÎjf·Y¦CkϸÛÒ›^–¬Ñ¸i"v,0DÄÌà$ ãU‡öK¬Ã.ÆDi·1 ÿÒŠNÐÿ0BÉc]ëo áøËÇ i3ÝfŒ»4 ú@Ú}z,0¯Gyb ›´+VÓX.e'gÛ0BÛ«³†»å.GôÁõ Ö¼ÜQ¹†ö`†¢« ¶#Z`†y€˜"-„ƒ+\1‹ÚB£þ„Fb£5çwMk“ÚŽñeÝu¬Ã<æŠÙ¬pÈq%B%/*Ø@ÄÌp±£½˜?CÞØSÈâTR¦jz`ZQoKRõl©1të…7²>ó°AÝSŠ d H³„Wè+.˜.È…Ø“¡SÆ·6†d8ˆ˜‘ƒ6ÿa'ˆ 1bpQhù0IŸDij?}p.cgqfô ZYŠ g }½GVˆäp ”Ô)Ub=ÊÔM•ñ‚‡8\¼8ƒ²§ä6<Òjȇ¦Q8áÓ!æ=Oã`TD`,PSp …0] î‰nx·¥wÂ1&3"*º¢¼†7è… øb(ƒáLjµÁXí÷~ËV„PËFh—~â1^€F6€°b€DâAÝèŠ/´`$âEÛ{¯‡ˆ‰èŽ Ø€‡÷hCá (s×ð8eÐ×Ðbà‘ÐdÀi0¶sû³†x+ÿa}±±…„É‘éX†ñ¹€l懈0‡Àƒú@hg;bÐ0°=¸£{'¹l³“«G<éBR¸ŽfXƒí˜x‹8–œq{0B@òÇ,?$‰pµ3y+`'À50a‘ØnØ{%€é!ö!¿UJ@Ù…B¹˜ÜG–CÙóFèI•h18#ú%3j(”cd`&€)ÀhÌb“çe¥A9Â0 “ú²“Ð$zˆ”h©ˆ3ç˜E‰" ×zú£Œ©q‰”‰Qœ9a°h°Kh~ðPv~ zÌ€1tÖZÙF€²HZaù“¶™˜Šÿy›fy–¶7~©Á@m)Y$;Hk€cPm†Ô¯ ®à¡exàKp¥á%-RX}æ9è8žâI”„ב»ÉŽY0D)«ù†ã% E ú°W1„`Hd€€& PaÌ) ° BÁdRÇ)wC!µÉ áÙ çiž9ª›^':]ÍGJêô:C€Öà¡?t j ùáGÚ8 xpð{0 ð¼ ÁD'îB£ÂÃ7ê ¿è£eª‘i¦8ŽñY@H“ ŠpHÅpY [æõñð°†09À ŸÐ {Ò':O¼ÿWu¹‰›Š¦eYžgê‘YZ¿9`É“¸47``H*€n€ ² é@¿À 9ppëð ³%ÙÙ%#–:ª¦¹£“Šk:Žh‰”‰ÝÑ S° ¾# R†Ð!03°°t©ð𣠠 pÀSÀNÀ0Óàšî›Õ2ãP™2©”*¯ÂÊ£8ê«BU¬Ö1 ’Àª0R‡»¡° °¿àTð°­’Ðpâê LP¨pZ yw6A%3¢'ˆú ![©õj¯’Úˆ¤Xu”N °Ó°N`H€ Vÿp°¼ ` Û°ÿ `¯0Àðeúr1ŽúÀ!ˆP<r¡DÊ«=J¦$›–iz¯C‘fÇf`6  é ¼€Q°±£°2€pг>›­p àšð?LT¶?ð îÁdÇàÇðc\ûb¦µŠ»¸ŒÛ¸Ž; ù£¤ !9î@ K5à °*0°³rë³¶p’/Ì€±›"˜5¤=ù±ôjµW;²¿ ¬UK¬°ÑGù¹ø‚>©á_»ï0 S°à%°$À @*€E„ §ë³– ”0.µ%êà <ÀïÿÂzTbsh'Þ¯Ãj”ÁºS ™_÷J%Ê ³6 €¦ºáõ:7p¡° N€X ±—P½>‹¿0 ¼Ð épQ€ß›¬§q»ò¦í¹ T˘y²é«¾¹‹_GhQÚ¨ép ¯ ¯À"œ h B·pÃ8ì³êK©ð–0 ?À £0 T ±_bo‰ |Á »îÕ‹´·Á󚾇Hn,¦;ìU£L²H–sгà³1>–@LÚë%0 J‹7R 1È›ë˾·«»µK\èiEEY¼Åaº~¨ávZp­! ÿ`ÃàgL §0§Ð j¼‡º)XǬgZ[âa7nñ@PܾøJžS,Ť`#\Â2t ¥(|<»­Ã@ >‹¦ K' ÄC\Ä€§WN稠l‡1Êy\ʽÊÌzLQ_×Yó[¿që0Í€ Á ­ð²P«PÐ K#œ9ðžð ³ 'Fð¸@?€‚p<…2ÇÈü…ÉŨl»wìÁ°±\ùéÁÛ¨ßÙ».æ ·ª§0P ›Ð°ïp )°NÀ² £ð ¹0 ª›9`Að[CP õÊû° u,¡ØÌÿ<Óï{ÊBq© Zî@·º 6ðàü8@QðO=À@ò+ ¿°Q/ð?Cð€GÄR2™¡Ì&ûÌ"+Ö¦¬:M5ÖÑ@È a &À” ¼Í–l¹/ uEpÕT&¡2M„ÜüÜÄxÖdýÁ5mÓ Í)ÛŠË±ÖØà­°9ÀLÀ ßëLðH ×ôôÀ< eC€¸ È6#ìù†Ì}Ó‹=ÛX›Á·}†)+h§Â*ìØ@x€ Æ`*à?pM8×À€#К0 OQ/ÀE@5à %ÿyþƒš}p¤u±ÝÕÿœØŠýØcíÌîíg-· –àl±1>ùë†@üM %F}|em? °SÁCpÒS,Ý”‚ÈfRIÅÁÕàÉÞ»«Þ{,ÐŽÝØ9­¯Âñg@>°á¼s ð@ È éèºÀžS°jHÆ/@>îãE ‹ÕY'çò#Ñ%ÙñÒˆ ÐîánÇw\Å"NÐæ ê ®B°AL–K°´FôH[é@9LÊ 9аC`ÒA Ó€F°n/\ä¢òvÞ!ˆQÖ-Óí­á4m©Sá¤B'<ÚÖÿLBãÕ @‚§ñW¿À #åš/I lt;Øuа´Ò†â#D²JNˆÊÃçMîçOåŒ-è¾N¾“\^а4 RÀ ÿgœ|mQ ©7ÕF lnþæØÐ FÐé (#}€â‰rád©¡ÜϤüÞî›ÞÞê©ì+U~ X®åÖܯ`˜Ð Flñ í Rð½;€ÝF°à?îãq>çc'rÛ\Þ£QíNÎí%›ê|¼ÌL>¡ÆÑа6$nâQá»ý ˜@'0 ¾CP‚Puà Ï Àð ѰÀé0ÂКà.?.?Þ×F Ò0‹pG„4ÿcÞýþ"f}Þ¢ìÏe½íží¸MqâØœÍ`ßÃ1ßõmò[ºàÏ˪Dœ‹ô’O /ÁÀβÓzÙCÒ0ð½*½ÒCµæÕï–¸r„ê¬êð¶ ßq" ²ü 0sƒÖ¦!W:;´£  e~w€Àlà Πh ?ÐN=ð.®‹1ôm)Ðø/ eóžšÚ‡æ5í‘çðsÿó>ð.å6Ùlh±lô9ENΫ·ðÀï2õ!©¦€7À0žpSp«œŒZÓ‚ eî.C@¸ðõF°_™t…H®¥þï²-÷âqOú¥ÿÓkjÙ æ¯/¦°|ú@û  Ä*7kÀñú ËSüÃ/þ–:þ.鶪ôŒ )‚ÚÁmúêK·Pá?ˆ%B|HÑ݉î&näØq£F!EB9ÒdÆ“)#–Ty’eKŽ/a†Ô÷Ïá…f½zðà¢C A6 ëÂ+X0%©Âhôœ­Qã S„ ´2‰’ÃH’„Aé%á1e• /l’f$È@ñâì6èHŒúÜý¬Hr¦I™c ˜ðÊÃ! ÿ]œ¸¦Ãuzö¼%Ô2P¢@ÝYºpAr­ ž z§ïš4 p‘…0¢<™ÿôV.Q­èƒâ2,jÒ1ѬƒuÛ`WYúËíÀ´}Š”)ßjª>áT:åOƒ Ÿbè_!êª4 RÒo©  „SÕC¢ÈÛûVgª7yõ¾+Y_úXÿb¢¨v—ñç-*е²wsA¨B½42)u£\³”&žAw`T£`@#ıÎ|vŠ·t=åéÁ•2²cuénÃZÌŸÉâ˜WË©0ù¥w´Ç›ÄPC8›¼n-<À/èaœ|C5 XB ð°†.¨bÓø…<ÖÖQmȤ·Å-ÛÔRÞÆW¾Zä§í É/þ šRØÑ&±‹L–ãíF7ø–)t¢I£"ü°†” dXC…uƒ$LjP¶TݘÊÔ*ðmU%öÌ›>Mè[ú–•­’4®A9K‰£¨C¸–(lâYPº`9H ü€‡?T£ˆY`„1ðÀ‚)ˆÿâi♲3¾ˆ8Nóu¬‰«lå¯wÅj‹‘ßÞ:Ÿ…ŒÇ<6~kB@å}CD¦ú@&<y Ã#.äÅ«‘•EP÷°þË1ml–%;Ó+hn ˜#uu”n!D‹uÀ³9!g ƒhð3ØÏ‚Ú3”«—¶¡¤Ð‘ím«]-hM– ŠÊfãWÈøõ‘ô:åmX!×ðCþ`ˆ!ùÈSÅ’mèdòRÚ|~ ‰_hC¿úĬ掬½Hë äø+ÛØÌ1ÇLfz»cn¬ÍqõADô!‚eC…×pá »õ"·,S¿ûlU£øÊÿT&´ÀukD³Ü}³4XôÁ÷DY= MB¶&d3yrÍ!ÎÐ÷aÅ8Å,Æ[^Óiu¨¾È^ðA\ÛÜ&x=ë»e.ÃÈÖ»ËïÝBÝ­M£ž8h7æ[}Å ŸsXÎrS#¶Ä3§ùÀ·Mu›«ç½F——L‡Xz S¸TRÀLÌpä „!ŒBÄ–Ý ¯y5S’Y5]êS¯9¬ûžm¬¯éæ[_ø-מ+DJIhļev´«}?4þ`†D¼;yVÇ-jõîÌJ¥é |Š î÷¿¿Wë„ØÎ÷ÄâwW“\ƒuO°ƒƒT©ôÈÿƒúà>˜¡;F<~Á‹Eí¡Ÿ6”Sj3Á÷êÓ§>࡟pÞðÉ«ì¡Ì½àJ¾zPhä|ðà*!`€^a‰[¼cñ’ò‰z9¶ƒK½D=êð6Ò¾ÛÙ†;õP·€"(‚à€%àšF`@ 5ª8)i‚`H…ux‡w(œÉ;À°-•‘þ3Àª›AÌ:-Ã9ä›ÌP¨jr‹ 0@‚ÀQÀˆI˜’û@°É…&Ð p¸‘w°,—c¾?Û¥ðq/“€A´Á˜“Á<@웵­Ë,…ðÀñ‚ 1ÿÀ<1Þø£ˆ H‚ÈY…[ÀËR‡3É¥*,ŒÚúõŠAÓûB뫾zòyIw‰DIœDJ¤ÄKù_øiyžp‚Eø^8¾_ùt’_˜‚( D‘€¨–sDYœEZ¬E[¼ÅZ¼¶ܲü™ôÀƒ#@‚Nô €Iø5¹RhPîJϘ€uX,ABµ|Ói‰XŒ¢ÿóÂÒ C«KD„+C®ÃA‡ *¡’!@ð çyu¨´ÅCCÀrðÁ™ °} -jkDŒ²(CÄÓy•¬ÊFp”9ôF†¼>r$3sœ´4ÿV<¥ÚÛœ ø… ²4‚©=ˆ´ÐHr²”•nô¿)R¬”`“*DqlÈ“¾˜„HrìÅQPJ#V¤:&x†Š‹ º0„‚q°øÑ3“‰§3,öz–¤“š(ð¨JÁ[50|ÈšÈÄI;Q&S­`h—à…¡ü)§Bh¨‚m€n`· 7“Ô;hÃÅÒB€›,dI¿4®üÊp\Dé@@øË!KÒ‡³TÀ9Ô1·DD  Š»Cz8Å H§«ÆóK– Ô*lL9$=™T½ÂœÉ՛țtˆN)¾np¾ÂjÚ½¢¤@ÿ#„àÐ1¦ ‚AÙ7Tƒì¿yRHåø¿æüž'{>E\H¯DLÇÃoÃ9w›¸£Œb%8¥!0¨ñÈ·(‚<ÉÏÔ 3A“¢xzÎÔé褠 ÎotÈÖäË]L´-Û¯m集Lêh‚°"PÏkøK‹à`Ï/i¾mŒúlšÈÆ„ @šð7ƒ´6¥Iì< Å´ÆŠóË`Æjà(n€;rð, ™ÍÔ1^x zMç •ÿþøK§û£Ã:Ä€QýtNþ<ÌÜÊÿT¸ó:¸º»½h†$ >*#è¶»†Ÿr‡ãÓLÉRÏÄK½³Âÿjì ŠÀJyj#µˆ4Å­Ãj¾]j¯Á±ÓëJ(=4÷IŒz8~€~8‡x±w;T{@‡oø†{Èt°~¨‡£zhToð†{°‰oÐÔQq9t"!MÉäTM¡ˆÏä° êœÎ5Ì'…Í?õS@­‡{¸‡z Tà‡K=qÐsXTtð› [=KíÔLÅÔoHMAò·!Ô”Ï÷¬-! UR ÌÅÒÓ¸ÉÓ©¬NëìSoWÁø†û†Òt›g# ðÌ’p†`l†fö¬?s§Z‘²•¤SÁP"…O7¥Ê¨3H]ÜVƒeMF¼ÎouU>M‰{hÔM=×ÿÃêj0q{XKõ†o`‡g˜†{ ¸è—1) ½S<-•½;X\,»Â.JŸütX›½Y×ÜÓVͶš}Nl4, e›“ôŽs­|Ó>ë0líP'ŠÎ„å*ÝÙœ WXÕ'&…Öé Z—½õ ®ú0-¼P¨TM¯M/˜ƒ¾íBýÜOq]X¼0Ûî M(j À$Ø—ÔÊ™AI™‘Îú„Y ¦º¥Úª}U©mRÂmIÖ‘[>ë¿Ä]ÚkM;]Î %X¸å;½Jnm[·\¶åÜÍÕF€MÍë])ò ¦U©R]@Z¯Ó¹Âžµ\)ŠAÊÜ©ýÆ”„]'}؆]“ÐEÿõ’ÙÒEHjEÔB àå”DÝòŽÕô³¨ì\ÏÅZæ$Q†ÕÝ–üQ—+Õ5ýÙ¿ÄÜ„…[ÖY9{ºã…ÚîÍ-äm9Ö=\ý۵6]ÜÄ‚0]"¤Ê•T³J¯‚½½,Ô»€\[é Û¡•]Ú…_íÈß³…Þù•_ŨßìÍK¿ýÐò=_…$$õ-Èi55Î(âWÀdÜ«UX·eà{‚`•Úë½Ê ¶Ðž\­}Û uaöß &ÌöŽ[Fßný„ bþ` ÖSú•:ß]ÝùôZáÅÏ-LÎ':Õý]a–<Ú õK­ºÝ6¥^åõOÖ\å¨b&Œ—EÝÿÑ]_'XúäVk|¢½UM,&R¼˜ÛؽÏ×”J"îO#N_îc3nÜÉåãÒá3dyúס…²@¶â¬µS$ci ^æðb1fßèÕߦ“2À%-†É,îa»UŒ÷Äcw’bmÜþc9õñ9YLn\¬e[¾e\Îe]Þe^îeZ‰_žd ~ä2þ‹Q%åÛMáØUdóÅß~ºd¦Øwb+¦OfžæÿUÛj.âm¶`5Æ]CÔ¥ MfeÎãñõ°šAIåô·ç,Í*n™ndÞ €é¥Kn¯ÝÍçLÎcaNÌl¦áÚµæ<$„}þƒÖ½%cñ‰Op¦ÓBf•·é×ÿ‚mßêÅYжÞ}Žbjóa6=å}¥S eUNv¾rÎÝq6¬cvdUèϽèÂui}öÙ'zbða>ÿ•èw‚Ó¾Ú—+iMvâ»õá˜é䌶袎éM®è·}96þÚfÍÖi þˆ’øç)kéX¦Ê6ýW¢Nj¥Fêf06æ4}ÖöXIÚéÔâЬ6mvb”‚S%õjŒ¦ë—>j—Æi_ÐÍá5Oð÷ßÃÆôß>óM¯r<ïôVÿóWŸoDžA–mêXÏsOguùvuF¿è:Ïumü U§òkÅÖ]‡ua×ô^r2§ë`oöa7Ý8çócoóõõ_WölçædßYCïöËõó™»õl]v;gvqçôgO÷¼ñUöhE[†æúôqoÿvD—ö;?t¼Æt{r®uÈms&­ïYÞ÷ug÷Yww]çwÿìÞâ5b„¿oow‡Çø‹×øm§õsŸïøF_y’/y“?y”Où_¶ï=~xˆwù çõ…Ïr³ô^ªø–çö˜ï÷ŽÏxŽ×÷D–Öjg$fø†?ú÷y¤ïy¥ßøÕÄñ‰ßù¦Ozªgú¥z—zÓVòöã™wö©Çú¬ïz£¯z±ws–WôŸGw˜×ú±wuwû –ûµ'û²û°Çû«gû¶·{kNÉ´¿{½7{¾ûLï{¿'îæ |m|«|È/ü¼—ü£æ„ß{Ê'ü—GüÃ7üίû¯—ùÏ}ºÇüÍ'ý¢ëÓŸüÕÏ|Íý¸/ý×—ýÙO}¯üÄ}ÿÛW{Ö§}ÇÇ}ØWøà7ýá÷|í¾}×ÿ}åoýÚß}ž~ßOþå/~ÔwþÆgþæg|äÇ~è·~°ï}ï×ýð7þã|îŸþè?éWê¯~íçýæÏýØ—ÿù‡{Îýõgÿôoð§ÿûˆÿÜ ,hð „ *lèРÇFœ(±¢ÅŒ3^äÈq£G‡ C&Iráɉ&S \ÉÒåK–a¦¤IÒfHœ9e6Ôù‘gO %…Î$Z”¨ÏŸF &µØÔéR¦Q[N¥:õiǪX‡jízµê@¯Q·>$ô«X fÏŽM»t-×¶n‘Î¥k­Ü¼zÂ=Š÷m]¡}Ãæ9ÿ"ØÃRÿf|w¯LÅ‹! N\8²eÇ•/ïä\ÓógÍj3S Z#鯥M¯Æ|ºsk×jÝÑ®mû6îܺwóîíû7ðà‡/nü8òäÊ—3ïMX´á×°US¯þ˜oêèÒ•ÆŽ ]v÷“’Ÿ‡G½Ý|ù›ç¡®WÙÞýuìß½Ï~ºüû'Ÿßz|›éÇ€¬ (RvX v²ç`VõÈ xÿQHß…Z¨à‚n(`†ö…¨Þ{e•h"‡ Žˆß‡‚¸â~'"˜¢‡/Ò¨áâ%h#=ê(#E@)!‰D²è£ŠI¶¨$’5ºø$”N2ÙdŒBúc•¢hd–XNÿ(å”a‚9¦ˆKЉ#•e’©fšEj9ã›pzù`œˆY‰—]š‰f›GF¹&zuÆ5'{²Ù§ž9þˆh¢ŒJh„Fj袂Z•磊ºI馜úy&Ÿ•J*§§Ÿjê©þj§šª ê¡°¶êh¡®¾:몢Úú%­ðaZk¯¾æªk°[ZŠç±ÈŽÊÖ±ý÷ìŽÃ¢Ê*µ±Ê l±¤îši¶Ì.;d²vvëí¶Â~;h©·VK츓…{é¹è–;iºÜJ;-¯í^Y¯½×ª».®©þ›ï½ l0Àø²ë/ K¤ÄK<1Å[|1Æk¼1Ç{ü1È!‹<2É%›|2Êÿÿ£X,OårT0Ç\•ÌFÕl3Í9ë,ÔÍDõ ÔÏ<-ôÎK -ÓÑ)%}ÒÒLã\ôÓ3CíóÔT¿\5ÏQK½µÑ-cMô×H‡-6Qé€eöThG¥öÚU±mÔÛp»=7Ý`Ù}7Þyë½7ß}ûý7à >8á…nÐ#="Àú¨5€@§0nV+ÐÊ?ú @â2U~¹âŒ;žR+§´´¹éÿHÞ8IúÀ¼9ëéXŽ9I¬4C›7Péi.€Ë«î‘ë·3.ì ï{ä¢ ¤;IŠXNPòÁ;ßôDtJâ”@ò@@朢ù,écþ#üÃx:Þ«Ï>úœÿ¾å'i€Ëü·€;â׊¤#€ž¾Íýhßð,’ŽÔ¯ Š€Ù6—Žt.#ûsÙäp 0$Là?4x<BÐ#Àaè½jƒAßÉElð$, BpXÂržéÖÇ“”ðûG¶¢ˆÆP‰+{¢xÜ×@w ‰Z É’¾#2Q äHö"³­¯rj¤]FxÆ ‚¯Ž“ñȲõéƒ6š{â3’Æ÷±Lzn|-’¾Õ’ªCaF:Ž‘‰Tˆ$Íè¸Bƒu´#KZ}ïˆod í¥ï)Q%ÿÈ÷É@†Ä”‡tbŸ2s–sâó:È‘3â/Vt#É2w –Ì%“rÈÿ©²ÀL¡05ÂAh‚O‹È<Éÿ!@nº„†à?0÷Éd†Ä{ñs‡)ß7Ž0°÷:I‡A®•,»%êtA‹¸²}»f&Ûé¸ÍqñÇ„$=—YA&rs 9ä ÷‡ÐÔÑÓïK]7[Q‹œb•ŽÓ‡Ì÷Q6¤¤ÐÇ;7º\2S&–K鮹˔”Šñ{I²Qš~±vËLçâYÔ8¢} 9¤òË]p+mß]ù×Vžöïˆõ‹ß =‚QÆ™²ˆá”jטBʯ–-i+ ›?^¢pvù³ì_²>KŽp‡ù#`ûÄ*pR†– ­kGjÚZ² èTZã ”ÎMÐv,)nYÏÉ“Â0rÂ=Ih}ÇD´1W<©“Xâà‰;§ÅutSä¨dÑöGÚU÷&¢Ë´ë×E så½"x-ò‰¹Cbf{oBæ1¦Èöpþý/€,à¸À>0‚¬à3¸Á~0„#,á S¸Â¾0†3¬á s¸ÃŽãvÿqÍÿ“¸Ä&VbÕ׳¸ÅNñû´˜½ÎåT’¿S^öÜ›ÓëÍ8¸ƒ§éL¹8šžó¥.>2’OÒ>ʪ2…±Te'›)½"ªRsÎÄ`ûœYÊ'ñpéj/8>ïý¯™M2šÓ|,7³™ L_“cI(ŸÂ¡ÍtGIsªÒ”ÆÎõ³l3ù‰Áÿ]®ˆj>4¢‡A¯VÅ DaI›Å67SÏŽ‹­¡cü¾ñ]‚¤¤t¡û›èQ·Æ)}³Ý—éœrÑ|±Ì Ûgº”23}n¾ %W E÷i®ÿ›'©ƒ]bS»×ÍìÞUI[¦2Ðl~µ±=ÊL÷¥4qÏ>ů…­m§Cÿ£;ŸsªÚý±¹ª›®ˆÍ×Ós'te‰k…·ñÉDÌÕ÷ÌÛ¾7¾Ómï|ó»ß$‘ܾý-ð¼à?8®ð…3¼á8Ä#.ñ‰S¼â¿8Æ3®ñs¼ãÿ8ÈC.ò‘“¼ä&?9ÊS®ò•³¼å.9Ìc.ó™Ó¼æ6¿¹¶›£óó¼ç>ÿ9Ѓ.ô¡÷æF?:Ò“®ô¥3½éN:Ô£.õ©S½êKÇ@Á–õL"Vÿ:ØÃ.ö±“=êXg˜ÖÑÎu‡Y¤ìn;Üã^ö³w}í Ó¹x"÷½ó½ï~§;ÛÓ^÷~Í«!~?<âouÀ[ ïòŠWÞe¢øÉS¾òFÿgüÝ¿¯w)K(–ÿ<è÷ŽyÁ[…7}JB¯úÕ‹}ô ¼ÝIû‡°¾ö¶7ûÖcÿúÌçÞ!·ÿ=ð‘îzÝï^ö¼W;탯|Û¿aÈ'|ï¡O’åSõÍ—þóQ}íO¿úÞ·üõ¹Ÿ}sq^\Dù>ú'~ò—^¿"~òÓ/ÿ¾¯Ÿ^í÷Ïýñ¯÷ùó_îõ7Ö<¿ÀŸïõŸºÝÿiËýõ‡û½_ †]FÞbßì9_ãmŸýU fàømàé±_‚ æužŠ_é‰à Pˆ ¾ Æ  Î Ö  Þ æ î ö þ â`60 þq rD&ÿ¡.!6¡>aáÝ!!K@!f¡n!n¡Ú âbt!–¡ža~a´¬ Ê¾!Æ¡ a‚¡FÅæ¡î!ªan^¸ð¡ "!¡ž  ²aA"#6¢#Âà!.à.Å#V¢%îa$BžaB\¢'~âf"'²` ‚¢)ž"Š¢"nâ*þ*¾",¡*– ùýa,Þ".Òáî"/E.þ"0¾à,j )j¢+#2Þâ0~`1ŽâA$#4¾â2¦ j^4^#(Nã¡z6~£%jc7Ž#9Ÿñ£9¦#nc"c3ºc¶¢ Jÿb/þá<cä£>î#?ö£?þ#@¤@$A¤A$B&¤B.$C6¤C>$D>dLDDV¤E^$Ff¤Fn$Gv¤GþãDJÄGŽ$I–¤Iž$J¦$D†äC¨¤K¾$LƤLÎ$A²¤CÐ$Næ¤Nî$O6¤M6DO¥P%QÆäO*DQ&¥R.%SJ$E6%TF¥TFåQ&ÄT^%Vf¥NV%Bh¥W~%X’$WDX–¥Yž¥CŽ¥A %[¶¥[ú£ZÄ[Î%]še\ D]æ¥^^å]þÃ^þ%`&e_&aæV>¥a&¦b¦ä`.¦c>¦Göe-"b52ã;Â#Ò¢»üaÊtÿ¦g~&h†¦hŽ&i–¦ifŒAìŽÒÜjFÞ´fHÀfl²&mÖæØmÞ&ØxMn^ÝÈæ ýækö&×è&K'g×(§Õ§sòæsçq2gsBgÚà °•ÍÝd§vÚ w ÅwòDxÊÄx’'Î'z¦§†aÑâ—LüNìÌŽÏLÎóÏRpOó¸§úÜÖ@xZNê@P”[N=’~¢’óÀ4…ähV ƒ¢‚¦N{ÜA×IÎ"án„åÈN'=-¥ÄåЃöRÚ Eå<Ùø …ýÏï (OhŽ_ÉÐ¥Vlr([Œý¬ ø,Ö^QÿH)žù¨DLPIŽ –y‘PŒ’8@X ½éÐuèIpR ]OÌ—1‰Ñó g\½TRZg)‰©L”Qå|S ¡iA\ÓåÔÑE™Q.YÑCÈÑQSÀÚŒ¨ú¼Be*Ñ1ñ¨GÌäPPPµÔp=Ù(y“¤†–®T4©…3 X(‘Ïú”ÔI­XHä@Í’…Ä *öÏÚF!EûÔÔ@x)`LUP”©(iê˜ÂYI‰QÜ“¨Z)Oú¤ª²DJ5«fΧZ¬ž*¡Í¶ÒêèØ*Rù©«Ö´fi´‚ëY]•xÒ•qºnrÎp•VI¡°¾*½U•&êž¾£¶íD‘ž†ëlù)R-޹fD­~â•‘ÊÄ*1²]*‰ q–¨AäˆÖ¾r€¶Õ ]ЬNÄú@LýÀVgÅå–Pô)mA‘cìE¨[Î7Õ¬Äê•CÉ9…M{ó¨!~€…àTÖ¢ˆÜ]§ánÊÙ3Ñ"ˆ03‘6ÑP37ªÈOŠ+""Ÿt'ÚÇau.õám%)¤vÝõø^…]˜ÌD:EM4òƒ # "‚w*ÉÛúH`aŠY¦‰^òÞ{ðµe46ÂX%?à!7—iò¨FŽÙ'Ÿæ4ämy—"‚(ÂŒp0ÊH#œOý\}]æyßn€ú¨ ffêé‘IzYŽr‚‚ˆŒ”ÃMJ4ñ 7*ÿâÞ‰ø™‡žzi‚É)™g’¸é®¾rgéDõ ·ˆˆ$ÑIJ­–HЦA­O9!•¹bÚ«¦Ár *¯@á6,ˆŒ3œ!F$QÈ6>Ë9‹¤±†>>ÕèŒ5z©k`àòûk¸ý®4èUæy¡9ü “„| · !i¨a£ ÒnøT¾üL9'µ{nûí¿FuêñÈ@Ž 6õøÄÖ XÄOtÈÅÀc }k¬¯¶Àvëí§$ °°ÃÚCj|$M9$Á„i BŽ"g Q µÔëÔ½ÒË1uBí3Ð=]ö˜ãòcÏ"rM4Maj˜aFgœ!Ç*`ÿÀ¥Õ^‹­nõdƒÍ8^ɳ¿f‡rÀ7¾kÚÙó"‹’D 1R*´gø‘œ-X^íyéíf(rŒWܾb,yìdŸíøã”OÄŒrˆ<È8æÄ{Í\¸²˜î]›À_¸åë‹Ó~»À"3>;õâæ¾Ž=åƒM‚LTÞÄÒÎ!r`‹òÑ™£¥SŒ0Òì‘__ÿÏÓGe?ö¹çT9jXÃ"²q‡ªM€`4¡5ï¸ïy’ô:f»üerúYID¹}˜cQB„!‡.TÍðÂö F‡yæpÞü¢w?Ùᯂ8Ìa Ae©xÔB¯HÄ©ÿR%¾R•¡ hPƒÞð†>Üj"í¨E*Œié†>ÜІ6¸1¡q`#òY]r\×úaOƒgÜß1($å)–À@%ذBd!ÂFåèC¾@ BôaA „æÁ ˆ‰oøÃó.õ¢kiÃháÁPᗸݘqƒ6̤=„$5^0O³@ž1þM¬AÌáŒ(xÐH>¾¢a‰Iü!­˜„0ÄyPƒ|Ô<æñ ChÉããÍh˜Æêp‡›ä$£’§¾ñãB§ÀÚqž7%¾YbPð¤DJŒC˜Äû` AÆhpó DZ—#„¹0?Ïl¦3¥—ÿO}FÓ# ©&äž1` <©„‘6j 0ÀÊX9ÏYy¤SKÖšÇ7`äª*Åsž®c‘=Ù‡OëiòŸr©žIQšÒPõ(”²X‡˜(:FØÈZÑð….v1%G=È’¸e*t)5bjÃpë(1£Qˆc&“ž÷ì@UÊÏ•²”.žl£KOMôMh€Ö¬X¹)ÅÈÛ`\E¥B’‰ŠìeŒ†c-v>葉øCâð‡YEµvUµj?×8Mi¢)Mò¨Å&äð‡c!§’MBT’0ÁCŠ{ÀƬ¬E`Ü•YÜ"?º †0€¡[&ËÚÖBs°„=éä†sÿR†ˆ7èu¥rŒŠ—ÅYª ©Á˜²ƒ¡šˆ‡jÁ[ÃÖ¹û ¬?K6¬ƒ §Nƒ5lt¡r˜g}°Ftì1glì)Öœˆ,ü¶\§öµÍ*cë“Ú´f2¥!1üšuàávhF3ˆ „ ØA{ðÃ1ì@„!áÊÐŒ-XÁ [Œ¦o•±Äj‘ß͜ƾ ±ˆGLⓘHD³$Ñ´$¸G¬jU4¬!>¨õÁLˆèSÚ7¬UŠÆE®rÿzUÄDwºñ•oV¥™¶µjMØm܎Ї>0! fƒ•5ἅijÖxX¢U°%RKä$·tÿ¾Ð•­k1ÉCí-•N‚"a#"2— Ôp¿N„¡ëãG.0ÀÀÞ8ˆ@ Λ¡ÕJÉnÆê’•|dþi´p+´±Dô™b„!¸ÌÅ}ƒ{ùQÈFó†k#©Tß²i^wš¾rÆ4¿ú× k8†[ -5Ì€ H@9Ú„œ?´Aí€Çz7Q9mPc·o²Q4”ðí6Ï™Îï6|Ï­Õæm:õhÚ”c{ÔmËGˆº‡9{ÔCoðDcAœ¥BHEùÒ†d|TÙˆ–¼ ë¿Ý¸9ƒ„á²ÁfLâ mÈ‘n}®^WÛª”`s£6ç·H¥{‹ÜmÎ<_»¯ÑöÂFˆêi % FìYKåHf"âH ½¾!ær޵¸ñr²ƒšJKµ9o ÅÑI~×oÞÎDUuÿøjçüw|w!FpœŒÎ/ïà äñ£äðD%Foð\7B¶ßÍÿšøŽøL¶g¿<æ7Ÿn䳺ÐaijÂ×tyAŸ‘¼19¼»/–þ0 å°‡ÀaPt“ÑmßY¡¥{¼A“ar%ui3QFÖvn—vï§òõBȱiPzP#zWô€ìÁ:õÀ=ž“Žàh°DtdSÑG9æ·æ7×Má–÷;Ç~í—|u,ÂÑbk€€N±TFÄPW*mjÐöÀ^P] Žàkð{X¤E(tØPEV’ —£uAXR8H0Ňv‡î§UÞQ,½‚2¸F#:Èá[Ÿ1‚ Bi€;:p¹gµFÿH‚ÓaW0W[R'~p'ç—séçƒ?|š—y”WyAWöPz²RƃL‡2Bzã-b B;ДðfÀòñ=8”{ÑÑ[¿å¿B׃AwA(„£È¡È4Èà°"ϲØ5iØ f •hmpw³½‚3('áxÐ!Û„›‡ÌØŒL±~@ÈИ6ñó‹0ü€w7f  @“À9y#wÙhhÏ¡Žcîø> øps(ŠË¸øŠÉdic<©‡(4°v£t0*:€eÐFøŠ$Xw¿ø*Á˜¾¥~ÿuI(ó˜‘@÷†=9lËãENèh½ä@1k‚fP5j€)=ÀÀm€(Š t‚`xÛsËÂ,M€+íIZ§“A‰ŒgY‘÷øsÎÈAÒI†¦LøE»-dДgPoÀ rÄe ƒ0'Z× ×clEi»W†d5‘Ǩ–‰i)‡h¹–B9–šõT÷7ƒï!ˆð\pi]pDa µ bVjÀð[€ OáY޲p>¥c_—‰™Z™;Y¡šbe7}Àõ%ê˜GGÀZðGô| ›P íP9Ѱ > €íð 0Ëò Š!ÙB‘?šžB:¤Š¡î "õÑt)Îp®ð7Óð`=0%€@G~Sö ÀQ€îÿp ËB _É*a)ä@J8Ch¤ê¦oê†öȦʗ6¶` àp ׬ ¤° ÁÀP–°Q p@°¨¡€¥«`VŒ á{7ǛڞÁI|Ãé©ì)¹cQ€ U ¬J JÀÙ ±ê 5«ðð²€ ¸ p `ÆãO“ÈÇÁ†ƒ†7A<Ê©iª¦É*œ¡J&öøÕa¤a P«Êà =Pë 7~ p=pp ðP®ë ë€ PDH¶Ê@Á@ † ” üe°–ñaÿ{³8›³:»³¨ñž£:,ìp³0ôà,˜ð6 b°Oð8G°±Ð±ÿp\` ¯Ò ÀŠ{4yMÈI¯©'û ¤f{¶Ú›ʯÔÔ>¤ší`+©Sð°í¶p@ÐY¬z À'ðl0€ À±U[®›0– WÐN¡AÐ*d‡ Š‚,ò˜úЬýº¶Ÿ;™Ÿ ªmú“n+¨Yë טN± =–µž7<°¤Ð RÀ\°«µp¸U›¸ÿàº}s ¾À ![=@¹M@vÔf'ite믡+ºËZ °DúAV>›:º¹ –ÿ 63Ló ãð ^À^PKµ½kµì€ ^Å ñ  —@¾` —€Ñ {®kãмÎë¹ ñp–׃ ”l ½m»éÅ@à©ež¬Çñ TWóà¾ï[®ð€ ŒVH+!p óº3›z¼"Í*ª º œ¶çÀ5<Á:zÅQr^°ŠQ » ˆû¾ðËhí@£TbQ(Lvö`VÛ¥kÂg˜À ÌÀhKÃ3Ì‘»‘½Û›£Û  ßû ˆVkŒÛ– ø«¿üks8up;JÀ,LÅeaÅÕk½¥«¬jKœ¼ÑUÖ©ºƒ¤©ÍÑÿ`Æflaâ Æ“° @ÐXGÚë>@¡ ¶#J@º€DÀ†€8d‹Ç;HU|ÅXËZ½€.Å‘Xª r«£Ùñ°^±Àð`«å: ž`µ"P=  P µ` Á° —µ,àJP4Àª:pI LûÄ÷pÝÀ=|üÂ~L™Y쬳E9?F·¶úðä Ÿà & ¿$ @ GX @P,@4@}p4@2¤¯Ö2Î1rȚνæÎk ÃÓ[ÄÆU¶ªc ðp ; € üà MàÌ6“ÄCûST@ — ÿ¢%”ÄÃõ© á Ñà ¬Ñ£ë‰¼ÎCý­!ÃÜ.p ë  ÷ü¾@¹RP„/MKÆv=  ü0háUø§1‘ÑÐ A]ËmmÔG=0\Š–Ϻñ½áËÇ|p ¼p á "à'Ð)ÀÂ`ÑÀ` ]UP4I: ׸À“•°d‰ý+÷ðÓoÝ–EͬÑÿ*œ”“ ³  ‰¤óºí`h€/Ð#ð )@ÌÜÌ* S‘F¬zÇ{ÚŒÐEðͰt×7hj€VTrj æLËn½Ú¨}ÚÝÿÃù8,HË@ > q#jÙ\F@ L ¤f¾¥ò>&W+ùàÙÝ ˳ÜΪ]ÚÔ{½^Jëã½ZÈåZÎ`ÛÇ= ¾ N_éÛMÐg1&7Ù pÑ ¶‚HOì!  ÞàçŒÎ@.Ã²Ìæm>äžf)¡ô7ëÐáÍ!qt V `áWVíDU0 a‡ÐJÐg/ÿãÙÀ Jðå×…Œ0E(Ô ÷€Òãy\×kçÚmÚž&ž ¾á‰lª¨º ¿Ð¿½1Êð–`” ’­È àE ã4^-,‚‚ #ÜÐÓ¤­øôÊ} áÏ*êà-Ôï9ҤĒ'U¦Ty’eË/aÆ|Ȱ…9äjØÓgÏ…>ái€gI§¬ŠÇo›6 €±T…‚5ªL±å3×® A€\¡D£È´gÔI¯ 6†A1r¤ÈÐâÅšIÎtÉ·¯_‘2g¸pGÁ‡ÿlO†Xì~Nö)·§¼Z²jÙ’ei‚…¢–âi«³‚m¹h9` ÂIR µÖŠÿÔ£†,D@)Ò»·;Þ¸á ®BŸt1&¼›p¢ÞÅŠ9&>L}°uÀسKGÉýc^Êá)[¦h-v1lvŠ/nð’Z°`Š,žüra`A„ˆN°PbÀhšhB† ¢Ž†8(®ä$rî9‡ø±¨!¼öò"íüêp¦a QÄ 5,1: ÅS1!n´ !ñØÁ@†0° šyø‘ŽK,a4Vø‰ fIh ˆˆ†š°‚š„ÄAP›§lˆ<è šð¹-´ˆ°GlIÌ¿J$³ÌêîRsM6ÛtsM…Ö‘sN:ë´³Î`üó/˜;é¬åKæÄ@"”Y—ÿJ~´@Š).`e"®¸@95¹%ˆ‚·"‚ðENb\G_và¡O:™{sUV[uõUXc•uVZkµõÖ”Î4‰±U,Ge ‚q²x,‰-= Öñ ,šgHú죿„ö»B‰ |¨¡·'ç¡F’g7ö*ˆêr®® Ÿk×;]GŠ—¦0O4^{QìUE*s\ç­‹*Jx´¹B )®8® )¢8á„Hdc¨zP¡‡&1-B ß@ã ýP¤{š®9-ç¢ð¢,¥›—^3í}Ù£™¿“¼}'ë—ŸSžÌj‘‡ŸX0ºX²§‰l banæ!ÿYv!¢‚0‹ã&ÐHà °ÁNƒäLþ唳tŽå˜o®÷m¸ñu;çð~'Øs®å j©'‰‹ó… a©1(Ž©ñ…dÜjŒˆa¯Å6C lуl•SÏ£ 5ÚÒå|k¶¹í¸¹3ÝfºÃ£2%ËÙ’$ÞÛ’„¨T&¡‚š0Hjšà˜·#‚W‚†]È1ÂAÒp>æÍ?á|tœ-l9]½Dß¾°Õ»K]õÒÇ'¿ËÖ{jñÅôi·ýÜùÑ÷h–ˆÆž„‚§†ˆ>ˆ$oy‚0CÔ½¯)ÂÉ@"ð‡½Å°L{!± «S>ó)&|`ÚÐÿ9”½ôU&„{ëÛßjÇ¢h ®w¾cH¿„á `€AøEä&¶4¬l$[6A2{pãùð‡Xv!‘0ç{tê:ˆÁ'În¹˜Å,ò#ÂÆB'ˆE‹´Ñ"%È@MÐÆ<´a WlÂ>¸‚ ²æ»&¼a$8CØÌ°ü­Cˆ¨? ‡Ž{,‰$|Í6B‘ë@1ŠN\¤ÜÞF·Z,6?Á’Þ,a‰Z¼îwÊ ôI*0—P ±@ jpãIYÀÊð¼@0"z@#öQjøÃ†»G— ‰ uDŠtd#I:)öj?‘ÉE,¨u®6Än‰†2ìÿ!,oõ&°À„Q K\„° ^€à _Ȇ Ö ê1¢†›ÇCònPHŸòâ^…,ˆ¦c"“‘Å<ß#÷…¤üìÇHÐŒfîpD¿`Jü˜Ç€øQ_Dƒ¦¨ûø±ÊKðƒ‰H ?|8r$ãTâÆCYDwýót\ÊËvšP S mËB"£…^©¡-|(E£QŸQ”cÅ€¨±ÆØ}”˜i!JºD˜ƒg ¡æ ’šÜe%Üóœ‡tºS‚¦5§É\Ñ2sÑÌg u¨ü˜¦A¬‰Mj ˆ™¸X“: a•óœéd@$ÆQË}l•!Åd4z‰>ÿ4©k‰»:ëZZPµ"’’”C{åEÅ#3¡£qBÍÃýÏb>B|a·ìcRaÀPÀ‡7„¡À =¢{ܦ4àd?ØO™Rö¦™ebÁ‡ÁÖQÑŠ“©$e4iœb ì½ø¢bíh‚’r$¿h4¦òRrQÔÏç.³Ìm.ò£æpÙKFÔõ˜ÉlqIŸ{LÐm·»)³àa%X~JèT,vs†"ÓܨbùÑrFxvÙþXv…š#V.wù¸»žq¯yíó‹G±ã×YQF݆Ôù WpRXÀ€M ¹ˆPxˆÄ‘½åj¼á&€5‚‹Vô—*®q¥[Ý• :¥;>재9©”lH¼#L9êC®Ç† A¨¡Ë>œ}Ùa áëóÇØÕ”¶éèm÷õä3~¾¡Ã]š˜¦fÈjOáb5h­ €`qÃ}PC 5X¿Ô˜G0|ñ1 ïÈÿ‡ðà‚ĉóÓ;va;å^ùžcþí9»®ìèÎhøk4@YJ.·D£|„  }Èp¾ˆ& …(X ÿà†ÛdÜÂ0‚ÿåŸ|ä­™§[´Ãc™fS‚#è$H‚¬'¸˜Hhá!B°0~È·‰‚`JH¼GX?mP(a“ú[ ³ñ‹-ù¥üÓ?³ÃC⋜{—'œÂ@DŒ£F[A-²à¹³&8‚è³`è+`:‹7&P„l(‡t ÐÀ,ȯ@Ê¥hd<¬ ar ðžg¼Â?ÄÆk¬BYÔF-´ŒŠ‚ÁPt#ÒÓš"Šª³#Hxúÿß(è„Y†%i¼nxô/ï™ š‚B‡ðÇ-ÑC˜H‚D;€r;ƒ¤ÅÜ£hELà€hÈ·ûEH&˜†q@2"‚Þð±§%+;2®”HI)$+”ÌèŒ<*L»««`›+LË@±„H wˆ>Ñóž”(‘b„hÈmèmà’Ó–zn „–ò² I®§¤Ê™ÐÇ’$.À¾jH—T.¬´®l¯¼Ÿ°d€±T‚è2´3´dFž|SC{àÄ"(#ƒð*Bh±D ÌŠû hÔ'Œt1Œ¬ÔÊÖ4ÌlDÌm´ *¡=nˆCLêOR=Ÿ4@ÿ%0„´3£,‚a¬@‚¸tÊ`šÆCšF–Aþ’Br“¼È›Å¹Š6Ë5ƒÀsb'p£#P‚…‘ȳH‚>¸ÈÎdjøºjP• MåèÃæD®u!¾$2MÁdI¬Ìÿ,HÙD°æ#­û"!8(@@õÄÞ©3ßH‹‹„‘èë†n(‚hÀËpSÔÜO›Îž°OES•¬Î×|I?ÌΘl¨Ûž€­‚°3k„H‚m¸ºr5ñâ–Ì´3_8‹ïÚ‡#¹"z?¢ ¼P—tiõ2…Í È–´Ù%_Wuä°š¬Öížäêá´ùd¹UጀÙGÞ'áÓuÖ¥d QÜç|RWÄWlfg~fhŽfižfj®æ7ñàJöÚ$BeîãMfe3ÆÉbÕ&%âÖá½TÝ÷âçÜßdneçe6ßKd:Öd’Ô_æíâR½ÖwùŒ¸DfŽ'ý² vNí°cš—'$è?~eÂüßÿ*egM.Þm5æv^^%úЩ hFÎå<ÜãNÎÝ{®âÆh~¶ÞiiKÛ–6à–çÓ”áøUþèÏ%Ý[.çq‹g-Ý“ä×)h‰vÍy¦g˜Þå/d©l_BÊ[’èÓ½=ŠÃf—žãšBÜÐeX–颎i¯¾jVŽ èHÒ“D"”Ég¶•jF‰’ˆ[«~Þïõ­>a®&j±뮆è—> îÇiTc‰“b}ÂGl½dšŽë¤Îâœ6Õ`Öë½Æë¤ÖâØÕWHι¼mJV™Îù iñ•?’Fiƒl™ ^^a¾îëÔ6ê£NåcíÏÙc€¾GŠ™-èà¥Oî-éÿæÜçìøl¸¾Ý°Îk¤n¹–l)^]Ò š¸[ÃSÖl¹ r>ëfÝaP>ÑùËOFaŠ>n6nãæ2E{`lÆ¥ÎK€å÷îafo²$Ü…[¾¤l¿®o¾ÍfmÖoÒoò%ï\›ëó.‰ôV`¦nF‡öÓ³¦8ôþgúžêLNb÷ æõn>&nû·^Ü v1š~î¾H¦)êÞjîéŸçí^gÑŽlä^íþVmX¾Gún[ÝNUú믜õÝ7hµÖè[îžÁ°ã—¸è oq/î¼(f»m ¿^ΞY)··N~rÔþi OpÄYü4XÅžìïó1ïÿ%ÇàøÍn¿Þ`0Çj.o¤ÃöoOr9Wr;¯óûŽj)‡p& j'çä°‚¢Ó½s<ß﯎qÖæï“†c\Žcüó±®A‡jB§sK7ôCÏp2¿OFOM)ÔñÇn ÎV¤8¿tLGòSGõD?_•<íÞ®JÌÆç¿ìªÜq#Çn wí\×uU×ë­}ÎĘd õ¾ò7vÖ—¼õnÎt^ßô#7ó½.õòß55æå0ŸsSGtnïvM7óAoöb'ã0ãîÕ-smOuh¯tu?sqWp&u!Wv^7÷¶~öt_õ]Ÿö}Ç÷h?wt7É4/w˜ÅöüföwÏ÷xWøo—Ý_§aÿŸ\éøñ~ª_(Ïvv×÷^_øŒçx:7r nîØhB–rè´pïø†w÷€Wù•wùåöŽîî×}ùB×ø·ùm÷ö„—÷²sÊ5kz¢/z£?z¤OúUÁx†ïù›Çùuzžoy G^Ÿ¿r _榧z©×ùvgy~×ßåÕå”Þž¬÷i°Oy˜û¨ïz§¿]û…ôŒ^vg‡xE÷ú¯_{µw{®ê½ßù·üÀ‡ú¶Ï{¾ï{ÂÇ꺭ðÖü©gûÂO|½ÿ{ÉßÛb|<¦üÇ×üÍ·{„GügÏÿüÑï÷Ò¯{ºG}¦ŸüÔßrÈOûÖüÎ}ا}Ö·ý§7^ÿÌ¿{¼Ÿ}\ÏyÇ÷xÁ}á7|ãþ׿ýß—ýâ¯|äçüæï}ß_ýç‡þà—þèÇþë×þäWþƒ'}ë'~îÿí'ÿòóïþê?}æõ?~ç_ê—ÿùøŸþïܧÿúÏ~÷ˆþƒGð „ \èð!Cˆ6œh±àÅŒ3BÜÈÑ¡Ç CŠùá” )¹d•V"™ÕŠ*^ÿW—Inyä˜dæ8$“^~9W™fF ¥“qÊ)å›TÎ çZ¶‰e–$æ©gšbž©æ ‚öÙd~ޘ茌6ºèŸŠÒé(š…r¹'˜aú¨é¦˜fê)› ê¨¡‘JŠç¤¦" )«¨ºúê©°Æ ¨¥nRZ顸æZê­¼¶*룿Ú)쬴ªºjªÉ*;ì²Ì‹l³Á+í³Ð:{-¶ÅR[­¯ÓZkl¯—’*n­d­iß¹èŽÛéºæŠªn¹îîJh¼Ÿ¾‹Ø½ø¶Ëç¼ìîko½÷ëoÀ¡lp¸älk {û­¶GLïÁð.ìp´Ûf«ñĺ>ìñÇÝf,1É%SÜ0Æsÿ¼²É'ëòË"«Ü²BŽØ|3Î9ë¼3Ï=ûü3ÐA =4ÑE}4ÒI+½4ÓM;=4AŽø%µRTeõÕLaÓÖ\ký5Ø:umÓØ.•ÍÒÙh‡-öÔk{í6Li«$wIt‹d÷ÝpÇÝvÕzïµßj÷øÜ„>8àˆã´Ž_Œ+å¸QGΔä‹7N9æ™ûµ9ç{þ9è¡‹>:饛~:ê©«¾ºC° À$M"@ü V€@ªÐ>–ëÀò?ÀÎRï¿ÿ3{í(Á¢ CÂ3ÿîÉsÄÕÂ'¿ÎëÆs$½@4$<Þ-/PðP½íÓWO»@ØûÞ›õ¹Óž>ø9ÿòºAîŸ?¿C÷ P‘*b€IÀË €û\€ªpQÂNÿ Ý: (A €ª@àëD¼P„„GaQ€^d@÷(¼ °‚é³È: ÐÁ8ŒÞ:»‹Œj» €*R¸Bޏ†ÿ"ûj¸Ã‹ A´¢—D!f‚9d ÄI(‘…ñâ Ü9±÷cÞYR€%NwÿÀVQ;Æñzü‰iÀ1Ó[¡ÔàA7ÎQ S´ˆÿ"ÆMÐu’ÔÞDT8Å "†¶Ó]FŠØ@~l'xv|äD"yA©ÝÏ’ĤDÿ"½SNð“N´HžEvoŽ´TH.i»*Úz>ì¤'•~0ЗD‰€ÿEЕ%‘&ˆLTfÄ™®¬#!‚GŽXx¯«c÷†˜‘)‚p}äåö €lî2œw”Š+ (MX ó‰êœŠí‰À@Âs{,L¡@y¢Å¨Ðœø2Íøfμ`åºéDV³˜)à:RQhJí›Îç -bÍ â®ŸÁäÈ…7HU¼ó–q&ûþC…³ÕÏóp;‹z/o¡©@ô8TÝ:ΔÆóoP†ªGªø)Ô»Ùï œà—¶0½8cœ†2 œÿe»¬;1ŠS¬â³¸Å.~1Œc,ãÓ¸Æ6¾1Žs¬ãó¸Ç>þ1ƒ,ä!¹ÈF>rçTØ~"¹ÉN~òC`+I¹B¹ÊV>²”/(Øs¦3—åëÿ2Vþù‘ËJ¶(óœ9;®2ÔªW~3œURAڭЂє&îæ¹Ü5J3xôôaéÙÌlâ¹€“¨*u{¸@pž=3¤#½@ëÙ‚Ù§¥Ç‰gUÐtžð`jX£ Õ F°Ï¿§H}X@ß­QÒ®~uB² UêN™†Ndê<ñXé5Úðxlµ–/¸Àꙕfµ‰a­l8Ë:ÓŽ´´Ã:H^:xë¨ ó šÓÎÓÿž–& ¥ <†‚tÙæŽt³½­gÚÜҴ蟯]iöpÝj´ TcGi–ûÜþ¾ò:‘¾Þ÷¥Ž0ž)­XpÆa»¬Ð›£„c Ä¿¿ƒÅÿ­ñ;¤×ÿ8Èu¢»G‡¼ä&?9ÊS®ò•³¼å.9Ìc.ó™Ó¼æ6¿9Îs®óó¼ç>ÿ9Ѓ.ô¡½èF?:Ò“®ô¥3½éN:Ô£.õ©S½êV¿:Ö³®õ­ï„>^ÿ:ØÃ.ö±“½ìf?»y  öµ³½ín;Üã.÷¹Ó½îv¿;Þç‹‘,d C™¼P’÷Á¾ð†?<âß¾wnÉlf0ã{ß3’øÉS¾ò–ÿÏûâßxpù`#ÈåC/úÑO>óœ‡üãÿwÀ„ô®=ìãnúŽmžö«ï¼çEûÝóžô³gYäUŸ{ܧì"½?>òÿ{š ŸøüŠYí!’üéSÿîËþéQ{ío_òÕÿ>øÛ~ýÔk>úØ·}÷þõüæ'ù›/|ù«ŸýöG¾ûÓŸýùžõ+Éý`ïåýí_üŸ& D Â" ú`öŸÿýC^àè= :ßóq Eüˆîa Vžv ÷I ðÁŸJß¶ â•àÿAŸþM  žàA¸  ~`ºXLŽÊ¿D!Þí Âü ~ÿ^ Êàzà2!¦àû© Î ò`VF¾ha>!ÖàF!D˜–¡ž!¦¡®!¶¡¾!Æ¡Î!Ö!Ž:a*¡@Ø¡þ! ¢ "!Ê!rŠžßöa!6¢#>"$F¢bþFÅø HH¢&n"'vb Râò"„'–¢)žâ)‚bîá‚¡E ",Æ¢,¢*^"Úâ-¢Ä,î"/ö"Ö"z¡ 6aFø¢1ã.#ê .Z¢."#4Fc'*c+bá*²âGH£6n£#R£bâ7‚#Gp#9–£zã0.a:ªc1š£;¾c¢#ÿ¹ÿâ"Z£JÀ#>æcÊcÒcZáê£@º#?® "2 ä@.ä6d=bã:Úã32$EB£Cþc"R!F’bEv¤1^$Bc?ú£Bz¤IÊ"H¤JjdH²ã<º¤A®ädKÂäCBäHÚäF’dMJä22c0âäK D¥Q%R&¥R.%S6¥S>%TF¥TN%UV¥U^%Vf¥Vn%WveS„W†¥XŽ%Y–¥Yž%Z¦¥Z2%X®¥[¾%\Æ¥\Î%]†e[Ö%^æ¥^î%_öåTÞ¥_¦`&a&W¦a&¦b.&cö%b6&dF¦dNfW>&e^&ff¦fZ¦fvÿ¦g~æ`r&hŽ&i–¦[Цi¦¦j®fV¢&k¾&lÆ&Rº¦lÖ¦m–&mÞ¦nîæeæ&oþ&p&¦o'qç^§q&§r¾%r.§s>çXò¤LÒ$KNgBZçuVçLRçBÝ‘õDÐ?Ç!bt­ò5Ïõ¢éÖ-¡¾Ù>¯Yî Û°h ¤W§V=صEçÏ ç§¹ÃEˆ˜1Ìš¼mº­SÿG$;ç¥Ç§Mï3yóåÐ[þ/¿ìôߌ‚#JÆP·OjÑôÆl´ÙÖ{ê… ^'Ñçƒ*÷ž„v©WÙe™e×_4âq' ?ˆ)&z ’(”{óÁGa^¾$]qä$¦™ Š0£?Üy‡?ÑC=7XbQ ¢È¢Š¦¸âN ’3c ˆøÁ9Û4¡Dºm#œ"—Á–Þc‘M–`‘6-iW‹™Yš IOb‹èHMÔy%9¤¡gãxùSn»8æPFž‰¤’ˆ&Êd‰ˆ‰š!F$Qˆ6ºåÉÈ8‹¤±ÆˆN—ãwá©G¦NI*º¦š;±)ЕÃ2IÿÁGbÚ’†â Â'hÇ…Ê€úyb™¥Y쩨ª4$b×ÐãGT#[!¶âÊÐ!gÓ“q?ù ¬¨„k*²ãÒt¨}%Ö3c|$ 9$Á„i 2Ž"g Q‰¶pëÓ§;rÊk¸¤–kž»hº‹èˆ5Ñ4q„H¨a†iœq†¬X`Á:þ¨ @уÍ5⬠Á &[(¹Æ"ÌÒŽýÈ"†$ ‚’gÆ~Ìv ¿!ÿ ™dAŘØlA5jË2l°¸S›D³OÌh†HžˆSN¦g€ÑŒp{X0KÑMeèµp×ɲ_Q¿œpÜT/L³:õ3Î5iÿÂ9[ ;‡ÈaA.h3U"m3ÄH~ë½M’ª„¹\pÌU“t5C¢‘£Æ‹`sG¾H`lhâoS‹7ŽŸÛÃ^n¨åPg^;ºCêS޾!¢F rt‘¯'xñÆñ¬Î”Úå° ûhuÃŒùì¶Ã]¡zðØ2 ,‰D9åß>—QjøñÆ}„É;¶¨bÌ5}uÜ6Ùd³oâ\ƒ gJËØ´PO³Þô¨7À¹ÑMsÓ‡%,P 6ONäù[ºðj¢sv#uX@ ç{ÃçÑpg7ÙP×Ò†c2”©L~’ÌoGÀÚÐ%ê¡…ÙŒñ0hB²ÁÆvÿ¢A ¼<)ðA0@ KLâ‰pÅ$ä0~ȃDHáŽä!Ý‚qåÓ>ÀÉÑŽ†ÒK£g6ñC8¨àWŒ ŽYbPðþCJŒa8˜ãp¤› v‡dò D$ì¸Jy?‘›Ôª'CJVw°ñX<3~!Fˆ„̆-,@ø€G¿êãÉ@2Pòðw°$ D.²‘ˆxdâ"=Z²5g Ý@£ÃY¨Cç #ĨhøB»Žtc I@QS´W³~DŒ–]ŒF!À(FF’1†¨™¡0×(ÉIó3ïЄÇ$=­!~ ©€ºSÿm0 X Ax¾Z±;¡Ô u“ÂDü!qøC— Ùž^ºó†õeÙ8xØbrøCœóÂ7"B}H ÄóŽöíá]5‚ÁP~ÐÏ~üˆ'†J€ìœ±C£F1ÚN‹f”£êiThÆ!Ctg#"9œTE¢„sƒÔJ1×1JMÀ¨Ð“;‹*Ö¡ŽÕj%jUhÈ!¯ÝPC<Â!Çc¦Ñ‡j0¥òpF°~âF†Ìâc`EŽQKX¡õ°¦Ù–:ËØÆ:ö±Œ5†ö°X<ÁÍh”;(c~8†ˆ0„#AUÇ-ZÑŠ[¤–±c¬%*`‹×ÿÚö± ‹nwËÛÞúö·À A†¤BFÄ+ —Ɇ•®j‚ÿ4-Pù“QzŒ_ âÇV»úUŠ6¤°ë<«aÉZV¤ª§Øñà šU‰¡}`BƒÈÐjÂ^=È/ëök(ï°D'ª`JüÔ» /bÁkFu6øzWSG8©aÚ$(‚F0‚ `M B G˜(CF‰8~äªJnˆ"a¯Ä ª‚É;^_r£ÊÚ\cÀÓ„"!úHD†uÕá@â¾÷ÓÇ8ÑQ–L±Pæ«]V´¼4ž±Óé`l®›ü¨‡5äE CL ŠÐ“dÀ$ aÿJÌÚ  v¼ã¯›Èg6¨Õ ‰'Jà3‚³|c¢n˜ÁìÈ—ECx¹¨‡Åì{¨Ao7«=ñO\W çn¬ªl(¹Ü’ŒŒcBs¹Õ‡¦‹Žr AüA ŸƒR0†$Ä@ ôˆ+CGYÈâ ÍÒ£ÁÍ)÷J;º_ŒÃZc,»Ñ¿Ä6&‹BÛœ€@Á#Ö †EÔz×H÷Ѽ8¨Âð CÓŬn(̺9µ~šê¢0Ú6t¬=’èBã)ØØ“¦JŠ Å%æÃ86*ÃŒI¼¡ `Ã!rù #ôÞa®’¤½Mnkæ ÿ¬µWÎr-·Üå$Š>aÏt§r+J=®Áˆ 3ŽbLĉñÐ7ÄÁQÔ6–Ýo›ò&œÒŠÒ´”_¹Ú ¹úA(W¹l¼àY 6¸&Fàú%¼«Öà ³ñƒãðD%V&ê*…E¹?¾¡™o÷å«RùÖ&^˜c]$KaDžüvî5 sD)Ç8äªüñü˜9q6„Áï`®Çžû”›F](¯ °y øµÔåïƒ{I¼þu£>1kHÏé…sE•‘=òÖ³D8Âh0Ÿ—Ùñ/‡3êè»à øá&8!„7ë‚[ö¢`‡{2Ãÿ@ï›÷í!&ÛZ |fë6«¡õX‡ÊÐ8Âk°úüêwz¦ãð3 ³q 63o°G}®g}"{µkÜ'kDñ&[“{Ìê4‰1U>£f‚à;i€;:p¹g¶ðà×{&(MW±4m"~°Ô†€®Çz±×eWx8Ø}þÆs\BdF³á;y‚1Œ z"Ƴ=@ `ŒÀ| ±EPÇREU—á#¼sƒ¬¸ <؃7$ó ב'kp ô’p 1`’P q€0Ðg€1k°5º×|„TKÌÆ«7Gi·j·}‡ÿ7†>‰kX"ã‹°xü€»†1f “°3£pt(bžá! QrK‘ˆƒyŒøj÷€ ‹¨h4C6@wRŸ#°Cn/€):€eÐà·k7ç{Z˜%\8S¥UFxmj舒¨}9V•§?äçT·4L¥)¹gù¢h€(Ð+ lÐ'¥ä&º”PQ'vÒb²Š+4oÔ‹‘X‡†iøþ¶vUõ{æg…{BæxeðlÀ@lP‚0ƒ€k‚0oÍ(ËP0&uˆO®(†)‹³׈¶H„?WN·ˆ˜¡xˆð\ÿpi] >a0 ¶ bPOjÀð[ ?AS:rjÓD]‚’©Ö¸’T9‘x8§VN“…Ó†À°z‚âƒlp]–PiP@@‘–@ ˆ³A>qjò-Óñ-‰•ÁuÌA{¹mAñ8úQ04KGÀÖ0–Ÿs nà~ðÚoÔÀ[cð%p à1´°Aâa%yI2ÅÁ—³ç€µ8•.™’17l“‹æä4ÑVò Ž0>ư]`PÿbðŠp>” ÝñNÉD%¥jRÙ—*9˜´˜­ „*†"¦ ¨H}p< ÿ >.Àr° ¶Àù P@»à)@ÀÞ@SP'º’¼1(¯(«ÉšUIÕù’2—?çG$Îp¯2Ó`Z=ð0%€@°@O&  `ÐW RP'Ô€V¢=2ãð]ÙŸ©9 ®ùƒ/ £Ø9$·` Àp§Ö> ¥ Á0J– ü° P:ࡡО¬°OOçŒ !KƒtÓ6}Öé—õA£3Ê’dX"­d˜PRà£ÔðR L€ Z0¤¾0J` ñWë ³  P[Þ¤ˆtˆü#Œp2‰˜-_zþÿ)£Vy•¡X·5©Œu ` ê  ¾ÐU ã7ÐÐpÿÿ  ±°X°RÐ ŒE„Z™JÁ°X … ‹… “E©¯•[ÁU¬Æz¬Èš¬¾e}4³@ 1>°ï€ O`:  ð.€ ª ¬j ¸`¤YÒ R [hR¤ˆYªƒŽ* `ú¨*¯æÅÙ”ì&HCïp©ì·p@0S>jj.À`¸àÿâú«`` ™pÑ`Hë AWÒo²¡Ç&9.J¯\ú€Ù²Ùw¯ ¤–¾(#é›ÿp]` 41<°¥Ð RÀ\Ф¶±;±Ÿ`:s ¾° ê`UÐÛýgŠ1“9§¨*;y†]ëµÛU>ð”Ï©xj ³Ð\$š!Ÿàlà€ªáz´¬º ¸ òÔ ð  —@¾p —€ÑuJÆd‵Y«¥¡¥. ¶,+¹“›AÑWü>ðSz nC#€:…°/ Pw‹·@¡0 ·ÀJ@º€DÀ†2&¢µ9X}Øw»¸»².B¹Y”ïÀ¯Ïy’E% ëðê±ü ±0"@R ¶` § »p 9»> E0>ªGc¤¾a¶Oö`µ‹Ã7¾•KÃa;k aÄ«úÌð  ÐÁ@B ”€¯ d ÁU°30Dÿð3@Σ¾þ{÷ Æ;hÀüŸ‹Ê¨j|7°AÇÿà“°ªð ΀˜À¾ÐSÜÒ ­ÔD3pjIp3€¿Á8.”µÜ‘jþ`Ý€Éä Ì5ŒÀoL˜ü OG|c ï€ â*¾ð±Rëc®ÜDQ¦u=  üðaK3›4©—ÿ`Ü ÌºëÆ ÈÎíl̲Ûi; ¸À -°Ã0¢ü!à&Ð( ÂðѰp …\UP3I: r¸^#°øÔ‚ÒÖË¿¯ëlÉjÃm ϰ‘ ´  %¶Cƒ³êP|ÈÆ ÎÈ>ÿ*)ðL-F>zR{_œÈE@ÆPno÷ajñ#2E ç`jáÑ ©P]Ì ]£Óa]@4Eñ“ ñ04gƒ …P¢° «0 A€%M«Ó>pÆYA0E0×tÔØ‘üÐ0P¢4Öq¢v"&l,Øî<ÒïTÒ‚³­ ‡S­ ±@É“SF¬Ð@Y…7> AËP > ãc^\F@ L @ö¶>3HÂö%õóÔY ¯YÕzÉSMÕ11$:„8h‹ÍE!½²`SÎ@s÷Pñ+„0S¾ Gø85ж\ƒ ¦ ƒš¼w#•}?ñ×ÿ!cì¥ÁlÛ·Ã9XêðØE t V `/˜OâbU@ ú–ÈJa£MÚØ° €Š~ˆKø}7¢ÔÙËÔNÇÞk†…]Éâ=ÌÄlÞÓqb² ‹ÝØ¿£:º ¿p¸C!Êà–`  ­>]×E`Ú¨ý'Ø!|'ÉíË .Ã]GÛ™ØþàÞ{g‰ X­Õ?‘¯U< ›€)p ÓE†yð &V  Òдê@¶‘ `%tmtËJ0 Ó€Ã6y#"æŒÎAÙ¯÷½ƒMØ:.áê¶ï@ÁœÒ†aÒ(1k± À `iÝò€ÿy>c` IÔÓX" "l ñ@ ú–3\\+ÆcŒ×‰ºËa–6žuQ±ÆpÕ¹‹Û㛕–о³Ð°-#¶fc zª§Ð ›}¸„pð Ïàlð~,U W’®R'¶~<¦¥â}„ˆo»ÑÔÛná©þÑÛŽêR ñð¾Ýžzî]n¤Cz§Q{%ˆ ¡ lÀu pø‰½ü´#º°ÙVr9  ”®MžGߺ‘Æ×ÞàÚþíä£ ïðŠö¾“Mî§)çnéîAUhwðRΕ ¤PpônïX2eM×Wâcoà õ âmUS4ÿÀ ¸*°ÞãNç_Û;Oìk·Ðê ëåÅT¿{z –@[Ïðnð ›—ªP@¶!«s)…ûÅ;PÓàÅG@\D¥`íáæWÞÝþÎ9Ïí84ÁÜåî]ñä1¼U?¬ðU{ðŽB –P €5PU0ȹ° '~” ×ÝìcGPÉðªxöZšöÄÚ8Îö ÒnعÍBä{9;l Ao  Ÿ9 ÙP* ¢Ù µ è)àJäü` ‘Ð5à* AÀâF ;õàÑo„íxúš¬óýV}ÌA,O¶ÿ°… ºÑ  ÍÛðJp ¯áËîb>Ð Xpj€Z': C@u°Câ@¬ƒßüþã÷î@ÿ-|·ÐáCˆ%Bl8ÑâEŠ5Z¬¸Ñ£ÃŽ?†yáI”)UòÛ–-ض•'×Y˜…Ð…hòøÍªå’%,´â ”ZiY Z¨J”PN‡ŽlÑš\ÍvRÝʇDi0$É’ѦåÈvãZ·ãb„›Ö @uyõîåÛwo0"‰ó»×VKz-@ ¢L®JA)H™R¡•:"W*hÊ«©%D„)R$ˆ¯¼Ä®ªSækÂ}š¥ÿ]ÛömܹuïæÝÛ÷oàÁ…'Ž;lLä'·EË©Œ9̘ð,Y°µn–LÌåÉ‹†¥Ù;£(œºBÉB.¹,\QÄGÒR©É£¦ƒG²p{ÞìAùUåq~"‹,…Æ*(À¹&ª+ÁœËÁ¸ ŒÁˆ’³Ÿ¬tR‡»®›É5y'›+¤âй›" LˆÄ–“lñ¡‡z€*ЊP¢‰&Þ@ã ýP„„üK‰"³!‡:HI ŠR" ÙªÒ®)#ºò£ “ËŸ £é¹wl™Å–xø‘e6¡zšp"RÜF"€˜e"j˜!ˆtä4Ì0ÔÐÿ4ÆÁ ¬‡hƒ’É&|2K))ÉÒJ-ݲ¤M7ê¹åš{îSli@[l‘ YŠÆ—힣†¹hv¤Æ—f*W_¨1†5 EÔ 5®aDEŒÔ@(!«!±¦ìt$L¬vZ°5‰Ô•²Š¦©1?µ„ÕR°D ¬”ˆ»&˜Ë†š&v$íx•˜a—qŒ0B4úMƒ_3AÄD’= À„š=NÊh£ÔV£‡Õº¶Zk)å6¦–^º˜Ÿq[5õ\ £Q—î–ˆ¦ॆˆˆˆ7ˆðÕW3ÒPãßB©'DAù`žB|Qéc H€žp>¼! ®xW0æqoµoŒ ¡Óv·l!Sog¤P 7¸ÂTÉ“t€w‰^<—õx×6¶¯"á  LN‚ÈA¼á'(ÞðÑø  M)aòx9OG6Œoñ»>aÈÏ£ŽÎ¼P(™ƒ š¬ãwš€Ç¢NBÊË)!›”cN!Á‡ATãf]€Ä1øƒ+˜"Ì›väÁHI¦T˜‚iK)¹Ï®²e¦4µÐ—H ¡ ä:ëð)"ë¯vÕjGbÂ(!¨4@a ùè&auЬÿè"Aj3Gåî«`5&KÃÿ±¶µ¬=ú†Ž”²&ŇvmÓ¤î†u’Œepƒs;ÖÝÆ½”ãG<Ìd ¡™÷€M(¨éѪŽú@ÄaÔ@üÁ«¸E;ß™ËwÕ£¯ÍAIÏú9¸¶½­‚KR^ó&Ǧ¥Œ‰Ô²¡Óôÿ€FW°`( ¸ zØ’QfÄ'Îv ˆÆ°}-lgËãƒÙ«âu #¬³r¨È'ñ쮄­@›ða6ÈE4”ˆ¸%ܨáNDzÖ‹ô”m—+æ1ë8̈kyÏœ’4×1j'‘J"aÐ4AÎtÞ,=ŽJˆh B à)¿•“uÜbpVB7ºÑËÛDÊhÞõîw=^F§ÅÌŸ2t 'ç¡F5èf €Àm£}PC 5T#dó †/q@¡ÐèbWîÂÝ0æ/!¸uì­qIGTÄá(B¢Qš"øiW T’…ðîô€Ä ¢‘­ÌÊÿ‘P@¤ Èâ ݈ÆmðÉÕ­þØI]HæFë–[ÐLŽÔä«„#”& I9 žP£H4#^„ D¼Èa©Dá  Äª¯½|tƒ*¶¡8CP2—hÕsÇæ®¸Å¹”n ‰¸ÎCrAˆ#Ø §ÐEª` ©ˆÉåü€ù.¢ =o¢_Ç‚«ÛÇó·hY¥" zÏçgôa’;A»Nºd]þ®Ò,G Jn‰ÊC¡jE¨õ@r€à'(โö‚ðjz:IBy[ûÑAâv+Á’ÏÖ“bóyЇ^ô ‡ó`‚QšÀ”FW —Â#ˆà‹j†êJ0®P%Xÿ@$€Øåâ_øÃ'~ñ|àÜŽÞ¡‘âøZA LP} ‚@ K·ŽµŠ†+̹ H [ì² nˆ©h?®Í£*Ï)Íç3þ¡{Ý=:­A=T®fÐ+X‡Îª4&Pl ‡¦K' ÀZ>0R‹“È0ÌCk ey;Î˼ù#«;É’¦S‚Üó€Š@ ’ñ¬#Húx+‚èZ§H|8˜à¹÷»”‰‹$˃–‰– 7¢[°$Ô5¤³?xšœhÈ=L`™€hà°“yEH&˜q9Ê!‚Ò Êú‡s †ØRˆˆËÿIš'¶“”¬R’#\¡¼¸\“8A©¡*Оvx7aó, "(b„hÈ‚l( m$»/"ãàÁ4T;`2 ”50²Ä…Ù¼%ôÀ:<ºT€?T‚èÀ*BdFˆ+‚&¨Ú+‚Êq—E‚îò²# ‰ÿ`ÂLT– ¤‹$ÆbœˆúK:#s y؆ÆÃaèçQ6-$9%0„*1,Ð%Ø©1GéÅø™C÷94_’CJD—úDøK£Œ,Ž“Së R'ðéKŒ¨$胴E„//ê2ೈ÷ш:’ TÈ_4Æ;´ÃN|ÃP„#ÿ‚ʆÃñ³Çˆ‚Ø$øÇkXÏ‚·#¹„Žw+ n  ô² IŠû9”J ¡s–»Ø.:ŒÈwtGOi²‘ù©XªjHmØ3r ¥‡ŠX*_ˆ(†Ò‘ûênð"‡[;&„Tà ‹¼¹I±|’oÛI_J´vôI‡¬Hâ‰4„'æ ©‡¶I%؆;»†Dʆ“„ÅÒ˜ÅZ¼ nhÙI,®D"äˆI KÓ²“53K²Ì±a”È¡›HPŒG‹¤¬9Rwy·#°KDÀK½D¾\9¨LDLëà†hHÌ$iCÛñJ‰Ð*H‰‰ÃJÇÿt\Ã/kCs¦µäIHFâÊ“Ð@²h8ʤ\Ê‚!¼Ï LjÌl˜ÊÒLD%¸Ê¬Ì.«¼‰»™ÔI÷‘´c’Þ\Çl˜â´'äŒ;xœ)æû”‹4€C¢”‰(%@‚ÕlÁ댦ƒ7•„·–$´öCÈ¡a¡"¤ “p”GÒÄ]¼ÌúÏḴãäÌäJPº/˜ð¸Ú°Y¡l¸†k ’³j8²©Ð;ék‚‘'Û¼Mˆ NÉ›L±1.SÇ4¤¼­òEšäÀùäDtsK Ä&w‰ §$Ã®È jãÃõKÌ×BBöìQýÑÃjÏš Nt<Ç¢KRù£˜¹«–ÿfÙÁs86mÓ“²‡“â:í¥­1…4ÒeÉIܬXKO7ŒC!´µü¡5¹CS¶SSÁÓ…`Ÿ±€TÇ”<¢ Æe±Ð§i?"ÒKåÔbZÒ ÜÌUTÍ,7 ¡Í–t§P 5ÄаÔ`ÒÀ+}Õ$9BYuC•¢ŸWOúdKRýÔQM m€†g˜Yƒ’ßDFÆ$Îõ«@ ÄMÙrLÍLCuЙ,Ï EËNN_åÖ~zwh‡Ž0È 9Kfeul–#…LÛ|8à[×µ“#ÝÍ»èRS Ö˜ôVUR.ËÉo“Ux•^µPZÍIóL|m ú|J©†=7ÿ}…ÐmUBQ½ŠXÉ,BOµ×‰uP1ª±‚8?Ú®,×}½RœR U!v¬ØHâUŠÍW%4ÃêXÜ´ÕimËYU—]‰…I㤒ىXmAÌ«5ÁTREÔdÚ X°d–miš­×1ªÕíQ‹Y-±Ì‚ÅÚ‚õX·cZ‡´Ú_½Ö‡ÃZVseбÍÀlu;»‰<›ìÙ¢m´ÃÖPT­ÝD´õÙ‹ÅØ Y`¥! MÖFAÜyjLl-NG:×Å=0-¥É¾Ð=¥Ô•7ã׉Ô*tÓÝÕ¹NÓ%˜¥À½×©ÛË}\ØUÙ–ÝT»Á]ÛREÆyÐÿ•7Ÿ›Û?Ý׿}šBU¯µÝ³DO‡ýSZ BÚKÎÝDÄJTNA>ìÍ^íÝ^îí^ïýÞã³8ѽL]M]‘]ÝæÅVô•Ïœ7‰U؇ãSgUÛeV³½Ý/²^ÝMß=u\¶»„TÚ3àÛÕYÊö›ÜÛõÅi­×"ýɈ³If×’E˜ýå_Ÿ­_t«ÐeCÕ-ࢠÕ-}ɉ…Þ u?e]Üáüàó}˜v ฽`ÍX›]´2#†ÐM„Ù &Û0ýÊÖá†àX5ØÖ½[^a¶á%¶<ƒÜ…áZ…¥gq×ámÜ b&vbBõáõÝ$þßšbµl´,†âÿ>ý¶Ûã*öXê [Óâ1þÉN Þö½ã0ã2nâ2 |$NV†¥Ú†Už b%&ㇵڮÄa$Îc¨ýV ^`ó„ÖÑaÆ]“Þm¡eM\ûõ×aêRŽaH>Æ¢Ud åiM` Ô®²°±²D×emÐDîܶ |õ\ÆÍcPÞbE6ܲ44¿eÏV…B¦®­àZõ´L9¦LÐÕ–Žf_ö`>îc™MYNׯœL@îÝ U’Éäe ÅÚ3îˆÑmÚÅ`.ÎÕkžd`žç=®ÌŠèfüýfuÎaq†ârfæsg~®›[¦Þâ¤æv®5zÖf™eèÚUá|6æÿ _7F?'ÙÄgiÕg¶Ý‚–æƒöcõ³ækŽd3Þ!õQfÀZ†Û ´#…å•&e0¶_[mV&´ Y4%é~Í唯¼™þ%æ=Y‰¥à C_6ÖÛŽ\^¾áYS¾xæé†æ9vj¶ØätÝ—M[ÉÝùiTvç…¦ê¶cƒj i‰Kd:g_–êlFÒž¾Ú«žY´6Ø­¦ëêÕ·>eI–çªvh 3ß‘Ï÷Íkºnj»U°þëTk¹^ä¶¼ÉÀ=ÜÑuê‹VÚK|éÞé°fß©Žlš6GŶ¶Sê²Öãä]Ú˜Œglf²ìÀþa“6ãâcK¾bÐvíÿŽ–íÙí`îëÇNm4žgˆuÏávm¸†mOLBákâÖmÙ>îA…nåþìßëÚ¦mÀ.ëÛ®g÷ RŸæí׆là6ïÝ-Çø,ߢ±˜Ë\mÓé·ÆnÒeîônmQþWjïѦ`œ&ïìíóþíæÖîîθ@þÐûííÆ.éípð&ðû¶méÖkxWðÍp ßpïpÿ^úfðØqpß¶íÎ.ìfQh ïIOîñeJ.ÜÀeq'ñßñð á…-\úq¿~q×ñGr'âˆój/ï_ò¸îñ)Oò³Þí*OâåFo)·o+ÿr\½'ò-òÿü6ó3Ïq–jrýmp?p%ïU#Çò¶ýÁ1ð2Ws*çò.çó!¯o/—á<—ñ=GóñöóCGtÝô8OsB/t=ó>çmFçqIwôGŸôH¿ôý­tHÏt9sëõP'ó'rNÛ@ÇtKOõµõtW‡óV×tROtCõSÿå[—õYgõO¯õEÏu(ßôRÏòbWtU§ta×c`ð^·õfwö0†uZothö#ökŸoÇukOö]Ïö_ÿv\ïv:wo'w^õu×òe§v_wygwqŸöwö;Göv¯vnŸós'öx§÷Çözwwspcx~Ÿ÷…gxA¿÷ÿƒ—om—ö†ø6ŸxŠ?vtOw‡Wx¿îˆ—x‹t}/øøN‡x'ùGøU÷x/ýp™Ÿyš¯y›_|¿øŽßvŒ7y˜çy{yT¯ø“'øW÷}¿`xÿùŒgú¦z¢/ú~uŽy‘·ú¡—úžWÔ¥‡z­Çú¬wzŸ{®Wyªwù—w£?ú©÷q°öµGû–gy”v¡×õºz¯'{¶ßzϾ{¸Gúª{füÁxÀ/|¿—û¹¿ú¯'ü´×{µ7|ÆÏû¤ß{¾×yÈïzÉïü±Ÿ|ÊÏyÑ_yº}Ç|Ä'ýÓÇ|Ð_üÒwý×/ò³¯|ÓûÌýÍòÿÕoýçý¨¿ýÝ÷üÏ/wÕ·}ßG}äg}á?|¥7{·O~å¿üã‡~âŸ}Üÿýé~ã_þ¾úâÇû¸~î¿~êÀÏ÷Æß~óWÿá_ëgÿöæ×~ð¯}øÿûï|Ø¿ÿîÇ~÷ˆß ,hð „ 24H°!D…#RtXñ⿉!jÜØ°£G‰!9Ž$Yò¤I”AªØrå˃,[ÎDYóäMœ1wfäéÒgOŸ9G% ´¨G¤IÒ<ÊT)F¨¥Nu*ô)S•T)nåj•g׈a?~›ÕfÙc®]ØÖmÚ—oEªtd÷.Þ¼z÷òíë÷/àÀ‚.lÿø0âÄŠ3nìècŸ‘%C®l™çä™5Ÿ=¹ùågЗ9Žº.ÓÓ)ªöœº´hØ-[—¤]{õHÛ!uï–Ú7JÞ…ÇRPäÉ—ûTÞœ9OçÑS¯ný:öìÚ·sïîý;øê«hK€€Xÿø0 åùô'‘çW2ÖªíóÿOÀþFüLÖÞÿ¨ƒžzXPyµGœAø Äž‘ù F2Hž@Ê]è`…9‚AZXC' 0Ñ*“°Š#œÄÏŒ2þCž:$Ž1ÀÏ*x$D¦d,¼Óc,In4I8hd{ÿ0‰ŒRÿ¤Cäȵ§Nï]Äž’‘÷N«@)%FTZùÏ™nÙ%F€æŸ>JyfšÕ¦8‚æ$sڨСt¾ÀXŽü÷$ŽiZÒ¤9)@~zÄæcp:¨©¥Zz‘‹n"‡ãynþHQ”b€‘®öwgE¨®7ä;ï°×ª®źãc'Öºã­=ê²8Ú7Fðç䣕V*ê« nkŸŸDöaHaÀ‹>;񼯯«¯é>öì$û]Jջ롗¯ƒjb¤«‘¨cªª™›òŽÊ¦=Û亱Œ§ÀS¥Iê¥=ô¨Â CÉñ?34(Qžÿ+ÂwÎèn«!5©”ô‚¬à½wæKráBô®Œ–^¬­Gb¶÷©{Ñ“ÚW)Ï>7ô¬ŸlÍÓ[î±Ç-MÑ*ìÚÇ3n}©Ôý‰Ýã;ôµjrºowýíHWsêHM?êÞÂZzôl=‹îEbº(/Û¿â̰§•FÀß.ÀàÑB„€}é¤â霟 >¾Ð碯¦7{Ôc¾6¢GæX¬Ë¨N,J†ž÷’æÙã²QMÞ”ҹQ²;𙦋—¬­¼£¹›é=/¼êáè­œŠ>Ÿ¤Œ–7$@¹z‹ó_¾·E æ‚%±ŸyÊðUªÜ*}ÿDþ„ó eÌQñ‡×{ÞQ©®lfÒÖ|§œc%ˆ!yÖ46hMxQ—@ŠL/ïÀ r2¨Þ¥ ïð^xR¨Â²°….|! c(ÃÒ°†6¼!s¨Ãò°‡>ü!ƒ(Ä!±ˆ*‰ÒC.fÄ%2‘†³säš(Å)²ð‰;Š¢‹ÔD€|°=r·È¢dñH`~FŸ»¥Li£"{(#à­ OòZ—¥¦=J­‹=+“Œf#uá±I“›)E&^ù¨I {c#‰Ã@êròº”%#†ÇU°a¤”ŒòS¶=ªÂkXÍÊÔ¤ôPJ’®¢ÿËv=(jéNak¦* J1u¯•WܯÈ&~Ä«a¬Dá+“éÄ2Ñò’Z²d«¶ˆ´]’=êå'õ¨†‘Ñ“ë²RÙ‹™)³œ“dæ/ɤÇ÷øò›ëà¯YI©³aäfÙÞCɑӜþœ¡: ‰¨RÿKбþTP…†’ný1è˜Þ î¯Rêù $ÿ©Q"òi£ý(CÆ“Q’´¤&=)JSªÒ•²´¥.})Lc*Ó™Ò´¦6½)NsªÓò´§>ý)Pƒ*Ô¡µ¨F=*R“ªÔ¥2µ©N}*T£*Õ©RµªV½ªZŠ¥Õ­rµ«^ý*XÃ*Ö±’µ¬f=+ZÓªÿÖµ²µ­n}+\ßQ€¹Òµ®v½+^óª×½òµ¯~ý+]e¡“«Ä¥)„=ìI«ØÅ2¶±Ž ì`ÍRX­L–²*y,f3«YÆ T•E bc2—„Ìe³¦=-jçÚY£„V´Ÿõìk+’ÚÙÒ–³‘U VZkXÝz¤¶¾ý­^WûÀزV²Æ=nI€«Üå w)¼µ,rå’[”,·º¾mîFF+“éâö¹ ¥®uËZìF…¸Ãõ.lÑ+[ñ²W³ä­Šz‹ÛÝèJ÷²í½¯cß[íZļÙõïí‹ßV¿^‰ïyé ]o„Àö«Åàò"8Ànȃ3ÜÛºvÂûõð‡¬áÿ«–Ãõ½0|üÝÄ’¸ÅNÉ|UœÞÓx$-v±‰w+cùvÅ ¹1‰_L‡xÇ 6rvøkBîö¸Æ'vò‚¡ì%ÿ„ȶò•‘la-7Ä ^þ2˜Ã,æ1“¹Ìf>3šÓ¬æ5³¹Íh“ŸÜd)cÄÍv¾3žó¬ç=»Î Î2sì>ºÐ†>4¢ýŒå!s™Â(A4¤#-éI‡YÑ.r g\JsºÓž¶³¥3}ä9“:$Ÿ>5ªSýåP—:ÊrnõFT-ëYKšÕ¯Ö1¬W¼iZóº×z¶5®oíjaÇÚׯ>¶š=ìeë:×A6´£-fe7;ØÖ¾v±¥­mdS[ÿÐÕfö·³½íqóºÛš&¶·Ã]gr³{Öææ1ºÏ»Þ©~÷¨ço}GÄÞþö4¾{é/Ú ÿ>ø¤¾egÛßA8Ägl§»âôŽ8Æù¬pG‹Zà7•ƒRp¸Œœä‡qDZò‹<åwyŠaó’¡æ6¿9Îs®óó¼ç>ÿ9Ѓ.ô¡½èF?:Ò“®ô¥3ÝL:Ô£.õ©S½êV¿úÔŽõ­s½ë^ÿ:ØÃ>t­‹½ìf?;ÚÓ®ö"}ín;Üã.w·}îv¿;ÞóNõºë½ï~ÿ;àqÎ÷À¾ð†Wûà¯øÅ3¾ê‰o<ä#/y¡?~ò–4¿¼å+ùÍsÞðšï<èC÷Ï‹¾ô¦GüéS¯ú·“~õ®}Öa/ûÙ_½õ´¿=î}n€!ù,³‡777}LWMv£Sz¥U~¬_~¨jf€c~œivœrppu˜wy›}r’yzœi¥Z¬j‚Ÿf¡c†®h hƒªnŠ©b‡±i‹²z„¤zˆ«s‘µy”´y–¹}™»¬_)¸e,»n;ŽNP‡bq—yi¥[]«_j¼\b¢l½cnÔt2Øw3ËVUÍ[_É_eÃaiËdeÙeiÞhfÛnqÓwvÜssÚxwÛz|äŽjƒƒy•†{˜”k‚nˆ”tŒœqˆ˜xŽ¥}º~‹·|È„[ʈaß“fÕ£v〇„„‡š–Œ‡™™™®ƒ”§ƒœº‰ž·ŸŒ¡–›£›±… ¿Œ¡·¢¸’¥¼”¨¾˜¤°¤‡›®ˆ•¦™‘©—•±›½…º£¤¤¤ª£°¦±¾¯²¸¹¨¨µ¹¼¸¸¸‡¢À”©ÂŸ¬Á§·Ç ´É®½Î·ºÀ°¼Ë¸ÁεÃѽÇÓ¾ÉÕӌكՑ‘Ý’“ŤžÃµ©Í°°Ù¢¥Ù««ä‚ã㓔域㵛楥尰潽ÒÀ¶ÄÄÄÈÄÄÉÉÉÂÊÕÆÏÙÉÑÙÕÅÅÝÀÃÚÓÎÑÑÑÛÜÜÝßáäÅÅâÔÕéÐÐãââþþþÿ;$ªTI’– z$(à¡‘@pxx‰ š 0(°áË bmÀÇR%ÅIsÁƒ l U‚@@‚%KW,ÚÉá-;m˜@ÁRœXµéð¤OŸAzD‰` ÀQ0K:` 2EH} ¬¡ Àª¥#I6tèÀ! A4T-{TŠ9sÐt ¹eéZÊSqN+Šhf™ø($Hr/‚Á ãÆ–=ÙPeòC—1{á¡CC"H éš½yó„ •PW à(.xDA§ÆŒØ  c¶Ä%èà~“£ºðQ £ŽŒOÒ¸±ô!ÄB\¬R_2‘Å‹6X Sd… Ð-±hñâÅHm6@È‘B71C ~¼ETTÉ#g„F4üQ‰!“²GMÛ#ˆ òÈHüaGAìà@‚h[E“üñÕ !ù,ƒFl‡777PNcbZoz[qV}ªkuš}nŽyz‰xw˜g|¤u} Y‚®^…°~ƒŒzƒ•h†«fвm¶y‡¨rް“«z—¹›U% X&PYŠu~˜fxš~l˜{y¼^e¬|\ºM¹zV¨l{§yfºei·iv´|kºr|Ü|6ìz/êy8ñ}'ð|2ÂVZÜ[[Æ^eÖ]aÎc^Ê|OÉzVÜkOÚgV×wKÖxUÇdiÅksÆvgËrxØdgÕmpÞreÙwxæ^MãZWèfIåeXêyHèwWãgfåopæsfäyx†n‹‡uˆ…{˜–m„—v‹™~”¥m€©xЦ}¶y†Æ{„Õ}‚å€y˜…x¾‚I·‚W«ˆh¬ˆvªzµŒg±q»”o¹”t݃.Öƒ:ô…é…'æ‡5ó‰(òŠ4ò‘;É…GƇUË‘YÓ‰GØŽRÛ‘NÕ”XÍgÊœsÔ†gÛ€{×–hÚ’{Σ}ߣjاxë†Eë†Wç–Kè™Uð‹Cñ–GðœUè…iå‚|é˜fé—wí [ð [é¢fí«uî±|ð¦gð«pú±sˆ…††…•˜ˆ†›…šœ‘‹™““‰Š¦ˆ–¨ƒš¹—Š¢›–ªžœ²ˆ¡¼›¥¹¨€€§†™£’„¤™–º€Œºˆ”¸œ„¨Ž ©˜¦«ž°¶š¨¢ Ÿ¼£Ž¸§˜¨¨¨ª§·¦±¾¹©¦±¬¼¾²§¶·ºˆ¢À˜­Å±Ç¡­Ã¨¹Ë³¼É¹ÀȺÇÔȃˆÊ‹“ÇœƒÈ‘˜Ø†‡Ú‘ØšÔ•–Ä™£ÚŸ¢É¥ŽÆ¬–β—׬ƒÒ®Ö±Ó´—Ω©Ë«³Ë¹ªÊ¶¸Ø£¤Ö½§Û¸¹äƒƒæ–Šåš™ê¦‡å¤í¶‡ì¼“奥軧常ò­¬ñµµÄ»Å˸ÖÀ«Õ´ëÁêÆ¦é̵éмüÊ ñÀ¿ùÒ¬÷Ô³ÆÆÆÄÌÖËÒÙÝÁÃÞÏÑÛÛÜÛÞáÞàâåÄÄäÏÐç×ÈåÚØóÅÅøÚÅóרçßàåàÛþâËøèØåääïïðôééÿóèùùùÿÛ H° Áƒ†;Ô§Pµ„#JœHðŸÅ‹3jÄè/Ÿ>‹í6f¬§H£’äDf ©²¥K/cªôg®f¾û2öÓXÏÜÇ5cæ”IôâТD{žÓ§th¿rP¡Ú³ØÏܹ‹=¶<ŠTèË}`ÊKV‘¡y`Zö4ið²Aƒ†vŸÙºjå‘%‹n¯ß¿ûîÅ0>CŠÂV3„ ìܰҠÁq5D†ª+x³g¾~ &‹YÜ>|fÙî›[×íd°Ö ÉFT·pçÑ£o‹;¬8Ùf!Z†oŸ[¸r銕'N^qϺ{ÛmTºïà ñQ$.[#Iæfÿ[ŒÈ´tÝó²I»ϺØè`y»ß'Ov"<†Š$Ù^ÜŸ3žÎybÍ3ׯ¹Wó…8û CˆE ‚Í\ÿ)N"g¤QÛg·kó-(Ÿ{‹³Ï1E¡‡lØru"`o·‘¸Od 8Xu ÆV<|1Ä4• "#`R1íà–£r;JV"u5Ö<Á¡GЈÓGH q†!á R†”X@Knb‰˜Ü‡8b‰“–ûÌ“ˆPMCAdqFeÀ¡Š¤bÎÕ#XòXS 8t‚öc–xnÙ‡!‰R„ *ȇòX-n>Z zì‘ÿõ›lˆ=ç—‰@vºŒY†ü÷8ãpXFÌ,–‡±¸êj†»˜fÙÙiXèÌ#N8ÕœXâj,ꇷ(»Ù8™…U`¸r:mgâ ‘F"ÖÔ±&X †™ÀùºÐ–X´›Þ‰'>ãÖahü‡kvâÈmäñŽ¿Ëšålº“uboîЋ+‡hÇ·§Ž1†hðÑF{¬×Þ>êЂJ1Õ 8ÖmÙ\sM6 ƒS5zÍ œ­{µk°tîTb%jTŒßYÜî¡Ò²G<ü€`:|ñr}@KmXnx —´bZ¥—fº³´îÉ‚l1}t‘ :•YÿÓ4“XÐŽ\%äðˈÐT"I‡°" nƒ4?¬<ðÌEHfã€S«”t[Çè>‹™âæoÐF¶h%š0‘Ãý0I‘[ Iºi{ý–•ûÀ#HŠ<§–ŠõñhŒ¾[nÆæ·qÐ\C‹$•”Ïîö;¶gf dܸÞk¾/¼!Ä›»[®½Ù :p¼¬ª"u} /¸ärsU ã¨xš2w­f?’É4Á9Ït›O;2Á¨H˜@iÐÙ–"ó–y` HdÀ&¶—•­wo‰Ð÷Ò6—µ1ä oèƒyŠ·>wYç´ÐúpÙÈt†ÄÿŠˆº´Ãfy¨†y¾'_´p=ûÙ>&Ø/tŽ‚ ÇØgE(€ Ä[²Q›ÊpGf™¡_è5iìÅ}é˜^&Ü¡EãqQ:)Š8Èt iÔe1âHO4ö0ÍÌ͘TXF–X4ªŽëã :&IÉJZò’“,ò0I; Ì`ÆŒÀ:$#|0~àƒ! !˜DG-V±ŠZÄ’’Œ¢d%(@‹[úò’ñYš{ئˆ1Á4×øx 1 @è„®D•Ä2=F¹iAû€£éHðO:zÒN ’@F@ a{@Bþ°‚°@FJ¤Àæ¦j¾É/í¨'¢ ÿ…Id±›Á´!žÐ¡@i¸²ˆP„„¬ C€@ÃÔ¸é•k·°@¿üb ìà?Pät"8-Ê% AÂ5ðqˆ…Úè¡ Ä;†p(b¡xä>À¶Ñ½ÈIGê󿝔'jI„”  4° D0C8˜%›>¬!êh‡#5±¥kHƒŒŽ¡4ŒðU€2¨¤‘ǘ̩‚?̃Pî‚ Ðp-PÍCˆhC'¬ ‹¾(ð@h!Ñ5Œ°ÌB'tºM5Ñ4È+;g0ˆ°4È`A—`‹Z¨P<“‹ôÖórŠç°$ÝŒ803¤ŽÁFi@C"Ù?ÿØ6 G5Þ€ Z¸£2f‹PæÜÖ<Í…°òD¡a3¥yÆêÐáƒ.ÙDô–²f–!‰6¬¡ a(úÞ3ܰ<&OÞ1Д 4¢ϳ£@É‚E`жg˜¦È2j("¡™‡çá´aôá mx„Þó½l„v¹P””×»—Y)BUñê|Çb _-FŽEÚÙ Ã6Z-Yô G'(š¿õojLiöÑ ³è¥†Â,˶EÛ4ˆ˜3G8‰¡ù·„8Q5xáÆ#ž‡WÁJ–(Rx/ã fqlÙ¤á þ5“~çF_ÌGÖ2Õ!Ñ3¸,ÿjô{OIÁbãՙˀQ‹"D†4@Y,øÀÑ(ÛžŠ±PEÃ摎-ŒA hÒažùìʪ­FÎöaÆj|*¸ÍñXêÓ«/Ç™¿¦•8Äqª¦Âf"‚ TPƒ)Üâeð-Ú±ç1w†…¢õÌbh¥™Øh‡6[ÜðXúû_ŠŠÅXC ¬ÿc(E€@_ ˜ p0‰>AzÉ–¯Ár¹ oÆŒ«N#}Ä¡°d‹Ú:%éFZþ“†j˜é ¨Æ È J¼Á *XC •†^YÎÐ#_°³eÔØÝÓ*‰`±ã}"²†"à :I QÑÅ·ãÉ-ü/ ÿç˜S«%c 8ˆòÇ"ÒP¨Ø¦€%àA f0†5ì9²ù%s¹O[t»w†Î-L‘‡öçe§Z6`ìЗɰ&4˜$ÀÁ ¡†5±DúT¨žýð' 3+̰eܤÿ¥Ä²qvXÍtÒH T/ÃÚ <àij Ç"¸Ìˆ”2E(RYiZƒ@fù^žõòÞjîŠÈN²P†3¼A *óB,h‹/\ zàÀ°p ±89„åß4}qÀ¬ ,y¼<£QBìÃX!Tf5X³ƒ8Ã0ø½²(—×ÂBØ×ðˆ¨µÿËí8ö¹‰oH ÿðåU 6l}™o¥¡,< }À(Yx­.ß±>ï¬ãv¿PÞ?F-É‘ ƒ@&›Ð+S X '„6tðŽ€uL ¤gŸðq{ˆóC¨•}Å+qÇ.%'{07p 2( p  ´ [ L0¹%0 Ü0O€@‚\’Ò ýçK7hìÒ SÐ Ž ®„ 3°N£SðÀ M``ë0 àû! fWZi—báÐtì‚XxR • @S@X8p‡;0 €;ð Û³øR_ 5¨ $aDÇim³`›ÿQ„ Â=p Qàw( ŽàF€Öp|È ÓYÄ(ép ±ÐK«a¼C@Ü‚–"ݧ{[$I¿”‹“T P è ¼€Q€€Â€2€À@¶€:ˆK àœ@I?Ð5°ô‹?ð “„JÇ0IǰIºxKÁTRé@²ñ'З°1P_€K€3à4ù¢ ÿQ±GP âÁ ‰˜@D—{÷ˆn!3zê2íЋêàµ0;ÐDw([(( @.Ôc§°‘` ˜0Р;é <Àà±\•h¦ÿçZx&Ms|¼)š`MéDrX0 »àjÀÓÿÿmÐDi ¼ è`Q€1™ËEU³€û%_9¦MQ²çè`Š• Q‚9ð 1ž°j°àŒÐÿT9 @ ·°`«à™` ?À ¥` T VS7fy–;¹H;Yt}¶(+ïµ/ƒÐ&|  ˜ÿp ¨• `Ã’“a–prü·Éù™û‡™£V [€A P´ ©©šË%¯©(ÜS›Ë5äGAjd¡–lÙ:¹@¦È ÿ ܪ™¶à4XU И™ëe?€õhIä“@Ù†…¡ žây í€橚£°MPƒN³–9? ±P na?€ TðH@˜2R 84zí‘k£¡€áŽ Ž ªš¸ð8à @ ´P ¿ –'F.p‡50Eð9®EsAC¥ ÖѺ¢ªÙ <Ð 0 é4´ð ;'à.ð'è‚ð,úi\Rõ lF*í°©ª‰¸.%ιŽý.@XE0.@‡‘q³_naXý@¤ïV¦½q¦í ¦ž ÿ0$<°Lqº‰ó•<àJC€¸°E+–÷p ù‚:gØDpùIJ•Ëà ª™°@ é 'À µ@¥Q0à³ÑúvS.oi2ëÎ PÔ 0,ñ ;À ¿À ¯cv.I°PÊ(Ö0Xа³"fÅza²aš²VûHè³€ñNc RÀ ËÕ¯ ©À ¼ ¢€\Xj u´Hk ÙàŠ„Ö+Ö¦gÅÑL¤¯üÚ +{ -K.û‡s¨ ½ ë%“$ð ìP R“;ð«FÀ®»±JË´¢gv¯n±^Ðz'Zõ-ÿ4þ °<©~"£ TP¥à(™Cwpΰ¶ÿ  2 ±è°– œð+[§F Ѱi™5dµÑ£ZªíПþù²Ÿ1­ÕJ=‰’ ° <\ð@{÷2_`…³®á J ï È%*7 1Ù£> ²¶ø§yr¥Z à QB{bá>´€Š P œà³’)*àÎà l :ð=àQÐàQ‘2u<ì®ô»{9Iò¹¯ñâÉMßÉ¿×9:v³…¥ø•à¡ÀÞ¨ 7° `S€@BÚAÉ >ûC@¸`ÁFF—Ff4¤FÑ p1ûPÅ·IXlZ 6Q@VuÐß»”ÿ°‡L0e|ÆááSIp±à‘RmÀ óð»|ôDWŸßiµ` Âu’È" .\ •0,9ÎÐlà šà|[˜L°–3¹ó0ÉS™:jƒ 9:‚€9‹è\üéŸ `Å×yŸ¬µüª@GyÐu{Ø• p0Qðž5· ¼;“€±ššRC0Èаx¯õ¹$ê¼Ø7J ¡\  ƒé×0&0†×p ³@À% [(½ 89P¡ŸÀÁ‹´5`°,ˉDèŠé&éàH—0Ì@L°•í°…a[ æÌºeFü9À U@X®ÿ¸5P>ðs`>à¬ðœ™ Ò3¿€i0‹b3;V $m q¨ƒ«°Ÿ µ`a7m“2IV`ñ 7->[p·!åèK¿R å¾D ½ˆKð°d ” ŠàO@«€?0°7è °Ú<À “4 7ý‹¼`7PŽç¨%—“ ‹¸=I =‰ŠHÌÐÐð )½Ò•QuÈ9ËÒP7€ ß`•y`ÇñÜ %GP¶IôÄ(™Ð×0NàS`X™óM " ÷´8P`É»9 IÐf€(eÀåÑÉ@m±ýΩ~ ÿðÝ àµ[2ɯS9’ã` ¹ð¿z±AàÜT(ò}#+·¡ÖñØ‘í´pÂ0ÚŸ÷$¼`Ì’™ˆAÌ —kXÊ Ò *0u…Yhà_x“؉'¹3Û›AÂ÷´ß•ð7É`r"äU¥%ÑC`†ž áàRÑe#dªBáß$BMÔž¡áÆÍ=ŽBG€=I@9Yú<(îR†b&,NÈàC¯Xî±ßÐßPIn÷cÌ„6’ ¯SCν°à >ß4G¦˜‘Ò0U+β}¡Ù° Ì°`e× ;gx ðLIÐ š° SPÀÏý 0pòí!ÿ¢·U2å æÐK”ÅíÕÖA •P ´l× â„4mP´Y8;Pùš ܰ…ðc  Ö€Á#~4öpº…±²¥è²¾yߊ ÉÐ`“³±ÐÀ > ”n ë`Dˆ« ºÐKÀÖiðjÛ¡÷»æSÍÒµµÖí%‡B‡“B½CX}l?¹¥C §n vq[DàÈÐ>½¼{Q‚ëÚóñí™î¾ å^† ê5tê—`ƒïÃSß ä3ô`뀑º· ëüîCçëÀ.ÇÙ€ ÊmÕœð âÑËÞì X߯èTûèÖéÝ^VÿÆ" º=~)AÈÉí³8À ‡=ø {˜K0zÐ^À ^õ i˜6‚:¨{1­nÞÄ£éL›» E‚!e_•^)5ŸR) Šm0#°2c£9 ¹¼ÃBåÐòh5 ÈsôÓ+ô²i3ÎÓ`&ZðÆ *0¤`”·š@ífåS¯ :Ž”Eº‹f(BBx g/nôfÀOp{`’`èÀ#ßNª’~áï–¿™Ù.ƒ*Ï^ð L=@ú”f§¯h°ú­/¯/ñZrªcq÷y?=•ÀMèZüã=²X{ˆÿ`øˆ¯øS0 Ž_n‘/õ*¼É„\×à̤hÝÔIX¢½ž5ó\‚*Rmÿö^órïèuû$XðZ#F’\Û÷ŽV,Zí¢#8Z’ 8J@abÁ4Ðâ3”æÏ @úKUëš´_ñf{9ß¿uîä)bÏ‚Ù@ƒ2[ÏŸ¯ ‡Æ)L€"jTž!Eøö]UT0©ÀyðÖíÙèY_Ï^ƒO`Q†<¿"42e …'hz+Rœ!D/³)2¤u^6˜2ßÒÝVíãj²u».R‚ “@²°#ïÞ¾×äÒ#Z 4‹öYù£mºZ'ðÙÿÖØ,d´’{ m[ÚQ¹ç%4£NKì™$I¶y{ÐüäÍ´}l¥ÁûÅË‘… ˜0{FÏ6îǺ{² 7ø@hAäÃpá¢F òöhWt? š{.’^ I'š˜‰ÎCï,õv»æà0H↯ˆ"<|a‰ã a!AAš}0J¨ ˜D¶ïÒ±G 5Ì17á !Ž© dˆp(¢¨$!‘Vl1#ri"¸†)©¨ §uìÒË_’O(#ž¢©®I~0¢¹5‡ "‰rP"Vnq‚J¶éÇ'túôóO@tPB -¯ÿ~ùE¾~Ï…„†p‘xéî—FÑIè—)¢! (@H~q‹Ë/ÓJ¨¤æY$#†0‰Góãa’JŒ‚ç@†|„†•–8Á‚ àDiìqlÕ‰˜}O i’¸è¢!LÀ!¿ú\ÀAŠtà¡+ $±F KPb , "¤r”½ÍÙ Wý žø´^à‡ü~±Œ®!ŠÄ>ä{”Y€Fšyæ±§TÝ'ÞT¿:È9h>½äJ`⌠a-DŠ@"p<\ÈÑ vmK  ~—YŠ¿ü ¤y¢røŒã%䢤ÙGE ±âù°™˜© ¨™%öIjÿ¯ÂYçx6Ô\3è¡A£7çÑ4ˆk|»ž¨¥®¹K‹†'›;/†‡p :£J–•×dÙ-Þ i7bx¥¦ É+ š*¤J@ |eËÛHƒxƒåsCÚ–•øíÇØéµ“ÃDhbˆ(bjKÈà!<ì¸øäÓÆ]ªI?‹·ª IF§°ŠZs?T(ÂÄ™l…ä[“ÍçAÚˆ ·Ñqš¥¬/ bO(ç©Æ"ŒÈæ¯jÔÎ}lù’0›iŒâúçû™åÿeË@£|á [²·¾ö½ÏñC‘õâ¹¥¡-0ã_ðœE<ß>d É4˜ç<è"ÃYÙ’ ú]{CДºWA·IÌt"IJX-Í+øƒ!ø¯ìv»Hï‚ð;ðùOb‹;ÊW䋜paÖ¨F5ÄÑ‘¬.!Ò “¬’P™ì8‡¢KÕ"Cß´§'#sC´Ã«¤,ý«˜ψF5%W»:žX9ZÐŽCd´ÇÅœí£”ãùHHF2'’¤d%¹dILΑmÊšG9ÊÑL†2’de(IYÊJÚC8È?!ù,„E£N‡ ///QQQxCKhN`nnnMx¨kuš}nŽyz‰xw˜g|¤u} Y‚®^…°}‚yƒ•g…«fвm¶y‡¨rް}§z—¹…Xh›fGŠu~š~l˜{y®JI²OS¶[c¬|\ºM¹{X¨l{§yf¼ch·iv´|kºr|Ü|6ìz/êy8ñ}'ð|2Ü[[Ô^aÎd^Ê|OÉzVÜkOÚgW×wKÖxUÈdiÅksÆvgËrxØdfÕmpÞreÙwxæ^MãZWèfIåeXêyHèwWãgfåopæsfäyx†n‹‡uˆ…{˜—m„˜v‹™~”¤m€©x‰¦}¶y†Æ{„Õ}‚å€y˜…x¾‚I·‚W¬ˆh®‰xªz´Œi±qº•s݃.Öƒ:ô…é…'æ‡5ó‰(òŠ4ò‘;ɆGƇUË‘YÓ‰GØŽRÛ‘NÕ”XÍgÊœsÔ†gÛ€{×–hÚ’{Í£|ߣjاxë†Eë†Wç–Kè™Vð‹Cñ–GðœUè…iå‚|é˜fé—wí \ð [è¢fí«vî±}ð¦gð«pû¸‡‡‡†…•˜ˆ†›…šœ’‹•””‰Š¦ˆ—¨ƒš¹—Š¢š–ªš´ˆ¡¼œ¦¸¨€€§†™£“‡¢š˜º€Œ¹ˆ•¸œ„±’Ÿ¨Ž ©˜¦«ž°µ›©¢ Ÿ½£Žº§˜§§§ª¨¶§±¾¸¨¤±¬¼¾²§¶¶¶ˆ£Â˜­Å±Ç¡­Ã¨¹Ë³¼É»ÀǺÇÔÉ„‰Ê‹“ÇœƒÈ‘˜Ù†‡Ô‘ØšÔ•–Ä™£ÚŸ¢Ç¤ŒÇ­–γš×¬ƒÒ®Ö±Ó´—Ω©Ë«³Ìº©Ê¶¸×£¥×¾¨Ý¹ºäƒƒæ–Šåš™ê¦‡å¤í¶‡ì¼“奥軧常ò¬¬òµµÄ»Å˸ÖÀ«ÙƶëÁêÆ¦é̶éмṳ̈ñÀ¿ùÒ­öÚ¿ÆÆÆÄÌ×ËÒÙÚÅÆÞÏÑÚÓÎÛÛÛÛÞáÞàâåÄÄäÏÐç×ÈåÚØôÅÅøÐÏôÖ×çßàåàÛþäÍþìÝäääïïðöééûñèþþþÿÿ H° ÁƒÿÚ!\Ȱ Â†>ŒHqàÄŠÛiÜȱ£Ç CŠI²¤É“(SŽÄˆÐ_>}/.ÜG³fD™,ẩp'Oƒ>+ŽCDT‘¿‹ô²iëGæ@§ƒþ$(ujB« «6ôW®k×|ûÒ;– ¿‚g!†Å:“mO·µ2ìêO ¹róÒ#gï_¿½LÿA¼¶aa¸M;TL•pÍÇ#ã#„¨&5BÇh>{V3Ú3x4?F}n´éÓ§Kf+—§BÔ°  ·"BÊ4?›GÓÚçša×T-¼xdâY3¶èØøãp„(òcH¾}¾£Áö™·óãßÃ#ÿ¬|ùÕðÃÝöÓ‡Dá°!)‚d3¶Ë†h£?[4kñ Ùx6aÕZN¯ ø˜<Ñb!D !!}áôQÆ…e€³ßcólæ!h îCà`SÈR‚!îS !߈(HDrÍf"Î!eœásÈe·]w!ŽxØO&b„bˆ—‰³1DGt×R†Þù‘¡x¹g (dyË©àŠÔÈ£ÇBH!HI%MƒŒ1L;ß!§%—Aš&cb 8ÏzeàAÄ3áìAÄf”A8†ŒA†$ÌÂãc>r·[ž«hÞy)Ò4Ï!Vö1Í3HÄfˆ!FcŒáF*\ÿ€ŽqÈuèáoÉS 5ßìhÚ—šš×gˆóìAÈ!‚±Â ~°wázPFK¤´BÖߦ]tˆ\—šžÁ†Ù\§û(s!öñ88ŽÁÅ2—Ýq,Õg‹â\F jÀZUdEÃ9O8àPS†4…Ãꯤ3ˆØRoqâ²/MDñ ®¿›¬ qá˜qÆ!ÕÌáh\€—Lj\ÅOVÙ·™r,ì¸!â#Žu4MfFndáè&Œh±Æï¸\ܽëê«qÍ%vŒówîÌK+…¸_Âì…fè±Æy`KS:³œB 5ø6ÖXƒMÏßPS<û@·m·OGÿ¶§b çÎ$H‚ÆÑâ]8yd±E4€äñÆ>|ˆÎ^Œ½ÆW“oZóç¶³í£+¯¾’¶qÔ7‡˼ÄìÁÅ%ç¬YMoÏDrA;Ü™€ƒ/?>3 ${² $n”¾<Ñø º¥ðÀ³™ ‹ó eÞNœ\¸|Nm\¬û\VJ¤Ð]쬓`²:tæC$_”~$c·YåÏà¹< Dð½Ï!„P’Ò¶g3q…(VïXÑ"µ¢ÛÙϳ¸€ƒKmé}ñ Ç;æg1[Ác¾©ˆàÁ?ÿP€Ú#÷ç½â¼çpÃØ¢…ïØê»¸.<£KMâÅ;òÿ%=kˆh¤¡ôžˆê]Ï),P»¢v\"V Ã…ÎÐ6Oy&ó¸ÆŽPŸÏ\.scãÜòò'"[n3¢+ÄÚІ=èg€*œ" SôŽY` {pPtRg™éäðN;ÒvjèÇVÑð÷7¹íÊ\è$1«:­ŽHR#׊ZT;?"ØØÑšà£åf‰•‹Æh^ˆŽ^ž„([ש$‰(‡òP4¼s™pôy†pæft 2࣠,d•K¿­1t:‡6·ÉÍnzs›ÄÐôI!ÈaËðAv dÜAŃz ! ã›ç …*TAÿ |n3VÛœDfáÏ‚z34*I¨JZèœÑ!ÂPD 5æCŸgHÃxc=`ÁÇD0V‘Ò>hiK\âQЬ3 ¹>åž? !•¥Bòp"ô,hÁ Є„gîãr‘ú¨¤LÓŽIh QˆD'OJ¢]ª”\49Ç£QO"A‚VÀ‚ùÁ B¸#M"(±}Øâ-3M‡| øÀ§ÂéWJ©Õ¨R’T@‚5ðQˆ¬Z©«}„Nç†p "Ÿ æOÑzšJi)ŠMuM(ëzÄ}Ìc‡Š† LµC\È -8ÂÈŽ{Egi¸D:Ú1MLxÊÑH¥n¼óŒ"ÿÄ–©C’,/ëJy*¦+èÃCòÕ†SÌÂk꜈¤'KÝXv3Øí鵋šyp7ÀÞEM50”#BÚ52‹ÎWû°«jÈFXC¸ð…Að1Re£‡-+Ÿ"ø·ˆ¨iåHÀ¹î5øHÄ!\†™g4ó "®j±p\¯„Æ×ІÙVظ/‰ïú™%úwÿ4zCD´˜ŒÒîF$oM5ÒuD7{@^æ¹¢£Œy™›x¦ûXÜ…5²¡ 7nƒ7<ÛÙ0M C÷ !ÌÁg´çL#puÓò ‰pbhèB¥G=ØÊ62•|óhdU÷ZÅjYKdå蜡 ZN”•Ý&ÙpKkV!±2ˆíp5 4e9M¼ƒÒ™6CH4ì˜l€ˆÀÎ0ëÇàcmw£‰®ÐÕöˆW´fÈÃ<С…0d‹ÐÃ茜\'Ô`Û>VI ci¸ÜFª¹sËØ0]ÇÎvdþ­è„#Κ’‘¨!Ô`4ÿ‚- 1†.Ì¢é^6qÞˆ_ã\f[ûZ‘{ AÈ¿aú×ĆM–·,VÈÄËzÒùÙy«ü yÁh5¸A$ö DàÍ`2§ ôÜ,œU~ü6´‘G8xfM=»Î‹©+Q¸A“CXè ÔHTú@ ˆá’hV†1¬ê èB¶¶}3ÂšÃÆ×åuÙŒÍM;‡(ªqûÁöAˆó®J ,à€ ±¬V±xîbU ái‚äÃ+/ñ/^ü¥á¸ïÄËËÓÙ7qU-X%0Áh ƒ0¤!ÝK_ve·nŸ®Sæë®<1‚& åºÅ[­rÞ8¬t†c‹ÁQf C Jp4 i˜Žÿ!ì¶Ñ?š²ezœk[õâfý¦G·­¢»ÞWÇ®?†0¬ …ƒaàðäå¶ ·BQeWp–p]”zá¶|»eú{PteµÑi„°X0eÐYà5] ³ð ^ Ef€ W` !I=„]=ÔhX¢Kñç­—14áK¿¢uÐ@‚°ŒpB^ChR“e@€“ S95] ¢?^`(`£áƒáócABBpÓp„"C j z°VsaÑ€W_°"p +±P9Þ1]ˆ+_¨ƒa˜b£‘O$j@Ö_ÿp(™°_C Wjô9rŒ`s€K0)x?ÛaƒÁãbEq'Â|ÐG:öd£Ç8B`V°^“xà˜0 éà)ϰ€ 8`pé° à²¸ˆ[>'ÂjvÓn¤Á RÀ ³ õt  2 „£Xð   Lppê  Ð é7ë· àÖØ7¸ŠH.´0 À Øu©¢  ¾PR4! €2ÐŽžŒ©ðEÎÈu4±&Ûbfÿeˆþ(†|+•M€ÑÀMPGP VлAÐI±‚¶ÿ ` @…DE€+¥ˆ°+Ña~Ö',"bPN¹M´P“pȰ 7çð `*zÀ 7P `P çPÚt К°M>@9÷D•>à ÚôNÆ MÆ NOéO¥P~YŽçèP±@ñ€(Е 0@^J2@8)S˜Ó µt“`Ë ‘mV|e(@¨Ê7’ˆHUƒ‚ép-‚í •éà´ :I9é8)€1±òáÐ]ð —` Rð øƒž°;@$¶&†m4I t¦ùd18N¸ ·òŒ4 ÿ¥™’D*6p¢  M€X` A ͵‹0ž”° Øp–PpΉ$fZÑaŒ¨:"¹”$IRP€7ØQÇ‘““ t=ðpßÀ Z€Z0cy‹ððÞð ¶€¯pªà—@ >° ¤@ Sð oVX‡õ J ðwáö/3Ñ´:€ä…б+2–ðÿª p 4qV—p9É @ †‡)9ZºÄ£7á£4@*¤4A¤Ìfí¥W ³à0 pð¤Pú•@¥f…Vé ŠŸ±A\JbóðEÔŠÁöC"¦Q3ÿª §x£q}˜“ Ðé vz§˜P ¶pEª5 ŽÐ¢/£þuCÔµ]`¦…ÑTŠª8cEÝùühé •Z©¶Ð穚ÚOÀÀH8 Š8àž ´àEà·0>p‚Ð+¤™ªM¬ÊŠ5ÑG(ج‰ŠŠ‡î0M¯0+ºÊ«wz €M ³0 ¤à ¸@ š‰8P@àIB@ØÃƒºôpvuÖªY˜¸í æz§ à >À  ¨I8³à :(à.ày .Ns`¦Jõpvq­"R®™ {§íp H°®tÒ§…¹“ÿð.€]Dà±S0ƒ:èÚõÚÀxÒHY*{íÀ²¥wJ4°J°gs5+<û¹õ$7p ûðU{#jÄ¡?ÿF˃›Š£á ˜©°PÊœ€ @ð%¿ÐÏ€š@  Pð.°D04Ð qwë2~}p]4s2JD{¶ÊQW¶ —PV°1-ãé úÁ° wÚðÐ&Cmå)ü)÷ª±@À¯}À`¦óUfmC ä@±ƒ—K.UÔâš±b ï0-  ¨À ;CÖàº8 FµN;à@ÿð@0¾ãK §€ÿó1H•EzB×t´)rV㪠'ʹ£q9…Iÿ€ ®à í€ P:»`b󀔓 ¢€éç/€YEQ¦R ×Åz£l×!ÞöÓ¿ã¦z#œgò:³rú‹ï@8”K¾°çðêp nåP !¦±EULÁÕ€ A)o+Òˆð èv¾»Ѽˆºÿ( ôk ö1°‘I–° /ÿ®€ ¬ð€ ë0 Qàœ:@¸E »ä;¾ŒÁ@Ï–z¾á_•‹ƒq­¼ÄZ ³TÎq¼É»sh5˜0&@ ³BB‚Pu0'©P žÀ 8”Ÿ ꎠ óA¾A@¾9[Ð ÷^¦¶#c‹+e› ¦¬–¨¡Ô¶z«øk™»¹‘ÁÅÙ  #°"Cà+£`yBPÀ`¬³ðÑbÉB¯/àœúº¯è„¸cDópôP´Ñ—–öÄ'»“0©°Ð@'/4 ;©¤  ,£€°lÐ Í hÛPÀôá™·2g…ëõÿ”ÉyàJk:²»ÐNqItr²7ó•jR’úÍ>¯“Ž8¹ŸôÑÎÝ@§€6 !žpR°Œÿ F–r <B0·°ÏE`Jq£kíkY_´Ó<ÝÇ@m@ÐfZÔ…M0R Ô—¶5kÐ 4! ¹RPÕW]£1QßKyµ«0™L“ô­ØIOaÑÚÜ:’z´0Ñ`ÙÕô/ M “@É9ͰjÐ ˜P…é¨K Ð‰eH°R£÷Z ö*€= yÖ“m>g­iûP«·ÚF Y°ZÎ ðÚN ¸tàÇ\0 P ð/ÿN@_a ¸`ÉR ໵y%qp íPzÂvÄÍÐ1Çvû®«ì¥¡­³°Ù“Ũ™î` qpñh ¶ çlIޝ¼³à7ð8ର›LÁ4PªÍ$Æ]ÉÁÐaaß(›"I‹šW4 è0M•°ËPK€ŸíŽ@¤pÞ„¼§2í8  T€]A)!4@=àqP=0¹ˆgÖÚÓØ …qßAG.pã f¿†Æ¿ð° 㔠Ũ HÔ VK¯KÎùœ¶EÞPä!çï×d§\â±Á”{iP;ÆtYP³ •ÿ>pOµ =ÿIMà  çàRP´s—P:°¬< á@p½Ú$ EN•»P6°—}ù—¦%lЃ Á=ÜÉâ.¾‘Ï0ËÐÏÐ 7žãºSVge;€/0¾¦ 4`Çà wp4kJç=Ýì%þÓõ}Iª¨)ä2zA¶fZR—ÐÖ MÐR ]ÒãL0#àC5V8pò¼æ—ôk@­-ù!Ù»«šGR>íQSí¿qí±H(˜4¯°¿¯PóPÛìã<¤—fl ¸à„û½ð.!Z¤*%ñͪú^­‡áM’è±ê­^³@Ñíj«CÅ»Ü2ÿª‘-½ h\» Ñ+`}ªr^f ev`íÓ rš:•ƒíÅÑCµò“€;Èà¾e[ö¨áB@8 ààW,f%bÐÑBô"G¿I¯råYþôï9V 0õöSõkdDͳ±ó±/àõ~µ*‰"öçè1 “0 ³@sÖ€ !D*BŽ]O [ê;:@yŒ ÛŽ a€!r\ Ò-Ü1LóöèÑû·Ï Ávûþ-dØa;‡ :¤X±!D‰3Úºð ­Wli<§ÑäI‰Øž=ƒo%²y+±Á‹È3Mœüš5‰’ºy—(H•‹ƒ’-ÕüœñCH"yû¢±œH/[Á‰-:„ÈP«Ö­aÿaD)1–Hƒc‘,ÛV¢5ªû\úrÍ ¼"Eö]¸°ëÙ>RP|a3¸M¥}ˆ )P°¡oàŽÝ—ð¾~ô´-D8Q쮜Šþ¼•¬Û³#÷¡»°6cI·ná»ÿûŒî3kw‹ Ù{ ’h8pøÀ½Ïp¥Äï;DHÜ>ØrWZ³6ÐçvÙKƒnèëöЧÛr|e $ÚױݪdéòL™4ób³dâÆüšœÉl7´(ù†Dð.¥•ž!§Ñ$Ú.4¬ ¼‹"tk¾øšÅ¤èÔÆºËÜ™Oˆ›®$÷D¢ˆn0‡w™Ç%kð &P‚<Öèbk¢ñ%ž·V"ˆ4Ðú B G£°BõÒŠ%ÕØŠ®­qg’ )ÑÅÂ`›'Hl°Y!¤èÄâZz&DüXƒ c ÈX‰{ò ’ Ι žÙªÚìÖì´´\'Úµ´E}µ2¶p¥ö ³ÒIV¢eáY±ˆg 31?Éí 2À3¸õ–¥xÿÑìÜr±+WÉ ×«]w%r´¬YWš´R 'Éô@‰8)šÝ¢¡í jüÈãCNMuÕVEõYWji zÆJˆ\„”$—+‹/î5ãƒ6.Ëš}Amç’ M:£ÿyPfhÙçÃçA¤2Â.c <×Гϸþ$Çž ƒžØ+&-J¤½²éÜÞq–Ÿï5(&$€pñ‰%. $Áâð!äŒ>DícbP¡%È!S r~Èý]s}&znC®[é“:~æ2»ý,ˆ]”b(O"ÅF ¤‘ôJ†GÑ4×âˆ+]QÑ‘&ݤx—=©Ã}¥b‡ÝPP“Ú¬ ‡CÈD„e’È»öÝ,ɉ{ûóቮ;uÙ‚-ny‰žu䢟¾zyFä™?ÌHdN=£Mè   WmhƒA ¢ˆ—>õ­/w±1êÞ5¼°È>/h‘ÿ t°’ß`cy0CüÀ3H£2o‚‡/vÁˆ P@KX†34“B‹]lÆFǨ?½~y†M€ð¸€4pMZăv¸$xàƒþðŒ{ôk*»p„"Ð&Pà ÑÆ3˜Ã%9°hñ¡ñ|Å5 ²ÏjE‚Mˆ@„:¾@ öqÄ2V@xjË  €H†è°‡6ìrÆt™&#ktR3v< F'&\ !ÀसŠ0‰¼tŠ_ƒBpÁÆl#/€åHH²«w…z’w,é.L®yü ’MTR„ÜàCEB$|À¯~ñ ƒ@@‚pÿ°ÂM`̘¤ƒt.,Ô®| s¤Sëdg;ÝùNxÆ3žÐó/|a6ÙÄyBáƒ]¸Ðl:G^|!(Œ@ˆ€àºhhE-zQíHp‚à<<å,!áúlâ"1‰øL%7Ïà×*t„‚ H šˆF4®N.i—J”D‹wIŽÊZC nÐÄ$ºàQ@‡¾žuCT#4A†u)$hmý(®tÎI&J;¿ôU0x¼pR¡&pwÐD_Èe_B BSö`D ¸@±øÅ›æ1{ƒ0ä%ñÀê•H–f"de”YÝxÿ¦5K¡•ð L°gg21ŽoÔT>° MâòrDCbB+¬ðÊÙZ±,ö§À ê»ö+ƒ0FEÜ v¡Ùº$Ϩ‚5lr 謎:§3H?»Ú]޳;N‚mXÂ9Û²Öv£¸Ý‡nYú‚<“_ÁE"V8jΣ @°†{¨Cµ¯+ÕËtÃÚË[a·±ÚÕX‘T† nVâ;oEÈY<Auäi@ö(ˆm]ÅUb]Û¤Ïð”nAu¬‡@D²¿!Ž CQ@ØÒÜÈ•Ÿh"BðÊÞƒXm\åcàV:£ØBiÄBŒR‡Û—¥Ma#`âÁ˜@‚ ÿ¡ÅÔ_^Œ(„:âõ2E´I6®CáF¤3¶¯w¯M ^å.ÅÿÈ|V¾r"–;ÕõjVM±üjwÌ(qt\¸ä¹Ò—δS%ÝJPÙ$7ëeŒ’gœ]©tß,4ž¢$b²æ¨éÎLĸ¬îlv3œ  ò ½Àñ´5ð,=Ï~ö™Û¡Ÿ=;ÑmC¬VjLíF#ÎÑÉâ_ R“ÿ} !˜ìÔ~ÑÉR6•`eò1ËX!§ ³r¾g¿ ßÕþp‡¾@-¾©Ô F8jƒ›!ç%Ç )VV™ßIÙË6Z—3‚qC%$̱™5£ÑŠ8!¢9¥Å‹ÊnF™\qNœ¦±ïŽ%>Îi×¶çbVV–Ú’"Üâva//®²œñ骺Õ÷éÆù«4¤·eL+§ŒÖ?®ávͺ[F’­¨ka·eTêüšv‹ÞBî&]h§Èb¿¼SÞ÷;8ÞÄçæø]9—3Нª/Âx-¯z§^gß\ý¥ƒò}O5¬ãˆ;Þ3d©·–'ôyòñ°¾²ç}êsÑûðªWÿH¼·ÃyÒ`~nrñ-f®iÚµ–Ï8Íqlyw]Ò/õÅÚ•ä›ïÐ̯ˆDKß ¸ßÞúOÿ®ÊñgÔëËWc÷{OßÂÃ=ø²??økÎï–œ¨¶ñhX?÷ÒCú£ï“.Ùó©zKþ“7Í@øÃŽü½õ›¸úñ÷ã=Aë¿Aã½C+½ L# Ô>¦³=ÿ£/àë¿y›;î3 ŒjA|AŒAœAœÁT¬ A²7D<ÀöÓÁô©¿Âô9¬Ø’?#”·wK¼¼¿ßkBu¡=´@ð(¿&d£*„ 'Ü!Ú«=Úë¦1 /,C(Ä?Ñ«$ÿˆ@à Ã/Ã$=6œ=.ŒC7\Â!\C‰±Ã=<Ã8ôC5̰Ûs¿ÎËà »C<\Dë:#&ĽA„CF”D#á«7DœBJÜÄHì¾à ÌD9ìÄ9$ňøÄÐ ;QDEDW¬DûºÌ[ÅUÔDNlÅæ»Äé¢ÅI¼Å?LB«ÄRÄÅaüÅb¬¾^]H€ø>‹pT @mÔ@DUÔî˜R@MÔ8>õÓ]ÁT†€ÇT€øD=àÔuÙQ%Õ}@…ÐTXÕ€'µUW€v@UW¨ÕD„˜Õ¨ÕsÔHpÕ')Vp’E€2\„DÝUV]i­¾R=Öv€F­VsªÕ&mPVi-€…hÖ'Y>]PSVÝSvUÕíèUtÍÔ`•×D)q]x-~Ý׈Õs¥T‡(€& XHxÔ…€ÖD XÎàÓÿ†]ˆÔD©×Xm×¢1Öc…U€5W‹ÉÕtJUƒ-ØŽ]XamXn}X„ý‰%Us­Øa…Ô'AW@×2,‘ÕlåÙ¢¡ÙÔFm‡l]…‹q Ô¤=Ö] Øg튀-ÔŒUu€qµTmXPåÓEÐÕ¢ÙZR=W°ÕY¤½U…mVT½Ú§Ö`åÙ&žÍÚ›E4Ð)VOåY|}ZžeSThÚ‘eÓ}øÛE[òƒTÔvàÙ.,S<\É\Ê­\˽\ÌÍ\ÍÝ\Îí\Ïý\Ð ]Ñ]Ò…Ùè š-]Õ•½±e×£]]ØÖ5Õl½ZŒ½Ø¡-ÜMµÖÝíÕÿCõTÛ5ÝìZrý‡CmÙÆÝÓ—]ð UD­ÕRÕ×àWsëUWºå×ÂÝWë=Rå^P•^êÍUH@…~eÕµÞTÍUë]^æ-ïµ^ë=ÖqåWú…êET`U]5ß‹UÚEÕúmVºÕWàU~%Û~ÍUÄ}_Ö=`×E_×=Va5_ë…VùµÞÿUReà ÆZ[¥ÛfXëíÓTuà8œ](U‚=VÙ‹ÝVQ%ØÂõ^^a£×ùýZ]å×YµßÂu’Eá/TáRåaëTº}Ø~åׯåÞŽ_‚Ebd‹ù]aA•bTb"–½sX„Ñ@…' \âý‡EàÔÿÂ5ÜH5\R%c† c›]Au0>\?m‡:îbÑUV=îãÏT÷õcAdB.dC>dDNdE^dFndG~dHŽdIždJ®dK¾dLÎdMÞdNîdOþdPeQeRöäÓfdNæ`&æ'e~fhŽæVff5?i¾flfj>Q˜ÌfoþæYÞæµfp.çrçÿœ>s^goFç=>vŽgivg->y¾ge¦çû¬>|îgaÖgUgè^hh‚NhZ6h+…~hYfhÌ åBˆ®hW–huh‹¶hŒ†QŠÞèŠîèÅ?é]öè“é hn>è–®g½1˜iš®i›¾iœÎiÞižîiŸþi j¡¾é‡j£>j¤Nj¥^êž.j¦~j¨Žj©Vj§žj«¾j¬¶êªÎj®îj¯þé­þj±ë¯k²>k´Žj³Nk¶në¡^k·Žk¹Îi¸žk»žëº¾k½fë¼Þk¿ë¾þkÁæêÀlÞêÂ>lÅfêÄ^lÇ>êÆ~lÉêÈžlËÞé‡!ù,WGqq‡ ///HHHWWWiiiwww\j€Mx¨kv™}nŽy{‰xw˜g|¤u} Y‚®^…°hž}‚zƒ•g…¬fвm¶y‡¨rްz—¹·y?‰PX“IIžU[t[Žl~Šu~š~l˜{y¤WW¸\d«k[¬|\»~G¹{X¯cb¨kz§yf½di·iv´|k»s{Ü|6ìz/êy8ñ}'ð|2Ü[[Ç^eÖ]aÎd^Ê|OÉzVÜkOÚgV×wKÕxTÈdiÅksÈugËryØdfÕmqÞreÙwxæ^MãWVèfIåeXêyHèwWägeçopæsgäyx†n‹†v‡…{˜—m…—vŒš~”¥m€©w‰¦}¶y†Æ|„Õ}å€y˜…x¾‚I·‚W«‡g®‰xªzµŒg±q¸“s݃.Öƒ:ô…é…'æ‡5ó‰(òŠ4ò‘;ɆGƈUÌ‘YÓ‰GØŽRÛ‘NÖ”WÍgÇwÔ†gÙy×–hÚ’{ߣjاxë†Eë†Wç–Kè™Vð‹Cñ–GðœUè…iå‚|é˜fê—wí \ð [è¢fí«vî±}ð¦gð«p‡‡‡†…•˜ˆ†›…šœ’Œ•••‰Š¦ˆ—¨ƒš¹—Š¢›•ªžœ²ˆ¡¼œ¦·¨€€§†™£’„ œš»€‹¹ˆ•¶‡¨Ž ©˜¦«ž°µ›©¢ Ÿ½£Ž¸§˜§§§«¦¶¦±¾¸¨¤±¬¼¾²§¶¶¶ˆ¢À˜­Å±Ç¡­Ã¨¹Ë³¼É½ÀÄ»ÇÔÇ‚‡Ê‹“ÇœƒÈ‘˜Ø†ˆÙŽ’ØšÕ––Ä™£ÚŸ¢É¥ŽÄ¬—β—׬ƒÒ®Ö±Ó³–Ω©Ë«³Ëº©É¶¸×¤¥×¾§Ü¸¸äƒƒæ–Šå™™ê¦‡å¤í¶‡ì¼“奥軧帷ò­¬ò°¯ò¶µÄ¼Å˸ÖÀ«ÖôëÁêÆ§é̵éмñÀ¿ÇÇÇÄÌ×ËÒÙÝÃÄÞÏÑÛÒÈÛÛÛÛÞáÞàâåÄÄäÏÐç×ÈåÚØöÉÉô××åßàåàÛýâÌñàÐåääîîð÷ééþþþÿÿ øïÁƒ*hp¡Ã‡!þãG±¢Ä†3Ĩ1#ÇŽ?‚|(r¤Â’&¢Lyp%Ë/IÆX‘bDš6 æœÈïâÌ…._e9”èÏ„EM&UzôdS•GkRÄ(UgO;.¹µcW_Á>…9V`Xeɦ={pçT¬6-ÂÅé3íͲleÚÍ«u¯Ý»kÿò ·¡Û«pkÖ Ì¯`¿?†<³Á~W-_>د³fˆˆË†~:Ø)å±¥‘N>:jÍ}ôüñ¬úrôSÛGSCeÝTwËÕ‘[[•J¼øÔwî°)äÈ7a¤½{GO9#sƳSL'µ·jÚæiÿ¿={Lßj%«œýúÙäÓS¤¨EKžL{ò¤½AlÈF9ñIÅ]EõL£ ‚òhÜÅÇ[oþ„^zï‘Ö–ƒÅe£9ü¤ƒK²‚:RN#l¸Q‡!Ö¤Í4ÕÈÂ/ÂX„ÄIØ…?Z\†@â¤cEÊÃ2K á}ÛÂF92 Œ<âHQ5Ó4xdŒÆùHdnÎt!Cæ|Gzˆ =€(‘„5å(rˆ”TR”ˆǼÃa–ÓäÈ¥—GòH›QA ™¨˜c’ÉÚ—:¢ˆ•~,19,áDl(R#j¬q ·8ÈãŒ5Þ(¤†*&T™fÂÿúª¬Œ® )‚X9È5û%„m¤‘j¨QG+` N<&¸`—ÄÑ“ 6ää˜]«r!Úh¬‹ÎÚm­w+?õR"KÄ!„H, Š8‚ ©Ìv÷]xÄ™C}Žä£¶Y1õ­¶k¹-·Á[“3’*à äœÃ¢c<£\ÐRoùH±rØükž·îÁ$£L0›·¦S9å`Ã!™C,³¬“Hè²q|ç(2EŽ8"r˜)›|rÉŠ¼òÒ,³Z‘9m¸ÑH6z„:¼ñ'¦:ôÐùÄ{t„I;ê4W´> 5Ô ó“Ï9Îø+·"m R¡‚ÿIrôOØ{|Èg÷˜vÓ* ܸãk³-.ŒðÜBK,‹,×\Íí¢Æm"‡€'?ëܲ 2Øh`MÜh£ 7åC6ÙÐþûö›ø¡)©æÛj3Íøã’I9&\òFà÷)’£9€!F5†üa‡E,(:”1º ½cE3.¨M= Ó‡´ÔZûàÈnO¼ýÅþ_Ö’12'ÒQ§lPdF–ÀÀ;nÄ‚ÃF ÂD%±ˆWT¢ŠÀ?äQ"¬OUò‡‚!´s#^vû™âê‡0äy¥mÁK“ðÔô¥dñC9© •¾†Æ%da¢RøAÿ*ÒAK˜!ƒüÀ@%„ÆôuFÐÚ !–à;~4BJ"ÚX.¥åÏ‹_¼ßñjˆxxÈ ¤ò›8 mÜXÀVÅ"ÑñP¢Ðœ%pÌH?^’Ç«xÅ,ªxc ¹¸ý…‘Gò-ÒQ‡ÑÁË9rÖ4~± ^p)U¤WqAO‰P1Ú E8C”ð„U<¤«¸ØÈE‚Ñ–·tä"¿ôN$‹k\G‘zp‰Fõ؆œ Ÿ.O|£+ßi"g¥OAë[D è@‡@hP‹+Œaä@"¼rIµ‚Tô‘_M”Cˆ?,¡9z‡êú€ÿ :«ÂÀ&?b7;~ôr dÃ%–õ'ú‰Ó…/§X`øÐ÷ŒËC " !A#nX«NÍ1‡¤¾iVv¯Å‘¤:ÞÈ x4i´Œ©L™Ë.Ö4eãJRˆÌ¡©U#GÊ1‡w¨ñk§ò€¡¤bCŠÐBY/ÝbEY˪Δ¦D™ŽV·ÊÕ®zõ«`ÝN:ÆJÖ²šõ¬é@ ú0Ö=$!ÏxF˜ „<0£€HFŠ@„$$hM.\á \–¬É"+&.p‹Ã:­Ç«d'KÙÊZö²˜Í¬f7ËÙÎnV5ºûâ•©%`GO`ôc Bøa™~ukòÆdÿ‘ `üP)K] ND&VêM¯ŠUHŠöŠ€(Ä<ú¿þáNX d ƒÄ@NOX*?ÀGªÚ–Ê8ïÀÄ'®€K0´·³î#uÜâ²×¦cŒ[ˆXY ¿.Ž@´ˆmHIùñFŸñC›qT„ ¡Ú%náKá 7¢ŰEåË=áIÐF>¡_+ùwˆ°.íòQG<‚PÝn‚³ƒ*Î6>nïo«Þ÷^˜œC’/˜êq MU¾Š#Ô†8A k(GÇö8pbïxj'Š©jx”"ZâÇ4˜àeôf«Ç¸\¯…Ñœf5§“ÿáG¦š›„ ¢ÁªnÛ³úÔƒŒ(l; î°rA/Ò’6T«TâØ¡î]3›u dŠFúÍqã6ˆ6TmŠ`ð” ´¡:HäGÐî0‹Y࢚ âÛÈFð¤v¹±~4L'ýã‰B-–Þ1ÜÈcFMwó«I6á†64bÓ¢„´Ý0ˆÃÑa·€GÌ7_j‚yäR£tÊ£æ¸×‹ùuº©Šn`'l<ÙP‹äy>â>Ä´²algTBpƒÅš¤C„(ýv1¹‘ZÚMÓÑÆ©"±Æp^ºÝ! ¶¯Õíî '¦´Ù`´â¬Øÿp~…fŽ.‚yÆØ¦è"ƒ;KÖ\‚ø@ÄJ‡‡wŽ€WÅÓ{ñ l7^÷pyMéJ+8Ùx˜ráéü¨íS„32Æz”— Ž¡Ÿuc6ªO;ÆÆN8$…l¢ Û!ÿÆ;În¦c\/O—Š#D3h»Áêõ.Î9Ê!TÛa#åz@%ÌшD¼ m/¹ºüeâÔçÅ)[ÉÓÔ¸;]"99:†êþvÛýô;ÎNÙá6¤œS%{æÍ/z¼Œ]‹€$Ö ºçaòêBæÛC4|ß~þ!Y½YÎéæ»÷…ùÆ-Î! 4¸!òÉërGi9líâôÿ“Ûð‡z¨# hƒ 7 G—ç9O bÃ\Ü>sÑ Ã¤sï<†z¥_òAƒÐz¿Gì/îcíÂd„€7l <;º°j@·ðÔ{`bvʱ/!ã!ËÁô†Ƈ&s§tÍç|Ï÷nÙr*7`ó¤}`Bñ‚72,Ž@R€Ã>` Ž ;2‚B=G e÷>æP7»¶OWƒÿç…¤7€¦—HqS4á@ n€ œÂƒ€ 2”p t°1j0,nà0®|3H´6·;L$yRŅdž-¸tˆ(†˜ÿv+Es i83üjÂ"j2P êR,òæ†$u Hå&ˆ©¶Cçy‹8ƒ¸qŠ¸ŠŒ˜z s1-7)UCàÂÒl0°, ;hÔ'j$÷:;×%S8Ux…©ø‚®‹‰ÈŠŽØtÓ}™w;Ü·`A·/å`%nÐzi*m°+°>à’ðp0)ŒÐl„`HÕôüÁ«u:¦h‚ÀwˆÕØŠÑH×8†Ø‚Ú1Zû¢ƒÙ·}N( g0Žj€rð Íóh@…PžFÜö Ï’Z«Å ñ1­ƒŒü’6t'°ǧ S‹±${µ³wŠ _ÿ l@`à9d@ ·0 eLmà ^  5P©¢Z TvQ¥Šÿ((i+É’-¹KÙQ4HRpÉÆ Ô°ˆÀ‘࢞³o`[˜pl€`0‘˜P >Ó=¡Z^2(R³…ý¨’WI•S)˜YùˆÄÁ•¡SóóGIà×P–Uƒ q€–“mÕà^ f'€,µÐ=9’Z{E…i¹š¬Y˜4h1¸n0Ér°x§*Üpšâ ð9Èà` Mè“ Œ ? ” 4b#Nic+(KúךƒÙf)Y•Vy†ÙY‡;2ŠÔÿ“=Ð à9/àuÐ ·°Å4 R`¼ð,`°à`UÀ ’ÍaQ ‰Ùéšþ8 „IwãaxÛx-а°,ÔàW>P'AÀ<1&Ÿ° 0pÀY°TÀÕP·†]Wå€}¿ãvÚy 2˜ ›7J€ ƒ ˜° pY Z>P¤A`  A »E¶0[s$: ñÙ ÇÄs¹Fu²/5'aªY£€¹£ÊÛ‰ Ýù%y„špTP¤Õ TÀN ] ¤¿ðFÀPÉ¢º@ p `%fLE¥¨/Ž0-ô!×ÿò¥¦9ú…@}JáYž%V•©‚u˜Ìð >pé à+€ €>pp0V‰« @Ÿ@VEÀ=€å©E c…WÊ0VʰVšêX‘e©Æz¬Èš¬Êº¬ÌZ3ôò¥P 1?àï  Qp;P /ÌÃ5Ôª[€ ±ö WªŒYª˜¨è¥~ ¦ÖI¦6 €X¯öJ•”ëণïÀ©ë¸APEš š/ðÐ36 f`”€À ›ÓðDê0 B «qu¶wEÄ4£Õ)¯*»²ô ©öz¯²XðÀ¡çú Ïÿ Ñ ¶u®µ=à¦à Tð_pP[÷u@°³™ð Üp>ð±OqS¶/Œ`›&ç¨-;¯fúšþ³`+›5¡[WðO9!Ò§˜@ ~Bòà1¡oЪJôÙ@xw —  ê0 à ðÀ ™P¿€ ™ Óàs,æbäÀµ]¯Fwt椣`ˆ•a[¦‘šÑTü?ÀP|™l?7q^s£¢·w`ïÐ ` `œ>Û  Ø—'99“¹I÷¹¯øµ. †LUFAº¦‹š4)Ø^0·ðp ¯!»´{` ¶ÍÿÙ%yÄ»gL òSÔ©|tÑÃã’Z¶/˹;UR¶j+:š}ê°Æð ½Æ « ¾te˜0 ŠË¸Žëpš„hºö»ëËr'©“:¼ñë¾ï³SáKÉ‚ 6ë=(+ë@þ뿺ðé Àü¬,UpSŸÌ“¶?ðE0 ´€ 3ÂE° ZPN€Õ2ç¦r¼š»¹,¦cÚÁ/)ë”ïà¯ëƒÄñO5 ËÂÂ.üÂààçX¤T°·p ¨ ¼ çê?ÀG@EºI°(”8æK#²wˆ$¼ Z,Èœ¯p¦#ïÐ aÿüÂÂWÐAC°–@3K*ÂWà4@EðI@†€8ùnÏ‚.ˆ€L¶Æ+ŬÜÊ zÈ0òp°È/¬ šÀ¿ðgì'àK­d4 ZKðÉZ°z‡wÄ&9#ަ ¦,¶<ÈÏ\¼ó‹¯È Ë"Ë´\Ë[ð±T ÑËb6 ˜@µBàWIà»ÀÖ;€!§+èÐÇÇ ›ÐÔºðÚ›¬ðÂ( é ïðÜÓ ¦ðCÐ\Fr|HP NÀ"æ1€2g(õ ;õpʘÛÄ\Ï0XÈ}¦â?>“vÙÆ¾³0PÐ  •P š ¬ Šû [ DõH6ÿðú’¾’ ‹n¼{þblºÃ#‡6 †½‡˜ÊÒL¼òKßóM¼ãâ?Ë’–­ñÀ<™€R°ò Ú¸üv¥Àh›ÌúÕÚ® ÜP¨Ýç!ƒ0„Óç/O}¾QíǼ|ÂýÛY=ÜŒØÅŽ£É>ÕüŽì`¸¿€ Îþ_ !Iµ`í¨€  ±õ rÑÐ s ¢ i²ÅQO Yиṡ@ rœ†BY:Ø/hÕö//éc¿þó¿&'œÂ<ÿ%ØÒKɂ à÷UÐ .Õ오c0Î 6`WP¯&ºÀ Cž–`׿ bI€Ëð¥(ùDGù‘Åèˆö0OöÑlö›O¿\Œ3_Ž%ÆQÅ· ö˜0öÿy®ð  xÐ(ª º` ŸÎP¢bN`“à6ðC, B€ä®½<÷7qI\Éß;ïþ $XÐàA„&dØÐàB‡B”Xq E‹1f”¸‘cCŒüDŽ$YÒ¤Ét'MÂã„á–:Z4M›öì‚”_ÜÞ-X`Áª,–0è© ƒ‹"E~|ÚÂÄé´'Ovì R"Ó¸L©’ È#ÿñ{÷ޤY‚?N\«±mDµoÓÊu—îÅ» Cªä{’›6a[ûòS‡ÖH ¦ÉãGëf&L=1¸â7M†Z"ka(2­šÐN«‰7UTÓ$»žüʯõسeæeÿKû ]¹¸ßêÞm»ìoàÁ…'^Ü,¿tÉ•/gÞ\¹°¤I…9_~ë&å$a–.×¥ž¨T¹à*]‘,8%çt!“"C„9"äWrcSÓ1ûÅ£uçD2n@ 4ð@TpAt¸Úl›­ Á*ä†&y˜¡I0•àÁÄ%˜dÂPži´xæË|J(¢ø1* &„øÁúD“§šzXfœ>ä裤ÕLjÍ5±ŠD+,²\“¯%çjòÞÖŠRÊ'|r¯ ù:±tHÔf°Â0““w´É‚ *²ø’«˜"…&¹…¤[~ð@â½#˜ˆJŽ5ÔFÌáŠ/ÿ…~S6±LrQߪ„²Ê)9ªÔRI'¥Ô ,ûÚ9/+|çZn‰‡ŸYP•YFªç ƒ(bMy¸‘§ˆ há¥h‚†>£Zƒ4Š-–rD ²¤DË‚´Q$¡kÉK3ªÖ­+%½Ö¢m;â´S•.\LC­Àé(¸å ˜“Ÿ ‘‡D­ª¡i?«ù…œâ÷—jˆÁ bM£ lá#YÖ¢e”¡iš6ÒM³µøbŒ©ýÖ\“N›¦³5ÍÅÄÝsÀD¤Ó˜‰Ä'hÒ¦š'üœ/ ˜™ —r@‚6zfƒç4QEfÖQ!ý¯‰i뮊›|º®ÿL§icŽKú+°¬ùù]tOæ'å•§ibšzD‚¹š"h("f!lÀYgBÒ`£Ÿ‰e¤žeQ$í£¡<.ɆF:Njm£ÖXqÄïZ¥eÁEW]vI†wyYny¤-‰ù!ˆ-☀6– 7Š54l1´nª©†.:ÎY‡’ÎXB«ê=ÂÆçëÁt©¥–QzUšw`–¿´ù«3¨¢zBy´‰ –N~ø! |mù 9J0A cÓp#ítQ„~ì½Û WÚ÷ƒ mëwà‡ßbái}¹…˜Äô. -·À&ná1—1ã4ãsJ­° d‚ŸÛ‚ÿ츞( hðÙ ‘ >(Âù¸P5êQjÐQºƒ…H’›Äý//ü»MÕr8¤¾eêÐÅ,†¢<ŠD\ó¢ 3걡ÑgŸ°@†ÁÀL°pïÂZÑ‹DA Ù „14GÀÏ^Œa:jW¤¦éņDŠ£µ~¸¸àåQþ"_6Ó"£d&IÛbÊ& †MNᇘ~1 ~ â \ã3ÁG,‚'üh9ʱ ÀF0Ü!lç­×8ŒJÜ!+[yG<P%Ia©B’$Bä4hå§Fb *ÕðÈ*¹M`ò›l„"Μ‘ÐK§)%Ydÿƒ-UÖ‘[° ÷èÍXÎ/BÔE8È$.‘^N„b5œÂMàIOŸÆ†¸èE0.`äPa> 9qÑä²ÄæÃô‡)WÒ…‡Ò¡Ó`Ù©¸4WôR‚z¾L ½î·;ý@>øE=¼”b(@ ˆ‚ ü 2¼âe˜I<¦T î~=œ£6·™P6ô. }ÈC;e<äAÎ\ô¥‡ ˜ _HïŸõx7¸³#$! ¢HÊbéBÈA*@ÃäpV üà a#Síá0kúÔJCR(7*ÔºÚõ®}T`äø¢NšhÂ0ê( '࡬’<Ñ—1ûèõhrÿBø¡ÖÀ$‘ ?Ä §M`7¢iÈ,q=hQñÔo¾ò´¨Õc.Û©O±iÀÀHb¢Ž×FÓ—ñ‹ MœÒ2m€Õ£Ä¤P|üa •À@:Ö[y¸q,Á pîGT&­v•©U­v·+ËåùU%Ðmm5ƒuä¶l_’G̘_nE¸_rÀ\?´¹Î] t¥kÍßT׺¦åîPÚ›³6œ®ýg–; ÁÒ‚°ÀÄa,ÅÚÊO¨E‚ Bü¡Œ¨ìe3›Stm€•¡³H‹;k8œàìfm|ã¯KuïõÞÑâV½ü€¡Sb… xMÿs+õpÄ |Æ5œUi]«! y¯·¾˜ºÕ•1qœ×ƒÙ»Á!Å;Þ)¤ºÅà.üÄ'áNVBïµÛ|( ƒ€ì  Vàb¦5èˤÁ~( À1¶]—¿,f/ç8Ò{m­kÏl’s‰(cB}|p§,tqLÔ =úÉS;–;вè8À ñ£fךÒ:/¸È²MóýYÈ‚üä‚tb½æP#ªêEøvÕ i4{@Å.„pLÜÎ`ŠŠ„±/£Ï…˜ðé¿0!(Ex/TÞ[N?!?€Â`¡ *ðÄØoÕ©€xƒy¹Fäø›Ghçë?Ô5HYâÿýÿ1¶"a ¤ ~a‚$ ‚H(‚_H9è(‚tp aÈ‚+Hž˜€`€I•‘¼ü AA,Atþ§¸ƒ¾CÁ0Æò­$`'@@`KÀ„vÚ-|™†W`)À ˜€Oð ÚÑ©š£<‚B»àx–ø+(æã9úó¼ŒYA¼0˜¯'H‚ð`áð,P‡öú-'`„l0Óc( -ÿ Ђ;£lBi±Ÿ"3â«<)t»†{;åã<*dÁ ‘‡Òc Ÿ `6q¯$X‚3 „¢;ø„ZÏx¡š9á(¾¹°Ÿœ²°ÀCØÅ=|ÂåûÃTt¸ç«Â ÑžÞÂ@Mh˜;´ÙFX' rÀ»ë)ú¸+“±°W‹?Š˜9Ì× EfD¾²¿Ÿ·û[°VD’ð,‘à v :‹û…8[ ÏÀ$G˜.ÐúØäè´i*x¾m;e´!S”:Ì&& 7jtBT„Â)ÌFè näoÄðî{¯D2ǘ‰³#x‚z˜À#Àÿ—9 à“™&&ÌàS´ÿû‹Á˜d¤# Á¼ÍÌ›<º¢æóCèŒNH“Ê®!/F\Éi0„>©‡ÖY&àfÃiḃ¤‰¤Hí!˱é†êÄÌ´ÇI‘++Å·¤Çk¢+s?ÏdJƒJÿüOHð½\²Îˆs¢KîTïOEOÁ«‘ë¡/AÏ8[m`ÏßLFg|Æâ#­Fá‹‚ ÉŽ¼šTZJü©K»¼K~Ю = ­i@Íʰ²N›†Ö|ÍØ,ð{/ˆä0óÔ†_ÈMudÞôÍåt±ÊGÎ|š  -NƒSÊýdÊ·¬ÒÜ5“ÄKç+7×âËÕ¨:HR›¬b%¡yÐÿFôÑ¢sб|ÌIô‚[ÂËÜL8ʱ.ÙˆFdLÎ}O@½F­FuJê|ª$‰5Ú7óŒlÀl0Ùò¥jÐѰ¾|ƒEœšSákNŽº0 QåS¡Lʳ[F=T-TBÅF/­Â ó(—á‹ #Æ/9 ”+HÌTËû4QG™!÷Ô á˜Ò<„«U-³çMW]Q”,ÍXÕ­Zí ZE›eŸE œ$Õ ²€ÏRœO¹Á… Q{4Õ¹º9ìâÏÑ Íé„V3; À©ªšÀáFþò0hQÒ_íÐSâSsµ¡%„¿-Tu4º`Ò-mѦ4Tw=ÔUyP±xÍ×ÿWóÓ×èW4VýEàtKd5Å…E}Õ„UؼŒVm„>Òû­Mu™fÙ×¥‰OŒFý¼¡ËûTbýÔ¹<×˔ƴY§DEOüSr{WY…Qp™Óë“Ç,=yÔ¶„ˆ˜÷<¨À!Ø´ÀYΤS(5Ø¿¸ÂZéÐUÖ¢uØ£eÁä†_p ª’A«r‚ŒÌØËœCQ,ØoíØ¬u°%Ú¨%XµûZælUÁ#ƒ ÚfÍ*ÁÒŠø™ ƽ{8ƸÊZä“5,5U÷#U#œRã6²íÛ±ÍϽÝ’µµÕuÍÅeÝ%aܰ`\ˆ\l»ØM]NZ¹ÄÌéòPÿà,‰Ï…Ù,}ˆÁ±XaÚÑ=8\Ã]9ŠÂÓ [ŽØA{p§&ð‡oð{°‡˜8*½\UÜUåØÛ)NX Üæ‰ñõ^ºíÙ ]æëÞç…^víZÕ½ xH§`?»«5ߘ%E·ÜOý¬“ÐÚi Åa]ËÌÚä•ÚKÞá•_.%ÎÒåÙ»˜WD*ˆoy >õ•ÙnFF‹ROU­Ã&Nù+^(àœ3]“=\÷¥àæÛ»N¯•Û¾]_Ñm_½-_•˜$ÝOUu˜!6ÜÜß&E’tU×Õa &œÞ=_Úˆ˜¾ÇʼâüáÍ5œ;´Oãµ’+m?)®_åôbÿg<ζ”lc7~c8Žc9žc:®ã‰`fâ#¶áƒÙZ 6]@þL‰1Àu3²¥Rd%b¹ôadmâ&vb¦â®àϬb á*åÑ Ñ¶\ÂÍU4á5¥ãÄÙÊKU|äÝÏëV¹ ZVvÎ<–`V a3¾áWÎ’¥Ã†#qÝ[PìS&„Ê”ä&õY%yšªÍdÌegÐ –e(f] ¾ÃÒŠâæõUdâ$’}M×nñå‡9œÎ\Ög.ÉÁ=gm‹›á¥e}ÝGºc߈ovÞœ²Úy¶ÏÖUÞ'vVshtöÈE‘ ¶Gá¾2ÎLr–牀ˆ[6fÿuÞáh±bo&¾0FbiŽ_è‰öØšN¬ âVŒÝâÜõfŒç·€_Vé’^ç’Õ莖étn ‹^¬õå¡R½MJÝÕŸbÖå\Î Sffݵé›öèšž_¥þŠb=fî_}e%[nfO¥êÍädU¦d6\Ášæhhžå²¦ém“µÎBÞÓ#6’â,b†®ØgLR®%ÜA–èF>¨H†d|V볞æy0%Åû4h0~ÏûëÙ«œ«%f£Äb¦fí¹B­åŽfs0Þ[Ķç/ÆèƒnìWãÄþâÉî¶%Fi<ÆåÌ^ãÁ6k¦nj´&]ÐMcÿ·®X!NßÌd4œ;Ñd¶ëls¿¼¦«½g¾äèÚ†îèVk4JË,¸¨§ô=aÅn¨ÍäžÕbeþêZ°žd>NkÁ~j€­Ò…öá'ÅOý´S'¥#¥Yh­àðvì–Ö&î6ïËFïØ¾íé>à™fß6¨¥<ä~ŽYþÎ#n.pð_jö–ð×Npæe`iÉhÙ†ê¢gq§.qÏm OcÖGãC RmðPŒh>ñ Oñôîl'q϶bݤæñ¸ÔdÅýowm On¿q%·íþÄ叨ëRrwîÿÊTRðGr/?ñ¯q8/ònåïå.lÔóÎr-gséæóõž_ÏsvNf<_V¿=Ö ?ðDWoÎÆñ6?ò@çr´#t5ôC‡í ·p8wóG?òM÷t9ôA_ñÁ½ó¥ükÚþô7Wõ%sÆr:”%yï3é`ÍtFoô-Çõ.ïsYì’q[NðU&^ïu_÷tNïôV_öd_õºuÒI·ï=ßõcgufoveßvn×vã{ÆBÿð@å;.ws?wtOwu_÷;¾vlvo‡vywz‡÷ʶõº½õ@Ötg_tGÏv{x÷wýnRbÿö£Ôì…Õu?ÿónøÿgø®-;Z§æBõÀ&xk¯ö~—øwwø`->ÀNõ×ø†7ù’÷øŽŸó¹Åô‘Ïx”_yQGö˜xˆ¯y_ó”Çùy¿y•·y¯÷ˆgùy’ßy¢ßø}ÿ÷ ÷ùŸ§÷ä}ùÍ~z§Ÿy¥7ó\Oz>Z©_xªz«?y­Gú°—yI¿ú¥§ù¯oúª?{²w{³×ù¸‡û¹çx g{¼çy¡×{°/û·—ûžï{ºü¼çûÂû¿|Â7|Æo|Ä¿{Ç÷ûÅüLJüÊß{ÊWü¶|Ì¿üÎ_û×üÏýÍw÷º‡u¦}Ï/}»Ÿ|ÐýÕ|ÓwýØ—ýÙ}Íg}ÿÔW{Ø'}Ûo}˯ýÞç|Ü¿}Ýß}´ïúçVýÜgþæÏ|ã?~¬O}èþêG~±~í÷ýßOûìçþî÷þÄÇþï·þíÿá7ÿóGÿô~çwÿëÿñ—ÿàgÿö‡ÿû'ÿùŸ~Þ_üˆ|Gð „ \èð!Cˆ6œhñ_Å‹3j„ȱã Š‰°¤Éˆ)C®tˆ²%F˜ež¤yðåJœ&uŽäÙÓfA *…Æ$*Ð'H¤•^dÚÔ¨Ó‰Q¥B­jõªÐ©±ÕúЫK£E³rµ ö«Ø³3‰ª]K–mÚ²2Û’¤ùî.Þ¼z÷òíë÷/àÀ‚.lÿø0âÄŠ3nìøñáºraÒ½.æÌ]'S;ö-èÍœsŽ&­ÙìåÒ)+=ÚõÜÔ¢CφÛvKÖ­iÛ•ýšwoß¿k'ømä¹…ožÜøqèUÿĽœùsçÓ­¯¦^]¹iîáÁw¿Ó{GÝC¥_7ýRøñݧÇÞžý}òåõçŸTþSôÍ'`}RE`€þˆà .È`ƒøíç`‚N¨]~nG¡Eê}faŽ'â{Fâ&n¥bXnäâ‹öe˜]t(>Hb‰6Èa…:öX#Ž)òx"4yä†AÞ¨äŽL6‰äˆN> å…TVid’R‰e–ZnÿÙ%˜aFÉåŒb^If™fæèeŒC®È"KpÆ ã›>v(ã™iê™ç˜hö©fˆV®)¨n¢%§[ˆJfh‹ŠZæè£ŒÎ)i£”.j箇i›œvjé¥lªéQtŽê驨֩ꤢ¦Jè’°N h ®Vjk¢¬æ*ë¬{Êk¯¾ÖJk¡¸†jlM¤–Š'ŸÍþêç°ÂFû'µÕ^ ¶Ùj»-·Ýzû-¸áŠ;.¹åš{.ºéª».»íºû.¼è&‰Xôe¯Pøæk”¾6õë/¿ <ð¾÷ Ô¿2% Ó LSÃ-E,q½+\±ÁkŒ°Åc¼1À ‡\0É%ÌqÇ2¥ÿ#ÖÊDµ,ÔË0³M4×<3Î9{¶3Ï=ûü3ÐA =4ÑE}4ÒI+½ô?² @%U2üPF€@¬P}–ÓÈò? õJ]ýÏÔU§$ +G‰Ýö?Z«Ý?ø €Úé àõHX= ‰=ñBl ¶öÊý·FuŽ·@zó½5Õ${¤wâ˜Ï­PçTÄ Ù`P‰,°€ä0€ê¬@B{Jü€:ÿàŽë¹ï^ ü°ûÞ#ñS@ö6ßú;ÀËÂ|G• €@̧Sù?«ÏøDÛ?$¬\y:¤>ÑòÍ „÷;°"=õYÿý?w§¹÷ã_@Ò@×Q}êÓÈíÒA=@"}• îæ»ú½X; þй¶é®% í*qÁx~‹^ÿ‰ ö¤wÝ{Ç8èBº1^ñˆ p¹îO"ÃßV¦;YàOg³Èôü—>Øñ0nh\ UÇ»„m‡þ³È2zuŽˆï;âDp'7+êÎjZÓà€æ:È’F8Z-nD+ÌÇÄ&šDàí4¨E0v„ÀF§­‘‡üÇãˆFzymˆ¡@HØ‘JNP» Ögÿ!/)dã$1€C®“tJ%ÿ[‡HYˆ‡¢”Šú\ ;¢”ž.qÂü@,›ðµ=Fp$®Þ;ù ¦Dlp<ž@Œ¹6óI™Õ¤$þ*qI¸ýq“øC›ÑJ¸id|b{‡XqÊs^D´šuÙC‰T€í«å?æˆÆÕM“œÀÃ`Gò8«ñc»+h&÷9…òšSû›îð…É ®do° @5i’7Bò ÄL @Ӹти[ìÅR$âïv ©¤A2¾ÒšNl© ]¸Â˜Â$• qJHˆ`¡Ù“©î rÆ‹ïevQ»·ªFnoˆ$[ë Ötøñv;\ U·ÿÂf‚xâ¤'Ëç·¬Íà73©ÁâM5*þ®'Vz@¬l%ø¨É<â-U"Ò´ceÑ׿šó}FükaëgÝé°ócà_¼‹ €cÍl1'ûD…”V¬gÕfä´%Ui„lÛó[Knû·6V#Æ$@ËXAÛ‘Höpnl™1Ϻ¸i+jÑ,ÀTú%O¬¾mÙòp¶äö„+´×s™R·l}»ÔèE*![m­Ì¼ Qo¶Ò[¦Ñ·¾ö½/~ó«ßýò·¿þý/€,à¸À>0‚¬à3¸Á~0„#,á S¸“Ú1+¬á sø½æÓâL;,âÿO¸® ¦®'ÉVqʳr“+]yC™9C­i{‡góG¯©mT»N%1ƒŒRP „½+À!y¹U‚Ö‚ˆ\+ÍGÆ*Ú¡¾›]ù H4q´…þô M¼h5¯²{ ¬ w÷È奃xmûhqWêò­‘ØC$ØŠÙ:›º×#µ¥i½Ê¨)ÚÖˆÄq”[fÚ › ìC£væÝíÚ×Ör: ñ7ÛeÍÿÌ=[vÛmq»š¤qó6ù¢& mgÓ_{»¯-ïy;ä{ô¾7¾… ˆ9ßþþ7À.ð¼à?8®ð…3¼á8Ä#.ñ‰S¼â¿8Æ3®ñs¼ãÿ8ÈC.ò‘“¼ä&?9ÊS®ò•³¼å.9Ìc.ó™Ó<$¹9Îs®óó¼ç>ÿ9Ð s€¡½èF?:Ò“®ô¥3½éN:Ô£~gkZV/–´~©s½ë^ÿ:ؽNu­[+Ve'ûØöµ³½ínozÚ¿w¹?«îv·ÈÛó®÷½w}î«"V¦µ,\ñ½ð†?<Ñýþª¬X‹?»Ú/ùɳ]ñ·ÿ<ݯ^u¬oòžÿ|Ô-ß*ÌŠô=A@¯úÕ'õÇb|æ9ïú×w„õ¶·ýì#åøÓßÝ칿=ðAŸûÝìþò°ÿûñüåO~ø›2=ï5öÞK„ùÖ7¼ó_üÑ'ßøwÈõï÷ìúÞ'¿nÔ"þõ·ý z~÷¹ÿý…°¿þ`w¿®t­éK?òöÿèQÿÉù•ßü•^ç Â6Þþ  ïõŸŽÄVàÒáŸài߯^J Bàæu z  ò`ú½Ÿš`ô  ¾ Æ ΠC¤ Þ æ î ö þ ¡!¡¡>èÿŸùÉnß@!F¡N!V¡Þ`ß~ –`î]!†¡Ž!ê` ž_rá‚D¾!Æ¡òàjàîJüáaÄö¡þaÖá ¢  ¦`K""&¢"ö  b" ž F,"%V" 6¢ Bb$ªá&„%~"(–!&æŸÞa²àJ(¦¢*Rá(>¢#n¡^Ä*Î"-a+:!í5!,&D-ö¢/𡿡ê¢)þÃ/£/Þâ.¶  ¶á>!2Fã**c1ã3ž".£4n#(R£0æâÆb'ò!7–#%zã5bã22a8*„9¾c"¢#!’ÿ¢~£6Â#>Ρ<¶£$ò#' Dä£@Æá>Žã0ú#;$8*¤5Îc¾â:&d3:£CFäA2dCbd)ÚcFd*Ä„¤HŽ$I–¤Iž$J¦¤J®$K¶¤K¾$LƤLÎ$MÖ¤MÞ$NÒ¤=¤DNö¤Oþ$P¥P%Q¥Q’äNšÄQ.%S6¥S>%TFeM&åHH¥U^%Vf¥VneJR%Hp%X†¥XŽ%YʤWvDY¦¥Z®%[ZåYjD[Æ¥\Î%]ê$OÖ%^æ¥^Òå[^Ä^þ%`&Wö¥E¦a&b%aNDb6¦c>æL.¦D@&eV¦eޤdBÄen&g"ÿff>Dg†¦hæåg:Ähž&j®ei.Dj¶¦kæ]¾¦lΦS®&HÒ&nææPÚf?jd=¦cGz$§8 gqNäBÄ‹r.'s6§s>'tF§tNç¹átÄu^‹É8 Ê@ÌvRLwzÌɈ§wŽ'wš'x–'z®Dvjçz¦D{bÑwÂç|Ògxž§zæ'yâç~ò§²g}šD|NÄ€BDh€ŽÄ:Ä‚2¨Ì¯¥D„JèƒÞŒ…^(ML¨Ihh[UhÍ}(ˆ†è‚ÍOWMNRTÎ-ŽIhÍä\’rÄ…Ô™DظF¼M5AŽÅhz¸º¥M¿A‹¶Ìæ˜Ä%]ÿP4¹Ò&ÁM’Š^D«MTË4i! }MØŒMáÀM×p’©Q%ØHAP ñNÝÀ^ è‡Ð-M…éÊ<ÏÁ¨"5îØÎaIEL•$TUò$…ëO@ €õ ò` ŠWA$@™bÑUA9=jN„ָЮêïxÚ@´½èŽ–­ŽÉOÓÑ|=„Q µ•óÒʤφÎÎÊŒÏTUOY  ×E^„”W`&¥Ð&ÑNÙêju„¡ªÎ®(¨bîäP«NÄÝ`M©¶M³Z+ u9I­B<+޽OË`RJ½i‡ä9i…õÐR…˜E”ÿÒ)í©cÙêT’8„î$’ëH“‰Ž©ADR:+-/Ñ+Dhií›Ô¼èD¾ŽS&)@ATÄ^±R—eS²Ê¾Ï ™ë:Aé¶Në0Â>Ä;ÅÓ<„)52…“ÃJDT©ÕØ 5)èjyHXÏ;ì/Ñ”FÃZPjÚ¬ET,&]ìfÍ)Ò" á ?øÙ<-ªŽDSí–L„záWÉ*çìMOÕé­"ÐQÔš¡ëC¤Ö«IìÑJÁè‘Úv,U½CE‘ÐKÁ­C¸ÔÛf¼Ö mTàb¬ ܤX)Ä^¶h‘–òXX}¢–_ñ­E¸•\YèvÔʈVª:„'¢îÕÀ.DêÊOF SæDY­é&­Nùü“§^ÄÝøQÛØQî&-$±®jÙOâ’ë2.™–ßÄÕ¥"„=1Pùœ +4Dx)¶ÄXÍjëqa˜àbêßT|†’q‰›€ ”nÑèúWƒž[ŒŠïù’Mrhá`W÷ÚØö:YMTCÌ/vf¶dvÕoäØh@!ù,…LkŒ‡777kayV}ªkk†iu˜xi…xzˆxx˜g|¤v} Y‚®^…°}‚{ƒ”g…¬fвm¶y†¨rްz—¹•c4¢l9°t=–WR†[dŒpX‰go‹zjŠu~iyš~l˜{y»]f¬|\¶iFº}G¹{X©kz§yf£p|ºcg¸iu·|iºr|Êo0Áq5Ðr+Ü|6ìz/éz8ñ}'ð|2ÎYWÜ[[Ó]aÎd^ÊxEÉzVÜkOÚgV×xKÖxVÇdiÅksÈugÊsyØdfÖmqÞreÙwxæ^MãZXèfIåeXëxHèwWãgeåopæsgäyx†n‹†v‡„{˜—m…—uŠ™~”¥m€ªw‰¤}‘¶y†Ê|ƒå€y˜…x¾‚I·‚V«‡g®‰xªzµŒg±q¸”t݃.Öƒ:ô…é…'æ‡5ó‰(òŠ4ò‘;ɆGʼnSÌ‘YÓ‰GÛ‘NÕ”XÍgÈžwÔ†gÛ€{×–hÚ’{ߣjاxë†Eë†Wç–Kè™Vð‹Cñ–GðœVè…iå‚|é™hê—wí \ð [è¢fìªvî±}ð¦gð«pˆ…††…•˜ˆ†›…šœ’Œ™•”ˆŠ§ˆ–©ƒš¹—Š¢›•ªžœ²ˆ¡¼›¦¸¨€€§‡™£’„§™™º€Œ¹†“µ‰¨Ž ©˜¦«ž°µ›©¢ Ÿ½£Ž·¥–§¦§«¦¶¦±¾¸¨¤±¬¼¾²§¶³¿ˆ¢À˜­Å±Ç¡­Â¨¹Ë³¼É±¿ÐºÇÓȃ‰Ê‹“Æ…È‘˜Ø†‡ÙŽ’ÛšÔ––Æš£ÚŸ¢É¥ŽÅ­™Î²—׬ƒÒ®Ö±Ó³–Í©©Ë«³Ìº¨É¶¹Ø¦§Ö¼¦Ü·¸äƒƒæ–Šå™™é§ˆå¤í¶‡ì»”奥軧帷ò­¬ò°¯ñµ´Ä»Å˸ÝÀ¦ÖôëÁùÆ–êÆ¦é̵éмó̦ñÀ¿÷ЪõÕ·ÆÆÆÄÌ×ËÒÚÝÁÃרÛÛÞáÞàâåÄÄäÏÐç×ÈåÚØóÅÄöÜÅôØØåßàåàÛäääîîðöèèøøøÿÿ H° A~ü"„'¡Â„B4h!Å‹/ZÌÈ1c?ˆýþM 9dGŒOªT¸²åÃ}ëÔ¡S‡ïž7oóú#ǟˆýÝK—.ßÏ‚)/J\Ê´)Óz‰1Ú“ˆ iP P«'ˆW6圊•Èn©=ihÑæËaY±ÛŽÅ–h?v‡’01¤ m×Få±qcO.Ó·³I£6oÚ†"n72Ók‰ÎñKÆ$IŸ¨Ú ±iyXËn—>FHMÚZÔdÇV†Íîµz–(©V.‘!Ѥ"Rc êÉ«ùµ~M{2ÓÙ°í5Jdºiæ1yÒ†M¢r‹Ô¬ÿ±DÁ–åÉŠ;–™ö]Ù Ý›edZ5¬J’,i“& 5jÐÁ ´Ùdg¥åZSõ`sÍ8í‰åÜRйg R„ 2 2HWÿý‘H#·”w SölCM6ô4eNTQ5²[JT¡{ÍL—HW‚ŒsŽ`jŒá f|P0ˉ‘í3˜]C#|"É×;ö˜SÎ5l ‚9ÿQ ‹;ˆÐAA.HvN"N"ÔH#OŸ”K!fNn0‚Mâ=o¼±Éy–™æ>#¶éÔ¨ísN33òCh‚ІxŸ@†|Èh’KžÓ¤¡”½I[<¶Ì‹"‰üш9[~ˆk´ÿñ‡rø±b‹ü¸c‹*Ç\ÖaKm“M6Û ´Ï8×`S?/Â(#¨Ï‰ŠZ<—P`ɘR•dæø†ÔâGC‘Ö<íPP­r’fl‰)˜t0&ÂjƒF(”òÑbä1€Œ± ;½ao%À㘠@ÓZ—Pˆ"®PB‡½ÍCó®7ÏÖäæRãTÞít½I<æKœZö4v˜c;i¡d0cŽMÃÕ‹=æñ æ,…e™E­»°ãƒ ¡GÈŽcüÔƒðà g¡ CÀÃ2øðdàÁEP‚–ABvÜ¢­¸EÿAH ^b¶¢IèÒ«Úa«²…&4á*ÕDV§Ã'ˆ)]#Pyj„þù€u öB@~PСüð&b3  t ¦«hJ¤Ú‰£d ÿ{ð'ûlƒ•¤bz,BŸ£,Ê2¹´f5Ù°âUgW" 6“¹Æ Ñ: "lðÏ–0ƒ6Ôƒ9“d!‹[Ô-ÛÐØÖ´¶¢*¾¦Z[̱4-KBLÁF#ÜÐFh4¤‚Hªá©9¨ÂñèÍ»î2ý¹SüHDsâ8 Zô™AýÊ`–—š¦œ)*›„ƒ°ÑÓfPBpƒñ4²TU"h)Ý6ªX¬ÙQT,ôK ²¦F±ìâK*Ø´/§Øã˜$šÌQ2ET«»“Ãì§Å´5åžZ&×W§4«"",=Ù‚ a¦=Yœ$¨£¨ÿ4ÃHü¨G9>a‰)ÍNAúºÝLÇÒSVc:?]íXÑ-Õ ²…—SÎQŽë̓(aF â dHnYí±Îv6¥{¥u ¡Ë”2Ò°Qq ÛÆú¶)ûèiŒêQ%)âXì°õ·ÙÂR"ȽK‚ß+§5â+ipƒx%²^) ! Ú‘ >´Ñn¶ÁöhGÐ<ânPídЋs`7,ò»†¦j#°b8*‚o›"EÅæø6‘ˆî,¡2àr¡5Áðx°}߯´„–-˜‘“è’ªEõ¢¬'/“>lDEîŠ1¯”áÿR=øA%‘†F, KS~‹ÇH+ù¹~¹5£‚Ë5!ŒèŠ®Ñ6â3HÃ$,1‡5Èjðv4_+æmÃÅ2Ƙ´²ž¯ÐxK¢³Äö'¤3(Á!‰ÕÑž|˧3걸7fÒ-,œˆDYêÐiŽpCˆƒ¨`<Ðàðà.X¢u ŸÛâçÀÚï«õ\Êu/lJÔ¨¦qƒ|Ó ž6¬!)ø "ñ8PgDÝÜ’"jd%+WÄU[²•©‚›-ô‚јÅmá;å ìVäð†8ÀZo@à AˆŽbªÎPP¯¨øØWØÿ>µ¯'{¹èØQÌM„¾ 6Ì ¯"Ã,l!‹2„® }ø€¼Š¥hO=V<3›£S§¬‰yumì6¦Á„Cð^ðJ"^µ†7ˆñ†` Xü´ “¹$bŵ,Çž„^®}1³oß¶M O°Öét8„á€(T©Ñ/8À €(A@ Z˜ 2UtûÑÜsð•[¯åcaÇz¶aˆítâ°:†À ;‰d€Ä"ò„)D€çÅb“ôe’µ™5wéj;j íº[JðA>ð*ôœ°…;J')H`@P(àŽoHÀ YAËÈ[ÇJ*w,ãžðÿ”ž¡…Wh:ü: ‚è@Õ*æ<<P¡ À;´€€*dÅßÿpK¡[å ~™×tt —€ 0Z`E?BP pB g„µðz2ù' ÎÇ §3Z8…½#œÕJ(%gC™€UÔ UÐO€ ]`¾Ð5P>Ò¹0 0 IÄðt4]Ejà QQwè&´DTèCp ì° ¾ðXÀ pùñ p9ð°0TDk˜Uà dåÂCYhÁðA4” ” 'T…JÔD°Ô@ A@Àð R€à¥Ð Uð_0 F˜»óÛˆ ¾° ì@XðÈN0².×X*'f„@ t·wAx ³`3K aðahˆ6óc` ¹Ð²@­›€ Fà §€ [ ¥LÂ4ûÈÂÆÄBåóv@X‚Õ'†@ÿy £Æ P 1J›.Ø€ ½Fy85ñ’19y÷%'^Óà õ;œÐ>)J¤ä±çgc”e:h¡@¸çÒòi{QÈÀxA¸ å01ÿPfЙ žSN— ’#ÙWãP9wÑ9ÕxÑØî 0™ J×€±”@ Y€Tà|Õ@F ³p ŠÑF  [`OpŠ+H<;§8¦Æñ A² H†ðÿÿP ± *?P` ¶p Á° ˜p‰,M€6< L`2 b–‹á6Ætîÿ 2ÿ F`X°1D€•0Õb Á XÀ6`FàJ`…ð)oy˜Òá‰Qòa2À 牞ÿ  üà P œÆ–„1W`VÄý¹„‚&ùò”ŠAQÙ@ º'ž´  ,*œ™0¾€ŒU0a¡H( —0C CJðºÀ›ä,Ñ…29éžFe†QIžæÉ¢-úžà? )" ,à ·PŸX€7`CÀ;ÀÀÀhnà#ø&Œ@:ˆ¡}µ & K¹@ ›JmQ"ۆР¥Â© !P*08©d¨ô¨Öÿ™ŸH°‚PT¹µIm¿‚ØÓs:@a4&’Š’ ò€ F+ ¥Q* Ï€¨@ …CC`HpHP«µÊØõqMó!ö¢ Ѐ(%³ hìÔøËÁÿL‚[à ð ¡ ÌÌŒ0¡4J8@pµZ{ÔÀ>  âÀ˜’r+I»Æ,D ›Ù UPZ@Q cT`& ‚ôI@ðÇyÏWr°¢°ß¶‚°ÕS=H‚§)²~õZ:5Œ3“11…J³° F¦±ÊÖY:ýÙ§ɹ7@/Ó†a ÈËœ’)HŽá gL’#xEÔà -Ûùé Ô2°n¯–mY{Ò(Cc.WfÅ+Hš} ñ² ¼Ö:ëdS²¬þ†Ú»P¹$V¦‘%"´­–Ãã\κ}ŽŸ´¾­5À=;NÿðEþ¶1úYECpÉKþÑÍíeÊà«á<@¼Ìš œÝ¢Ú 3Ãñ2À3[PÞCð «ÝÚ’­liÀ*í…1ýÆNà9ÝQ§i¼´! l, è• Eóoö8T¯À £©* ¦WáÖ"@™Ù„q« ²©rFRÖÿ¬¶—p ¶ \Ù° mƒÕlEW€EÉ0B°ÔÀNßP hð8‹ T!#Ž¡@¦ãl´@ˆ¬O)Î$( ËàYS«Òà ×' ¶p ˜ðÒ㱬À b€ ƒàD¦*ËR¤”kîú“ó¼åR²k³ã0´ƒ4VÄ’`üÿp X@Αä˜À õG@ãPÊpZ¶V>{nL}îÔ®„Ò è^}E†þ£‰ÛüäÚ†0és£¤“3,ú³^)´¹ å .{†_ScEÛ  iŒž 0lîæ ˜·b 2±™½4þÃrÁbü@Š¢P4[ÃP âãC€ÖÕú¾0A[³ÄP 'Ðr@®°NÁ pZ³5ìúà´á*):î¹EÙ ÞMåµWd¬¡ JœH 0rp'+ì@æ²Âu¶ž–NÑëÒ FÒ?¤„FéŠ;U”Y14† E„P Ý‘€ } Zÿ` ݘ¥œ¸épßKè 3}¡Aåã]€h!Q[³ð… ?‚°S`úàk°™ì°<Ÿç¦ó¦'ê>_FÔÎ]5#‡[S,Hÿ8n°t¬}ÐROõ“‹¤Woïñ³ò— ò(ì·«Ì¡Q~@‹Ðò/óZP 5ßë8w‘AE• püƒ?l:V$ÔBàR,& âjñ_ñU†ïàOÃÏ—¬¼¹y³„ÖW0E)/Ž’K•ò‚ǰ ¨™=ô.,Ô üIŠõeÛåÖ›%Ò¨Zà±¢ÚÛÏý >Aï`Ÿ˜†ÁóGùÏ#ÿ§ZŒPÀN~õ"‹P^Ó1#ý6ïö%í°$üZj¹l% àÑá?þ¼– õƒú’F¨#~ö¤-4"m^»[,†4¡èíß?~5n䨱#;!·-œ7oá¶ü@f´G±É?n ù¡BÈB(P¶ÙóÓFР@mªñË&Ú¼`¾ Q€`гhP¼ùØҪǕW5](-›Õ¬ü¤!!{Æ Kã E*T’¸´5È_]ÿ<[±F….›]TH ާt Ár‰¢×Ñ¥OÁ7R7šoibQ¶íµ±GÖ8:5²#›üøÑ¸‰–JFšà\ß !@¢ x•«Šó‰÷0²ãßßÿp@ œÈˆ`‚!Ë#Ȳ"%ª€Ä_’ †Av( F ,L@@‚H@’`–Éèºí8Ò.E¬pm¡&”hâ ×¢’KNšG¯¯¤YϤ`ð„j¶¡ E3Z±É¢ ¼ðRb…Ö:ˆ²hgžÏš€â‰E°1g7$TˆB (Ø¢+iÒ¹Êèä.£ytkÂCl˜iˆµ‚áL™$ÿ@ÈrÐZ„1Ê{¨I‡*;£¬4»²É‰J31¦ˆ i’f›E˜xbšq*ƒ"›‘ØÑ!ÜXF8b$Žs”#èFoàÑ"gÌ#ý!ù,…Mk‡777~OCdXrif{V}ªkjŠkv„lwšuk…yzˆxw—g|¤v} Y‚®^…°{‚{ƒ”g…¬fвm¶y†§rްz—¹Ž_2¯t>•GJ‘ZhblŠu~h{š~l—yx®[[»]f©aA¬|\ºM¹{X©k{§yf¹bg¸iu´|kºr|Øy5ê|,êy8ñ}'ð|2Ü[[Ô^aÎd^Ê|OÉzVÜkOÚgV×wKÖxVÈdiÅksÈugÊrxØdfÖmqÞreÙwxãZWèfIåeXêyHèwWãgeåopæshäxx†mІv‡„{˜—m…–u‹™~”¥m€ªx‰¤}‘¶y†Ê|ƒå€y˜…x¾‚I¸‚W¬ˆg®‰xªzµŒg±q¹”t݃.Öƒ:ô…é…'ç‡5óˆ'ò‰4ò‘:ɆGljUÌ‘YÓ‰G×RÛ‘NÕ”XÍgÇžwÔ†gÛ€{×–hÜ‘yߣjاxë‡Fë†Wç–Jè™Uð‹Cñ–GðœUè…iå‚|é˜gê—wí \ð [è¢fíªuî±|ð¦gð«pú¶|ˆ…†††•˜ˆ†›„šœ’Œ™””‰Š¦‡•©ƒš¹—Š¢š–ªžœ²ˆ¡¼œ¦¹¨€€§†™£’„¡™˜º€Œ¹†’¸œ„¨Ž ©˜¦«ž°µ›¨¢ Ÿ½£Ž¸¦–­¬®ª§¶¦±¾¸¨¤²ª¹¾²§ˆ¢À˜­Å±Ç¡­Â¨¹Ë³»È±¿ÐºÇÓȃ‰ÉŒ’Ȅȑ˜Ø†‡Ú‘ÛšÔ––È›£É¥ŽÅ­™Î²—׬ƒÒ¬‘Ö±Ó³–Ω©Ë«³Ìº¨Ê¶¸×¥¦Õ½§Ý¸¹äƒƒæ–Šå™™ê¦‡å¤í¶‡ë»”奥軤帷ò­¬ó´¨ñ´³Ä»Å˸ÝÀ¦ÖôëÁûÀúÆ–êÆ§é̵éм÷Ì«ñÀ¾ùÒ«ûÕ±ÆÆÆÄÌ×ËÒÙÝÁÃÙÏÐ×ÙÜÛÞáÞàâåÄÄäÏÐç×ÈåÚØóÅÄõØÇôØØäßàåàÛýâÍôçÚåääîîðöéèþöíùùùÿÿ H° Áûî›'Oœ@…œ8±Å‹ZÌÈqbByÓñI”5jÖöû–hQ¾Ž7¤w-[?˜qêxΜ9r?éÑËVÎÞ?sà’‚ó·s_A{B…î,èt*Ìzæô!,‡ [Vzå’Öû§/©VœU‚5ÚìM«i)*œK·.]i…Æí#v„HžB…ª:ƒf^Â?gÂÙ]œÝÜfÍ ï{Ö ãËÄÌyZ!iòö)-\!Aƒ '$T&X;Îs+„,™²eØveÛÝŒ{ñ¼D…ç9ÒLŸ#JМ)îP3“.Èê­{µfÏàY£Ý»nuº¼»×ÿ‡±ŸhÍ–!b 2gÊ”“êÂ…t¸«ÏƒÌÿö\Òx#cßÍžxãñQ"ƒñ üáÇñíQH"³H—]óXó 5ñÔ%`€%‚ÏeBô‚‹!\!úáÍ8ˆÄçE2xáqÁ+â†p3â% Šš­È¢wóˆŽ4gü‘8ñ]àŠ:„ÀqA-=Â6Îg %’‘‹x¤Bº‰ƒFˆLSÇsLpj`B]o[¹>‚¹›‘cÞ92'ÞY~À±Åsœ4ÂEx¼3§@Ž#¤žu‰Ù;²¼ÒŠ!…쑈8OJ8Æf ±Gmèñaˆû¨#Ë)ÂHÿ£]ÕYsRJwz#Í4òì3"‰&R Ÿ—RrÁ$j0z`’‰£Ç]<ˆqü Dé\ªmða'™ ]Ç5¿‘X¨ ˆYŠÛ,; ǘ cÚ4 ]'Éíl§½h%‘ðaÈ*‘ÀqnBð<#¹ÛUdƒ|6Ž7še¥îâfß>x•"݈vRV%™8Áƒ 9,I _ —â^‹]e rD°û ’Wwì¦u¤}ïx†tžák]3ÔÈrA ðYB.Ã,Î;2¶_eÚ\·ÎûÀ£3Ï>ëõèž!ï+èÀª…‰H¶u3ºØr eÙEL $Ÿÿ’0sS³cé} ÏÄÍb1Æ’{ñ…“àW{˜wç™7ƒ‡óÇ ØY3 iŸŠíŒ!~í3v­ŽÓ˜¸³=Ú}‚ü3:â Çß3’Á‹8:ä =@ƒ3ó€‡2üC—%ä÷¹Ç‡Ž Zð‚Ì :„±Ò šüèg¿³qìv,"O§±ó©§zЃŽàÀ /͸lIçŠÓYL;(±‰)PAÚóâãòÄ=†G8D"ˆ@„?¼gHÃÐPö%ÄiXÚG-. 'ß4C>‚èÈ™ YjLŽÙΆPjàÃŒD $ý08¦áH„"@Á:r’1×Éwi î±H6óˆrž1ˆõ¼àBC ”`3„ãG$âÃ0¡Žv@0š£Æ3Ì—a6 ã$¦ŠÀˆJ…Èã8g|æáž7áhPÒ‚rÿˆ6p‹®p âøcîPƒ‰_lLiLUGàÎä‡Bœ>F0 Ð &dKrp…+f¡:ÈX£aL[Ú‡–XF“.Ôv°Ç!>Ó«Å|'$i@" zQ?ø4 ~ÔN! w˜æ[ƒ›üÊÙŒ…@¡– ÊNºLƒB— ^lì²%ÀLÒÓØÕL‘‰6¬Á a ÄÏȤÔÙ4u!ÖX"®¤Êõ‚Jûâeð¡ˆËùô _Êo¤‘E~F3„±€»6¼|±ÙÚI)£Ð„Dìp.]̯a¡¼³ª ™FŒð’ˆ‰jl«˜)‰±£}È#œ˜„wPÇŸ*ÿ†«¶•µËLAµ àÔô³—IÄ„œÄÓ4œ\‹G8ˆ]¶ˆ„8A5|á·™Yˆ8ÉYéáj1x ,:<:Hð& g ¬r;Ûºàc¦%’G’"dF0 §JVÜPKÈ.¢Wèð­^ã³D`• iÀ®Bð+^}Ä3>•PD©‰=Ì#\Ã"Àˆ=¤Á³µºUwÄ! Yí}ÒPR×yyÆèÝïx8K"qˆCBÑüàÎ`„¼U¨…!ÊðY´ÃÀìÜmÇ…¼hHžéÔ!´Ú.Ðjް‡°¤ððp± jBðI„7(†Eå`’àÑ+&%Yÿ6—EÜwƒ>¯Ïµâ÷¬Ü/m#!ˆ˜P¤¡œ3øA0 $&ñ3¼` e€O`”^Ô^ç6t½ yI†\üÒK² t“öaÑ÷\ ˜@$$¬RÈ–”Í¥–RÌlšKÙõtþr„ØàœÉŠHÃ{rꂨà8°ÁÖ`à‹–V–… f›1çÅÔÙ®ì£*fš»+Ïå7Œø"‰^2< fHA vÀG¨a Á9DNÿ`¶ÆtèKÈ7KYeks!UÛŒQ-`´<wdXƒ¹Ë0†6¨A8–Æð@b¢@j2j»Ä&J;¦%Î\®¼!õºqíÿ½“p Ñ-”á oØÂ¨¾ð Y¸ –CC>Є,˜b.ÏË…i[‡Â”1^R^êÝ^k8ãƒØG#²@¡BŒÊ jÀ"%q†1D €8%`¥k)„‰·±M;÷\ö.@KS¢1õ3Iƒ \Ø2UÔgä! L€Ø×’ÌÓ¶c½ä‡eÜqc1k9š`©„‘…-œ.\tˆ@#Q86¿€'°£¡ ¬èâ¸o^4pÍÚYEÐ>0ªä™…:4× 'Tà  >Ð \”± mRñ÷ Æ— œ#mr¦¦A"UJ—?Xs–0P°€ÏÐP€J0 Xºà4 =ö‘µð P P?´ç6t5"‰V€Át¸'DNHC@ è` º°S€ ë±  5°à`´CeÈP° $Ö"CS(½PA*D D ô„@4Dý• <Àí` M@8 Ð-`Æâ&~ÿ¸E@ &• (1™õv¾‚këR‚ )5§÷"—ÑQ¨î0 Uàγ€'Ð~'Ðj Wò1Üa 0˜p UðI‘Ÿð?ÐD•e‡ _>#rKHr˜~‘¨ µU} ‘ X‰Ï“:¢ P ZPpExÁ°ÃÕX º` èpS°¸•…M$r“'X¨[4<@tTF&;H ¯ð‡@Ò \ \@b˜5é#0 µ®pªà˜P B  ¤P V@m –KŠà õhº–´>ÀÚ£v6UWw'‚ ) ³™Àÿ›„ ÙÒ‹–q•PkkW’û@4 ‘’+Ùx)gÅYÐÈóP ä• 8©“œ¤ªWX”•µ9@Ž\s‘ûøzý8r‹q†·ƒðípmaY “ÃM”𹑉+sCP/u !9Zý!,v¡àŒé™$ ~€n{Ð öASðÆg,úÈ< Ÿð ³pH ¶`B ƒ .ˆÉbt‘;5ס˜–vîA®H‡ .ðÓ0 >  ¸P°² ¤Ð ·P ‘È<€C  ˆEpC)`‰o!€JÆ"Õ sÓ0 Á BÿpSà0@°’ÐŒÒÑ >0, 2 zP2“²„Ù åÐP±w$‚€ÕÐèðð½°–°º°ÃùZé‡#2ÀDG@ŸV€'Ÿ T¦סPÔ°Ÿ|f}½ñŸ: P –ຠŒPà ñ BØ ”ÐŽ?CE°¶°“,Ç¥, åpÚ4uñ9 Þ‰ ÿ'ú›à; à Ò ,° ³ÀžS03 ?p7€¼@hi0#òæˆ9ê‘Ñ¢ýU °€ ™„RípŽÖKʤj "*P7¡$ XîXÏ ŸC@‘ÿ‰®5Ih n¹Ö<”á¦ùsE !£hµð´ÐZÓ k°§|ú¾  „ÊUÀG&ô20°«‹Zb×3r.̲´ÆF¢˜±I·© 9§v‘-~˜Æâ(Jª¥ÊÇ&Ç <êÁJÎ9Dð J€®$·:$õópópJÝ/X‚›t¬‹¡•®=ÊP²E=&ʤöZ È§o20KÀH·ÓpPMõ+ëu"3`s1PÍЫù/øÆzï`,•@N°T 8Ëj¯[ ¬0ŒKŸHÀH׊­Ó` HðV #bV`'¢”ªŸüÉÀZ Âÿz%˜¡x€™° Ô¶±'Ú¤áŽ>Ð¥H€¨²:ÚÊ­ßæ3ñ•k×+Öà¦Þ$%Ô˜ª©sá‰Åù ™`*@ ø11v \°¤ ` Ðð›°D±J±:¡Hà Î`bµ\â£D¤ÿЋ٘Ċp*§uáé·˜ °'ðs6F0jú¤Ð M>€|Ÿ ïð Õ Ì9Â(ÓY«-™/)5® J mù 0¯atu±6²Ðƒ @ ›À?@mðn€ §  ʶ¨ú"Æ_ Á9Ïpüðà(E阎W“¾ Ù2èTmð¾XHмÿ°º`JäªMÄJm° óp´þ=³ù8ly³`»pÁt±6°à»¤@ Ћó° mÀË` p ° ¡ hó°?Pùœ9 ÎàœEÓö]T¥˜ Á8<„™‹Àí·Q öƒj°ˆ=P` °P@RtQ · Œ>P’ðª6ÊJE0ÅЙ¦mµÿiµCÙš|WÔ Ë‰î@ s°õG µ `@°Z»²ð;0<`šžðIK8C¼•%{„D¤ a‘Ò‘d ‘  ¢ÖÐ €P¤È8«IP½BÀ›`L”²ù†8B09lª«Ì8&¶Ò ÕV¬­e’€3¯ðË•P€Ë§ ÷Ð žpÇ /ï#ŒÃˆN Ñ Ôì5ùlÀÃÒ„x¨A½ J¢‡@$ Q¨C 2T “ðƒQ`ª€BPP/è€ à£ ¬<?   Ô<…º:ðÏzèÍÒf ™µŽ›Ë»ìÍÿ`ÉÐî\ÌǼ/™´I ø<0°êzÏ€:P Ý€Œm‚É"³†™¶vd˜ÐÔPPU POp'ðytI<°ÀIÏ=M´m`òQ{e1L–còÔQ­G|ç(®À|Íïª9R¼2Ã0'J¯p BÐ¥®ªÖùf9ïñ؉¡–t}$—åÒÛŒ²p»Å¹˜y´ºÐÅØDÏ  "‹ð© Ï@/Pn¦Fh@Xw Œ¬Ù'5#”½A»y”Ù”»Æ@k¢#N,ÅÊE€o¦} áK®†dPQ"ÛBCHßΰۗ份4½:IPEøæ0ñÿ¹D?0ÆKð¡Ê=eÅ«×WËG’Ù°ÙámŸ=1Ñw[ðà +cáý»Ú« ÙÂF 2^ so㔊 d÷º,â aì ÞE 6£oðJ´¬ œY*à¥_ÃÖ$P‘öØi`èp°“Q[–ÊWdcÍÏâ! ”@ ²À:Lc ^“ÑÌDR Ê•ð/>`Ï0NÚÐ~ @c€U~p„Ëb"Û@›³â—¬:8¬KÉÒ–Ø Æ Y «Í° Ïç 2^ ëp<› ¸MÐÓð’Ô)l–â˜F¸°®XÉ®síÔDØ “:aÃDæ û@ SÎ Qä•ÿ°‰`í§?ÞÅ QkYRÎvîKx.ÙzŽi|NWðÐDæ{œy-‚Sä š‚Ðèe£«ˆs2ë«5[ VÎÔùg±å&Õ0Ld —pÖ¸ Ì`Rípæi¾ yÜ1Á°°Ñ⣜ç—á]˜)Ÿ`3L#PÒ Þf-¼$œ@Lƒ¿ð€ Ð(mð« N½°âB æjpºà$ 6N 1m• ÓƒLÛWZ\ž J–ø ‰ðm€(@*ÜÒ<°×r6N3«N‹aëÍ` ;2?œÔEâÚ:KÄù&.‚E€ ʱŽ0 yðU0 ×X¥–Xé}ÿbËs1k¨³| AÚóR…OåqÔPð?~`N÷ f €¶aó@*¤HóöMk8Ÿð2|ÜŒ:‚—L“B/8i`j|y€Lïô•õt>õ½añÿ O Ï!¹nºKsQz¹y(¯ò,/ /oë2ßÈœ¡DE eœƒ1¼9LÔ>@RÒþ‚Ue°ð ÿð°Ëï«å LÓ'8®id¼«dÖRà@‰[‚T#ï| ¨šÎ³¶ò ̰ü ú /Ý#wP ½€*Pû ]ìbÁâü´®9ð°¯1ñ£oÂ{ž[ÑßqUÿP Ë N\?"‡°]Àq"÷¶î áõÅìýEõ°ËéÚoÀõÀÑKþâ8òEÑ €Ð(Ú7¯ÙA!Íज़ÅâˆÙþýÛWÑâEŒ3¢ÓØÑÚAxðZë¸cÅy‘üP±cÆ*|\²ÄÚ<=hüüéƒÚ>jÍžÁ륫х œ$c¶$[?Š%¥j<9ÕbЃͨI­º¯Ù°3dÈÀCX˜@Ú‰Ô“§Ï@Íî5[ò¬™®G $@yRÁU;eÙìEµZ¸kakÔ¨‘äzñ™Ê"`‰<£IËGÉ– hs³}K†@|‚`$‡GÓ=L¸ðÔï [4ÿ¨ ØCŠÐØAÊÖ)” jýzô­' h 5#¹$]Ëî›zc‹Ÿ©=ûÉŽ‰‘T‘$ Íó)‡,ñÁƒÉVµ (H":üùõïçßßÿ|Hˆ^zK!À’¢" hD]ŠêAt ꥊ)NX  `à‘^Œ©hºë0²®Dªhûì $Š@B ÏúAJF‚Ç®­š9o•š`á‚ $Øä™g¬ŠD+:1É‹ºzf ºè*b…ÎK†¨HžÍXB‰C¦ç¶!T`¢‚ .°"«fÊ™ˆÉàÄ®"xlCBCdx釳zÙ‡Kø£>ÀRpÿX|jžyž)*9›Œ´º‹¨© J -Bœhjˆf jÆšCŽPÂo"[‚š‡¸Q!:[›TÉYã´è y*Rn¯XÒE4…„Ú'‘D𹂰ª1é6ÅF­Èéj]RήpÕu^‘˜aóÎé™aÙL´õæ©pjDÒ*¨hgή‚Êšù,ñå‡mUºi¤R]$²óZ…gŸ ž7Ý­5±ÅLºHÔƒ¬pB9&òtq«?»Œ¬ˆ#ô0,Œ÷y ‰gþáÉ$ß• «ƒ¨9lkžY ˆž@!#:–†Î. -"²ûÊÐkžTeÄ@RWDŒæ IÇf éã…ÿ#ªI¤qDµ†\/Á:O—!Š˜Y$C¢h”QDÚª þ³?+5x´y¤)ä$¬§iÔ¥æçqÁZÂ\fEØšk“vÒ¶é„û¢‚ƒ »î»óÞ»ïÍñzU—E×ðŠW\áH ~º¦+©¢Û¢žºê«ÃIéœ M²ï` Z£ëah'¢Š:bÌåW?^q*A"Ѝ„#&1~kdcݸÆ}¼QŽQ™ã›êxÇ6Ú#{„V=&²G@ƒ¤!I4Ç8ü(È“NN‰s}š~l˜{y©^^ªyK¬|\ºM¹{X¨k{§yfºej·iu´|kºr|Ïr1Ü|6ìz/êy8ñ}'ð|2ËZ^Ü[[Ô^aÎd^Ê|OÉzVÜkOÚgV×xJÖxVÇciÅksÈugÊrxØdfÖmqÞreÙwxæ^MãWVèfIåeXêyHèwWäfeåopæshäxxˆm‰†v‡„{˜—m„—uŒ˜}“¥m€©x‰¤}‘µy†Ê{ƒå€y˜…x¾‚I¸‚W«‡g®‰xªzµŒg±q¸“s݃.Öƒ:ô…è„'ç†6óˆ(ò‰4ò‘:ʆGÇŠTÌ‘YÓ‰GØŽRÛ‘NÕ“WÍgÅyÔ†gÛ€{×–hÚ’{Σ}ߣjاxëˆGë†Wè—Kè™Uð‹Cñ–GðœVé„hå‚{é™gé•wí [ð [é£gìªuí±|ð¦gð«p‡‡‡†…•™‰…›…šœ’Œ–••‰Š¦ˆ–©ƒš¹—Š¢š—ªšœ±ˆ¡¼œ¦¹¨€€§†™£’„£˜—¹‚Œº†’¶‡·“¨Ž ©˜¦«ž°´š©¢ Ÿ½£Ž¹§˜§¦§¨©·¦±¾·¨§±¬¼¾²§¶¶¶ˆ¢À˜­Å±Ç ­Ã¨¹Ë³¼É±¿Ð¹ÆÔɃ‰Ê‹“Èœ„È‘˜Ø†‡Ú‘ØšÔ––Çš£É¥ŽÅ­™×¬ƒÒ®Õ²Õ´—Í©©Ì«³Ëº©É¶¸×¦§Ø½¤Ü¸¹äƒƒç—‰å™™ê¦†å¤œí¶‡ë»”奥黣帷ó¬­ó´´Ä»Å˸ÛÁ©ÙÇ·ëÁðÁ”êÆ§é̵éмôͧñÀ¿øÑ«÷Ö·ÇÆÇÄÌ×ÊÒÚÚÅÅÛÛÛÈÓàÛÞáÞàâåÄÄäÏÐç×ÈåÚÙòÄÄòÝÉõØØåßàæáÛøàÉóæÙåååîîðîñööêéÿöïþþþÿÿ H° Aúê[·a J”¸n¢Å‹+bÜhP#Çÿ<‚ä(räÅ’&'¢LI‘åÇ„ë2„“¡>ˆS¢ŒèRàÊžª:”hG£G‘ü©çÂ…5c†Œª³ Âœ.™ÕÚ“kצAÁ†ë“,Áˆëâu÷-Ì™PMŠŒÈ“¥W»dïâ«W®Ù¾.sR£Æ-‘"Eùjf\v V¬Uùæý;Yre³÷ ,GO_?zåðÕ…hòæ@ÍQ³4 –ñGׯ/7…M³c}÷ÆuNHïžï« oÝb÷ò,pÖ)‘+¥‘ysÙË)¿ê5F—ž§Ž¦TÈ!šÐ8c%™8±C --IGë“A$¯NìÌÁΤÿýNBïrº %bˆ8Wì×È$Ϲµã…;ÔF…•ˬÏÄÕÐ’Á ìàL¿rÓŽ;wŸ)OÂÚL¼„3'-8áúޏªl‚ oÈ3¾•¥R¦Ë9p0ˇ„ý®Ž0/¸ä’64=#L $B£R´!à@]>ì9³ÄëO#<ÈÔUÓNf{×¼÷~rë`r$fœqFØ*$OÚ}ËcJxìÖ0fA jÐàžòôV1y¢oxC†»F¥¯}¿ó]V¸F§K¹ƒ™€C±/Ct 8:ÄŽˆ~­ƒZy˜Ò”_TLÛêÖB0á…/xaéIúÿFR2‚шˠ“«Êyƒ{à!úvŽÁLXáp«µ½õ:ÂC‡ç0Ñ!ZˆIT"7˜F«äjl‡ã^8Ž ŠA£_: ‡<®ñŒ=DC@òxÇ2bw±%$è1c¬tǾ5jÍ}ê[JLîsŽJZò’˜¼ä0ø‡JÚ¡tP†2‚€Ðáyà1è ¡ÇÈd%k±ŠUÔB–—<%)Zàò—À¬ä[ÜCÌbó˜ÈL¦2—ÉÌf:ó™ÐŒf3ݘ«‹I¨G8°ª±$ áuÑ„øÊ:ž0!ž;O…°–0ޱŒ\ä××ÈzŠl‰·y£< Çÿ‡@,¡ŠKxåö „#üÁ.xA ŒP„%2! «P:-dJlb TDãYGªÑ‘Œ¼g$'òƈu¯<"A"¢.¸ ÐP„-êÃscÒÇ-2@¨ê¬.=Bz!v^Å£_i#RÙˆO‡”C8[ŠP{¢¥€8CLÿ@…zëàPÄ"@‘H},¬§Ô™ô|vÎüu4 9bcšŠFºÖõ}Oå^Bä! :BƒE B a?4¼@ F08XÕ¡>¬éX"3±×j@£Š AX¿œ„Ër”]!}œ]÷3RÑn$¯JH<°Ð"´àò@êZ4ÿTÉ@òˆ"ÚÀ u‚=]¤X}4»9o¾n{EUÜ]AZHÒS¤`C-¦Á 4äé†8Î`#¸ ñÈcBÌ$XÀ¢ DØ5”æŒí©•›ßô™·ôVÈÄU©KÍos‹+õ„#BÓ —º€C E¤ ‰ ®vÿÀà4üAÓx*hј¡é>TÂô¡<ãþM{€¬¯~j3ZÒ2w¹'V5ìg¿4´5µÀ1S‡fúùP#BɈDÖà…0"Ž 9G†3댽^£›ó±]ÔÍÉÅö„n”ù;åƒPç‹h1ƒÏ ˆSGÓPÄJÏŽªÂ^€`ÞðÄ«œCÿyëMrâ´.ÎwCRÄñœ ÚyF×¾&+íG«<èFБ"¬›.7cJFôppbÙ .q¯ÂÀöÚ'BÃÚ†‹Üg(®Ká iŸ»êþG0Ê’‚ÓÐè «GàÐ#¸¦æ:L áHD!ÔðR§V–Åìqrxç+/Š{âíè~ ’@#¿~–2¡©©E" g3¸ìeLE(Ïñ Ò‚ÁF˜aYùRÄ E|©QsÏÞÒÎväcí¹ :©ÿøic8E°˜ i0v·­5.ÕVŽÁÅbbѰy ƒ cØÂÁ‡4ðHÌ®S8x­+N£@ÿ.õ}ßgœ¢”x#r ¶r•x¼Üòþ²ž3Žbžâ.Zpƒ*Üâeø-Öað.Ûzfóô…tä!#UXˆx1ªIŒ×­‡ååÏ{Ø»~0‹Ù¦WÑQ¨&!OÁh»Šð†ýÀ`*è@} ƒ"Èu%§§¶ÎêÐÑźÅ#›âÊ祙/þĦ&éS³ÂÁ( ÓwŒ¦á2@bo0C ÖP†í¦Á0J9~&;%Û'Úg{úÏj*·ZÛ¸ßwIƒŸDÄZÙ%Ãvgë D¢-(CXl¿?lqõ°œÔ__·r½ ÆO¦ý¶™ y§ø©j/³ÿ!fšo," Â?0 LpÜ cXƒÁµKnGã0av¼„¯EÙgßûÛ§_úf{·'yDZk çS;×!Qt?àF}‚f`& )àj°ã‡·s{ ßó=ß-Bu¢zÊ¥}¹G€…V€0heÇaM£÷Àp|Çbbe0m  0÷¢cÖ)§ Q×Mß”02r×1+€-ø‚.(p߇BdV>µf¸k†ÐZ°|o°Çò±@ °õƒzÐM§p6´VÞ´V›öF"&€‘ƒZ€ÓÆm ¡& ¡#˜-8ô G@úÿÐY`?†p,f êD ƒpc00AH ²0&£Þ;~óT}8ˆ~ø‡XØŠ®Hˆiâwˆè1®SJ ˜'ÓÀ\À}À+ z}0 ç! Ó/ÝdŠÑWR©8€¯È}µˆ‚Hs Q$âg>ë!_ƒ@GšÀÈ2 Y°£Õ@ЈP;àÀ†à }Ó3y=£ƒŠUÈuÝg…€h׋iÕ§.¬ç/EXÐDzz™@ é°WÎà ;pé  ߃0N(@Du)ÓÈŠØx…É’-i€˜. h'ËP­ÏÿðJ:à#P=`/eõ›Ð ð € UÐPð="8‚%Xsà +ù¦’/«\™OOU ”ЀUàM:–=0 À=ð @‚Jù © üƒ—0ã!mF_ýsŽÇ‚_IÕ–o„:` Si H Ô€nÉ žSAtèp ±PÐàKúÀYѨd¢òÑ!‰è1Šç•‰©Š´‰˜+¹6LºY @ çp ¼ SpÀÅÀ4 €•¤KÑéP° –K¿¿PI©T •T œÿ¤›ä‰Òtžè™žê¹žìÙžÇDu‚ ;ë` M07 Ð+Pö(ôéN@ ê¥ { ;ùG·{‚›þ8[9›ZY¡Ô–»²†é‚ÐbëЛéеP=PCiIFI+  &bà a€ —P^ä èð >àß4g0ƒéf8ùãVƒ9vÿ8¡Ùh˜‡‰õr‰¼u'y™ NjCÞ“Y0 »j é¤#}AŒ€¥•À ×p0:ð£K0gŒÕ!ˆð…Ô‘’Nj¡Z›}ê§íÔ#b4; ‡û¨. I ±ÀOÿóCÒ \ \`Ι:X$0 ·€°«Ð˜P AÀ ¥P Và wVbå xš§I F¡]ɤ.é‡ aHúÐ;D§XnÇÁ!} (ƒ0 P©ÃP}™0Â<µ0:ú7P Ó'ƒ©r1s2p³J«’w©’«»š½êªê^\1A €·mª ¬Ì Yõ;¨#­s¶?sGç3{·Ñ¯×¦­Ûª¤² ¨úàN„j¨Z§WùQ¬b ë0xဩšz òY”ð£Zª§:_Êu †ÿçþúuKJ˜b×xtòs”0¥S¥þWéPÿp³SÓðÖõp T0O€‘öB¨;°Að ±P ƒA€ VJ@ô¤ê$û¯'+°M*›ª´†ëà¡!«°ùш …š‡ˆP V°i©Pд@ ¥ð ¹P š;€CiyEpV›{Å?ú:bNWתjYˆ¡·)ƒyEoÔa ph Ö f A@S°4?Ð’ ¡öB ¿ÐS1A°E‚P$Œò±ÂŸNU))«²[Ë»[Èo4h` A fPAЖ ¼°uËéô)=RÞt±kÞÆkUK…P‡\œÿƒ»'Q˜^+¹˵§F­Á;¼ a ÿð Éë¼ð£PàÒ"½§ù3pê¯T:€ ú0SçRk"Ò«v¾¾;°ºÀ ŒZf+ ‰º¨Ô‡ƒñ &À$ &ÐÀ°GΛP ©;S 1àG`7à ™W~âÀG*1¨Jgž†À.°¶©Ã;ügot ²€ 9•‚¥ëÀ¶¢§ÿÿÀ 0–PpÌTA–U§E¸­;†Ë³‰@i3… c4Ä?õáú»»rÂÃ=¬˜u’NP!ù±çq î` “f ƒ0ºðàÄ¿À<ÕpÅ;PUJ>ÿC CðÈ|¼¦„µS,GÃ/¬i±£Æ±ªÀ{:¹_Ä]‚«Ð©EL CŸ a/ß*€È!ñ ë°ƒ £°?PBP€;D J€U5$–l$âe(Èf1^§\«~úÉæk«o”2cr;¥Ê4Û%8´ €i0q¯ ËËo3‚1 KÐRNXÔP HPdæ2n„!ä$šÜoÖJ¾Ü¹œÜÌ0Y')“çÊöáöR Tà @ÈåÊðаü S° ÆÕºHÐR½ìËÔp ïìp¨w""rÆÄµo%ëož Íý¬µ¿['; ·PÊb’éÿ0–e™ ½pà Ѱ Sð£=€ÂH°ÅüÈÀ,Ìeg8èc3_8³=&µ&›Òå»ÒS=°ì0ʹ"Çt z·± Vp¥PCw  ÎíÄ¡`ð›ÐMLl½Hð Ï0…ã•kSÀ©ùEV6IRÒ][Õόتȳ§¼"BLÄÇ¥6 Ð$à•4F0‚¢lÝÖÿð ž@ î ÆEGà·2ð£„[¸”\ná‹l9ìFâ¸úŒ²n¬ÒùÓìšPï¡H !<´ š P ›@˨*-àÌÀ ðÊËÁ7 »S)?¯ÿ4Ô{pÞËaQWÒLD3áÏülÕ†íÌ=\·€ÅúØûzb“2Fù™púMÍ á€êPÝ‘p ð¬Ð¼ýã3¸@ËÝT6€ ¨RÄ-ÍöÀøÚ?öõŒû¸¹=¾lÜÆßò³|H÷ù½0SÐYuÐ̰ÐÄÿ@4°ü=pcËiK°Èß4UmÀ ò0ÔtD1söÀY‰Žñ©âkÜ»?L¡¾]  ±'~Â# È] ”p:*ÌÐlÀ –`1ÐÄÐ Ëð ýW=^¦¸80ϸE ásÃØ—ät1I£ááNÞä»­ÒûÐØ7ÿKßõ­ñs6ëFÙQ  e”j° `æP Èë  Çq ¹ÔU ŒÜ¿SUs` ëàz©HÃdX!è…¾Ï|ÊÛÿÕj ¼Ç¶´@å”@y íP s€ Àž  —i^Ýÿ@>¢´ð: ;µžàEíË7€bþÔ3Ë.ûpT³~µþá ~ëºíÆLo Z!è€H–€0ÊpNÐÍ€ pª ÇÐ3­S°Ýä¼ VàMïü=7p@s€@ÀçH^¨ñçÃÞÙ åQîÞºþÆ›+Ûò ŽÊ“v«}± ï|k” ©ÿ`S€¿› ? ¤•Ýðð®ô"ûdÑRqÕ òJ¯ØˆyÛå)K¿ TBÕÀD ½iI0AK·0 ¤yP` ¬ÐUp£•„ ÐNûÞ>>À •$ ÿ›¼€9ðô–4LîÙ÷~ÿ÷€øÉŸâ4ÇЗÕ¥´PïÉ—V  ëà UpP §^ð;u–>°2ðÈù 7ÆÐ yp*ã="ê^ôEÏñ0!¾ÑœØ¸ʲÏD—’B6­(¯N˜°ÕPPU€\PO@$ð…Nr{q Ô€ûMKÐf |eÀˆ@A}¬TNÿeîþîT þ \R¶ïzêñBk˜*°àìï° ?=þ6L8ëT± A€Â‹<Ð_?Âdž§Oß9ƒ &ü§oÝC}ÿ$648‘â¿u-n䨱ã:!Er9Ҥǒ'UNL¹reK“ eÎ4xÍ™³wÇn^£Ù“„ ´hU€@«¦3^ïÞí„vÓ’%Ðxň U^Ј´HsF ¯h¦)ÂS°§Á}zÔR£Ë‘0áÆ«RnÝxOÞ yÖoµ›AœUó;“RQƒ?)|ÌàÒ%7«A[ÕÇ"”¯æG„ 3¡Ï€&óÇCf{Rt‘­k·®õ’œÿM·6ÊÛ¸sç]Yøìµj¿xú^xب>ÅŒ9Ö·4‰3y)C #He28{Íh¯ˆä3d(ºïŒ"f”½£{ÚðYÊŸO_"ß×Äi"Ô¯ðgСÓǦ¤ ‹,!ÀÞf‡¬È·^´âê«3Ò(œƒ¦1Cy®škÎS¢‘ J>ünKq¶õjÑE— »EYnÙ¯¿…``G`®àsf "—¨æjˆl%“v¨â„|ˆl‰6B¡Œ¯ÈH#ºs1$}šr š™N´Í¢µ`´ï=û^¬ËÍ7c<‹– êÌฅøÃ1!Z(¡„ÀœªæÀ¦´êPÿ)È ’´âÃk´i BC´?¡C¹Ç&hä‘§©áX3S$˜bqM6Q\ι`=ë– `AçX2°1Ï=g² §¥–“g§w bg6¹ `ú¬DóÖq¢Utñ ‰.¨$ @NȘÞyÌ2#2÷-TѬ(ÍXY…Õ¥w_rWNšdÑÕ Ze‘IÏ^ÄiÜ_–*÷«ô©“gô)e á ’´}9dR}4ôcÎl8›ûgŸÖÚKw¢·Ð…+^yÛ|uÞÞz²wWt2З×~Jà¥k*ƒ3 š&#LRK"„âD ç „‚­&Pqï{(eÿµd3^–]Uyå–i¢–[p½—æšö¦c†uæšb­ºæ’tðaîMšÙIZj­mào:½‡é„~Ý©"Ù¹êsEÆšk­w<¦9í¼s&~}ûq¸vh‰å!C(X§°Ó¡QtàEžœï †h¢=Úø‚•É~ÇfɲˆÄ3¿zñ­we»èíiÆoÔ/PÉÚ¡ÄÎJvpy&»æšÊ0«Â“ SŠ\Ei£„Æ0£ ôyØa ï•4M‡Øëñڈߋqùì7IÖ²·ü¦ï9È:脉v¤rjKBg¤› zD4¾³GC-¨ÿ)~q“0X¥jD ·ýNx»IaHZèBãõ«rg¹Ysœq $$@‡’³0é&V‰L5Â'2ýÁ Nˆ‚=ö`†Hdàáª!Mô’Äw»Ã_þº8¼¬¤þ+Lo˜CƒØ+>TßQ‘'G$LÌЀ&ê Qœ"NÌè1-f‹[¼ÏÁÜ¡9Z°g˜—ÒF'',Ê)ƒÑÇ= ‘†?Hð}F*jQ»Û®P7ùň âMŒ€óœõ›¨šÆY"Fêg•ƒSc0„Ò® ÓúD¯¿é¥Š ›AP7$¶é,#X,a7ÍiËYV/弩3Jœ?ö„_p¬B|•4 ãªF8 ë)Âë4l×´ì!A\¢ ¤k)ÎD^ô–b«JÒ¹¼kZ‘r !â#2Ф*•©ñ˜  œ4,‚žÁ :j‘‚£k \ dJNت°â”¢dÍi×j¦Nÿ™ltmB%æ¡|7”î=¸ ‘B´4ü~@C4°I®wü‚ÈÀàddŸë‚¨ s³ž0’S§;Ååž +æÍ¶£úpƱ† ªÜà18Vé~°Ž¥ìA~D œa!5…h ð„ ÀBKBÕÕû.#R\Y«ÛÝúN†8ºœ_ø¥I«áXG8‚~eЄ¸=B•„ *“0òZå h€$ËZtk Ãd{I¢*½¼åTðUìªâ˚ǎ±£Ã:ÔG‡€Aa:(.|0JXe0ÖG‚sñ„IiC2À±ܶ,Z…^ýYe³áCvÿØ¢JVWÙ~â„x2Dz t à ¡ ’‚‡ä@y|t =ØЊ[@aRGÕY+_d¦"û”%B^,“ã4Ñ ä{æsŸýüg@ZЃþóQƒð‹_«{Ǫ Š…FªýE÷Îa•_Ta $hÀ(€<âÇàó»yjT§ZÕ«fu«]ýjXÇZÖ³¦5¬7rVb F3×’ ±šB˜§8ƒ®KA*@M@JD´}3‘u7—¶G½À{o’í,ß\æZ× ¡Ì†T耹T‰¨€Ž7Q ˆ F8L|&à0VØ'4À1 zt•Îÿ÷aïµO’Ø€ÛÃß>Yn1êdq·”`%æ4”2ëæ64ÞŽ>B·ú`Ü!Ä`²¹D %ìÁå¸G7ò<ðØ´†dGgD^2šÛÖÛf8®#>Ï$ ‘Ó–¨Î œÐ òBg'ˆ8‚žá ý)Ç*Ö5­Q„@„#æ˜F<Ò³mÄâÛ6¿ˆØ—Ìs´§]=?ý9AhI©£¸—åEÒ1E8ã Õ8–5òѧMVÏ(‚4"rn¸œÈ*4;½äw‘ª©‹Ûjo,ckñ¶»:po€Ü‘ tÙwW„"*CÞ! öÒC8’dª¡„"ø½ŸÌà†7ãv™ÔÅD™ÿ‰Âïgù…÷œí?ç`8y 5[ÙÑÁ¡B´ôþ"úuàÔ‡ .Á-aŠÀ=RórÛbxíWK•ÁyŸsÄR^E?”E\_~©í&V˜V˜%_ëlãú-ÂörÖ#7«€ A„{àºÂZ$$»¼&cˆœÜÛŸ›<õ»<÷ëŸàª†ò ùx‚À#ð¿ix 82®"Ð/Žâ2.gjøTËÇ[$ø±6ö*WZ@°ªÀàë¶ö›¯1’,æPÔY Š?h#°© LB=¨8ą̂žòzÀ2𻵊§¾øºuÑ63áA’ÙÁœ+¿Ûû=ÿ†k8ÇB L+gh(ÜqA(/yÐ#@‚kpªipš<=Á’‡ÕK’ĦÔãB1䈶€¼Ÿ1D“¥&;Cö $š9ƒ»³6¤À ·12#:4À¸B=äC?Œ·;,/#9Â(DòÒ¾[E<FüBõŠ ë ›’/p[ÃBš¹È;»óA/ļþ!B… ƒø(gPB&tÂÔ³8,cI½j°Â"ÀB$ÐÂCäÂÃZ"Û½+²ÝAµÄaaÆ`tDwtÃN¤ŸBÆ8=Á®„‘Ì@#pÓ0„Œ·z¢B3.¹|4µ S@‘q@s$õ¨°©1;ôbCÿtaG݈ÇâyCP|¿e"£p¡§¨ j˜†iÀ h¨†¬2_[‚NÂ&"i3…4ÃúÐD™€HT™)š¢È ÃÉZ1ŒÌH t/¼ÀˆãÐÉšÀ¤ª# ãK­·; ž|³Jt¨Ÿt¡SSGÈ;?ß㢬³¢¬¼yDJq«СəXÊÍ{»>ŠIª¬-¶h ±3¡w”Ä­ÊaŒ¼ÆkGøpˆ ôD4Ë\k¤i;‹ê‘ópË\ ¿Ç»¾œ¹n’9úÙ˲3Çžº-rÔH6,K8$¾Ÿ‹ÊT:ÌÞ³Ì×À¯Tǵ¿‹¨°Û[ÍÉä)\D?Á$Ë£ ͤü9#¢˜ ”ÿ6«)¹ôÂB:¿,GÝѰ…ÜÉåŒ@°„À‡ ÛÜHà;F±'Ãx(H>4ˆ§8”|N:kDœkHó³E©ÁÄ[«LœTœqMF|(õ˱´@Ý<ËŸK¶k૨ž_»%èF´¸ÌÔ¬AÈÆ×ìÂø”O›¼IäJtbÐéüÌú¼EzÜ͈ëσ¨Œ*Ó™kp ‹Ϭ”³uÔ"ÀäÖ|%š’ÀèÜ6]\Î¥Ná»PüÌP$à} ŽQmQÍÍ‹Lª¤ ΠD y2ÂÏMÔ¹büDßÊæãQ¾ÍKÖäÈ•<C½mÐØuÝài×R–Çæ%eLváT.âNneJ6aþmYþc?æ%®åy^íØbmd9©š2fà»`ÿý_ –æ~¸lÔ0df\ZçüÌo¾åaçbþÜpÚ­5+²Eå;6BÕÚ=6åj¶æYþÞyÅHÚÔÛ^žZ¬Œæ#}ÙvžçS¦gó fjÆeÒË1僮gè=cˆ&èÿ[TåÜeç„S¿…>ÙŠ¾àLŽèþèdÎ_ùØdŒæBîA€&cŽ6\&;g¢äÌEýK%5Óm¯2þgr.gb¶åÔ¤åÝøåŸŽiû4Ï<h1öhîè¤Vj;étj7½i”Îiž–h¤nj–ê„Fèw\…ýj°k±k².k³®5cöé–g¦Æêq>âº]Ñꣶê«Îj‡~è¥väèçöœê•~k»Þk^kµnѹÜç• è´¶çÁvë¦êÃ~Põzf£îâ¶ÎlÁ†ìÈ~ì‰^e¿llÍîlÏÆkÞlÂÞË"³ìËíÓvlÎfëѮꞭìÀ–lØŽmÔÖíÿÝžm_|é¼Þlß–má6í×®dèláà&mÞÎmã¾ëç.íâŽn&&îéfîáîmênn½žfà>î–îë¦mîFîoñ&ïìvîñ¶nì^nåï†no÷®oíÞnÑ6ïô¶oö¦ïþVïõÆoð÷öïÿæïî.ï_pGpýNmGoŸððùnp oè6pðÏðïÆíÿp¿o 7q?ñ _ñ'q×ð OqŸq/qœ¾m¯qgñWñq¯ëýÞñ÷q ð‡ïñ Çl$¿ðçq?ò'‡q —r(or'—o+¿ò$Ÿr*ó.r"ÿrÿ1_r/7ó(Wó5?ógò2s7ì!s#Ïr-wm/òk@tAtB/t…Ío9¿ó1wq,_ô9§óê¶s¯ô*wtE×ôMsK¿tFgó>WéóõDoóNõP÷ôGr2‡ôV—tWõ$ŽuYÿô\×uL§ôZWuN_õ]·õ[GtTOuZgu\ßraö=Gödwv`öRÇñ:ïu_—öL7uïþõk'õh‡u^÷Q‡ölÇvp?wfŸvo÷ugwu/öq—wb×s8wzöcß÷vÇw{ÿvsG÷zgín×öjtwx…_xjOø|‡wÿr/÷f÷ƒ/xƒ÷w‚¿ln·xŠ÷w?xkŸõ‹ÇøSçwe—x“'ù’ïwgx–O÷–‡øŽWyŽŸy˜wù—ù•?ùzÿø‰x™Çù‘ùœOù¡úˆïyžÿy wxŸgú§ßöÖþw‘?z£·ù›¿ú¦wú¢ox§ßxc÷z¢ïúНyª_v¬×ú³G{µú²Wr²_ú ßúy_ûºw{{.ïrFè{¿ÿ{À|Á|Â/|Ã?|ÄO|Å_|Æo|Ç|È|ÉŸüÁ—FX“ËÇ|Í·ÌçüͧÎý©ÿ‡Ð‡Ò7ýÏ·|V9ýÝ`ýÜpý×}د٧ýÔGýÛwÿÚ׋Ýç}ÙÏ}ÝþØþÛèýº0þãýsX“åg~ç·æ‡þç§è§þÑ¿~ìÏ~íß~îï~ïÿ~ðñûWx…†0ˆ„Û(ÿó—ˆHPìWH…ûPûÿ‡TJևΠèûwN€€Wÿ2lèÐ!Á†Ö-Èè!FŒ¯R-Ôgqaª3’ü§ïbÅ &,™q@ E¦Déò!#„Y¢ ‘a€›.õH À¿ç(š‘¨QúR`éô¡Ç(µ¾°né+A¯.Œ@@ŪÿˆttäÕs¤2dàÜ?çD"kR,Êë¤+ÿÖï?³hó 8(³í[¿ ì¥Ìô°^¾~© €ÑÞH†Ç. @q]‚_‰.d$õÂuHÙ®À‘5ê¬Wtýš.Ùœ‹›d:¼éÕ°À÷Ve[0¤_ÝÅõ­[çñ7\§Â ¸˜óÕqÉ3 `§ ¬Ž´Ç’'¿xRä¨ç €÷?ð°´¹sûp‘~‰ ¤žiˆØB‘¼f@_ˆWUc¸áç×€ÿÈæŸW¶•vYvUß+V¡_ƒEâá?UÍv!†¤Åb‚Üá%àbEÖ~ùÝ€¤ÍGàbÒ˜S %“‰y©ç]Õ–Š…‹a¸[”–†¤PNÿ–U“é!6W_4.›•W¥b_AúPTRÂU#lîµxf^¯ÁfHÉÖc†ø à J³ùU g§Ø’„ çßRw¥†³ùV(jÒ¥O‹Ê'B#eèœWÿLêU7¶¨ç¨†¶Ø£Am†] ¢¶”[w½¢Õd€n5 TKm§àbg‘wä I|Iá%ÖQŸ:5êdk¾",B™—P¶ÉFQíöY¶Ð2å—“‘·T{×’›&—ˆÉõyÒ*¸.H£îwmGøæg'bë¨ÇÁŒôÓD°ÙÒH®=yè×5–ž)>éJÛ*ÔI+Dqj;IÁŒ¬S2^ Ãÿº2Ë-»ü2Ì1Ë<3Í5Û|3Î9ë¼3Ï=ûü3ÐA =4ÑE}4ÒI+½4ÓM;ý4ÔQK=5ÕM‡uZ“Uk½5×0uã›]‹=6ÙW}Í¥ ž˜žG5%ÜÇÒôp}] G®è!LàÅ[6àßtÔ@b!E_}õ—S²õyÄá]GqâÉvÉš„kW$vÕßß‚‹>zYý™Ž”¥¡ž`â©PÙŸÀÉÅÑ›K帷ý©«}]UL:ðÀŸ”TÉ¢ÍÖbkögÚé²Ó­ñÄ'Õ¹]sqzzBç¿=éÇ:[¨?ImE¥îÑ9³/ÛXýÑ {}hÕ÷×+]©ÿÊ=þe{”]¦÷}üêÈ¥ïtAé_æ¾7õErýI…ýò'A²ƒ#IEOÈ3°¦\‡2ùòàì– ÖÅn\År²ÐM°….LL³^(ò,$,¤!s¨Ãò°‡>ü!ƒ(Ä!±ˆF<"“¨Ä%2±‰N|"£(Å)R±ŠV¼"³¨Å-r±‹^ü"Ã(Æ1’±Œf<#Ó¨Æ5²‹Õy#ã(Ç9Ò±Žv¼#ó¨Ç=ò±~ü# )ÈA²Ž8$"©ÈE2²‘Ž|$$#)Iôhc+³ä%c†IXmr?ô$I&)ÊQ’²”‘¬$Ì> U¢†•K¥&ÿCiÊYÒ²–ŽDåË\™¢XÂ2—¼Äˆ-ƒ)ÌYâÒeº$Ë1¯’L§,ó&Ít¦,‡)ÍiÞ”¾ìå5³Ù²gº¤“Ôü&8YÌmþÒ˜åd7KâÍp²s˜ãDç9á‰MrÎÓ!í¼§-ß™ÉzÊS›ý4gFð)PSê““ñܧ? P`´¡“,(D#jÍ„”Ÿ q(F!)ÑV´¢Ý(GšÑ‘.¤»´¨GJÏþƒ¤.E¤I‘Ùјʔ¥}ÈK_JSfÎô¦+ý)P’S—îT(é$ÉQ_ÒÓ²t¨$-*4Q Õ¨ª4¨ujF§ªÎ¥2µª µêB°šUŸ~õŸ`Õ*R¹úÿJ©’µ¬)=k[ßêV¹Î­iekWáºJµÖ”¥dø+`+ØÁ¶°†=,b«ØÅ26±þè&_ûêUºRö½,f3«ÙÍnö±[Åk^ÍZ׸Z–³¦=-jS‹XÏÞÕ¦{íIýªÚÙÒ¶¶—e­RaÛÉÚ5·±-pƒ+Ü¿â#I5nd•©[É:d¸Î}îi‹ûãN7¹4¢­èE3ºÑu&´£#-éISºÒ–®4¤/­éMsºÓžžt¦?-êQ“ºÔ¦B¨O­êU³ºÕ€Nµ«c-ëYÇÖ´¾5®s­i[ëº×¾þu¡y ìa»Ør¶±“­ì_#{ÙÎ~v­¡-íi˺ÙÔ¾6¶-míls»ÛŠÞ¶·Ã-n?ƒ{Üæ>7Ëîu³Õ!ù,†PƒC‡ 000QQQPTm_b{nnn]v‘Mx¨llˆiw‹jx™}oŠyzˆyw˜g|¤v} Y‚®_…°~ƒŒ{ƒ“h…ªfгm¶y‡¨rްz—¹§o:]j—y_‰f{‰s{“hh—}k˜{y¬|\ºM¹{X©l{§yf½ch·iu´|kºr|Ü|6ìz/êy8ñ}'ð|2Ü[[Ô]aÎd^Ê|OÉzVÜkOÚgV×wKÖxVÇdiÅksÈugÊrxØdfÖmqÞreÙxxãZXèfIåeXêyHèwWãfeåopæsiäxx†mЇvˆ„{˜–m„–u‹˜~•¤l€ªx‰¤}‘µy†Ë|ƒå€y˜…x¾‚I·‚W«‡g®‰x©zµŒg±q¸“s݃.Öƒ:ô…è„'ç†6óˆ(ñ‰5ò‘:ʆGʼnSÌ‘YÓ‰GØŽRÛ‘NÕ“WÍgÅyÔ†gÛ€{×–hÚ’{Σ}ߣjÙ§wëˆGë†Wç–Kè™Uð‹Cñ–HðœVé„hå‚{ê™hé•wí \ð [é¢fíªuî±|ð¦gð«p‡‡‡†…•Ž’œ˜ˆ†œ…šœ’Œ•””‰‹§‡•¨ƒš¹—Š¢œ–ªžœ²ˆ¡¼š¥¸¨€€§†™£’„¢˜—ºŒ¹†’¸œ„§ §™¦«ž°³›ª¢ Ÿ½£Ž·¦—§§§ª§¶¦±¾¸¨¤´¬»¾²§¶¶¶‚ŸÂ‡¢À˜­Å±Ç ­Ã¨¹Ë´¼È±¿Ð»ÇÔÈ„‰Ê‹“Êœ‚È‘˜Ø‡ˆÚ‘ØšÔ——Çš£É¥ŽÅ­™Í´ž×¬ƒÒ®Õ²Ó³–Í©©Ì«³Ëº©Êµ¸Ù¥§×¾¨Þ¹»äƒƒç—‰å™™ê¦†å¤œí¶‡ë»”奥黣巷ñ²±Ä»Å˸ÛÁ¨ØÈ¸ëÁ÷ÃúÃ‘êÆ§é̵éѼúÌ ñÀ¿ùÒ¬÷Ö¸ÇÆÇÄÌÖÊÒÚ×ÉÇÑÏÒÙÒËÛÛÛÉÕáÛÞáÝàãåÄÄäÏÐç×ÈåÚÙöÚÚåßàæáÛõâÎôãÔåååîîðïðñöëæÿöïþþþÿÿ H° Aúþk§¯Ä þ‹x°âÀv!NTh±£@ŒCV)Ò#G‡!¢¼H²äÂŒúrtY°%Í6oÂŒ‰2f•Û¹ÛG³åÌ™:_&ŹôàÏž ÛqãÆ.æ;tè^¹²åÒ¨BMs6­9Ö`ćÕMóÃM];uê„ÑÒ ¯¤MˆHö÷­œ?bË~l–èÆ{ãÊ•»—p^9sðÜÕÓà>Ã+6g’ðÁÀcñê37®ß?|ß¼Ó—¯\8[îJVÙO±éÖœ-Îö|±¢èßÀñ®n®ŒŸ„áÊŒÉð*Ý 7lÿ=|:^q„¦AD„Èzuë»íúÿïb83gQ›3† … Р¹Dâwðصë»G¨ûôûÓéX}ÀÝ#N2ŒíGˆ}¸‘E{›,¢ÅwÀC >Nw"„t#Î4Ù•WŸ€ãøÎ,°°R!z r~ôFd˜¡ÇkäM5ò$”Î,¦ 3 8ÔáuM5Õ\“Ð=ÝLCÍ<ú„CÈ”ý%\†À‘蔉“d Ú1%=Èå‘ÅÐ’Ç=áÌ›ñ “8®±‡~öATÍ›oVC‡T¾85ÓtC¦ˆäii±dË0{pqÉ9àBMB{F’A;×8ƒ‚¾ÄÓ©3“@²G!ª@â!/ê4@øÿ9j<ñ¼)HvâtSå…¨hAf> ’’Á,Rê3¨d0 &LèÀD°Fò«údIˆ{:ã¦3ËÆ“P<€H‚‡"¯XþöëNä 5„|q,½—ê³g5³dpA:8shµ×†¶ÙÑg6{&ጸ®–{nBé®{a»¢½+£ŽžãŽzôw¨Âoîr .ËB#ꛓ¸À/h†„ä%DNÇêà,ÿ¦ÓŽIh" RˆÄó !$rÂ14ÞWC BBðC \°4?˜a¤ÓG¿¤£[Œp: €ÖcxqâF ˜Õt* AB5îQ,ú¡ \ìƒ r¨¤{€‰ø„ó~xÆàìIe£Ú yàÙ-ŠŽ’£‡4r A A-0„ÒÌð$ àØ•ö†K¤£ÍÃDBèQ hx.!o:”3Œ`K&ZGŽ˜¬#DæÁ@¡} ‡Ä€Ãcš!•:=æaˆ5lƒ¯XéøD¦\êK‚«ÙcwÂÙÑñ;kÙƒÐÓB”A e \`†yø.!ØÃ+^Aÿ ¯½é¯rFÍ Á ŽJI“$§x̉—p";Pº’h¨ˆ3˜ákyg6z†>|¨ ¦˜Å;*…' Õ y“>HNqѬx”Ì‹H†6Q¥)í ’ÌÓo°3%/öPÔxh2 ±†4pá ƒPWQ§•®ôDèK§#:Bì!_M”Þ%—”ˆ›n´ þ)pè1 DX1;áÐU!º ²­¡ ˜ɺ,q&dV¦C(p¤ÔŸa5@ZE D¨Ñ‡2ôDˆX§•„S<@M)ŽÒÇ<À± Ii›ÞÄ Øj‡¾HŠ(`-)Ø„ ¢°ÇÉè«Sàˆ¿cÒ4Ê:‡ ÿ@"‡º Za®´–·ü âôZ þÔñž¿ ,¼øCˆ3”¡¬f«Ds‡N ó G8üà‡B(Bd¸˜±Á˜ò*´BorI /}¤ 6Ãz ‘{éI¡×Fcä‡=˜Ò y :´†,L@z8Ã_¿3\^…c¶DÝ4ö¢¬²wcÜRœKÞ±""dS Çv [3øaAñ¼A l0[b ]˜E;àVÉé‹Oœ­ˆ¨¤z±È9u—r1ì´²"ŒxÑrÕŸžˆè†Ò¼0¡ä {v‰%]âõŸäˆG'Ùp È„ Ýêy¡ Šöÿ Óˆ®a§á1Ü)x23€D Z0†1ØTi} Ý 6®[Qª°æÒÒŽwH+!¼x†n$â •¶( N€‚Ø€aH|ßÙe/Ã)¯aîϘQ½êõ2ÚÕûi~ƒó'Ëìgp®Úc2œà9PA#ІY¢~°X œál‚="ÏŽ§$h…δr ”†î ¥iØ ÛCÖ€LÀKhƒþð‡uú¡¤ÊÀq'§ú×hr0P Qà  ‹àF€Ô`¸ ýRÏ#,è` °PÐà?Me…7UR‚„2%ê†(¬öQA=ô?´€“pǰ 9ç  ðIz 09€pP=úƒ†àš`=@Ð&ñc…@à Õ“>ÅP=ÅÀ=Q¸‡Ö3@ô‡m‚ !: íP K 6ÿà °+@]†Bý2 ÿ¤ ø0ÈF,J•j%Õуxq"+—ìÆ#ÖÑT˜ï@ SÀ„“€%°~%°h@ѱ<Ûð_ðP—` Sp:΀žÐ=0AvU)†]éÒ4à1}­Fïp~β 8}x ä,…s38p¡  N€XpÐA ²d£áH »p çQ̘v¥JTb{«×‰Q :—zWƒ“ A+ñÀ!ÝÀ Z€Z`eˆ0¡ ¶ ïp ”»0 ”@ΠW†„HÝI‚CÁË“<ÿ ÏvÓµWV% ‘Àj˜0Áft rrŒâ’”`j†goYBba“`!ú“;Yx1ö¤Wà³` È… H©”#”£÷0•võ4oÂ;b±14i‰¨d¾eC°Ðbé‘¶`4®4 Ž`’(©’E28˜G•³‘Q4PÇ|âŠéPpš@FÓÐëÔœà,RM |]r: @à °@ {b@p TH †RšYœén³rí°Š˜˜ÖñÍó Kdrf†@ T  ˜Nг0 £ÿà ¸@ ΢:`A hCP»BŠ+5vYIÕ·—‚èKb 0g Ö€f@PQ+>БÙx,¾ÀQ 0@@{0‹‡(–ÉMö¹ŸB%E`ÖÔðE@Е »ßÉniˆ,0 AE00@Ì5[Å™™˜’cû²¡N˜Ÿw‰I!:¢ú` d0'Ê»ÀŒNÀ>’0J*ùØï39p úàETò3­Å“'¤%(¤ãD é%ŠÔðŸdP5(ÐP'п<Πš@ Q0ÐEP6Ð qVkâpn}pÔX{ÿ‚PbWE¶ —@FàA á¸)ÖÙmdÿP 0 è(`2k 8ú8ë¡AŸ¬y’åEf0%MSƒ5v©¼ÒAp,àÑÂb ðP ‘e Ôp± nR¨ªS`DåÓ0Øš­¯:[ç^1Â*c²j˜åC¼j¦Ì©ð Ñarbˆ Ñ%ZÙÌÿ° ípô m‚ ¡ >Cy¤žA ЀF°Gù­ÚqO÷AK~2“®f4u!"ç`FîJšÌq8Ëp–¥Ì ôº À)-îªI€E÷IÔP D˜j(61%ß1®qÿ$ˆøY}äÑ(síjðÐ%” LÐR`W÷ú ²ÿà @ NjX$°K ×ð²’¥_Qö^Œ«u©«@zá1±æú ¶®ëjé0€ˆ ¼°’?²KK¯ê€ÌÈ~j¬ª­AP°‹*Ô¥Ũr{8¦¶(zi•À2G‘ã«À*¨ž°€ T€£9µ"uPÂ@·uûçpŽàšAÙ*Ù:£Fð Ï€qø[vS`ÊTÀ’O„Ÿ)Ñt4©•ú :Œð P=ÐC®B' ´KºË ž0 ð à$E€ž1ÀŒîùžÝÚ“?ÿJK‰»1=±¡$Á»±»P”!ª3 >Ø£  úº’€ÐlÀ Ìà¼ÏË´N‹c¹dF*>ï÷yðz ·R¬›ù¸+±,Á!}À±<²~;˜¤¼Û¦°¿ýû¼#ë&¼3*· ¯45p Ök›ƒ$ĵjt57›—¹Û¡AÁS©<Ã’Á €øÈKs°Ì’PÎLk•vAÖ:Ay´ª@|›;|bWÍ6ZGQÁ{‰¾Ñâ¡:±ð¾£0 pŒôÀ k Ì€  Ä"{LÌ Çð§Ð ¼RIÐS’ëyð ê9€ 3‡»ÅÁÿaé»ÇŒËü+Æxá™Âëë×O€ ¯säÖ€ ðô œÀ´ŒP=l ¸·S ×z¥y4q` í`hæås8¬2á¸<Ë9 ´ “@Çç,ïP q à· 0  ð6< Ž1 ÁÙ =à·B`7ÐÆ:šÁÁûðgν€F3 èÐ<•ð&ÊpLÀÿ 0¨ "Û@FÌF:  T ADˆ36`?qp?È”„»Æ*1f{!Gâ 3 r á/¤ °K  Íÿ@ ­bÂÌØŒ¼ÿ”ܰРƒÓ LDçë“ìü„uć×ã´l4‡4 Th=0@?´  àK`´ Ç Ux—€<à›>ÐÍAлP=Á°ÐV¸ 7€D=~ˆ€H¦Á1+ÇàÁ± ð,ÏǶ T° ëà S  à€ Ðp€= 1€­§ 6€ÆÀ w@!<ÚŠQÑüÀa‚à!{ç`hÁDÂr íP SàN0âD.NаKðÒ 1 ܉ú˜·ê9AI°dÐic GFÎÀ\I¼\¢MÚåLwò PÝð NÓÇ9€›¯ Pjÿ ¸~j­AàÛISiè]·ZÈÍ¡zù mv×2 PáišC„¸»€È×À »0µF¡»  ¤m•öNfPVv@å¼Ù2µ¸‘tÔ-n¢Å2 íxÛ0 =z ¥f5µA}œGíVà¸~ôi$í2þýÙ[2NGÝÑõÁáûmß ~c"Î5G í+A=+îGð]/dÆ®®çlã³ßtmœtdßøí¾Îß:Ó|zò0¿ -T°ä=À Þ¸¶àoþ"çpOìfK}#¬èße ZדPô ¨ ¯0\Õð-îÿÆñAI° ˜p›S€ê0¿-#ÐgèS2³úЉ(ÆWÎÜ:ß$,ûÙ]> “0 ›U ÇÐ07ƒÐ •ŸÂT ¶” ëÇ"6ÕH(&çÒ)¼C—JRã¢.Áì\Fçj êj©Æ E_æ Ç0W¯‚­Î  Ë÷ ³0 ” }S´¨ !°[@ ~p'Ö"PR»(EÑÎì ]±l™±Ó9²Ç5¡‚:ñ AÙ’ܨ£¼N ú€…°~ Ø à` ‡Ò¨w•c~D†ö®?‹êÁ´ïµÒï¯=A_·™áúÀë)Šàðcc¦ƒ$ÿÉ AïùiFh ík»ÓÁTí×þO¯"A×` º=ӚРÿÔänî àÇ`8†PòŽñ‰'¥¹O ¦¨è ß"PÚÀJžŸÒ9° Æ#P÷ ØK`x°]  µä ñÖ£¦ÔA±ìAM¦“úç_éÜ8V Á •º8ÃAK¶U…<ÀFž.ˆàk`&@#u²:n1­þ±»¬×ìCJ Õ^ Ž"B$Ôl_A|‚3ÝôÑ]YÐÄ€-0¢0Žvùr Ôû ¾|¯Ë[΄¡]„Îp|̃~÷ñRö÷&à$P“(ÕdÀO`yÿ@ç. ÏY»«÷gåƒAúe*ø…¶üÃ’ò{ÍöRñ0q7#PJRý5sd€ÉöxÌ@Êpš³xÕêÓÏY5}íÚ1”øï_D‰õYäØŽãÇ‹ EŽ$YRß9“)¯9CèÐY¥ °ÐÍÊ0éC”#é±¼š‘$Ðâœæ'ÏCfÊdiD O‹)¡|±¤·²%OŒ'f½Xñ£GSŽ%™“ìÈjIŒ­ÖîR¸Љ4ËÞO#=tð ¥ïZµj×ôÑCÔ§Ìá2cÖ,Þ¡# …ú²LôšÆ3rŒlسgë†N»6 Dx³`ÍÚŠS§³$Ar €ÿÂ$%–,!Þ#t¦O ?}ö ;E«4_òFþ…ÍÒ—º‰û2bìøÙ¢õ¡ÉŽ&k5žKÁ)ëV3¤GŽÙS˜4ðôçüøÃ{`;hG À‰&.xEØŒ€†E®ý*$©Æî ÏL‘ð2bˆ*‹(Ù–XÓeÔµœÑ§V#šP H¦üh¬¼l+Ìtí¨Ëì|uM]ÑÎt&Íò‚0!dÈa”[zˆb’µªöZqi¢²%†©XK0r573{eXv}Ј‡Â b%#Ðû+ÂH€À6ŒÑ´’”h`[œ ˜Â5Ú‡º‡!¾®ásrÖygž{öùg ƒæ™B |ñ¥J €¨†µ†pb véÓ—ÿ¤ÏYË—)¢(¡ (8ÀG|9FçvrÒìl´Ï–X]Š+>éÌjY:Ö$–î´‡H&áÉ'ßuF•–P!ƒ (Ðh®¡§ÅDkþ´‰Ý&–!h’h.‰!RÈ¡ÓLaÈA tâ0 $ ¡&œxQP⸨ÈÍhÀ™f-³ŠX×ÖÖöµíŠëŠ^#¶F†6{èÔ—† ¢?ÙÃÒ `Ð$–_`Ç$ò ¤jækøv/yM—mÉd(­ÊœÙº `@‰fbsf'g®1¤$žéÙÓ”‚oYcG8 aŽˆl]ŠbTHÈW¾’Ô…* !˜:*ÕìB~†ÿ>gT¡U²ÆIʘú1äCCØá=1Ä\ ì#H©ùQ°4B r 2ŒqЃˆPKl¬D«¡. †PÂv¨Ã{`‘!îUCþ -°‹Ç5\V‰_ôÀ‡iROî7#YóßP¬›< "êØF9´ÀðÉ(rüK`Þæ®ÜPa= PÂðÐØ Ñ5-ËËô”X¬µ@cÚÆ4Ì éñqºs漢ŒfDñA š`‚¡y˜†‰Öb©! zá©”¥œjp£vjÓcÁçÀÝ•L,9FIòãŒEƒ-(‚5@ú]È@©Ævÿ±HzŒÐ€9¡í¦SÅñA œ ¦än4$ämÑ€@=&Y#\cCÓ`b,‹X¥+%1-”Œ•¼ùŸqè:âÓÝvÎ¥“!VQ6ßÏy&’(:M• ¢ÏØ4h„Iø§٥ܯœn¦3Š)–à¨<ÎP&3Ip  cF >«qÍ!dEÜ|dþùKnr=èëªa–TY‹r‹4\ÐB¢•‰„¥^9K†Ô²JJõéttE bQ˜Âú#岓 ÀŽÓ˜F8†”1òØŠchLŽ$S™ýs“VìåH³XÖu,ÑäD§ ¦3™œá÷øWÿÀVGdqIn7AƒDÆ$2cìiøØ¿ÖhqÚÉfâF‹ÙƒØµ$˜¡™c}9T¿fÑ“a:l<¦’CÅt¯'l; ÙuÙp'iª«H&“W_zű ¨XCûWyÄ E´„—R“ T01|Εí_ýv]¬%›t»Æ5°M®à‘·Båd˜f[ɉ÷$jáXƒ®±Ö´Wšù(h»›Eùžƒ¾ï Ï}­¥\ýf‡¿¾u/p#+¹ï†×ãEByÏ Ö&8»ìéo!%©Ie1ºV¥nš¬K.ì 43%§‡ô.‡X¸0Š];›«Ši®ÉBž ›½æƒ`mo;ÚÍÿTÃåpAá;/¿D.j5»Z.¥8¨2ü¦Ð¼üåœa¾È™/†0§9hUËÙ.€  ¡m)msVn‹| [xÈ4ú«‘›dj¹#5#t¯ ml$ZÑ:>t¡ûAH_ƒõÐñFf&èA7šÐ˜K=(ý0NkÚ"ýµXÝ@Qï*ÕŽ[5¡QÝêÂ:²ž5­eëZãúÕ°Þ5¯q}ë_Ç:ØÂöŠ‹mì`÷zÕÊ^ö±‘ýkf‹:ÚÒvö´ míS;ûÙÉ.6¶¯­mo»ºÛÕ7¹‡nV›{ÜçV÷ºÝ ív³ûØèæë»åmo[Ó»±ñ†÷½ýýï~s{Þÿå8ÀuMp|ÓZßõNx¾®p„\Ö g`Ä~q‰;¼àçxÇžñ‰[<à#÷øÇÞjŠçºä¹¯ùmr:Ç\æ3§yÍm~sœ×œä;ç¹ÆWò—û¼ç,ßxËSr`ýçÍVúÒQ~r—7ÝäCºÔ…>u§?ÝêQ7ºÖ¡~ô _êLÿº×»®i¤ÇhëU»ÙÏNí·£]äX;ÝÛNö»ƒ=ìl·{ÝûNô¼Ã}í\ÿ;ß³®÷à ¾ìˆ¼Ü÷Nx¿>îN;±¯øË{ð/<Þ3OùÇ3þóÙÞ<æïøÅƒ¾ôž?½¸W/ú€ç\ö³§}ím?çÖkþõ¨Ïÿ½ëw¯úÑû>õ¼ï¼ÛƒŸîã?¬òª¾î'üç#?úÎO~Åý꫼øÆß>ñ{/üì'}úàÿ>ÃÃoýæ“¿û°_?éÓïþñ›¿üʽéÛïýû«?ò’Ÿ¿ö÷oøü“¾óó?þ+Àÿã¼´¿d½¤¿ëƒ¿Ì´÷£¾þ¿T»øC¿ Ü· äÀ ”¿ôÀ d¾ÄÀ”À$Á´¼€S|AŒAœA¬A¼AÌAÜÁü5Ep¶B!¶ ,¶"4Â! ¶#TBm[BDÂcsÂ'ŒÂb;g³Â+ÌBmÛB.ìB/üB0äÂVh…‹(€ZÃÿ2´H€(µi…S¸4¬Ã88”CÎ(B4ŒCYÓ8H€€Ãs3l5A$DЇS€s ÃUÓ‡€ ÄÄV€²QÄK5H°ˆK<4”5EˆÃ²D‹HE^3ÄàD¨CVL5KÄÄÌRLŰˆGÔ4E ÄC´BA\ÄU+€vÐÅCYSÆdüIôE>üˆøAhüH¸C‹lÛF± C5lµSŒÅH´ˆVèÅVÛÄœQÄj¤FXËÆgEnôFj¼Fq,Ä^,ÇcdGI„Å`ÇUëFRÔÃ:lX<ÆlF‹HCzŒÅTÛFEGÿu„µDìF]$CEàDŒH(ÄshL ‚Lµˆ4ÉŽ< F{Ô´mÅ”BM3E@ü‡4ÆvH,<…ˆlG,´ÄÀÂuÐYî;¸<9pÖ“yWÍM55õzùÙ›ÇoàRxï ¾ÿs¯¶C¤ç7£'¸~êuÛÒÝÇ—ïû=ü‡êóë{'ëÕªB„èH9€±C -Ê4ÃŽ-´,Í5ò@´Ž,¥ S 9꥓V6×\“ DùŒS5óu”~úhˆâf/ÙWtÏõ6ßV.¾ØÐŠi½#É‘ ±ÆvB=ѳÌ)§DãÌ2´ìðƒ3PÆ£Î^¬aåÕl¦¢>×@ å5ô "¤j†ã–8¶Wt3B£ŒÖÁˆ_š°\ðÊ0{paI:äb D]BrA;Ù8sB¿ÄS¨3’<²G!©<â!eÆÍ`.O

\ O5„Œr,å| ‘’§\ É%Lä°ÃR—Bò¥´>âk—Î<錒ñ@ E Ñ!„˜3+D¨®¨ª«Ó­ê•œè²9'޵Âc !_ìúîŸ\:s,T°@ΩO²Ë–ÏÎVCO”Þt™„3Õêsm¶¥êí·ß†‹â¸­’U¿eœ.œ ÍZç+é¸a¥£ú{0”¼à’‹’Ñ( ¥$Ž—ë¯×÷1Z©¿;NŠäø!È´Ùø«OŸ–#fÞúqí´ù¬¾–„§÷êuÁÎ:àS?»õ…‹«·é”S^Fã/®åГ 4yL“&=ñ,Ó°zµ.õʨ'½wôo,½lÕ×DÖÿ  @p¥ã€L Ó1 =Üá€t‚”¡Œr8Æô@ 9üÀCÂ1x@Z ´ ak…@IX@*Œ¡ h"Úð†8Ì¡wÈÃúð‡@àšÿš–½Y…iT{(Bt$Á ›†ðP¶‚ÏwKÁW­v¥4}(yγôø×7ýåUýkÝSW$néáIè]B˜‡< ¡}hA \À" ! ïƒÈ”v¥EY ¨’ÈD¤‰ú‰ÑTÓó[ÑXFÁÁjp±ZÓa¼h„°†@„„à´€k~0ȧ|Ý"·¸€%Pt°8é4UÕI3žQ+¿fœdÅÆ¥h¨PI®‘BŒÒe8eÁÇ僈H„'è'HY¢¨K1[Ó´Káo’”T#+)ÉuÒ®˜ª£5¾ A A,0ÄÖÌàÿ$ äȇ˜„´‡4Xbí˜ß%Šthô"Pò—3ŒàÐçAòœîÄž:Ù)Ìëµ1ÅÜÒ<’8Ç!° ô0ƒöhR3”£O‡ Ç< ±MlÑ2ž—ˆQ.=qa<ÓåýȸQŽúoDEgG‹¸É´TÃ{0ƒÎÐB”A e Z`†y"æ \á Z¼ JÙ°”½êõ 'Æ­BãY‚y.ºÆÎ®K­d~ÊaˆO•H?¨²"Î`†C<õª}H,UÍQ6”BïèS–ŒÙ¶¥@I+ûiµv¶¾r¦¥—–Djcð ZõK±ÆÖ¶v†q3?aR*û`ÿõ5XC¸ð…AtëT•…¨3Š” '~ÈakE‘ð±z¥©´y=íGMK]£õFKÉG"X›Ø2 °ú¡G5ÊO•CT…Ø‘0궆6ÜîT+K«’‚ Mï¸{"Pæ\qa´$ŸÕR¯;`{Ô—!KmÊÐ\!BªH;Õú*¤dØIó ‡&"‘!äz©_›‰[rõÓWCLõoR5©¦Lºu%­3ê¥ bÁ~¸4Ïá×êÇä(_ˆª1Þ9Dàå8Ä ÐÐ…ƒ‹¡uíç:„ßüäcTàújªþ›ž˜Æ¡}1ŒÃ<Éì é e¯¼ ^õä£ÿ¯ú=Êá?BŠ ƒÖà#D`ѳlDqнåŽjC´î˜ï*æëu)ÜBÄjÅp'g×B$‚È<Þ•X?ôªþ4Cè¡-„! P„ÎÐ_4®Êi*‘1¼jìÁWÏå2~ÑJFƆ–ît©¦i!õÍ~ÎO˜PF&:/¸ fð!ÖL° S¸E!ÆÐY´CÒßõq½¼D_ájLYzW€ !e^êšÅ_Vô» æêÒ¤˜¯!XéTBÜÁhb2Â±ŠˆqlÍ ZXƒ p‰=ˆ%ª›}l_¸âxåX.æQŽdôøbóN0r|ìÑ6:Øöÿ&3Sg…D€c[ >C5ÖÌàj´@ ŽˆDÈÀ‚4Œ«g Ä‚'ûäz5Œ³æf–>zEt@›§3'ŸkÔ]ò«ß,G„Šc}XU X]©&ð°` cXíÖú@<uéè#F‘–™.î\£<º)Çû½…Í÷«£V{þ>/!Ry†q$â `'ì LpÔ`aHƒ¤¯:qŠGé¾i¸Æë^h©×;yñÔï®÷dWD™ï~Ç”;®¡Y c ƒÈ`à Œ@CoÂúbà2_4€4(F(MçÑUwQÒ;ºï¥}èýžò´qLü¾ôˆ"¾Z0À~ aà³ÿ"À#4„ÁøƒTý°|e|؉PŒ’©d}!- Õóò¶zô÷Ïê»Æ+™#*ÚÒfú PUµXvma]ð ²à ^ 5f€°W@ iÑ9áôDáÔSðÄ|v‡Ð׌–Î'}ÿgzúÐrK±=(¢"çS‚ ‹p[CHh°E’eP0~’ ¯ô$KñD C-#H‚grŸ‡‚‹v…Xø|Õgcáv+¿^ 3H@ 98UÕ Z {Ð xpð{  ൠOâ/Nô„ …N×bŠQ…¢§‚T(ˆ,¸wÄæ…x43¸(Ùÿ߃ Šd0 WX’× °†09À0À Ó¢( (3 6‚˜…&x‚Zˆˆ-8}±è‚×G&+’o·ty07`ð€*€np ²°Eâ LP¹'P°ÞPO4Pg“KM%W…‹µxˆà޲8Ž#qzÛw&Ë0ªPÐB8à"0;°#Üä0™° Ð pÀS°N4ÃG|Æ—F––‹÷×´˜‚Þ芯hˆùw©C ’° `SðD8ð‘;  ;ð `± 0à°ŒIòaBã øÕ'cò^äÿÔTG‘¹“„èT‚#Qc¡a§ñ棣ê¤:ªCZ¤GªŠí&…ù±¨íù ðí y\ꥷp5% p¦iº¦Çµ26­ÆÃq¬Ÿ¤Ìê {¯‡¨WS+’0¡^¢ëº"ë0°ðJ·ÒRÕ› ,RM°Œ;b¤9?Ð ¯@ ]b?€ TðH ã ®Ô rèeuú®Ò‰§ª¬@Êšq8ØÛ ²€öóã õÿc4g†@ T‰N°² ¢ð ¹0 Â’9`AðYCPŒ8ƒÖ6ÂÚ©œZƒƒI[ëk'wšµ©ó‡› ˆ Ø€f?0Qp)=° ;" ¿°Q/ð?Ћ/ˆ–˜õa"øtÈѵ^›¬(›²`«¸bkQlf€ a ªô @ úÀ I´±Âé3Œ/ðDE0/@Wö)Õð±(ÉÕ%å¶²h²ŽK¯¢º£¥å‡#(¹”«f;˜Ë¼ÐŸNÀº3ó¢<BC€¸ ©4&(n‚\Ow»òZ‘‹Ë½Ý›»_ÿë‚Ûh*KÚ¤–‹Ö¶fG'ÐP€&°À`>Ι@ wQ/ÀE@5à 3WxæÐ{}pº%]r\…2»º«§ ¯ÛK»Ú Žðt °` ‹#´p¡ƒ‚³R¥³c0ð‘Np-sK90:M»·A µ{–Jf $^³%›6XDÁîj»,ªà»¬ÌFZd»‚#íP+·µpaØð»Ùp ³¢?€90‰tA<ðAA0Æc\DÆ~ãi”"$D‚&:µªÙĸ˸sì½B\Çv\޳K6‹ aºÁù1%± ;rªiÁÿ íÿô”‰  =0G@0LB H`Ì¥jœ%_…*ôÐ!®…o÷Är<Á,Áß»»©S'¯”±4Èúº®ð9ËP¶‹,Ë ±ÆB|/I0JðwOÖp _ÉœÓæ]¥ÒW%âÆеzœˆ[ua‹Ç>ÜkkôÊÜ”‚¼"ð°#“ L°RPn‘ÿÿð ?ŸðS{k£tɘl Ù°ÌÆii¥¢ÃÁÊÃÔÜ®%Û¸©<Ä ­Ðá¯lÄÇ·àÇí‰#ë‘y ½À¦€ÁÎàÎìà¢ý¹ük.LÆc¬Éœl}ÜgEW/ w´c¬ݬ¬ÿLǪ¼Ê8Ý£Ÿaĵ‚Ć´Ø9´¯p Tp¢Pœ"uPÌ ´ ÿýé`¤Ð™àDd,d\ºF ÐP`d¾³%׋<„¡µ‰[Á6ÍÐÜ|`Ww"Å„Á¬:R+Û 0<HCág%^PÕRíÎË ð ?%E ´0ПPµhl€²‹Y›Í&BÍ׌¬qУÍйkÍšš‹‚ ŽìDC@¸ÙF ;Tf_cµãD²Å*Ý*[ÓóšÇ7½Í­ÝFÁŠÞíEÞS5kÐÔú #YìíÛƒÑD_ EÊ´©@$ý=äÖ¯¹Fª¡}ÝÖ=ÝØÝÊÿ…ÚÛÍàê12°ðÚ’PøḬjÀ :’°á®Úô<0jÚ´6ÐÀ´C3‰_:ÚjM-NÚ/>àÔ}ÇŽF׫­V£×Àú¸Op áqº7’\P€Ø0Õq¡· !=ÆÎ«LCÆÐH²ê1ÊõÿÀü€Ñà.Æå].ãD\Ý ý ;=æêá²²@ ¯ Âò×( ×` PÝÑéPç€ ` ¬Ð°Ð89°±œÀ&É5`@ÞÀœ—Æsõ ýðÙL![ã•nà”^Ú­iã8B¦»¢óC P¢ @¼ÍÀ íü§ðSM d 0Ü?™@Oô•@S5à?6àmè_ƒVüPΰ ÐþèÌÞìN8í[ÈFò °ÈùÒ‡¯°í1^ç”` 1?ïÝŸþIQ!ð®0%âÂŽ<%ÕŒ3íå1þÖ2ÿ?ó-¡š>d@¡y@ðü<Ÿ™2$ x‰@•™¨®O°é° ݬ–`;€±= ëAÀ¼p@ÂïzÉ 6p9@”™ÂeóhŸöj¿ö6Oð®ü-šr §y- Ö^”ÉIª@ )À NÐÎ@ÕíKÉ9cœŠÑP7` âp?Âß´¤ïüîïXðˆ4ïì^ð/Úÿ¸+²‹œ”©ê1Hµb íp SàN0<ÓÍðN  *‘! >{0ÒL EI°d€vc ûìê<Ÿ Ùð Y €ª-ú.éþùÿö³ÿbú…~HlX®ÀäÏ·\$I¿€%ëŠâü;ð ¹ðüûÅA@üZvú_9œ&ê¤xcwéßÁú"L¨ï_»… %N¤H±]EŒ'^ÔØ±"G!‚)’dÉ’'QjT)QáK˜1_fsæ,Þ±šÙdî„)ËÁY²&8¥0 ^ÍšíØ±ì šF’Dãõâ…#VyEÂâL1aÁš©†È9ž ßIºPÔ]«Y#^Œ¸cK»óvÄ»w¤_–€=öL¸aÚ×jþpv 1OIDú”¤Pñ1…Í~$z-Z©<‚ ùœ59!Bü”a]fµ˜>„ôBÿËsÝ…J×êñ“äJ®Ã‡ K4ì·xÞãv“+¸ùFyf»öK§t™‘‹ê£lÙf}ñqFOáçh?^l6ÂÆéÔ~Ä”1ã¬!zÆ2¿sݤœ9§ž$Éè%ˆ€{.¸Z¥SjÐÁ ¡«Áß°“) eò (¡$Ó‡&^â‰Ç™$’pæ%Åâ&‡¨p‡^¸ò*¬ùΫ}Ò©†éÉ&šh²1¯r…žorØ%:} ª0B §¼J“.¤ðJ(wºXná‰ÃcrÅ4p…ºk¨c Å“¸&žkRTå’r˜â„xP1‰5@a Å8üÿt !d}¢©©¦hÂûaŠ nQ'ÀÁ&z 0,Cê”/.CÕà ãI– Rmk'2ËìIIdQìÑkŽQìO¬r…b &9F*ˆÌÆ›P„0Zëkì ‘|hІzÍæÄ_dqGŸš2e(&ã´üÔ¹RÅõ qÉ­ÈË \QçW*ÝÐÕéj2±¦cèÉ)žh‚™L*xY$™„þÚabStñ`‰-¬ñã ?dC„QGãQèÄisâ§g¶ñö M7EÎ\+SVå•)Ú yõ¹åXæ¥W¦7væŽ7ÆJŸTyYQ”(¬SˆØIôA¤bõùqrŒéO±ÿëhrìDgº©'O¿U°®•ÒÍHìD-÷\²Ë>P&˜ÅÔGšm¾¦œÃÛùDÇ“ è RŒ&OÆ#–¥iúBÌéñ%¬¯™Uc}®1¢­»F¨.°!d¹Á´-lùóçL•ifWn7f˜ZÛ({±Îwßh°Ê¦’pàáöLšÉIa†^ ‘qžÍgñ™uæºYëùž‘sþd³윸ͣ—¾Ë˜PUu»˜TÇŽÍëÞ‘å•NÞlŒC¬~eŸzðÎ'X` ðX£‹T<ûEºÕ$oú*Ï?ðÑ&ÝÅ%0 —õš3½-ŽsÕÓO¾¦1•iV\‹ÿª&± ’‰žÉF6@3š)p⌹W4á‡5€a Ãl¨ƒ$…Þ¡•Ýó}(Å<ê"YæÂFÁ:0‰hC¢×næ=ÄÐÄ&X£Ä^¡TYâ ñëdõÉ©&ðþ0údÄÀ ¦Š_ÔDH­Ë‰¾"•Ç™Lmg“`a”8êåE|b‡êv¢ \à%¯¸€:¸¼5*EQ‘Jc^ˆHõ Lx>ò@†G\ ;dc$ùj9£ iG+¥D½>ú1– œ% ›x¹¹A1-¥LäK`¶ŽGÂ$’ñ U„ÀK:æ dX@'ñ`†PŽÒ&¥t 3jÿPjÝÀ¬tå+ÿR˽]ƒäÔ¹H5ÁµRCR¼—3ªxETIb‹Ä{ ¯»©@N!ÕðCþ`ˆ4®±SEËÃN¬e£iX1òAa#JRš(,ùxÑëz£ç8ÓI/]rj‡%TÕÈ—t1ví-Fä8Ð}hMÆ`Ã5àP‡6á!œ¢AŒ5¼A7ú`3\y¹“t´£ç 9iyKYf¤©cà1>Y$(˜ ÑW‚Ð>(0¡WÆsL>q†>±{†)há?ÎäV5‘ÃÒ  zÜA¢­IRο2'°OE§T]Ò 4'iQä‚À¾ÿöMaahg6æ!<}\Ý‹IüPtOÈ@ñÀÆèÀÍnZ´°mªFËQ¨fª¢&caRÌ)LRIÁ.¡³k”ƒ† !"1Ø‹@ Œ=¿« ©+?ó“#…(v@2 ãøëD@g¨‚kðlèXs Óhj¸/gn œî‹ºä¾’(=Õþl ?m?!< ¤'n) \€4Àv#DÐÀ4{¹ ˜ºÐKÁ‚4‚U¢»›;2„’é6“‘ ÿËá6œÀïB;»@ l,‹‡lÈ7J÷À\1ù 4#?#ý ‘"ÉDð?!èt8‡½9ÃsZ½9,¸“0½ˆ Äz=sà ŒÃ!£½Éº¼y¼>"ȃâË—X©hø‘<"„zЇ¡ë …°¶¿K 6t³Žà ŒÃOôĽ B3ìU3$²ê¢!i“&  ‚Y¬†)¦$?+¾ë@²$s†r0rL‚sp;#à«bLÃúÕ‹ bü–VÆ|Ô.fÜ(P|FQ4ÂÕ™0ð€‰ø90š>`"Àã*{Â4©ðÿ0â…Ñ¡sœŒ·Éé†AÀMÑ*¹ (4FoêGìJ}BzC„C™„I5TµÀ+%ß g„£‡)#È᪆ÆiÇŠ”7zÀÂ:±ÅÈ‘7bò3mà53¢¹ÐÁHÓÔGi“ÇC*–TÉ2dÃfüG€ ¿6¼ÄúÉò˜"ÅÈÈŸ Ê¡|<ž¬19ñÇPJ¯Ê›LXL³ë¢Ê… I—ÙÇ—L‹…;°M܉æYLš|LÈŒÉP”½´¤:ƒ„ {QXs†tHˆ¤ e3¦ÿêy»Œ´1Ǻ†Ðt†{0¡¡;´3­jI5|†;À“ìA«ìMÿTsƲ³,Fò[ :Ÿ—вØl”Ñ0"hØ p|<I2¬¨Ås,¾ùËzP‘!¢M+™Ì®u馊z@ÔËNôMâ\ƀ΢CV+E˜Èœ ³†j¨±›ÆˆÉá´rË:¿d‘yELÓ\SL|<ª±ˆÔRO»ó¦—L@K¬3hŒL9|½Q‰£DNµGŒÁ|ÏDETú”ÉuÔ#tµôÒ§Y¡¾~Ë´ã‡ß§ÅÔ#—j»» V -ÃtÂÂ$ÒTÍ5eU‚,¿G-y¨¼;ÇW‹ÍÇ£œëÊÕ´ÇñÜP1ÅMÛdñõåî£fVÚJe¦â^Þfr.g‡eæ•Ää*.ÙSÆ;>åÍó¼dQžImíÔÕáü-ævg}®dG.¢|œÐ¡íÔˆ[Lt]äe³/g<&æ`ýb edÿs>ç‰^æ^U/æÊ‡eä,ÎMëÐ2ÎÐf^ÚåeF½cOIèl㊶è~NåùÜç…äú$IP®Þv.™”EãÕ\iŽf&deµabef·5éQFé–öç‹¶h•Ía´ŽØ5Ù­”eÜÄ%lÎå”4Ù¾Âb‘_î;ù]ª¢Nj ¦è¥^c— ÐPÖÔí›jþMç_Åêߨ]žj¯6ä.-W±S²jU…é†ÅèrvYš`›–fºÈéª&¤¾A¥ê¶ì»%jʉ.ëÀl³禖é•<ì?ýU’^h|äÇ®_MžêtUd¢•_m~mL¬Zz&ì—Vê´æì¿æÿo~X}µ54ìnÅ\!Æa/nåß•‰t cÊ gÏÎmÜFëÛvh—6æSíÖ£†]¸åízÎæ8óÑÏíé>ké¶íòFç{¶æ½¾Ü£åî¿`QÙßðfêñ~îúÎÛÍV\ËÙxÞT÷¦mVbù†îè6o?pñ>o̾îYâî Y»0èÍo§îGð ¯nGU[–Zµ•h3ÆGìAÕ°ì\ Çpµ®íÏð VÚ„YÌñÓfM¶lÊ&ñGqÝæçû>á¤pü.ÓNþ1µjûžïçqßq$îrSÕÜõÆèÝ„g(i§oÏò$ÿç'÷qC•rGé*·ZÿA 2,ïò 'ï×òžÎñOo ,ò)gèÁns5ïq0Wr wñ=5ÝmãžGûÅ;¾Vå?_ó+Wq7_ñ1'ï E~ZKìпŽm=?óü¶ðFçò<ßòÆÕ]çâi»ôÍ}åEçsO‡óUçt_6rDëÐ)aZ¯u[¿u\Ïu]ßu^_èCïìTWô`Ïô_gôOëcs!6õîtgv&öD¿í¨ôG@fGõiõcÇóh—vMGäjÿoßFjcïöVgsogutO÷#OX2¸TäBe«…}\ypá½¥Ow^Ýztãωgß «ïäß?27~;vñéÕkïî:ûöïá[=_¼XûàñçO\Þ<}Ëqw_€òÇ—~ñÍ'ru ‚’7àu (á„Î¥a^vè…ûaØßzŽa‰&&øà‰o­H¢…*.8#)Šhc†Ö¢‹<~è#Š8ÂXc…èé^‘I*y¤‚K6(dFÿÙõb”TV™Ø”:jã\æÿäŽP^ ¢•=Š$“2¦Ùåšl‚¦—C¶ùeœr:©¦‘on9§wºéçŸH :hž…Š' tòÙg“‡"ºè˜gn¨gBRJ™¥¤?fŠ&¤fÖé§ž†:騤¥ª©ªº*«­ºú*¬±Ê:+­µÚz+®¹êº+¯½úú+°º6¤H]ĦeìYÈ& —²c5ë,³ÑJ›Ø³]U»ÔµIe«í´em{Ô·B… Ô¸äbùO¹>¥ËѺµën·ÐÆkí¼ôbù®EøJ¤oDüö[/¶ÅÌíÀ]¥S×Ái%|Ö ÃÕðXGü0ÅŸ{1Æk¼1Ç{ü1È!‹<2É%›œ+ÿðAP€>ª@)/–²¬ü£O+£¬²Îÿ¸ sQ¬˜WÏGÿS3ÑéƒlÏD§4PMTC=ëk4A< `,Ó1; õËM3yQÓü²ØZ««ò@gƒÍ¶CŠÀ]),¤°€Ñœ½Tì €)Š^ßyðÏËéÎ8â )‚« ÏëùßíHÎJ‹gôH\-xÏÿôm¹Ø¥SÀå)ÀÁ=§€Þun¬Í˜2zé¡®ú?º—ýzíPÀîÐ^¼î¼³Ëºá(²û#Ä›Žâ³/Þ3/„|vÍwRÿˆùì¥Ì¢³ÿ®ùX=îz;¬¿¿ÓJG¬v,.}î#Hóòµ9ÈŒo)#Ú2BºæíNp®‹YÍ8ò»Ãé#$<3_+b7ä} ]9#aÐ,²8¦oDžE  4ðjîk¡BdˆÀ˜=/1î,xÁ¢@†KSèÚ¨á?X”&ÀpB !G(Eøù òûˆ»¦2ø]­wižæÒq?(fq€¨" »ø/rDŠk"+Ș<3¶…wrÜþؘEÓîQ¡^H‡} :â÷|8ɵ‰ ,Jë\—9‚(R(KÇè ‰Ibm1i^ŒEÂh¹™éQ‡©]ÏÿúgŠ5Â0#H$_ÌÜ÷GTVDŠÏë\+•f˾ANi€ŒK-+DÄŒ‘ˆ+æ)²L}PÒe¨ä²ºH¾£¨LåÓ#«?ÉÙ°(ÁÔ&—8ÀÅ­Ì’éL%òÇ)F#µa)¹´dVä–û£Ÿ;}"ÅÚ‘žJ”ˆÊÚf¬ËÑpŸÉÜžW€*¢fSYÍø·¦ƒž“hRŒx8úEò#’ƒŸáTv»½œÔrý¨?bÉçÝŽšÚ[`‘—:÷«|Å“$*;ÞMN¦Ÿ“á$oÊO‰Ðó„ªóiI·O©É#êA#ÒHŽú4‘’aC¶z@NÆ4ªˆ),¹ÿ½ÍÎjBikÛ‰2÷%,­þŠbÂ>˜0ÒÅ´-JSË*‰5sd–¡Ÿ0ë˜W÷¯X&ýŒ%ذ<-U:sìa]yº³ªê`˜UÈ#Tu‘¬ž¬´¦=-jS«ÚÕ²¶µ®}-lc+ÛÙÒ¶¶¶½-ns«ÛÝò¶·¾ý-pƒ+Üá·¸!CôhÜå2·¹ ÅßéÜéRW¸.îaÇXFz-‚#¼l†&¶² ¹•<]¦ÍD2³ºî}¯9è¾&&¯ŠMœÙoZ¾&ò ޏ³hßòýíÓ,ßí ¸¿½‘—ð}0„Ÿ›ß7ºnqô­â@îkŠY¾±@ ï3½)9 ÿ3Ô}o %îþ–³òE¸Å.FÈu!Wbì:‘fù•ß„¿Y;Ëm»ô\ù.GÅ7®˜´/>²{cìÍ #ðq,ÞcÿWÅAÏrGó&ùGáÛѰ‰ª£/ÏXñI$“ùÁJ~—ßȲ'{¹‰•ôo:üFÃ¥™˜ä{œ7Y&gĹÌ~¦®YÅ–8š¹ï¯Aû ôh+ui…¶]y!6¾ê¬’þ3¦3íØiºÓž.KÍüéQ“ºÔ¦>5ªS­êU³ºÕ®~5¬c-ëYÓºÖ¶¾5®s­ë]óº×¾þ5°ƒ-ìa»ØÆ>6²“­ìe3»ÙÎ~6´£-íiS»ÚÖ¾6¶­­“ms»ÿÛÞþ6¸Ã-îq“[&87ºÓ­îu³»Ýî~7¼ã-ïyÓ;ݰxR£Xä(NJßù–H½.ð¼àò¾÷£…ï„3ªáç·E .ñ‰S¼âö^8ÃA…ñ~?â ψÅC.ò‘¿á︨2îq”›Jå !9Ìcr“ûûß,§J©fc¨G\æ>ÿ¹ÀiÎóšo|èF×xÑoŽ 3½é%OºÒáu¤ŸœêD¹Ó³®u¡G}OSO¹Ë5eó•GDëfo:×­~õªƒí-;΋rö¹û<ídWûÑï®÷·»]ì¡;àIn÷¶¯½ð]7ÍÎóNx€¾ñ<ß x'Êïpÿ—ú߯yƒCÞò}÷¼â÷É7Ç'›?ýÀ;÷Ä“-¬ß{äIúÙÓ[õ˜¿üí%?z؃^ö´ÿýÓqïuáW*祻èüå³ÛöÃÿüê÷üéS¿÷eg>öÏí|Ä¿ž÷¹×}õ­ïýï·ÞõÒýîÇÿüУ_ýÜ?¿øÃ}äËýìûÝOyø“?"bø?    & . 6 òÃ×ÕßûñŸý•Ÿb…f n v * _ñuŸŽ âŸB|  ® ¶ † ôõŸþí_æŸ ¦  æ î` ø• ÖàüÑ &!&ÿ!úàý ¡a Và *!Va2¡^`å¡ Πùù„†¡ö :aN`vá á¶¡n ¦_¢aš P¼¡îaÆ¡~áâ!r¡:"" Î!ž¡ "þ &"%¾á"®¡J"!Úá"GT"(¶á%n"'jb&6¡’"A„"+Zá(ž"*–¢)"#H¶"."á+¦¢*6¢#úâ,Ê¢Dä"1îà.Ò"&"c/zb'Ú"#4²à1 cÊÆjXc§D4nãNã#B"3þb8ã7f7ž#‚ã8f!¦ ",Êa2R#<¾ÿã<ò"=þ¡n¡=î£<âc;º£2Þc<öc-æ#ä@FbEC6¤C>$DF¤DN$EV¤E^$Ff¤Fn$Gv¤G~$H†¤HŽ$Iv¤=”$J¦¤J®$K¶¤K¾$LÆ$Gž¤LÖ¤MÞ$Næ¤NîdLÒ$Oþ$P¥P%QޤO%R&¥R.%SºäQ6%TF¥TNeT>%U^%Vf¥V¾¤Un¥W~%X†åDv¥X–¥YžeU¢¥Z®%[%Y¶%\Æ¥\¢ä[Î¥]Þ%^Vd]æ%_ö¥]î¥_¦`ž%`¦afV&b.&c.¥b6&dFæO>¦dV¦eö$0²ã5ß:jÿf6"¤@&dföK°”¦iž&j¦¦j®&k¶¦kâÊAÜ•AÈælÚËTÐæaÉËmÚfÀì&o‚‹nŒoöæp 'q'pþæ©grgs"çr*§¸0çsV§uN§t–sFçvbgwj'tr§qާx’§w.…ļÕÄLEzª'{®ç{Ƨ|&E{E}šT¶å§~î'p5 Ó¸EÍȑۤMÙüÃÙ™DØÕ¨ÝP¥™R•ÐÐ GÀÏ µƒ×ð‘Fh×> –ñØÌ‚¾ ׄ†E OA<C¨ìè×ÍZ„жŒÊ$ŒÚ ÄˆÒ ËÌA!ŽâGåÐPõhhD<ÏîôÿÔ#pšIiºHIÐÊtÏ)Bè|Dðl˜æ,ÕC$މ1’ô hCxÎîpXâDÕCü +üèúŽy•Ò÷HD & óˆø€T²šéAÔi9Òí4iôìM›Æ‹MPÌ€SXt’ÿÔNqúP) 9Mê‹íŽñlOÌ@‘ZU„ yPÝO¬ÌýÐÏ+ D”ÆOXÌ.9¨¶©§Ô EéÐ)íxV¥FÄ‘ò«F nØáÌÑÁhjAl5,˜n ’ŸN–µ‘>D”öT3I¯:Qß”XÌY—Ù)žn©á@QÅñŒ³V¨êÏßÄÿÅ´&„!SVÈ‘± ù„WE(×ÎôP»J„5éSm+BXcåO³BÐ}*D©Q i©°ŽQ¿&–DdŽ`¹PÀšTÌx¸F ,•NÂÌk˜VÚâtÒ©¨À:¬ Y¼ Åæ)Ù+„ú*B “Ó¿æÏíÌŒ% UE¬>XΫŠÔA Q5µ×1j¸öNCEªï,ÎÔÔCa”ðdªÉ‚¢B‘ψlf¡“V,Îý4šF¤lxk” C¡ÕÌÒë:Aü,”Eè«Ym‚ö+Î:-ÁæŽÒ•Ö&,±œMFÕ*6ý”»ôÖ”}Äód~Í—P„–ÐðŽõHªÿHMa—Á"•˜Á”ºäJ5”=ÉïîÖÈ– ãU UM}Ni•ÎÚ©äö,½Lx¡®  ê¤Õå Žð ®A¨,²À©JÌ –O|ÞLÖ[% ü\k¿ø+•%ZÉ•£mMÃ0Vóº[¹O¹:DZù¬f¥Òbaïge,E<‚Ø@oEtÔa¥ ®ºÕC¸¯¢%—õªnôƒÎ!ù,ŠXmŒ‡777i]xdd}tc|_g„V}ªhn‹lo’eqŽkw™oƒpo‘yz‰yw—g|¤v} Y­_…°{Š{ƒ“i†¬fгm¶y†§sްz—¹˜XXˆfzŠu~š~l˜{y¥SZª`_¬|\ºM¹{X§kz§yf§r}¼dj¸iv´|kºs|Ü|6ìz/êy8ñ}'ð|2Ü[[Ç^eÖ]aÎd^Í}FÉzVÜjNÛgU×wKÖxUÇciÅksÆvgÊryØdfÖmqÞtgÙxxæ^MãZXèfIåeXêxHèwWãfeäopæshäxx…mˆ†v‡…{˜–m…–u‹˜~”¤l€©w‰¤}‘µy†Æ{„Õ}‚å€y˜…x¾‚I¶‚Y«‡g¯Œª‘zµŒg±q·“r݃.׃:ô…ç„(ç‡6óˆ(ñˆ5ò‘:É…FLjSË‘YÒ‰GØŽRÛ‘NÖ”XÍ’eÅyÔ†gÙv×”jÚ’{Ϥ}ߣjÙ§wëˆGë‡Wç–Kè™Uð‹Cñ–HðœVè„iå‚|ê™gé•wî \ð [è¢fí©uî±|ð¦gð«pˆ…††…•˜ˆ†›†šœ’Œ˜••‰‹§‡–¨ƒš¹—Š¢œ–ªœ²ˆ ¼›¥¸¨€€§‡™¢“‡¡œ™ºŠº†’¸œ„»’¨Ž ©˜¦«ž°´™§¢ Ÿ½£Ž¸§™§§¨¨¦¶¦±¾¹¦¥±¬¼‡¡À˜­Å±Ç¢­Á©¹Ë´»È±¿Ð½ÀÄ»ÈÕȃ‡É‹’Êœ‚È‘˜Ù†‡Ú‘Ú–‹Ô–—Ä™£ÖŸ£É¥ŽÅ­™×¬„Óª‘Õ²Ó³–Ω©É¬µÊº«Éµ·Ö¥¥Ø»¨Ú¹¸ä„ƒæ—ˆå™™ê¦†å¤œí¶‡ë»”奥麤巷ò®­ò°¯òµ´Ä»ÅؼÄ˸ÙÀ¨ØÅ´ëÁêÆ§é̵éѼò̧ðÀ¿÷ЫöØºÆÆÆÄÌ×ÊÑÚÛÃÅØÙÛÅÓáÛÞáÝàãåÅÅäÏÐç×ÈåÚÙôÇÆöÝÇñÖÖåßàåáÜõãÔåääíîðôêèúúúÿÿ H° AîºsÇ»uê4Ðâ·ßÁ‹ /l8£ÆŒCŠÔh±cC~ï¾ÃÏãH%_þë×o`Í1eêì¸W8sè€Þ3 ^½zü⹓wî>ñ|Ž3—Î`N{Mí ô‡®ë>˜'snÜY0¬Ù°ð,i¨ÄæÍ=ˆ!åW¯+VÒ 5«åC´¿òÖió¦ðŸjfÕ¼ö÷ïµzŒâÆ%×p!ó‰1k»9¬, ±Šý£IÝ8DÖ2¦¤Á]6h)x“÷š¥I¹š$e~ò¤ y\[ž¼¿†U+'#}Ï*޶,u øUC„J"9å ó²ÿÒ`iÓ>N §4Æ7? “À3†æZ^y åBò¼á"DåPÖtrvñXƒÈ)˜?Œ]C‹8À4s­×9ñÀ§\=€uÃÐàÜ~ýñó_€òC €ÖE÷Y,êÈQ˜ÎÍâ_½ä¢K^ÒÐö—%’ä¦ oˆŒsÜ5.ò $÷W!Ê1çt-¾H]Œ¹£ v’ ‘FkŒV=yÙW6K,Ab‰‚fbÇIãâŽó9VO"ÄÇ¿eÙ¢ÔÅCË&rü±\ri¶ } 1È\îТÊÕü¶£4À8ÆO6×\“ Eš€•¬3h“-rI‚â¸ÿ8Ž †Ø—Í\üœÆ9äD¨fÇÑgf3®3¡&- Ú*Aƒn :ä ±DcÒ̵9õdMÓPW<͘xv'Å¢ªÊˆPCê´ëî»ðªSŒ{´‹‡v0ÃŒIü`G2{øaŒBa„ÉÄÛn-­´R‹Âïbç®%ÐñÅÇëÒ 9÷HPv I$Aâ4‚ðÑæÁÓâzÒ„ØI¤¥g «²ƒÎÜ™«ÞþçÇ LÜÊÄÁ}ô±¼ð .aâ6$˜D0O¤™;–tBE” ›.ŒÌ®Ên°ÒŒ„"ŒQ„ .¼@¦ jñ+?âÒ.7o¢} ÿµ€:oÆsнÆF\£O"j ’†ÛÂô¨úŒÃH#¢œ+uÞš1dm.S¸fƒÞP=ÔH+!Fá‚"cªÃG 1Ž>‘ÅõGš°ã޹›œ~4·6ô×\Ð$Aü×[†-6ô|<´.Rf,M½䜶H=ô(ò†'1âX°!u<„%“ȤéËšô|XÕò‡j¬"i˜‘ÆGxèq­†”t€,jq§¿d#8Ð`’çFf²ÚŒJtƒâ9¡zlFKÖ`ÄÔ°ˆúõ/(Ô_9ªUЧAÌIÔQ§“ü….i~–ä­ÑaÆUÖÓ˜ÿÖºbæ€q[ ¬Q kpp“xCÀ0†Ch@544N— ’]‡›é"þð °ÉO" ÓÀÍ®Õ`Ú”CŽæ$B-ÄèÓâ«íèyy_CЬ bæ;ÎÁQ£#k" Ø#ð‡¥ÌD§c’YhøAqx¢ÒNcÖ–Ôc^(C(à?¬a‘/r¦!D_šIWÕøxÌNÆ%Ù„'f ƒ£É˜ó‘iPƒ ÁÍ#äÀ8°.q†0ÐÂülc2!4JAFg;’AŒ‚áE‘tΣK17ú!bVŠŒé?FˆcLbðÂr°JüÁ ãÔN7“IHRGW¼ò'ɱ [22ªb#¾áŸG®¡Ü„d5^`IT"hpAÎà¿5 â‘2d—jJ”ŸSÕ=üøNdåi–ÒuF¯ÓYD,ùÁ?3ø/{°À$\à‚3œAˆc į¦Ãÿ±3ÔÔìPIšÏUmguDÜÖ ŽF¬Á´#l RðØ  màgÿÖÊVÀò­Î‰+fY¥®¨ò’ zcDK“DËlšá hPP€‚¬lhƒp1BA°ˆ]Ù’” d²y©q‰,wy{LNf3o5„H†óž¡ îlÖ†2bƒÀŸ ÌŒQ’Ìd€á¨G-Ù]ùm'SÍIf„»ý½ ¯CÊP†0Ä‚°ƒ˜ÔÀ8a ©K§>W²Ï‘ržœ­Žóôzg}pÑ@‚!øñˆ-Œ 4Fbf‰B¤¡ À$l YØÍ/')™‰î3OÉÆ¯ÿ¤Lnˆ“½9"#,UÎ_5Üà?ü7†‡4ø° Œá$P@°# ¿Ì…dk¦l›“|’8¸*–Ž !-N8¢ h(ƺp˜RÚPÄxð„ àX °mŠ,$ µyÀø,pîüÁÚf¶FÐ<@cðA› ;N'`@bðͽ]U‡4€ *D¡âÒxD’°khA㽘Ð…žÄBäÀ€Åœ”Iƒñ;Œ`b\î«ð þã2ƒX-2` u$£; ‚:&ЀÖùá ¨Á2d ]ƒû¢Ð w áBH˜×…Œvìí:½²NxxmLlëÈ€,2¬À˜p p †86P‹4°øbMÈdFš¬ëVí\1³#Ιheç÷þÝŒ;¸ÎxÔ >àTÅK€ï°€ ÐÞ²Ž1ŒA°€&2aaAc¡øÁL&ÈÓ(‚œÿ1ÓËKüá“§(ïÌÿ&bFžN=I[(/¢À. 0ÛÎúäò_¢Ùˆv }&w’Š`WÞ?ý€ ±`,TÀFfkn„€– aòâð ^À^pmç!»Bt@•€ ë Ð ð  — ½p —p*w•s9â@€Xbïà5>ÀèÂf7xßñlÀ…P ÐÅ€Y›@Äp77#͇p –uk«'9 ±ƒ=(i+Öä[°´ € ÔÄ L脽k%Ò!T(HhòÕB8V7¨€ XkOåfq„  îW (‚¸€ _Ò;– ,ÿè‚0xA;2J}Hb$å}–~Ñm·ì`Š`7ÚøŸ@U@Pàlj±€<ÀB ±P Œ‘B W K`âP‰~HRtscîðzÀˆkšæ ^£¥ŠP WÀ·Qà´@ § ºp ä±<D‡F€WRu–&uØYxÅ<-‚ <† ØÀj@BPT @à”Ði!ÀàT°1Bl1@'¦Ž84JXiïh‡óTj€ a q#€ üÐ Lp Áœç$¶11P2H`1p×äK¿J“õ>âŽòãmmÿf‘Éòhù½ }Qð A’‹7$û÷c; ü7’‘iÜåƒY$‘7™3-¨‘|` õ¨@“P0;€ Ù +Ð µ0T@3?€7€¿XÄUô‹ }ÜÅôFÅp‚ ²  ¤µ@~­áŒø ’3PqQ=Ò7gügãxD€Ž¦¸œ7jÚG ›’&¡ãYš3 ÑáØ ñ` ›„ …P;)Ù– × ;ÀV5ýò1@C@Ê©œHàK¦" åq/‚>^h•áFxÃŒ­`‚‰‰‚±x ÿ¡Zh¼ W×<€wÊP <C3F ŽDPÒ°I 8ˆQ@ZR¡òT¬yŸa7ê€7â©$ ŸÒ J˜1 (àû3Àjóa­c ×Ðt¨GSläAÕ~6™2¢9êžjq UðPƒY¹ðð§Ð ísI 6ôYŸÖ ÊIåUû¨I‡ª™¢1' Û‰ Ý)|žøp· ¾ƒfáÌð°£§À>—IÀ™Ë©œ÷™ŸgòâÔJ˜ƒT…Q«âš°iðÐz€¶ W§ *ÇayÎÀ¸0 £°`ÿ¦ÿ  R @2ËYË™’I ÑP ~™KØ2TT9,JÆQZ˜‡ùIo P?5ÀqVc` )€ ШŽz ?% ícHŽ3 }æxŽÏyƒ5  tj§·†Œü0#´€t=ºž*G.Îà nÀ=pw «Ž ™>x³B1p0gÚÛEb“˜>ud˜A.Ÿo=±&#«àЪÀ:ÀBà®À–Ð ëI2Fp¹à«I@+¡²Q6‡jr3¡¢ðøÙq¯°‚AÊsop¨üP ÷V@ë¨12Æi2ˆó®Pgÿ*-aT«×Íê¬3" Òj Ð|õà oàΰ„ €o @-ë²ÅÈ?`/8Ž9PÑ ŽF@)gH;Kª“†^‚ øøæRÀ -±ñ•q`` T€Шà¨A º }>`”pœK‰8FPȰU˜d* OÁ¬óƒ†rcµ –PÓFðp u w ‰ª¦ u» ê0 «P 77<°‹ ðiZŸ8G+˜»,qZ¡±ð)(ë`.˜ðÌ@™ îà £ÿ°Žº ›P) BÀ€%ÓtP‚8BP9\ê¬gÿâ@ò€·[ª*À@±à¹I A!” Âëp1  £° î0~~! Ò7}ÊÓွ#BÀ¸Yôö€u…×.À½ÐÛwC \ç.@y§·P I‡QÐÿ0“Ê'[>€‹@ÀºDð½Ð.Ä€½^× 9  Ü.û"ÁüÀ WÅ‘ ¥—ŒjA ½Ks¤wÌà½p  p[·ÿÐ 0q?À3 œ´& 8 È{à–¸RâK¾=ܾFCËzSƒšà×`QVð>ò0°P%°µ€ê )°ü¿)L&Ão€®ÿuM(œuÇ|“ å;(i|[²×zZ °ÉÀ §#µ±È ° «à Í | º qiœ† %bbZ²œ§Ië@ «è ïpÆ›ñÃA\ ´ h5Ù@½@½w¹½„`2ÒÐ @šÙ Òà:æeZý£q¤~‰IÄð°Ë¸»óá7J– Ì–0YÉ0H‹Îúe2¬kõº0[Žcûƒ#ßl$™ Ãäl¾Ô¾ê+ ël5î ÏùAJà€ú%I2?0ûÜ8þÃMÿìTÈ0 z >ðçà ¼¼}w*ÌÄÌΟ É|Ùÿ¶%" èý¾pÍ.p\Ú Ô”¡”_ăî°ƒ§  í ¼l˜föƒ« ¢° Q¿©mûu ò02Lð ›‹VrI"ˆ,#ÀX²LD.R¢ü0zÃrÇV0›N­±0ƒV3Æwj –@ ¦t É0"OR½%30…±áX ÄÓ øÖ"PBQÏñÕ2‡  ð0Éf±=á2Ù³m ÉðGÁ¡œÐÐ × ´` —ДB£¬° à_` ‚°3åiªÕRÆ M3¤ˆ ¥Ý¬¾&J³!ªòP2 ~üp T¾ áØ—@O‰€o¦'ãÿ€ s!§1Í$Á¶Ûú9 :»m¶ÜÇÑÜvl2+p±ˆÎüàØÉ…ÀÝ+Â]Á*!Æ>IÀÃ=<¥¸@Úz=O§Úâ ±Ù ƒ,}ð ä¶Û )ƤaQ¥—'öPÜaq×yšà¡Q h¡Pt>©Ñ‚¼ž;Ð ßAú0 çN`|ðaà à ±7Y–µ#HáO»PªìÆEØq ¼ðLÓq¸ÙÐEZk ½%R'Œ o`&j…ñ=À+i-Jr¸Òª×"§ 5ÓqÁøÔP2…2ƒ0 ÜÔ` |àV` 懰]ÿ "vÂI®Ð¹Kî ÓV.õ¦%<4p9b×ðå„`'€O ùÐh0  ÷éL¢_Bð õ âXY ‘>é ñˆk<Ä›%ó$4*œÎ$k€h›öhê¨^"ªÎ΀½Í°&nî MzÐ ç øyÉòŸ ÍQS?}0Θ€.è„^ ‡~ÚÄÛo` í åðìOÖ"D}c3^óŸ{Å>À@(05&gPægžæ&’'g o0Zî.ÕÑïþ—­wÁ"‡#ÈSðSXTâ†M°çðŰ ¶È)Cþ)‚ v E(M ÿ…bîï®âÿø—V@£¡ÐµôŽ;/T³[ãA5Pvð ÝÓòÉÝðN·Æ»õaV`ÓÇ+àÁÃæß¡ËБ_B~ºnÈ;„u‰ôˆô&ŽÉþƒí ÂROõ•u ô2„ Ö),Q +0}ÊÉߢœA`Ù@àŽÎÒ>,í í‡6[2?ÈÃ*È'ý$AS}°U‚jÐ-ž#âúâO  ”j†ÌÕø`øa ïóN²œqØ{œ-¼@@¸}À€paÐO’½ PQ íp8&CØÜ úô:((í{¦Ì¹’D NÈ‘À $ÿC„@2[¤üI oþØ÷ ¿Ò@þw8Ê© ο¸=ëò8DØÊ©„`4°§ ?@–I’@»Æd ?&D’è‚âÀA7R3^˜­^"F’hÓöÏ#?!EŽ©ŽäI”)Aš i 4"D²AK²cG¶kI¬P2šË‹D˜øàÑÄÁ+\QþHr_6РÙãæn¥:¬YµnåÚÕëW°X™ ,¦!1c4å‘^Àâ¢U'˜*%`¨`àA$`ɰ63"+?nÿ©TÉ’ñ㓎빔šDãµ1ˆü dIj6yÒò£ Í•'+4X¨ÐIš4‹üäU”ÿ‡/ñGÈ$çæ½[“Ÿ?¨Ø¡9ÆñUÖÉ3˜„ÉEÖÈa$’¢  ®H•*m\µ%“p»½˜·ÈÝçïž-P Þ1düø¡˜ìæFBô'¦ÚNd iê©Gš%úè ¸ÁG1õBJ/”v+ˆ àôÂDˆRx♄ ©ç3EX"qŒêš´ˆ y@ÂÆˆAÈ!‡‘>¢©G1ó"œÂÈD’ªjšÍRè%Dyä‡F É⚘°á§."®¹šl@ŠÆjøÑ#¸ñB ²$!E,Ò#“˜a‡žjRš'1(!¡êÁòš& º&<+¡1¢ˆÿ2ËRÍ5%iKiäÉF)L‚ùA†ܳˆD“0DÅZŒq&©˜èƒ‘‹ÄšzM³Ñ‘pº¦ËÝFä‹'j">œÂ­Œè㿘|åG¤©‘>Š8¢kZEÓGXCÚ’»kÒ«'if¢(LÈáa«‰9þ#“X™@Bò?hÈQ„LàêÙfZõ=TyM†¤zú-m@\@F!ÇÖløt.¦zɨ*›Ê)Ë œã¦#ܨ­vËeƒæ¾G¥"D¡z–E"‰lÈA¤š@¯¡÷á>ÿLÈW*™`NE"´qÕcXA>wd‘HÝrb•YvfƒNVˆ *³¼£ÿ‚¤æ'gt"ßóôå_Û #h6aDƹh >™€iE‰ X!-©^gäù9ßjAºVªlCÊGª`ÒèˆAäå_ú/]b»$Xh~蜽»î$YiI´Gt›@kª©†œ¡_Ê) ØhÒHgk1ô•¹ÿ8⺷Íu)PlSbøE§ •˜!Qª'&·7¾=7¯×LwcQâ½øâÕ%¨|:‡ãùν“ˆ„ŒbØÄ¯þú“ ‚ZÛ–‡¬ùE¿¿šÀá‹?Ùl¨r=ùý~D÷ÀÎo€ Tbâ³ý1~¯úÞ<¨£ÉÑÄ=•³7ì‘ÀÆôo%ò+Mÿ6z!Š%a ÙÈÆšò;|\°cÞëßyÂ+d&M᜜Ĩ°{šÓ  sCuÈ&’ƒ Œn˜C VHƒWâà@<œŒ°„'üLmt¿ó\+zAjàYæ.÷¤‚Wd`n$• þßhÎÕ &%.Œ" M¸Eð}OxÄsSøª˜B9r2C¬!¹¹óÁHzG´‡U®HBRFV€Q˜HfR’†ÁJ/„À ¯0.‡ÉîrSÇ)âѹۣýöG2ma4ä!ûf+hA‘)áÝ9bÉÂS0ÿã0æñò=(ºëá™ÈíД-t¦£#yMlb‡Ùäf7y´Mo†3›àg9½INsŠé ç:Ã!ù,‹Y@N‡ 000QQQK_vNaxvOVq^vooo_v‘Mx¨`r‹jw˜}nyz‰xw˜g|¤u} Y‚®~ƒŒ{ƒ“h…¬fгm¶y…¦sްz—¹‰S[ŒZf‡eyŠu~•fqš~l˜{y®XY¬|\ºM¹{X«aj©kz§yfºeh¸iu´|kºs{Ü|6ìz/êy8ñ}'ð|2Û[[Ó]aÎd^Í}FÉzVÛkMÛgV×vKÖyUÇdiÅksÆvgÊsxØdfÕmqÝtjÙxxãWVèfIåeXêxHèwWãfeæshäxx†mІvˆ…{˜–m…—u‹˜~”¤l€ªw‰¤}‘µy†Ê{ƒå€y˜…x¾‚I¶‚Y«‡g¯Œª‘zµŒg±Œq·“r݃.׃:ô…ç„(ç‡6óˆ(ñˆ5ò‘:È„FLjSË‘YÓ‰FØŽRÛ‘NÖ”XÍ’eÅyÔ†gØw×”jÚ’{Ϥ}ߣiÙ§wëˆGë‡Wç–Kè™Uð‹Cñ–HðœVè„iä‚|ê™gé•wî \ð [è¢fí©uî±|ð¦gð«p‡‡‡†…•˜ˆ†›…šœ’Œ•••‰‹§‰–¨ƒ™¸–Š¢œ—©œ²ˆ ¼›¥¸¨€€§†™¢“‡¡œ™º€Œ»ˆ”¹˜„±••ªŽ ©™§«ž°´š©¢ Ÿ½£Ž¸§™§§§©¦¶¦±¾·¦¦±¬¼¶¶¶‚ŸÂˆ£Â˜­Æ±Ç£­Â©¹Ë¤ºÒ³»É±¿ÐºÁÉ»ÈÕȃ‰ÊŒ“Êœ‚È“˜Ø†ˆÚ‘Ú–‹Ô–—Çš£É¥ŽÅ­™×¬„Óª‘Õ²Ó³–Ω©É¬µÊº«Ê´·Õ¤¥Ø½§Ü»¼ä„ƒç—‰å™™ê¦†å¤œí¶‡ì»”奦麤巷ñ­­ð°¯ñµ´È»Ä˸ÙÀ¨ÖôëÁéŦé̵éмõΩñÀ¿÷ЪúÙ¸ÇÆÆÄÌÖÊÑÚÜÂÄÝÎÐÛÛÜÊ×åÚÞãÜáæåÄÅäÏÐç×ÈåÚÙòÇÆöÙÙåßàåáÜõàÍúéÚäääéìðîòöúêåþôéþþþÿÿ H° Á|áêcÇ,tè`¹²ÅNŸÁ‹ÙaĨÏ⿎1jÜH²ä¿‘&SD©²åI—.YÂ,)s&Éš6sÜ÷Ï\¹qæê{çä»wúúÜ×ÏßÅû)%˜Ï©À}X±–„ªó"ήÁÞ+’¬W³gÑÂÔwëÖ9pàäÉ+W._Txë‘£ÇîÚ5r€ë¹».Ђ!éL¯ÝÇøÖª%øUleË“Ãf~¹™sg AÃÊðjØ.–Þ¢Ö±š3Hú:K±ã¼kΜIz´§ªGn…ëZjóp;ƒ/· BÓÄ}#„è^èë¡ÏaßRåå®ßÁwÿŸ“|ùιwÌAß4B¤2È ½#4g¨2HºÄdGÆAò…púdðH}®9Dn÷ÁC FT×Ñ!„ˆ£ÞuÚ]xwã¡gÞL¢ˆè}¤{ïPCÈò©Èš>®U#K8°ƒ3óØ„€Â½c tóäÏ6®%±ÜƒZ§…jR†Nv—Òˆ-QYe‡›YÉ!zŽöÊ9n¬±†Ôå¨O¹ñ‚K.÷As[n’8Ò›)ÀNsÕè£3IÉ\n@'uJF e”\m¤¥I‹2ŠefÒTâ…ìXž#d”QÆà€6Ï}Î@35H aärèdà…˜kì1>ÍAÿ£'𠿆\!{´ÑÆÃ!ª§¯m ©‡NéX\^øŽ,—¸±Ç!vBˆ™×½çGFüa&;²˜rÇ4½¢ Í/¶êsM5Õ\³%\tÁE$è{h”ÂKl–ÅÚ›¬†*~£'8~ê5Ô‚C]8á B zÍ)*v^:”%E!:¯“õªu¬¢ù¢µqYû^øž…ç„c¹…jæ{á$÷LÑh8<Ë8ˆ{ ½’A¼›(ÈÃvlÖÇ]4¤éyÎÒL7Íô0zܱ4DÈ¡Œ2AáƒÇÜ¡1rDã4Ó´¤’ -g;ÍÓ’` KÛt×mw† å­÷Þ|÷ÿí÷߀.øà„nøáˆ'®8KQΣ0"{aÄpÕ$qÄFF㥒2µ ÍÈž|ƒñŒûZú…{|oаǞ¢óP¨ÇIœÙyä„}¼ð .AD6ƒ”ª|¢ËÂ;’d…ðÜ3°­ýº¾²k<©¼ CC¶† 2Ä~¸ð¦~˜AD¯¡gpKG·LÌ]AôDÉêsöd1ÚJ„ÀíÍN^æâ“ˆP{â|~(Ãúú â©ëà@D"<±³Ž¤ÊÜq›”: ­N=Ä UØ=×…Ìg’ÆÉ !" Á†Ð”`€„"÷P˜´ÿöK¤ƒ:»DGæQ h¬#¹1“3ŽàÄëù*…` eV˜ENÆgP’GävGôafÃðÊh†pìó‡!Ö ‰Ñ¹B; KYŽ¢£Ë)ON:!w°(.²…Ú{a A3 ?ìÁ f8CQ1”¡ExäÁ²Žˆƒpp…+h1«Ü\£8ÎÈ“+‡9å¨Ë„ÿ›’!ɽZÚò‹ ‡! #îÌ‹ˆ8ƒÑÈJöᘒÇ4Ú` Y¸Ã`¯zR¬@’›3åÆ“Ì¹BêD‹šA$ ÅIPCSš:C Ÿ„OJ«}} Æ4¨±Ëd8²‡fÈÃ<С…0daŠÐÃtz¨s¥ËWáøk§ †ˆiì¡> E«IŠ»Y 5÷­ÿðfª*­>v·Øq™¤…°îêЄ8mpà‚Lá…CdÁD ¯0â*LE&-i½JE„Ѓ!;Hýî74œ pLÜJ¢duô£ð«!î0(…™©–DÄ74å-¬:€ÄÄÐZ÷|˜²1Rà »ú"LaÑG8’qW 9T(Ròï-)ã+R=ˆ@7&„Ô3Lãÿ´IÆ ÄàˆH´ .HÃ,yB 5šP±ÍªËÒнU+fË|%æ.×ѸŒRš3t¹êƒ’b°¤APG¸Àc:5Õ‡gÈ5ƒ+‰{uhçwÑc&s¬Ç9ër"ê=w)!Úw†o$â ™f PÜ aHƒ‡+ùä@ËtʲrBá—h»Ø…–õ£Y}ô»÷CÄ‚íTWÒŠa d0P€¬€hHî !L?4‰²ÉFŸú„¹x8é=%ô¯°wmmoûàØævZWâ…EöºÔèå4Ð †s! ¸mÀ2 4„Áø$ý pepÕr˜ÿ’“â;N=•à°FxÂe^@¯å=àšŽ„RÛ‘ Nr Xu²†0tá²p…2e<|` W(hÈ5Â˰«>ø ^ólw½ÖýLšA22_ÆôF„>qM¢èd@Ãè$ˆ2„a˜€Æ%‹ù-$—³Yƒ²è­Ç|æ4§5â}Œ½#eOm‘ˆ€i°=’ÓPƒô°Y ÝÐÀÃ&ð…=``,d&Ë þH„¯¶O¹®xÆ×þë`/*Îu½sìœÃ•8&2 ã Yp•Wå0Eb;`‚’žN„ê6VޝõW7÷ õúÿíqÿE†—8ÇBµ>‘"äÀ (: ðà†KÈ"Kt.‹¤àÛpOÐ'¹r§Ò?`K‡gp¶vàQæm~qrË0«/Ï@6: $P=PR+™àÐ  SàNÐ'ú¶oýVVä}1–xã>„‘†(´ 0—£LءРп€: @.Ø û‡  "e¦Sb+K0÷}AHKi(˜Àâ#@ QàL ‹àG€Ô`QÈ 3R<Ãèp ¯…ps£S{Eˆÿ OÒroê!{a††(„H~—TIs7gC  çp ¼ QpÐ6¤ Ð4  €Kó6µøN L>f3ŠAð Kã5Ű4Å5ž˜ŒmÓ‹ÓŒÎøŒÐÒ8„fQ‚ ;°ì@ K07à °,P%U §£¦¤ _¸Ðæý´~øu h‰™¨‰üøƒ˜HûÐ÷—oÕàoÏŠéà´0=0.Lh*h,€ ?8Ó _ðŽ` •0ã èÐ >à˜Sc®E!.‡g؃›~ §ûØ®Ðõÿ# ¼ÀU —0:úA.|’W »àh€ ¢ó{+Š”“À ×p:P’ISAÔp†Ðe¾—0Y“ÿè29“1 ­Ðú Q°W·}Eˆ’ð Áð 0ß° Z€Z`²ø#ˆ€0p0‘p èà  î` “¼0 “@4¤Aß–a sÖ¶Eâg–l“¡)¢”=°<3xò›0ÿõ) ÂbZEpÅÅ_Ê%šAes_Öž“¡–lé–p©}æÙ[²)?¯ÀÒV˜‡y –bD’Ð)™”ùJhÂUæùr[—ž\!TÉ%¡îùž-Á¯€“ú±“)Ó“ÊéPüÉŸóã}I}° ú!QÐûWRo¹;ð ´àG¸@A€‚ð Ú}g%%êI¡Ú€ýš6FAšhî 3®`=†gf`´@;À„:à ²0 ¿ “ +°G 1À„7@F@(“è) "*Ýd\³Nm(`Ê©§{j ˜uÖÐtÖ` x`€&Æñÿ á%% ¿ÐQ°1AÐ~18§ùÇUrÙ™&ò3FjœgÙ§5ö”u`ÖÐÔà>Aà” ¼^Zé°ŽŠ¨P—cDT Z¤çb€#ÄI{È™œdyª¨º«ê3­úªú¨D0«LÀ %éLлªp‚•>@6D ¸ íSb½Wxª P¢:–Iú¬£Y¯ÐÚxÕª!ti—±ŠÔ@¨f€;)ÐP (àÀΰ™@ “Q 1àF`7à oÖkâ@o}p- %®ñJ¸1b•H¯J Ÿh¹V¦Ú¾r °` %z!´”±ÿQ¥t¥Ar2À„Nj¢?AÀ„S•D ¦—*oz¢‡PUícÒârP". ÒXjf-«²yšªè$¢ƒòA)ìq ïP Te Ø 4È Õ0´;0Ñ£5>Bp·x«´ErKÒ]Â!-9r(yóʲ[‹µ‡{µˆ{@üšSš Š9³Ø‘*ÚØ%…¡$²rë°½ˆ ¡°?°; ”¦B0ЀGÐ@zé·¯ÒIóÂDÈÑb£ªžë­ÒŠ»Z›¸Ý¦!£1?çP?•»»ê æ² UØ €à ¸ð“ºo1 Ip>(gCÔP G P7uZ²K½ÿ$¸0“©¦8ϦD3US7}Çv\‰¥úÍÎâQ² •Â"úRý¨PwoPÈ’À’lÕW} ÛS v‹® Dq` ì@h‰¶XO´ ÑÍýu»ýÓ㬸èÛµCmML ¯ €úáÕ* ƒÕp ±PÈ&`”•LkÊ£œà4<7€MíÅǃë JqÙI“ÙkíÖ†ÛÇClk­!)è 3”Ê€Ýz ì ‚ÿ°`è`Û§À  (pšR@—³½}r7A8',¤(lJ¨D9­Ó ËíÜ=¯›­ÁQr.¿@e“KUëqGò Ú= F€‘ÀÂÿ€ ”PÉ Þ¿P’&IEá ð]$#þ¡Ø!¯ÎÀß¡‘7žÉÖm-àÍ ãEӉʸÌûŒw# ¡È40¾x¶ ‡xNðPáÿPÀÂ@ ²ñý¼->À K# ð=м€9 ŒLƒ5¸4A .ÔXæf~æhžæ‹cê!SdžܩÔmÝ`HÊÀÎ0ßýp` §Æé` Ãw›}Ðÿp9` Þpkp}?ú}*,ÿ=Ìx\>ÍÙ›^Ä2¾Q¢~ÿTÊ >:–ÀÕ0Å<€€à°°’p Lþ% )•%ÙiŠ9I°djc bÔ¦!ð°?úcÜv ¡ÿ­é]à®,íÓn¡~$£ž¿ÚÜÄHá ðí`¼K”L8£Â8êÞ¯ A@±u+Àž)™6ïe µ‚À¢™ @Ì_Á’ÜÌã@]í;m.$o~ßH¦"ê<ærà|² +!€ˆ ¼ÀGp©¼ 7dn™VIfàQvÐ’Ø!ç¡3·ê¡¶ÿÛéž>ðŸð0ï$ ² Ú~!’À”qübÇS‡š?»À Y£Õ ¤oŸ àA£Ab0Id¢ò¡±«•ÐDÕ /Ï1ŸÙ6óí¬4O­^ žu?ñBßÎPô°ÛkÇúf˜j9> PA–tZT¿bƸÄ; =2+€$ÿéàìø/ù×¾r _Ë@Ÿ@¼ð'¨ þA{ï½ ò.l%úÃQY’oŒµ§9 ÈÀ ;p [qé.Þâ84<½ø¡³}·š>ã #®à^çÂÌû¶•ðP9I° — £Sk$Á.#°gó®Nzÿ¾ú²’ìS0:µm'‹ÁcoöÑ^ðG?£ñ‘žu² ’ _U ÇP$|ÒÞ—&¥ØÑƒ 4h×¶9pÐ@D˜2û ¢f‡¢{לA›7š³kðœý’õJ–3rÿT®d¹’]K}1c¶¤Y“åK›9u¶Ä¹ÓgÍž?…ª :ThQ£?e껕Áº[®2ÜZó\U¬Y³jtO¤³cóœ„Mˆg™.<&KÒ$uób²câ•.K¶PósÆ!=ˆäéû/¦HŽcC~Lé3¨Ì“ºœ<ie ˜kÞÌyçRXSc6……õªVÔY«u=<ñá#GôeÈÿÀË™¾QQ~]‹¹p’>D…ê›Fè8crõ­æ­Oc5}_“Œí÷󱾕31_öL¹{æï4¹ÿ´h}è2”®z:õû˜« Gwí zô#IfgH’ÚŽ‚°OŸ…(.á!D}ÜûªšÕX[.¶$®9Š%í"Ãn»ðÀëл‰ ñ¦1”©)Wn‰ ½¥Üƒ/5®¼+,ÅÊŠíšJRÐÁ3iF1ºìÂËF¾¹èž—âJ±øÆr²ëLÄN²ÊÊóÌJͰä°Ä´Ô¬*Yh£M–¬\|ñ›s§¤N«š«¾r2‰#|Ð ;y™G¤jî ¦Xâ<ÖèB•ÿj ù%ž¥"¼O,gä‚' mê©N§¢ªâÌË*¹ä4©OAåR%¬nªÊ|Q¦ßtG1'Ù¥ÞN›'Ñk®¡S"¦à$e„?Ö8á„0ÈXcYvH"Ø&„ŽO}Ä:Bzœ2'¤¨Ü²ÄP-ótÔpZµÅscüŠ’ ^A'LKܱª*H«¡sÎ$" Ä<þˆÆŒ2²`„<\˜B”_ÆšG]ÅÄ‚f9:+ÝÓq+±Ü(-.ñ\™ÌLM¾Ö.È@¦W2@gÞ¥¨…¦¿±(´X@îƒ &ž°'2ÉàœÂ@¦º•¸ˆ$èùgÔa‡ I—\?Ä8cÿ.9FùEŸEY¦ÐÒ¹ºµié<™éhÎ@ ;ƒ lÆÃ yî*뙹ᆳrÀÎÞf–f𧍥<¼©;«ÚjQcØvÝ Sy“\ ÒÅòƒf¾˜¦ñ#? X`‚ %áH¿†4Ö Æ™p°¦ž$x™riÀŸœ¼ÛqÕjÉWµ—ÂjرDL“;¦šØ|(ˆçÒ¬‘>"ŠhŒe×höY [íbÖx#Ñ$n°†ž$šÉ®¨Â)ÎýÊõÙßqŽÏºwJ’…iãe+ !î„‚ 8i@÷ Äú°¯>ìa§ E¢¥¤ÕLÇrXCÆ’×ÕCi.A_ÿû6åÁo]lTâXâ´b:Ô¸¨G‚î4…ºtBF ‘Ç‘ôQCD´‡^"©PYh@9ø"kGdüæ·Ú‰„²]7?ßIˆZZq‘ئ0äg¸ØÂACà „@ÒÂŨÃìê†Ç lp77†ƒTGÏ™¨D<æqD¼3¡j¤8 *.…BÈ@´ÈE°Éƒ_€pÆ̈j9)Xè Å ²x–$ìé,@®• 9M‚s")K">¦k,3lŽªb2ØÔIG2°S zpÁ Í#fèƒø`†h,g#ðø/‘ 8€ ÈØÕF„p„jØHT LÒÿ§¾Qjï+aüxŸ@ÊÄg‚ bƒ»Åà,vú;D’<ðÁp†=Èö^4ÂpB.à uð/?±è47ã-Ì,åo§Ô&Cz¸nr MfK‹"œÅFȨ – £F(ƒN€Ä½ô!Ð#4a€„%‰³ä‹äü¤c4õ¥¦-4›ºÛ)OŸQÞÁÇ=ÖŠåY "Ì@£À…¢ ‰ØØÇ¤ÍE² PÈÀªT¸,yÅB!t' E¨¹rÚ´]Ó&jõPOÍÅ ¾§ŠcKÔY4rèMG˜$‚06²Í«IèÁ”à€UÜ É"t®Õÿ–‰SM eR2¤Ó´ÚQTš= þÎñYІV´£%miM{Úsd1¿øÅY€u–`Ô ‹/Šù `#6¿˜BLà€ P hÄ/ŽñÙe! =B6ôqDèFWºÓ¥nu­{]ìfW»Ûånw½ûÝèJé\}Œkþªu¯–áH€­:} IÔè#ÐqÆØT!¨d ÈB®!©IÓ:ÂJež{D´–u2l­£C}ºG¸–7œ1YÙÈFè@猤€ŽIQ † F8Àš%ˆ,T 4À1 $¨7yÛxÇ>ƪЛ‚ê%/ÑN³ÄYqÙ¬@•°+aCÐߦÿ ´ô:±ÁÙ9…ƒLÀé4Bì£uŠÂ-ÚÑŠwPÌš”E«PfÂã)±ùƒv»“Ê"Ob,û-%‚ƒ0¡ü‹”b a$<ãÍWÎR YƒG8‘‡LâïpG+\M r2ou†*»Y·ÎÙΞÁsžM³…Å„!ê§RÀ B¿ˆpFªqk4ˆ…ILžAiD’7ðA5T2 4sËD¢¶ì\z,gj_hÕ!Ì,7Çëj#ë#Öú˜u}e ƒ¿ŽM׈ ÓL3©[!DóMÕˆq°A„!Ü ¶Fƒvš×*^ûÄÚÿö± ×íT«ú§ß·Y5Ìk,–ÀðÁ¹cù_CY›£…`˜%%!ˆôúà‰)È@þ´´.ð²fj)Ô>õ¿·}Ç„s¦Õyžh­&'@*ÔÅJP²zïâ#dTÊy°r¼erQh'C(B ~ T£)þ¦‰µ•Ê+æµ)žsœY­²™ÌH«˜  'ÀAŒ‡i¤16ä$BF­Üœq’Óá0Dßcç„h=\—þ>3sR¼*˜­ÉçBy›£}ÁÛ„(˼¸c`eO"[4øà#XcŒá ÜLós–±ñ‚W·z&„†íÕ#üÀœØ`ÿy×ßp#Æ9ÎÒ)æa²´Ë·9󑯹QœDÍ8Âå¥Û“5@5ɾù›Ã9S»¸ª>%y“q"‚í#„îû>B¿‘‚½|9 è€7{qºå(?¤ã‘O‚?ýÃå›#¼¶¬€.P’ ­ð?‚S8³;»ô< =X“rÓC=Õ#p€¥±q7³(¿j=ü5hZ¡xãAgЫÞó½çj¾³¼|³è>Š<,¤° Am‹>T[¸U!/o’÷°§Û °¯*‚èÿBx@(ëAš+r<+» Ô‘k83Æ3ʃ û££œ80ä£S#0ëÂ-ü±ÀΠÆë¹Þ! ÖØŸ€j˜†i‡Ö°hX¡#HˆúR¯õc•þ8º™šÃ«ø+A$¦¡£BÁþc¾¼Èã¶y>è{AGl8t‘ 9yÔ HƒŽÕ¸ÒQÑÃ$älPAáD¿áB¢/\ÁP#¡˜[EjìBlATš¾†39'­ÆH·t”Ì©ŠÇ,þ‘,›x®iÃBä¾y”.ZÄF,ŒEQúz\Ä/äÅÃòJe|[Iåˆ5v<¡ùéÄššÇËÂÿRöøƒ®'<Ál»ÈŽì’p|ÂnÄÅ\¡óEƒ´šc$¦q½ØÅ‰¬<ìp¼lôCLDk¾,¼¶ÔÅßIG€GpKIŽ!ªüÀG‘‰Ç¢©K‘I¹I6K¾™»¬i«CÔÆSóà£EüÆ’ü: äÆ^ôůqµxCúŠ¥3Dº±yJߋʩ$KQ³ÊYÌǬÔÊ{¼®´¼«ʇ҉KDI³¬/à…Ø¸•õÊOªbd œIœËœÉi„Âi LUôË+ÔKAKçã¼@´¿Ë$Ë‚4Kó·Æl:¹«ûx¬®Øqj ½ÌK˜£¹ÑÜ1²ê±ÿþDj¢ÈÂ<¾WÔM™$Mô 4̲4K£<—×<‡Ø¬¯æ Í×`Kܬ¼½»[ ¾.MVœüûLW\³ÓŒÂÊìÊËøûÈõ<ÌqḺ¹Æ<ÇDÈ„¦ÉD‰Ê OåäË÷ÜÌà´¦ADÎå[+þ3>Q£Iâ MóL8Š“„¥¬(³LKš<‚zK±™¹|OLMöŒ¼Y¼ÇÉëÎ²ËÆjTÑUtPî,ÎzÔÅö$ÎÔTM¡â˜¶Œ* õE¤Åh'¤ÑÓ¤ËøËã ì’%=8«BÑLR'´&Ó\Ïj#@ÔX!ý¼†ÈL!³\ÉdÔŠþÜι„Q'„ÐÿÉ"Ïãä±{DжâI&M¾áäÎ…J ¡QÃÕ\ëŒ ÚS_tÈÂ8GÛÔÎõDSeÑ5Ï$E)4OœAÝŽ<Ìœ£+%ÏB-O=­ ‚_ø¬_P®O=UOÍ­Ïâ… P†ÒR†Ú­ à ðªU[½U\ÍU]ÝÕì¸>ÅšÇôRhÔ†Ó–¤ùòσ{Ð]Î9"O#jÓïìËšÄÆf•RÔ ÁkÓSñ¶ç„›m8HqhA t ѵQ.DAÌÒÈËËÉòÌHâóÌÂT0-‘Ñ} È´£Wñz+-ýaWr½†3‚…ü/oÄÒäIµIi„Ò¥¬ÿîô–&ÝS†-Rg•>*AOY¬T %JW‹Î ……åØhPåS¨êJ°ŸÌLÂü*ÅØ°DYˆÐh¥SÙ<#YžE“µœÚ1FµÇ7EQÌÒŽúsYúã KÌj»KùûCC ІýÖùdͳ|‘ ÚjÑ•ÕÌ¿¹Ê¤¶¥­G è ~íV/D[Ô$ ª}Öª¼ªÙ!ÑG-+–•ÖHe>œ­Ö˜…Ö…Z³ò[Ȩ¿£µÚ;«[ÆÍ9¯»ÚŠÍVëÚÖW¤XÏTÓ‹e[ÐìÚÎÊKV8[nåÖÌýÄ4ÝKxØÏÇP]ÔÕȧ­RÒ,œÈ•¹È Ó]ÎAÿiLT?”YBLÜ+”B+åÍjœ±ÅÔÁ]E5u9›­,Ò J­Y÷”EüÏù+OÚTBZPR[¦->ßä ´ÂVøl+¯-ÚéeÄëíŽÑÙü›Y¨ÜÞžè^ü›¿¯5ÑŽ¤B§åÞwÝM‹\ÑíɹHë}_ìº×3 ^hµ<ã5Dœ8^˜Sð$ÐÍkÅ)¿mÞ^×êaøýŒðz<mÒÖÊÖµE ŽX%õܲ=Òÿ,Ý,ÝÊL a®³¶íÝð%Íþàýk³kD"žR+$¾sÑ4e×µEYjý¿Žß»]Ö¾³—Õ¿fÍÙË•>þÕ9ÕaÍ5ÝæÝ:eµÿ©=âôÑðYÖT‹ID1¶a.ã>ã…[5àÀmcÅE[#â<9c*6c+®c”EÓ UŠþãzœ Ó cB®âC~°+ÖX¿4>} D&¾aH>ÒuáÜU`E4ä%ã)¼ÑONNËêd¡ãEÑ“å;®dKFäR®áQöIËtdöÊïõá9¦ã[Æe’,f@ÎÝçSÚ¢µã¹„çÝH­H'¶ËÙ…çB®åi®fÿ‚îf,žR¡Mbšhb.èk–çŽöhŽN¨™tçfß‹áU”Ni•^i–ni—~éZiŠžç™þh¦i/îçÂ}ÞöE`‰v_T¾iœê±£HEu³iÝèp~èê¡&êf×|ôåç…efê .çš¶é‰få€#Ýž.MSŽh®vê§îêLm>°Öè>k´Öj™Þj¹ÆSw^k¶h¸Žk¨žk½ÎkçýêM½jJ&ë¨Þk¾ök†~g·žâÁçÃ~kÄ6ë¢Nç¦fì±v쾆lÍöé²–l‡nlÊ^l±¾ì{.lÃf¬íƒÎêÈælÓníNíŸíÊvíÇöì×ÖaÙîlÿÚfíÍîmÕ^m¶ÞíܶíÌþmážmàlÒ.íÛ6îã†nØ^n€&îç¦îâ–näæÓžcëŽnì¾îðïäVîúîîÞn<æíòÎîñFmÐvnòæîé¦oÜïóŽoÅfoû¾ïôöïÿ¶lˆ&lü^o÷îï÷ðØÖï¶6o/p[†ð—fô®ïWðWï ŸïÀæooo 'pßp ÏïæÞï¿ðWq 'ñI>ñ÷poqÌ^q×moèíà¾qí¦ñÚñ—oŸñ?r$·˜^r&or'r(Wéñ)¯q ÷ñ ð+‡q¼Þr+r—q*/òsÿ1ÿr-sr"÷îïò4Or!'s3Oñ7·j7ò,ó=ïs?7ñ2¯ó*ôAos5_s ¿s<·ó1÷rBwôGñ@7t>Ÿs:§t9ÿp@rK?tgógôFÇq.‡óL×ó?ÇòN÷tQtVÏè3GóSõJßtß®uU×t]Gõ]çõouWŸuYö`Oõ\ÿuPõd7ubÇtc÷uE·ëIWöe‡u`wvÑUt¥.tDçvj¿tl·õ?vh§õfïvHwd÷öoO÷vw÷Owt—tNïõa_u\/÷{Ç÷/uk¯öE¿öwÏw}¯÷‚/v~Ox…'wsöiwÿy‡øWÿwvgv‡7ø†_øƒŸ÷‰ßöˆ—xRx?÷'ø}gøŒ_÷·x{GxOùçxÇx˜¯ù“Gy—Çùœv•‡w–oyuù’ïw‘ÿy¡7ú£§ø•Wz7÷÷€¯x¦÷ù¨7ù›Ï E¸z¬Ïz­ßz®ïz¯ÿz°{±{²/{³?{´O{µ_{¶oû´ç Eà’¸—{º/‘¹·ûº‘»×û»f‰½ÿ¿ü¼‘ÀïÂÿŽÃïŽÄWü¾_‰Å‡ûQy|Í|Ì üÊ|ÁÇ|¶¶üÉàüÎ×üððü¤ý¡ }¡0ýÓo|•8.aýÖýqý؇ý‘ýÚW}ÜÏ}ÿÝß}Þï}ßÿ}à~á× V`…È8x„î(þãW‰G€ jV8¢P~ëÿ‡Sþ?Ö‡»Wþéÿ‡s0~䯌ð_‰À åGýê'•õW‰í?Ëú~é_}ò_0ð‡îW‰÷ï|ãvÿÎ  èß¿SèCèðá?E"<õ¨¢ˆ5ê`À¿…ç°ÚhrcÇúN ˜ñ$L}üG“v#YÍ„iòQ€—3ÏÈàÑ# }B$ªÔ¡"çþ=à"Ó‡2i"\È.À©=³>*TÁÿŽ&]JÖæ«qIö¬zõ-BE-{Pdõ‘Ø'õüÿµ;ñFd¨³c^µŒ"F˜SÀ©'kžyð+ŠH~ŠWâK´šI¦.‰—§i«-×6TÈxëÁŽúر“YÚ-YÔ]JdÕš±a…¤-ëNøòíÌkAS%ýÛdtæpÕ.g|@¨çü0+RÅ‘=œÕ#³ãñT!ÿÿä±CìLì/½1Ë<3Í5Û|3Î9ë¼3Ï=ûü3ÐA =4ÑE}4ÒI+½4ÓM;ý4ÔQK=5ÕU[}5ÖYk½µÒcR ÍÒw„§–¿&žLJ•Ô‚E>9N ¹mT’“„“ˆ/¾:ëLq^9HéÙ{}³Gǰ'–TfcŽdæÆ£­âásëÉ+¿‘Û!}*ÚâUTy}°ïþTRÇ¿’äQ}w)ì†2»<ùå#Ô|ô†¸éQz2ûóˆ©ÿRT9…—Qx±â¢ù¨<ôávñÑìÆ•“È ïuéÉŸ ¶¾1]ħ 3¸¸s(b)§¨É)H0×ø&.÷2!ﺓBå"¬è`½æu2Õi°†6„H[n¨ÃæL!4ä!ƒ(Ä!±ˆF<"“¨Ä%2±‰N|"£(Å)R±ŠV¼"³¨Å-r±‹^ü"Ã(Æ1’±Œf<#Ó¨Æ5²±n|#ã(Ç9Ò±Žåã ó¨Ç=ò±~ü# )ÈA²†<$"©ÈE2²‘ŠL$#)ÉIR²’–¼$&3‰ÉvL¨fkÏ'9JQÒl”“1e'e¦ÉU²²•®¤$'ÿß‚ÊTÎl–d±å-KéI]ªò•¾ü%0Ë\ò²–Å”.™’LesFÁ|&47IKdîҘ͜Ñ2}’Í“ls#Ñü&8…9͘uÓ$åÔÈ9ÑyMl®“3á|g0‡™•tB„ž”igÅðIJkÆ žþ|¥<™©ÏSô_';{ùÏ…f2 Ú¬&?É Q‰”˜ýd(F-éP˜Ø³e¥WG¹TQ‹Rô¢=i$7ÊÍ‚t¤ót©@©©P”žT¥ædiBeі”£3£)Mmº‘§ùìéJ‘zÓ™•¡BU§R—ªÓ©òt§9¥WSkŠÐ«–´«^åjU¿jž¬fô©õ4êQ©ÿÖµ²”?%«S·êÖ¨BÕªsµkZ± ×…šõžt­«Xïؼ¶Õ{ýg_=ú׳╰`}¬cÑJÐÅ*¶±ûT+d/‹ÙÈRV¤-êgA»YÎjv°“™R«ÚÕ²¶µ®}-lc+ÛÙÒöµýÈliq{ZÓî¶°“©-pƒ+Üá÷¶‚å­\IÛ[ß.×<Ä}.t£+\ã*·¹Õ5¨e­›[çJ·»Þý.u·{\Ýbw´â=/c¾«Þõ7¼ÚEoyÍ_äÊrfì½/~aëÞù2—¿ä­ïg;šßx¿É…ïßëßñ2˜3~ð} àì&xÁ®ð„éá ƒ÷¿âÿ¿…Ã&Ž®„IJ_ƒøÃ-f1wO,ãà¦ø¥–,‰1 cϸǴ­qLå«ã_ØÅ þ­“¬_YÄCòŠmŒZ%S™µ@~è³La#ó¸Ê^¾²Oµ,d._—Ìéõò—™,å(¯ùÅMÎqVМæ#¹Ín†ò±5ªS­êU³ºÕ®~5¬c-ëV÷cÖ¶¾5®s­ë]óº×¾–u­-ìa»ØÆ>6²Iìd3»ÙÎ~6´™½ìhS»ÚÖ¾6¶C=íls»_ÛÞþ¶®· îq“»Üæö´¸Ï­îu³ûÙén7¼ã-ïpÏ»Þö¾÷«ßï}óßúî7À¾î ¼àï6Á®ð…»›áx´ñ‰Sׯ8Æ3Îê‹k¼ãu?!ù,À‘‡777Obxl_ofc}nŽvt—qz|…}Œ{‚¤y‡ªx‰¦pް}–·z–¹‹MP^m“]k™[`½SS¬^c¤``¥nn¯hw¤||·`e¶fkºcf¹hp»mx·qq¸vs¿t»|}À]]ÎYZÕ\\Þ[WÜ\\Ï_dÕ^aÙ]`ÄeeÂdkÃjkÎaeÍekÊjlÃjsÊlrÄqzÁ~~ÎrwÓbdÔhjÝ``ÜgiÝhkÑkpÓtuÓuyÛprÚxwÛ{|æ^MãWTäZRã[YçaKèeFècHæbRäb]ë{Tâdcåhcãnnãssäxwã{zk‡‰v“ku‹Ÿy–•ž}‘ªtµtÃzƒÒ{€Ø~€Ö€ã€ê•|‘€—‚’±‹¡šž¢ž£¸Ÿ«·šª¿ „Ž£…š­ƒ“¹€Œ½š¦˜¬«š©£££©¥¥¯¯¯¥«´¡«¸±®¿¾®º³³³·ÁͽÉÕŒυ…ÊŽ•Ƙ˜Ï••Õ‚„Ñ‰ŠØ„ƒÜ…ˆÔØ’–ÝœœÉŸ¥ÖŸ£Ç¨¨Ì©«Ë«³Á½¾È»½Ô¤¤Ñª©Ú¬¬Ö³³Ý¹¹ä€ãŠŠä’’å—˜ã䢢䨧ᨨ㰰彽ÇÇÇÉÉÉÍÑÕÒÉÉÐÐÐÕ×ÙÜÒÓÜÜÜåÁÁãÇÈâËÍãÓÓãââþþþÿ¡Hòƒ È‹Y Y‚Ɖ!A†™dJS©6z bc‡$A’0!2’¤@\bÌpâäÉ Nвd I^xð8EÇ''N,)rd$IS¤ ):uÊÏ *„"2„¤A‘òì9àT0iœ,!9ĈD/N¬8 «O”šüü¢D *U`Œ`ÛöÔ "A*uÇAˆ5°´àÛ·(L^"á‘¡±bÆ}C…º‡P)UZì@št×P  èÈ"¦ 0›>E¨DŽY `ˆB@öì>,´9°€Á¾ú2eÚáÊÊ$b€Sò1q XáÂ+ ä¼­áz*Ž›¾(¬€‘ℚâÇO @ÀÀ˜C$lÄHAÒ•)œ2@uxr^¤hàÁ 8àP .pPÁ|lG}§l`†<¤‰]<âÈ@4B#L-à €U $‡˜bʇPððAp`9‘Ä‹1š"ŠMÑÉ&›ø%>œàC&ü!Š(‘@áD$¦hV‰¢¢R&•ü $PXé„%£PÂÒdÄC@!ù,‹Wr(‡///JJJVVVnnnMx¨fh„kuš}nŽyz‰xw—g|¤u} Y‚®~ƒŒ{ƒ“h…¬fгm¶y†§sްz—¹‘>>›LPZi…j}Šu~Ÿktš~l˜{y¤Y\¬]e¬|\ºM¹{X®eh§k{§yf¦vv»eh·hu´|kºr{Ü|6ìz/êy8ñ}'ð|2Û[[Ô^aÎd^Í}FÉzVÛkMÜgV×vKÖxUÇdiÅksÈuiÊrwØdgÕmqÞuiÙxxã[XèfIåeXêxHèwWãfeæshäxx†nІv‡„{˜–m…—u‹™~”£l€¨xФ}‘µy†Ë|ƒå€y˜…x¾‚I¶‚Y«‡g¯Œ«‘yµŒg±Œq·“s݃.׃:ô…ç„(ç‡6óˆ(ñˆ5ò‘:È„FLjSË‘YÓ‰GØŽRÛ‘NØ•WÍ’eÅyÔ†gÙvÕ“iØ”yϤ}ߣiÙ§wëˆGë‡Wç–Ké™Uð‹Cñ–HðœVè„iåƒ{ê™gé•wî \ð [é¢gí©vî±|ñ¦gð«pú²u‡‡‡†…•˜ˆ†›†šœ’Œ–••ˆ‹§‰—ªƒ™¹–Š¢›–©œ²‡ ¼š¥¸¨€€§†™¢“‡¤š™º€Œ»‰•¹˜„³‘‘°—¦½£Ž¸§™§§§ª§¶¦±¾¹¤¤²«»¶¶¶‚ŸÂ‡¢À—­Å±Ç£­Â©¹Ë¨½Ô´»È±¿Ð¹ÇÖÈ…ŠÈ‹“Êœ‚È‘˜Ø†‡Ú‘Ú–‹Ô–—Æ™£É¥ŽÅ­™×¬ƒÓª‘Õ²Ó³–Ω©É¬µÉ¸©Èµ·Ô¥¥Ø½§Ø·¸ä„ƒåç—‰å™™ê¦†å¤œí¶‡ì»”å¥¥é»£å··ðª«õ½«ò¸·Å¼ÄËÁ·ÙÀ¨ÙƵëÁùÆ–êÆ§é̵éмô˦ñÀ¾øÑ«ú×µÇÆÆÄÌ×ÊÑÚÚÅÇ×ÎÒÓÑÏÜÜÜÄÓâÙÝâÝàäåÅÅäÏÐç×ÈåÚÙóÅÄ÷ÕÇöÙÙæßàåáÜýãÍùç×åååíîðïðñôçæþòèþþþÿÿ H° Áëê[—P C}úþ-lxÐ ÅŠ!*Œˆñ"Æ C^|8‘ẉC"T¹±eG–0cæûF°¤É›)Uz©QbÏŠ;c 8 V6Dˆö Â7!º§èœJ«v­ŸÀ}³ŠAëFÏ"Az×®u8®[¸|!ªt(ÌUª$­YcÈRûI{Z­Ù^e€×s§êËÜ5ˆº¤x-°²kþ!EÊÔgN n3»cÇ.ž·mìôá‡ö_½yúö™ž7OܼÓóè±3ç-ܶmáÆáxÚê?Öõ`ÓG9âB/gVÉo–¹ÃÕÍZ—oÜØzâê©•GmÞ@zÔÌ}ÿ#ýÏ\9ä­ÅQçZœï~⬑ûN¦òå5Õê·`Á]4B_XðÊÑ@$2Ò8•LÊÈQ3ADò!߸c$„@#`ï`s ƒï@ô F rD‡Ž~,¶¨O9.ÆØâG1¶b+å¸1—„ â >ÖÌÍ(ÓÌ;Ô6É#{2 $nâÍ;¾¨2I€H¥2d7=ž(c‹0Ž9&.®s QFgx£ŸT6ób&<…ìÑF{|c&™“ʈ¦‹î¼‚‰{b!„üØ"4„ø‘‡ü¸Î+£Ü¤@ ÿ¹ `ÒèC4ÒP³Ð%\tÁ…$æTª_™Â²xiŒÿqó¢7~b$5¢zÓã7ß B¡™[a¤‹6²bÎ+\ÒN±V’«ß±.’ºb9ßD`ÍüHê7Ü1“‡3“ÊóÎ1!ºÈŸZ¬Xl±Äš›ÒM'½XΠ7ü‹w,LrcLGø Ç0wèŒAAÃ4Üp,¦˜‹É,óÇð$¼ÂòÌ4×L3DA™)µIa„¤Ò$qÄ :ãyŽü®¨jËŸ€³Øí·áŽK°Áka”oŠzü‘´IŒœGHÑÇ /ÀàBD$ѯZ~ èô+2®3‰&QHÉÀWcÿ}ßF•–³e3#a×Cøá púa°6mÁ,Í®ŒÑCA¼-lÔä¢;&ŒI&!ÒÜSâ~”Áx‚¨­ë=Þ ’È'Cäç%2xd’ ’ z±¢ËX¦<ϸی D á‚!ošEáÍ=Ö‚ºG—œ³NÀ˜@$4Í@ `?*sDù}c]|ŒÄƳ‡aáBò˜!FÚö›ñ´‡G< ±†M}Hch ªUàüö·´|N?ÐðÃÌ`†3ôeCŠP„˜!ó‚8‡U¬"‡ 5ÞQ¤Zù.hDž®&5rÑÎx*j¹4z~ Ä@‹€Ü` ³(ĺðŠu„t’ð4cÄh&RJ©ÿ!„ ÁFV¤—4DäFEˆ;|©GZíC%É7yA kÀ"±1 bˆÐ hZUÉÊI•ZÖ’T<¾QŒn†Nk“BJ6P$Ø3@c ¸„Æ ÄðI´ .HÃDx§ÿÔ›ê×!Ûz-}¼òŠ>õ(hÍ„”2B°Ù¡D¸?H.pÁÆÆ7õa¯eÊ­ˆªÄ[Xý6­K=H¥Hu‡M–ªƒÜHÄ–‹Ä  >¸A †­“åPeÍtÙDF£gº+9£QRMõ­Ì‚@Å02˜ (@VÐ4¤¡T†@¢V„Eî4#KY"<ÆûV¥‚W¸L-ñ^YtÒ”j3``ðÂ@Q@À’@Cüð‡?pÐÀÕ‡1#4¢qH¨Dõ%k9ŽWÉDD„ö>¸,P· YCºÀŠW¬Â n2:°„+ˆB?³úÝÐ~·L¬ØÿRÖ$‡ZÔej0ÂÐ#®ð&Bh™ hxÚ$Q†0@€°ñ$ZA9m©ehý*’çÌõæU„r†)ù!" á{î 4Ô =ìá]nG3ðp|a#@€øÓ mýHh‘æ+í"&;9LÆÓa Ü•‰E„ ¿¸BÅL9@€†˜Ã˜0/[ FBÒš‘ÔfƒñzFŽTñè´û<!V耖Y€7`âçŸ2˜@Zì °À9°A'd 0EÞÓ¤)½d»xtǘ*‚ÅŒ‘éÀÁjÐOæŽPšXÀš€XSX€²ôa‹X?žÿñFGWðŠ+“X@*0…¡éàæ=…Ѓ]€K\qE" xÜô.Eô+CµHë­¤äaËÅ[) Y QpÂÍ›Á' ѰÏq. Œ?æ˜+о ÈìJGÐ5¡¸ûJDÌT6Ó·åœ(Ìf ‹E&QŽaàBQ(ÇÐ<=x@4ÐA`€ ,Ìe—g€4Á° ø %+|v±°ŽcaÁ€àW¿zœQ}Ræ¨@+ ¬`•X nà,5ð¤,0û©k24ÆÒù´ßMWê~ˈFúA ¿Œ¸nƒ?G;b1…4c7/ÿÆKÀ4D`rÿÒÆ¾ð Hà–˜‚2´¥ sxÂ> š¥e…¦HNÐ^ú±â৘ð40 ³‚%9p¡p N€X`à4¤²޲ H ¸@ å`Q ø—b„=%fžUPKµú`×ÀfÁ?j7 ¬p«ôÖ œ h @y2-ß α ` íp ”¸ ”@ÊÐJ´c;ܰ‚,ˆ5û5¿ñ?"iQæJŠ„h’`Bø ½… à •.~"!b”À]»æ7'aÁa(w.òK(¤WÀ¯@y³ÀO¥ð†qØ=×ÿÆ'r‡bD'BRW[H.{ȇúP1Èm3ˆ“¢†“à àëÐ_Fˆ„³°&Ý3 Ž…RH…;$Ža‰”‚5™h©1ÈrfrPŠ¥H9ÚÔÔœ°€RM@ož;Aà ¬ rA@ TH Ü`‹'†‰9±Ôçà¨O•Ò³ |c¨e† T°7§N°¯ð ¡° µ@ ¸;pB7wD`À6†@R'ñ2)]øzh.Ó fÓ0 x`€%ò  Ñžô »ÐQ°1A`n1¤d·ØEµ`÷Ñ>æfÿ0   P ú€ Ip'qÄw%Ê0 PCcDT€O ß“"AW`.wAXƒ“:©I>ɸ€NÀa”³§$#è#C:@ úà8oeÞ¤b8w†g[9AÂRƒ7È“x i^“M:€ À Ü¡ +  ±P’Q2>`6pºpZgÀ àa}pèS²CIÂVàÖ—c2 ­p Äh&± €°îÈAð¸!G 7ç)€ ´°9ApsS@‚D0))iŒ‡PLŽc €Ä$CÒm« ‘1â4 f²ü1 î Äÿ4 _ù$÷ùSp7ã1 ò9ŸÊYN@¦‡àR*R0Êt€ç2\1b9ìh J›.â'³žä-²!†Rò°ŸG ¡°?6§#B0Í€G:;¨Ÿƒ’BQ3>‹R)ifb#”S–³ 1b”«`+Ç@Èä"Eò}¸°=b1 I€8EÖ<Ñð@\ôJZ%I'D¥ÿ9&{X“cb#ÁR :&îàI” L°R šâS$œ¡A)yˆÃ¡ Ôw±RN…Ü"P6BR'à˜‹,Úš° ³` “ó‹17s˜ U#ï0 éÿ ‚ø×—yÇIŸBð¡!:')’Pè¨V¨‰‡-§Ò7&ÚÉ,Ò¨–¬€ T¡,T"uPÈ ³à ¼° Ë€ Ò ÿ° Oàš 4ó9óÉ”GÀ Ì ¥ Nô^y H-r¯@9ѧfâš°Ù""ÉÁØ P>à6„R46_0 )@n©9 eÕ $F2€y÷É‚Y9>žª;üq j¡‘jÑ-¯Àv¡  Z…€àl€ È hÀAðN> ÿ ½*” d9+P±102’𽓴¸@¥º&¯`íÐÁâ6©ÿb#ÿ—v#H4äª 1 hYâ 0ÃùÀ±»° © ´@¡BC6@ ðzÍ‚+A\”h'-â'¬ ìP£2Ë•,R³p³~ë3k0«ú ;ÇS ´D«±p´qAŸDs:kp ò ©î¢(wY)jéµe¶~)57Ò ;  ò€ k Èà†  q ÀK·u˱ !IàS0…‰À I€°JM·©Â²­-Ûî`;1³8³&îç €¹OP ãr¶s\0 Q° 2P`´uk·³@ ˜ÙS ñù–§Cq ë°[Á…9ò‚ßÿ¹Øé‹-’)] ¬0 o ØÒ* rÒP«ÞšJ°À¼Í˱ЫÛØ >@©Cp80¹©Ž.¢Lʨ°ã«2Ò„bS €a @–Ô°G  ¿ûÛ«) T04q—%7p@q€@¨®[I2DCU’0Tj&·² W› Ä@ºÆ L 1—o¦°œÛ¼û‡—ëÛ°ÂBŃ›ÀZ„” ‘6‘0«· œÃ9¤g3¯0x cz0* mGNð` Æ€Ì+vKÉ鸰0¾°Â…‡ 8¬×03ÆåÀ9 ãzÖÿ#ª4 ­#°KÁWÇtT` ë  àÁ l´°v\ §pðɹmÍp9 ÛpkpJ6F5ŒJ š½£kY$¦,7ÿºÒ0NàS ATòMP°±ÿP¤`· ¤>ÐI4I°d0]c0Wÿ5)ïÀ9›ó‰+:°.¢]·<)«Òeº °Î P£âº:@ °±À Ç€ µð— ŸB@Ín²\]Ò {‘°Œš0 V“œJâÈ2\,‡(ùŒtc+Ê€ É0 ÿð °ÇÀ Gû»€ iz)‰ Íà< ¶\!d—d¥é"‘ÿ0 ú>ÌÚ‚Ëf2 ‡8 j5 ëP§ <ÐòlÇÿÐL†Òµà ¬S]­#Ä#3Í"Fi ä# žô Í";ÜÕâÓÔC½ÉàyA`Éq ´ð*)4> SÍ:"4PWMWÂÀŸ3J =+ Ô¤‹zç7]Ñ?ÑX: ²©@ '€ÉÀ >Jwí¹°Ò.°^. Ú’²O×âaåã ëÐ; ÄÐ ;P bm­®Éh—H.« Œ° @% ôbIp É@ 7W ˜S˜É Õ"0[½F/â¤xé†ÒÍSð4;ÀE‡ Ô xѯÿ¬Ø“0 ¯ÐL2 ‚%(|> ~v˜®=@CB Ø q aF}`wŸb"I/”8CÊàs]&HÛM iw 1IAÍ|€1 ¦DCò© šÐo¼ð “@ è *_Z ¶àK°ÑàgUzðXÓ­[vËÜE#.‡2ŠÀX£]s· ÐúC£ü \ QÀÃ1ß” ˆP§M„À Þ ?rš?U%[²'?Â⃪YúÝ .ãTBãÜeãI€ã@rÒX%ó ”ˆEž"ë¢[‚+Gæ@ÔJ4B ³0 nåDY þàSK –$ˆš 2´Þá àOÿv"<­KÞr‡&NÃÞ}Å“T!‰jž@’@ŽÞ›®‹ ú‚ ÷Ð ;·K`x°]p ä³ ×§VÜ$‚ž&—2ÛJécBÞÒ°­üA ·`OÇ#O„”ºSÐ œÃàÍ€~°&`Çv<°I -ýâësW+ºidõ  ‰-,x® •p#TtÝ‹(BY’(p4à • xàS°è3îв-8T…Ê àN¾“‚åÊosqQsH%„ ΆÒdÀO`y@`å i_+ù5xy â»Èá^)ða#ñÖ½‡„žCÿƒ%¢+_+g@ pñ¹ñÏ'¯ȰÂò™'Ñ &Ÿ3b[éLGîæ~|Vs¢±L4G‚A¦òîXônïø®ï Âïëk Ê@Àt@HÔ0ðl&8¤j¢€|s¢Së> C–¾3‚•Fc@íÖŽí²Ž%IÐ À°o@>I°ÂYòj_Û½pµb¾e5¸b::PÀv¸Vú€Oôî}°¿@ Öø}±n+ç­ rGÈ{QA¶+#ü®$[ùSð¥žÀºUÀÆûø5Ã@B%_CC4@r  9°s°Å'/ÎÏörǽ ^dS0ù—+°á³í¯ÿdòd-'âa°®æÂz`t›¹Â6€ ú¡ô‰[ðÑ߯ƒ AŽ`ÒŒýÚ¿]ÒGÊÌ$Ò'OÙÁ ÊÞ™‹µÂÇ!B’È{ˆ$G’èÓ÷ï_G!?r$YÒd9“)KR;øîÝAj*9¢ä(ïÈM)tÈð¡#EƒI’P“—ÇL?|Ì8Ó'MY³w»p1²@abI >rDÚ»f9Š$;RæÉ³*T&--MŽÊ" ‘#Æ1"öü±îe<|üüQfOY’fÊp9ZÁI «Ð%éªõ¦Fò@–õ˜­g“Ô¤I‹ù¶dØ›D"1¢ZÆŽŒiÿH«2}”o6A° ’CªæšI”Fyî‘ec9w=³ùóÏ•]†(Ä "3t„¢å#ʤ›moçîZ«É‚ØBÉ8Oå&QˆDª7S¾:\èÏñß–6\Ë#tÐA´#¦ˆ$ˆ#‚JÐ&‰zØA‰P™Å ôr‹šðº©¾u:ìp¦rBqDK4ñDM|(ˆ]v‰(ˆ "Š!5' ©v±œ›v™"Š  pd—aB<†ˆ D¼ šÖáì¾üòƒKžÛ4” õò!’I`«-}¦Sæ”–XÁ "Ф™fˆÒç÷Àk³)õ«’J’šIâ°ÃˆPA½ìŠAÿ)ÌyDz$0$šoªKA ,°€ ¶žò$äÃ)”WÎY޹æðÛÓ4’è¤.Èbàɽv™Ó2"Œðƒ=æ"MZáå)yäi‰>™B†$ò9Ï¢&I4Ò&.ÉÛƒ¨`=%Z•äES¢ÖÚ4ï\qËÍî‡4‰ŒÎñßÿÙÊâ,“å~¼#IK8²•à ¯x„ð†MT3ÿœëy ”ÞhªçBe„¢: ÷è½ïeJp1 n82ùá} „ûfõÂã."¨Ón4¨“XŠY?<šÚØü$†]AÌS¢ h|£€m¹\à$ý‘DZx3Î\zªQ™%€L ~àÇ©$ycrKÒ¢’2AÒ/,©ÚöÈÇ’˜ê”ÉS–²rˆQ&JÐaºb<}°dtNïž½8 “šT †ÎÕÆ#€2 $%äŒfÈ] ²wn4S#Ey;Rº”¹L‘–³µ‘î›å(kLx(uÔ1âèÿäK²Ð’¶4™™¨‹›DïH 52b=1%dÍæ3IΉi@ ÃBžRB#²ó‘Á䦿àYyN§4õŒY\òÙ½.º’Þç2©GNszeêĦH´é™µPR%ý|V43ÍËT“QݪhH.z–é„4¡j#æMŒ9@2‰n¤ÌDèÉ óÐržÓ¦¤Ä¥.M2јêˆ (Gê¹Ó…’4“TIAËtÐxèCKQUQ"ì"D»`’U½úÕ…A0ƉŒq#…•#Rúå>1:Μz©|ì)I™Î ÖT&MIJóR£Á-!á«d¦ì*TÀ¦%£Cåcåš± ÿx€•r*)©ÜºÍ`FÒ_ˆ«B3Ë×´pv¯™-%iA{Ñn”´Â4ífõªÚÖ®ö´2Écm-j[ÜN)·»½-o}kÛPþ¶YÂÍmp‰K\¶wTÉUîr˜Û\á>º!‘ît=R]ëâ»ÐÝ.w³Ý»ÍoxËR^äš—ºêÝ-zÁË^÷ÂW¾óe¯mãëÛûâ·¾Ú¥¯yóÞÿæ6ÀÞ¯}û à×vÀ>p‚ɲ`×ÂÞUï„óhaåb˜3Þ°ƒ—Ûàìrø½þ•°‡ bëŠø·*^/Šy+UÇXÆ3¦qm|cçXÇv1…Müà“÷Çç 2‡,Þ"ÿ—Å/NrzÜb7YÊúr”­|å#/9ª%~òu«Ìä.o¹Â\î²–µ,æ2¹½aF3‚Õâ7ó7Ìf&ó“éçéÞyÌsÆs„ù¼g@Û¹Ïf³ž±µÝj!oÒuÎr¦O,ëUúÀ‰ž5®/mk'ëZÉ©v°_Ýé\×ZÕ¿f5²™}ì^/ÛüN6¢Md_£úÚ+Þ6’³íjgO»ÛP†vµÍmbj?[ÙÅq¹Õmwk[ÚN·¼ã nx¯;Üøþí"üýo€\àÿ'xÁ ~p„'\áWî"Øëð‡³âæ8Å%qŒw¹âßÝ8ÇÙ\ö‚<äl&yÉM~ró¦‚HÅG @H@Wå,÷$Pãî6¤¸îËyþRÜ<çÖÕH‰üc(GZ~\}àèÐ)PŽ•WÄ»ž ¬£é©àú~s±Ý#gÏpÒÿ€u€çjîÖ»Ux¤g/€G0tè ÀÖ‘÷¨¼¹„ü?®îwÀ×vï‰@Í}îœùå~·ºGÈ®ÜT DN¼ã•;ùTTþ¸¼ã#ú¾;¾éz=qY¯÷ ó|n'ÿîäï˜Oþíû-XŸ÷ `aWnñ!ôr¤¢ë¨½p…OýåO ‹ \ŽàœöO}øEN á7"ß:Ó=~”Ç_þó§ýíüç_ÿûçüÉÎÖÛë¿#ƒ9À>üû‡`=RغîKÀé"À›ã:,€¾ ؾAÄÃ@å"@DÀÆs¼¤<)!¼ø9<.4@ªA|;ïºÌÁ\À8À·C<|»Ø›À¸#B4B$\>4>&Ä<€„Bß*‡E R€8ô»Áµ{ºö«>.LC5\CØ6lC7|C8ŒC9œC:¬C;¼C<ÌC=ÜC>ìC?üC@ DADB,Dò"5DLDELDhDG|DHŒDIœDJ¬DK”DZ3áºDNìDOüDGÌDÛDP,ES,EQ”4ß:EVlÅJLEû-WœEZ4Xô3Y¬E]4Å[$4RÜE`ìÄ^Ô´\ Fc|Åvã­c\ÆIÆ[+FfŒF[LÆÝ’FktÆûEk\FlÄ6hÜFcìF ÓFp Fqô¶o,Ç]ƒ"ŒqßÃ/FœH±£GŽC)²äA“(ÿ‘LÙq%KŠ._¢œõ ;…U6d˜nšµkýò›U š·z# Ö»v ©@rÞÄé˜ÑâG™!cb•¸õj×_Á†…¨u¬AU©TÉ’µÐªÄ¶ •É•kï]*-fòòV㵹ʮù+4¨ð |Tݶ4Û—1Á²]!c•,“reÇ_¥zå+U7ÝZ¼‰q_³=ÓìÑSÖl&;Š-r3È©=kʬõ³ÇÚž½fÊíÕWnP¡”–Y&GŽ™kóå(¡GoN±];¡Öò#¸};FxãÒÿ£wn¹©íÒ‘CÜoüµñªƒþk/ŽÜÀräü¡ÌÉXzIÿÿQ`VÔ©T DèÌ’‘;³¸“QbeDÏ8òÑSMyçí3‹zõô3=yxÍ8ödÏ8õɇŸ|%ñgÖ€^='àŒ46WUF¬T°Ê9çÀR 2ë„6ÚNÀ5O5r9¢ˆ€ˆ²H|2ÓìcÎ>ÊA„2ðL© @7 ‚ÏhÞxešl¢¹˜Œ5:ã›pÚˆ&;’TPÁ“vÔá87:DÍClÉå9d‘—v@³Ï”ÍX9\Ó6Í<€ØvÚfšk~ú)r8'Lq–J›ï¸BIvÿÇÌÃ&4äAGzت+¢È§“²¶ ¥ûT3Í4Õ($ÉX\ÑÈ9¢¢jµi’ÚŸ©©¾ÈíªmFó7V~“G¬Uãë>ß” 8ƒüái›^òÀZš9îèJ’8ˆ­E×þ[•¶Þv;Ö©bÕ‰Ù§¸†c%8A 1W3¾â Î<Õ0C‡3ÕÎÏ1ð°©gF«T@­À ¬YÜòW'ü"ÀæÔl³Í¿Ô!GÍoüІ1Æð Dm #GÀ´ÁÃ?ü0ÌÍ7ÃRJ)°@mµž6;B+Vwíõ×_¹ÓØd—möÙh§­öÚl·íöÛpÇÝÐ@ŸÎï v Óÿ!„[:“Ç„6-ñºí«g\·™ï9ûö«rÊ*ìòË‘až9¸mÎ#ÈuèA„ºD4MC‡ *¬?rUˆ2®¸+m²ãˆ%L4ÁÈÉ(«ì&ª «ŠYÌIi¾Õ¿æxÙLÓA2ˆ>ä‘‚ `ˆ‘G?ÌkѾ jÈoçÊð€<̼ðü·ï¿-ç¢^‰$=ü0 >€PŸØÃC\×,||c„Ø„É,‚(I´©RFB’2W-Ê ÌraA^òâÇÁ:†y™Ç3"ÖŒ>üÀ)À† _ø>âE+;A6)%B8f¨Ë"rñ•2ÿ„àÃõ±oe4ž ¶D&. [¡’GÞJ÷ƒàaaèBëªp´KóG Ìp‰Å©âJ^š‹­‚¸iümKU‚âä>%Úщó“ŸY@˜häÁaƒðð0t @‚  ‹Y$Xƒ*T IÉ¥ðN• Ø7ÀI°Yœ#£ÇË51ƒðà 8&y´)`Ñ„ ?¸d8 Q¸ÂírTFšw/ *cÅzcȦǺYð_„Y*óxG<š¥+\¡(8Ì4A’VÛÃC4  VÊÆ d¸‚üð‡ R‘K«á7P2óSðúƒ¢!ÿÊhn®”Òh@“nd—`›,8h Bza™áˆ øBSf@¹ªbŽbaR“U‘`—.Ù&pÐjuø?èϊбŽÕD¥@ÿi–úx¸D Ïd­ŽÑVÅÐÑ>äñK4¢§idcU*5—f¦‰•€ÊF¼\ɾ–dx2‹é@µºÕ± *y؇-ÅÀS5µ)߸>¸ ‡ºá‹‡ ü0,Pµ›ÈìáѤ,f} e˜#« SˆÆE™¦5MyÊ­|Õ`phºÐ4ვ'•Ç<À‘‡<†øBÌ03 qÏœãT­´ZÂfµ#+¥sf:åÿÕÖ1Ò 9²Ù1ܵ*øø9©*qá2xøã Ã@‡yœ£ \ Â Q1¬`!](ÿ޶~ƒ]e‚†Â4G«Ò-'²=‰m_¢ÁÄ®%úÐ-ÄPn"¥´’gñ°Â0äá“ R 'Ì^À‚+Ø1Êâµ–ú®òë(q.öÅ–yÏÛ¾×.V¦íê5ê½áJc*€ù{ÈApc…Y¨‚fPFØ¡ ƒp%4ŒÝdÉe¤ÊØn›Ú5ˆwÅ PòG1ÊêZ–í§ÃN¦íe¤ q^¤„›ˆ¨ÒˆÑ [)Aÿ&o¢â™¹ Ðìlo—³0 y‚CŽ{Ù— JÅã rGt‰‘uj•ÜI)9+i™h‚ÀÊá xHx€ /ÙL€íWQL`Êš° °P)BÀ´ð<0}À ûIžÖI¥ ^È…T9 ÊôØ¢xç%£ À_ O`=XI®à  ° µð/i6 =À=(?eR˜üBÓÙ¢ˆ)›i£ÛI¦ÝY•&QÂC a0Ô@ s{À ÀÍÀ:Œ`îPQ®° 8À&À,ÀßÇ{€+êhVëÿ]Ùtˆµ˜|¶…î(ƒ¦&GGÄa@  Üà û€ D¤7ÁœÌ˜$KÀ?ÀOXa ,ÚSQ)q„«M÷«g¦1â«¿úA˜Ê>šÊ©ûÀ¦?ªG€ ™G`¨Š%ÊàG™Mó5@ û°=ù{Æ›ð”wSÙ«3Z£åj®Œ¡¦¢ò•aé©s p¢CH°50 À £ &` °¨LÀ-À91 ºàebÀ á0nx *•JHâTÙ«òh©èª±KƒëÊ ’>¢ .Yì¤$¤“"-ЃI@¸@ çÃ=èHÿùUJ¨= ¥*Cµ=a mÄV,Í…-zˆŠ8©4J®¶É¢¢8À8¢Âz2 ï BE |ÀÆ $8”4kN°;C“,Ðh›¶;ÛV·‚€\òB+¶r-IÅ;®K©»´Lë±l‚>Z u)²i‚(Ìhõh2)‘ÒQ6ðŠÄà 6 ¥“?TÚ>Ð C ûS–pë(Ž0ó°,-Љé"’êH{¦jXŽsV‚‡Ë&Ì© Ér pTiR$»€ 6€êÆ-@Ô“q' ntL&` u&¬äJt v[mQü‘ºhš´Ù«½V†/ d†ÿû)ïPQÐGM`±^Z><ÀðF„*Ôs¹˜ Õ Ç4TÆåbŸÓr¡B´F›;DØÛºK’ÛŸ¸³ ¸°û)èpƒ9H ¹˜iàŽÐ‰+8«¶= ¹œ[žÓ­T%±\±ŒîeÀ|›çÚ·_ø)P+µ7â·¤«@ O@ @-SÒpÈ !­À »° Ciš‰` ~“¶>¶¬*ÌÀ —hu1ßʇáz#èà ²@-ÿùÂÀººÁÚ´*¬ ²„˧Ø  ²ó(@py¡Ž@Fj­[² ÿ@ Ö oÔAÿ ¥-p‘Xš¥mÛ›V%£Ûš´£'’ ïpº×«ºjüÉ1,Ãé:¬U‘/®p‡ ` d{g€ ÈPcpxšL %J Ñ»†2AixÊMÂt0l¶ŠLŽú¨ ’'®9þ"’3œ·•Ê·Ò h¤œ#“#H‡G 8{¬ ! c@Z¢ àD`>ÿÿ° »°¯Ê@ ë7?´€ÈBp.ÚŨëËÜ„(«çpÐÌÆµÉ±Õ¼·—z…7’Ͱ͈ÂDäfpÄûÐAxN`Îè¬ÎÀÎmÑ7f 8ùc¦0 1Mեح ä/œÀkŒÐÿ ᮑ/¬€ÊŽ09È`e€ ¢‰˜GС¹üðÑ:1DNà—U:|À Tú{ …žV-}Ê8ç° êeœÆx[Óf}Ó×<yâ  G­¤à rnAxÔšÐ-@†“ÀÔMÍγ@ ‹NÀg{­ùól ìix7º>T”˜LGŠQÖÑ,Ê4Ö£ÌÐ7Ò*: «à /éÓÀ% ‚Ó0 ­PÇ$Ph€Øÿ@Ø5€¢™"ì20BÍÂÄF/Žªw-1:›i]Ð›ÝÆ™í´k&x Ö% ra °¬ÕÀ8ÿ N€µmÛ»@Mðƒ¿Z"2°<À3°ì¢lâQ™ä‡Õ›0:¦ÏíÜÍ}ÐÿýdŸ¢,»ðk…+TQ z«ÝpƒòW ÷À0Þ¶ Œt± ì]xÎÒ\LÒªaÊhÜßNÍšàYñˆ^³ èƒ>´6®0‰6S‹æ €‡J@¥`ná~¶9€ 5ã ì]‰¸04À‹743Nä<`3¾hŒZ¾å\Þå^®6ÈÈW?6 $Õ&_ÝÌÕ]ŽÊðÆÀÊ Þ ÞâØNMgË|Í 4 Û f ü\ß—tßU’ßû=ôÿ6Í*îßz«ÐÖÌ&—FLê{#µƒÉì0 NIàq4%J€ ÀÔÀ˜À `PØT 8D`_i^P0/Lès>¦¡ßéåèžÐÄ^ì/ñ)‘ži¹³ÃŠ« ðì `»!Õ:ëüÆ€ Ný"0„j¶=ë>‡häÇtçÀj ŽÓT‘6ÍÜnì+^Ãl"Rd>ßÿâ KÚ ¸ãc¸É€°Î¨~ðñ+„Š Í€BÕ†h†)Ý~ÖÝ(¦ÉÁnè)nòéra/“.*ް“ßÃŽÿp«Ê0 1 ÿÀÛ– Úó0°?n_ ßà?’ö?]@H)µñb\‘ÐCÓPQ ï"Ÿè$òÃÎÙ¦¢BàŽ-/?ðþ>ófóìp ÞŽæ0 ÿ5P¨~“-@ôþsH“…ô& rK»€sadXÀnõW£[Ͻón8Ýïÿð0OðÕP ¸€>¸Àæ0é  ¿ûrŸ¹0ñ)àj/ú€bŽ„n>d+ì€6 Ä 6P Ÿûâ†Ï∿܊¯!¬ðv’Ì>ªð    }¥,ö²ê¦”Æ À‡ €ì$@°[ëàjFîÛd%Ïÿk€)ºî‹cùkõ+1ûXŸõ÷®èì¿<Š£'èìã Žà®ÀT”2 …‡ü#„ TxDÂŽ'ÍšUÖ ‚\ÀLÄ3(Zœ?ƒðUSÖlÞ¼fʪÁS¶ËÕ*WÊ”ícùÏåK˜ì`þcYsæMœ1sîäySfO 9%úrhÑ¢G‘UAÕ¹Yª*̪YÓ\U¬YµÖä¨ IeÃæ©Ù¬Ge–(áåÊÑ£tóX²;’€”­ F¬DË#&ÏŸ:ƒäí %Idá…œfsçQ›Ž—ºT:™geË81gž¹™³ÎÏ»úJ%±kf¶j"!¡†z´$²è² ¯á&#|¬ª+²äSéIú<Ôð¥È2\Š¼Ì°œLË+Q4ÊKí\±Í6W´zÆç$tΓ4!P¥i®ëI"„È¡ƒîÄeüðé0"„9ÌÀ”ÿišÙ%žª&Ìo,eä‚ç¿i½nCÉ>“K¤8M Ìï@-VÒC M'ŸœÆGÆ|ä–izKmžD«©¦Î~p"œ±™Aò0#„¸øÂ do°_S…³¾÷ËB¯.Å44O?õ2Û ¸íVTÏ„OF° ©`•sĔĖątš:é$bB>ò˜Cgƒ D€™#'>Ù…:rÉ«æâíªŸÇ6ÕÛž ¶E‰yBSÜÕæ{m‚ jZ¥‚sÚÅ ?ÂþS‰Úi‚Ýa<¾8B‰{èøb‘ Ì)Lchk†ˆdøáÂ’åbGJÊ6šâ£‘óbTq&‰ãšFCGäÿªHžt6e¦‹5¸<öhLŒ/€yŽ0h¶Ù+§£EF΢aè…úD¥·MšÄŠ^:\T VÆ\tÅt„]%«‚´¬ýš‰²¸<èÐ#}ùõ`OŽÔïjØ!à `”‘a†7nÅź}ØQ*ï)íV½nÖMdºé:÷›†IÆÙ*¬@š-‡ƒ`IsëyÁc¢‰¼@Ö e™¥p¬Æ 5%‚íÿ’¡òô»ñÎDÔSGñu4áµ°±wNrehÜk‹ˆð\₞ŒŸ?ÄÀ£^<ìøeX]tÉÖLGm0TB„Ð`é˜Ûw°·ºÖ‰¨{t‹ ˆÀÌ©æLÓBÿî„''ÔE3‰<´âE†#É…ó‚´A40ƒJ‡>Ó=°‚ÜÛžy&HA×ñ-|"ÙVÎ;'8!û1A(ñši€ã¨Õ þ¤yTCQŒ: ®„`xÈ lãèJ7—ÊüðK=ôŽ‹ÆFï\>iË™ªb¡DTLt"åa¯=(Ca „´žä«sÀÂK< øt–´aûq ÑÞ¸CÂ1<W|0¦š Q}³±ÓŽZp'àà€š€‡<Ü! Î`NGà± \¢HÀˆ«Žô@ÓX %­Ä8Î…“Ôž&?#Ç9ʯŽv¬‰2ÎÿÒƒ°€lcÁYî¤v„s¸Cô Œ{d-$¸HD $L@é`ß~HiOGS'™ÊLUˆIl9³<{ó$ªXR 5ÁçL7šÍ΄ 8´FØQ"ŒQ§=ì!^û¨§`€0b‘º<‡YæÅ¾k aüì Vžé¡šÈ¡bf3½Mƒ®æ=Ó"åY±‡¸   E˜à¬‰o%õ¬‚N´À©OÀÑ<:øƒöaú4 ‡XZ”íÄÔ¦2h–:©Ðœ¢êˆB(YzÀ!Ô ‚Á¶f­Víp`ƒ"$à³H‚C–ؘj`ídBøjW©dIÿ°Â²™¬)ËÚ©v™C³›ålg=ûYІֳKäÁ.vq–^… MÂ!x€ \î¢Wæ˜Í.œÀ$`(€±‹ahö?àÁfgƒ Í¢1‡Ëensû\èFWºÓ¥nu­{]ìfW»Ø}lAÓ*DiÅëdX‚j»™F8ÂFÑR[M!(T °„Bª!)“?\¥ŒW]:™æPJíÔe»dà¥àô»§ªÉβ–µ” ÝÔ& jЄs\m?CD4À‘Ucx‚üšñ h «»ë„+¦vþ÷J2‘Iv²²ÉÊR6ÇæQð‚«r&xÜS¹% N™ƒnîÿ¢>±ûAþb‡kö€–`/:ò‘f °CDíÄ„1ã:5ù'wÒ’“ÎCfÊLݼ̛‚×Ç¢¬ ¼L–[Hð€$8B2Ø)²"C`7:/œe1¢Æôp ‚8xDà* ‰ÉÒ´C°uÒL“5gú[;(‚‘Òã9Ž%Ôa‰CÒaÍŽÍ ¡ (Lã,ÔxP%$–0ãÏ0ädƒü|ÌzÛt³O=‡zC&5Ž«ýR連š«ŽT«ðj!´ xek­Q'”:’¶= &œ¦¡b^+ã>Áj{£lfƒZÆÏF_‡þ{ãQÔÚÿÇ6Zµ½íZ*®……/r nRÞ7Ð^îƒCÙšè†ID Ã íù¯S¾Ó5÷qó—'kúéûƒê»¾?È>ŒJ½y9‹Æø>öÉ]# ë¶Úôë®ïh,á[9}Ë æê.ÅK¹á4÷ÿ±Ê¿ï‘3óÍ«& é eø¼Ð½?ø«b«ts«yY=Ôµaâ v»Aeè¨'°=ù;£É‚¶ÇAOk.5‹Âfc³ÈË*Ì·ÌB RÁþ“¦÷H§•` ³À* P<øƒ\2L©ÿ¬º¦¼‹²•˜À±Û3œ€¶$l¿ëŽ=¼¡´±å2>M³BAô-´,åÓ©ƒ;¨„Z(×XŸh†h€h‡×h+‚…h/¬’À:£”.::p1QC¹­X®ˆTt9ø0ôžûÓÉ3A±<2ù‰–­8œEkŒÖPË©ŽÜi¤é+Ó4}ë@(¼ŒæJF÷{¹<&S¼Â‰9DKAþ[DU»D]T9a5V;›ÅYŪ§{à¯ÒI¿öc?tt®âó¯icEdⱘӿãÂEü$a\ ZYˆåÇÂØŠÄš—fÈÄs„¬ÃƒÇM“GÃÛCU 5iã4†Œ<IÈÿY”El\>mÜÆƒûÅ[b5­¸ÁM¬@}B3h¬ÿʺ' >Q;Ɉ¤Hó4j¤6{|¶lÌÇ4$RòÄT©£ÄJ©êhÈ¢ AˆÜ@Þ£ WdƤŒEâ³ÄKÈB„98ë‰clÈ›<¸Oš³xhCë[µ{ C Û+–ÊŽOó·$”ǰJJ•c®¢´$òÁÞSÅú³Æ6Â:´Ë«Ô¶¬ô±ö \˜ Z‚!°•Iš^dŒ¯2ÉBdH40® 0Èô:«“µ”Ëß8œLgä:|Äʜ̩¸ÊÄòŠŽpÁÄ ÄÈ"AåJǹ¬¤ú 0ɼC¦ŒËÈtÊBœ)d´:ä̼Lµÿ½\0Ð4Ñl/ç(ÍØà¶ÔTKß¼Kš˜Ë<Ź‘Í6k³Ü»LeÇ43ÈPÈ%T#µÓ9S±KS5]ÐVÕFkoÌÅAÕ@@”¶T.ÇŒ?Ú„Œ Æka¹j}ÌÅ ~R¦–K¦ßdgQVgÕ¢ÿ~¼¯GÚ\„¬R³¬Ï粤ûæÌÓj%Ѧ¼GÉøWíøÖ~*QàÌÉ›³j¬¼ÿ–ðÃܳJ‡üÑd¬Rh\Ë,Õ¡Ì´ÉdĽŠÓ¨ÄXwÝHñœ³•]‰í4£ ±Ý´meɘ"ËŠ°“ n…I â ´Ñ’…¿“=Ë”ÕÆ– O‰ÅO˜EJõóוŒÚçÔÙþR3uô @ÙîtJ‰Ú,%Ú‚;Zœ„XªY°—½Ç…¥±±ä×=K³äX…ôX.µ×ºlØ}UL.mB uX–%Û²ý®³•¿Ë\¼€ÍÙŒÍÖc}H€uÛÍÜÑžõY ÍNQK…åRÆ¥Øu½E¿åÈœ Ü´åQ«t\˜ Dm5YTŸtÛeKºm9A„†E×WìXQÑ$_ÝR+½ØÝëUÿ“ÙØ”ÝgQ^Z…Ü<¬Êƒ¬+ÝMÚU9Û^€¢Îã¥ÒuäYk ?LËÇTªõ½ìYlåÌõß{m\óµK³Ôàák YD¬LÐÝP}]Ý]¼Ç ÖÇ+ݘ¥Ü«×ýLßóe©Ê˜ÉºEà&ᆠÓÞ#šs½ÜJòU!VBþcØÈEÙtÄ6XÜNÞaN¾)nXþLÞï\` &_3ÊŽ¥Ýz¬b©¬IÖWÿïÄ«Sܽí=8 Ôçã+fߎɪ¥ÑV`™ìb®EÔ£c1F¾2&cÉ…b4^5æâ¢ÅcáEÁ0NÔ:n_Œ”ä™Ìß“â;dbÌ¥`ÜT^‚­M3.äþY™eÁµÒÓd»%àîúÕA.ß@eQ.5É{ä¶ÛCeÜRjÔÍW¦ä-dbÅSXæÎ—ªÑ)6ܸ `õ•c`¦É9ŽÐ+œ ÕaQVæ<6æ¶aZ&äan_[¦ÖŠÌâdæ×Jçma*Žf÷Õe'þeuÍesÅN¶%DÈòåY¦ãHÞgw.Sx¦Ç”çwࡆfžn¬«Æê·>ëIöꯎk”5jµ&kY6k¿Þk¾–ëffÄ6è¼.l¢žkº>l´îënlÊìÉÆlÃÖëÍ®é²ÆhœíÐVìÎvìÏìÅæì”mÔ.íËì¢níÇfmÙ^m¸6íÁ&m×NmÿÜŽìÛÖìÝŽãÓ®mßVmÛ6n†–ìXŽmtVîÙ¦íƒ~mÞ®ìánîßžnéníÞîêjÈ^éÞNnäïð†nï6o§æîã.oÂfïëÎlìŽoøžïç~oúîîôVoñvoѶïúöoüVgþ&îýpëoò.`ËîõÎnýNpù¾ïÜ&ðgðâFðö¶ð §î §ð|Žðÿp ßpp×pñGñ_îïnñÿ6ð—ñóvnÏjÏp_ñ¯ðŒ“r!r"/r#'iqWrgrwò'wqôÎï$ñ&qÇòïðÏrÿqÝ®r+ð/ïqÿs-7ó+Osáæòès_ó2óþvëÇq(s4Ÿs6Ïs§ò=_r:×sAïóA÷òB7ô@?óE—óDotçsE—tJ¯tFtKŸršþóWsG¿tPõHÇtRÿtS?õ:çôNosæ~sOOuUÇóCïò-oõÇpXGtQÏu8×uTçu?§õ^wõ`vVñ_s`/ö[uYokgk_òYoöi§ö;¿kMöI/ul‡t2÷öowB'we/÷]ÇutOvc¯vköw‡wfôL÷t_÷eïvs¿v|Ïwpïw€ow}¿w~?÷€'vw§w‚Gø„x{_øÿxŸw…gw†wøp‡øˆoxnÿwƒx‹W÷Ž÷øz÷wŽù}7yd'ù‘?øŒ×xi—÷‰uŒy•ŸùUwymêu–§ùš§ø–ÿxgÏù‹ú _ù¯x¢0¦oz§z¨z©Ÿzª¯z«¿z¬Ïz­ßz®ïz¯ÿz°{±Ïú¥001û³O{/AûµW{aû·Çê—€{¡ûºw{±{Ñ{óà{ïðû¿—{—üÏ üÂÇû»Gü½WüÅ|ÃόLJ|Æï{P‰üɰü²¯|Áÿs“Î÷|Ð÷’ÏýÐG‘Ñ7ýÍO}Õ_}Öo}×}Ø}ÙŸý¦FT  ÿ€EðÛÇ}—X €E~ TÊØ}äÿ‡QþEÞ¶ß}âçüÛÏ}˘þ— €ŸØ}̇‰ã×îw‰æÇþ‹þáw s¨þ-‘~ñw~—ÿË¿}™H@ûñ5Cÿ—…Þg~ˆ¸À¨Eþ `ª‚'<˜À¾QÌ @ñãÀ}HvQIqQÿFš#àÀ"…û\J¬‰q !æf 0`Ï‚"I lÈ.À¨•-“„)Ó&Gÿpê¤:0€C°R5ŠÔë?C[0dvìGµ5Éþc@ëJž†ìSyPà^´í L)ÿ`Ô¿¿‚ Ž,ùT ½Z·îDk¨cÓ¡QÉ-ËŸÿŒn¤üo”L¯KKìËNädÑ^/w.y™sÓÏ^é¢&»õéÔT Þúx¦ïß‰Þ V«ï¤ à8îÅ«SÿWÚ´ö™%³/²Y<»ÅÙ v,ù¬`Ñ‹*>.8r]Ô ŸO/8;JÕ¡âÞLð¡õÔ"‡™ô@öÝG×h)èµäK ç’M…i$P†áýƒ’9+}¡vø‘gžI•–šBZÈÜb?ÙÄÎaõ ç~víäÛ„¸èUv`-5ã†<â¤á‚ ÕµcR£X·Ó> ĤwC$¥û<ÿÄN‚U&iád9ˆH*H˜ˆ=Ò%@y%m¥]vjù—gÚýDu_—¢cNJ&§“ÿÉôÓ>à©UU†e)ý‰–FC™4™x…}T©@ P]œI=TYU¡v£*d*$%b¦ÞE†ÑC´Ñ)SL¾•t×T5YÔLGAè¥R¢R+fêuæf¼¢˜ÔAÉEÕf#)ÄhRŸ&÷PrÇR å@Ú¢9"^m‰êÛ£`K§o–Ž©ˆÇ2æˆã ÆNq†èkRìø†ªe[V¶×˜DZ Ûg,azï†{Éé/ó´Ï¾†D¤0P4¢µHÅìT<Æq¼ï@ì$¼0¬)«ÿ¼2Ë-»ü2Ì1Ë<3Í5Û|3Î9ë¼3Ï=ûü3ÐA =4ÑE}4ÒI+½4ÓM;ý4ÔQK=5Ó,ùG ÕYk½µÍ«6U(×a‹=¶v^3$h{ï'RGŸÑv1 òXÚVû‹~ ®©n—dûý7Ë 54ÒBÓPVúQ{Wu"í'”Bû‘e8â(-Âe´AJúi 8è¡ó¹â uçéè¡NÜ(¥$eÜWZù]󪟉B¡äÙ]¢ûþ;Hf[í×[É$¥~è•~WW×ö~6C‡5]¢¥ó¾.ðÙ‹.|ê…™>YÜ8"ÔHæ(„˜•vÑ¥_Zú=eꉩK¢öõÿÿÎ}ûŠ#õ|uŸ¦d8îH× è/? ±R8 úÙ¯€3‡!*3 9½‹F›½NÓ®œo\lRPÁz©«.#t S˜”®¨°….”j>÷ÂÒ°†6¼!s¨Ãò°‡>ü!ƒ(Ä!±ˆF<"“¨Ä%2±‰N|"£(Å)R±ŠV¼"³¨Å-r±‹^ü"Ã(Æ1’±Œf<#]ÈŽ5²±n|#ã(Ç9Ò±Žv¼#ó¨Ç=ò±~ü# ‰Ç²†<$"©ÈE2²‘„œ…v$+IŠˆ’‘t™%“IM¶l“^q$(C)ÊPB’“Ää)S¹2OH•)%,ÿc ËRÞ •®L+½’ˤ쒗·‘,ƒ)LEÒ²•¿œä1+™ÌðôÒ%ÍüÈ0£ÍbêÒ–,{æG°™Íe^òš,“&8eIMªh“"åœÈ9 ’NurÓ”«üf8ãIÊnz³Æ¬ç;íY͕ɳŸ§/õ¹Ï|âSeë$ÈAO2ôåIB*Ѐ—Ö4èBªÑ‡:ó¢­¨EAŠL‘jG£&-GAѺxt¤$¥'A?ª²“n¦2iH_êNœºô•4ehJ·9QŠÞ´¨=5ª2ùùSÕœ-=*T£Ȩ̂NU©K•gSÑIÕªòTª6Í)RKzU¬~Õ«eåjWÑÿÖ³.f¬dÝéZÙ W°Òµ®I©[ÙÕÁlU®µjG«Ò—Et¥…íë\ïšV¿þu±j5kb ÙÆÆ5²Œ½ge½Ò…Ír¶³žý,hC+ÚÑ’¶´¦­‡c-«ÚÕb6³M™ic+ÛÙÒv¶¨uíkíªXÝJ¶·‹©-pƒ+ÜÓ¦–²¼½,9ÛZ ·¹ÎîmËÚÜJw¹“¥nxž«Ýí·ÉÕét¿ ^ëj‡»æ=og£{]ìú¹Dõ.DY†ÞùrW½»­.{Ûk\üжôýosí«ßýÞw½ïåï³ àWÀîMð€ÉûàøŽ—* ¾°m‹+áðöÁžðG0,âÒÿ:˜Ã61…5œ_‡xÄ.m‰ \à¯XÆ4>1Z^¬ãôª¸ÃÆñ†Y,T•í¸È1²…µ¦£‹êU³ºÕ®~5¬c-ëYZÕ´¾5®s­ë]óº×‘¶µ¯ƒ-ìa»Ø·¶±“­ìe3›ÙÈn6´£-íi³úÙÔ¾6¶³­íX{QÛÞþ6¸}Ýíp“»Üæ^õ¸Ï­îu³Óén7¼ãmîwË»ÞöÆ6½ï­ï}+;ßüþ7ÀyíసÁ®pR#|áxªñ‰SÔÑ !ù,‘Z:M‡ 000QQQyO\nooMx¨cf€iv˜~nˆxy‰xw—g|¤u} Y­_…°~ƒŒ{ƒ“h…¬fгm¶y‡¨sްz—¹–XXŠu~’glœjsš~l˜{yªPQ¬|\ºM¹{X©kz§yf¯zzºeh·hu´|kºr{Ü|6ìz/êy8ñ}'ð|2ÚZ[Ô]aÎd^Í}FÉzVÛkMÛgU×vKÖxUÇciÅktÆvgÊsxØdfÕlpÞuiÙxxæ^MãWVèfIåeXêxHèwWäfeæriäxx†n‹‡u‡„{˜–m…—v‹™~”£l€©w‰¤}‘µy†Ê|ƒå€y˜…x¾‚I¶‚Y«‡g¯Œ«‘zµŒf²Œrµ‘r݃.׃:ô…ç„(ç‡6óˆ(ñˆ5ò‘;È„FLjSË‘YÓˆFØŽRÛ‘MÚ”XÍ’eÅyÔ†gÙvÕ“iØ”yϤ}ߣjÙ§wëˆGë‡Wç—KéšVð‹Cò–HðœVèƒhåƒ{ê™fé•wí¡]ð [é¢fí©uî±|ð¦gð«pú³w‡‡‡†…•˜ˆ†›…šœ’Œ•••‰‹§ˆ–©ƒš¹—Š¢œ–ªœ²‡ ½¡¬›¦¹¨€€§†˜¢“‡£™˜º€Œº‰”¹˜„¿“œªŽ ©˜¦«ž°¶š¨½£Ž¸¦–§§§¨¦¸¦±¾·¨§´ªº¶¶¶‚ŸÂˆ¢À—­Å±Ç£­Â©¹Ë´¼É±¿Ð¹ÂʹÇÖɃ‡É‹“Êœ‚Ê‘™Ø†‡ÙÚ–‹Ô–—٤ɥŽÅ­™×¬ƒÓª‘Õ²Ó³–Ì©¨É¬µÊº«Ê´·×¥¦Ø½§Û¸ºä„ƒåç–‰å™™ê¦†å¤œí·‡ë»•ù¸€å¥¥éº£å··ò©©õ¾¾É¼Å˸ÛÁªÙƵëÁúÄúÇ–êÆ§é̵éмñÀ¿ùÒ¬ùÙºÇÆÇÄÌÖÊÑÚÜÁÅ×ÎÓÜÑÆÛÛÜÇÓáÜÞáÜàååÅÅäÎÐç×ÈåÚÙôÇÆóÜÇõØØäßàåáÜýãËùêÝåääìîðúæçþóéþþþÿÿ Hðß¾ƒÙí#È®¡Ã‡ "\Xð»‚"Ô8±bÁ‹CŠôr¤I‘%Oªü¸²åÀ”.OÂŒir&M— îSHQ Ã3ÕÙÓ'ÇŽ{n¬yS¥Í¦,¡2•Š’jU«!Ÿb­8Q'OŠ æ‹¨Îö®-»ÖÏ X¤[j¥:Wj]»[+Þmº—oÞ“»º˜t¨ÆŸ„Ïb[¶ÌãyEw*-êô/CË/1gÖÜ—fgÏšCò8šßÂѤšŽKø jƒéÑë·O¶½×„ âVI9ïg—¿‡¾’xñÐ דǺ°óçÿì³[öó¤1{o5.9÷©˜¿ƒÿÇìÜá6@xî —"8nÜÖ™}¨Þ2gûÌÍcL_!»s~u]aæ h kQ…çÝp 6¨Ùs쬃G „ÌH 9M €D# 8]ýtÐ~÷ñÂ5cíÄJ+°¸BÉ9&U`Œ×]¥ ƒ–‰gã>'M ÝäÎÜgM†û€H!á„SH ì hß2=Üçœ+´r,PâÍfa;þ¥c™¾á˜#r×m(N~á Qc÷e¸a8óXÓŒÏ8<ÈÀóœ ÔŠ0‚)æ˜e¥¦™n·`Žašc饖s–ÆÄÇÓ:¼A wóF<1˜bÿË)§Äë­„^ I°Üêë¯À›SÄkì±È&«ì²Ì6ëì³ÐF[ìQ…Íód!x 1{ÔAŽ=³GEáêœH"Ä%¡ôz–Zré嘋2ŠàeœMÊãš‘n5à<„rFi„«vØQÄz¬° *„‚Nt¡°¬ Ëuì@‚‰O8’¨¢öbçh¾ýZu&Iú’w 9S:ãêƒ{¨°‚dì1FQªk-ÑÒåuûõC=TLrÉK±ŒòÔüî[µËhMc?A >‚ܼ‡;ëñÄÖìƒ8…Ò ¢]LÉuÔÜÏÖˤû2ÔQëÿ•²Êã¸T1Î84r:óG@¨0ˆbŒÁBB„>O^ˆ‡” ÃΡ–ŒH3Gô˜éDþ4ßhJ:¸_T_mYáÉ“íÁA¨ Ç|8‡ˆI±Ö….dŒ,íCàÈÄ#´æn"u£“ AöhãI¬!yc²a¦‘j<&U@YŽ}l ¦¤åsÄ<á£Ѱ# ЈpeÐB0Ã$:Ò qÖ 5é|,)Lñ+™&1ò–‘àÐogܤ'WRÿˆo|ÃŽcˆã ƒFRóÇö D " w@CÐPˆt¡’oÀÌOFåiÌ‘4çziY2Ó´O•¢?LƉ|ÃC”Ç:¸=ˆrc°Ã<Îq/Xˆ¸*IN„¤sc G6A¤¤BDcB'´dGEòÑyBåžøÒ!·Rr|ƒ q<§µ&y¡&ÕrcØC *¨`P … À X°£"Bry"mh•'ü‘ÀqNY•Z÷ʪV·XÆæÅù Ç ‚V˜ ÑA{|ÒਾBtr[¸h`Gàá …`N4òZÔE6ò@MmÒ“Ø#pÿ#šRÍáJŠ©[en•¤ù¤Š Qm„p$C4*=Dc_`Ä#Ô˜ ê#C àÕ¢Ö­b^4P Œgãã‘0„­òæ8Ci@æ0p8ì„La©FAÖ` X cDËHlqƒPÀèȘÀeÆx \æÑkä`}v¼Ýl.v^| ä¬! ©€Q3\e`À ˆAü·ZbB P `t@AKàò–» .0×ಲ']÷L+ýÁ¨O½p H(€€Â·l@û€" È/äõ¥}¼"@(Ï ±›¢trñ2©¤UÒ€¹ÅgÞãt{ª×½z¡$á„%ÐÞ‰XÿŠ )ä>\’@¢uZ´Bø  €»–AŠ8‘û€d!”x!,CôÀ¶t¨zmvwNQ)Á  æ@ ¹`N`Œs0`ÐP–’+¸K€ —Ò:аҀ=À –‚*Â`)°)Á2ƒ4ˆ)Ã"-8˜ƒ:¸ƒ<؃>؈åçP®pñp'À’€/0[H€1àG`E/[bðbÇ€|-öZÎDEA^¾} ¢iˆ†ÔW}!Ñô@ ž! ˆî PÎÀ ´(P04„²ÛÀ\À ”0 P@%Œÿqœ :.2¤$ƒ€PiY€Ò§†k8}•v}TÑ ô0q÷–À.Zh"QT ¸°ePÐë²!xHˆ Š‘ Ö`à6 ‰F C˜³J0#7PPöÐxz¨wÂ6l± ³ÁkÊæ~Ð ÁHðð$Ý  WPW0h°$MÒð´p;w î@ ‘й ‘Ë×RlcݰŒÌÈ(óÐ?ã@Η&v牡Ȇ± „qn£÷„eP~ðŽÀðtû` ð EÓ%Óˆ‚b‘€r5dôpgȦ7€ é+ÿ± m±9…?W@  P´O¦0’%Ù9z  ZøN bçGNp¢ÙœÐ ±P7Dе=PÐ }9wIÑ?ÔÐýÀ[ii\Ù•ï–^ùnH ±#îp(¬02ƒÀ\c0±7@{6° 1¢À ¶ Zx7@?д7A0"ÿ÷!•u"%ŒqØ8“…y“홆ˆÙe8&Õ0uP ÕPcÐ=Nà =° àá~ ¼Np-Ð=@u-ÐBf ¶—Îó/‹ “ÑøžðÉ¡‡Ÿ»}câcP ! ?Ó û F V¸Œ MÐß2AÐQàN ° juC=Cºn¥×¡êq4‰¤Þ³‰%C¢&ºõ*š¹ ‰K!£EX£Â¨®6P ûà3«T#'&=yEF€Ö蛽 ¢q:;": Üè(ZÒŸc@0% M`$ ½'Ëp˜ êNÿà- C 3° ˵aâPez@š(&uS@[³KÐq¤Ô˜¤ §sJavê"•i ± ŠÀÉI>˹Dà´·% µ°4=@{P0ŒAÐ úây™„ðJ>3ibB"΀|}yf)ªJª¥Š5α.Ð.„B ï ®T ~àQ šç‹½zPà1¤¢-ð>ðôJ¯CM‡¶„PSPr!±(¶TqÎáŒ[I˜6éžˤoJ§Îa4Çy ;·ªB8£áGïP-V¢7p‚Å 7°ãAÀ?ÎPDð5âȯ'?õ2êÔ—Ry Éž ÿ«°»°KÚï24ùa4Ex2Ê è„ 0KÎÑ?y˜ 7]Ö.`7óvŒ# ÑÃB´VqdJÄ«h‹K÷aö “е³Õz³i«¶7ѳ0b´Ïñ~ O ð :"ýÃ4Nð ÒÓ Dp3$[²Òðs,ôJ3åYƒ¦ev÷­×•ÿ •gk­‰‰¹GÇ›ÄÔ°À ´±>; tùz` ºÐK ê O ‰9à¨D¬õJ¯'›²B0UTûЩñ©t˜Y¹ ƒ‰=¦ÊqÇk}Óšס­Üšî pÓ –% 0b r û@ ¯ÿÐ ¼À ¾h¡¹‹€ ÞR¯@P¯8JÍÐ †Ô„'~¹¦*”è ¬Y›·©“—˶Jª¹§JÀû´ ª…a „™  ! SKB°gh€\ %ðœ`ê Ê $ä ÒóC . ‰àžùÊŒE ³,‰cŽ šÖ“ô`³:kÀI§Ã;Œ}Nšð ð' ˜°±Ë×*É gP8 Kà;.¼ðÔ ËÐÎc4' -à*³k Y¡Š&t*—°p¦àÊ ¡8l˜k Ç×*§€Q§û0ˆXyí'ŒàRÁÛp¤P5Àeœ`P`J#¼ÿÐT‰7µ°±Þ2P "LD¢N0¶(æI•…q1­€CC­ÌÃFWÀœvŒÇ Çã©hà½ûð¸—PPȇœÈ`<Ñ-ð .]ƒ¨0³+'º$i`Â¥ Ü«ñÆ9›ÃÐ,ÇsŒª?<ðâ C Јó hpÉ ’ y ¡™šµð°Ë:1F P°ÝI~Ð Ü} |Ž$› œÆ,ònQº©›»IÇÊ˹u\Íe!—‰Ø @ÎL` _BR†{Y N à.Ð}• Îël±` ° ޝaÚ5AàÃÀvq0K:ÀH(ÿ ïð£-ŠÒü›íQv¼ï ½±Ð g§…î@ n`˜G àûÀ%pw Ò `-p¬¹ :P»%;4ðÍÀË»×aKË : ³ðí° Û;½¼Î\“§ŒA ½h|‡" Œq `¥ÖÀG PWÒ‹|OßR\63À=à4Àªû¸Hóbˆ„".R ï°" a°ÑÜÓ›ûÓ¥|ÀΑN¼cûÉa`­Ø‘àzgw ÷аØ! ’8‰©sÜ@Ù÷†ÜÈ|Öù ˜„RÚ´0 )1×}Ъ-Êr€¾²ÈL³‚3ÿ x)(h³ðñGKÀp æàÛÀÒ¹0¬: –ò ”Ý€¹@5Pƒ˜"*,h)L3Ó32 ³p?˜à ¾à ÞàÊ„FÕbÄðbÒÏ|m~MqöÇÀ˰ †ØŠ $^âò¯@ç 3PÃÀ t€t`•ÿâÙ´¹ðòÅé QÚÉkÝh;ͤLUÏa`)´·IÄB ì@ P°KÔcL !ÒÒñ¨9Ààbhÿw0Y~yÖL³4y³rI o ÐÍ=¾Ú=|ÚÏltcE~ ì ½Ë è @´#ò΢Iêÿìåš Рðú_þj÷uébÀ¬rŽÀ™˜ ½7Ôí€Óa‰u税³vmç„ó‹4á›M#°Ð1‘¹1è´ ¹Êÿ°ËÄ  != ú¨ðÚ¹à sd÷•>c`Gs ‰Îaá‡"·”‘qꪾê©>ªw-ŸyîˆFn `‹1ëpuC ;A qðë  Èà¨?°eDжb`cóç3IÒ®¿0 £C ~”I­aÚîí¬îðÝñ«w® Û1Rîê¾ ìÎîÞ$€ ìP ë<ZÝÞ¢.°ïb£>õï„5 þÿúè 9@''î}Ó’RÛþóqñA?ñäi/³^ëBlî¹î‹ÖP N–æP òþœÐ´Q ò:  Ê®Öì]Ïæ?ZfN;‘7 Ű 7` ¿ã>ôC÷@þí»•Àáf–` “Ù¬pTéÔ}€ÈL£¼@ Ê ±ð %ð¨ŽæðØuédð¯]Ë“Š†ðÐPÀ.7¸Ú>;?Êt¼×í¦X±.ã˜| °ÀWþC ÷Æe¤ÒÐ`àœQð¬Ö —à@¤ûg!hº5T)•û³ »Ç"€9ú É[¤ÿðq/ñÜÿ.íð¹í± f=®ÅÄpHÎÐ=°€žàú‘Âxk ·ÀH€Ò°=#0©ûœ-ƒ·o¼eÎæ-[f Þ@j þ£X±";‹ÿi´ØÑcGŒEŽ’äÉ‘&Q®´¨’åK—/QÒ²@Ë MW%šÓÙÓçO‰ÔDÈ ¡3¢Dˆ°³`!ײ}¢œð²f0›‚Hû R `_´@ÝÀ ›gPhÕ}Ö–ED¸Ìò?ªœH±®Ì‹xeÆÔ[²ïJ¾=\‘¦Í}ç,äìÉèãŸB \ftmR#ûš1âìÆ—¯JÒê§ë>BÄísLy­Ð¡û¨)5ÿ‚VîàŒû*ÞÕK¸0Eß…ƒ Nü÷ÈvXѢŪ¦ÏÖ¥§e¯-±… *µ6©„ á1)ch]¦nqP°¨[ BøXëT˰¡YûÕu¦Ì­û6Þâþ °·ãü*p®?‚¥©¦`ù)ºéÒ¢†´Ü¥NBcˆžÚ²Ï"t°¡„DÌe„¨ÁÇ—P ê@C T¨q†—xt‚-¢}²+ ΨÉQ7wÛϸAJ²¥%ój¸'í¢ÅWƒ. ò£ÆHŒ çëÑFk¬ñ‡  Ø¤‡Ð¬K¨=ÐA/Â@ãNn0¢Müìcë²…hŠ¿Žþ#0ÊÿD4ÊÅ+B!«ÏÍe$± •s¤Äƒ ÌŽ?46?ö¨ƒgÆà E‚©C(Bá®IÛ²f!¤@%¢!†Ø!·'ÝkÑ`ö%H±”-6„(°@¢V,8§ÓžRˆ3†¥Î>Ò#Œ$˜¸ÇŽ0±Àœà‘Œ¨Ëœ1‚‡‚¨M œÈ&S€mòX–øEÉß“˜Ñd±\—2g%rÅt¨ÕÉZ •rk­ª¸ˆŒ0·Ž1ÌE— ƒ­Mf†~ø¡_uqÁ†2oHEÉb‰ÝW晣,8ÂZ²Ó!áTL‰²sÈ":›Ì hö°ƒATeÕUXA™u™ÿyrnˆ3Ðf™hˆÃ\p¦{rÈá×Fi^R`BkŽùÉ›#ÔµhjØ¡„Aiwêi¢C¼!‡X$ sžBôãp1À¸<÷Œ 6·:  6l4‚d#\¸H\nˆ‡É·Ý^[í$Ù)îéæuŸw.„ÅW½ƒv뇛H‚H´ÜŸ@ÈУT=ð¦”XlÄ‘>¡ÞZæ 4Ì`Èj æ³sþág“æ]ôÑC/ÝX‚§‹ô1«m»2("~qD(Ðã„RkäO>ù ilo„j{ÞØ¥4Àa¼¸ΑäfÜûž÷dº"5 u Ùe€ PÐAÿÑN K°‹áÄ ÈTˆ@ȧj7ÒAÎD„‚Àc2 Ù sÑ£\Ü L=°Ç»çÀAP_ LÐSA=H'´Y„ràAŠP¦êÃ2ø0CôÈ>m:G,NÐA“E&ãÁŠP4ƒTöèÇÄ ч?” ø”U¾Ç´fJ Ñw\ ¢äàyµ™‡Æ ‡=äa ÏX–3àÁ‹\$ÂP@Šq¦„ü€ÔØNf å¤"DŽs| éJi3;* r¼ N–a²¸ - Y L&¢°!v¨CöÀ‡eÜÃ-ÉÅ"%(¬H‡4™AÚ-.hSÒ'ÿ%_™2ŽÚÜ&*¥3>IMÈ|J”H߈“ aèt¾³ˆc€¨}Õ>œ©%@Žø¢$Ïጌʙ°$3Ž4—žæ.Ù„ãqF J"ȈʂŒ—ÁÇôý`} l ŠZèÀ ˜® rO[(¡+Ùø„ TîìMEŠ5E$›¢d¡ÔoV”¢Åà®ld2µÁ,› у]¹eW25Bnp¤‚KèJ#b ‰e‹̯xsÍ‹ð4ˆÜüÍC!ÄN™C®s¥k]ízW¼æµ®ì/xa26™¬J Âу\@’l2‡Rxÿ'„@ˆ@°^C®ÈB檔lÌU”ì miM{ZÔ¦Vµ«emk]ûZØÆV¶³¥mmak¤oUYz U¶‚@„"Ö–:p$ÊóË\t¨xÑ , `ÂθÕA¸ÓI²‚§ ÕË>N‹¶œö‹­Â*ÜR©Ûó^kbF‚ l`ËY¶ÀO8GÄŠV„AH#-Áœe(äÇàˆF~«| S+pt»ð–#©‹OÈÛж–·Ž¹EozáQ"H¶-ø£lÉ v{`ùƒ`½HÈ<øV;´x!rƒ¦ÅlšµÁ$™…ý#ä ûÿ4ÃãUhz;ÜÊ pæ-’•DZP‚$(ÙT+Ï †P„ft£êÉ;™jáG!ìƒHðÌ›jÛFŒV#ÛÙHI¦ã•ü›‰>9v‹Aº’ŽWê ¹ØòQ´RˆeH&«kÒ7¡ûì£A€†ƒ0ð(ZÕ‹à]κ’ owÏ«/†ùÜç$ZÐ@ÛG¡÷qè‹® ª»rt! ¢Š±±?à䆨aàJ/#@˜Á`«2ê:ÿ¤/¢¬°…íœÝ:ûYÛÛ%‡gMNü8Ò\•D/Âf>ÞªË;þ:wUæ¤>n±C!Ò =t .0‚¦Ü‘mîÙPÿ. xµ[ýg$¹ºÉÞþ¶5ÄIëì0$ èQÀFü[ÙA‚^Lìr*Å`±„à^8B–ÈÛG¨jÞXøÁ:•ö¿˜, /IÖ]%‡öf gPh!P‚h „ŽGƒ(„eÐùb´¼–ËÇ œn„\,Ähy¡¨=d»´Ú=aèéH;Z°¿µ§°^»ÎÜa«Ã'(BÈ®ž‘ ¡( ‡ÐZ4“í*hšÇ¤79bË”;eüíuÝ@ØìG>rFÊ^v‘xvg äÓns…'|ÃBývQ¬#†ôA“óˈ` F£-Ô¸:à:aƒ ä² ÿ(ž>X¨@;7P:õE`§ç˜3TóßÍÙ5ÿù´á6Â$qkôCÿ—ŒY•¡Ï†^ÖÂõ°„ìåøQ™,"¹w&&mû†gWû>noZü8Ÿ#9­ô·kíY5ü;8¶[« Ê£o£‚¸WŠôY†»Ë»½ pØ£] 6€ (j<ð3¼ ¹4 \†Oˆ‚ǃ¼ãs9零K¨Ô¢¼k ;켬ÁCA8Ñs;†´žk a‚ ƒ¨ß‚Ѓ@(¿›ÀË(XŠºƒŠøûŽhŠóˆ—ëä3-"3­å35œâƒ‹9è‹ n3@óÚAAs¸0‰ŽÿtÑ¢ÎHiˆ†hvY‹ ¹¤ú-ø‹²Õq¡Ë@‚ -¤>_ÑB/´ 0 »â£‹€ë‹ê«>ë=LÀó©C?y ¡A®ˆ GššiÚ›0"š€Â6ˆÒˆû.Cì¿ýS5=»¶ó¼%ÃAœ;@(³D€I" ðB+´9šž«¨º§{°&ï>t¾Wt¹ÔbDƒÛ³DÜžX‹Äœ‹µ·³Äñ EÈ(<êŠ `lß«Q¹C"8ÆSKµœˆiôºïjÁvD¾;S;@û:Z„ÄðACmÄÅp{$[›;´µW”ÅÅyE¯¾ ²e×B<Õ¤ìU¶üUÿdAUÜËÜû”[ÿ£[AÛeÅÍã ÚÝ Û¿­9"EÊíJÉX õÑê¼WO­\}Ù{N#ÅLæ›>áTe—³‚a+Èd×íÌ3Å×ÿ OE]1•Ø ëX^ML-åÍ™ÜXID5Û}^%ËÝ€ÅÑ´IKãóRÝ5I# SŒíÝâ5>´ÙÔ† Ü,¥Øæ=¬…É?{¾ÁÕÌЭZ CØW XlJUÕÍ?Ö-×ÅBØu×ÿÛ_Ú…ÜìÍWsʸÅÑn-WÔò?®uD’<\ãµÛš•ÌÙ…;µ˜PM_˜¸¹uQe=+¨µ?;{ÊöOTÅ_ËËÛÝÖú]¸ÎUÊ®•H.`3 Ï-ˆATU¡Z$Õ°©UÓYä`S­Ë JßÉ{ÍÞÌÅý!„¤]ž]UE±b˜ËX4Yª-ËF^E,¯)&b¾á®Åÿn»QÅK~bÅLRû à*6bôÅá-]µÚM¤tKÿ9 NX~É2Þ`:~K;&Pš# A¦L>n²«eIØ”\ .â3FãC¶äîL^åuänXhìÑ1<_C®d|ÄâæLœ¥¾‡¬^7Þdybò¥â˜,åBVeTÞXWfÕ ÏuÅQà25cR¾b„åXVZ5féeÉæÙEâaVßKVI[î¶NNb¡åR1T+Q®æKÆdO&ä[næË}({tá%ŽEgÎåAçp¦äh>ek^do=«n>fŽgrvçwng]®P fÞ}aT‚.hƒ>h„Nh…^èD•f}ÞgxVfÿ‰ægN¦çùµçufçîç†fŽç\EàIÆÍ¥Ìè~è#¦h•^i¶Ð.†á`Îè9þæ|žh–îhmµ&86iniœŽh¶iŸÆYüÛiž`êŸjZ¦éul0£>êlUꥮê¤ê›~Ý¢&c9žåšÆj k¦Ž\¶j®¾ê¬nj”®c}Ω¨>ê™^ko–ë¹þhµ¦ë±vh¼>i»¾kªöë¿öj½îkbvêÂÞë˜ë®6ey6ìÆvlˆÎëÁ–iÁžì´þjÅFkÉ~lžŽk¶찾ìÃþlÐfÏìÑFíÔÎlÀfíÊŽìÍNéОm³ÆlÑ®e|¶íØfkÿÄîéÚÖíÅÆíÜ.íß^íÛælÒîígvmã¦íâFnænnÓ~mØÖìç†îã®në–eÆÖnàÞnðþîÖÎîä–mçïÝæmÕÆnò^oïoø–îô®k÷~oáæëòVïè&îð–ïëÎï_púÞoöžïáæï³Fo/kÿoýnïwæÓ&póvð_pü®o ð pçð?ð‡D†.q?qOqGhoÿnpñwñïî ÇðÄ>o¯qïqåFêþöñ ·p×qÿñG†ì!ßq!¿ñ or wò'·ï'r_r&Gò©îð+—ò,Çò?rïr/sÿ(q#?ó"Ÿn/s5gð/wó*Ÿò1‡s1—s*Ÿó;Gó4Wr<Ïs0s;ôïs-ë:Ïð(çs+'ótB÷m:t=7óHßó5ÇqIó?ïtFotP/tM_nCtOÏôPçtTŸôOWõUÇtGõ6—uK7õVwuH·õ[ŸõXïuE/uJ×u_ÿu6¿obOuRö]¿ôdn??õaßt\?vV_ög§ufOòD§öiud¯õ`ö\wr·vqw.GwhWwl¯ôlßòEtnïvi÷ro÷{Ç÷tŸwXg÷h¯÷wGt“žpy÷vzxwOx…ßv„_øuçwÿ{7÷|ÿ÷ˆ×÷‡7ø~÷w‡øw?wŒÏøïx‚õfçncy‡—ø‰çxGy”@˜y™Ÿyš¯y›¿yœÏyßyžïyŸÿy z¡z¢/z£çy™@„(Qú¥oú'aú§wú&ú©—ꊠú$Áú¬—ú%Ñúñúûãû±·zŠ ûÂ@û´çú­gû¯wû·7{µÿ‹¹§{¸{F©{½Ð{¼àû¾7û0‡(üÁ/ü'!üÃ7ü&AüÅ|Ç|È|ÉŸ|ʯ|Ë¿|ÌŸ|UP… h„ãØüΧˆFheU(à}Öÿ‡R@ýÞ¨ýÔ|Î÷üÿ¾¸ýŠ €}¿¯ˆÕ· ৈØçýG©}Ô§sÈýÞ°}ã—}Š(þ½ç|Œh~`úã;D°þŠ(ч}˜JøÔ7Ð}ì+ÿF€}(…À~ì#€`úûW`õWûˆ,8°Q 0G@!€Fì3h‘ CŠ0÷.’ÜÇ‘@Ø(e€*†$I"TøQ€9•ÿ"N¬8Ó`!…” RäOƒˆÊ€(d£—1\êê?vü“ú}ìÌí lÒ™Z`' Ô¿²i-š €’åB°\wúœû‘›8ã¬ÿʯÀ˜»hÈ÷_)›~ë¢,+–ɽ‹ýŒ°*ÈÿaL@³eȒ瀻ïÇÓ¨/¶f[1(×ÓI @ìУèMÚããáyÿ ÿ×è¡ëì†7¸/ðó…#‡/nˆSnV¬£ Ü-îÛmô飛«ê 3ûÇí£Y6z+°¡ÙðÊ?Š—jŸ´z$E@Lÿü7ÓCl•‚Uû1בTŽ‘æàG(5÷ÜôåWuq_mÜUôz๥yYitZ†ÎÕ\Puèb¼”áK8Z)¿UtpµHRìó;õ]G£€{á·Ð^ûÍhßZ¦›Ï¡´“rÍ-ÿ¥^s&â_õ†¤j(–wÖi[æ·žMí@˜cú˜O)òÕVšˆ-ˆiQêù¦A ”“¾i™ÔKÏQG*×èDæ¨bWPêGG:X—6%ÔæN§‰7ÚfzÄÐDvÖ¸eP=ªòRg¡¦$&¨[É„XY²¹ô©B¬Â4Z¢²½$Û¬À’T¬n‰qE+£§åI …Î %P)z:8«u§!S”󹆹ˆŒÄÎi’"¶å@¥ø“ˆq×ic‚»;4‚µ%º+¶O¹ˆv/›ñ¦ÕHÀììÁ!\î@ìØnµ[|1Æk¼1Ç{ü1È!‹<2É%›|2Ê)«ÿ¼2Ë-»ü2Ì1Ë<3Í5Û|3Î9ë¼3Ï=ûü³E1©ÐE}4Ç•¦D(ÒM;ýôÁ-}vÚµfR`cv60õ…Eu–Ì­„.\)ÖG%FB½6ÛN¤CfñÖØV;ØV¾™ä^G¹GÕܾQ‘½rD·*íçbÛ;îpq‘›ei“KWykî—ïV ÙåzëZ\„µ'fÝ«¾zAJHQêLnSæi%y×µ»Y‰ÚµE¾EŽº«¬߸ë²ï„Uq¥jçVÆ™dŽç¯kżYµå›B¾Ñ›¸ÔÇ‹ßvòÙK>RêÜŸ77é~›÷×ù*ö‘s’—ÿÒ ãëß´9ˆøTÊ–²"uË[Ø2 çš™Óèk$ªðŸµ£0Æí¯‚$HO.¨Á j,2ä C(Â’°„&ü!ƒ(Ä!±ˆF<"“¨Ä%2±‰N|"£(Å)R±Šóa³¨Å-r±‹^ü"Ã(Æ1’±Œf<#Ó¨Æ5²±ncâ(Ç9Ò±Žv¼#ó¨ÇÐB9êªÖ)H|el~,$Æ 9š=2²‘Ždd‡£HI"òb“œO"+i±KÎ呞üä##‰ÉL’r“š¬'ý’Ê´¬ò' |%,ÿí(JÄ´2)µüÉ-I’K]–Ò”–¼X,ƒËYªò”¨ìå1‰LAS˜Îô$1ç²Ë‹LÓ"Õ,È5±¹Lf*³bÏüf#£ÉJcr›ÊfÄÈyÎf‚³w§-Õ¹Înú²žö,§ÅÜ©Ï:—ò$$=“yO|t?û-êQ“ºÔ¦>5ªS­jL‡zÕ®~5¬c-ëYÓZÑ­®5®s­ë]óÖ·î5°ƒ-ìaû¿.6²“­ìe{úØÌ~6´£ mgK»ÚÖ¾v®©íms»CÛ¤Ö¶·Ã-îqGÜä>7ºÃmît³»ÝÑ^·»ã-ïaÃ{Þö¾w­ëï}ó;Õúî7ÀÞé ¼àõÁ®ðL÷# !ù,\<K‡ 000QQQnYjoooMx¨ai…kuš}nŽyz‰xw˜g|¤u} Y­_…°~ƒŒzƒ”i†¬fгm¶y‡¨sްz—¹;<ŸCCnuŠu~š~l˜{y·RR­^f¬|\ºM¹{X¤`k©k{§yf½ch·hu´|kºr{Ü|6ìz/êy8ñ}'ð|2È]^Û[[Ç^dÖ]aÎd^Í}FÉzVÛkMÜgV×vKÖxUÇdiÅktÆvgÊrxØdfÕlpÞuiÙxxæ^MãWVèfIåeXêxHèwWäfeæriäxx†n‹†v‡„{˜–m…—u‹™~”£l€ªw‰¤}‘µy†Æ{„Ö}å€y˜…x¾‚I¶‚Y«‡g¯Œ«‘zµŒf²Œrµ‘r݃.׃:ô…ç„(ç‡6óˆ'ñˆ5ô“<È„FLjSË‘YÓˆFØŽRÛ‘MÚ”XÍ’eÅyÔ†gÙvÕ“iØ”yϤ}ߣiÙ§wëˆGë‡Wè—Ké™Vð‹Cñ–HðœVèƒhåƒ{ê™fé•wî¡\ð [é¢fí©uî±|ð¦gð«p‡‡‡†…•˜ˆ†›…šœ’Œ•••ˆŠ¦ˆ–ªƒš¹–Š¢œ•ªœ²‡ ½›§¸¨€€§†˜¢“‡¤š™º€Œºˆ”¹˜„ªŽ ©—¦«ž°¶š¨½£Ž¸¦–§§§¨§·¦±¾¸¦§³«º¶¶¶ˆ¢À˜­Åœ±Ç£­Â©¹Ë³¼É±¿Ð¸ÁʹÇÖȆŠÉ‹“Êœ‚Å•š×†‡ÙÚ–‹Ô–—Ù¤ÞŸ¡É¥ŽÅ­™×¬ƒÓª‘Õ²Ö¶—Í©©É¬µÊº«Ê´·Ö¡£Ø½§Ù¸ºä„ƒåç—‰å™™ê¦†å¤œí·ˆë»•å¥¥èº¤å··ô··Æ»Å˸ÛÂªÚÆ´ëÁúÉ˜êÆ§é̵éмõΨñÀ¿öЫôÕ·ÇÆÇÄÌ×ÉÑÚÛÄÆ×ÎÓÜÔÌÜÜÜÅÓáÛÞâÜàäåÄÅäÎÐç×ÉåÚÙõÅÄõÝÇôØÙåßàåáÜôàÌòçÛäääîïðíðóøæçýïðþþþÿÿ H🾃úÖ­KˆPàÁ…BD(ñ!Ä êÓØ°aÁ×Ir¤È’(KžLÉòãÊ–0_Âd)sfÊš6sŒø0"G„ WJ¼X‘çB/úœ‰3'ȦNCF¥9%Ôªÿ®bÕŠäN‹G7ò+Ö`P± 7î<ªÔlÙL»š”û”n]»¹FÕ»/ˆëÔmÛ&¯ìذh-*Ö˜ÕmâŽpcúÈ7geË“^Ž›¹qg’ûBë#.¹¡CsTýoŲûL»5ÂÚ3 ãÝ,¹3ï–¿©úþŒ2߸qøâÏ7òøqr§ nÄ=Ö#k}´Ì±;G«MÝvƒßÿü,ÞêðóÄ_#œVˆ›¾rÞþ böÌZáƒÞ %úö-Q¡oê©§P9 芭˜‹—´àƒïA(ákseVžy¢7Ù…(M!à¼÷H0câ3÷}ø<Ö8£4"T„X€P+˜#E3î(a…’§ánBúÔQå$©d’ÁìG’u12ÈqDsƒÇÂÌÄDQÌ’KÆ‚ *±©fJNR,jÆ)çœtöxäxæ©çž|öé矀*è „jèGÊã_"|a€Ô$qÄI0Íy D˜%ÞGÑ‚5Z'„&¸`ƒ>Ôcªid‘Afÿ8dfʃH!{’„}I„©‡Há ,´°BD$ñÎkæÔ ¨°@¸Î$šD!E$:²º*«Þ«¬ß¾:ëd1–óΉaqH"C ñÇ ,˜Ægà§Ðr- ÖÊ <IJÚrÛª·â‚›ð Ó:áŒÖ0“„DPs!íþaF¼~ b¬5úÜãM"Š|’ãAÍ^!5ô½13žî¸­Á‘I¥pÃtqè*Î~•{<ÑøÌ D ±Â!f˜qF HQ†7÷øWH!|¨qÉ9ëàˆÉÏÔÔwŸ‰_Q_ª3Ó¼sx°òÜ•Îg“û0Bñ4Ú++ø!ÏcK÷ßäÿ‡ˆ<ñÂÆ&¡²2ã¹&‚­âÔLZ)5>–mpÛr±0‘7cžÞÛIógœ†…˜1†EÁÂñ¨x8…ÄÁ +±¼'‰Ö¼ó 3³üL¤”¾ ²Ï4SDùÚik®6òÄ‘Sˆ4ñ@8ó4‰ q"ž›îÇö£ƒ#¥ÀÒN~Òðxî3™¨ÏíÌ8¾ì¹O(äÜ¿UòhgžfôŒòŠ»©ÑËÓÆ4Qˆc@‚ jè"óÑ'}Ìø™5$5<øI¨?T›Fñb³p-¯*–+¡ írmf„0C"D?yH#ëzÞ7¸QCLÂÀàƒÿØà÷ðˆ}¹Û]üò²w nxúÆÔ±‡Bˆp„öó /§¼.îo…rÑGëÈ!ëÝ#@ô£ˆ¢¦6µc HŒÞØ„$Ôs¸Ä)Ž",KÜÄ@eÃ?Ñ+^ ¢•à/gãB$¹Ô†nde{@Ãé!pxcE÷à†4nH@∠D¼HqÍk²5¨ÅÝC?ªr ¹X¸ÔÌ%‡¬\"uI.y4ßÐfˆFW2pŠñÇ7þðC,beØÒÀ†DÄ,Åä{´9K\¶¤f·ÌK.™FEöLÞèF8ˆA ?”’"÷†ölï~ø\ÓΠÿy˜c bÐÉ+ªŠ"ªd%«¾±Io S?ÒàÃóFÍÀœµè.ï§?sž3dÚð†FE6òŸI;à qÔÝ`6˜- A/Àb‰á’GíQBbcù؃«CŒ”Uƒ”N·’Ú—Ž’³œa¬Žz>„pðÐ?gðƒédȤ}a l¸A"Á‡1$"zÒЩ)õÑÄ'Æ(?û!€âñcL‹´¬¥ñH’BzÑ£' #„‘ˆlZEƒ4Zj?Hƒcx„$ÜP†¨ §CC!´Z¾µ²Œ`œ,¥ØÙQ4£}¥Ì89 Õ§vFB„íbÍð}ÿ”n §Ë$‰¬€ dHšpýp¯ƒêã³ -PÿsÒ®•¢LÅÌFQ8]êGª¡ê A/4pChÀ­õTPôÀ4ƒrºUb®µ­¸{«~øãŸâbÓGѵIjUëTÖ¶+j‘¢ª8µøÈ €c CÎP†” (hDÔÀÝCXï!’‹ž‘„K* ðØQP§VZÓB7¯®ý+/ÿk]·¹1ê‰ç<õ‘Ö¤…!ÁdÃ4 H" bø º?”v”¥LD° 1TÝ鉽Éâ©ì×3UnêGÍã׬*j¤cC‚ë-ˆA ^h,Xñ…2(-ÿXHA^´Ì“z†ËîH³ûî(¿œéo‹ke‡Q¦Ë;m‘¡F`!i…8sÒªI b€ ÀãI¸B_@ÈàA&E°Ý5Ù`~Ž {#èB·ÚÕç<´„fIJ^!!Ž4Ö°…=ðjnÇ3ò€€!8@jäŠPßGR¥fÆ©¹•ê ­8«´ŠWŒ—ŽHz‰2±1”!XÐJL9@€‡ ƒ˜05[ wÎóža6ÂjÿÅþ%´S®|e,ŸóÅCî7ô@\agNAÞ€ XœãgÌ`l¡PÀçÀžÐa)¹RÒÿ¦¨¿!tmá¼zàÕ…5¹°KÇdLA:rF˜rÀ | 4àÁO¦whB h `tLANè0‡=L©ÃÍÞx'ç¦ì×/ \ºY†ùuc‹I(€˜Â¤rÀv„" à/Nå }¼"@˜î Ÿbw‰sb|ñÃÆöDî´¨¹–¿®ßl Bî¨Q%¢à¶?ƒN8¦q…¸çbAÈVÌA‹Vè]UûR^tÞ5W? œZ†·ŽW*3¾ñ/{Øcr–÷Ð)˜D9Š‘‹D¡H@ÑöÀÌ h@*$6UNЄ’€Ð Œiø@àEÿ’¶4Œ$ ÃIuJ¿ú“C¹ÿýð¿üçOÿ?!JB樀+ `•°2`_K4ðC`ûW* b“€;ÈxLæV4VAúà\ÄÃuâ”{º·m‚Q4Gë|çб0<ð ¼Àv#€t#iùR#ú  ``p –0ÿb"æà =Д²DùqÉt+QF{ÝÔu€%‚2G…UFGp‚ ¡v&18€¡€ NYP *ÂB´]H ¹` å`QG˜K5…ww5kå2õpÚf…b·{¸×mÂe³Vz“Ð ÿáDïàÜÀ [[0Òg0_ß ÙÁ € íp ”¹0 ”@ÌE"C2ÜЇ~H3òxâ0ý …Üv{¬Æ‹½+ñm4!RÄi‚ ‰ÁÀ\ú€  û Í"„Ëb”àz*W<¾C õ0Ï ‹)æuä8…å¸6ÁˆhÏ ­³X °à@ ²t Ñ8WsoÒyÙ¸Dµx"GUL4£8ÿ0Ì‹üeˆæ‹.§)Q!=1²ŒùÒ àëWüበH —À ç0 Ž€ŠªÈŠÃÃ>v^F‹ê³ˆ É IˆH“•…iÿ!‘rÐ>ÙúBc~:~À (QÐ÷CQ N žÐ ±À2Gµ@@€ƒÀ *i\£DòЉ娿 )“$A‚2³#í€#¬-úpŒu‡ T l—N Ï2 ¼` ”( G /Àv6@F ²¸’ñôÑ•ˆÃ ·8â‚ç8Ž»h“#…©R gÕP yp#Ï> ‘píðC°À <(ð/ ÷ð!%FIgGüV+»3þ`{ž™–›©™æøQ:i0‚pÕpÓP/@ • ¹}¹çÀ€‹ÿà “/0)F@/@¯ô<ÒÀ•Ây\ÚÈ2?õ -7ŠW“ÏÙ™n3‹ÒI!šDL GèLpá¹&2 uØaB9P ú@/l”²¸*¦–\¤j‚x…Í9ˆûəݚˆŽxy0 ¦yºbM9P Ð , (  ±`›Q1ð=`5`»°XÞæˆð„«Â2Ã1õy0Ê¢"ÊŸVz¥v!!´à —” ]hë@—¡c—·s1ÀvN`¹P l7vHˆ©›BИC‰bD/gP`^É>Ïx]¹E1¹œ¿H¥‹§–ßô  ÿR¢2!ëP#´à²ðFÕ ‚PE'uq§:0Ôr%=ðBBpª§j›ddú€øôSSÛR™¬'!€ø¡‰j¨3‰¨¹ÚŸ¯Á/q‰ ¢è¥Ò,ûw?äêq;èSò Ýg ¡ >Ð+A@‡)Cð Hp#‰¯Z>®33ò°Jƒ*™·H–e©¨†„–‡Ê«Uñ ¢/åÀ/Çú áÉ l• 0G²;.˜ :Àö1í¢dE3 “ARÄR2tF =³jGÓö¾S ߎh–»:¢UŠ¥t!¯'SÆ*!îðC” L R¥ÿ(0Q Ž£›GÿÐ.Ùª­Ó€g¢VO›•Üp+jb€*¨BcÙ±ìÊWùyˆ{Q¬´ ¬ù²“f‡v˜  ­ø ïP é0 Rp„<ð£G@§¨zªÜê­jt+Èä•NÊDÚ¸¬-Y̓몫+² ²§ú¨¯ÑÀö,­€ T`£ #ç2v`Ê€¯Ð ¼Ð qXM鎠 ’‚ªC€ªçyÎà P†–´"ϵ¡­‡>êq°€•Ô–I[¨ðªŸzÛ«|ÛZÊ¥Ä*›Cד  #ÐÊRtE clÀ`0 & —Z)¾•âó Ž3FP˜1p„‹É˜¬:Œ<åzå·ÿÑ, N™—™™!K¢Î©¾ë›¥&Z*°pz£  ÐÚŠ°m  ʰi°®éQà”²;(‰#ü‚®ùaR¶zàŒñ‰’¸ æp QÀÈ9¥·k»ì»·µ `&Šƒ‚t¤W‡”R¼Úp¥8Ðaž`SPròÀ ÿ@ ¼p£ÌP Ð*)DPµ ½G «ÔJ&¶>€‡"êÑ,­€5¸ZˆOÛ®SLÅŸ±AÂ`ÂÍbClð¸ú pÇSÃ3\)ëPš±‘2ª”B1l òP¶$¢GR¶# êÄÑâè ÂìÁí;È}˽¯Q*® ¿“ÿ@B(ÊÀk  ИH§LДI¸Æÿ$IÐS°Šˆy‚à ‡I x[ë•nI›æ f:²w;»N‹·â®:a¢ëð‘>Ø PÉOp ‚w]à  €1Qð± ÉÀÉ´P @ÊS ¤¡Cr@ ë \©V®õ1‡52 ±0 Þ!Ëçx‚œ¾„Œ»&ªî0¸±Ð “í@ rpPG ´ð ¿kJ€tÂÆÍÿ@Í9€•Ðg«­6p ¥ëȵęk6 ³ ´ÀÊZëÜ´ÌÙÁRüZñLÁ¢òÊP &‚ P Ö°HÿG0 ×l˜ð ­Ð¼`RP“r“6`?rp?°ÊG H¤;®Ç¥&ëìàˆ"MÒ%´ËÕS!!ªÄ F\¬ot@)× 1M f÷q¨°8àc<ÝÓœœ 0€„bsÛpÔµÆ×y çƒAúP#Ò³ð#ËyÈí ÏÒ“ÑÂVÌ ‚¸ÀÓ€AÎ ÅpÐ. ›¹ð Fƒ`¸e:gpCwð„ÝŒ#÷ÿŠQ…åîÜèý诒G¡&ã2 ixd> Ý[ L§›üÅÀ ÝP Ü÷¶à #\´¥=¸R„þái ]C ?´TK!ŒÈï¬å]^Ëó a=Ö;‚éi¾éž\@à °ÉÀ /h%=«ž1§ÓR3FE ±Š¯”À‰ƒœ¾Wô)Å]ýëÀ†Ì-dnæñ›éjÎæçꦰ «° ¤ï`Tpí=  |¾áõç  åà:†JëÀ:0 ÆÐ :` º®m±å\žåÂÎñ6±¥ŸïÜ ?Ù¬Pªj§§Ž µÐÒÿþ&¤•rᘅäh ««xA >¡¢¢F¨³¬ô[íÕMïîí.âë,Y<°0 “ =Å;ÅPkIÞ/`/Щ ª [j Ø€t ðb0\‰0 wà˜ƒ"ÿ˜;Ì0wjÖ’L/ÿñÁÞñP/øvA q‰øUËÞ_ÌP Qý §Ê O`’@”€÷±-{ ·ÀKÀÓðó‚+g%ô¬w>‘ÿß®µØÿôŽéN±´”öŸ…\­Ç ]t“"gÍ<€¡b}mO ú†€tÈ Þ@ ÷ñ¶j9ˆƒrÿôúoûù½îlû†/üû(#žŒ?B¾.À¯ï@)ƒmó Oézm¿‰ Ò+!åô |ÇŒ5jß ¤väHk%êûWÑbÅuZÜxÑãGAŽ$9RdI”$O¦dyqeK˜/a¤ŊVM ´&¸ÓçOŸÖdVLžAkïž9´fÉDŽQ5-CºŽ‰‚S·8(pÄ­P¢{úzjYD} Í2[8ѤÆg†œ;SfÝ·xSÞÕû‘oßç, ¶ëçX A¢m«•' f© $j6É‘9LèÈœK^Aj÷~%H ` ‰œia·x‘ FX€ `‚1ÈSB!ÚJBp@‚7‰PI Ô^ŽîI&Ra†­„ƒ¼€V/°Uf|°Ž‚è!}ø ˜aPÑ)ŽP@œÐ °L{Èˈ?·ÜoÂËDrÅÃÞízÛ[ 1¦±!JdbG ‚­Œ`„>Â` Oq2.ˆ@˜Hd壀hÇ<ÂÏŒ¶:D ˆ ƒŒ¢=ˆÂ$@U¢#0c‘1´E l€"¾¤S$Xž#ØêGiìdÁØß„’”„c“ÿtJTÂn"&j­„r„ä cG˜B$€ËPåò˜Ià” UР¿¬Ýl¬*2Á“.á×3[M~Y9:TÔï¶„ò¤ ehCúPˆFT¢ ­xÁ [¥ÇV/pœÀ äℼHO9‹)Da  @ °Gð¢ M€ÀP‡`£¡AhO}úS U¨C%jQzT¤&U©KejS“*¥:f³oò0™ˆp$l”‰=ˆÄ$²E§Ù0#—©0 , hâÏèn˜BÃ}*©H>iãO*USŽz½fT¥šÊ< H°D8A˜˜Ää@ æøÔCpˆÿi|#™B0²d*¬åޮꀛògÒxWbe$#¡+ƒø:PƒþЯÕf§Ìx„•šà0ˆ ya¼Žá…àƒ…ðM¸¢%”‡Ä â3Q Œ—Þ’Ã~ôŸY-E|ãOG‰r¯âí+`i > i¥• LÀ„e0Í6H9„à nôq7@°•R`U "âßH„x@ yDÚÝ!³<—tw†yaûÚaó¼œÒGŽòKt±&È…|ÙCªD0à ԰U5Ä’L„œe Î B4àGô`6úàÒÛÔHaðJè´sÍ.\eaãÿ´  4ï†'‚ëÄbåÕ9syâD$â2˜ÄŸI…0CëPó.f†`ŽF¤Ç î×Q›’!;Ó†­Ý †ójgåhxÈI·¬1ÏJô¢0ÈÁ{D_颹ä¯R–Pé!‚>1…$AÁ!ÒÙ›!Åà—p’µlþñ4/Œdæè•bjc*\EJÐíUwÜØ>Áz0î—õègH£zBÁ‹H 1cðiY‚W9ËÅpþ ±ðìÚkGÕ ¬ÎA"Àîø`M Á аki$aF$B‹–"‘ß8D»“ '¼ `¶ô‘4”ˆšÈÿ;‘æHþ´„ZÕ‰m”¶í7Å'Ÿ)H.¡Ñ‡¡ÀûFmÆc«‡€œ¹(xbˆó>@"6}×C[Jo”ö]¥Ypœ§8ï´Ì”í Ó±ÉRu3~ƒ"†ò¶Ž` ÞIƒ(Ô°wÈ-)/—È×i±dnÜÍQ]®ÙÈoB½{v„òàþæˆÙ^gf1óç g8“!èd^Éè²N‰ÀôB8ê…ú!A¾[Í&ëLÛ1‹“ÐØ¨ä’ǃ”¢|ÞvÓŽú'?»æ=mÀQ×ÝÔ§6ålÿº®bVÉdÆÅ3¾ñBxC‚¹är%-I ’ÿÅ2ÿ5fÏ PŒ Ux¹¿žóçPšÁ êÙïLè+|ÂfÐç.ô»ã½Û“‘u9J^µ,ðC!ÜPer²F„·qu ù§è`0Ö5ÎkÎ7Ÿ–äà Eèô§¿žK 2c±¾ê³»ÚÂ;V󎉠“…8Š$ “g˜i†o¸“ƒx††8¶««z<ÁÑ[Ã$#âѺ¼6s3ŸÈ?dÉ•üû®¹ò©ìz¦• ³ë(Ò“­¡Ã;Ĩ ëH ó¯Ùè³wH—Ûø y¸Ÿ¥°¤7«Á¸P>lAÎëÐû¿¸ 5<²ÑK²Õ1=¼»–N¢éðAÛè°2t•nÙ‰{B'ÿ2²¹k»±›0³ó¿™ªh#2#ƒÁêÉ3‚R2%ë¼üB¥™¸ ¶:BCC ¸§ÝÐ@‡pCŸÃ.<„>=„*»Z¾J¤Ä"3 äÄ-¼3ì DAÃ/$B#ŠÙë@É{؛̸䮞ÊÂè«B:\²Tã.¼AÌÅt2g9/ n‘ ‰¸§L:B™ë SÁÔ9·ˆ¦Y4–(tFPÛ.Rë<ÓêEP ¸]D¾_ܳQÔxX¿§±š ïk,uò$fô¿Hd¦'T’i”»Ä‚*ZÄ?|»ñúÄ;¬‹‡“ª`¤-±:‹\pðÀ*ñèßû*!{>ƒã?¤¦k{EóBG…‹Ëø¦»'¶(!‰0ˆ}@Š4‹ÔHÕR;ÖJ¸ýãHƒ³Aàɬ¼ð¢»LÄÆìGRÄ»”,‡•+´pÉCÇï‹Äj|6L>ËÃȤ¹žòÉ2­¡TÁmìÈoÄE€ì ’” €3O…&“F¥ÄóâT%ÕºE9t»…9Œ˜Gê ‰“8SHÍÁHu0fÏLÌ:¥Ò“œÕ¥”*[-Iz$»f“Å7šF­|°VõU“8 ålTc…Ud-’VU»WEJ;ýÂLmK'›ÖcõÔ²ü4òäÕQýT&5U#EU;’Í!5W¯ÄV÷œÙÆôÌb]Ëð„ÚNYw…Ö‘M …íIO2k%Îj-Ð#ÅÕϤ¾˜Ûa-8! PeÑ µüÃ;tVYÕÚw-5 ε[ ;Óþ#Ûf[øD[YT[zSj Ö’}Ôèk°½Ñ¿2%< Zb­H¢=U~\Ï ¥MOâ4R§Ý[ÇO©EKj­ÚÑ}Üœ‹\ÖýÄ•mÛÔŒYF%8ÂtBÂ,ÓµÝØm=Ì}dMÿ¸}CÓÕÕeIÕ~-ÊÃLWàÔ.«´¿ˆÝ]øŒFï,8šX³ä)K¥AšX.¤;lȠ˳ïŒ;Ô 8¡Ô^Æ\#)Í×Ç%^îåżÚ_U^·Õ×­4_Î9âͽa_ïu_‘ÌÅø-MáeP]D^°}PÔÑ_‚á_nìÞvL|]Z¥\ûuPë…#[\àâ5ÞÅ|_ÆõFçÅGh:ÍèìÜê5_Û-Ýq]aîÆvÓ]¼`p„0þÝ©u3®äàÞ`"}`ÿmaÏíam#Õ޶ò¬YÕ}ÛþýáíMKo%MðíÍ †âŠL£o”['mâ%†£|b%†ß°-â ³bfÅb!þßÿ-ÖÂÎà/†_BEcëɳ4c*c-¶cÑã]Æ¡8˰±Ð{ÍÇ$^8Æc6dÅmc>ì«7ÎÞ8¾ÆAÆ[DþÞI>ÀöµdðýÏ ÒÔäÎcÆäJe¾Þ0Ž×[, ]eVneW~eXŽeY–QR.äRâCe5vc–à6dÖ匽äZÆåF¾FVWANâ`¾å;væg¶eÎHvÔ_äf–æh6fJ†æþRöæ\çnÖæm>çóàôõäN6g&g&FgPNÜÆ½fy^ßp®cx.fnægègbÎgô èaNã]Þg–da6hFèƒvçy†èÿc^ÜqfèPæb‚nè~ögÕÍæŽ~èé{.g‰Öàæè’Žçw>iŽh‹Né,né‘.èŒ&é•Þ‹¦h–®èšži˜þé…ê ¦éœ~i“>jfçOöi¥¶é¡&ê¤6ê§fh©žê¢Îj­Æj§¦êÞi…v饾i¨vhœþj™>c¡Ög³Vi¯Þj”¶ê«Fêžîj»æê»Žk².k±>k¸¦kÀl°¶ç·Æëº6lÁæë¾NkEnë¹ë¨fëµ–lllÂÎëÄVìª~lÈödÞlµíÐ.ìÃ.íçœìÆFmž6m¿FìÌÞkÎnmÖÖlÑNíÚ¶mf¶l«umÿÙžm·þë׎lÜ&íà¦ìÛ^íÎ^콘eænnç~nèŽîX.îáîÞNnÕëìÖîÊfìêæmÚ&nìïñFk¹mëïôþm̦îí¾ìö¾nùžoöoõÞ_Ýnç÷ÞmûŽíúîoáÆhØFïø¦oÿ>pwl/ðÿvoWpã&oïFîòfðp _p‡ðïÞðwp ¿oßnðÓ>î'q¿ðWnŸpî6ñe^ïŸq_ñ˜>o ÷pßoý†ñÇgq×ð'ò Ïpßqçor$ÿð&r%—p7ò#/ò×ñ%ïñ-oj-?ñwr)ïrBfqÿ+q,‡ò?sŸò!Ïò(‡ï4wó1§ò0ó9ó;—ó8gò·ó=÷ó5‡ó+ïs.7ïgó@?ô7Ws47ôBtIôAwô*'ôIos=WtNÇôJßtK¿t3÷tJ/uQõNGõTçq/ÿòwõWÏs<—õF§sXtS?uP·uZ¯óXïu\×õ]öY‡ôO/öL_ôVvF¿õ`OtU'ue/sV§v@_õXmßvnïvoÿvpwqwr/ws?wtOwu_wvowwwxG÷ºX„D¡÷z¿÷(±÷|Ç÷$Ñ÷~gê‹ð÷øç÷#!xæ@xäPxã`ø†xÿ‹pxÀø‰7ø‚·ø„ÇøŒ‡ø x½ðø×ø…Ÿw‘yŽ/‡DQù•où(aù—wù$ù™çx›¿yœÏyßyžïyŸÿy ‡øUX¾!€ãú¢¯H˜b‹XSÀ¤¯ú0¨Ÿb}Ðw¤ú(¢7z¼{‹ ‘@ú’÷ª/µ¯­7{óz¨¯±oz'ùz¸ßúŠxûy'úŒ¸{{{Š\À·SPú¬€g€Ä€€úr²‡[LJÐS€»‡[{ýU€u˜üUøüº€„`üøür@úHÀ|û}ýÌxPyÿ¤/‡P|hú|{‡úuS0}ÔŸ Õgýݯ{Ù§ý¹àýè§|ÔßýÞŸ‹Eà|Ô€Eà}H0þ ‰ìýðW €°§|–X„¨/}}€üŽGÒ€ªÏ}E)`ùúþ,hð ÁEPîŸ>«þ° !Fƒ«$X.@€‡MQ̈Q‹ \·%‚MbTHQÀJ…^¤‰0A’bþ8²¤Ï‚LÉ\ôßС2b\:õ_©R“B€§wr5ùÕ+Ö‡E©–=H`%YH0ź®mA²õ-”K$¼g†tÿ‘ XÁPW®àÀ:ºÜLvÕãU~¡Vì’ä´?Uœ²`9‰¡)û<=tcźIçÊ4õ¶â¼Ê¥^rrn¥p)Ê]Ͷ­^Hbn¶ª¸ãÜȦÿ‹œûmuèsë8^–lV”šËnË1ðêÔˆ‘–5v _L›t/@_êu ù–§¹5ähPy’5Ü_Œ=%€\+•Y‹°öYåÖ‘M^å÷I×1à"C9 eu¤OöÔÖBTa·d²—”mja5à‹$"T£G }Õ`Y©ÉÔB‹Äˆ Ê•㛄z8Ù[¥f„ €ˆE Uš`35ÿôPJÊ­ˆ×‹Y¹·Ê” UÙEj.w^EeJš …)‘`d5TjQ¡ •éU^1MäP.0fp –)/"ˆæ^|޵•gu-²é"­3TeŠ9XÐt 9§¥½v©“x­#[ˆ~J@¨eéÃé"9ZPˆýq ®ëàúЮ&ËiAëô„‚Í:û,´ÑJ;-µÕZ{-¶Ùj»-·Ýzû-¸áŠ;.¹åš{.ºéª».»íºû.¼ñÊ;/½õÚ{/¾ånTÙfùúû/ÀÜ*ÙŽ|0¹ \ˆ}ý%×tsYøMº†%U6¶ï§Laš‹Þ—0É%K«–)ÿÆHËå˜BË}…Òc»)÷P,µ(Ø'§‘-¯‚™cÞ™|4Ò¿:¶ôhhaÕ4k;›2c¯.§Ü|»9=ó›ŽõöÕ’`aÖjÒe›ÐÂE”ÚEQäžc”1}uGbºÌpE ÉŠL[„çÙ þOÚPËÔ4Q€E&Z(•ƒ5Ã=åÅUÅÐWª½Ûà—]xåKv÷å_}ZóãLe¤èÙ¦v`7;f f6z~{Âå,B•)Fê\®•ZÊ¡¥Xcú;¬ïÎêEÂ;ôÑ£í¥ôÕ[?-IÏ_¿=÷Ý{ÿ=øá‹?>ùå›>úé«¿>ûí»ÿ>üñË??ýõÛÿ?þùë¿?ÿýûÿ?(À°€< ¨À2°| åå’ R°‚¼ 3¨Á r°ƒü C(Â’°„&5,h+{ÙÑ‚5³ƒ…¬fQ{ZÉ~¶µŠ!-l»jZÎv–“ª¥í]ñÊڭƶ·MmuPêÙ îv¸Ä,^|«\¥פÁݬsM]Á.·ºFm®pm›Û¬Þö¹ªµ®u±»Yïn·¬å=ëy1Þꊷ¶C -rµ›ÞŠv½¾mow¥›Ý›ÞöžöU.~çK_×—À”5p[þ{߸æw¼ú…n´ÜÛ׸¾ð{á[à×J¶Öð†Œà åÇ—Ä Æ°‰Eb£˜¿–ï‰W 㧘Å-æn÷«[ ¡Ç>þ1ƒ,ä!¹ÈF>2’“¬ä%3¹ÉN~2”£,å)ù¡2–³¬å-s¹Ë^þ2˜“l僄¹Ìf>3šÓ¬æ5 aÌa3œã,ç9Ó¹Ìn.Hó¬ç=ó¹Ïw&HŸ-èAzËþG¡­èE3úLJn4¤#-é9?zÒ–¾4¦¹\éLsºÓžFò¦?-êQ{:Ô¤>5ª!mêT³ºÕ^µ«c-ë8ÃzÖ¶¾u˜kë]óšÊºî5°ƒ­ä_ »ØÆò¡!ù,‘`r3‡000RRRu_qnnnMx¨ku˜}nŽyz‰xw˜g|¤u} Y­_…°~ƒŒ{ƒ“h…¬fгm¶y‡¨rްz—¹–NQ‚VdŠu~Ÿ`eš~l˜{y³PP¬|\ºM¹{X¤jkªkz§yf½di·ht´|kºr{Ü|6ìz/êy8ñ}'ð|2ÙZZÉ^dÖ]aÎd^Í}FÉzVÛkMÛgV×vKÖxUÇciÅktÆvgÊrwØdgÕlpÞuiÙxyæ^MãZXèfIåeXêxHèwWäfeäopæriäxx†n‹†v‡„{˜–m…—vŒš~”£l€©w‰¤}‘µz†Æ{„Õ}å€y˜…x¾‚I¶‚Y«‡g¯Œ­‘xµŒh²Œrµ‘r݃.׃:ô…ç„(ç‡6óˆ'ñˆ5ò‘;É…FLjSÌ‘XÓˆFØŽRÛ‘NÚ”XÍ’eÆwÔ†gÙvÕ“iØ”yϤ}ߣiÙ§vëˆGë‡Wç—KéšVð‹Cñ–HðœVèƒhåƒ{ê™fè•xí¡\ð [ç¢fí©uî±|ð¦gð«pú´z‡‡‡‡…•˜ˆ†›…›œ’Œ•””ˆŠ§ˆ–©ƒš¹—Š¢›–©œœ²‡ ¼›¦¹¨€€¦…˜¢“‡¢˜—ºŒºˆ”¹˜„ªŽ ©˜¦«ž°¶š¨½£Ž¸¦–¦¦¦¨¨¶¦±¾¹§¦µª·´°®¶¶¶‚ŸÂˆ¢À—­Å±Ç£­Â©¹Ë´¼É±¿Ð¸ÆÖÈ…ŠÈ‹“Êœ‚Æ•šØ†‡ØŒÚ–‹Ô––Ù¤ÞŸ¡É¥ŽÅ­™×¬ƒÓª‘Õ²Ó³–Í©©È«´Êº«Éµ·Õ¤¥Ø½§Ú¶¸äƒƒåç—‰å™™ê¦†å¤œí·ˆëº•å¥¥èº¤å··ó¿²Æ¼Å˸ÙÀ¨ÖôëÁêÆ§é̵éмöΩñÀ¿ùÒ¬ùÖ¶ÆÆÆÄÌ×ÊÒÚÜÂÄ×ÎÓßÐÀÜÜÜÇÔâÚÞâÝàãåÄÅäÏÐç×ÉåÚÙñÆÆöÝÆñÙÙåßàæáÛ÷áÏôå×åååïïðïó÷õîèÿ÷ïþþþÿÿ HPŸÁoƒöìADà?ƒÿÑû¦.^ćë2fÔ'0⺇C>µXpIcò4ãƒ>ø áˆ÷¸X‰‹]vM3H!D5÷â¢eÈØ‡ ^£Ï=Þ ’È'“Dá‹UÓ 4ï<ÙÌyø%©$]LZf<Òð B¡‚!e”a G A†7÷HG!{¤qÉ9ëH†ÉÕ@# A~×L–†(çœ"µTY’ñTG *ô!b0ˆªßxÿCÈ!òÄcÈ›¨çÊe(ú•©>¿VÃwÕÄ ªbuÒ%ç4~ìa†gôAHb”1Ä+˜Ï`C®¸2K^A6sÍ;Ð4S¬šÐh×›^föé±q …Ù§Ô r†‡0KmG Î4m”"K;²NcŠÐ@ä—>å+!ŠÅb&ϼÇ:¤ÏF›¨˜·‹ÖØ5ÓPc!È@²F\|1È] ¯ép3w^³]¼Wöt{PCo¨iÔ\gvî7 ",2Í7ÝRÈ$³Gk´ÑYå”{nºäæ;½Æ«Ø7‹"¢!>ÿ|–Ð>q¬lfÑ-º(2ïé7›Hòv¯¾Âÿiš¾v­ØÉØi#E?oæFD¿½8ÞvO7Ó=|sÈ ht8D÷ÉSé¥t]SM5b+vÏtžq›ø@wÆx“ªŸ\v<ò|㇅,²z¬Æˆøñχç•üëÅÞÜb÷S2âñPCÀ~ôÑl¡fä!9Z„‘‹èqFÚ"Bd:ê#~S¹7úÈŠÈ4{(­öYCWÝÙ‹~£{2ƒakÕ@4B- 1†.Èbˆ("ìÀùEp•±‹Üf=ÿÂo+ÈEc—;€£iÒ1«…ˆnÊ ZXC n‰=ˆ™†)¨¯…-3òóŸtÿ°o c'÷KDmä<Ã4 X†>Lcbx„$Ú@¤a Õ:ÃõÊ 0Ðý­GÊf\G¶22æ~õ‚b˜x(–Áú˜–ªÕ*H*PÁƨBöGéSSÕ•6Ú/}I•bJÈ4BÔè ÝHÄö¸¯ ;  †Rk‡<ô¡_R·˜ <Þœ46Âý˜MnÞÀÒÎ@­1Á d  np‚F ! –4ľü€ÐHˆævúhpQn|c$›g¡4&zÓ«K!Á †A†Ax €€$†0øáx–²™ _AiX~9fÜ7ÿ øñp› ±×¨ ’(i­ „lC†.¼B®ð…‡ (á ¤I/ÖÔ&î°ÉM Dñ'BõðD„>q…@‚¡d@ƒz&ˆ2„€@:' ·ø€fáΑҥÏ9ÉRI))íÔD #Hƒ¥Ðš†´ ‡=Èâ¡í€®/ìhÀc`ñÓólg¨h¤×QG$Bš^àK&2ã YØC6«!0ÂsÀÁ&Q t‚£×ðh›~u¬µ†H©Þ4‘"õñ<ÁVØCQ€7`Bç¸S3–@[à °À9²A'DÓ/ÛéN>æXüÿÐ’'£R†TA™gØæÈ€@ @­Lúx‡& &À@‡ЄhBSšÝ©&DîæÏÉk¤J É,&¡T@ ܹzuŠ$@½}ô‹D@€®'H{Štù l«„ˆ¬ävµúÔ¶>á5ˆ;S (4A½Ð`DŠpjXὺH@ôsÔâøUس©´&—‘”ÉÕÌ{w œñ rfQI”ú¸Êñ€ôIH@ nP ŸN’ÐM€Æ;ðnnìƒ^|6Äø 1F³œ.{97C{ÎbÌQX88Á:*¡ÐÀÿ P d5 XÀÌîOz&±Êdø7Ÿ?¬ ÌRœM“$¸]Ì:j|ŽvÌB :€F/Ô+æŠhˆ€z™m|á °€.a )É/æðÄvЮÉʸë?] GÈ"Z1˜P&±Q(Ùà ¡ÈEЀ4ÀBvQH¡kJèâå°n°j$t-Qr#„!HëcµéòØ GÆ=ªOâÛ;¤Ó Nh Z˜€‘-‰éøD-Ìá  ¢— „t1 JLÁ\ S"ºÁín+InF=`¬Ô¢Qh@C $ay –Á‚a]‚B¦ÿ–(bµ‹]•j†8(.GC+f[Z¸BFdáÔÂu§yÉ}tâqÁ,ïÄÿRÚŠ±Ð˜¹@dG‡/¦ã›~E°Wâ[ßµ¸Ñ'áˆüàñ*—=›î¸‡?ìoR¿ud^™sH xoÀŽ¦Ñ‡gõ»Ž˜@Z¨Aˆ÷'^1 5Á¶˜‚Ž ˆn°ÝŒ âš°l a—Bc "jï›þÒe©CRI0ƒ5 B ù@• º€°×Egf~1 OÐÜABÐS°:J3 –×vjR1øXÌz#’û§Ï'ÿ·º°jM°q€ÀÒ “0m;`Bp¶ 5"7ˆ0|IBTÁ0È…æ†ný‡Ô0}f %ÀOp$ ¾PÍpš0 ãPð-°D04À S„Ià L}p³–$j/O‚A•‘`µ —°#˜1 ºfëpzÏ’zAR/ ^MPº` Dâê%Ô&¼w~@|}wvS#fÿ°(þ”$å þuyt²a!p!˜±¡´P7Öðï`]Ï&ˆ8 Â;Ð@ð@0‹³H•3OúpÙK‹r’|Eµßn˜È#@z¨Ðop¨bf5î2“58eÇ 8ÀòB°{@ÐpE@%ì¶‹ Ã-Ÿ":Õ`‰ÅgOçƒfánQ=⌋Qt®ÐCÊ@z£ô× º€: M-ðHà"±Õ'Ô ,4C6$A;q2ñ‹öŒfÁ.Ö &w[á”QÍXî5”K Q †íX$P Ãr~Eà"ÞøÔX@U=×ÿÓBýqƒÚ4‰•ØP·‘gŒ®P ɸi˜qäe^˜° §ï` é0 Q°j:€…E`ˆ´8‹á8Ž!Á6ˆ8fø”i¸åRABYs9ò›ˆ!fÑW%{¯€ SP£@("uPËÀ#±à ½à ÏV‡çŽ  ÛA‹A@‹ XÏð ýC˜§:xb Cç ’·ŽœWŒ%ç†Ëø}Çuw  "°’\CpNk°_0 %Ðz/è¿ x²àÐ0,‚@¹÷«ö{À‡‹t—¢ÓrA! ˆçͰ|ðØ|ù²b£  Õh.€ l° Ë hÛÿ×PÀÝqk×#'°}-`Y™ gqñÇXpb§‘v ö§M!ñúàÌåaÓÖ­¹ Q h`Ñä  ¯µtk…Í` Õ¸B0¶°›Eà‚p:¬$'z|R7 ÷П ª%!mœ2kЗú îµRà êðWAHðŠÝ!%k ò•|8ÿT*x¢\ ãàÑÉ‘g°`“@¦&˰j° "—Ì¥Kpx­±1²R`p¼Wð »'€`O韙~÷ù \ÐÓ!øà6g¦b'j °aê§@wpLîÿÅ-¨ð/N0.SQ ¶…: ‘‹0(%BŰjd§f9:Ñö줧p8¡€*áq9 ¯0 Z»ÖÕ&@]ÕP ±pš%Ìʼn뀩ð›z’× ;°•ßH5À¥eyÂhOÍÅóí0ˆ0«Rªö) æ •àÉP$x ëÀ\@£à©›¶¬ÿÍÚ %TÀE%H@4Ð>5ÐuºVZƒ.Œ [t:2²*f¥S ½ÀJÌh¢ŽAiõ ðJ ä•Z¨,pgú üúºà¬Æ)Á ËT5ÿ›¤P)3˜B3q2‰Þ1–ÀÑ ER$V¦²Pc a eô( "FMà€ åàRP—À ¦°¯,Û¬ºp~;  Ÿ {cºP6ðe ¡I›µ>°ªÉPÁã ø°8Cù5Æ`§êÊ®€Ö S ëÐ P¯÷ ùŠ©,¶ÿàÉ&Ð@6P Üpkpï§?«±Å’gæ° `Å8Y'‚œ«—°Õ MÐRP1(âL "ಲ۲ºP°ØH°d0Hc †K™ñEB$o²1ƒ*®±”V©«’f±q®°Þ»ùÿx'?*>P,ë` `ۻͺ© MµGð[‘˜æ ‚§ “0_¶úPç;Ôë5ùÔ·uŠ²Ð {wç–O¢ tz 9–¾êë²-  Ðà'¼¿b`Gc³†®á·®w†,Å‘Õ{jØ[“plQÀ“pFưƒP2$`+-K-p Þp%…tGÿâ„ÐÁfQt–P)Õ5"|Cé5˱õ‘ÂnÉÂ. ÃFàɰ¯€4Ì ¹pÐ-` 9ü"ÕR@X"T ½x” ¾r-|‰CAÂ;'|ÀÕ©Â=Ô Œ"Ñd¶ÿЬÆ` -«^|»PÁ*°I{ÿ4#{„åÀ-Ïd)±:€£p €· Â(ÁìÐS´"®w à ëc:?E°?j qðÇÀ Ç éÃëFð{¾(‘–iO üR 8Tšµëq®!" “0 ²`Aêb L%4ÐÿÐÅp •À¯ï@>@‰× Ì•†„Ô`Â÷$€±tçÒ ñõPowÌhÑ ìÀ#ÊH|ô¢JÍ` Û -Ð:Ð@°üÆ@4ëp’§€  [@ ~@#þC¿¼H€ñ¹\ÃÉQ ­ÐlÂsü3“ub½ÀƒÉE;à‰PÊ ªÐ ñÿBΔ ˆPÌ%hÝà ÅpgÀÅÒ+ÎÙtÈÒ’%M/'")bïÀòð:Ð!àÊY,䀈;Ýx‘$½r:³•ÃÂÄqÁø¬ÏH¹ÔÇâÏÍÑÜq –P.p~̰J ­Í à(´râ&~+Í&fϑ̜æ–n§ü}Wå ©¬.¼Â­Û±7Pv}º…T î¥J0x°] •Ò ÚuF(V.qŠÖÖÚHŒŸ<š•YÒ\ xú” ì:£c3q*P$sÊ0ˆàk0#PW¯¹9€HðSG²Û'V,y([E¥¢!ÿâÏ•ðñá#ó•Ž´¾M€áñÑP@YÐÀ* ¢ÐkÚÀAÒ0îb.~±æZÞMÝ ©Èõ)9s]~OÕ°Ü€Ð0}@Kàöd PDUàÅM=ð{b™>`…Q` qtkü\~àSªZÚš3§ÈP¢.^áÅrd N}Îáhäáú° ;‹6л°‡•ŒÙš¹ ÙƒÛ á­g½ª­»›HÀ&!Á,yð§Wñ=ßõ øíÏòšk0 Í`­tp ;ð¥ü¥+Îâ±emë½Èe§Ç; ãÙÑ@…4Ñ=ÝÕÿmbd]ðoP)KHð8·0çæZçá.eº¿”¤A%›ýK°röT,«-ìÝ{ ¦Ðx’FÛ¦SãÍ +[l[ ˆGë ˜þ¿½fnsš½ÙRp’žÐÀñ |vÃ:8»yP²51rÀ 6°s ½€PP ØùërŒ³,nb§J|±%RÀjHp 0)ÙM6†0:Ò±ÏÄÚ1ã@PC\h°3  ‰÷Ž™ìŠ!äÍ7,Ž`:ÐîïáÍO‰1¾bÝæ0 'Àj³ˆ›7‹= âˆ5Ó.ð0àõ1ìtW¤~^7ÿœ›ÍÆ+ y B~ÀfìòÉ@bz ‰¹&û^ èÒ ìä^îHjsÍ@‹XØ ‹Æ~<`ªÍxÀïÔ ö%é¢ Ž ÐL@®€QÒ ÷"Çÿô•Ù?hš•µè€@àJ óŽ Û€€ÞúðöEà\Ý÷ñBoÐÖ%´XÎÐôãþä#Õ“›"°³h€ 0p£` ;“@ãýøû~ LÀ\Ù /ðúS0×E*%Þ˜™Šíôš?Rr‚Þ•2‹ORêe:Eà©«[{ûHPÉȪ µ{ ÀjÅ’XÛàEàÑCë¶Üÿßý¬Ve½0‹E2‹)MÀF;·ÜÑ R•F` à½0eÊ ‚ ÁÙaÿ ÔWÐàÁr.dذ`‚òiV±ˆ"G€iÑÈŽH“*^{­Y5}Í(¦R ä„ 4AƒvMž¾wEŠ„V ÃA:Ô‘èQ‡FõACÒ¬)!&nxìØâFsï&úDˆšU©¶ÑZѰժ5»Vð™iôáMv@IŸWHã®»Ro/ñv+È<ôŠxátrø™(7âä)'¿w*ÒÏ­ûš"ZØ A b°ÁïÔK©ý yçš&¨Ä—\¸á/›zû¬A†£è8 –»&-$ò@¤¹ úøDŠÀN»»sÐÆ…®Ñ¯?¥xK‹Š%ÌKb0ŒÔJ§áË#²\J'h¦!$ †¤—H^h!‚edðKÿ0 Ú/­jò’çhª¹†˜¡†!ˆÈcš‚Þ k#!†£³¿”èlæCBEB—&ZxA‚BõÊ.D}R¹›1f!yÞ)‘¢høPk!ä3¯ѧ(Ò!䩯ýò“'¬"xÔ‡-·3ÔPÔjL´ ý–é™ÄZ« ŠGO"vú†ir­FUfC×ø%—8­Du±KûVֻķÜNÑ=èÖý }—x¯™·Þ‰Øm·¸:ñã7·ëCÂSÃ(*xAp½k(/0oõµ¢] ªÈܰš vØb ñæZŠ@DšŠ{6Úi«å—çf@á*ºíápWW]ÿF²§"ƒ€Æhˆú „^ÅzŽL': 5½È&¹„p0Ëà”iUxj1%-ê “–ãíç˨™fšo>)R<Ÿ¼È'sõq­¸NAŒL‡¹ê:tî©:(WFJ69”r|§—ñ’'螈jr©+g(/ÌílóÐC/'ÑЩvíYhÆZUˆ!ò’¶&òd§!Û‹#¼Ý%oPîÔ}·\zÅ/ûm÷ì¿L[CöQ†Zeð…ïwÔÛÞ5t¡ieä×8µ6g×=í} ™_å*&e"†;ÿí6$3î9ü—ÁrlP%¤ò`‰8T¬uïy ‹^ø.h£Ð]ÕP 8În†Q  jAø…¯~cÃß_¸ç©¦ôï`Ÿ^TâÄÞM|:1¹Ð×8.J¨{q£Q ÂÃ#,°Hd õ<:1ò ˆâËXD¤¬° ,Ḍ§œ×½†!l_ƒÖqÈu<¤‹dd#ùÈFú@½Xd/„àHfR“›t¤0¹H]ø ™L†tÁHOB² ‡¤bõ‚F5R«‰z#öäÈŸ Êð4YtÈ5ÄËD™©>¤C`ÇBîr– 9âQnh£GA£ð^5ˆÿ×Þ-s\ÏL7õ’M3JÏ›6çQÀ‰Gê•<êtÈ9“(À»Á3ž•s'åÉNÕàSˆÊ § ïé»zV1òœçÔêJTŸºlå¸P¤@4™ -è@ÿ©ºñ.£=G=J«†ô£viGKêQ’žT¥ëPéFYÚÒŒ¾¦0•éLíRS› §9 éNyêÓŸòt¥BÕ)Q‹jÔž"U @Í)S•zÓ§:u¦R}ê@¨:Ô¨V•£W=)W»ªU—fU¬`eWEjÖ³’uFhý([ÛªÖ²Ž©n*]Ã*W¸Å®1­ê^»ƒHÀV°ƒ%la {XÄ&V±ˆMªRýºÖÿ¼žæ±íkd¡êØÊZV¯x%êd[êÙËbV³Vål]GKZѦv´ =ªj5ËÚÍ–6¯°E­k-KÛ¥fö´¸ýo{{ÚÜÚÖ´Àå­o}»UÙ6¸¿nP‰›\›÷®sÕíj¡;Õå·º¯½.M³ÛÝÏ~·¹Ê}îx£+^ê‚w»Ã5/Yµ«^ø¦5¾é¥o}ºXüæW¿ûå/akß΢רÆp€ç;࿵¼f¯uÛëÝ#8Á 6ðƒµú^ ¯×¹žðt<Û{˜».©tùJbùî6Ä'V1Šÿëà“·Å1>o„+Lc÷®²6¦ðGŒcÏXÂ.öq b"{ÿÔÄ;rxy¼á&kXÆQÖ1e«,”EdYË[ær—½üe0‡YÌc&s™ÁÒE<5Íj^îš‘êæ7·™Ís>-œ‰jç;/·OÝ3Ÿ—ûg@ZÐHeÅÀŠ`°i¡-H  )õ(+L±TE_ú¦4¥y‡ç]ÀÀ?$]Ž º¥úÀ¨ S †V©> €5ãšXªYqë’BBàè"&Ýk}@ Ʀi©ÿ€u àÒÉ®õ­Ó¼¤Æ.€@àéÓ,‚Ö-@€`[ …žé¹ÍýY{Ü3Úö?ØýHdZ `ë½3ªhoÇzÝÿÝn)+°ÈTÇÞ0­÷½ó-í}ÏÛ.þ¦7Áeíì\¥ùÖ6§/½g«´Þê6u¾×òRœAå@¾³mèEð¦,‡©ËÁ \ @ã'­7¼·ýj–‹›Ø%UùÊ3ްŒ«¦¿.@ŸMÑó‚÷ÙÖMøÎ{ªéAg]ë[çz×½þu°‡]ìc';QýRŽ—]³@Ÿ lµ[–ín‡»ÐýäÛ¶6´ª…÷“²]Ò·Vv  ÛÄ­øÄÛúð(¼GÙ€0^Ùï†w©ÍÍÒsÀ{Ïü:°^yË·] oO6Áßþì¡›Bóün|ãQÒ¹¯~óÙ~ÿ¶ç ž÷h‹úÝ¿=¤UojeÇ<ó-¶Å0€Ä¯Ãðç.¾G˱„™bÍOý²U=uªo:ãÕ'ùÍ~ô§_ýëgûÝÿ~øÇ_þó§ýíüç_ÿûçÿýÿ¬«þ@,@4L@\@l@|@Œ@¨…¯Ê) ¼@ ÌÀ ¤Àã) ü@Ô@L±™ A<ÁÁƒ)lATA³)œA„A%ó@ÌÁ ¬@ÔA|@D. üA"\À ±–*B%DÀ#d±\Â"lB&{B(üA)Œ«!¬B¼B+ëA-ÔA.”,ü ÃТB2œA3l-±4LÃ\ÃØòB7|Cœ2ì:²:¬1;¼Ã=T)1øC@ DADB,DCªË²çÏ C?þè£ÁBñ Nµ"B„YölO"DY&ÏôEX˜1wömÚ•…Vç€OjG¼9FsΣKH\¡@wø±&¯c;vˆÿÑ“"… @~yçûœpà`E_÷èR'ÎIo}¿ÿŽñ÷Î2Ë8ÃX ùàÃ(¤ {ŒñCk¦×–>³X0Itò,³Ã ;ìÀÞÏ‘øuÎAgÍ2Eôð5÷¢àb8¨ÇçY£Ï=ßb'è§{:GMï¬È›‰t1¹Šü]$4AáÌ?ø€Â bˆ1† DÆ7÷ H x˜1 :ë´bA%RRã wØ›>Ë1§‰ý9é”ÄõjÞý€‚òŒñ…y†ŽÎ7"O<ƒ Ip¬@7 vâ¹$5±ÍF ‰}úI ¾•ÍxŒ1zÿ"ÆbD cÄM †H¬° ].cÍ;Î,3ê‘μ&›’:úWª©¦yTZ”¦ISc²ê¬z„ k8Ѩ1 ,í@iæ è FD`¨ì 8ê~òLK-isE§¯>¾ž¡ÒL4H Æ0‚†YpH á°ë.¼ËHi lÑÚ+8¨á!;¾ 4W¿©:'O4…,H4àtˆ Xð j ¡F7©{l²÷^¤ä;›FÛ8grG ƒLQúÌ®ò˜y¦1ÇéÏ7˜8¨>›rz'FGrÚss·¦ jñ(íÓN—è\8߀#Ï=ÝDƒ20!€”ÿ¡EÚO$'ÄYC 5B7wB™³+… _ÛvãŠ\t<ò€³Ç‚rHw Q…|ݤڦ¡M—êJ‹,Ý=ÀLx<Òîz°ævÈsÎ^XÁ!w‘4åŽ8“àØý> +£îzAÕ}&¯šëÑå{2F­2 Ã³†°¬Sˆ…î§Ê’¸ëöëÖŽÝ ¦ï‹êE»¢C8\†š1xV…èF—¶p4È€Àà ‘¶hÀ/p? š¢ŽñÊjà0Æ=P—æ0D!„÷Èñ‰AÑHÁá5„f­È`;1¬ËmG‘Æÿöó¸‹퇧³^€RWˆþ¨P {Ї¬¾@«Ei@Œ@ À†.yQ;]/2DéQGt›Òœ¶,"C7 A*rë"bð/˜á}³º  4%Î9ô äþE­ÿæhgúÈ@†Y! cƒD@ƒ$¢ f€ã ¸µ‡ˆ=GÖpFV ›"Àã?÷;“¨6ka8°“>,Ø¥.|‹^] `G”Á {à\µ‡Yƒ~°‘ !ÿÓ¼hn¹µ‹”)Vh¨BÕ`/xA ­(ÉÂà¥:dàT…iv$kÄÆIêµiÿ*lÓ_>kFþ DP¡K0gÊœGøA ^€ 0ÌG¸¢-;¨ØEb3¢dÈTüô“?¹Y²#y‡Ð0è«¢q†+ܰHg;œQ*@€ xðÀ€WdôN°éè2>ê§:i¤þ‚–ªd‰Cx! À ‚ð0Kj¼ˆj€„ ”Äš¨ç=ó¹¤}’pm× ÔÁa‡Ì` 0§ ê°†JÀRZ(P‹Œ€@G6(°„U(š³*ÈŒÊ$G6O@…~šÁhðÀ n³ ‘ñ P@` ¤ã PÂ*UÉJÙ¼#WûàþÃXÿ9V±x„P'ĆÀ½Á'€ìB9ÌÑÇ+"  ´›Øk)’Å©B #ÚÎh{VǺ3‘h‚€ë D(ADÆŠ‹ àH@H˜9Ç,Zá\P`8yR,×ê‡F„ìL¦ÜOmIä:ºx&x„9ˆ 4ÁH@–î ¸€h€*PÌØÅ PÂ%ì²ìÀ1 ÞÁ.êbaÔEyŒg Ò#稀+.”`‘8B b°…Á/ˆ™,°cã 80ä1¨KH îbF¬ž´º»DÓ¬#ÁèhG,žpgì¸ -LP†X ÿCÐÇ6¸À…EX@“Ä“•“‚‡\:íÿ~s+à€u$RÙÌžÅ$,þEPÛÚØŽV±èrs3©X`[FÉÓZ²ý C Hz. =¸J™x´š„½Æ¬ 5Èú6ÑŠXI; v@„?t£çØdÏä±)®°1Eÿi‡›X!$} Â…cD, PàÒ@ I(vQ H<º5BVÜü ñ¶Ï;^ ´“‘~ƺí¿}S1Ô¡Õ¨Ãú°4Á;Èq‘vÄ »¸AJ°‚ì ­+èîfÙMyaÞòIÖž4O-?Œ¡‘†„v €HèEë¼bX,¯ë Á™p p žØ[»uô­á8„J_H'ëp5 Å  5P òIÑ•øÂûÁ J׬ <†“QǺJÈ@ ¾úªÀ$ Ķ·JhÀ C´K‰Èú nï¹O5 Qb¸ lñ¨`k*°ð aC Ôÿ@ &Å"BP{1à« È`\Í’ ¡•à_TÒ0‘·"×qDz Ç•N1)†­°î@‰yº/D Ä ­ÎÉPp ” ¯ú¥` pX {!ØAAw¬_îbËm í ¾ËÔ2Fûµ þú8@ª¨7ð”üÄÀš úP‚ZWÖ ß0 w2ƒ>S?›’Xh'Óüê8Èû‚Í¢Íüõ‚†à„Ê —<*šì|…àì|Ó'›r8Óä¡®Òʯ<‘üL-³¼ µ,¶ãI ’04°pÐ ÐG«ÂLÌ  4B¥ÿ¢$A;?ßXÅ€œ!9ÙÑûÆ­S› ÆÊ¢)˜Ý<…»%ÊÐ0â Ä¥Gu€Zp r² ¯™üU,½!‡ªÖÕrÅY¼€û‘ÈÊò–˜ ·°<ýá¦Öp17úšÐ„IÒÎP{€!O¥—h`5P5"j=*S„ÒŽñùÓUF ‘pÉ¡!É5‹Š Ò«6~`|ð ãc‰ u€O ‘ÆGkHò.Îb,²ç€W%™ÿáÏËXá&B2-ÃZó"MÔÀ×z­zH°ö`aÀ™áQº=*ª¤Ž·w¼"è’Ï.ÿŒÖѡۼ}ÆaÛÀMÏÑÄ"Ê¢#Æ=*d ÀÜ¢Ýæ ÝÎ\?ɬ~8‘ GèÄ5 -=ÙO&¨žj˰IT«b|pwb@Ú¦ÚŸ°ÚM«f€Á° šÖ€,€OÖp%àÝç©iXÔP¹ÁQw³8ž§{ÃÔQã=^‚M؆­_‰¼ZÁ€l 'ÈEÀ5€}•EºyÎÒ¢¿Û>ØÔ!-B#ÀH°oô3*‹+Ÿ­x ¤àufFÖ†£ÞËð sX/K Y§ëð5‹ÜŠâÑqá'gÑ=ÐÍTþð¸ :‘g5Œ“vi¹Èâ.ÿðº0hú° 5БšQPŽ'n¤Ò1ÝwMOðV% p²_Ô@4ƒ08¨1BJÌÕýJ•BP/1€‚É ¸`˨uï0àá}ßéKK¡¢p²ê£n/ñ`}° Ëd¾Çgïp±Pæ‡EÀv~¨oÀŠE`1ÍòJºîvŽÛ 8`Ò‹Iå)|¬Üa´y0Ï0?ø¤Œˆ` ¢Å@•Ò­ˆ,²QÅßMç»þ w¾ H‚+¬{˜ç4kº vPyLË`,’,¸  JÀ éÐ"²Q¬#_íÍñíu~ž‰†ã9’€¸}=ÀGÿ`ÒŠp °Ñœm¬ú òB0Z«'íõ~ÎЪÖ"(ÌðsŽé$Ô'Œ~8}ð-@¡@ 8ÐÊ¢Ù;Ïﵡ• žÀb±Á7ŠŠc2K~Vƒ¬Ùrâ‡+"Àe8B0¦qXÆÊ DïÄŠ ³x h£bOÆ:ÜU|°1Ûø1h*¶ ~"~ˆ•? ˆ@mʘ°6»ðMf°Š° († ïg±‘ žacw÷N¯ÙórŠDPù{ˆeÆ2¶xb¬§@Õ%pgp KÖiïïÛ~òo÷§Jêí$pÒSÈxNpr*D0Òÿ¨È¨Šmœâ ß ¹Q¬8à wÕÂK¿yL¢ˆ$/iV¸‹©‡=° \3A>xP’+—\ñZæLžk7—±Sh©=œž°(b«Vß]ƒS¶æ7·Øç7£ 9kdÄŠ‡Šõ½3-äç ì j@ýôq4g¢ Ä€ðc—FXX!‚Æ:‚ì·õFúK;j&“Çg¨±&’A ŒÆ"þ@ð‡Ÿì!·±d\œA`,%V`A‚ ÑÓà Aʩ֖!$yÞi-´gò@!ˆj œç¬Aí4¢BÃ¥‡ä¹K¿ø¢F¾„ÈAÂÌËê±}†T¯HþJj¿evéhÃ>zBƒÀ œ@¢I’ÿ¹Lmµ“ú²è®"ø‹ñ¶et £8¹ i2:õ±“Å<9:ò/0 DPk5Ô´>ý Š(ÅI?H[„‡Ð,åMŸ2lÎN/:ÒÉ›–¼è¦;ùZ&Ê)« ä4CC­gˆ êË0Ç,³¯h—ñ¢pSHMI vOí–éð"{nº¨Ú‡€HA@ ÝÏ´ítQFÕ°R[Ù¢¡Š,LoÓs;jOD½8:*)›¨-Hšh¢TuCD0;ÿN»ÓS”ôãOÆn€.6as/J’Ѳ4J]O zgÌB’ÇÚIe„YÚe˜¿z3ÌÌyX$k@»i&!ì èÿ–…ŽIàÄtÆš²ÆªI¯¥Cj:(£žúભ¾ˆÓ„‰»9g&7Þ¬Ò³åZmð.l3Ð"5É5aùê²ë”}%Ro¶Ï…Gp?ûm.×{›ûzjÃWÆ;ñ`ç¶ÐÄ‚k¬!‚L™*Ð`»Ó¾\ïÎõ2cýšíXºSFûj½Æ»us^ߌFÙ[Í"wë.wÄõÖœó?©ù<ôÑϼɚ™O'÷×»+ÛÐzÕY^\_Ç%g±¿"&/¹8<¶º$ÿZD„H -Ð ”¦H¹›ÎsÌu!SãzÑ–è†\{víqçWvÜä7DÚèƒHy ‘ …¸À7ûèCÎ"Œ„r:)gcÚDC<FS8ÔMÿÕsÍJPSHD°h¤á‚FœAŽ>‹"¤ld²Ž;²\ É_ÚPs›Aj¸O4H8yÝ)6& ‹ÑãǹÁ õ¤QF .ˆ™F9ä¢H=ô$âF'Ë]Kvß­eâ”{jƒKD£dXf¹Ø–ØE„M ~¤‘†€‚FhaD iЃÍ!ïícÎ!sÄ‹-û¤ƒŸmòP#è>!R£Í€–ÿH!d…ÚZG uwS6‹¨‘†"‹N Ȱšƒ ¨ÔO›Ø`÷5©E•Z·Ïwƒ>VO­¶Š…PNF9Ä­§B Ù`“M"‡0#‰l|!†!‡˜ã¬ˆÑFó7°ÎŠ­cåéG6Ýú%_ éºX=Ø,2Þ!Ø”3Î!ˆTrA1~Àáã°x*7©®êP‰òä9ëbå¹H‡\°·IA®AãÞTOå2s,ûÐCN'” x­ž{FâZÙ2Æî{àIÏË[Ùt‘‹™CN9õè36 Û$å(bÈ`<(UM>é7q¼˜>‡,Bó¦¾|0E í—>ìªÿLO=å"4rFn¬áÆ"RÒ uDN—9Ôƒ»·1êšMO6‡ Èz~ð˜õ¨Ó\DÐHj¸ìøÈmkW×äìÓæ"ØøñãÍä–C7³,d9‚c’F¥8°pC¹ bµ¸³r‹ëÐÑj%ýئå6Ëù!}$Ò¸ÝgýnЦz˜3qiOé"ãàFnà Ã$~”±ÈÓØÀÞÙHf2ÈÜŽxAz=ÊÁ }ðî5êÛÇ"ƒ(ÂxjÀÆòÔƒ”!”€ÃXÀ3PJ CC³´Ç*þä_ßã”AR¶ÂR=‚¸2ÈÿsA4b’*¥ÿÎÔ H‚,0ƒpÄD@Ô͆-ì C·îîu¼CÔ>Ø'1s=jŒPƒ}µœÀ7¨Øp½I p€j)™ZÜÆ˜L†X|\GXó—••‹ Rƒ&e†3¤á &0Rðˆ5°Á\‰ðU ì%®ªPC?úÔ<">!ÕŠYüHCn¢Ìe€LC”H†Ä%  ÄÈAÂQød3ô+@Å12³ÃFíÎJQæ…ZD¤Ü°…% d dQ‹X„á 9Úš …SD$""ÑŸFT¢ó¨f¶e_Çi¡ûp„ptˆhža uª!Ð@ÿ†T ¯¬Ä,ä}äOýQU²„NC©ó˜Ž Qn”p y> mèBüP jƒ{ÐBÄà‡ Ë™EA¥«„ºÐP ÍÒïÖY*YF›hÎ` -pÁŸÔF"àˆDØaN @5/ð‰prcœ$Š’­bš"\’E!BN9Š“ƒ,p š*ØC4Q‹uü%N¨À.vp‚ \`ߨ@ö“Ÿjýrª7ÜãU±ãŒ*´‚CÓÐ: „ =°Ø†^È (à 0ÀØQ@A?—Ĥ&#â3r˜-2T b‹J(€¨ÂŸtÀÚ" èA0œ“ xÿ„À YP¤UªZ‹mã6•«c ÍëŠå\b P`-5$(!Yˆ­/œ3íc9êÈ…,v«€ Ô";Tz) S¶ˆt ‰’ ­v*7“R¥ã¾÷µ…*‘eøBSH@£>t 4Ð` Üw9ø½À À üÁAPÆ}•„`ÜW}@Æ}‘Ñ=à÷Ä(N±ŠWÌâÿ”Ä/ê°À, 2¤À—h n†4A5°Ø.0ãYìLΩÄ›Ü8p‹õ²â'#ßëèuîØï:àa‹*ô€Á`í;¬A Ïö1ˆ!ÿ˜@&0Q…h4ê…|¨¤µ)SÄ!†_åz ¢ûÐD.P pæ'Z E/ °†- ιÀ¦ü±F,Ú¾àF:.0ìy IR¹‘Òª[$’GãfŠètˆ·²€HÉä¤qx¢ kè|IÄxsˆ%r¡ŽX\`ðÈ„%‚à SX Ä5ˆ…04W¿:Kõhr46y”¯PÍ/)óÃÖ@J\€ØÆÀ£&"PŒùÔG9uFÎ,!2¼f©UM’êCgÊÅhª ZHH-`€\Tqª ·½ÄTþ4—ßI 7[ÌIeCIu -w®ôæ˜w§Y ÿp€;ì˜ìeç"õYG% Amkc{V§ÒÇÏ}SmÏ…V¥)U×1½òÙ" O0š SxBZ-6…X= …-B„„ è APB!ƱsbHUrÉÓ‰®\ëÈÀ#I±ðî>±Á4$ÂVØku4ÇÁØ…%‚ a0`í Šp„¸yûÜQÙ_H´Y¶àÚÙFö°mì! ƒÂ¦@ ü@“0<,V‹`ô` )€ ‚P bSSæÒY‰6yª¨ÊJ_‘ŠîSDˆ4là ÙhOp‰}øb }‡È:ˆÌ§JH:B``¸A d'yÿˆ²5þª.™*þñ÷¡ù",ß ¾Ø3œ`éÏX-•(µtSèbìQ.‹ðx rC-¢u~yô·–kÉ·Ùàyi KpO :` U )À ¶àzS02>p6pÀ Aj0æI€ „†%!2+â=Ûq~¹0 ™ta ‹vî@wŽbwø2ÀZPp¾  =AÀZU`jE€x²7·tŠÐ3ì‘B2LXr*Ô\½Çˆ’iÀáË‘ ñp ;Ã~„@ë'˜jQ¸UP œ€{C C0ˆƒx\“Kû ŸÃ)Br"…ÿ’'wå±6k+Bq· Îæƒ‹¡3f~Ðb*;€aË@ ;ð¹!EpxC@Ô H ½¶ˆÍREµRqQ†‘§ä¶%F&¶F}1}±°Üà 4‹ñ{Áà ;И2°åÑK4’ ~¢/)£<Øã@ìò4¨' µ­² G³v+bd’œèñ`1–@N T€ƒ¡*P8£P-²‡åኯ˜ OeP›Ó9ô#hJbH†ñq!·%–˜ ˜˜f!s§ešð Ùæò  íP T°g=P‚HP…„8ˆ±8‹Q‚æ7XTƒqƒŒás‘U8ÿdh¨†7Õ²  Vp¦À!ßQx€ϰ¹@  ÒjéPu œ+„H„ˆ}H0 Ó La5XƒLø,‹±µvi'p:ȃš¨zŠUt  #àÖ"FÐJnàbP ' wû(ÀuµÔP-…p…'{¶xŒ‡ˆŒAƒ«¢‹ýæÊq“`u’m—7.FFMäe œPж1,ðÏð m°<`zP0?(â¦sô‘¦ºq’|€G$—skaNÑÆê  Sðe'Ó™‹±û`dŽ^¥(y kú PûyÔÐÑ  ¥+Eÿ`ºp˜H…;fǧ€}Kp nÀ õp’0‚4föçðA²µ3Ÿ7ñ™³š•PuVÏàmð ó–Ž¥NPu}¶0Z׆x8@ÓpxE0Ãu2U¶«'œ²ðp7Ãá²sqÖ °¢Q  ¶¥Ž[_ €2 S¤r¹° &ØU0 €ÈRt î0E¡¥‹N2jË!Km  ëð)‰`¤?i ²P àVŒÚ@(`YÚДsyLàX’¯x8`¢4¹€‹‰jÑÕäd^ABÂ7¡Œœµ Ir jÑ ÜàŽU` aj‘û€  ÁpTp‚ù±7p@t€@Б1õ1!3(³Bzà—à‹ El t´‰qŸàB²ðª–`Znµ Sò Ä( ðð¾|V%!Å*Qõjª7a–P¢/ËÁ.Œ0làä@_0qbÁ…Pèa-V ûaaé€ ”P^Q`«AP ÷U ðЮ¾ {>à ÷U ÅÚ_¾€9Ðb*Ö faAà¦Íÿ€ˆ³xàbÂG2Ê0GŽñ£©ºªN VÐ î Ÿ@«¶: ¸j  ²#ûAÀ•#B 7É zàz0|59GϺœGæ ’p ¶µ%8é•É­u’ î  UPPÙòQð#0A R;µ¾p€(Kàg DfP>uCUò…O¸'àåüðb7éBl‹~á? б°¢»ÇøAp·Ð  ;µºðúMB4»h†¡“uœP ¶µxJMfe842qô³)µÐÐEç·â ;J ¡§­+¸0à ÔP#ƒD»e “„ÿ¶B«ªÄ¸2ƒ¹™kgm•€i‘¼•¹Ê@y›é ºP½‚« äÀ LäCÂB>ƒVŒ€ M¢ Óç[ªÈ¨ Úš%íë·ð+¿”—&â逿S« ÛÀ ”²< Ræ“ Èë` =°)¿Ž¡€˜wÉ»¼µÐ¼3 Ðûûa #;µ ÚK»bTï‘UdINr"îÐ;` Ëð ;° +|¹zÅsÚ G×±À6ÚÀ6w†I¨Æ÷;²ê ¦€`Ap¸&4»jàˆárz-[u²e†9Äþ@ÅÚQ •P µÀ=‚¢ UWHÿ/À®ÿ  ’0µ"  ºà ÍàX ðdÐD핎W Ý©q  ³EMÒ¢%W™PC@j¡ ÎJ ˆ×1À® +áXªÀ Ð^  ÉÓÿCÇR$yb‹v+œ>ArÝ‚“C ú*~xÁ &À‘õß – AˆàXP6ä R"“ȸ*y²™½Çv ¶¶Íß!Í"CÍ>ð= %`ËÿÐ îðÍÍ·„@΂f/X’'qqW~+q×ÂYÂÊÑàÊÉü'Îp #0འÐбZ»Ü ïã@…R"@ÛBä¸ÌFq¹€ÿìZ<+>)  pg‚‚'D+>'p/à ¢Ô Ä[ Ð$°n¬Ð$Á@né›-§r"vˆjX}+wQÓ ¢'Úð£Ëa ½°ÅPĦÜÀ/8ZNÜ=РРԋn@$°S{é<°KPPýaȃò/GèKåxh ¬©aÑ—pd´Õ»¹Ø=°¢ƒÐuµ1„{ Ö°<\ðǰ,P¥àhÞ¹£¢È*•]"î Á||„~AÏÑàV‘$ÞU+ÿ’YÔ(ƒ  w=ÐgàQ|p’pé P¶=(—‹·Rz#H˜Ð»vê¶ÿÛadÁËÛìÜKù!(2܃¢g ÉýyÍýÜüÝûð Å:ˆ9¿„J¼¥ Û{EÛ6]´ÑðØ²€dº€¯,›å¸(| t‡¡=Ú¥M ¨mѱÊnp Ñ`©wÀ > äÔ)Ð9)ÖZ-Ú0¹‹&w¹hž>¤rÓT¡Lýk}ý×ýR܃YÇàrÐ$ÄzK ;àk 'îÌñ**î»?Ù…‚ ª' N°od]!‡)› ~` ©°u`öÕlsÞÑPð¢Kà²Ú`uâU°ß°äò<àüñdçæ'Cà¬uUP °£ôàx=7òÿ\6 2Ô@4PÀn`û ;0—0šW Žè‹¯c}Ìœ›G½TUÀgK °$C£ )“i$dIWívxxH€òp)X¬6à TW×ÝÝô­ÊQ-p=(¨®êØBœ=ÑpKŒ0-j!Øê` )Àgƒ¸Š>ˆ@P²¸ûâ*X=ìŒá÷Áê' Œiå'<¬·ÁñÖÐB#òŒŽpÀ¢Ë€•"2³˜*€"Ó‹MÑľåë%„X‚0P¬€Øç:ði |°PKÑù¡*¾ Pð ì° €¬-ïí¨Üéÿþ4î…bž'YˆÚ71Ðï Í+ƒ0•½,…zÛþïê˨¶ „ˆÒ ð³ÍØP†T¬ƒ˜ƒP3 ¦  >0•ð'‚Rô,¿ OàXß0 2°öVð'·£®ˆ€|,óVÿ2…RÙM2ˆ‚¬Å6H¦A ¬ue"‡·Jœ¨­ }§|6(OeøY¿Ìc_0›ùš¯b|ÖaÁ0ˆP8ˆ\YPàÔöŒ[³ U0cV` Á a´á~øõ'ßÀbNp=Š"¦Kù'i]¢ˆ>0 J†*Êœ^¬ðÔ)gÀ cø$ÔŒŒžð1¿ð¿%ÿqIç( €({‰GêP뀢‰ åàŠˆê§Ø¶Ô@Ø ­ø'>0 eu÷ÚCèò 8BÁ 1|ø€1$Ø>yK9èŸ!‡Àà4KX4jõêQSÂçâ‘"H|L¹ÐRÝ>˜1÷ý£Y³¦Ì˜épîäÙs§Î˜Ú– fðR'œ@[2$Z½hѸ%:¢dÚ¸"C–h ’Qµhò`n+"¨\¹E|zX’¥®Ö…Lðvڤ˨O¼yïî‹Z¦ì¢ ñqÂWÓ° ÷-Z ‹¶ŒÛö¥C2D›6©0§¹¶j‘>´Á”uá%Nº6íæeísoß¿£!‘ÿ¡#ÈÀÄÔ/’ØTk=Ê–åE½¬¤ˆähEˆÜ€„Û¾Ò§e¦¾ù³õuœ{1S“Ç Š‚KÂ|ÄÐAT©TSÊŠ$Z×!b¹E¶„Ï"²D…ª"cÉÛ¸æ¢îŸÕ°Ë‹›ËžÛ ½¨®p0&Ji4ˆ$B"+ŠøÐ(# ÷¡f j°9„"Œ $˜Id€AÓxú‡ê 4°'ÌèÓf/ϸ¡Fn~á p0â>°)¢4*"« ŸãkÃhÊIdÉ%|&h‘'S“qFœæ k¸h”Ù©y†sÏš?X8b›E)=n|CÂÎh|¢ˆz Câ²Ê´©§2$~P1ÿå’É™b´Ì0 ¢h’©ÆA†@¢p®œC°!S*ïÌh àmŠBÈ–ˆˆÉæ¢n˘ðKHa’ôÈJe³=9=ÄSn@U¢L5ÝŠÃÉTµLW­TÉ÷f•&[Í.×0£J3*3cò¦Ê¢aÓM8!gP÷|[‚šSµÑ“O?µŒÝhFA‡+åR[™pä¶FâîÊ'ª˜àMɈ9$Ô ÛÕ(É&aL#Y¥-L‡\rñÖG¹õ5ÁÉdK,¨Þ)l°)‡×h´ÙÄù.¼sÒ}„ÚêHß4ê¡–uzÀEþ’L}¢ó«˜sIž``㩞ÿS?Ô ¯¡q5:`œî°'¤aƒ-“{â·ú4Íǧ¬‹Þšë3¯ë“šó,~j²²y:{«™‘X»'º¬Ëí·aØèí –úLšg“k€s*œp£¡"ÈÕ ˆ‹éì‰ýê)[/)ûp‘ç©,#ç,&¨Úˆqóœ'Ðßvr¸'wœ_ê %¸áF‰?—ëëCŸvÑ×}2‰j¦ðìÜÄ}\èFe¯yÒ¹]>ægsúát³/ªWMô­³ÏõöÜ7Õ†wß4*n˜&^@ã¯o­Æû/Üô‰9i6yœ´–p·Ï™ï|þcÍqƒõAÊrÁœ®4Ç3 "v ¬ÿñò¾ÞýîO®A^⢦Aœ¯iËŸä®ã=˜@„´[Þv>éaîà! — QˆC$b:‚P„`1EBøD(1M¢/‚Ð '6#¾â¡“È%ï: Œß{A0™pq)¤ŸýXØB1¾puÓÓZåè„°à%l(ÄKf þéy9¢F0æÁš¹ÕíÖsá ÑÈ­G¨m,\$!eÉëLR“ÃäŒ:ÉM6{ƒåÛBÇQ’ò“;å*SIÊO楕±l -k‰¼YªÒ–¬ÙeñüØË— £äèTéJSs“•<&0Q£ÌRr²™Ã #2¥ÿ©KjM5Úä&79ØMpÒä›á$gÖÊYÎqžóVêdç€ÜÑÎn¾žÜ”ç<áYO{¦Ÿù¤Ë>ùINþ3 ý';šÏƒ"´ êLè<êÐ…žó¡íœ(E#ZΊ2ô¢5ÉèE;ŠÑÒä£ i8KjÒ‚ó¤ñLéJºQ—Ò¦=¤iMmzSœæT§;åiO}ªS”´¥)e©PCSˆU©DuçQ‡ÊÔ¡!µ©N…êT=úԪꓪKÍ*G·zÕ®ö󫕪E¹JÒ°Šõ¬-«AÇŠÖ´zu­«HßÊÖºÚu®ül«F÷úÒºöÕ&‚l^ÿAX½þ•©ˆ=,VãÊXÿÆ66¯ulZ){׬^V±DÕ,X‹Y¾¶³d-hûXÓÚ3²EõlkÙúSØÆV¶³¥íMƒêZ¸~v³÷,ínͪ[Üâu²©M*pIKÜÊ ×·Ë•hr»:ÚÜ¢–¹ÍîtAZÝàÒÕ¸Ñ=îv•›ÝªB÷»–Eîo¥ ÞӒ׺í-zUÛÞ³åu+vã{ß°ŠW»çÅïxóK_¿zw¿ýÍ,€©+àИ»þep>ñ`GX¦p…-|a gXîp8҃ذ!¾(‰KlôÜç=šÊ©iDš¹<4 €;ýÛsÓšþÇ™i€Icúáþ‡$žL“Œ”ÕÚò©ÍL:ÏÎ@ü²©K=O¬:Ï­~u©SM—Yc:Òg&4"ÝNWëYÊMv¡ÛìFÓ$ÈØ.4;YmešxÙÕŽæq#âxbÀ¬¾„@ì+@ö? ¬@|À Ô@l?îûÀûAþ#Á´§2HA\AlA|AŒALÁ{0À|šAÌAÌÁ¼@~ÚA B ìÁÛºA!mj+5TC6Œª&|Ã2ŒC«šB:ôB;¤7ÌÃ/ÜC­C?ÔÃ3l§A$DÄÃC|B@T«\Ä*lÄÂú§€!ù,˜b-E‡ 000QQQoooMx¨jxš}nŽx{‰xw˜g|¤u} Y­_…°~ƒŒ{ƒ“i†«fгm¶y‡¨sްz—¹>>UYŸ^`€biŠu~›cnš~l˜{y¤YY¹RS®\c¬|\ºM¹{X¬im©ky§yf¯yxºeh¶hu´|k»r{Ü|6ìz/éy8ñ~&ð}2Á^^Û[[Ò]aÎd^Í}FÉzVÚiLÛgV×vKÖxUÇdiÅktÆvgÊsx×dgÕlpÜviØxyæ^MãWVçfIädXêxIèwVäfeåopåsiäxx†n‹‡v‡…{˜–m…—v‹™}”£l€©w‰¥}‘µz†É|„å€y˜…x¾‚I¶‚Y«‡g¯Œ­‘xµŒh²Œrµ‘r݃.׃:ô…ç„(ç‡6óˆ'ñˆ5ò‘;É…FȉSÌ‘XÓˆFØŽRÛ‘NÚ”XÍ’eÆwÔ†gÙvÕ“i×–xΤ}ߣiئvë‰Gë‡Wç–Jé™Vð‹Cñ–HðœVèƒiä‚{ê™fè•xî \ð [è¢fí©uî±|ð¦gð«p‡‡‡‡…•˜ˆ†›…›œ’Œ–••ˆŠ¦ˆ–©‚š¹—Š¢š–ª››²ˆ ¼›§º§……¦†™¢“‡¡š˜º€Œºˆ”¹˜„ªŽ ©˜¦¬ž°¶š¨½£Ž¸¦–§§§©¨·§²¾¹§¦¶«¸´°®¶¶¶€žÁˆ¢À˜­Å±Ç£­Â©¹Ì³»Ê±¿Ð·ÀÊ»ÇÔÈ„ˆÇ‹“Êœ‚È–šØ††ÚÛ–ŒÔ––Ù¤ÞŸ¡È¤Å­™×¬„Ó©‘Õ²Ó³–Ω©É¬µÊº«É³¶Ø£¤Ø½§Û¹ºä„ƒå旉噙ðŸŸê¤†ä œí·ˆë»•÷¾—奥蹤巷ô¸©ñ»»Æ¼Ã˸ÙÀ¨ØÄ¶ëÁ÷Á—êÆ§é̵éмöÍ©ñÁ¼ÇÆÇÃÌ×ÊÑÚÛÃÅÕÎÓÛÛÜÀÐàÜÞáÝàâåÄÅäÏÐç×ÈåÚÙóÂÁýÛÁñÔÔåßàåáÜåääïïðïó÷õççþþþÿÿ ¸¯à?wîHpá?ƒ #,ˆÐaÄ„!JÜ(ÐÇ #z I’ãÈ’(žL‰r%K’._†Œ)ó¢Cî*j„h/[¶z-?î´´&L£G‘ÎT ’&ÓŽO?:e™³ªÕ«î˜ÑYòÌYNvÏ–, ²Ä+VwëlÙZw¶­Û·pãÊK·®Ý»xóêÝË÷ªD~ü2:ôg½Ãþøá³×­±½{û½›ü®Ñ¿¿¼jg‘Ÿ%Ne:ZiiÓ¡'*Üç¯:}÷Îqãv¶q¸¹uó1Þ-uÕݽq7 ›Sú£È" PÜ>êÌ×_6ÏH#Ï6Ï1žù e∛nš?ØctÚ¤ôôqÄEÑÂõ A† /ŠF9ä’H=ô Ò'TúJvòĨéŒiî“ Hp• Ž6 œŸåÙÔ âù‘ YÿHh ‘ƆœAÆFáôXc{û˜cˆ¯¼B v÷=³<Ò<3*‹Òd³D¨0:{c©¦ö‡jgªJÅ*ã>kBà¥F"²êúÇ»·šcͦÌO£Ö왩4 ŸO³ .±_¦£X·ÝÖ÷mTášTvv®BÆf™Þ×Xs "†(IkxF!†˜£o‹ý>#æ6×~¸Á–ƒe×$, v>œªÎ;3åÐÄ Õc"ˆ`iM9âr% ÓÇm¼!NÍ>mÁe+O¦ÚòWN–ŠðaHÍ6+ŒsI -Å3Ãk³MZC{ÒX–YvL,ûÐC'“ÿÉõ¦«±¨)ÖõqÌÞ7XÒSöu 7¸Úªm¿ÝjäEM19åÔ£8Ö ]‡‘”“H!j|¡xÜÿ’if}Ûøä2ú¢ˆÂ»xŽÕA¤ÑF óN9R½‹f.Ü ! "Ç`ÓSO9€r#Œ˜ÁGj´¡È™þÝ~]âØq¯=DÓí¾;h¿?7ùùæ*¤1ŸNÏ5†¼ z}L‰Æõ¨ÃÅ[8Ài [öÒºl¼îFåè9öÑ(EX£†È×÷À—ñqf9#—7è3û„­nå`Þž„@ ¼ÂA nP…[¢ _˜…;q†Ù/!‚‹á$¬ºå ~†à"ÿ°÷½Æm„qâ*u”¸D‰ÅÊy0GÒ°„†îJâx¸Ðè@} ƒ"g¢Nk\; B,±‡åP†>&ˆ»Í¤-‰èƒXõ8¤„(Bß(H"F˜k ð<Öp 1‰7˜¡k(îÒ¿3Hp€,ÚÏˤE£Úäk—4Þ팈&È”§tbAþøŸAžûÈvu(@ -hAÊð¤^þÁvoò”~ ³yr ¼!)¸ÇžqЙÏDŠB„•¤"=iÇ"Ò0Ku±à(ðÁ j0†5ÐPWfæ³&«Y_ûöQÆ'‰ »õà LB cD Q+@|tš KÀÖ‰@Öh™Ì<éS‚§TReŸ¨‘"pÕ-ðò [þ‹Y¼ f€’6Є,”B!¿hÑ‹@å¢lÑT¢\\=Í×L·)Ur}ôa]…‡4ôÿ„¡"(À*‹ÉžéZ—¦Í6k³ÎÊ„©Mý,^ïÊekƒ8‚4Áˆ1˜YØB>š :8 ˆ¨Ãœ¯RÀjÝ[_Ô©á"õ&¡UPIGjÒî)“ÈÜCr€… huz€C&f±1=à ÈÅP  ¬ÃˆB~„*¢–¸ 3n*•[JæÚS•ÅcFVœhJÈDPƒ0ÍDÄÜð„€ì¨  –‹bT£ Ñ9N·­÷jø©ñ­S}—,ÍÕЂPÀª*X¹¢8Àzð ÷`‘ÅÜøFE´4Åή1°ÿn†˜Z‘‘zdÑ&Ym¦kúJYb P°²4$(áXØ2/ÜUJ8°(3$0‹ì¬I¸Åüš"2–¥‰Ãݪ³|ç«OwxþI‡ªÓA‹ P"Èà…¦Ž`I|àÀh ƒ ,€Pu¥VM@a«‚‚€ U##¿Puø` UƒyXµ¶·Íín{ûÛª¦H_ÆMîr›ûÜèΉj¢Ž Ä¢ óØ Üa‰&Ìà`8@VP¦A€ïŽÅÝÔáJ´sk^g "¬‰&“F 6•¨K‚\ šZϤ6ÊjÜáêuÀƒUè4~ae̘+ÿPÃÞS©}€# a€ €‰KTá“}†:>á„ kB„òaˆBÜÈ"-õÅ=›q»î9!™0ìaÓ–dA»€‚´@€¸‡ÂêÃÓ!õJðbé ÀtÐó%`íJpFÄ^¶ɃˆW2“¾w¾+ÅA·€%`­ÉKâèÔÀ…üš‘]åà€IüæH<0Q‰ ð‚•°‚›C4"qÌîݪGŸ±Ñ¤6´K?î=í;Ïë|­jPà &AÇCžûÈ„†Ÿù¤èæû¡@%8¹¸ˆ_‡ZdjoÞñœgÙÇÞúy­ýu‚Å…,äd Àÿ-މŠá¿KçÕOŸ—5ÕÇHoíóWÓ^̺¾ï°¯þ†õË]§÷ï ÀîO”gy·€ ó±”ðžz¢ç2ÍTñWógþRø_×·øwj¯gGQÕë p‚ ,õµòpXT0O€`L3;pƒAð °@ ,‚A€ VJ@âP#'WS\s&Ó9hgü‡dÙ7@_ò '²ˆpHh€´`;`e:0 ³@ ¿ •pX*°H01`e7PG ;§gA³fð ÓNuô„P‚ˆŽs„n¢ h Ú  z€‚ÿ$0Ò?€’PðÀ4³ð =0*1ú‚ ,u.8ýá~mò‡Qˆ8ˆ¯XˆÚç&ƒ€ÚP× A€–°¼°dˆëphò ” 1*GP1`±AÖP„çÂ"c–t~G_J'ˆ²H{Th*·˜‹û€ˆEЋNÀ =NPÅøn1B kçR:€ ûu£wRö·IüjÚ˜³¨wÝè(áüxƒç»¨×ÀˆhK€O :p õ *° ´À‰S02>p6p¾`HÙdõ‰`t Å".#;„#MÿˆGI}±ø—· ˜ ‚B RGî°…µÒ…÷2`eP€¼€ =A`eUÀvE‡ 8uÈ‚‰7éþD…Í" kf„§2Ë…Øç–oi__70 â•r ñP wSŽƒ0ä(=vvW¹U@ ›€=C Cð˜yãSûó3,Y2#¥Ò‡™Õv‡wl ‚=Ét£Iš?)X˜ ˜G”õ‘"ïVL×qü’õ°Ë– ¢°?(BPo8D J€Ùwâp™ùâIÜ2&?a0«×z¸“<ÉÛx?)pð‘òñšüQŒ¯°ÛÿÀ Ð7õ-#Ç ;Ð2°âq-H°$×ð)*ó5'TCsÄ1г™AÕ™Ï×"Ú 8Lš>iYšq™0–® ñÀ4•@N€Tp“ÿ-V9¡0 ˆâœÂy êEYï?XDtüRg™–ýQ•“sgN—xšð · šï e ½àf«!ÈД@=×%9Ÿ ™ÄiœACtÉC…4™5Ì7›(Lš$£¾C£:© 7Údû0—uyð[f ™`(@ À‘)„pwÐ ûp ² ¿ g—6ø° ×™D™ËˆÑ Ö “æÿ€9Øc#ÿ¸/õ±³„?±„÷‡  ª©¢É©Í”BÉš˜øb&¨@> 0/c2Õm”€aH\ 98 ñ CGІ2ÐssH‡”É6‚c’¥ìV)’pƒ\áf^*<`:£ÔY£àR !p]%i¤° ¸é,‚ÐnÐ ÍÀjÀ”Sð¡²z(*@‰1(ó¹À‡ŠAÕ^ ±yu©¨0"w@ÏJ>„h×Y°2á-'p3&k*¬ a jbñ Pùá~-Ò‘Ï€ ¸y-E`¸ «H„à:Gez)‚7Ñrw°É5°Õ‰žÿZA)» K ›"SÀ&uÐvº“ eNP‹±\QÖâ˸CPm  õ0ŸÒ58† ï˜àX¢F'³G³Ôz³÷“Y‹­± ­” 7WÍÐlÐ Âw3†N`ƒ?Wõ°>P¡‡80Ñð†E mö:ó—‰û ^ð²“%ì!¶”[¹g ªq9«î €3· p·Q€ `– ¥e^ `2 S˲· &ÙU ŒYQ[sp îPLÖºŠª“v•rSl€ ë`,ˆ06*…Í;jb  jJ ‚÷ vXð s;– xÿjª(À3v¦  Qð½ Aè >ð¤Ây8 ·6Y‹×чÏÐ^Õ¥óhX¢–;{f» l›Ûú: êð%–#Ë0é¸ î0c ¤p»=z§@‘ P ‚øq7A08nF\U-œ ”îa }0;­_:­aŠ¶â™ ¿àN×Ѳ\+à \ PÖ`©€&ž`Œû p'ðð¸¯lRá@Â¥¥ÅY«’ZþR)³r°}°@7L¶;l³lL©–¿`•Vmà6 ®FlÀlé` “0iQ0©AP€ ª† ÿ0ÿS&É ª6 $ k¼€9nݶ ЖlA@¼ËpÓ£wnÚ‘n¨œÊª¼Êä¦Zƒ ~ˆÀš¸ÀÐÀú‘)V° îð žPÁ, ,ÐÈŽü¼pl-7ÇyÐypÀZê,.<*ت¬ –fj¼ÆÛ©m|°\ŠÀË)bX˜àÙPPUP0™O@$ðv u@ÌÅL»C*KÐf°Ke D¶ƒaò`•U)#Úá¹FûÀ¡ÃÒú¼'ÀM†_épÎüáj*›¯"á)&~»žA ÏÛà Q .]̼ð´KV³ÿTÓg`t¦’ƒ›@ ÜL½]U`§¼mÑýÍ9LÑñʱì&³°`†&˜Ï0 ‰-üìÒSÌ ¼ L"P6Mh04x “õÁ¸ ü%Þy9AÔaÔ»©ãÜ–h+8“…¡B ^WOM ø È@La¡C$·Õ\ýÈ  ÒK¯ä.ATt$H—@&ÙÀ4ýñÖ:2>t]×™ÛÙáü©YãÃ@L#|Ï؃½IIÀÐîЈØåp!»‚BBCt ™ù•К¢€ÙDÍÙ ]ÜâlÜÇMÎ]L#OÕ³0ÕXjÕ™’ ÄÅÌ6ÐÜ4KgÿÐÝ쑞TQh¹:¯½¤ ž°¹ !фܟmמ=ß"h¿8ò (¸¯P@­“såvòpØŽÌØÝ »Pp@Ð ’TÓi ™ü¹«Ç/ ]†µ”å-"•#öÜ"â$ÞÄŽÝ2 ”@ ³CÒ‚ ¥EaHp Åÿp ‘PÌ&€ »° 3v 0¾´ix`‡0î÷,ÏÐe]µ¥ü!'Sâ¦YßSNåÒ i*h#ÈÐÂÒð˜¼Ð Åp U1c¨  Ð]p €&Äcdᘶ±íTÍk¹âlåcÚR€‘åp²™ÿò _, âðp­Ð 9Úá P û ‡0c,gäp gr¥âÉI\Ó¬jézC1è.ßU.è$åÒœ0ˆ¾äÅÄèKàPV† `æÿ˜þ‹Š0žNt&c#\ãö)ØB#²êg[Àν°ˆR²¾Üp²å‚íå ¢ –@¿° Á È0Á°æ€0EsT*ÙË..\Îçáç­îêÎïý^A'¼4âߘ[ŸsÒ‚)÷z-> ²*0§  'ð õ Z†MPzÐ_  dò Ò)LÌ×,3"˜n7òQîQ>í€^íÔódÿŠßüáâÙÀ¸•R »`@Á4&eÂ2†[žP•A° Ïæ ‡mP%`]®Ú<°c!\6¿I£Ò” ®¸nôýò×îõ_¯¹Ú¾Ün çeÜÜœ:t-1"bÁ Á8€ @ (´ŽP zÐU0 TDZ‰K›žÂöÙâê Ô[oíÐ öGÔ‚AóªI™Ò` ñ%'Â-0ãc10‚P Š‚À/`Nù°f ˜Uë£rQ@0‡Kð!“8’Tp Ü̼Šßør]¶1/³^ówNù!pBù¦.Ÿ…ÍóŸ/£’f€¦ßˆªÏúúáúûÐ $ü˜9ÿ€½ð”=pƒ£ø¿¿ø°þï]RÁÏ: #f §½(îíKà"Ó{[xx¯÷|¢~={VoAyòns·¦M±g7pØÙæC†4yÛz¨h·oß¿î@Ž$YÒäÉ’"Q®d™²åË•*aÎ)“&M›7Ozä¹/]O A÷e[‚É’lî0Q`JAÏŸ=ëI3êcGZû¶e˶m_=EÎŒ=S¦ÍY;–y&Ïc6‚Ï–,‘V¬MœlҖܸ±DÆž¹v8ó2§N–‡Ç\ Sqc—[>^4ªP¡D"Ýo¬Yîz^þ*wˆRœP¨÷Y¶}ú ¥ùÿ3П>ÄNÑÊûk^Ï­r Òi³†à9²íØñÔ]•Þ ‡”œ¸ºõë')WßÎ=;H˘…l«ð™W̤³!âCê*N|J¸ž!EúöÝW”ôW…–ØFih _rh£Ž}~Ùa K6ÙÁŠz¦ë² 1üΤ ëÐà Ã(¸ÜÚG!ØÒë©($ª¨Â‡£T@ P,ÇDòÚFCô3Hßx’§¨!pKžlà+I^¾â…¹‚0ñ#ê6$éCݼIKœ¬Œ,;Gä©Ä_´Í¡ ‡g,3zÑCgAc‘ÒbKuhQÆ!†X¢y‚ÿ%ŽòèÇl~ãÉ0/kŠTÒI¹œÉÒKCôOLà2=¡.«Ç($|@AÜC¡‡ã¬g4þÄ4¨êŒ~ᥠ$@À‰dˆÄµÈlTtDH­ä SÇ&­2Rf_ж¤09½5®Uäé™@‡!†øŠ!P÷~pG¡=ôð@žÉG.ižáå€â ^ag‰"YÜì¨ ÅƒôÑêzÍÙi«ÔÙg¯«ÖÚ­º“4ªŒ*"Ð#ޏX†&N}d™¢¤¨göáר' @@’?yUGA‰ê¶HhÄ4 (ɦ ‰Jhöùg07µvèÑxªçRÙAŠ˜ARpña ÿJŒzd“‹Ìå ð&¸¶Â¨mF¢¥¥±ygðtFL烖»g šh¢I#9¯@Bâ½­Z”$$Ž+Üì%zØ V¹Š®a„m« 2jí¸ÿq['¸yö2a”@׎á„Eó)ÔSW}uÖ[w½uƒøå—@ƒ"Ð,†¢‘ xÑõÛÓ1ê—*¦   G~AufŠ"u£¼y=*w²×~{î»÷þ{ðÃ|òË7ÿ|ôÓW?û‘Æ{b£I¶m%p×I(Yˆ@3‘~F4A€À6! i”íDd3Ö0G¥ T†{ž#˜dDÇ¡º}NSE{ßÿÐ(¶á,¡)ÐÁ¸ÀPACÚŒqr( LS¬àiÃJ@[UB1‹ulgËÂY–D"’éDPCsÓ`sv·ÂOHICÂñPƒTù`\¿8‹Šp@¢3‹Á&b \Õc*J؃5Vª)4å)B˜G2·9˜‰Ñ·äÄï\ƒßq_CÕ¢ÌådzDb€'8ƒ_Y"Ž „hˆãbH¹Ýøg"m!å(‡"öЃJÀB³ &àAdžõÑs3Ñ£æøÈ3?v‰‰Vä—ìÆACŽˆ4 XרÁ-Sñb’ Q›"ñŒ+d#PÚð {¸ÿrD£Õ(MnàƒÁÂ)°´‰,ßfÇ$â’‚³œ ³ÓË+m*Á”¢Gˆéc"M: \ᘹg…_‚ª‡ð†P,‚p…‡Ô|FˆpƒÜyEœs,b9•ȹ}˜®mE¼h;w¹!xR*hÀ¤ç!Ç„«Œ@ÎÀ°ˆHU¶J¾‘+\'ÝB¹ìA¡$Â@Q,•®$'µzò’£úÒ–Lg¦>HÒÉÓ#ÿ¡gļBš£ÅÅ òA®ˆ¶± ûâfvPžTLÖ0Ĉ`„AüBßzÀ81Ã̱¤‚K}”Á KÒM°ƒ-é lý‡QÛø žPÿá{°FXÔ­"\lfèáV·žQDdv ¼€!`W L£zMª-7j0vR+{v̫ ҨҰ†$O}žŒ J!…£†Zpmð¨YÝÆ@¨Âñâlõ&¸bM³!áß ÂP_i0ÕîU¶·¼%I2ʳښ$£¦›m³Ì+Þ,¹óRõIIßÒ–2q‘D‘êÁÖ# a7²†y²!ÚçÔ 2K‘4—0$Íæ®dM­j]:ÆmçûÞ‹ËÙ®7¶ƒ|m.z[Üê–¤Á$Ó‰ž¡_.Ó°€ ÌÂþöKšh]0¿,(±úFF-m?bº‹ÿ8©âá^û– Xì´MÊKD1TU¯‘ü(ï‘w©S6ñ—6Ì×î!:$ÿÝ4­!xpt'«ÜÞQ÷u.ØkûþÞÙ ¼ïyÏt3”+œidÅR×0¢kýj¾ü½³Þ\H3*_‡Ó—ªîžyÀ8EÝ ãÏQòâlcF4«V¹”ÅmÔ Þñè®]zÃFºZ^æ–Ýv÷nKjoy ¤ ˜93´ 7¢=ºäÇu¬ ÝT–ϲ—z,tcBªð_¶»êT¯úÑH5íGg‹rÝB‚Íõlát2uYH.yM´'ð¾Äìì|ŠÎ¶Çæÿ^ ÄK:szÎÔ¶gÒ&-ÖÃuûÈiguk oÅW~‚åf|.[pÛ:Å g}å­îhÌÓÛàÿ…Q¨‹%lc‰ÊƼãEq=9òNf¾kÍžäç>°¶4JD,}+Ó~ÐŽOy}ç.wGûÞ'Eñ[Š(×\uì~¦åÈm}’o´Ã«u¢©ÿúöÍû;Y>ÜumûæS¯Û‹¸ï¿t ?¤Aóû'{š4¡c?×+¢S¾ÃŠöª?i‘$K¯rC2Öâ>S´Ì%Ë£§Ü3¤Ýë½¾[à>ë2>3a2åC¼ÇÃ#= ± ¼ØãÀÄ0ä¿!úÀ‚›¾ÿ³>„3ÂãÄB¾ì Íã;Îò<ËÚŒ­:ÀC<|/[ ± Û?Û ÀÄóƒº <“£’·s:$4±ÿ&ì ¤!4©º{㘒%!¿«°Ñ;;üS/ CoÄ97‚ 8¤º>“5ô«Éû³¿aAá#¾3ù>¬Óº=4šý9¾õ BêÂÄаèc%“½(38ÔûÁ/´>TŒtJÇÀ HÀû:m©ºó² `À} ˆõ#:ÖØÐÁÁ‹¿qãÁxš2)ãBe\FX;F£2/Yt¸©ºl ‚"øÔùéÁFp ÇÔ Ôá… X×Y†ÞÇé¹ÚZxŒGyœGz¬G{ Ä6| à«DëºÄ¹ËD| ®NŒÁmû«ê›>“µëãB³(±“¿ l‰V‹­X”ºÿ¸£;k¡C\ÌEw˪gØ“±¸*,Hƒ$Á$Ê« zÇ D¤£Fé“@Q©Hä3G„ ñ²£<§$“;¦ïûŠmGœS ‹À5d¯C#¯ða'"Ê?ìÛ«&SªPF5¼ |ÊùCÅ”DšûI¯,)ÿ« R<"ø/ðY§|HÕsµœx;f™ÈA˰W¤Á KKï›»±<'ã<²WÜÀuº™ò"Æ+‘ –¼ÊuóK£CCR„ glD¼¼<½Ü˪ëKŒúË=ÀÄLúË+ 9=fä™x9h,B¬¹Ñt5É´KÖÃ̹;AËü>Í\Íù"§4Æ•M¶+ºÿ³ Í·|DܾßLFV”HZ4ÁˤÍ(ºM-¤I•TË¥ŸX7‹J·™ÊÔÂó—D'¨äÊ’ÄÈÙlΟ„ÎdD¹F Côz¾€S2>,'rC½ADµëJØŒ–úlnËÂ54ϪsÎ`"Ð÷QÏ…\ÌÇóÀ„4źܾDM¶¼@ÕzEªlOUO!¯YÜIÜCOÛdÌ­ÌMìÌ@d[SÈ÷t²Ó,ÌÌAQÅDÉ¿BÌÑá5÷“ÉÂòмKÅèÄ@F4BÀLÎŒýKÿÃ,RÃóE¼ÑTÜÌÒQ¬LæÔË%Õ¿ûBNä1Zó°eY¹ £PФ­ÿ }¼˜ ›<Âî|"­MMO*]Ï.5B¨ãN‚+1ö·»tFö\=ÿ¤A˜ôÌ;UNø:Œþ«AýJ,µÓ Ï<ª­›äJ‚12K]ăœ@—$Ïö P µQs»ËF]¼,Å›TUUI%ÎÕ\ËËÐù«5Ø,Nœ¬´£‰|ì UÍ›VÕ>)%ô£¥ðšLå¤F©Ã5›t–Z}W•e%ª£}ÌumÅÙÆ»×¨-Üt‹Üˆ$ÝÒ}\´±¯5]žÍ\Ã…ÝØuÜx¥V ]ÚuÛÜÅÜÝå]ÿÎÕYºÅÑÎõ\ÔØá…ÜâÍÙöëÔ8ÕÝß•]ä=ÞÔU]ãµÜ†uÝ×}^è­^ßÕ^ï­ÊëM^å•Þéu^ÜýÞóM_õ^ó]_îÝÞ÷í]ù_ôeßö-ßî%^êíXìÒûÅ_ø_òåßý%àÛÿ5àVàüµßv`úÕßàFà¦àŽß†àúå` ®` ¾`¡àî`ÞàFáþ`–Üvá fà–aÖ`ážá6avßö`¦aÆ`†á">ÝÎaVââ!Þánb(â)^á(–b&Æb#Öâ-~â,öâ/¦â*þa+ã.¾bÿ0>c3Vc nc7&c8Žc'^c$&á0¦cÿ]â;~ã9ÆãÀ=âìEc?þc@&d.äA_;fc>îã2nä1väG–ãH–ä˜ø[LÎdMÞdNîäõ1dANäË=dD†ä=ždJ>åTfäUfeK&bRÎãBeQ^ÓYÝEvåW®dXeTÞeUîe_þe^.f]6æcfd®ã\.eSNfhŽfgnef~ái¦fYŽeZ~æjÖciÎfmÆek¾faææn¾åQçtflÞfb^fr†gpfçr6çy®e[Vç|NãxVfyVäq¾g|Þ€ho>g~h{Vèvvç†炆hÿt^gzþgƒžèæ=h†fîh„Nh‡æèoéz~gîç“Þè’~hŠ^h’^i˜Žé”~i‹ni“išÆé‹ÖçŒÆh‚öéŸêºui‰æéžé6ê F꤮è™Îéè¥fj›¾i”Žj©j–®ê­>jªÞç¬Öj‘¾j¬&j®k•®é³Vk¯vê§.j¥k™~뵦뺶ë¶Îj¸dܸn]ñÅë¼¶ê´fë©k¿nf²l†k·.kÁVlÇîêÂ6뻎ì¹^ìÊNlÈÖì¦nlÎflÏ FmÒ.mÓ>mÔNmÕ^mÖnm×~mØŽmÙžmÚ®mÛ¾mÜÎmFX‰ÿÝž”Þömgùm/îánã>nàNnå.îåfîH!î îèféÎŽê¶nävîçÎn+¹îëðîêoÈïñæîé6ïï ïÅPïõf˜tp–÷†oùž”ø¦ïùŽ”úÆo†Ùoþîoÿþopp/p?pŸ”Vh͈„ëXð‰H€`X’h…S0 ïð8 ×ð}ømÏðHwðÅ@ñ‘•€pö.  wqÎ1q  ¯ðp=qq¸qÄ`‰ïí8$X€Sˆø O`q^“r*߇S€çµ€Þ&óÿVwÀòVsĈ„€"sÿˆ„.׉tàF€÷†ðt ÇÊ1ïm w‡85gsps8ÿ@ïñ:¿ó›€ôKÏr6tA× Fó sFôHXôPG‰OÏóS· FÈð4߇*ÿ‡V· XGsèpXs2‰S€VØsOgp€÷†õ/v-Ÿ‰5ö0§óqÎ)tÍÙóÙ`—öatØm$Ov+_v˜8õßö=vj¿‰q4ïumG÷k÷`ÿˆS/r€òSwÈÐ÷|ÿ‡hçöÆðõ÷Høp.ñwÍaðÿ„/òA× gscÏu^oñÝvÈw[q†G q?s}o…ˆ‡ô‰ßA¿õ…Çrøw`ôÏr–øîØôm/òG—ò~ÏùÅ8sÔÉò‡yÄ0x„WxgX§r`?yzG a‡pw¸uŒŸz‰¨GúPúG·ô}s§qv¯s+y—‰G¿‰SØw>)/û…G´µŸ@s’Ðö–u¼‡Œ°gyŽ— ƒGôbOøÞŽu÷OW qrŠÿˆ'Ïw,‰uùõ_/üŸßy> €Å'÷—`p*1xi·ûÉŸ‰/¯oKqÌG‰Ó÷qb ,OøPgð>–اòthÿ2O}È}KïóºòÌ_x 7xÐv¢§ g/ö?ô,¿zo÷,Çráyoopb?~™§%íowê'v°þ›K×v,÷Vøþ´7 òw”Ès×vÏyóÇqчŒô·ñK‰5÷ù-ˆSÿþ1*È(Ò?w¸èð!ĈŒ žÚ7Ñ7Fl•n྅­¶ZÈñ¤Cw ˜˜paC”÷d4²ä‡WÊ|©¦»šq¢üi°'Ò¤J—2mêô)Ô¨R§R­jõ*Ö¬Z·ríêõ+ذbÇ’-kö,Ú´jײmëö-ܸrçÒ­k÷.Þ¼%cFÊ™÷/àÀb#øøÿOÁŠ3žJØ0â‹ ü7 oÅ“GÜü¯d$,v¦ü™¡B-ÿ… Pa+¤Ó®•°è`wNÂ!Ö ¤oáé'`Ù7ðV" @KèZI>Û6øð=™ þÏ÷ÀÝç4~ª¢p•Ø Dœý¿Ýû°÷.¼}w:Ò _âx`D „Ø~~EfÝ@Õ Ç^yÂ]vkÛa·`büÆvÇíVÞ€Û!x≠–~æmhY$î Vs!-@}¸Óbb 긛ù%w…¡x¤x*Fæ£p½än %Wyè19]Bæ!†P•§Hÿg’a6–#¤âÒ) idH `Xšof§Cq®tÐge’$RBzŠù' 2ö] …jÕ)²º(£:ú(¤‘J:)¥•Zz)¦™jº)§zú)¨¡Š:*©¥šz*ª©ªº*«­ºú*¬±Ê:+­µÚz+®¹êº+¯½úú+°O¹3,±Å{,²É*»,³Í:û,´ÑJ;-µÕZ{-¶ÙºC·Ýzû-¸áŠ;PSUèžk•ºSµÕ»ð²û¹õÚ{¯¸æº{U¼PõëÔ¿Ï;ðºNá{0Âåœ.¿/¼¯ÃRŒRÂ[¬¯Ä G,ïÆþjüðR‹|0Æ3ܱ°Cÿ|2ÈJür½%{ŒrÊ,·<³Í 3ÏàÊ\sÎ:ߌóÊC ¼sÏIðóÑA›\4ÔOGMtÈJ'ÍtS3¥õR\'åõ×47=5RV_môØd§-´ÚkSí²Ùûí»ÿ>üñËÿ=·7ÿÿ9öè÷~þõLÍÿ?Àúí¯|æ;ùˆÀ"E€|  ¨¼û¡$|±à“7=þ¡‚ü û$¸A&P 4áIȲðƒ"¬žaHAèÅ3l!øBÎÐ{5¬ài˜¿æ°ˆóÛ!ƒèÃ!–°ÔKbSŒ(EúÙï‰P´¢{¸ $zSü"û˜E-ЉU4 eè?0‚QŒK4ã ¨ÂÎq„IacψF9.0ŽMä£{‚Ç/ºq‹ãû£ûhGEªq)ƒœb!ËG:2²‘{D¤Ó÷H#F"\ìâ!3™È4Z²’Ù$'GIJÖq‘«¼b+ÿ‚Ê"v2ƒJ4ä$] È@îR&³Ìa-SJQRÒ”cÄ".£øË”·”$2“MhÆ2—¥äe/³©Jm³˜¯œ¦'ŸNq “œÎ´&,•2„u²³î|'<ã)ÏyÒ³žö¼'>ó©Ï}ò³Ÿþü'@ý9 ‡´ =(BªÐ…2´¡õè@*щR´¢½hE!úŒr´£ý(H'ªÑ’´¤&=)JGŠÒ•²´¥.5¨J_*Ó™Ò´¦1­)NsªSÞt§>ý)PÚÓ µ¨FçPªÔ¥5©L}*TgêÔ¨Rµª%ªU³ªU‹bu«^ýjB» Ö±’•Ÿb-+ZÓ* ϳªµ­mÕh@!ù,Êœ‡777\Zqcdfg„gj…oprm‡usyvˆ|y‹t~Ÿzu‘zz™p±z”´z—ºš¼ƒGM…HKi}‰hu›~ EF¨KN¤]\´QU³UZ¾WZ¢[dª]g¸\aªlL¤x\¬}Z¹~L j{¯hv£{g¨|f¼mt¸rq¿tän:ír<×\\ØWWÚ\\Â]dÔ]`ÝfRÚ`_ÝhRÚm^Ô}EÖ~LÚzIÙsQÇfeÀekÀjjÊgnÄlsÃw|ÏrwÝccØfiÜijßrgÒvu×x|ÜuuØwxÞ}tÚzzä_Vã\[àeEähJèiKäaUá`_äjRãcbämmã~iãrrä|sã}|€t‰Ÿ~’«w†·t€°z„Ä{ƒÑz€³“~×€>ô…ä„*à†2êŠ3ó†!ð†+õ‰$ó;ò‘;ÀH׆BÖ‡HЊIÜŒOÔVÔ‡`ÔŒmÞˆv×›pÒ£vë–Sï›VéŸ_ó•CðXã€}ëŸaî¢að£bŽŒ‡—Ÿ—™’šŠ¥…”¥–¤•“¡ž²Ž¢¸¦‹ž¤šš¾€Š¡›ª¥¥¥¬ªª­§¸°¡¦±Ç¢²Ç ´ÉºÇÔ½ÉÕÁ……ʎǓʋ“Æ™€ÊœÔ€ÔŒ‹Û‚Ñ——Ú’”¯ŸÔ±‘Á¦¦Á«¬Í ¤Ï©¨Ù»¢ã‚‚匋㔔㘓䙙먃塡宮⽠崴ỻÕóØÄµàÆ²ÆÆÆËÃÃÍËÏÑÃÃÝÛÙåÃÃäËËãáßäääþþþÿ}ù¢”)È \½`¥á(Räˆò5)P>¼(Y$„‰G&KœÈ¸á¦J”øÐò…Ê”)¨°`‘!ƒH’8‘Aê¨Q¦°H‹F W19ø1Cǯ_J^ édËV(£·Lu¢Ë ¿üò4Cè.V4rˆšUÇ—$;:ü S &T¬\aCf̘X»Œø 4—î/N.¦è-cFŒT¨¨±TØ0'N«ž°PƒFÌ+VX‚ð¨l¸,'Oô˜1#P•ÊbÇ[«‰“;bÐt¥déÙ¿æ¬P㘗++C ýN'Ĉ1/ƒ(P8€á§O$ÁU¢æ±Àe½‘­?0ÒdНP„ýI‘aAéêÃÇÊû£ý2aà.Ò‹|PË!%lðËTp‹}ø‚@lbTƒhðÁŽø  (À@XPÁÄ [táJ’ËS§´aà &„Ê+1b“V|’B ¬C­¤q†+¾€f*©¼¤D—Àñ†CåQ•¼`ñ*Wº"‹.xر•j”!ù,™e/B‡ 000QQQUUmqVannoMx¨iwšwn‡xyˆxw—g|¤u} Y­_…°~ƒŒ{ƒ“h…¬fгm¶y‡¨rްz—¹­n>’INŠu~š~l—{z·VY¯^c­vF©zZ¸~L¹{X¬dh©l{¦ye¬yºdh¶hu´|k»r{Öz8än:ìz/éy8ñ}'ð}2Ü[[Ô]aÎd^Í}FÊxXÛkMÛgV×vKÖxUÇdiÅktÆvgÊsxØdgÕlpÝujØxyæ^MãWVçfHädXêxIèwVãfeåopåsiäxx†n‹†wˆ…{˜–m…—u‹š~”£l€©wˆ¤}‘¶y†Ê|ƒå€y˜…x¾‚I¶‚Y«‡g¯Œ­‘xµŒh²Œr¶‘s݃.׃:ô…ç„(ç‡6óˆ'ñˆ5ò‘;É…FȉSÌ‘XÒ‰FØŽRÛ‘NÙ”XÍ’eÆœxÔ†gÙƒtÕ•j×–x×¥vë‰Fë‡Wç–JéšWð‹Cñ–HðœVèƒhåƒ{é™eè•xî \ð [è£gí©uî±|ñ¦gð«pú¶|‡‡‡††•˜ˆ†›…šœ’Œ•••ˆŠ¦ˆ–©‚™¹—‰¡š–ªœœ²‡ ¼š¦¹§€„¦†™¢“‡£š˜¹Šºˆ”¹˜„°””ªŽ ©˜¦¬ž°¶š¨½£Ž¸¦–§§§¨§¶§²¾¹§¦²«»´°®¶¶¶‚ŸÂˆ¢À—­Æ›±Ê£­Â¨¹Ì³»Ê±¿ÐºÇÕɃ‰Ç‹“È‘˜Ø††ÙŒÚ–‹Ô–—Èš£Å­™×¬„Ôª’Õ²Ó³–Ω©É¬µÊº«É´¶Õ£¥Ø½§Ú¸ºä„ƒåç˜‰å™™é£…ä ›í·ˆëº•÷½–奥躤巷ò©©ô¶¢ò¸¸Ê½Å˸ÙÀ¨ØÃ·ëÁùÄ—êÆ§é̵éмõɪòÀ»øÐªø×¸ÇÆÇÃÌ×ÊÒÚÚÃÄÕÎÓÓÑÏÛÛÛÆÔâÛÞâÝàãåÄÅäÏÐç×ÈåÚÙòÄÃøÐÎõÙÙæßàåáÜþâËôå×åååïïðüíâÿñæþþþÿÿ ¸¯ »ƒ±)û£¬!^´¨¶ß·Cˆ}äçæûä%ÿIÒ,‘!- ™1sæE’"e¾á;4¨¾5–б{eáÜiÍT“Ü>ȤÌBÇœ‚ :']w”A(Ðv6Qx“„N·`Aòèa„DÑóœ1† /ˆx8ß bÈ<ò†&ÔèJhð4¤crNsÄJ(3Mƒ idAvgá….©†Nª´aAÐô¡Çg ÁÇ fŒaFE¸p†<Ð NAá ‡+®ÌÚ< UO3Bî3\3Ó(äqÊÐÆ xG2˜ätQ¢Õ¤„…²ÕÙ”EsgRe—|Tªe8иQŠ,î´Íw96RCûÀy ðì“ã Îh Ð ÿÚY¢0!jë­‹~·\šõõqÑ@M!ƒójt† ƒ„*q£*W5zú¹*tàЧG4° *d´¦îI¸*Ù£ŸÍÍ!…Ð 8Ý Bˆ$ø¢‡l¸Ñ s¦ÊI'«ñ OŽ}>N}‡ä1·Ý>'+XCÕZî¬S¬¡®­ÒW_±¼Þ7šD¢Ž:øÙp:¼±gjCŸ< ;ø­”Á)jî¡8ç<ºŸ…ó 8óàÓ 4ëÒÁ#à"H^ÀŒñ< ¸\5ÓLã§sø rHAæ”yfÌÑÍœ’ÞÙLhÅàBy.ÆÁáC,ÂòÌN}¢ˆ"eäÁFlÿ2 ×`/÷2hƒþÙÃ4_D6Kjël±ãm}†Ï/Â:-O4ƒTÚV¾w󜳅Z@ Hh0 xHT[}$8D³O‹‡@£Ç Ÿ~¸Ø%-^¶¸ß,üð…4Oƒ37ëÑÇ g|yC 6PQ !dx! ;‡˜±uHà¡ÜÊЕ¹ñ§˜’G!ëþVNÑI yÚóÓŸë>eÚN¼ôýÚ¥÷ÝX϶À†äzÃ!` ïaL`»Úsh§<úœIà(>Ü·;ÇN~ě̸̂¶´„ä‡ÐFA Á<4@#z¯† ÆàˆH¸¡ -P¼„†Ì™!w«NªÿTU'y­ â«Ü‡¸¶Œ„!´_MX6‡…fèÃ>¸4/hxD Z@2¬çŒ|øZ•1ÄkÑLHÄø8ØÁú9±„– ÞΨ4;Àk¾BC7†.BŠ&8Al@1¨¡{ÿûÞ÷Á81ˆ‚Ù‚ãêèø>;æÑ“˜Ñcñà‚¼ú|ƒ5h@C—ÈP†3”Á&ÈA ‘5²ꃳÀ7j4ƒ"zRB<d¾ú±HœìäïJÎà±,’£\4xÆ0Œ¡ŒbØ[ `H¤A }ðƒ°Ô‡c£dz’C;hÈŽmtlâ'›ig¦å‰Þ™dm±ÿ%6dÁŒnЂÄà…WÈÂ_({î &`ŸáqŒó£âð©}Z¢îäyOQŠÐž¡¼Ø$«Á #b‹ÀÂz1Ð2¤¡F Ì PÛ”,iäGC¤Ó»¥QÃq4¤ôü >'äѵ,h8 JÂ3Rš%h¬a yЃ, êŽfÜ ƒBp€Ô=ž‚ÊÆ˜5pGufR±R¹î||ª ŒL(B eø´ ‡cNcXD!è ƒ&Là àÄD«QQ㘌¨ÉTæÙêªTÎvV¤\â>À"àà ¨ îð†KÈpQF(p ÿœ€@G6(…‰4$Aj«[3×zz–;s¥+hAs *¨‚7ÌQ6„€< ×n L(@N8€,*(à ù%E€4ÌÈãßpZƒÞ ¶â~6¹9Yj†ð+“àÌB `@¨ð£˜¡H@xÀ YüƉE" Œ·³=t40K¤EÛ×|‰Ë;¤.³£ü­ÐÚ òŽQB O0p3ñ„#$!WXp.,Þì£Fç¨Å+*¬ È"4®vˆ`Õg— ¢oÌì«ÜËD¿úݯe¸fŽ.Ï¢’0Ç0r‘)˜ã 8O6€ä ÿ 0@º\£.›Ã xB&ì „a]xÑe;ä!]Fì`çF;úÑŽ´¤ílƒXúҘδ¦7ÍéN{úÓ µ¨GMêR›úÒžéM`Qxè ì d`ƒ/$€ * ½$`Vâcçp°$âdŒ ;$‚|ÜeGœL*#×ÊO‚v´ï'0£Ã³ šÁ à»#PA"`ZÔhÛa X¢TPFO•qŽNô @X‹ 7C âQ&ñqŸ½Ù£˜Úû¸Lc*Qe(X.ž†, ¶@™ôp/E,|¹¨Æ¥ƒ{+`óÿÙØ ±Á?Í8ðÀ¨³óÛTfÜÄ£Ÿ%ñ v¨j`ôéÆ&¶†-L Îx„Ö”D¢çp…PáKL¹Å$ªP°‚Ø7Ýh¹Ë»5c+£½H*±] ÎöÇݼ+ð ÎÁô†4"@ú/4y ø¢ æ¶„oâ* L¢ˆÃíÖtÙ™«xà»qN_2m ‘… P‹#îã~üoÐY6¶øð+{CšÑçHù9&*IÔ>yÉW¹ínÏù&Ÿ“÷r¿¢`&›þôZXbô’hÖµÎu?™ªd­_Îë—cªˆ6í<}*êó9è@ÿÆßÁàXâÃ&b:)8a¶ô’‚æ„N¼bÃ9lQ $!Ý}qg$ÿ2ó7ŽÇ$Òf6•}.Á3Ëáüá >¶…CgP³P:``9ð ²0 ¼p “S) G 0``6@F 5b'}é²a¬£#”€WVsóÔ}6wW»w$Ôpw@ Ôpgð@0RÐ @à áô" ¼ÀR0@PZ0ðerL#c<%sYÔG' RG¶w{¹×€ hØ €pÔÐ(g@@ ”°¹  ès¤Çj ! Q?bDU5¸ÿ X†1¬B‰ ÃÓÖ†4‡ ¤{È+ux‡ûP„z¨M ÷öMPƒH Ê $×!B9` ûà+s3ø‰²GD¢Ò-˜h(œÈ8ÃHŒ”g$;×sÑ`„Ñ„gàJpN9` Ð ½¤ ) ³…R 1=`5`»ðB‚¸Ä†páÓuÇA>FŒ ‡@xpšØ_€ –`~ 2 gìpX’pr1``Op¹` <@``TPrDÀ‚](1ˆ~†¾r¦´I¦Ò &€Þâ€=XŒP”“q`²  ìP#µð´Ð1£€ÿ Šð^!‘:@’ Gpo0 A H‰”F@4å´†°9fRÉ(9(\8('2G{÷¥’'É•]¹3æF¨ uþ¸¾ÁjA/ï p"*æ0:àgÄ :à D°‚B0ÍG0 )× Pù)Gô*P3 $ f‡všõ†öè˜Axb±¿&æ`nhé¤ç ”t  2Ë¡†¼ :À1 ª‘Nç >"-=Þ³AÄ3TY2CµwB (ƒ€Zé†ùƒÁ)œ‘ók¼ag ï@/“0M S ¥B') ð#JÐ…G z¹—Ñ@Y>u9™ÿsÝàoºø‰!9’°§ Ò‹ù˜Ã‰sð9Ÿ&–µ0–å¦ è`v ºÐuÊà’0÷Æáx™”HÙ—™.þ7›4~ÎQ}“h•ô؉ñ¹vô™‘³,é’Êá[%‚¯p Up£À9v`È@±Ð ¼° !gò× z’”C”ˆxÌÀ î>4úÔ‹¡²è ý‡˜8{&™‰Z{’ù!Q üX–U¨]âÇ 0= ©EMlÀ` 'в$½P²ðÍ€`)÷ö‚0Ø”ÎñŽC5ˆ¾a0Áµƒ¿ÿIpYŠ¥JœN5€”Ù1²@d£ qÙ'Ðm€ Ȱi°QøRà@bvÐgn)…0" Šš$‰¥r†ìUç’çp R°môžÜw¥[)¬Ã¢ßçökßd$$iº Q i€Ñ @¾¥zÄ‘Ê` q©'DP¶p§GÐP5¿ (ÚzƒÁáSç¶‹ ˆÅ«€wE5¼ð«fi“ðJmõ Ñ; †[¨@ œ°±•ÚSÍЪ›—¿È æ Uœ±!Ѥ"-5B,ˆj ‘eXVµVk\Æ  ‘„6i²fvfðg— EFO€ æTP–Ðe–P<Ð?ÿ  ☠]æ æ+f¹p80if ƒÆg@ ¸Æ@z“ŒÖe•vjhœÆj¼ÆlÜÆnŒj!0Ãàaα´ËۼǦ U` ì  œ`½Ø ÚknÖ& ¹`ÿ2'6€ÂÀ vÀv0‡fØ'ð;$*{«ð”aBSå@‹«¿£ÌT, ¢e}ë‡Z#–ÀÓ@OðTÀ*9N0#Ð/yºxðð·P”@¢lPeDë£F¯ù·ºµ Çn3ä ‡#K²ýk¥ß,%©¼ÊÎÁ'º–®°ê¼œ  [š@`Ër

 •š9 < #)`ÕΛ ŒBù€×›ØÍ-ŒÑÍÁ Ò"}©S½Ñ'#¾e} œÐØŽ=+PH]d¼}&]G½$’RÃ< £@ œ ·-’ÍmÚ§­Ôz½×Þ‡¼Dâ ä×®Ð:Tÿ3oÀ4 ð'Jp ‹€ÛŽM;ôÏh0•µ™Ø%#*ÐL0¥>õòÑþ¾cÑÕm²¨-©“IªÍ ² ’ â#$ÃU'¾?òm€ÞŽM ðb€FMf2x¬§zr¢ fP¤¢ ²R3Ê×Nàî޲ÝRIÊ0 ý2'H© ™àØàÒðÒÀ\ }€Ï“ $ßm´­ïû/%™jù´âÞâÔ]åýÅ”|$×—#¼àÁðð#?fUÀøéðã¦À P¬ð€ð]ø3Ýð Â0 0uB0Á•˜ŠkàžAå/.èW>è6±ùÿ„ÝÒå$îFa®c‘Âü©° /=L`zç à”Íò‰S5ëd'Ø)ÀË1(‹óߥ-Ý"»Ôöª¥1®èGBã6þä?R •p1Ìÿ@ Ì` §§ À?(|âa n•³§êÆËâHmèë‰î· âÝU¸U0oBB2è4”ÕÈØ ©–ó€7Ë$plà© ¼À˜(Ã*¦’;yrŒ6þ1V^èoÝØ?.%3 K[#“€ ®Ó€[ ÔB´ß(&ÀÆð Àþ*@$XkÊ; JÐSCÔàCr-©N¹Y3’ÿAððOè7ßײ4N Àæ`–І9>Á‘~–…Ç À@Î=ZÀÀp-@¢ÐpÜŠÒmi'zÒ' ÁçÐÐlHÚÕžðy凾ðÖ§dÊ€[!Á>ö*×¢^ @À p&À øÀeÐPpxP`æ TŒ>$¿ô/¨´…ß8•Ð.öþëêô:Ê[ÎðMÎö)›[Cx-;‰A2 ɰoÀƒ¶hP ð÷J8ø…ÏF‡¿È`¾H‰>§ yÜ: aoù—Oùàlíg/ãÎÑó?Ÿ¹CxãwZ¹i;xàhOõS VOãÓ«lÿ Ê »uP =Å) TZʦÌêT‹ùho}À5 Ô Sh˜äÚ¥é&Þ>„Àz~™še‘W¼ Õ*q8‡š‡7pLÓ¡ãÜ>vTtdYò'NŸ‡a&V¼’qã”!·œÌ’(U£E«9„ÏaµÌû03<"¤G­Tš(èÔù³¼A‡ðíƒÿ}è2Ñyž•Tƒ×lÆŒ9»p°¡³—)”2é¨2¯på—’¡KŸL²õëÐUÞM´¡Â}ž™fô*=”¦Ppi¡xpƒ Y¬vhÐìyÕš½õ©#‚dž2"0—}æÉ¥/€o!’´sL )¤ÌB0¼ÐBîºóè»÷”ϨђR¢ xX¯½§‘§;þPÆ3I,„à9g–ÔB%rûñ‡9’Pj¡üš™® "Ôðì‹ò°)ªÒJ ;ôpŸÍòLÐÈ«*©#z8!‡N;‡‡v›3øèc3œaH™fàá%—E, @&ˆùO§éíHÿ¤Ð£+yj±'¡ŒTR µÜ²!°F$1(e~"`ȆOóÏð¸c>üPæž«šQ&—Fˆà '(p%¬”"Ó× -i¤Ê‚’*ÒGkJ–¦e™Írª-‰’kš0C­2‰øÑ#´‰31©?þ@J™}z=‰€¤Ç>ÏiÈi°òôˆe¶$‰¨É 4éØ'›] ÙI^ÉÒhÆÌª_,ä"dÈa[zB’¤D<7]oqB²%†«HªšyJ#¢4!šÑ×_bóJÃ44Ø&‚sæÚ„{*¨s-úq³#P“ëa ,°  °àéÐHÂÊ’ÒPÈÝážçøE%—¸fô^À¾¾g‘Ï| ÿ<~uÆiê©xóÁ}„<%d½ÀÓ<æÑŒ$à¡…Ý*“üg¿d&BŒúZ÷j! «ˆÕ¹`Ú –ÁŸmpK£©D”Á8J'hB2°¢ «€©FH3º¡­¥ìMÂ5ˆàp€ãxàÁ$^qYXÀîâöf6œ q_ƒ¼žÕDí„O&P§È)0.déè”™rñEϸì‡P†¦ñ#jˆ¦4ÓhH˜˜A„g܈6èÁx^Ä>¢ä†Œ  3KYÒmd³ "ûÅ3GZ ’ÎÙÇ$‹ƒ(mi™ÜÇ&‘b¯ N† Ë4 ÿJea6èh^Dìù{aÌ8Ngõ’—ê\0ƒ¹©á Õ°%zÑd’ eŸãÊ¡­¥©Q!]º áÆ!ðÁTˆò¸G£Ì£Ý£àKš™”Pp‚b'} ÚIqZ MR…Õ(` "\Ùxèwm©/œ¦G°u„f@cxBÁ H€*°,ŠgÆf؃&1k „ŒµT£(ë£LœªÌÜLL…¥|I¢–FàÜ FÀ4ÞcOA[/ S§<¥ pB­JÈÅF(¢%Œô ‡Cú”‹Ò(c³Ìç|&øœzm=Æß\*‘$²Ë-è‚KHÁ†nÍR³×ùi 9Ö|#m¤Mr£ˆà)Ѐ8B$"%%zÅ[™‡?—ÚËS

+<¦4$O¼p1)û£ˆ”¦zŠtG·fÒqïÌ·dw`ìÊ4û_n_—k)jkÊ(Ôî6ñ"iöfFkÿK» €îÑZ¸£íðoËéߎŽÀìÎ%¦)oÀ<Àõ.õ½içm¡zÄì7ÀOm­-%ÖG8xfòX‹Z´¢5¦ï·3lÃŽ-f.ö»CíÀM3›Þɵ·Ç‹gyr;’•5Ñìl”ZXÀïpÇ+ZÁpsª»©×4š.X›û¼±%™o›5H{¼|Ëe˜‰„©ií^ ' ,,0ó}¸CæG6‹Z3MÇD{7b”˜z0[KÇ=ü—álô£¿3‚¾îBŠG&;¿´i¡±û9H¢÷™7¿;—ô¿Ž]éÓo£Pm¼,sÎ_Þxô^täï½öwL¹Hÿ j„jTÃHÓ¸¶¬ô”¨OýVgømŽDK{}ØÓï/`Í\X©¤Dz‡±Ö-šöÛC~½ Rˆ6­%O?~ºQdA˜K"ôÎÿúa³%€µ˜¿Ã®þ÷ÿëúìƒ=ÿ뉡û²¯ó?Û[.Ü &ò3ó+ž0I?f²¼ö+Ši ‚lȆ[P1ç«(û @µ)Šýþ³‰. A룽Õã>šcÁ¦Z@?Ý«Þ;ß>áS­âs{¸!eP*´k<èS›ýc”×CÁ¶àZ3$bÁÝRa‚ÿ-DºmkEÊzEô5Öó>9¼¯a!¶%t·Eª?ŠÉÄÊB•\7u|3R,Š@lFgô8“Ê‘îà·E ED6œ´íÑû‹>üB´*Ò;KcKKh£Êw’Á¿aŽÂÀ/œ=Ô'²ûE)Ô­¢dËDšJ3³\$ƯüD¼”6½¼È{ëÉÆ›‚8#Êq§ù»Š3Að‰*\\ÊÄ\¼%rt¼˜t¤È”L½´L«MI)®#$»ôLš)=š“‰›È¸ÿ 1»Ù¤1ÔIÕ|LL|M)RÎåœLÙ$§oÜM#2–’ìÅî+»_ÄCckÂØƒNucÌ‘tL¸lÍæœÌŽƒ¼ç¼9$ ¤=²$3v˹¯iOµ´D+üHŽ’’Ô#¢tŒÃœHÆòœLæ¬ôìOû¼ÎÔJœÛ¯¤NàDËÞ ¶:DÌOÌOfÓ¾¨„·Ë´KØPçÜ´'<ÐHSAûº4^LÂð,3eKÉܬÄÃâNÄ»¾KÜP½O¢;OÈPóÑÑž)йŒÎlL"ü£MØ3QÀûÍÇ#RÓ J¨ÒÆ•NÍDFuMóÄQóQþÛÎ ¤ÃôËü#¶%-$$庛ÓÑtÒÿ+„Ò]òÎ)e$í™8•Ó­¥%”Ž(LÍíöc7æã@žc@d#&cÆãDVäC†ãBÞã;fäàFFc$¶äIÞaH®ä?äNæäOÎcB~äQŽäP6e=öäReCeR^eU~eYFåMfåZ^äSv ÒÝe^îe_þe`NHväX.fZ¾åK&æcNe[FæL>âd–d™ÕdfvåYnækÆfcÖæmîf\nåovægÆäi†æp†ek^fo>çlfçvæfxŽgwVçugDŽæ{.grŽRj~g{VfyèèyèÎåƒFè‚Ngz6h~îç†fhÿ‡Nèj–è…¾hŒ¦hqÖgs~èŽfiæèé‘i…6ipÆç“&é”Vé’^ÙFÞ|FéŠvéš¶h›Þh–¾iFçœöiœîi ¦iÞ领é}êzVêˆÎh¦žh™žé§ê©vjNê¨~i¤Žé­&èŸ^j¢ê«–ê°öçªþꦶj£ë±Æê®ÖêØuë·né²6k´†ê¬^é¼Öë¹æéºfë½¦ë¶æë¾>ê°…ëÂìÀ6츖ëÆöê»ëµVìÃìÁ¶ìÅfìĶëËöëÉæìÌíÐÖlÍ…ì¿ÆëÍ–ìÑVíÎ&íÒ&ìÇ6íÖ¦ìÊFì׆mîÅìÕFíÿضíÞÖíÔN볎lµÞm¼VäNnå^nænnç~nèŽnéžnê®në¾nìÎníÞnîînïNn–P„Hïñ.ï'!ïó6o AïõÎZö¶÷†oõÆø¦úÖŽû†ŽüÖo÷žoúöoûž”ýžŒ‡Œ7ðþNo—WŒwðÇoÏZsˆ” ·p ’ ×ð × ÷ð¬ qq/q?qOq_qoq_ V`’(xèˆñ7‰G€PYV0…±q!ÿSðqpÝô¶ñÿsqWŒ&?‰˜ ð”òë¹r“8ò)—Ö%÷q“xò·ÿ&ïr$7 .? Eq— sòöò5ks¸ SÀñÙ€;€ðqs€(¿L=ØS2¿ÌòftVvøsVXôÃx„5GtÿxB/Vs(€B? E€ ·qs<ÿÏE'og‡0I§ôŸ°tLÿTóNÿôŸ€Hõ_tJGuUÿ EÐôàtEHõG˜õdodÿ(”P„ô}àó°öêÐvH!ÏvEgt(yö°vjçôb¥s“€ Ïöo÷@ljIu'DWw#¿uV'÷lÂHw{Ï vïsñnóxïóy¯‰g÷rÿ÷ÿ}ÿ‰(rH7÷€x–˜x“u_Ow5€€:ö„‡ŒùÈw}oŒsÿ‡„"7‰h”’' ‡y5_už°wDwwq/w)ovÿö"ŸùÃHøGyVÀy\×ùžPup—ù?ÿ—g? Zwr@Ÿú”§Ža/€IG‰MçôC7‰°‡ŒGg@Wù«z—¿u˜çúhÖ’'tjwz?ŒQ·qv÷Ÿï{·ú’x¹§û[÷õ}Xt¼/ržu—ûª‡~Ï Sùa=ïó£×¥ÊÑ€ô¯™€§zm}ÈXü©úÉhyXow˜'omÿ‰„?ö™Hø2ÿ‰Q§sÿÿs—8òÀ×vt‡}ÅHøQ߇°ý…§ 7Œ–WwHxž8ô ÷u*~–þ1—ñ_õ?‡ùd—ñRo–î'ts`F§~Èh~_/õÏ/xÙ?|oùiÏzÜßwÇuUt·Où‰ô?Eü+h𠃬þ¸ €$¬xp_D‰¦ÌHpâ#¬,’@bŽ(YqôXò¤Dƒ¬ 4'q_A‰#IòT(Ñ\ASõ,ʲྟgÒ,Z‘©‚Ц*zôDvN+=h ç?E¢nExô_Ò;™–EÕ Ø®X hm»ª¢‘l¥Žm[ð^vxîµÿ˜ªAv;ý2nìø1äÈ’'S®lù2æÌš7sîìù3èТG“.mú4êÔªW³níú5ìØ²gÓ®mû6îÜ[gÖ}ÔT7ðàÂ5‡ÚÀðäÊ—3.^Pò°­þ+àûk‡RµÏ|$ XVyc:ôŸwQ±.Ëü=üæ¾OD^@€ÿè/0¢~Iáן9! HÑ}ùEÄ ˜2FCá§+ öç^|jhX"‡_Aúñ€VúõUPERTÐqDÑ?fD Hú™Ã  þ¶!=¢€qÐEøÜ‡ =؉®N!éHdCù)“úu˜£H>j¹¡sÇÿXPü5e;Ð=HQRÐ"ì€ÈrS¶©A"&U![ê _—Ð…å¡UûÅ8Ÿ~X ¤HþÙ¡Un"U‰®É q{Z:œ9Š€eJWBõÖNi¥”R,ÆDê§a§éR:]ÅꥱÊZQHÎz+®‘™"€­¹úú+°Á ;,±Å{,²É*»,³Í:û,´ÑJ;-µÕZ{-¶Ùj»-·Ýzû-¸áŠ;.¹åš{.ºéª».»íºû.¼ñÊ,;õÚ{/¾ùê»/¿ýúû/À <0Á|0 +¼°½8ü0ÄK<1Å[l,ÕEÙÆ“uÙÇ W²Æ#Gv1Ê)«ÿ,qÆ‘ì²e/7&óÌ&ÛìñÉ+ë¼óÄ-;F3c@û%tYD}3ÎçÌ3Ó;û\3Ò’íÔÔTG-²Ò5½õÊO3ØY‹-uØI?Æ5Ú{=tÙf“}5Ìpÿ¼tÚuC¼v[U¥wO|“ä÷ßrÏ=vcvþ0ÞG µÛo7Žõã~~xâ[nÑåO-þ5á;îØä†Wnõælw^òéqGÞVèv¾wÛŸ{.;ê©3zëi¿Þwì³×¾úí´«Ž{î\ïÎSæ %ïVéy7¯8ð[öñ?oùõ¤GÏùöEMoüïÂï{øå›?øÙß7]=潟<ùèw=ñê;ÿý>üø›n;÷óc¯µýxÆ>Íevüë_üä—@Ï,ï ,È!è>.pþÓi"x•òŽƒÖ; ó<Ø>ÈŒ¡„&ý)Pƒ*Ô¡õ¤;-*R“ªÔ¥2µ©E=ªS£*Õ©RµªC…ªU³ªÕ­r5«Xí*XÃ*Ö±Þô«d=+ZÓzRV³ªµ­n}«SÙ ×¹Òµ®9•«]óª×½¢¯|ý+`éê×À¶°d¬a«X«"v±Ž}¬R ÙÉRÖ§’­,f3+ÓËj¶³žíëgC+Z—Ö# !ù,šc.D‡ 000QQQ__wd_mnnnMx¨kušwn‡xyˆxw—g|¤u} Y­_…°~ƒŒ{ƒ“h…¬fгm¶y†§rްz—¹¬n=šq]Šu~š~l•yxµTT¥Yb©zZ¸~L¹{X¯cb©k{¦xeºcg·hu´|k»r|Û}8än:ìz/çz7ñ}'Û[[Ô]aÎd^Í}FÉzVÛkMÛgUÖvKÖxUÇciÅksÆvgÊsx×dgÕmpÜwgÙxxæ^MãWVæeIädXéxJèwVäfeåopårjäxx†n‹‡v‡…{˜–m…—u‹š}”¤l€©w‰¥}‘¶z†É|„å€y˜…x¾‚I¶‚Y«‡g¯Œ­‘xµŒh³Œrµ‘r݃.׃:ô…è„(çˆ7î=óˆ'ñˆ5ò‘;É…FLjSÌ‘XÒ‰FØŽRÛ‘NÚ”YÍ’eÆwÔ†gÙƒtÕ•jÔ–wΤ}ߣiÙ§wëˆFë‡Wè–JéšVð‹Cñ–HðœVèƒhåƒ{ê™gè•wî \ð [ç¤gí©uî±|ð¦hð«p‡‡‡‡…•˜†„š†šœ’Œ•••ˆŠ¦ˆ–©‚š¹—‰¡š–ª›œ²‡ ¼“ ¯›¦¹¨€€¦†™¢“‡£š™º€Šºˆ”»•…¶—›ªŽ ©˜¦¬ž°¶š¨¥ œ½£Ž¸¦–¦¦§§¨¶§²¾¹§¦±¬¼´°®¶¶¶‚ŸÂ‡¢À˜­Å›±Ê£­Â¨¹Ì³»Ê±¿Ð¬ÀÖ·ÀÊ»ÇÕÈ„ˆÇ‹“Ë”™Ø…†ÙŒÚ–‹Ô––Ù¤ÞŸ¡Æ­™×¬„Ó©‘Õ²Ö¶˜Î©©É¬µÊº«É´¶Ö¤¥Ø½§Ø¶¸äƒƒå晊䙙ðŸŸê¢†ä£ší·ˆë»•奥躤巷ó¬¬ó··Ê½Ä˸ÛÀ§ÛǵëÁøÆ—êÆ§é̵éм÷Ë¥ñÀ¿øÒ¬øÕ³ÇÇÇÃÌ×ÊÑÚÛÈÆÕÎÓÛÛÜÆÓáÛÞáÜàååÅÅäÏÐç×ÈåÚÙôÇÆöØÅõ×ÕæßàèáÚäääëíñûíäøðéþþþÿÿ Ü·O »îÜ$(ðC‡û6œHÑ`ņ!^Üh‘£ÇAмxp¤É†%OŽL©$Ë–_ÂD™°¦Í›8sæ\wëÖ:@ƒ J´¨Ñ£H“*]Ê´©S£ÖX³Azâä5‹¶Œ]ÁЏ\‰u…K&F† UšIq-[”ocÆåè6n]»s7œŠÝ7k†¾‰¤'Ï;x¨±«ÏÕ+\¸^‘õXïZ´kòZÞe»yfgÏyI†®øfi˜ù Ô§ïÞ¹zúЕ ®œízŒßÅïÝ;ø¶™3g¯å×Ñ‘O<­V9\ç!¡G—þuaÁ~èèÑ›MûÜ>ÛøþùÿCwîœ8u_ãáZÇÑž¹ðý†÷;y\y}äÌOæ_)}?ç ¥³=Þ°ãÎ7ÞCH!d‘Gß"†8ú2È…z QÉO°Xp A•E“Uû8ã ‰Î!¢u,¶(`‹0Æ(ã>éô'ÝtÊùçÒ:zà€„s 7…ðQOd”‘4w”1Î`†ÔCO!jhbÁ•¯(‰\Ze¢U×AÄÎ\3£u/ž©&Œ5B×£\nÚ(§}¥¹O5ƒ¢fð1`!„,”AžãDÎ o¼ò -4Öcb6òDSæ>×8sÙcf3éšv®)*s:÷&]¥æÝÖYsˆeÿRM€òakŸäTÆ)³À3X5hnÍB&î#iŠcʳϖfžYO¨£ªÙ¦©<¦:Ú©¨X'Œ‹^ØG|XS5… ’Œ#j ¡E‚ BN°šë ˆÙpš AÌÎ8Ž…zXí¨ÓªjmhØŠ6ð\¬¶XO5‡ba5〓g$£j°‹éK©¥Íä©3òlé̽1Žsá!y âï¿ÒªdœqÖLíÁq%,c=^h®°ìƒ•&¸¸,—_²˜)—!ÃXn¢ÝXHÌg R‹lðÍ\w=šÎ,’#Î8°S Ãr@àÈ8†rÆS£ ¢e#˜Í5× £>ƒÿR'¢TÏhõGe´µ××â<—ÖQmÛ¢>å®LO=ãôÑ!‰$"Fjœ¡Æ!$:8ŒRÓXúèlšd¸ámUk³À¯½>ÃŒ7=Ö bk|ô¡‡B”G=ê`ñÅ$’‡/‹¾ÏÝyG;ÎÙâì3Ø!Õè1°¨§>Òê÷-ç:✱,û,Êšùð£8¼Ov ‡Ä,.@ý âÔ@ %ŠãH†>è=ÕÍ,[±K\ÿ…hŸC¢1DûÌP $‘Õ` 6ˆahC Ì ;2pÏq™RÖÑ#ÀíCe_„I5Äòµqq Í>Œø"%’¡ûøl@ŽXÁ †’‰bUñu©3™`[#ÉçFJ±‚3¹Ó ì±A|Ë à@„ö+ :˜A ¾€ÿy€¬Y O¦&îk‰¤‘$9†IÎôÒ4qÌ úZv!qÐÊ fTÄP1€68Á"΀OV}xW€ê‘hᛜ:Â<ÖdÀ }Q—» Ð/ùF ¶“-¡íîdH/€_è\ `ÿHœá }ðƒÊð¾s*iœ ×4½jTÏ…éœ$ì,éΉZTŽ¢«ŸÔ`…B²á _øÂ`1‹WpA Iºƒ’P…RXçš’G6Ä ™&-pjäáà*IÑ·0N|ë„ :³!bЍBƒR1œáJˆ ÈðPûŒD,p±Ì‹ b£¥ÄHµœ:p§yù)P{êË úP—™:BŒ@¤–‰iÀBô0 ’Â#w¨º  WŠ…WIÄ)±’ltfíZ/ùζ²Õ²ç«ÓȲˆ!‰ø‚†Q…+èáœ×ˆQ9Ü@ (©8Ó™ÿªÈ¦'‚lDëäVýôö?•EM9<¡TÐ@HQp‡6\bë‘3”@]Ü °À:¸A&|ÓD %Ócu»ÛÉVô¢<¥ào¯V§eDaèF‚`ƒ dÀ ˆA(fô,+ PÀ` °# `Â7½ Î1s@âGÜ@µ[‰ª7¸ì¼,h´µZDB ¨@Ädƒç  H@~1 T‘E" ¸ÔE…¥¸4K½ Æg£py×+µvDÃÎl<®4‰'0¡ÄÑPˆ`kPAżh±ü{%uà5Vf! 7_g웸.¤ÍªUØÿ¼> fZ‰¼#‚)„Fé E"‘ŽcðÂOHÇ äa € *ÐT 鸤#½&dbÒ=ÐAŽécôà¶CŠébäÁ“NµªWÍêV»ZÕ{yЬgMëZÛúÖ iœ:* ‚Ìã'pÇ$’ð‚p!I@A (& ô:@SG‹#1)eì†&Cž´ Ii½™Î4CïœÁ­—ˆìyð Er_”X Î àâJûðFºÐ H ”ˆ‚3¼ê utB:SÈSˆÉbuó1œä ‹{ÜtÚÇ% U˜:ã5¨B(vÁ„3XÁ ÿh±𤇋%‚ã’àE6"ý ü!«ÏQˆz{t2•GyKqÍ{#F>rfiôåHÀB!%“‡…À± ,œ h´Ñ·õ½À…:^aTÀ£’è/F! )Ð2žâ8"ÀáóŸÃ¬×vƃÕYôæôÝ$IÇ‘ìÐ #•éá g$, õaà’ —€€0rïJ¨ÃW–$ÑHòÂ,S—ÙqáŒÙ‹Ÿ—ˆHjd……*$d0.̈ ÉSÞÅë˜-É–ÌùáÝDѺŒ";£›ŽõüÑgzx:/FŒ·7,àwØòëaÇE%p F¨ínGÙÿ±&|6QíX Y$ßSïwö+ù‰d‹Ö!Ø¿\½ʇMD O°ÔE1OpØ ´)Dй =`åQÿ2õ`2£¤Ákå~"!-ò þµ…àDeP´ 7Pb6À 0 ³0 ¿  ’U'pDð-Pb3CÐ7ug~ ñ{šRŒ„4zCt \ÍWz7xÄ'#ØPw€ ØÐ$Ð"ðÑÐ; @ð@1³ð 9ð'Ð-ÐÆÕ€'çd4Ò…4¹µ3–²"¼”|P8…¨…ÂExÿe€ a e= “ÿ°¼p2¨¹×k& NÐb2AÐRÀ7ÛS h‡˜ÒH™BFãˆéÅŠó|£bˆˆ¸WȈ  ¼€pL Q‰%â ‘Ps:0_ô• ûð->sEHxÇw4ÂSªøOXg~H8°(#M÷tŠxÖ°…eàGPKà6@ Üä ' ´ †Oð.Ð:020¾ÐD D×Ćqi’)(ã)¨(*¤·aÕn®ˆqçƒ ±P ùw&´Àqà)HP+()Dà%Æ%À ¹=Ð%6>è†?0„ûgBó-ePL¢s,Ñ zJ—§ÿˆ¡¡r`³p&îp%¸µ4´€0‹ò°`2'’7‘ D€p-ð>ðX‰•Cp6},†À;¸t!Va'&³PgtÂW‡“qv™ï`&˜ d÷0ry½F /sš† ¡p; W>=ø@ F@× sà–À8¡R× „ ’w{ç„‚hitªxo\•÷–—1’{¯ð<Ë@E#{ø ¼p9N-àG@P…f a2/*?ÿ³Cå25d‰4d# ‡ K³n)A͉trö÷†逗3# P  ¨ø{!ù ÿ &Gà†D€›‰©˜Ö0S_…;ºsàðpÊHx2I“1b|ãÅ™lÙ–Óø–:9qùtiog²b—Ð o×"òp í P€p9D`’Y‰•Œé˜ÖQ'9¢"Óy,‚~¡~úùŸ­˜¢ ù™'Á“>9‚}Eƒ°p RP£€[t@̰¸ Àð Ï séP€ŒÀ™À)Y Y©‰D ÐàP !6d“0Í(,0²³—©Èןþ¹¢(*¦ÂÄ9‚üU  " G ,ò ù¤jБP/8Œd 8 ñ äC°ƒ.€pA(„]9|éw)•ÿ!¢qyð(^MhacJY,ê[Ñ(ÐFRa6 ™˜'ó+°ÌÀ ip8 †Lð;0&yG~÷vbØóU¡xðxFh,x˜‡ qv>©¨ðìV©–ª¢dš¬˜š©ßsømæe57&rê a gPßÔ ˜÷]H|#“ €É)A ¹¨DЀ7•j'ß*|—4oËx¬Êº¬—ÊŸ`Zn„¸ÏjÑzyO "r =ºbJÜß…œG šx?j  õP¡žÅ4¨&¾8¯Z`!‡qöНù*…Èj²¯Ø¯Ñ©±ð©‘@WÌ iÿÀ ‘—v‹¨p0Rmçƒ4ÐЃAð=&‚1r†Á ZÀ}s!¹¤– ùœÌw²(»²jäÛço °;Û¨cv@M)¦Á¨à.ðM),‚ º ¡QðUIŒp $hƲ?K7‘v%þ”¨°‹RëǬ﷯й©×¸ñ£´ ‘ÙUðp p` v ?º¦%€ö¢ 1 Œ`.pÈ :p¡Š94`³É´ Q–&Ò%¥oÓeâsVÛ~Ž›µ)›“\»&À: êÐ!“`"ÊP¸˜ î`@£p·ê£@«=p™ bÿBw30<Ðp@<° Äç1•r)±PEvÐb“ °¼šŠµ¨¿ûkwó ÆÚ"ñê¯ðX°½’ðaÙ• % ÎÖ²àUÑ€p §"ñ åWܱ /Q,WR.ˆðh þh“‚§µk©ÂEvg¿’! j¯6 {6i›–· bFLÐ éÐQP•i•P9Ѐ;òÈ & åÛg¼@5ðj¬¦ Ÿ†i=0¸Ê@œstkkf|ÆhœÆ³ÖöCÇ CM‹†ËkÍK2["ÊàÎÀ Õ{½½÷6b:p-ð|[Ñ05ÿ` ß`j`ã,“ò¾fÒ©êÀ Ž0 0¦¡¤÷À¿­ÊÒ8¼a•#z%•à×LÀQÐ,[ÒK "À?yº/X6PÈÿ  U9&G b@Ha°@U«&ò’ ™[^Ëqè9’砤ܿŒ[dÑɦ¬,¨ì¨0â1Ê—¯°è¼© "+›=@Ë”Ò9 º@ÿÿÀ {(µGþLU…ê𘠑c’£Ñe=«Ü]¼ûýÇÝ¢¢~[ò Xº,b²WÒÒÊðÚÕѦIà Æ@" úBfb2â…™‹›¬“¿PžÂRŽâ2ÚU¸&Xþáh&câåpò¬ÒÿÀc~ §@§€f®ûðpï’&&ƒ7f&Bsz>åy¾Â¡.3,-.n"0žäb’ ”àË.Òø| ›ÕÀ\° À´Cv222Dàù)8L^â¢~âœÍÜÍQ¡-#Öm†}Õ W&Z‚‡œ¢6P%Òÿà‹pÏ@ ¨€)6w [  –ñ ›¹4Ír,V±”8·™=4?tìÈþäüìÂTê-Bà×à´W" »=/"ÙP/HQ`Ï𠟰 ³ô€#€b@§j€7`èãåïcÄ«äì.òÜu®ï£nò*žòηì-rêÎ0 ÑÖb/ÿö|ÇÂÝDÐ…9À6° 9ÞþspÌW°Äp+¢àqéhÇ“")Ãbó'c"î  ݇wŽçÆ^ì*ŸIünž] Ñ!þ*ùÂ`ΠÏoè€Æ Íy JÐù€bàcõçfâM<„Gp/aøŽP@ ½¸ùnç‡ÿ‡‰Ï^,¯4Gö¼Ðd)KIžd’7ìpÀœàc  ÷Mb÷xO2z¿ÌP¾XY Ñ ùÛ7 VïÜÄ›õý½øÖØøÖáò0 Ò¦¹4¯êGÀ‡áÈꛂd0ôEô¡ ô./½h Äà ²;Ù .PSÙ'ÿÐ_JûÚŒûajûª-6¯pÑ U'X™è:È9)ÍN`\H ¯ñ/F´`Ä n×¢™1㈋ûêºÑL¡Âtÿ$N¤XÑâEŠî0nähQcG?†$9qdÉ’'Qv|˜îáK˜/¯!Bäȵ}ñfÁšåî¥Ë‡õœùa£„%$9cê g½AføêÃGϰS´þš÷2Ûµ¡Lã¨AÃô×nÜP·Ï]”Ü~®LI·®]*ñ^Ô»×£ß-cV˜©Î‡`:VX/ñ‘lò¢Á€ÇW 5röýºÿñdR¦RêÍ,²÷ƾ¿ƒ÷Nü·EÁŒa‚•§01N¤i‰E‡Í .9w:nP!Ù ú\/[4®åÑüA¤¹¼2 Æçµ¯¯µ7z4ç}<£ÿ¿4IÀ ”¨¸½’Sî!渃n0Òj:‚ rÀN;ééãŽ?œñ£ DìkªgäQ‡–®ûá‡#L[‘‡8Œ°©´ó®éj4ÿAЯñêÑ®4PÁ÷1¬ÄÄœY,º j"B‡lpa²r0 µzð(ƒ>ö(cš}ÀŠFž_xQÄ Pöœ‰¦½kT›±Èˆ|(HºðDIÏ» ä3$"‹«©!|É™ÿp¡… jaÅÉvp'1<îØ£?œÉg¨hœá…"`b ^a‡(›œLµE:%R¨·—|ÊñÏhÍ+G‡„¨H˜¾ºfIÆH‹ÆÉ Vbˆb]H"JF”¡é?hrfT‰XâIñLuÞ¼‰¨D‰x†W—øyȯWÜgVvýÄÕVŽåu^Ç„RuÅBþâFÉE‡'"©É)i©mO—%P€P\HXŠš²©'² "û!r×ýç\¼ÒÕQcáåHdàÞÕµ±yS&RZV4Œʾ¢î‘ˆ0Ëæ‰YÌá$X&¾§lfª¦Œ'ò˜.eu÷éM>ÎÿŸKçj¬³Özk®»Îúº~ùeÅzX±…š‚`B‘x)ó—²Ó©é—(žA "0`F~9æêe‚è뚸ñ:k…¨V|qÆwüqÈ#—|rÊ+·ürÌ3×\qŠäUY¹z¥=ºb#Î~T‡G"QL5§öqÆfUHâ $ˆ “h¢‘xy"–óˆ¤7†É.·Yøã}l7êåíÜõsz_(¬#‚0Á†GmÁ(ÔYOB# ±f‹K@‚ ,¢)7ũƈŠkÒ”YÖY°ÜćÏS#Ò‰Çæˆd%#ç g(õ¨Šw+A ¦¤ƒGý‚wÓ Âú0=$ê-ÈDÿ,€á¦zÔ#FÀ‘õ¤'¤Ïm –«Ü²¥‘äUý[—Çb¸’ò%€<i,™AˆÎ¸Û$zЂ(¡Dq†P”Tˆ!à(ÖMÌöÖñAðÃ8Æq<ä@°PÇ,,P x´Pi0L ÖECá­€PPuXÀçýt‡j¢BÆDA‰LL ÆqgLá+ÂFc"s °, A †ˆ‚0@+T£ 帒;ùkãÈv85© È€z$Sv³?¾Î6¨™Í ¹CÒ\-’ÛâÄH¯‘Îf€¶Ål’…"¥þ@ùB Æ…/!‰+ÿbÍÿœVyd%ã&yd#h“†fé$‰)Š D±lvÅæi(x8ÄÀODÁG0#ceô£™7DDz¹FƒŠ²šÚ4CÑÅÍnúj1¤q"S¤p ¡ƒÎ÷ˆP¬ âAƒ¾|Ȱˆj @ ~ñˆEE€“1IRÌáÆãý/V !L­:G:úg•Ÿ0}hžhüj"XÂh „!à¡ΙN¢‚P, . Q‰rÆ8 qÕ#ð‚ ”ÀL_âÄhðÂöh`¨éIäŪ”£ZâœÖlˆyA=ÎPSv$Í8ã11Mbl6=¬`ØÏ8œ˜ ÿpÙdE6ãÅ‚PE’Ìv°¨ô32QRcúamFVçZÚ M2W¥Õµx°=è4iëS¾ú'¯ÈóáÄ;gH´ÎøC{ê‘Ò!!Þ©F’®Vɲ¨½œ IÃÄ¢õ`mÓR&L:ÕœˆØCÀ©Z[ë´âU$¡²­+nmKÐ>Õ1•ÎCY7ÃT"î·0ÀDÔe‘«\æ~¯¸í¹ÉŠpB]¢@g‘Gð¨®Ã]³~óÀù@-FfûVÆ0¡¢üß­> ß…æ•x¬oD“¤Á>ä0 ‰Œ3«XÆB³Ù.ßÄ¢kTö²™Ý¬/iì PˆÀR-L*jS{Xÿš³ÝðWÃWqL¡îmímM)báôоß$”c65-…¼©bB`1ˆ©~o(á²X¢´ªÁi58J7Hß2ÏÚ©$¹™æ]\¼ŒGµ8µxí¥rN­LÀ½&Z¨e¥DK¼ïŠèІ5ªQqpÇ)I­‰î^W13HˆW¢rP¿û©—0}™OúlÃhoÃw|ï¡-ߟvŒÑ[~t’ŘDz'b"“+ SM:2ÀkBãúäVkXÊѤv­4k âË}4¯!êëB Æ×Æ6v:"=˜¢ÙlÍDȇrp 4~2޲ ôEÍjýU¹Þ1Ü­[r½—~ïzËÿ½µÏ¼0«»W–ûÜ1)ÚM8ÍnƘÑÀ?àjÞQ”q®¦¼1îñ\Ñ·¼ÚVt_n_‚³’Ø¿0ö?;ý20x…:RñœšµÖ·ñ@¬ój_ü@ª|ãÏ•÷o¦¼›)×£½$ÄŸû¶®0m&Â+ à¢1ÿx‡-Þ»aÙîÜ$Š»íÆ­}M]®FÏÓ|ãÅöi2}éÞVÈ<¨®UUÙ£8c ÖÛ‘®;{ £lÙý,믣§oµp] ÏÃ;óíÝö¶Üø:%ñ¢&˜%‚²‘ ]#Ø ÷Kfþ \Ü<çnü°“ÃÞxǯ‹‡2lgûxݺÝÞQfÿ»_õhyèm¾14ytŠV"7©8惙œ_ñ’ÀÚ…dçzý×ÞA»×­’Woìïªd[‡|Ûï½ÒY üÏ ?ÄÝ’ŽK…0E9׈B˜À¶â”ñ“•«ÃìãkµPÚ¾%›<¸¿’+(Û=Êã5ôSÌËÍ«:Èð<ÐӬѓ:t;Œc°{À‡èÛ?O";&‹ï;´a¯ïcÀ‘?äÑ>’S²Žc ó‹‰A)½Ñ »}°»pÁ;'Ñ»é8‚>"Œ ¯Ôš<7"´ÿ»Ä@ƒ¶í{A{«ƒb@œAðƒ;ß;”¼Û#ºs:›€ºT!,ÂÁ8¨0ÿ<´ô:ÆCVƒÂ“B?ã)+´‚Ú)¤»ÂÉ‹À0é¼Ï = ¢»•k9ÂZÒc Àú@{¸‡í‹Á¼ˆ2ê´ “½+4aAÄêÑCU›>Ýû.Œ?嚺åÛAºS8ü·ä‹¿T\¦°©üÛ½ä 'ÌÃꋵ¤µžËÃNd ]ÄBWÙ­¡›šª9¯é ø…«ùÁQFiœF¬‰›«á…P†®Q†¶©ÆÁ9œc›æØr,Gs(|& ¸= ½Õ´ÐÀÐP„£åPÖ¬KQ:¼ŒÌ=žÍ8~ÌMÍdÑ•GîŒQ ½·¥ìÏÕúÏØ¼¾Q +PË\O»‚N…;³¤¶ä1ÒûLÒªìÎ*TO·zAõŒÃÿ÷ÐtB ÜPÜËÚ£ÍMä¶Ò‹–tÉ0åÁ#┡ôC&Û3áYN¤&Aý>ëŒÎ6<Ϧ,¥6uÏlÑ«œP%ýL•¤BÝLÀÛÃÄܤR’ KÅìSoSü¿¤ÃL¿ÔLÕ*º^D‰óJ%}{TR‰ZµÕKÅM“SUyãÔþKL"å?Y½LZÝSº»ÕþÀÔë,ºäá0@ÕOú ÅB/Q혉VºV¤cU|Õ“<_` .à†`6Ý Öà vàöà V`¶Þ ¦ß†ß&á ¶àÆà–à†áaþ`¶a®a¾aÖá¦ááâ æá"Îá#Fb"6â%â6áîß!fb*®b+–ß(Þß)¾b)Þa(Na‘Í^-~b,&ã16ãÿ.öá$.c/fc5vb4>ã7†ã9Vâ&þâ8Nà;vã:Æã6Nã5ä@&/¶-dC>dDNdEÞœÞb;æb9îc>ÞãIdÚ•dA¦cLŽdJÎäN¾dKÖãG†dPÖäP.eRFåQöã?VeVÞdO^åWþdQ–åXžeZvåJ6e^NåZÞe[¾å`Öe`Æe_VáfîelÎg…hqÖg„Nèƒ6hÿ†n舖èy¦èоfÞhŽ.h‹fàîæŒ&hþèvè“Æç‘é‰îç•.鎖gi™Ni•~éš¶éhš^hžF陯è–~h’ÎiÝíiŸj“Öi¢fi¥†è§†jœNê‹¾éª¶ê Æê¬ê«vé®nj§þê¥vXv&k{žj‡k£ž×³Nk©þi­6k¤Fkº®k»ë±fk –k®Þj¯†ë¿ökµ¦jÁÎkçìµ>lÖ]1NlØ=ŽDˆlÉžlÊ®l˾lÌÎlÍÞlÎîlÏþlÐmÑmÒ.mÓ>íȾˆDÈ‘Õfm×6Ö†í×&ئí­mÁíÜžmÿÑmÿðíßîÞîá¾mÞîíãþm\!n¿`î½pîç6nÙNnȦîêžnÛ¶îã SÿàîîÎïþðoð.oó.\ôNoõ^oöno÷~oøŽoùžoú®ï•h€VؘGè üÖo‰p(€œý‡V8…éoÿ‡S(ðh݇Øîoÿ‡tÈïý¶‹ Ÿˆøˆþ†î‹HpWùp‰xð ¥ /p‰¸pÇ! /q—§‹DÈo`ñÖ6qÚªq‰SøoW€€(ðt€ ï!w؇S֦òVw8òV˜rºp„‡òþþpÿ&/Ít(€&ŸˆD€ˆèït ¾)oíw‡8-çò•ðr0ÿ8Wñ2?󕀈óCGr.‡s9_‰Dó óDˆsGØóHLjGOóKw(67ð,ß"ÿ‡Dðt€u,u)§r¹ô(uS_s”àq‰€ˆuü¾õ$'‰-§õ8‡r2_—¥:ߘ&¯«˜õÒ´õ"_íßõ"ïõ¸tgö5/v”(€ÇrX_vfÇn—ˆ57tStèñK—ö½P÷tÿaö½ˆuÿsG`p‰>q÷Éï|—ñ9G Z‡r\gõW×ðÕæôtOõçwÿºö+W÷Vx@ø”sUß÷#?K§ >·p$ßxyGE/€-çð?òv?w»¸ò«Aòyÿx…¿÷×wy§OwgrO·øq§‹5ïowPu„úšçôuYv’ÿsC߇)÷ùßö2/ò‡ïxùs”8…u¯!r«ßwØâzh ,'pYvŽuµß ©ßxN÷ {Çó[Ï÷ÖõûþóGÿioñ•XsO÷#×m_‰¹uY¿û—_ù €¾§vÈï´¿{Q'|­'‰'ÇJCçpÅLjÌ_ñüVw ?ò|ôünsx!}&O‡V òͯ÷*õ&?rgÏû}/p{ïôÿÿûãÁu@—s$¯yyçv$§ýü^ü[×ïã×}šÝçvãó¨~”sOtpo…èßë÷‰Hù‰Hó _vÈøe¯“S°w¿Ðþ?t‰Ør—ß“Ÿìÿv‡e§Ü>)õ©¿ï:ˆ} ´ú÷¯Õ@ƒ 2lèî”ÂDt7Ð]ÃŒ ÷%꘨  @ÔhÒ‘ÇDîR¦;˜ðdJ…î š¬ió&Μ:wòìéó'РB‡-jô(Ò¤J—2mêô)Ô¨R§R­jõ*Ö¬Z·ríêõ+ذbÇ’-kö,Z¦1þs$2-ܸr§:ÐòŸs÷òíK´îݼ àÿÈ`·§¦IXÈÄ ì\øðZ‹'¶- Ñb+•ý’.=´îäô`µH² P @ kÙéêæð¯õëÚ­8:@tíD®W·.{´éèÒsò–-ûŸkƒ«±ÀûÔbÙk×…˜7]ö«÷Õnm@«Õé†C®=ý>þ“v æeÿVðq'[wÖÉ–ØmmÁg^z ðšr­í³šuõÑ”†ùÆŸ^é]Ç`bîäeœoí€y¸ã¡^Ê©¸šêé%Psûexãt6ø‹²Æ Œ«Y”›]Õe×#qÿ¬è`’Fž2Ü]8JIZ:‰Œv Eÿœ2PIÿ$Ð@wmY@K彤%—af¥A!´tSÊ9gMuÅI'žyuŠhzúù'  :(¡…z(¢‰*º(£:ú(¤‘J:)¥•Zz)¦™jº)§zú)¨¡Š:*©¥šz*ª©ªº*«­ºú*¬±Ê:ëUîØz+®¹êº+¯½úú+°Á ;,±Å{,²É*»,³¶ð,´ÑJ;-µÕZ{m,A±UÔ¶Du+Ô·à®¶ã u-ºéªkm¶@‘ëîQïú$ï¼æÚëí¹ëê»/»åÞ‹/·ñþ;½<|¿ +l@»?¼ÓÃ:EŒÓÄ,nÀA-¼ñº ×{±¿g,2ÉÅ1ÊØ†ÿ\²É <2Ëðjœ2ÍÒzÜSÅ7ålÓÎ&õì3È2ǼSÍE?{³Á/ÃܲËK3½²OF4ÄJý±ÓB_s¾R§LµÄV7½5×Yký4O^Ó vN?kävFp3$÷ÜA;lwNj 5Úgóý÷Ýx'=³Þ³m±àƒ“­øØ‹‡Mxá ®³Ø}cíxÛ•ûvä Oγæ›nöå[žwç’>:戓^öëŒGzŸ×D÷B¸Ë”xձ˾:ê´ïk;м?޺릟þ{TºWd|æÐS.=èÔß^kè¥/Ï<ëÊ‹Þ=ð81>ùå›>úé«¿¾úý$ïý÷°#_½ïÇÿÿÄ>þù믿ûÓ×oÿöz7?úÁO'û; Ø?P{ñ“_¾›$°‚D߯g= ƒ „àmrÁ^0ƒÅû_ô:xÂrÏ;!! h·eÏ…6¼a q(Àûۇø›aÜjÂæ°ˆF” O|¨Äö½/‚)dáØD"Šp‰V,"Ä#>Š]”"{rÅ1‚!‹uÛà ÁF*"|I$£͘»-F1„mÔaÙh8ÆqŠzô#ï8Ä?®ñ…|T¢w‡F¢ƒt#$ xH&òy‹ b#ýçÅ/²!“¤¤#ÈPr‘”yŒdN>ÙÃJ*‰Ž‚,¥)ÿ9ÙÉ4ŠQ•0d¥óZyÉ3fÒƒ›Ô¤OlyËXÊ•°¦‹)ʦäÒyÍt%1£YHcžò)Ïì¥/ÕHËd"“›ÓÌÉÂ)Îq’³œæ<':Ó©Îu²³î|'<ã)ÏyÒ³žö”§4rÏ}ò³Ÿþü'@*Ц3Ÿ !(BªÐ…2´¡ 5èB*щR´¢%(DrÑr´£íhF òÑ‘’´¤&ÝgHÿqÒ•²´¥.M©Kc*Ó™V¦4½)NsêO›ê´§>ý©:y Ô¡µ§B-*R“ÚÒ£*µ©N©>Ÿ*Õ©Ö4ªT½*VÊÔ¬rµ«õܪWÃ*Öu‚u¬f=k8S!ù,œd&C‡ 000PPP_]konoMx¨kwšvm‹xzˆxw—g|¤u} Y­_…°~ƒŒ{ƒ“h…¬fгm¶y†¨rްz—¹ª_;™VUœ[f“p^Šu~š~l•zx³WU§\c¨y[¸}K¹|X©k{¨uh¥wwºfj·hu´|k»r|Øz3àyän:ì|(çz7ñ}&ÙZZÔ]aÎd^Ê~FÉzVÛkMÛgU×vKÖxUÇdiÅksÆvgËrxØdgÕmpÝvhÙxxæ^MãWVæeIädXéwJèwVãfeåopårjäxx†n‹†wˆ…{˜–m…—u‹š}”¤l€©w‰¥}‘¶z†Æ{„Ô}‚å€y˜…x¾‚IµƒX«‡g®‹­‘x¶Œg²Œrµ‘r݃.׃9ô…ç„(å‡7ï•?ó‰'ñˆ5ò‘;É…FȈRÌ‘XÒˆFØŽRÛ‘NÚ”XÍ’eÜyÔ†gÙƒtÖ•i×–xΤ}ߣiÙ¦wì‰Gë‡Wè—Jê›Vð‹Cñ–GðVèƒhå„zê™fè•wí [ñ [é¥gíªuí±|ð¦hð«p‡‡‡‡…–—†ˆ›…šœ’Œ•••ˆŠ¦ˆ–©‚š¹—‰¡š–ªœœ²‡ ¼›¥¹¨€€¦†™¢•‰¤›—º€Œºˆ”»•…ªŽ ©˜¦¬ž°¶š¨½£Ž¸¦–§§§§¨¶§²¾¹§¦±¬¼´°®¶¶¶€žÁ‡¢À˜­Å±Ç£­Â©¹Ì³»É±¿Ð½ÀÄ»ÈÕÉ…‰ÈŒ”È‘˜Ø†‡ÙŒÚ–‹Ô––Ù£Ö¡Å­™×¬„Ó©‘Õ²Ö¶˜Í©¨É¬µÊº«É³¶Ö¡£×¼§Ù·ºä„ƒå瘊噙襆䠛췈뻕奥躤巷ñ¶µÈ¼Ã˸ÜÁ¨ÛȶëÁøÇ—êÆ§é̵éлõͦñÀ¿÷ЪõÕ·ÇÇÇÃÌ×ÉÑÚÜÅÃÕÎÓÜÒÉÛÛÛÜÞáÞàâåÄÅäÏÐç×ÉåÚÙóÅÅ÷ÚÆ÷ÚÚæßàæáÛýáÆ÷éÜäääíïñëðõûíäöñíþþþÿÙ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹ÿýÓÇq F}åqŒ÷-A}S~äÈ’Ê—,7r|I“¦Ëš8sÖ¼©³gNž>ƒ¾*T(Ñ¢>"í©tiGÙ¥ãF-·o†úð9„h7¥,[ê”W ZµwKÿ5Mk“mеnU«–®Î¹tñ•©oÝTqŠŠmStÍ™?Y·Ñœ™dÎ~КInVo©^¶—ÓfÖl÷ggœ›-Þ¨q_ÌôâÅ#çMœ7råÄ•SI_¿}*Mç¬7oïyôœŽ^<|hqãÇ£&W¾¼îg”óÑ»§ïÞ½xâèyk-î^ì|ýȉÿ''NÜÌÓöÆ›×ï_¿õ)çaÃ6¯(ôä÷‡FºïòþþÑÅ‘9,ÅsH1ìp³ "È“ÆfÂÍ!|„ƒU"òăHÔDà;“I&’ˆúTc„I4SMX,²H`‹0Æ(£>þלsɘÔ:6FcXÓrH¤Øcœ‘È4|¤OàpŽ!‰ D£<’]óNd+VÓŒYI xM–3²ôb™hÂXcŽ<6×ã]mÚ5 ‹Ô(’K‚ä}bd8Ó¼aÊ,í`5MXæ€ K’éƒe3'&ñŽ> ®X¦ª%—aÙÌ; 6lŒà˜ª† ›lšËSÍBëì³l:£<Æšúj°èC'“´øaˆÍˆ–—“Y£«Qjcl<÷¢™oO-Âùé¿þ’ì–À¤~Ž<÷t3Mµu< 8‰¢†#ÚkY×HÌâ5ÕTónŒ÷¢È€Pv\æÇ:1Æhý÷¦g#‹*-‹÷¸*o<ò€ ‡0ÂH|´¡FŠø|µÒ0nL£ÛlÇÈ4NOËD5À£M uÕ'ßÿ# «9ÇC!üˆá} A{ÈsÎbhñ#MÚ‹2ÐB' ÎËß胕"ÓôyhÜrç×t~u#‡÷gzï5[Ók*8^ÿqÆhbˆaDØÐB SÜr^ÌÂŽ"gm&KKfq™A|èà†ðˆÚ¤ël‹"¯ÞYëmñÍVy„³­±©"™|7·±E6à Ic(Âñ4É묺ì’Yæç´3V”âdP'{j2Èöu7“ |ªsàRü¡Ehƒ#‰°]¦a˜ÃLÃc€Ä$ÞP†¬ IJáÎ0ºQyiR”Rš’¦xµ0SÔžó&>ö)TÄ‹ÿ2x@èÃHJÒ\ÀD¢- nGÅ?Diy%Z—°d=C\цXÌ¡‹Ⱥ×ùp‡e´ ù´u*4¤¡‹HÃÆp'”À<¨Á İä©OyXä_»†&#Ë‹aãò¼÷½6Ò‘E‰Á¾¡§4вtx@#Q‡0Aõ¬€':P#T]ØSVXÃY²Æ>°§n™Ú€^XÃ= áWØ@p2ÀP ˜Ã!ý2˜à„Mˆù<ø1¾lŒøâÿËyà1¾L >äAÌxγž÷Ìç>ëù) ´ MèBc¤1ç @,8 €–XB jð,!3èV*°èX ìý¥D–’±àl’#AB%=d22Ô±g„u¬OÆ%££´˜Â á‹úŠ@º"H P[„TÛ Q`âShÆK›qŽOð€(²VÁµD›?®­«uŠa³–ÛܼÍDHE Ðf$áX….œ †,€ý­@ú.F¬»•ØÅ5À\; K§Á ˆ†›m}GbƒŒî"HÖiä­9`L X°ƒRì2V7:±5lA\ÿ®@$ŒF;9<`·8Ç+*Šv`¢?Ø)*AsäßPÄ"ºáð‡ßK¥nxÅŠñW?öÜì=Y-ï>¨A ƒ˜DR. Dê#GŒ‰sT Ú“8ãV^4yÉ, VÅ£.µ!Ùî5AY‹ž´,d (À-hˆŠ°Ý¿èìº8\‰µ#]2ÐHlé”vPšê°éäÆîÝö~GP'²ÕÚ–vÀ¢¯x®>ÑA4 ‚Tõ…N³0 ¤à ¹P χ9`AðõUCPFStµÇ÷%æC!BHºWwxwq"y7ušb h Ö` z€‚ð"Ðð=’ÀíÐ-³à ;(ð/ð–õ‚$´”Ž130‘ ‚Og‚$8…ïç#ô7#ƒ€ÖÀÔ€Cð ` ú° IP€—x‹&”/p"E0/@Ec/S~Jè%–¢‡l×~›W‚»GwV(uY(#[Ø…ú ‚a˜L° ×ÿæLÀj¨lXp<@\Å… ú€*£x&–C‹VTX…³6ˆ€Hˆ›Âq÷…z@ .ˆ&ÐP€%¿à+Í€›@ >Q/ÀE@5Ð ôFáPJàv&^ò.cò<÷2wòˆÙˆŠÜ¸· ˜€|eB ÿVìÀÒäXb0P_N`»€ ;ð?P_S`pCB¸|‰ 0¨‚¦âMgò(Ðw}Xо§ü2‚*av@0 eÂ!u îP “ˆƒ0ˆøÜ%põ˜S@ ›`×öAAÐ’-Y/‡’‡ãE¦"™ÿÒ.Ù„&7q~È{WØ=Ú¸Þ˜©0sâ#f·hÑ-îÐ"X²(æ 9fÇ 9ÐBCA ЀFP × 5y(IƒCdQ è(I·tŒ•ŠryŠtY—B±·ÐRÇi3’x¯°?Ê0 #Oè »;ÐJ/I BpMTF &Â+ñ²;ÉC®Â19"5Õ"og Ã~ ÙAÙ@Cùüs4²”3âÝR RÀ ÖØ+‘AQ ‘"„Fà˜^ù•Ô0P0%8„£Ýàmžx5‰1Ry¹‡w7š¦Ùç·ð ·p”ÅV&èð^ñ• ¼às-ÿòÆ Ðwm;@ŒF.Ù’a9–a!Þ¶53Q1r{AYL7—v™yþYl‘x9‘-ÒMu€° T`¤\ BwpË · ¿à Î pæ`}ð›&.).ù†Fð ÏÐM,a!+F¡¨+Â7 áÇ–ëwyêtÿé~§IߎÚ\Ä· < )”BÇÔm”`x‰) Ù7 î ‘BEà€0pmX2)#Ò(Cd±v,‘’p}²‚ÐYÅ¥¹7Ò|žFO2F ›P•î"-à˰ l :`ƒN=€"I7{Ɔ6øÄÿµž{àuJ({“=67‘ç€ Q°kQ¸¦¦˜£詟zN7ulž&]/Vp(‚¤ÛÀ¦ 7ÀJŸpv¯µ‘§.¸P•a24€ Vj€@A£¦ñ¹`‘×"f—0ql(…  ”7ª£Ïª/(Hª`ªf†UmP¡ú0 ùÅS«SðZ0R IÀo˜A0m  ò°žmU1ß”&“˜¬]`,ŠnÌ* Ñê¬Ô‰£¢ #s uJ mò° mÀËv ]Œh}Ù6-ç:<60ÏC  64…Xðs`> žYh.["C±0ByÐ_–Ѐd¹ð‡¹®½ÑK@ã Qh¬™¬ E°`º•ð^©ÿ• ”è |©žöRÐpmØfXÁ »Tï;¯0£”È+!å*‹ kÐÑø“dÛ²þ¶‚hûCôøf~6 J&fðjf¶0 36Nð æðS@˜ðe˜@;à}=€®AÀ»ðeÁ°»L¶ 6p~¶gÉàfgöX› b6wðg ah<ÜÃ>üÇöã°.Æà?1²ƒ–z£». BÉÀÍà «Ûº’ðºÆ6_<0Ð’µ%5pÅÀ yÐy0F“%Å»"sz¬ –`-³}Ð í¡¹—kǤy…ï1)‰B¦Jùo˜ÀÕ0NàS`) òMÿ "ðÉ·hûÿ *‰"IÐe Ed`=WÔ¹,ñô8M(³ÿ\Yc*ôBoš¹eK”L{L#T+#ì Où °Ë ð—½r®ˆùˆ¬%?°°`Z”ü»®I€OsôÌg@hr’}›@ ¦hKO¡å9 È€¬ŒÇyüÊÑ”CLžF¬)³Àp€Ä÷Èc² [j†ºÌ”ʼ Ð -pIs„$hP-x ¯?šÄå #©F#á@ù@ÎBiÎlú{>1’ñRµ‰&”€oÑΔ°ŸÍ` [$[eáJèJÉ ÏÆ` Ž©'T¤'c€ôbÐaÿ‘x—PÕÐ-2$cß@þÑÓËí*Q½×«Ñ­ Ò"CGЄú°J5øðÒÿŽI?¸SDHr=Åp“1‚•°“ /³”†0Î]Ô­>q Ê3ÒÎï< ñ|ŸÍ@Ï B® ýÀP€ÕY­Ït°rЋ%æ4ª…"Á;¤p ž¹0#F/Á!Ô® ÀÿKÔ‹a×3ò ÆÇ¯€9@3m­„pï`®I° ™@؆}ØÿP(ôÌi€“™9Õ!²(¢<ë–0%#$Q ñ©3À/Ý+ÝÛ²22 ”@ ³Ð<*b Aÿån·{"PÐpÛ¸m ðbPEŠ@ xpcy§%ÍÀ_ôÔ(¬¦Üã²ÓͲ¤½¹ÕC‚$Æ@¼ÐВͰ ­õ ³`èÛÁÀKÀÔi ;|`? CŠ‚à~\:>‚§1ÚÔ ­~Ǫˆ@ü "¾£ïp"úR»Ð ìàŽÛÑ ]ÉgÝð Å 1ö¹?2Ô.²Õ–Œõ4Ï-×sAq-àÀgÚiÒâ÷c1ž3^¬´ …}ØZ­ÒeÞ†+gÒ.A³“%)I]{>Òæœâå,Ú&>àTà!à'r — ÉèzÕ)‘p pÿp>Ô‘)êâ?Ü{`z1QâÐýß(~â—ιÖͬ­ƒMõ Ó¦"cM(‰N W­Ò Õ@ðeÐ^  eá pI1–ò("’— Äß ôæ˜.ìç+±éYT1HR•  ™ó"d…¿Â±SÙ% pÿè` ±®¤:IðR0ÄÝ+2,ëˆM9FÎí¿ýäÏ ÚÓ;›bç–ðiýõ_z÷(抻҆ÿ@´ «ò d Ž0 zÐS0 íÆ‹Lœ%QY"aâ.’ÁçÐÍîÞäN.ç°<ì ´éTžZ,qÏ…CÃÒ]}mÕ8°¸ÿÛÿWKðö°e `4Eå+²J>@I,5(ŒRp Ù ¶$?ç™^ìOŸ‹[®8Ö (ÏžÖÍ,_ä±uÀÌÀkP QW  ó/èó@¿.B¯˰»-yÇ íXÙ90 Oït­÷»dÔXxï¦&ù  ö¶ýŽÆVšPy Ð^ E!Ðð?¢0ñvŽºkÐÃÐ ‡k×À0pX;€ê`£"?òR¿ú¬/­ÈþïÙfÊë¦jÙ«Y¼GÛéë ­) ,pd ¤m0îåþUÍÃ]ÃÐqPÒ»›€Ë¦Å ¨oìñNý¡ú'øú±µ"Ûÿl<óŠ%êjêPÀj'¯òÐd3DÒÂp ÜÇkp 4î&t +°ÕÂÕp}ÁÅSÙúê3§ïßA„ .dˆ]Cˆ>”X±!E‹jäxcÇ„ $YRàµfÍÞ½KyÍäÀ‘« ÂS˜$ø´²e<@‡îé‹gHQɘå±Lrí42èôºÑ¦Ž>_9¢XÚ”£Š<’AZü86bY³ ѦU¸–mB·E¾¤[M¥@–Õè$™Äˆ‘)SxI‚"A&¼Íª3„¨´kŠ •w š/xßù bä¾w5hÔ Mc—>y»r¬þñ9¬Á·jcCŒÿû¶6ÛÛ¸cÏÝ[Ò®ë¼{“þMò¨Â†ƒV T fÐ,B²Ù•çh¡$H’¥Þ}ÐABX©åj™‘ž ·½ì÷îãoœOŸ-ïÞQªdÙÌ%ݘäùËLÀ›LØ!¥$š’g4þÄ4¢ÑÇ.hÞñe—F*˜ &Žá¬h:«æ)óòã+¾rKËű`IÆwãKÅì²N/áHjÆ» `xáÒ^ðΦØai=ü$fìi& hšÙå‘ p¢‰ ^I'‰ÎüÐ/ðTéöÒ"‰4㣑£75ŠSN“Âñšjªù¯Ç pïŠ(P–0ð‘ÿdüD¿šÑÌ¿š0 I¸ë𜓨L pGsØÜG ûØc³>PýgN²T]µNc]O©f¤)D"HÁ…‡((ùK±Fí,—&H ›P`H–Š¿®0ˆ!n…ÔSRÓÔ6ßcµ¢o% W\Xe57©Fó%#nÂ0I~0‚Áy§Mb‡”H`•[œPv0½®6¥¿°EˆT³^µÛöÆ¥MU‡6‹M‚̱øbŒ3ÖxcŽ/ì_|ñ{á¯!œhä‡]6ô…dsþòeŠ(DH` Pà_Œ±X™!~¸ø¯l:ÎX v’Vzi¦›vúi¨£–zjÿª«¶új¬³®úàÍ5ÀF ® “äAJZzJ1}jmF•–@¡‚ ØÈÀz'Z“ÀÖ “ÆÒ‡é4µµ bÄ/ÕN¯{K š$¦œrˆp0rÈpâœÍˆCjÀ¹Õ%&¨ *¬#ñ›i¨ö/B™üBÕgTŠ ï(éWüEÅç‹ø¢r7“¤½mµÙ„äÁH_@sˆ"1¤ ƒxa“X~!Qy Abë%0ŠÓ+8ÇqRgOaH}¨ý÷¦Õá'rÕaüŒg?ÇEÎf–øÁ LÀf€©òh "Š€„gtPš*YÖæk !à‡ÿ"ö°ƒJÀ⳨&ÚÑ#®¥°#òCàê§üOxÅóŸ’°èCYéøQv¡@–\KŠh†ªák„&yò@ž1iTg5à`¡>DaðËH‹|÷Bf$m‘¡›hX×$‡Ùa­`€yÍ+ˆú"™¼ž˜áD)É“ë’ØŒ!¡'sÉ× ú•DpîƒÍK´¨ÈVÅP’“ÜãÐøš‘è×ð—%~Áƒ7HZ 4!5¯ ~f?SÚƒ"2(„?€b 0H Mø’¥$C!!IEzIF^êî‹b,cÃöwF4âIO]«Žuª°“(yÕâQçŒÿ(êí!{zìÓ_ 1 CìAD„/$!$`Ñ$ýÁN=| ¿À­é¿#%ÍXÌ2:â£* =õ@M ˆP„=L/bÒ•½ÿüHÍ"š„]8¡yP'IH¢]4cd Y’SEdpKšý€YŸ1ÊÇž‹´dãöã“fÃ$Kaɼ¢á‡Á’ÇG¯Á)Âxg^» –<Žh„<-qZFè~`Ë’Ä..1Ç5F ÷µÐ…!IéÂHÚÒ•ºT¦'Uk$azÌ·ô¯†¿ILô´šAtFà,‚®Á˜iô§Mêwä‘ÇMqóBßÙÌCOæ(ÿC–¤JŸ1Ç;ÆÑÚP̤ðLéJ"L´¶Ô­bÕ]Œð9þéÓteŽ]OÂÇ a¯†èë_ XE)USÞÑ bÁÄ£#&Áš< d;*¶™£_eHZ¹¦qÍptí07So!Óx7íN’×Ф? êP ñ Í‹STºc5˜*Û§FUémF(D€ƒ*`µ$½ŽH‚´•U‘Nsay`·Â³­g9mlR[ÓÆñS11‘’£R¢jÁ0Äm¥§ÞNÝ HÍž£†k œîû­Ò Yénvi*]šg·ØÈÁ;®vWÕÖP™\%Éd«C%QÿcÓGbPo²«Z ¦ºÍÌ®v…£ËŒÏ¦ßX‹9f+|ØÊÅÝ5øp@†ð%“ÒŸíŨkÓ †4´F\ÞÑOßU"IÛ4µ:M¬¶.=íSf¾UÍ‘ë%1©™8÷Îk\£9ŒüÍkJ±Gon LÜ"ŒòÓ,š&hÒ6’Ë&åñ«ê3¸E_wqŽFäNcåÔ¼Ýp¹´I¦)(¡Ót!a( ¾Ó/Œ¼$œ€ÅœÂgz6^\p},— ÓºÍÆ³³/ð¼Ó(»m/·¨À+ΑŠWˆšÕÚšî/\cS«Ðº¬–¶Ví4Çš¤Ùvô¶ÇÀ1¹æBÿ|Ԉ×Ģ· È-n±3K×¹ì6•ÒÚJ¸3w F¥m.µñ}¿kÖÔ¦5¿ýƒGÔV¶f½ö¢ðõ™ã·àGŒƒ)f…‘ù¿øKUêîæ¶Ôâ3ŒuI¹æoÿ!Ý\n»Æ.þâT# á×(O5æ\%½„ÜéF·º FR£Õ~+³hÁ5ÏAï¼ìeýqÈOšö£—Ü$J—ÕÓ âvñH`*!Ñw-Lì ~èˆØÉk³OW´dí ýY¡›¬ñ6³¢¾ìÒÝkšÇ‘ÝÍ÷ZýgïsÔuoª1…'8a ó(¼Ñúö.gKiWKîØ.rS>Õ:vÿ;½¹HrmËý†ójúÓg"uªCõêl£ËMáßÖ£9ìHËV€aOû‰°ôö"¿÷Ï |öE±MÀߋ޲^k¹£¼S*ËÅ9„›„®•½ì¾«M}؈}M:¯'/áÂsÇc$3:îsµÞÛ=‘Ó¼Zi¿ÿ‘;€#3?Íx¿]«‹» ? @Ý;5Œ@µ¦á½TË?«Ü`$ÏZ“ˆ©µò¾Ž£»ã›ºª³¡’ë¶oÛ/µÁº½p>è @¸;‹ö±¸Ùs.Éc0yAüÃ>ÈÓ¾Ž{$¬7 ?“½“˜¤µJëµ’ ½¶ù»—Ðì`½Éü‹°¾[•ÎBâá1Ró"ÿ$$«2,À1ƒ« £Ù˜_°_š:ìC?¼˜±˜]ødà˜d`@£1†ñ.­yDHŒDIœDJ¬Äèz$Œ:„ª*t4¬ÀºAæÛ2ûëA‰3Àá´²8Žó¹BSµj+Aúa˜/jÂTa³¥[¹,9þÂ{‰IEö™§xS¼4!êƒ7Þé¸ ;g+­V4@ï+F”²ñƒµ›+<ΓÀ]äEËÀ Á5iùšû£ÆÜÓ¬³>CAãÀ!,­K\ÁÉk+„ —’bÃ1º¯ã™tÊš´É’JdzÈTã?‰”šZ³÷Kø‰G°4H‹}+㿟{Ê-CKŽìÊ츞”ÏÌ"µsFï+H¯TÅÆËÅCÿcµÅ;V\ÆË|»hÔŸ©ü¾ÙlÊÂ$̨t)ÆÈÿÚ`!RÓÉÄSÅŠãŒP0³òTÉc|§¡´ÍE¼ãÍÞ,L\Ư\Â4Câ<ÃîdNä\¶áOÙBYŒNŸË'êÔ®à³NÐ4̵ N…d7Ù›ŸÔôídÍ"dÎ¥4C%4JÜ3Å4œNS¬ÎÝLP€dË$ô²ŸCG=ÏxD)ükÆSG•ìË’œÆ®Ì¿RiE´°L^ Mô»ÎÞ|'·DÁÛ㸬ÔJͤK‘ËÜDEÈDCĬLþ܆±PΜ<M£´üѹû88™²ü½Yì¢ÈKÑ.R5[”F† LøŒOì´¼öPJ8ѬO&…ÎS“Cå|'!ÏÄ6@Rÿõ„<.%Rv$+0EÉΜR¹Ó€´Òi“5%ÐÑÌLÍQ+R¥Ó’³ÓŒb$¦bFá†â(Nb,¾b!¶b1^b0ãÿ&îà,.â1&ã'fá6Fã)â8®c;îb5.c=Þb:^ã!–c¤uã4†ã=æã<dB¾Ü>öcA¦ÞE6äD†d"þã;–ä3®dD¾dFÎd-¶äNžc/–׿äMdG>dPFåSŽdR.äTfåU–âXÖdOþä@ždJvåY¦åVnä].eLîe\fbæ_fc3¶åcöej¤Nj¥^j¦nj§~j¨^j…`U¡êª¾jT±ê¬ÆêúÐê®n¯Ž°k®ž±~³ž´Žµfk°.k³†k´v•¶f‹ºN‹»Æë·Þj¹Þë¯îkµìÀž sP•Â6lÄF•ÃVìÄ®ÅvlW‰lÉžlÊ®l˾lÌÎlÍÞlÎîlÏŽˆVh4!ˆ„ØíÑ>ˆH€Õh…SðÓží8×6U}ÐjÿÓ~í0Ñ&í±ðm„ Š0í¼fÙÖ"ä>Ü&îâm×>à^íÝémçÎíƒhn`Ñ~ˆê¶êçV+ï6€Sˆø×6î„AoõÖ‡S€êN«ÖïVvpïVÈoˆ„€í¶oÓþˆ„ùîs `F€Â6msÔ–‹ü¶j×f‡8ðŽ pÿ Ÿîopޏðo·p ïF@ðPpF¸ðHñoˆpý~íÿÖ‡õþF Ü(rÿ€Ù&rüÖïUéq8r$Wp7-Â&òÐÎrøÎˆpêû¶òÿÛ.ñøÙp4‰ð–"€*sŽÀrö¦jïîröþr‹èñç~s"7Üî°mÿ–r7çó†ôƒ0ï·ó´`t¸ñ27s³˜òØ.ñH¨íƒ€8t4íMßî ï8·o-wò(nªf˜ô%·mO ;ïoFo…Q7ñR‡ gòNwoèqñß~o_ÿ‡YˆüNp¯ïƒp¶èo‹yïJvVÏtÖætd¿THWo$ÏuD 17mv`rU/÷kwuƒpócn/qׇüwÛæGívöUAs8…F@oö–u—òw÷*·ï"ws¶ w_wuÿ¶ÀtÏòM·ê"ï;¯qаsë6uƒ(ïIwï‡øóaoõ"§r‹ ;s}ŽÇóŠmØÀt+÷ï3ïˆú^l/î”oˆœ§îpÑžðpqo§ðVÐïO šgñ 'sŒ‡wׯtE'vO-7q ïkGö@o÷–zŽàøÑmwskg´«ô±Gûy÷zŽws÷.ôVx{~Wº/ôßvó™'˜§u»wnšO‹¼gîv†ÛîiÔf7g•°>Ø8òzÇøÃFxáð*Ÿ‘z?r«–|ãŽnž&mÏGÌðžf‡ž.ìÔ‡ˆHèéÏ®}Û¿}ÜÏ}ÿÝß}Þï}ßÿ}à~á~â/~ã?~äO~å_~æo~ç~è¿ì§ˆ\~ë¿þÛWïÃxìï~ïßlíÏò“uRtyîƒ(oÔ'€Ö&îòFíé—üÙÆôÖ~xÁ?øïÏÿáWïªgt ðBF ÔG@ Bs‘ ðïáÀ‚­D:@€¾‚Œlµ¡¾*W²léò%̘2gÒ¬ió&Μ:wòä9!ЃÿÊŽhÁS§B`ç‘ÀÄSÿš¨²aÁ‡ª¶"hn£€{’-kö,Ú´j׺œhNåÂc Ò#Ev@Br¢X¸¦ùÿPA a´bëø1äÈ’'ÿs+X¨J„ÇBe·Ð£E‡H]¨w¨æ‘M Ú-êÐäVʲgÓ®MÙòÔÁªFÚ|õ#Av#þ¤øo7Çz/ì]œôÆ·¶§S¯n}¦9F)ÿbt—©Çÿs^ú©ó•Iƒ_™>üJF½[iWÙ |cvõ¯óïïÿNm xàN§€„ ƒ :ø „J8!…Zx!†j¸!‡zø!ˆ!Š8"‰%šx"Š)ª¸"‹-ºø"Œ1Ê8#5Úx#Ž9ê¸#=úø#A 9$‘Ey$’I*¹$“M:ùäˆìH9%•UZy%–Yj¹%—]zÿù%˜aŠ9&™ešy¦˜¨¹&›mºù&œq¶éÊYG¥e'Zxš¥çžwªÅ'Y€Î$'¡…Ê&}ú¹h2Úhž9:)¥sBé£e ÚÓ¦;uêi¦4U:꤉jêh¨œ¢z)«§âD*¬„š読Қ*OŸê¤+N¼¶+°oΪ*®¹ *¦É*zS°Í®9¬±Çî*mN¾ÚdíµÔþêl³Ð"«ì²áŠ{+¸äÚÄm·¶š;.±å¶«n´Ì¢ ¬·Ój{¶4å«ï½Ùº+Ó¼ôÂïÀöþûmÁÕJ0¬õ*ÜoMûÊ$ñÄó{0L 7œðÃwÌ1¾µº*¯Æ•:Ü«È#³ÿû®Ê+#\SÉ£ž²Å3Q ÓÍ8×\±Ç.Ål2È4÷,tЧ̲¨?—Z´Ñ;ëìôK9Gm±ÒK»ürËëf´Ö\¯%µK`³$öØG|õÇh£,Ù+µ­œÙgwí5Ös×-Óyë½7ß}ûý7àûÝOÓC½5Ý3msN‚;þ8äŽ~±áþ.Îxå…«ÝRä{ùä˜gNùæ‡Û}7ê0}¾:ë|‡Îó袗nùìš#S빯þzLoà uØq+^»ì5é~|ä¼?;ìÄúðл„<õ‚+?5ðÁ3ß{ö-½½oõánûí©§]þùÒ›>“øíë}½öÛ/ï|óè§ÿ/7ûî·¿÷ÂGŸøÿðÀµÝDû#ŸúÖ'À÷ÃÃÇ¿²u‚—«_ig?ÎE°zt›ÿØ@óð‚ó3^©÷A•ø®…¡ü°·¸ª,áHBfP%4DÞ ÃøÑ{Cìßè~x¼ ºð…B4¡ ¡HD*±uL !o¨Ãr1‹_âsF-ŽÑ"<£§ØCÒ1ŠmTã18“ бŽv¼#ó¨Ç=ò±~ü# )ÈA²†<$" Èf¬D‘Ž|$$#)ÉIR²’–¼##UrÉMr²“žü$()™É„²”¦<%*S)ÉQª²•®|%,eQÉÊXÒ²–¶¼e!g‰Ë]ò²—µÔ¥/ƒ)Ìav˜Ä<&2“iHc*³™Î|f™ ÍiR3˜Ò¬&6³Ëkj³›Þ,%7¿)ÎqV2œä<':iÎt²³~\§;ã)O:ÂsžöLç(!ù,e"B‡ 000PPP{XGiiivvvMx¨kušvnˆxzˆxw˜g|¤u} Y­_…°~ƒŒ{ƒ“h…¬fгm¶y†¨rްz—¹°_¯m6™`E‡t~š~l•yvºUW¡^g©vU·xF¹{X¯ab©k{¨uh¥ts¼di·hu´|k»r|ÅkÒw0ìz/çz7ñ}&Û[[Ô]aÎd^ËzEÉzVÛkMÜgV×vKÖxUÇdiÅktÆvgÊsyØdfÕmpÝvhÙwxãWVæeIädYéwJèwVäfeèopårjäxx†n‹ˆw‡…{˜–m…—u‹™}“¤l€©wˆ¥}‘¶z†É|„å€y˜…x½J´„X¬‡h­Š~­‘xµŒg²Œrµ‘rÉ?Þ+ׄ:ô„ç…'çˆ7ôˆ'ñˆ5ò‘;É…FȈRÌ‘XÓˆFÔŠUÛ‘NÙ”XÍ’eÜyÔ†gÙƒsÕ“i×–xØ¥uì‰Gë‡Wç–Jé›Vð‹Cñ–HðœVç…håƒ{ê™gè•wî [ð [é¤ií©tí±|ð§hð«pú´y‡‡‡‡…•˜ˆƒ›„šœ’Œ•••ˆŠ¦ˆ–©‚™¹—‰¢™–ªœœ²‡ ¼›¥¹¨€€¦…˜¢•‰¦š–¹€‹ºˆ”·•ƒ¿ŸŸªŽ ©˜¦¬ž°¶›¨½£Ž¸¦–§§§§¨¶§²¾¹¦¦±¬¼´°®¶¶¶€žÁˆ¢À˜­Å±Ç£­Â¨¹Ì´¼Ê±¿ÐºÇÔÈ„‰ÈŒ”Ê‘–؆‡ÙŒÛ•ŒÔ––Êš£Ï­Æ­˜×¬„Ö¤‘Õ²Ô´•Ω©É¬µËºªÉ´¶Õ¥£Ö¼¦Ø¹»äƒƒå瘊噙ꢆ㠜췈뺔ø¼‡å¦¦èº¤å··ò«¬óµµÈ¼ÃÈÁºÚÁ©ØÇ¸ëÁõÃ–êÆ§éÌ´éѼûË¡ñÀ¿øÑ«ùÖµÇÆÇÃÌ×ÊÒÚÚÆÆÕÎÓ×ÑËÛÛÛÇÔâÛÞâÞàâåÄÅäÏÐç×ÈåÚÙôÇÆõÙËõÖÖåßàçáÛõàÌõçØåääïïðïó÷õéåþñäþþþÿÿ鸮à? L˜PßÁ‡JÔ·¢E‰Zܸ±"Ç 9z IäÈ’(-žL™r%Ë’._’Œ‰r¡G†8srœH0$Å„2ÿÑ Ú‘(Ê¡F!"M*”iÈ¥L¡>ÍøsÝÂxêt^tø¢O†A¥ÖéT³"ѦU[4©Çª»¡Ûf(ZV«’C„ˆ›<ˆ^?bÄø’¬LÃ…Ù¶U|1KÇ£vUnÛ\iÚ´©Ûœ‘¡Ï‚qíù¯ß5kóºrý']5z‘7–=›vSÚÚ¾mtuÆ}÷îi >P¸Ã~ãÈùË7n\¾}Ð÷qGúÁ}ûÕ“G½_JߊÁ³ÿÍ­·mò0™ú–8.œDãéõ#7Î{éäö'Î{=q©I$<Í#N=5Ù&žZèÍtÞƒUO’7먣Í6 mC8дAJ,íx#4•óŽ2ÍH¤Œ2 ¡“ :­8 O8ê#Ï„9öècŽ<.(Y„Œ5hÒnè9Q<‚4)È{$ Å8²F[xˆ सb‹½(Ñ:ÉóNÊÜèã7†’G4?ÆùcE"I¤bF™”’É!„´ Í7Ü„‰¾äÑÆmpÃS9ò¼XÍ;ͤ9Q5/¾³¢2Õ¬Ù¤!x§œ¤¦HXI9xçx«²º§œò´ÿéd1¸¢O<Þd Žnú¢2N4ͯ–úHˆ ßè“M›ñ”ê,¨òt–yÔÊ–çGIúŽ7ßÈs7Ðü9Ž|SH hpѬ©:NÓL5ÁòTÍ4Ótêã=‚2P9S&ë,©Ð’”_~ØÚYm­²ÄgqÇ~<ßðÁÇ ‰$Bk ±†!ñê³ð¿92ë±È Ç0Hg¤çÁx&ŒyýüM4ëÆ {ìÁ‡Îy1„wÈcNa`A"xœ1ê¾—Òko©ß„ë>&M'–,çÉ‚­'$oÖºìÔµk5N¨M~ñe”a‚˜QÆ6´Pƒ´ 2±¬ÿcHúJä°¿ª)ç”N¢x³ xÒ±Ö@žê“´+‡Í²«—§äÏ8u€Sh›f°-àÜ´ÝEkØ€Ã#yˆaH³ÐÎ.¦Êh*©œU«Ýf²ñ|S |÷È5Ê©VްåÈ'ÿ9äd3P!lŸÜeì b4Id´Æ£Ÿs( >аgêcãáÈôMÖL?§ä/¬<æ÷§Ä<ЗÁ‡>‚(ƒF'p@ŽhA Æ0†¶9pþŠúÐd8õË}ðó˜üæ—²ú‰mHùcQ6WB ‚f87q†žÁ ,0Á xPƒ„!  ìf—©M=ÍG¹cSûÿâ·ÁÈuÐ,d[Ìñ–ÈÄ—œÍIÞàCÎpŽ f ƒ L€ƒ, i8!!^ȇ. NÕhÖˆ„" ¤B\“ÊGÄ">Š~H´_EøÁÄlf°s ÄÀÀ0d,°$Ð>ô¡fxõa bµÑ™"UÔ 15vÙñŽG›[–9>Jè=†Øƒ Öp…¶ a\‹Vt n³Ã”`…QLd,zG5ŠP„fóEû×Çì8Ý2MSîѤA)íªñ"á‰~a,äa’ÓAˆ9ä` ¨¥6Ìaó˜Àé'y…GgúÓ©'ý'QÊ1ÁoÜA7¨Âb¹;¸Á±8Ç@"µ Ø"' €Î 8a/º$2©Ô¥z2ªýä'TñZ’rC ©0‡>˜!!à€ø@f°ƒCY@°êÄÀ„À肚°F5²Ñp”®¼±.€Ùõ®¤|ê>S«×’È" `@¤@LÿØv H@v°‹XX í," ಜ(«)*õ+ÛqJ"&r’£L{Z"òuµøcíuQ&ÎI@¡ ¶m†"šP„#D£ »Å…o%Yqšƒ®0®(‹ )£U_±ÞWÄ™ÑdÕµ®vŒÒìx&V9G"QŽaàP(Ç „ à *ÐT å'ˆC¼€&`bÄ?àÁ†âaü` ®‚â`à¡#αŽwÌãû¸Ç6ɉ‡Lä"ùÈHN²’—Ìä&;9/ÿ`G^1xä 똄bPƒ.$@ +˜Á¡$`*¿¢Væðm$$e æöðÿvú˜’ß7I…T~#…fI¥z`>¿D >G;d!…4c¶ÁdG°4DÀ´§>´á/4¨%¤  x*ÜàÜh8âa…D'à÷œš?Š4²`…‚Ä ÅõaŠ”¯ü·çjíÜ!sÃIüEÍH¦ð —s}ÔSç<ÿyØ1¾q…ɉävE°Ž æ{ß´¨Ô#Á‚áöб’ºµˆ‹é|ùðÎË.vÂ>%wÖÇ9$ЀÆ7ÀqÞC$÷  D" P`BY…xþœp…,†U„Ôb ?8 üÂê’UjòØTǾ}Xïuð‡GIâõÑWX Õ!¨gBÈb 9°-š €XÄB»°…$,Ÿ‚/°m „@„|=Ü“:bnÿÖä+8[ük³wúe-îSjf°5¨a3øá#€B3~з†(ÁìP '² l°ÃIÅ)E¶Õ'€ µ°?ð¶%Ñ&؇€@Ð}’W·‚BfÐ$$z× Ì¥u¥Ò‰±ñ‰µ'Ó(´À´P q²âD î0 µÒ„ðLøÕlº˜R ˜P¢ö@0ôŒáÂ(R;ƒ,MB JR~öä#Üæmi؆¸~¡¨†Á¬Àúp þvŠ9ârT6‡â8)-)9 bÄ 9ÐBp}@ÍpE0 Õ&ܰ(rA|"ôâŒ2qÿ'xlh ‰=i´À íðæö‚>u­ Õp °+9R)‡† 9°lô0€A—TaÑ0 ø¥ï7€#ÇÒ,ÿH,‰#6G „3{铸§p¹“@)”DI‘?â‡" Q° ›8V•’‹Pð Ä„XYi’' ÃO6ƒ3†À ©&†4VX׌>Òue¨“†'й'—s é iqr°%[– ‡#ï0 épy¢¶ŠX¾X@’+Ù'©æ0D4,ö¢‰øwú0AçW„ž¨œ-a{ qÙ¸8Ò å|®` Sp¢ X+uPȇ°ÿÀ »° ÍVÇŒ€ mDA@4XÌÀ œ$ÛÒ-çW†_’#ç ¨{²vŸ)š —º¥(‘èXŒÇ 0<€gòC`Hk°^ '|[8W¼z±àÍp˜€@Õ¢¶}܇wœ–B“3'.gàysõšžšºœ?Ù~S•#gFKò% ˜Ð‘œâ-ÀÈ€ j€:ÀM=àFG,òi)À/PX¸yCt¸wpÛh¦†öC9 š::šlú¦$ñ1’vf“õ^ÐæFª A hpkÄ /WWÇ"‚¨ µÐ‘m$4P #ÿZ|Ná‡uÉär¶2’öpÐØœGȣʓ@‡#sjuêrPPLs°á© [K €*p•#Ó€<@ƒH@’k€ ò€›.U8à''W(°mb«v™èç£ÌYé¦}¤µò C Àiò€ k È€r 0YPØy¤–#ò`«RppØgÀ ×'~à\O‡¼'€æà [Ðù’6ÉÙ£J—ýê¯H˜#ë w˜Ö ®N` ÁU`¤[[ P 0N 8B ¶P›RðòÈ…$)q ë°>uä#4ù.!&N‹¤¦pà „°¯Ÿ ­ ÿ °Õø£9âÕ) ®  V–×Ó(°YÓ@ °à '“% Œ€0¨· < ›AP6°­Äy²9R~ʵ¤éâ^mb›ê¬Ïú¯mj³!±{d õj“ð"ÆPQX ë0Y@¢Ð±¨‡¥?˜0Ä„_kT5à?6à¯ygz7)¯§¯°=uà[“£¬Íʶüê©5Ëó° j:‘㈩ðQ® ·’[ju 0¸ FyfðÔ ¢6jÅ4Ûà¸%¼Á ›,â"0"NÇrpyp‰oɬ¥£›‡ñ ×P ¹c? 6bÿ+fn0_ÐNP§P? P V °¥×Y <€ æ ŽÛ`¸`7ðchÄŒðB;¢@ ›¶ð#ÑÕÐËê¶ok×;úˈ<­àx Ð óR/Óàil4mïP«H –àyPà\ÝÕƒtÊgàeéuÄÒ"x,¶–ñä#¸" ë¢uíľ¬ÔÀŒÚf<± ‘ „ó"Ó0 •k‹KLO Ë¶¡"ðØ]í°TE-†˜’uW7)ÊÐ[´dœ4Å·Ò×7›Ú!¯>B;Î5 —K)óÿ¨ ˜àV¼ÐÚ€ ¾ÝÕš Z |ppƒ¯ƒÙéó%ݹ}§ÒáÑKÈGýÑäßî·v„œ+² û©>Ĥâ„ 0" P° çÝÕ“ ë0%Üà Â,Â)Õ–²)7j“w%ªQÝ:ÝP¼ÔØÝ#¾Ü&ûn¤àÐY9°E.áëj]$›B/tå•nÒFä"¥Ý˧ͩGŽä:»AÚ½)Ü ÄZ ” Æ½‹ ¢ÀÕÐÕ! y0¡$´g±MW­÷ùM$~×'nÝÝqÿØöB®À ž–&½²wmÄ8°¡zŽ ÆðÒ°Yî¥ €ñÿ† î² 9I8j¢w‚ŽÓ–“ANäûÍßKéln½îW*c> ,N’p õr™)[ ÕОB ›‹+6Ðÿà šÐÕ°ðk 9€ð”>Ÿ®_7‹˜”–HÚpšæy­äÕ ‡Mþ"“€f¾\'«wµŠ_qez‘0Р ÐðJÐ vÐR ¸V¨ðª‘ÇÙFœò"ë`µ\ì™®é%.½§°žž_+¢Vá{Å'ëãY/R5€ÿPWÇ0ë àòpdàPõ´â7¢F>°}HÐ)û‡ˆQ@ ±L³›nÚónäËî,+Îïqfµ ð~I¹ÿ† ·à ÙàkÐÛYþñõGñ_;¯Èà¸óxV‘ ²¸Ö9 ò~ïk^ïÔìqê,Í® Ïî i6´ÓåTÚ)R’2p ñ °¾0îR ç~õ|›k £ltP <ÆT ;é  jõ¯ÚRïž.WÓÀǶ|3Ù¨0¼ ç:2k°p*Ðh£ë¼ž_±ÝYÀ°oàÏŽ‹U+g• ~ì&®×ªoï«]ø‡y#³Ü7à)¹ºçO°2÷"~ìy`Hl° õ ¥0z‡–“ó’k/"WW< ž'Xë 9€ ©ŸìÊõ‚øÿÁìo†£’ê•øk[' ~É ð]^ê/Á{¹†¹2 r  7°s »P0 E Säé#¨¯\Á .dØÐá¿u%Nl‘âŇ1nT¨‘#G,XÒ$ÁiÊÞ|§lÚÉ‚$ ")RDŠE¤P`‰¥Ëo‚Mk6Í {úäUk¶ ^Áw4Yù®YiàRŠ+Ç×+KÊy1dÙ‰gÑ:T»–a[· áb” ÓdJ±-_Ú­[ # ;tòô©Oo<>vü(ëcæRe‘¨4'+EN @È{—Ù‡œ#: .-úÔ$Ù¸S§]±5Û×°ÝÖµÿ[°Zäw-•U«-S^Í"”±G$šQFˆ  &(h$¦¢ 8š6ËÏ x¢†žÕJZGŸØÞŠQ®;ªÑÆÙN4©ši¦áM½ºÐ«IˆÌˆ ‚H”ŽchòÚ”Ñ'Äš˜8@G.ãÎò˜&Ä‹XFGd1srâ"¨#o¬¯¬7EŠSÎût´ó´‚äQ¸"2#Ä!bÀA”Zx€"’ÿš\ŠrÊ©laB°ù†G§¨©¹>…èˆfN¼'A¸ŸqºqkÍ„^¼¢UçiUVs¼sÖº¢$*³ÛŠÀmzä‡"” ö7ÍvÈ! R¡¥ Hsz©šD#«éDpð€fÍq 9µMˆ¸ÑÕÀÅHÜqá|Ñ rÒUw]vÛu÷Ýrrúa—]2ûá‡Ì^² E~ÀE»]î-§¦]¤€b(ˆÀ€Ùe˜tâukÂÞt‹Á£Žtõ 'uByd’K6ùd”SVye–[vùe˜c>y!üf2Ï(¥Õôˆ|äá‘H"«æ<—ôÙSTP" $ˆ“fšiΰÿKÏKO½OC‡žq¸aO$}HöökùZ5ûìµj¶Ù¿‚šA‚B …@‡ |‡(̉ʯ#‰æ›MOH‚ ,˜b¿ñ¼æMkâá“XÎɯÌ3óˆl"ŠÕ“â"—¢ÏYC-µ×>©®wø,á^(އw1lD!ˆàC<âL^áeWŸ¦0T“ðr2ïKåR‹[„˜Œ©ë}¥+ɉ="¾ê±nSÂN™LHJ!¦†à‚=˜éZ{£P˜6 €êNJ©N ÇðZèÍz])Õ]Td…­àG¦XZÂÄfñmoeÒñ&HÆÕS…Æ£"h|ã'.)J3s¥)Ô„|ÄS€v¹ü Æ¶"Ý‹Fæ^÷bÿX£•zQùsâh¾‘lQ‡¸¢Ù¦D{Éu²CÅQ‚=šÑYæÈX%S°·eo“ÜJ)[õ·SnMdÕ Úè&˵Ñ3©X¾ÚZÁ*pì¡Z¼¢´"!X§9Ãhn“ˆ‘ Á(O0Ó±¢s:’Ú)§R»ÜŸ hy©Æ†® -P ÄBŽŽîpC2ºá%×ú•ºNÕŒŒ8bû”x"U±gåå]€¹¤6>ZmhaV˜ã­°-þ!D„´™É®üp|qÛ^^sú5Ôó¶‰;}c¯-Ý¢Þ“_Ä¢Ÿ=C+L—ƒÉ+ªmg¿ÂªHL¬*¥÷á"oxßÿJ¬Ï“Yùk`_PØŒeȺiõi‚ÀãÀg%H»Å’ «6öf^9Ìa}ŸÒ°Llª®T±9™àEܶ­1zrú οÍós´jà¢&9-ªQÐLcËêÏIžÝ ZL»Út4·7ìm G½ªQmj¤_®æ˜Ÿ›áسy™!®„&¹Ú ´T2žâª'`;dÍôoë×®4稊ᩗΆ½:Tõ._­_f__ÄÃ^ޱïéGfçbÅ÷k—iHÁ MÂK˜ç¥vëé'¹;‘I\d#*ámùö`Á+¤ëü:Îu^žûè;úžOÒa#{wÿúTU墾'\ÜñýˆÉmüªç=ë¢oïHlvߢãùë@ù´ßb¾Þ'éª_]âÍr\Í´­(À󎽒!ß¼å}Ü7=|ª“mÝ–?­'½úP‘ökÓ}½ =ƒã;0“;²ÝÚ£ô'Ô;—²µŠ:½Ëk¸É깟 :Aº3dS¶ð.« ÜÓ½øc8³  \Ë0ÄB¬l/ÚÂ:ÑѰŒ*/ñ¸ |-ó@¢óºr˶ð‹³Ìã°à@qs3ŠR¾‘c/œÁ+¬%¡¿ <¯¯´‹>3DÖ ¿ö#ÁÌëˆn“4*„@P2~±«šTä¼ÔÀ;ºDás¸ý³¿ûc §8‘Q›E6ƒs;¢EÆJ%ŠBMƒ9<ÀI;'qjDTùœ‰ZÆ2¿a#<‚X½S$<Ô¨#ÔT>”I"¹£7c¿hl²rÚöJ¯s<¯oGq 2pÔ¥F$=Vd"¢žTÂ$J•’k¾Š(ÀØ4ré°l4ÁJ󻆨Çÿ ü:‹Œ£m ÈêÉD¸UdÁ„|·Ј°‘G­Z ˆl“À",Ф@}ìG$GI?CÇLB#+Hvì–ºSH—³žjì5­c¾­;¾hÄG‰ÈHéëG¦ET I^”Ń[/•9¢—‹oœÆGó›¼Ìÿ—LŨÚJ•Œ@4QGdSÕ{Ͻ³*3ýGñ”ÐéqÓŒNôÚdCNäãBdDVd6dGFcFŽäGnäIÎdLÞä8¦cHæc<Öc96àÖäÙ=cMædQöäTîdTnåU~eU&å4ŽeZ®dP–dK¾ä]†e[¶b\þe]Îåaf^îåEÞccþäefæ[VægFfižæfžåhfej®f§ æk–eb>fmþæO6eäõe`ææÞ­ån^çPfçbvçw>çQ†gJ†fyÆfq6çtFç}¶æ~¶ç/耞çnâ'öçÆç|Îæ{Ægröß…Žhÿ‰¦g}.èp¾hŒnè>Žg‹ÞhDNi‘i’.i“>i”Ni•^i–ni—~i˜Ži™žiš®i–^ˆDX•œÖiž¾‘öéž®‘Ÿê¸ê1ê£êAêØ`êÖpêÕ€ê¨.j¥^êªnjX‘jªê«þ­v‹¯ë®~ê¬ë©6kºX•r€•µ¾‘¶®‘·†kµžkº†»¾k¼Îk½Þk¾îk¿þkÀlÁþëUX… "p„Õ(ìÃNGY…X…RHžì(ÉY}øéèì(ÃFl´(o!‹Pì°vË"ÖNΞì:úiÅ&€‘(m8QìÿmÑþ‡Ø.‹D0ìˆ mØéÙ±D€RpøÉ.0m•dnçÖ‡RãVÉ€öîU€uîUèî²p„€„èîrPìG¸n‘hoà–å^kÅ.‡`ìééî–ìu€R oó ôVïmÒÆmø–ï€ÐïŸnóÎïý‰DÐnó€DÐoG ðˆ GíñÖ‡çþ‡DÀmù8qñ€Ë6qîönˆqàNñÞ~ïSn€µ6ñÂNˆÇþˆò®ï‘íÆñÍFðÝóï ªoŒ"€'r¯6l Ïéáþqè¦î ñÙŽr‡Î Ðlñ¦ñÿ (O)oˆ1€ð„Àr·xs7ÿ‡#Gòµ €œÆrGmÍW¡ó 2lGPqào‘ríæqŸq´àsˆ7oñ@tï7_…COˆDÏžývñ„Ðî—óH§ñÑžnQÇó¹@pæ¦ñUPñµït™î_~8úôê׃LËþ=üøò¡–8ÿ>þüú÷óïïÿ?€ 8 x ‚ *¸ ƒ :ø „J8!…Zx!†j¸!‡zø!ˆ!Š8"‰%šx"Š)ª¸"‹-ºø"Œ1Ê8#5Úx#Ž9êØß:=úø#A 9$‘Ey$’I*¹$“M:ù$”QJ™¤UZy%–Yj¹%—W²ÿ2ÕKU…IÕ˜R•i¦˜V Õšuù&œqZù%šiÚ ¦šwâI&Grúù§—{ò©gTmŽdhHˆ&JèE€:*'…æÉè¡“ z©¤=ºi—‘²i)¦ŸR*’¢ •êÑ©qºj–žV:*©°.:(­ujÄ*®Uº«¬¦öúQª+쯪æÊꮳÖj+³ÍŠºì³‹l¨Ñ:û*´ØVËë­Órš¬¯Åv4¬Fä–+.±ÙVäí·Ûrën¸ê* /°}²û(¸õ¢»‘¹õëï¾çÊ;ѽøÒ«ïÀ<.¨™v[ðŸù¢Ú°Ã×j[±Åób1 3pFÿZ$òÈ œpDGÿ¼ðÇ(·Ì2¿_ܨʳÉ%ç\É<‹[³ÍkŒ±µDÏ\ôÑ7 ¬tÈ2¿+´ÂPO|WÏU-ÑÕX;=4ÒOíµEbˆ=6Ùe›}6Úi«×Iƒý6Üñ2}Q°jÛ}7Þi³-·ÔSÏM÷Î>»üOÞ…¾vÛqóݵâ~ÿ-¸F‡K>¹{Gýuã/÷îà8GN9èx[îøæœ—îùéKo:ëˆ/Îx⯻-{æ¦cÔ:îf®9æ±_ûï³OQîÅ‹½»í½Ó¾<ó¤+ï|ØÆçŽ<ê©7ÝyõÀßôµÓϺýÜ÷>«Ž€ø»ßêþºÊï€|^ÿøW>ÿ)r Ô™? n~$\'wA~pâ3aøR8Aâ…Pr#4`9XÂì O…(ŒH ](ÁFð„4¬ƒèÃüÕ°‡C|à ØÁ‰d„ú#bWxD$FQˆP¤²¨Å-r±‹^ü"Ã(Æ1’±Œf<#Ó¨Æ5²±n £"òÆ9Ò±Žv¼#ó¨Ç=!Žá# )ÈA²uôã? ©ÈE2²‘Žœ#")ÉIR²’†Œ¤%3©ÉMrÒŒ˜ì$(C)JJ~r”¦<%*÷XÊT²²•®<ã*>_)ËYÎ2–´¼%.GiË\ò²—•Ü¥/ƒ)ÌKÊq˜Æ<&!‰Ìe2³Êl&4£9ÆgJ³šÖÌ"5¯©Íf"2 !ù,Ÿgm,‡ 000JJJWWWnnnMx¨kuš}nŽx{ˆxw˜g|¤u} Y­_…°~ƒŒ{ƒ“h…¬fгm¶y†¨sްz—¹»e”SR‡t~™kk™~k•yv¸SV­rAªyX¹h@µgT¶zE¹{X©k{¨uh¯w¼ef·iu´|k»r|Óy5ìz/çz6ñ}&ÂVYÛ[[Ô]aÎd^Í}FÉzVÛkMÛgU×vKÖxUÇdiÅktÅwgÊrxØdfÕmpÝvhÙxyæ^MãZXæeIädYéwJèwVãfeåopåsiäxx†n‹‡vˆ…{˜–m…—u‹š}“¤l€©w‰¥}‘¶z†Æ{„Ó}‚å€y˜…x¾‚I´„X«‡g­Š~®‘wµŒg²Œrµ’rÞ+ׄ:ô„ç…'ç‡7ôˆ'ñˆ5ò‘;É…FȈSÌ‘XÓ‰FÕŽSÛ‘MÛ“VÍ’eÜyÔ†gÙƒsÕ“i×–xΤ}Þ£j×§xëˆFë‡Wç—KéšWð‹Bñ–HðVç…iåƒ{ê™gè•wï [ð [ç¤ií©tí±|ò§fð¬p‡‡‡‡…•„›„šœ’Œ•”•ˆŠ¦ˆ–©‚™¹–Š¢™–ªœœ²‡ ½›¥¹¨€€§†™¦™Ž¥š—º€Œºˆ”·•ƒªŽ ©™¨®Ÿ°¶š¨¼¡Š·¦™§§§§¨¶§²¾»§¦´¬»´°®···€žÁˆ¢À˜­Æ±Ç£­Â¨¹Ë³¼Ë±¿Ð¹ÁÉ»ÇÔÆ…ˆÈŒ”È”™Ø†‡ÙŒÚ–‹Ô–—Ä™£ÚŸ¢Â­œÙ«‚Ö¤‘Õ²Ô´—Ω©É¬µÉº«É´¶Ú£¥Öº§Û¹ºä„ƒåç˜Šå™™é¢†ä ›í·ˆëº”å¥¥èº¤å··ò«¬ó¶¶È¼ÃÈÀ¹ÙÀ¨ÙÅ´ëÁûÄ–êÆ§é̵éѼò̧ñÀ¿øÒ­øÕ³ÇÆÆÃÌÖÊÑÚÙÇÆÕÎÓØÒËÜÜÜÈÕâÛÞâÜàäåÅÅäÏÐç×ÈåÚÙôÆÅú×Ç÷רåßàæáÜõèÛåääíîðõèæðïðþòèþþþÿÿýc÷OŸAv"\ÈP Ã‚úê#ø°âÄ…3j¤¨±£ÇŒ+R¼È.âE’%:4ÈRbH‹!Fü’¦M/rs¢Õrÿ_8­4pÝ šTáºsµÎ•,>Ϭ5xo¥³´fÞqfÖtN!…$²G!Úy§ w൴”‚ó\G`o¼r&—PÞg9¦5g1£w‡Ž>Ú\'Ï‚,žmz…ó 8óàÓ4Ò$BÇ€ƒ!ix±¢‹úÌCÍ3Öx85ÔP`wøh9¼Øb‹ ú%Þtø”H`"òÌβÈ"eìÁFl$¢äwW¶¨âwsƹ`–w…#Í4CÊSž~ü(Hq†󜳅Z<°Èh$8¥^L:'88~£Ï7JÇyv²ˆ§@þÔ#΄àŒé‡fœñG!g˜ÿA„ ,Ô0…-†áÅp‰˜‘‘ú€xÖˆ ò6¡4ú”Wȇ¼*ƒ¢yCŽ<á¤wÝ«Žák7¬~±6à c€©4¾É3þÙ· §‰¤z݉ò€sL_Ï*8ê?‰Ã"«¢!M¬fø!M c<"‰e° Ú¢QÈªÈ²Ô ˆÏéÝ‚U4`Åp櫯hýþ»êúbÆÚŽÑÂ@ dÁêÍ~X9i°ìB'"Ç&z êÎ"w·¯´õ¦÷Çht£,£qÆ &œÀC 3ˆ¡F¯+§«nÿ=é¼òMtÑÛí[ê©~ó‡h ±2eœQ† &àB#i¨ÿQȇHýG8ôYóLˆ'aDñ°h, ‡ŒvÚ/êÉç¹7‡1FÍb¬‰ÀH’†È®FŽLˆŠ/Þ‹˜J£)°“O·ï–ø$âG!lda³Zˆ!†¯ÈâÊe´š‡K`AŠ^½ 5FñÌôf9'žµ[üâ~Î1ˆ>Œ`Áj!—‘FìO"ˆb<0ÁŸO‹-úüÀ KÕgüVÆÏâ^÷$wƒ€( C@B4ÊÇ4i¬a {àƒ,ŠçŽgä D`°úóâü׳| °{·+Ⱥ¬!ˆ" !‹C‚-ð!rÔ˜Ãq:ä€ 0^ÿ:!=êY{ÌÐÞ•NX»òì9àÐÃnp Oyx&dƒÔ‡ ÀEN0  #xâÌÒº$¼NdLœœ“1U„ÆC6€ˆ`;`O{ £‰$  (@Ò1…8q‡KÜâÇy|ãCÕm÷"vL"  Àª‡ƒRî @Àz!‹ \‰ (Ò`<Å[ÎÒ.±„Sê–6I»‡Ø¢•ˆ‚Jù F8ÁH˜ÆT©‹VF 4ú`ß9lñŠZ&`²3ŒPÂU§@Ó0áîDLï9¨$¶˜„9Š¡ DÁ@À„°ÿ‡ @8  @s˜ƒ}=¨œ ‰„þ€?(†A‹ñƒ^{†A‡±<$ô£ ©HGJR’úŰ0H¸aìc%taƒFoMˆr7¡B_yÍ×ôà¡='rs¯(‰àqnpb iØ‚ZHÿ(Uqx€$lqWTî¸%~ ‹QP‚ ¾ÔÌ7¡ˆn€6´všÇP™AIwj F,ÒAH¢´ †Ù0ñ`䘗8GÒúœ PâgE‹£‚@ôŒ#e¯˜âŽ<¤±, D (€-:¦S”÷¼®DÇÙõ÷·H»|†)÷¬ûêãøÝRwÀÛÕW0 ì 8r»[[\"Á“pq‹Ü'Õ'DITjt•cÀž-0 BGÀcàï\~@8QIH! M#{¢ƒ&ÿÀ¯˜ˆŒðƒ[PáHD7&l];ågÿy“YäŽWTÀØÔÇ!v†CÌ‚ÿ 9(%œYÈb½À%Šœ‚!/(e †P„=WCz‘®Y$ìµË8U5·jT#gÄF…gü  ˆ„AÜÁYôbQHÁ ^ð)¾ ¼‰¢½ãwGÑHšõuE&ˆ3Tà Ó8Ã~€JèCI sIœR³L /¨^†ð*DÉ<ÒØ²®A¤nÃñ{ùêõ¯õ1éa'€ ºx«˜`fëÃÙ—åAõx },mB‰8t–0¬1ä˜Ü-:mjƒ‡i\ú €H š˜ ¾˜R ‰Yœ: Q€Á xPÔ€kZ8çDà5K ÿzˆe§}µãèø±‚fYö±cͨks}ŒƒR:ẸÅ~ðƒRN³CôªƒPè #BòXÚÚF´?c—\f§ƒZÑŽcÊBAì`Ÿ-ÞA‹ ‘[‚7< IÙ¢ç` “ЄÞú‚ !xÇ{pôd!BP&"cðähvg´¥Í+öÁßÊ|;êM©AØóêÔçß™G jŒPä Âþ!< F g»xduŒ{F¢FÖ!¢êÞøî(È1%Ï»BÖHÆ$Á·PU9ØAâ^ƒ$A­Ûç4¨AÎsÂÊW})ÑŠ"ÃS‡¾Õ–ÿ˜E“{}DÞ;ï`%¤À„Hå^| Ñ£Šê%aÕFx>éK? êíê’Ý`Wù&9V‡uÝaaüv{‹×x]•cŸJ˜° ÉEðP ê`doµgI—wxwz©—hvõ%C‚rɵrÜñb,1øÅu^Gî0Avö ˜@'0 ¡qƒ`v  ú` ±à ½Ð ”eL掠 Š“wBwÑfÎà ²Ã2B#ÖÅoÇyÔ²pe²føõr1'ƒ‚´c #ÀIðð@Ãl“pq&onô O& ïð ö7EÐg0ðVƒFh}g4-ø3Fò`,¡^ÿ MæFx{Æ%¢q |pr¢‘Ø` URæ  OUQæP ’ðMàO@¨`?0p u °TÖ–<   Ä9Oº`7` !… jPDwP€ † &i`&uaüМÞAj>ÉšDEÈÀÌÐ µy›‘›Ç4J<0€wÕs=ÏP7@ Ü€l€œä͉?s‰ç° P °d#ŠÀÎå¦Ñoð—Ž5w ì@ SàN0úqOÐ#0Žðu,! qv˜µ¶8IÀeP3dÿÀ,E¹ ð@tCcHYs¡Ñ%r Ÿ5mº–ÝÁ4Xy® ¤ª¿çE™|?§÷ñ;ð ¸ðwA€¨ÉÃ2¸j³Ã“æ G¦ “KžAƒ]´)ž%ÇP"š"ÏУÖ"²À`g;¨ü¡ :9Tª¨ øg«¦ Ï , 7¹:g#w‘=¹šèɼA8æP—È"Ì@œ'“X­“PcÅà3’x$Šc y8ùáð||p3fð6c°;¢®z¡`–p$ÔÀÝÁšbœ2¯ÿ`ÙYŽ-’¯€Ê¯þê3G`k‡ãi¬¦80à1B@.­Ò°+ÿÓ,Ä x½G ;p)ЯÜ1 æDY@ù­Ó* Õj×Ú.Ycðð ÉWÉÿÿe«P3'B%A#qW—$±90 ÆÐ 9€ c“©wµk"ã =Æ®P)L²V‰£YðPI  ˜ÐdSp/`µ€µŸšƒ«h0xÚwa!‚y‘:‘•ÿ×–D ™iÏ" “0 ² ,fA Åp@œÕ à^v8t·ðP¸ÿ  8“Óp†Æ¦h÷Á ¬T<4]—¡².½T _ú xÇ šF¾À¹”æàº¯‹µœ€\0 €¯²梅×ÿh`ú¦ºf„Ñ=.Øo½°…ÐQ=ÙTº°?£½° ÓûºÕû•ìÀÝð Äà!)Ç´?ó’8{ ù’¾Ç±¾ð‹ó¾ädUF½ø‹µ•À¯,ñMòFÔ·8" -áÑ=ÆûÈ+¾àh –@¨í© ËPO|Áÿð |`ƒG)!ò$ ûFÐÅÅKŽ£6Až°V"²!0¦8<€v¸Äº0Ë€3Lä` É@U¶',úñbޱvše{ç'=L @*Y¹`) b$Hb M8SÐ DÇ.QL½»a9ú“1eì¦E2N®ã}] ·-rÂfQ =ÿÕJ¯Ô™/VäÄFš%Ã…›w¼ ¥0 *P¡àWØÈ.asyÁ¢8bìàal´-ÂÀÌPF,afØÄ=IfaŒµÅ` °KÈ@+Pæð?®,‡ãƒ–âi'– ¬w‰]ÜáʰœžÅJËÜ:%"Ë  qpµ ªyPÁ<ÌìRÌú  ĉw7P»Ðsf›¢PȬÌ"ˆÌ Šü >˜Ž¬Âª˜1ì0½ð   ›P¸ì@ yÀSðÉٳϲ©l Ì™u` <×c ;êaÒ<ÍmD •Yi{àø¤;ЕvkÇ`Ñ*ÿ`âü!@Š{ÜÇ5&ÉÏ lKœI ™,!FË@ÒvÉ-©—Å3gS ÉÄPÀÆ ½ÀëÀe Ä Ħ eXL)¤Ë sÀjÀF,J Mì09 J}%ˆ-øgKÌÄSÐ~žà´Ö 7œ¬À  PÍ–`öWÎ)20¼pl@úÐ 9•°‰U0~B¼YNŒˆÏ­3SWI € >C crÉÐ ¹ÐoPbÛ Õµv‡ê†5àqÄIºP$ÈçdÞ‡š ÂÎ$lö碩½Ú­uyÕHP†ÈfÑÇç0 )Wxÿ—`†w>0¨—^d8ÔÆYÒÔ‘×ÉíÕÄ:ˆLܳ¥Ìó ØÂç щQd"«øÄ%‘[äb½øE0†QŒc$cÍxF.2ÄŠF\#±Â)¾ñƒm"wG9ËŽwÌ£³ØÇ²Š‚ $ ¹G"’‡ì£")H<Ò‘.œä™ÇJZ’—”c&MèI"rò  å& iJT6R”X$å*¥èÊ+R–§”$! YKZªr–¸œã.y©Ë^¦˜Ãô£01éËbþ’˜„e[™ËcB“™Èœf0•ÿÍkª‘šÕ\¦6ÉMl*ñ›£Üæ-»IÎq>Sœã|¥4ÑÉÎXZ󜬤&íyO|æSŸ]ôf6ßyNu&ÓŸí”g8çÏu¡$< Ά” -'=ÓYщ2´Ÿ uf9Q‰vÔu¨GšQ’4¡)UiJ?ºQŽÖ±™&-©LOúPˆþS ,E©NAÊSœ¶ô§9õiQÍ T‘úó¥GEªM JT¡u©KeªT1ÔžV5ªFÍêTméÕ›&5¤4])T³ÚÕ«Š•¡‹`k[ÝúV¸ÆU®s¥k]ízW¼º•!‹ $_ûúWú‚,`?HØ<"6±†õ bßèØÿÇ2öXæ $e+{Y[fV³›ålgK8V8„€ÄY1Ð2 À UÈ S¨q´±ý‡)XëÚ –hí?ÌZHà¼5BkD}ÀÁÕ‡)ðÛ Q€_«Ë °£¸¬ î!0„ºæØí? Hh7¹{%€3…k^v ¶ëõát«[¶ˆwh¯yq{Ø„÷ lrY!`€ùýÇi™ ¿Ïeþ+BðõÀª-C È GE€DÍë\†p7‰ØE›q)ü1à p‰åëá {0Äÿn{KÜç¾—¿Iüñ?`ÛØ²ÿã½2æë‚Bڛׇ!^ćS,àîŽxÙMbqÑ s°¢º0±£Læ-3‹@twbðò—¯àooL€ã®˜¿–5E”È ËN—–ån™sH[·––Cöl£ýhHGZÒ“¦t¥-}iLgZә宋¼éIײX2¨#-ê'¿—Í$o‰M1Ý6w¨ -wWkgS»0¸¬¥®p a·7Âk!<] GØÁMvŒsBf[¸öð´­lS¼:Âì0ƒ[öÙ&Dõ€-LçT›×ÍÝŽð‡¥ím óظã†6˜ÓMmóN»¿H/©»ßé.[¹ÿÃå2½KXnRÿcËÃ.-ºaœ`/:Ù`Ž6¾ .Bs,*¦ðkŸ¼×ã zÐ ñ8e¿Íè‹7š¹)‡´)c–Ç\æ3§yÍm~sœç\ç;çyÏ}þs ]èC'zÑ~t¤']éKgz"÷ùt¨GŸ zÕ­~u¬g]ë[§z+¶êÔ†p]ìc'{¼~V±ìkg{׿žö¶]îc?;VáîÁ¹ç]ëuWëCõþw«ó¬(|ávÂþ»O¿ø·óïÏ;ã%ïxÊÏÝò‰dhæ5yÎOÞólß|;?zÒƒÞô¢G=ÙKÿHÌ·Þõª‡}Øe?{´_Þö·°ûë)ÙÔRrU÷¹ÿ$ðU¨Î"ŽAùËg~óÿ|èG_ù‰ ýï=(}ìg_ûc >ñW¬í‡_üÓ¯þñ?8~ôg¿ûvþ?Òÿ~诿ï}‡ý™/ÿÁ?ÔþûÇ?âõ¿ÿúë¿Æ* ÀòÓ$ð+À÷Àö£?L? =Ÿz@<Àâ»> ¿ü>Ì@ñÛÀÚC)ü@ l¢óÁíAë›@Ô>4?ˆjA,Áàkˆ€!ù,k<‡ 000PPPiiivvvMx¨kuš}nŽx{ˆxw—g|¤u} Y­_…°~ƒŒ{ƒ“h…¬f‹´m¶y†¨sްz—¹ª_;»e¶k6†q]Šu~•hhš~l•yv­vG¯{[µgT¹{X©k{¨uh¥px¼di·iu´|k»s|×tØ{2ìz/æz6ñ}&Û[[Ô]aÎd^Ë{EÈ{WÛkMÛgU×wKÖxUÇdiÅktÃvfÊrxØdfÕmpÝvhÙxyæ^MãWVæeIädYéwJèwVãfeåopåsjäxx†n‹‡vˆ…{˜–m…—u‹š}“¤l€©w‰¥}‘¶y†Æ{„Ô}‚å€y˜…x¾‚I´„X«‡g¨‡z®‘w¶Šf²Œr¶“t݃.ׄ:íô„è…'ç‡7ôˆ'ñˆ5ô”=É…FȈSÌ‘XÒ‰FÕRÛ‘MÚ”Xƒ|Í’eÆxÔ†gÙƒtÕ“i×–xΤ}Þ£j×§xë‰Gë‡Wç—KéšVð‹Bñ–GðœVè„iä‚|ê™gè•wï [ð [ç£gí©uî±|ð¦hð¬p‡‡‡‡…•„š…™œ’Œ–••ˆŠ¦ˆ–©‚š¹–Š¢™—ªœœ²‡ ½›¥¹¨€€§†™¦™Ž¡›—º€Œºˆ”»•…ªŽ ¨™¨®Ÿ°¶š¨½£Ž¸©œ§§§§¨¶§²¾»©¦±¬¼´°®¶¶¶ˆ¢À˜­Å±Ç£­Â©¹Ëµ¼Ë±¿ÐºÁÈ»ÇÔÇ„‰ÈŒ”È‘˜Ø†‡ÙŒÚ–‹Ô–—Ä™£ÚŸ¢Â­œ×¬…Ö¤‘Õ²Ó³–Ω¨É¬µÌ»©É³¶Õ£¤Ö¼¦Ù¹¼ä„ƒåç˜‰å™™é¢†ä ›í·ˆëº•å¥¦èº¤å··ò«¬ó¯°Â¼ÄÚ¾ÄÍÀ³ÛÁª×ŶëÁêÆ§éÌ´éлó̦ñÀ¿÷Ъö×¸ÇÆÆÃÌÖÊÑÚÚÅÆÕÎÓÙÐÈÛÛÛÁÑàÜÞáÜàãåÄÅäÏÐç×ÉåÚÙôÆÅõÜÄôØØåßàæáÜåääîîðíñööëêðïðøòìþþþÿÿ üÇnà¿|ùØ)T˜páºtÝæ3ˆ°"ÁϘѳw6‰ùìQK7Ï^F{S,¨²¥Ë—aÊ„Ér¦M•5oêÌ©Ó&Ïž3úT©¡À¢óá«çï ¾O)þ£Go Õ£EçMüÇo£Í­@¿†½)tl˲fW¦•‰v­À¶/Ë&ÅWŽßÄr䨡{Ç÷QŠüÆUå*Ø =¯ÿìCù²9râʹu vrJ¸k1›Õ<–sçÏ “.œfH8o†QªpݹZçØ%Ígn3fÖàe¤–ÔÚmxðn[›œ!CŠøšF¼¹óçæˆËLÊÖ²KÏ@±÷Ô¾ôó|óÿ?~¬Â+„ì2a"=øíÛZ“R{ÏŒ÷sD†ÀåÛ&^Þ÷ÿÎE7LÒÅeÝY^– Z Ä]LÍ…ó 8óàã4Ò(RÇ‘€“H!itá_RÎCÍ3ÖÄ7›5ÔP3Üsø ‡9Òäà$HÙV]× ƒ?ÆÔàƒdy7~Ç)"Ï<àÈ!Œ0Rl¤Á†"*Ò†ã–ýÑÖå–7 HÝŽU¦`D…fBv—”<¤ýñ söqÄgì1Ï9Z„‘ÅŒðs‰™‹.‚ †ßäó rÒôQ˜8Ú£J—^zæiVÇ)›Ü%T”lMþa†gbÈf Q 4HÿaË!dt! ;Š˜¡HŽÍ÷ž}Ö8ž4ùfˆdI)t:¶Ô,N ®ù©´:¡wB‡œaêºzsªZ°Qà ’ô1†’ùH£+¯¾1œp>ª8àˆ§Ÿ<àƒÏ²a>‹é˜>R»`§4EÛ“µ­ƒÒ°jÆÒ´0$“¸Q jÁ-†˜Jl¡½º‹PpÀ>W£~ù÷±–üh©™i\ð´C\mBoqƒ ùbÆÜŽÑBD dqêÒ ïá£È†°…ÒndF]¼"‹+^”ª(qE)IõÂÌ3ð°FŠÀv) L/ÛÖæ–ïmJqãÃh¬á ""¸Â© ñ¾2¤¡ ¤Ä ̆LàÅ£,l‘0£"ŒZ>2"C~%PÝkàíä@ í®Hô`ÿ„p„hdÐlÒXƒøÐYÈÏÏÐÃð…>„À !,\ÕɆY»áör˜™rí‡<üÌ8p3"AŒC‚q…,ô!vԠÈ:à` ˜_<ñ¿°€ð £¹W;Ð$.„dv5pìA6°Þ§=¼!²@Bl³„ à&˜@Б 8u·™ª§ÈEΆŒ13cáÐxư°ƒÚXÅ9òá !áÐÀB ¬†5#ÛDÀ éBš€ºÓ¥nu­«ˆ<¾ñõË–Ú³È.yé=v¶3,çhÇ,@) ðøÔ(€ÿôBÀ„; @ ¸æ'J‰ŠŒ¼ç]¸©È£ÆãJ¡3šÊ¥;ËÉ^…íHš€Ïg4¢ E8Â4¬ÐO]4ÃÌÏa‹W 4Et˜Q‘åƒd1Ž"¦!¬Ñ¹ì¢c G;úÎJ2( 9GXX ]Ü æp„>t1¸P ˜Ã <+ZЄM¨Õ;ðA1ÎZ ôâ¬yàÃ0Î: >äA­€ ¬`KØÂV@ I¬bËØÆ:ö±¬d'KÙÊZö²‹È;*ÐŽƒÄ(`‡%”xJP V À"°0Ï9J áÿ ázƒWº aT•©¸´ÝF5êTêdœÍ‡;f!<£øÁ4E ‚4@`ª Ì7¾ðHT ˜¸„˜áBfœã;ØÁê€õ(D,)†ÈžÖº@u6µ¸÷•àp["‹vØ"„þ¢ ® Š\4! X(Zõ¡n`AX ]X­P¸Az‘,óLjØ×Q³@x0¸ŽÄ¯™šß"¡ƒ¯ pà!otB iЂÈZH ‡^rxÀ$lqWT îÀD%|  RTb E>¾¡ˆExCÄ#^Ö5”˜Ç¼hãÂÚÕ²þ:"À€n3€…éúƒóþЉ P" P`B)W¸ÛŸxÅ,æSÜb >8!¼±ìUãh7ópO–PìK]¶ØÚ×&ßÜñŠ ¸"¦ù@„Ã΀ˆYLø¼A Y¢¸¨„¹Q€ƒ"Áøÿ¤ˆ€,3²"£þ_¿šl¾Õ×Ð)®ö:±Ýj…SªgÐC5ª¡‡3Â"€Â3|ÀƒH!îX,z¡( À.ðÁ%] ˆÅŽÙ£L¶²¿3j]©¯NøSÕ¾vF/kg¨B¦q!ø –ȇ.°qÙtúµ·¡Ä\0@"ÁSˆQi¤Áï³ÏÇ>¯%Ú{ÎöëÜò>Üåž Û=KÐEz›°„ü=ÏðŒyÌ[äg"\.;Uç’ŸvÚÛŽðÞûÞS7ª)ŒÙAw=LƒègLÀ„'Ü  ðE阂MÌ‚êP€Â \°"Ì€¼hØÿÙº?$B¾bšÏ‹|S2J<;óå>–h!;$î<ŠÛ¦/€OM`ºp :à>€OR aBprX,'n‰Žã<Ç‘=b‚lÏàP37_‚y•G"8‚ÿ"*ýðìB¶ð´`7ƒÀyðÐM–€8 ”° E^.?@„D€!€@,‰@'ùqZa(îAKßQb'ÖH·_9Ç{¿ç,Q"U¯…«á³a¸W8WÆ 8ÀCôB`r@ÏpE@ æ HH,—f)&B s·áe7ÇjUh…$¸{W˜¡…²ñæ ‡ÿ’ 0 ΑÏ¥ 8 ©ã/€AÓÃUÓ@ =e5«¢+û‚þÁ„ômÄhÕà+'…ðG…SÈsƒH&‘ßñ«Q Q° í7J€P „XWè†o8 ôB'Šà ð5{²£ø©æSxˆÔFˆò7ÿ’‹òb @O™° QFðP êpné¥ÛW „@‡s˜ó_I2"éeìçÎ5%ˆµh‹³¨ ùèñÄáNÔq¯ S`¤0LÁAwpʶ ¾Ð Í`aæÐnð› :AAHxEà ΀=!!’T¶ÿ÷?Ͳ€o|(p ކXˆ”'Ž”aIu Äm "°H5ð0ÃÃlð”`·z³ô ð& ïð ÉHD@r/^*·rEÈ,!Ã&ÒgI!U î6Kíø h”C9Ž!83³[òsS¤° eˆ‚Àm  ʰiL×PÀ«Ãeô1ÿ…LçÆd{P5g‡l•9IV²p¨ÎesxI”E™—®ùš~™Ù[ÓDS¶:TÉ a i`¨ó  °s¥Ö.·P†ª#3p bY€@-¢š†Bœ$UçÙE{Ò†s IŽ{Žz™m²ÿY°Uµ)UP@@uÀ™“ÀOK À)œ³ÔÔ€;@xHBÀª0öèF¿rÚæZQ\ Š _Û‰ é­Éš·|I˜° ˜”0ã5ÊÀk  r†Ózí¶^Í1ø)Ovr50Î`rB Å7‘Rw¯Àn€Çá4ï×´ø á¡±YìlßÅ 0¢N€ •œÃO\@ Pð/N0 Äa ¸0R =Èzü)s@ ìTx¢'ra† ð€€8vGšÄH¢!¦{xЏáÚ»¾[&oѸ(8‘~á p¼ àˆ£„Ÿ—蘛> ¯€ >°}ù ¦k?@³½f€[( èÿ¶ ”0Pùà§ò#JŽbòp ø!_±*±ï ± iZ¸,²ÀÐqÜö¹‡Â º0£¸5™º°ŒE€uºð AÀhð3@ó3g!xÀ 6Jš8Z¯ÍQ#£ctº2ñ+¿}É»¿[&¢2kB †÷K !S Rc—'¢:øÉŸ§SÀ·ðÎ}°4fð8c€>Ê!ÁIÑi—p"Ô°&_´ñ(,®å ¿L¼»˜r®[bÂü›Â+,5F0v3„K—uª³/ Aæ‚*;ü3ÉB JèèP :ð( ÂÎa¥‘=ª»‡ÛÄŠûÄy¬;ö‹¿ú{Âýû¿ÁKÏæ.¿p‰TÿÆ™óð‡  ¬6c 4b#¥³)’:€¤` ž€¸Ð7ÇñÆëÄ|¼Ç‰«ÊE &®àm à ˆÂ"å•:÷‰« î&&€u7ððÈ_ ’¼6KˆŠ3D¸÷ºR0a8 Ï1NÄ`Ná |±¬ ÂÜ,žöK ” ¾rÔP ÿ*DÊ:@O{¦•:@½PÃ0ÌÿPÌJó0C…-ç¥6j¹Á ÿ$?›eè‘HÑÍPÜǨ¼ÊÁKÂ`Ò.U yû @È ›àJ¾ ”P $Áæ ÌóüÈ‘°Ò;s,è’“¥&z;Œ/×´ÇÙÌ­ÿ ¡ -«‚mRÓ ûSt°ºðB¤½À«=Ï!ý–À%í ß@ ñ¡~1îa—X_ 1Ü©&AêÁ»Ðf–Ó><Ýgð°:ÛMï&wÒHýÈû×\îÑ"´$Š«£šlÙ´ZÍ3£Í^ÝÁ5y-Ñî!Ñ,ÝœÖp ¢›¯›° äU nýÖÿ€‡°„½A/2ÎN88¢! ¡ÇÛ,ÚƒýÁ³%³ uNô åUí‘l_|Z¹7  ¥co“MÙ­ ψ¾bȦ3Èa€øÒ}Ф]Ú‚=Ó6ÓÂÙÔ ”– ‰R"mj ,)Rà ص>ÿ ôl%ÐÝ2Ý4ç–538@BT¼ãÿ°‘àÈ ìð*‘°ã=^⼡ Í „6 »€Œ£àÞ§\ß7ç`ÐÎ}߹Šúý ³U¨þØ“YCìÿ ÿ` ÐÁPã0*ÀRáð߸ÁjÀÂÀ jÖÆ¤( A¹ä" ½çöý¾^³;a§‡Í¹—È¥³ÌÝ 8ž æÿ€9€HàBçýÝ$ l/ܬH`©qJËpêMîäÍ­ç¬îÇ7òêV¾¹ˆõeû)ÛO°{ö‚@ ì°}Pz Ä Ç âÜÛ½qÎÌ@l ±Ô³ÔànÃÄR€Ú@íª¾êL~ðÙÞçÏézýe¢X³ødRŒŸð.‚` òЗͪàРஇ…|­1tÀ 6Àu½€P` „ÿI±øÕÎÜ_ð ïCÛ®æ{Ó#R ^H€ RC ÆÔÐ ÉÐmìɽàeY޽RIß׬3  àa‰ïÆŠ¬jí×®óÉMönå2¤¦ÆŒ:³EôIï8z ‚pepàñÆ~³€ê„Hp@Øt ‡H0J¦C ÅÝ âeŸê;ßÐ7âð{  ´¢{–²ýÆB4äó°ÚzPÐ`á…Ô ºÐ0 g ,ù?ØK ºÖÝá3a¤ñÇçØÞû”ßóúóÌ„ÛçÍÚƒÏiÊ { ~°<ÌpB”ºð MÀà éÿ°Ÿ«“Î0|Õæ'Œ§k!ðð’ö8ϧ¨ˆÍiBhx@ðJ º€ ªc÷ªÌò!R¤ $¡ØÑ¨Â¹g@P#Äb‘fù4nä¸Q™!†áûWÒäI”)5šd—/åK˜1K²“Y³&M›9SâÔÙs¦O–%;%Z”£¹ó˜4h‘ !0nºµ %ƒÌ(H°.& d õ"ìƒÖæ"„-gF7âëcÈ[8i†¤=¹r¦K¾9y–9˜0LÇ_&,Tîã¢H7"áJ-"kKoܰF­ˆI>¸2£Ìl­D8’$Xe«‰ØE¨å³ÿ–•ÙÒ"Ãñ‘¶Q‘"„ýþk©¸°ñ˜Œ‘_ޏ';èÐ5š£^ÝúuìÙ³ÇöÑ«—E>,º0(¤I#ºz©oÎ`/)PD$˜¡€‚G½ŠQO&ÄGuƒ²Ñ®ºcøÀ£º>úÀ'ŸètðA#”pB +´ðB 3ÔpÃO 2;’,ŸyJ»­·ŽÏ v„’Û¬ç­òYŠUP… "€`“gžQ+xÒš±$ £Ë.¼ ™Æ%À€b°Á(ÿÙ9å°ln§-¹äëÃÃ1Ÿg 4!N¸EÚ¼!Šsà¡ É#™œ·LHb‚ *˜â¶ÛžùFš#Ü2h‡ÿPdAç±B’¦%}†ó :æüJ±,ËÓ.QÚÔ9+à qÌ"™*b>\xa‡Xì…È9… Cú°h¼M`ñ…™gæ™ç™#ö¨•·¬êó!¹Ì‘gi¼‘Î1¾V¢i¥á$ý²Ó °eNÛmSTÈÆ¤ 3ç³ÄLXb‚L‹"ŽpÆ!$¢F< fdª"pÀQd*yåY*ÀģƤZ)]šÊ(­õ–ÛO ËXãÀ¾7YŽn›G#±Òa¦Eti^óù™*¨±¨š|Ü‚j˜±F#g„ˆ†Df„ a‡ÙòyÙÈ8z8Ôh5j °j«´ø8ÿm7¾ãŽûäD&9“‹xáѸb9®ß(«‰yl¦†e­¨)”æ ƒ ¼>§a¥‹»²é§µæHð©újn»”ð­‡—Wx¬yÍ_v›)µÞ%¶Bêå _~3» ‰=ñ7ˆ?@‘â$^˜¨yàAfä -¼¯¿=D©#“,­’jl­¾øðáï¨3jvS)@©XB¬$Ru«h9Ëk‹ˆ=nµ¨h2 z&¯=‚b^$yÁînöü¥ÜC\i›Šj qüó_\~ãs”š1‘ÈÏHDÀ„Ô`Øë ¬šb!ÔK{;³‘ö˜DD ºh‚ÿª" ¾¤J^›ï F”âÈdJNKáMˆ×)á ¯xÆ£Ímà·b %v,ã 4üÀ"TC†ó¬Q$]„ºhËèï(f¥©J”ŠšP¨¤žHêv¢Œ¨6ÝHQä)#“hô fI­¼eÜ_OæÿN“3AqLû,ÂQöÀ,ö©Z¡ìÛºÖoÆÀ}ãƒw#kè N,¬a#Ȧ¯4âÞPèë [à—Ãäe«´lÙ¶Z™Œ •qñÜÖÆþ¹¼1.£¤h\“³#3eâ[´Úì«eɨQd1LOÀºT&°mÝJ(?“¿Ñ©f¡M?é4ÙÉ/»#ÚÆc®™£—BÁH[’Ò=. 5¤à„&H¡Í}>5N|ç³úÔ NëxWíbAxæ=°ŠcÝåDƒYÌ‹öŒ™Ñ¬æùÕ(Þ,FŒ8eObòiü-¨ž­ÛDz0Úž·B™MíU[;Lþk3Q¼Ü8“tÇÿLé±0Íd;R’eÌTÉ‹åÍdšØ…éfÉv§8';óv~1p© ëá&+\Co„ 2áŠrÏàî% ++Y£¾OÆKƒ“ÑzoR>èÝ8­Ÿ3—ÖâÚe¹~ ‡L·Ïœæ~ãÕÆ€,aýn6Û†åÖÙ%I¼sâPëÓ<å•§=`L>üÞeì:c|×ñ±•˹5,åëïl t´ãŠ®mÄë–ߦ}æ¸l“Óî׆Úë ’­ö/¾¶ï<ï-b¨T³UÇBèuzáŸÈg^óØiutádhé‘ü"_ ïìÇ:,äPë]ÿzØÇ^ö"úcŒþí¤§7ÑLoÿ/‡ u˜“U®Ò”_5¹ÛV@#ûë¶](Ö?uuøyZèû 9I¾Ù¶OŽE-˯s‹zÆrÙ =J®“vef5¾èTÛw…¿×y °ñ(®e†"á25Sã.l1ù™†:¼<#£ø‰&kÓ²wã8Å85|²?;4lK4ÝÓÀš¾Ó:P³ºv‹Û¢7ÉÊ8(ù9Å1*áð³âˤ²Ã3 ¤¡Ë@ Àˆ©¸JI@[7P:>‡Ê:ÜÊ­à D»iËAhá8­ƒš=Ë–äÀéBô‰á ”‰i8uëÁ¼­¿B¿ó 2 $ä³Àè)&ìBŸ’Áÿµ3ž¤A*ôÀœ°,AÖ ´PÒ! ‰;CâE)ì@EìÆeë¤| G#G'ÌB&K£s|(qdGˆ£Ç|#B3lxl5êãÆm´Gi[!ÿSL·b<¾NBF0úÆ|5ŽS6.äÇkl8k¬Åžðßù­lôÅ{üEp Æò{¾´9q¼¹³’7f”7UüGNÂ)0À@»öK òšAmÌG¥ÔE\Ä:c4ÀfúiJ5©$@Ü$1ºE@ù;ŒõºÛAJ—œHô Fˆ/u¬Ê“Ô)wƒ?é{!°3œ–ܘŒI²lŽ2¤8ŒƒGV;¾Iœ@1:¡2Ä($ËÍ2ËACŽ4컾,Ž¿ôÊÀ$žÁ•Â\J‰dJkŽ+ÙËæ[±T<‡ÄÅé‹K/©LÓ¤H̼š@ D K+ôDy¤Ÿ d5ˆ”C(¼ÌÓ,KÛÌÌg;7ÑÜÊÿ”„Í„H“¼3l|5>ËMÝ´LÚŒÇj CÂÓL$4 #5VcIå<Ì»\šDN”„ÌŸhNîȢƉËÎcN§4χ|±¼ BIJ{÷äÍ-YÏháüÜŸw„N¹¼ÏédÁèc=ÿ”2MÄ–ý´BýD°tÊ÷”&Î\ŽÖL2ã$>=Nê”O|P-ãOñzP‚ܸŠÔE–ÜP=Q 5Q¼Ü-hkšµ,Ñ ]QWÓ”éCQ·ÜÁÐô;«™=íQýQ R!R QH•QåÎMQ ¥·UÉôÐ#UÒåµÒˆÁ3kÁK‚Ñ)Õ’*=Ë0ML,œ ÍÒÿ”Rÿ&ýR,Q*MÒg›Æ ]Óñ|S8¥Ñ1%S;]M†,I$UÓ?uS<½ÓAÔè{H#eÓèTT15ÔFuT=SÑ(=PHÔBeTLmÓj Ë%­S0ÍSÕ¼Tû ÔjüÎ=ÅPM-ÕT5U:mUXUTÍÔU…±W•UN½ÕPT\ÍUWíÕGÕU_ýUç¬U[%VZÖ`EÖdeÏaVVÝUR=VhÖY}ViUÖMÅVn]Vf]TmÝVqµÖfÍÖoõÖb WrE×r5×j¥ÖwõSwWK5V^×vÍWp=×qU{­Wu…W|mÈUÕ€½×e×nUØ}¥W€åW-XgeXÿŠS‡5XˆX}íW]X‹MØŠØŒíXŽEØýØ“]×’}Ø‘eY]Ùcÿ4Nc5^c6nc7~c8Žc9žc:®c;Vã“`nÑã=îcmáã?öcläA Bî’CFdAî”DÞ’F^ŽGFŽH–dC^dF¶dGNœIVŒM>ŒNöäJdLnŽOeQ.äSFe 0naåV~emqåX†el‘åZN\Îe]Þe^îe_þe`fafbÖåVh+ˆä8æd.‰H€HГh…S˜ fÎæ8j¶æ|døæ0dVæÀ €*œ`æRN l w. o®æ3df€’0çhöf&z&ç˜g¾`d¦ ~æãzÆ38…H€ fÿstކ~è|8…àgá €àãn`‡‰næ‹H( 6fþˆŒ^å€(a`ef6‡pf+ôh>¦fv€S(铊”^égsÖ瘞iŸà驦è“Þéž FØè“FàéH0ê€ u&é|€è`}.%´iÈæ³îè&ޱhµh˜ÞOƒVj`å³>æ’èçž0i›ÞçØè¼îf¥NI ¶›–ŽÀëÂö‰½l=6hÀŽèŠÖ‰º®gÉ>k—ðf néº&€ˆì’˜l”€ê’ÈìÃxm×þÄNlÂÿ=ÎìHgnS¢m+AæHXëði ˜ìî븦ëÀàmâ×vëàn¥é×n…ã.‰ä~ë’Øh´–íè®ër¦hñÆmÆPꆮëVXkÂiê èÜFïèîm¥þíõ€¥í‡Öçîhn^n—`fvxëçNðüžîîñþo¥–ê|ðè'm¾¨igî‰Åî‰S€m(€†Žèà¶,¼&o–Æk¸poÎfv@ëÝÖcónfàc÷‰ÌÞjœÈlÁö‰ÂÞkמhší §q´¾kŒÌ.ì|ßìœ@fÀ¸ñÕ>ë"ÿðœÐhYù¶r˜†‰˜>idÆiÿ´›h™ÎéVøh©V éÆm޶鉮l¾Èl•&+<Ço ¯’¾^Ꞧè‡óo…9Gf&çëdFt=?ꔀÈ&€¢öjD·pA÷ j<Ÿh<'C§t-7 —Vg–)gòÔvåSxóÃ0tyWŽo÷ncgf‡È6°C>ÀPë W·ÔFgYטWk>Æuˆ¡pce.ö’ðu”cvcV†öbÎvmßvnïvoÿvpwqwr/ws?wtOwu_wvowwwxwyŸwzOœøÆ‰¯w}ß÷b~hW&q~x÷eì$7n–þm^gæ~ÞëgOnÿÞkg¾wvô¥Öãio\?fkxï処æxí¥ví×hê¦tHí ¯îœ~èêk0y=éHq8ë8?lŠiêîøz\†ù”‡èÛÆm£n¤—t^§nvqxèl&ñ‰®k–‡ôšÎiûVsØiùz°×ö‚h›†tƒ‡i¥qêô™~h¯?ûLÿhH·iÛ¦îd¾ô°ß{b{€?zê†i䎄oèÛ®psz²ñº|œ6mØFzaoúæ{Ëf¿‡èǧng6{¤Ïô‘žyÛNü¢ëÍéé†hwf¢oèÊ¿|Øïes`À8…NíZGçÿ Ouzæ}©WíÞÇðhŸxÚŸíÔVæjúØ_þ¾gmæþ°÷få‡~ê¯~ë¿~ìÏ~íß~îï~ïÿ~ðñò/ó?ôOõ_öo÷øùŸú¯û¿üÏýßþïÿˆ,hð „ 2lèð!Ĉ'R¬hñ"ÆŒ7rìèñ#È"G’,iò$Ê”*1²kéò%̘2gÒ¬ió&Μ:wòìéó'РBm(jô(Ò¤J—2-ÝF¨Q9JÍXÕêÔ¬X6íêõëS­[5^½XÖ¬X–i ~mëöhX²TçÊ][ñ¬E¼õ|ë,_‰Ókÿ­Ý½ ÿ2f÷0âºó&V,aãÌH«­lÈŽú,´Å6Û¨²„2k©´ØîŠ+†‡6¨iµƒ^;ì±Ó’m·¬¦{j¸wŽKl¶çÆ ï¶ºN n»u¾[®¶õš+ïºÜúKP¾vî‹nÀö¾Êë·ê,hÁ…zÛ0ÃÉ9±Å¤E,±Ãì1½÷v¼ðA£yp«gÁ<2ÉΦ¬°È*—H)Â1 l3̈bL!˱öÜ+Íóò»'E}4ÒI+½4ÓM;ý4ÔQK=5ÕU[}5ÖYk½ô@[{ý5Øa‹=6Ùe—ݵÙi«½6Ûm»M6ÚoË=7ÝuÛ vÜwë½7ß}Ë·ß >8áR^8â‰+Î÷á‹;þ8äg 9å•[žuã—k¾ùæ™sþ9è‹{:é¥÷=ºé©«þ6ê«»þúØ­Ã>;íWË^;î¹7}»î½ûλïÁ×>P@!ù, iq*‡ ///IIIWWWnnnMx¨kuš}nŽx{ˆxw—g|¤t} Y­_…°~ƒŒ{ƒ“h…¬f‹´m¶y‡¨sްw‘¯z—¹žU˜V2£X¬_*´l2‡t~š~l•yv«yU¸k_¶xL¹{X©lz¨uh½ch·iu´|k»r{Ów4ìz/çy6ñ}&Ü[[Õ]aÎd^Í}FÉzVÛkMÛgU×vKÖxVÈdiÅksÃzhÊrxØdfÕmpÝvhÙxyæ^MãZXçeIädYéwJèwVãfeåopåsjäxx†n‹‡vˆ…{˜–m…—u‹š}“¤l€©w‰¥}‘¶y†Ë|ƒå€y˜…x¾‚I´„X«‡g­Š~®‘wµŒg²Œr´‘qÞ+ׄ:ô„ç…'æˆ7ôˆ'ñˆ5ò‘;É…GȉTÌYÒ‰FØŽRÛ‘MÚ”XÎŽwÍ’eÜyÔ†gØ‚tÕ“i×–xΤ}Þ£j×§xë‰Fë‡Xè–KèšVð‹Bñ–GðVç†hä‚|ê˜hè–xï [ð [è£fí©tí°{ð¦hð¬p‡‡‡‡…•„›„šœ’Œ•””ˆŠ¦ˆ–©‚š¹–Š¢™—ªœœ²‡ ½›¥¹¨€€§†™¥˜Œ¥š•º€Œºˆ”·•ƒ»•›ªŽ §—¥®Ÿ°¶š¨µ¤–§¦§¦¨¶§²¾»§¦°¬½´°®···ˆ¢À˜­Å±Ç£­Â©¹Ì©½Ô´¼Ë±¿Ð»ÇÔɃ‰ÉŒ“ȇȖ™Ø†‡ØŒÛ–ŒÕ––Ä™£ÚŸ¢Ç¦‰Â­œÙ«‚Ö¤‘Õ²Ó³–Ω©É¬µÎ»©É´¶Û¦§Ö¼¦Ú¹»ä„ƒåç˜‰å™™ê£†ä œí·ˆë¹•å¦¦èº¤å·¶ò©ªó¯°òµ´È¼ÃÊÁ¸ÙÀ¨ÖŵëÁêÆ§éÌ´éлòͨñÁ¾÷Ѭ÷Ø»ÇÆÆÄÌ×ÊÒÚÜÃÅÕÎÓÞÔËÜÜÜÆÔâÛÞâÝàãåÅÅåÏÐç×ÉåÚÙôÅÄôØÈóÖÖåßàæáÜóäÜåååïïðîòööèçðïðþóèþþþÿÿ­ûG0ߺuù Tx°aÁ„ ó=øPâC‚ÿ ZÄȱ#AŠCŠ ’$dž(¢ÞhƒD#¢~"UUy­ÇÇcÑÇ dŒ! +ÌÅ,„„±Å+ë2ÆvøA4Í2P.3~Ý×b>’G!÷½È[Œ^¥O>„q#Kvƒ#X¤Aƒ èÆ!¹E³$‡ùTå;ï@"o)òÍ7·ÑÏ7ÆÜã%x`ndF÷”QF4=ŽÁG4,€Ñ$kˆ±Âa Y‚c¸Ød>O¾“PŸSòÖm#^ÿÙÛ¢ŒŠ7#Fô”ÑG>ƒŒš`°àAެ°Baà¨,°ÎŠê2ªæÃêw¯&ô¬ù4J+ž•Ýš>äQF7ˆ”ñkd¨P‚ :ÌÃg(éëxê mŸËü¹[ ƒz궺5øô1†¤¾†!b”P‚ (,bƃôQº}€3<Õ8sÄÇGq<àUyž©Î,šÀYE8z²_̇À@bÆ}øá:¢œÏ1Q.²È{‚G¢‰‰i«2ËNÄÏ!| ’†É®qÅ_lÁÊ+«p!FŽwtD£È´Ë2μS D´mo—^: 0Ôa$Îäÿ£H8µfX`x$€ŒñÅ€ aÄ%‰|!0U\¡‡ÐÓÄñ€"…Èqƒ€mÁ&l» ·ÜPÒýbð‹â½6ËÔóÏ7xQpÂlXòÊ9 ɳŒ¨Å L0 œ#hÂÇ t´#$­s*[ÙðÖç ÷å£A‚ <Àˆ 9ˆ„á#-L$ K0@,€Ž($€ óÈDF2ˆÄÃÞN­"8õÉCÆÙÜÿl@Ä€ÈÁ.^aJ´#!®€"P€r€¥È\”øä'ˆ¤ÈJÝ€{8AiÕã1Tˆ`iP!‰¸`bH8ÂY°‚Š ˜À+V³ "ünZ±:„4ª¤±ï ¯nžCIžz°‹r8AB<€Ø€ (ÊQÃq²“ `&>Ùô€œ$#9i‡<ƒ“Âȃ>IËZÚò–¸Ì¥.?ùX¤ÌÇ$’ð‚pIHA D ´"­(9˜ ?C‹{ÂןºSÈk -`c ÏoZf‘|ìâÎØGp¤À °À, —mt¡ °@*Aÿ‰(,ƒrË0't ‘µ Eƒ(Dz 1ˆ2œM+ã·ò-¡UÅ-˜`+€L´@wô ‡5$Âp†“.ªÑÉ'Ø€ G8è=nc¥B(ê¡ÛrÛ;Ì—­ f$)ÒâÓmº¡ ,˜ Ȥ¡A½á`Ì*,`ŠvTB=À…($!…|AäÞ8"ºqSœzIØ\F ÿ•˜ñÕZƒÐƒÌHX@©ÀðN>,ñ€_$dž• ?UeIHéi´z’3¦¡Eº©/42‰G4°P…ƒ¼¢˜EµòQоþµ‰çø´ÜQØÃöO‹Îà©U¾„d.Z)kkË ›˜»ÿÊ“ hÀ:øõ§Fu•m$‘Õ­võOþ+Ú2T+Î%×I¿‹í€fœÄœ# È.$—hðh|Є"…',€"| ÖÛN°"O"Bh!…!Ý`.[E”¹iÈ_ŽõiuÓVX`$ÌG!*E†BÄB 7 ¢ ˜€W¼B»¨…$Æ‹‚á- â ‚0픕ŒA+”R»|EI_Ò•QÔˆòjáÔ ÆÈð‡Œà ÎèÁðˆ„´C„¯ØEž€‚´ ñkÁºó͈öO¹ËÝŠã‹Å'¨‘i!=HÀ$ò‹#Pÿ!¡}&”"á„ÀmAh²Ó¢hä·¹OjU !Ø­¿õ;b&s>lŒæ(e‚ç|ÌÙ¥:È i‘>ÁJ‡8qO]ûG¶Z¶†æ#ÁŠu˜ùÒÐ1üp,Á 6(AxÁ±e ±Pòžà‚è`2˜.(5.p\Œ†p訟õ'=‘ãt m ”n ZƒýG‘ &À-rЃ1 / ˆüƒ×ùˆ‡§?ÝД%×=õt]ò•ɬÃp³p‡,J³h@BÑhDçJÝ}ƒ(DD h ~àƒxÜãC(Q\dˆÍæ<ÆÿÉ‹£«òT}W iž™ºC1þsF¶äqS7ØÁ‚àƒ |ø@p†ˆ0™¢&wQµ$é÷´E[«—û"¦CË$´«È2& Ñd.¸¸A@Ö@8Z$¥1 ?ÆŠGKR”lú#“•Ãv2Š¥Æ“²¼_çí[^wŒ%%$ ×NqæÚý„OÀíN&ÜŽti¼­rù>Ñ ††zÚÿ¸hZ›×r Õ¾,§nΉ,€–È…W'ób¤ƒ¼ÍA±‰ ï{\éL—‰<z:¥ìIÕ6-ΡÝ¿CM#²7rë,Ì KHÁ¢hLÿŸA:$c1®àÅ.˜±Òr¨—ŒÀDÈ>„Û™ÍhÓ2œâüËõÒbjŠq¯P_þ`¯7pGf8ص 0:pªòBP3i] &a™æ@½Ð^¯àÎpy0æ5b$6rà”ƒVuÒ¤a°^´{…÷eM_ƒG¢€ =—/°j É€f€BÆO°"“VE#ó„BÖD|x WÍ•\SH`Áõ æP O\Ö\°fù@OÑtBYáR"sÛ£`5ð1œ`Q°@*Æ6½¶ ´Ðs!2@ %H}Òeùч,ÿ–¤a AO¢6miYlhnHO7rç—€DJy¸‡Á¤Óp:`gGðA§ Ä§Ø @ àOò i€ÉÀWpBަ^5òÀŠQÀU F€Ð ÀE:˜‹ (†¬ k çÑ,ë\úÄ MP OdƒDZ Oà.ðM Š1 µ|Qð§i°p0 ëHÁ(UÇed8:ƒ¥pàP;Èu´åÛ ¬ P@ãÕÓ'ðBÓ0 ®&€'d¯ ¯ÿÀ6à7P_› Ƈt3@ÍhmÙwÊ•`£Ð1B·qSíHc2aU6i6 Pr ðhÕ°'4 )OŸe…=p˜ pãG33À=4ÀãÈÉU ïÐ_ÐÄ)vÀD“ L2‘a²m2‰a 9¬°•’P{d –¶ ΔÑD9Î@P7 Á nù$GЙ ¨}¢s A}†#ˆðg Ò5Š”-¸ô  ŸdpJå0 GÀM@¦P=P œT òµ@ù:€ œô nYÄ€ 4P»dKǰJœÔny „ fÿ@Ùéá2‰gdHf•€•÷² Rp ë° ›–bùd¹z˜q7à7>y950 Ü`i`V¦w™—‡åƒæ Ž0 Otä¢dUh‡—»Qƒ†S ë0 QÀL­Ò'M°#0Œp“ñ f/|&2Gb€,a°%ìøïÐnì–eïèmQç‘ %j8x¼±Ûws« Pªa×?¬¨v=P¢xÙ9À µÐÅÖŠ?@£có+d:Å9æðå… ‘ðDù ’_Ã?¥PÆ ÀÈu1÷¯À`aØÅ¢z‚ âØ1Q…¸yDàd¸à @ÿ°eà+¿â+d ‡PwJ`ëi`47Ü”-ùM“§¼ •{ 0¸ İ*F%Œ2¬‹“¨µà pg0Êb0`P5Fz©Z”ÀXÓ BºÑ'R)ª·2`£Zªùpª©ºªX„ç1Aöd!£.P«p''92ºÊ%Àr¢q’Q‚¨*×Ò"v°Ž—Ȭ»±§}ú šÊE T}½ vR ­: »ð ej.`@åP-pÕ`ë7 Ű 7P ûR¤ý¯RÉ« ] ° "ÓP Sï°ŠG€ –°^Q`Ʀ¥Ñ ! 3dÿZ)·w­W4:×£Q€R7zºqCàCùŒå>©ö"¯ ‘ð ƒçªÄà™F³–pã PX˜RN·ððŽð)°,‚T&¦'©¥bx¹ Kô5ÔgV%â0K»(ö"ŽÄ° ÎàqË€ Ä M+ 豪ð¶šÀY } +Zâ|8š|;ƒ/˜ Zóp ÃØ±ú‘*¬º £¹*p³†€ •# O° !²¤€¸‰û“ëÐÝà ÃpЇ¯‡…/9xuÿ2º1Ëйé  €¢kZï 2¦Cì%%® »±; ëPrCøò!Tw"Óe—ÿ Hÿ@¼Æ»-y‹/{ë'y 7Õ@ 0Š™˜  ËðÊp¸p¿±ë z@)×!Eó'Qû@_’b꫹ÖP¾ß1²Ò­Ã %%«±rU«6ÐŒ ÿõ»p Ô{¿a; £€ é¤uƒ×*Ée7 Z‡b¬J·õÀ¼< ˜R·"£V‘ÕP óQ° ív/  gÐÁü¶`A-3€SBnHówhˆ¹IK]ž ç %“ MLäDÒ•\«èG Sóëf`ÄGì U>Yœ/9‡*!“/P²æ § ʱǛªÑÒ'FB2-2%—· Ð W°±ÿËP¯•¼‚|<0bG"A6lP@ nú‘nż }L™$]Ó‚FpÓª8ŒÈ‰Ë Šìå€@àÈÐòÉS’ néq5€¹`n{¡pǨ†¢ÑÆ[Ì Ó”’_¬¾%ˆN g¶¾ ±»)0õËÕÆ]yi Ë0”sP Ú*79€éš<(¯‰Æ¤(•`Twˆ: v©Àù Eü` š0 pKœªcì Ánðªny< ¤ ê ’ì,îSoº}°a‰þóŠìJPZ·¸Úð°!0 š¸ëP "¼ Zç!­º qÿgÀ@×9 ëÕë7 ÝÉ»ÁÍ—‹*FÁŽÇ \ôÕÀ f€œ4 ÿüå€T×'•œ—0q  5r`N7ð“ „R`ÙâaËE}4Qu(–°*0 ú[Ȱ ·0 Q/½V¦¦8Éæ–2€ ˜›vì%ÅQ™Çϲǖûz—Ç œtm׬: ñ wð•@ ªÐGÐcÐb±€åqGð_Çq°tGÐ?£ÂSlxÄ<D½Z˜»–:£*XÁèj4•,x@«s)Ðå° =Ð6»€ Š€˜ŽV óÇ6a: ëÿ{Ûr;Ì„©ŠEyw¼ Wl-à–çœ6°¹ xpwF€ ó‰NË€ ŒÀK0«€¯(2V «À›-âg]"Լϻ‘‡H| ‡g?àI£Œp !ó¢íGöPàDBDæÚ×m}S¯øqDÀ à‘ Vbbë|ÅéCÀVëq…ðAð6 ´ O §Æ•S൰'” ŸàH®–Dð°ßxt¤¹÷À"ÝT6ã’}>2ÇŒåqzBDä!D= ÆqL‹?pK“¨0 –5%o#Æ}Dßy€2‡À$-Ó°Yž‚NKÅH»àqíÿæq÷L YUÝÒÝå7»OÀN Œ° ¨$ØhöIp“ »d yPŸDRœÔK½XTjçÄÇFоq:ðÕ”/ :%}´ §I€ú˜à°(̾ßýUþtX>€9v{·<$á4íAp6°qNbP`¦,2FPÒð G7“(ÙUQâ Þ F`tp£Ÿ°?¼ãV‚9X·0ÜêwÓwVKì³*¦» -r7;¢Æ×˜Ð ¼à‡he[¨x–qOϾàÒ Í;ÅópÀø~j*ë@ì4 =Ð& ÊðŠËå'… <ÍÐ òS=àq ÿ-Ô~Ð/x’€Ì]¼ÉÍ%¾äÛñ¬wBè€ÞÃÝf?-¦ÖçË0Óàqd6é?À½‚AЀ¹Ë3 ­òÇá+€ãë lAùQô pôåfgîG£Ûç° Ûò@õÞíªÓ°îd¶õ@0v"`Üÿ6 š‹ eïê©*76 ¼ ­6°–«òòæG1ÿªb/Fƒ‡Pó@Àn×óÖøÇÐ%.&J+ôúÏX4Ràx €0kt%*w°8x”uˆÎÐxB»ðÅO †”ÿ]ÿU 0 í^2ÃT—ÛÕ°#°$@B€û¦Òíÿ—AAù'èýqËð …AG€ LÐvÍtüWÆ6¨Kx¼=Þ«ŸMP"­ÊÇE~ô {°C@ …ò–-«väÇ".Ãõ#ˆ¼i§M#òcš¼ŠDv¸hÑã•…Jíò9`¾rÕ–M#9òßËë`þkYÓ¦M“ïF¾[¶«¦ÉeÊ‹6h‘jßEã¹2H# ‘W®â4ƒ,óE<òîHƒ-ˆ,ËÇÊ‚¹šÎ–é,ÇÓYÍ™2aÞ¤‹síΞ-U®\æ¨Q¤J™FŠðHD‹(¯f-ù£kT":tŒ-{öçJ”&µ’Œ;³îç‘{ß5%Ör Î|—=Û³bµCƒ¼aÿ«ðˆ³©Ó>ŒHdâUÚË>°!åcÈšö(.͘žA:pZ9’ö’Ä„ˆ|-ÍçµöA„Ñÿ¨6²/z²æ#›°qÂe›òÔöpæ|ä¹WXi:¹^š´j&j;îîè¶eœ‘&šh¾Ák%g("•ˆð®+’°:l'…ÐËá•s@cp$sî³`vò‰n®k\±¼rÜ,¿ªyG-–Lræ]š£Kž©œ©èˆWl§ ^1§v`™ÑÀ›¬©)Ì>ãÒH#ËQ 5›ª!b¬e "žÏfi¥’YX´€—ØYåJš²œîF’ü›"ý sLºÌ<,Ãÿ3Ù¤ë# (ˆ2Ÿsæ¬óÎóÔó3>/½IH"¼‰6—¡Œ®Y,XÅSVy±H¢œ²J<5ÅTÖÏ:3!2ÚÌLôˆðÓ¦V^D©ÔVòiñ>÷‰•Ö›2ev$xÔC¨½|D½•¬ò ëך‚E«œ‹Íg|©ÒgmröYQ ÂåLˆˆ0¢šjŒðM9¬«ÔUfIUØ–:£1]’Öe^”¢êP+3׊¤íêzeŠ'xÅ&±$x$ƒiE¸…E¥¶a· Æ–®i¢h‚‰(vt &t7æXfˆÇªæ]_)š·Þ{{ü±Ë›D#¦ÇçΕ4]U¤Zi‘rïÖQå;bÿn[Ê %ž\ÎØÒº¬=óäf—ÎÇÖ3A,É:’¤¦º®«Ûúe£FY^zíu¹¥Žeå´Èµ?õYßBOú¤€a>š.‘C5쥽릒ÝÛ®e˜»æu2ç¸Î;÷¼‡ vá|— zðütÔSW}õLç—ŽQý˜pé¼õÕ9'f—]ˆI}$™bf›nžï.Xì½=å‘ ŸW—®­§ózqÆiV®òÇéú²o¥oŠ~º¤g[žjœÙž?§ ÔFè —›à¼ŸŸÖu¿—y~úÅ>Þ{÷5ÞYðRõë×à§¿ýé€qó߈’.pY÷{ (Aáý¯‚ÔÿçÀ F°}2Ê (Bþ‘ðƒéâ`Qˆ±.­…Yš¡–øÇ@²pƒ/,Ú5ÈC¶‡A"Í<ø>‘‚7ô¡ ÅVÃ= ±‰I aa8D#îЊ=,!O¸ÅÂaq‰`Ì"»(?-~ñŠSD£¸ÆJÍDŽs¤ãeTG<æQŽwÔcéÈG<ÆÑƒä YHCö‘sd"óØHG2’ƒ„äÖ&)ÉKö±’™Ä!3÷IP†R”£$e)MyJT¦R•¥Ä'éÊGÂ²Ž›ì¤,kiËVâ’–¹´å.3éËI&1q)GaÓ’Ç,f"“©Ì[öšÑ\¦4§ÿÉKY>šÍtæ5µ©Ln2œ~ü&3¯‰MX–S—ç§&Ý9Ív¾s›ò';½IOsÞžø\§>ç©ÇxÆÒŸõè@ úO"T¡ùLèAÚφ2ô¡ÖŒ(D'šM~Rô¢éÌ(F jÑY~¤#}å>EêÑŠjÔ¡ ©I]ºROž¥0-éF9úRO®R§;åiO}:Jtº2 )iKm*T™¥KUiLqÊÔ¢:õ¨œªQ19Õ_&•šHÕjV úT’Fµ¦4mjY‘ÙU¯NµªRÅj0;zS°Šõ¬q•+\¯JÖºr•¨vÅ«^ï Õ¼Rõ­~í«`¿ÚV·ÒU©a lZÿÊXÿ¾Bv«†U,ekÖÆ^R˜,g'ëØÂ‚–­€ílc×:ÖÐjv°–Mmb÷JXÒ²v´’•­gq[ÜæV·»åmo}û[àW¸Ãíí?qÍã"W¹zL.4›ëÜåæñ¹Çœ.u£‹ÇêÚ2»Ú½nËqÍï‚W¼ç$oyÍ{^ôºR4!ÀKU `ëý‡#@€ER¤8W{ùûRÜ7¿zÌGs üþ£ò¥ïKð— žd>@ G ¤À‚pÉ| ɱ*° «BÄ‘tDð—ãÀÿ€#2ÌGì<ظ ªŽO<þZÄ">î:ãDÿ€Ç4p1€ÿcßµ°*¢,€ ÀÈ/‰¯+¹Ãn² p\+¿Äþ}I¸™æ¹@k†ñ{Ìa./ù’&æÜ„Çü#gòÌÿ€óšÜæ2ÓÎõéüüІ±ž'ùèHz:¾ä ·,å5'—Ó‰„s"ÜÌå+7øÈrNĉ9)a ªq,ÉAúÌ–p"ðáHÂÙÅJ>n£W<—JSxÏJ/)rIU„7įŠo-Îÿæö½ëPòiÓûmp‡[Üã&w¹Í}nt§[ÝëfwyU,—G·;ÝïF-osÓû%ö~‰¯ç\çH‡ø×ÿô}ò| Mû&ظr¶3¾û˜áûŠøÁó—y føºÑ_q˜Á\Ž {üÈÀ—îÇcüÁanóÊOmqRÂÂ'&E£3Ì_{K8Ð>yõ-e 7zß+vÍÁìf•Û\ÃŒ6ñ’Ýs<þœß,§ñÊ—ŒðuØ»æG1È/ áSýÞP—£ÔÜjŒ¿W耀¾ÌmË:å,G;˜ÉŽÇr$⎤H®³#ÝoúN›Ú/ñûwo®d˜ø]Òw7ïonR ѧ|å-yÌg^ó›ç|ç=ÿyЇ^ô£'}éMzÔ§^õ«g}ë]ÿz؋󧳧}íg_Üç^÷»çÿ}ï}ßûœÖÛ´ü}ñüŸ¶ÝÌ#òÿüä ?¶Ð§~ñ•ïYG¿úÛßýõ3+N=r_ü¸÷~iUÛüñs¿ü°­íLÒ¯~éKöýÛ_ûÏÇùW¿þ¢µÿKòOýý»¿Àú?è @×@t>4&ùK@ä[Àì›><>d>Ïš@ Œ¿ Ä@ëÓ@ä@ß«@ð[>rŠ- ü¾ÕŠ@ì;A:|AŒAœAŒÁÅâ?„‰ÜAäÁ@ó{‰B"tÁ<À ü‡"\ÂôÃ74C6D,Ä5CD¤Á?¼¬ÂF¬ÁG´ª$œDJTÄ:„C: !ù,¢m:‡ 000PPPrNTnnoMx¨jj†kuš}nŽy{ˆxw—g|¤t} Y­_…°~ƒŒzƒ“h…¬f‹´m¶y†¨sްz—¹›`4¬h4˜SZŠu~š~l•yv¥]\¯{[º{F¹{X©k{¨uh¤tt½ei·iu´|k»r{Îo"Í{3Ú}'Ü|6ìz/çy7ñ}&Ü[[Õ]aÉi\Í}FÉzVÛkMÛgU×wJÕxUÇdiÅksÃzhÊrxØdfÕmpÝvhÙxxæ^MãWVçfIädYèyIèwVãfeåopåsjäxx†n‹†w‰…{˜–m…—u‹š}“¤l€©w‰¥}‘¶y†Æ{„Ô}‚å€y˜…x¾‚I´„X«‡g¨‡z®‘w²Œh²Œrµ’t݃.ׄ:ïô…è…'ç‡7ôˆ'ñˆ5ò‘;É…EȈTÌ‘XÒ‰FÖŽTÛ‘MÕ“[Í’eÜyÔ†gØ‚tדkÖ”yΤ}Þ£j×§xë‰Hë‡Xç•Jê™Vð‹Bñ–GðWèƒiä‚|ê™hè”wî Wð [è£hí©uî±|ð¦gð¬pú±s‡‡‡‡…•„›„šœ’Œ•••ˆŠ¦ˆ–©‚š¹–Š¢™—ªœœ²† ½›¥¸ª‚§†™¢š”ºŠºˆ”»•…ªŽ ¨—¤®Ÿ°¶š¨½£Ž¸©œ¦¦¦§¨¶§²¾¹¨¤²¬»´°®¶¶¶ˆ¢À˜­Å±Ç£­Â©¹Ì´¼Ë±¿Ð»ÂÊ»ÇÕÇ…ˆÉŒ“ÁŸˆË–—؆‡ÙÚ–‹Ô•–Ä™£ÚŸ¢Æ£ˆÂ­œØ¬†Ö¤‘Õ²Ó³–Ω©É¬µÎ»©É³¶Õ¥¦Ö¼¥Ø¹»äƒƒåç™ˆå™™ê£†æ ˜í·ˆë¹•å¦¦èº¤å·¶ð¾¾Ç½ÅÚÁªÖôëÁùÈ˜êÆ§éÌ´éлṳ̀ñÀ¿ùÒ¬ø×¸ÇÆÇÄÌ×ÊÒÚÚÅÄÕÎÓÚÑÏÛÛÛÊÕâÛÞáÞàâåÅÅåÏÐç×ÈåÚÙñÅÃöÝÅðÔÕåßàæáÛýáÊôçÙäääîîðøççùòëþþþÿÿ (pŸÁ}ìØ4ØîU­Z²d¹ÛGð»f,ˆàÆŠó1RTHÈ“(SZTÉ’åÅ–0O¾ŒIseMš3oÂÌysaFƒì\¹BÇî\­s ^Üx°"Ó¤(ë)RĨ"“:]ölª’gÖ”^¿‚ +ViY­gÿñ[˶»îÚLÊvíɺ,ë‘Ó÷O9riçÖô Uf`”dÓ&>»˜±Øzåêõ+ظZæôŠûö¯GšüZV.WP¯çÃ'ýhuÅÆba•=[ç>|ˆ éV$o8@€5jd†O5mÍ[hްóçÏ’·ÏœtêгCoÝiaÖ¯]‡ÿ/¶Nóç[~ÔWÍП?€à÷ABÍžy綈Ñ¡Ÿ4Õ0·6ÖXƒv>C 5ßìó!ŠPÓ‡!Ô h¡OÜ=çG…GžMä¡W“ˆ#ª·‘8œq€‚ÆDØÐB SØrH^ÈÂŽ"g(" AÖ8#¤3Ö\HnºUØž!| ²Ü…PfèÜ\>uõayW’“–[ÂtP9Þ¤HFݨøÅmØ€Ã$}ÁÛ>Ôôø#6BÂj÷ "à€#8ûÈN2ø@i¨”„T%XW‚(—-AiLŠã 5/žñ5. %o˜ÑÂeŒ™†{gTxwAÂcÐEjÿw$ û€C᪆š]Y’¢b–ÒV«7åìcÈdŒI† H I -”Q†ŠÔþA«A¬:ãê>°"8«A¶ªZ]®Qî[°À~Ø«•&‚ã8Ý,’F²i Á %ðPà b¬Á#²rÎYçÎä™Ýž}þ‰+¹"ºhméþª.º,ä—7i¤lf a $àpÂ#j¬a ˆÔ H8Ì̓M4IÄœ„IÄcá‘HŠ;.Ã:¼¯K,ôÐ(mä7*†A†´b—P¢†€,ê¬ÌÎÌLs*È †<÷l.ħM´kè•#Ž!md1íZˆ!†¯ÈâÊf¬ÿ¨ÇK`QÊB¾8 <ØaÄát:ó$Ã>—ý£†çFü¨å—Ç4O=úìã*b·jX`z%ƒœ!@ðt%°Ø²ÏΤø¶Ñh[vä’c{vVë2ªvæÃ§T¡ì|ŽFÔ°±}È’·;Ñè`ô ˜ íOÎŒ»î<óÞ»ù@cŽZð­_ô>þÔƒO:§4"†Ã`¡E:[CŽ@DrÀ„ èÍž0âÇ8!=Ž\æ“ú*ç¾Ã°o,A3Tê±a\av[à  Y Ã óp(€‹”€@‡6(ð„˜ ÉkIÛîz·ß¥G}bÿ+¦Ð# HÀ4àÌ`•0R¸Å (  (€Ò18!f0“Ílvyp; ãás&ˆ¶µ ÑoKBØÑl"8ÀÁD‘€ìÀ²°@&&²XD (€?±BTänHvÂÓA„¤n\(‚;ìá¨!6@IG6à±G8ÁH¨Æü¸‹@J`ŠR´Å+© È¢9Î0ùºU+Ug,3› ÃFàemžì¤KÒ lÌÃHÀ„À$@8¨@ Ps˜ÃtÞüæœÀ‰pþ€?8†7ñ_x3|(†7‹Á‡<„óžøÌ§>÷ÉÿÏ~â(s ¨@JЂô M¨BÊІ:´¡IéÇ8è±K,!5øB–°‚DQ€Å>`aWœ#•À“290IÂÉÁ W‡I6M¶‘x8Ef2 R{d#¾Èc¬‚¨!°…éö± 0€!@&01gÐÎçøx@³X9ȈèM" Ñ aÒta”»©N9é˜bä ü Ç o€Qè jÈBH ©}xC#Lg:Kìߌ¶š¯âC:HBD¡ÌÊ0ÄÁã¾³©1ݪÖ8æô}é‡à!ntb jØÂ¶iI@¨Or€%lqWÿX îÈ„%~° RX‚ ;>¾¡ˆEtc²”5ÔA‡ÀäÈNÀÚ:aJH! MXa£ƒ.ÿ௘EŒðƒ[PáH D7,\SråÎÿó ˜}}x“ b°ÈéÃ3’}âŽWXÀSÜ"2…DÌ‚ xÌ£Rø–¨ò r`„ ¼ 5B „\çHi¹Bªpv6$ƒuXÈ>ò,Ýþ"èhÐÃ5®¡4â!ˆB4~ÐL ,|±ƒ(œà/øÁ†ðAIgÄu¢¢»ÖV‡XÕÞAÐ Ðp ƒT Cø.±]$aÑ i°H…T (¼@qE`6ð‘$j¬9Ú@’p¼ A:—h¿øõö·)e¡q—{°N·˜°‹­: ‘÷>è­X áã8¸Å>$)¢Ó;ÿÛdž_e¸Lz8á ÏsÌeÎpçȲ¯`ǹõP Z£!I(A €(à.sÆ 81 bG! 0xŠ@ƒôSièF8Rö‡D”5åAÊž«ûÖ¹ºÓM»ÚUòœYÖtì4Ö B#À@Ñ%ØÅ-vðƒäq ‹‚¥‘„MG9"yÉÉÚáG£¾.G5Ì»My꺕5Îa‡élñZ”âƒÄÃáÆÃú=S¨'Œ°ÕAˆ}ì‹° @T(ñ ¯n–#%R“oÔØ¸,À_~v„Ü©~‡|’^‘$Šï L £QyäÈEz„!a•‚ÿ¢#X㱆èFî+ô-DÍ£@Õ¶6ל«í‡%¿òkg5þ©¤Â4Øû€ Ë@”ð׿ »; 3/I Bà5ÓT Ö K½ä"=R(¹A½Ç5æòu A²cϵm«¦ùGsû·!áïE– L R@vfU?¡ 8I€lFá'~Õ8µ(íñŠÐ cur)çx÷¦r¿—r’w|Èg…+¸pH¶|IV À  ¼\ÎÇ V¶U;uF x²{äg~ 1cµØ‘!agc÷>phv§g'Èm–Çvß±î =ñ š@%ÿ@ Hq'„pwÀ û` ±ð ¾ð ‡e\ À 3#{B {÷fÐ ccáð àð8²rÜÒrþ' ggrd&x…8sƒHˆl¦³d  !ÀIà*ð@MÓm•Pxäq9 _& ï ðs`>ÀšÚ‘cÁ÷f#*yH—Ð>‚¡\‘¢ˆ‰¢WŸ5§ŽŸ˜ ;¯ £–à…0” ç !e$E;ѰU\µ8Á E$Ip§º˜¡´¸qµc:¹±r°}ðu$º¹ ŸŠº¨åÿ1GØ’O²P•Nédµ@ µDNð æðSP™àM™P;@f=¡AÀ»àMÂP¤æp »`7àOù¤ ídN?ðM  ‡`jp¸NõPÈš¬Êº¬ÌÚ¬…y„!Œ-j/ª-wBÊÀÎà 7𣓰£—¨^¬—0{ ÑP7` ÜmmƇx‚®ï•çÀ ’p ñÒÇE|'Ê¥[ꥉùÏ±Ž¦“ ì` SàN0±r'OÐ! ŠG%°XjXi4“m`ÒRMb›}Çw;æ›o‡¸¡|VTÙ!K°ÿ°6Ë-Hì ˆÑç ´ €(ô– ø|?°¯€ ?upÛ7ÉRµgPV˜t“peœP „TŸysB_VÉ…™¥‹™³Œúž(È‚;›²ÐK†±è »°š/3$ ¹ >hȶ Ñ - 1VKh@ Š€gËg¯égÎçGÂ2æ°žÐ5»¶ZŠ›—wˆR |eq[ w ,÷Žô53o9—0¸¸ð Ôr²KÀ$Œ÷ † ôe QGÒ æð —K³8«¹iÛ¶j«AŸºû0º¥ËrG@‚0³kÉ63<¯ m²"´‹,Nÿb »§»–°Cr¤û¶B!yP›%ɹ‚˜¼*¹¼ ¥q;·²P·zˆ·‘Ô–~ XÙ˼0¸-`V;/d(æð-.óx΄;¤€ ž¸p00›»V™¹ÊûÁó‹¼\¨®Ðd à b ÖpU2ÓXð` 1³ šÐeSPR—‚6ðÁ cPµiÀ{(…CB}(;„•Efd h´ñ@žó ̶V|Åáf!²P • #($Öp xÚ5Bª8P í%;Pg ­`)0-š¢Õ€œF'jÁç €”7BÂc³È5“±¹ð+Ÿ]*Â*ÿj(³šÇà¤è{ÎÀ 4ô [l éð$5 Çð’ÀÔiÐ"|ð&²x'6¯PjVœ;ã€Åò ËLÅ{f(@6‹¾€Ê¯¢8û`:»P;¤¾'Ú  ðÐÉ—À¡Ü ß` O’‡w[$óŽñ79ºlÎðʆ\¢»éÍ»É0·|'¹,að@3½l`äeïUÌK€ÌÉlˆÐ”{S :T4“mäžÛ,˳ÜÍ“b¢o•+L0¬ÊŠƒ ˜°±rÊ Í€'› ÏñŒ‡À{Â5yòÅ:¤ÒÊÿ,Ðý͈JÐÚ‘Ây’ˆ¯ð WE$Í¡¡Ø‹ÒÈ8ÿ° qF$ø @ÑñÜ ËTô7‚±’cËAzEž¶Zȱ Їœ˜››m ÂXXº` ;ó~؆ £8Sà }g­†¬ÀÓñì´? š·—³X$u÷5H’ç(Å´ìÔà ÕMÅ>qÐBr %uR‚DHîÆ33$13‚ƒDfÏ«  Ä×3}åXØSb¯|¼U,Òì¿#¼ãì 0t~6EˆÒ-a$$ÑÊ ù¡¬ŒÌéÐ Á0° à#Ù4ºm@ Î@¡v€ ÙË8;pê°§î)ßÂCÒ#ÎÐÈßÊ-Ú8T$`«#A–Br)ÓPÀÆÖóÐ) PÖ~ éà ºðbÝÎ@m°7d«ÖÐeHÁSÚ`ä˜ûÞv]Òþá_º×-$Y­šG%03ø zÿ+}ÿp ªðÌp ÉŒîw'¼®2 tÐ 7Ðu°¾Qp ýXs¦YL~ÜHžê¬þ¶Ë½-áI’^3SÀUIp   ,g àÐuà ·  nð1ÿìFÝR«Œ5PuEJ»pŽ èeq}¨|Ž×«žíÚ^ЄÞi;4 ª·žë»®èDÐwH0*/± |§šç0 'ÀU±—q{>@å—(ô2Ö€Ôâyäxžäw¶ç¾BßÏÁàäx—ŠÃû2m¾]ÃÛó°ÅÑz`vÐ #ОРº° Ž`0qÈ0І#µÖ€®èœ\îm"AÐwÿ½•7ËíÝÎ56dÎ {Q÷EêzƒÞàé { ~а é°;° ¼ NÐà é —4Sƪ{ÍØ"¿ôoŽð@a¼ô›ç×Nó†XßKéÑ q”m8{ù0° Ê03‚ú4? ‘F€E¾6ï#Ñ%—²gÏ`!Ì€$œöÖ5EÚÛ>óhϼð…B¹$¤±‡‚01€¤p <•PÝ"^;X M`EÚ 0ÐúT°Ðw9—áG}Ú¢uÏù&"ùd¯ÈßêÿÈ´…M_±G'FGbØùºDÆŽSiI0Áº ¶°h ÿÀUE’8Ó¿ù| .Sáûýü2¯çK>Ëõ¨ÅÿÞÄUíä ±×w±wŠCàŽÀ[¾~ü0gĈ¯)QB( ¡ÀH¾Ž™3·lAеQ䨑b2>x8öéÓqß>v)U®dÙÒåK˜1eΤYÓæMœ5ÿíäyÒçO Aƒšó9/‰gI 1‚$H/‚ð˜T))6xÑœYÛç ©*KNXS´hØæíƒgk4#I„Å×ÇP·pÔ ÒjmOÀ£\¹°OÁ‰ód·Øñã!O,™òåȘwÎåÌ™¨ÏhIœ‰N2Ä©Q_àrÞѸHUÿgäi %,X ’4i´oÔ05È#”,t÷13ÔÜÐѾûiþ—²ú¿“›Rl™»cï߇Ÿ˜ÙÖ Á…%^ÀàÁCª/¶°‡d¨ÏÓ§^à–_œ‰fžy¢AbÿŠ`Ї(v³àœÎÌ‘§jªÄxæÁÆ™q¨Ë®±ì²Ó®¼óÊcLÅÅRdñ:ÍÔS½}¬IâFgºä‡J`¢™$‚pfž«) hº"ˆ$¬ùᩬ8<éš!EöØÁ’WΑłLÜñÌ'x¶ò D #Ñ0±3L<UŒÅÇKSÆ Jj­}P g¦*a— 94pÿEqÆ kžºfŸ‚‚°Æg°9 š!¦Ù‡È!jà«}^™pÌöÝÍObÇÄ6Ût³9ᬳ²YiMOROÚó$?5~0ÈÐhUä¨ ™œ'RkÊÜÊšáuf!jxÁKE¥p.öˆ4ЭèáNUVƒÒî'ÊbýN]îØm÷N\…¢‘ÒhàÁÆ .ù…`ßS«H dI¤ž ž}>L*‰=¡Rˆ?@™†$¾ S¨yàQ†O¶|3p:ÇÐ ,¼íN|u2w5KÖZG†7^l&µ”Fo“ª‚ ?•)P_3hÉýöð)P÷ˈhôÚC"ñe^ˆ`Ôÿ œýAÊ“2ÆêÍsÛî§XçB¹åɆÑì•ÝŒ·F­¡qSl¢±›BhBˆ(bjÚƒ À!–ÚÒ®†vDOb'擀ꟼf—]Í=·Õ7…Zõ1ÂTݲ´Ó5ûl²Ó^;á¤àqö˜ 2.)iüh¡ˆk1o±I6®§Ú%ˆ!æiÔˆImóË6#zˆú‹Åü‰Ò™?,Zd”Ø,‘kì>¯ûÄ:ï|l¯]}íÑI§ìtJî¿ç“$#æÑ«lÁ1„g­Qœwe™ ÔF%á5‚»–3B¹“haæ(S±,—’ël3Ÿ#L`3ÁU}tá»àÿºF:ÑÝ Wé+ûN¢0JO~† 6쇿£¼~M"¤Œ÷¿“ÐgF¨R¸-ŸPŠ+æ¢P"“Á r†%=¡ž7ÈD“y||™Œ¦º¤°îLX³3b7»ÚâóV²’§4éwÁ^ñ$EF¤„"8¨Bó€R³« Ɉü@"™ˆ—XO&_‹ xÈñ•®|¦C_ÛØs¤€xF ‚ þМ¾ùl42ÈЂ@¸@È€;äA pƒÝ1rZùÁ|‚Y¼Bîø?²§’Æ:˜Ã Á'A`ªŒŠÃÄÌéN(3HýD§:£0D p”j+r3HZ¼ÿÂñF=K€v€åÐè²@%öÁÏY<«Z‰YU˜?r/3ñ,$˦xÏËs(?q–o¦wÇ«D‰+ô‚‡/*׺4Â…I3ò‰;2aYœCT¶à#KäÙ–¨™ã¨ÈºcÁJQ‘Ä̧>ò¶~þ³jÓã®Ì±L¡`cX›4Â=:c XdÂ'ç+|b[T'ƒÁ<ŒK.ÇQ¯¹“{ äSãÔ§VјoËšŒ„—>¹¦A‘i“¨YSÎ|É€è>ÐaŸž¨JíaTR½?"òU¼üh­|2Ô–AˆÍ!b¯ÿ®Ä <1g¬1…'8a *­§'¨¦kns7~â:ïúcµU¹ëªh'ã\"¯-¿ØØoü¬á_ 8 }áÌq+ƒ´¸—…à÷ÀßÓ×ËÌñöÀ¬Ñ=›g‘| "kÃéÜçF~Ó}ócÑ`·} ,•Ãwf ö( aRCj 7—dfpg3Ìè®P×ÒÜ‚tÖ¼‚iõ±ÍL~Ãô`…BBîz½¬F¯:…ºÄcãrÂDu.ÑÓÇóEÊæpá`*—¶Ö€-èAZ)ÏÅÎx¶\…͘Éx—}4Of"vko¯MÍ ±M­ªEW[WØ:áaåµm­bm¥ÿìʬ”«e;ŠÈEw:ï:c ¶ÛVÀQÏ=ÏU{îÅEÍ7p3葎ü`¾ ˆ/.r”§\å*Gvñe¤\?ØGZ¾òcøB"*OgN|þs ]èCÇÉ‹}mâåʹ¬¦m n:§ÇÃ]KôijǦuó‰‡öÎfßÍpŒ§zwÓ´­.d¡ÜzXyª5.”~z[é &v×®ŽÑ§7Þ9îúoÃŒ½D««îG‰ŠŠ‹oŠ}.”6­·í¡hø"鹪Zd4õ¸WÌx¥zÏ["Ï/÷Äï=µ²ÙÛÞsû<Ã&—è1¬ç¿¦¹ÃÛ^Og„|KCƒþá0ÿüg‘JÔ¢b=æ’½©J?ö ™ò›±=û3­S¾OÃ+¯+6ás™ [®ÎÃ2ás@£‹½ôS¿mƒ¾ÖÓ¼ôê=A’‰r/ò½B¶ýó±Ëp*¿ ½^2¿ó+@¼AÎ0/ÓÓ³d“>ÌÒ»zÛº‡Ó¿ôAÓk¶°S¼‹KB•y=Ä‹'%D¿çÃA±©¨ôB@1#?ÜóK·-{¯;"-´¾á‹¾±+³q¹ž¥‚5ÿ\!À¾¢B#ª ÜKµ÷s0÷£±]òA&²Œûò;ì>y Ã1 ܾïÃB„ÃZ›:9”ÃB£>c›¾ˆ£¾#ÚC¹ª¸?<5ìDÎr·Tá,F²tÃx™:+l':D¢»« .üB :—®û=“¿½kA¬: LC»+›åEE„4Ì˨öâ<Æ¿ B" 3Q+Ƥ?D<4Õb#1ÀQüE ÁgãžÃ ´ÊBAÚ:Ò=À=ô±»2¼zŠE÷ªÁ7ÄFkÌAY±+äû4\´ @£ÁO,»Ž C”ÂõƒG°›·Y¿V¾î‘?gÔEÑë¸>üGœB‰t±äzÿƒ45„|/,ÓÇ’â8bzÈ ´¯kœÈ<£â$ñ)—%L¾×cH0Ì«{û1æÈD¤ÈDŠ>P[Hz*&sLC°A½{´:/€ü@š - »—ü4žlIiü?,Ì»RëD¢ŒÈ€$É¡&œÌÈ\¬“z”/ÅÃ¥<Ä(´J£ÄÊÁ›ÊB£Ê³SÇÌˤÃ&"D3¬É«¼Ë’ÔJÄH‚´H¨„KµLª¹ì²’òE´œI›4IP3DAóJ T® Ë• E»5ÔCÏ%Ô:ETÕ ÔGS)Ô>mT?TG…ÔâÔTÖ¬ÔB½TLUÓ=UÌI¥ÔLËQeTK]US=ÕN UPÕÑ9…ÕV¥ÕOeÕZ•ÕTÝT<ÅÕDU_Ò_ ÖHíÕ[ÍUbåÔWÖcEÖfÖd5Ög%Ua¥VUVkêÜVníVoýVpõ¹]åUO…Vg5WtM×kÅVruÕeÖw…Ww¥ËyÐuÍViUWe¥W[Õ×víW|Í×{ ØzíËýWfeW-Ö‚ÅÑ…EÕjeXEÕÿ„%؆%Ïrõ׌µØŠ•X€õXyåWQ-UÙŽEØ%L]Ô}µ×–5؇…XeÙ˜5Ù”…ÙYŠ=Y™}Yœ½XýŒØšµY…×s娛ýÙ‰W£-Y¢uZ—ZžíY©UÚEÙ£EÚMZŒÚ õÙ®õZÍZ¬-Ú¦ÕZ³}Z¡¥ÚœeÛ¶=Û±MÛ©…Û²…Ú¨[½ÚªµZ®ýZ°õÛ·¥Û½uX¼åŵUÛ¸µ[²­[´U\ÂÕ[ÁuÛ¥%ÙÆ­\ËeÜĽÜÁ Û¹UÙ¿uÏÂ5Ü•ÝZ¹åÛ¾]ÈÜÐÍÐÅU]ÄÅ\ØÝÀ}]Éí\ÏÝ»]ÝÛÅ]Ó-ÝÿÞu\ÀåÝÖuÝܵÝâ=]­ÔFX^æm^ç}^è^é^ê­^ë½^ìÍ^íÝ^îí^ïý^ðeÞÑi„ò!_³1_²Aßô_öm_ýõm™ø•ù­“úµ_÷•ßò}߸ßñ_àòàÎßZ!`ñ@àóÝßn`Ö߆à÷5‡ò¡`³±`²Áà  ®•ö`þ aa.a>aNa~ß} i€VØ IOÀh…Sˆ îá8Öá}@_Îá0‡®aî@bž Épa Þ )Þ !vâ1bÞ %¦a“6_f‡8B6dÍ@dEþMîâGŽdÍØäXŽcCÖdNÖŒF`äpäFØdI(å] è_@‘avdv€Þ‡c‘O®Ž`&€F €bvdâDãT ffÞ 0ÆŒB®ä$=¶æ Nå|zffîjÞ q¾ löfòEãnþ‡o¾Œ`Îâj¾ãJbÍ äh¦æ}Æž`®gñ€].gsþiþ‡ÿz–„Þ‰H„ÆŽ¦è2îdÍg=ÖffŽŒ`þgòe‡…Vèd⋦Žzd…nŽVe†NVf‹†c’†è’&dœþ‡–扃®æïdŠˆc‡.é&&߉®h O„¶ãbži€æŽJvá•éê@g̈h”6 jþé€êT†åæäj®ê~d{fiÞjê86:nk‹Æžcngñ j!îa”.¯æŽhGæŽzÎeɨç{ÆŒJÆf††ãÆðgêðêcžfÃnfpNåJÞ‡`l9¦Œ~“ÌfæÉæêÉÈc †å'6_Ͷg¸d§‚cHÆäVðcÖÆåÿK†ˆg—.kŽh f¥vlìÑfUæä8^j‹è8†càÖ Æ¦ávd㎑â¦fRþíëîc;íÉX¦f8&èVîë joÄ6o,6lñHo+Žå(d¢V n^fj¡ø=…7™f vi na`bü^—Ÿfóõo(Þbæ­á'æ¿ Ih^vh^ ®ðþpqq/q?qOq_qoqqqŸq¯q¿qêŽð˜iïqŸ;¶`»þq"/òïro¾ìîh€ná%îß'/ävbl†áBN‰ªŽèÆiÿ–a6r0W;n…Veÿ†Vèb^hï.n…na†^hs°ã7ßeJ&çâdIkº.îK¶óVä…þò0ôCVs5wä`.s†n 4?_hvk°ã¶k8Nt~¦f8GjÛžë@ÎoBõÑAr{Îô$wäT–ë”FiCŸôJïâ>uòöãâ¾c…VsnnQßu³!õ!ghwæX§éd¦c`oá8¿k»Fé`^hø…t…Vä2oá?Çd^¿öZñõa¾d5‡áav•®s8—ó”~ön¯g·k&w:6jlw1‡Fx“S`cîî_&Fpûbø¦t¾æwµ†_+Ÿ÷ûnïê xxOøve…oxbÿAwx‰ŸxНx‹¿xŒÏxßxŽïxÿxy‘y’/y“?y”Oy•_y–oy—y˜y™Ÿyš¯y›¿yœÏyßyžïyŸÿù›W¡z¢/z£Ï‰Hz¥_z¦oz§z¦—€i3;ªß\Ö­]Í%\¨ßz®çz©·úÅzÙ}ܬ'{†íz´Oû¤ÿzáÍÛ²^ß]ãµEµ¯û­g{±­ú¶—ûáåܳ·{Àú©ÿܰ§Ýß5|³o×À_üµ|°wü½/|Ä^Æ_|¼O]¿ÏÜãÕüß|ЭüÀ¿ü¹w{ÎOü±‡{àý>Ð|ÑG^½ÏûÇçÒÕ·ûÖï{Ô{ÔMýÿ×ÔÙ¯ûÚ{¾·ýä~ÉßÝCí}µÿýÔ/þÍûÓÏ}ÜO^äO{åþá×ýÏÝ}?~´¯þÒ7}ç'^èþñw[îïzï'ÿë·þà'~í¯Óó÷zȇýÈg~ðº¨OÿðÇÒˆ,È® „ \è0aÇFœø°"Á7rìèñ#ÈŽ0ZTH²$D”Oª¤ØÒ!Ë—1e¾4YóßÌ–9Qîäy3åO‚=KXÔhP¡7®LêÒ)C¨Q¡2½(µ*Ì« Épíêõ+ذb»>uŠuáY›T¥âÔêÖìÖ±rçŠ-›4-еz÷Þe‹×`\º‚éÚ úÿðÛ¾‰ û]]ûëÕ±u¢NÍx6oà*Yæþ¼{xïÍÊ—Û¾M³sñÈÇ} Gîü¹ïßÙF—>u;iðØÅ¿nawÈÓ‰&×μùûðî ¦¼Þ"ìïäÏï§nÞ¿jõ¦ß|Âg |"8}ÎuRÕ¸ ƒ ZHzJFà…öÇž„øµ— wŽaS!Šøß„VH"n&ÖÅ!ŒÆ÷bå}¸b†2‚F£ê($D¶˜£U*¦È"ˆ;òx#ŽQ.éä”Péâ•Hya]z¡ù%˜aŠ9&™ešy&šiª¹&›mºù&œqÊÙ@rÚy'žyê¹'Ÿ}úÿü9(¡…z(¢vš(£:ú(¤p.)¥•Zz)¡“bº)§zJ¦¦ŸŠ:*©Ž†Z*ª©ªŠç©«ºú*¬ Ö+­µÆÚª­¹êÚ)®»úú룽;,±ƒ [,²É*:«²Í:ç±ÏJ;-˜ÑR{í³Öb»-²!ù,¦lm'‡ 000QQQnnnMx¨juš}nŽxzˆxw˜g|¤t} Y­_…°~ƒŒzƒ”h…¬fгm¶y†¨sްz—¹œh;–TSŽiVŠu~˜h|š~l•yv¤[[ pH«{\¹}J¹{X¥mn©k{¨uh©{{»fh·iu´|kºs|ÎoÌ|9Û{6ë|*èx7ñ}&ÈTSÛ[[Ç^eÖ]aËg[Í}FÉzVÛkMÛgUÖwJÕxUÇdiÅksÃzhÊsyØdfÕmpÜxiÙxyæ^MãZXçfIädYéwJèwVãfeåopårjäxx†n‹‡vˆ†{˜•m…—u‹š}“¤l€©w‰¥}‘¶y†Æ{„Ô}‚å€y˜…x¾‚I¶…X«‡g¨‡z®‘w²‹g²Œr´‘qÝ*ׄ:ô…é…&ç†6ôˆ'ñˆ5ò‘:È…FȈRÌ‘XÒˆFØŽRÛ‘MÜ’VÇŽlÍ’eÜyÔ†gØ‚tÖ’hÙ—{Τ}Þ£j×§xêˆGë‡Wè—KéšVð‹Bñ–FðœVèƒiä‚{ê™hè”wñ [ç¤hì©uë±|ð¦hð¬pú±t‡‡‡††”„š…šœ’Œ”””ˆŠ¦ˆ–©‚š¹–Š¢š—ªœœ²† ½›¥¸§†™¡š˜º‚Œºˆ”»•…ªŽ ¨—¤®Ÿ°¶š¨½£Ž¸©œ§§§§¨¶§²¾»§¦²¬»´°®¶¶¶ˆ¢À˜­Å±Ç£­Â©¹Ì´¼Ë±¿Ð½ÀÄ»ÇÔÇ„‰ÉŒ“Ç“–؆‡ÙÚ–‹Ô–—Ä™£ÚŸ¢Å£Â­šØ¬†Ö¤‘Õ²Õµ—Ω©É¬µÎ»©Éµ·×¥¦Ö¼¦Ö¸ºäƒƒåç™ˆå™™ê£†æ ˜í·ˆë¹–å¥¥èº¤å·¶ð¼¹Ä½ÆØ¿ÃÂÀ¿ÚÁªØÆµëÁúÇ—êÆ§éÌ´éл÷̤ñÀ¿øÑ«øÖµÇÆÇÄÌ×ÊÒÚØÄÆÕÎÓÜÜÜÜÞáÞàâåÅÅåÏÐè×ÉåÚÙóÎÉôÜÆöØØåßàæáÛþäÏ÷äÓåååïïðïðñúìãòðîþþþÿÿéÓÇŽÝÀ‚ 4¨ïŸÀ†ÿ±{q Ãƒ+BŒÈ‘ãÄŽ CŠìøq$ÈQ¢LÈ$Å‹r´hòàF“8C–Ì©QåC• oJ|‰²#Mš#W"åÉt'Ó™*õɃØ/£ËŸKaúL ±åÓ¦_EîÛ—Ïܽ~ÿÊ–£w2âX“oqî«øonØœBqö+Ç—o¾~óÆ3oÜ7Á‡ÑÒ½[bQÆ5ŸÒ;( Ë”IÓGÞ=E~q+H 5•çT^«VíZÔ×QÃM›Ž ÂsaëÞý:5o‡øÊCƒ& CiÐÁÑâF[ˆÔ(b'ošE¨QVkƽY5Þ*§ÿhšmv¸Á«×í{·ÃE‡Ñ”¹îx˜.npè ô§Ì¢xúLs]vú\ÃÝ;ïpçxà²H8á,rH8(µ·Þ…Y›C|COrh2 eHR g´À†ó©AæU8Ðvï ”àwà‰G¡>á”'#†@jøšCj|ãÏ!òÍW† @0I -˜aqT²c†36S£>7ª§ã@=ƨ@òFæVEæÃˆe”¡F,”`‚7Ô@ÖÉ7 j™`3 òÖàƒNøc™ëùØ!ß|£†|fœ‘Æ%”  ¬ÁÆ!‚$ò¦ â &Ï5Ð,aêH,Ïzâ‘'昈^ÿ¨(M~ƒÆeHI†kà•¬A† ƒ ’†q¯&Ó]3¨¦zàz²ÑÕ¬±ª›CðåÆSÂÁd€ñŠ,®„qFq|hЄ¥¨ÔK3мs HÄÛçTÕR[-¬¿ýC =ú<¢q‡€{Æ$lI!há€øj ,¶èD3(Ñ»%4Zî«o¾à9ÔÍ=k‘†Ó´Ñ…È2n;Ðð¡…büB $ ËÅø¢ºqÇ ïkfÈÿLð)Žq†0ZpñÇ«ÕØáÀ#‰Ü±ƒK'ðÊK¯½ÜáëÇcÜ=Âd¡¸+ðÇ&²¤3<Í8!.;˜ édÿ#A¦r×ìÏz,ôÐýþÓ6Jè°€PC–$ŒŽœ €À@:U …©¥žšêª(Å8ÊzønÔ:T 9ïì ƒ=ˆrÀ=ô" š´3P,<žb7*w‡ ‚(5Hž7®¿[ìÿáÚ#P ¡5Yð®Ëï\®å¶¼r<È’Z3HÝ%RÓj¨ê‘(öÚßÓÀE ‚6pè` ÀÎqŽ„1° €'Á 4FzÁÀ=ø $†öðÀšð„(L¡ Wx‚ÿÀDfpƒ0  +¨Aå @Xèx:ÿ~g %£yúӂă¿0%Êz×#4È1^ÜNšÁ Öð Ø"aúà†Ä @@™¨B3.Ö t|Â>HŽôÑ DÄCŠ8DmòÅÞõ ³r Qä kØð; ˆç€ƒ#–°Kèâ œ‚ค9ÞCBäIÉø¸/y½ClÖÚPDú y£]XC"@ LÂA¢ƒ*a t¸‚©h‡&.]âVJîŽE0£$%¢äÄf .•C‚Jþ°†5¢¨¥0 ¥M8 ù¢&ÐA5Öˆ—ðÎáô•í@£ÍC%özÿitA ‘`‹/éçL'ðÒ±5-¹žòœ[ó JÄ!*láØ–°”8­ $œ^|ÅÀŽAår—¶°…&j‰Hó˜É\Ý–ÕŒŠ²'V3ÕÐ8ꨠ$X€PP±âXè,A…)<Án•›Â¦„O¼bÛABna… (Áް鴪űjÈãOú$ZOPÒŽWPÀæÓG"@”†DÌ ¶» Y¢¸¸ÄRQ°$ ·»AŽà hF%ÔäEyó§îЧ×ò)o¬‘>XÃ|H!‚ ‚)@#?@%ÒŽÊÉ¢=˜ `ƒ ÿô¡0 „x^åǹѴ¦¼‰,4.‹YU®u7…Hƒ5B4!À„>t±„½„¡>äŽ%¤z·V¸ÇxfÖÞêc;8B¯á:Šä*w œ}.œ  8BÁ Á®>´«Iá¿:¸…>‘ò,±üÒ‡Fm¯õöô¸(IŸ%^ÁŽæò Mà –`‚'HA%@€/FÕ pb°ÂdÁ7àÅ4Næ qx*ŠØc‚·³ Íqjõ(JfAÉ„±c®Çª+Ý ½š@·èA‚p»*l²‡¥í{TEè#.°y:ShäÓÁ™…0;f wÐ"ÿˆú°F! ±\.‘î’TÞA,Á $ÀCÂ=è#ÌFæQÄe&4ž©X¨²;Ý)mºO!ëƒ>HåÜñºAcLòØ!Šü` EB ;"@C H¨Æ'áE›çK’kĪ’ÈvçšÅÍ&„êŠ)C•Ð Ç Ñ ]ì §‚ –@"4+€Ô¨Fü臜ë,‡Ð£—µQØØÓÛ.6£b”¨¸£r— ‚@…C–cSžB(èµÚ"¡Ú¬n55æ…±/Sƒ2‹ðFœà2ŸY7Up¤+ÝÞüZ ˜À&v¡LؼÃë`*{Àb$`™Ðƒÿ~u¬{Çñü‡§<ˆu“Ó,•›âúh‡ËúúŠMXÁ¤¸\‚ ‘‡<,C¶ˆ…/záŒKžCª‘ˆ'PEh"º»HxÆ3¤5q€#bkÏ‚¹ÔàפC]5+Z ô`‡´6aAUDàƒ%ÔèFØ•Ü K˜Àvþ%Ü/ª* w@ƒß†8aeGÅ.ѰÓéwtQ•°“”˜*á:¾î­DˆãZ)8!j@¢oXÆ2Ú°  SøAªª¹,y|¨…ÁMÞršw¦µŠ0) t b =®yÓü~€ˆšC‡-4™ª¼sc ¦XCLõ‰vÎ×íÓÿ-Dª"Øà‡G‚ ÁâZü6eç+PF'˜ùΧÀ)}vN¡^wàG§•°;NPÝWcnKàݵCPn  ò`rG Ýñcô¤_õ²:vÆå  ¢g  Fò° nÐË`N 9ó%UròЀU€L‡……ð †U„ð<œGOoW|¯ðpà ãq%Ç+eF 2¨ <{ )»ó–0`2 S³ð¶€ #W”hÿ…eÿUÅÀó#‚4‡O˜DIÁÒ¨âp‰ÐyQî°s³ð –ð{³TíP up¢S Iÿ'w&ÀšC|*! ‘ 2°]å >€r­v8Ђ3l¯iͰäòk–#!£„s·RFH˜ÀÉ0ôu ì 9 ¤€†^¤P¸;À W@/ñc*7p@u€@0„à1S×ðeõC'²¿ƒ €¤èy–&ô'ó ¸x ·7©°_žÐCD pGõ2ݰŒÛ±øÈvº‘ Ÿ6Üq>nŒ@lð:†= qB²0–ð@àtµP ì#P çU0šÀ@š0= U?ЉCàºÀ@Á°Œç` º€9ÀB'” DAAÿÐ@ ˆà¼’4YBHñEˆnU‹~Ò V ìÐ žÐ‹¿H Áˆtíäg; ƒö5Öx9P ݰn°c\ bòzèÀ “€ ÂsÞÀMmWq—VdšÀÕPPU€# O " ²P‰¶c›4r†•*Kàg %fà‰À„êñS&eÀå„Ev9÷n‡à|hY¡ì°sœæ š PlsÓ€Ï~YAЯ€ AÀb8Œy.mÒ›h°Gú‚”ÐTœ` £8.rCG|Èn!Žtù²°ÐWAU˜Ò º „¤Ò³§ þÿ†´¥ Ð@-ð(¾Yi0 ‹ Ñ)|®e”î¨L4&{È[hi°a Œ4Õi Yb ¶yø„* ¥Bž¸Õ&T‚Zð™c¦ • øT •³âQçÐ ú9šêáŸÚ Ê`I n¥rZµ…*>  ú ó‘šòP †¡—Ðݪ=R{°„Ì7QQ×) Ù)sÜù< hs¿ðlW£>° 癞¾É&e@!çð%£bf×0ìÐ;@ Çà ;€ ‚2 Ÿû‰¤Qá Cµ®°­Q lt*ôÕ`*«° SU&Ðb„Ó˜ð¸Ò›jÿàhà Õôi–Y”´·ªS ­3ð@‡SÑnë! –` ²nÜQ ÆÌ‚Œô"O×W ¦É€ðÀ S"‹@ zÐXBQ‘UÍà;ãÒDvµªÒ'Bh ÔhƒÖ œð7¾ ª— ø²‹Ñå“àÓ jp~ðrcçÑzÒ”®ÞÁ¬B# Ö þh#ô"º€1¤0½° Ù€—pÿ1Äáê àP øsÛù²y¼6–d÷ûÕ ŠÁŸà¯d'¯õ©"¤CUòÔ¯—° ÿ{d*íñ'¬Q8Ú–*Äy 6GÜQ±rÿªÎú'ÐZ–éw ™€˜óÈ Ì  Ü %k²ÿˆàhª±, bª…íÁ®Õà®Q§ ¢s¯ð lä©aŠ0ªç:  gå÷ 0G‹´­  Ìlé†#35ï`*ÕlÅ`˪Yõ´,Õðv•” ­Á/º6\×@uEPž0eI ‹ 8pm‹´¶A˜%Hv“?ÎRnË'ž*8›DÜ A4DÀsœ¹vª¨ÒxË… |rP¹H» ¹69« žv^¯Û'ì€Ë ±Gª› {ƒne>Ò%¥Ãüæ‘K½@²½Ú+°çÐ v—¼òÿT*@ XKà§¥bT Çé‡$ú໼ïÈ7ÅÕ%wK/Ìâ®Q½×‹»Ù+°Ê~*?ò´ Ë8h9`»Ðdfº£`¼#8½Û ¨+DDĺQ‘®³WnáÚ¶{´€´a¶¬‹làÃÐ  ˆ×£öÒ(°üøÀ»ñ§üV šIIq•kéçÏ6†X+‹,%ÝðÁ@ `%À šË,K Ãàsp Ë¸™ˆxãÄìKºÈ;8ß‘œ²À˜E7(¶R൹âu*°ÿ €´$€L‰«q¿Í`nÀ‚#“Õ0U—ÃU°ÚÃÂf±#ÿ,³3bXd+¶U0oŸà`†ÉàÐ §À­@ÆR‘ åk4@vÀ 9àw ½°S€ ¤wiÅ^È+ÀöÆÍRUGK€° 3’ ÿ@ðêp &+·°Qõ«›ww0¶Œ6  RálTº°è¾¶ÌÈúÀo‘@%ÙË¿<³`V»%0+p§°Éÿ Œ³€q4hKpVƒvkK07¤’·¡›Èlºœ÷{ÈèˆÉxbë£P<¦}pnÃg€çÀ ¡«Æ0_Ç@uð¢›Õ`›¬2\Ë›ëÍÍ@h,Ëh)©?‡ÍÐ|ÿPÓƒ  êP%ÐQ€O ® ˜*¬Š [!ñ`?åÅn~{µí'µ*‘~&Whß51Ј É€*„@¯ËAð/PªEÏ@è CÐIHhHà ë± äÑXP aeã[¬:h‰@E0:@ ·àS` öKÃÓo>p O 9Ù 2ÙV@/cúƒ¬&±»q@kâ°[{m±eb!¯‹Oƒf Hp;«hñ³ª5eXK`¦’¸ ¶°WGß1/±í¹ê!~ &‹à±A™Ü GÔ ƒ6eƒ†uEPLÍÖ SvôÒ U0Xÿ$@  ½€Aç  Ïõ@ô’ ,„ ~ I&4”¯3µ¯+½«¦Ñ h>@ E(fùðÓ ª€M€fôœ ¦v‹Ù"ÝÏàáÙ -…PVŸÕ}Q‡Ê,Ep:h´…XT€õ›*JÔ¬‰‡˜LÝ à0 J°jôâ¡7à×äÑ›6V›á\ªH€E…6½`gôòx‡ð(œ ¾/ò@MJÐ{ð]~68l&M= Ô@ZBbÐðã@¦§Ò X„ A&àÌ5¥ ‰pÏà XÖIA0hf¹%ÖPƒ!‹Ð=p ¼ºŒÿ‡5‹ágê¦9êÒM]C % VÜÍ€Õ0hË¥ÝCв ò E RÑ Ep>€#Í›èe7Sf^Ú*q?MÛñ3¯Å ö,žÒ§Z 3¾\¦N7Ð]®±ê7å[ð‚OíÊè°®Sö²W˜à >:€ŒcJçZnX?{>5Ò'ÌÒ‹ðçD PÓö;Ácƒï biõêàñÃï·,W0oÀ…ºj~ymx}à‰s”~Ð }@FP½@ ,ÖEq¥r1uVÕØ¾@µÕkÿ| ? O08`#%Nhÿå‰ ’Ò„Ö áÿµºÿÒÆC¯ìÐp¯ê&ЈÁzÁÏ?Ñ-pÖ !`§ s*Yɨk ­mŸ^ºù,ì¾¾Yâç0ŠCe¾I®éFº)âqHp a²1ÏôqÍë†õ§Ÿ>#q}·'×]ƒì(±`ç0¯ö/Àcï¤Þ‘ÒE€ö‡ öl_õköºÙIƒö½éu÷ÍGÛÆ÷YBùêõ`=OÐ?ïè[bXÍ0ôEôzTÉhÏp×Õ  O¿é±&õfe¿¡ :pYÁÝÁFbå7kÒ§Úö€¬ H`.P¡>R¿ÌB×—Ú‰rSâ­;`96ÿˆo“•_;×áìõ>Õ²`f¼lö3 ;²÷ô5ª½jv‡æd#sMh=€ãU—”d ãÿê#XÐàA„Ï|×Ì¡Ãj Êsxí´f«5ƒö®—Cyå ²’’.$ØNYè^Q€EPà?•9²,Ø¢NŸC‚Ôwã;‰× q¸d{9mÁÒd‹ : ¯ R ÀOßMa ò4R¬¼jЮ™%j´Ò„J—¤­¶4ªDY\'ÀÔ—.ëÖ®ûÀŠÕI–°Î?63‹PÞRµÍ˜ª´EÁºT®(Øjg ¦Lšÿ<¬Òpi‘’—.«ocÆ‚JI>mÿŒÖ梕kbåJA»›¤Qï®J’H®T½´ÁwK–2­}ð6º¢Xkêc'ë•,w_ƒ'N^¢äf×t-E‹DɵkJT£˜þ"l‰•]ÙÊŒ;apœÌ+è4õa¯(鮑,"}”z‹£‚ÊI *”@•,p¬ :ðœ%[®A¦‚&ÂçTª¦Š( ¨‚ÁÿÆÛ@ÑS½ºÞ‹o¾ú,ÂF„|˘Š$ÒPÅŸr¢Ñ¼ãfS޹é&Ó'ºÕC©sÒ #jNJ‰–$¢éX+è5©Db +%ÚK-”¡á“oK…:4(1ˆJ¨ÇûðŒÍ¡wˆLÏÈÿÑDHD‚4MOCr«µƒLD1§×‚Àï¿}ØëPC='ˆ"zµ—"‚uUV[uõÕ TU— ’q5™ t 5ÖWA5¦—^ŒéÕ&áªsGA9„Ô5ŽúlÓ±ŠK̯UéËÃ\VŸúšÑ”R„‚ò³0ºLMr·•çhz',´ÔªîÑœÌ5Zñ%Z{÷Ý6Ï‹*wÎ|Vö_~ ¾×`Nx°õõ×á!.Ø`‰‡ãW¬çŽkzçƒú-Î裃–3çÿ§U–:FªI¾šçŠ}®zk=‘Nì±…Î5¨ K;,±g´ši.‡þn·g>›å·—6Ûk­éޏk|pŽ7üp°WÜð ?™aÈ#{ñÅ£üò›,ÇœrÍ7÷<óÏ9]ñÎGǼtÓG=uÐY?ÝõÁWw]vاõÛMϽöÖyïÝ÷Ý÷=¸à?/¾öã=Oþõá_žùáŸO]zÑ›§~ôëIoþŸìßžûí»Wþ{ñcÿÞüðÓ?_uòÕ_Ÿøö­ÀòÑ~~øÝê·]ÿùù}òãøˆ¼€÷+ éwÀõ90 äŸÇ; :/~Ä_ÿ¸¿ n„!+ǦP…+da ]øBÆP†3¤a MÁÙ%Ѓô ý8xÃâw:,!XDØõðBœ™¨;'.p„DbøDìEñ‡F ¢HB,†N‰ô"ÁXÆ$jqŠf¤b½wE4Z±‹[L#é(Ç3Þqˆv\cçØG<¶1Ž{üã ù¾º‘‡ôcIÈÃ9B’“¤d%-yILfR“›äd'=IIÞ9â{¢l)ùgÊá¡2” Tå*KÉÊQn¯•ë;Ç÷jÙ¼[&P—»äe/ñ×  ™„и͵âý€–ùS™‹Ó‡)›ÿyÌœ#˜Ã7C§œbÐÇ) M|s %;[vœ­X§ç&€tþcçhæ?0‰q6nº€@àéLœôsúX§(Ù À¨?§É` Dµ'05êM¦.DÏiЋ.N¢ÿðè?&ÑÌgày-H0_ÑI¨¢¡{'¨æyÒ@tt+méKÔ”ަãèMõùÌ›ìôsN@4—É…†n¥ÕèKI™U̵Ô2HK…ùÀÑÉ 8G+Ø©zn¥A•(9å鈌z®¥ø¤¨(@Q¡òŽž¸å)æ:ºVÜ’¡„-+EÅøLÿJ攣/-{YÌfV³›ålg=ûYІVqô´œSE›ÀqÞR`=-þR«Q…âU9ÕçKOÁÐm D¶Ã¤g1±ùÙæ¤§§1×YДt¤%)ðúב2´¤$=Ç8§ Ñä`¹Ã­u›[Ð’ d¤þ$ërOq[’²ãç2W+O¡F·µ7yí?V Ί®ÖŸù\/Ieú]ö’Ó¥óü+lçK_¶8¼þoE0 v¬v½ehuÃi_x.˜¤&f‚1 Üïæ´ÀA€F:Ùé²Õ»áuDˆ9œMGˆç¤4lUuËÍÅ2š­e{+Cõž è ͤÿYÉKfr“üd(GYÊS¦r•­|e,gYË[ær—½üe0‡YÌc&3"kxf4§YÍkN!Üüf8ÇYÎsžó¡¸HÁÑYÏ{¦³³ˆçÀñYЂö³èA'ºÎý´¡§hHùÐol¤á"}éI¯ÑÁ¹t¤3½9¯Óþ4ô9¸Q+ºÔ— õâRèUW¯Ò¨~5¡=ë;#®Ö¶þ`7}“]ó9Ö•;4€‚½çakï×9¶ž“¸V?ºÙ‹îu®OçiËùÙ\ö?²­í[_ûÏŽÆ5¹Å-ëskºÜ*C»ÝýnxÇ[ÞïîZÓ­îÃÍ[ßû†w½'I€Žß×·¿·í¸b‡à ï·½nmÃ1\âe0x¸>î|O|á¯6Æ/Înœãþ‹6âB.r‡ûzÝ ?9¿GÞmV/®å.O9ÄUžñ™Ïûå+ÇwÄs®óš{üæ>ÿy¼w~oP˼èFº¹?Îò¥Ó»é”Fú?¢Þð]ë‚»ºÔ³ns°®ëî>úÓ{>¸€!ù,ب‡777\[xoP`lbtV«eg…fj‰rg…umup‹|w‹|y‹wp‘t~žys’yz›c…®gНkƒ¨a†±sƒ¦y‚£z”¶µl4‡nnci€evcš}~¸TTª[cª|\ºM¯aa¨m}¨ta¨|f¶di°p³~~»r}ÎoÄu-Êq#Ðy;ë!ÀNNÏSQÜYXÙ]`ÃlVÊ}CÔ`_ßa_ÁqqÉuuÞbaÔtt×||ÛqsÚzyâdbãhgäkjássæsã}|‡v„r€~’n‡—ws†štŠ´zƒ¬Š}Ô€6ô„â‚(é‡0é‹:ó„!ô„(õŠ&ð„9ò‘;Ú‚EÙƒHÕWÖ|ߤkî„Cí„Oé‹AîIí…Rë†^ìˆXç˜Lï‘Má™^è–Wìž\ð”Kò˜Jñ˜QðžYè‚kä€}ä“`ñ Zç eî¢aä¬|î®uì¨|ð¦hð¨k“““™““„‡£–§›”ª§Ÿ¦››¯žŸ¹Ÿ¬¤£££¤µ­§¸¯©ºµ¬¸³³³»³±¼²½»»»²¼Ë·ÄÒ¿ÈÑÇ‹‘É›‚Á””ɘ˜ÕØ€Ò”“Ñœ›Ü››É¥ŽÒ¶›Ã¸®Ðª©Ø¦¨Ü¬«Òµµä䊊呑ä먃괃ê»ì¾˜ä££ä©©å³³ä½½ÃµÀìÀšëƦéмÅÅÅÈÀÁÏÌÌÕÕÕÜÔÕÛÚÛãÄÅåÈÈåÏÐèÔÃåÝÖåÝÛèÐÑåáÝääãþþþÿ…\≓ƒN¬ØÒÅjΛZº<¡‚ð`ˆ&R¤PIcgÔ–7ur™âd‚ Fˆ0µÆÊš7cì@üÄ ‚]qÊì +ÔšTª,ÝÒ¥‹TÍ=ºÎdÙµ+–œ3«Õ%‹¤I-vØ%ÎBVSu™ªÄ€»l5”é“$ZaÕ\)ÁCZµ»õÐÑFQR]Ø€ŠÂâ.^B8uºuŠS›Oº¼¬0Œ—¥!³Œ¶!¥+Êd AoÕÔC–Q0lè@):ôVJ°NµA3EŠ ”]7Eê4nhÜ €—)ÓWºÞØÉëRÚ±ˆBtg:ò7tHQr¤u+@xý°ªrK–.mzÌ`zV}4mZ”(…˜*dÌ´ØE¢ L}¨…KXð'a|á3Üà "¼·Ë(qÄ@ 1D5ìK/LÂT ä‘B>øÐI)AøÀ‰.AÀà€À!|ÈÀœp2ÄœÜâC :˜ðÁ ¢:D" $“ôÐC+9Ø ÉIŒÐ@У)³ÐÄ'.þá@'\@A!ù,§pmŒ‡777WRidOc}myV}ªic€kxšynŽyy‰xx˜g|¤t} Y­_…°zƒ”g„«fгm¶y‡¨sްz—¹°r:—SWˆj~…sx™jj•gwš~l˜{y©UU¬|\ºM¶{W¦eo©kz¦xe¨t{»dh·iu´|k»sz×|7æ|.èy7ñ}&Û[[Ô]aÎd^Í}FÉzVÛkMÛgU×vKÕxUÇdiÅktÃzhÊsxØdfÕmpÜujÙxyæ^MãZXçfIädYèvJèwVãfeåopårjäxx†m‰‡w†…{™•m…—v‹š}“¤l€©w‰¥}‘¶y†Æ{„Ô}‚å€y˜…x¾‚I¶…X«‡g®‹®‘w²‹g²Œr´‘q݃.׃:ô…è„'æ‡6ôˆ'ñˆ5ò’:È…GȉTÌ‘XÒˆFØŽRÛ‘MÚ”XƉrÍ’eÜyÔ†gØ‚tבj×–xΤ}Þ£j×§xì‰Gë‡Wç—Lé™Vð‹Bò•GðœVèƒiå‚{ê™gè”wï Wñ [è£fí©uí±|ð¦hð¬pð±vŠƒ‡‰†—„›„šœ’Œ™–—ˆŠ¦ˆ–©‚š¹–Š¢™—«œœ²† ½˜ ­›¥¸§†™¢š˜º€Œºˆ”»•…ªŽ ¨—¤®Ÿ°¶›©½£Ž¸©œ¤££©¨·§²¾¸¦¤±®¿´°®¿º»ˆ¢À˜­Å±Ç£­Â©¹Ìµ¼Ë±¿Ð½ÀÆ»ÈÕɃ‰ÉŒ”Êœ‚È‘˜Ø‡‡ÙÚ–‹Ô–—Ä™£ÚŸ¢É¥ŽÂ­œÙ«‚Ö¤‘Õ²Ó³–Ω©É«´Î»©É³¶Õ¦§Ö¼¦Ú¸ºäƒƒåç™ˆå™™ê¥…æ ˜í·ˆë¹–÷º„÷½™å¦¦èº¤å¶¶ô»ªð¸²È½ÄÙÀ¨ÚƵëÁúÃŽùÇ—êÆ§éÌ´éлøÌ¢ðÀ¾ùÒ«øØ¹ÆÆÆÄÌ×ÊÒÚÜÃÅÕÎÓÙÙÚÜÞáÞàâåÅÅåÏÐçØÉåÚÙôÉÈùÝÃåßàçáÛýâÊþåÑåääïïðôèäþñæúúúÿÿ ü§]>ûöá«¶È›8}Õ:äo @wî³È1!Çÿ<þs'¤É“1¢ü˜ïœKtÑC‡_¹sån´¸q¥Ï“ùýšqh?}ùÂ…+·4œ6kÖ´õû‡.ÍyLíñ´XÏœ¹zD©¾D¨±dØ•=}:®Œ™?…Ì”Rƒ )µ AäŽ^¢2‰Ê¦Óx­™áf×Ê*V<­ãBÓö¹›œŽäâ˘3Î,òL8pb+SÆ‹–55nHâ#&Ѽ}Ó N˜Íp¼x†³qN(®P¢qã§qóîã—gèÇ^Û2~¦µiR2,ÒŒ }¦Ÿ2‘‹'ÿ,/!îÄ»ß7²xäðgïXè_¹2bB‹iÑ!B$,Œ1iú±^B›‘gbÇ©—P{áí£\|ÈMxsù”sF~g˜±‚ 'ì@ƒ a¤ñ~²ÉW[3·åv\o¿7Ü{Âgáb•¡~ca&˜pC Ž ‘F!ÒáäFO6Ð !%E !r=¡„5Æw£b9*††± аˆªªË'7­^aÆÓ¨¡Å|Äé;ÐäqÅ_ð Ôúʰ¥îCå±É+(³¦2+8ø¤ÃHdsE|lyÍ4r8,!A¤tÒé§¡ŽjXºï¢º›¼ÿ ‚Ï8VpШ y¸¡I,ë$DO3KLp 'LPÁ:ÜLà„”†á‰„žÍJ¬™³ÿ\cÎ67tÁ!È %µªcÞ& (ÀÄTÀŽ 4!e”SVy¥Fóˆ#Îk6Ú|ó|ÿ4cN67Ü C( $ C/±T€É; Áд'%Ÿ’ìa-6ÿ£oòM×^'‡s3ýÐÒDGPc…Úº´Ñû]‹+u+0A,ƒ5S„²ûœ÷ oÔdÙdª…v/ûÐ’€AìÑA1Ü@APN:µîÎûMlâ»;ø`ÌîÆøÐËîxìAÌîÄì‡ïÔWoýõØg¯ýõ 5Óª0ÐàEJ¨ ÑTðÊ>¯TàŠ:mS’[2{Û†›ß 5v:„¦>èáõˆGÙF´¨ ¨@-jµn|á ¨@0q )4cXÍP‡'v°ƒ*¡g½9Ä<èˆBü uþ“g® ÁWE.š€, m«@cøÀ‡60¢Vµª„.ÿ²Á;(Ü€ƒHø >„ó˜CࣨúT< F£å ¤ñÎ78¡4hA¸«@$|œ8<`µPG+*€Šw`¢>ÐÅ(*1ü%âH„"¾ñD(v‰õkÆÕªˆ™Ž´‡h@ƒ &Q0 cFûÐÄ‚‘bB°`y*P I ^—) 4®±7*R,#û˜Ç4´p…ÉĨ…ƒöqŠIVÒmëH‹àÁIOî†9ÊÅ<,!íR¡Q™F*Ð p€;`TÆ3Ö¢˜À%%Ç9Öño#³S3†‰™b–%œ„Ý©ÀÆÌ}¬# ˆg‚?ÈÉœ¨%¢ÿ&”ŒhPÀ@}à WÈ¢0Eð-¦àƒ# â䔩’u zÜÏ”8kç>Þአ´‚rû8„\ÜrYLe»A‹XŒ¢·¨„>S€ƒ"Áe£ˆà›>–óœ{&gîw˜¿òB<Ù 6Ìl`#f„Fhø€ DBÞA´XôBPH \à=ÁhÌ–þ'2qŽ“3À„†QŠ£¤rFfÀFB¨a!ø@–؇.°R’är}†¡Ä\*"œu øpLŸ ÊÖ}=—­Ù íš¼êuKõ«–  6a 9ì>kÄáµ7°Å>þ`†Çÿ$§ëDèp Í.“,й%\á¾æO5 p&<á&P€/žÔŒlB_…^à‚a4àÅ4¦õ r(Ɉ8!—ÆcÇÚ|°K§®FdÄZ¹C¤r2Ã!FV„”­ 'Ð…-tà”M GÂMÇ žÚ©¤mmM˜ÛpB£”¾-$g%S«ZÀcî­ ñÙxLmˆÆ(±‰"pÐ@øf9¨îAÁ4ž1˜Å|Î:Æ5¹-ÌßÜ‹t²—ØÈ;´ÕRWhb '…Ñp3;Øaû¨,|Ñ g 1}Ä#6A%ÆŒ-Â3žá'C〘q’ºN]f±`hE/ªL #„hl0‚ ¡<ñÿ‚™Ö°†/Pâ(uíÌ~AÐXÀ­húêt§8þše¤f_j“„@gæì8{ü „TæF±‰)û-,`Ã2–¡4äàªM€ªH;Ñc)¸ª ^{m=@²²á4»bÜXX¨ãPÐ\+ûÛ²¯ISG-ŒX%•w#!¥@ƒ ¤ä‰LÂÌÍÂ\‘-¦L%!ÌÀ8/±湮WdA%'&]¡âÖéHˆßÛxLBATtX¾÷1‰´-A —ÌB‰„0 @ÂRAká‡y¯9UÛL.'êý|ßÝ÷Š©Sb¤Ç2Ö †eH2Imÿ@=xzô^ t¼i ñ › !}3ª9¹Zwu¸‚ mðcß}d3ä ~Np pƒF’6\@ P ð/N ‹Q ·@mR 0öZ öZrP î :¨W~¤DD@Ä&jp ë@…pVì& ®@  2úô× (5× o#wI4uW±ð7ð8ÀP°Ùæe4PÜGn!¨AÖ í)€]P4ÂÑGÅVtgwe †‘ @ZÙàI30 ¨@·”v>€›@¡ò9RB4Ð> 5ÐΦ*á” ñ@QìcxÐ6–À1….ÿ¸a£Wz ,®p†•€l*ƒ «Õ ê“í3,ÐÀA$* á zXHpŠ÷l×=ÄR+‡PŠiÀêE1–Q=±@”à;ðÆ“´0 š3Mà€ éàR@˜°;˜@:P<À„@°º°;Á ‡é` ºP6°=Ö“ Ê3<>À; †°gbâX=%1w]e@†,‚S îÐ À†n( p˜o™äb8ð3Ö0…H6P Þ€k€W¹Qˆ Ò>ï³ ‘` pƒß |ÀG›¥Qû€tµ‚ îp RÐM èNÀ#0 DˆR'pDÔÿfSU‚k@2{püwñP`öVîðE£±X{°‚§÷ˆ")ìÖd­°X¹v&2½h>Ð’„è:à ·àÜå{@°“”’lY'Ä,ê ü´ ”7ûƒ2 ´‚ó€ ±}ž6•Š -O4ygÍ  ñW?d§ ¯Vc¥ Ð,pø‘øaÓw˜òX¥d—¡?¢‚k%•ò…”€C A˜”À^ư LGJTÒ{Á%’y âph@ eð›bÀcO štV—@J×@4™Ñ’½‘š…²a—Ñš‰ ›²¹ FÀiQbUdE%;ð¼ÿ雡!¹_Åàc˜±• ‡‘±‰íx°rv„i˜±€˜´±˜-²{çö Fá¹»P™—Ù–"Ä‘ò$– ¥â:€£p €·À½á”vŸÇÑ òÔ­ w 4%I× %ª  %'Ð]3ÓÛÁ–gðc±øÔ[E)@„¶–YS \“ò0‚éÒÈ ”@ ±°i†q Æ€Šwr‡¡ò ÀI0§T¡Ü4 ðaP ‰@ wÐSµ!LÀDˆÍÀ6b~Tqrç¤ñ±"}c ƒXˆ3Ö ›à2¾¥•Àéâ¤v ¸ÐJÿ°Ôðg{nÇ[}jˆ(ôKiˆx  Rq½À[æ*•Sº@,£½ð7cZ û†4î0 |@ âP é"ný™÷ÃtUY¢êŠi±šÇñ©¸ªžURªS3P 2¦•‚4ÿ |Рq?kF3ŒV%ž't ¸ZÄÒ©È¡§÷ç›*Ùp 7)Š›À ¹¨  ¨³Ã1 $¡+â"Cgi~t© B®ea¢×ð7ëæ ž€Aˆ1Už7s;pº`QˆÀ6 $ ÿÿÀ ½ªe±ièN¥bbIgª³ wJì•|ôD¹P°ë¥frÿ• 'RÐ v’°$°±*`ÿÛ >pr/[¥—ü•'—Æw¿Ä¤f1gk?†a î?nc—iV¥TrR²i‚ðyÑ`cp´HûÉ3NæšOfYc»"î z‘!I¬Cw,¸¡2ÑQ”3!¢C5†Ñjˆ´Ð[~@ ð¶P¹« >À¢»Å QÒ:…ºaUÚ—`—-8Si¬Í@¸ž¸2N':&*w‚ºá¸‰q’‹pk¹ÿÐ ìp ð· ‰± z8c6@»à_Š¢à· ªuÛ \û>ñ¶Šq©dwiÓðz"U!ÿ»Ë»îÀ 3îk0 Íð„u á9*:í°Šu%˜-Új×”õRi–y;hH°ºáßA +`´•»Àqë½€p'H ðp`›zˆH¨'à ö˜€‹·ú{—ìfq62À÷°O°½”| Qgà‚Ày€ã»À[¾XÚ s°i3àx e4î 8À ¬šX«Ñû­UÄh×X6' ¤æ ñ7=•J|pqk쀠[ˆ1sÀ 6°t°½€P` UGÅN€«º§¦Lx"RÐAH   ÂÛ‡ œˆt´à^l éÿ ¦ > “(Gे3  ¿h5µ_¨v,tûÐjPÓØÇ,¼ó€¶ dÀÅk œ·– %×eH`Q3ÖsfH 2Pr *+}O·Äýé³Mç·Å*;p“=÷°î)ÁªfàhËo   ‘ € p ×)iy …¸¬™ú¼œl'w¬LÍ@cÜåzcQÌØ z}ÀG ÿà&ÊðʰРì|U¢¥·ù«‚1¥CY÷ÂwÖyS™wm5æX@ðJp“ TÐ{:À 70VÍÿ .РÐIÿ|4V΀Ë8‘ _¨æ9w8c‡B70 ¶°P@ ²›¿>à=Ð]% ‘MàL S ®Å|]Ö[»| 8ä VýÓ5¢cKJ3VEP6&ZøÈ1S%_&p  +¥” ò9‹[ÇA{!‰Ðˆ˜‹ïÙéÐAÊÓ 3V`3–pBÐG¦´>À ¡Ò R°`°Ð Ç“ÊàW¾*ܰ=Ȱwà;à'°æ 㔇p|Ïð –D>0cy,Ø €‰ :P ÔûµàêKcàâ­–4ìÐÎÉÖ®©rªœv!Báí—½³y½-ò9ÑÐ,@Ø —6]%¹˜Á§fã Å¥“<À]>ë¦Ë^º‘Rx!iQ#ªË:#k–ôÐDPÙÿ!ÚzïOÓô è-:èãAÓ&†mŒE,ޮɔÁºL(¿¹*?Ì…qñ0/ó4?Ò™D3–:|˜åóxÂA6ôìeõ™u–!˜™aðu:6Õ ßðoBÇ|'€>Ó4} ºpñ`.fÿö 07@ ½‡A5û0ð,þíêl÷@§ÈÖCÐ<æ± ÷)koÝ=ÙF,íÌ7€KédÉâB•Zìö„ò]²ëÊ‘L(Üg¥3 ë¡­£Ô0pÍeL;ek6Mc:ðßÄ„dõE §Oö^RU¸ÎNˆ†(JñÀ)½qoSÙ}Ñ[•Mb¨>cOðuj§FÿwUX*Ç”·…3iyœQ ¯€ ô‰ÍT¨ë57âÐ×kµâúcã½4ûE€þ˜±*T P!Ö¾u\íc8á?ˆÿN¤XÑ"Åt5n¬x­´x½š5£§‘^‘"в5+Òlc­ ­Ô¡jU¡Ö;JÕ¹ªðjß?~9˜‘èщôX¢Do¢Çf×&f+Äj‘’_ÙÜ—¦Oubr÷3(D¤¦%*¯êÕl —¢t¹/”-³^ܪ®kXŸûÜÅr ÞÈÙ^\»x#ËfÙt¡¤w­È‘lÙŽ¹¦4r·%û˜"i#œJç¶ú,’Ï"ÿ¢cÌ»Š”Ê«©§è›(À"p> î,Õ(/³Í¬è¾í<I¤ -:/=)b/÷"ûP(ù£í?P,n¤’Ò Í©‹œƒŽ#¨|P/¸²ºJçI(}¢—'{Â(³ÔrK.»ÜÒ,ŸÔŇdºLÆ]¢ ÓKczéÅ/ŸD,ħ.#q¶!ñ£€4é=ò‘" pÌ1/ÿ-´5ÏšQ’HnÉO¢}D-TKOŠèÉš^ä!ª2•öÊÒŸ´ÛÕáX] Õ[åTÑY‰ã(ÖÖ\}µÖ¢ˆÂuW^¹ ¶+_U-NWÇe VceVÙ´,mÒPgƒ…)içôîZlŸåÈiÑZuXb­ý6\:5wÝÐÝ–\n+ÊÝq½e7;js…×Þ[›Õ—ßZ™ÍW]^ã=µØ“Ý÷^Ôü%8`€Nx1ƒf8>‡Ž˜SÅ=vá‚ö¸Ú/V0cŠA†x¨_56ÂŽÓu¹dšñùß—ßeåeUž•Ù²d&wh^%Jíh¤“6Zi¦›FËi¨‘NÕé€!ù,¥o8‡ 000PPPTWs`]yonoTw›Mx¨mh‡iwš}nŽyy‰yx˜f|£t} Y­_…°zƒ”g„«g‹³m¶y‡¨sްz—¹³r;Ž\išz^‹jiˆauŠu~‘h}Ÿo˜~zµTT¬|\ºM¹{X¦ijªk{§yf»dh·iu´|k¼r{Óy7ìz/ìw8ñ}&Ú[[Ô]aÎf_ËxEÆ{XÛkMÜgU×vLÖxSÈciÅktÃzhÊrxØdfÕmpÝugÙxyæ^MãWVèfIädYèwJèwVãfeåopåsjäxx…n‹…v†…{˜”m…—uŒ™}”¤l€©w‰¥}‘¶y†Ê|ƒå€Žx™…y¾‚I¸‚Yª…e¯Œ®‘w²‹g³Œq´‘qÖƒ:ô…ç…*çˆ4ì“=ó‡&ñˆ6ô”=É…FȉSÌ‘XÒˆFØŽRÛ‘MÙ’UɇtÍ’eÜyÔ†gØ‚tוj×–xÖ¥wë‰Gë‡Wé—Jé›Vð‹Cñ•Gð›Vèƒiåƒ{ê™gè”wì¡[ñ [è£gí©uî±|ñ¦gð¬p‡‡‡…Š”–†„›…šœ’Œ•••ˆ‰¦‡•©‚š¹–Š¢™–ªœœ²† ½›¥¹¦†˜¢š˜º€Œºˆ”»•…ªŽ ¨—¤®Ÿ°¶š¨¼¤˜¦¦§©¨·§²¾»§§²¬¸´°®¶¶¶ˆ¢À˜­Å±Ç£­Â©¹Ìª¾Õµ¼Ë±¿Ð¾ÁÆ»ÇÔÇ„‰ÉŒ”Êœ‚Ê”šØ‡‡ÙÚ–‹Õ–—Êš£È§ŒÂ­œÙ«‚Ö¤‘Õ²Ó³•Ω©Ç¬µÎ»©É´¶Ú§¨Ö»¥Ú··äƒƒäç—‰å™™ê¤…æ ˜í·ˆêº–ø¼ˆå¦¦è¹¤å·¶öº§òµµË½Äå¿ÀÙÀªÚƵëÁœùÁøÆ—êÆ§éÌ´éлöÌ¥ñÀ¿ùÒ¬÷×ºÇÆÇÄÌ×ÊÒÚÙÈÇÕÍÓÙÒËÛÛÛÅÓáÛÞâÞàâåÅÅåÏÐç×ÉåÚÙóÇÆ÷ÛÆõÖÖäßàæáÛýáÉùèØåääïïðîòöøëèöñìþþþÿÿ HPŸÁƒ®[GP Ãõ5„qbA‰ÿÖ%´È±cÇ/"ô2¤I‹%OªÌ¸²%K—+SžÌGŸ@„ \8äÁŽ=nÔˆ&É–ƒ¢4ªR&ÓžOC:JpjÇhˆ²"ÊׯžÔ‘VìØ™iu˜×]f×n2ìB4Ý öÿëÆ ;w神“žr}÷”{XOÜ<óÄÕ3Io9䌃YtÐÖÝHÔAçjÛŤàK$-¤x÷hóÌ b8bI9ÅèRÊzè±Ç3èd³ Bå$M2ïôN2ÒD$£>ÏòAßòÌA)Îèã3öäfR=Ø`S ‰¤TË ¨¤E+mµ•³N¶nhF^¨ÒJ*_aÆx|À¡ ¤K2̤wÄ7š Xú*[òüÊè廓&ðQK´H9Ý AÈÂd¤qÁÎ’bFTÁ·’¬"‹>@$sÐÇó2CæÉú¤ µÉ@®pËs½œ “ÍN!Ϭ±…ˆ­8Ü3x`{À;¯’4ÉÁ6ýôÉROµ›V»ÿŒu[ZÓuRN¢Äâ¾`¡ÅˆICG‹R‡MPððšpì1Èé9J2Þz™÷OÜý͙駾N9åd³0 x¼qI+ç$O2MT@‹)TpÁ9×Tůï~¬„¼zµò–Šº^Ó>ïYNåt  4ð ÉÎæ¸ˆ  8‘À COüê+°Â{P<Þx³¡ÿÈ|ßYKoµÔQ¿Ž<´ðÄÀ]´â–h‡AX! LàäÛDîFá4w½R’2¥ŽEˆµ‰y%»_é¢÷/–ðNú˜™<+ðœ@÷ôÁ=Y¨â ¨@+R”Œ#<íE1ÒGŽÿ céêL Ô—[¸ÑœeÒËÉ: yc XÀ r`À¬ÛëÊq<cB€ Ö º`Ýô ÖCw£÷ÈÇ>úñ€üãN¤HÈBòˆL¤"ÉÈF:ò‘tdF"ŠrXñ ` h°½ \`úXÅTaŽJÂQÔ(Få…AƒÔèˆ9Z—èêç£%:HFibh¤çkQ|&`A$pYìLÙq X¢THFÒ’aŽMô  ¢>(eˆxÈã„Ài$¾ð‰W3!…BçÄ ž°ÅÒ…<à€¨ÑöàÿEìlg“¸5È(…\S Ú¼G¦8hˆ{|Poé™Í›ÌÉDþ¥JCÆÑÁLl! [ €/ðˆJ]Jˆ„,Ì‘Š ¢–˜nŠIT!R¹‡7‘ˆm8ô¡'“Ç*“á>ªêœëLjF•zzbiHC "q‘úBS—ˆ@/ bLK˜ãÑlÑ&a¦äAmEÌF?··6áp¸|kê\gl i ‹…iZå*Ï9¹c¬eÕ‡PÅ ¶Îòdž3ˆÓæµ)ŠÞR~Ãlf]bªS€À:(e©o T¥²°Ä`%ш™Öô¦¼»";Î’ÿÉö +¢l[Ï$W»Ä©K}‹>Î1÷G£QÐÕ‡L\@S‚r·=)èàº@Ø„*^±¢#aUB± ÇNôdN“†< ÅV[.I³p…o|9kv¨â©˜¡> q3L̯¨‚r@à'0 ­….h1‰ç®@G l"¡R?­%BË1ó"RîÊ QÜÍ25¿õ̦A±iLgL fÁ €D}·× ]ð@ +€ €"À5’åy;[Úúh±ÌñˆûUbcÔÊW>q†ig @ }ÜB ÖaAé(IDÿ3‚‘«pd=£¼K^Qõ<5÷΢&n …»å.„Åbf@nqÍ'4Á kÖG› Ú"X:³Ð‡ÎÀADd¸²’ý!ÇúlÙ÷fy®'Æò^bCI¨b`Æ4^|†?(!NˆBPÀ€]ð*+ÀÄ+|,)Ä=0B l‹gœ ÛÇ­úpqîvEl”6CXê?§ø²©ž¯t òŠîlüE× q»#Ä À)¸Å,x ˜ %‚„…,„ /÷úˆÇ¦9NP3™ck%µ[«,nA7ÜáÕÚÉÎdáXŒRÓD ¼¬w¨O öÖ$‰#\Bÿ‚V¾r#ØK]ú8„þ’#B€N ¾Û"j^?;O¾¾zÐ髯‚Ò Ûs‡ŒnÇŒ¨ÉCk†'tà%!Dˆ°†ÀŒ$A íàÌ×ä×ÝÚNê‡UTƒÇ‰á¨†øÐO-HãWÔ0F"á#§1C·Ð€ƒ(aC€† iøPˆÇꯧ÷Kˆùá|¶º•Z§±¢‘¡¨Û?§;ôD?úq»c{“˜B0…md±õ–B'Œ'ä# ^ë[‡5phøÛçä…$[f$ÜG´ìç^Ño›Zîs_5¤%ÁXà¸ÀéŒÞ!Œt@÷š<8öÿôÍò•wýëç±1¿kk_ÛOvnuîó‘~B/½Jì‹`U\¢ ) Ýó"‚pwp ú ¬° º  UÖÕ€ ÁÂrCÀrpv˰ ÷ràà ßð9B¢|7j2r­^êÅ^ËÇ[p}ƒ¦jÐ7ì`LÅå `= -òEÀ-lÀ` )0`•v<»]­àÌ`<‚`×Tas6&1"|_up]Ç£}S¦2/¨1øpgÈ®ÀíÐ 8 ˜u‘.ÐÇp k;pcO > ,C5[ò`L+pc0`iã—š²d²%ˆÿSÐ æ0 RÀQ¶do×|ù‡÷lj'‘ ìð¢>æ %,?˜  i€¿² `E<ÖX"3 P,DP³Ð„Gà‚€vRfv³h^_¥ qLŸævUS†O¡K©nq (Š@Š_% Sl€€ú ÔT‹T@<3" JÐp¦B@lP ò0~Fî²mIiÕ™‚Öfv˨‰Ø[Íh±†í° o( MVÄkp Yµà£hÖ•M3"çH6%a7ËaD„Jc8#íÀcæ  ]à•r,aÂGåÐh†2˜†Á5ØLÿÐ £ @w@(Ô’   1R¯ #²@ àG€r–¦o–6Á°@4’¯§VõOâ²£pà@† •¤“3è‰i©–'Á¯  ’ ¾ó\í s è# ˆƒ)°à‰Ñ 1 ᥠ=P~[g7Àð§ŒÛ×déð0‹^À=™òSõ3›˜KÎ÷|„‰’x_”à(Å`‹F ë>P •Å$X…:€ Uð1>ô+6`?sp? †y#[ÔðéJ‘àwp@”°Š™$†–4)“h8“ZVŒÇXd¢ ¨9 Ôç;¤ išÿðI!JIà ׄM cÚ°›+¢îÙ‚>ò"Mgò·3†@‰ j°Ö¶™[әɖÓ9I9±)¬Ó  ctÀFå ‘CðP`¤P@@°!å` ÀÞå‰)=p ¬Ó »YÂp 7€ÄGÅGidtÅPzÐ-y£|4H‘¤B:¤DZ¤FÚHq%‰'y¥ù(ÉPŰÉ  ­ùš› V&§1°rÓ1Ì`8 Úplpù$Äiœf"J¤t @ tÛ{àS.(Ö}ê§ZVtæf ë TðO@Aô"Pÿà&`Ð 9`)`Pàa¢l@Ú2z&fùõFož·ªõOÝsùIz@–ÉH†|Z€:«´ 8Q6K¨©Ð¼Ú©ðzç(x@°¨Å <  ´džŽB©#Ð ­f N£c]˜ ¤µ³MdÄŸûHe±Z«) ª?Ò 0V\’ŠwÉp !)«ˆ·P{G d·À Càh %Ò*gð ˆpåúˆ&y_G7#¯5c©d° n1™®ÿ¸® $’pOá®’0&ÂP&a¨VÁrŽëè+ýJ Þ€x~à_þõ²bð­º°ÿAX• VÒ°=?R#øR”B±Óq®0ø§Ô)«uç#;¯ +²e‚ž§¾bcC,=,ë²b01f ³ì ÇâaÃ5 <à.+²>RsÏp,™‰»–ËŒ¨2â®ðê†K¯öú"ä8&ï° ‚WWÛ¸°­f€Ðz#åPv¼b|ÔëÀ: à :@ @²A5»§o[ s‹®;n>’ Çõ©@ À( Ó,õ樦p ×E)€lÇ£©"0c­b€7—Ÿó3TM'ªTðO: 4@?ÁÐ~\ÉVq+·Óû¹FËgÒ ’ ­ÐyŽ" ÂÿðžÉ/¸ 0VEÈU¹×> a³}@DlëiÒX‹UœÉ`@#µU&ŽH$œ™±D;º›¤n"2÷* mÊ +— ˜ <» ½“€$³«7 µLÀÐàhzÀ~R+j…JnêzWxpÅyœ l½¢ºI{&¹U&º@Ÿ.ò14t· 4  ºAí; ú€…>öð { Þ $ƒm†b»¦%XŸ’¦¼Ícì™êJ½"aâ–ÃeõÂÒÃêƒ]fÒ¾e†>èöñ°:)h‡<úàxÂŒösljå¿]<À_\½  ºìÚ& ÿ ) ŒÂ¼H •P©é‰ È€JÌ  ÐÐð !2"¹ÇM–y+ÜÀ‰eȇŒ´G;Ã+#ª+ Ô†ª° Ó#)’sãkr9P„=·°^0r¼0@ À'€i ÿÿ èÐ8ßk;‘åqÕvåÈ<È0\Èb\ÀLhó7K P¶ Ëm¥…QF HT  õ¥Ì€~À'pa@lðà̺€ c2%˜…=/¦,ŸŠ½Î4ÜÊÑ|‹ì(”0J¥„@ÛÊ)²eŽ>ô.å(àxðÍÐ_ZÀ¼ÀþüÏÿ  ë@ €¥‘ÿÂt{,‘â(ë`ߊÅn»Ê¬Î×+Ôt{Ã%è;q_3Ä)Y¹>Žb<0BÏ€Ðt}@Më0-íÒè  JAM­?Pa_-µ@PlSP Ûj–/,8ŸzpkÈaÔ/‚Ôåù;ʘ•÷1ã #’"Õ1‚dÀX­ÕpØ.m @Öfr »¹r8 ¸ðn”«ŸàÓý(îüÍš]´t[ÑÉpѤdJ ˆºõ ~À_fÒ+½Õ‡ Ð…Aë lð ÉÀ˜v@ W2<°é Ð/ÙÙ Æ1lÜ[ð‚P¦jnúÅѼØ‚·”±,)ò€}³f0QÿÕÏˆØ À ¿Àq`²»©…y»#ÐlÍÍnÆÊÜÉ­yÍ#Ýê0í$Œã+½M€X]ghÐ#Ý{p ÛâýÈpfŽBl ïò¢Òp]ݳT ×@ÜÑYßö×=ââL¯4íÇ&ãx&J`)@«· ÷J ñ€aG…°:-.MäÝÂ30t 8Àu º R@ qXíz^Lâ"ÎÙS®bó7/Y¹Âú/T@ؤ+À—P&Ò#†À•ô¬ãÿŒ<^I !g=h˶›5p ŠxØ•y:ßÉímè¤KÊXžX˜h<ÿp" æbNæ‡3}.†°ÅÐÌÿ ™àÒç(§ëµr?@^§¶Ó+Ò€Í.â@½Ù%Nå«n«ÍJ£œÍŠ…›=P©RØËe;¾_-yp}à|pͰ³ Œ°Í 0 È1Í* Æ™ÆÿûÓIëŒÏ(å¯~ܯ,ÍýÇ‘ ,wl0°›(×â>€•ÉxÀå’ “û%€%` ðÏé’p ê(,¸ ðžŽDñPDx¦ê°®oåCýÐØ ËÀˆ2Á‹ã×rr&1À•ÚÅ,€8-<Àé0Ëþ pæàÀ¥Ž,wÊÐ&ÇÿÀA6n®u§òMÔ¬^å­nå CÍ¿r†D 9 ³ÐR |íÑJÈ6 @¢ ¶À p›G¹©uZü#÷°I†ðŒó OȈlâ'aVÓjµrr¦ºG•@ðÑ!aJÀ(P°‹PÀØ#»÷Ñ}&à ë’fÏ®hOßÝîð:¯R„ >£ØGº°rõ¶rHO°3xºPoåð1º@R`` кÐFå` b6Fs D x4FûäG@z¤ÆüÈŸüGºÜÜf;8ýÔY—¢r= §)),i>T ÿ°&PU€ Êe`Æ[_í¤>$a?ö5é%½mOHgq–—ïí®.èÒ÷ó’•»ãK*9`Q0Çsï”9¢$‰!hߎ’bI… ª$㘌™·gIˆ0<Ò£S«súT®d©ï!˜„ò(é˜LÞÊ9uîä¹nÝ¿Ÿ*s¶ÔÇÓèÑ?‘.eš´éÓ¥J¡NuJU'Q¬Yõ•cùŽ$C RÀˆÑ£Ç@]ú2$bÄ¡=)ÂÀ´j—Gyò˜%É×ÈÈR2^0§uk8¡"%¨³+yÞ)æ;í:b†S¤ÌÜl§–®Ê,ÅÑ^<ŠMÎXmÕÍ7]ÐÁ·ä¨Š&î[b¬‘2\ëˆßÚÊC.оd†!fž‘iˆ"Ñ’`€C¢˜â8•2¥QQÏ#“%4³‚ÊÕU]ÏÜs9‹U;’æÆ ©aFj|0Á‰n(ˆ<žQéW¹ˆøXq$6™o X‰[ž kjYÚ’™[rÌÊÄ}P<•(›Òǧ;~ŠÜÎÐuÏdÕ}SÑw˜†¨L?$´>\0bDùÆÏ#¢ˆÐ[„ BXPAy&:‡h°ôº8Ü ²ÿ/9FFó,óVd À4êcÁözUžDMåœH.Yåäöô¢N!ŽGY#ªü†g˜”faŸ‘TRÕWÉ@%˜Êd4ŒX%ã-çÃ!±úP k橇¼­Oõ©lA{\RK=mµÏ„U>·ÿM&n•ePè» É›š½û^ˆîºƒ+6AÂkËñ_Í"Ôq,SÛn+«^‰B%t©g›6ÆÊ'ìM•LÜ‘KǬ½Ô»G;eÍbeÙeú°(šmÆ™o’&ôH%˜¡(¸ ‡.úhÂåO¦ä  Ok‰­®U=¢0È&¢w´GìaOküžŠHWA ¾ uã#ŸÿUÖÕ.޼k%öä„v„"¼ 0ñ×Z’q¤ºM„`*Ñ\W¼ä@IžÄŒ„O­ä­PE+Ú9É£~LÈ>§±¡DpldË ªÊµÁñ©m]²¢×VX¹ÕÏ#‰yÆ7\·y! 2Àj·Øµ_Á"<@É|VbŽÁ\@ÆØŽ‰" И(‚´`¹f¶“‘ét( ŸøÊ·E–܈IîÒŠŸŠ³<9½C+àýŽœe§–¸@+̱¡K¼0ó˜Ç2n2š>qL"Ó:+j¦‘©Êâê ¯I:¯Z5©^}ÊF¬P#H/¬›= #‹UXB*Á£*Vÿ’yèB â¨G?rÅX*Åt)✩Fe²õR„¤Jà•­7}¢aõމ-¢(38i<‚3³B X ”ú8Ǭ©’Œ€­4U,?ž‘Skæ<Ù‹V6FrP‹ít'Gµ’ÉM"fjLÆñ²"‹ ¤Â¤HÅdÑI”ò”XÅè²&Q Hð›´ÜEu²Ë¯£&*|ØÖÎwz4[%eHâ”·¼ØÉ°nœ"Ê*\º”Öƒ±DØ0&63•GŠ”`™FôÓÒLñaSk›ÖéA&U©ðj•hø•Æ©e!A¢jK¬Z˜r౦#b+ÜÑ-(е¬4r车&ÿӅʉ #ªF}¹E¹z´¤ ºCˆv„$PƒI0š%½¤”¦B,½ªa|:K)~³‰³½ 9§V±-Ö\E…ÑeוYŽzv+ Yc†”)¤îäõŸ`nZ!Ÿ×nL‚?¡lÖÀi™ì9’Fгó®ì5©–¾›ÜÓ-qo=áË‘kl>ÍEùû¹êÚÓ8½5›Ã•ç)G1ÔÖi9Œml AÆÖ€plhG[ÚÓ¦¶´ðlcßÅ v1€p‹c_»ÚƆ.t!Œq;dádw»ÝýnxÇ[Þó¦w½í}ïXv7N4‘·¼ErRbÿ¸Qt(åCâHßò*þ­ô~ÙÚVÏ̲ §²¾)8å {Á-ajltêçuäZ«fMM”uŠÛ°C×=böd|ẕò‹+nqÙ¶d—!–ùmÛ’vÉÚ‹ Ï–¼tùÈ“ž¯ÑPBuу8kïöÔg~鳿[¼?÷XfY«ƒóÒ¸D*Ñ[òï²7¼m¦î‹“Üno±¸§„ì.ÃCÃÛtÁʺ8Á(XÇîXÌš½Æ‚:t·ûSêÒ]Ä–îµ÷º6QZ÷D*nNðxÝdÎËô]d}:GÑžvÁ£Ý¶ˆw‘!¨_8óåŒ|“¾õݪ'±^Ÿ´çVWÂw”ð¢?ÿ<Û_u[;|ÓÚ{|¦‹Ý»Çxãe²®æ=}{Ïç¾ðfß25¤±9è¿<î„÷˜œѱñÙ­èÚU—&š‹éê'1èCŸû3èjò@GÌOÏ5—’ñ×d~u«õœR²›#0ŠÀ3Q²ž3«Ÿs?êƒ?À c@}˜i¨¿Ÿc«6C>¶Û4C¸;3¾Ô*ƃ=³.íb'¬<¸Š>ܽW³ÀzHdˆñ€ ÒË5Y"=Ì ^\›¼– ˆò5ÙBBtA%Ì A¤A¡RÊûAÏ© 4Œ»œºA Yµ·2ÆtÌF3ÜÇÓ¥r¬Da”²yü;+›îš3l?uäG¢kÇó«DKl(ó[0W¬Gÿ…ël‘ÌS<9<Äâ4[HeìIׂÉÑ“É<¼¼ÒÓHwŒÇœ C@dÉmôH­É TItªìF²KI\IžlI†|J \@©D¨3ÊQÄ­u;«Yô­XñD}äÊ~´Ê |H±Ä»†Ú©ƒ<°™ÜɶtK¾ôJ¸Œ=,jÆF$Kæ 1­Ü˦tÉ»ÔIÀ´¼’´Âad(4q¹t«L˼LÌÌLÍ”¶—Ã7ÏüLÐ MÑMTHÄdG§äž¿TºüÃö;œ80iÍ0á Øœ åcÍܬħƒ2Q{,ÿ ÛŸÛdLÝ ÌÛÃi´ μlÌ“ŒNé„N@LÁ¡|Ú\²ÝÄÎíäNä$™Ì΋tNœÎãtLó|r"*úNòOôNôDñ\ÏUlÏùtNø¬ÏîŸþLG’LO£ÏÿD=ÏÄ´ü Îý,P¨Pù„Ð%ÏøœPê¼P UO}Ð÷

­Ó1ÍSAÝÓ+…Ò£äÓ@%TFmTDMÔB]TGÔ2­T4MSEÅÔLR@•ÔG•K?íT<µTCÔMåTJUMÔReUÒ|UXUYUZ­U[]ÄS…TVeÒ;EÕV%Õ^õU^ÍUP%V¥4Ud]U`õTUÕÕeeÖ7Õf-VcÕÎhUÖO5ÎgÅÖiÕÖnõÖKVhÖjUÐPýVrMVgEWk VjUWv5×r ÐsýÕTWn½W{ÝW~WýWx}×mW€%Ø|í×y¥×€=Ö]-ØuÅWƒ=X‡Øÿ}X„•ÖpµØt­XXpÕWw¥XõØÝXˆÅÏ3½ÖŽÅØ‘eY“=Y‘mY‰uÙ—½Øˆ½Y˜½N›]YšíÙ™õÙ†%Ùv­×Ùš-Z™ýYœ-Ù£ZyMØ¥eZ åY¥¥Z«½Ú¤Ú¡…Z”åZEZ°eØœuQ¯uMŽ5Z¢mÚ©E[§UØ ]Û¬ÅZ±[¶­Úºµ[º•Z¼Û¼ÝÚ…åÛÕ[­}Ú¿%ܳÜÃܶ…±ŒEÜ»\¸u\ÉUÜÅíÚÂ5Ül¥Ü½õÛËeÜÀå[E]Ñ]Ò-]Ó=]ÔM]Õ]]Öm]×}]Ø]Ù]Ú­]Û5Eà ÜE›ÝE™ÿÞõÝñù]tÞáõÑœ ^sAÞQÞaÞæ ^è^uÞ÷ ^õ°^ÑÀÞì•^ÜÕ]ãýíýŒðÕŒñµŠò5_î-Þô%Ïrà öE›÷E™ø•ßñ™_t±ßûý^ýÝ_þí_ÿý_``6ŠGhT@…œx(€âÌ T…´) à…¾M}è] †à(fàÏa(¥°àó•` ÖÎ 6áòñàÎ ^àVù`ÞàœxaÎPþ‰ÞÝ aæQxÐQ€f΀ݥbT€u(‡#žbÎx„€†b þx&&Ìÿr(€&Ö E€öµàr€ö )ÞÝ^‡-F.Ö /ã€ã.ã3ÖŒ(€8Fä-€@€8žcªP1fdP„GÞã>fãÈ ,¾àñèäø¨c `ä@V„Ød2&L dGåÎ ¶ >^ã(^å ä#e}hbIeOfe–åÜâXþ‡Y¦ SŽaUnâ5Ö`Í( ÆbSNeaÖeHfõFÎem.áÜMæG°` ’áæñPàsîaH¶ [†bGþå´1åiÎÝuøfo^PþuæŒd¾boF…wäxî 9þg(e<LÞcÿ†ö >n+6¶#g|&ç0gtΉˆMnfâM>hjþŒ5¶`{ ^¶ŠÐç”þh€i@>d–cU>éi.ceNg-N›—ž Q° PâŸéóÈfÑ0i ¦à}n˜.eY>çÝeÍHfIVŠd^fy.ŠVg-þ i挪žjðMå¬þŒd^c}€¯Fâ©Pą̀êUÆâ]ÖŒ'ŽßC>á¶Þ ½V-6c7F*þkõÀëCnã­¨äbè›~઀TÞè°Þ‰Wžb&¦kª`lj>b-ne·vå.fËÎäÉHmjíbæì#Ö 8äTÖblF×jÏvëÿÚ†a¼VÜŠÞîh§Ö% Ý^‡TNáeéãåi~_.æcUn ^ëÝUnžaÑe`ëÖä즊GÝuÝö ï^oöno÷~oøŽoùžoú®oû¾oüÎoýÞoþîoÿþopð÷àc¥8hOp7&~ߤ^pð§vcYåVžã8g–¶àYneðÎp_w&nŸ8éªv`PVîŽ` oñ §lodpöæMþfȶlovapþær`âgd5Æe˾âG(ꣶì6rT¸âofqrò¶q'cSŽqpþ –þæu(ê Wê¤Öâ*‡æTæñÿŒ>l£¾âë†r6Ÿ¯ð_Vå7j¶qu–rË.äζì Wf\nc5Žk)_àØnsCG™7WæNgO^ô~VbFwás,ft2îä6¶f:q^r ?tQW•DðMÿææs€6ê~r÷q~_)OîoVô†u%¾èQßõ÷(EÈ Q âT>nžnDöícgbQpêe‡nE8`Tøu Ne>o'çulgp[Îvnïo ¾önwqwr/ws?wtOwu_wvowwwxwyŸwz¯w{¿w|Ïw}ßw~ïwÿw€xx‚/xƒ?x„Ox…_x†ox‡§÷ÿ[x‰ŸxНx‹·ÈxßxŽïxÿx²UÛɵ\‘×\Î-yÂýx•_y•ùÊÏÄýZ¹}ΰ=B–¿yœwùÈ%y”wÛž÷ܘwMœú–‡ù¾¥ùŸçù—§K¼c¢zŽ×ùÍEú¥OÛ‘§úU…z­?©‡\³­z®eú Ýz¨ïú™Çú©ÿú—ùÇu[²z³o{ŸûÎ5ú£ú·ú¸¿z¶çû½÷{»¯y¼Ïû›ÿû“ù=û¾?üµ|Â_yÃÇÜÆW{¯ü¹ŸüÀüÂ|Äûºç|Ìý¬×|ÈýÊ7ýÓ÷ü·5ù”'ý¢O|¹ú“Uý §|]uý×ozÿ«|Ø}´O}¤À}G}ßÿ}Å·üË?ýÞ?Vá÷xäWúÐ_~ÆOûç‡þÕlþޝþÅŸ~àûÝçþí—|å§}˜Õ}ï§~í·ýãOöoéãùŸú¯ÿùGƒ¤7þâÙ¿{÷ˆëþ,hð B„Šièð!D‡hR<¸°"F…7ZäèQàÇCVIRãÉ’))š,ñ%ĉ)[®YåMƒ4Wîä™SçO Am"„iTŒÌ“=•%¸”éЧ$¥~¤ZµéΣ0“NÅÚ”hP«ÅŽõj6,E­/¹†$›ÑíÛ¯pUžý9—.Z†jcúŒ*÷¯ßº9ï²ìÿrïC¶W3Îëøñ`À#n¨Ø#aœ“ofîh¸fgÏ›ÿU–ØwôiÔPGþœÚ`i˯9KVÝÕõÌÚ­‹Æ¾\–õnÛmuÓÆ½ú`l¤³A/.|8pçvÓö^nýzîè̵c¿Í»´o‘ÆOçžýùâÑÉÃÇ5O>8üøÛÝCÿ^™=ÆÐõïoÞÝ{yô¥‡\uçˆfã(ß|&¨à€2h „ VøŸfR8á†r¸à‡õ$‰%šx"Š)ª¸"‹-ºø"Œ1Ê8#5Úx#Ž9ê¸#=úø#A 9$‘Ey$’I*¹$“M:ù$”QJ9%•UZy%–Yj¹%—]z4ù%˜aŠ9&™ešy&šiª¹&›mºù&œqÊ9'uÚy'žyê¹'Ÿ}úù'  :(¡…Ò!ù,¨p 7‡ 000>\{QQQZWqJc~kYnnnnVoMx¨jg„iw}nŽxz‰yx˜f{¤v~ Y­_…°zƒ”j…«g‹³m¶y‡¨sްz—¹ŒKL‹dxŸoœ~°ML«dX«|\ºM½z\ªk{§yf©u|¼dj·iu´|k¼s{Æl1Þ{6íw6Û[[Ô]aÎf_Î~AÇWÛkMÜgV×vLÖxSÈdiÅksÃzhÊsxØdfÕmpÝugÙxyæ^MãWVèfIädYèwJèwVãfeåopårjäxx„m‰†vˆ…{˜”m…—uŒ™}“¤l€©w‰¥}‘¶y†Æ|„Ô}‚倖ƒx¾‚I¹€Z«‡h¯Œ®‘w²‹g²p´‘qÚƒ;õ…æ…+æ‡5ó‡&ñ‡6ò‘:É…FȉSÍ‘XÒˆFØŽRÚ‘NÚ”XɇtÍ’eÜyÖ‡fØ‚tØ•j×–xΤ}Þ£j×§xêˆGê‡Wé˜Lé›Vð‹Cñ•Gð›Vèƒiå‚{ê™gè”wì Xð [è¤fí©uí±|ñ¦gð«p‡‡‡‡ˆ•˜ˆ†š…™œ’Œ•••ˆ‰¦ˆ•©‚š¹–Š¢™–«œœ²† ½Ÿ ¢›¥¹¦…˜¦——º€Œºˆ”»•…ªŽ ¦˜¬®Ÿ°¶›¨½£Ž¸©œ¦¦¦¨§¶§²¾¼¤¨±®¿´°®¶¶¶ˆ¢À˜­Åœ±Ç£­Â©¹Ì¶»É±¿Ð¬ÀÖ½ÀĸÇÖɃˆÉŒ”Êœ‚˗؇‡ÙÚ–‹Õ——Ù£ÚŸ¢É¥ŽÇ«™×«ƒÔ§‘Õ²Õµ–Í©©Ç¬µÎ»©É´¶Ø¨¨Ø»¦×º»äƒƒä昉噙꤆栘췈빖ù¸€å¦¦è¹¤å¶¶ò®®ò´´Å½ÅØ¿ÃÚÀ¨×ĵëÁúÆšéŦéÌ´éлõͧñÁ¾øÒ­óÕ¼ÇÆÇÃÌ×ÊÒÚØÉÇÕÎÓØÒËÛÛÛÈÔâÛÞâÝàãåÅÅåÏÐè×ÈåÚÚôÆÆøÑÍõÚÚãÞàçáÛýâÊøç×åääïïð÷èæýïðþõëþþþÿÿ (PŸA}ëþ3¨à¿u:$hpâÄŠ1ZÜÈ‘ ÄŽ1j´ø¤É%Oª˜råÉ–.MÂŒyñ ¾üêÉ“‡0¡Ïu7=Ò‰hСgn9Ò¡R¤N¡‚|*õaÕŽTc2üùÎO³dÔXþLxÔêÀz×®ÑsI¯[·µ 6½jö$Ó²Qé’Ô;1+T¿ùþd˜Ì/c9¢°ëyaÙ’×”IVvMe7C˜ u‹ë˜¯Ð•6ç~ö<ðPÓ4Q§ì³±>t ßU3Ç4äÀyóêÕÃ}Ò߸qøðýö‘tq—ûlb5^šy]ÒªcFïØsº| ÏÉj·S^¸ïáÆIÿ<>O?üÄÍ3IoöùÆ‘;n¯`çÏ=OW¹Ÿ¿þ„èÜ£O2‹T`É0ÆÄÇ „‚‡0FTŽAÓ(óŽAï(3Mhê ßô ÐHØá‰(ž8aŠ®ÔßKν8~2^´:èè#Ï1'œ l”a†7ÛhƒGÞ„¶b5’½“¡2Õ°¨7‚òÍ7†€h¢”\r¸b—ö%EcŒd–I—O8ÞsO&˜`C Š)È ÞàAàØTŽ<Õ4sÄŸGq<\~(È¡%n &˜_véâ˜ÌÕ(¦™W%¤2ÐÄe40A”á}ô1Æ|$j1“)¨ Mrÿù 4Ð$©ç¢‹6Ê壔ê׫¯z!„b„C^l¡J+©p†cØÁAU€b“.Ê4#Dhˤ2<᪨¸,ê*%¯‘þª—¤“®»ÍdŒ³ied`/$ˆáÅLà)$«È¢OÊÄí…ú4c!¹™Ë°—¸¢k»{¥«.RmÈ øMy´²l;ÍØQÅ]ä!ÂØ» Ááа“ëð÷.*1tW é™Ö">÷B¢MÓÀ1A"„Äqƒ0›A&ÙnÛ­l’…k3Î)ÞŒâÎÀNܳÏë&dd8ÝØ±†%­œc<Ê(q-7œpAç`sAJÿöê±>ì5׃wö}‹=¶t"CŽ8o䉽´éóÎ%8°Ä d€N0ñ§Ÿ€ JèAñxãM<Œrbá-ú·x`‰+ôÓÔ3`º´’%íÄ T@çšÈ=ŠÂ“9)Y”Qy¨ Üt ;Ã×+'{íaó<;h7&óM>÷lÃÌ-¾WP9岨b¼´2¡2D,l¹†"V¡yJ™½¸ÿ J~æ=Û°*CÆ8î¡;ØHÊQ{Q°‚`Â%.Øô`FtAÁ:à! êpÁºð…0Œ¡ gHÃå†8Ì¡wÈÃúð‡@ ¢ÿ‡øÃ…¬cŽ»2ƒÉU «ÐÇ*2  søÏ3óšô$è}¨#RU×\§¢ˆmCc¯Âtlc'³XA(YØKÚèB‘ PbQPÁ”aMè@‚ÚPôAˆxÈ£‚°U¹ÈØ¡†i€ß;M&5,„pÃüxÊ`…DÀwøÈÔ€{Ù+·¨FŸ`ƒCA‘ú¸G–¦Gùg²y‡ÖƵ«3ð˜ÝC&]0ƒr`¡ X°@3Ј*]É x„,Ì‘Š ¢”ˆDnñ‰HHJ¹‡7 qnøò—ä’Ç•q:bžË˜É\c>õIÿ|bÞ(ÑiþBKú°Ä|a;RÂä…2 üáÌ’©P3¦Á¼aZòpëÚ¤tÈ~äcUHH+$Y|(DúÅBú»sLÍBî ¨Euļf sŒäÊšAh–30ôL"u Å*ÆX´¬}À:¨d¥o`S›² DM!±ˆq–óœÐƒ[«ÀÅ%ŒêH2µ_ÃÌ£¤$õŒ;*ºF@`Úéö€‰ @ OX‚Ü&÷„¶šP…+*D„ÌB =0 ¸ñSˆ‘KaÓÇ“<ÊV™Ä5¤ÜÛ'_Ú¡Š ¤¢rú ÄÄ-B¸B 7°l™à€Vÿ´âº E$üš‚á-í ‚0„*½³’6‘§d|š¢'MzödÑ[áZÐV—/¢F´¨A ;ŒÁ=ÁšÑƒ8ÀiÇäZ¡‹â±d&Gr­o[nG«lÔ+SzÒÔ½îºì% w¼‚Šú Æþà`Ë.–¨¾A q "²?ðÁ¶½í!Ð*Uú(ö¢Cñ¤QÎU+Š‚YÙúšlÀ.ðgùÑ(drîàܨ¼§x¸ÁŽá·?B3Œ@„iè’zã>ÚK¡yL#³,Rîdê‰ë^K:Þ´yÈ™cÓTè£Çÿ¸À#Nô_]Üâ9T \p áUAB4¦Q?}ŒH«urjÁ:t·ªfÒ(5*DVíÝÁžñ¯EwL.PP‚ Ðèƒ(÷ÔOà·Ž_"Øá F5z>ëhb†à$…þ%±6c×'jÂÔíîKÞ|}Î @–À:;ôŽa¤ã¯‡Ìž‰Àjno{á O.$eÖQœB‹gô‰ÄšV¤÷ݳ‘F=Õ9Iã›ÖR8Á'h“!@ÌaÈè2+v¡‹eIJ…]Ä".(nÛ &3˜Q«ƒ€ÃßÐZ”í—!*sè­€lf7[TGA]ÞÂŽzÿà‡bw<Â#ÐÁ.ô!x ðï$NÛ"Žˆm…;š1v@ ¡·.pHÃE\àVF ·!·SQà†8‹çt'B`#'Z‚gägìÀö` ¥p þ%~Ài€ Èpe€åÅO°‚2O­"v”åÕFFyw€Pú%V1à”­`£ð9`úå}~‡à·z«Áeÿ ì É ƒ´$(î§  eP¢ Õ7çSß2 þ(A ³ÀDÀ€pqöyoÓS•Qªpwôdpˆ„ªÇ„J•z{ÈF7…R(õÝh{úð ÐJÿ^}“tG  v?hP ò@yC`“Ñhd‘Z%† IyXLI¸e¨e°ˆ1@ÆÆð p$È€g€ Õ™£c…•H"•æ\4ðÌð[AàΤ^@hª jP%‡S«xO­‹â犯(6Ñç—9M0 ÁSBÒˆZ Oà à.ðMà " ´yQàØfd¬fdo!‚K×cqVAö*g0 çŒ$†ó}(ŽKȇvázª p7~ÕÓð(:Ó ¬pH9@h­°6à7Y™ –—p3ÿ@¼(z·nc•Ì’e°”“%¾tz/~©„KI?„¥% ’a °cÕ°™sð ýXG4Eƒ=p—0ÜR?23À=ð4ÀÒ˜qÏó˜%E uà;’† ‘±óSÇ”Ha`Æth‡°0ªP•‘PxwC B– PdSD0ÍpHˆÔ-± hY!G°™ÝÇxÙrhe/Fsn`H—¡A釦”J5úÐ  ”ðAå ç§•LÐ@ åÐQ€”@A”€9ÐX;`“? ·@A¾€–å0 ·@5PC.d #ÄA= Æ0xÿ€e0Ú)C[AD깞ìÙžîùžDdÔ• •’!R` ë  ™ •\é^Ùeem7àÛÆ-ÚÒ 3P° u€u $p %r‰?STE§Ð’<÷À ‡îäq˜¬7~MIc h/”°ÓLÀQ HÒK0#°­à’±uµy¿%(G€aDŠ„À°ó§fjdµZåJ´Q4‡‚Œ„‡H‘­ ›Yª¥PÁ"£ú 0¦`roS‰0×2Z Jšª@ =€g–ø@ú,_p§w*¶;æà€u <úà_ê6SÂHñP F£Šÿ†¥%J¢MÈ¥²­`[t•£'§ ·}2/x eGñu Í,@,x*_0Ð`tÀ¨>¸^Ö™'òEP‘ùõt~9޾ŽY §d•  7 â*’ÁQR‰™è'¤J Þ`s|ÀZ¬u­_@nT*«aS“ÀQÓ09(ò!IRT²«WÚ«Àú—ÁZ‘­Ī©Çš¬ËZMç'ä%_¢.@­ÖúÐ"ÚêiÂ`n'r‘“‘Èz"? u°z˜”é¨#åšDÁ!•z©­©Á$š!“zïÀ 07þª¸pª©ºªdp§!RÇ'wÿW <±9pŸ@ ™p´"ÒÓ­"j±&º¥G‹´õÑ!©`W Õà†Ó0H€rKï0 b –`XQpy8A !xúdpnFÃ:óDeJ®t“"©# žgðÀQ8;‘ìz¢î ŽíÚIÒ ­ÀtÍ: œé*eÉ-NàE907‹ ™Ó àØ wÑ@ÆÅ$>¥\lª ½³,hOËÚƒ«‰±{±{ ¯\–"ßà VlÚ Û¦ —°7» ¸‘€á²Z7 µÐIÑÀw"xÐy{‡0ÕG»Úu¸_µ«€ÄT¬;¢~Ë·€‹"â¼¢ÿ[}Â-ú`/·P0Ÿðº=” ú`ƒ9ÂÑà Â.вøó$Ø_ú%¾QºÚÓºJû® ©˜"ß»¬ºPã{団sXøC¹f ¿…3{OrqÃs‚ò†¯ãÁ;%ÀãAÀ¼½lÀ“Š"±û$³—jX “À£–y Éð<ÀëÂ۰܃°ò-ÏzGWV^GÃÖ{IØ›´‘*ÅS¼´!ë†é%2š0H2!馸:`ôÆ· Yr½Ðˆ$`h€˜ Ã#ieQbÅïð'ÓÀqÈe¨;ÀÚËÂ+Ü·‚<©†«!ÔøJ¶ÿ0 Q²"Y ÕP|A™pj÷™-†Àh@$àaeðÿÿ  É ÄÍz?H?°‚tG¨#xÛ_¬9ȿʽµ,¬›zÉÊ TdE¿#¨º"VX[?~sK’ñ|`}à «uŠ v ÿ¤¬ ëP ~ Ë8šÃ %’±æ`¨je*\Å.¼ºÙ›‘ |?ws¥U9ºâÀ¤#c§!™ìú°a M w Í@Íÿ€ºpÐ#ÏGÀÃeÐ Óv“ ¨ª ÈF‹À}(©æÜzëœ!í,™xÓ“ªìlܬŒü¾|àBaàýÍÓФ| =pÐøÿƒ h¹m5¸j;{ž0ÎEûšé,Ô}ÑΡ¿ºÌËUtEÀ\q4ü‚H |p} Zbà̾Ðír¡ %ë`h Ê“rP þê-9éð™ÞÈ„|Ë-\È <̉䤘†ZÁ¬†:søµ%-†°Ø*`@ž¡üÒ\]Í=(Í hÐΊ–G “A7§<Ñ) ×rMËÛÙ†ü7B¨Ë!y7˜(ÆN :й$…†Ì{¿ ’ Ø‹ýÇpaÙ h`~ƒÓ`X´±QpÙàÖÒ¥ºFMÅÍíÜZ‘ËžZÂõ[a,ÆQ ušà©ñ`\³ÿV%Q¸Ûº0Ór 0¹Phú  7ð’‚SÀYäÌÙŸmËú½ßä¨ýÄãò*Qˆt)à–°¬Ó0"„€·F¹ÆðÒ Ð¡ì7|†–2p :òr‡åÊHIÔEÍÜ$^â*a² NÝ1v‹Ëià®à´fÙl*‡€90Í€^ Ÿ à ¦YÛÆpÀp¬#}²Ç¯üÖ}ÎÏ åQÞz1œÄÓۉܢ<€b̰®bÐþ<{Àz0ÎðÞ60Êÿ0 Ѐ 9€mÙB§Ó —‚ÂÄ÷½ 1o ÎÐíuœÊ*.d܆g-€–Øÿöœ6°ë!w`z@*àr iþ`£ à;É€‰‚²¸Ïê¿zûƒbËÍ6‹IC-âñzrX TCU–•7"ö.<ºÆ(~ࢠöÐ-ð`0 më@æ`»·„‰ÜFËÀ%È0=Þݨz^Pœß®Ûç~N[“k‹»m„àAð6ð ³ O #ÝÍú@vP éÿ )À-8ëŒg})ry@=à€_§n¡ê=åq îÑ+ìµmLB²µDÐ=@ÌÁÞ‰òu&€à 1 €H²vÄÌÊRx *˜ÿ‘ð5Áí«ÅR>Ë2!›ç9Cˆ4Bº°m§¶mÉLãäråý:0ºO0 € зBåp vAÜ‚ 4T x@24”žð™öj¿ölßö31î:ìô|pF@ôئŽ€E:—ô£ ¥àH0€°·° yûþnçI>ð/hò˜%ËÔ1e±Ùs ñ&Žß¸,ñ6á'ÌJp(`Ø_ÁæÇcg„ ߀p*é‘’øëÙâ Ð`—åœÐ6,ríÓs¨wM"‘º™ïíɯü]êh¼¸D0)9s×öº ҞȂ–ÿ×—° »à;±p9˜"fmO¥]CêÐ Ù,LžÛ—¨~ÆïÑ휿üß®ù áüG*á@R'”$;òC™Ò§šˆ”9âCLbM¢pመf"KžwŒù‰¤ä"jæCóĪé)Ò€2Q´óàÛÊEaŒQƢ䫩Áª£³ˆ¦Pb-$Nh@ÇÞ ŽˆŒ‚âšô®ÞšF;€â]q¡ ®+¹Dª‰ÃjF³šíê1ñ;›Þ+OŬÜtMÎÕ謓Æm¬ÁièK ÍiªÙa„%H Aˆÿ%¡ñÈ&ƒÈ¨ÉªÓÇ­&•ù†G¸…‰\¨ÀK›´»…¶²xTFœãk3´¨ôYG¼WYeO¤h­ÕV;W³‘A‘’f,uêÍ=X‚Cù&Àá„ó¨·[~B¾ˆì8y#b‡-{È&›Ó‘AïÆj扪‡Јr5´Î¬rÖxãÌó³;i͵´}KÓSL}tÒ¨=ýøy¦‚ºo&¹i2u–8ãkÈ1¾Ž0òÑé2ƒL2›B©ì"ëÞÐ}§žyêÁ÷]£^½W¬Xç••5wáÌÏ~G³õͲ3S`›xLÚ„Y¸š†Îàƒ7òˆ§ÿЧ¹˜¤ŒäMz³äš£Zì o#"$eXVs²WÛ^Ó3òìM_~qý¹g°vè_mÚ›$À”!ÖXdñ&ÛÞ†;¢6ŠvÚj¯ qe8Á†)¾ŠÇ0Ók0t›9÷vFªí¶ƒ:ñÄv[—ÛuØÃ»E»¶±¾w’Ížˆjbœ@!XØC‡ÎÁ&yƒ4ÒÙ ÍLk"à²á† @ 5¤F¬éœVTi¥ îkªš7V™?ó õ›qfñýºõ½ûgUaÃ1PÊ|¢ÅëŠh|DáÎ4¢Ä $ ÇLõH‘†Ó¤´âò¡9ªW=Hc'Ìÿ5LÓÔ¹n}©{Û‹ÞF7ÙÕN~¶»Pè"N&@ Ù îî£ R«qPÒÈídÓJd 怌%Ì&œ#Î=¨KÜX·©§„é™ÝëxF¿º(!*×Ér—Ú”Cde©o"Ò"Ø6²X%dA ª¢&գ܈ÔÖ*&ʬ~ð[JhèVEóÒ=ócaIâ§Ë´ZͨƇÂ8F²”q#ÛáË“ `@ˆú8GäH’êMÊswÌaVžT‰F}²äS8ƒÂö´rV¶2dMYËÏÕå8ô°x›Ì”EH…9H‘Š È¢"3° âGó`hØÿ˹Ǭ¤ÑQÄsEÒ —ùg©Ž¨±°Å$eL‰Æ²Šdše˜Ð´à)ÑS‰C3ŸaßIX¿›Ù©š­z%6çDÈÍ” µ¼e9IÀ4ž‡¡ ] £ÒyVt9äq täQÔ£&u©M}jT§ZÕ«fu«[ýšú¬˜·7>0.í³Ë‡ªÆÀ¥à¿îÓãÓÂl^|-`›M#7WŠ(pëÂSgõ„ÀÞ­òe¦z1wè5°ò¹Ð˜±Ê”˽f‡sÆ•ó ´°l©±*ÈÂ>;gÕwÃLÎjËMº€‡·¹ÓÈÖúOÿi‚ux Î*ê¦;Ä÷R·JQ)• û¦5õ¯ktöJš¡Ôâ¸x9;ÎñZœØÒEa›Jpo:1v5Š×°%.Ó+W»ß´™šcNÛjk1ç¶ ùœOW«’·yÉ©E¹uûX×­`ÅÜN^vŠËš§ùÍþùÎynu|ßÖúͼSž’E4/:k°âª'¯5«l]ÔÇ3u§ãëY¯öÇa9B’{ÝÌSµùÌU>Ý–/=œNG剢Žä›gÑîr·z­Ñä f¼W¬éF¹rM 7ôùÑáÚ…x__þU¯ÒáÏ*‘ð¹Ó½Ê¶¤<(r‡[áÉ%-‹R&vÞô·ÿ0½yšÍË{ŠëYlê¯xûÝ&Êð¬q ~x´|U¡»ºÒ ßÙG®¾Ðé•vÐ7»T—ùç»Yu¬õ–m>Âtrḵ]ÿ¹uÑüö¤œÔDg/ú`e–aÓ“¶K²®À¦;?Æk¼¹c¬ih?Qø“?‚¢?¼¿¬r >6«¿Ÿ«@q‹-ø3 A¦›7œK¿L>$a>细~˜¿é6ë[.°ºÀø@7m²¿îC®å?f£·*‚"Ä“âKA„Ök’׳ªo²?ÏË£J.¤Ar«@”2¸ÙÊ/Kþú½<=2>#´Ÿ8‚e¼ýš™Û“ÿ½²™7;¸«b9„ÛvÌÉv,²¦Éhk³nœ@Î;@TÇÕ«ËŽôÉõÐJ<Ī LL*ʵ³Z<½„¹¸“*™,À<¤Lq’̬ôÌðæ|tÌøQ;ÊÌËÉLM„ÇÑÔÌÒDMALÐŒ¥dMhsMTÍØœMÚ4Íz+¿ÿñ;MÜ4L*âÍâ4΃ªÌÖjÍáÄÊÝôÍÏDÎÉ…bÎæüÇÔNà»Íì„Îè¼N¼NÝ„ëÏï„MðÂñìMô$Oí|MóLOõ<ÏõìNïtÏûÄOù¤©ö´Ïø|Îþ<ÎüÜÏò¬O ÐäDÐÝÏà4ÐuÐ¥O P=G eÏÿÔÏ õÏ •ϽP…ÐíЭP ÐP=PQ5¿UQ MÑélQø|ÑEQM!•ÑÅQîdÑõÑýÑ!½Î5R%]Ò"ÅPEÒ %R!=ÒÕÑuÍ$uR*­R&R+5Ñ,mR1S)-S3…Ò÷äQÿ­Ñ-­ÇÏ0õR-mÓ¥¼Ò:Ò4uÓ'uÑ=UÓ5=¸ TATB-TC=TD•Ë.•S2eS:uÎ9ýÒ Ó3åÒEuÔKÅT¥TMmÔNeTP U8ÒO­TKõÔSEÕáäT>µSHUU=íSÜdÕT5U?uUìU4}ÓV}ÔWÕÕZµU,%Õ^•ÔL Öb5V%VdmVgU_%ÎQÍÓ;UVX­Öc}Öa¥Ö_VlTp WeÖ[Ö\-UtM׿¤ÕrµV`m×l…×M%WhuWo•Öd×måUmíÖ{=×|×ôd×zÕ×o½VU×U¥×ƒ}WyEX| ØqåÖÿˆ}XˆØ~MØueXµX‡mØÅØ…¥X‘-Xƒ­X“ØiåWUØ–•Ø Obܽa)ÿD0âF€âŽ D0cë,ž V_¥¨ãµSb¤â8D8€9ÞbÞí^¡°â<æÞC¾_¯€á 6bÎá hßãc}áXd;&ß >䯕`Eþ ?àA¾äI®a°8€õea?dM–ä¨`åMþ‡.žc×)ŽdY^ @þ‡Pn„ô]ßè™P6Šî%æFâ°b¶âK¶.?‹`^‡]ÖåuÀc[FfU^a]Ffþcg#æfÖã&æj†btv1>NƳöåjÆßÆæbŠxßdæa,gZ.Nßm…iF U¶æÆÅæ dÿthUîb}8a‚^ßUÖaQ6f¶®†ö Q€PøàŽöçÖé’váuß÷ŠŒÆclNköã æÇÕã°å7žŠPågŠ æe—fßöŠkÖã@æFPîa}€ fä®è^§pêfa¤‹>Þ.ÖߦНFàîÕåröaæár@k×pê.F„váN.P¦aAn\9ncƒfDÆèÖgfå¶kCÆkU¶_Cîë|¾feÄ®aÁ¶j­€[cXF…ɦ ̆塘gzäâ§v Î`/ ÆeÙY_»íàuäÙ±\…FÝ‚Æëâ½hÿyfíXæäÇíý-àºýÞÖŠ@Öh¯h»]»Þä¦ ç®[©°líÍníÞnîînïþnðoñoò.oó>oôNoõ^oöno÷~ï …á©gø®oûv ¶>dž¾oþîo«ÈoQfêenfV¾hûE݇áðÍß î`ùžíó æð¥iy.iÿ¾pðäañ=á:âÐe,Þe4>i¿h^Þåràá—bñn–¾d@æåp^á]Ži ÏqqÏa?ÖeO …Þåuéàáó=iþñ­d¿ç!^aï•c¿rÍð“–qýÎaUélÆfOòæáÿžã“å§k žj¯rìÆr9‡-¯c^¶c;Ÿã$ßæ¾ó‹Nq”>ilöã]þºve’¶å:¾hT¨ç9t©sCçñ¶rEÇlöpWñlžt—íB?éæôvtH?õô(Dp Q°`A†íûåíÕf_Òþ%ÿmÓÎmDpðU÷íÞ†nGuaÇöa?vém_cGvfovgvhviŸvj¯vk¿vlÏvmßvnïvoÿvpwqwr/ws?wtOwu_wvowwwxwyŸwz¯w{¿w|ÏwfOT~ïwÿw€ø¶L‚/xƒ?x„/xYx[µeø†‡Úÿ§̈GÔHx‹¿ø…¤´•[•Zþ¼X›ŒÙ‹ùƒÏxˆø“GùŸøõø ’ù0ùWÚš·ù—gùëê*A’y’§ù•Wù úùÔy\Íy¯ðù‘z¤÷Ù¡wú¢wù¨'úŽOz¥·x¦Ÿú£Õøwx¨¯zª—x«¿z„Ïz°ßú”ÿz±{Šy­Ï ²Ox³_{´¿y£7×·¿Z·û²÷z½çxºÿû¸mzµo{˜ç{ƒŸ{×ú¼?ÛÆ·Ú´¯{‡{ÄWx¿wüÇü–gûÍ/üΧüÊŸùˇüÈ|®‡ÛÉ7ýÒ¯ŠÐ'xÅÿ|Ì?{ÉÏüÁ§ýÑßûÖ}ÿž?úÔ'}»ç|Ø÷}¡h}Ñ?}··}ãÇùÞ×üàÇýÐ×}¼GþÕgþÝþÀ· â‡þ®¿}Íßyë¿~áÿ}Î÷þïoþîç}Ù÷|óçþÚ—þ§ŸýôýÅ÷Š/÷ùŸÿñGðÿøˆü"à¿u2l(P¡Ãˆ !J¬8¢ÅŠ3:Üȱ¡ÇCŠ$H²dB” ŽT Òå“(e–¤ùÑæM˜-ušäyQ'Ëž>MY'G¤•.=ZÔ¨O¦ ƒþt:TªD¬µ¾´õ)׉@ ½êõëYaÅšM sí?ªDݺ„»³-Z¼<í–Ý;ön^¿tëVÉÿw®^µû ÜØñ[°…gN¶(*d•EÆüXñ椋«&ŽZtiÓ™5¯æx¹³gÕ­)§fýôlËdIçÎy:cgØÁ%×v½qoÔÅi'W~[6n•¯‰7Ný¹íèØ™K?:øðÙÅþÝt¹nÀÛk^_Ϲ=yîÚKN7Ÿ~ü÷ö·â/ÿôûx è_uç¨Ñ~&Øzúx_ƒ¾=ˆÐZx!†j¸!‡zø!ˆ!Š8"‰%šx"Š)ªè!=+ºø"Œ1Ê8#5ÚXa‹7ê¸#=úø#Œ99$‘EyäŠB"¹$“M:飒OJ9%•U‚¥•Yj¹å’XrDù%˜aÒ襘ešyfˆd¢¹&›hªÙ&œqjù¦œuÚÉ$wê¹'”|úù'y:(¡' Z(¢‰vx¨¢:ʨ£‘JO@!ù,¡q'6‡ 000HHHVVVZWq]axIQe^yiii~d}vvvUkŒMx¨cb€jyvk‹xz‰yx˜f{¤v~ Y­_…°z‚“h„ªfвm¶y‡¨sްz—¹“=<”@@„l}˜h|Ÿoœ~«GG«|\ºM½z\¤ffªk{§yf¦¼gn·iv´|k¼s{êx9ð{.ÀTSÛ[[Ç^eÖ]aÎf_Í~AÚkMÜgU×vLÖxSÈdjÅktÆvgÊrwØdfÕmpÝvhØxxæ^MãWVèfIädYèwJèwVãfeåopårjäxx„n‰†vˆ…{˜”l„—uŒš}”¤l€©w‰¥}‘¶y†Æ{„Ô}‚倘‚y¹€Z¯Œ®‘w²Žm²p´‘qÛƒ;õ…æ…+è‡4ó‡&ñ‡6ò‘;ˆFȉSÍ‘XÒˆFØŽRÚ‘NÍ’eÜyÔ†g×tבj×–xΤ}Þ£j×§xë‰Gë‡Wè˜KèšUð‹Cñ•Gð›Vèƒiå|ë™hè”wð [è£fí¨uî±|ñ¦gð«pû´x‡‡‡‡ˆ•˜ˆ†›„™œ’Œ•••ˆ‰¦ˆ•©‚š¹–Š¢™–«œœ²† ½›¤¹¦…˜¥›™º€Œºˆ”»•…ªŽ ¨›«®Ÿ°¶›©½£Ž¸©œ§§§©¨·§²¾¸¤¨³­¹´°®¶¶¶žÁˆ¢À˜­Å±Ç£­Â©¹Ëµ¼É±¿Ð¬ÀÖ¹ÀȸÆÖǃ‡ÉŒ“Êœ‚É––؇ˆÙÚ–‹Õ–—Ä™£ÚŸ¢É¥ŽÂ­›×¬„Ó©‘Õ²Ó³–ͪªÇ¬µÎ»©É³¶×¥§Ö¼¦Ú¹¼äƒƒå癈嚚ðŸŸê¤†æ ˜í·ˆë¹–妦躤嶶ò±±Å½ÅØ¿ÃÊľÛÀ¦ØÄ³ëÁûÆ™êÆ§éÌ´éлóͧñÀ¿øÑ¬ò×¾ÇÆÇÄÌÖÊÑÚÜÄÅÕÎÔÙÒËÛÛÛÌÖâÚÞâÝàäåÅÅåÏÐç×ÉåÚÙóÅÄúÙÆôÕÕåßàåàÜýâÊùéÙåäåïïðúéåþðåþþþÿÙýHpྃ "dǰ!»}ÿ ŒH±¢Eƒ%&¼È‘ãÄŽ n¬ø¤Éˆ%OžL©$Ë–_Â$ø0#F‡ ×霈“¡M‰í]»V¯e=oÞŠþ[8ræE™›6EéteU—WcfÕº•&Â8²[ÇM›9s¯Úíó¹ôaÁ×–É]ví¤7Cx y[*ögWš-~}ú×"Ô­‡³&V\è°kÙ‰r% ­ªsÜÂùkûsb½eÎìÙs¶ÌÈz†åˇÈR ßÂì—jlÙ·ÁæÖ½ö߉‘:\»¯Úƒî‰G®ßÔŒöèõØžéŽùÈé¨\>…½kÿ^|•¼Só3ѧo ¼¡ÄáÿÐÍBwð›¸róÈÝ÷ }Üu{þ¦wä¼&Þ_v¥L ªÔ U½=h_îWÓ+®˜ÃÍ/h¤ñ 7Ûä¡Ç7´™s5rÁ\ÖÐæâ>ßb8à"8™øâŽ<¾¨c.B¸›„X Ù›o ~Õ“Oó¸ò *¢,Ò¡ ƒ|“Ç}„#˜9óXã `2‘ñy4‚¤)ˆ4[šé¦o &dnDrEç‘u¢´‘… ô p aôá‡f˜Ñ›3×2bŽ™¢›àH# ‰mÆ©éqÎy[ž„!{" 7Ü>²¸²Š+ª|AFfÜÿ‚Z€"Ø. ÁcMI8£«\óhZ¢°qrú¦§±:¡¨Ì*¨[# ÔFHaX X +³ì#Ä2ñ ÏA¤KìAÆ®»c»f"Kj³ÉâIªX>™ª®¸ãÌZX†&8@µ¬Œì>bª›®»ûÀ q¦šÊ;Þ¨ôÖ{qBK>&5qX !rððD¬rI®»öúë2 ¯+ñÄìkñoß™s’6u¼Ï9«Ò·Ï<Ë<¡A-<°(:Øh ˜rEÊĤÏL³Õ;ÞìlÆïŒqõä'µœs<—D0ÀA:VD˜_†9f™ÉóÍ7òÿK3X¿¨5b^ÏËuUKBöó9®pP‰;µrÁ0à¶&FBÚ\*²ˆPŒjvófàî’NÛàŒ¾µêéá›oŸø6ŽÙûP{Î,«Tî³L˨»"5#ã4h ¢¥™¦Ûü`E²žºÎÒ·”8dèüIœEíYæp A—€/ÄBs1Bìr–ys–0yØþýøç¯ÿþü÷ïÿY®»žHÀð€L ¨Àž ÄB9Ç+"Á p€û`VÁ8D‚EÇØ\ŠV´ŒíMË3£€ô¼MÙÌ$ÊZõ>e¯ñd$2܇;Ìá ΂ZûØÿÀЈ V‚VXƸ–qMüàc"^}AyÌ£‚À ÿö®Fo†cyÖ×A„q®`Ç4éAmHÙ8 \X#|TØÁ™ Å}àÃFj">ÜÔBÚè 1Ë‘í$Æ®5ґ΂Fã Vd`{p„Œhô @bçPHáŽJHB¸ø„$®PB„àã†8D7IHwÍC„ËÀ›"……ºò’4fDÖâw ƒ‚˜Æb üâ ?¬Ä98ÄsÑq},»¨jl.‘…ì%â~‰3rž§#Å9C\QÌM8ÚÇ(œ MÇ¡CeÁ{Ç5ûxÿK¹8#‘=*äA€…®àQ¬S0¬á#W·Ðõtä±àî(PvÄhFàèä'gQ {F‚¨T%+MH´GÁ¬–Ä*)B¸©®šñ2¡æ$\õ|)ÌŠÄ‚8¥@¸NȇDñ¬ `4 RH‚&Vñ n&A´¸‚–ˆnÔEÝi¨1‚s‘Qh0*Ór¢s¸ Ba†2ÀН¸v@×(DÀ®øÄ.j! º€I ‚ èŠ# AF´ì"Bú š« †„s1á.+Ó™žÓ²—5+:iSXU£w0Ä€*8C@ˆÀ#CAWìÂTp d <ÿA@Ó át’>ʱ‹%3$;Y„~q¬Ècr§·YÁ Õ8È4Ì`!D`ûÀìú{bP.‘˜‚ x…„Û^i²”U±ºRl„›ÙV8+KVšÖ×¾ 刋žÝ}t¶ºx.ž…'Ä»¾[F$òø#8x´ØGÌ &C$Ö¥Z5è>V䌪5T˜ePLËšß‹ìw‘X;¦{‡i€Ö ~`  0…¬ ¼èÒ2\p‰W¼– T  ~€„à@Ò0úBœ…Ðâ¸iBÅ×…/=®r ·\.“˜#š#;Øš(3‚hI A]Y€ Zø@ÿB «ôhÁΖ‡íi!ö! S8‹.©3¾éá,3²ËšÝ²—3ŠÔN¢ï€Åý @ôt³cœy`…H\" O”†@„R— –ZÔ> Ñ>Ü(MÁâd5Ü£C^u¾Z^tM­hÄ5:"í¸ B(ø­Ã\âúŠÑ  F‚K„"8c I ÆÑV¯é„Ë4Ö<¨ÁU 1V.ºÄ°qÝëïš×¾ü5AÜ‘Ö}X€ÄŽ„» \ðÀa’ ˜P„"DÊE˜5€·ã ¢­Þ!Ñ7Y?ª¥/â¦3ªÁÍ“÷XôE´»áýîõÈÛ ÿ”Dž*\yh¤38Á+&Ì6 §vµ§±+rñy‚àƒ!ºÅˆÿHЄÞA3Œq\³[×$yÔ[— ‚3Ø€%rÑÊÁƒêˆDžè!'¡Î¦.õµ³-˜+V¸oko•Ýû"•¾—Öq7tXGŒßvKêQIH;,q|Âl+ 茷‚»`†ÍqTF0âb2uL=Þ$4£—BH8¾Ž˜ýèaÍ‹Ðá ©rÕ«y®KÎ\¿¹ö ‰à;^ü€ ç‚ǰ†âƒ!,˜kƒ§Ö ¥ºâΨy ðW<±°†Uµb÷ß¡uŸ6ÓäÀÿ#:µ®ÜMâ̬Èouõç¾8¬xÇ`éc² »£Q @ æ V°•p•°>ðT@àDð¸p¿”æ@ ¸:ð?øs íc>B>p ƒk€t@›ý@ TœÆyœÈ™œÊ)@'‡r4°’Á³"Wp ì° ™0“5ù7ybÔj<@¥ÿÆ+¾â 8 ÃÀ v°v0,=RRÖ°”î¥At Ž0 ƒÝpz0K”5{&ùŽ"˜˜çÔœÿ~ÔR ì@ VQ`R´"R(€Œà 9W, GdXcÂk@c0¢y@µ8ðgovRìÐQdc6ø0q‚T…=r•Z™•ñ¸• e kÁ/Ŧ 0¤  ‹õ†ÿ&ŸBà«P B dpHú*bp¥WZ˜8çðBu ‘9ûðü"41REÆ0q„¸Ž…y…Š…ê ÊI€W°F'² ¸°Š^2ˆ 7—³… ÎP/pe€¥‹ÿjÒ`u°¦´áŠÏ‰V´#(1è¸[l  z˜† ªŒVu“4lzº®@‘pwÄp6"Þ$&o8‡_B¨µð ×nåVº*®F£’Úˆ@ ÞD Ä#hB"æ#œz£mJ’íè¦oŠ•ÍeªŠªªÊª®ª÷%§E[bò4p«¹*°R½zfÃk;‚’às᫺#' v@‹†èˆ)ªÐ­Óú~‘ªwÚC§Š"}º"mxwðÐ ÿ†âú¹p¨‰Ê¨gp¥8bð44^2\ÁÂ>ÀŸP ™ÀµÐ# ¬ÿI…q ‚ýJ­p:L.¢ 9Eª` FÿH K&|Ô&¦` He,0dS¢$Pc€¥bp±6q}ƒK–¢V@6<às<¢7Ãwá\8º£:úµbK'±#® ‘à «ÄP—⓼2@GÉçX0hÖ€ j$»*tÓPˆ…"ÿÔOñ¹ »À/|É<ù[‚ó¬+믑+¹,x<¢ƒ«H 𹔥¶ —à4¼p¶’ Ã,7 ¶ NÀÓÐX2£†ð´Æa›Ë”ŒÛ[Ji»§¹ŸZ¹½ë»” ³<ÂR®º z¹a¼òh¸@.Ÿ@»`Bz+ û`ƒ 6àÖ ß0 Ce{J<$T~Àÿåž©×aeµr»/K é«¾.+Ã;»ˆëÈËF7Iå^z‹]†Ö‹EZò#$DnT³pcr„€ƒò›`ë©ë˯“Û¾ÿZª/‚¹$¤¹¹Ë+Ö@ ú–—  ,bº€º"ŒÐ ˆUˆ:è9ÜgRwÀ¸[BòùrcËÀ ¼ ,Na³Ô`Bî *š°DØd"³ö¶?°ÉWĸÐUØ„¾p†à)pkà¥àM»œÑqRTRÁ‚i|”n˜zŽ$è˾5¼7\Ʊ¶ØD©Ô" ·°Ãy7nÃe ™gV p6 a}°)a@Å·=ÀLФ`ÿ± Lð°šzăf’ÒÂâÛ[]K˜4|ÆüÀ9Ú»ö6Br1 ÔA#…%Õ³À5|$€ÐwàÐÐV[°Áp/`p >ððýv¸%tlÜ'&%$ìpBSÉ·¨¯¡ŠÆš¼É6¬Ä›z‚hE;Æâu#5‡M~üÆdðRpx@ŽÀ¨@ ÿ½œA‘_…Å-rZ@V” ¦ƒ¹À*û»ÐœÆÎ ¶è4Í+RÍ¡AB“Íî…i¼òªrüÍÄsdåZé¼ÎíìÎï@<É”¥¦‘ jö±<à ÊŒ~jìÀÝÉûŠÃÊ£ÿÜ8ajÊ̾"ÒÐxàlU³\Ë·œË;°ÑÚ“i°Á° 9Ö ®¾b >àꀗñÒÒÑìÒÐ`{¨E-:G´c‹·Ä+?ðoШÃ-2†À»ZcPȇœÈG zÍÑ» Î kà±”L 4Ê ÕúÏ_MÐÍ<Ð8<Ì5Gá–ë7AÌÞTj(’te³IPBÊÄ ïLà+à¤ðÀëÿ`ÊðÐÜœfy°Bx¡ïÉÎïËêœÌò籘#œûÿEí³ ¥g¥ÖyFŠ€JýÖ×¹É+»`T€àÀ ` a¨p Õ>¼‚ þc yPàóFÿCœËÙõ^ÿõ`Ÿœe+_GšÊ¿3mKó¢öðA0Ì”¿³ ¥M€tŒà' ¨Ðlæ5NïöÎdh[åµ&"1§;îéýéë­_d_êE )FБngƒUçàÐc²„0 à@miRÕ¤>€ Õ K0mjÍ ®Ì;Rìj‚å·t»ûñ@7”ûßøÎÞò‘ï¾6p›(20¡F»°a‡} zv2p ¬À à<ìÿ° K€} åjTð¢uéÒ0 ŽŒH„ëÏç1Œ/ð/íòõOÿÂ[üà 5É? B2X¯¾ûò¦X²Ë’ÐØÿ!$I¶ná2Ibpâ<¼zgÒ¤¶ÄˆÝeFŠà‘ÄbÅ«'lKMãáœQ;^æLYè˪©K_º|Öó>ÅofÍÕñ>¾ÎàY‹a¯3vÜvN!#’D"Ü,ÂhkZ† < ù¨>6±‚&Tb©«yà9§Ž†Sȳc³§To'ÌH4/=ÓXlÑÅ©`üg=ÛCp¯çÞ£N!,ž« dð0xxKB"#Àã"&±sæ6g¤"Žd—Ghá‚è¸Nˆ\ÊÐŽÄ´ÆjâQ§—ÖcL*Q“Q½9é„1NùRš÷;“k€@Šr8BIÿi:4’I#$b’ˆçö1‹ÉeÀ!¤Q&p‰B0èò%êœÁå5ÆvTÈžkÌé²ÊØáÎUG«“¼Yã”óΪÚKp£áˆá*Ùpƒf¨ÆAÀñÏ·Þ. "Œ˜‡®$öÊ‹šyòJ-…°°¥—øÊ1Aì¸r†‰…G3YÝÉ]¦öU^x›ÒêÄòlýLß}eÄ“5¾Êœi—œôüƒˆ$æ‘ çÀDšá¨Á´Ùß‚£Æ Ãèb¢HG›[ºÅ^Òˆ#s c žÛÐÍhÝÌ~r—^I¤w»ze]3Ö~gQçwýÍà0[†`—vå+Z…a؇!æí`„)º¨&ÿ‹1îHã"oûáÜ@.˜¦»ø*WLْШ­u¿ãÊU¶×TUÄSe÷ÖZyÞW©tUž^] :¯e†-öXA¾É7ߘpæ"Š •–Zkõ:|NPØ‹osṴ́¸â ]gÎM"mµ‡bûô¡\úNî–íݬ§Ö±â·3»g·Y»öôTˆO—£Å<>yø1Þdò¶G!íhÒ‹>Î: ´vàƒOAÕH]BÇ•U\qG£yCÕ¤è…ÕUv1C=¼×ã§»NÛáÇw]qlÍ¥‘%S¼­iHCàèÐîÐ¥©7e‚(¢¨æùÀèhÏ{Î=ìE4Yÿ¶ÐgšËœ®}ÝyßÛbt³óÔ=Õi&Eo‹Ý½¢˜/ÖÎgyƒa e¸§öÌ0,¯1GÿºbÛ(Ä I¸kfÁŠJÌ¢#\…K°799£‰ªy"ûJ'·Te¦u-Œ!oW·ûU¦‹.éSGBÔži9Ã"£¹‚FŠ«Q 6PÄ} ƒuìö$Õ9="…fl“—Ì©"6¹ÒN2²LìXdÈC¦ç…‹lä"“ÃvîW”ÍÇ3 ¨â¤PfáŽHñˆ`|Úÿ2Ÿe° –¦c¥-ã7E@ölN@ñf µ˜È­ørêdMBø³1—è ;h\Þ#s gÞ™Õ¼ +qS!„àÉL GSB®¸ðg8‹Y+Ë9\¾®ã¢/{ÉΗÄ#/Ί”»†<þ“+ø\Œ9.XMyÏï0šÒ!Ë‚²r+Otåi•N›ef2SDO¨Èœ–¨¢¼Ä(kŠi \ÜfZIX‚5¬±„jÙð:«A¦*fÁÌ|Â^SD7Õ÷U8M4¨EY¬èwNœ®î§@%jQ£Ô»ð&‡AcnÀÂWh@¯pÅ"·Ú¯Ŭj™Ëü·x%4}e­™N:KÿD¦S~Åi[ÝʸšC®²‰T]Mö†páhKS:ÑÄØÅ.ˆ!js„ÓÏt«]ýjXÇZÖ³¦u­m}ëXçÊÆÇÍ1c€[T`òPsAf®zs—älò™¶0Û© Lp¦ˆÀ7M_,ªå@›“‹fͯ1º¹3wEŒ?v*bö´KE„V_7_ chÁc¥‚aܦôät; Í ÓÛí1ƒêLÿ»ˆ‡¹­3ÉßÂpúUe-zï·g{nOÍ«Ž·ÚÓ6J áFqÃÞÅlMxÀsâm·¢\±‡Ùl»ÊAo“µ€ §NSûî- µ4ªã99S‡åik¼á5ùÉ‹ÎHvþyF‚Ûw±ìâm¾+–0>(Æ…~Ëò¼R3à¥íje·PË]å»jɾ P—›¬’i×åÆõ¨ƒÐ:?ëx´Þq&“0èt÷mŽô¿—=¨îìàçÜZ‘«ÎÀà\ìϵ’sjcEÚ«ã:пÎ`¿ÿ}EGù™$Ÿ¡Ã\æ—8`×'3Ûô‰\žñÈûmq·{ï|¯mØ9¯yo_ìQI ÿÇЗ~gvøÉÿ•ì ºúwøn$wý¾,.+>ÖÊ·½ÉOôÕ$ÐËøÃm®S—/Š–çùu‹ÿÍ)ÿ|í~¦ýËÕ`É[ûêý{É{€u?aÁú~bwV]«,f#‘ÃÚ·p"§$±zÙ­ÉÊ¥øk@ŸÚ%û;ü[3ýËÙè¿jû?nJ@J;„ œL¾¥Ã¸u+¯š;¯Ïкöƒ¨ú˼û›Áæ’íÓ? l¸)?Ç3¬î’"?² ªÛº›[?˜yA–“¾åÉCBúÃ<¹>ì£@€ñ gé½t2°ß;¬£"*;¿·ñ/äÛ¿ª²†"°Ž;{[Âÿä³¾‹BÍÛ<ë³Ïcf€‡¼©}9ÂÚ©X±­žûÃz‘½‰¢¾´;[‚¶5„?C”A*|ÄEj¾|ó¹˜y¿V !>dBÓ“1Æ“ÄЛÀÛ£ÁHtCÁ»?ä-c-3üãC«<›=#9G EHì"OÌ:kLÅ\E.jÅ,:@XdÃÚÅ9E[$ÅIœ9¹8ÃD_üEèãDš»<ü©¾€“Bc´‘[T:ð»6³»ÄLÔD|ë;k,a$ÆF„à ¬EêFâ¯ÚjAåÃÅX|¹nš=ÏPBÖ{CcCÆlL:eü3~Ì9J¬»Ðs2}Ü¢kÜÆ1ÓÆY|ÇÂ6ìÇÿIì~¤ <%ŒÀdG€|HŒ2ÿk@¼HDÈãȽóH(üGwIu‚G)£ÉdF•l(…´Ižd'ˆŒH™ô%›\9FTC@¬·ÃGÿ‚8‹Ä¢—¸v¤ÅQ$IE:GZ‚¼£lÄ3lJ|J‹Êcʉĺ'@LÇÕÉ)—lH  J©LFª$¯²¤%Ói:ilº„µÆ@5¾ìK¿üKÀ LHƒ9\+LíS>…Ó?•SCµÑG]Ô-TD¥ÔJÍS:UÔDuÔHõSÄÓKíTOÅNM ÔLTKeTóPÙYLW}UXUYUZ­UZëNHÝTTÅTSíU_TQ-U^MUUýTaV` Õ`ÝUemÖb½ÏQÏc]VISNÕÕjµVj=UfÅVnÍÖUÍUoWbMVrEVtuVs=WmýVw-×FíÖg¾huÏkeWum×wMW|ÍW®¼×yýWy Øù×p5XhÖ~%Ø‚Ý×muØx…X=ØÿzX„¥W…5V€]WŽÕ×_}XxØ…íXåW†N‰=YR YÝX‘eÙ–½X‹•YñlÏšÅUPÙ’5Ù„X’¥ØŒUY{õÙ}YžýÙ˜MY¡½Yœý؉Z—…Ú¨MZ§}Ú•%Z£Ù£-ZÍZ­åZ¡Z™mX¥[¤¥Ú¥Í¶ŠEÙ²õÚ®u[´ÝZ¸=[ŒÚž[²MÛ¦µÛºÅÚ¸ýZÀ•Z¼e[˜íÛÁ•V¾5Ü·ýÛÀÕ[5]Û«õÛÈmÛ¹5[˽\Á¥ÜÌ]Ü»=\±Õ\Æå\Å­ÚÐ [¦eUÐ]¹Ý\ÇEÝÂÙÔ…Ýו]©HÛ½]ÜÍ]ÝÝ]Þí]ÿßý]à ^á^â-^ã=^äM^å]^äå™D°›çÕ™è•é¥^ç½^ìu‘ê“íåÞì­“î•‘ðÕÞï_ñ-_ï•^ô=_õm_÷e‘ñ…_è]_ò¥_ù}_ó…sà™ýå_ÿÕ™þàÿ•&`»9`N`^`n`~`Ž` ž` fBG`T€@…p„@ãÜ T…w¹`þQáÜ܇éUá0öàÒPA€¥¸àøuŠF€è]afÂé bØ îà~ bØ "æ .Dàà  a!†bnŠ*¨… þ‡6°a»ÿ0€}…Xb»S€ˆÞ8F`2F8 GØ 86‡ þpGPãÏdCÞ‰D€ý bs€0ŽM8ŽÞf‡…;ÎãÏØã>þ6‡dBNd«xäS.ãÿ¸eq6èÒxæ çp8æ€ÙÑhpaF€HÆŠDnãkNæ† Œæå‰®cþ ¦ãˆF“Þ ”F H®é6&fKhæ.c¡£öd@…$fcæñ ãD+ãŠFê‹~^æh¡FK‘.ä$îigNáÏ0ä f—Vë­ž´îè°îdSÞ8&k„öçAþ¡&ãwéd¬€Ô4öë¹ö.Â6l2f¾ bVi½^aæåóˆéfÆ`ˆ^bþ ~å¥Ðh{ Cîâ‰~lr~kÍþhþlv. 6ä}Óîf©ÿÃöcÐþå èçÁ®h›¦jÙd¦`ãþ]âˆÎ`’^ä"ãQ6TˆcSÞl9~f5&ãDàmÚ¶k ìçÊÖj•V‘ködH.ã·.nÂFîönœÞfnönòÖäØìeÊÆdYöî¼fo¬S¦l2¦ì§Žï‡F 7pž€jžhݦm‚î_QÀèó€o F€þ…êÊÞ—ÆÝ f‡h®Ÿíeë`6kÑî_¼Fæpˆ2khŽ^W~qáÛõ`?q=Æ]vÀÝýÍñ¤pÜUН`#?r$Or%_r&or'r(r)Ÿr*¯r+¿r,Ïr-ßr.ïr/ÿr0ó†ê¥ kÿ1?s4OòBî_ÄNs7s ^sx&æî.i?æh¶b&†íÎh”ÞbØ&é &svP–möhßà†sG‡àBá£f˜èˆ~b‰îï^Žh¼žiF.䙾åJ€K§cGhì_ÖnR/c:–èFtX_`PÏt`žè®õ›¾tQ`k‰fÂV€B6aÄ&ãfæô^F‰¾ãˆ¦î¦cªŽuhgr9÷ë}æ6/l(Ît¦õ^.ä¡(dgŸs1&õEFöÛ¦unðh_w5gdq·uA®õ“vcFc[Çksv1®cx—hØîõˆîãˆþ‰§¶jv?ø#Ÿö6_äLÏà^¾uÿˆèB÷ô|§õ[fx‰qGì žu46x„y 6‡Dà Qb‚þp^q ‡â ßh4.hNyžH„A/ù©fñÁy‘ïù.÷vŸzŸxu¡?z¤Oz¥_z¦oz§z¨z©Ÿzª¯z«¿z¬Ïz­ßz®ïz¯ÿz°{±{²/{³?{´O{µ_{¶o{·{¸{¹Ÿ{º¯{»¿{¼o`[Ý{¾ï{¿ÿ{À7L|Â/|Ã?|Ä'üY¨\Ú¥[Ä]]ÂuüÏ}Ûį|Ë/üÅg]Éß2Û”ÜLJüÏŠËýÄÏüÒí\«\Ñ ýÕŸ|U%}ØÇ|ÆÏ[‚í|šWÔoŠÿØß}ÓÏýÍÇ}Õu|ÎÏYŸØýØïýàŸ}Ú~ào|Ìü¤0~ØG~ç×ü߯XÛ]B’~Ò§þåW~è~Õ_ýá÷Sî}ïëÿñ¿þ õ}Ì=ÿËOÿögÖ'ÿæÿ~ð¿¦ËˆYÿ,øÁ„ dè!‡ Fœ(±¢Å‡3.ÜÈQ¡ÇEd`ò$Ê”*Wžè0$Ɇ1AΤYsäMœ9eîä™fF–B‡¢t ±§ÏŸH“ÖJÒéG¨Q‘J}Hô*K£©.­šÑëD°a¹’Ý)V!Ö´E5–5Ûµ­ÒžgÙʽ©ö®V›náÞœ{”ïL¿÷μ«ÿ6oBÁz 3îû¶.à˜ŠN‹ØàdÌ!7v̹sृAKÞLú©iÏŸU‹ÖõkاeÇ]Ý´õâÚºw³îí;t쩸]Û^Ü8ïÛÇK/Oý›ys‘™uÎãô±Á±;W^ÝzräÏEg'Xž©÷ï_»CWoñüKö´Ã·??=}éÉ»×~ûëøÞvýù—Ÿ~¨à¸ß@ð'¡| xQ…àíGá…2èa‡ñ}H„艇Ÿ}:øàŠx"Š0ÊX_Œ3ªØbƒÃqø"‰<ކ#ˆ>nU¢‰4ÚxcŠ,Ùã’"–¸c“N ™[’.N™‘EÞw¤†U.çâ^戔bŽÉ¥•Q æš–Y£‘h~y%jRIf†JšäžL¹eœäå™fŸR¦œsJ:ú(¤‘J:)¥•Zz)¦™jº)§zú)¨¡Šzé3 z*ª©ªº*«­ºúª£¥+­µÚz+®¹®*kAºúú+°Á ›*¯Œ{,²É*ëk±-û,´ÑJÛi³ÿL{-¶ÙB[­¶Ýzûí­Ü‚;.¹å‚*®¹éª»î£è²û.¼Þº/½õ>;¯½ùêû+¾ûúûï«ý<0Á¢ \0 cz°Â ;«©K„ü"FÄq^¼}÷Å›'±£G{ÚîE¼§ÍžDŠSª\é%Ë— \ÇÎÂjضÁÓ–ÓåÄŠÙ8ò›&?y!Gj“wÒ¨S•>Ÿª‡.Ü·uë¸MÃFLµiÒäÌ©†°,7„͈k×Nm³²pãVÛóÇšµ?{¬™Ë·¯_¾gÿ öH°Ü4¬¡6 꺇O59`ì\ƒË ^³cE2RÄà²ÉöˆÞ“ŒòçÓ£ŽKX&;V" £ÅÎ;_¾Ø)]˜Zµ›9«m‡ÚZ²ddM¯^ŽP5ó¨T Ö$uj–.^¾À¹pdJ&¸´ˆÿk×Lˆñi‰Á{®œýiçÌ £#ˆo]„û‰òxѲàÁ‚ $R +øì@LYæ‡Ï1k¹×œƒï9è‘@ó!t uëÇ d1‡$p_)®‡Ïf 2¨ {ðA˜„ D?p-£Æ‚ô±F H8P]‘ˆGžyè©e"‹. Öâj­Ñ§Î)6á1H<àJ #Äæ 4,‘pæ1œ‹K&ù {MvóÚ}Ý ÔÎ#ÄDðÍ(‘fšqæYYïTSÍ;Ë•i¦¡ŸM8P”§DÐÈ:™Â P§$UrÂàol¹UÖ\£Q³¢dÂ(‘@݈ca ´‰›¬ÿR©œr1B4ˆO[Ë d ]Ê„¶ÇdšÙ©µ–j}$ Üps_´Ò Ä#Ôî€Ã½DÛË´Dû†»D»‹oP«îºì¶ëî»ðÆ«.BèÔªê$Âj¥àSJ¤tÓh"n³épmó>¡û+oŸ!ë Ä}5yÖ: DÀÊ}øH“E…°Ú#Oc 1ÝH‚œõzÓ}¼{$±±Çš‘@ë<ºŽ 4AhsÌaF ÷ݧH,ÍHÛ +á2>õà5Zõ F±_äµsä^hvd!)ët〳B—]h,€+ÝŒA'=+²C,˜(…ÂeÕÿSÍ€P“µÖÂs01‚Í^Kè ‚ >£K^9².mÜH7”L\Š3õÄ.#Þ2›~½5k-‘Òˆ>øœ¢€¬„¦>œ\ž¹£Þ¹; ‹^–ájóµ’‰Ší=§Ò( °Â) (@Î\uYÓöÛ¬4Â{"„Ü÷Þ Où›òÅ>g~Y¦¯ˆÏêp©”Oª¨’@2\Gnu@A"NhBª¤¯&Ôà€;)Pa:!ì PØô@ã½È= Z<¦:uD¯…«ðч/x!;}@j@ƒ*Á§8&há Eü¯5BVÐÂü tœ_ÿœC<ñX. ûÍÂç¼—À…Úa3àð<ìM8Ær`€C$D_§ Å šP‚¬`qøÁ ðˆå !æ;߇Ǡc,‘‰ñqbYòðf D_øÁ °|Ä¢/Hïú¥–D0aæ ‚¡Pѧ‚ćé\¶IÁ¯,0 ýˆ( ÒHˆÅÊ”€„,|~@K´vøÂhþ Ä3-HWm9†'=è‘u"¤ á Œ)~áEA˜@ –!F  16¡ -X‚ƒÌ"_5®Ñ0ÔÁ6Sé––Ñ=ç“aÉÆ’6ÿŽææ }˜’ZàÂÄ¢7ØÁZø¨ý`‡fì÷ç|¼#—º¬™/ÍwŒÔ 3l)ч:X!½T¬”yÈ)Û±'¦-´OHÄ#„°²ô€=ÈiNƒpœÝàÃv¨C^D³ç$QW‚éšñ‰¬ã eÑ;ø2%aV¦Ûò…%jƒ"ü€?Ða|p "aUÛ5‚J†Q>ðX†?SDµ$ΗMLI>Ô©fãˆðKi‹Ü@3+hA|àƒàüÀÊXF®ðñ«=˜—$Ü¡Œz>÷ñÅtÇ`†éÔÓ¼<ªd¤Šp à{‘A mB%ÂdF!ÿ0V¬cUFydQeì¡ Í0«ŽzÔ/èc—óVp„,øÖ—vô\Ù Â)„‡ê4§e=+\f¶KB½}Ô­§_Ö‡ö•–¹b+Ë>š1L´©-zhC„9SÔ‚Å`7 HBÍ xÂó/ †°RÔs 8Ô¶ûä(ä° O Jð.ÓK „p BÇB#5Ú¥CœQdÐ\ðƒrÐý†,í P EZäà=IÓ&õ{{ 0Sj/DZCS5 …0 ÃÓk†µ-X;p¤à ;N¾Ö;ˆ[ІmèÉ,Ýpô‰)øÀ%/3¿{Ò†¡T§ C 4hA ± o—ÿñb µ%f Çà&^à†›øÉðnˆqQosfýâ ó>,çF‚¨G‘Š; íE ½à&Ä d¨#hJ÷˜A‰®P Œe'tBĸB…¢X½Ã¨³ úò¡AÜ0¬8…TU±Xˆ´¨I¶ˆ‹C@Z RZtF›-ŒÃ¸ÙáÇP¼@T~á Šp¿QÝØ•• oÀoÿ–Bgˆˆ‹iшm¡kµØ¶`XQ€Ž8 —˜‰œm¨Ü`;Rrv´èp5€ ¾ 5à ‚*Ê8‚+£p?÷3 ͰiËp2š!5íÀkEð Žÿp@O0â$&<ÈÀn¸`PT±G(‡#LEøIS¼õ æ…îPrs”OÙ(t‰§0Zj± ½pz¹XwæÁ:.vQÐQÍ qR Å\ÊàA”ÆC<H ´°‡®—>»òfW9ˆ}‘òÖ (x9E Ð%µp ‰ #F/«Å ¯€GPÊ`‘ñ„€”ÀdD7x铘¤Y1®øY¡I ¶+æñz±p ˜Ð´°0n©øð|'nE ÕÀ &2O‹Ø+ £dWÙ­ KOÉ„©š Ò¬IdíÀ¯·'$ëÁRRsWm˜r”,/á•¢CŠJ ÚiqeGÍ€`?ð‘ PkL`d! ] bd`5P¢ £…x@œÂ#PÂáY?Ú Çùñ€İ#0Ž‚‡põ•›ñ™1Zy`ppÈ`BT0º&ð—êa˜iQ{)L¼Fej!Ý%_ÿ R*‘ ¡ev®"Ç'j&¢“¤x LuÐH°ô]`À *"œèÀË@ ã¨>D¨ ²ß䌀‡·g£+©ÏI ’Úy%–*:„¡ú«% ŽøJ·‹WZ©Ö²°·; ±ða°ø@ 5Ћð5ä¨)Á«¸èZLOð,S%`Žð¸¿Ò%§u9µ‰ÃR8€XË·ü 0j %……@žÅu,Ḡ¹x&„Óg¹˜û¸x@ ¸n¦UÚ ¨P+Cº{»¼}EG—± 2êo§f®fjžŠSlæ7¸cj¹ÿH¨ð_Pv@_€ Þ8„%ðqÒ z»¼¦ ;p åš8J»xE :N+€w6u}4ãÐqt`Ä@¹È ±@ÀJžPºô+°´ óÁ‚IMÆ ›v3eqiݵS’Ô,p7HÀ°Xú¦'¢†B0']„¼îË XY§! £ ­Øž¥‰+u—S}€?à4€ ­€Mæ!:4 lBà I'ÐP -°Åಀ> ° Pª"õ0ju m4ÂPQ(pñ¦¨“Si!-ô’Bq;+c©:TùsŸÀ /Dÿ°ü µ" 4àÁq r1p·ËõR/ÍìÂ2àB 9¥P9Å`? ‚p7„E Å æA OÐ @+ @%P ›À *°À/¿ n@-Eò·ª07*]ȸVDpÊ6…‡@0 c½‚+Äà "Z¬Â 7À› ”@ ð°ÏûmüÆ¡‘4¦© ˜˜‘‹¹ø$@6eF<äÝP¬E@}  Ö V>Vt"p¼ððËü À‡‚!Ä£JgÌ™Ï&ì&d)µÌ“,PS=àªÅêc{0ßµÿP µ`Då 1s`°Ñ °„JÂÉ  ¿ë5x©«)IÇì£ÄPË‹°+0H0 À¦nÑÇf ÔðPR³9e  ?pÖ b0@›Ó(²¶³Ûzâ8ÒF\ÒÊi"qò þ˽‡ÔkÁz™L R° 9åG°Üâ¹0Æà‹øPj)À®Š” ×­É^ :ÇÐ,×xmz=P4ðǹ‚a™,h9UðpØËžË@?àGÄðX0IoQÙ@† §sšt½Ô›]‹èñB‹P 8À4PwbšÕ’$zðP¹Ö=@Zqðdíp0 O Xn«ãÕÀÿp$Ge<6 JÏìëoqD Q°Z`<V-èXÁq°tSsiÇqà@´páÄ+u&ƒTTã½Âù@Þñåû WÑÛ 9I2ôÍŪS´´t ã¿:E ÖдT± ‰•1#4<Å›sMUoF ÞTaÞfz‹`Ú)¹‚ t`AÀ xAanljhä¹ ÁWj(W:¤A:˜á´ÛÂÉ P×ûÜ é ^×èÕ«“^Ä€j¡BÐ ž'ΧÚOlœÔEÀRÞIbÛ'Ü Üœq1]ª"_ÎÛΉ‹cÿŽéa:KžækÞæ2Œ€R“S½¢ÚtÞ^v^¬+3Y|^‹•ÞI2N$ų5Ž•'ãèúr­ :D >äB^3Ú›‹§} §½ JþL~V’…س^ @QPåãõ'sDbÙQoêå4bê7áç³ ªáÀOiëa' Tm5e´Ž€¸…Çêù]¢é7Xlbn°%Þ®´‡¢0c©†4NÒqqÞÎÁÈø+g_Ž€Ä;(&Ì>ñ·žI›T‚y×ï£\îYÅ´ÿ.ô ¬P ?¡6j0ëÆCèò®ðóaj"Ê­^Š-ÓïæQó~!4t½#jÍ.ÿKíМ€i,¿ñæF$y¼œ"Ô rà ¤òý’ñI ÞðT†¾õfÂ¥%FæSS:%Wù/ Ó/ o‚ÃK¼6d¢š¿8㸵æêI–¼U¬¹²÷Î œsŠã°‡S½ýÎ ø£0 úL3°De±`q%DÀåf¥A Ê¿3 ¬`öøÀC‹¡ ¢°¦ßÛ8Ãúï³yì2»•œëÙ§ vjGƒ«¡/ÀÏ¥ ùüŠo,ÄÏ Æÿ+ô4Ú¬§žboåO°+È¿|±Ýê £ørŸ$ÞÜ «¯÷’õúÍûÏ¿†Ù zÆX©•ßA„üð-#Fl>ˆ%âã6ÑâEŒÝ éÑQH3ˆÄ„ŒB b»"#‹ƒ—‘a;Šífįٱeîðuc§/áO‘$Mf¬HÓèExA… ‘áÌ“)—²tI &7™1&mØæÏŸÏ„iÖŒˆ­‹eë”Ø±v´¶DÚ°Y»cP/6óÚËnU¸|Y‚M($¾f%‰¶e<—bÞ¦e‹ØæÓz/Z†ù':Ðèð9ûA‹7Z?vœfÝÚõkر[ïXÿ}:Ö`±íˆÅš¶ìÓ½hÑêœÛoÛ¸!†;¶ìÙ´×26Ê®\ªu‰ÝÍ}qõ·íÃ#œP©âïÔr%–9òE™]³¾U¾U|å.lè]ºz¶l:†Ö[æ˜fè:ª¾­nÊ "ý¢ŽAÓ«& ÙJ(¿Ÿ&¼­ ?Œ(D£6ËC1LÑBêLì1SŒñÃ1rqCWdQGˆf¼‰˜"à‚0Byœ¨Æ c\¦ˆŽ<)B…r4òÈ)%"‘/!~ ’È#RÊ*{ SL—¸™FjÊ"ÃD@—1Í Öü²­7á“"š°ÔÒÌ3ÙÓÍ=•d²É 8Ô¯Í*ódt¯¼Š(¦)AñÜ“Ï1¨R/ÕÔÒ 9]ÐÓB/•>R35õÎNKU5TVGu•PX´ÑYÕ;UÅ\§üTÑò5òWYÜuÇa{eìXŒˆ-×Zƒ½ÕWeÛbV­Ti56VT«Õñ×ÏBëÑ8rË5÷\tÓum9ÐNœ6ÙW·µÔx¡•WZzµµWW(ûÝÏ_€O x`…./ !ù,UrxF‡&&&777HHHWWWiii{gswwwMx¨V~«kuš}nŽxz‰yw—f|¤s~ Y‚®g€žz‚’k†ªfвn¶x‡©sްz—¹Žetœ~»VE¾[_«|\°kL½cYºM½z\ªk|§yf¾gk·hu´|k»r|ëx9ð{.ÀNNÅXWÜ[[É^dÖ]aËcZÎ~AÚhNÛgVÖxLÖyQÈciÅktÈxhÊsyÙdfÕmpÝvhÙxyæ^MãWVèfIädYësGèwVäfeåopæsiäyx†n‹‡s‰„{˜–m…—uŒš}”¤l€©w‰¥}‘¶y†Æ{„Ô}‚倘€w¹€Z¯Œ®‘w²Žm´‘qÖ€:õ…æ…+è‡4ó‡&ñˆ6ò’;ˆFɇRÍ‘XÒˆFÛ‘NÖ˜]Í’eÜyÔ†gÖƒqÞmΤ}Þ£jاwìŠHë‡Wç˜KèšVð‹Cñ•Gð›Vèhå|ë—gê•wð [å dí©uî±|ð¦gð«p‡‡‡ˆ†™–……œ„šœ’Œ•••ˆ‰¦‰—©‚šº–Š¢—˜ªš›²‡ ¼Ÿ¦®¦¹§†˜£œ˜º€Œºˆ”»•…·“Ÿ©Ž ©›­¬ž°¶š¨½£Ž¸©œ§§§¨¨·§²¾¹§¦°¬½´°®¶¶¶ˆ¢À—­Å±Ç£­Â©¹Ìµ¼Ê±¿Ð¬ÁÖ¼ÁÉ»ÇÔȃˆÈ‹“Êœ‚˗؇‡ÛŽ‘ØšÔ–—Ä™£ÚŸ¢É¥ŽÂ­œÑ©„Ó©‘Õ²Ó³–Ω©É¬µË¹ªÉ³µÖ£¤×»¦Ú¹»äƒƒåç™ˆå™™ê¤†æ ˜í·‡ë¹–å¥¦èº¤å¶¶ñ¼»Ã»ÆØ¿ÃÙÀ¨ÙƵëÁúÅšêÆ¦êÌ´éлõÉ¥ñÀ¾÷Ñ«øÖµÇÇÇÄÌ×ÊÑÚÜÄÄÕÎÓÖÑÌÕÕÕÒÕÛÖÚÞØ×ØÞØÓÜÜÜÜÞáÝàäåÅÅåÏÐç×ÉåÚÙñÆÅ÷ÛÂñÙÙåßàæáÛñàÏøãÕåååïïðïðñôêéðïðúñêþþþÿù 8Áƒ*,¸¡½‡ã"Ž3¨ÝC‚Ñi܈."ÅŽ5Ú#Hqàņ Oò{hoœJ”0IÆøòåÁ’3sòé&Ïž ](th΢FoêÌØq¤Â–,jôQ¢Ç•GB•I“¥Í…^/²t™4èÒ°f˦U›©Z·oÙö„[–îÁ¨`íd¹QbÕ©!Ébu*Õ¤Ó¯OÞ)·mO´D;–Ì•raË 1¯Ål÷±^š-š£¤U‹M¹Ö\œ#áÎ@aÏÕ|™3mÙ³iWÔ;fFÐwZ•xøUÕ‹ßMþú¶óç¶5÷>ª{7tÉ¿3×ëÑêh‰×¦MÿîšÒ®è}+®lyzL÷ï¯S†ï³údéžY;ty1´é‰ÃuäÎ6ÜÐcÏ<ÜÜ%P>ùÜsÏCùää ƒ j¦_cô¡”adøÉgc6Q'µd€MeO=Ú¬ãN;ÙÀC;ÚÔ¨Í3Ú¼óNñÌtOJ´](׆Fgä‘‚Ø¡zZ)WÛJf_ö¸# 0ŒR…&^ÑBÌ1ë8C`:C 1î„¥æš,uÃæ›p†åfœt~E¤uHJvç}I*™g^†­¥×H¦ýgÑCû¸óKLÐÀ‰”Š==ÃÒ˜ëDj³p> ­¬¾:_µ­¢z“+ɺ¡}eEÕAÎL HlÜ „§Œ’$_†9f™g ­´Óª‰/´©ªÊ–¶®þYÀÊkP*…à¡i£Ä®Ü`Â|ÍMqęȱ1§ùŽr´#ãÅ^{þÆ•²µ×ž%$IƒÒtbŠ*ʼn,±€€…Lh|ŒÆ{ÌŽWíXcM;¡î[²Ó¥öË2†+×Õê“(Kç_¸âfe²)PP¤¶Ä¥.¿ñ.N©˜ÂdÉ&Ït e’ ZõÒ”åœÕÃfq”ÐôÛÕ(8ÿÄ"BÉ"éAåSÈÒŠø‚$$+1ÎD‚‘Ž„dÝ¡6µ¹SТ¨¥bLf-³d¢ b>‡bÊ}–TDT:6+b•p£`C"?( B 7°Z™à€Sœ"´p…"ð‡‚á-Pë ‚0Îa£êL[;áô?µ°Mõ=œ* ·ÃFù “¢’˜Æ´% Öj‚X´"=èZ£ÐÅ àUÿµ?è+Lý`v4ØÁ8L²F‘Ì ó6Ãfl|Ýû¡“b"² ¨ùÑŒ<äá¾ëÕ|ƒ($Dpa ~àƒxÚÓC¯è;Ôa›ÛCšHUØy¾)…²©ì‰åùZY'§äÓ =³“DwË$?RE-Ü wÜ x¾¸Ä vp„ ø wýŽa"0cb¤†©÷pÀÏÍòYî`ÆSã´Nµyr· ¥u ¯,è]×ÚÖ9É·PR"€®iSÇ E,n¢µàG: ,ƒ•+`ÜÄ a{ôaLcuE=ª&c£ÆDÓ'1Œµw;öÖÔ¹š¡å"ï_£´/öÿÐÇšÖ™æ'XbLGP-mi/CLmÇ2öP‡?Pㆠ§-;û̦xÚcYÿsÇ× _¦7Ý>#'9¡|;¶áH\˜ÁÍŸö4µ­í>˜i5f›Ì&²¤£IOwoÛítB×=¸¸N Õ© • ©ÉŽ4FÚ {°Âµ E1°Ø'Ü€„€²> „Oo—Æ0†2llXãöÒ/÷¥5}ãF}jTã>2)ÃÛݹÝéþŸ,…/ˆ5ÌP†Þk!&Hë7f ŸžBÇ€¹†P׸p¯|õlßžÎp§3,¼ÌÀ!xú1Ý~´õꦻÿøÙ=~Èúv+|½a´ã8%g†0È x– OØÇ8iÛ\¢À³-€`_¨XURQFlj”§à ð9p Þ÷}!ãz&{õbä'\ˆ#3ꇅ#1IÒð› 5 1“ÐKƒ&‚cgÒ Ç†,A ­|D`z nÞG*å6XØG?,Á(R^à7w¸aå÷t3MaÖtËÑ-è` aõ` …gˆÐ  Q°‚QЂk G Ûu?eð îðuC`j3L $`‘X FÀy˜/{°Wex§„í†~ˆëW8LáÖ@ÂÿPK €3 ŽC+w†QðHxEy` wxà?mƒnu2Z è ¤€fÀ9q3KIv„€¶„³Ç„IˆH-õ]Q8ÄÁˆb0^ˆæ ð/ðM€ j ®ÀuQp›†`n†`jÀ ç€9¤ø&á&ZÄ(ˆ dР߀ d”~~µ8eƒ8¹ö‡‚¸~³qï '4Ìpxà&€8À^q „`/pF% :vÒ64PdÀv¯È&­F áÐ.‚ Y°8b„I²¦&î˜w¶8'‹³Hˆ|wGÚ@ À€üå ä€3p™ðŒ0)†—ÿÿ×7 S0&•£130<Ðj@<°d}å ëàTöP ˆ`op?‹0`ŽÓò‘!·Ž·È•ºH’C¡ec-b¤À’Š“žp]’Öõ”P)ÇàB/D&1 AiLG°—¬·&ÆgbŒòp€c0œ×‘G´t`)…øŽzr>”Y™q´“"*â dz ˆ9ÀM€ž0êª@ê§B*M8bÙ¸ª«¼ê«ÀJzE qGwµZÈ¢/ ¬ÌÊdõÐ f¼7·õ Šjƒ½Ê&©¦ oЊ°è˜ ™ä:«Iuw·„j¨ˆúf¨º1Ô·¶ÀoS€¯: –Š©aúa¦ßæmUâ |æ i‚9ÿp™à ’p®'p“£yö°üt±K´E uDªÔ¬N£à <È *D4_´fx ð<&cS¢]¦\«öpLÃIö¢QPE7°Qo’4¼€vÁÈD³¢¢•ìx®}ë·±º§tÔU§‰p w&ÌÐ |I ã“NàÀ|903 8Ó°ÎÚsËà~e&í´NLI ´à¦§0˜t"q¶•7Ḉh´³‹´~›º–f²6gÒ ÷y žF €1µp¸ŠÆ‚Jàð W° vv£°¶–Sa¿{}q"t„ŸNÿFU±;®´[®²*»µKoÌÁ·»w¤G y9cB˜ –’ O@ ¤¹Š`À8#@sc ¼`,jDZéô?s[õIzö¬k:ã+¸ä[é›´}ê<Áä¾l¿×·C¿BÓS餹ÏõyÀ7: ò?âÖ?sh€ØÁrË@|ÁâJÁÜ„·»ì{G»Û¨¾Û6M9&ÎÀ j—0 m£¼Ìë¼@ÔàWß·»£¨dwFÛ¾ìµÃ±<ÜÃû·ùA¸ (+‘n: *$Ln2‘÷jÁ§6 P%Lóp ^èI@pPYð ÈD çÆÅ1ÿ¤Qii_”ÈŸâÉÀ)Ææ[¾{Æ?LÆÔ´´z÷÷ ¦hE°À n3'Ûè Î0yA’f¼{ `e@$°^Ð{e€7p•Ò)‹›ÀÕG9ãjFX%yKɕܪè{É<ÆlÆe<…4Qªõs?°¦àƸȢ6“qy`ppÈ VV0º)˜à%hRÄÿC³¥g†•³»ãà qz̬Z¸Ò ÍýìÏ êɲ[Dø¥j£ˆCó10'L³ŒV^ M qà†ݰ,œNCÃ{ÕnÓY6Œ°¦X‰§üÜÌ™üÌÎ Ä»lLÿ-—ùü,Øic¹Âä69aàPÑ—•ÑÍ)9”ªÅ0f7{˜ÐÀBk±.Æ^y´YÖIfI?öƒ?Ú¬”Hœ|ôêQÊ`qp}`Îè¬ÎQp î ƒ¼ @è0e  ±1 .Ðe’(¹ÏküÏ-ÍÉ½Õ ÊÉK43ZE€Ð¸Ic¢ü¦ŒRkÊUòuà¬_кÌ˾l9‹+4ºPhÀ ²`ü0ü 6`,3 ‡ ®Ì¼ÉŠ­ÕçËÛ½íÕèº)ǦªK¬GQjhÇN è4‡²EÎu0¹À A•o‰,µPP2},Ñ1Q/t(à¬Â´9}·³ÚÍ:Í¥™²3Àc2À>á®`9@qŒ©R+ ÜJ>â\-âLÞØ×&þ0GК,îâ0Î vx@ w€p€gòËÞ€ (ðBžvPåi<€ ä> à ÏºäOþÒ<Í¿ â+ïT%>© ê|vl°ÿ«àî2etÈ d`¢o‚0‰¾0y_Â¥Ì0 9 ç.îÝ,ë‡ÕŒMß{~ꨎ¾^lS~]Ÿ†c-ÀÔž†Ç;@lp@vpÄ »)±@@L°0 à †3è° Ðí²-ê΢sã¥Ìâ»G¶ÚäÁíçžçz®ØÙ©ß8øu Ö]?àI¢„ È‚xÐÍÇÂ¥D 3 •æ•î ÀûEjˆW+êÐ>íJ$ cÔpüò ´í|Îíö}ßëä _A‘üa擞Öx0`™Ð :ð‰°Óôl)Ìî K€3Ð` /pòR Äo¸†:ðïÿ?áÁó0sƒ ±••/ å ¿äàÞíÞžêE4ñÑÍÈäifBj%µDðŒ=P9[9/7ë À lå/”9bâ1jFÞ€œÐ †À ¢ÀØ «úNê=ß>?î ¯!?ÒÙ÷~ï,ÉùBÊC ž–fžvyAÀ‚ÀHúF Á9&´O0C ð„@ ÇÓ ÁÀ\Ý œÛü œ0ák/ ¢À;¿ n {-´ýìsª@Ò˜´ÊÉ'µT:YÍ0;Æ™|Tã‰Ñ$‘œRÊH›ÊVÛJi›tÛG3mÉO\E•¦PâA$ÄšÈеÚúÁ­8æ"ÈP{ŽéêeNBˆx>"&Zx¡‚ƒ_4–-±²!ÿYµìmòi ¤¢Š4r&ý`ó˜d+C––ìÿ>n”ÖuÜìÅ鶉q:R¢™?ö¸U4‰è›˜XæuÇC"HшØà€m$—J43|_:&%ghÝ‹áu´‰G?®…úèëЯ%2ì(±ÙlÔ6½lqí)ña÷dÜ”<~ Â~‡¸óš=”q“£ý&è5G4ÎPX«g;ƒÌá–®“µ›5ãÊïʬ—<$g²>ÒÏi‘ô:$°AÆØZª\juÖ)E{6µ7¥Ûge¨DÁ{ÿ=øxåNwÒ¹Wˆ”Ǧ4/^Ñ«fÔ4“½'D%ªÄäF„ë8¤2Ã+‘ÿø>2"…Q{]hØ÷YJuñ“ß Ç;¶¹MK 1èf7¼íÁˆsšŽpŒã1#pAœî Ç&Ã#°Á¹–Lma+ÁJ‰RrŒË¹Š%´bÈ;jB?q &ˆ2!êÞ'š«˜‘[.|aüR¨BØ%èvû[<" ND*¨CIn/b Iw:›ËÏ‚F -B6¸AB¨ç’Íõ`Y"ùÆ)HqŠt\3lÑÝÃVv*œ€ÑkIªÖ°£†í„klc+ÍöFo±‘*.!3ÌU=ì´è‡‰Œ2®Á£ý j_˜!ÂDœ§ÞÀKÉÁ)¾!¤sy#! ID0ÞÿÈÄyÒQüáèÈg¾#™R?ÛÙéVÉÊ8º2d°:¢)`ª¤‚QLŽu$X¢c¬ƒQƒäñôC…H$éhDNá<=â‚~ë ³™|³Œh¬µZW¾s¢3@ì<›á—ÎYÞFen’ }HÚ uÃzÍS u'ú°¢`EH¤I ‘$$‰ËZéAøSò­¢hgGT¤ùÑ…-tglê'R©”E„:ƒ¨¨R†½Ä~#3ºSÍ+0¨=¾‘œ†$!@£b¾² “{ C”§\”’”TÔrþG$ŠéF—ÊѼöõP•ªTñ©O~Fq˜r ’fX‘ÿQxãÈ+Ò‘ƒ"4¥§0 R$‚5E”83ZÑ¡²£9m“>úÊצ-5ð,¬Zä•c&p"Ùê\vw›RT6Då¬4§Ùˆr «!=PÄ4õT$ýÈÕOjlÍOéš£Š®µ-ù“`•j›ÖªÏ»¯yªfTV[ͰƒwbW¨–œi¸Më†49krXòê€˘Áˆ ¤"ßÀl9èúÅ銨¥³h•‚ÒàiÍOþ®,aƶÂ%#,zéÃXgÄ¢+ƒ#‚2g„¡ʞóÉcGÁŠÉ ÷Pê–H‚K=™ Q=)R7¥KÝìbé&;æñt# d×&ÿ5Ÿ!rû4ìÔÙvØÃšqˆØBLCm•LñilX/ðå œ¢°˜…"eŸÉ¸¹&×5a7A#W&+–pú´‹ä ˶kãÄóëÆËšòbå¼SnI•»qe¹ýLËÙ³*}˜…&0! ,kaÉ`ñ'§t œ5ãæÇ™@¢0F¡{Z ÇÒÂ<æ³V åØ šÐ·±ˆwçU;ÅÌPq¡nö^$GªéÈSBñÌVO}§ä®Ý̱ÓɬöÃËÔ?S´ÉV2 £BF)Ϻ%êõ­!ÝÛØ¦Ä¡¼ž{(ý#ÿN̬ðUùsŒF®XYpŸLÊ5‹óÎÿ|½0±€À^TcäLÝ«ÉûΟjÐâ¾mWrÛÙ’Â×âm­"v°—q§UL›M]ëL”“£rÉ¥%‡À»&gR£æ% ÿ÷…¯íg¿:¼ÈÄ2øŽÄ9Ní“㬧¯›ÅuÛD·9¬æ°Ûš!‡°ÇãM7?èo¦LtÍè+Ø<ÝQ²Z44Çö:Ÿüp¥|dœ=ÔÏ_’Òž¾„Ñlu4Cönº‡$îÛ&µÕ?øÅñu]…Öê ©±®±˜‹3d§¹)ÿxÈG^ò“§|å-yˆ‰O›ç|ç=ÿyÐw¾=Ø|,z У±ØüèCϧ^Ђ½x}7\Ï'Ó£¾óËÆÿü„¥ûûˆõò5å„3ŸùáGþø¾/~ó“ÿ|èÿŒ:wµÆÀ޾p»ý°B_7ÅL´â€N<‚ùt:„³.Æo:[G§Íú‘Ü_Whß¹QBûÙ»ímêO+âÐt;ÑíþV¹«˜î{ ñ³ •¹1Ú´°‘.¿;¹0‡Õ@Ÿ«p9¡"U»³sš9Ö 9¤Z¹û«¾œk p3¯þƒ$–¡…‰±-ª@ ¨ˆa†t Ǹ‡S#¸ùÛ«*3Ú«µÓ±%«®Ÿj§=Ã3„‹²ãAÎÐÁü3Æ3BY+Á„BŸ›µô¥î25ˆ²®ûA#ѶiC?¨hB9b2k»¨“¶¦‚µ4/ÿ”Â)””ª™Ð òÁòù"#Ù?µK#™°6> ¤«d²ÐéÄ\Cü¶ìƒÂ8œµY<”*œÃ+\9©Û¿}ãB­C51ªD…sEíª+˜øD°ëÅl{Å ©G„ÄZœ²Yd™@Ê'¬˜ÁeK0 ÄÁ”:÷“°´3ø“  BùS9&ôÁEa0%$F&ü@ ŒBIŒF‹Ãݰöš³ûð4“ÓC<Ÿ™ë´ TGn².:lÇaŒGtl‚̨`8=cD'‹5y„FÿI¨_“› À¯X7"é®=,¹«»º¬B ´+„c6®ñ´¿ ,›#ÃÃÃùsI³ƒÇFtÆ'œÇ‹,@fÀƒs®ø™mêŒýFATF‘TJ%>,9!“[À…³+œÁV£Éna<›|Éœ´Hd:ŸÜ ÌÇ¡¼¢Er¼P²C~¸Äúªý*n¢ ¨$G©Ü3ªô:XÌ˲ËJûcF«|F7¤Gô*@bÚȰü-j¡6UTE›°:P '¢‰ö£¨^ÜC–¬Ë„|É™¬Ê´s?Ô!;8ZÆ$îÌ’{,·9K$a@ª#Gƒ\ì;Ÿö[6n”Ë~sÍ…Û¶? 4ÿ3šŠ›»ÉV,NXL8LM!¡Æ#(dè¨+5pÇò!–ÎTÀ«@ÈË( 4 |:ãŒHÒìNä”Eåt;s|c„Î2L;#SFqyK6Òºò$Îf<ÎÓLίTÏR”£T¼C¸T03¼½\<øEw,Íû²ó,A¬­½õÜÀCD¼²¾UD››À½·ÅOBÄÉŠDÍþü¹ Ï.üCßÄ’ø4Ð=Éú|¿Èeµí¿ •ªmM¬ìÐÞ„ÑT»0î4MåÊád*ñ$Ï•Št‰ ¿ôDÑÿ4§>;Ré|'QÔFöÔ·;cIENµÑÕ(ý,QþôJÿÿüQ½¹Õ2Ã1]Hõ¶ôÌ¿LStÄýDÏ·ýÃM ý‰$/>t”kÍ lR3¬u»(å¿þûÓ¼LÔ£òÒB?±CÔ˜ô¨­\D=ES>US*eS Ó¡¶4ä®9tÓ¿ºS%Q(½HŒ$U?­RÚtÕKU»8E¼ƒãº\ÌÎͬI‰UY}Ã45Ñ5ÖîtÒT¬°ASsO¾{ÕOuÖPÕ)MÖ[5Uü+Ó! ÖÏ„I\eÔFÑ3ÕÖ>ÕReÖü|×(ÃÄ^ÍКsªè»W|Í×ËÃÚëWýW€ XÝ=:ÕWƒ=X„e>ä»<…e>„¼éWCuÔÿ=…Ðm5JýVs-Fq¯q¬WXU&MWdeWnÅØrYxB›“ÖÀ`ìMàý½_.àÿ¥`&ÚÎàÆà –`và Ýáæà á6_üUá öà^áfaûuán]^à6a°%a~áþa >aâ!Þaöa®aʽá#V` bÂ…â.bNâ&vb)Fb+&â%.a*naã0žâ.öbîaÿ,Þb4Vbÿ5ã6®b5F¥‡c:®c;¾c<Îc=Þc>Ö×2æâ uã7ã/&ãA6äCÎÜBNã1Fd™eäF†äE–ä3~âHfãD¦äLÖä@äN6â5®ä8ÎbN~äRÖÙ+ÆdK¾dQfåVFaU6åWžäXe[†åY¦åTÞe^^e]îeBþe_þc8Æe`&åZÞÛbNfevdT>fWå\Þäi¦fAþä`¶fh6fiÞfaFffþfpöfbÎflvægfmîæeçhVçugv†gY&çrVä{>å®ÕçfÖâw–gz®gOè€ÞçpÃÛh…^hææ‚îç†ÎçÿpîË6èj~hˆ>hPfh‡ÆhŠng‰fây¾ewþg’é‹NgŽîht¶è‘6铎瘖i˜fé™öè6g‚öh„ÆçsŽh”®h—æé¾i•^é Æé˜=j£j¤Nê§þi –ê‰^j§Žênꫮ钶i¯îj°¶gšþj¨Æj¦&ë²æê´Vk±¦ê”Þj¶vë¶Î긦ëº6ë³k¹žk¸Öë½&ê(žê¿ÆëŒÖè„&l¶åç¾f»öë¼vì¾^k´l­^l¡¶lÀ>컎lÉî챞l¥lÐnlϦìÊÎé–Æl&íÏ.mÓmÎnmÙ~mØÖ‰@¸mÜÎmÝÞmÿÞîmßþmànánâ.nã>näNnå^nænnç~nçŠ@˜”é–’ê>ëÆn*ÉîáîîÞnðïøñîÿ ïØ0ï×@ïôïQoÖpoÓ€oÒïù^*ú¶ŠûŽŠüvŠýæoöþîÿ.ïpêï¦0ð¤@p£Pððó¦n_ï§’n˜” —’ ? ×p ïpçp ·ð¥q/q?qOq_qoqqñ¤… Cˆ C(܈ NÐñØL /Q (€g"?r~Èñ'rN‰$Ÿr~ò(Ÿ¥ëFˆòn(#' ˆÍÿ$GpQ°r{0¨n,—[{¸n6ÿqÆs'_6G ×ñÑ8süsªûò6ßó,Š@tà„%ó«C…Hsøòˆ ÐNLŸ-M7„à‡.ï†HŸ­Pt°N˜t0O€ê†uQt uQ@€  Cˆ \ï6ç‡0CHõ¨vc‰@€ gón€%ÁW¯î.à[Çu]çu_'€nèra'ödoŠ@€n(÷lÏug‡výžôWö@xvCHwév÷NGøqz§Ã^ç8ô)·‡Å` 0L7:€!Çï1¯uWvÿ:'quaG‡øŸ%\Ÿnk‰7=ö8=ô~/€ ·‡Hïw¸s¥¸õdö¨ðøŒ ÿ¶™ß7‰™×îC•gù¤èt,ù™ïùšw °rèx~(øy xú˜0ö0€¯zŠç Ž8÷ ïyÓÀôz£ zg€Èõ˜çùÀM{¢Çq¸ø˜€…où~Ç °q:7€hw ²gu­øqÈuªHûq€»‹·rÁ§Š¾ç‡YW Q@x_ü¦°ö×ün€|ÉŸüÕ·uÀOŒÁï Èu@Qøñ×_}ÿÀ#Ï{~ètÓˆtRG‡´ç“O$çùU‰Û'òà“H÷}à· ¾ïwCø{ÍïÕÎòøqÑ÷w+ŠžOrt Nxxn*|§çxcùÜ×þ~/w{ÀõïÇz¶wtãG}ÈW¥à„ˆöøÙ+€¿ù Èï!ćœì`œ! ˆh/@ ˆÑˆhò$Ê„0`ÈÀCèRÒ4iAÌn%ù!ÀYóçˇ8Üù“¦ã<,`AH~FFEàa ãZ}H@Õ“*`p€Î™DÃÚ IëͨSÙv•:О€º_ÙzøêñÔàËÿ“€nÀü+—&bÅüº™àécˆ¢ôDÐM”€@|>‰— HKG´ø”).²†èÚP€Ï¡G×u@Rö,"P¸tÝz† Г)ë± (F07ØÒI9 ЏqÖz¿†wŽ:[{-{r_Ø:vÃF÷´Øù;€âÇQÎﬦ{­2` [q²]o&òP779”`ƒ8„€Ù%(ŠHv`T½}÷=J†!i†¡³,ˆÎM3±Ö¡D2TmDav$Öv"D3FÅ".¦—"X:µ_†¤ˆNŠŠ™’’B„NŽ7%x%–Yj¹%—]zÿù%˜aŠ9&™ešy&šiª¹&›mºù&œqÊ9'uÚy'žyê¹'Ÿ}úù'  :(¡…z(¢&aèbP‰:ú(¤†€d)¦™jz礕^ÊOq,ÈÓSœ„h\veP¤K cl .Š–ÑFãTèצ½ú褮 À¥0ÀœI@~, +œ±–Q:iÉ2m²lf'ÔÒl+ÊfÌ>ø+ºéÚ9)À¬TÐ PR21ä'¦º;N·LŠ¥:É;VK´k‘(É~æíf©û0ÄpvÚ”p-Q,Õq1+³»$?“6|1ÈÎf0^ÿðFü2ÌfNœÐ¥õFoc.céDÙãÙ¿ü°4ŽÍR•4ÛEÄ^eÙäR3ÔQƒ9³¥ ¶ûî‚4–,ÄŽcì¼Ó2ûnG³¹ À‚ã´Kó‚Ô¾ËÉf’I=7ݽuˆCœDu  f÷³ˆþ¯•‚÷ ª¬xs•!XLž[7ä‘§9éã’[~ùžœP9æ{þ9è¡‹>:饛~:ê©«¾:ë­»þ:ì±Ë>;íµÛ~;î¹ë¾;ï½ûþ;ðÁ ?<ñÅ<òÉ+¿<óÍ;ÿ<ôÑK?=õÕ[½‰èh¿=÷Ý{ÿ=øá‹?>ùå›>úé«¿>ûí»ÿ>üñËõÛÿ?þùë¿?ÿýûÿ?“iKÔÒ±”@ziWr`o A/°‚¼ ÿ7@“HpG ìRYÂÒŒÐD ü`—2¨Â²°ŒH ùC¶Ì*5´! ¹tßì‡l!ƒ˜ÁN)‡J•—ò´§>ýéIcjәʴ£%êPÊQõ©N}ªPqšSâP§G)­êÃ.=µ«^uiT5:Õ£*•¦7ëGÉÊÿÔ¯²µ­\ëYãŠT´¦u©u-jY±äÖ½v®s¥«?©ZUÁ^U«N$)_ûS¿ŽÕ®Uë]ñY©æõJн,O[YÊN°!må_C+ÚÒ`¶´,Õlg=;XÇ~Ö°4)V±jÚÙ¢µ…ìmÍ:Úͪv«„ý mƒûVÉæV·¼•kc›Zä®U¸¦µmk{Xé¾´ÉMêqYãÜÙBwµ¬õ.q£‹[ñ*w¹ÚÝni»[X×b‘½Z´nvã+_¾ 7½áï}};^üb·¸ùn}/«^ý~w½û5ð üßér)À^puÝ«Fê¶WÂp´pD¬Ø38Á.¯ûâÞÿ*øK±Åp)ü^Û“Å.p‰ákÞùŽ˜Ä†p…]|aG˜K?ø1ƒ,ä!¹ÈF>2’“¬ä%3¹ÉN~2”£,å)S¹ÊV¾2–³¬å-s¹Ë^þ2˜Ã,æ1“¹Ìf>3šÓ¬æ5³¹Ín~3œã,ç9Ó¹Îv¾3žó¬ç=ó¹Ï~þ3 -èAºÐ†>4¢­èE3ºÑŽ~4¤#-éISºÒ–¾4¦3­éMsºÓžþ4¨C-êQ“ºÔ¦>5ªS­êU³ºÕ®~5¬?½bŵ¦uVmk\Ÿ¸K)ú5°ƒ-ìa»ØÆ>6²“­ìe3»ÙÎ~6´£-íiS»Ú)B Œ´”m,m›ÿÛ^êö•ÀÝqûÛææ¹k“nmŸ{Kë.Í» o¾Ì;,õ¶w»Ýíë|‡éÞTñ÷Op~gIà41øÁ îmt+¼á B8¶^î}3œâ¿8»-.&¹m‰ãYòøÇ½r,B"?y—Jn7”c¯å.yêÚà ³¸ÌDXŽD\ʰeU)@‰jc€­ðÃ0xˆ‡F£#‰57o Q†^]eˆFyUoz.£#®²"Ók´mä0:7L7Fuɽéaq®À"§ÐD …Yu‡üì 1åj3šn Þ;ÖÙ8A9Ñ>èò~ÚÍ»!µÆ*€ÿWLh6ÓÛcxK|Vv•@€$2f™ºwpStHžò|±e`’yÔðg¡‰I 4¯Qž-YIß2ûåS¢Èͤ„¦!ï˜æ¶"åéá‡~DD5‚]Ô†= ;N$Uðd¼„6–†©ÉÙ AθõM„ dR‡Ü_†ÝŒÀ!½!eÒ©ÜOØHV.ŽO¦Äg@ÄM&¥†À›D\OTHÝIFƒ¨eOòC@!ù,UwxA‡&&&666HHHVVVhhhwwwMx¨V«nr–|x‹yw—e¦n…Ÿj‡ªeˆ±xˆªpޱz—¹œ~«|\ºM¯`fªl|§yf½cn¶iv¸zl»r|ëx9ð{.ÄTWÜ[\É^d×]aÎf_Î~AÛkMÜgU×vLÕwSÈciÅktÈugËryÙdfÕmqÝvhÙwxæ^MãWVèfIäcYësGèwVãfeåopåsiäxx†n‹‡s‰ƒ|˜˜m„˜tŒ›}”¤l€ªw‰¦}µx…Æ{„Ö}䀹€Z¯Œ¯v²ŽmÖ€:õ…æ…+è‡4ó‡%ò‹5ò’;͈G̉SÎVÓˆFÚ‘NÜ•PΑgÈ›qÔ‰f؃tÖ•xΤ}Ý¢jاwëˆFë‡Wç˜Kê›Wð‹Cñ•Gð›Vègå}ê–eê•wð [å díªví±|ð¦gð«p‡‡‡‹„™–…‡›…š•••ˆ‰¦Š”¢ƒšº•Š¢–—«›œ³‡ ½ž¦»§†™©˜†º‹¹‡“»•…©Ž ©›­¬ž°¶š¨§§§ª©¸©²½¹§¦°¬½´°®¶¶¶‰£À˜­Å±Ç¨¸Ë³¼Ë±¿Ð»ÄͺÇÔɃ‰È‹“Êœ‚؇ˆÙŽ’Ú–‹Ó–—Ä™£ÚŸ¢É¥ŽÂ¯ŸÏ¶žÑ©„Ó©‘Õ²Ó³–ΪªÉ¬µÍ½®É´´Ø¤¤Ý¼©Ú¸ºä㇈㈅䊊ꂂ퉉äç™ˆä’“å—˜æ›”åœœï––ê¤†æ ˜í·‡ë¹”å¦¦æ¯²ç¸§å²²ä¸¶å¼¼ê³µìººò¬¬óµµò¸·ò»ºÄ»ÇÙ¼ÂÖôëÁœêŦé̵éлñÀ¿ÇÇÇÃÌÖÊÑÚÙÆÇÕÎÓÕÕÕÒÕÚÖÚÞÚÓÔØÖØÞÙÕÜÜÜÜÞáÞàâ寯åÏÐç×ÉåÔÔäרçÜÔåÜÜìÓÓìÜÜôÃÂñÈÇôÌËòÐÏøÐÏõØØåßàåàÜäääççèçéêëããëëëïïðòââòëëûåæýïïóóóúôôþþþÿÿ 8ðÁƒ*,¸°¡Ã{ó¾õƒø-›ÄˆÙ,fÌØmc¶yç4ø¯ß¼yýL¢tXòdJ— YÊDHr¦Í5oÎÌ©Ó!Ïž U(tèN£,‹.¼ÇÔ!È“(+~«¸‘jÕŒßNV\YÐß:dÀÄ}»v­Ø>™¡Þ#¨)N·AáÆ•K“n]»#ñÊlë–ïA¨0ƒ6ýwÏ£GªSOµømí@n»hIž¥ ˜.ÉðdN¼×/¯^~‡†ýté·§GÛUÝS5DÎiæŒòêF¦±n90ݺuðÚ-K¼ÝºwHV®—¹^Ö7¡Û”>ýôÜÒªO„Ø™¨@“YqÚÿÆ x<Ê~úŽ­K©/Y²|)ÝMƒŸ²¾ýûøÏãßÏ¿¿þþxv©h uw8“vqE݃˜„ÍÃÔZ2v›„1¼‚ÎI;à ÎIº¼2"`(¦ˆ"5*¶èb‹,¾(ã‹1v‡u{øŽFñ˜”M¯MÄ Q*õ“bµ5F„SaÔDzòŠ.â ƒTóŠ,Σ—`®æ˜óÔ¸£Ž7Zç#PkÊvŠ6&ÔØJFjtXVÌÍód’(Ùs +;ìðÊ+!â ¨‰dŠ™¨—1.*£™Ï¡¹ššÊIéM&%!gÿÔfcÕÒ?é¸èº¨¡ãF4Ðÿf£ŽºHk­*Bš¦‚gJZi›×='Õ‘Uñ[ƒ‰a:׬R¢,[Š#´Å@Mضñ ˜·âª¨·¹¶k¯ä–[©i¾ÊõQDTeØVMÕKà]£Ž=ß°ø ˆÎ#Î+ÀœMqüâ ¶Ò0 î— §¨ë¤¼Fš.\GVlñÅg¬ñÆ›¬nŸ~ºc]“N:Ô¤ƒ 1 ’2*1x’rd˜’²)d„‘òÎ<÷ìóÏ@-ôÐD÷laÇH'­ôÒL7íôÓ+±^ýd£œEŽ÷QbZø:íL3Œ³ƒF;í+ÕÎspÂó ì‹Â ÷IÓ¬¥O}.ºy'ÿ”)aƒ5ô²Yyj˜¼Ú1™UVý°óJ‡²T3ˆ .ðI×¾AÎ9p´ ÜsÓ:TuËuw‚z§~îé¨'XáPÅIÓëP%v’aiQtä<øØãÊ&ÃP3Á*P¾ÃåóÈG¶m¼!苊CŒ8]ÖmÃ¥Sqå)È¢F5&PDM`óÖõ¼ŒWÜÂ2[ª^™8à B°o7Ä!‚&È–†X0ÝqwÿR˜l ˆB, oâg ÂDá8a OR\ åà–£ Õ¥[ô‹£Ë÷t¨½í‘±Œ ßT8£79å#ÁZ‘LÇÔ£“°†ì`?üé/m耴b8@0¡cKPiá‰À:1"…‡ßsàwA×ÕNnô‰G‚¸»y Í‚" ‡á­à”1D$(ÑBÄFˆØðŒs<ÊQ%:þõŠ,’ކŽì‘…9ÌIšŽ%û[&".ÃÍ#²8Æ0T  0`“@„'2±‡ è¡+ÀÁ B@ÍÔà èhÅW`ñE¼,Û0ä6·`’挬äêô™ÿC¦1j¡+š¡‹¼€x8 8J9 O´`Ab0†„@ {›­ È- R†)*‡.d‹´)pödS1UºRˆá“˜=‰cîÁWæ˜Ç&v`ͬ4Qó”„‚+ÝÀ¢F¶|á‹Z:,‘Sl!òµBp¥´5-Õ $#¹Ï¬Fg(2mPM‘À jl‚r@ðÁI~ÔWèx.¨\U€‰y A ÙŠƒ:ÁX¢ýKµªª ÅåRcŽñ¥†=lb7x E( ³03„  0àè†,:J8tCA\pœ ¾Âž!7Lá pø[8Ïyÿhiªd,®®ªU¯VÇ·Š]lO&"´ (k»á-’ ja›ÀD bj¡x5§Dg€Î3Hó Ç]ñê90–cPº0 /¥ÛÀ¶Ÿ’,¬pã+_¸¤å#αdgÚ˜;Àcë¸𪻂"è8 \f ƒ8ØÁ7`*Þ4œ¡ kƒ-iu¶hÍHzÔ{*Jß{LIJÔÄõM±QŠT8ÙÄ$Ê)ß@öœ2•c,K…!Vð‚Ô@5ç h àÊÓ–…Ûð¶ƒE£†P)0€±Þ°l¤gÜxûU÷¸ùsWr‘ü2V$Ä- <¦q Olbÿ-PUF°РP5 Á/€Á¯¶aK QÐë<ÞÐYqx²X¤ŠZx a´K' #‰Ñ8_¬Šùž^F&™aìvIÅÌÿXÇãb0„B\iÅ…<ä_XI'!Ç/Úp†8<£s‚nÔy§¤^q‘D_„r#'\SºÒð¥ïŠ]Òb–€¤I“Ö‡8P =r--²û`ùÈ€AGç°YA™¶'¹­•yEFzØ6,1ø’mìKûÄoÄ&âí,ä· éŽN´áw?ìœZCXìˆ=˜.*la _ÈvÒ€F4ª×¨¾žä¯*²Æ$b©K^V¹½Žÿâòoç-o–ó3ÙVâp%äbõå¦*ûíHUЋecÛ;(R9‰pèâÔl¸8G@9sžsÂmw Ñ!Õpx8å¡jûËÇûØõs¦Á.ß÷1 ÓK²P†r•ÇV„³PF:XCÝBxïå%&Ѓ†@®Û†×ÙQDƒt~˜D51„”TÄ’þz±éÝrdW^’SHjþ#„$Ž*)ALF¸¯_žT/ ¨‹Ìn 8Q L€‰[\ l˜²Iyå)t#ŒT&0äAÞœ»åWîr{/S<š—¹¥ÿ"Štã%Mªé³q WÀõª_ôÿ\PÔÌ W`„9¶}”mª(‡ [O2%,/v=ó ÓåÅù_–7ïC™wbiÇT¡áñO‘ݧsWwÇ£"è0~E?ã„k` âTj -ÔÒu`²P‰W ‘°X@0ØòdŒ´’§|ÊFv”÷r—sÉwo–tsä!†ó "80C”"— ØVx°`r•]rŧà ÿ‚<('eº<Ä7y@V Ö Í#‚È×|0veø+ü”7ˆƒýv!D2pö À À‰“`*0+K‚àÝ6d'€W`êÖ‚*O[‚ “ÿ t@L@|Õ°<TÅhƒ“7ƒ8Dd¨y^“ÌÆ8þ`Ý€J8—p{×w1°€pWÂ/r'1À(û£ˆ(ÒQà ¹4’X“0|Pq †.¸†ȉgè‰cÇ|tA\ÔÈiƒáL‘ãg1p9U"1Б 1 Zä7› QàÖiQ [íU x@Cz`—óÿ“ y„9ÍCª@hùW›é—»€¸Ÿò Lù‚iävV#íð ›‚hãEƒb(º° ©†µ ¹@0Õ‰N ¾`О(B‚Š èè"kS&`¨Q[öžõ©›ðIŸ2xynq_†ù&ûIƒóÓð ¨ðq„²%–"ãw~©‚ ™ v†Q¤Q¤Npa²i¡ò7}`ÀPJZ^Ôp- Š="ÚeóY¢$Š×ˆÜa墼£3ê/¯r·€*10Q!â#У?êQhDúèp ØbK!·-P6 .’a¾+8†ÙyWŠ¥”˜ÿäOúéýùŸÓ(°&uâ pvnꜰ  zQ0ÖùdÔàdž4 ·p Ãð!ßÐ+€© + /r-±Y^†j¢·y¨ˆ*A4è›Áy<âL‘ÀÐ!„¢*a ÒpJE°£%(œYð×éS°a„&+:(·à/™…+ð 2ò*§`n'1–±ª»U¥‚©¥¹)¯ºº«„©x3¹“ø !¨ ²@­·x%B€‡{°™š^ÃÀ w¸ÐBZk¿é¤%·€åàEÅø žPž“°3ÂaeCH)¯öš¥Vš¨(J¯göñ,E‡Ô@Œâp ÿö €Að “ {p ]ò >ÀŠ  ÐJð h0h›å6G¦­Ç–Æ8E·t4{Œ%‹Ÿóz¢¸²¿úµKÁÞØCöÅñrþr%ü8›`®ˆ0ž6 »ónp‡j£-Ðp ]ÒBÄpÄB¼$(²P¡¶må^\Ë›`+¶«²);BT¶1‘¢h›/Søq†Ò¶r ¨”B Ëw»zÛ9 Ó(¼4eƒr"|f(\wµdŠ< Ë^& ˜’{²(뵑‹sDb0 ñ“µW2 }p™î®@-BK´FËvð é$lZ"OR·%­ :Ykµ™Ø¸ŠÊ»ýÿÇ«Žû¸c‹¯¬La#˜ýš/d:²mj™8¦›°K#¡° À=bpLÀ–á t½—s^& ¼Nï{@9µµ}9¢,KÁL¾[оœ’¯Æ…¯´ó1b…ÃP WE Ôe"ÿ’ q€WÐPp4Ì+°âº#0›k²pjÁv|ó ¿7&¶‰»â›”»Û»]ËÄ-•j!$h¦Ŭü2( -k€b¼hIP¥ P‡ %\R fC-ç… ó`ů %² Õ` áâu<¹KŒÄIlÁÜÄáC¶M²Py+››*† ÄÀÿÐÂjXg>ñ0Pp@ }ån³;¸°0`N;P-ZDÐâ)!ê½~ìÄ«ÌÊ Èá«oݼA…Œ"›«ÀWB(² ÕÂÈ3PÀ’,R`ɘl"š¼¹­ ‹–Þ Sääª+pj鞪¬Ç¯ÛìÊÚüÊOì²%Å-q+Ä»· h¾€coÆbLÆE`hŒjœhgS ßPWP ±Pˆ^0 "ðÃà ÀЀ ÷˜ÊyÌÍà ˱Œ†Œj¶”{$kI&aÎGÇ•-P„Å {ópqpBO@ÃW`Ã8Ü/-„ŨR W À¦ºÿ ß +à M¥ÙìÐÞ¬»ÝœÁAÍÇaÑ 8 >l~–)> Eï—=×y έLÔ¹K×NœÚfÖ×'qjv0"ÿÛ³]Ûâ%jð i ràIƒ”ÃÕ@ P9¶å ]`d;/É­ÜÐæÜr]Ý£=ÔѶÔmÚ{]sÚ·è—Ét–Ù§ÉZ è0Rph`RÀ o<%âàft0À> ' 6{d5k(ú ,Îß…ãÙ2"e$Å  Í†}ÌÁ7ÔEàåÛX ¡Ýó &Z! ‹ f’*ðÚð/c f€ið ñ@(V´ vÀ?p æg(‹£Ü@ ûÍâkÝ$Ô kM¥§Ž²kƒóÝ<~×ÓÑ‹šþãé»@n{WÂm7pT3 =p™v° !ÿ¢j"æúå8ð €PïýáÕ`³Çc~†²°â-næ8ñ £Ð´äF›cR"«ªœ½$ç6NÚÏÇê§½ã«. ¾/·è`o 5@*€˜àC WÒËŒ>_ž ?p‡ÌP#pìFp%ÞBV œÞéÊí Y —ÒQŽrHæzR"ªÞêëxmÚ¯nç\*l!ÒË6;ÅðÃÔD |¦„u‡Åü¢à3°®j‡p ÖÄ•0ŰËŠœ>ÊMW^'‹½(¿¦S&îJ,ÝßlñÓq”¿ñ>S91ã F]&q5t`?næ 6y%žPC€ ÿ `žà2ÔÀ 5;s%«˜=Ù€ð‰ðs0p`°3eP@Ù3,¿ gd4®8ŸõZ¿õOSñoÝC‘àŒ> A¦%¿`.€z0(m™Bûò ŒÀ¿0ð€ªî*ÅkŒ*NækM ‰ Ü‰2×ÎZ³¸ÐËUæ%æ¯ôÓ8^îâ>îv 땟*5êc  &QäDՠˆ¢oð Ñ duħ?es Ðà :dW†‹ wpj ‰ ¡ž-cp(ƒ²ø3RR Ôð/ÓÀƒ€ñ›y^à—Oý”Ÿù˜Ÿ@®÷ÿ+óÒ* 6žà/xvM[ݹÿ .„èp : xepT 6Ä÷ÿpô ?JÔÈýòõKÍ+q膽Ò5ÏáCˆŠ{lµy¯¦ýsØï_?‡ÿDŽ$YÒä¿o'U®T™’åK–.aÎ4)“æÍ•6qÎÔ¹3¦O˜ 1>¶Ãè+ øÄ±Á‡«3d¡“õjØ›:l=«1c°3fˆÓ…С°i¢E‹3¦ÅžHÕ&=pðˆµDÿøGíÛÐy-:|õ DÄ˽ªuqñÆ"ïÍó¥e˜=1—Ô¼™dgÏ?C·}4f¡ žÇ€ÁµW3\lØÿ!Ãyqâ¼BL¬°‹8föŠ˜C[5zÍC«Æ ƒýD°ôío6‘Ùü¦xË!ºW²Ÿ‡ëÕ-O±^µã8odG‘ýîݫ̳tÍûœóëßÿò´çÿ0 ЧÔZÍ!×®‘‡Tˆd¡¨!ÝvÀ!*¯Ð¡F8`(ªjN–h8!†™'’ ªq(›GIä‘l.zˆ*†€¹¥"òCgÇ*òh²y拌H‡î¡i@ ˜ôÉÉ'ûóOJ‘ ÄÉÊ™ t¨8]Ä¥>qA Ä¡¯º¡Øè ‡WÂkž… ÛaŒ8Тá BŠa‡I&Ї¾ÑŽšÿl¸gÖ«ª0]MlYn†µr¢•r()¢ø:ÉǪ́ÄrI*/KÕ´TOµ¯4ùúÑrs}å\ãaƒØL q誆ÆëØÁæ¹Â[|ic lXÃö:à ‡‹j0ßvÖb_YÑä‡þ¾hÂÄÄPo²*î¸yˆ±PHrçåØYRïÕs4òL à°Æn·Qœ×ÐÀ*I‚ì­zÿöhAÉžJz6Å-xÃ*eZ“aIåïrX¼î‘à¬ÂÑ÷’RÆ̖¦âÑÔ!²…Ä%l;ß…†CP+n‘r÷ÖÜçjD%ó0Tú´±²r%Iê"†4ë4®Â$d ¡)¬=,C:?æ²D tjX蘃œ€gWòL"£ŽÀ$<¼Û¸ÝVšM„0¨Ž$û8¡ôЬh>+.ƒDN’‘|’'GÃ6£†M’Ù f9ÒWžô–+˜K_DÓ ÊX§%„PEŠ fļM’‚ªqr—%žU,(ë E7'“`¯j@ÿéõ õkžYhJ6IDÎ*èEK׳ÿÖ}§…'WZg?["^˜É†ƒ1—ùÌüLóxì,TTeħ‹éiñËZ<Âc.*Á¹VôKÂD;L4´‹2Á&´À(DÂ'¼Â)ÌB-lœ ¿Ù³½îcÝK8Àûœ.Q­ÄC³à[¨ÿ¿c¢ãó½i¢®‘] ;Æ©Ÿc¥ëóˆžã7ðY zI9ð£ŒQ‰ÀYº. £»™à»ê¿6,Ãý*Œ ‰¼šr Õ"G Í›Œnè Ü#‰T’2»³®¡F£ `ƒˆ×Û cÅ[L§aû [©ˆ¢#CH,O@—™«º:­L4˜;‰°)?r"%:°Í¡ ì<±S;Ÿsrœ\¬±s0šGé2»¹»‰Wüµn¬ F,½ò3¿Úîf„Db´Çz<-5„aXèÊ·wƒB$ÀS¢íb'YA©÷˜ÃCÛ,EÜ Gà@<ÈÛÃÿD|Hîºõ+Ã|¼Žì‘O°=+‰·"9²”Ä·ÈØ·.ꪜ CÙð² d3¥–#(»—ô»ÈŒÄȺG|´ÇÄøHòI!ÉèÒ,”@EëIÍB 1£PÁ°o膅¤Iyœ¹sœÄÆ„G_J`D8£T¸³¬´´DŒ}LTøÇµ HŸ12Ük¹›«·"D…0ÅOFÅ;mÆpWpÍW-ÅŒ¯Œ—.]DEšF ( U¢)XwMÚTL¼U£»×ÜÔWrʼnÿ~­² Ð= X¨´Œ‚S„­Õ±dØnÕWG…XñÜKŸ(L™ëÄõPDëP[ÕKƒe4yµQn]X{rX´$Ù2×w•ÕYLV±²2˜ˆV\´Åÿ¨—z™XÀÌV•´y Û|XžuPŸD[´½]ä™iMÍ«ì¾ÚDÇÓx”TW€“¹«WÅYÆ4Ù“ÍU·}T”­ÙÇ©ÍìBÙŸ‹ËT£µýR/„Ú‘…Ûª Ï«­E˜t¹£ÝÓ›YtÝ"‘JX8› Ùœ[¹\ÌE½E\Ì J³2[Àm\$IHÈMT0ZÑÙg³ÜoÍÜa”Y¦UÔÔ¥Œš L ;'¾­[ÑÚÊ 3KÿoU].cÝ·"W§åÜÎe»ý˜°AS9íÇ®EÄÝUÛ.ôÝÁÅMá-\"Zã½%´Û×K¥ÚWõRýÛ¼µ[áÞu]Ô=¸ûH’}kYt PD=ÄÓ\©Ußõ-Y‰}Z÷µ[%I Œ­» TîÙBN`^`B~`Ž` žàÄÓ¾` ÞB+”BÜ`+Ì` œ^éÝÒÊýÝëíßöUØÍÈ.ÌC%_ó=_Æ Êô=aöÅ_ÖÚ1üÞü…X5šûeÛF­^¢´áØåNÿE×­6)ãØç•Ý$Vᛥa&â¡Ü×).˛Ĝ“\!aÎâ¶­bÌå_,¦×ÿ(6¥Ëòâ._Þ-6ê-ãžEaþ_Á$Ñþâ4îÝ=^P26c3>b>Ná»ìâåN&D0>di6LvãU†aÏß”¥ZƉ[ä:–bIŽeY¦Ü^f4&d$&f8öåíæ].fc¦ÕfvæeÖåhæÐÍdaVæEVälæåkîægÞVl¶foÖfKþæ¾-çigqŽduFçu&gwŽgjfgd6`sÖÝtçq†çvîgîchÞffÎçd®æwæfƒ–ç7>æ{a€.hzÞçÿ>h„nh‡&èsVh‰–fæhÞèyægèŽfhŒÎèŽè„^h’þh•~éŠé‘Öç•N铯gŠöh—–i˜ŽiŸžèœéŸÖi›æi£j¢žiˆîé>j ê§.ꨖ꤮i¥fêªÆê–nê©¶j¯vê¬Öê«Fé±¾è›cªk¤Þj¨nk“.i¶Në¸þj°~ë ¶kX~h²¦ëµ¦i±ö뺞k¾æê®þë½l¼vkÁlÀfìÌaÈŽlÉžlÊ®l˾lÌÎì6k¸nìÂ6lœ&lµþì¾ölÑNl¹6íÑ^mÔNí¥.í×¾ëņíÐ>mÕžmÚælÛ¾íÿ²ÖmÅŽmÒnÖnmÄÆmáþmà&nЮm×>ìåFëÞ†n½vîÜ–îâæíäVnǦîênãÖîî®äæfîñöíò6ïz†ÞÎÎîïnoìfoøæîã>oëÞnòŽnV¦oñÆï_æï÷–oðžo÷Žïû¾nGoÿ>pîýNpõ–íÿ^pû.ð³®ïðîoðWðgð¯ð¿ðBq Ÿp q{¶hïŽp pqçðüvðÏkŸñ ×ðÇñ?ñ×ñ÷ñr/qOñõ&r%?òGn 7qò%oq)r/ò¿ò)òÿq!ïò*÷ò/ßp+sÿ.'ó2s4s‡b7r&¯I–Ær$Or(?ó‡s3çñ;çó8Od-Oó5Çó<Ïòݦó&×o?t6Gt7sCwrA/ô:gô0§r5§ôJ—tLÏtGe@ßs=÷ôOŸóROïG·óI?õô–óV7õ-'õXõA'ôYtN·õUwôFgõ_ôKö`§uMOtTwõ_'v_OöMWte‰9ˆviŸvj¯vk¿vlÏvmßvnïvoÿvpwqwr/ws?wtOwt_‰9H•v—’wïx—w*™÷ü°÷{¯w}ß÷YÂ÷ûð÷ÑøÐøç÷ý xÏ@xÌPxË`ø†OTÿ‡Šˆß‰‰Ç‰Š·xƒÏ÷Œÿ÷çøC¼ø›ù™y˜ ù’ïø€ww”/ø•§jH•——’˜ï™§y—¿yœ·y™‡ùDíyŸÿy z¡z¢/z£?z¤Oz¥_ú™x„ €;‰;(Èå“ȉD zìð §/€G8!(€¨÷ú{©§z«‰©’±Ï‹Øz ÔA{÷~8˜û¾8û°ŠpÀŽ~{‘o{±'€w—{ºß3»7€¼÷jàû'qüðÅÿ—ø³ÇŽÈG|­§zBƒÍ‰D(ûˇ¸ƒG€€È/€àH„9˜ý®ýÿ;€È{j`}\ €Ò€{H×?{Ž=x÷åø Ö?€ð‰; é§Çƒ; þÐ~øµ9€—w|j€²ßbå÷¼ÏH„ßé§~ëÇ~ †Çïþï¿åˆÔ ðèÀ€PpçĈ'Bœ#€ÚýÌix‡šA„#ZÄ(â7þ<˜0b6 Ì)èß<#wò<`àä•ÿdãi”äyߨÝÐïß¡Gyf Ðoã7›8uNyáœÙN*Œzà߯{]%Ö”ù¯5œÝx´6âAó 67ÀÞDîBü:ÿ ì¼÷¾e›gàlZÂP ¸-¶æ#ºv kü'ø1ZÀ€=&làf?c!úyäi´Ô0°Òu€‘‰ ŒûO±ä‰Ü;IbÍÁg€ÀêJ/‡8 @€„~!¯~<3Ä;´þPT2øˆ÷:óaðÑý.Âmú4ÛKÉdzÈ ëMåGXz0¸§|’uy~9%V~„õc@~-E8àH&tÀ¬áDó €]Û õTu=Ò7ǽå›wƒm”Y"VÑ#PÓ’ŠyVzâE¸znýsGô³`lñíe@ßHN÷)iZXü©ÿõØ‘Á¥GÐ<Aà]ðP„ÔLSp‰P€Z÷ÀMaî$'nfá<$ªÇQDZ}“ÛŽý@™J ðÍŽ 5HO陆":¤Xd ^X±H [—^]ËVÓ~ýGÚrÇZÑc¡Z%¦[£‡ªrk@'k¶Þóª`’áH£NÚ¨ËעךD‚(Ð#ÌAP¤ê”XT.ç¦x'±7‡j‘’Ë$5Ùn;)§åÑ4››süºÜ˜€8ÇF )Ùh…Æe¦A±†%¯œ/`/u¤BÄ^fô›Q³S5õ؉Ô{/Á½vUA ºy­Â óòµx­ÿ´qÃÔÌñòE%"c·hÁGÍcju‹ójõã“ÇøÚæÛÌïøbaCóøXÅk} Ìs<ã.ǯDXÒŠ&z¾}eÀf"ÐtWOCÔOTXSmõ]÷Dm—Ø,FÅõZwDýMÔqÅÍ“Ý0GôMØL×<8á…~8â‰+¾8ã;þ8ä‘K>9å•[~9æ™k¾9ç{þ9è¡‹>:饛~:ê©«¾:ë­»þ:ì±Ë¾¹ˆV/8;î¹ëþú¼!7áîÁ ?üç½ûVÀ„ö¶Çšx‰Ü³Pr- ·€¤òÕþMÆÿ„Ze6°Ä›þê½`›Np ‚gÀ¨ÿÔþWÎOMïÙpÒû?Ýa7tR ºоGˆ~HB#ºÞõg~NiDœ³‘G•'sv²±›ô.O¼ÁàP£ôÇMÃá’£ Ò°†œ3Þïr"äm¤4r¢ß£è'ÄêéeI šá[œB¢‹…Å"ê’ R±Š“Ãa7xìld%ºC6'§„”‰¸‰ýª¢‘ä]ªiŸL®Ó¯0ÐwV¼#‡E¢ ;kúPt"Õ¼Ï9¼¡àüÒÇù=„?¹AÞCú7¿DˆFy¼$&«ã2$%â`3‹Ò6ó5Mi%œglƒ&©IgHØÿþ·f²–¶¤\ïhyË]òÒt‰ €Îz)Ìa³˜Æ<&2“©Ìe2³™Î|&4£)ÍiR³šÖ¼&6³©Ímr³›Þü&8Ã)Îq’³œæ<':Ó©Îu²³î|'<ã)ÏyÒ³žö¼'>ó©Ï}òsGßø'@*д =(BªÐ…2´¡}(D#*щR´¢½¨E Ñr´£ý(HC*RP„m53éI ‡Òn­4R-­ÎKaªRÃÅ485 ÎHsªÓz´¤3ýéàn*¡†¨N£)PƒšÔšñ´©N©O gÔ£J©Ku©U•zUî©^õjTµZÕ±’U¬)ݪLѺÿœ©vå«nåiXÏZV–fÕ¬tU«MëzW½µ¯#ë^íŠU¼æu®=,b¹Z8¿2ö£€¬aYÉÊU°”­lbwÔØÍnô±—ÍìZõ ÚÂN6´„-jW9»YϦµ´¤µìgc+[Óºv¨©U-cYK[Øî³£µíiïÂÖ© ×(Å5 n«Û×úv¶½ý-jƒKÕÚF—¯ÉõërK]ኲÍu®vyËÜn]»9îNЛ^éNW¼áýîs½ ]”·¯Ù­®{ñ ßø¶6¿Üe/qo[_°žÀÞî\¶îöw¿ï%zßû·½~0x1ÜàùZÂ~ê„;,ßÿ“8þð‰9¼àÅ~ÄVðŠ+,bÏxÃ4®ñx l\óׯ>þqs|ãÃø(ê%2ŠSó¤1Ýè4ÚÑþô›%½é1ã9Ï6uŸ=êWÔ®ö²¨+}èT«ZÖš^u­c­kмº×[ÞµD,lJÛúÖÀ¶±ÃùºÙWV¶,gh #ÇÕ&3«¯Ýg;ÿÚÂþ±¡íd_šÔ¥>õr¸ÝloKÛÚèÖ6š9iyãzGêö5»ÃlrïÛÜñ.s§ým”{÷:ßü^¶¾û ðy/¼Þ¨¾ Á_mpz›âoøÅ³ ï€×,⮞¸ÀþpwO{äç~7­[íqHƒãå¹ÈQžòs\ã’Yù§[nó’Óœá;çùÌ{žñHáœå/ÿ9É“®tlS[æK?9Ð SôH=×UozÐÎt¬?ýßHº¸¿=îƒÝâ:·:¸Žðĉ]ìewùÕMõ¨w½æhO»Ù'2ƒ½ó½ï~ÿ;à/øÁ¾ð†?<â¯øÅ3¾ñŽ<ä#/ùÉ'>;ÿ¡<æ3¯ùÍs¾óžÿ<èCxËDô¦?=êS¯úÕ³þó¤§Hëc/ûÙÓ¾ö¶üëõ~ûÝó¾÷¾ÿ}çs/à¿øÆ?¾ñ…ä3¿ùÎ~è•èS¿úÖ¿~á¥ÿìs¿ûÞg¾ö¿/þñ“öá/?úÓ¯~Οýî?üGùøÓ¿þöo¿ýó¯ÿòãÿþÿ¿õõ &ßü &`ï  6 ªžöÅØ×mÜyÝÝ­Ì ]vEÔ| † Ž –  ž ¦  ® ¶  ¾ Æ  Î Ö`ÔL„ÑÔLê`áì`·øàŽaŽ^ öàÿNò &áà,ap@!aHá:!6!fá"®Ez!†áZáþ FÊz rá–!žá¶¡j¡Æ!¾¡âXÒÎŽª Nú! "!N îÈ!ŽK?-"#6"3õ D|‡Ü…`hÅ…XÆZQɤPÃôìH±FÀ a8†mØEŒ‡d<ŒõÓ]…mÀ7<ϧ¬Õ¢À‡$.‡õÅ%¦!È)Ègè’QhLDÜÕpbô¬ÿ$ €ZäbÝØÎ¢øÆxˆ"^pM"àâúÌÎQNtYl#ÄC8DpDCðKÜAï¸â]Ôÿ Tø·$ <Æ…¶Hq=ãX$±,JœÌOèÅ3¶Ä:v„`ÉY„˜„C.„G´MFÌ>žcKˆÄT” ž°ÄûÄÅFÀãlLÚ$ r0Ä3†£CNFøN¶<´‘=ŠâWhËßÌPF@^ì…£LâTèÈ?\Éh‹dHŒ÷„’fGq`âv DpØ 5ìEtÐÌZ$Æb4†VäÄŽ´‡}@…TÜEŧô¤d|OUE`4ÌQF—Mà†¥j¼‰¸8MAIƒÜÅX†…®lÿÊ]Àœ¬I‘`ãT8Òu|ƒŠt‡±$DtLGp°þ@fЄÈÒÝGeÅw¸…‘ˆy¬*nfÖÍWÎÃbLd…Š@… FgR„Œ€ˆŽÊc"g"òÄ@\DWÂIpô5üÊ™¬&÷\®Œã<îÅKò&i…—HJÍTèd§,d¤2d^§W\Çüˆ–葨§žLEpÆExvÅí ËYäçZ,ç<ôZ¦yÎDXø  P'O Õ;F±¨¥Å¼Äwòб,Š,äaFáSJtÔ"‡ÒЦ,Gt¦÷¬§Q´fõhèpeÃ#lѰ@ Q~f["Ç´ˆ p¢ôÉv(‚ † ‰£ÕvtOPöKTæq(£´˜åFpÇ^€ †D¡\ ÷ “ÌæQ$ ŽŒQLuØÍ’8„:J{$BmÈ ºÄe|ž†A¸Ë=JFTDŤ‹…4 ŽÜ—ææQ¼äúx™ —XǼÜËh&’‚äšþ m Åœ€ˆ¡rÄ—6¨.äûÜÃÀifRhµ¬Lý”Ö°DΈIÔìÅÜ,)ÂÇÚ ¢oÅ©®ÚTOÒÒr|ÍfMu ÍÙ ­úÄͼjœ Ò¬vͯúÆÞ¬E"°ÍèÌ­2£]  ÌÐ%³"¨Î|’íø*E+JÎØ!ù,‡x>/‡&&&777DDDJJJVVViiivvvV«nr–|x‹yv–e¦j‡¬eˆ±w†¨p±z—¹œ~©\d«|\º~I¯bkªl}§yf¶hu¸zl»r|ëx9ð{.Û[\Ç^e×]aÎf_Î~AÛkMÜgU×vLÖwSÈciÅktÈugÊryÙcfÔmqÝvhÙxxæ^MãWVèfIäcYësGèwVãfeåsiäxx†mЇs‰‚{™˜m„švŒ™}”¥m€«wˆ¥}µx…Æ{„Õ}‚倹€Z¯Œ¯v²ŽmÖ€:õ…æ…+è‡4ó‡%ò‹5ò’;͈G̉SÎVÒ‡FÚ‘NÝ”RΖeÈ›qÔ‰f׃pÐ’i×–xΤ}ߣiÙ§wëˆFë‡Wç˜Kê›Wð‹Cñ•Gð›Vègå}ê–eê•wð [å díªvî±|ð¦gð«p‡‡‡‹„™–…‡œ…š•••ˆ‹§Š”¢ƒš¹–Š£–—«›œ³† ½ž¦»§…˜¼Œº‡”»•…ªŽ «™«¬ž°³˜§¥¡œ½¦§§§¨ª·¨³¿¹§¦°¬½´°®¶¶¶‚ŸÂŠ¤Â—¬Åœ±Ç¨¹Ë²»Ë±¿Ð»ÃÍ»ÇÔȃ‰É‹“Êœ‚Ê”›×‡ˆ×‘Ú–‹Ó——Å›¤ÖŸ£É¥ŽÂ¯ŸÏ¶žÑ©„Ó©‘Õ²Ó³–Í««È¬¶Í½®Éµ¶Ó£¤Ý¼©Ñ¹¼Ü´³Ý¶¸Ý¸·Þ¼¼åƒƒåç™ˆä’“å—˜æ›”åœœî“’ê¤†æ ˜í·ˆë¹•å££å¨§äªªç¸§å²²ãµºä¸¶å¼¼ê³´ê¶¸ê»¼ò­­òµ´ÄºÄÔ¾ÅÖôëÁœêŦé̵éлñÀ¿ÇÆÆÄËÖÊÑÚÝÅÆÔÍÔÕÕÕÒÕÚÖÙÝßÐÐØ×ØÝÙÔÜÜÜÍÙçÛÞâÝáå寯åÎÐç×ÉåÚÙôÃÃòÈÇôÌËøÉÉõÐÏñÒÓñÛÛùÛÛäÞàåàÜääääçêíááëëëïïðòããòììúääüììýïðóóóöøúüõõþþþÿÿ Hð_½ƒÊÓ&¯!?pÚÀAÔFq"ňB”Ç 8ƒõ$‚ÆíX¾„(ë5lXÏ#Ê—0_~ŒI3æÌš8ÞÌÉs'Oœ>Ö *”æJ‡6¼ÈcD‰¡Jl9ÜQp³„é¢EëN~;º, ”lY³CÑÒ$ª¶j[›oaª¬¶!Üò¬2µ¨í`Þ‹åy”G·6YËÞ¡£µËZ¶o!·•<9.JÊ-_Ö¬P°@•b7ÿã—W°E¾VW¾H¸#ÃîÎ9þ§Ýl²T9Ö=07oÌf“>œ7^Ï9Âü¨"¸¡[=ØúSÀ„_ Äw?~ê¨ÝÿûN¾¼ùó¤Ñ«_¯ž#û÷ìÝ£lüq¡÷ñ×O^ØîrÒ‰4‘^ù’Dyó\C ÑõÏ9°C1\sÔ…bXM†vÈᆆè!ˆ†\}ùõ´_Š?]h¢N æ\Sú&‚ EäžsVÙC-6àÀ9"ŽXä‘’ˆä‘JºX™q,žå~Ÿ)•ÔsåØÔSHÉØT€QÕs:8àd9G™M4æ Ùä’!¾ g‡rv™Ù”xæI%P<Š„]F*!wà€ªD:êCWǬÍ® “sRZ©ˆu*§V”ié©§º1”×DÖ=¦Db9DÚ€!ý#0èÿ¸(0 I³Æ¿øé4EfzéJ¾þ*O¦/ê]¿­™€Ì6묟~V´å´P=…TŸ03l5©¼ðI5Õ|!Æ)àž"Æফîºì¶ëî»ðÆ+¯¼„=kï½øæ«ï¾üöëï¿ÆÅO_Eäêj¬‰T]k:´à1ˆ*ÊhCºò*­¾ô*¬‘Øa±úyªÙ±ÈjF]•¾½¤Ý R €‰TZi¢Î“ 2,IkC¶aÎ9n¬Ægì¯Ä>™¬È#ëv•“Ë=­‚ZRhsNýœ8XC ,à°³<ñ¼émÄCô¥äCŽ…ImôÇJŠ¢²&·v`È]ÿ Uß¹J˜–®ôÝBîiÔ$y(CN!y AK£ ÅÍp@£öÚpž³W´ yÔÑ—&½éÝL[F2AþÙ÷ògšŠ†ÒªQå˜ZªÚ­:Î#€Ä*yÐ2vé— CË-ZU8ºÜÒ}zêô¡nY뉣L4ÕCÑgÕ_¯½gºóë8À ¿Ò9¸p… ܘ^ª¼<·ÐB$°ÌÇÍ!È?­.»ÝÒÇ5XS9\ßtRÄÅ`:C‡*Æ9r’£Ü9@:öq¬s\Y 0ä·¼úÑï~uãŒþØ¿¸HÍp%[S¬—µQæ]+F Rð@D‚ƳÁ 01„Ü@ аàÜÿ*µaœcQ´° é*eº;-í‰P´ÌÉ@’²ýÅ$P¡©Z½h$Žq”ã™ÈƒðÀØ @ J0ƒÜjs;_úh±>!tİŸ‡å<'ò/Š"Ü“ŠpS é8g!Î8ð I|b@àÀ>ð‚0ÌàhÐUÆèt> ¾Cž£#å:¸Ç&žz! ¤ ¥$”…PE{P1MŽFs HB\ÁÃ>`Ôà’Cˆ¤|á‹ 6¯!Æ2i¡Lâí‘ | U‡·U®Å,®üÌu„ÀZÞ2—@@ f@N`BfxB¤Þdžh+ó[”.öLh–(•ÔD%>­Yÿâüm)Ï1ä–ÓZpÀ”x$€‚° $('|ñ(@cm€BÜ04w®Äxy”…šÉÄzš²8úôãù™⯠ZÉÁX3Ó½”ã/x… Πq’1pcžày˜#êšG2AZèâsB\ÒçtRc•°iWeirWÅÎtfWÈCôRn€¢ÎÀƒl¶Ä1ˆk\k@L3dÌ f(Ãlµ )éŽ QÛÞvÌRöñ”ÓŒËI¨Õ$ðv1!MnZW»¼Ì™P<‘‚à`0˜Ác ƒ\ÜÀÂ(›¤òº†ŒéJödª0Œ¢Pÿ‚Nt4l4UŠÕÄ*¶±‰ÑËY»-+7,± t0d 3Ù`2ø…0l@‹‹Aê N`§<Ú°†6ý•‚óãñn1Œ &‘”¬jÈ|»ÏßvnWY7*çì—AÜ˜Ä ˜ñÜIÚ€º£%í/ˆÁ݆˜ãk(à4ñ’¨©Oý$†ÞOøÖO¾ù˪}SJ¥ÇÚ &ˆLMì ò~@ÂÉPÆ z]¹ÊÕ´¨= ÐÖÙ&{‚´!#e²ÁôÆöÇE)}¥¹äœ`±(jPJ¨ƒ5嬊%£‰i_Ä!„bXƒ~0“\e W^ÚÀ¶ðEGå1hHƒÿ}ï ¬<3tIôЈHT¢I“lU+¹ÉCYaQ\Š’äÒè«ÞØKµ2‚ edcãÐE/q †”1`ccíÊÉeÒê$éJ¬! Øa†B¢EHs_>Ïw¥ªôsLx Ä—0ÖùËý[ªIäáñd/!¼  çuð×8Ê£©¢8øÐHk$+ÀÅ(YäÝÚ:Ö°7bòÒ Ä.Öù΀¬vîŒ0¨4ÿXŒSÏA!Z`"a». 0q‹^šA Àƶck[]D•Ô‘XI©ÉVØV{ûÏâî- i¢ ¼h£ÜË)´`šã Z"T!Ü»­2š ,ÿà%b0*,â×­Á @7¼©ÊÛ G‚ÙÞ°æ#3ăœxŸe “ÎC"߆ÝA&2µ¨jÒšJÉuŒr!D&Hƒ-Î84HlrÜÑ"« $TáV‚íRu{O&G<ŸD—‰ !~]c§Ý€áKE¾z”Kdl+‚ÜJNŸ’3 ¨øÆ¬Âž¡sh…Õ(µî…)$âÓ@ã‹ôœ,v,BºZžœôÞP¹…1‹Î÷’¸†L‚(A zøؘ´%0¦@¡± °´x4$ä…$”ÚfۜͥêêÇ=è¡§’pXRÃ!È5•=Dlc¿ ~ Bÿ/¹[¦”À/È‚ \öµ YÕäØ ­$q‡*|aÐÃÞ°ùŽuž•o7bÑg„F’…¨â*¢#‘õ` ! ðN69có$Ï`~„èa2g ‘A¥F^p€R0k¶|nÒ|ЀÑó|:0 ˜wøb-§±hŠf5Û°:Ô¶,À à2 æÇ-œ`'0/ê ޒ.9yÀ l T]à„\Ø…àR/4†b8†dX†ø¢&¶b÷1•8Ï¡€!Û×Ä&l•!W½¤ ñW'€ ÏðTðzô~Äæ#‘` Pzÿ d p0šÃv‚q2€žWMÀ%\X\G3 #Vv÷2 3 )€ N€wFA‚TÐL0‹bÐjçs!˜S+@ Ô&yÖ@6äµb€6íÄy.¸‰2€0¸JžH\51EZäÖr8B/°‘ /ÐP)¯ØN°äHŽNÐQGc v@àx‰ò0“ “p <ƒ6æ° äÕsÈøp¢×Œn{’†˜S…r¤xq¤aø?\$ºÀ f“Ä ¹ ãhŽKð¾ð^À2v“` ‘`KR1Ã’y›ôsÉÈŒpn׉ï¶_1‘MKÿáÍ!Vö oZa&(Çrº`& Ñ@]fàJéI¹zUŒ"¹µ´Z! Œ”’JU Ò’ró™(“–,U€­D09 ;3Áö@ ï?8  /@IfÂ!`”H¹N^MÙç€ U q y° ÃxÐ!|å _v×v¼“ù˜À%°´tfI )kÙ]D&?¡+@tÉp‘YŽNä[ÕðZÏF ·p Ä`!à°)Pªð) ò(ĨTy‰õ5œ9“ûbE-Âß“ôð\Â@ÀP&ŒÐ3$àPB‹`LPŽKÿ~E^mâ\q ò€B y)À™¢&¨Ðc Q˜-诙tgœÆÑ†]*W ÏQºà\ã×K?ÀÀ£ IOE ÍÀ ° K)a¿àoD!·pç?‡H Ÿ0“0dqrÀ‡Ÿœ5’ƒb £õ‘@ ÄXh¨*á»Ð÷p qE ~> “€y€ p;À‰   Gð ff@ŒoÐ&¶žóƇ(kÓT]j>Î䘥–þ ™ÿ©)Ÿz£§¦yñ´° £A½ô;À ÝU@ð ”3¡y oÀ*º Ñ€ p³AÆÐÆÿ`>H”j,JJ"ˆKðIU/ù•üù™Š׳¦nñú¦q:§Ab§er 3D´2¡z¨i0¨AÃ+$‚D7$D6i«–¢ ±x#X©pâ•×´Œ˜º©fA£'&«c¬y¡£<*i6@ {°Šè³À(JʤNÊt o[õÆ¥‰^_Ê¥ˆ8<¿z©Áª‰0‰¦iº*ÈK§b­§èÀ–´0—ªˆo(À G$<ñ °  T‹ Ÿ€[ò`<ÌÄTÊCe" ;D»êI‘ª«dÚŸfÊ® ËñŠ=< ‚£­a¡ïÀÄp b6Bð9%?‹ÿ’ o`T M@@«)€8?îÅ´²x4iål²¥ ³),Àjn!KœÅ9™<¡¬Ô(Ÿ*VMurÜÅeâ^i``p¼^F0¦ „ð r C‚DÇ0A¸ð*f¢j\¡ Ö` ×m«©U{µ‹µN¦¦Òš²ü°xC™jL 9‹óTM°>aÐu ÕOE–±´‚ 8àl„— {ý·1S›qš®ê*t¡Jrø…¬ñ¸Žj]ù*ìL»·k»1ÊRæÛz/µÌpF, F K _w æÐ­…Ìö¯8ÿÐ¥#0Zà '@[ Ÿ@ÿ0ÿ + gÏ4»$;ÇÁv\²nj“zÜKB 9ƒÀ}@º¶Ò—|¯ÉŸE±®H$äPe~$À ò ð€ÉØ b¸øÃàû¢L¸…ËOΦL{Œt @ÈÊ®LºGh@ gðpðl S´Ö@ 3q…GW. §…yÁ Ä\Ì®»RÇŸ\ÇÌÜÌ{rÇ”ÇÔ¼Á«ˆiªH˜ùªºçOPf@OÀ ¯âTäð œ  °ª fÇŽÓÙoò ÕPÏöL5,è! FG­ ÏÊùÌìÏÒ÷&ÿ+ÇÿÀ rÕP`~nE„(ÐÛ°(ad`g@ ð¯éà tÀÐ<€ +$ ”ç@Ò&}ÒVQ VL[[ô¹zÊ2ý‚D,b01²%³Ç½äSAõK1:°ŠtÀ f‚h°·òPÕ6À ÀvÎm >*6+'W6P yQÒÙ‘ÉA U )âu)[1›ØØ–.ÓýÚ¢½JŸ§¾pÝKqÕh0"€…€ ,xÐKÌä×U <@¡Í !ÛCÐKwËu£¥žZ-Ù’Éß`”8 št)Mµrkd(¾Ô=Ú[¾ý³ÇÌä£1@·6ÿ Fư]‚÷a»·08`›9ÀŒp =@¡9C+Ç@Ûi½ÕÇý_Ð+ñˆ\)Ò}¬Î<Ä0 ÚCa† n/õ°ÇÞò q•Sqef3Ðrðœ`ÑŸ0…½ô BÀà Ðtð ©.­0/.½Ä Ž€õ<öLW.c0^¨.Î œ0N6Ð í† ^äF~ä ~ࢧÝ)Z70ánÅv€äê¥@B ‹P° à~›QK§ÏÚ¾# Ù4ŽÕP†`Vð Ò +i>ÀÖ¢Áã'$ó³Ò¸Ði­Œ ŒÖ£¬'ÔÐù:ÿ€n5IiÖ€ËArm磥9¥&9 s Ñà 7 Z,%YÒ˜\ ˆ`Ïj~9^¥ajV$çP&ÇP ‹¢žÐF Ôp×ýçë*ÊÐÜ?ê 6âÛ mŸ°žÖµik06ö~  p< z 7ÀlcðKl’—QupÉ€áÕÄô ßü6’H²xR!›}Dé€ú`ÝA¬äNÁýSèeB !®q©; +—D\Ú2g ÐàSbóq…ˆó3 3pÒ o+‹ˆðˆàŽ  §>Ú3«bJ©vÞIŽ] MõÜ 1&^à»ÿ^Ýö>Ó„Þ–Š ´@„À ?gþM E q5 ÃrFÁ ¨ a 3Ð ä<%À; é"ã4þ_˜±êIξZ$és ûÛ(ïÓèpY–œ½ÎëÃ*Äú~óp“ó@’½äÍ]@ÿ@¹ÎçP HO«ÀðéFO ØU¼”G'i "Q ÷Ú°õ^¯ 4±?ªºL̤ Ô ŽQÓmïë2?ó¿~ó|H ï­ À €ãw·¯íjàSÜåð1@$ߊað/eB ]ø‡*¦ 1þñ¯ ìX"µÏ& Ä`üçó9¸NŠx¼ö4ú5_Äh*ÿ;K :D°¤ Û)Z;é†Wap{$Õo6p º2@ið vÐP ÁhhÜ’SE òž#gŒœÀÄt +7ÖÇ·äƒÈéBÉáû÷¯ž¼z!?ÖëXÒ¤Ip'U®d©2eK˜1ÿ½”YÓ¥Mœ9OÒÔ©ò#Âz<ùS(ìX <2˜ Q#Œ¯Œ8l؈QuÆŒªY‰ ¤•5-im®âàÔãCˆ¬aØí]œ^d‹ðć‰ÑºEîÜ-¾Ýz¡«®@~ƒ‚I™<{”<™eeË+1gæ¼Y'?Ä å •G-´x‘éPcØ›5ÒîÒ"ÿ†£ª Û1RsŠ1ã0ÝÀ„QvŽª!>¼˜$8¶ÂÐl­¶WØaºpÐ:¶—Ö9]´Ê;š®Üñl{Ôö8¨6È1%ÿŒoÙ3ç™ø)ëçŸ_ÿÇõ@J˜‡ÐÐí_Ö¨Áb¤Y×Óhf,ܪÂáœj¨Æ6`&ÈÁ«>HMžHÔb+¼ƒª9ͰÃÈ™j;rX¤ÈŒ‘ŠònaÁ†cì*ÊÅk챚xª«³þnjr§'™üOžG3)Áºò-Á|PD Ô àb¸.C3m»NžC”Ê~ä1ŵ0"°Ãj(Z“­»¦,0r"†"ˆt™ê¶ÿ‹f{ˆÅ@ ¤$K­#Ä2»OÊ(;º4Ó–6­I4~Dã‰ñ¢J5Ö\ƒ-ãRË . …áÍ7àlf¸Š›ŠA0@ˆæžã¢æ:ŒÀítÑÎ.½ºŽÙõ­•Çd”[Ùe„ÖCIÒu²»'šsêÛoœç”§vð¢eO…Ÿ­Q‰h±ö·¶ÐP¹ÆÈkÄáC‚I¬I±Ôf¤ú;ìαªphÜZlÕÙ6´JÕ­ôn¼ëÆ4Ê¿sܦܽ…9ÂÃ-'Ïð‹Œ­†EìÔNíbÝà±üIø¸D °#AáViÁea´:æ–ã ®\QZõˆJ˜!(}y <)TÎvgï&{÷}wùÎ%­4áíRšºy‡Q”&2ça§9ˆç&ë aÿ"<ˆм d¸ØNÿBro¥¯1+ÉúhפŸhR¸³™ýX88“ˆ¦–«9 WA…MENãv.!HXCÀ%ÄÎyN’XݵhÁ‰Hà!Ó“‡Å¸#|"<RûBU)þ#Œšz¨ƒ¾'¹0ø‹Œþb8CáõiFé!P𢶬ŒŒk’(¢<ªñC&‚-l|àFiðò‚<„M”hÜA¢"ÚNSÚ $’ĸ®Ù•d\"‰ÉH‚2’°&œt£(ÙG씃_º Ò¿¦²«¨¼2’láãZª6&Êc›Ä8„´=H â¸¹AG¾j–è %Ù>JÅI0‘á}ÿb¤öX²~-”I5¡™)5¶¬v¨< jhƒº‘ çÄ Æ l5hm‘k?„Ä%†ØÇþCx@H-­x ,j‘q] % IÑO“2Y×ÎV¸’z´g1M#7cÒPP‚³”§$'[¦r‘jHÅik"Fj^„‡Xn`)&J$BGDÜZ§ŒjœC*À(QâŽf"´ žº”hõÍk2&›23 )ïJ–0š¦„ª7;j*=†”A¨ñWIÅã8”ö;À‚z .Î0XÛ§/«>±"tÛ΢‚J’¡>U%ü0RczO>æ¡+éb7Õ‡Z³?á¼Ì¯ÊÿsçP';Ý) x..­iËK*ÒÊþ‰#EãÃÖìò,tÞ¢¤6`5Úqp4¶]#eóž¿:–¯™ô Hš[ÍX&¡É(TG¹®ÚþêWUe[:XâkFËD2ýxšÍ*¬( ±Æ%¬!SŒDhWÙ_ÐŽvÈÙåÝûx3•© ¸tSï`U2š£*T¹ïelccâÍÃ2t½ó%ã8ëW†!uÜÓÀ¶ã°ºX×E= ùJe¹ß°àB¦Š— –q²¬·=í¥/rùºøfAѯIFƒÇ(Tvì pKœªQ›DÔ=±eêÍ”{` :Ά‘m4Ë5+’ÿóÜáZ ½aì@Žuǹ–ÁŒ|¨>U¡ï¸U)#áV¯÷•èh*óe+Õ˜Ó0d"Jàý™‚ ½ [Nʱ†PÅÊ.dÅZgìÈõ!ʤ3˜±+†’=^h<¾¾xÌ'yñ‘è÷²÷7¸ø‰o§=ýiP‡Ze•u6E-Øj¤ZÕ«fu«Uý‚¨š/`…««ÁŠpâÕ±¶uªSñ‰O¤¢×©†µ¬i=ìU‚Ÿ˜Š²?¡ fÀ‚Ô³uæ©;mêØ:fÚÓ¶ö©·íQÇÜÝ&w¹­½Xœè8$‰ö/G\ÃBù´F–gÿ0GC!?ÙÞ‰¬. ½-¿G…ÿÅÝô©Ô-âÚ·Ý6öíOö »4Suͯ‰–Ù+Nw?VQÅ꞉7Ã{sÍÂ/ÇÿÎAYNP ª|%3<ÂåjÄ›YwSã ÓW¡ž*,`1BãÌÜøåóAîÄûFŸä.÷ª>ýDCâhr8†\äÛ­ ðèÊ0·-¬î°‡@D,âÜ"D…ë‘›6_^jkƒ~› 5ù›™œ_²¾ë±x—׬i÷e\ÎR—3[øÞÑÌŠA¬¨7FøaºÚ³­ÏHvÛ>4·XŒc×qÞ›ŒBÊñgdÏŽi»;¼ŸÐà}ïé±ówrÞYF6ð#ë2™´$Ïœ=RM(X‡‚«S4‰ÿíÞBßèžHõ’ß €Ôëf»ãï÷Ö;QOúçÃQõSi}JÙûlS‰ñì±=4qiá»Ä%T»è+:á¯ïöƧè›ï~X¥8ú{ï{à§BŒT¾nˆ×²RýžÆó-΋¼–˜»yp Ë;¿ÉH8’ؼõQ7|?ªŠ¿Çš?çëŸc é8«3 « …¹…v躺û:÷hlB£²‹£B‰õZ»k;C¿+!¯C£ºS1ÛÁÑ3= ”?ᙯ…ù€‚“+W²— ¬HÃ#ቄ™õ¢  ž3¼Iû”t k… œåó1 ¼ª¬@˱˜ÿ§¡4x%ysÚ <Æé7CÓ.sB¡j¸•q( #À>¬¯Ø,JJ@ˆj8Å¢8È<-œ¸ý˜@Ó+½Hô;zÑ)ÁŽ“òš¹ø(P‡Cc7“*~±h¢ ðó­äCÀBœ$´c¨o´G ¾Äú«2äø›ÄÖÓEI+K$ˆÐ-3 NüO”PTQlRœ9DE4Š™RÄ”hÅØ{Å‹ŠE4šÅϨECtDà«*]LC4\CÔ˜7„ÃÒy–ü«ÃÔPˆËÃ<¼¤PYŒz šDøh¦öɶÄÓ†oô¹r8ÃZÀƒ#8GóÛ&ƒ>^ìűÒV²œ)ÿÒa¹©p¹Iª6w;£)l*s˜3ÅR\¯øHɃ ü+FÌ1‰Ò¶”ü/ˆ»Å|„¸°¼Áì ®TLK†äÁ3¼IÆ´KÃËÁ@kb@³| ´ŒŸµ.DLšŒDÑÜ7®|LIy¯lœ»÷a ̰)¡ÊÿN ܼ¬”@ÏÇÐLNì°›âË0,L7pð‰âÁ¾áj ÙCE¼Î¼„KþPL‡¬Må<Œ*98ÞÂ8ëDŒ3úNÁ9Äu‹±ô\8…„ÉÎìÁñtÌò¬ ²‹Fî HËx™ùùOû(ÀöQ—/âÌ[¬­”ÍýDÎåt´ðSÏ)é™ ÕÏxÀº¹PE¬Ï„¼ÏÏüÊÝÊ5¸/ÚFnÔ3šONc¸øP¥PMLÇrPò¼Qó,1]HüH¡ÅL³£4í<£Æ‹NUH•KúÃQ^´Í“É.„;+£$0áΗd>ÕRÄϹQÍÑÛéRþXÁâL!HÿûZÐ÷GÕO&í¹•8ü ¡”HDjòÆ#õsëS?=µ@6ATB-TC=ÔVÃÇ?]TFmTm·q³6lã6GU™¸<Î7mR0eÑ6%Sý`O„¬¸ƒ\Ó-ÝÓUÒ ŒÓL•StáÁt3ÒÚQ!¿\‰,ýÐúLÒæBU SþºmUÃص•Üȥܹ\ËÍ[Å]ܽÝ\ÆUÛ¾=ÜÎÝÑ…Ü·%ÝÂ=]ÓÕ\ÔõÜÀ]]Öu\Ì…ÙÊíTÕ¥ÝÛÅÝ}ÜÌmÜÿÞõ]ÝÞàERÞÞÏ-]ØåÜ×M^Э]Û^muÞ”ÞéµJ½^ìÍ^íÝ^îí^ïý^ï…ÞêÍÝè]æE^ã=^¾¥Þ(]ÞôEßçU^÷ÅŸ%ßñßû•ßÖÝ_Ð+ÞøU_×ßòÅßöM]óý]æ_†ß&`öM®NÑ~ßV` †ÍÙý_Î_ý=_nàæµ_Þà®`6áÆàÐMa^`.È–`‰]aFá ¶`~a¾\¾áÆáþàâ a–ána^b&žYâVâ&6bžâ"†â(Îb+Æb b.vâ îâ*b/†à0&cÿŽau`$Nâ-6ã3¾â~b8vã7nã#Æãõ¥ã:N`)c"žã8îa4ä>Îã5¶ãBþcÿ¥â1vdF†d-dCæãDVdI¾c=~ä/^d2läL¦äIeMÆ×AVcoeãKFdSÆäNe0VåU.ãMædAvåW&dXödRîe_Þå\¾å>åC¦åY6æVöãHÖå`.f[væg®åef¬EåTVæRNfV^WK–åkÆæ_nfie`ç88gtNgu^gvngw~gxŽgyžgz®g{¾g|Îg}Þg~îç{î88—€h‚æ”6è‚ΔƒVèi툅~’‡†èÿ„Ž’ˆn’Šæ‹ÖŒÖè†þ‡æŒ鉖葶è’6é†iËPé•>iŒ¶–։™¦éŽ®†sÁéœÞiNÑéžæéLñé îh¢.j£>j¤Nj¥^j¦nj§Î G0p8¨ýˆê©îˆ:0€xÙ“pDЫë@¯žÕûh~@€8€ö©©¦êÉ@€ú8€ä«®é’kÅ8€h´†ëdkÀ>€Äë­ÀF€ÄlÈÛëɈ©H¹쎀l˜ lHü@„:€ €¨† ë Ñ€z@PìEèÚvÔvÿ€ž¨ƒ(€Žèíj8à‡¨ƒ:pm(nø¦8œ6îj¬vXÚhÓÖ@„Ýîíßîá.€j0mäVnæÎ‰@€jXïïömê¶nšŽmÚFî8¨î:xï–ˆújʼn8@€Ñ¨†z€Äˆƒà m€P p0€±íÙ€€æîŽ8Gå €—¥láþÀiyHmèˆPm›àíçîˆêœ€öAk—íí€qÜ: Gî7€7€€¦lG(ñ8q€Çöê‡q?kЉk~ ÿ8ßp¦zråbnß¶Œ€˜ò¨Æÿ€ðmïÏ ÿGøð:@ïˆðl¨þpÅ(€¨ƒÿ‡¸nXr~ˆí/ðÄІ.wò €4wð:ÿ‡;ï‰8ïÜp?¿pAÏ îîj³vq±EÏ ½^ôÝŽôIo‰S§r ÷ò&Gnضô?· G€TKí5ÿ#wó€®ô˜sUWk“ö`ÄÞt@7ëAo«@ÐNt=ω7׿Æña§ô_oyème×rS?ÀjU¯†Q׆j· Dh@`muk÷wGw<ï‰+çuÔN xuËw´kp m_1ÿñ9hävÏbÿpÿþöì ï@qœXrÎNsÔN ×÷€.x‡Æq†gpngó€‰/m‹—‰x÷áùzpp&× Øöi@ì—ßð«y—êÌ@÷9÷o>î|ï  íjp„Ú^oÎxsIÇp×F÷8 €&/yI/€äþ÷^ï‰%/‰§ò핯 §€'Om©§úÉö¨ø–ßúúvXÀqðn˜ú&÷ÔÖ XïG÷GGXûª_‰¿|þ(n»V®*/{p+×iDpúÌ(ü¿>mZwlr1ëtÆjpÀñÞÑz“ögöÈ×ézxüÍwx”0k~@pÒ}8ºt¦jÉç|ÿ÷œ¨ƒt‡tÆéÜ—<ßGç§>~äO~å_~æo~ç~è~éŸ~ê¯~ë¿~ìÏ~íß~îï~ïÿþæ—ü—Pvð/óÇåÖiõóo÷·™ôïˆõ?p>¿n˜sD¨À^lÎÆý@äýû§@:ÿ¢âü«cÀ@Dm¨Wð#È"G’,iò$Ê”*W²léò%̘2 Ö ð€ü0‚8'€z< ­V3ÀO{þDà@D6ëÓ3§£«D Î,kö,Ú´jײ5Y@€¡:Hý' ?ºàþ1…ˆ¨^\mZÔŒhÿ@5ºïr=pn5Ž~V»jàê¶š7sîìùóÉšÕ –w”ô\ÉŽ(ì5 ÖÄŒšŸ^×Ë »ÀUG ‡/nüøHÑ·éòË‹7@f~²µf=àŸ<ND,@sç‰jËY€/^¥a#oïþ=ü˜Êÿæç5.V¡™ù(SOw!öÖP×Ý7”BÚÀE_~O …ÈU£Å7!…ÂWMd!BÑ?ˆ8‘AÂý£”czxÀh…€?«}øQ 9’aA mô84Z¸#=ú(Òl? 9$‘Eš„H¹$“M:ù$”QJ9%•UZy%–Yj¹%—]zÿù%˜aŠ9&™ešy&šiª¹&›mºù&œqÊ9'uÚy'žyê¹'Ÿ}úù'  :(¡…z(¢‰*º(£:*§C‘J:)¥•Zz)¦™jº)§zú)¨¡Š:*©¥šj8'íuÖª¬¢ÕªY°–%«L´ÖújZ¶Â¤+J©šÄ«KÀ‹+±®{쬹Û’¯% ËÒ³Ð.›ì´·VS´+e›Ò¶!5KR·ª*‹,µäZk.¶ãÆ Ó·#…û«ºå®{í®ñÎô.¼è¦Ô®Hø‚kï¹óêû’¿ÿL0½½Š{ð° ·T°» #ì°´ÄoHg pº7,0È÷r\ïKƒ¤ñÉ#Oÿl±J(äòË?,3I&ÇÌ2·4k«òÇ!,¯È%/ìóÏEÝ1ÑHtÒ çÛôÊKM2Ô=3]uÅ.Ù\Ì8ò<³Î-‡3Î(uíïÖ^—=´ÔJ·õÛV_=÷JiŸýuÖXçM÷Ôr÷ ¶Ölóíö߀ë-öØ‚wÝŠ^øÎ‰;Nõád¯í,»“39â—cî¹Á•[7磓¾÷â›S~zä ÷ÛÖÝ’îúë´ol{Êž/±;﵋n¶ì³ÿþôð³ÞyK¼÷~{ñÆ—nzê†ý󚟤üî¾OOýêÑK_½õ߃ï¼JØ/¡½÷¨?¾~÷ì«þ>üâ§d>úã“ÿß¾û~ã¿¿þüËý˜·=àáîfTÛ»†À~$€¹k^èH< F‚ Þ]â@Z0ƒ¬Ÿý<øÁB„óÞ ã÷¿þ©P}þ[! cغä¡P€é›á ‘7BîkxÃáJ6èÃ.0‡Ü{!C˜Âê0ˆ5$¡ XÂ%²P†IDâ™(!Q‰Tt!›˜?+Q‹R¤¡ò¾˜E3†Œetã£ØÆ5š„‹±KàéF6NPŽ÷àyèEŠ~¬à!E˜H5ŽÄŽTä÷XEI±…¢‰Énr‘ŒcßHÉQ‚’“ ¼ã I=²²•¢ åÓ]GOª–±|¥,o’ð²—¾ü%0ƒ)Ìa³˜Æ<&2“©Ìe2³™Î|&4£)ÍbÒB$Ó¼&6³©Ímr³›Þü¦2«¹Kp’³œæ<':Ó©N^Š$ë|'<ã)Ïyš³¡'>ó©Ï}ò“Öì'@*ÐNÓž!(BªÐ…ÆÀ ÿ`(D#*Qx:t¢½(FµYÑŒr´£5æF?*Ò‘v4¤$=)JjÒ”²´¥ý\©Kc*SŠþs¦6½é9aŠÓòôš:í)PƒΚ µ¨F¥¦H!ù,ø²†777nˆ®iвw“µs“¸y–¹š¸¤o<—hw©]d¼go½gp½jt¼p|×]`Ø]`ÌinÃjsÉmtËtwÉry×cgÒutÝ~}á}}уŃJÙRܪzç™WèšWîžZðŸ[ä€ñ [”Œ”””™™™ƒŸ¾°›‡¾•¥Ÿ ®Ÿ°¤¤¤«««º££³³³»»»”«Ä¤·Ë¯¾Î³·À³¼Å»ÄϾÇÐÀ‡Á••ΖšÔ‹‹ÖŒ×—šÞ—™É±šÙ´“È­®Ï·¾ã……á——íµ„êºŽä¼™ë´‘í¼ä¦¦à®®å²²È¿ÀÕ½ÁêÀœå̶èÏ»ÃÃÃÌÌÌÃÌ×ÌÓÛÐÎÕÒÒÒÛÕÕÛÜÜãÃÄåÍÍàÑÄçØÊãÕÕãÝÝäääéééÿþþÿ€`<+`ŠŠR‹`L>ZKVŽ‹Xb`8B™ŽJ 4bb) N¥Ž= bb:X°‹^ b¶YY‹šŽX9¿ÀbÂŒŽŠYRÉÊÌÅ`_`ÐÒÓÐ]IEOÏÑããÁ? !##áÚåbOQEìäö¶GÃ`MR0-É”­ZCЦlÀ²d!…‚ @ ‘Q%›-),”µ@ÁÁ:lDSÂD--²¼àb¤’DcñâÅ•Œ¼X¤L 5 N™ò/ ˜ú¶ø4pãŠ0hWV]Aªè Ìú]ÁB… × (@ÅY–+A(\¸0¤'˜dñ‚‘"†x!ù,Uxx@‡&&&777HHHWWWiiiwwwMx¨V«nr–|x‹yv–e¦i‡®hµx†¨p±z—¹“d6œ~¦[b­sA«|\ºMªl}§yf·hu¸zl»r|ëx9ð{.Ü[[Ç^e×]aÎf_Î~AÛkMÜgU×vLÖwSÈciÅktÈugÊrxÙdfÕmqÝvhÙxxæ^MãWVèfIäcYësGèwVäfeåsiäxx†mЇs‰‚|˜˜m„švŒ™}”¥m€«wˆ¥}µx…Æ|…Õ}‚倹€Z§Œ|¯v²ŽmÖ€:õ…æ…+è‡4ó‡%ò‹5ò’;̈H̉SÎVÒ‡FÚ‘NÙRÍ’eÈ›qÔ‰f׃pÐ’i×–xΤ}ߣiاwëˆFë‡Wç˜Ké›Wð‹Cñ•Gð›Vègä}ê–eê•wð [å díªvî±|ð¤bð¦ið©lð«p‡‡‡‹„™–…‡†™•••ˆ‹§Š”¢ƒš¹•‹£–—«›œ³… ¾ž¦»¥§‡š¤˜˜½Š¼‹—»•…ªŽ ¬ž¯¬ž°³•¤§§§ª©¸¨³¿¹§¦°¬½´°®¶¶¶‰£À—­Å±Ç¨¹Ì²¼Ë±¿Ð²ÀϺÇÔȃ‰È‹“Æœ‚ׇ‡×‘Ú–‹Ô——Äš¤ÖŸ£É¥ŽÂ¯ŸÑ©„Ó©‘Õ²Ó³–ΪªÈ¬¶Í½­Ë´µÖ¥¥Ò­²Ý¼©×·¹äƒƒå癈噙ðê¤†æ ˜åµ‹íµƒì¶ˆí¹Œê¸•å¦¦ç¸§åµµò««ò¸·Å»ÃмÇÅ¿ÙÁ¬ÖĶìÁœêÄ£êÆ©êɬåÀ¿æÎºé²éÌ´éϸéлñÀ¿ÆÆÆÂÃÎÈÂÂËËËÃÌ×ÊÒÛÚÃÄÑÎÕÕÕÕÓÕÚÖÚÞÚÕըרÞÙÕÜÜÜÆÓáÜÞáÝâçåÄÄåÇÈåÊÊïÃÃìÌÍåÏÐçÕÆæÖÈçÙÍèÔÃèÙËåÙÙôÅÄóÐÏõÙÙåßàåàÜþíÞäääæçèêããëëëïïðöååóóóõ÷úýõõþþþÿÿ 8Áƒ*,¸Pa¾‡ ÿÙÓf¯"?pÚÀaÔÆq#ÇŒ+b´Ç Á‡SŒ(0_ÅŠùL²œ™p%Í›ÿl⤩sgÄž> ªp(QžGYUøÒbCpÿåûHdF±jŒY°©J§,ù=,)3©P³gÑU[“-Â¥háº-;—!M—ùÄV|Jи‰=j{è7ðG{&íåÍ·U/â£r!×µ;9geË•#K¾¼ö²f{[’LËÏ/b‚ÿ¾4ÌQqIе‘uI6ègŸ·wæÖí¹·oÎo9ß-uôZ—¡nTžQ1DÆY+†-#Y~ú’r¼½n÷º»o†ÿGú8ÝÉ·ñ:~Zš¤Ê»3ÖXØÔŠkä'v,ÿÿ(`ih`$¨à ¸zåg^pFÔ”qEÑöÏEVöWwöØØ_ü%§ÚVó]¨âŠJÃâ‹0¶ãŒ/ºcm¼eV¡[ã%ÕãL»=ô]MŒå%QU‚Å!Uîe5TS]ÈŽ2ʰCcE6^©¥=YnIc—,âˆÓ?íÈ™¶ 癉)I’KIÕæU)ÁécM!ÃÆžls%˜^Âh ,z¡˜â™—šž'aeùµtMuÕ|dYTÚrŒI´_KôÙã pð²ËžÐ|I¨ª«ÆhhSˆ’ÿ¡ŽŠš¥Ò­¸æªë®¼öêë{svˆ$UXÑIl±—ÚSM5ÒHƧ4{Ê`4kíµØf«í¶Üvëí·à6«Ø¯ä–kî¹è¦«®ºiÑZ?ƒ ”Ñ‘1YgqyµgÑ}/•„gE¹°‘ª=ϰ‘ «­Ö˜° 3Æ d­>2Úhu/$dKQ5D]Š€!¹ß^OšfZ¤¡¨š=zº¡Î;o°  «øêÂ3ƒ…ÄÎ:1fî2õÒÉ6×äÕÏ¡V'r_I Õ¦¡ô=rðɆôÀ¨9¿óŽÌ1Ú0Qh¶ûhφ-6BêÍ·q5µÇ)Öñrý–F"yªšÓO#ÿ#ÇÇTmµ–ïÐËᱤ#c×\ß6ÎC>—Ùù\8³aHaBL_5"X=¶é¦£‰j«5¿ØK,´ôbx,[¿”úª©;¬”ä7ã~fÅgh¶Ëe)¨²i(u£›V’é'~8-±Ï8ûЇÇn¸9MMhí‘ë<¶÷eó~PڵǗ…wOeP{xß½)æ’Âô¯=ï Žxô Z,/­NNöŒkŒlW&²ñH|æ¡\[24Xï'T™MÒu¢¦ÝÓ°ÄênM8XÃ1ð·"í]Èp½x9ªÀ¶p€ÝûÞänÎbQ¹XY§Út,?‚©Tÿ¯!=t@7RÐÀ¤œ×^â<Ö‘ðBæ°_,~±8béki2àît§ÄŒ”Ù‰úPr•æ€d%ý‡5* ¡  Ä@¤!`»Èý´;9\좹FðŒ‹‚¤¬v2®¨o$9Œ@ÆŽqØãp{npô‘ôØÓ.r1B®®y%ê¼(;0æÎ‘cc iIŸT²%müK`6ÙÉOÆbAHA hÀÌhÂg€Ÿà Å/VÄpÿ³Ç i1KZrÉ–9Âey)ÉIÎ&n;”L„$ĸ„“˜¨c‚ ´À%0Á'rÿ…(nˆ‚Þ ŒZÆr‹ùE,`I;o~Óq”á#uIN[MÆtˆöòCÄü°5uzÇ&† L(12€¢ ð{¸#šÒt™5ɺ×]QK&Ü#o)Ñ\г¢› œòç˜ïh)Y%—•_ÀÀ A d@UªÚ ¹8ÃÁÞp3°aTlØZ—Vˆ¸lÂkZà"Á9¦rÞέ1ìéQا–f;lëËirR©wÀ­HC hDÌ€8¸A/è‡>u• ÔÅWJÅ^¤0FU<œâ^¸Vˆòôœ?íåÄИF´h~C"ˆù˜ç3IщÁx‡6p0ƒÿ’3àE/nÀ¿‚± O ¦=ÜÀ†vPV›ö3ëŠVG _¬®¥åNÃ)WÑV®;TËiïj!¥UÊgžË6b« Ì °†åÅ/x[wð‚ fÃ1Z‡ªei´°é‹XhëqÖ…Óm+E-ŠÝÏ‚V-t S<§à\ÄSéÆ9ÎÑ TµªˆUlSXÆ'9—²«K¤Bª¢ýõ/ÊÍ)NÙš¨ÕÅ¡%ðøÌCü(&!B" }–'²˜8¦’ÚJ0lKÕTu”7˜Å,tQЊ@Έ^–°Y‘,rSEרÄSHVü©øO,6çD¯+ãÑŠO0åcbõ³ª`nÿCÞ8VjÆ•¼9ÈÁlpD´ N|â9E{Èò²¼5$ <¨@98\"£ÛYFôÀ˜Îty:Ö^Z4l¤ÈFš´Îè˜VŒ1Ü;2!<̼ Ä0ÙR‘$Ç$P k0",@¤Zæ‡Á8®šÞe„42‰¤yÙFJT¯xÑëd¢v§=ôá…ÆB*hmiPMЂ”gXƒe'=Sú½z*Zô$^Âh{T³ÝÄö,u“m]~øli¶l>·â€Ãx£F¸27ÿEµ±ÌA F™Р Žx‡¬m€Ä‘ø¸3""%è„ÆÆ¡Éøÿ`€[㜑¹å.ïô=˜Mp¼PJ$_ãGßXgW䈠ĨaI¤AÈAÖI›P{àµ5&‘+°!{z¥ómiûÔße_…ÐŒlЈÄÍù!²ƒ£ÒdbfÁòUfš”™Z@Å7VHâÙ!‘Ó`´ô *0âИÚÖU^ì·Âœà_Ÿi)†6‹Y£9Nšœâ#´o‡•¸C D ‚¢6¬ NP*Œxñ*"+â²Q IÔA J`´5+¸/NEφöËËùMÿ[ø tÍF•úÄ,áh5 ` A”¼Í³ Lðhá/@hÿÊ/´¿¬¡Ð”ЃÀP ô r€}×V~ùq›ø@u9‚×–ƒæSJ“~¡7\Áj0À:Ö¤teư}«“ø_*be/q8öÀhÄ5Y0dð2ã7—]`§c69ër‚(˜+rÆ+t‚kç!’™,ÀA.€z2ÐÐ,¤°}Ô p(.Ö 0 ÍB Ó' ŒÆ m0U ^@„TX…âò$)˜…Z¸…\˜.g3‚8‘`š“š²|›®õ|}Cp- "@U H´`(€ ÆUŠ´"åG‡ …~0 Ö xÐâ`oÇ0d8Òÿ‚4|g;3y<£]£Z¡/Òv/Rñá`• )°ÊwItyVNЮ8nà ò×ä0},p€[à »&xÖ`oÄÅc05÷3ôglçuŧl÷w™È]<etÂþ µÈ“° 0PO'ª˜NðL0ŽãøÉðMa y A {ˆö0•0 •p ‘2ë° Ä匧ovŒû†9‰A!†Á§QB´pIålí±ÀÑ ªH G¤”G@ 3àQ ŽåÈP pð(·"P'u“ #Ç"“*ÒxÃu/rgt|7$‰%ÿ8Ì:©…>–´1ø‰«ò@ ¶%qg”7›€ 30gðRùQÉ^Œüˆeà®Ó Q÷"§ò2Ò '„Ö]ÉØo9i|Ëx¿t< y8þPFI 0 G¶Õ"ДOyLðÀU•nð¨°'7e×À,€8°/V»{"‹2&øvk™–6y“ÉC imvƒ7õC B‰b¢ ,P~Ùž ‘IŽOã¨uÒ Y²ø¿_¿°5àÀ* ª@*° 0¢'À(S•6“›ùb8‰Œù÷œ Ñó#eQ")†ûÐ yö€ÿðhC°öi9P€M@ŽLbE\Æõ:ÏcæC x*À?02%¨`%/‘®ó› SŒŽÿ”¨ ¢ñ©E&G³QEbæÁ ¤ |°¬Y¾) À pK0•ñÅ _puô PÐã<¿E 0•`ÒC‹Z´˜¿w(Ô٣əlÉ ìÃ> Yš’70ÁïpÁ ‚? •°|€ ±<ÀŒÀ °HÀ ggŒÖ_(VeV$i€øq ósjz~ å,‡ sJ§@ê™aÎè(Da<ÉÃòðøpÐ ü£A ‰$¢|ÿ`pÐ#js È€ ±b ˆdiÐå*/Aa£„b "šwº b×–À³Cb6~êΨƒÊhyF v€°$¢}à¨j©-ã’/AV–u8Ù´[ªÈn‚”E$&ªÛ‰_ˆ§$­vZ 1¤ f6Ö:€IŠø€¿à¦˜€‚ ’†¥ZÊ¥ pÇÀ¢Çåm’vPÉ…0§£ê¬•3­Н>ú£yê Ècy§Ó)œ˜Ú¥n)Ð *´Pô0 ° °U Žà: °YðÊPû³5äg½À±…†\ö££7*§Ôzª,Û² Z§n°ÿÚ7"ÿá— M±6qÒþðWàÉ[‡#²‡£gh` Àuv` aàC P=ÞÆt’vš†f[[t8Ú` ö8lféœbÛ¸Ò ¶Óé¸h™§×Ae=!ð°ý•g‡Cµ gÜdNÀ?0bàx Òp=þSRk”/àD9ÀEz9OBàð8‹4c¯3‹ª¦ê²úZªa[×a—K™»¹öi[Ù·P\$ºiKQà ºa­ûº@»ÈÿK¯°}T…ß`ž ) œ*}¸¸š)¹^{¼«ªó+¼Õy¤º”7i æ7‘Ê•Ub€nP·w›·C€} ;Ûtà0U` ±°z]ð ~I äÐ ,°½è» ¼EŠ¿$\ŸY“m‰…hè@ý+þ°Ëš–`¿°nôf0•OÐJ[L›N ¯±P«¦PXà:h9@zï`®°¬ ŒCª‘øµ+K¼V|ÅÑê*aIÓÂû@ Á ¥<À¡Pkol PpkdP ‹ A´°±MQÃC|8[PSжBØ 6 Õ › R ‚*kŒÅû¬ôÿkÂX\¿G¶cxÀpÀð L´C¥…¸[Ôl Uß܇ {»tH$°Ÿ€UÀö *<ððÝp2¾—²[ ³‹Ì˽ÜÈŽ¼¯¯Ú“—h[Á0 C €9Ð ²»P£âÊ{ôÓ›t,»DvÿC&OÛW@? ðPË¡’ËžzÈù:¼[ ¹'̧Ç;ÌbCJÁÀj5¸ÌÍü̽ðRa±€P04 Nk –Ð HU9 BTõ[X9ðs­@æ|Î9ñê,HŒÌòëËŒü²Z¼¯Ù<aÌ¿`Š~VŠ9Ä·ûbfpeÿ¶`h¬c Ð u À<  DÆ:ÞØ t¨Š?# ѱÑäÇ\­ Â(,ÒíìΉ¬Èð\yþ*6´ À õÛU9˜.° Y$aPg€±0Cl8p à>Ð ØPqªˆ}}ÝÐ"¡Ô0ØL ë°J­Ô*ûs80€¬À·¯“›ÕЙªTm¼Õ*³bS 70Æ&•R¦$!°¦x¬`[i„k|}=   ÝÓÖÐÕ9žv²ÔK=ص¼ d@c*\«b8¿yŸº"4)Ï! Ù‘Ï¥eÕ%‘ZXn40) šÐA°¤ÿ´P©Í×›Ð#* ‡ äM¤ô›IWXWæ‚MؼýnÀ ÌH«bbÑ·VË£=Òÿ àÐàU½ ¶ EIU uLTÃ70w0À¶„«q2© ð™à#ª€°´^l+‘7 ÛòMØè Œ­Â_†Š=ÝÜ“=à]Xã6Ž‚ÆŒ @UÓGUHF>P0Ð ; ÓG ¤ CÀà Ðw ©Ð,­@0 Ô€ä7 Í ‹pÑ€Ñ ÄðÛÔ`…ÍbäÐ Ët­Ð-tvãt^çvn.X-ÙÌ=§C ‘IXvR9˜{ iæp~ÿ Ž0± à‚à›[cë}ÔØæ<à0æ‹ `œP Y¥(„²~xnØWµ?Ç\‰”ÜÏýˈ|Õ÷»Üž]À ðФ9@Q•GK$Ö²T‹õÝ …µ:ŒFöC É  8@X¤Ô‡PðMËÿ ‹€ÑH WðÛbÀ©üE8yö Ô°Mý®®ÞÂY\à´.ã0þÎÐ)›¡7ÐäæU  MÐ+hl@‚@ ¡`E…ƒ´F¦ä†AÀ‹à Ôÿ€x@˰Õ` ¸ ¼ÐZã¢^"µ.R=ÄýY;í~‰ïnÙñë±.ïsÿzë MÞ{¹< ;’æ7 Ç`Rµ Tuègj¾@hà ÎbÀ|@ˆí·Û Ô‹ ‘  Ý>¡¾xÜ3R?¹- +ªþ³ò“·ö‘ óðÌ j—¥1¢Ø 9¸Ðóp FÐ Tå \’DÚH³@·0H4`-ÀP)i Õ Ò°,a>æÿP ªú½%†3ÇïÊ_׳<˜ýö1îö.ïÜî.ó“$÷ö@÷©¾Î[{GÉÐï „/¬½0í‚ ¸e£ÄEÏ&Ò  ±,_®ˆ^â<¸Ú±6…7[Múô^ýÖßò§_ú zë›ÿû Þ¡Ð!Ø÷›?ÿðk`R¼eô2€=îšb K?f`C 9Ð~лø ƒƒa³WÐ\,„±h½+ØÐaÁ_ 1´÷nÙ¯T+ÒJËœ=~ú@ò+ÈïßI”)Q‚SÙÒåË–,aΤùOfMœ1sî¬y“gNŸ?iš’_¾|&}î£/Z¬"<0б½ ’Ëqã 4lˆ‘Q¶¬Ö‚´¼ÒÚÅFÌŒj@åÂkíƒÅ‚EŠNä¾#÷ëãà_´z¥+ø®£B{½vÒhð9Š!‘"µ—'Ñ¢.A‡V9štJÓ§g¦VÍš´ëœùæ ÿêo¼^¿\dè¡áD±»¶v½a–X³2~Œ•<–37ÇstòBļzÃÕ)M¬Êw‘–¹w9ÆêE -½‚+œçžªaÂ.Ê¿¿þŸüJ@ž|‰¤‘êkɶƒnˆÅ–2<°Á9Øpf¼_r(ë ep°“°ÞéÅÃ^z)®—wŠ»Á…º`¨D‚?Äy¨—4–“&"´â£%‡X~‰<Ž#')êÄ£øš)p´Áo(•dë¬5E«ÒÊ+?˲´-WP6“þ!)¨`œJÃÃwtaÆ~q† ]bO:ËÊáiNÔ­s0'ä@pОI²sˆ#ÿÁ¤)²øÈñŠGr‚”l9{24ÒÚDL1Æ@¢­¾û´DI¯Ó ªK/QÝOU›T5µ%0O3%xbGžæhx§-6Ýdc—?o8ÓÃF”A«<ݳ >ƒ½¡…Lc!ÔІ$ÓŠkãsl-„‚’=ÉR«84+zL0Í6›2?Y :©¤×\eõÕxåE•^£JBÐ'Žö!©¸#œ°BeRt°Ãh±³u1+58–C2H¡ˆc/! ÙXx¤eÇ"+í貟õJZÉh)ÌãIÔbsÝÿî—Õ—ð…Rç/góI¡›ƪ†Ì`ãW{‚ Ù,¯’SŽ9ÿçš&®… RPAjJ/–÷4º¦’I*‡£ˆºòP°Æ|¤ÈØ`0ñ†ñ ’~ì³ïÉŸkžùf¾´hž¹|KŸBJ©”úåDZ„âE]œ1¡öæ¦%¢¯8d;²Š5¨C³X¨äš$¢Æ!k¸æzVØ YÅÏõúee4¤Ûã´<Â[ïPO’òoÔPB3â<ñÂuZþÊÄ{N Wxje/u #½¾es@á][;Õ’!‡Ô’¦!qþ k „ÈGC/Éwìì¤8ò[~¼˜ñ†wxxÏx Sh¢‡%Â5ï$D óøy8åzåûVBÂ;i)I·sÐÿÓn0òe‚ÈDAZ7‰†pmb Ñ íÄ×¹ñ™‹< ÑG˜HâwÝ̆3J‹2Bog LÕ…hÄì£|^kÏD˜3¿ ")>·+–b¼Â$½HXŸ=®!„köø^ "âÄmGÒªHbPT’¶+)8Ëa«$%màìˆHä×%? P%Zb’¸ç½ùik-œcc|2!IX£’@&ı‡õµO”ˆŒB^Ö‰Iìa%4Yº’Pp$Gzé‚LRÇ:.0K®¤OòHA—vÌÒ.[ÕBR;ðó\µ0×ÛAíc ¡D%í!Gr²u®û7dÿˆðÁu°D'Ã;%2>GÑF9ƒ×)‘?›¡‰l˜äNòVHÑ/ ÈçéP˜zI¹QºOæ8è÷£›‰pà#dCæPeê)‰LLÒ™…‡öÀL¼üÈR¨,j|î“<6ÉIÆ "/]R¤ÀS¥-]éV{9Ä™€õ(zTMëiSœêÅ+ ‘FW8‡–Ûy„Qdld|*ÀB 8ŤŒìAIÔ¡Ñ+½Æ;º²˜ÿw¸‘1WÅa“`Úã!&+µGKƒ·YzžÊ­rUJs&Ï™Âtq}È\ŸiW"Q*¯ÏË׋!üÀCXå3F6§F´Rj‘+à2%„”ýÇ^ZJ³Ù§!ôÙlgh#֗Ⱥ/uÉ K[*´rwùbmCˆÔ#žŠè?ýEPQ„ËTuŠ!G*à»OqŠk@Ý`àËÓÍ­eÝ©sÍÚ·ýЇ6y®¡˜GËY‹'¨­s-QD-¸SAŠƒü™ƒœ!åO虼mx@$m œ’½L]½3”cÚ)£6Ñ5ÁêU›¸\‚8ćüÞ0{DÔ3ÛŽ¾öíQêô÷#2;Ä{çIæ vT–tÓÇ|þ£+]i7‰Õ<„Igï³¢¸ZATæp•|éŸÎ⫳ÍMqŠA3>„¶æí«^ÂÕ±;!v“bùŒ‹ŽÂïì¬Y9!ýG›Ý0oµ ôv¿Jnû1Ü{ o/‹ünxÇ[Þó¦w½í=osê-ß÷–4üýo€\àÿ0€5üÝ °Bàþf :áojÜà ÷w*@ŠTPüß?xÂ5pjt^y hЊÎè;¤ž½7Ë-«U•ß»ÞûÞ7ð\îr™ç\ç2ò†Ï².øÛ²æ–;yD’9{ò-ßù–È=PÒé9íѸޡj­v&É‚ÔõÌô•áž«´3.ºÌ MD¢+ºÊ8¹²H³\öl,¦àcBm¾Bʾülâ;DÔ 'Ú£Ÿ&öQ<Þ :ËÆ£aRJVêR}Æ2&­5]RhÕp;´‰’‡Õ¾öŸïDJC÷jäËYZ€¢SåÑæîŽ÷¼Çø!DîÜù5Yü(¿€ÿ,VŽe%$azügk†h›¬\‡&½˜žL)7Wøk;ƒ}ú^¿îF&÷›îý¡Žë¬`:Èh!tt¬tÖ*ß$\Kú¯É£~£iýŸ¨žïwW£™tàñʾÔâ0c+¯©ó>½8À[¶òŠî›¶‡˜6¤àyø±Î°>’Z 0Y7Ò³•ÐúµÐð® Ì¡[# ³¶ë @ô5-C@DÀ†ˆAÖb@G¹l6¾z‡ Œyh¿n3-ÜÀ¿!AÑðú A^Ó²'q—!‰` lAü< “4î£AÔBœZ:¯Àˆò;º}H¿XÀ‡ú?÷;øëºÿ?k®á»Œ4*d»‘Ø?5ì¿ {´¬Â=Ô¾Õ‚AŒ.D&ŽH˜ÚÙŠÇè 6»=õн_Äû½ \묿)¾'9ÔP¾û­æëÄ7##)K “꛵EÀTlÁd­A̧#ÒŽ&²”Edƒ)¨Â3ÃÄ«D½.;üà‡•»‰ß ØÐ.vù¡=s<Îs<ÏëC?TEÐk@ ćDΡXHƒ‚R:ø"¿ë9¯Ä˜+Uê­Ò¿½Y«gŒ¿W[GKL¾[+'Pì¼°Š¥°ã ýc+{’ž%l«lŸzE£D™«!ùÂ$Y¶óñײ»â¶F#Ab¼‰ÿ]ó; ô@z\ t:²™· #ÄÇ~l j4 ¸ºFlœÁÛòFºIHM‰†ÜÁ‡ŒÈКÈuá‡Å+­›àÀŠD‰çêÈäãL)‘ÌÇœ(I ;IÊÿ9@,,È–„½ "n„Iº¡øJ…¢"G«;Go“> K7v¼ 6,JÜ!Ë’ ¢L»êºGT,=+«C~D;¸LÉ+dÅ-¬J—¼-YœÉ$ù–Ž™ŸÁÓEO)Fkœ.Pa·´ÍPL19ÆÇÀì²¼îz¾|Ê;ФøG€ÔËМÊ-#ÈÒ,¤ÄY(‡¼c˜ÀÛˆXXÍÿ¼Í¶J>! 4%‰Æw¡:EÿFC¾ÎC'ŸÑ¼\º3+ÜK>$À¾ôËîsN‚lÃË»C ÛÇOŒ0²²Ëü‰®;;w ¨ŒÊU\NÒ 1Ó4Oç|Îò‘ΖxÂbJ+Ûªû˜B¡X7ïä@i”Jñ¬FÓ;MèLÏèÔÇ‘:Áj¹¤?ϘÏ=²"tLÂÁOÑÍýTÉí£Êÿ¼Ðõä þ«N»¼N)¼íôÐ3;´JËœäDÑ?ô¾ó4@-$“ðLö”¾R\Q|¤ àÌ<¡i§Í2ѢĒÊÏñ¬)$HœjQW|Ñ%’?ÞT©vœ'0pð²½§¯ª–jÒ°»ÒUÑ݉bkN¿DÒ„Q‘¿ÿÅRý %ð$Ohd’t{S¥ì£v›På4Ò}2Ó#UÒõŒ#À1·Óˆ•AÛº!•>¿ÑC­Ç;ÅS …ÓþDO ­ÊèT#É QŠK%Ò,MÔñP§dÔi ON%/õSJES™YS?rÓù;Twz¼W[F]jÔR O=&>ÝSTM&]TQ- $‹ÒØ0¾às®Zr?áÌËæñÎ0ýQS…ÅImÉõRAU š¥é›µõQÓ{ÊÂqVRÕÅ”Ö2íÕq¢P!Í¿”;:¼GdÄK6Wý„Ô\•:t ÄUÎ[ÅÖ)a‰):jJWÙ9ƒ=X„MX™ë·kX‡}XˆX‰uØÿ”SX‹½Xy»9œ³7ÅØz«Ó~…Ô½×%ÚU]ÍWe|Ô= sךøº»ÄKquT0-OVlÜW•%Wœ0NË£­PpµSÐ,•á ^á~ážáþý0 â FÝ!&bva.bµaàîá ÖáfbŽâ*6â#~b$†b,¾â.æÞöb°¥aæâ/Æáÿ26c-Þâ5nb%f\1c'vã,–â)†á0Žã¡Õã=¦â<öc4Nã6¾c<d:¶cC&ä$®ãCd+æc9ddEfãFvä¡ðXLÎdMÞdNîdOþdPe…]bK>ãBNä?>åGd!–dVneHÎÜXžZDFe[^åW¦äJVeSæeRöå_^ä]æaæIäc.f]NffNebnfgVc8žåyuå[†åRîå9Vfd¾flÎe9Þæh^æq¶f\6ærîæs–æiçvvghöæ`fç>†ç`µçH®åu~ãwFgyžgrÞç€þæg®g2þç~¦ç{ögVg‚f膦æÿjÖgmVhYÆç|¦fNà‚Îèlh‡®èiné‘&éx~hˆFét.é”fé–þèp6g˜Fhƒ^éšVé“iŠÎiŸæi—Ži›¾i‹¦åž6i êˆ~é¤ê….ê‰>ê VjFê™–j¢†jãŽöhŒ6jæê¥vê‹þêŸnê±Nkµ>ë„Öj±®j¬Îj«–ë¹~ê¾ê°~ë»nëºöj³Þêó…k¦Fkœ&l¶¦ë©^kÃ>l»îk¿þaÆ~l¨Žj™FìÁæëÄVlÇ.ëÂÆìÌŽlÎîlË&ëÐæçÑÖlϾìÓlÕnìÏmÖ¦jئìÊvíÖ¶mÙ^lÝ~íÿÝ^íÙ¦í®ëÚ–ì½öíâÆmÒîàVîÉlÈîí܆nâÞlá^îîÒ>n” îînïþnðoñoò.oó>oôNoõ^oöno÷~oøŽoùžoúžo˜ VÁoTÑï.áïþVÿÎ’p/pG»¿’×wðß’W '  ÇpyÍð¢àðŸðpžñp'q7ñÇK߉lj¯‰‡qgðüžq·qU‘VÑqTáñ.ññÏq!ò ïñ—W$Or%_r&or'r(r)Ÿr*¯r+ljH(Àƒ“Àƒ0ë} m0€“X„ÿ/×ýÈòˆ„š1€àrÕPs6ÿ/óÓˆ„EX 7Ïó0sZ%Óo~8øó†XóÐ8¾14ç7oq< ýös@4A¯t0 DWô©ô0 L“HïðDGójÐòKÿrT¤ƒTG‰E€óR0ÀƒH<€U/€6h.X:v–v<€(tiÐõA €Y€|X^OôÐȇýÖöHphöH8€ <8 q¯†Jç‡À<öŸ€”¢¨†¨ôj8½l×ïB×Xpwr7wt'€j(tvwwxç‰ÿ8€jˆø‚w}ç÷çõlgw:~¯øûÖxc sÊsÏwXÏs{ý8v< ó4·ðØ‹jÈ0 : ùÐІÀ›‡`y—VqÇo? øù“°^XOùÀw{Ðõ”'€9߉p§÷“Ø÷À÷Ø!3Ú¥o®©—5ˆzv§z-?‰ÀoX„­ïúœRÿr·/û²ïs_ç Ès~€¦ÿ˜o{©ºÁx sÅgw—X„{û“˜ú;€|ö§—{¼ 8ü,W€wÌÿÍÏ·û.?€£?‰¸yÿž ý#€-§yèwžø{~¨öïùІq}¦€Ö/úÛÿ‡Ü Þïö€H˜y§þx/çóäWþ2€å?t]þé?)óGüˆ2W%#`ó××{èÓõj(úÏÿ‡«ˆ,hðŸÿøX$@`$'Œ@š´‘T(€Å Ðù‰€@< ,8ÀžÈŠ(S0ÀD„-c 3!8‹ì©m&O‚$ÿiáÊ/“<éò€½pŽÜI•Ÿxþ±tY­(S¤T(ð4_†d¥ÂœÈÖíYmx Ø+ûoÁ|J , ÿ.Õƒü  À×À%6hà€ÇŒ `®L0²E†{¸TÛC²*K2YÙê?:´AœI RiŸ±à€²èÒK ¤s™u׉aëÎ'öíÊÜ <€\0p…‰J(ÀfuäÊ r(ñ€«’†€ój‘Ðйtà‡öŒ_àY*=Dt@Ûâ€|ôÙ÷B„ @’SgÑ1]i° @gt0ÄÙG¹ÕUXGZ-ˆ›gKýšFbèt·M÷á!R•Ïcœ-â¢B&jTYöqv|‘ðHQð Ñ?GT QÒAÛ"*B(ÐM^öÔ•Òlÿ¹Ð aDt÷O•„ýÉ™ù`@G&]6Uàì$%cse¥yHÐPÅ…†›å&Š@gRvbiÜŸ{Ðçx⦨kÆyEx‚ƒgw˜RÔ©”“èœWªº*«­ºú*¬±Ê:+­µÚz+®¹êº+¯½úú+°Á ;,±Å{,²É*»,³Í:û,´ÑJ;-µÕZ{-¶ÙjËjD}F¶-¸áŠ{-ÄYZ㪻.»Ç–{.Z0Ö?¨´ˆ›Ó¡Hc—BV€uÉ;V·àÐ’uÿìU–6bR×.ÄO[.ÀPÔ 0À{ÿ>vñ¡\M¹½ÿðPÆ¿‰X‹àÖcpq$0ƒ<¢Ä=ûŒl¹ðqQ¤&@rFS–ÞÁø­ÌöкÕíQ8¾)´4ld.ÌÀœÓÏe›-ì»…@TNè2¤[ O2Ý­­°×©Í–stp›×g~ø®i“UôG %-Xxhƒ.[€e%M¹-9¦Ñü8Ȩ þWr‡æl.â©«.«ân8´XçÄ1k“1Ò`òÇ€½þñXM!†îX)¼Ìq®¾<ó ÒQ×"„U9hl(úæ™Ów”yªh¾éUž&=Ñ›¸}Êsó髟øÝë»ÿ~´‹À%üõÛÿ?þùë¿?ÿýûÿ?(À°€< ¨À2°| #(Á R°‚¼ 3¨Á r°ƒü C(Â’°„&ü!ƒ(Ä!±ˆF<"“¨Ä$" ‰N|"£(Å)Rñ‰ð ¥Z•EVmqU]¼ÒÁ«0BˆŒø1ãaUÅ5²±N¼beÐX9bqŒ¯¢cíxÇ=òÑUnü# ­XÇ>jQ…$$ ™HD®*Žt#ƒGI*r‘‡tÕ$ëTIUe²Qj|$(©IM2’“›c)Q‰ÉT–ñ“¡|¥ ÿóÈÊž²•³Lã-¹ÊWÁ²—M¥'s©ËKZ’˜Å<¦)…Y_ö˜<éä3kiKczQš´Ü%6[ÅLX:3&Ðô¦5qIÍdf™ªç•¶ùÊnŠä›í ç•IIy’ÓÔ¦:AÉθ“Ÿðf5éÌr’Óžÿɧ>P‚t¡çCÚÐF"Ô‘û¤H?1úOYFT¢ç4ç=A ¡ŠZÔ£!u¨H!šR•¢t¢.M'Iyщd”¦gG9šSœ®4ž¼Œégzšõ¦õì©I¯ÉГ¾t¤@…dRYÚT¥"U§UåiK§ŠŸ§BÕªYýèW©zÕ£Ž5š•*XÓªÿV¦®­l}«XµêÓZÕ u%È]ñjÔ–Õ¬K…ë\wJ&¶°†=,b«ØÅ26±õ(H^MµW¿öœgµ¬`ùʪÆr¶³žåìcõzÙwŽV£¥5í_ÝWU}¶µ®õlh%{Z›ÎÖ®“Ålfq[Y‘¼¶·¾=llYáÞ–´¹ÕmXW ØÀnö·Î}mpÿ1\éן©U-v™+ר–æ¹Þýlt§+ÞêÒöºÚÝ.V“‹Ÿï²·±á%oyk]ór·¾éEobÚ«_ÇB¾E­m`úÞ·­ëÝ/‚ û^‹–ÀdUïy lßC(Á ^°ƒŒ_ÍBxÂ^®‡“baÿcX¾ó5q|w{b§¸Ã•ñ~KÌâo˜²3þo†mìâü¸½2Þñ‡ALaå yÈ.ò`{ÌÞ×XÇM6.Ši,a¯>™·Jþ.“§Le-™È^Îî–‘,â+{7Ëbv2—9\åÍgŽ ™Ë<à(ã˜Îs¾±mL\= $ÎÏ5ó—è0šÐ`6² í|ç5£VÑ Æó¢-åB#ºÍn>t¥ è_Ó]Þ4§c"ƒQ“ºÔ¦>5ªS­êU³ºÕ®~5¬c-ëYÓºÖ¶¾5®s­ë]óº×¾þ5°ƒ-ìa»ØÆ>6²“­ìe3»ÙÎ~6´£-íiS»ÚÖ¾6¶³­íms»ÿÛÞþ6¸Ã-îq“»Üæ>7ºÓ­îu³»Ýî~7¼ã-ïyÓ»Þö¾7¾ó­ï}ó»ßþþ7À.ð¼à?8®ð…3¼á8Ä#.ñ‰S|àu†´lsÜiPgºãŸæøÇC-<‘¼ä&?9ÊS®ò•³¼å.9Ìc.ó™Ó¼æ6¿9Îs®s<DM­òùª€tX ]UE‡ÐÑ‘Nô¥»*éÿqúÏ™õWAÝORgUÕ=“õÊl=1]OÊ×Á~«°ó„ì#¿:ÖÑntµ¯ên{­Ì~ö¦³ýJrÉÝ'’w½×]ét‡;­Îä*Á³Šð…‡•áW•ø.!¾ñ¯Z<„ yR¾ò–ÿà"Ît±ÅЉhöÑp¾^¸Ï @°àîöx“˜¤›MU,Oè䙆Á¾%{1ýï+Ïžü£$'¡G_LP6Ì wö)ÈÂpã¦Ы";‰cœ°ºdE. ÁC¹‚ŸûTÃ>‰„VÎ8µô×§ý¨×:ê<_ tÿ5óÂCwÐ̸“çiÃ<ÏÔÈÆY †CTcàçD‚ ì_ÿ%†V@ D tҡЇGÐÁ¾_ü%?ȆD”ßNxà$‰ZXÄîð™üHA„`I°…6˜ Œ´tŒIe„HèaC¨ÿ_RHa€= @w´_‚Gx LGitJ5ÀjŒ„Ù1„=ÌPdÌ„,`”Q `†`\¡vxÆþƒ`ta„TÆ¡ S¤I\{(áDðÃÜžtÕHKС•ÄÄ"d HDIfÄ Ù Ä–„ÁÄò!CDY€FVjì…TèžgàZ¡¶Gí VŽ…¤H[ˆl¨DiàH8FDFé•?azŒÆC Ͱ"~pšLÍLÈbŠ”D,F…K€bL|KY4cb¬"A4àþAÄ„•˜aQøE+Î…ÂäõxXÄ8BßX„EÀ„sàPQÿ…Z$†4ÀÄ|P£gàmð‹Š€òhvô¢T†(jCò ÅQà‡ÕäŽü¤Äý%ÅR4c:&†4 a2FdHX£I€2ÉAXI>̇'º&b$%abL—$Lkd!a„þƒ4„£×ñ†od~DJС1î#ZˆÆöSMŠ#qGg@Fðdi,8äCûå&òÄi¤÷ÁdrX$Ù0 VV%EXcFì„`l†FÖ¡HF‰V¦${€£ð„Ö舓xFFtʈ"^^ @ÖËVØ  Å„¬ˆübLˆC àd5¦Ë|ÔÇYÆ„EØeVô%KRE ÎGKLÈ` ‡„PˆT†Ì‹pJWJ…g.&Hô|ä4š†$†L hn#TVߤàG>XŠœ,Êè½IœàXn‡À”£9½¸ œüG RO5| nö_š”á› ˆ¦(§qŠoJ›dçn¾eHÈÇôõ r$O¤ @D”x¢PD¡ØdùÏ¢!ù ,Æ}*‡"""***777HHHVVViiisss{{{V«nr–|x‹yw—e¦i‡®eˆ±xˆ©p±z—º“d6œ~¦[b­sA«|\ºM¬l|§yf·hu»r|ëx9ð{.Ü[\Ç^e×]aÎf_Î~AÛkMÜgV×vLÖwSÉdiÅktÈugÊrxÙcfÕmqÝvhÙxxæ^MãWVèfIäcYësGèwVãfeåsiäyx†mЇs‰‚|—˜m„™vŒ™}”¤m«wˆ¥}µx…Æ|…Õ}‚倹€Z§Œ|¯v²Žm¶„uÖ€:õ…æ…+è‡4ó‡%ò‹5ò’;̈H̉SÎVÒ‡FÚ‘NÙRÍ’eÈ›qÔ‰fׂtÐ’i×–xΤ}ߣiاwëˆFë†Wç˜Ké›Wð‹Cñ•Gð›Vègä}ê–eê•wð [å díªvî±|ð¤bð¦ið©lð«p‡‡‡‹„™–…‡†™•••ˆŠ§Š”¢ƒš¹•‹£–˜¬œœ²… ¾¥º¥§†™¤˜˜½Š¼‹—»•…ªŽ ¬ž¯¬ž°´–¤§§§¨©¹¨³¿¹§¦°ª»´°®¶¶¶‚ŸÂ‰£Á—­Å±Ç©¹Ì³¼Ê±¿Ð»ÈÖȃ‰É‹’Æœ‚؇‡×‘Ú–‹Ô——Äš¤ÖŸ£É¥ŽÂ¯ŸÑ©„Ô§”Õ²Ó³–ΪªÈ¬¶Í½­Ë´¶Ö¦¦Ò­²Ý¼©Ø¸¸äƒƒåç™ˆå™™ê¤†æ ˜åµ‹íµƒì¶ˆí¹Œê¹–å¦¦ç¸§åµµòµµÅ»ÃܾÅÅ¿ÙÁ¬ÖĵìÁœêÄ£êÆ©êɬåÀ¿æÎºé²éÌ´éϸéлñÀ¿ÆÆÆÂÃÎÁÈÏÈÂÂËËËÄÌ×ËÒÚÙÅÆÔÎÒÕÕÕÓÕÚÖÚÞÙÕըרÞÙÕÜÜÜÀÐàÚÝâÝáçäÄÄäÅÈåÊÊíÌÌåÏÐçÕÆæÖÈçÙÍèÔÃèÙËåÙÙôÄÃõÜÜäßàåàÜäääççèéäåìèçëëëîïðïðññîîðïðòòòõ÷úýööþþþÿïwï¿{÷ø)\Ȱ¡C~óJœ(1"Å‹-^üDZ£ÇÁI²$G‘&SšD©²%H–.cÎHP༛8sêÜy3ÏŸ@ú J4èP¢übz„©T%Ó¦+¡Æ|*u$Íš:×%K¶®(Σ^ÃöKvX I¡R­’mʵn;Â{s὜ÇÚèmc,ìÙ²Fûõš¶é\·‡Ù&V·$¸Â6ç5k‡×.½Ï¼þÌs3gžuVºXjiµ§©æÝjÑ¢…!ƒ*6*2abëÞÍ»·ïßÀƒ N\÷8É3Ç^m¼!Oœ™ó 9îìdyÖ¥Þ‚&hX‰7aá1sÐaÌ…–åN-²Ô( : ØYz Æg"%Ñ?óàÙg!þÔ‹,µôB£,~¥£‡<žHâ•X¾7d‘GÎXc-Q•$O5FI£99 X’ºô£›AÆécŠáäŽ6†`wʂӒä¤9eŽŽè£œ‡.Ø AâT‚É’7À° 0àÀ†1zî(½¸CN™‚*e¡=¾÷fK§¢z v׈£ ¨ÿpƒ ¤‚ 4Ø@ŒÞä%“™êdž²üB¨¨è‘je¢Ì6_?”„3N(,Ñ À0 ¨ÁÝ.{ÎÓ'žÁæäe-Æ+*›†šŠ¨»þ3Î$áèS#@€pà 6pK„91Ü¡‰ t‚ëØ h0†ÜiJ\ÄZ_NĈ \Â ÐŹ@Æ bñÃmf©Éb*hAôhP‚MÔb_h`ïþ3q= L;¹c%p‚Çy˜¬—tŸ ‰˜0Æ«#éEZ ¯È€Vx„;&iØÈ…â+Ê5&` b&avrH"2§ÔE§¨2‡Î|¦AÄ5Í!ô´:Áh1ÿ+¨–ûcÃÄÁOZ£I¸Bä g2™‚´`è&JÑñCœ`# † ‡ÁuLlÛB*¾ñ)&ÉNú…4ð8=L¡ ¸Æ3*ôPv*Ó_<^<ßSŽX) (Uˆ„u&8ªÐšîÄr6ÊÆ%(a‡)(Ö˜Œ¶H·S^­¢:}'] £‰GÂ@ƒ(¾®gF˜à0ØÂ ^P,§šËäàÔ<,±‡+„áðCæ`Wÿ´sb9…§XÓS|XLbc ö5Åb¸uI9¸ìw"EœÔhxü´@…2ðg::ìޘɘŲ¥oà‡&X)ÿU-ðDlJáVj¨Â'@AqtÓ „"6Ô€ ¢ÇV¸ V˜Â†KÝê9ÖÉ®v·ËÝîzw Câˆ&†pƒ¨@†£l^M€‚T# VƒºxÒ§ éÕ¨„5"‘?ˆÃ˜Æ C^4¼ˆÞ0ƒ«Ll\zÊk¨ ؘFgu3Zá NÈ0ÞÐŒÂâ„Êed;ÄN²ÔÆü^ÈP¡cö¦ˆemU Ÿõ4)úð *Á ôŒš2¨pž…&ÙÈP@jí¨!a|øï<Æq‰J\âõ©:Xñ½ÓÚÔÀËDpXì–ˆÜÄHØ`’'°µ/ly¢ÿ3ð€ŠŒä&D!qƒ:yBPƒV‚œ@áNf¢1Sñ@Ô«ƒ³bÉÌ–™Ôå݈…,ŒJƒZDœ8Æ f€(x näXìe*NàNêEArþD#/qü2¢%šJF·‘à˜GøŽnüÙŠ^ DéM£¡ PØ^¨ßàŽTèen×è lÔ>Er»ƒ^:|è ´)Ì`]´Œ¥âè]ƒw*`A†Ý‚OÀYÎG†‚ŒìÐhà®ÃîøEÜ<8¨`«(„ 8”¼¬Øm¦ô¶Ìj=î…çm 6°q‰@ìqðYs` dÀ Gn‚(÷½ð=éKóÿ0 †ÀRø)(ZIEWp‚Ž”Î­« Ge‚-îö̤AîpG,þЀ ôé.¾ƒÑ€0Lø´y†…ÊCj`òÒ/†Š*_â³bÊ T!(Õ&¯á_ ÷‚ùQlÔ£ˆÀDq >ôQЈNT`Hऀ†£0‚2Œ"°ðª×°ûŠñScŒWËófºÖ-ðˆ…;òGOøiAEº˜Þ‡yÄÁ MŸwŒqŒTDi…óhªåú¨Éòळ7{Ù'öÊßíPÉüæñhÆZì²cºL¿†ÔëgЮïj¤2ëU˜—á– u¿&ÞÏïòßyÿ{ÒvwÀã–ì $],½óÝï Àƒ1¬.>Wú1aäÃP}óù݃§ÀGk §%¾òC-a±”žà) #¤À Ð;°b`JðN Áƒ Ó'BfÔ Ø+ãC.T3k¦v–gkR÷?tMCPÊ% æÀ2r€V°ÀO`@¸|YÕ‡'SR˜´/}T>¥DGèrs1‚á×sè{náµðð=6‚5²h i` Ûswp bàC ¡P&®P~t'-#M×ãJÚ` XÖ„²–si'~U¨‚q²ðü`i´§„ h -sOÿÀ?cðy0Ñp&€rHhi/€+ÌA0A  e"Þgà§s~Ø‚Hˆæ=l¥0Æ¢ˆj€0Rð ‰b•x‰6˜‰ãƒ0°àV†ƒß0Ÿ )ào* óµ‡RÈŠTØŠÖ¸X¨…yUaµP>‹3iðex†i8‰Ð†Pò†T`§ Iå¿0lÝØ ,À(vŠ'ȇ‰ˆ3¶SrÐ æÅ˜{»$.rpŸN„V „9@„ø' Åw VN’Y&Bå"ñ Ð ›•Z©¸C˜‚þØhØpÂÐ@ÀFg„ÆÔJ†gÿP¦ÀR ˜¿€Y5ÂV@5’ÁÕ {$ ÕÀœ % f÷},HÕ¸¦y†‹0{gpX,ìÐsp!ë@–óŀ̓W$@\ (`]0¡ AÀÿ@ÿÐ ¹¶d/ö1f…Sx•Ç“ Zi Ú Р‰ 3oRZ%.úö“š=A(ä`AãV%à ââ *`ÿz ^á$?ñm(˜VYH“få  Ó  µ°˜9Œk#j it€I5B„Ö€ 0Y†“žb8/À¯“¾â …P𦉠¹ÆUQ¸šƒ¹‚®ùšˆ¡ ®à[ÿ 0aÓf‘Ìãcg€f¶ð4Lb¡à v0Ð<° ˜É$AÖ Û) ÔY?RLâ 'yHÝÙ+InÚ€wñP\n58¸•.° Ã2b`h²I#ž€ ð>Ð@ Ø`M¶V1ªœZ * ê 0óã" ø˜”¡}x1RžcÐ/2;axРѣjÀ…ó£7Ð Ðzpœ÷i µ 9 M!t³€à@ °¦kª—¬PePxÝÃ4âA*W{ÚéÿX•zZ3Aõ`F¼ 40)°›ÐAÀûÿ¢0V £œÐM ˆ ’JûâAý´:S4jʦmúoÀ Ëð-œC7цL¸¬˜B ¡?Ú÷ 0p'7`+Ay×c‘׳Mbêo:Р >Ðt“…0ô«²°/hú© j à ;qðäyhÂ8f «ÇÓ Úp¡\†CD4àvžPŸ¡ \Ô°/¡0A   €¡  ±á 4°\Ô0¯7 ±! Œ@P! çÔ`]±¯žà s® Çñ]û± ²ÔA$¹†fž€ 46¸¥|àGæ WÏ* 0ÿðƒ°ob™ ÑZš ËÑ@Рİ8kÀ)PH_·´VKè+çóG­¤±ê­ß*¹†ÝP Kƒƒ-µ"Ö‚Jˆ£Ê «Ã:xDxR È  8 :ûÒˆpežš—ÿ ŒPH0X§c@{dî`F¿@ ,#œ6’.UÛ{¯Ú­XÛ¼6®÷  Ðl48¡°2²øFmP!ƒ` ¢,3‚•TýR^ApbiÊyy ŒP Å€ ¹0¨2”oLRHèeR§î0,ë¹T™’à6¹1FàÀÆ< Ö%~ôÝD Æÿ 6cŠ®2ð²‰7¾@iÐ Í cÀ} _€ÅÛ@ Œ ’  KFê˜Û‡§Eq'g ¨{™È¼ªÈ§àZ¹ëqqà ¸ÅI*68¼q²`½`8¾`³2}éB 4p ˜D&Ð ógÖP ’ ÕP Û°ÿP ¹†{¨J4â“÷A” A¹°©À \¤ºö,ÁÏÊŒ¾z=µÁÑcMbêÑ0–Ã;u²0=& /Æâ BÑ  1ù7NÒbá%ÈÇÄø€ æªWK˜x¼`Ç¡ÄÔë¢Ð!kåAÝ»l 6×C¾hÿbJ:é;gpC 9X€`Š7¡ ’@„ Øp{qÛ´XÇo⢠¿  aò;6x ¡"ÒšÐû¼wœgvÖ M§§: c¶“tM60GåBO[ —13Pk zÐ30ù˜à ,À ˆ9ž²uæ¢o"øxq+Ÿ5²€Â²!y—.¸Ç°<ËÜ™µJaÎæàÐp5ÌqäˇÓ1G•.|8²Ð oÐ19à >"ÐüB>ZŸ½ys=šxXgç"}µú1ÇZÇ’«Î¿ÇÎMÁ1k fà6à ÒD~DÅ–^²à ׄRÿi=2ÿÐ)æ=–ŒÉO£Æ Mõ–V,®ä%Ûú)ÁzÚ5 ÂÑÍûÀ¬\ÄÎ+ËëqFâ ʉ;6p¿0º ¼½ Ð-]ÅW\ÓÖ´0œ±(6´@.¬P å0¼_²/éÕ!(quÕ äPÔDZ¾½Zw‘¡Û*I¤THÃi¾Z9¶“r\HÅAÖ?†ÃÏ!ä'¡Ý¦Xå´> L7QEV&u ¬™i'¿@Êd0`};ÄØ…ß(Yß»†Î¿½§F,CÂkÝp>¼  ºÀmbÝ$”%5“Ta˜#McEn8, ·AA 9qG,Å® 0~«ŠÍê£0ê(³Êá¡áUc¼]'[Þ§`æ!ýh¨I_‡0çCŸ‡k.Ï=+j{7ÁI~6ð¬JhFâí+Éé n.ŸÝß­LI¡åó A…ÿ>¤y¬Øm$} c·> ŒÛºQn‘AA¡ –špÂDLÐÜÀ"A–~KA¦:bê¸Ô7 vßD2ÜÌåЄÀ%q嶮苞ˆ(õ„¹·>”þ4¦8~šþ€5àIó0NÃtÅÄ«¬˜µVÝG¾ÂÍå Mñ­â³.<•É*Ü+Þ½NiŽŽsÓÜè³@ÑH”` Ž@   }öIVNî-5žP |P Ÿ{+]a¡Ðx?è"îán ë!è}™ëù­ß«‘îmlç<Cý@‡s7‡_Ÿ TNHŽG€À ¬}ÀRp™¨Þbšçtÿœ¹­ÑSt\è¥á‚)qNÍó Î$¡óRañaýãÕ¹'£/çËIýø…bÑpGå4ÛàuãÀáMò âp Å /OÅ}ts5!®IëSí $‘î&F q?oÇ ÁöPAô^³¿Àço=8Ðá¯Ó).‹ð;!ïšPï÷îã0ÖvOïJ}mð‚/͘ûsãZëQM¬|åþ™KQù±lÕ‘ù>?悱/”=:¾0”ÁÊ};q Á— %eöŽe×;="(ØÝüÔñs‹qôqÎgnß7&þÀAÄû=°>üÉïv_¨oªÿ¬QÿÅv=°oíCð>0àD–\eŠõ±wK~Ò vŽžä#ü$Û¢onžk%ÁóQú˜óÎã÷ÏàA„Á%dØÐaÃ…ÿñ›wï @‰)äØÑãªR '#l…¼ߓɤ_¶2h>3¿:èªá(b+Gü“-#¬KÀ3Óš+$çìÓ¡þ®ŠfPB 5ÔPÿ` fPO`håÐA[Á“A©ItQHU%”PTÉ”ÐKuôÓB© Å“PL:5”hp¥ª{ÀzM«þjµ5«þ~ÌJ×]oõõWYy¥ÕV^qöXd“UÖÖÙ–üH2+| § iʨh"„6Å&¡Ë–J‘63Éc•q-5!ò®îÊË·ŒŠÌ“-·„Ä+Î?ÓÍ÷?g1$Kó>*¼±0©ò«âŠ7ß”¼Ý#{äÏ59ŠõÏàêØåüöu®_ 7 Å3èPjØÙosÞ¬3ÒÈ“%ǰœvwjšE*Y€ù%–Y_›±]ÿ`îc°àý§e…fEYÞ5,Ë*ãÙ ¬F{֩ͦ§žßŽ0n¹‘öiC2[áÐ#hcq˜©èÛUëµÎÂÈF’ò‘ ùêÛÈÇíªèÝ­'Gkë;NóO%릻n¸AHÊZ3©2ë¨ÊªÞ‘©+Úñ¢·€Ì«M½õ*+<#WÐ÷fáÅ#ÙôÑ·ùÚ~°s¹?½#çi&ÝôPß’ÉÇZ}pÌu#Þv6!Ôš.o.Ò¦w™ž¯Ü©v¿x‚Ž?sö|™;úçÂßÙjk!S•½u¤o“Æ´¢9ÂYîpîJCÇz€¥déS’Ü…®Â]®q”™ÿýh¶¿çp›T‚&4ƤçhIS Ó€álDVb»JŽÔ¶µ@ͬ}8òÚ3Â5é69¢Ý×&µôy°_"{¦Á) cI ¹ƒ4ŠU¬î@Sæ ô‘y,‡™•W¢6¾Çue€2[tó²‘í°~ùC?²?Ü€²PÃa 6 é 3!‰ÿNR.4Y$?jÍ»jÄÀ´d";ÂÕU´âC‡®^~RÐ"Ñ…õ ‘ŽLôœ•úx’Ë 'ÓË–…Æ%Æ” ^s“m~D;¯„oOl¡Ÿ/Ù•Íx•[£úD)¼…ry£´ãM9®Tf•Sjåc^ÿ9X¦‰–¹ãÇÆp™2ÜñÒŒ ù%µ&ÌØèR_Ijß0»BÁ²0³™ÐóK÷xÊ“PË'd¸ I®à$’jxùA¤®{E²*“$K%}¤ Lîfr›Œ—‡ôÉ Â³!JäÙ<éi%(®HŠ“‰Ñ 3±ÃÆ5´R—âÙ©\e´å¬f)?:L#dÑÛ8bL¾ð4‰òô¨þ"DÂÌ¢ëÄ.ÄB¥/Ys ¿xÉÔðd1CHôPqˆR™2ï#6"h|}âè’HÙ¼¢„‰Å̤gäI9ª%s²Z+rÇ'¾¡7ÚW[çW£"v®{ùž:k‰6ÿå9p+­¡ßƒtI³‘˜âë Q‹úÖû-‰®Š«cÛلȲ¨«ž0XÁnv—Íh?ˆØ:Bg´d}“;J9¹l¯l…dfýô×ÝúÕ³µíE[“‘}?e,Ûò¥VyT¨š­Ü@ú*ÊÚâ¶¹?ðá]±®,“hK¬¼‘¹Âò´HvúW9™ÕÚ 5¼Šï’Ø’Ð䯶°wAK€›Ã µ`°…ítCØ_þB§53ûnDû¾åõO Â~îUaP6ØÁ¢¯[!ì— sö¾,‹äcÓÇa²xØÅël°a½uâÏú/ ¦1çÜÀ}!X>¸á1D¬ÃGÿ8®s=¯}œ>ÞhøÂ)&-Vê»Ã±fôÈ6öK‰«d¿4¿Üí`¬ ¼—À&²ÚóÙB|ä=íwÉ8Ê™-dxæH –½äh\4/wž^¾qyh#Õ" ñ-W\ì[Dë.k•!U¥-}iLgZÓ–˲<ýiP+«XÃòô¨‹êe5KÎ9s ÛHw• {îäEÿ ç8'yέƉ߬QefY]j^&u-b.Œ×Í\ìï`]k©î†Ê–e¯–‘-hfӹׯìú4ÙhÃ3ÖüZ5sµý_[›‚ë¦:-n\';t˶c³ülä´[OwÆ3œåíLzcÛ#ÿé÷‹›ómå¨[xÃ˽mgwÚ@V÷ºãíp]³Z·Ü6µA¬p~Sðß!t—Ï=pŽÃ[âøö÷Ž]þr˜¿|H1§yÍa>s›çœæ8¯9äX®ò•ãše°å3’ŠŽ$W\fIWºÐït wêÿ¹ÓSNu©OÝàZߺÕ}Îõ~ƒ=_LïiÕ½¾ ³/½ÁdgûÚÏþõ¬G]î]Ÿ;Ýß¾—¶‹}ìi{Üï>—¼ûëuï;áÿžhÁ«ï{×û†öÆ#Ý푇{âÏFÊ_}ð›·;ç/yË3>ó½è?ßcÅ—Þñ£:ëxÛÞó…ŸýéßÝùÔ«^ò®‡ÿ¼íû>‘½ìº¯<ðmûÚË÷´_¾ï žû䯞øšoþ†Q}}ìg_ûÛç~÷½ÿýOOŸôÆß½ø[oþ×/^úèÇ»ú×ïüßýòç=à'ÿ…“ŸúЯ>ýëÿväë?ÿÓ¿ñ#ÀÇ @þÀâSÀÄ¿á3ÀÞc?ûû?2sÀŒ¾ò“À L@„?d¾|?Ü?œ¿ ÁÄÀ ´À ÁóƒÀö£ÀsÀT>Œ@<Á”AÔCÁ¼A´ÀA œ@ Ü@üÂÌÁ,B#dÁôA´A¤Â*t>%üA'œÁ+$Â$4A´B/Ã1ÄB0lÂ-|2ŒAÿ(ŒÂ.ÔB) Ã%LC«ËÂ),Ã9|C8ÜÁ#TÃ5DB2ÌC>üC.ÔC9ÜÃ@<=;aG$qÇwTG™G#¡ÇË‹ØÂÇÀÒÇ}ÌGüÇ6 HH‚,Hƒ<ÈË;€£{I`„®8pÈ`8ÿÖ²‹gä(‹ü‡h0#I­9ˆâˆ´Ç„hÈ39€xFŠìÈNÊH—<€‚øÈü—D€‚ˆI²@IPɃ¨„¨j0€—4Ÿ”¢4ˆRÊQÑeи$Ô:ÖÓ³D¨ƒ¶”R,U=ˆätLS_Ý l%ÐD•nõÖmNçÖrE€sm/ÙWF¨WúìÓ°l°LHB×)؇8XqÎMÿÊ/ÕÇ{èO½ü*M‚ɼŨ:5+rEˆ6¥Õ3mIÀX8€çìØ‰äàcÿ4Nc5^c6nc7~c8Žc9žc:®c;¾c<Îc=Þc>îc?þc@dAdB.dC>dDNdE^dFndG~dHŽdÆ?J®dK¾dLÎäJæÄGädHœÅX¼DOĵ¤¹RîCU4ÄP&eTÎ?XÄFePvEXžå'|åBeOºS>ÅZ¶å_Þe]¾¿T¼=YdÃbnºO>²^NfeŽeYf`^Eûðå\fdVål>»fÆeVìdigq&foEm¾ås¾æi¶æo†æqÞæcæwEWŽgy^åu6g{¦æzg|ŽæyVg€&çtngwþç€6hl¦çøhxöç‡>èÿˆæåVnh‡Fç}.E‰fhc^æ„Vè|Nå‚fgi‘Îè’¾è{¦eFh—žè…né—æèg6éj&i}öè™®h‹Þi™†i›îiŸÆé“Öi VéŸ^iŒ®Cž®é ê£ê”fæ¦~>ˆ^j£Vj­æg¨ÞjFꯖêœvºné©þ賎j±6뱎é¤öê´Æê®j«žë·¾ë°Vk½¦éºvë¼Þk¸.ꬦk7´ë¿–k¿nëÄ.gÅë¸Fì§vjÇflÁ^ìʶ웦ìÌ@º.k¶¾ìÉmªæjÉFëÆí~¾jÂ6åÕîlÂ6mÑ^ëÍþìÙVm¼v澎ìÒ–íùÔ6ìÇnm¢®mÛ>ìÛ>móìáþíâŽmÀ^n”6îæ&nçîm̦n# ìÎníÞnîînïþnðoñoò.oó>oôNoõo`@’õ~oøŽoùžoú®oûæîö¾îûÞoþîoÿþoŒü~/p?p?ðWopp/ïoޝp ¿ðŸpäÀpïpŸo ß‹q/qövoOqñŸ‹q¯ð—‹¯q7ðçŠßq¿ïψr!_ï—ˆ!?r$ï"ˆ$or'Ïî%wˆ'Ÿò$ò† r,r+gˆ,ïòßò„!ù,ú²†777z—º›g;¨[c¸zF¼go¿iiºnzØ]`ÍinÄluÊltÇqxËqsÒ}}â~}‹p‚®y‰©‹rˇMÙRܨzé‡Zâ—Oç™WèšWíYðŸ[î¢_ä­ð¦g“€€”””™™™–Œ¢„ ¿¤‘‘­ž¯¿ª˜¤¤¤«««³³³¸²²»¸µ¾¾¾¿ÃÈÀŽŽÏˆˆÚ„ˆÐ˜žÞ••Ú—˜Ä¬•Ù­„ɲ¸Ü¾¿ä€äŠŠá™›æ°€ì´ƒè²êºŽã««ä±°ìÁœàÄ­àȵÄÄÄÌÌÌÃËÖÅÎØÎÌÓÓÂÅßÐÃÒÒÒÞ×ÐÜÜÜÜÞáäÃÄäÍÍåÖÖçÞ×äÞÞäääéééÿÿþþ€  &UˆˆE‰ˆ ;P@ IŒ‹Œ ˆNW27•ŒU GN.WWJN‰–‰ #WWN¨Uªˆ1 W±³µŸTA4/¼½²N¶‰ÉÆÇN-Ÿ™EÍÇEK?=BSÒÔÇÜåæ±CD=äæçÈEE-)ÆÇ¥¥,äN÷(j ˜pÂÂn±Š 8V€B… ŽTav%„XP4±ÁÃO˜¡P¡‚ÉÂV˜T’C'FZ1b¤Þ½+FœDi‰d"“Yɘ”b’“Šј¬(b…Ê*Q$FÃñÀÁ8Ie$%„0 ä‚)# 9‚Ô ’¢@!ù,Ê|ñ+‡"""***777HHHWWWiiivvvV«nr–|x‹yw—e¦i‡®eˆ±xˆ©p±z—¹›g;œ~¨[c«|\¹|I¬l|§yf½hl¶hu»r|ëx9ð{.Ü[\Ç^e×]aÎf_Î~AÛkMÜgV×vLÖwSÉciÆktÈugÊrxÙcfÕmqÝvhÙxxæ^MãWVèfIäcYësGèwVãfeåsiäyx†mŠˆr‡{˜˜m„™vŒ™}”¤m¬wˆ¥}µy…Æ|…Õ}‚倹€Z¬‹x¯v²Žm¶„uÖ€:õ…æ…+è‡4ó‡%ò‹5ò’;̈H̉SÎVÒ‡FÚ‘NÙRÍ’eÈ›qÔ‰fׂtÐ’i×–xΤ}ߣiÙ§xëˆFê†Wç—Lê›Xð‹Cñ•Gð›Vègå‚}ê–eê•wî¢_ð [å díªvî±|ð¤cð¦ið©lð«p‡‡‡‹„™•ƒ…‡š•••ˆŠ§Š”¢ƒšº•‹£–˜¬›œ²… ¾ž¥º§†™¤‘‘¼Œ¼‹—»•…© ¬ž¯«ž°´–¤¿ª˜§§§ª©¸¨³¿¹§¦±©¸´°®¶¶¶‰£À—­Å±Ç©¹Ì©½Ô³¼Ë±¿Ð¬ÀÖ¿ÃȺÇÕÈ…‰É‹“Êœ‚؇‡×‘Ú–‹Õ——Äš¤ÖŸ£É¥ŽÃ­šÕ«„Ö¦•Õ²Ó³–ΪªÈ¬¶Í½®Ê´¶Ö¤¤Ý¼©Ù¹ºä㇈䈅䊊郂쌌åç™ˆå™™ê¤†æ ˜æ°€íµ„ì¶‰í¹Œëº–ä¦¦ç¸§æ¶¶ò¦¦ó³§ò·¶Å»ÃܹÀ×ijìÁœàÄ­êÄ£êÆ©êɬåÀ¿àȵé²éÌ´éϸéлñÀ¿ÇÆÆÃÌÖËÒÚØÇÈÑÎÕßÐÃÜÜÜÅÓâÛÝáÜàååÄÄåÇÈåÊÊîËÊåÏÐçÕÆç×ÈçÙÍèÔÃèÙËåÔÔåרçÜÔåÜÜìÔÔéרìÚÚóÇÇôØØäÞàåàÜääääæèëããìéæëëëîîðöããòòòþþþÿÿýÛwÏŸÀƒ*üçm¡Ã‡BœQ"Å‹ -bܨqãÅŽ)‚tèÏ?~!îK‰q%KŠ._N)!ÍšoâdˆÑ¿’@ƒ ´ Ñ£H‰MÊéR¦,uÖ”*“jÕžûüÝÛz/4h鸊ËÙ³hÓn5«¶­Z¶n †´ugD»w/ÞûÉÕY›¿m˜¹];¸ðX¸† #V+×#Ý”çâ]H×$¿­ÔÚÄ쯵Á‹· -:-é³9NNÙñjÖXïaÃfŒªÙªÆ€™Í»·ïßÀƒ N¼¸ñÞ÷öy[μ¹óçУKŸN½ºõëØ«ïÕzïW›Ï÷ªµÿùº´bóå§îùú`kÕísö,¹Õï›sîà´q–ý[ÿ£¶ÞGññß{ð‰Dß=öÌXoØÓŸyä#Î;d aêAV ‚~Ø_[ÙãÌt0#ᄉ½³Ë,0ÚbÎaš& ‡Ѝ£Hû\ †m 3Ë.üh †eÕˆb (ÒŽ¯¢‚ÜÝÃ΋C²sžy¶Ì‚ä‹äˆÅ¤cnåäLP®&å“‘øN—]Îr$‹…½#'WBŠ#¦’g•YŽí­YQŠ„Ï7˜ià ñ k0ãN€æ½8Ì;âÀ¨e’|ÒØ¡d9†*êD”|“ )ØÃ( P 5hÿ¶â’b] ã.›¢EŒ¼ãi§œÆh”iª‰Ñ$á³|ðÁ bÌðAÞóßVoÊ '’h]iË.¾þ ¬l7‚h±“ÑuÉ?×ÌÂÇØ`C ÒaÏ_Áü"i†xÎ2ÌVBþ‹žŸ¥ùyæ £‹îBë¶Ë(°0ÃÄ(trÏPǬÞó¢ž÷dº ™ãÛÖÁ šòÂvÑeI²ËÂ,Ô@B ¢üEÌXóFfÀM°B†[Œ¿$—Lî§®%œ.¡t½BŽ,ϰª³1ÄjpܳÆï×1;·b™kÁJ/-¬¹Ä:ýôE8SÌ1ÀÃÝw×ðË/gÿÇf´‘Y“"&Nœ¶€¬V…ò«´ÁÃ*|.Ë ÍBÏ10Ì j 2ìrƒ ÃØG`€·a-0‚«½;à söY.ò*£¸ÀBζäm»½Ð(û#òÎ ƒ0ÃØ0KxAñÄÆ÷¼Ñ†:ª£âg ¹ 1BÎiríå6=ù÷àCÄ»ï›s.L16زÕ:´aÆÌè'‡„p‘=¤Ùiuùå,anß©íÞËø”ãxÛç@'–wèç/s€žÚж•£ Œ,vRÀfA=‚‰€ " ^T¶²‹Üâȸ› ð/èBÀÚV¬á jp .ÛÊ®FFmXÂQ—ÊÔ,ÿÎæÁÄ€=ºÛ óByÐ8XC P°àU°:ƒµhµÁ½#`dɆ$ ‡¤0 —ÿøtÄ)‰°ePÃÈ^ÚÅNH€/hÁ&fƒˆ!u}âJ¶Ç­­€°D6„€Ëq%k#›Â÷¶$ªäóS'RÀà̀؅¼Î°†Ö©±c÷ˆÝ ¹1R‚+cd$Ç%I4Yr*q܈?†Ä 1˜AÑŽ>Ö༺ êÜ¢ T–HdˆJî1-„¸Ë¦6!âwôR}ªL ]¨ji‡ôÔèApð!‘Ù ¬Ð9ü¥kTR-FÿÉæ#àð„W =ÐmbV›˜VáL]°L¬6Æ(=H І5 ”Ïí³„ý„#åÂe  )p!X@ΕÀU ‚;Ê!ƈ–˜„¤„1fct+*¢a>ÊÄ7*ñŸùÆ7Šñ‚¤@D—ñp€ƒ”À/Ђ \0 v¶%[²Ô=*±+€Áðæ@Óu›•4êQ/¢‰o´kVd¼x¸ « ©ª%P&“vÈÝcŒÎ£C¦@þTóoEbHçz˃P‚èË#KcÀPÌæVÅ+@a‚‡7¯xÁ(xÓÔ‰JànC¤à…ÓÿÚö¶ÈQNvvËÛÞúö·¾U*úX‚Üm¯âØE N°Še€¡ ` »V¤UB”ÈF$òàp0ˆt ƒŠ"Y7nS¤•=?Š‚ Dl ª²U«à„&Øw o F[CÖÔ¼€ò")š 9¯ c€ÇôYÞIÊ—#=ˆA”E O¼`f¾Œ|qà„'0áÃ~Â3F=‚àƒwïKPÂÚ¨„Ðá ç9²×”샯aìEß…³äå,PìBˆ‚‡CÌ(ü"_ æYÜ OJ83-Þù 66Jk®-€ç¥ìdUâ}Èb,Á.€÷O8Cÿ28Ãæü93!p ¾q%ð‡" ãié °á—-âøËpõgz_å0õYÀcAÜ ç30á ʳóÞ±Š¿Lê,Úèà xÅ>¤epÁÃ_ôëå“E.®a3L¼qR¤`D4 Bqä$ƒø Qø0>±:ý¾£»W€WE´‚)ð„Zü‚`±Ñ²Á¶3„Ý~äc–„…°š¡U°Àšb&D¡p΃–nur¼@MÁñÔâ•U„…+æ(R1XùAlósÇŒF*Dd!wüèÃnM„d# `À,°:¿O_¨§=޶‹wت»ÿ…‹-aX·ŽWr"øP R„×¥ÇÿØF>²Â|èÃ6ä0 Ÿ €Ž Œ3Dá Ž Ç8¨ÃUR7¹Hs¹ ¯.ÖѼ¨±Þ¶¶²ØÇSF.Œ÷áqpCÆ»g¬I¼ÇL…ˆFíQªÞC*ì¾ÍCTÊàüÕ°~HÙíHÕ]˜ñHøஆ¹ëGË5…Që`²âÉ÷”×ü[Nø¯~шW4E†Al¸7¯‚u‹~ô¤3̹êŽÖ« ʉóý+Ö•Yð›7ñª»@p öNœ(¦üeS,` ÐAÂP…$<¢H£˜Qÿ¿²N¶9‰ƒªÃ¿2/»v$ Ñ:;} dcB DSù'29œ¡ KàUP€*pF×y0÷/uí` ò‚FÔ3KV"p27sÆç`ò—p8‡ Od<0‚~]¢ghÀ Êcw aÐB£sG“8ëD6#ÃKÆ3ƒÞ 1F‡æj·ƒ|è¥|ÿ` ìBUrþg#cN°>Pbày Ø&y² ¸f.ð*qã1/@°bûåu˜m6—zCFHÀ3U¶0 ¾Â„ið/Qà 0…aW˜…ü³…!ƒ4±`Uws´ !€Ìÿ–ˆ ]ldzqxA(„ áý J8° ÔÃ7b€o‚+Ø‚B€1x$3¨N³7U µðR]P ’æ‰Ã°P`iXzkxpxs‹†Íwk˜ w¦tî f@gOÐXˆ è{³Ðx©PXP$€…(µ 1 ¯°'C‰°z—˜|â#²ð;q È m4$hd€ Œ(»~bQ Ã` h4 [PS‚¥5 f” Þ° ± ´Fb Ö‹5÷‹n(kñ àŠ FW¬ØUêÐs !é’´3}q“\#0[ 'P\p£@Ð:ðÀ ÿ)T[Ç‡Ž˜H‘ à ³À \è/™ñT©„lúÈ…À£az"%p3VE à€ Pÿ7¹ËôƒŒ1‘b'‘hy‡ð ʱ F‰”…8 _i0 htJq’€Ù€  Wwƒì wã[ð98€-Å0 –b‰“:I'h2`÷“iù‹y²ðí5jÕ7ï P`gPPÀ ÷`=ä0  ` °­0•ߢaÃ\ò%Þ€ ™Þ ÀÂ:ß äh–f¿( õ/`UtÃY(ÐÞ°+beph0 õP/ xÀÿÐ<“° À$_R¥ž8À-½ù›‘‰ Ý/ûâö#/z•¹–H„À8ùP 8 ô  î…¯ 8 ò¢ðI¢cé lþ¡?[ÿvýs–gŠKT‰8g£º/p7-4=`/ ®9 ­%/£ @€  €£À ³ 3ð¼!/ÉÀ’ÀI‘‰’0d€[¼!ª  c°PÉ\ÌÚ¬Îú¬ÚÁö 7pšJ7, |Fä V‚: } à‚`qBPª›‹Éï)–ÞÀ«Œp p‹d »P‡¯ã.²ž¸:ýøH\a™§çŸ‘*©#¢Ë (@7ÎÂ*A ç7ðÂ0 ›³9c40· Ï 7 9ò‡cUj“ÿ€ Œ™ W@bðšÿ"ì@UÅ€ "c%0×UK¦B›°™û€ÀåVD7£2s˜Em@ ô‚P ¤°J.rDôb@J`÷ðžÿy`“ÀÞ€ ¾ xl— h0;.Ú%›b°”аÊ9£>æ<ç/ð°²LGB]opLºÀ Vá™ÝJu÷@ 3€Ô@ r +ÐÙ…V€ïÉ’ Þð² s)xØ-³¢ØP~_Ú/ £·åÈ·‰æ“Á à ³ÀY ÀÄ?q0 E0 wC ²¡*›.º0½Jµ0%Àce‰ ’ÀºÊ«-ÿ[q›A¥ñ"ùX @˨S×?%‘¹ ”o¨–¼ë ؈qš>„e¼ÀLúØà¼BÔ:%˼¶ <%/¾¢½cÛØ ½é ÙB$]×"/y“=EscÛ#[lh¦ï ¿ a¼ë¤À €R5pŠûµk`5ƹaÂ{Õ(s`¹2`† !€ ‹†î* ƒp¦«Cq²JmQ ß2p« ÅÀ ¹¢JrÒ?6úÜ¡·“z»mH¦{zq9Pnš#0ÛGÁTbÐR$J6° !2@j0 z03 º8¹ð² Hâ€r „lé‡-GxB#Òÿ7ŒCt6ZfáÁé·eú‹YA-€<&@h¼EeŒ7ÓRáò»x3 Ôðƒ Ð€ÇdA68à˜hÔ¯\ñ€0§'$G±ó"µP$/@¥h±lÌ=¿º»Ì#üÈ`<¼PPÄà 6D]ü+_Çe  L¬ƒ›Å®_-03/ðÃcAAØ0Sh±f¶ 71&Ii<›â¨jaÌe†ÌHÉ¡°æH´>ÆåО¨S6P ™ »R‡«¬Íýû¿â L¼¡ä€V³*Æs ,9„ ã·d!˜8Z´z<ê“\z¥FÇF$âgÌ—¡ÏlHEÿ«ÌÌLfò ïÐЦSÑ6ÇÅ¡wó/Ý¡@ ¶zu<Ý/F F³,¨m|+ü§y‰|+òr\Z’-¼¢'ø¼‘<%ÜácÒŸ[ Ð!²° Ñ<ÍÕÜÐÀCÊ¿8˜ÃÐÍ3ðÍ Îãœ>‡€(@èÜ@py~'u?(!4ÜUçw\z•>«9$¬ÁU|ÅSBr¡’Ü·6Ú ‘i4àc:õö ü«aås7¥œ@dzÔ,à^)àS°SÁ%Ç>ôbàТþ_ŠÃr³)Ê«a/ày³»òl£ºõÙLÄÙáÙ4 Â!Œ¦Þ`= ÀÀj ÿíg{u4}$_ŠÃKªC­}7+ ²¡wbDQ| þR€: /ž_º?aâÜ2ÍÏgœÓÝÁül»›Ö ­¡ºh!|bÅš©xì0˜¢´¡ýqHU&HU‰]+ƒ uZÙž8ƒ¶š àf¢ÅUà•|ÓþLÛÑ6%'îW·²!ÏgqßÕ¨aõ œP €À ­„]°$tm<¸¢ãclñ¥9®Ë_½À.AÝ[1à÷ ÅÓmà ‘Ï\~Ý5MnQL|8.ˆÚäòÞ6ðãhV‰tÍôJ[K8¾¾dñWR5ÌhĘD²)úìÙÔmÖZ¾üÿLkÐãÛâ†á ;á-¨tv4 Ùà“ œ@eŠdeÏd=— ”À—UAr" ò5 |™½âWnèŽWÜ_.£”Œå¢Ñ´ U8PÞ¶P‡\>xc¸¼×EäØ`GÏôÞc´&åøÝ%Ÿ…‘½¡^’ì å é\Qà‡îb½èÉÊ1ÖÖáè…aåsÐ[ÁáC*•Rµíhq]† bôLc»rá H„ü à  ï”ÝT—íht™7Å ÛåfÝÁ{ûŽºµÀUÜîÉŒZ¡ë‰ñ­//¬c7 7Ÿs)Ô5¹Ä'—ÿÎ šÎéƒ`jÈŽÇ3¨êµÜê[‡° óp £ðñV|&TÑÁeÖÏænÌÌîh½c±ïƒ!/‚ À#Þƒ>ÄK¥¤w–d–`ï´b›c|:ØàM c-~)WŸ0 ËòX~î±¾õqî`^Ý#ìôVïX/[Fƒ¿ ö{.>ÐBóiº.–ó¯w¢¤>¯À᡹€³pô+q÷yë"O–Þhñ~Ÿëîô1X¬p…_åæaò"nìųòÅÐòžu;.'âÀ ÔUà`eÏÞƒ†ÜU¹.ÈEÃBOôFô¾HŠN–o&¶þ‘ÿÜô¬_ý3Zõæ!ïÅ.öNÙP«„­»…< ü°CÈ3’ œ @œ”T='C:$šWrCñßÿ$èà?ûöùèÏÛCˆ÷Üwïž·{û&¼¨°â=†.ügpãI”'M¦ô'¡E˜1eÊlGËÆMâ`›5kLq8pÎz7sç,ØÄù4j±­ž=u6µÈn ì,Úˆ1ãf äØ*oÛÔ ~´¨Ñ!ć.Q&ôåE˜íd›qeZÀÿnI•*Ï]äFͲUÔè;¨ÅÈíbÚ´cq¬"žµKÜ密-.N\Œ«]8bÄ0÷pᾸWöÿG»$FØe¾è­"Úƒ´ \¼¤ñ—¢ö,Š2¹¦ä:Ãìi˜ç¬•›V·ø\ù+¨³Tƒíy³˜k¹5¦]Y1dË…q-êL|"Þùu)‚lxùû« 4ð@_x¡@P^xA_y”„Ð@VF…• +\ÀìÐÀQ@å¦GaaX\Ë .c”qFk´ñFsÔqÇþ”› 1Åsl&Èf)FÊ~Rå€mHª˜¤Î#w¹é×ÞÂ-£”f³¨¶/ÿù2!.묢×,iÌùþC.À“ ó1¦§zÊnª¦–Š*´%•«3*Uì5[UÓg­ƒžöêäVi‹Þö±È#­´¡Vì• ±|÷ͧê‰I/`6¥%#ð[œs^¤†§Íàˆ]D ¢+–Ûmå ­Ïf6X°"ª*Ê ]¶gO¯·‚…®šè¶ ‚KÛâ<2Žl‘à’«ÜÎe»m£áÆU´aÆ[íî™j}T(Ó‹b§Qó •åR×`Ÿ).LáZOËÅaœa™FU gðY¾t¿®17~ó⩺̆fI£Q­‹¬^¦l¡Ò›°#Kc˜zæ%È…)Kx¹ÍË—µ3Mî#»y\šÆ‡œÌÁ ~š³ÎÿýlðŽ¥˜':ÓyÚ;®d¡œGSk«K™Þ³öH >ÖA·B¦Åg’3ßDxç>³±LaÅÉ`»6¨Á^)„Ì3 ÓJxÂ{¤ðr¹ÙBצ×q->5³!«®ÆÌqnª"ÖnFÄ÷/J†™_ý<øÁ¦Ð-oL™Åÿì†%ßL#c¢âi—@þ,P7Uëͧ"˜&!žïqµA“!SDuшÈS^ ˜˜';1¦÷`õŠ1ì™$sã^§òã5D|¤Âá]Då-’üÐ}1ñap¾µH¾J’‘ìÜ.lƒ\ŒƒVÃHÔŽ5‹`– 63Óä¸g82AìKµãâÈÿå»3uk"}1UãšéÈ×ÁdfÄã ×eÎsú¨‡yØRÀö¥D=³C_ád¹»?‚Ép›Š:c²K]ÎiÐÊš_ÄâÍ7ÃCŽ[rÏâÄP‹ë§?ãfÑ 4¡.3hÝ™…Â&‘ •¡×%RMt–œÃèE[2¦Bäc…XUÝ'4½(¯c LP¹úÒºŠfs—+cO÷³ÿºµqpR[À$Y«&ˆíê]WØX”@ô$-O)1˜\–‚hÔjg9{W· ̱h¥M_÷ʸÑfD°² -7KW׊æ«a%,Z?‚›Û ³l…˜¿ÊšCÖΣ‰=ÞQIÑä66~õ-~n:Õë’³–üítƒ+îfö¶¢=I[^†YWZP½âjík«Î¿f·{Ý™Ašš Ql/Q |`'XÁöËŽü`GXÂæg9ï{aôæW¿CÜë—Þ릚^¼õŰE7˜Þ3f÷žßœ%ÄN•¹ñF·¢&>¯aP¼_ƒø•Ûl¥›XŒc͒ؼöÍ0€6Ìa™Jÿð¿HN.ï k×ûóÄÖïøO 7¹»Ò¥1‘mLå#çÊ=doq\Þ.G¹)7†n˜ó¯ æÈL¦/—¥\cª°™Îh•eùÞZå-ÏøÎ^Î3˜µìãç¦ØÍ…Eó Õl=—¹·–ô¤elá!?z&‘>r¥åÜéÿÔFÔ£&u©E 9S§ZÕ¥Fõª]êV¯zl ¦ôœ=»#Ã×›¶¦5 {=gE¯÷׋>´¯k ìùòyØÅ&¶°— ì['Û´¼>¶±­ì=O»Ú×v6·»ílŸ4ÚÁþ6³Í}nh?[ÙêÖ¶·÷:n3¿›Ýín¶¼çínz£ÛÞø7µÁîÉÞ;àÿÛÖ÷ºÿ ï6<ßåfxÃý]oƒó{àŸ8¸pœ]ã »¸Æ5þiŠsüá ¯8Ä.r‚“<ã'GùÁYnh•·Üä OwÊ÷òYÛüæ]špÏ}þs ]èC'zŒvîpš]éŸ9Îa¾t¦#½ß/:Ô§®ó¤g]ëN72Ö·¾r¯_ÝâTÓÈ¥^ò˜Ÿì\ï:ÛñIv±§ýéVG;Ýënv»Ë¼ékß;ß±Ýq¸¿ÝíØ ¼ßÕ®w¹·½ïˆ¯ùàWëx½B>òc»áŸsÉÇïUç|çã~yÌS>ó–ýŸ¯ø¿~ò‹Ÿû×-¿yׇžõ¨}ë+ÏxÏ>ï²?ÿ½îsÿúßã>ö¼oüìË®zÍßö¥¹ñÏüCÿñ½'üí‰|á[ùÀWþó/xÑúÔÿî¯üÙ’¿üØß>÷¥Onö·ÿü¾÷Á¯þÕ×ÞûâÏþÝíýÀô?ú+@t?LÀ\¿ÿ«>þK¾Ø« œ@ ¬@ ¼@ Ì@ Ü@ì@ü@ AA,A Ü«:8²ܰdA|Aü·Ì®L®´Á¤Á9»A`ãA´òAž ÌA$BdÂÆABœQÂ%4BÜÁl8²)ܰ*´B*ÌB-ŒB.ìB/üB0 C1C2,Cý’FÈš0€ÿ4üF0€)ÞXA@€ˆÃÀ0IH¨–0XC&Ü4L(€|C<1:LÄ`=äÿJD`F”ˆA4€B<ˆ:ØCƒÐCEˆL4.€€:ðlI@p“< €YĆDô‡Èƒ<]›]¹¨˜ÂDĆȃÿ؇S\Á;ô†`„WŒÅYüZ¼Å°Cl¸C^ôE`ü@lÇj”ÅHÆeü:l8E^¬l€<8Çk„*YLAo8€:8@ˆFO4m4€)¼XÔÆèCäˆEb” €) ÿ‰xÃfÌG1ȸH$H‚øÄƒLÁO”†tHãL„ÀäE…¼HøHChÅÀÅðH^IÀðÇ0IÈ`C YJ¾(€ȃèGft‹DwDÈ}p¹GäðIo€ €ð¢ü£t¤dEI`J§›e KŠ´Ê’ÀÊG:€{¬F·ô4ŸDJ¡tK9L ¤ü‡<€HTËtlÃÿˆÊ5ô†`„{€KÅ<­ G€äK²ÔÆq¼Y$Ì™ µftKlpLmDFp€4¤L´ÒJ~üÊäE=CÊv4 ¤lÈS‰ÊOLMŠüJÿ7ŒI7ÑʈD€Ù €ÚÔÆ¨Ü‡ÈM”,Ž8M\LÎ}NŒ$M¸ÂˆÄêH=; ŸKÆÐ¬ƒé<¤´E@N^lO•ÜM–AÈm$€ÀŒNãO˜IX<Ïô¬LPJ“4€÷„dž€DjôŒÉÌ„Åÿ0€qlÏÐlOÿN´ÂPD<€*”€ OohC dFoHˆªƒ½`LãÜLõ¬Bg<‡ÑK›6ô‡TÑ’@Ñf¤À>¤ÑøGÃ4Ž< @o À)R3\R&mR'}R(R)R*­R+½R,ÍR-ÝR.íR/ýR0 ÓƒQ“ L1=S4݈ÿ_¬B€Ë4}Ó4]ShS†@Ï¥ÄE¡d„}HDJü‡ÞüÑÈ8t ;eF2õÝÆT¢DP^ WÀSØ$Fp-W^ÎÒüTdýTw ÔˆüEVlJt-€M5ÆÎ܇Ku׆DKqýד W:=ÖÚhV^lÊA̰€ÒœEÌàú%à †àæ_Æà¶à¶ßÖàöß FaNàáváðUß„“á †ávà&_ÏÅ¿Va>á^áââ"b#Þ` îa"â&à%^_Vbvâ#.aÎá)fâ+Æâ(¾á-–bFb(®â$.cÿÞáôb3Fã'vc2Žc*¶áöá3†c6¦c1Îb0ã<¶c.¶â;–ã9dBdDÆãAþã7>ä>æc5ö`E^äBîâJfdKî`®ãF¾dANdGæäLÖdÝN~à/åOždVÆäU~äTFå6eUneWå[¦eYÖã=žå\†e_ÆeO¦da&å0Öb?f[Vf]FfH~¿H–äf6åä] k¾flÎfmÞfnîfoþfpgqgr.gs>gtîfcHgvngw~gxŽgyžçl^gz¾g|Îg}Þg~Ž{îg€hè~þg‚>h„Nh…þfƒ^h‡~hˆ.èYˆžhŠ®èwnh‹ÎhÞhlÆhŽþh†hi’.ii“Ni•¦g”^i—~itni˜žišöf™®iœÎiÖižîik¾iŸê’j¡.jŽ&j£NêŠ6†€!ù,W}q;‡&&&777IIIVVViiivvvMx¨V«nr–|x‹yw—e¦i‡®eˆ±w†©p±z—¹›g;œ~¨[c«|\¹|I¬l|§yf½hl¶iuºr{ëx9ð{.Ü[\Ç^e×]aÎf_Î~AÛkMÜgU×vLÖwSÉchÅktÈugÊrxÙdfÕmqÝvhÙxxãWVègJäcYësGèwVäfeåsiäyx†mŠˆr‡|˜˜m„™vŒ™~•¬x‰¥}´x„Æ|…Õ}‚倹€Z¬‹x¯v²Žm¶„uÖ€:õ…æ…+è‡4ó‡%ò‹5ò’;̈H̉SÎVÒ‡FÚ‘NÙRÍ’eÈ›qÔ‰fׂtÐ’i×–xΤ}ߣiÙ§xëˆFê†Wç—Lê›Xð‹Cñ•Gð›Vègå‚}ê–eê•uî¢_ð [å díªvî±|ð¤cð¦ið©lð«p‡‡‡‹„™•ƒ…‡š–••ˆ‹§Š”¢„›º•‹£–˜¬š›³… ¾ž¦»§†™¤‘‘¼€‹¼‰”»•…ªŽ ¬ž¯«ž°³•¤¿ª˜§§§ªª¹¨³¿¹§¦°ª»´°®¶¶¶‚ŸÂ‰£À—¬Å±Ç©¹Ì§¼Ô³½Ì±¿Ð­ÀÖ¼ÃË»ÇÔÈ…‰É‹“Êœ‚؇ˆ×‘Ú–‹Õ——Û¥ÖŸ£É¥ŽÃ­šÕ«„Ö¨”Õ²Ó³–ΪªÈ¬¶Í½®Ê´µ×§§Û´¬Û¹¹äƒƒåç™‡å™™ê¤†æ ˜æ°€íµ„ì¶‰í¹Œëº–å¥¥ç¸§å¶¶ñ«ªò´¬òµµÅ»ÃÙ¼ÄÖôìÁœàÄ­êÄ£êÆ©êɬåÀ¿àȵé²éÌ´éϸéлñÀ¾ÇÆÆÄËÖËÒÚÙÃÆÑÎÕßÐÃÕÕÕÒÕÚÖÚÞÙÔÒØ×ØÞÙÕÜÜÜÊÖãÛÞáÝàä寯åÏÐçÕÆç×ÈçÙÍèÔÃîÒÎèÙËåÙÙóÇÇõÐÏö××åßàåàÜäääææèåèíìããëçèîëçëëëîîðïó÷øææóóóýööþþþÿù ÈÏÁƒ*hpáA{ðìéƒÏ¡7}ðàéóÆÑ6lÞà}ôf ½Žð)‘ŸØ­\Cj˜²F IvìÈcFsÊ”™›JºôTi¦S«^5ë׬]Þü3p_ÛOqç6|˜7AÝJ9fîÈUlHŠO “´ÚŒÏá![C}±Ùðdcß®}ûìÖÿöí—ü`óçÑŽÞåÙ'GÚ©ù¢@è1kvÌQ<Æ{9³Æ¼ìB4ßyçx ®Æ jâù´Þ^ê¡—Þ_›e¨á†vèᇠGÜH•Ùr#Ò‡sØ@$a¤"4©„áÅŒ8æ¨ãŽ<öèã@)¤Ž…hä‘H&©ä’L‚Ø›yþ¤O‹äW–uTDyKTyö\.k Ï3kä’`ƒk²ùÚƒ©EØT…PZ%…t:”˜@{ÚäŸf™HŸg8¡$YHîm´YIM×9긱2mºé ¥on'gQyúvçxv†*ÕT’Qei¥¢ô|A”aFZæÿÇ£ð¼Guk´ñN¥ Šó‹8ê˜'¦Ùi*T§¼}*¡…zªçKÊÉ”‘Ežå¤–c=¦_˜"‘+‡†Ý;ÈÄ!‡1»òº:µÈâ®,ã”6,¦ó:wløæ«¯³ M+P|Òö$B²fft÷ýÙYJùMv€ôºÙ‹,µôÒ®,ÁžFì¥Ømz“²œî›,³ ‡¬¿a#ÞU…éù *³Œ“Âù5\UJð@ »îÖ’1lõªænÆíŠCZÐl"-ðœ"VòÇ$‹ª—0‘ÝR6u;‘•bbäÒsý«¸©óî»?ÇÆ¦Ù²L5±ÑoœšÒ#…¬aOÛ-5y¸¡ÿZZÝå!ÙÊ›]\J*Nô‹,5¼ÀI/؆1iÏíf»½¨#ÎÐGËmyÇ÷ò}7ÞQþÐL|¢®÷ME¸j‘%’DÎ÷sC 0|€ %È@À骦ÏW^Úægÿ"¯ç ªèM;]zô*5Ÿì‰(Röµš0¢|òÁ/€!Ãg¹‹Ú±}¶ñ¤ñ\‹òË3ß9èÏó =õ‚åõþAIN®ç‘Š ”ñÊ:Ö± ñÕ 48_ÞA]ä‚rÍËÈÄz¡AYpÐMJSÝB§¿šð„¤ãŸT¨43íq%%Yà6DÈà†(à<Êà„ê¼!x­™JÑÿ2²¹ZX*„ rÞ²TÈÿµÌtýƒ"ÁZÕ™doE[©ˆ«Hò=Qˆ"` HP‚Pä O04Úð2¸AqƒÇÄè·¸&Í~÷› àžˆÂ(J±z< Löh’Ò\)‹‡ÌÒˆì!ŽÈ wãƒÁïÈà7À#<ìᤂؾž] ~ØA"w”È4Ž,»AåO(âÅœl2„¢ˆµºÒ"ý,ÇêxÅ#aÀKIæ"eP“Ê@†5h ÁÒòÜ7Öø XÄc±ð·DS¦‰©Ä¦OÄ$Bb¤'(;È´ ’=ˆdFèˆ*xƒZØ ½xǬCÌ5¬OÆœæTÔÑÿ‹Ì½†xîŠWñ8ÂüÒš×ÔæQœ˜œÉ\Ä+ !TÕ^ùžÍŒDÁØF,j ƒð¢5hšÖà„&ümXÃ9ô eÊ¢™©™X-|11Œ Ô~­f©Ð…îí/,{¨+2¶r¾Ò`™Ù Fcñ vòâ!ÍH:x±2ÄÁ’‚îdöZ|r5œƒÇãHPRšl§·ù)ZÓjn",k{+Á ‚8©C°E/Ý ÏøIŠ:qX©>瘑:ª†mn{éM™—ÓR®µ‰j=(B[GVBôt‰Vp敉L¥Ee!Î<Ô ôò¤-tÇŒ@Îø™lÆZÄÔÿP£ËòÒ&ÊPšj=5¨d*½ƒ`‘ dBH;¬pãDËI‘HR¨y ƒ4à@ BÀôÎweXŸðËA~zÐ4Ó€ð‚ÜÀ]ô#+N»ºÇ²G•÷Ý—Ö”“ßBZñ#ˆûZ9ã“Ô+¦¦ÑPÇ&$À´à7ä(òù¹-¬S‡$P‰i,Â+˜_4ËJMÇ7¡ö…,²8Ò=•ù”¨ZÄŒZôŸ„¥%8à ÷ Yp",¸ HÀ‰Z<° ièg|9Ù¾‹ù ½˜ÄTÔ[«Ï·Äg=qqƒKBz¤ÅÈUHT¦å*n€-$ɉ¶p’„¬ãÿ,@í ` ƒ)4B¥ ÞeG–† Ä”0O8´–É$Öc—QÌèF;Ú-ÖHÏ«¶q<Ô›R9\! b ÔÃ{e«{ä[ÆP“Ïø A÷C,R‘ ¢Û‘IH ÁpðÁaÀ‚OÌÈ<—Æ*>a‚ G®x(pô‚„[®`C¦.œþö¸'¾ÏûÞûþ÷ØáoâÖ¥-—,³óußãr~À|Â`Ávyéö£—àª(†¦à…ú­†m¿B:ÿ%¢ŸP 1ÐO„C¨N oЇ–±6k–'hªA&" é¦&W¶…_¨‚ôÿ§b"‡xLaYŸW¤0®â­’3fsp2P ·ó€ 1eШا¨Å‚Yh€ÖÓ ²¶B)Ò0⥅°r¿‰èˆ(˜Mmu¾(N,4Ê–‰ Óf”a3G>·Ã!0Š¥XJÐ%µŠm ª@ D {°ïÂz°Ç´ ^@¸ˆ½(‰'(Œò8)X÷·iñ†*ãÎ0¤+ ÔÈ @‡v(„MðA¸kÒ€O¨¿àU¿,Þ°)€¬ )Ð ¬1¸I‰öŽ\hĆaøˆ 1!|?ñ:*¹5Ee5‰Q Ð^@°aÿô^70pK „JðÉ”R+u1=ÓR/â–mà¡ £1ã`11…(lYô¸É÷iO#K_Éhö^°B ‘ÃÀ °©hU¼Ð¸ö‹ã3<ó+² PX z4xa äq%™•Z¹•¸MøA†ÿ"]ó-­â5.!›0 ›P z°Õ1Þ  °ž@9P¼POPXb¥X-U ôó–{oÀp db È  CXð`XÈÿó^6u›³ùvð0˜wt•¿6ŒõƘ鞖æþ6™+HŸBEVò Ó °P íuô–|`h’rˆS<ýÄLô@7°dì3›v¤ž í ŸÁ8œ&ix;Q™Æ×,J¢t-1q±°-Ð]€ ð5š¥yš `Æ—,µ8ïB?5õ.0Å1–›¶¹žŒœ$ù˜ê¡òiiS–Añ’É¡Kjûwó@€@†Ÿ 9ô¥° À9_0GÐ# ÕA»É6ÁÒH7Ð i:^ j˜GÔ›,œï‰§Fš¤á¤wꕤQ~ÓC‘ŠRƒ‹0­÷REÿe0IÀSP©*à^7;z^Üfa*›rºOTy˜ˆ'й§zZiñæn© ¢—‰öylö°@Þà¢:WShP_`¶PRDP¨ð‡ Cƒ£­_fcD½p;Cç.Ø0 She¼øÇ«GZ‚|ŸJ¤à?ÐM(Ä‚¡Úšª§ŠªÝê­‹ ¨ø©l:6®} QÑ s²ð^½ <ízôLÀôúN€¯úúRüJ¡ð <ÇK'Ð ð !ÿ€™†à}!i­«ªÛ:’±HQ‘¹¤že±NAEó`¬µSÀfо ¬Â †`¬ƒ¬®æ Q0¨ ·ÐOÛ +°¨°V9¤¬:´p·r+œtËý÷7Ç (,¡ ›žJ¶3p@©ØKP©Sp©7©jÚ±7P ¨0V`1tw÷-¢à ‹ÅnvŠ Ź¿)±u;±sûý‡ª“·ˆ£ àð êµgÃAÔF¹Jbp Šp g§¿0wî’Sîr¥× í5 Þ  Q ¥Òqæ)’ºy:º¢+½@«G»GFÓ  á—  ÿ0É:tç°q°+æ`¾<»3›¡G7#¡pS ð )à{ü0!Ì›)ìÙ°ÔË­kÀü³ C|”=—P  ÀЯ½ m@•·3‰¦ z;¿ œàÂ/ü¿2ì£4ü¶;ŒÀi\½D‹•Fë-!zœ˜1 •ꀿ@ŽŒ;‘`àdPcà¶ G#áC ÿ ¬Âýpt ˆ*Ò Æcì `?æU ¯°¹!·ªn|À ¬ÆÓ›_ùk! ñm%Pmœ‡- ›_0e`²àÛ.Ÿ` à<° Õ0g ˆsÇ|ŤRÉÐÌc, ×`Ad)îÅúq£,´¥|Ã8¼Í:œ\3\F±*  h®p;gpÎ Æ\;  €TŒÈÓP 0ð¦sÖK50 ”lÉÍì¿m bP'u9C§9Hª¦¢ÍßìÍÍͤ\ÑýõÛ ÑÀ g "€ˆÀ ,àzð@ÏÆÜ ;—ÃP!ÐÒAð@ÿ©j¸è™ÌìÌÍÇÀ À´‹ ‚Xa¬=š˜ÝÍJ½ÔL}ÑM?5h65°;»[Óö!Õ±!…gýl‘8Àް <—mÇAPµÕê:Ð<íÌ0ì jð–VŸªá‘ÍÏKÑOmÀ××~Ý$\± ™/ÀKp(<@/ð á# ­' $ @àÀà Ðv «0#ºäz3ò@À# b<cLb{8âØŸð 6T¯ $Óõ׸ۺÍ!šÀI­ªœõ 6`†]m,€zP›çÅ8²Ð`ÊðÙ¦4-É]¼Ì.<Þÿ€ÚŠ` P‰àb€˜ѦÁ.Èü^p³Éz­"*Ê5¼×¿Íƾ­S8sï€(Pmã£;?0 ¡6мР7½8êgS É  6 8Ç… …°RÉþ+ Š0ÆU `@ž†ê s¿ µUÍCg/÷×õßô=ã2~V•Ñ"ÓÀ8 ÝUm¢ÐR·“g®)÷€@ £P<ìb&T%½:-wpý а §€ ºàÞI1 Ò©¨14í2‘»ÑyÑ4¾ÆNmßhŒuPê„›À/ð ±0g_m g´` ô¦… º 7¾ÿ fà Î`°{0 t,~ÞPÉŠ € >ÊØ©yWž(. - lªž-ÇZãEËêqnÑ1ž?(3 ›à ²Àyð |^[oð²0½ÀK¾¸Ó ôC 2p &%ÀdyÆ+ €#¦Úü Þ€wDííR Z«áyT'NÝ®£I—îÿ[ãŒUªa¹ÂÝÚu÷C±Sk°0,X-Û†|¿JSNžº5ÜÊÒë´_YÙkEÄmzöì •·kLåϧá]<ȳèÑðã6)´}Îø_ªÖ§Úòú‹òQ§[Æè€_âXCu"’¥ª«j±ê†^>AuªáºÞ$¨ P¢ üÇ¡ïdy!;ƒèâ ¯Zj Ì _Àëk,Ü C‹¯ZÄ©± ÛÉÇ­vXRÉ4~|é=úBÒO³'¡lÒÉ)c*­!{þËHj˜Á2ÖXc—ÁƒÊ/xdQÁjnR`-çT±–ᡦ’I*Ç­§Bs¡ÿƒû¥EÝjx¢¾cH¯‡&f²—Ž„Ç=%¥¬’´OA •Ÿ(s*u¦SQÒÇ{xúSzxäE]œ9ȺÅ"ª¥Æd  ÑJ)¼õL«V¨„ç’¦¡iî¼SWžzp«€¥ë_¨*R¢´+a.E/¨M©TÕö<ý4U™ØmwTRGu×ÈÔºGµ<³û…°§¢NQºÍsÂí®JÖ¡eÇ *™F­?¢£J²‚’UgÂO¶ºÁßL,;!‰ä‡Üt­T¯d&C—^xWîl]y5·¿ƒ³±ân¥¡Ô9l zMwjÞ„?69¨ÙIºÓCêô´–!ŨõÕàÿÃóWžÚ9ŸƒÔ#)¤þ8[Õ÷ªt9½˜Ó†Yå“𵸗][Ìyçks˵† “%Q‚öS‚¤º³ÍŠá¡›¡#rTFÁžS¬FÊú¼NÙ0³)ƒÂfµµÙnùsÏ;Éíš“û7àÂéòp×wn $™†I$Ø=~XJ8öQ–O&Ñc£áù0ªDqë«dƒR–"»¶üë&ùóeúÎ ÞxÕ6Û{°KÏWñ€ÅŽyã·êî`Jl‡ öÞ›uÖmž³ñ…=œ•à’«Ëœ0uÕM%â²Üj°×½•°jI&ñ«¼ÑÀï¬BèD7%ûN|ð‡ÿúÐÄ&‰¡¥LŠ CÚÇi4«wðÈ *Ä<®À8¨‘;mðe!8ºJ ë2p–ÌÕ6‡œ$Kׯ7ÁЙ„tï’`öªˆ Нu¿ÈX¤ bƒ_üÂúξ–w0ØIb´sŸøÂ!=0ä„Ç›Ê ”×/ÕQ"° zÂ&ý|dUœ‰=š¸Dl,ЊẄ !˜) BQ’áÛ`C"biL…WÌÖB¨ÃìÔ¬ %*QIxäîD𨲷!i¨c*ŒIÌbÆ!Þè#2Wa™?‚®Ë…d‰ðhâ•HAH2ò4 ”^//Ø$íµ‰¨<È%áÿ¢É°©“r¥ëœÓ ô€@@ŸøHä@Á†ÆÛŽ`\á<|Éå.oàÌÑ9‘!×càj²ôÈ‘8¤lÛSf’ɵ`¢í™‹\(©y-v1C5£ɨ/~•Ó!?Ç*ôUIp¨åN~@bôÕÅ]éêwÙ¡Ö:øô44×ËÒæ|¹©ë•««dB¥YP„ö /kè}fEršÔì šÓ&ʼnPNxé“‹Þ’UµªÙ0I6BéêR—×½í5•2³ˆÊtƒÖ7irìŠ@#ά}tô'^AæDr˜§95è¦Â{ÞMÙ™z¢>‰#9×@ÔvÍÎLùĵí™ÝÎüÔÏ8Çft›Íe0 áèJjEC]ŽÅG$ŽPšì¤Ã˜¯Àtá2ü ]“Þ7%_\½â· Ø1‡p£é‘;*ùk—4}Àˆ.HÔùÁEQ€„¾ÙÉ©º’„E$xØ:“Êa½ì;AûÈÔÞöO?>ÔCwÝ‘îù –‘0 ^EÈÁ2r˜rµà9ÀWÞ5JëÔ®üއ…¾ù™X‚8gÿùÎñìs𧬝G÷Ü7^:Å<¨Gìn÷p"û·°Ž¥£½7¾ï¬Ù>\'Çö«"Í\Ø‚×9·æ•I…õYăð›=¯¯n3ŸmP׋㠟é|ãT6]ÖÖÈãlÅ<¤¸^Û !‚Ð'ºÐ'—ð7cÒ‡S‰ë¹·«¹gçò[-³6•K<á ¾µ¾¸3>çð<^‘Y8ÅyµDÑë—D»¤ìb‡v( ïr¤»4•ˆ=Wy Ÿ°©1óˆÂº=‘À9N#?˜°¹¤r;ÇÓ<˜,Á´})=$ˆ¨Y4«€A ª±!ô«õr•DÚÁõèAÂBÚÚ4OÜĜнģÃO´Ãmó@=4Ŧ#4b¡BçpŠw3ˆ]ÀC­µj¹}ÃëIÀ}º3C²¾žxÀòA®C?†€¶$Ù«•i¸:L8wEPTfôÆÎƒFºŸä»YX5Õ©EA ·Ȇ¨aˆïºÀùÊ>õÓ«Ÿx6lk¤ÿë)›ˆk?¿kc ÔŒƒC,ÓjFļŸ#¾ ¢¿RäG•Ì« |½„2Â:;$2[Ç•ˆ=e¼AKsIÀ*I{ÌG”Ÿ–T¬¡|¨¡¬GÂË:ÙëDdyž"!BͰž$N•s 'z9o+NÓÄNéìÊÕ´Ëä$4Éá­‰)c¼W‰<%D¿hÛIÂäÍ;ÔNÆLM¸{Fï„Lû Ïñ¤@Î0 ²Ìíœr¡™öTF÷ÌNùÊ&dMû¬ççÄ èÄLáœN³N8ÎÿœÐô¤ËîÜû,>ñyÍuˆÍÅ ÍñO5&»Ã&úÍ‘©Í5Ð…Ïä<¢üÎúœÌv¨L¶ªךÕØœú ͽrLŸ"жáÎa^a¾aêá†ažá¾`6b%.â%nââö}âŽbvb(¦â*¶â)Þ_þÅb bþâ$Öâ-.à,fbÿ)c >c6nc7.c!Fâ1~c9^ã+6c:Vc"Nã:Þã<îb/îã@d&d<†ã8Ö×9þã‹åâFdE¶cDæàI>bCNd@väG>d=†äLÆäMåQ]ä;Öd_•äNöäQFåTæäKåP¦äV†åSöãR¦eŠÍTV~å0æå^Žd[¾å_þdZ®å`žeYFæaŽåe^åcVædöåæf6fUvæB&æh–æi®änöf2ææpælÖæm6çog4fdl.çv6åz…ç\^LW&çk¶fSNX0®æx>gfNg{¾çy¦çzè‚þg€Fçq6h\ÖågVgvÆçÿ|ŽÙ„FèuŽèwžh‚ög‰.æ^ß‹Æè~æg}~h…^h‹æcˆVi†æè‘&iŠFéŒöè-uhÞhK>醿ŠNéæi™îè†Æéœöij¶ä9Hj¥^j¦nj§~j¨Žj©žjª®j«¾j¬Îj­Þj®îj¯þj°ë¬‰9€—²•³þ”´VëQYë)që·nk¹žkºfk´®ë*kúÐëÑàë¾Æë&ñkÐìÁ6kÀÞkþkÅ^ì¼>lÄNlÆŽëÈ–l»®l˦ìÆvlúxáìPñìOíÐÑž’Ò6mÒNmÕæÖnm×~mØŽmÙžmÚ®mÛ¾mÜÎmÝÞmÿÞæH(¸ƒ‹¸ƒ0€ª5 l0€‹P„âÆÐøí€„‘1€nÏ€néæâ6n΀E  êþn~`nèÌF:k}8(o~†ˆnÌ8E2çÖê&l“ðn08kò6ï"Boþ6žpoøFþ>žøï$¹ïœ˜ƒ÷vn÷îïå.îöƒðpîå¶î‘€;€„ðn0pÐЮE˜ŸT¿ƒà‡õ–†ßÏP„;{P„o=8ë ‡ð‡„›¸ƒ €‹Hriào}€;ÈñãŽr¸œ9Îæoi¯3 ?ëõÆÿP„#Oò%oò''iXï)¯rŸ‰8i¨ó4Wr/ó™`qiò)Ÿƒ/¿ƒ<7 ?ršå¾lpr~0ÿnxÐ8@ñ;XtÐp̘ƒø i°à‰9XtÌÀ†èð†tJçÕ$/k3¿H7€H’8nwôàlxqG'€ì† $Ïò‹øòàìXæ>ªXçš\'/x°u\×uྈ(k‡„`ö—€/î[Ÿò_gö˜ øn}€YçK§ö)Ç´tO’90uŒP.Oö‹Èõî{@qHÇvo· h÷ßöŒ€ÿPr~çÇŒçöá>€V¿ˆàtbwt €à^ts˜Xö$éñPuJTrƒ—uˆøUßx~èx›Àx߀HÈtZ7ù—0sâïdgylpyÈ3¤?rš·y)Rzw?HÀwx î‰÷ç q÷†ç‡^ç êÆu¿ˆ©ïî±Ïzz͈‹wô;Ðx¢pßy'pŸtñž ”§no E˜tžhôœxl˜s[ozºÇù:‡‡$Ïûy/?ðp°'zi0z‡ E€¼¸ñÊçøúÚüο|l n±‡Hë÷†Î÷&EÏ{pjç‡Oõÿ¨ç Ègîïv}±—õ¯î(ë)o{œgq ÇyaÏ ”Çðˆïúñ>÷—'•×/õâÇuäwt”xæ/ø• €ÎrãÏõUŸþ™àqÐ'í õ?ö÷~xë&ò¸i€„ ¯óÒ@ñ_ˆ9ð+hð „¥¸s@?æÀ¦ð¢B†wîIÀœ0’4h`NÁ'Øc8‡@’!HIàÀ9úà O¦ÂðÆïÀŽ€&<™Ò€¢\ÂdŠfA‰4 ììùÓª=p*¢©R« ˆÄÉç©^ƼÈ®AH J›ãwŽEENÕbÔwÿgáX{„3&æ§ï€¥‹¯0`”Ÿ`”“ó^¶Wù²Þ_ {STðïœÃÞÆz۬󠢡üšž<µ =È’CV[º >¯Wh­ÖꥼOC]|µ7ÔF—_|þ× 7É›·sïîý;øðâÇ“/oþ<úôê׳oïþ=üøòçÓ¯oÿ>þüú÷óïïÿ?€ 8 x ‚ *¸ ƒêeÜ{58!…6x—@ozø!ˆùa¨!‡³ItØQ)âL’ÍQ@ÊpGÈö‡=èͦåʆMd("’IˆaÀá 0#À\ˆõdnR^ÿ) †P Q”SV ICŠ`¤X ð$$hb)›’uÚɆp%‡@Äì$@kð¤ÈŠ{b£æš¶¡4~hX•éÉ$Tz´&šÞù)¨õ¸ðˆEêNuE…%¡Xº:c©@Ð)ªLI‘,=é*hj*°Á®7*?ªÏN‚°—>3b³aTÁs˜˜¦%6~"»çlXbódM†ê“[œ {.ºåk,E{6Äϲ)@À“ØDh†y^IP»W†žÅ¾敊 yYº +¼Y_²)¢™`ÍÍ&YnŸ±QŽŽõUĵͦã²é?Ñѹ0Ê)¿ÿ‡áÉ*»ür€Šp$Ì5Û|3Î9ë¼3Ï=ûü3ÐA =4ÑE}4ÒI+½4ÓM;ý4ÔQK=5ÕU[}5ÖYk½5×]{ý5Øa‹=6Ùe›}6Úi«½6Ûm»M¶7qË=7ÝuÛ}7Þyë½7ß}ûý7à >8á…~8≎ã;þ8ä‘7n |ÆÕg9}˜Ï§¹|œÇçùz’‹>ºã”¿úé÷¡îÞêíµÎÞëæ‘>»ä¦³®:îöÅ®Þîéõ>íÁ—^yî—Ÿùñî ¿¼í®'ßùóŸGúòÁ7ûô©ëžýíñUo=ñÛ‹oüøÈ{ÿýìׯ÷ûyì›ç~yð“'ÿxôwÿ‡~úá“¿¿ùüo.þH§>ÞqÏyåûßÛÀÑ ÐwÄ^¥Aê-0r Dý“Aðlð;ôλBÂT°vúë è?评»`û¸>p‚êq!ä`ø>:ІÝ[!{pøÂª0…,"(ÄÉ%Q‚HÔÞøž%2ŠFt⛨Ep;]ÜÌ'ÆÅŒ‘4<ÜO}sÆúЀQDâ(Ç9Ò±Žv¼ãç·Æ¶‚o<)ÈAÆQ}œá!køG󲑎,dýö?Ir‘åy$&YÉ,Z±ˆž<â{2)J;nò“X4å¥èžQ²RŽ¥%*ÿ; ËY²§•­|å)i™J7r2=¶d%.wéÇ^ò2–¾ü¥(ƒ)Ë\2S˜ˆ„2“ÉDöÐ’Õ$& £‰IeªR—Ët¦"C©ÍGr³˜Þìf3¿©žq’sšÖÄ %݉MF²³‘å¦1Í™Nt®§žö”g>ñyN}‚“<þ$ä=Ÿ9ÏpT¡«<¨&:Pî“ ê<&Dñ˜P†NÔ¡å(Òh‘2…¤@1©LPZ•’„¥âqéE`ª™&„¦±éApŠùÀ §>ý)Pƒ*Ô¡µ¨F=*R“ªÔ¥2µ©N}*T£*Õ©Rõ§î©*V³ªÕ­rµ«^ý*X§zÕ°’µ¬f=+ZÓªÿÖ£Žu­n}+\ã*׸¶u®v½+^óªW£Öu¯~ý+` Ö¾ ¶°†=,b‰JØÄ2¶±ŽÅëb+ÙÉR6¬‘­,f3«Y§^v³žý,h{ÚÙÐ’¶´­iS«ÚÀ¢vµ®}í\[ ÛÙÒö¬²­-ns»ÕÛê¶·¾}*o+ÜáÕ@:-ÈqKÏ—.WƒòA t£+ÝéR·ºÖ½.v³«Ýír·»Þý.xÃ+Þñ’·¼ãõŽfê“^ú¬w>í}î}Þùˆ¾ï±¯{ðÛý²‡¿ëñ¯zÌ£‡Àç1°y\“‡Áãq°zã+aû@8<Ï…¿“áø Œ>žÏ‡åbÿßgÄð1ñÛR¬âg-HKñLPôXÆ2f$`ôbÄxe0jÛô #á‡4t¬ž!ç°’•œ&ÄuIrŒÄ‰Ú°ˆÁè†ôñäHýê¿æ³T„l-ŽDÄ2iƱ¤”6“yX¨Él ‘ìd#,AÏî\¤HÃè3†h¦.ADKÛò³¢·“d…Æð˜Zü2)†üD ô–N{*À€‡7¤1êÙ”:=4âG¶VíéÏzFò°‘2?¸Ök1 <¤‚ç^Ø×¡‘ tMlïäf( ¶=¼–fùSŽÛ£8åÿ[É6{ à§ÀÛü÷zÂò$K».êѵPøaÌzFéÑ5nN$!{£G× ¶‡O"T~Ç)Sä÷HÛ­F½A€²8¼=±qLç?ݘÇÌ=‚2é1??EEÄ!éofóÕ°†w&w}íÃsyw> !ù,û²†777›g;­sA¤bb¯``¼fo¿hq½qv¼p|ÁpJÍinÃktÉnvËrrËszÒutÜ|{á~}¯yŠ·{†¶‹fß•OƘzÜŒhÞªyç\èšWîžZã€î£cä®”””™™™›‘¨¥Ž –¦œ”®Ÿ°£££ªªª³³³½½½Ä€€Æ‹“Þ††Ý••È®—êªÇ¼¼Ì´»Þ­¬Ò´´Ñ»»ã‚‚䋊└㛜㟠䵊봃췈⦦嬬䱱帷⿿ëÀ›ÄÄÃÌÇÇÌÌÌÆËÕÆÏÙÏÍÔÓÅÅÜÇÈÞÍÀßÈÈÞÔÊÓÓÓÓ×ÝØÐÑÜÜÛÝßâäÄÅæ××çÞ×äÜÜåáÜäääéééÿÿþÿ€  &Y‡‡Dˆ‹Y9T@ I‹ŠŒŒ, 2”–‡GYP[YR‰œY"$[[R¥•–„ 0[¯R²Œ@9>KD[¹R*§ˆ»ÃÄ[D¥ÈÊÒ¹N;F WOŒ4¹a£ %*6  0BÅ“,W¨±TÅF+8PòìPRD?l‘7#‚F-å°AE£Œ!ù,ý³†777“SR°{|½p|ÄktÍutËszÓtsÑsyÖxwÕ~~Ü{zà~}¹|ˆÑ}ƒã€çŸcä­ššš¤‹‹¡‚—¦Ÿ›©šš¤¤¤«««¸  ¹­­³³³»µµ½»¼ÇŒ”ÒŒŒØ€€Ò››Ý¤¤Â««Ì¬¬Ô§¦Ð¸¿Ýµ´Û½¾ã剉ã‘䗘㚚䯃䱄㹖⼛㩩㱱ؿÃÄÄÄÉÅÄÌÌÌÐÎÕÒÑÑÔØÞÛÙÖÜÜÜ䯯åÏÐäÒÓãÜÕãÛÛéÐÐäääÿþþù€6;F†F8‡Š‹ )Љ‹‹=7’‹DF?Gˆ™Š @Ÿ:GG8?£†5A†?8GG?­®‡³G¶¸º²´¾G43Cº¼ÄÅÉ£Ë̶2®ÒÓG1>8Þ½ÌĶ9Þ‘ÂâãÅ$$B‹ÒŪª ð»Ã>ó%*x@Ñà…"^¶pd(6‡Ž,X¤ud…Z0¨àñƒ‹d ÐÇÂEBÔpÁ¢ÆALlÈnÞ Àð¤hÅD”à¡ŠÇ § aÑFˆ8dÈðǨ,l ²Á`„GÁ`q À!ù,q}ɇ&&&555:::DDDJJJVVVhhhwwwV«nr–|x‹yw—e¦i‡®eˆ±xˆªw°z—º“SRœ~«|\ºM¬m}§yfµgu¹s{ëx9ð{.Ü[\Ç^eÖ]aÎf_Î~AÛkMÜgU×vLÖwSÉbhÅktÈugËsxÙcfÓmrÝvhÙxxãZXègJäcYësGèvVãfeåsiäxx†mЇs‰|˜˜m„™vŒ™~•¬x‰¥}µx„Æ}…Ô~‚倹€Z¯Œ¯v²ŽmÖ€:õ…æ…+è‡4ó‡%ò‹5ò’;͈G̉SÎVÒ‡FÚ‘NÍ’eÈ›qÔ‰f׃pÐ’i×–xΤ}ߣiئwëˆFë‡Vç˜Kê›Yð‹Cñ•Gð›Vègä}é—cê•uð [å dì«vî±|ð¤bð¦ið©lð«p‡‡‡‹„™–…‡‡š•••ˆŠ§Š”¢„›º”‹¤–—©š›³… ¾›¥»¤‹‹§†™§œš¼€‹»•…ªŽ ¬ž¯¬ž°³•¤§§§¦¨¸¨³¿¸§¦°ª»´°®¶¶¶ˆ£Á—­Å±Ç©¹Ì§¼Ô·»Ë±¿Ð»ÈÕÉ„ˆÈ‹“Êœ‚ׇ‡×‘ܘ‹Ô——¨ɥŽÂ¯ŸÑ©„Ó©‘Õ²Ó³–Ë©©È¬¶Í½®Ê´´×¥¤Û¶ªÚ¸¸äã‡ˆã‰„äŠŠé„„ëˆ‡ìŒ‹åæ™‰å™™åŸ è¨„æ ˜ä±„íµ„ì¶ˆí¹Œé¹–å¥¥å¯°ç¸§å¶µñ¬«ó³ªñ¶µÆºÃؼÃä½ÂÙŶìÁœêŦé̵éлôË©ñÁ½÷ЪöÕ´÷×¹ÇÆÆÃËÖËÒÚÙÄÄÐÌÔÖÐÍÕÕÕÑÔÚÖÙÞÚÒÒØ×ØÜÙÕÜÜÜÌ×ãÜÞáÞàâåÄÄåÇÈåÉÊîÄÄîÍÍåÏÐç×ÈåÓÔåרæÜÔåÜÜëÕÕìØÔìÛÛóÆÅôÝÇõ×ÖåßàõßàåàÜôçÙôèÛäääãæêëâãïêçëëëïïðøèèòòòýòòþþþÿÿ H° ·‚ ê³§¯ßB{ rëgÏ^?n¹Y³ÆÍÞFnúf´§QÈŠÖ:ÄØðaÄ—aÊ”yp¦M„5oꔸ³¢Ï~0O½Èq£QŒ Ú3é‘£E¢HIŽ´¸aȪ7¯b©uëÌœYõu$ЦFv¤úhZ‹9–͈‘`¿zΞÑëÇ·¯ß¿Oÿ LØoàˆNÌ·*X¯d5Òëô#ÊõeüH÷aE¾ŸöC†¦4šc>S«®mµë×°YÇž=»5íÔ@u>†Œ0¥Ôš?êã¬y¢ÀÏã–ý'57Å«ïа٥«´²Û¶ok÷™}»öî·NÿO¾¼ùó›7LË>-FΔåR¦+Wß²/¡ A õ…‹þÿ(à€hà&8`R7íÆÛ@ýX£GÌõVF!-ÔE?ô‡¹5ƒÆuö$ƒ.Øyçx*ÆÆâl¹5È•X‰5VB)ÕU{œqøOq­Õ‘ou63h¨aN:k LŠ-Bem*Æh“ƒJù´ÖOA¥¶åTì=´Ðda˜ÜQZñã†iIÎ#e”âüŽ:«½8¥jvÂfåW0i¸’Y.½4QEW5F(ZÊ}èÑSe2RÎ̓Œoãæ›Þ©3‹*œ¶RžwRéÝž4Á„™@å¶©ù ŽºÆÂÖ®jïÚkª–ueZªÒðQeÂ'?ÂÔðB%A¼`ÃǤ#j‹›ò¢8œŠ[lÄ®MŒ[²3^e#Ÿ6=#Z)çžXŸÓ 3ÂÀð (”  Ò]úZwßr:‹Í¯‰Ãé׿€ŠsÈêö ¼[ Rpï )Ù@„úêŽ0|ð‚2|P.hèÿrlEê\0±¯}ÛÊ,a‹=6Ä£ò|v´^yä³\9iM­!Á ?¿|PC 4äÄ<¥é‚KËdWä+/ª«Âú®‹+®]Å?ŽSäNÛ6¢˜ÿ£9ç(° Ãð(TbÏM˜Æ†Õ²U´éÃöÐ<Ë:·X}hfÛÓMfÈ‘X’Å·Dc‚$÷/!|À $”  .M8qŒ2j8!ÆO6o¯‰ÿâ:õ±cÜvhw;í‰F3¬‘j*dˆm|ô±F6NÁŒ`8­n0 šš°{˜yÉs’þΡ5pqÍz¼Ù§½‡í^Tñ‘˜Dƒ )ç=Ö¨F*Ø øÐ‡4À.ÿÆ€¢5ŒA h0\Öp¬ЋMœæ”º^ZW2 ˆd“çÀYÁÌA$³¹ÈBì`†c0 Ô€ó`ÃiŽØ7{ä"‰öÏ9xÁ‹ºFS_ó”ìbwÅDZX¹Ö ndÌü)"Z ¹aƒäc5A vÁ‹¨¢D¥i–g5 ÁyL;E×øj¾ðÂTÀB²ðqŠôâÅÒÃHæx¤†8´FèÚ±Ž5îâ5hEE̱ 4ˆÁ ÇhRÜ”þÊ„°)×¹T‘.Z²l2ÒÞ±g*X‘³ qå8¢‰M¬ã?lãS£Ž&•Æ ¨Leëú÷ÿ¿?2¬u­¼âvl™½‚-‘(aAmT¾’„PmñŒ„ ²™i ‚ô¡çj Yä"öP2’A¸ì<¯"^›Þj¤‰”ÉŒfª8¡@ÇÕ¸‚J„cXY «´ÄãôCî ¦Sæõ#n¤‚ðR°@jSƒß®Ö°ÿ©cu«‰(P‡¤àœJœ7GÐp­_ÅñŠƒ4d4’Œ*àãLQ¢¢šYl®àÀ ZðáeÒ xÌ™Ow°N®"ÞØ Cø`ˆ«b-Á™ÅCæÄ#†,`A0c4¾(8DZLB;ò#ˆºî F XpƒL’ ³øÜÎÀG±ÿêÏ€üÕa+¢UGød«ö`Þm¿YS³6묙ÝÞfÉGmø+H¹c SEZ„üðÜ ` )$™¤ ¾öºáÎFxÄo Ç6€TŸV¤,ÐÎj‘{Ôe+keH[ö£ï=p® Iˆ?Üñ à!N3dQî–«ëõ¼q‡ÅFÃF˜ÚPšdŒule­ì!qŠ_H†Ì=Ì"šP?Bª~ðBÂXêðîÏÆVÅ6hVÞ‰íqÐØ*ìð„(BÊHÒ‡qâù*䜎y C´–¢ '_(îŠ>~qaŒ£/ ~¸Æ˜@ Qð_iÓNQÿˆÃްÕhÈñR3MŒni@D~±%¸Ô?Ö0çØ£®pÇ8N¡ŠÏyò7(A \ð+˜Àªðl+§˜Ùãv˜ A<€Á KŽX“KeÀˆG&ºt”q¤²»ƒäªFêpÅæJæh•CÒ¾Št Ê ß®ýÊ'œ²ÇVMù†*@ Í3ml‰žj[û[.Ú'I7G7Åhø UôC/H j\ô, IÈ{Þ™¿vE£?ðîÀr{|Ž€„4*B%•”ïe²|YmðÏpq'j‹«®œ¢ÔLc®ÛçꆉYÄ NÀûÞ“Ð\°a ‘W …-ìˆô†o×F’QDÜÚ´æ‹"øK$‡-ÖäV—1ª;z(ƒY´ö–@F b0&XŸ ÕO»{Ÿ WÁâEÿ…aS'Aƒ4S%ëä5Öjn…øýeÖ˜jU]GqÎn­eA¢?ý1$ ¢”}j ¢P.ãÒ€+ð5p°¡DºÀöu¾g\}æ™›•ñ )°B , ¦‡zzÇNw wäaêð ³€8t +…@ €–¤Áu"D³Ãg:á a1ï÷F˜/ÃrÔàU@°êV7 €J wIàLdJ¨.Zcâð@ d)ðI±aÈ ùTå,¿°[*²jìW ÇH~/ú•š1&n•@ ”€‚B0ƒ¿0 à ÿpHp}Ï´ [°aóà?³ Yó ^³ ˆ É6mªô5C‡µ~h³ûeÿ°‡3±Š$áK Ñö@j”ppx0 Ä :à‡p E° càcÀuød'E†ºU.ÖO/#rž;`Gy:q-mAv¨Rs†vsmQÐHS>° ‰Ãˆx`lh|s mH,üSj=œV³ô2)…lj%v˜ŠÙȱÖ*¢Ú rãˆë0 ^õÿÈyÀŽfðŽM’{>S|Ä)ÐÓIEg[ãŒåЉŠHX„ÈÁŠ®ˆsŒ‹„ò'ú @ð ÂàT~ÿ Ðè‹À(Œ0Ç`‰Åæ?`Ó:…¥ ­$1ƒ#Gluˆ’‡y~•6±„™Q>¡Ûè%Üp )ð ¿À(€ 3ã:óÐ ÐÐRp‰,›ð)UÕO$„0ài¼@—J¹‘¤Ø è@×x‡Ua•T)yèKe¢­x• ªðÜð öÆMÒÓc  H°Rð™*ðUù‘¤È:ðzPx©f,™’˜Ù „žè”ü Lãs­À aŸeÀ:N°€Ÿ]ÐüéŸÜ øÈ:¨ i>tÛ`™(pƒ)@ b²©\´©’/y›õ²1Ùðà—Cäd ɹœÍ ƒÃ2¶“P  À f–a÷ +ÀÔ @BDh;-YTj—1ÝhPA¿P[öm ×ÇJð™Rš70šF œ³ R@Á"l7)ÿà–©€¦à©¦âɦ˜g$?bvyñ!©PšÁ…öCœbŸ`’ —|iuÚ `¥ W PîÆ ^•uØ)@ ’ª~ƒ)Z•+‰p‡$i¡ ú€©p Yšiæ€nà&ÏŠj’Z–zq#0W  ' X`›>~BPƒÌ!m/ž8žih’dÉš Ù ®c"j ‡w†[28—ÙZ÷0àPí#i$€ ¨‰ ^•/ð0Ü  [2©´‘\¹Ùj˯#†Q¯÷ú¢Ôe  dÐo€[3šÑ Àwç>ÿäWàF782¸—e"±Њ룿*¡îÊ=ÃZ1òÊÓ@¿€ _isèM cMP ûó+â° ˜  ¤ °‡Cq¼pqEû´t*{t8§ð£Åª±˱YI˜D3 /c2Pn(Ð×à5^Ða0d  ñàs›‚ sàÀ; 0 ÛUtަ¹7`Š$!±ð¶ÿ° »p€SbMœò"¹g•ú8mQGÈ·i± ] 9°(0¦ÐZePÙi™[;ÀP1 ¶Ñ0 0œÛõC5 l º¡´j`¦ 3™¦eSHsÁÿ¤póÙð7ð "€…P ,àwð9¼™k ;Јà !p¿Að9sØ`20q*åmºÕûjp S²0ÿIûº­{6K{eð$SPS§50c/àI>çIêÐ`7pƒ8àŠ@ <Ј2Ë:ÈÂVÓë¶,ºµP£Q¢MµÝ¤¦×öÃ@ÄB<G‘ ´+ µQ2Àqð˜àµ›`oÐð9›> °0›0 úq 2poúñ9Ã@ Œ`4\ÃA Œ pÐŘ€ ÂS§oÜH˜á¾UÓÀ 0¦Q5Æupa%žÖhªÿkÉàŠH'âà¿j»³¯QÀ5|À›° ~Dš²¹`=sY®‹·ûPAb Æ]ô4? yù97`j° É0q€°UA@г€ ¹`ü9, ŠGÀÔK¢KæûɳqR Òc¨V§<Á"ÁÆåq’Ð NUc›=­^Édö~ðœ [šb€¡t>€u«QÀ° Îü£P}À§p¬§ÙœHs(åâG¬ÊÞLsXi‡ Ñ °: Û5,Шâ% ǸÁù>„Ȭi¾ d ÉÐ^ÿ°xpr¤¶ú³ÿÐÆ† º ÜÐÐÞABÒ wÉÀU•”·ídõ" Ä€ ÛÅMÇÆl  CÀ >ä yÔ`™8² ¶€[¬ %À¯S{Yç%ûp@=  ±0ʤ"›2 ›À ™vhæâ<Üd|¨LÁ%!ÕúP28úÁÉÔ\ÝZÏÛ¹S iË)|dÌbÝ šTž6p­mktÀÖðÓ°˜,Ò¸€$‘¯#K²0¾Â)ÌÀÜÌO~¢| ÑÅÀ €Ž6‡#Ïg¸ž¤Ò0.Dés^à/b@7ÿÓ;ý¹Œ0 ‰ jìÌÿ uóé¹>ñ ‡›Øœ ¿0 \“[CÝaîà¿ ÁNb!ËU×P’ 8@…ü:µœIÜE^@fœí±U³P^3`›Péת‘ öæÄ£p9ƒ6 ©ÐJ1,tIX_s_C–ª1Eôè:‰Íßíj©ÀG(»a#ðp©0 `3áSÕà?tcd–8ª@fª j0<7€ <ð!!¾$„ÐX½‰`†ÀÚª‘š¤ø0˜(€´)¬,/Ю´šªÀ4ý­V‹Ç aÐ4à kBRÐø¼EçCÉ„ ÜÿµGhÛIœ}D×éóà­õ ”IoÐ0]~­–¥ˆ.øêI6Ãñ’³@ 0Vç%&vúÑ•7à"B5ð &’ ^ó¡T^èÍ«›¾?Í+7¸NãIöpÚ©qRÖ<Ÿq ¶ Eÿ9جÚZÊtq2+V-î³û#çt¾ã©ÌêߨH—±¬²Ž´në}Cì5P†œ>Ä:¿¾]·=ìëìTÈ®ìU%ïXÅå1 .è‘»­5Ÿcèâã¹µ|„T:¾Gû xîØ‘ ©àËÐç¾&ÈàèÉ”ÙÌÛ¼¼€è2 èoÄè}$¿‚( “NO#‘û˜ÁÿvMÖN'Õiyiè2›L[;¦Ò™ßà°ßªŽÿíY õ¢¬ä 3àHTGìîsÐ;q?ääPN†÷®»)Pg´)oN8,•xÞ°)î-°5Eç–6Ö÷ ©Ô†.Øù9ÂàÛàÎØà«Ì$!Â0 » ¹Ðt¹~ç?™TtQ„Á‰RÏûC+°Ì­©UBvŒlD÷Àíý9‘™¹ ¼Mr¿Îu?ôQæÔä¾·¢Ôø?¯Ôµ¥X8>„Ð$,%‰E{ÀªYwœî¹çû˜0û¯Óƒ@/ôwßÍ}úºâmv0IÔ,ÚêñÂùHqñ”ð{@ ¼ÿer¿E. ¾2Htܼ¨i0 ï¢ýÐða÷ðâÛE°ñšÄýãOþEgø5pý¯Aj(@²'‚#{ )P°§J•º„³T‰KXÑ/U7jl|1놪„ê~Íâu.!Fp û¹û×ÒåK˜Ü`ΤYs¦L›9uþÙ³ŸE A/ªš%n“ªV…ªÛ8ë—ª­„&¤D¡Q4D(Pòvg`4G î)&GwQJø´Õ/76Iä5Õž[pàܱÜÙ²g_À~æ¹ó§Ý èVm¬q#åÉV­ê¶­Ãr “Smµ­êØh îÁf]+‡ª^àMAÒДànXþÿ¨Tè92jãø/a¿Û>ó0b‹å*_þ•°㨠e3~hws´Î¡ÇڻɤoE’ÔCa’7i^±¡´'›vu¡à Z† žïá}‹çi9P¨Tù“Îá¥~ùņxQµ_ġˮª¡$+Îþû†‚;*ºÎ-¸›K•É€z°²¨jüøËi?Óé¸ÿìÙ"h4zªAÊ&"ª"‡ƒD"% ¨F{¼ò&!­¤J£¡QG#^ʯJqæ«KfX ÆÁtQÌhüïÆÎt|®¹»¢Êr A²‹ zàˆÿƒ„‚=¼ã0¼»f‰Î”çjÈè£ÿÔ0ªlË.[Œ‘&2ó#ÓLä°À\°Ág©ðB$½ k4'ŃÀœjʬÔP|nEGío0}Ò'8ÿ´G9új`³Ð¤jÊÚæT%%häË3¨+˱'J¢Y(ù Š ¢b‰rHQúì«ÕV—"uÉkҵƞ{ER1Æ«#+š®1ø„b¯Ùz§:-µe‘3…2«L·Ênçœåê»ïKro Lk¸ÑGn¬Ùµ¦I}%Ë(¤l3B ûJTR§Â¨,·Džê¨¢~AÑ#ËÊ™Å2^x ÆKý"¾µ/t7¦˜]ŽÝ­Ñ!%¢H¨7ãDŒÞL*Èÿˆ&úP‡fƒÑd†a²~Æáfl²Ë6ûl´ÓV{mµÓ-Ûm¶Õκë¶ûnh^x¡nL^0oºMy“ºõÜîQ6Ùd”à ߛî¾ÿnÜîM0Ùd£Ê7aA†S*Û„n{Ö7bsÿ¡ØbŒ5&ÎèÿV9©©:ýåS©í‚¦u¢Äiù¿Û4t¤oþzšv„ÜÒÿAW]¢‹žÑãU Ø®l‚÷ÿ¢wè±äxqJ1ùE)å SPPl8e‡{ö¹\ÂrµgãÕŸ÷x¼M¤Øûñ‘ì¹h¥z‡’ÞõÔ!‘Xü5ó©ÁúÈq<[%o0óXEþWAìaÐ"²“Pÿ×L*‹¬L´™Æ:~ÁGI….¡”ÿ4X£ j°iíÙHg"'‹ EËÒ‡è ö>‘‚Œá …RÄ Î5¼ÕrøŠCãXᘀD›´†FDï¡Oum œ—·.3 ZýPˆW,ŒýˆÈEÄxÑ"#aÅ Ê"@€e¤ƒÏ9$â”6 TãûTXÈšh1ƒp<"rx¡5æÅ@N !Â0ó/\íÛÉ!Ý·F7VPŽpåŽd Š20&3ЂÐëõ 3ÂË™0xÖI6z—¡ôØ(¹8J^¤²êOצҴ&Bq˜ ÑÑlÀvK^]Q—ÑôÉ }ÿiD` “˜ÚbSPyC¦,ÓÍüšJ Ù.iæ’u¾º¦5cJT2ÆeªÐëe)Yg¼°eù3MtVSƒí¨#! a!&[Qk:~„Žs“þ””:yÉNFNåš#iÅ bŽÿ„¯!A H+â‘𑤳¨@ߘѠô¥¾êÇ[jÈuº¦@‘©(+XSŠ õs©Owj‘žöò§6MgS‹ªÔ£Z0ªRõPWм›&ÒSµ!W ú‹œqr— $k·:Õ¤bwaFo®Á¬ÒD‘]äjWÑú¼èE¥cÅ©SÍZP¯Öõšì±ÇJ‚ œ¡:ï©j½k`9=ÿþ5…q5ÎY£šV¾)yÙËa “XHåt‹ŽmìcÙêÖOöµ¬Zli/‹$°òB¬ÔTmmY;Ó×’IVM­Ï@+±‹f6·®­QMãv\ä&W¹Ë=ÛÜ&÷\èFWºÓ¥.tççY¦®V®–=*fGKÓìÚ–¥ÁýîpÍ[Üðú–²0™kûÞª¦w¼Ú­lkϻӤò–¯êõëmJ\ü.»–, ¹`Ý¢—À½ï_qÛ]ø‚wÁûm°¡ `˜æW¾Xíïví áÿG¿´å/}Ù{à Gx·†k‡ëû`c1#¨x9¼Xá‚XÆv¡1QmÜâõCÈC&r‘‰\X#'ÿYÉKþ “ìd$?yÈŸ]ïdÙH¿÷aÙgZþ±•M ä.‡‰X,q˜Åìb0ùÌj^³™ÿ9æ6²ùÍUns™å\Q4§¹Â{¶3Ÿõìg/»ÙŠy®sŸo,è9ßY¨cþíÏgE#–Ñt4¥ýhIºÒš¾´¡íé@GšÊœî4  êSÿùÓ¦Þ´¨YjT·šÕ©†õªg iL—‹¹»æu¯}ýk`[Øc›0‰oëX—:ÙÈ>ö¢IílK3ÛÖÓ®µª©Mklg[ÙÖæ¶¬¯­miwÜÐÎõ«Çéh“{Ùá®v»ÅÍîs£»Üv··ß o{×;ÞæÎ·¾ñ½ío|ßÿüx¿ý­îfË{Ý Ÿ7ƒ^pˆÿÛàGx .qŠ3üá×ø½9>jW_¼âùÁ;Nr‘ŸåÅ®qÃ)¼ñ§ä!§wÆK>ðšÛ\æ;ŸùÂ{îsžç\ç,÷±Ë ó›O<æAwøÊ™þr§ ]åJºÔnq¢+öÙS¯ºÕŸ~t¬{=ëZúØÉö¦Gê&Oz××Îö¯·0p {Ýí~w¼ç]ï{ç{ßýþwÀ^ðƒ'|áû8°1ñW\<ãÿø17þ}’÷å+y ZþòŽç|ç'yÏo>ó‘½è¯ 6¢þôcV=[ÿ¾×ÃYö³§}ím{Üç^÷»·ÿFZb$ÀbÀÓ%t ¾ñ‘ÿ:ŸËƒa„!ü¢|ëÿø hÞ`ì±ø~(àÜÿ4œŸ`YøeR¾æÓ @y0äï"{Пø‡ x¾üЇ0:}0„0?@€Åƒ@Fn€†`(à ƒ8€–È@hH臠ƒœ¾œAh8ÔAhæãHù£ßû‡>þ€°‡ Ô¨)8ÈÁü°2à°¾üs@H/l }8€ÀÁ–H€$Œ7,“C!¬)kÐÀáè‡@n¸Ã/Œ=ÂP>,TÀ@4Âá` ›$Õ€ë‹F|ÄHÌ>è>4¼ÄýK€~àÄH€ìEvQ>n0CÈ?S¼DÂèã;ðÄ€iJ€+ÔA ¬)Çü`Fg”Dn=”Âû[>H<üE›pÄ–°?d2ì¿3 ŒPäB€6\Bík@©Cå €"DEþ€€DùÓĬÄÿá€H h`$tW$€*D@ˆ„@HÂÀÇ €8G8PÅsôÅáE—ÃÈ@:ÀYÆ5ÇEŒL¿2©Á¼Åø¿ßsE9T=}8JÕcq´GâÈ>»c¾VTOzÉ—¨Æ|tÆÝûJ° K±K²,K³ëë½âûÉÁDË >B ¸Â@Ìn\Í<ÀpMù[ÍÿÖ|Í ¤C‘$Ûd„ ”Mc,Ͷ<@(DÙTÅû€ Ap\ÉàÌÆ °†â\LúûB€ëÌÂnL€é„È9tÁ <¾n„ι,LóÌ¿LDHCˆMGÙ POTÜÀüB €hAö¬Ã3€¢¤O¶´OýDO%LÂð½~ðDkÌþ$åQh8@ëãF$ôEUtÇ€)„ÐÈÍ~Ð`N¤Ð¸´Ð!lAêd¾ DµMkXMìÜMÙÔM äQÝd>kþLæ;@ê4„ „EUKh€¢©¿¤ôÊÈ|>uÊ.E=Ê.}F8`>ÿFÐÒZLäã6½R9݉|Î9½Ó+2„ M<íS?ýS@ TATB-TC=TDMTE]TFmTG}THTITJ­TK½TLÍTMÝTNíTOýTP UQURÅÑa;UTMUU]U`‹„°l4·+»¦rU°„Õ¥Û:8à ZýJ[m;ÚëÕLÛÕÝÖ«Ë=be*aÕ½c5;ª“=]}Õ±\V±›UhKiM»Û{ÖZVnµÖ–HVcíÖj­VpŽk};Û;×h*×l×mõÖ`×tuW^íVy­=u•;eµ×q}×~­×xý×a¥× X=X€%WÝWxUX„-Ø… ×!ù,U~s:‡&&&666HHHVVVhhhwwwMx¨V«nr–|x‹yw—e¦i‡®eˆ±w†©p±z—º™}~«|\ºM¬m}§{e·guºq|éw;Û[\×]aÎ~AÛkMÜgU×vMÖwSËdiÅltÈugËswÙdfÐlrÝujÙxxãWVèhKäcYërIèyVäfeåsiäyx‰m‰…tˆ‚|˜˜m„™vŒ™~•¬x‰¥}µy†Æ}…Ô~‚倹€Z¯Œ¯v²ŽmÖ€:õ…æ…+è‡4ó‡%ò‹5ò’;͈G̉SÎVÒ‡FÚ‘NÍ’eÈ›qÔ‰fÙ‚tÐ’i×–xΤ}ߣiئwëˆFë‡Wè˜Kë›XðŒDñ•Gð›Vègä|ê–dê•uð [å díªvî±|ð¦gð«p‡‡‡‹„™–…‡‡š•••‡‹¨Š”¢…›º“Ф–—©š›³… ¾ž¦¼¥†š§ššº€»•…»“’ªŽ ¬ž¯¬ž°¹“¡§§§ª©¸¨³¿º§¦°ª»´°®¶¶¶‰£À—­Å±Ç¨¹Ë³½Ë±¿Ð¸ÀʺÇÔÉ„ˆÈ‹“Êœ‚Î–šØ‡‡×‘Ú–‹Õ——¨ɥŽÂ¯ŸÑ©„Ô§”Ö²Ó³–Í©©È¬¶Í½®Ê´´×¥¥Ý¼©Ø··äƒƒåç™ˆå™šåŸ ë¥…æ ˜ã±‡íµ„ì¶ˆí¹Œê½•ù¸€å¥¥ã¬°ç¶¨å¶¶ò¬«ó¯°ð°¯ñµ´Å»Ã×½Áã¾ÃÞ¦ÖôìÁœûÅ–êŧé˵éлôÊ©ñÀ¿÷ЪúÓ­òÒ³ôÕ¹üÕµÇÇÇÃÌ×ËÒÚÙÈÈÓÌÔÜÔÍÕÕÕÒÕÚÖÙÞÜÔӨרÞÙÕÜÜÜÌØæÛÞáÝàãåÄÄåÆÈåÉÉêÂÂîÈÇìËËäÏÐè×ÈåÔÔåרçÜÓåÜÜìÒÒéרëÜÜòÉÉ÷ׯðÔÔåßàåàÜõàËýàÄþâËûèÕäääåæèêããëëëïïð÷ççðïðþñåóóóýôôþú÷þþþÿù 8°Áƒ*,¸0a¼‡ó5¬F/žÄ|Õže|ÆQcµxôÆ›ö‘ãÇ|=>¬Æò£Å†0ùŒIáÌš8eæÜysgÌž>'­ t(Ì¢Fmî¤Çô'=Šãuœªò%¿”S-ndù´%ˤC‚U(v,²f"5»vl[·i…ÆU;— K-;–ÔòáÀ®[½V„ˆ2â@|ðˆ)>†²±ãÇKžLrå˘ gžL´.CÏ:A‡-ð-XÓFŸ­ÜøÔ$=“YJä1_¼­OiËh[ì»bÆ\µ#&ÄãÈã%Kμ¹ó‡ËŸK}:òÙGE£º{\¯àËÿO¾¼ùó^ñê¥Ê6ìïõæm¹J»dÉ4e±‚¿¿ÿÿ(à€hà‚„Þ‚ 6èàƒF8ÞBÝUaNù]‘8ØD-Š…m}ygaª•hˆ«Yÿ%P:fœÑË¡ˆêHŽ)£ô:Ê7’FJ˜•*”)NÇvv)hÉ*«_¥U3[EÅ~–mÝéÒlSòv¶/ˆV‹7N:,£˜ ¯£8 ‘¹ÂÂë\µJ1»ìw›6KÓ[ÐÊôÌ´²Ö»ÐkÏ$ù/µa!yÕ·QFõZèôjJ8aŽÙ«»¼nsœ¼‰r̽tÙ+òȤéËãÀ ÊU‰h.4%¨¶Èjd bë’’³é“Î0¾¶›ëäô ºÙl,,™Äî{/[%çÛtCt¢Ø2…SMëÕjz­ô‘Û¨ÃM#;¤C½Œ#ÇÌñ 9ÙôJñ»G7‡öuJ“ÜéÒwÛ‘"6ÿ•Mƒaw'G REÑ`Q¶ÄÌ9äì Â,¸ †¸Ê}\8ìNüÜ6=2K°q?šôÉk–n:Þpé]Ók‡gtWI®ôžÕ€2Ë9¹`ÁÂ_¬"F+Ã>tçî6‡yºŸƒºÑ:‚lêI™ü7ÒOoPRé’{yD’ÀrŽ(_ì¾;ĵ²JÙ¢?„.,îÿ˜sãX¿œ¤» }ôNïïöJØë7“Þ *”¸ùX ‚FÄ£ G å”Ç«¢Å£m¦èØò”w#çYKªKKõòÂÓ5¤T"ÒS\Ÿ‰H\ ….Æç|`«8z 2 eð’ÿâ—¼YÈOƒ„[óêfB>zOŒ‹Ê<ätÈ…ƒûPz4Ò‘ypÃPä¸p„2ÄŒ`—†pHŒ]oÓýj4Ç€Y*„©Ããõô”Á¨-Ïz‰“òÄ%i(0-äH9l¡‚Fº`«èBŒÊÐ.ˆáEb0ÛŒÚæ+ nŽQÅSbs´DMD¥*Á"³m$²‹G u⺊l#¢¸Å,@ ¼ì0ƒzQÉßŃ—$%D Xı9»ê°˜7Ê:R‘SNä#ÿØ4BcÍaÒ‚åBœ¤²µÔ‰…wá¢FrÉ:X¼`."ÎŒ0A2ˆʼ`Ï<Éÿt™Bèò™(“hM&®2›ÚÌc*‡NB Dµ ¤Jn©vjdï|8\!.˜¡\š`uܘ.8:çbÉ5 :ºé”iþ;MÇÒÊA­*vFtsKøär—½üåqÈÁ%☟ÊDWÈœá mü¬ãÏjtÍn ì¥0…â½ç?Šó Db ¬.%X‚ "JÉ;RŽ[¼À/xA)JÁ !Æ#¿FñªSÁ‡p.ƒÉY"¶6N>SªÓ)¨)ŠU…ÆÔB6©šO¦è­MEZW™ÆeÓiQäI|©6´‘˜r‘ëð,?ø‘ã}ÉQ†$ІÿŒ ½JÞ@7¨X—æ­±2åæL_Ö•ÿ$­QÍF´¢Âä¾§Éá‡5¬¡œl€,x °LæTgx= e<®1 BÀA L¡ÛÝ.¯·Öcìo›ÕÓ}E R¹æUc Úa…5øíì’¢ôB³>DÓ˜(´ëF˜"®]C3Û›Ïh¦K¼ñ­! 2ÛxTν¡ƒïÜ„–ؾ °~Cv¿èi…QRFÄBÀdoÒÅ9ʰ€ ‡v]_ÍÖY†Áa Ó vÍ'o[ßúÎ÷Ê$>q‡,"ûú)#Jn¬Rx"ö°Ñ,@ÑŒfì@ÿJñ!œÔmý®ñó*Ã@hÂäˆ ÇMÄÞ4ñ—gªèE«E²­¬Ÿ.+Ë+ºÇpÅÊG8DÁ zð9ŒØeY…MP£mGö3Ù›ŒÙJÀ IX–ŒBúhˆNˆUYL_£ì:ѪãªqÏÖ«ÉÒ¹¢2ÜWŸÄ Qˆ‚òH„ Ií|LX‚S=Núªˆ(D’„Ù*C˜¸BìÙ¨<â^GºÑÃv·£c2»³šè$ü0‰rñ½0–ðJó`F Þƒ|à(H@€ÏÝZx¹Í†Úâq74Á ˆ@´`†‡G*×û=%–å ïœüú*Oÿ¡¢CuƒYˆºî6,/R”¼1Š[Œ/ €åÅÁÑeðYÊÉù+D„6[{žá JЂ]Õ<Uõ±š‚úQ$Dõª‹g³æÁ |òbæ­s#Ì(G92‘‚HàçO'"‚ ¨?ŸH%ú“‚´ZŸC˜*¼ýï€O`¬NøÂþðâi·¼iRÓœ¶82ˆ£ÙgA´o«`‹#Ó8Ç,þSHü!Ø/¬À+p°©Ÿø!$`e ‚ q¸†‡{q-ܪšìöâMÎè,o3- ]öµ¬8xSMZ…iÍ4rÉ Hì Î/(8Š@„êg …Frs²Q÷¤ÀgÑ(¯ÿ«•áa{Š! …úð¡s¯k©#«÷»ç}\‚æ½ù-‹•. ^L…®Àb³"FÑE`C€ hBÄ1ÊÐ9€uð²Ø€†€Ëð¿P(àà öeëWJ¾%r&x‚ñ÷~RD%6µ:Í5cÞâ_'Á^ø°‘` + H€€ 8G° fP"ˆ|æg†°dÎá;Æ‘ µ#SF‚UæX(he%§‚ó7`õÙ“0•¦'Þâ´ƒ@¶€›‡ƒŽð +°]`pho8–„~GJ&ë }æÃá%ÉЫõ^ìr$wˆˆ8rXHS)@Úÿ†0×oùwô@Ã0p&Àk؆]0F0OsHä° Äa6̱ pP¾’oà˜Ô V@h,E…Šw…Z¦ˆ¶x‹‰¬³B´02H`U”±0 ¹À™h’Àƒ>¨€F€ XhÉ€L…F³` ìå(ÕP#Ðp#àÏÑç·F³èt…‹¿ç{V˜‹ãÄô¢/ø*ÉÆ'P*š7 :€`¸L@@ 8H Iö„Oì"1Š’:àj#OÏ¿° Hõß°.³€aåRˆ¼¦Ž¾ ’]uõg2yyO¡'Ç—5ô€%ÀØ8 ¸À °ÿ qèQ®P“ÃFd äp<³À9”€ˆ 4‰uÞ†Rôã‘Ï“…é8’º¸‹ !32cˆ“U+*$r'%Kó ²4Àð0?à ]€]p~G}¥(–zLµnç9——:réŽñF•ë³0h6B‡‰-…¯üP”ðQ“pf06¾Ó é.JõÛ¦O£€[¥—v Xñ ”r•D˜Q'•òWr‹)|ØT’³Á˜â”!Éöp ¦ ?5˜ ›É%OœÔL½bAî}†4~•—¬ù—®Yîç,ìX•‹XÙ‚ØIS\ÿ sõ*w²8ã ¹U g™–ÀkÐ ?™OFä+ÉP”+ÃÃ(÷”´¨{°9›ÛY˜ZEq’;AرBq’ä‚5¸TO¡OÀd ° 0pL°.”0MñÃT$å(ÙPp° ¢¬õM9 â€Dè¸XÝÙŽV9£4  ¼h’%$2Dâ˜& è0¡d]ÀpBPLð¤$p[ßçœ=?¨â0 q…[üÔ>ˤ‘IG×y›7ÊeZ£$9 ßy ööš^©$³€ÇI`ÐWà¨0O> ™p |@ SŸx–[n”A°0pžÓ+Ïÿ  è¥çØAS‰¦ï6 ij©º£¹©$a@a@RbãÓ+°€¤_A\P4pë€EÀ C4,zD¦(91ð9¦8€9 èq0*©2z¦—š‚±‰©ZµycÞ:%NwBcI™¦ ?HP ÀªWp°*«£° ´J¡ñ ×H!@ ñ  Ü8|pz„øŸí'›%(˜fº¯ÉúJ4æ£"­±ô•²ñ ‘„^@zʧ~ª{ ¨íB¨yV JÀ™0 ×6³‰ž7 %ͰRS£ùj£ª¯'K©ó8‚Ñ£²Rƒ‡Yê0añ0fÿÀqhDð¤L¥10¥#Zš1` ™ÀN°.=0á# "[¯$[…ü:˜(Û¯W›©¼Ø²}H@Ñ’Ã3¤êabðCuÊZ€ ~ ª¢³Às½L ½m ¶E~Ñ # Qbczr[ ÍšÚI˜k 2=‘\˜W ÒpèP¨žóI¹'²lSšüÙ“L 48u0<à.Á¸g¯Z‰¬V«²X+»Z‹2¹i›„N$Q ‹Sµ /B‰nñ`¦¢Ê9p*ðE“ `Cç‘€¥‘`[#T É-­;µµH»…ÿK¸Ëª¬Çz–‡»ËB~»çÐ"¨†FWð£àGpÅë+Sª ‰pÕH1ÙÐH(¾Âs)Z'Û;2'€ëº ¾‡+¾µ+Á“z•㩸vÁ$ó1B»‘Xp\Ð[p¨þ´ ” i À4Ð Ê›.Ë }Ï¡½ü ¬$ÂÂLé k¸å[µF\©°©’-“ESqç & ' œƒW°]ࣰ¥É+‘° à6PP·¼œ·¥Ñ¦·±½ÀÃüð Î)$Õ+)”rÁ°‹Ä¾YëÇ'.ÅÄë„ä@4€"ÿ°Ÿ0p_ðŠ=W5  ÐüÛÂÊ` *‰JmËK 9ìÆoÌÀª ‰Â+¹ ß÷LÖñtøJµG<»&KË'FyËe ·p ‰€`8ðq%?‘<ÉŽP6‰ zÀÈü|/°‘u–]¤šÌ¡Ão\Êüà \#Nõ‚Ú¥y\Ķœ²µ¼Ç|lÁù“©ò/º| ‹P î¤mïTšïDuÜ( Œ`6 WðƒQõ¬¥/0Ê;|ÍpìÃ8┑0®Þ«£è\²åLˆwÑ]uòÑ à æ ( ]6e·Â”PwÉW” 8`  °”ÿÀ ø ,`wøW¸0 „à ­Ð œ „x' Pœ] xž•ÑNýÔPíß;Ѳ|©e5±8Þ`]*`mð¹µ §¥£šðP3é(ÛWü‰ÃÎaÍ Í À 8²+qµ¥Põ@Ì^ó¢Ç³\ÁMÎæ<¾§”8”' Ýp 9¸"Êp¢[ dà ÀPg*€2³µ=c ¿À 0]qez ÍA×Ç‘*jáPp³ ÔFƒÇŽ÷ºƒ È…=ΆÜ—ŠSA ºôVaD Äy©%ZÊP‡P ¶+0À]ZàÙÌãWÍnÿ<ÎÐÚvÀ `yÔlWº£ÊäÀ9£àÊà)Ñ¿M؇»õíÛ'ÖK¢¦@ åÀ 'ªí’[d@d¥Ð ¢æÉ)ÐHbÝ×ñ ,àÀ f€%­—qs0¬ ÌCípìøñÐlÌn$ÊÉP¢¬Y®t#ÎøÝÛúMÕUãëØ/‘£@ ³@ ·JàBgf0 = $ ÊQgÌ™<¥À©p¿,ð&0?KH~È¡ÃüÀlâ`! ¸¥#¼r¼¹µš¥Rñð¶” ËÌ:Á¼²äKÑ·œ9®Ë·œ7®é‚™f0p=ÖÉäÒ*`äÚK,€ä£ÿÀÖ¶ÏUž:Œ„@Ï âP 0 _ðs4Mß7?µ.(…ŸòÃæq^ã6žß3ÜÃö)Ü K×ûyàÙ¢öN ®SŸ¥‰f á+Àx îá+‘ `øÔ­ÍÞ'”Ò”é×À0 œGÖ+½Þœœ„‚-Ü©Îê2îæª~•‚üµçÄó€QÙ5?”­]>æXʃÖyÃ+Ð`@ mÀà`åÈ‘ ‘% ¢ )Æ œ€×a¼ |¿¡Â¾ âµ(e©ñÍÄœÃ0îæç}Œîéã€c’0 ÁÂàöÿ¾ZóNmØ…ïÉ3  < À@Ø‘`ÀpðÉáFC _ ÌðÓ~@éÇ‘¥û”æé² ÑÄ.ë‚ÞÒáN¦9p#¯ò&OãS}ò¨ö[ù¯Hªa Åp »`á—´Ÿ}ôN‘àcÌTÃî4èá}'@ð)ìÈšÉ0 _ Ï€¬›R¸€í ÑúôNoóÐãÏi §W·Ž„Dîç,ör~î`ï)ç ƒ±ü°"¬ó"¬ß°ðótè‚þÉ ÞÉÛ¢gõèÇÑWÉ  § +LÉ×}I®—æ‘,qp¥[?M\_·/ðõƒlE%Øoný ÏÛ8ñ¬ÿQ*w’úŰú¿sû/ðuïÉ?³ßcµäÿVpO¼ÿTê[GoЙ3®ËIêû^÷äF ˜-¬Q°"ÆÏáCˆ«=Ì/žC‹ù"nä(±ãG'†$ùqdI”O¦L¹’%I—/)f¬o¥E‰Ïâ+vl×/3b~…{ñbT *b˜JV$,ÂÁRñBá °ˆÕcADæ\³XVàÀÉ•e‹0Æ(S¦b];‹à¨YÙV5QtÔA¸ÙìŽ"78[¶èJž¤O#¿Šôdzœ ³òâË-3‡Œ¹™²çÆeéݼèÞ3Ôà„i#¦U¼ms&­ÿŠ•¶ŠYGÝþ»¨ "FH Œ­YS£R˜Zkq"Cˆ®%·;·ªA‹áfÍ g‘jÕ°Šž-›|ÛÁ¹/œ>æü°ñãÈ—;{æ7Ÿ¾}úñoÞ/??dzèш´ÇlʨVXÆ¢m‚Åñ^0Å®XP;ôœbp/ÚJ@d™ãBL†-eˆ#î P: «0 q¿R@ê…³š3½¢Ö3­,ö>«)ÀŒüû¢þ„r£"+KR¦%_Z©&Ñfb물’ƒ0S¶¡D­³kʬbèRIJ®™CD”1D:F)J½Þj.ÄpšŠ$L,SË0ÄFQ,4E‚JÇ2k’¥ÿC=R¥E?;2Q”\‚R2)Ùê“ qâá2™»„ѨÙ^XgL‹9dF,*ѲˆÛ ®p:=n0«²P©xĹkƒÂ±†p‚LXGʧG™ò Ùü ´QA¡uÖ²F“$´¬©&lnSYgUïÁG3, "@3že$`Õ"â4%Ì¢n½[±¨åÞ²¨0»ì×Q†‰£ÒŠÍ"(rZj¡ÕOa„AjØ$”®%¡,·|·KrŠšÐÍ¿ÆdD‚B”¤ ¹æ 4Õ”à<íŠÄ7 I5žÁf™+J¬$•ÏÄø!–Ø…ÿ«)Ÿj‚<˜a…þï᎘f´$‰ÇÔõÍÿ0D(¡²`¤í}»<¤äx’ù˜åMœ#š\ïJ%Hdßxôjêâ.ÙËB«4Íh¥9 ÐàŽ °ÁEº¤¿'súéE–¤¨»üƶªrÓôM£,ÒëMºCüÚ¸dJd9h C³h…E ¹f”£ñ5î½ä1ÊU¥À(ÿèZF+ú™j7\ZÈcòðÆ‘‡šÔã8žåN®Åƒa;¬¢r=™‘‘Á†Þ"l$x£¬Ïk¾9g¬CˆE7“º…"fƒÉ" œxáŸü>æ}ÊŠÇÿÖ¼j9/yã³ÈxÂ6 ]‰fFi)Ê2è!„ÿ"X”‘%$‘[Š‹dc.°ø¾XØ ¬\)~´À H~¤€mDxñ žñ‚ Í(°#ÿòYk˜@$"p t`2 è&ËÁh¼`ÇÆ ÜÀ:àÃ2è˜u4Ó_>á&£Äé.‰áåT@Ãr„hE³HÑ>"¸Ñè¯#Ç©’(Ç>hGTâñ iÃ^/Ô›Ê ®7‹ìÁ‚JÙèž§ ‰XŽ×Xqæ"³d’zÒ˜ž?ÛÌ/Ž*)Úhtò»ŒÐ±üØ´?r„&z|–Æ’ÐÐwˆüàä¶f94úEsé±Ýy6ÄtcªûF<”ÿÁeˆÐR§¤K<üÅ6»#$€d¬â¥ÓŽw$X H8ÖOYçtÜ0É–åùri,á!j^ ±ç}pj9²šƒÊ²9õtî8³KF4I¥«»¸¨n°0A ô…¼)eD¹M fI$ˆ*Dƒ†:oeUã£>££MTªC¶Œ&—b>“hH’œžÕð@—8>Ši‰KË$÷ÚgI^a/ Ì`æDª-eIkÚË7˜’•免=Æ¢IŠW@žžÔ!á!á\º‘¡Õ¤ž MZ}f @”ðR§«[Ê@nMqLTÔ»tµ´H3D„—^ÇwÆÔŽ›Z“ Shaÿ}l•–…–€¾ZǺ²õ~--²ÞÃÕµöMqê$miM{ZÔ¦Vµ«emiQ£Î×¶ö´IFmm{ÛÛ¦ ¶D >[Û~"‘°­n‹[NP‚œ8nnw[ÛÞþ¶¹¸¥D$(Q”êRÂ,V(‘ N˜à·…4dÛÃâõ0¶4MMõãÏg +IZb€t™(‘‡”eñ?=ZûáTÅÄL¤EÜÜéD~Ôž÷Š2‹OT²,ÛMmäwaJøwG–ÅIZ§‘I+‹xölÖeX¸ZÒ‘–üs¥0mšß^ƒyˆ£³Cíl¶ð5Ei6aüø‰çè0Å9,]Dý¼ç³•5ÉIxÚ#L;‹ˆ8–Y+â_ºÂUÙòÖ4,G-jhw ߣ–6µGdí*f¬*ÿSt,dã-ÈÒ¸{ÜDDÒ4™hÍÖ;bfwÂß#WÓ|ÛHȦ÷¦í ê}ç›-!ïô$#< N¨Z^ÉIŠ„ä—RYO–Ö±5euhy×çg‰]@¢á„¿Åæy˜=žìŸ>[ä¤"yÖ’³‰ÆmWs©èÅb—<ç.zmMóÕ@›Fû‘­èýz•)™ãWžkŒ :³ŠÒ'Ò%~O/é@åPåèÔc›½ êkÙÊ›Œ¬õ{̱K_mòØ…è“ :æv%+[Všé—´}…vI0~ô¢‡­ÌnºÈ›N!Œâ oêÚq¨”j¬A¸(±JŠBäWÄü=™€\&ÿ1‡ ¥ûIׇýÜy—ErÐ>î‹6¸¨6𣋿¬ðŽ7B¿i8‰:’2ø:õã‡]“¿C£?’°?›Ã/–X·ýk+Êã8TA”"½Ô7èA=Õ{“§š’LJ¹Ø3 Z ˪":áB°Ú°¡> >ž2+ì?™³¥rê9!d>l¾tû¿¼·$è¡°ÛØ>èé:Ë"3¼ì(¸:b¼.«#ÿx: ‰ôC4ƒiŒÉÓ%Ëk4z‚4å¦yº¼ š·|¾+Ì»,9¢•£ m` c³x°³QPD¶‹¥°9-ûºá±9j)Ç3A*ö¨4äc4˜,S;G)c;6A4+,IJ >h£Å™¥`¤_û°à¯ôZÅ€ò=*$Â[S’ó?@Äé“ÅYdFOs¶Yj·û3Á¸ê)ÂѸ—X8›`mÆ?dAWLFXÄBg´ÅXµh´8MÔ¿j”ŒkD¾ài¿mT n½@½{ü¸e,Ggl6fÃE ¶*ó9^ þùĄ̊¹aäª+FÅ9ÆpÇJÙGf4GÿrLÁ(‹$ôD3'?ì%q\ÉÏ[¶‹”E‹$Ä,ˆ>QŒµÓCÇ¥çãt*©dId”Hc @jJŠdJš©kˆ­œŒÏR©‚ÌG„›¬®òÆäóʯ¤KVÔG—$K~ 0~Aˡ܌µd8Ñ:ÌÿJš…´K'™¸¥,D±ÌË1á?y„Œ%‡ŒH˜œÎºÌâKÊ”ôL·”>ÈÌÂÇÀ²\#?¬§Ð(˜#É#ª#âJRdÂдGÌäʉÍ,ͰL¤YÈÈÿŽT+ ÓB-Ó9µSI-ÏCMÔÝ´N'TÅ¿)µÒõT:-Ñ ½T=åR…T2EÕ:T*P,Ý»RMÓ5åÔG5R/ÕÔUmÕB}U\RKe E­Uº»U]VBÍU^…ÁX%ÕY…ÐHÅÕg ÕhUUE©c¹VlÍÖk-1míVoýVnýVq×pWl5ÊAE×tµÕN=UVUKháNxeOhMÕw½Wv5VuÕWw­W{-Öi¥ÖOX­Vƒ-X|ÖuÍT„ýW€X…]X6…ØÿˆÍU‚mXi¥Ø} Ø|µØŽõØŠåØ•Ø‰uØÙÕØ”5Ù‘UÙ–eÙcEÙ•ÍXš­Ù„Y›…Ù˜uÙ’ÕÙ~}Xž¥U}Y™ýÙ‹=Z¤%Ú›ÅÙ¥eX ÚõY§MÚ¨ÍYŒ¥Z¦mÚªµZ¬5Ú®Z¥ÕZ¡-Z°}Z®=Y©-Û¬5ÛƒeÛ«ýÚ­m[¸[²¥Û´íY¹EÛ»õZ½ÍÛ°}Û¿[»=ÛÀ\µ][ÃuT¨åÛ¸[g ÚÁu\Ê­\˽\ÌÍ\ÍÝ\έ¯Ç…\@]\ÆEܾõÛÆu[ÀE]Õ-ÝÔ=ÝÄÑv=\Ù]ÒeÝÕ-\Û}Ýæ4ÝÚu]ÿÝ ]ÑÅ[Çý\ÂõÝÜ=^ÜMÞßSÐUܺ%^Þí]éÝéUÞêÞÖ½ÞÈ^àm^Ø%Yê _ì½]ë¥]è^óí^ï=_îýÞàßåËçUßâ5^òµ_íeßìM_ç]_æÝ[ýE_þußù¥_ÞÞöÝÝýàŽ_"õßÿ­_ñ…_äÅßüe`¾ß F` Æà>à®`~`îß&`¦Í¦`ná 6àÎ`Q~õ`á¶`–ß–á¦×¾`âÖa6â#bNavá$~á!^a–â"†b.à+ŽáþabEâ*Þa~ß)vâ1&ã/~bÿ+nb/>c%^b ã*ìâ6þ`-Þb"fc<Žb*Öc3Îã,¾c>ä?ÞãA&d7Æá@^ãBa;._4~dHöãCFäIäJ~ãŽc9Îäµd:®c5VäKaM_Iå4FeGŽäDžãO6dUæäMãFåX.ãU>åW†å]îãVöåEÎå_NåZ&æb–åYvåcfå`æfVfÆd\e4¨fk¾flÎfmÞfnîfoþfpgqgr.gs>gtNgu^gvnçsþ4P˜xn”y^”z¶gh¹ç!Ñç}Îgþç¤áçÿhú hÏ0èƒè#AèÍ`èËpèÊ€èÿˆFA‰žŒŠ~‰‹f‰ŒÖh…îçŽèé¶Úè” é’0i’@é”é‚–g–Nè—þdP˜™n”š^”›ÆihÉé!áéžÞi jj¢.j£>j¤Nj¥^j¦nj§~j¨Žj©ö B(`‡`ƒ0y ‰g0‡ðƒ­~ª.€ Z2€Àêͨê³Îê­îjŽ ?е®k~k€ÇŸœç|8Øk~H³FëÉ8À1²Îµ6iº6  €yÖk¾Æ5¿ŽlÐÂ~k'‰ìÐʆŒÆ¶h³&k–ì°ÞêÌBƒÒ~?`k÷6 „ kØlÏÈÿŸ?@ÞÎŒxðm6~ìd¨íÌ ‡xm ?¸m³® z8˜çë&¨†ä&„™`ƒ ‡øîdˆì|6`ƒç~‰ó€€A˜éÈN€íý²îyìg?èîïïñ.oH†ÀNïõno–€Hpð®ïûÆèÛ¶îôFûf‡ç îj°†ˆg o~0Ö®ëáöŒ0Þfƒ²~è°‰d Ð4ñÊx†8–¨†@q îïŽçþv7€€Œk~`m/€™Ž‡Ú&q0ì”ðnøvû€™€‹ël,rŸiòÿ°Rr&wr(wˆˆgÖ&+Çr”ÐÞê%Oo*óx ¨ë|€#ç‡Góô6¶>‡ŒöÐñˆðƒùör‡hòÌ „ Þ6q6—s™0€€ €@¯êÍ€ð†t~ôÊÀt8Ïêr‡€g‰Vw¸ê7üN 0‡ é®ñç@ðÞt#SÿqXçY—‰Z×îBpq$ßu”èo­Æk/ögöÌ3nïîd_ößñvA?B`tŒ @kT§sH«íä®Lç)Ï µfòèvˆsŸô¨­Ún÷¢äV'q6xul¯ì‡¨u~(îÌ–öÇëÿ—èuµ®ðƒáÖˆŸ L†öVòpGx}'q‡ïvøC/AmzÇödÐvg ?€ z(€æ^ùX¯«˜Ÿù–­Î!æ®gX¯ã†4³&wx@4ç‡ÛîñrÏ “ëº&z{7òà^ëˆçôø„'qàŽñZ¿òÉèuÖ¶y/ÿñ¼Þsb¯¢Ïñ­gr¯ùH¿K{M' ˜ùòæú&W{1‡ùÛ~Èì¾—ûŽˆîšÞlRÇoí>ÈOB¸n§K/óçöÊhù‚çí[—ïYŸ Î/nɧü%¿ŒyWtù¦‡–Gƒ½ŸŒZoÈGƒô†|w—‰^ˆÿz/yån{eïsx×gû—û+ßûÚ·p`qÈÿoá}ÞÏû(|€|soý×ïêÇþ„G÷d¸f²öƒyÏm¶>oÄö ô—Œ¿6é/þE¯iòWi~ „𦇸×w%Ÿ{ýÀëk6üª8P„ .D“O¡ŸxÑðÃðâEBÉÒ;`€BBb,9Ð"¿|,xÐ$Czhf¢)òIŠ(a.dCMµŸo’¼è“fÂj y2mêô)Ô¨R§R­jõ*Ö¬Z·ríêõ+ذbÇ’-kö,Ú´jײmëö-ܸrçÒ­k÷.Þ¼z÷òíë÷/àÀ‚®*ÿò%…3nìX!ùPô1æÌšëFž\ù!ò;Àæ€zXЦ@k~"Ù0 ‘_èѲ T«†º4~´ X|ö±½ÍÊ— Ž\Û€Ë à¿„@GêÚ“E`]@iêÖÀÆäÞÑPN¨ýöÛÌ÷ó¿@ÚYzü@>4@¨¥à3ð™€E•%C BÒã&!Ö%Ó^kÞõw"Šru†Peñ˜HÙ€ 䇀T³ŽD&Qdí)c>TG_‡ôD‡#í-•"“Mžµ"æ“ ‚(–ŽÏTFãüÄÿsyòCÏHI%nÛ=ü0˜OG÷Iæ$u‚ågôè^v?ZG@tÏLw dÿi×¥žÚ ô €0 Tžv~´7™•ZZU2hÜæGpüøa@E-Õ¨“}jÀF‘}ŠÓŒ î„†@„h¨ ¥ß¥¹êªÖŽ»úú+`~°Å{,²É*»,³Í:û,´ÑJ;-µÕZ{-¶Ùj»-·Ýzû-¸áŠ;.¹åš{.ºéª».»íºû.¼ñÊ;/½õÚ{/¾ùê»/¿ýúûïW½ <0Á|0 +¼0à ;ü0ÄK<1Å[|1ÆSŒÇ{ü1È!sl B/eeòU(§ÿ¬•ÊVµ\ÕËSÅ,3Ë[ÍÕÍL‰¼3Ï“<Í5 UÎPýÔÑM%­ôÐD7-UÏQ‡üóÒLU ÓÕX?írÐ'wíôÖTe½Ôeû\ò×+‡MóÚlƒí5Üq«M•ÙfS6×mãŒwÞoûÝ÷ß0[UwÙwëm4ßb'®¸Üs;þ¸àU.µáGn9ã˜gùåœo8Ô“÷\yàŸƒÞ¹çn§.ÕØµîúá<‰>:Ú±;õúE¸/¤ûîûÞ¶3-ùì;“¾:âÂ[ |ð¥›þ<ô¿_üÔµk.ýõÍ;¯úé¨{ÿ=÷QQ/òñ݇>öÛ§oþùí»¯}èã\>úð³ÿoýø¿¯ÿú÷'O·üæg=õý€Hc^ý—Àü-0zM  ¦<žðN! ò¸? ö·Ï&Áìq°ƒ<ൖB“\ƒ4IEØÂf…´á ‡GBÖP‡S‰áÈ\øÂå­°$3Q…M”â±XE"ðƒKd¿Ø;1Z°‹Z|ÊÒ¨Æ5²±n|ã_QÂ9ÒÑ‹W<£ OˆÇ<ò¯)pü# ™F9RQ{¬££HA3BQ‘VœŠ #)ÉA"²‘=´dYHC.’ŒI±Ê$C HB&2“˜t`S¹I>Vò”œ¼ˆ(ÿcéFRj²”¦|ä%]ÉÊVâò–\¬Š,ƒ©FZêR•«äe/·¨DO •Çä‰0…IÌN:2™¯´æ5—yGjVS›Œ¦,§‰McÚÒ™Ï Ì~†òŸ-¨BŠÏ|T¢`<è8™ÂІÆs¢÷¼(3›¹Kt“œ%…æF%éP4'%éK]Ó™Ò4£(M© WQŠVô£ ­gO}ZÆê§‘ÔéOyúБ”©5µiSMŠP45H£E“*Ô¡u©N*D±úͪþñª\U*KÃ*ÿV´ju«"ý*TMBÖQvt§l]«[ßZW»&”¯-}ªW¥W™°…)X[ØÅ2ö°ˆ j_ñYɪõ¬y¥¡OU ÙÍr¶³žý,hC+ÚÑ’¶´¦=-jS«ÚÕ²¶µ®}-lc+ÛÎ:e¶¶½-ns«ÛÝò¶·¾ý-gk Üá·¸Æ=.r“ûZá*·¹Î}.t£+ÝÑ2wºÖ½.v³«]ÖVw»Þý.xÃÛÜ¼æ=/z[KÞô²·½îEïzß+ßùÒ7ºñ­/~ó«_ÞÞw¿þý/€SÛ߸À°¬`ü"xÁ~0|›á S¸½ ®0†3üÜ k¸Ã.‡?,âÿß¶²zÝ+eMŒÙ˶0ŒYM±bò“Ó¸Æ6¾1Žs¬ãó¸Ç>þ1ƒ,ä!¹ÈF>2’Ü­t*+M¾Ê“¡Ìä­DÙ*U¦Ê•±<å-c%ËSñrTÀf.w™ÌR6sUÄ 5;…ÍmFsšá¬e'SYÎ_®3í@†ø$]ý$GÈ$²ñÐhô‰zî=ez ÈðWÈê›<P%äô¯ïÔºu]&Ë´ñH#Ó3ˆ¯£½O<8Ög~T €Ê°€? TežTÃðÙ©¸SüÐ%×"õOéPt¨ö LÐÆ@€÷=ƒ÷1…ãÉÆûõJ €ñ•D±¹IªüÈø1ñ!D$kˆßN4…þù†mœŸÎ±›DŒûÕ[¾1ÿ£$GAØŸ\FÃÿq^Säƒ{ÔŸG`_ ƃhG{<Ä3Ü`S4à ¹QàNÎçÑv¼à¥ÄCd˜‰D C4à‡„_܆õŸÄUßAèÝSÐÓé`òÞS´š˜œó- S°D5x^H!N¬YÄ%J…ë1_ß%!OL¡ ^Í3”DýÅT4 ëI[é%ªaB^#† Cˆ_ðÕ›Ü%áýƘlÜF<_ ‡º1iXäQ%š¬ A,ô\TdÊáDƒÔ^-Î[p°ÁÂ-\Tˆ†þ)ÆôÑþ1ÅôÑÈ}@\Ú­ç‰}L¬ L$HE,\3À3„ÖFi @5ê"F|à9‚Çű†ST á%È >¡"Äú­ äã>Š`ª˜ÜtÐ8nä>™H$KØZA¤#OÈ MH„NHE°e AÄ¥MFb]Ri¨ªH©,ŧÈZHPJ>x„@–Ä—d ¿«'ö`Sh„»Ýän°Šš KK.͈¤ÄO@ÝH:ÅT¶ oø¢LÊÆ£)?!ù,¶…777µdcºnnÂssÏttÑvuÓxxÛ|{â~〓““™™™¯Š¤žž©žž¤££¯¯¯³³³»»»Ç‚‚Ñ…†ÖŽÝƒƒÜ””Ýš™Æ¯¯Ä± Á»¸Í²²Ü­­ä€á––ã㱇὞㦦䫫㱰àëÃÃÃÈÂÃÊÊÊÜÄÄÛÊËÞÕÏÑÑÑÝÖÓÜÜÜäÅÆåÇÈæÕÕãÜÜéÐÐäääÿÿþµ@›%,°› v<ÂT·ŒÙÂP·€”Ú¼ÞÚS«ê€o¢W—ó5kG\ë¦íÞQ“½ŽGalf‚g,VXƒ‚Z†e`gQQKˆ0( ”Y7(g 7 Y+$6/7.¤5 41*®7L ,(.Q.*Î&6(& $..B1Ý2 !0Ù*.T´)$%V\3A!ù,Íï(‡&&&777HHHWWWiiivvvV«nr–|x‹yw—e¦i‡®eˆ±w†©p±z—º–ZZœ~«|\ºM¬m}§{e´esºq|éw;Û[\×]aÎ~AÛkMÜgU×vMÖwSÊciÅltÈugËsyÙdfÐlrÝvhÙxxãWVèhKäcYërIèwVäfeéopåsiäxx‰m‰…tˆ€|˜˜m„™vŒ™~•¬x‰¥}µz†Ä|…Ö~‚倹€Z¯Œ¯v²ŽmÖ€:õ…æ…+è‡4ó‡%ò‹5ò’;̈ỈSÎVÒ‡FÚ‘NÍ’eÈuÔ‰f׃pÒ˜i×–xÍ£|ߣiئwëˆFì‡Vç—Ké›VðŒDñ•Gð›Vègå}é–dê•uñ [ç¢cíªvî±|ð£bð¦ið©lù¨dù®oð«púµ{‡‡‡‹„™•…†‡š•”•‡‹¨Š”¢„›º“Ф–—©š›³… ¾ž¦¼¯¥†š¦œœº€»•…ªŽ ¬ž¯¬ž°¹“¡§¦¦ª©¸¨³¿·¨§°ª»´°®¶¶¶‰£À—­Å±Ç¨¹Ë±½Ì±¿ÐºÄϺÇÔÊ…ˆÉ‹’Êœ‚À“žØ‡‡×Ú–‹Õ——¨ǤˆÂ¯ŸÑ©„Ó©‘Ö²Óµ˜Ì©©Ä¬µÎ»©Ê³´×¥¥Ý¼©×¶¶ä㇈䈅䊊퉉åç™ˆä’“å—˜æš”åœœí’‘í™šåŸ ë¥…æ ˜í·‡ì¼’å¥¥è®°çµ©å¶¶ñ¬«ó·«ñµµÅºÄÚ½ÃÖôäÁžìÁœûÅ–êŧé̵éлõÁ©ñÀ¿÷ЪûÔ®ðѳö×¹öؼüÔ³ýÝ¾ÇÆÆÄÌÖËÒÚ×ÈÈÐÎÕßÐÃÜÜÜË×äÜÞáÝàäåÄÄåÇÈåÉÊëÂÂèÄÈéËÎåÏÐç×ÈåÙÙôÄÃ÷ÖÊò××äÞàåàÜýãÌôãÓþæÒûèÕäääæçéëâãëëëïïðñääñçèòìåñêëûææüììþñäòòòýôôþú÷þþþÿÿ ü·oßÀƒÎKȰ¡C J|q¢Å„Ú.j˜q£ÆŽ/‚Ô(M³wÍ ñ[ɲeKx.cÊœ&Í›8ùÙÌ)sâÈm(t(âÙ©YÃ.Ú˜1ÊàIJu*µªX³jÅzu«×¯ðº‚ÍÊO"R£ÑU»V¤¶\[ŠÍƒJËjxóêÝË·¯ß¿€  Þ=µ¹Y©â³"Wµûv«Û¿Ë/°|Hÿÿ¥iö}µK*°ì+Ùáwpù™Å_Zþ Gþ£Ï/çœKƒÜQÇJ* Â’ 8TxŸŠ^éçZ…ŠTaõCK+ç0“ ƒí‘fÎŽSèMŠBH‹âÍ£EK2©Ñ<󀳋&ãx“B b¢V,jß.æxß–]þV&Y¨äŒ~¤Í5¨ N/°àÂg°Ç%UæÄ߇^ß ¾ÔWäžG¦9a“Š.ê¦)— "Ï2,lF.Ÿy%–9#²Òé–X½ÇJ,…z¨v‰²Æ£ª®ª‘T˜lÿ ‰<ÀTÊÃ:Oå’‹–¨Âsà.RýºÝ™©«Z£á±J›þI¥‰¦˜S«“ÀãOá©giSÁ7$!v ¿Lì‚®^€f†]ŒáÙÙ‰æÍˆ;~èu †eòÉ¿KáÊ®²Ë¤6¨¼ð‚9éÄðÂ.ëœ1†18gŠi2Fó¹ ˜_½7è|¦vÒÈ.ì4ÓfAý‚)óð³Ë ©À³3Gäÿ Oc”³6¸@³"tVÂÒË<:¨öÁS)M#ËÉ2ëfÔtóãË ¬HUŽ.ct‘†1¸¡!ݦñ‰<æV#6ŠŽ ¹T’·I¹ÛoÇõ ãT}5Ÿ¸=•†àk(0ÁZýØ9À‡Ï"ÊêÂûíĹü0¼HýÊ+¹ø 2È$¢XÞJ%¨¸XYã)€)&ɱ›ì|í ¿(ýô>Á£#–„ã‹ u²SÍŒä+ä™CXU©F"0‡Œ@ñ)UüÈ5¿¶½¦~IÊÝCàñm,"óðÅXÀ‚° :CÔÇ:%Pq#pD5 ‘ƒª\òKXÊî× fÐ"R©F$ÿ´1`°À“€…Ô¼ †±IÐcÙ,Ц@FLeðØs½†UŽz|’6¬Q "± ‡0‡ ]ƒAl‹_±FqÅ h ÞÙ¦°0‚±‡AŒ#Ñ`|axÅ TÀ0xãg› W¸Q‡VƒApÂÐð°ÁñTì# ÿÈ–f!¦ØÆæHÈF² ¡Ð†˜ÞØ¥ÎÂÔX`è &ÂÊ€Ž$Ê6‡£|Zbâá ¨à™*XÁ!›À„Ñ,ï“6±ˆ7(A ¬†ÖØã¼¯3zÇL§:ƒ¢˜y˜C© >ð¤ @A$?Éÿ§]çKðhœpGDà[HÃ0‹tN/âDˆaã΂ƒžšçÞ¨G¬œo*ñÇÇ(,a Þ+§¦tˆNˆ®ó¡ìDÌ5Ìá‹Kà¥ô¤†(.‚&/¥H&ò’‚ä2¥ ƒš „*üô©P ÌD-CÕªZõªX¥ª)RŒ`¼`Þ˜ÅB b\¡ WH[òüVä5"Œ¨F"äpndÑlØÂzÇR‡ú™¥¼œ .1ŽÍ©àòl‚ŠÀX-”Á“ÅŠ•RP‚¨";Ú€¡.«‘EÀA ÐÑ"Cûj¿—&°â™Ç.Šê VžF8f;Û#ÿø‹EÕ˜ƒrÀ‡:ØÝp#a © :å àòHLÒþÐ´Õ qæ1 ¤ÀÁØÀ.!‹h ²­-‹3X¹U¡¤%1Ç­`**Ô&höh. žÖ¥ÐÅ<4Øzxu”@Æ Và…#ø&BÎ@‹Þ©È ÚE%ÝÛ1jw¾t.º¤{_üeš0 Î p ÀöŽÀ·—Á¡xJѤb ;”`P¨ÃVv–‹+tRv^Z~•Ãa†À„#(8|Á`¢»ß¥í’0[°Qãkó,`á Ì–`ƒ…F@ ¯÷³rKëá¿¢ÿ]î¤ì0D(âx6(m‰„žNp&,ª“‚èryóJ9 âI… êòŠ‚<¹7›§ÈѸ.ÑÚˆÌÂXÀ@!Xtº°Â&×10X˜Ã&ò… 4!\G„ôyRÉæŽfÜJÛÎÒ@ñá†ÝbsÔ£ ÒF PˆJL€@Ð…’à…Ïå«NÈ8°¶r”€Üþ'ò ækaWzÈD¢TþŽt¤£T¡¶<Î@QÃSÆ`tƒŒ'k‚+>lœ9§òQ©ÜÚLåÆtºýýic`ÌаB}‡y‡ÁÞ¸ïTÞ7¶ø|ënˆ}âJÍ7nxœ7 ÿe3LÝŒn޼)NTó§²™íìÄÁ«ÜÀ°y|:áövÉøhÌ6wxåDš)®Q·Y®ƒ PÀhp,4A‡P&è¤øLyÙñ†>°’`„4 HˆþôOTýëôôL! i˜À"ðe# jE_©Ávåv–sœ!¹àYðe0z¥wz;«GSAózÚ°Mð «pHTð?V¾P€ H£fD×Régø4eîV(æ€]p`GP×'ƒWx'³ð Mð» %0SA #€ 3È€kg_êwƒ8Hl˜—#ȃ+ûây]°ž@ uewy»À ” RÐKp=µ ÄYÚ°#0 [¸{5èWGWˆ†˜iP³ ùÀyScÿÒሠµ…aOÿÔ ™M0û59p|0=@&jÃOcနH9Ø2pbœ1KžQ‘6NY6 [·q´wXCâ  /ôä—ð1—à@#Œ§Rf×€^†«ÈŠnñбH0ƒ` _€l°Bñ‘„¨”&°H* aòL( V#RAS³@vÚ‘ÁJ ÷€—Fý!S»Ð!òÔeY€]à\€·P@³šp o°50 »È °pX»à J¤ŽÜ¡ Ôp÷q@£b óøŒ2Òv.5ÃÇ "pÚ (Y€\à_ êO~r q° p6ÿð‹p ΄XR£xˆ•vVQUð`!šö Ó"'͸p¾÷…Õƒ ‘¢€"¥@{`´—7=ù6 0à˜Õ‘2° ÎM/à c [ ÿG‰¿]ƒ'”[¡ŠëWyöh!ðP /0 ÝÀ “`9PRà l‰7ðГ”`¢& €À–ÉRÓe‹TBÏ4h_±[°œP—v‰”îqpðÄxÞñ”8˜‚éü@ ‡Ù vó;0)€7ñ„7j4Ž_6 €’p¢ŽÀ²9¾™ RÊàX Ôy—II­#—p"ƒ¨r,†PÉN¦ÿ  ÷J7ð)p © EE R£ ;°ÐÀq  ¢€¦ÀF…R# A Z0„€šÕùÔ OÅž—p &PB¦UWqYu¡š¡Úpb á° *`sP圩pS—à À[&iàЙa…X`A𦉠 Š—£ñ?‰X„·ŽqxC-›õ˜³©;—p5»°" Õ vŠe  É Ž0°@<`x°€ ¹%$5&ÄõrI—Ô¹¦©É£caûH b2hKAE*yΈ¤â&üõÁàZš.´·FÕ¶ФÀ° ÿòj°(´.PBŒ¹Yš’ P £kj£xW1&ziàZ˜QžàÉð@ *p òÎÄ þTlô ÆÐJk™Ïd¢A ½À_ É€YPvW•äljššèÒ£©—Ôv×h‚§¨zˆyjüÐ ãçàL'2óv©à ª½‹Ôq¥ò ,€ ³ ,ð&P0ìÅY\Ò¬vy ÏJ¢ „ × ~ š° ‘Dª&;¾àD‘c¤Á&’Gê­†é§Ìð˜ug@{mIŽî©éu» ¦íÊ , Mð…²¯ÀѬG) }š{ÿ€[6&2xÃ8 ²käF´C±IšªðûèU.n´ZBbÐJx£«*€";OY¿º]ð;À2¬Ë:¢Z Íúp F }[á ùxæ ¾ b6òaµ#èO¨­± ’!©LT Àð;‚*5­d'Yp¨$;Jô°€)Y°-š0° üZ”ž¢ð{×@vy·èŽÜ(hA› —*Ö36,¦j´E‹»‰ a Ëó%¥âèJŒ[*©p¨© e@BƒuÀÀ¹¡’:—@Y Šú¬ ª @ós­°ÿ† ©° Q˜è³w3‡´g»D»§²é¾LÏ0dPí:nm‰XÏÄ9—ÀH$‘wC²Áù'¹) ¶UÁoÔà B•ÔЩ 2À ­µk¯c}À©Ü‰¾R3 ¶ 5ìÛ*saÝŠ»¹ ™ uã¹ (ɼü;Žæ0²lÙ¸¾2Žà ­„¨’ ³TQ>rÊ„S¡ Š@»;ÜVR²OÍÄ9à á(A쨺é p¿˜X±­Rù˲Â-ü;ü`пkùLÀbÃÎÔ³:<¨&ŽyÄ]—Æäpxq ½ ¹ññ°w ƒ2 RÓ¿ÙÁmƒ2$¿B»È£ŠÿÂ~}[±ï ñ;¿d`÷›jÄ9!; Ï´–ÿË̤ïzɬ = Àý´#ƒ'pR»à•!3 ´Ç#WÛmûŽP| .¸k­÷H|«Šs±:Q)ÜÅÜŠ.ˆÍð 1Æñä–ÃûLÆ‹¼ÕáÆX9á”fc¾ ¢>ÃÅ z)‡‹ôBCS·®/Ð>R2Ý‘‰XÌ};Ì«§œ?R 쀞Ã&5\æœ%$BÖki>m M%p¦#Dºu` ó›¼ø¶R“ )Г ã:î<¨mûC%C{´^|Ò A̸ŽlPºl@«Í› Èãÿ8/´^ ¬ð“òTÁ¼f›¼¤5­ËÞÐz"èz¿LT¡#1 %mÒÇ\ÏáÔg×B&G2û;XÁœwXêà’Ðy mER±@—{f£ÕT¡eã šêHÈ?׈W7±ÈÃv+üpµÕQÝTý1‘Ö «“ÕZ±9kÙŽRóÕZaP1rdÖ"WÍÑl 0ƒšÎØ—hU¼o½Z×±nyý%¬i*ØŽ ƒ8!Ó¬Ì'<0P¬’‹P †° ê%CìEGD=0—ÀuÀd}y;òÄ2  •Ø{IvÍÈèÇ×´“” ¿€»Ò^ÿaªÀÓí)odX‚¼oEÖÔÛt¤@º”š&×)`ýÔ‹! ?ÚL{cZ0ó Ô%ÌÔ%«­†qsQà\lÌ ‘¯ä0¼.+;ý“Ë#¼¬oÅYÔ @t¤?µÖ dë íˆ Ü` •¤ Õ'v›¬ßžëœÔ ÒR±ÚÉ1Ø—eÏ1x­×`¢5µÎw­e5`âO¼úmT‘Û‹ ½ýÛcÑ =ÞzÎ Ý%×Oã¼ÓhL{Mˆ¥m}m a¡JD<¸Qãë´gÛ³9åz¾'‡Žð|þŽ@•ô[¾]\%ÂÕº¾äÿPÅä (ïjr‹¤Ž·‹#MÒtæ:Ž >Þã GÏoþqN s¾ÓÃ9wÕ^± ;€7°L¾É*\-â—§DS Osèu2,2éOÉnªi‘ànæ q,>ÑŠ áé’äµ·¤SSäG~5AÝYÑË¢À·cÁ ìµ@y{,0ÒÎe\ÔƒÒåâ8ÂEwª—1 ÂþÔ ‘àe^éíËÝÉÞÈñàUánY*þ˜¹æÑ0¾ÀA*§[*$îŽÕ Õ0¶g÷˜Ùñ˜â;ÑÑœh¦Ú×Õ-ì‹ï)ÝÊÈndDDéHÂñeñv¿ï¦ äeÞŠWÐ^ÿ§‹ŠwðTQ} ÿêã^Èe³ "Ö ŸÈ2¾Ñl‘€YÂnîñŠòÍî×ç"H?QÌ^쟞걂k0Kþ¶A³íûÛ»<ÛYOiXÛ–ä É$»®â¢È´#ïªi¡Loƒ ápsŸ¾­\õáïTqØœ§žçÑ _7ø^ë]=ŽñÑ™Žm‡å ö (Á|×d>ìu/æõˆ¡™_*ï‹1‚ÑžxQ½¥àAeSx¡ú! š Ÿ!û¬Oëùžê¡¦°HC% &ðLוæzüÈŸüqõè›õ1*-øYÁ"/mÔ¸æèÈSÃö7ÿ¬¬0 Ì ¬!ïr÷ î$aï%¼÷Rú„œ„^¡kd?ýðß½½JvK¯¶ œæàÁ#÷ A_¾f½PÑP…Œ]©‚ûWÑbÅyó´]Ô¨Í㼊üŽä8ßÅŠQ®ü7Ò$Ëy.5²¤I3#HŽ3KÂÃYóŸH—AGšS¨‰œP¡ævÍò%©PjOƒµëhPo©´¦’!#UŠT¬œš›•Ê•/VZ:Tað×/Z+Gjƒwò_Ç9{þóØ×®E•>1fôÉ/ãÉÀ‚Y%Yqn]Ç}é f,ÕeTË™-cÖ,Õ\Z_à¾ðUªì.¡Ë64Ø…Œ`Á^+ÿ9]x?Mý+—®a(+&¸8˶c‚\~{àÝ÷®¬¬™sgì¯gw .Õ¬Þ Â‹ªU¨y†/RíZ›ŠÙ¹q->çÓ0dÝÓ/O©­÷ðã°8‘zzŽ>mìƒ'AŒ&«©ºÌ¶ã. …òsfkeéæ!s¦OæO}F hU½W\rÍ}JÉ'£ wÉÑâUaÞzy¢‡|ù^.0~_òwÌ—4µaÁ Ûf‡ÙÌyë²SøgV]uÈè§K,‚r5Úò^M¢Ç%Ü„ÝÉÔ›2=9`k-Ó%¯C:ŒçÈ]Zi8ÃlÃVòÉñÌL!VdpåÍ”º¤©¡ÊÞ¥YºÂ²N#¥ë7P†ýZf©ìÔÄ!…I&°}ŠqŒdB5;´ïLßÈõ‘нËÅuVîqñ?bÝáÀtX@Pw{ gôõîlô‘bç#üä‡GÅYHä h­ì_û Õì²#BŒ€—Ù ÿït@î/ÔôÀÝH‚ú£à³ÊwAú¡Älì`û&dÃf}Ï6^b˜ÚÄ)ûi­v|KY ]ø%"&p1¼«a»…_ÌË#‰Î&%àÈT’j!°’“°›Ü¤Š_;] ±@'r(é‹ÈVD6ÆŒ¨i|Å!–s‡ŸÌERf$ãEî¸;4:‡” ¸Xá o€F‰}4"q3FhÉ‘'x ÿzÆÄ Rƒ–‰ˆŸ2´.HÒΈ/ò¦¦çx‘ˆúa$šfMv&–«bU*<™Ô„2|t„L)Y¹?TƉŠ$dÜ% ™É4ªÑ2†D¤"uÙHÕå‘ЄÜJ–ÿCÉÿU˜$à,)¤™6jåÚ¤&°èòK‡izÄÍ^æH6WrS€Þ”Xž¤HErR8¡¼Px“0ê.šÙTí6ÙÄ5ªê™Ô„§¿øC-¾ ¢Õì§<{GOm)4Ÿ Ý¥Žb´‘øíÎ@;Ûe¦bB ”¦T¥+eiK]úR˜ÆT¦3)O2uSœæT§;åiO}úS •:F)÷ÁR³£k’æDèCú-ÕD˜QˆÔb2T”Çyg4ÿ êÜn›Çìf2g¹P­J5‡ÖtšººU°R5hfÕhV9ªB‰†”¢JëA‘™P¬ñ®íZ+kPYÒ°L*4—:¶ÿš4­}MìbÊX»ò5@ŠKá^KYZ R±˜¬f#ŠOÚ6ždçh+„ÖÃnÖ{©ý¬1ýZVËN¶ªåmoóJŠ6·ÜÙmm'«UÏH®is­nÛH©'ºÒí7…{Ý×>׈ӵ$r¹û¾…W¼ã yÍ{^ô1½ë]/˜ØkÞîÆÖ·ÐE.Lê‹N â—‚ßͬq[_Éη…üí/}½ `S÷À f°|ýëàú&˜¶ÛEp„-|a7ôÁæ0… áwxÀ±K|â£8Åÿ±‡3œÜ·8ÆÞ/‰_ W˸Æ*¦_,a±ò¸ÇBޤ3 dòéÿxÈ,¦ñŽoŒä‹xÆR^2“LåS^9ÇM®ò‘1¬ä,ùSPŽò—¹\d3cÍb.\PÝüf8ÇYÎs¦sí|gÕuYÍcÖ²‹Á¼æ§yËgæ3›ÑDfš Ç~þó¡=èGOÒ“–4£ ]iL;ÙÊ”Öt£;½gGGúÓœµ¡q$êRgZÏ Nu«WMê0oÖ³.´¬-MëP›:Öž>5ªw}é\Z× 6Â|ýë>«٬•ë)ZÑ‹~v­ ìfó:ÛØöÔ±oýíj[›Ûľ6³»]îeƒÛÕ¯F·¸Í}nm“;Þî†ö¶ÇmìbãûÉÞö¼ã{o} »Ýÿý¸vÃMp~G;á Ï·ÁÎîuÚ߇xÄÕ]ñt_<ã§wà ¬ñc\â·w½á=ñ?¼ä/í»åíò“üä0§¸È;®ò™/<ç ¹É_Nó•ã<à(o¹ÏN7$]éKgzÓþt¨G]êS§zÕ­~u¬g]ë[çúÓ)è†ú‚¹b{ØÍ~ö“¡j§&ÛÛŽöµØíp{Ùé͹1ïz¿qEöþõ»ã=ð|¼V©QßÃ#7ñŠG|ãßwÈG^ò“§|å-yÌgóŠ DJ P€Îÿƒ0@g±óã(ý?¨Q€(ZØ‹6ÂÏÿÝ'œÇÿˆ öÑ·M¨‰ï p’×Çþо?ÀI‚ŸÜ@÷H‡ýF^ÿûбc=mB¿ò;¿I¿õû‡Õ£Öƒ?ù£¿€  D@óû‡þû¿q îƒ?7ð?9Ð@L'ó»¬p8€Ÿ€úC 7(€,€Ãƒòk@½)?ü«ÿ€Ã €Ü½°ãÁŽ€‡œÁ¼ˆÌA°»AEðA <p>Ò“AøãÁ$,€1€Îã‡ðö3€ÿ(„¿)ô‰ü‡,¬98Ыˆª9ä 90@4AŸAœ@Œ 8Ô€m¸ÃÈC4ÙCðP„? Ä1û?J4ÂDä‹Eü-HA E‹Ã=¬ÃP4½ÝkÀƒ8¾NäÀлBüaNa^ana¶(aŽaža®á†aÎaÞaæaîa b!bþa">b$Nâ6b%nb'~bfb(žb*®â –b+Îb-Vb,Þb/þbc1ã%&c3>c,îb4^c6Ö`5nc8Žc‡xc9®ã5¦c;Îã1Æc=îã-æc?d*†€!ù,Ux9‡&&&666IIIVVViiivvvMx¨V«nr–|x‹yw—e¦i‡®eˆ±w†©p±z—ºœ~«|\ºM¬m}§{eºih´esºq|éw;Ê]\Ø[\×]`Î~AÚlLÝgU×vMÖwSËejÅltÈugËsxÚefÐkqÝvhÙxxãWVèhKåcYërIéwUägeåsiäxx‰m‰…tˆ€|˜˜m„™uŒ™~•¬x‰¦}¶z†Â{…Ô~ƒå€¹€Z¯Œ¯v²ŽmÖ€:õ…æ…+è‡4ó‡%ò‹5ò’;̈H̉SÎVÒ‡FÚ‘NÍ’eÈšpÔ‰f׃pÐ’i×–xΤ}Þ£j×¥wëˆFì†Vç˜Ké›WðŒDñ•GðœWègå€~ì˜cê˜vð [å díªví±}ð¥fð«p‡‡‡‹„™–†‡ž‰š•••‰‹¨Š”¢„›º“Ф–—©š›³… ¾™§½¥†š¥˜˜º€»•…ªŽ ¬ž¯¬ž°¹“¡§§§ª©¸¨³¿·¤©°ª»´°®¶¶¶‰£À—¬Å±Ç¨¹Ë±¼Ì±¿ÐºÂ˺ÇÔÌÆ‹“Êœ‚Ì——׈‡ÖŒÝ‘ŒÓ——¨ɥŽÃ¯žÅ°ŸÑ©„Ó©‘Ó³–ͪªÈ¬¶Î»©Ê´´Ô¤¤Õ¹£Ø¹»äã‡ˆäˆ…äŠŠåæ™‰ä’“嗘暕圜îåŸ ë¥…æ ˜ä¶‹ç¸Œíµ„ì¶ˆí¹Œç»”å££å¨§äªªç¶¨å²²å¸·å¼¼ï½¼ò®¬ò´«ò¶µÅ»ÃØ¿ÃÞÅ­×ǹìÁœâääǬêÄ£êÆ©êɬé˶éлñÀ¿üÖ¶ÆÆÆÃÂÍÈÂÂËËËÄÌÖËÒÚÙÇÄÐÎÕØÓÌÕÕÕÓÖÚÖÙÞÛÕÔØ×ØÛÙÖÜÜÜÄÒâÛÞáÝàãåÄÄåÇÈåÉÉïÁÀåÏÐç×ÈåÓÔåרçÜÓåÜÜìÒÓìÛÛòÅÄõÜÅóÜÙåßàåàÛîâ×ìåÝäääåæèëãâëèåëëëïïðóååóóóþþþÿÿ 8Áƒ*,¸Pᾇ ‚Û7Ñß¿{Ú2jÌܽ{ÿù·QH’Ú:RìÈ¡¿Æœ‰Ð Í›qê´©s&Ïžm(t(΢Fk&%J’eG9ÞÛ÷qàJ”N'~üø’ë@÷ñ»¹oé²f¢M«”íA¤iáÆuKS®Y»IMÞ{ª"Ç}'v É,VŠ ‹ìÔ—û^JžL$å˘3WÖ̹sWÏœƒÒ%ˆ×hiÓ£ f]ͺµë×°c³NÉ7eÉÛ£Ô •%í§*ïQ£­¸ñãÈ“+_μ¹óçÐO•M½ºõëØ³k½ðôPï:ýõÿ˜ò"Ô{Uþ£Ù1W­[»‚H5äÊ­øóß‹¦¿¿ÿÿñà€ H 0%ÞN©åÔà? Îõ`i¡UaL&Ñ×ÑG¸ÑæØz,íõQTï9µÖ‡ zD ¶ ‹0îc~ ¶•Z„7á˜ãƒÝñˆ~*ÆG[…ˆÑFTM•ž‘,E¶Tk]ô?µÈâŒæôBN;ú]9ã^ÂXã[–i&6ÞØ{þ¬Y’D9Ö˜Eai[Jñe’|¥7¢G Ö—äaØN+¤$z :ùúe£zÕcƒ:úä#š ^ºPUcß| ÉeX`GªHX†"íeØ|éEù•‹Žÿ¨ )ªè‚è)\nk¤2F:&igŽV©¥˜’,BœB¨Í§¿:xVF.[}¨¶*E9å +>z )¹ªBŠ9øí©¹6묰ÇÒ5ìwš:ô˜›òF fc]íi˜§~ú S|Uúe;¤œ².¤S.¯òª.„í²õ®hÅ[1ADâ7ñi»-«!“»©ˆ•J-¹>Æ s ;¢Û¢º´CN¢ê< ±2#h/¥K˜ñºìFtázaS’£ç×F ê‘Síc1·=o¥Î*‰®’óæ$j6/îÜ_Ïý}ôRÿ<4Åo'U©¾5ÕFM ÿTgGÞdôM<ùds -dØÒõ=í|{Šã¹ú§N+§¬âK—j¯-±ÜE«Y·ç@‡ÞFÒ–aTÚ,6•”vvS>ÑCFâ´¼ŒùG³ê‚;)º?Ê6Œ¿Óȹ»Ÿ£67Ý¢w®éÔg§MŒ±¾‘=ùàùE³k͵Î÷ êð=7·rnæ·?êvòÄŸ>ún'çz)åmzI÷¬×ê’‚ËSÏ5ÍÐ’„Çp†”à…30CW[™ÚîÁ Þ|ÜûÒù@§¼ +n“¢K›<5nÕÏNaF–„•ÛXMdðBÎpt\{dPÆ‹>¢ŽDµQ¤Û—‚g¥ÍeЂ‹×Ðÿ0ªÑ$É$®JˆW>”¤Æl¨/' YIR ZÐâ ´¸Ç¾à24cv0c9¾•°ï(K[*{e¾áµO}@!âŽà8~™ª!ÑH²Rƒ4…*óÓFà2Ò¦”Ð d8wZx‘4Ô….tèŸC™mQi[#$g4A ‚“cšÌ2-€%‘ Ú \Ф7¾œ¬júºÇÉ$líf C: 9FE™±?³RÅ.†«B‡Búáú<ùÉP ‘”ó1eDþôG…p艵á’bÙ¬y Ç8ƒöØXCRÜgÿùV®E.jr“1êä2çIOL‰ÒXl±£¤Âÿ· 5k$‰™Ÿ ÉÍ´Cœ³CÃ.Ù¨À4°wúA˜Â>°_"³[¾rcÙ÷ÆãÝScaZOޏ:„T(e²ÈªVצ­ôe$¿hFö‘Q¤"µ8àGœ¡ŒfDÎ@ÞûHÙħk$¢+¨ÙÍrhLò]TEäh3뉦ʄ4™˜B6ø«"•„ƒþ$o 2‰€Oàä>θ_PÏH \0ŽaÝJ5$ 7” 3HÔݩɧʳ£ ¤ê3ç‰/UÂˤSyÚ“öôǧ‡6ÿI8º`¸µ­Zx¤æ ê8EEî#⨃Q @èà–Sã1}ÕÄÿnTª‹El§ü&²ž ¥*O{I Çcäñcðša»™Ï¼•¡n%Q÷àk.Ó&pA†^ãy¬Þ$k[XÛI¸ÂgÓØÄ´á¸© Õpóu¼žF'$!‚DÇ8 XA%Š3¬ |ÿE¶à„%Xáã0ùsʺðšÛüæ8ç” ž÷ìÓš–á–}Ë’“ÈZ³k>Þqd‡`œ0œ€…LVò[ÈVö=!CTƒn˜ƒ8Æ{Œ4páäų‘w^ð>w»Õ®NK)ýÕü¤Å£ú Aü"Ö¾¸ƒºžŽ`„ÂoÁ C¸Èaò¬ \â†jÛ\ñæ’ [¨sÚÕ6p¶¿ýàÙÞ¶ñØ2÷D¯)i ¬_A~3§‘h%ûøEàgp$áö·GÂ2ߟj¼a:¸CÆ~q$≰ÆG”Qçt|"—W{ þy»Á]ô6‹>¡J¼ù¥1‘ÿ{î—Î #£`E 6 Ûç¾I ® áþè˜Ç‡`ðçŒýÐ9‹E6}žw<7zCt}#u\§4MĪG_¶ö7¨£ èîÊÐ-ðHÐHÀEÐE™}E%t`+º°cÿa 1´Ì'WÒwjÔG€nGƒö„€=ñm£Ó€¨š¥z‰áà@Ïð¨_PHPK híÀ `äÖ '`6ÿ1K¶€B&p×R¡g€a8†ÙWƒk?ß§:ËâüEù’œu¡p êÇ~¸‡Jp{C Ž4díÀ ª  ¼À%àp%àž%ðÂ|˜ÿׂ^¸vÆm W€–GCÑ&‘1€÷‚šXHÔTnR*±X¹æPF€{E a”K»$.f£ ÷`+ÀmV¤0 éÀ œ°PjÖ]1Òy“H†¾…ƒ—˜Œ ¸§ô.MÄ-A_RFV$á ûð¸Ð ¼0 À @Dàßt W = ¤ í â eS Ç—ø†Q‘i CŒ°ò…W…Œ BGÕg}=g?G4™X#"%N2B!lh 05·ðJð˜§PÝÓ0BÅ]X—lue0¤ul 9oŨÙv*¹’ʈ‰:1-©’D“ÖRR®Ç:ÿä)ŽárphPßxˆs ÊÀ ¹Â0½ð½’KXÅDööó¸C(ÉdËx-É’6h4 Bw)™€!Q“Q#†_Uâsà“b”âÔ²Tו(߃ Ó5ƒ3õ’R¹‹¾S•Ve•fsó—€ nÉ}_|‚ªHP"{á9 ÐÇ0N,Ò@gCQŠ"—"É8©u})‰z¦•‚I‰Øç’/‰Ïy$ˆ1~EG?)B—° À5pYàC ¶R ŒBWt5TLä kºPœ`‚öx ëð@xŒW9G©iš§‰ŸÈ‰åŒ8™-ÿÁâzº(‘ hðNp@Gàòi€µy s`à’ëp uyŸs…iÆø˜¤‰m×YYùb˜¯"ÎØR@Xa±!²A³ðY°PK@À›À}P ÷è edc5´ ø91pl £ Õ |²ƒœ„j•¨ zƒþˆKÓ•b "Ñ3"Ò±ža >^p6ó Gà ìTQõ’«0*.0—Ó + :°t@|ÕÆy~Ù£ ʦۙ ÄÒA]‰\nDZR¥(`¡¤v¥GÀPšI@¥V:.XºŸv% ¼æh#ÿð ÷0 @†X}`u(ƒÞ¹£ Z†<šXIü2~o’,úµ–*W¤`` ¢"Ê|`¢¸‚¢§Pcßâ àÀN° ¦ iUÀ (à­@¼p€ 奦 †p„I˜™ª©[é&‚“PUW¡mÒì€^àH`òéô9ö9—f£k­° Nº  ñ6P[ñ%0 ɺ3ÆXš›ÊŒž:­û¦kR­Hã*BQS³-!;$\ÄšðŠ0œÎy¾€ §`ŠSàL(3Ðq¸ðW•Ç pZ¥öœËºÍª4/{µX{‰4izØÖJÞàØ_dj6jŒÃ ­@œ[±œ1C!¼6·’pë U+ðKô–²kú¯m*¸«£-Ë•aéµ`¨7OòÒ.”a@ `iš‰r®Õ €1Æ3 äàh*023`PjÛœ5jmU›˜1°…» Ÿšµ©2³?$SRñ&ÑZ^ð]°€Ÿæd• k À6à .ʧ  ,º@Ò•ºÕ'Aò%ꀱ«ÿ k»ýH¸0»èûaÁ9&Vø0Õ° e£YÐ_¤0¹6’Ð à8p`×0Õë¢Ó…º¨[ å’²€ò(唹wO8:»é‹Áæë¬þØì{|ÁÖ0Œp à¢a.º‹<]7  ð»¼Õ@½3€ üh1€ " _ÀNð!Ýë"ˆ2ˆ¶ÈT˜j,ë¯äÛ¯N¬µ?Tt"†ŒÀâ€Õq0]§  +|-ü7ððPÆ=0]¾Ð1æŸK‹B\ð· ÿCl¡.‚0|©´jÁ3˜Áœj¸MŇ\»Êÿ¢$„dÅŒÀ»‰ð+ð¢¹ö¢n º†H 0€ßè¹vå Óe6ÓE ΰgÑÇzLÄ1¢N! ãRü*»… ÅG‘sº¼Ë ×%a ÕÀ»v°+ É[ &7 ÓU < Àà ÐmP P¡à'7 ÊÃàŸ°WPÀÊ­ …sÈ, ’€p 2W4ÇËô\ÏöœƒLȇ«["òÃÕ€û°Wq Xæ u¤ð¢‚À› àwˆƒX‹Ó•u¨K tlǘ`έÌÇr( Œº÷ù½•scÿqX†\¾OlË·¬ÏN,"S2}Œÿ€Õඨ+fp Íð¹@ÀW=`6´² µ p<](°É7 >ÌKÀÑ]Ä¢ºæ Óp3´8Á‚5 (Ë>Ê`Ö‰ì£0Õ!Hª Û>üVÉÆpˆ` ´Òí  2Z\pŒ:@yâÀQ ÕSÝ"e&#‰bIHü-”¤_ÍÒˆ\Ö.=Ùc§)r¤“å …ÆÆ fP`©p _vÃ+àh}Ÿ»à`Р̀ZpràuÐVhŠ9ªl؇M 5ÄÃÑœ~¼0 Ù|¾Æ}ÜRœÏÈýÒ@ØÈ°”ö†h@ ?€ ޶ ûc¹€”‘ .ÿ Œc .(€`ùWys•Û Ç­LzA `£ •` Ãv°|âÒN‹]SÜ-­Á.ÖŠœÜǘ,Î=SúÝhà¢9<í Ú —¸€ÔØ} .ihsÞÏ©Þp x nð…ðÞ’פ`Ÿ6+_|+\’Ÿ‰bf‘]ÙNàdMÙ˜½Llzñܘ Ú~cðe/zÚ,@.š™kZ€«Ý^ <à3PÛ·½í` Ð¹=Ä€­üÑ@ TÍ@Ó;ÑÈÙ ¼Ð :´] C.´j«õ˜+›Ò7®ãËmÙ’ n¯i•@"EySm-c0 qÍÿ%]1  ,¨-ðbP oàà€ÞùÑKö9 «ülÀB @Ý€‚Åil³h¼‰" Ý…FGYW×Å0Vã¾Ïxþßµ®ç«éŒØúš€^08ýhnuè D qM Í`n5’€àpéhfC’+ ÿ`â'þz¼×p “ë™éh*..¦€ ª°DõtiŠ.:ëþmë—½ãD»ƒ›¡z.aËÅÙUòÙ9ŒºŽ§ 2ö½Õ‹ ºc¸ o›”¾Vž  ¼°‘ÎÃQÎ!þް§à „+씥/:6²ÜNþA—1Ð ¯0]½#OMÿdã9nç{®ÒÉݵB‘$(a?$¡Jes ¸°ìºc`Ì-ºæ0_&×/zŽA ËY ¿ ©ó×À(0µz¥¤”÷Ð .ª0Øë¹7ö‡­Àºø)Ò• ïSlwy~ç6Oó5óò’¸?!'GâóÒÒMa0ð7ìhºáˆnÀ½£ LÀ(๻8õteWÓ€ aWÚ@Îx€.‹ù-áDÝ Ó5ð9ƒêž)ë±®—„"i÷zŸ÷nJïwï‡ù¤ª׸AÈéÅ Þ Ž6º`ð.€ðÖ»ðJïð¿@>0ñøal§`ŸO¹\Ô &·¤­pö\ÿ²ä$ðžKðÆ;¬#ßqnc¯R]»€´?ïÌj³¿µF!¸„>T⃟k:ü¹¼îÝ#Å R÷Ì͈E%$H¨6ÐâÀv­H­hÕ΢µD‡m«4Ã)†,b³¨Î—/uqŒ±BWÃv¤Ôhî.†1fà²èïßQ¤IÁ!ÝwÏè?÷ö%¥ZµêR«YµZźÕëÖ®_ÅŠ ;ÖlY³_Ѧ¥êoß>£a>½Îâ[Q’:¥«®†ªx‘ŠáB(K™3†\xÐà‰DÖ.N8íbµ‰ã„ ƒ e •ˆ)ßóÕpã •9Iy¼×ógÐÅsùͽÿŠTï[Úl‘®Õ͵÷XÞ¿É WK¬q­aõÞ­ª·Ý)R¼Èi$깕¹J|YSVgpF+Ð3FSŽfQ\ ‰ª’`çTC¡ŠOmŸÜÅ Iá’jEnðü“N!‡è|© ®¢¨R~ θ!DŽ­‰«ÐÁ }Kj¹©š³ˆt:e‚V»'×F+-P‹ažñj‘:³C,šHÓVQ'ÅÉ|Q´Âô[ºYò 1‰§C½l®ÁÞÜ‡Ê ÿ¹Ã,‡ëR©/w ó¨-m»H¿xaM'P$Å'…òë¦cLd¢Ò»Ç rh¢YÒ"Ï‚ªi•ÿvj‡—Vt‰i?&Iq²Ã’²Ë¦îÑFª0ËÔÍÓ AMKTàÆÔ’­åƳ;íÆk§¡V‹á”‘Àj1D‚Fĉ#½õ$@d¿þ“ä8±‘4¾|ah†J¨‹1À <)KÁÌR/ìrêKRK55«p½ìÔTPSmRà›A4]NéË¢ÒŠáÑÑáõD[‡Å,³:¸¹çÈW#3 ôrP»ÏÄñÔaȰˆ:ЭÜÄë-J³jê­'9í²Üâ6~ 9’½J99tQq t@£ÉÀ{ÞƒV† …8_ŠNÄlØ{¶ )‘q,Z´Q:$XDk~åfÉœ½Ûy2ÿe6h'©fYÛ­ÔÝjpìÒ&ìŽC·B¯-<»å1Ó}™ yÉïÞ›dà…bÐå¹èÌ‘v<[ iD×}ß¾g â°HßjtV¨h%í9"ß3Èb£°Ôx«àúX«}ÆmÊFym¯:ÇØôQQ?·m—_ÆéD†dÕe ^X4‡?‹tz9‚‡ Ã-úUœv•¬Ð†p‰¦†pAçh]ÐÙ´Û »/c µº ·{@[S²½âø,×³ŠŠÒl¹„ýý×ÍR—²Ù£©ý=îÉý”Ý[éëÑà‚9À,V¼;Õ!$‰+i†D+PØ %‰ ‘.´—=ý|‹e]ßÿ@ì:©€ísZ™Œæº?õm­}½YÙQ8²ØÅˆ0Ñ™šb`7¼éoÒù›ŠøBŽNX«xâ`ÏDê £AGnÉ] Š¢ÊÉ sÇQ™]À¶)ïÍÅ[&<ÊÇ0¾’Á„NYÚØö¯dŠu\Ëü&3{ÑÌf ÁYÃ’(úLjÑhÒ˨‡Ž{T£Õ@ÕtBGБªÐ‰­†¹ð(nË$ÃvÉ‚PS[³ÊÀgBJÆ%})¼ˆ„ή´hJ«#¹b8v¹ ^ül¦¦GR°„’ƒ%’t"šˆá3xh(vsðÈ1âá^m˜r‘©tk˜l¥úÀÿÆEly«.WªJ¦:×BWšl­;% Ǻ']qœn{Ùª²3W)Ño¼ô¡€‚H š?þiÕÛ²sÜ©DCG+.7øOƒá„Ê\¸¥%+’®š’Ì ùš6‘у£×æÐ˜¡2iªC¡›(ÅâÆ‹°éDƒºHÿþ×N¬€ž£ñOÞd¸¶Hj„‰A@-fО¶›§ê¢××-mfRe_©‹E†¥¦<%*à<áÈ0yU¬fU«[åjW½úU¬®“bkW› ´¦U­ÑXÁ ¦VI¬kM+(V ´N£­o¥kZ;Q‰Jt¢¯jÝ+\å:صN£’¨DC[ ÿ¸  ©D4:ƒ´µ£óêØ.éY²’γeÝjhC;VÔ’Vµ«-+EÍùQ‰N®õ J ÅVÁsrJœÎLcTž·­ê?y p2CFáÄ ,ŠAN¡‘gP±¡ý–CG¸TóIå‹ÍËFËÙQ2q¤©\%+¥ÛÆ·l#¹|ˆB¤Û·7Fêý%eБ¦v Ij‚|r7ð,Ó‘ÂðØ’ÂÙ'Mr2n&QSÇ «xS*);ß Ì`N¾¶§K‹±+?í€|šbEÜñÈ7F¤Œ{[”(™ê6#¤@…/ôH•€ò¨ŠE6õw¬Âd*¯6°´¥![ÿ%”ÖMÚ*5E•æÝ0‡«lFïDZæ²ETÜeŒÈ<=Eo«šÈÌŠF› oM·» íñÑy©+sN»ŸóbœÑ ²ÒåY8TÅ3*Ób[ò€™Ë_³KÖ-×4¥ !)nrµSôC®HJ¶B†1©fX)]!•mR³/|žŽªH»ˆEC‹Qóþ ¢'ÃhE7×-åÝ£ciw5•Þ \ &lºÓ`ütT¼No`ËȨo•T¸jf·:Ðÿ © ÝkpŸtÑ»6®¹¼Ãéü·f–  ¢’åö”m&ð3ál)n=´¢?ÆF©m¶ßX—Sÿ}¶ÔŸgnZWÛÛfÒ²¹É=‡Ä­0Å T̸¸EÁã@~´H^ÜØ19Ž0äq2nos“@Æ$¥n£”"ùœ(7W“©‰-(kpʰFx–NíÑ„wmÜÿmp63î¤éqÃ4ü àGÎÀ‚ªÈ‡Ö.2¾°y’EîJ‘· ôŠB8Œ6¿d5AFË:èVî¹ÐNô¢O‹0. Eàƒ¯Éì°Ì’{OtÆü£ƒÄ ¶Ò“Vו|Ó†lQÁ"éB¶ÊB{lÏ+¤íXTwÝð‚7òk7åÂüv¸ë:F¸°{ ÚQµžŽÇ¥åaÓìîQ;ÔXl&âI0TƆó®8»¡páÿ9F!OäŽU¨}º?½yðþì o{Aú[·³ô§çi>'³ú@¹ž!Îb®L¶W{x£+ÞMy¨yßõ¥ü^K_grØŸ9ÔÌ7ùøÿ/ó9eô>ú^~ÙI Swø@±{Ø¡u“䳌¼„º–ÂË‹A<‡R¼Òa¼ðq¼¦P¿ø!Ï¡<†Ò +å+¾û´ïª­¡Û?þk§£S ëk±˜â ‰ÿ¢™d¦¬q*²‹¬sªt ò ð:J¹Àq¹Hj¼h?ã+¥È[2µó¹¸,+žˆ#·*œ¸S˜T(ÃÑ/þÂØÂ‹hÅP(ë)•‹²Iº(ÿéªhªÙ¹’ê&šë&h¢°:ô( +BŒB¶Á¶8AܲA„¸‡Ó‚›¨ËµØz’°a?ù£®t°Ä£3ûDòCR¢ÂB4ÄN¬Â—ÑV[¨õÁ9Ë ´'á¹Þн©rVdÄÎó4AItJ„¿LÔDe„Â%|ÆBÜÅ.»E_À\°>ò1Kt2±CäØÃáŽG=„¦'¼D€”ÂüCÇATGA½¡'.:»ëF´o Y²qªÿ±qÚƒŠ$üGlF y¥øŠFƒÔ¿ñ Á§£?ksŠ-j¾á,}û0ÍËÀe,Ç€t>‚DÁ‘ÌI}Š”)ª¼ßp¶+ÉÆqì¤ðñ¦îrÈIìÀšìCZ<ÈýÛÉr3¨a^*BÊR\»‚+Š­”É™4FrtÊœJh<Ëþû¡“¤¬ìniɵ{ÉKŠIL¾úûCsœB³LG‘,Ï‘jKLÉ9‡ì°Ú3ʺ¸HNJ²åë(±äHf¬5¨„>© ÉâiÇw;¦œÈkrËœ›Ã.ÒÇJú<‹p¦™¤IœÅ¦ D’ŒÊ¾$7Á”E¦š0̳¼ÉÁÓlÌŽÌËÕÜÉ ½ÿÊ|™ÊŒÍÞD¯©X 4AUC¾Pa-ç|NèŒNç<+ĪNë¼NìÌNíÜδš0éüNè-ÑZ-ñ<-ðÔ* ÄË›ŒLoäIÊ|Íi¬ËÝ4-ªÍz$£Ú\ʪJMôL%ûM¸ θ‹Ïô´É4ÊÃÏÛÐlOÔOÓ”MqyÊÖ|O´Ì5âäÏаÃ\EUB»ËoKÍZLA¾¬PE»PÞܘÉÍÇÌÍ-Î<ǽ,Hø´PùTO={¿ýLQÍ{QþŒÐ²´ÌR-P²¼O}PÏõ4PÅÉÕÉ=ÑeϯYÑÍäÑõÏ#ÕR·sOàœR0CÑ&EÌ”ôÐ2]RÿÕüÑŒ”Ì SÓ*uÒ¯éPÝ|R Q/ÅÓÿ|ÓÓ.#S&åS:åÒ.MÓ¢ RáT8%Ð,T+…TCÕSDý\Ô8¥PGÝQI=ÔJýÔ…Ð6eP!¥ÑLå2A%TJUU]ÕVµT-U)=U-KÕH½U\ÕQíTWõž¼øU` V2 Vb-VcÖa=VeUÖd]ÖbË=ÍUO½ËW U55‹ÂÔle‹mµV6»k-TqíÕq%×i•VsM×D ×sEWXÕUpÖr]Wym×yeÕþ„×9½×5­W{U×wÕ×€eWhÅW ýÖ‚5ØxUØ…uLjå×|ØG­VÿoõWzµXŒØŒí×X„MXŠõØÕØŽ=Ø’5Y†Ý×½X^Ø”UY– Y‘}Ù‰•Ù]µÙ›ÍÓ˜u׊=Ù†ÅÙŸåYŽ¥Ù¡mY’5Ú£Z˜ÝYˆEY¢Ù§eN¥]ÚžEÚªÚšZ¬ÍÚ•MÚ­URŸ Ú¦ÍY­-[§ýZ©E[•[²íÚ«UÛÝ8O¹[º­[»½[¼Í[½ÝÛè4R·-Z³m[—ÜÀÙÂ5ÜIeÚ¿…Z«eÜÃ¥ZÂ]\ÇM\¯e[ĵ\È\Ìõ[Å•ÜÍåÜÊõ\Áí\Ò-Ý·ý\®%ØË\ÍÝÕ5ÝÓuÝÌmÝ‘ÝØe]Ú ]Ü=ÛÇMÝÿÝ•ÝÙ]ÝýÝ×^ØÍÝÛ%ÞãEÞÈUÞà[àµÝæ]^Þ¥Üä5ÞëÅÞéÕÞíÍÞîõ^¸½SÔÛ°}ÞâåÞê^ß-_óm_éý^æ_ù^ð_õåÔðEÓÆM_ç}_þ¥^úÝßÿE߆ß®ß6à¶ßþ]_†ÞûMÛñ%_†àfàóU` à Æ`÷u` Þਕà^Û 6á ¦àüõÑ}Øß†á&á–áî`áÖáÞaüíÝbVa!¦áÖß"6bá>b$ŽaÔd_^à®b*¾b'A-vá#fá¶aãâã&cÿ2îb.®Ý)fâ!Vâ3ö_+vã9¦c(Žâ Æá:Fc8Žã6Öc,c9¶cB.d>Fa5¶Þä?>d3öã4fäH^b@6dJ®dGÆã<Îä'¾ã-ÖÙ/~ä7åQÖä$FäKdK†äIfå>^dUæäNNdE 5¸e\Îe]Þe^îe_þe`fafb.fc>fdNfe^ffnfg~fgÖ 5—i“j“kÆfSÉæ.áænÞfpçÜôæ,!ç 1gä@çtç/Qgãpgá€çßçyÎÍ£ çÞÀg¶Ðç´àç~fçoèrè¶g6‹ƒ‹„þŠ…fh‚>gj~èÿu–hS‰†q±è1Áè0Ñè®hþèŽÎè‹¶g’.i“>i”Ni•^i–ni—~i˜Ži™þ’B(pƒ£pƒ0€nÍ m0€£øƒÖä¨é(n3€Àiã0j¤þæiâ(„? ¥®êjXPΩf8Øêˆ†8êß8€Ž1¢ö¥Nhªî" €jÖj®&!¯Žk0 ²6k ‰ë0 º†Š¶Îç²&jj°é¹Þi®VƒÂFŠ?`êÀf pƒBª€Ã.äð€J€?PÏ&Ž{m7€ëh°lâØ‡xl؇?Àì²Ê€jÆíBÿpXíB8€Ð 78 আ¸ö‡p7ˆm¶ˆ€VR †ˆkj¦ÆÖÛ®æ°Öøßná&nã&jkåfnçN‹8jxïñnìÖî}ÆìÛVn5ˆížoiÆïÑjÿF m(îëfìª.mä8ðl7ê¢Žç¨ jØ0 5ðßІȋ‡Xp°í˜fð> èð€ŠèVÆFð°î{°l'€§6‹ß–î£Èî°î¡æVàžæ¿¢{0€Wn·é£(€ifìBÈñ ìnò!ò¬Öì´0€ªöXñÿpp&‡ñ5s¨pî0 Nså¶Š?¨î ?ŠŸêØÏnñ(¿rÝ0€€ 3¯i à¾óÈóßðó*Ïé(ñ£€ O‹Ig ¸i 7€íN /çìÃÎð ÿmî@Wq`ô·ôÀtÝØôÝ(„gñP7 ðÖi¬€h8õT¯Põ±¶lX—uï)ö3?€BêdC¤vô,å.jq?ÿ‡'¥†ñÙ>ŠgŸê@+˶v~Ì IGp7¨ô_¯k«Øt¨€¼ÎõëÆj¶ðr¥øƒÒ6Šï ?×çfòd—÷ªØô÷¾àÆwÿ6?´èÆéd§aGð´øƒ(€©Ø‡xmow­ÐxŽ·xmÐé{ˆv¦€k¶tp@ml/kp|’Ió _m£8€ˆêª~ypWñÑ^ê˜få^÷¤ØtÑ®ðM×ñÞðrÆþø ñ/'øiúpq¤ñYGp/çó§ô¯ Ž7î®wí¥(òŒ€¼F{ç¢ÙÆè½Vôwïú¥ž‡ïBÀí÷ž>¯–gvâ°øw÷ìN§îLï Ä?mjø{5|áèö7§î}°x50ûÞ`xày5Pnž¿vÝðr¤øö‡gíU¿t1·lÍçü¯?ŠN¯òýüî°çùÿ?x}ÍN}²÷Šxož·ø¾×vØ|0·Šàï{¤(wÞO jÈe¢þƒnßl¦Fn´FèÎþ¯6€ßg‹g7Œ¦þ†þ‡BÀè}€së6&Wz¥Àê\Æip`òp ý¤ø{ŽøYGêgˆþþ,hð ApúSc@Í@p€ChÑà>5ÕúWhâÀ^,éf£p(£yieAp[ ,ió&Μ:wòìéó'РB‡-jô(Ò¤J—2mêô)Ô¨R§R­jõ*Ö¬Z·ríêõ+ذbÇ’-kö,Ú´jײmëö-ܸB?VüçÆ€Ü¼z÷ò5 €ÁBö-lÿø0Z7I€€‚Üø³Ï3ÕÐÜÒM÷ªy™.¸Êÿ¨±Ûy¡6… ìClû¶^Å¡ |À€ü @i¼ìû=À85Å„ X \øBÜü@[¹འi?>7úôj`|p€êÿð¿âóÊ–Ýkë>ÀB‚QAôí£œíE@!ÂQ£fÊ©7!…d)Ø?‚Ý#a†ð@Ðï Îq% ØhŠi‡W‡þ\x îÓ[‰h7S…9ê˜Õ…ŒÙ'€?öÕ^þœ¨`!ðÏ=D£ØB M|Aº'ÒqÚôFÀ?ÏùÿÓy‹í8&™QõØbxîmW‹ÂЛ6¿ÑÀ“Ç·dšÆE¦M{F&qh‡a™…z5jœ÷Gkÿüa€$qDPs²ä(¤€A馑¤ÆiŠô‘lÿ¨tÞ¡©ªÚŠ«ºúª\P¬µÚz+®¹êº+¯½úú+°Á ;,±Å{,²É*»,³Í:û,´ÑJ;-µÕZ{-¶Ùj»-·Ýzû-¸áŠ;.¹åš{.ºéª».»íºûî¶àÈ;/½õÚ{/¾ùê»/¿ýúû/À <0Á|0 +œ0 ;ü0ÄKŒ@89Õ¥ÔÅIe¬1SåñÇ‹<²R›|rÃãÿrQ,åòË$s,3R0 eóÍL¡¼sÄ*ß„3P@ÿ$ôÐ4‡l´QD÷¤ôÒ:óü4Å#ÝrSLïdµNXg=uÌ\õÓ>Û¤õÊ^EöÏfç¼ÚcWí4Ø(‹]RÛt«TÝåmÑÞ|ß]ôß>ŽóÜzÞôá<õ}ÐâŒ'~õÛK .·Ôl?¹å™k>3Æ‘—<¹É…û½yÍžs~:êGw~yN ‡^ùê±Ë^:é´Ï®úíF¹>±è5ë°§ž´é¶O¼ä»÷,¼ñÍ;|îÐßuíº+qïŽWOuðioÏ}ôÔ‡ÿõõgŸP÷n§o÷÷â?þøB•o>ó¸¿ÿÿýgo?ÿý5¿Ãμö­€x[ûâw@Z€)«Ÿôò§?môþŽâÀ¨•‚€ó O~G޾³ SHh*j„ˆSàaøAbÐ}5, _8=^°‡>$J‚(Ä!±ˆF<"‡NÐ…Šca wˆC)%‰V¼"…¸Ä 2±‰T¬ ˜C"%‹f<£»Ã1bŽmüâ áè4Ò1‹[ä!ÕF7n͉o”cOê(È$ÞÑ‹œâ ×È'úñG$$‹XHDêq‹td"-yHE>2’ž,Â$9YÉ8f’”¥ aŘ”Oz2”š<%*ÿ ÁQ’–µ4 +#éJSæ±—†´%#ùØAYâ$—Üe,…9ÌKö‘˜ÞSæ3WiLA"ó–¾ü%-ƒ Í2³™Òœ&«©ÍM¾2›˜4§7ÉÉK ‚3œèœå5EOyⱞöJ;Ý9ÏuÞ“žØ|ç2Õ™ÌoæÓŽf7 Ìsö³œµIAÏ(N†þsŸ¨5ÊÏŠ%¢fœh:Ò‡r3¡)<;êQ,‚4¥”$©áœyR˜ŽN¦Å(E_jÑŒr´§þÔ©FQªPšž0•+´iI…ª>¤Z„N}*T£*Õ©RµªV½*V³ªÕ­rµ«^ý*XÃ*Ö±’µ¬f=+ZÓªÿÖµ²µ­n}+\ã*×¹Òµ®v½+^óª×½òµ¯~ý+`+ØÁ¶°†=,b«ØÅ2¶±Ž},d#+ÙÉR¶²–½,f3«ÙÍr¶³žý,hC+ÚÑ’¶´¦=-jS«ÚÕ²¶µ®}-lc+ÛÙÒ¶¶¶½-ns«ÛÝò¶·¾ý­k“ªTáî”§@=.rÔ›%Î}.t£+ÝéR·ºÖ½.v³«Ýír·»Þý.xÃ+Þñ’&iÔRЛõ"…½íeŠ{›Û”ø…¾D±ï}«‚ß¡ì7(ýÊ ßX)öɬßùx½ Noƒ á SX* îÉ…w’al˜Ã>J‡sâ›ÿŒØ&%6qU.µ'…ÅHqñ‹™c£Ì˜Æ2¾1Žá¥ãóøYF*h @« \†BvTh´qß$ÿã2ˆLQ¸C (Ô€”Xò&e6žq2”ƒB*Hu„ÊCq2ql%ó74£óP@«-‹æF*@‡Lè0ÄxÆI!HB QtFˆÞ" úCB!45Œ¼!FÉ'(n@4°$#G#8 Ê‚ZóFwf( qƒ´1i5T(“vCþÁiO %QШ=”ÐPcŠ«MiÌÈ:Ë´þI44šNBÓÿÀ 5æÈª: ‹ -í’4Gÿ €¢!mf;Û w‘O²¡¡ `Ù¸KØ 7t8Ð@rfü9ÝLÀP"EÚÀ{>òþ‰pp ¼1ú^r†Ô p¡  #˜ ‹ppŸø»8$Ê7‹|ÒlŒf"vÀ=PŽdŸœÛÎ02AT¾enkº53’ ¤ˆc„h‰ ÀPªìê@ªQž 8‘zîGåÉ'éÐ…Þ@J1ú§}b€øT]é³yYСs©ó$<‘Ö…bòB>_ŠÊ;>€ DKò‰Òí‚|ÿÃî7yˆA˜-wžËçç" €‡ól£ oŠ÷¨Bþ“? 5Bÿ6ü|/r‚™ñjÿ}Fy¢˜\왊·ÁÑÀg¨ñ>¹‡æÔöÑÃ}4r§Fc´Á%¼WÞ|×ýßµ @$¹»A”îopÄZíížrÆÑV€Ki¼>«I3P¶\€Øoy!ÌŠ?Ò ÈD_íiÆ´õ/N”ÔeùÍÊïÉ_ ´bà°ßGú±ÿ•³æäø¯ÈÌñ±û­œM°¶…DÿíÜAx· €þí_\œ¤œC P€< „Ù£”XClÄB\™œÅ]|aø•JQPÃ¥d!QTŠ MÙõD²‰á¡Pô‡A á™Å!”yaòÄ]@Ù&!†…ÄGÔ„HxÊO\aA<ȧ¢MK¨ÄF°Ä úC@!ù,o€^'‡&&&777IIIVVViiivvvV«nr–|x‹yw—e¦i‡®eˆ±w†©p±z—¹™zz¹\\«|\ºMªbb¬m}§{e¤qq¸hg´esºq|å};Ú[]×]`Î~AÇ~^ÚlLÜgU×vMÕxTÅikÅltÈugÉtwÚfgÐkqÝvhÙyxãWVègKäcZërIévVäfeåsiäxx‰m‰…tˆ€|˜˜m„™uŒ™~•¬x‰¦}¶z†Â{…Ô~ƒå€¹€Z¯Œ¯v²ŽmÖ€:õ…æ…+èˆ5ó‡%òŠ5ò’;ʇF̉SÎVÒˆFÐTÛ’NÍ’eÈ›qÖ‡f׃pÐ’i×–xΤ}Þ£j×¥xëˆFë†Vç˜Kê›WðŒDñ”Fð’PðšRðžYègå€}ì˜bê˜vî¡Zð [è¡dìªvî±}ð¥fð«p‡‡‡„—–…‡ž‰š•••ˆ‹¨Š”¢ƒ›»“Ф–—©š›³… ¾¥»¥……¥†š©™™º„‹»•…ªŽ ¬ž¯¬ž°¹“¡§§§ª©¸¨³¿´£§°ª»´°®¶¶¶‰£À—¬Å±Ç¨¹Ë±¼Ì±¿ÐºÇÔÆŒŒÆ‹“Êœ‚׈‡ÖŒÚ–‡Ó——¨ԟ¢É¥ŽÑ«ˆÕ©’Ø·™Î«ªÈ¬¶Î»©Ê´´Ò§¦Óº¥Õ¶¸ä㇈䈅䊊퉉å皆䒓嗘圜ðœåŸ ë¥…æ ˜å³‚íµƒí·ˆíºé»’å££å¨§äªªç¶¨å²²å¸·å¼¼Ã¼ÃØ¿ÃÎÀ²ÚÀ§ØÈ¹ëÁàÆ®êÄ£êÆ©êɬé˵éлøË§ñÀ¿÷Ъ÷Ö·ÇÆÆÃÌ×ËÒÚØÊÅÒÍÕ×ÑÊÕÕÕÓÖÚÖÙÞÜÖÑØ×ØÞÙÕÜÜÜÜÞáÞàâåÄÄåÇÈåÉÊåÏÐç×ÈåÓÔåרæÜÓåÜÜëÐÐîÞßöÅÅóÛÄòÞËò××åßàæáÜóãÔäääççèêæãèæèëèäëëëïïðòêèøðçóóóýóóþþþÿÿ H° Ào*\xð[¶o!f›øEzùèј/"ňß2j¤×¯ŸÆ~MŽÌÇ Â–0¾ŒIsàÌš5oâ„©s'Þ> JÔfÑ–Ù4JÌÖ‘b¾¿¡üwҤÇ©Bœj’å?•ùDNméõ¨Â²f ¢M[phZ·fáÆe›¤Ý»xóêÝëÐ#ʼn€^ê÷ãÕ‡A"–˜OåÈÇ#KžL¹²å˘3÷‹Ê·³çÏ C‹MâN¹Dû1ø*àÃI#²ÌØØ1ÉKž˜‘+=}¶'OËL|äðâÄ#<Ö%]ƒ¨‰F—þü(ê°^±ÃLÊ¢FÁ¯¥jÿüÇ™^EóOÚ-«R`ÕËÊ—[Ž/Ÿ2ýúÍV׿ÿßô ÿõçC7R~m8RDß&RFv)Qc潆Vd_ÁWŸFä#Ž:‘Ý·!d".‡ ¢(`€§¥ØâB´m6áfã –@%Q…‘E=t IIéfžVçy×܃8j(Ÿ:± âä*å8be%"w"‹9¥ˆe–.r©PþIÅIB-dÕG<ž7UzIŠWJæ…ÄPp’Ui™/¨¼âK“«€hÜ”öJ&tZjh—1Á¦CSõV&COeÓ]646Ê]†n’‰Þ…#%9_}« âç+¨ó˜#¢ªY]‡î·%M¯ºÿ )F2†$äO0¥·Yk*é¤Unùæ@Òâ’¨¬2/¨ˆsª u ze«ÕÅÊ¢°¶¤`n¸òX£ IøšR†a'H~*_“¾¨#Ž“ç< ­”€N»"µÕb›(LÚ‘Öµ1‰El`Á†•Hè)&XX ÷Ø9°8 K¼”‘ãäÅÀÐ;ïŸõ²zïÇ ëûh¯>RSUôPkîíQ7MÄpÃÇj¤N¨«àìçdçIJ ,ÂÔ¼±Fªbf/Éø>g­ÒIÇdQvˆq§²¤²4Rx2÷óÍ1ºà‚L:Bãé‹FboX´|g[v´¬!³-òÈnïô4oQOÍrW:ò¸p?É|ÿ¡ÆßnÈ£q“ÎÒón,fÍñ”kçÛ¶ãoËÔtB7šÌpÔ‚m!n~-•>i|Œ3l0FÌ,ŽgÆôƒÊØõ¥œì”5Îôã·Gîqu2ž¨d®¶‘ÞÂ+lp`ú¸óEô˜CÆKü­ Ñ#ãd,M¢B1ÚŠSß1¡¸³µt·ºƒÿœHI­•Ðní!ù•wL]UxõóޏÐÓa¨ÑÌß`‹8B•¬ÂU¦CÚÐh7ÛÑe|’›\ä ˜õìÆL!ÖFÖ·„ô%#˜ËÌ&R¡|ìà j@Æú§ zäÂô Ï9|á‹íM†Iƒ’Æ(­ÝÅ rH+ŸùÿØâ(ñ¨ í©Õ—Äe¼˜Éì)ùŸ– „Àу j0G 3À'P2xzÅ/˜Õ'y)Ž’q ø$8!¶¥:EÄÎ…•%"Æ"Kyƒ hsìB ap2Ú +*Çz¨À¼(*?5ÉT‹ãá÷Þ¾·¸ˆ‚m¤K¯Ô”«;^Ð ZÓ æŽ¦8F„œ·H6T°Îu°‹Œ:’µ¬f™Q’Œó!wÉK!E`;A_Õ‚Í‘É*a ¾Ó˜¾Ì<ßàǰñÇf$”¡8{ÒÎ4Ž=DÔ8R4nt’ ¢R—êFÙd&‘'ù2ž•–D~2sÏE¾ƒò$3CŠˆ5vñާXC hà/‚vK&r§‰¨#F"Qzn‡GÍeGÙéÑ6õ m¡šk¤ 7 zõÝÐwâ½'6,ÈJaši¨] ÁŪQËT# +Pè†jz$SùÚ×·‰4Hõ0 €B›•ÿJHsX!Þ_&$ÅXãÒÀ‡@e`qt‘­¬Ì 8îðSj8‚R(äßlzZ\ŽH~m'k} o•Ô öä§V±vOIaÖ°‡=¬ñ TÞxg“[™ÆÓhìЄ'¢ÎP: ­tB»™ÔîÿÊ‚s¶g)f¸4'¿ÆDj\hYébó9kTa$€Â\7_U•óI×€D#âЄ"H”(¼«Õ¥WÕ*8»7ž H[fáÜé‰Ó €eåÃÆÈ ZP°ÈEÕÍ\)Ž&-ôv <|Á ÔŒ´ÎWÇnÄdJè 9 ÿNŠ©Bâ”MÁfƒæ0Å1˜UƒŒ`¾ô•ŒÅ§'ÑC¢X|œð…éU7¯×-óÏœàj•æÒwLgs˜g:‘Óô³Ð1LQŒi„â$(Á4VÍêV»zÕ¤h&XÝ‚ä7¤Xƒ Ð„,¼ú×À¶°‡Mì~búØÈN¶²Eó"MZpP © ÂHb«IDȾ¹Š>½ó|˜Â 8Æ °¼Ê2TÀ¨2*®GPctÈ8슌7ˆî®Þ‚­³ãïþUÍq&CtµÉBvH@¯k@! Hˆ¸Ø@Ý@KFµNA R¢møT¿Ô°+Õàã»À©ÿMjŽùÝoDœLF Ø¿‚GB—,Æ+%Ñç6Ó$(á@º–ñhÉP£=àî0oz„Ž€D54¢ ›cXtô¼ÆüI•·¶(j¶qSռɮì`ŒM¥zU ÜLDŸŸ3Fé~.ô#,nЂi%³Üæ:´”Á…œÃç/ßø‘4šÍLéîG˜GÔÖjÈs)µ)™BÌ=. P€B J½Æðóþ•\ë‘ù¬öä æRFj˜Þ4ªŽÐ­§¼Á_÷÷Ê¿ŸÞen”ß å1Yó ì0ùè<(Æp%P‘ ?gƒ:>¯°})¸î@)êb Óµ®ÿ¾_éí2þß-—,Ú'$!U„#$1òñ!w&] ö?‚M§ñB›ª¯ð À"ß'P¢'P •Qu${¨…T¸g~‹w~c—aá;±B<ñgaIq.¶ ô#ÔpP@€AwL@X¤E¤r1¯@äÐ> _'€ –aÌ «¤å°'˜*·X§{¹‡-[2mGd-„œS!÷T!Ý0#ý0 ° @F z´ ZPHòà:¯ ç@*À`1šu`hJ¢'–,pU\m^G凇®å½Ò+{}¨:B!$Ä 2÷€ p– 7ÿ0»@L@$çZÄM4øVè¦n€(6³‰V–8h„«eIèr>á(Uó‡©8dæ!G:—7Ã3,ÿp €ôàk…ô xÈ   à'Ì  ëf8NrQeô†ƒ6nÈ=£èT»‡„zÈ{8¡Šn6A¯8Lª1gBÖd‹y‹gÀ‹„DxÊQNjå$…à 305Q4f1óõŒËQ‡ûvé×lè·h‡¤x Ž6!º%$‘ˆ‹Øˆ 0È †ôå:£Ì’,îˆÊ1eéбS„ÒxŠþ8J¸Ñ„™+Á‘G“!ú°  °7ÿ€\E{¢ Q2xò:a=e$5P¾”ž‡“,è Š5v‡¦X•V©;¯²A4Á„²X[9Ø¡s†ñ&&¡Ñ0P€`Ip‰Õ¶Dé$ %_ô€«õEFe_C(•‘ÆŠx˜ˆ¹‡Gè)B’LË4Éä"ûð \Pµ@EB ŸÀà„  r( t\Ö vY3àJÉ’ Ô0uFe{ÑvÚ8i‹‰Š·‰Ü6&S¡x£ Rø Ï`ˆI€;]tÓðHÌR8z 5À#54±Ð<À= Mÿf€¢äÇr¥x•:–›®ø~¼9«<Þ±•Äi ÅI°ËÉKðœÑY*Óé” e ~æ.PÞ@˜ð&`€'@æ†r³Ù^’žXÙré˜"™´‚mÁÏÐeÀšÉ™žéƒ š}Bš«`\¡" ßàPð ªbX *ð± Àp ç$›SY›‰Éz›#Iw`È[ñ*ùÑ¢§H—P —5@—ïx1I ŸSà ¯Ðg#Pp#Q 'p A*¡C ŸÕH꩘J[ç/k!R°!g'ùû ¦sb_à † ?É”ôÿ ¼° … VNŒ©Æ rÛà'@ o*f I›rZ§èùwZ)O7¡a"tmBÒó ‘æPHxå.¨0U `™PPpô  'Àyà';U‡Ñ2¡HŠ¢:ªïÔrÜyÒèLˆåt–î `Bc  ±”#”3à3à,â0"àgêz {y u-˜Ê›ò±tZ¤FÊ`ÏúÓ 7ÎVi'“ó0\`¨PKð8å$\J ‘À*P®.Pç ÊV@òh3ດö ªÌzªûJ²úÒ¯5‘ªj>‚ý°]°a@`°µÿ`—‰Dšp q°8 ªé«ð æê âð û†‚r ¥ªGº/SK’> ^ 7ºj¨Ð\bP¨·1—0 Ð:ÐÖP檚ñ(ò8‡!âG^c}õHK‰g˜yh›&[’ͪ•„u[ “2ªif š:(·ñ˜ °u ±=K F[¼ ·j®­€¦ð7j@kÀ Z±M2€5hN…)vs aÍZµ-²Ä’2$¤7%Äñ¸ ¾ ¹ô@¹•Y8 ‚ðÆûñ( êP®0@±3hòà7£ƒ _° Q³¤ƒ!š€ÿi"çY²"™¤ÜU»ÙbéÃ#@2»’ë ¹·ºšÏ[±h  “ Y8± % ñx1ñxÎà‡W½Qð&ÅÑHq ¥§!9»W{IZ²lœÁ…Á¸ ³-p ;« µ6 ñ¨ >À°ÐÀs  ¡°j¥¶¶jñ8 Ã6 ^ ¬&Mð°ÀÓÀÄÆj"| — Ñ[ E,lƦÁPÅR¼æK¸@„3|dE¡ˆ «™8Éà à8„ä¹´•Q½)ä Ø@Ä ŒLR·òX—Nû3ÈuøJ»V[Á 6Á¤êo '¡ÿÖä*4À»Ð »6ðõOù Ë 4½ñ¨‚ u–QºC]`ulÇ’yç”Â0 ï2ƒ~‹Q«"¸¥Z¾ÎZȆlÅì¤5,ë ýÐÈ0 ”ø¡ëà° y¢êð 4Ðjð2½*À G%z» -€ÊðͪL3“¡—Ãá$8亡bCµ3¾ù:¸¼|¾…KÈÝñX(•XŒµèÆ2@®€ 0P±¼ÐêÅuù 0PÍÐ nÐ)€îÆe{0žBƒq”Êß¼À«LÖ3ºÓ`”Ý[Ká›Fì,ȸ\¡ˆ¾TÛ2¬A)¼ËX^‹8n਼ÿ` ¿CåÚ Ã¨®¶ÀPª# œõw!wS5˜}Ñw\ó š  PFL¤IŽºV"mËäKÁòlªƒœË†%îëX.íM1­š [ê@Â.Ð ìÈ |Ó«/00cÔM©—àÍà Î-Îñ̨@—œ…'ÀË' r—ÇȤ\Ýη\Òñ\ÅÙ#‘Ò ‹ñ²ù\Í3€ÿ¼ší¦B‘·Ún`Ð/àP-Ñ#¡ä@ ;c J}ÑvL¨ÀP´ƒyÍ ¡°=n•,¦Â¢.:ÕÜÙ$íÕ–½ž•݈’mG?Ê$Ì.0Ì]pÌ.ÿKJ;¯{]ð1pšPà G ]Ô-ª¤Äð †0 €` Ÿ˜É8ë$—W$Œë¦VÌÒ‰üÕ”Ò`ýà’u’=1–Ã[ÁL·¡ ÿ|̬ƒ ÇŒ ÍÀ^— ðàÞ‘H±Áæô Ó Àÿ0 †`ÇРóÚ:yB†M*ªÀ ¯Ð„Fð©ªÉà#íàÐ-Öüj»Dm‚J®A.‰uøìJ +:«p Ûí´æÊ ¾P®¼på:+°Þ-Û±:1Kæ1ãÿ@t Àð§P ¥P}òHN¹šÁ4ð8±ÿ@ ñøP ŸîÓÕ‡,ÙÖÖgÑž.…‡µv¿áµ«À %ÎåÛÖå¼.ØK5Ðáy­ƒ|ýÜ4 ãàM2þ†ÀŒ 7>¬nä°Óô ª©,I;±Èõ±²v¹Çó«äC„!þÎ‘Ž›Ó]éÙ†D˜7™®úà¸3`]î¹:6nMê°ã §N·*0±¬Îâ' 5 5çD¼j‰€çÿ qW×O ñØåñ2eã, ®àMfæÓ:BXS%ᷫ˸kIU‘åV.ûð»k ª”`b>4dæhîå‚p&nþS¶ t¹ŒÖJ ¥ §ÿ@ [F¦Me[>±^޳;ê:+Zš/ Ùªõ¯’^ôF/í”^é-)ñ1…Äí·ºýîá…â4ˆî`'ðb’CD¾3àuÛ  Ð0#`®t SÓæ:NñøÑèŸë—¨GCôÏíLÏI¯Õ­¸ƒ‚Å¥œ¾'‡.€`½5`@Ÿë¹º¡›¢L%QúuœÐ”*àjO,Ú”Û½ŽÁw/ó5”íàŸLö÷Ð^ûÒøã)+±YÞ‘ÇÈ,± ³rÈ3Ïï«‘#ÑS~|€ é.I¹Œ-¾ñ—P®5Àó<:š@?ÕCÿ¹ íÐð`c¶¡ð ßä&fP^XŽA­_‡«•æC€.¥ŸŒæ•1 °“WíôFˆpnÆ 3°ÎÅBENàCÂ^Íp1ÅôЭBÕ•8z¼> ‡Š×9T«ÔÑÛ×nÖ?˜0¿ÅŒÙ¯Mœ9uöË÷í¦N AsÎZ´(Q£I•EºTiS§F¡.íGXÀVÒë¸rC‡ ›Q«¯ƒñÄB„DBHôªEpô WT[Á®YãàŒ°j ¨X,_çŠI¯$¯Çûµc…sjÔœùf£—³ÔÏOCfJZèeÓ2CW]U,ršRn]ÿ«î`VT3Vµ8)B#jˆE˜î\jŽ"œÞ/H5 ÒÍË`×®ÈéER’“¤d%-yÉHšOzšÄd'£§™i„R”¡lA Dy‰b”£$E .!ÊR®R–¡Ð„&B!ËUÆ2”¨T%.e©‰Khâ ÀÔ„ `P Šhb¡PAƒt9Î\c‹Â'¿ÿaMOVҚ،Þ4¯™Mp†Sœ˜z¤Iˆ½kžÐqfkH`#•¸0Uqs㬠i/w’:ñ´×=²©ÃKˆ.àEV!·"¥ŠòQbÖ y¨Î8 Œ mä³øÐF‘Ï|çâúÔ¡6¨5¿ë?û¹3ýyD¤¨ÃŠV®r >Ò#JWU,ôd–Ü4¬q>R¤ôŽ)Ej/Œ@ÙZfèÁ*²'8ÝE!–Ñ¥4µ£á²Ýa4;{]%+*²'Þn·’¢ilÌ¡:Ò atHOaÐn öÎüQ‹âVRe²Ñl4ÎIvÝ‰Žº7 Â®–ûGù8êTæ‰Ì¢TÙ™?ñöXÿ8²yáªîHŠ>ĨhÐA¤Äë| EÑ 6®Ñ‚J9•õm©´•ûk}D-Ä2p„PMac';YÉþÖXírÌA&„—µ¼KXÆcPJx±®‡QìGŒ[ä?ÀIÇåu¨ó1õ +)鲋”b]ûTÅzô;Á.oØ;Y4wÇ}—Xº²\„¹ZQ×*¢«¹é:+ÞJ7¦ÝuН· /€Å‹ÛږשçÝ®}ØÙÕöú6Ã…™§M÷ŠÌ.æ5œ­È@÷ضÑ6°Y´E­ÖâZE¡wl°õœl#J[Ûš0·NðnÅ¨á ¯wgˆ…*jðŠ•:ÿfbé·C­dë_b?N±zrõi |Íê„ãÚj$¶ÍÖ°žðb¹{a!9Îß)(g`Cˆh¼ròJ BÓ€"§cE4ౕ©5e®ë^‘‚W÷X(EÅh Ï\¤¥•ÀmVpz©zR9»wVá±*Ìð—Õ&U˜ý••8åá… ±ˆ•…;¬¹hzÙ&ò¡kU$÷M͘OÆFÅ5͉™ØnšÇŸY¶nyûcP‡z-ï]Ì©g Ž<í‘7h„æ}¯-sFD¬A|ûÁ` )Õ¤„c,ì»r+[è«îTŒæaç¶Â©ivw£-mˆP;$ÿÖÆ6ðð,nãÅ6ߦ‡_²CПçN·`+Z[¶ûÑ3÷’"íl¢Ò›°öþ1ƒó­ïÄÎøÙŒý7À#;êÜÀÀÔáªß8â_ÔÃf•µ bñBqÔÚ6é‘B•ÈkjùZRÀ.ßÉU,Ñ2Ó˜èÊF9ÝlaõŠÚåÇg:{p°z(%èé•î nA“Ä#†®\¢5=E#9ºy®V°Õ‰Jã„{ ‡öC^Û<¿¢¼ßW'·~\{y5hÅ8vöÒ˜ö鬎H,fDhËŸZ\k¢ 2ŽYxOtñjl¦’Ù¨Éôhø*in:‹ƒï4Ë1|xÄã^à%ÿíÅö]\ß=3Ò¢¦ð“BÑfë¶Åæ%üà¬uÝãþå¡þ¯Lê}Ýï*e¼?b3fØ}ñ~ßøž^ù›³ÞšÝo8ý^ÿΪ¿¤ë{÷÷.ö ÷QÂŒƒªâßqóIãïÛ;¼ö®œ•Þ[±ßk(Ù«âK'Ò@>GÒµ%b¾Ú3¿O À­+@àz,aà^;¡ú®-Ó;±pŠ5»¿¨:*1’Àã˜Ø?ò‹A•ë»9@éË=5ڟŹ?j½ÌP½ù†n–öØ»û E½¨¼çÑ7Úó1Û«Á ¼Áô£ò¨¡¼“´ÔxÊI­Ñ¨™« ¬´ªÓÂÿ „¬ô›%[œ„ÒEò‰ü?­‘Ú5ä»2ôC¬ƒÂ44¼)dÃÃÚ飿K:Ä> Ì CÙCG´º?t:<¬Àã#D—kÃǪBñ¸B°›Cüà DbÃRLŸJ4ÃG”ÁAl¹M¤B¼Y£ŽØAQÄÌáŒ>ŒÑ $¬œº”ûÃ',¿L„E€ãD¼i¿üÀÖ¸ÅQì /Tθ?lAë*AKì?Lä·çC?Y4Dê;6W$r(ò‰(tĪ+Ær,-êFç;¿ŽÇ”3{ÉT'֨Ƭ IbÔÈ&áH±˜Çx 5 TÄmìɨÈÂ?êÅÏx½a,Cw¤É¯¡GyôÈ ›ÉV4ŠÒÊUD§äIfóÉ5ŒIÉ¢üJ9«¼ÊdÉK¼@)ŒE˜¬Jr„J_D˹¤KnäJotÉŸ¤ÊB”É»4ÅQÇùkJÁ¬Ä§TËcÄ@¸Ë K˽]O.ýÒ%õRDý¿‹lTG}THTITJ­TK¥$@]T+ T5ÍS=ÓLÕÔ÷<ÓPMT4åÔN%Õ1TOSP-ÕMÕEÕO}Õ2uUYUÔCÝU^U[MU2]ÓU-TÊ„ÕX5UcõÕv¼Õ;¥U3%ÖbÖ_%Ô®V`eÕguÖlÖmåVlÅUdMÖSõVpíU]5W-eVJ´VjÍÕquWi%WmmVx×p½VheEy]W(e×Z­×v½W|Ý×éD×ÙSW?W~ýÖr=Vƒ׃õ×nØÿ}X{µØ€ØV¥W­X‡ýX=We¥XUX’XŒõØ}׎EÙ%XCMY—Ù–åX™Y-ÙŒ½Y›]Y–åÙ…eX…MØ“mXšõYˆ½X¤UÚQZ¢-Ú Ú§Ú©¥Z¨­Ú£]ÚÍZ®ýY­ÝÚœuÚ‚ýZœõZ²5Z‘íÚˆÝØ¨•Ú˜UÛ¤5ÙšíÙ¦Í×Ëœ[¬M[½[°Ý[Aµ[ÅÛ±õ[¦%ܾ5Û°Ü$EØÁ5\•uÜÇMW‰E[È¥\¾=ÜÂEÜÊU\ÆmÜË-[Íý\Ë]ÎÜÑ•[«õÜÌ%]ºM\·ÖÕ]ÔM]ØÅ\ÙU 8È]ÝÝ]Þí]ÿßý]à ^á^â-^ã=^äM^å]^æm^ç}^è…Þ¨€G¡^%±Þë­^íÝ^$Á^þðÞïQ˜_ü ßù0ßóåÞðU_ý@ßÔpß÷߀_Ò ßѰßûeßòíüýŒþÅŒÿ`ù `§ à¥0àÖßôUàö@à¤pà–ßip” V’ ¶` Î` F’ æö`ù aa.a>aNa^aV’l0˜0„0€lH F(€`„Ú2€ Æaþ:˜áÅ F0™àa$þ6Ôëí‡ 'þ‡iâÐ8n¡aëâa>â?2°Þ&~b¢Šbÿ16€›¸â®1>€›(ã..†®á+ãža´ã¨áöa&æãã(,088dsLd:€ âi€ |C ÈC6¶äëeF€o˜dF8€À :€ Už1MnPYô˜`1žä¨ eë¥âlC@eUfeW†e˜*¦e[Þ䨀˜kVæUþå`ž^OeZ†`¦mŠEž†P– €ár6Š0€C¦þäЀƒÈ iȸ 8˜çÐȆ°‰ø†@bzPê=f˜0€>ÿë €µãWþ‡˜`z ä‹&€JVŠTÖe˜æ˜àfPU¦Þv"hZ®è¸h:žßîèN ˆã†é“>éAŽ @â~‡þ‡w~鉾»¡¶.j€a¥¦e£`„ȇC†h˜hãÑ0€€ €£¾aÓ€€U.i˜ è®¦^F¸h:8€ƒ†‰°ç¥xkE"ç‡f§ê~ðäŒæç›È†UÆ ­Î@낞ë¨kÌÀë(åFàë0¿^Šcâ%.é~þÃö8l+¦ddžìˆ)m¤>F€áÔþJžäoÐjŒþ`¡.€‰îdÿ˜xmÒ`„%JVkzžÆ¢ÐjÉŽëÔ6ãœl!5Æì¦Æ  æáo CHè¾h¡nhj~éåŽì‹¶fzPeé^bª0ðáÔž†ÐÎî^ C€ðŒ|(LÆèϾ¿ù®o÷Ά!¦‡Ø†&€uÆlð¥¦çI¾‰èÑ8ï¹þHnkÑfä>ê¥eãÖ É^d@–lþ  öc´¦í Flê¥ðñ}é hñ^k=Ïi£ €ú†å¿ä™Hi§èä 5Öñ‰N- i6ë¸~q:äþgÓ ÷ŽëCÖk^¶k̘òGžFek& Û†j^Î÷†ÿÿ Évå‡Z~ð&ñ Êh¤€G¶ñ¤ó¡žm0sÝŽñHöhospu~ðdÞó37oJŽŠ°æwïwí2?s hôH ßžô>'A–e-N O w¶ó¨xm¨`C°íÑ`„ ·¨®à׆cf[âÝõáÚ>€‘asšÈîGïRoõQïí—îðÒYâ~øg]¿uLɇÝÕáXÿ‰öu¥ ƒÝý†Ýàg j×]Ç âloapwqwr/ws?wtOwu_wvowwwxwyŸwz¯w{¿w|Ïw}ßw6¢Àl~xwM®àíOx…?á‚ßêÐ6óÿ½†å¸6WÇñ öcg×lBž_½öá×^”@b bFâ¾á"^x•WwMžaxî瀨l‰@ôu€MŽy³îeMFk8dž§ùR¦C€ú^g^g„R¾yæ^y©_wM^l›ï篆 °¦åìyŠ?ël8úÐd$>øIfd°æç¨^l÷¶ê^.å^穯{{oxŒÖeºÏ{Zîóù¾ù¿yÁ×l‘ÖäRžçƒï˜y^Vo¬|ðh˶{Ê—w¼Oü¯&è†î.¦ƒl8øù^åòž³d£Î|Z†d^6je³æ ×.eÜ®|ÚG÷Ëïg^>ëÿõþÎìÈ×ùlˆy°öù›·ùUÎ}›÷aņäƒ÷៷yCýÚŸ~uŸ8ÐEŽá¨¦õ ·¤FõWâDvíŸîùõøëvÐakzêÿ{×d÷‡ú§~C €”¯ýßþïÿˆ,hð „ 2lèð!Ĉ'R¬hñ"ÆŒ7rìèñ#È"G’,iò$Ê”*W²léò%̘2gÒ¬ió&Μ:wòìéó'РB‡-jô(Ò¤J—2mêô)Ô¨R§R­jõ*Ö¬Z·ríêõ+ذbÇ’-kö,Ú´jײmëö-ܸrçÒùí.Þ¼z÷òíë÷/àÀ‚.lÿø0âÄŠ3nìØqÄo %¤\y2æÌ-wäÜÙ®æÏ¡9zÞXÚôhÔ©WžÎØãkØ«]‡ŒmÑvEܹA_îí[ôæÚ³eG©{âq‰É•¿-ü7éç/—C¤þÐúõ滵SÄÞÐûwÞÁ¡G'¯9啃íø@–k¾9ç{ž6æ}>:饛®xèÿœ¾:ë­»N·Ý¯Ë>;í«§^;î¹ë>ùí»ûþ;ð|÷<ñÅöðÇ+¿¼òÉ3ÿ<ôº;=õÕ³>½õÙkÏ9öÛ{ÿ=ã݃?>ù‹_>úéËz@!ù,Ň&&&666DDDJJJWWWiiiwwwV«nr–|x‹yv–e¦i‡®eˆ±w†©p±z—¹“SRœ~¥GF¤VV¸LL«|\ºM¯aa¬m}§{eµii´esºq|å};Ë^]Ø[\×]`Î~AÚlLÝgT×vMÕxTÇgiÅltÈugÊtxÚfgÐkqÝvhÙyxãZXègKäcZërIéwUäfeåsjäxx‰m‰…tˆ€{”˜m„™uŒ™~•¬x‰¦}¶z†Â{…Ô~ƒå€¹€Z¯Œ¯v²ŽmÖ€:õ…æ…+ç‡5óˆ%ò‹5ò’;͈G̉SÎVшFÚ‘NÍ’eÈ›qÔ‰f׃pÐ’i×–xΤ}Þ£j×¥wêŠEìˆVç˜KèšVðŒDñ”Fð›Véeä€~ì—eê•vñ [å díªvî±}ô¨hð«pú²u‡‡‡„——„†ž‰š•”•ˆ‹¨Š”¢‚›»’‰£”™©š›³… ¾˜¦½¯ˆˆ¥†š¦™™º€»•…ªŽ ¬ž¯¬ž°¹“¡§§§¨ª¹¨³¿·£¦°ª»´°®¶¶¶‰£À—¬Å±Ç¨¹Ë¸¼Ë±¿ÐºÇÔÆ‹“Êœ‚Ä™™×ˆˆÖŒÝ“ŠÔ——¨ѩ„Ó©‘Ó³–ͪªÈ¬¶Î»©Éµ´Ñ¤¥Õ¹£Ù¹¹ä㇈䈅䊊åçš†ä’“å—˜åœœåŸ ë¥…æ ˜íµƒì·ˆíºì»‘壣娧䪪縨岲帷弼켰ñ¸·Â»ÄØ¿ÃÓ²ìÁœøÄ–êÄ£êÆ©êÈ«é˶éлöɦòÁ½ùÒ­ùØºÇÆÆÃÌÖËÒÚÝÄÅÐÎÕÕÕÕÐÖÝÖÙÞÛÓÔØÕØÞÙÕÜÜÜÜÞáÞàâåÄÄåÇÈåÊÊëÆÅíÎÍåÏÐéØÉåÓÔåרçÜÓåÜÜéÑÑèÜÑìÝÝõÇÆôÙÌöÛÛåßàåàÛìàÔéãÜþâÌöæ×äääççèìááèçèëéçìììïïðóèèþñçòòòýööþøóþþþÿÿeûG° Áƒœ6o^¶lÓ¦áƒ8-¾ˆ'fãG°!?~1Nüçp#AøN6ćϣƒ_Êœ)¦Í„1oÚ|ȳ§ÏŸ@V|±bÑ£H‡b$Z”gS§=‡}8¥Õ«X³jÝʵ«×¯`òœWS§N~ V$ÙôhI‹ÿZâûØÐ£Åºóèæ%Ø’ã?”?  ’°áÈ çM̸qaÇý–•i•/Kš ùR—t)H²³9l(ša^Ÿ)U’%¹÷/Þ×óœÁžM»vCÙ¶sÛÆ­»·ßœ ñŠÆ+§ðº<"mYõífžsCŠ4;ðîÞµ½ñâf6oì࿃ÿ§ý›rU~ç2—¹qåIŽ+9cÄX—.C½K’]œyjÕ´‰ž9¯œb *á¼&àx×1X[y/5TÐC~õõpDUôµÆÙjj¸WIÿ½ôY€6”Ë)­äR *ÝÕµ`ŠÞÑ8„Á­&Ð4¶†ÓLM£Æ•™kíñG’h%âeЉ³Í¨›*§ÄØÊ)Þà%¥·qùŽ É…^Fz±GÓ‡è­õ™}‹•¤ápTIV€Q¦hÎ)ªÔuË)Ühéem[2fBÇg&METaOû5EÚRõSU®Jc¹˜ÃãøùgŸ¶†a˜—ÅUê¡41'§[!)rÎ%ÿ%Z>PÖX×8®èJ§Ùèë. †j맃š5Ó¨7])DSqÆlAñ=tÍRUEkƒó˜C¥*ÛÆHÛ8¯¨âJ/à Ûe¨Å{¡º¥e$Qd•&¤k)ÕõFÉSË,Ô3승¨xJÀ4j£Áà¥Ë.BÈÚÄYjÊ2+ßZô²6ñQ飌»áN° Øç<›¾r°¹žKPà Ä2BŸ¥¤,KÌ&Zh$¾E-Cð4£Ì0ɰm#c]+;Ï.ŸŒò¹*OÖ2Ì÷su±u³ÖnEeTg !ÃŒ<óˆSÆOp\ ÔãøJ§ðš"Âs «pËÌ1TbŽ}ÿ—{qتT`7…8cÏÓFd¨ Çþ~Ç •xŽl›vÜ•k.ݾ­<5Ìv¹d"¥éx„1Û’RM[-DøøÓ 3Ã0®F-óÐâxl¯“K.rÓF ¯‚ü4çºÝÍ®…íí¡„c6Œ\ÍLm˜(KG2£ÆNx<jˆÃ{]“hùl+¶¢Ëž0¦Œ2ò¹)¯.ó€É´Ÿê9å¬Í_G„ýjò°…Èà†a´A ÞãMÛNñ6NÕ†J1*P–Žö´ñEíeêZÓp¬F(ý‰fù©Ù|’’Ô€Äì˜ø,˜´†0`°¹Sž²§óÁ/¢.œÇÇŒ÷¾DÂd^l™å±jù·9Ò…*°Û%/?$š0Yok,Ù! ”ÇCö€4‘àÍ`D×+Û•ÿz<¤‘aª $õó®Õ¹j(Î[™×†YÊ•™ì6ð@Êg< U@ ÇOVZóšEÑæ6k)G‰“uã H¤Â?|€Xø66ÕÎˆÖÆw¯Ø…3þ8;Da ˆ€F2ÔÀ†Ž†ª•äÙgAxP…`…Q¶IšÜX¢Á®Žº8 ¨0¦ÕÔ`]<4"á9D! |F=§‰TÝ´6òk¡u¬FIó¢J„"š‡ÀÃ0ˆPƒS@4PÚ:Å.¸Q ƒBÜâúcÆMâS”ˆÒ…væ!Â`­3@ ¤ÀØÍ®v·‹ÝQÄ`ÙA v:Q¬! Tˆ¸ËÞöº÷½ð/v)5W³hðƒ|3b}4T/xÅi¯­{J^æñd|B^ ‚¨9›Ä.¶±ó€Äñ FÔAÚæ0Þ †aL3Ÿì¬Aè÷C…Ô*ŽÐðt– :ZÃhf6p4¸´á†x[Tt§£äé3¤ >5„¨>êGEü7Ž4Ï&•áڑƘâ¿àò.J´1œ°„.wÙ ÆÀñlža‡ áxÈð<¶‰GDÿ )QÅ! ð×£úãçîë£di2œ®áÑš„s—W ïP¸üå%"žµ™…’›¡ÎB¸!f2_|˜Ð™<Œ/GjILDÔEÄ™G3Ä!58áÖN(—wä;Þ{pQ.(Z›Z¨amÎ3î@ü§¸fð³ê:µ‘V£ê½êÈ!­Ê¤¬i]†%8{º^Ìñ ÈÑyh¯@€‡Ú<îv^Ø(¨›ÍY&×7Lv×Jñ££¾DìfˆV´—….sÔºã¨9vÑŠVì¢;ÙhÁ Š@¬ ¶‘³‘È<ß›jsQÈÇr±¼°$M÷ÿ³Hô :GúèCм¼(D|â»’¯Z1oÄ@<]Á)r#Žc|b… ‡‹Î%ÍJÏPÆKBG¾Ã•Øu"ª.©£Zœ‘ËH¢ È€pM@[tî`Z+Ì1Ž+í¢Š›hs$pëV¼„OÌÓëSiM ñßIÚ輎*ª– ?ž! DX¢;8‚-Ê…2Ù â›bÏ—I¥ŸB¶œt0c?ï´P›¥Hõs™ˆQïúñãŸN_®!‰kÌà kh@æ¡éaã1Ú/ Òw‘í«;­xÛ¡lÉ:a½ó¨îÔÖ„ˆthÉ~$–ÚÛÞ hнÿâ6mÁ.Ó@#»Å nCæ†7U¬)Ýëæñ 2¿}7ÖàK»’•_¬"÷ ÀàxÐt0 hQLó+4t è×¼!zö|õ×Cu1uúwrK¥8µ’I[ƒþ ’À °ðTŠà"› Hc Ó6íà 9¹ƒœD2¾‚'äPzôu6!÷#Ñ'uƒZN¶Hd=qðÌ  ÐJÐT…,0H1À' è+yDSó@ª°~„t>šƒSL„^âlìòqû×ëÁY+±93Ãàʰ ±À=F0žð! …° x× E%½Ð6®0·ÿ7 Xx2 Ïg«¤d(jr„~ñzå4jƒ¤¡¼tõ´ ì0dÐ<ðíMPà TC !†®0p4äò 1@{ f˜õ'{':ÔwÇzŸØdJU?òxQOê óMЮøO ‹´ˆ%¶ÈƒyT °%2Ø0™@* q+P †g¦§‰B˜qXWB‡ç¡WA z¸ là‡€(ˆB@†#ˆ¨ ÜðPÙ Tà © U[° .@¯À »Ð _DA¸Œ;qz=Q/O§g¡A!¡û …[vkL…T°…9Ð…éç+7ÿø ž@V ­ðZ'$°uQ +` ‰‰õ¨‰#—’s*J¥u}…„²C d€Œ#p’à‚:8½p ª°NY@R` 9`]· HCV B°Á”™}Ly÷×g01b6s ð¢ü ÌÐ Sk—õEšr íÇX%PY  )@Z0›°@ °DJÉx‰4â†êÒŒÖWby9!RÁ—ð¢ø̰K·VÙ² ¯ð‚ä‰2p} '`°•›˜0†˜ H+h¸™óh#ži, Ù‰¢©z¤ NJaBU±Ì  gp fðoÐIb“Œ.pè˜ãÿÀ èY€ì× ÷ 9È™ÈH—¢‡w©MÀÁ\Âý° VYcð±àˆ ä ›€ r0Ð< ´© ­P›¹À ­žÊ*ã –®@ ðio§‡„ë-…“Rì ÊðcPfp 퀘¹‚ tÐà=Ž 9P›¸~ìÇ~yçâ` üâ/6²@Ûé~\rœfAuD(RRó(Õ!ú gp8t5º~=° `ÞY ÏР9ðˆèˆŽ7° ½Q Ó1IÆ òp>çE!i›§K:Õ21!‘ ãð ¿  ¹0¥óP¥•к ƒ@‚:ë× æž4ÿž2Às¹áb @£i´ÀÃÑwâ|’é…o*§"IK¤ÙŠ21i’ Ü ¿€–‘¸¨2§ °”àº÷yÔ ëç+ë§ÉŸÖnàÙà Ô˜€%*“\Îú¬Ð­™‚a ¿ð º âå ë· BÐð àt°  €]¤@ã…]ë ð% aÐÙ%b0 ‡ððÎÐòå ÚŠ ˜àJ ÿ _ô%§÷ø9ÀADó0-ÔZæ Ëðvv ‘¨'ð ÇtÞ°~&¡¶!©”š š†›Ðÿûj‡¶A 8Ê~žÿZ¡âQØa¤:ª#ÕS±Á¿`†8À¶€ Žú:4=Ø Æ@ 8Шëçƒðf¹a¦g 5©/ ³‘©¶17Ø Î°)<'¤…4<ËŒ ¯÷¡[óE{4`–'a*#ðÀ ,bæÐ 8j 6Ш.B¶=: ¶¥¦0 a+¶2›c¤'2‹*¬¡1Àal 2ü¿b»‰µsj ˜ÀL˜|ŸgL{zÊ(Áuu£bs‹\ƒ¼~aJ´Û·Js }{ ÈÀºœ˜à#@pɰ±@¯°¬nêÆ ³Ù@ @ Ó° gÐ ÞP¸,r ©p ­¶Uê·NèÊ¢ËS³È¦Ñbk¢Ä»ÀÁì'¦ª€ 2@Z›· ày ãž7ð”_ü-ä /„ƺ¯Îbëïh ¯p´)‘È+Ë:A´¡~7ð °°~|ÄwAü†«šÂÑM‚V!ª·ÿ0ÌùÜÁܧ2ïê 9°Ë*Žå˜ðxðu–2¾Á›0~®åÏÛmcëÙÛ¡CüΰA¨€£Ž4ÜCººÝ¡‹VçÎPìòÄáÄÕ@è¾yÀS z›LH¾>f‹·ë×N.§ Œ.ÝŽÞ2µ2áਵ‰Leˆ£3dƒ8Z%µ!aCæ ~$Oó@ r· a ›¹°0 Ú ÿU ¶hƒá ò³ÁÑß-:704®½uIñ°±ŠUå7à;7€»° è™)—»–MìÆN ɾ콱 Ðn !ò Ù ÚÎí·]†µ)ö;]‹Ý)?Oîb.ô¯¡ß±‰LÃÚ.‰µUó7‘z‘¥fÊgªþÕÎ`ëZUžƒ±ƒÝã.r¹®°áöÎ÷e¨4»Ûuß|¶q Bð> ìÌéÀm–õ*–š'£°ñˆ¹N2èøoå?ùÊöxAô»`ôH¯ôLÏÚõ°Ç  Çuiùn‰êÙyFïpÀŽåbÐdÖ뺜£¹0ÿñÛ­ñ5Ûñ/Žó³a‹iKü1Äò ò ”ð `̃ Ûݱ~T¢s+‚ñ2À©›uëGj%ÿ$˜àA„ ùÍcتspk˜ëÔ©\ ¹åxÊ\C o¢èŒÛ©[!A’Suñ"E• ÇÝr‘cÃ2hD”‘ÃÛ¸œ2„æˆ9Ÿ@ƒ •.M˜”é@|Ó²á×m¾¥NŸ*]rä+o›N©úÓ\Ë]Þ^¡,:¯×Xn Zöjû•Û®±eÛÎ vWέr ÷Jè­[B_Å<úOëVÈ3wU`ÔyY#sUyñ£³µÞŠz;µ˜áŽ#OÅ`Û5ÃÐ{ŽjÿyjpÏ‹ÿÊH9Ïð]zÍVÜøqäÉ•/gŽ|šTãÏ›OoŽož3ìÙcÄÈŽ)ƨìáŠI;wñâAmÚ*½øíÝ¿¿¿ Ó¦ˆö7¹ A*ç&g@qA¨øÂ›«É6{*A¥¢šª*Ë”b0²®@ú*¬¼Š:ë”]¸Y«7Ùœ‘mž ñ"kD:å_‰ÈÃx»M•AjlB›R°²ç¦ÉL³ ªÐ¡ÚXƒ©¨“\:ÅYr‰$•ÂÉå•àÆÉ“à '".wÙÅE¡†²è¢º1ÈÈpLȺDs !2çËMÂÑJ*…Û+EÙæ|%;CJò¢rX-Ãÿy`ÿM.€Ìm&Àöגͱ ‚*‚sóßÿÿr´@æ-„üÔ%×AV€$V{˜Ï©Ä„ð ŸŽ*§B²ÐWTÍE@’º«†ñ"ßC(B¢.ܘ c"GC±€GÔá¶F4˜œä‡”ò (E‰QñˆH, »·ÅhuQˆQ¼áòF8F%ª‚Ls…ÑÔ[.Ïù͆sì´š;© OišÈlç4ßÔLZÎŒž9,'@ñ¹}®“Ÿõôg®ÐOut¡5³ç?šOyžo «¨CÚˈþr£õêh jL#ÞrŸÊ4ç='hÍbs¤Ú*iŽNz­•åT§FÑiO}úS .$¨C%êÊxZT¤Bò£ÞôVšÚA§rp©ïœªK%xªZô¢—|©»ŠÕ¬zô«³ «I;ØR­Ž•©W•jYmºUª²¬j%+]­ÚV¹Î¯{åj^ûê׺ö®z%laÿjظòÕ«vM,b»XÿÅBÖ±Õ%)-{YÌfV³›åìfÑ*VÁ®5²•li;ÙÇžV´¨M+cSKZÕÂÖ´±]íl_[[ÚâV¶¹íhu»[àþ¶µ¾¥¬m‹Üá²¶·Ä½íq›ûÜä*׬nM\…ë\ìB÷­ÔÝÌ.?;]ׂ7´Ú]®qÉÛ]ëf÷¼ Koyy]ó¹î¯|ëKß늗¹öÍ/~Õ»Ýðú÷¿ú•.z¹[Ýöòw½uK°€Œà³÷À n0ã àñ*øÁް;,á _ªÂΰƒ5lb ÷7Å÷E1†÷ëâƒøÃ$~±Œk ãÓ8Ç"1åz »ÛpÆ2‡KlãÿùÈ8~¯‚âðd(GYÊS¦r•­|e,gYË[ær—½üe0Sùqè ™ýgæ3—YÍ/C3›×œf8C­Íðš3ÂêLç³ÞÙ]z®Ÿ-åg[úÏy~³›_æŒ"ÚŠ^t¢}VHGZÒ“¦t¥-}iLg!‡8¦Q­Fàø>p€:€ZÔ¤þG:U45âH9õ¬ÿÁiü(Gó03?`€\ÿë~S`íéðãÔ‚VЬÿ1"˜´Q‡ü£p†Xý&|àÚÀÇ!0ì€;03»€l8#H‚T@ õv ÀÔ¡ÿäÎQ¿ ë8ÑþvÆR­ |¬›Ìu@€@ðé?'`ñÆŽ‡Š[jX™²q€YC[Ý ó4¨ý€<ɬ!‡èû@ô<æ]àÛ‘¡÷ÁÒp :™átŽ"Îr˜›yÔ¶B@ ¸\ ¡ž {'] °¹‚bþFè¼ @¹@€q¥ ø0€(.<ÿJtÿ¦Ó#€Ó³Î†¨Þò—£:d8æC¯óic¼@×öÐ7Ãwœ I7ù­ÓMx2û䃷”3°vj×=ápG“ùg4‚Ýø}æÝsr›?ø~Ž6Ÿoß‹~ß»<4á»à¹¨·:ð6û¶Ü+» é7cK¶@ë‹5à68„ó”FP4Sã@´Ë=çë.[‹²T3¼ $ˆ×K=ÿK 6H4Äx·:8ÐÃFL8ÄFx7E=>€¯SÄ|¹€»½ €C2 ˜NÃhÛ9…W¬¹FDU4¿F0ÄøëÄw{¼S,B.ôEh 9/ €ï;„D¬ÄlPDmÌ;£¸eìB+€BL8bć@ÔF¡€ lÆ>T8plÅ’#9ÒK¶¼›†+´F{›‡p†›5€‘»¼4¾„È@Ô7¯ã‡ˆEwdGglH/L¸ULµyœEÿ0€@œ†A|EITD Ä1SÅLµi€l»ÂT¸U<„w³A‡Bgˆƒ‘¶ÜÀdµˆÛ@Eó@ìG¬Iáˆ8HµFIÇÃ@Ç0Ê—\J¦8SdJ¨„šC0€=ŒJ«¼J¬ÌJ­ÜJ®ìJ¯üJ° K±K²,K³=ÔïωPD,éP “Q?Ž™´·TßÀƒ ‡çî]¿àM…+_.<9óçÂÉŠÞ<]zõ³××’6Š´ðSPßÿÖšÔçÑ× !FUºWêPŸ®ý^­º4³cÝöœáß¿_ªOŠRŽnúñgà¨ˆà‚º]Eš\Æ¡„ÙiwÓnÿt•U6¦TP~©—šO{µôᇩµf_MƒÈà~³|bÊ,ÿ‰¢N‚/æÈ”‚:"è`…Zd…h‘†aDŽØÙVû<Ô5àØ$_Ž vU‡åÆNûñ¨£(ŸÜh)Ÿ€ƒc/z‰æ~?fd‘D¾I$v5q^mî½å•bàõ4˜Tí}he|‰Í‡o]®©Î'¢0Ë'Þœ¹&‚jNŠZ›×ÉY–¦›ÎÙé…¦5¨§WA=´!A´…XFOÙÕª“µÿ(iÿÍ¢Ž7ž3«¥‰òÊ&Õq*–°Ãzš–Wvi•,©bAeèDG• ‘«ˆ½*­ˆ.ɺ#jçœà)º€äÖ⢯üUê+¦Á鮱̺éV“­FÔÑOöºT_kØdôÐyäõj:`ŠR°˜üƒŠ(§Ü‚ŸºèBl)»Ó¯¼ð^ÜîZ?){Q‰‰9éØNL‘yHi»”‚1βTË–JÌ«ÌkR,šÅlÅ™±Æ»ÕqU‡|òÈæ¡WQ† ñSØÃLý©=¸¢3ºéR-j†ïnŒñÎf½ÕxÿÐk—½×–(ÛS¯ú»—wTÍ3Æd³íËŸ˜kO-Ÿ¸<)Í{[ÿ})°=o)×£Nwç|7Aµ¥Ñ|ýïFéöøS--ƒ`€AÌÊL *ÿ}îš|“îwT€ßìuà„/9Tkï™Ú`a×gbˆ…±*yEcïTÏ2¬LsLæé䇚7`2úôàØâ ÂsŸÎ¹ô6s†sჷî:gž†8¢aÓc4ÙkÔÇõû¸NæéÃL3~¹Æ1Æs;Ë,£ó繞+}ý§«^h§5íQ‡3²ÒŠLô˜;yÆ4d³ˆJe—)EÍHÆ4–"0˜€PKž(–#ÑâQ6Ú•ßJ§#Žfuª3 L®‡™Ô(p+´1_Mþ"Œ@6SrÉ>ÿú± 1ƒ `(ƒ<è¹O€.W“˜þc¦èI…9r!ehÉð€šé^dpxÔá„&·‘ änc™fd.‰`Œì†7½ágQZÊ£HˆEõ‘AZ„ ­÷E0 qŒeÝQ*“¬³Íî0‹ŒÒ_Á²U¤>Wñ2ˆq „)ÈiK—ÔðCü ¶Â•èThµ?.(" ë i}ï+‡“‰i("¬¨OwªòNQì5”_V„r*“ã'b1°GÙ‘)Ï€Øp‚Ô@v³âé\é£ÔR–1,$Ö^Â'︅.ÜÉÝ^‚Òó©³#eäO•4ÒäŒ`Œ ôìÁÿ 9HàÏðRÐ0¦ý„Vƒå99@q¶E ú‚’ÆG˜ $DÑÊkX³NÂØn0TÏ@úáŽX8lVûsâ>íÍB0EšöX¢ÿ®ø?…N´€8•áC©Ñ[~….‘ 6¤â—ˆhTUŠILe&(”<$ÊP€˜©MAC†xiÊD¹Uµ•5õfCsNZޝ=÷€èM9¶µ†0 9//²¢‚¨ŠÑø„;ú¼Oœ¡â†þùŒB IÌý¦÷?nȦpç7[.T—«º$dŽ ˜^„=›ˆ'jà£àŠª€ÝÏ9hT gHSm@‚ü dÿ€A _¥šc Y³pq{Ù£l]YF& UVŸ.9ur0•h9št‹eæöxäb”4A4 AÒ|WeºÛ•÷Wã .Y'kVÉÆ“Škg¡œšž·fÒZI C<¡×vxL•>káÿ0Óm`!8`¡ ×õÕyñÓÛO©w½­ûíKrùµEBFCðÉï{TDŸÄ8·DXyÈ.ܱ‹Ôµ©E(™ {H³ƒfpB°°9ÆÒ”zb}¡{…<š•Ù®YGJåÎ2¹É»k²6ð!ŽHxÂXβ–·ŒåM´ YnA \+M„á K@‚¸Ìæ6»ùÿÍpŽó–£uä:ÛùÎ$!rC\Ì&%¾D%CìËÀ üR>¯¹GØêÉJÔ ¸ÀÖ5„ ñ A¬܈)0Ì€`Èt›aM/†·èEá"ІYé0jÂF€1¹¹1æƒBf|A bXlŒ'æ´7²†?_ûŒ˜v W¸í§Á dQÏòÙÐ6 †kG•"+/Œ› GÈsQ´•!cHF0†@î"ÃÇüyzÀ:¸!ÓöèÆ! qh,…·5‡&:Øã†zÚ†,먹6m1*©YqÍ]À ô§Õ -}BùÉ/À Œ`áâC0B+Ê0¯òG°„-V Ô 0 #?¶ÿmÅdRÙå¦>µbh“Ÿ-šJ²)ô¾Bô|°3'¿(ƒ0„q _h¡CȲ5g «ÆF³¬^Átgàû+÷[…õrAŠÓÙa,ŒO÷ľ›—Xçúz Ù„ô2CÓð.u\‚xüÆR@.¸Á@ÃÃ+¨ Ø¬'´å^¿p´µpë˜El g ëuÈ>aä/¯ø®prÓÏò£Ÿ:ja SÔâFÚHÁ ø ;œ€Â÷Òûíïf7ñ±ìzƈ¤tÑgÐê}ŸrøanT}ú¥Æ%Þ! r“ûÅsF?H&r™Âàh^{‚O ÈƸDÿ—RÖ®Ôÿf(Ì/íµÄ×>8‹Íû½}^ÞµIÖCôÑŒ+\¼YP°0I$xc êpdR ã óv5¶ <¢Jú45¶§~‰Ç~Œ‡ò'•µgö4bGÁëä²8FUôð à ZpZ€leðA „}*&f` ¢ ¦ƒ}sº·V‹—ahÁ!D3Cša„'âaNF‹3_)FÍÐ ÿRrÀ@ — &b Ka Ö¥J×”BÈ3¶h:@¨z6p;Ã)Jèaç~#²„äÑ´‘F‘T"Sø/Htr ¢J±ð(¢G305M”B†Öe†Þ÷ƒ,ÿvì5„k¨S8ˆ„—ш2$W@áqõ€Ó0 ÀP€ „7å¢G $d <ˆƒc=2aWs{8Vl¸{rÈðgÂ'DÞá‹4¡->ô/Dóû@«€fB4 Â1’7Ká9)ä 5P³0°ˆ]üƒøˆ¸XŽ¥Ö^hc''ïW4YRmÂHI³V(-û h¶K€ÖÔƒh‚8UPc]è …xM¯8Sö°Z¨pz3“~AX\jH8æ(šè‹’äx¥1Œ´¡8†QÉ kP UÐ>°‘À(êP]#ÔW·à9§50uÃ(Ôð öÿfP‘™»/)sè•8©V-uµñÍ` 0ö`D°à T´GKqZöp 5À#5à0¨Ð<À=ða™†?)‘mé)A‰,sxEél©F"eä{Y”Æ0iöPF@•VY&X9ÌÔ #0.à% öð `ªw{ µGŽ˜{=Ù†™™-–ˆÝq$ï5‚„&D’#Y’> )i#,é .© I°• #@QP *¨à µ 1<ù–¶™¼‘¬Fî¨$páAÁ5– ûØÿÛˆ •°M0 ¦ÿP‰Y pLÁ'à Ã)aÅ)‰> Ÿœ©œÐI9a“Y"šÖ*Ñ ”ЈÞh· ¢pMŸðKR$P±PMÅf >p½Ðžk‰™ÊyœÆyŽòé™!8v¢vbø#j·Ãèv+Ÿpˆ!ðPKö 'Àp@'Ðc‹:©u¸wYÈi¤èØ–o¸@jA'Š¢ d#Ø„K1z¨ L¡3à3)Þ0"˜`êö€ŽPM'Я(¤–‰.[W,ê¡”‘KÚ53QFk0;1JSOøô þè Ï€ [ê5pÞ°˜,ÿð4`ˆUZ ¨ÐC jl¢B(psz¤÷á$Ú¤»ÃhóåNõô(¨‘àh °8 3é¢` \: Þ` :†~sz œðžš‰˜j,q)—¾ˆ=ŽeDÕ*õô¢Þâj°  9ð„ 5À¥3Yˆ†hˆçG æ ­ Åc)M -€ˆTó¦?Õ™HúEÅêÓi§›ÅKß6Œ”ÙZˆ9  À…ºªÏ@«/–­‹É¥¤À ðF¨8)ÿqzÙ·JDš‹“(¬Áºq §ý9±>É×ôbûÊ9° À y%û…x ê°¥0p¨×‡ ò€9Àÿ€ %‡uŠr†)™¼Â®Ô0TP:ý0¿`Š0€¨±Ð‹ 5H 0°Çp e`)ð”Æ`r–:©•jk<ÜÃŒž“°Î€‹Òˆù-$ÁK\ÁL„Ý«1’´B¢©6…×ÿ ±°˜´[* [¸¥ª00¡# T%rÅV5¡$#UÚ)Çr½¨á-¦ ¡àWö¶c¶ˆÙËHL¯Eë½L,´ëWÈP‚ƒ–ÈÍ0Z[êà ‘ ˆ±`¿, 0ð#ð3`.žüU &“j :lʧ¬?dâT#¢@#*¹ÇäB‹æÇo;ÈAÛ~ìŒ=vÒ${Ì FÅæ°^Å4ÉÅ.`&ªø¢VP`üYp>5 ÆlÌꛀ0à<\  }Ѭ µ0«¹ÇP ˜0:)Å(fòš.ùXê,§€œº‚|Á7Œmáp’Cµÿ132`"ìv„«3` Tg/] lÐðɺÑW-0B í Σ Í{ÑVý¼œÐ7,ÊéûÔ<Ïʈ‹hË)Íu.ÖIÚÄ61u¡Ž×²”XQ»°˜0Å"l7Ÿ Ÿp bp×5à:ð àKMÇŸ³¶»U]À=üŽ*,#Ÿ ± Í£d ±P½/:èü7»~l­ÖßûÎ ‚t%ók8ð° †h°3 Žà0À«\ ³°¥±p[:+€Ô- Ðº1GùQGøAÕ<Ñ0P˜ ì94.k[Eü±Ù3€ ©ÿPˆÏ”Î΢ÍËåíÎi=\÷ÕPµƒ$Y1ëļ˜ÆŒÌ<­áŒ¨àPx-ÍÞWͨJÎð N”ÜÍû¼˜P=Œ‹Ð…3Ù(·j¨e¥” œ=“ŸmFjq(š9ÚºŒÞ¹\Cë½aûâ$²1yò¨ íÐxÕÈ< Éù=ãö0 ü½­*`¨~ب#Ìä ΔÜü@ÎûÜÑà àNTˆ‹9ºò§®¸Çcý(>FaA;æA¢íÈ,M‘àûÒŸùúB%G{Îr´ðÀ½ ¨`ß³PÛ·ÝÈ3p?¼íÛ³`@@ÜŽV0þ(†«Ñÿ`ÿÀžÀàÔ0 []7Úå†:Û{Ü›xãšÊsÒ¼E'uú®æŸ$.âÃEŒä„æòŒT;A¥ü€ žÀ Pž×fÈר§ã`'^Ò ¨¨€0¥DoÕÐÐ)`äÿà Úp·ð’zå¨TˆyÜ4l Ûúbº±O˜òéæçmÁ%Îê(jcĺÉr_#ˆKnz³³5°<ÖŽíµ¾Ó)°¿æ…ÑôZn0 _Ö¹ -A ÊŽ[»ÏûšÇSTí׎ZÕ( …)ã±æ ¾ÒßÞÒáŽ=ÚBs‘1Œ¦Šªå¬Zö=½ˆºƒLÑO!'s0»ø«pƒ0ϺqöÿíP{龩’& `7ÞŠÿÈ.²âå_îí¢î¤Î½" ‡,²JsBœTÄÿ \¢† а-õR ç î ¨| ¸Ê¥1;ò™]‘R˜§…Ç9³6SqÁaŸÄ»Lñ!^„îaM?˜Ú­[Ë“ZˆTÏ &ðOöpU.µ0Õô9ª¦øñ(Û:-À•ˆááÂöË䯝&#pŠDs÷É™ÞA_-Òñ­ù­/ÛÝxcéü¡@Ïð„ Šr%rYeª¾ÉŽ0nPYo Œr 3Y‘àƒû‘ó~UÇ×È(Zn8|vp`^ñbnÚ¿ÿG-‚ À­ïNcG[{°Rn ’–õÎ@ûY•ïÒ$ÖP¦É¨oðZ€{ì¥Å ú 5fÀ˜1#–={§>™B%êS-„þþýÓ6ÑâEŒû4bä¸ÏžFm÷q$Y²dE“)UND¹RãÈ•1I¶”Y“f͘7q^ô‡Ð^¹.„θ…PTÁ‚¢zXð“:ŸQ’ðÌž³g !¬v¨Ð¡n>ÕÕB5+Ž„DÜ ¹‘`-Ö'oö˜ ­ñTªOoŸ‚ uñ ¡:SŸÏò)‘âÊžQSîӦ͵Æ0w¦Ô9ÙdeŒ‰}ZÎÉy%fÏAãÔ¬÷¡£‚çfÍ Q«³Ô9¬ÿÕ§ƒw*’@HÑBé¾ÛM‚ŸTŸÝú$ê–À‘nç–:;茣B©ƒóv.ªáÑîó'Òä>ÈŒµQ“úbøÐðÇ—ÿèþ¤ýûø9©¹ TgªE/Âì©e†OÀùŸ#¡CðC¼‹-n {Þj*gÔ(–rÆ*«ƒ"L/j°<•{ ¡ó{,2•^²I¿™b¬O<{x|OÈ!‰d ?ÿfPÀ£ 2;DÈÁcña| ÎB%ëã²çS°³g“£¬¡.Á>™…ŃrñASòÇF„;ï#ÆÌ3I*ÃTâ³ðz’ŒFÿ#LÑ5©4kAmÕXs 6Ùhófº™ÅL*ŠK„¸)DTåàP,Ú&5åÀPñf@Á®ËÎ…-望2Ç£&È’»3¢=ÉóXAm¥ˆèkGGwÄéØg÷CÒ' ø"Ê(¤Ì”«©º "î­¸œÉ+×êÈš¥{žQä™ ¥ÊK/ì Jj¡ÁXä˯äI#Ãîll`dI:ö×j/²'$ˆå¨<òSVb;¥š8Z™}ŒŽ ¶Ö>ÍЩâBèM7ñ×®qáºêÜÑq¨M“<'jðΞ ’œsö¢‹Ë]ÿ9v¼î¬f`=íd,Ð’ö©1ÿ¨':ú#Œ3–IÇ‹»Þ:=_ö×=ÍÞBœHš÷®Ù² ·N›UÔ*œUmRÓ>û@f0¥¡ÊAE»X„’’¸]…–¢^×ó8¿”nô¨±‡›ÍsbŠ1×ZYEƒ ½Ç—¹A»œ¹ â¢$Ý·>iî©´çtRÑ ðkïÜß}m@Çö(àž:ô#w,Omª~¢ž²î ?¦«·þzì³×~{î׃l`Ž»ÿzœ1¿…ÌwÆ‘6Qÿ}g6iÁõчÿ~L"‰“ûá·ß|ö¹¯÷‹„#"QFB0àDP"á L¨@(ÿ»Öª÷½Æ|/|Äàÿø°·Aï]¯ƒô` Mh=ûH/Y_cØzÄ–9Ï”mAhÛnÚV‹MÁŽKÎ •ÙÀ1 Q8þ—îö *Öt8ëÚ©|í0EŸåE„¾ÿ1uL „ë’ÝRÒ'òåŒ3zµZË·µ¹Ï­Ö‹çúâ!ÑâbVâˆo2= ¹^}9‡b8§µŽlO5žqüË)E¢ÜÕ*Gα!I²eŽ,îX¹äWqËjñŒÏœ­J7gÍiúï@ËĦÞrC—ü¢`ÙùûÛ§tÿ‰¿ ö»»ß#·Œà“!>Öû>ÉkÀü;¿òk>çk“ÎË6 ;˜î£¾š#‰Ô[žc ½VcÀûóŒÊ»¤3?¾ó;R™>Ók!IŒ_!«Ås=FR ðAŠ3º¯{¹”À‹cAøã‘ñ ©¡Ã‚ê¾úk” >åÓ¿ä?\B‘¨ˆœCŒ¨S/B9!.ìB/üÂì)ŸC2,C3›3ÇÓEYÛDd\Ä_”EG|±Z$AW3ÆãËÃ]tE[„ÅfüÄ≯hdš±+Fb¼FN”Æ&„@g Æ($Çl¬‰SÌÄ ü>wDÇsìOL4Q|£}ìVìEUŒ¸ú;Di¹G€LÇ~\®gܯov\Çv”H%¤H{ŒHe ¿$I`ŒÉGäHˆtI|=•¬I=´MQólP ­QµÑVŒÑEÑUÑÍÐ÷œQÍ¡Î-Ò 5Ò#ÕP$ ÒßDÏRUÒ%]Q•ÑÅ|Ñ\$Q*Ò-ÑÕR¸ÃÒcS+…Ò(MR4MÓÿuÒ25Ó'Ò.uÓ6ÅÑéÓj¬Ò/ÅÓ<åÒ9…S;•G/ÝÓ@=Q2íQ>íÓ:eSC=TA•SDeR:UÓ!ýS-ÔSBµÔKeÔïÄTNÓNõTMÍÔP…Q]Ô&ÕÑMÕ,ýÔ;TR-UXUG5ÕH=SI}S)ÍÕóDUYÕTõÕ_­Õ8V V?}T[MVeÅÕ[eÖ]ÕW-ÔFÖa=Öi¥VJ=LU]ÕmmUWåÖo×S…Vq%ÖrµÖkÕÕeuÖ5åÕh-Ö^EWcU×j•Wx}×nõVl¥Õ}M×fEÖIUTý×]W€e×z¥×0ØyU؃}Xˆ-Ø„%XÿrÕpµXsÅØŒÕW{Å×É8 Y‘Y’-Y“=Y”MY•]Y–mY—}Y˜Y™Yš­Y›½Yœµ3˜˜U–žõYž Z¡5’Ÿ%’¢5Úˆ´ˆ£å‘¥Õ¦uÚ¡EÚ¨’§ÕYÌ©ZÃÚÐÐZÏàÚ®Z¦½Z°…Ú±•5¯µŒ³ýX±Z¶m[©%ÚµMZg˜˜¹U–ºµ[ºÍ[½5’»%’¾õÛ¤ \Á\Â-\Ã=\ÄM\Å]\ÆHj8€‰è8TsA0£9Xû¸Ü̈5˜\ÉäˆAè–à\ÔýÉ=€Ãã{èY@€pÝpÌÕ\Ë@€ö Üÿ¤áܴňӵš(€žmÝ×5BÙ-ÞÜ ÝF)^äý]^¥Å\TÃ]ãÜÉ®3Ð^‹èÏå*€j€>8ô {Pß5€ €p†Ð݆ ò€}èxÞ†CèÙÐû€ÉXƒ(€‰X`g8ð‡Xƒ5àߘ`@–3€¹¥`g€ò GîYú¥èƒ^à~à.g _ Æ` Ɖ@gÈáf`&á`_g` >ƒ^ƒ6 !`–ÈÝÝ@ß5xb¨\Î8Xg؈3xbΠ†Ð¢Ð@Ýÿ÷ àØYžˆøbHš(Ýð…à0€¹µ‡û%€‰(ü• îà‰á˜ÛÉ݉}XàÕc_±‡ˆc ¦c°ãëý‡ð>þ?Þ  ÞÉ•äC>dÖ5€8Ôõhã@€ˆd9TN €W¶ŒA€}@ß7žè匀`åËu€`àBžˆ9öŒ^;^8ã‰+® iÞ¤(€)vãÆ Rö‡ÿÅc.–j`àÉèej€e.ckþlžŒmþ„oþ‡çšPáÑ]ÝBîâ%Sç—:ƒNàxžçGAèVF€Acÿiº_ûÕ†^¾ã¿=eS¶`ÿˆˆAó¹ßfþ‡O†æ­gj^è䵈zþ‡ømÞ}žåÉ eÎÕèƒ÷Eg;>e6ÖàHfiz¶ã¶‡žéÕ•¦Ï]hg hjèéšèƒ0€‘ØÐß;h²¢j«~jj]÷ÂÜpâ}‚e“¶_‰@€8ö ¤¶fm_”^²öí\ØY ¾’¨gö­\Mžøãš åðÍêB.ãR¶Œ^žë‰€c½ã¡vfí€Àž_Â^‰°êŽì}PìDÆ ÿ½[hÞΖã¹íAÆÜdöŒ]®¦øbƒæŒ§¦fôíæÎæÉ¨íÿøu†Aà‹¶åÞ‡§>0åÉ–çpë3°`·>éš.‰ÕYϵhÈšç¾~lš¦g/ðŸÞ^\]øâ ÇpPYÍhÇ䯉5YmÙ¹uñÆ›ñ o\ÿq r!r"/r#?r$Or%_r&or'r(r)Ÿr*¯r+¿r,ÏòÀh”Øg-ÿr0/ò ®[ èÿ0?s4gÜ1÷e‚>ƒn._ æ>xðÍÖÝÃnñ~þÞÇ~s{>€Æ@ÔÍk˜Æ\Ô}ÜË-Ý4Oô&ÏàÉâ.F|Žãï.kG_äH¯tgÈàeô…tIˆfê>«vâÈg¶ô–VtYWò vçJïbažˆa¶`´–çô9Wfj8õ8Wß;á\7é9vâ¥é|ÆgßFuîïY¯ö)_ócß'.s Vnª¶t´¶tqïgAÎàigs Iÿà¥Þeq?ÎgkŸw*Çvnf2ã€\ègj(sªf`£îtc/k1þd –ß^åV‡àd.ÿˆ6àŒ¦wЧuF÷Vf¦þ‡}¿fxouj€ôaáZ¯tÎøJ÷Üv–ß2÷\O¯ô>øŠŸy&w†3–õÜW®pÝ]dg]Ï`qÿð3ðÜA¸ù?Í­ñX§y¨·ò ~ú¨¯z¨ïƒ@t«ßz®ïz¯ÿz°{±{²/{³?{´O{µ_{¶o{·{¸{¹Ÿ{º¯{»¿{¼Ï{½ß{¾ï{¿ÿ{À|Á|Â/|Ã?|ÄO|Å_|Æo|Çü ßOÉŸ|ʯ|Ë¿|̯ÃmØX@åüÎï׆¥Øxu؈ňÍýÑýÔ‡ÔŽ=Wҗ؉U‰Óo}Ž}}Ø/ýÕg}ÿÛÏ}ƒåˆÙß}õüJ½ØÏGýà7þ㯉ßW}×gþæ×}ç×XÚ/þÖ_~è¿þÞ¿}~þäç~é¯~áËØÏ~ÞGØñ7Ü/ÿ’°~òïþè¯ý÷~â—ä~Ùÿ«Dÿô·ÿó×툨­ „ \èᶇJ¬X¢ÅŒ3ZÜÈñ¡Ç CŠTH²äE”U®d90"Ë“.eÆté¦Jœ(uî´iÒ'C A}ÂÌ)4åÑ.²3Öæ¼µ‹§Ž|yî­£ÏÞþýïêÒÓÏwÙ}üóðE˯ïžÝçß~Æ(ÕÒç”iö­G`~ÿ¨ß„há…, øÝvvÈ`‚¶…¸Ú‡mâ‚ ¦(âŠ,b8^¨¢„ËÕc…7š§ãŽ*Íè"F#Ž9y$’"ýØÕˆcµHâ“P¾Ø#‘-)e6iÖ–\Fÿéå—]éd–(†y×™hN‰_’2>¨åšB9g†eÒX%•% ¦@öÉdšƒ Yƒ¾iæŸX&J&žlÖÙ¦(íyS‰~6 碌Bš'µÚ¥šqbz騛:ú¨§‰‰Šh¦”‚*©wƺ µÚz+®¹êº+¯½úú+°Á ;,±Å{,²É*»,³¸ºƒR³ÑJ;-µÕZ{-¶Ù2ûlIÚzû-¸áŠ;.¹Ár+R¹éª».»íºë¹½;/½õÚ{/¯ñr„/¿ýúûo¶úf0Á|p¯[„0à ;|¯Â=<1ұDk¼1ÇËbüPÇ!‹<ò®;D2Ê)s0l2­*»ü2Ã,+3Í5û+sB6ë¼ó»8#Ä3ÐAësAB}ôµD„4ÓM{ŒR@!ù,½†777z—º~š»”JJ˜JJ“vv¤KJ²JI³SR¾]]¯eeÁTSÀ[ZÎUUÛa_ÁfeÂmlÊaaÂuuÏzzÕffÛcbÑutÚttÜ|{ádcâlká~}〃ž¾Ž¤¿›¦¼¤——¥¯——¤¤¤©¢¢¹¢¢»»»š¯Æœ±Ç­¼Î³ÀÎÁ‹‹Ï––Ù€‚܈‰Þ‘’ܘ˜Ä££Â¨¨Á»»Ó«ªÜ¥¨Ü¯®Ô¸¹Þ³³Üº¹ä‚㋌ⓓ䜜墢嫫䲱㻻ÅÅÅËËËÐÄÄÑÎÎÚÍÍÜÏÐÒÒÒÞÕÕÜÜÜÛÝáäÅÆåÈÈäÓÔäÜÜäääéååÿþþÿ€Q‚ƒ„…„Cˆˆ'SI‰ŽŽ?O‚KDSSKK†ƒ;;’KCS—™šA;>QŸS¢˜šQœPª¬£†P;<© ´µ®„=;@»«½­¤‚§PĽ´¢:/<@PNƒK4ÅÍ¢1=„HÙÚSJ0„1ŵ––8ƒM «Gí"2$'5ò¢<Ùñ A¨)3BÔZÀ¢E7A@:dˆ`‰@PJܸÐ-ˆ &>:äwA‚"$XI©!D’6:ø  € #0N!B …;6X¨€¡è#–’ð4`À“ ¼=éqÁ I5…µcYp!’„ÔŸ)¢ü8Õ$H |X!HÈŽ@!ù,h„N#‡&&&777IIIWWWiiivvvV«nr–vs•e¦i‡®eˆ±w†©p±z—¹“UU¤]\¯cb¬m}¼jj´esºq|å};ÃPPÚ[]×]`Î~AÚlLÝgUÙrLÖwVÇhjÅltÈugÊsxÚegÐkqÝznÙyyãWVègKäcZërIêxRäfeårkäxx‰m‰‡p€z™˜m„™uŒœ|’¬x‰¦}¶z†Â{…Ô~ƒ¯v²Žmô…ï„:ï’;ô‰$ñ‰6ñ’9͈G̉SΑXÒˆFÚ‘NÍ’eÈ›q׃pÐ’i×–xΤ}Þ£jܧuëˆFìˆVè—JèšUñ”HñŸYêcä€~ì“hê•vï Vì£^ñ [æ£cî¬sî±}ñ¥bð¦iòªlø¨cø­lð¬p‡‡‡„—†š•••ˆ‹¨Š”¢‚›»’‰£”™©š›³† ¾œ§½¤¥†š¤º€»•…ªŽ ¬ž¯¬ž°¹“¡§§§¦«¸¨³¿·¤©°ª»´°®¶¶¶‰£À—­Å±Ç¢µÊ¨´Á­¼Í²»Ë±¿Ð»ÇÔÁŽŽÆ‹“Á••؈ˆÖŒÝ“ŠÔ——¨ѩ„Ó©‘Òµ™ÍªªÈ¬¶Î»©Ë³³Õ¥¥×·¤Øµ·ä㇈䉅䊊쌌å鞄䒓嗘圜埠栘붇꺒ú½‰å££å¨§äªªç¶¨å²²å¸·å¼¼ñªªó²«ð»ºÄºÀØ¿Ã߯®ÙɺëÁöÅ–çÅ¤ãÆ«ëÄ£êÆ©êÈ«é˶éлõͦñÀ¾÷ЪúÓ­úÖ·ÇÆÆÃÌ×ËÒÚÚÈÅÐÎÕÖÑËÕÕÕÓÖÚÕÙÞÚÕÔØ×ØßÛ×ÜÜÜÄÒâÛÞáÞàâåÄÄåÇÈåÊÊïÎÎåÏÐéØÈåÓÔåרåÛÓåÜÜîÒÒìÞÐìÚÛòÇÇóØÊøÚÚäßàçáÛôàÍñçÞäääççèíâãèçèíéäëëëïïðòááðêãñíëûåæþïãüééþõëòòòýööÿùóþþþÿÿ H° ÁÖœÇP Ãy BsçК5wî iܨÑ"?ŒÿæY¼xÑÝÅ‰îø´QàGŠÿ0ò‹H0!Í›4mâÜYP'ÏŸÿ|Å)thN£?‹"U¨” FŒ%ŸÎŒÕäÓ‘9B›‡‘ëÊ’#ç}´¶ÑZKOŸò<»4"Û¶ßÂ5sîÁ¦vñæµK•&W±"ÍòãZ÷îË–üfvÍØ±£ÔCiêÅ©»ÒLÌ9%çÏ Có»g¬tét =‹^Í:´êÖ°W‡ä{—¶A½sqÃÕ R Ç̘oGÛñ$´’S3Â;6%e³C_>U–¶ºõê°<•‚uÊS¨qi©_ÿOþºøòèɶݓ}M÷ïáû¦Ù;(´©\ƒ·÷«±âýüMä’IÍ)v[i WÝyéUŠ'à¹SŠ'Ü„×à… b¨aJrѦÛR‚(ß|n¹K’&ÜMÊ vÜ?/IÙXÖÐh™shU§t1ˆá8Þ=åŠ'ÚX¸á…>©^‡|…h”“OŽ‹WU§ß~7‘µ~+YVTÅ™ÅI_™hî$yaw°Œ£'ž€c¤’è©I§•Lî%”Cñ ”n9ÔP–kÉ4c™¨eYcBE¦EZW߀sºŽ)pš"'yÜÀé©,ÞYž¢Ê”gn#ú™””ªîÔê<Ç1ÿD¤'Íz¨‰dRS\¢„æyã<аŽÎ)¡˜B‹u¤–Ú¬¨ëí™*«ÔJ‹TF-Á )EÆ ÑSei™PW ýúTv°`„îϲ[ê’ÓZ+/|­µ¶ÒЍM}›U¤ ÍŠ=æbÔ]‘î¼yŠ»ïš×ðuÑÒï¼îÕK(O‡…«HÇ-ºE^™õè®–X9è†0Óë ¨îÈâIºt¶[óÃÖE\ñÄóLÛ`5îD˜Zˆ Xt¢+5)ÒÐåCÆ1ÅtÑ0=>œ§t'Ã8·ÜµT§îæ3{_la%ãdèK!ice[‰ éÒŒŠQ+d$3Ï0R‹ÿ“fZÚ<èÂåq3‹6Åzýõß‹s8¶‡ÕRT=Ž0W Úÿ†G‡Œ©23iŽ™.±$Ï~ë föÁŽaë<ÃH§ffB(hÓ›¶ö@ò5ÎqäaÅÖŽñ&@ âU´4~€.L9KB"0kÜ1òƒÑí²ã wŒcH1|Ê2 5ˆ@0€ÌʈÃ3î};[c[„Ò¢ÀˆÈ áØD´”’YÉjWÉ# •טËPJqÁòœÄ—lĈXFn@e1ëŒ9ÄÐ%}XÁbf!:ÉÈÍæi)1âÂZ“«´m‰`b%I*#–‚advXKFIˆ§0Ò¼-¶Mjò“#ˡ€Ä+ÔLeÈÒÿ’}Uó"q‘ÛÇþQwÐC$7,3 Psò d%Ì “ÆäÏZô‹À³ˆ&å4&2€uŒI_ùÒÇf‚Љ’mÀå2Á$Pj¬«Zã*Ú ‹º3j”œÇ–ÉÌfŽ00)s%È$miÐ ŒK«îÈBŒ„ˆ`„>0ƒ]øÂTÅÎwFɬg]ˆëé#vÉ™ ‰(ÊŽy,R²ŠJ»Æ8Kgbh B¹ ˆ¦“§éA,z|úQ“Ž¥`Ò¢W6†L8¢QJ·&Y%4-±”…6ºSÈB° P@Þ@…1ŒUTŠ-cÙúXbÿfÔ.qÄÉûÐò›Gõñ9Ù²J]#ü‘«*ÏÚâSàäFVÏ J(¨¦SÜ•µ¶?êW¶ËÝîz÷»ß$xíº(VÒ±¼æ…êÜÂ2e¸÷½ð¯{5I¼(À*4á…)N¯€LàøÀVxÌà;øÁþ.d''“ÊÑÇ3CóŒI¾µ-$HKwD"cÞѯ cï:¡­'J B,#jx6ÐÉ 3Pé4cãf›ÖcÞ–‚|q‚&>†åÃŒ*"Yþ(·E=ãÇøBNO|mà—(øx¤qˬ.ÕëšcŠ^÷Ǿ Z…èáµ3ÿ$ƒ*ZažˆhŠì®ÓÈ.¦Ð‹^!Á¨.y–±Ü€m˜±;²B‚FX¿‘‰êQ·’;~3mÑœf ã¶Âk]ËÆø9 ûÄ(-,aÌÿe /¡ÅB„°Š0[55í &^ùðb঑x’ÇŸõöŒ!ø  bžy îÀ"¦¾·2$=l/ŽÇ}B6OÒ§> Š„¨Á—Æ miÊ, L¶¡!Ž?ËVÞþÂ8,Ñ·ñ0à $ðÔÚ@¾uaPÀ)±ßÍìxc7»œÆèP´uJÄ(ó%ÿ޶Åê)¼z«ðX§ Õ±n²(E)dk@{À„DЈòH:Ü—Æ4Çåm/¦7Ý(ƒ SÚ"稻È2( W::’hd@ès|0¿)£z×›§Ján  Y'Ðó aX‚…ñ†UŹ¡ØÂë㛹ȒáYŒ0êÊŠÔ%³ä!YE1ü„*ŒOà:dVŠq€cB²è”$ AD07±€ó”wøŽ!¿ÞrzQ#‹1™ÄhEÖp¿¥È˜Gá*hÙ 0t±t°Â C°‚˜WèŽ,¶Ý€)&mƒ€õ ÑJÿfÅ|}Ì}¡evÈS² ÿ€V¹ÛÊŽ$V™ ¶R†1ŒIu¼†%"4¤Y`d+Nœ"IË:=E¹qzJâzÓq±§}ÛG{Þ§~àGoãÇ—³~£³O’ØFí7&lç1F®0$6ä®à.“äZ”8wØ·tx€/ƒ?#·‡%pAƒ“!EZw4ÂÓfÖðÀð òм yØ#3Ÿ‚ (8ÜCÔ÷2*VH-ø5°—lݧf1xMncƒ;au‘WO!‚„jxFïƒ(Íð ½p=ðÜ! ¶ã23ƒW#>Ú0 qè„©ç)¡\C…h… ˆ…‚·# ñFPRxç'\3ÿ¡QYarÒ¡%ÍÀÅÀ Gp#I(‚ '…ô&…¡@‚‘Ô„êd){[gv…Auˆeˆpd{i1YuQŠ©†u©C¿  •z «G ƒ8ž@ Wc ".ð2Þ Ëi¿´S¯Xˆ±‹ÝH‹~‘Y•ñ…8"ghŒq da@Ë0cRðjÊÐ@C‚0¤è¦'à+Ër (p7€p h¯ˆ]S…ó&{GáSW( ˜rm3æx9éx b&]@‹0cQ óXr‘œà)Õà°!ðs" «¨t‚ÿ‘µ¡“;)‹c˜":Xºh"6q«àÁ8ŒÅ˜Èøʸ=ÌH ÖPGP  àвPp Ú $pÎðYïB€93ˆ ™…kÉ–O'4+á/D"J¶I”ˆ¼¥ϰ ßà ›Ø‰0ð‰Šxx •pI ¥*  OÑ"Ð fIVÙç“ç–oÉ q”ò(ññow‹¼Eò ”À‰ð†{è´à ¡Iž°GPû÷ à ôeÒ" •銗é¶EœÅ Ž ¢{ËäÃE Û’"ŠQµŠnâ &8ZÀK pLà’ 7ÿðt ;8hy“‡™2x~QvåœÛâ-‡‘ˆ„s§‡Oq‡..P$Úà ’úîðH"€M˜žÁy'ì¹™Èéiœyœ%€yâ©B&X!&†$8‚¹ ‰p%0 )à  ,yKð%øM²p z˜Ö5œ:x? ¤šœÐYoöA7`Ñfv%"h@Ü €à 0˜ ) ¥@ °  ¥p£¨‡3à›¦° Û˜¡öhÊ¡%†9Mt“GúÄ^î`˜òi  P4àƒÐ 0@ ÒH‚%X‚¬· ßÀ «À ~ÿs''(p‚8s¡³7¤–ª¦˜:xù¦10xpÛ4&J‚4 °,*¥Ë°¥0à Ê’:  R#5aPfÒ<çvd´jÙžšY©—ʦ˜D&Ç‘(ˆ2B^§(¢J @  ¸€­:@‚´0º.Êvè±Tм@ ªÓnG$,ž!è«îšðŸk*rd+õºr•A.ê0 0ðs1 €°5­-ZH´@‚žB‚éA S`®¦s' „@!.ø®m‰f–±»±.qz^"£ $( 9p À°i —à^›°ùå^$ˆ ÿ– SðïET€`& (ðPܺ >{´Ôá™»´LÛ´à•¦Äj[è躲TQ‘ó€:ž0 2pÐ @:ÇsmG‚Ö¦å®âJ®]¦ ®@9XO1;„Z‚!8¦É²,ú«:¬Q;¸ YVÁYPegqš¬0 .j1àŒ¤ªW Á° /À­$XxðhèA«µ*²‰@¨¦ ¾a·tˆ‡´  oÂv*IÛ®õ)»³k±Àêx¶4fhÓ° ëBT«) tP“ ã0¥ðRБ-À­%p^6*‰º ¬€D‚sTºÿ0AºùÿHpN»ú t+L€+¬PK¸…¯ 'U½b*a4)Ñ ¬°D¸/ê (À’Üà|±°W0 à R@nàbªÉ£ù¸‚Åb ¦ Þ›¯Vã ²ª uˆ®5¤Š•¾œ¤íë¾³dõQ¯É:¯ïSepæà , i2 ¯PA +  † +à% …¼öeãqâ­3Ľ@Áß[˜R ’ Íè+!ëšè·éA©!LÂ%,¸#‹'|û¢ÂfÂÂ÷p ¯ ã ²)ð è ™+á°*àà Ä|øM¢£’HüI¬ÄlHò‰R˜¡ÿÀ«×¤ž"…‹ÂF*Â]œ©ìxá"(.A#ök · ú;ý›‚„Ö)cÀ*Pw ÜÀwË šP,Ü 8Їă콛° à —;à4K•Ú0•Y,Éi»· Íê uxÉIȳ4ˆÁ»œp ¶ÐR ¼)C_ꥠ:R ,’°  B\̈Ûs·Ú0 „£’À‚<ÈJ ¥‡ä) N†ƒ8J¸b8$üwÒ¼Å\x”ÌfaX‘xW{ô6ÖÐ (` µ°ú+¼0ã Âë Ãð P° ÏÖQ@§0±½j¦ÿˆ(ýìÏÞ ¥‘ä ¥€\D#(›Ò¸Ð¯çÌ=iœBêÅ• 8ØogÒ©`’O†"¢à·€Æ,é¡ð)°cJ ® :·ê&ÐÎ(0ËØñ2iCäq 0 à9­Óÿð(°)›Ï×1‚.p ©@‚‰tÔjEŸðÊÔM}É ˆó)„¡%mC’Á¤&" ¥Zý¢k< °¨‰ü¢Ü}Çs§Çi‘Eʰ Û[e¨ø—ÐÏ Ä S -ŠÅþ¹£"¨·ÖéF]€F¥_¼¾KmÉÇ í+‹Ñ^ajD9Ð óðÂ,™.lüÙá¬.¢=¨%ÿТ§íÒiAHi‚H×q5$øÓ8MÁÓ0Ûu   Ô$¸ÕrKžR$ Ð*([gÁ6£ƒoÜÉÍØ™yƒ¶Õ˜ã(±d@d"¸ æ§À’yèÕ` Ã.ð:e $ x@!°l ZÂò‰ý7ÞÖi@’€ÓÞ« u Äà—PÊ.Т\ݤ`)3P¹Œ‚Å =Ÿ€KoI­ÔÅmàá8ÑÍô…sµD•q5æ@õ Ò8ÒmçÝ"@X(Ö@],^TzØÐ´›%¡jнÀÓp0L aD‚l0모hÔ¬1B~äþç~è3XÍÍ”Q‰”ÿÂðæ°s[Ë­0@8®ÚªZôª°Jž;*i±HYÕ›°bÖ©h>‚ ÐÀülKÊ£Š® tçƒJéê2K@ŽFcØ(>ÉÝØŠÍ똄&§b{YûCr OÚÈçmá§À¯Ó÷¶´k §H‚7]$à^|Àæÿ  Öà þÌ^ìa™Œ>ÅÙ!Këjëcj¾Žä‰ÝëN{Ò6<¢µ’& 4«¾ªå±…‹0N-fNàá.€¥Ð zÝ   Ê@ _J Üú¢ ªË6d’ú7·Üº”%‰qƒ÷¬Nà‹-è~Q.uzï$é×iq°yÿ¨£$èïãaŒô`î°På„ç4¾ ‚À| ’€‡„ŠûÈ‚»½)OŠ,Å÷n*î1DHí®Fžò^Ñ^ìÇžâ E‚§ 39>‹ƒ° ~0ð‘1•K¼ÖPâ. XðrÐqp0KÏ´ 0 ×wÊ<•W#«–$`ƒA †#»ï-ùð^‹áð „éç2,1t°°êçû…÷i²ö ÅéŒÒñž‚nU¸d ®€šÆWÞÒ¨¹RØÄÈâÖ/4ƒR"²Ò+“Où•Oˆ‘o9Þà¢ê·Óþá'9¨Óx¨î0ú_¦ ‹ÔPî ¤ÿ‡Ùp·9 pŠ€ ÌSÒ`’whá·/Ï[kå†ì)…íSEæõHÇüɱÅo9[ žd=rá,/dÉzáÖ¸P¹òäÊÝEŒA´ÈÏ ‹2ŽÌ˜ BŒ… ,£å)-.`H¢h‘$D)\„ʙ¦;nÚÀ‘ä7ïßQ¤I^œWÔQ¥HçA³6Ïš5hP£nåÕZW°a‘~[v+Y³iÿ¡U[–mÛ¨üÜçNYLYž^”åÂ7O§0zòD2£!‰2ܸ lA2sçÊSL®”‹éÊÛ8Y§`yœ–;½)`4ÎX4¬Ü§óæ]ìÿjÕš;ªUÃÊÖ*ö-\°¿s>\iqãc“+•K×.^ž²øî,ø"aÖ•sب‘ãgö‹† ÄADèd¶‹´Jít§‰§_0†•útêÕà]ƒåwãíÚb«ê)°FâÇ­å‚K°+ä–k0¹Õ’K/2!…r"´©‰µ–BÑæ’ˆh#l̃`<Ê0âp ‚JéË…S´É‹°œvê黯ö î6« q§+Øú»è@®fkj¶!}[¸'ÏŠò¸¶˜ìMÊ'åò¦'Lt罂B¹HÌä««1Ë´±K›Š²M4oÜYf‘e"‰M½vª+LOJ¡/µ-ìD*ª)ÿC¯RÀq#°+wª’íÈ­=0Bã0NS¸8ý7hBmÊ,Ý ç“‚dRó¢ú<9mÌ2=9Ó°4×l³±p"šoUÖÀq¥†š+… Rp¸TíDw e’©ú‹fÑQ¹*Ê$!½í¢«²•*#«¦¤R\åÈ]+­©$Åêʤ<}­²À¸‘Ä¥YGzq¢[ qÄY³¬Æ¼B©·±yOá¦/J!PoN ÔWµ.;‹,r- ±ª–A±p𪸎„Í]µHNËdÍ ª©6n7Ê eµ‹"n«n°AÑ$ …| Ãî"šOt°…UÃÑ„mré Ôj6$åjÊ?ÿn]ƲÀm#ÅV)¨ ÔÜ£[tl²Ë6ûl´ÓV«Ü® um¸ÏžMPPæîGPÐän¾ùÖ…Gø®»oÂï¾DI.)œðÁñÖ{ñÅ%yD’‚$—¤„6ÉIe.)!ÐÆ!jѶ±r»í·ãF;u¶Ë.½tÕc/;A”4+]ÙÖå¸Ô奷±=ì™5eNì=à¦I*~0¿B£ËaŸŠåõ²˜R‘•L,%rùú¯Á®Ývr=UTKÍugOx5 OÂfvùìÖß•$o`9E–qz„ÿ‹l)UHs^ ƒúÈÄ0 I9ð!•EA6I “¼¶²h+ÏÝÿrxõpUZ_•F¸»ÁæM’ˆx²¿ä†~n ÍhH¿ËȇgòsÇ8(2 ZèJY:鉘2Â!cÜBé8Šm®Ò›Ž%T¡º ¦¢h-Ù\Ê8¤ÍR."$$´+¡¹ÆÇœ‘ÌYk´ YL¤ ²Ðõ2ò/OÊXÄŠOA^u‘Õ£¢@E?ÀwÁ¤8ª(TWùŒÃ§¥{ÛúîB¡2:²TQ£ÁÓIOÞÌÚ(H–ìäÈU=q‰+ü‚ÊÂ¥KìZ´u´`Å[gDa[¤†Útq@rÉJÉhÆL&ˆ‹môäAéFQ’Ò¦ÌÎÆÿ¡JÀ‹}1âud%KZ6Ëkì 5€ ]&SB· f“†¹2c’™óLa›éÌ{Žšã%ìˆ<êzlÈáuŠzƒ†¥¸¢Èw€ìeô„Kö4IÚX’—¼$•&ëÉÉ|žè™¡Å)@ƒR¸oLó!š €%3w€ƒ"2¢õ8@æOa0Hâ›A¤À¦7l£b#w#›“m‘ZÀü¢8?5Å1ÊÓ£ââ¨×@ÒìŒEÓ£—2òBYÀÄ¥fŠé x e!0‡ó‰Ñ`pr肊’ TÑÕbN4,$\ú£¨jåŽk'Ì”:£TU[^«ÑjK\°ÿO`!Uº ëØ&ž­Ä$v¯ÍÆ‘"ư^CÅùDbÉt³ •Q“ôïm¯¢°Õž^§:%ĺ69ËÔ*Vµê ɺ`lš£ÍCÍk ÷"xY˜M"ƒh&d0¤ýVÔ`+¤±|¥µaË+÷:ªZ¦Ï¯ìÜXnuû$ó–ë£émHÜáæÉ«#¹Yñ“Ü3Å&>䱎;ÊR^‡ºMtªÔøÁÈ£0r»kéî¹¾[ݾ®S+]TïmkØ-Ús±ŒÍŽc!\å.Žþl…œ'ÜÎF,§^h…7àÄòãbëJ-ƒ´`ïr¶ïle\Û Sà B,o7Ìáì¸ÿ‚«]Êžvw0U^Zr~px·Âõæ–¤¦2E²ªOƒçw1‚HCeÑÁÀY¦W˜£f© ™¢Ë1ò‘•w¢’†£ØÆ‰üÀ‹øÐ|ÎÈ)â3±˜ê1E|zÊÄ4Gª5„ýÔm²%F«œ\fʯh[ÓÂè…™†í¬ØS_¤½ž ä ™Èo:*¸s›¬Ë¾ôª÷z¢–ó¨‡SçT«:Øì 6vÀ i[N8ÓQgU°kœZÊ%×9Ž6¯q;d6›:Ø«¾'·Ùxßc•¼*+¦³—]–h‡žÕŽóµç¼[m§ÚÛžœ7³©ÐW3õÇ·Ü UlÓàñ6kdÿ`[ó®Û}áwgÕò¶°™E ˆÍ×0ë{43¢L'ˆƒ—Loà,ÛPœÔ ÿu¼O]o6®Ú2óáÑMdޏvÜÖ´5üB57è?T¡t/£õñÂ’ÜÚð^øÉÎÌ»DÚè—~fîË#m ͘|mîºåаL{ͽæ:Mng”ã<µåð S(Ÿö—îÞJFϼö¬|Ús/uÑÁ~ôö’M-'ÊÓÕÒ5lñ›ÈÒ³d,øŽúzè#_¯Ã‡öùáYéL÷„ÄÏî÷´Iê]¡ÕïÔ¸c[äƒß$±y‘Ú›¥|ﻸ˜$$Ì£K7åÏùýé ³óŒWÿæ×ŒúO®â®°|õÈu­©—ÜQËöøÇÛ|^Þë^úD7ýãñ~t´#mT@mSG•ÒG…T>ýÓHMT ÅSL­TIT,õÔEÝÔOÍÔ3ÓQý‡3XUVmUW}UXUYUZ­U[½U\ÍU]ÝU^íU_ýU` Va•Õ9°1VsAÖd=VfmVrQVqÖh%8i’j}’kÅVgÖm’l-Vj ×eWråÖg×s-WsMWv]WwµÖnõÖxÕÖy}e›{5—|ÕW|íW%—}—€X‚+Xƒ=X„MX…]X†mX‡}XˆX‰XÿŠýh0€£àƒ0€¨JA(€„J2€PƒùØ= 5ØØ>’}ÙÐX@ɶCV~8¨ÙPYà8€ÞàØh!Ùo —m" d¥Y›e6œ]Z8ŸMY\Ú8§-Ú8Ú®8#ŸeÚŒÝØ§µ€O>8µMw`[5€ØYe Žy>P˜>€ªÕÛd5\Ak¸[A8€€ 58 ÇU†¥å‡P¿åAË€Q9¸×¥U0Ù¿+\dÝYh>`\Ç…\É¥\P†Å\ÍýÛ¶€PÝuÝÿÇÝÒm ·U†ÂÅÜ3 ]5ðÝä8P[5ÀØ€ŽŽ38€HQ†y€9èh k(€—[Âc]Ý£0î=€h ÛÉý‡¸WwÀÛù%€¼5‹ÆõÜ£ ݸ׭Ç5Öû w0÷ÅÜø-€ùíZU ÙüÝß²­ÝØàžÙh xY~õýæeà÷ÍDA€yP[ö= «(á]Ž€xÜ> ø5Ž„ùUƒ ߣ€éåßùm" €ç]_Óm‹æÁ­ßì=hx\¸xah€_$þ%† ">ŠÿÄ„(þ˜bµXÝ••ÙÖ^‹åb_2V;††T6 >€¤à[úÅd6Y€7†^ŽÞ»=p_ã¨e$¶ºâô}Û’=cÅÜIæŠMvÛ¨Údý å!Ûb`ñõ`àxam>Šö gð5ãùíàFg  fʵç½ýŠV‹ÀÝW˜Ú€~ßqÞ µ½_îÅãÿáàe#VÛ'Ý%n Šž[eÃÕÝää`ß¿åå3øgFŽe¨æ3ÀÜjÆ`uNŠú5á˜Û~. ‘a@€“þ`|>Š'&âpéâý;f®æÖåi”¦e¼m‹ÐÝjæåj>A0i”Þ-Óµ\¡M­6Šœ5€›n A0ÈW>dã¨j¥-kEÎZ[”ÙV5YA>”ié¤0ezeFÎ×y`^ k·î™åîµë¹v—yhU‘l$á^[N 5hUkhÕ{e슽lÌÎlÍÞlÎîlÏþlÐmÑmÒ.mÓ>mÔNmÕ^mÖnm×~mØŽmÙžmÚ®íƒk²hcÛÞmÿÞ†m¿Í×°ãÞnâ>í߆a;>i(¦\#æƒyXZ«eçÅ~c³¥ç'6Yܶ†xYpþ‡•Eâ‹ýØ’,nòVm¿ÝØæÕÞ€Pc÷ Pjf€¿]ï]¿íaP[ûvïÄU>€affÐú„ÄïW.ogm¿cøÖ^>ŠÆÜg&ãØnçæahððÛ— î»}ÛÎ^²c^^áÐMÜeæqâ>núõ\ŸqÌõé`ŽïgŽocÿõÛÄ…ÞàæhoÐÅåæqÐß5†q'ßmr_ðíä¢Uhî`~ÜYV¯[žrÌ¥[Ð%aÿúžÜ. ªNÜB~r7oí(×^Ðåá\þ+'ã%§ohXïÆïø†ïÇsø6Ù/¦Ûà6Ùü†o>`ó7oô×V†3h’¶ÍX²†k ík²6ëL÷n¶e`$9k½VUìŽtEëµ uGOõT÷ÛWuWõ»&€ñ†uZ¯u[¿u\Ïu]ßu^ïu_ÿu`vavb/vc?vdOve_vfovgvhviŸvj¯vk¿vlÏvmßvnïvoÿvpwqwr/ws?wtíÃ\wvowwwxwÙ¹AýOEÕT1ýEâäÔà¤wD=UP ÕNx‚xJí÷z¿Å}·TQÅ÷„×÷ÿ¨ðwTxS¥øK=xŒ7ÔRíM‰øBýxçwƒÏøgøËìøŠ_SRÝø‚×x–'y?EøOÏ•OÕ‡'S›Ÿyšÿ”¿ø‘wùœŸøÏw¡¬Ížoø¡×y•'ú¢y Ç÷£où’y˜wú©§ú§OúrŒúª7ù®÷úŸ¿ú ÷ø˜ïN®û²Ïz­'{«{‹Gú?{µTFû¹·÷{_û”_z¹w{½÷y´o{Á|¬÷û¸¿ù…·{çûºû½gü£èû´_|¼¯ù·—zÊWø”|Âw|À¿{Í'ÔÎwx<ä|ÅŸ|ÔOýÓ}Òú¥÷ÏÊGüÄ÷|¸}¥ýzÇ}ÿׇ|ËÿûÚç}ÙÀdþƧ}ÌgýËÿzãÎá¿ýÐ/þä|ä·ýÝçýæ¯þçÏ{êgûéþÛ¯üëçþÂWýÕ/ÿñ'ÿå—þ ÿÇÏþÞßþÇ×}ñOÿ÷dÿÏGÿÖÇ~œ§ÿ̇x¥ˆdÿ,hðà@k2\¨°!Ć#R<8±"Æ‹)jܱ£G† C"IÒ"C'®„h²å¿—0e®¤yÒæM˜"u:äÙs¡Êš>Q-ˆ“äQI7.eZÔèS‚M3¦œ•åÕ©µ~¼Óë׬^¹vjU,Ú´OÉJËv§ÚµU[¾ýµ®]¹q‹â%z×í\¡{}öõ«ÿ÷ïØÄƒ ιXgaƒ‘¥*~|ñã Ž1æÌ·²ç¡“±f¾Üù3hÔ¡E§fÝš f¤¯yŽ&}Úµeº³i7–[ðïÍ·qç½òqÝÉ7¾Úùs誛#îÛzÈÚµÃ"Láý;øðâÇ“/oþ<úôê׳oïþ=üøòçÓ¯O^”ýüú÷óïïÿ?€ꇟ€x ‚ *¸ {2ø „J8!…Þ9X!†j¸!‡å]Ø!ˆ!Š8"€’x"Š)ªxߊ-ºøbˆ&Â8#5(£9ê¸#|8òø#A~ç£E9#‘G*¹$‰I2ù$”:%•U*8¥•Yjé–[z ù¥|]‚9&™è‰!ù,R…{3‡&&&777HHHWWWiiiwwwMx¨V«nr–vs•e¦i‡®eˆ±w†©p±s‘²s“¸|–·z–¹}š»“{{¤[[¹KK¬m}´esºq{ÎRQØZ[×]`Î~AÚlLÝgUÙrLÖwVÇhkÅktÉtwÚfgÐkqÝznÙyxãWVègKäc[ërIévUäfeèopårkäxx‰m‰‡p€z™˜m„™uŒœ|’¬x‰¦}¶{ˆÂ{…Õ~‚¯v³n̈FÏŠỈSΑXчEÚ‘NÍ’eÈ›q׃pÐ’i×–xΤ}Þ£jܧuìˆWç˜LåšRâŸ^é›SïœYðKø›Iêcä€~ì“hé Zñ [à¡fç«pì¢zî¬rì¯yì°xð¤bð¦ið©lð¬p‡‡‡„—†š•••ˆ‹¨Š”¢‚›»’‰£”™©š›³… ¾œ¦¼¥ˆˆ¥†š¤œœº€»•…ªŽ ®Ÿ°¹“¡§§§£©½ª­´¨³¿¿§§°ª»´°®¶¶¶Œ§Å”«Ä™®Æœ±Ç±È¢µÊª·È®½Í³¾Í±¿Ð»ÇÔÇŠ‹ÆŒ”׈ˆÖŒÝ“ŠÔ˜—¨֤‘Òµ™Ëª©È¬¶Î»©Ê´´Õ¦¦Õ·¦Ö¹¹ä⇈䉅䊊퇇파ä鞄䒓嗘圜埠栘췇ì¹å££å¨§äªªçµ§å²±âµ¹å¸·å¼¼ò­­ó¯°óµ´ÄºÀÖ»ÂÚ̽ìÁêÄ£êÆ«êɬé˶éлöϪñÀ¿øÒ¬õÖ¹ÆÆÆÃÂÍÈÂÂËËËÂËÖÅÎØÉÇÔÊËÔËÒÚÚÆÆÒÎÓÕÕÕÔÖÙÖÚÞÛÖӨרßÛ×ÜÜÜÜÞáÞàâåÄÄåÇÈåÊÊïÍÍåÏÐç×ÉåÓÔåרåÜÔåÜÜìÓÓëØØôÄÃôËÊñÓÔñרóÝÝùÕÖùÜÜåßàåàÜöáÌäääççèíææèçèëëëïïðòãã÷íäòììúãäýïïøóîóóóýôôþþþÿû HP µ‚*Lxpa¿wßY‹qŸÃ‰1J´†šGó †äH"Éyû$~´6 Eˆ 6Œ¹p9uüΤÉSfÏŸ>þÜ)4&Ñ¢‘*-xt©N‡!QÎã(æBk)ßµì·Ï¢Èw+=jì öY‰9šœhq`H­?·"ÅW®®9„r&Ì«o_…Mÿüé྇­öãØ6d[† SZ;QlEeJ–l6-K½f»ŠMš´9açî¡&ìÞèÐ¥cËž {¶íÛ° <ì”woÝB}/Mün7´ÆÇœçQàÔãŽC+ÎU"g¯óR칯ØËïà!‚ÿê$b©NÛ(zϾ½z÷ðÛ¯O^X¸aàLñÕ¿ªÖ}S±tVR1• 4eEÖtd1¶ÑZô}ÇSwñ}'N' DÔJ'Ù¼Wá‡Íb…ó=FöÝÇM)ÅE]vO“}ÔIq´’I”±4ÏH8f…#BtJ'¯ˆ“M'|ãa‘ð‰¥|™ˆØŠ-·"‹[úöãV_rÉÓ[õ‘V5®ôcFéø‘eÔ)D$Dߘ¤)N²· “|Æò’”S‚h ß•\–ûa¹¥Q]*Šs>N¦ce’ôGÔPæ‘VpÉ9Ÿ8ãjyì}s (¦ÐR(¡T²Êž¡º!ÿÚ“¬³.J ŠŽ˜NV\eÐhWD+ÕxH?"4ç+HBÄì+êê;ÒN k}¹êGë•ÙªÔ®ÒMj&‚¶Dì›b-†`DÍyd‡ï,yJ´Ó Z¯½2b‹k·¶µ¯¶?eÕ¤?Jšæ™ý ¤±5¢‰•dli6³~¾K³SV˪ÆWéí¿÷ ¿}ˆÕ˜/=ôfq㞉£Xè®Lf’Â5ç7Lžrd“ôÞû¤Ï!z+ÉúŠœÑK½5_ ]–UÂ"i¦4ÏõzpÌl®DfÁ4g¼ãao{ÛÌ’ ©?ûÌ1¡×ž2ÈFÔ¨n bde»>gA0ÿ$iH½~”馓m \Ž}ýÎ7¯¼’'{âìŒa7ÑÚ=Óç6~ÛŠwH?ÚVy'ô´Éed°› ôãtÕ½“)u^‹˜MØ Œ ³¥À²!(hSkyÐà ŸïæÃwçŒêéLóÝfÖ AÔ+Xn†å:sqޤÕ[\͇s':3ùøwã‘zdz—yÆBÍùÜŸËzQu_ýõú´Ï±ƒYÌT—”…/"ƒÈÅ ž e"ÒÝûŠ4A ÆyC»ýÞF2Ei¥sË—€ÔÎØì-»úŸÕ®†.Œ Ä]ñß|Þ‘=Íë;Í8DT¤%ñ¬}ëàˆÿÚÆ-ί~öSÞÁîF“11#-´È>×£7egfÏ™ˆ5¨hÅϘnbhÅ;ı!R$ €JP‚0©b@´œADD½0oFÌ£Rˆb íq/ßkXÃT)MŒ=Õ!IX"¦¬O…ŠIÀ{É5à@D(c:0AªVÄâOsE<¢òŒvG<îf&`a¢ç\RœªuÅX Á œÊ2¨ÙŒGŠ\WI~d¢¯E.gÁƒˆ2(0ˆˆT ïh'åèÉ:þf”òû\)•#“`ÉR•Í“Ô¶Ø -RM–pšN-ñÒºMõƒ2‘‹âÜÓ ˜?ÃÆà‹´ÝkŽræpô¨ÿ"$Nsd–b<8òG¼rSJXÖZ³™1äe–9ÓYÚ²Îö\ƒ °$!~`„yna ¿ˆ#ÐðI¢ †2yF\Þ ò&lfSz*±"íº³“ám…X£^J¶RÑï0î±0F)°† ÍÆ¾ Rµ5Ó¤vä§‹˜Ä”ÚÒ¥/-Ȥ–VK*-,]Õ¬–S±DEbðñ!$ŸqAœA@Hc2ä©ÌOŽô©ý{¦U£©R©Å>"Eþ1˜=ˆ¢mz™V3Šr TˆE6Ž$ÆB¬ÁNHDÜ@24õžxeT¡‰AR®ô/NlbÞ6‚EjÑ3`âÚXaÇÿXï›h%ù"¤w [(†0^|¶^$> º×Ò &HЮt§KÝêZWº]¬.N«XÓ4A4§¹ /U¨UŒòš÷¼ÅÈ„ $QÞc¨@ň@2Á(!L@¯~÷Ëßþú÷¿Þ¯Ã®KàøÀNðuW)JÔVÄn C#séè°ÂªÕ’À£Ã{ëiD +Yʾ£ D2‘7\#™»(ƒvQW§ºªzm°ŽûJZÑYzCJW½(5up2\dlX›Ö÷š@ž(4(9Ôd$ó …ÂRkŒÜÐbUK=­?Oë”çítLÉRÂŒsͼ’ÿ%1¥)Ö¤¸6e¨a:˜^ül$‚‡hDx±To`ËÆµq'óºÏ0çXšd^JþD»œ¬=‡§©TŒàì*Þ–…ÎpÇ0šPOö\´’Ê „;Ù³Š-ƒZJ]Å]oÌhæî8ƒcö+M@½á–{ÎAK"/,hÈc‹. Œah9Ñàiç^qŠW`”Õ[0n1-kE3³Öý¼5_M«ë&NåËMû5mG’á8U8€›Ú‡%Õ(C•øh8ÂÓŒ6˜€O`{~ñÑU8á£!õö¬)Ýèæž”Çt\,]8a'+ã„Ú²÷é7Mc ZèJ1ZRqÄ¢¥ÿˆEy¬a‚äáu(#ÚCè-<ûÛ‹f¸­Q*î~ýó)HÐ ª«• ý@k¡ ꇠÁy3fZØ‚>ºƒeo¼ã<|*Å;¶¡¤q%è„{¼á‹JX="Ý ¶ÊÙæežã:â‘vîr(½Î½eMé„óÓeŠdª| k­†;š0Ïv\¬âøÆyb±'I‚‰èm”(¢V “Žm»Û5ñžG¦" º^„q½¡ÄLmâ”MYÊt–„# Ãp6¬Ní“Ä“ £rG<žë~´Öy¸7?n‘ýüh@‰Nu˜VJåo¦S„ÕL¸FQr­jöpG%Hµ¡Y@dº÷¡ÿ#9ùî"’‡RrË/ü©:ºáõ;¾¿â’œ3#¿Ìõ·ô­ÿ šµDÞ,#;‘8óáC­°!A03Gî1{"Fè'vÀ—sè–(p¦k¤×?¥ÔhXÂt+zfgÅñ5Ó'IL¢;¯Â{‘•{¨~™W|Çyäö~•ND7!¼$B]…&±£:´|jöÑ ø`’@9Ä$ „3‘” 30¯ …3• à98wµâƒÃ×yÄgnC'z(„0ò‹!B(Á:%qq†.§À*€ï€€L"FK"Fà èF2X9ñSk'† G†4ÿRne˜kffzt'Xqr"Q„ã•t15ÎÀ åP’`y´ 6·Ó ´€3¦Ð‡3‘…!Ð ‚¶L 7†i(f8‰”èyZUjáÉAgfŸ¦zŸa,ý œð#Ű>ø¦0)-0ªr * :°oÀgÇe-9(wºè‹q·ƒæø‹ˆ•qÊGŒ’‚Ùp¡ŒÌèŒÐȇӸ !+°#P ï @-Wx€ˆ8‡‹<¸Ž׃»è~•Ha鄉 ÃJ§ÇaG65–Šæ@ЦˆŠãA Ö0E@ Ÿ"°±pp Ù &°Ï`O]|ŽÿÈ` éøˆ“8d[?G1d'st4“Sy( {/~˜…§@ Ep¯P 3Ð3à%ŽPœ`“䈓¹ø:h+òw‘踑&ó—|Gw4³Xéô„QH´Ð  àFE0L2"0­ÀFV& <ŠÙ…–阋R–Ue›ÂˆX½‡l†)ŠD;%0x'ü —\ˆ…0°0Ð!Ù ÐÒùïÀF% 28›ááßɘ;ÿ‡›’I–‘y› á|!4‡@˜Ö%Œü€ å ”¢ а'М+0ß ÿ˜I  &Wm\8މYŽy޼ɋÅO ˆM;ÁB;B}ê2œý` ¢ð‘’ðg@°6p ¯¸ P Îù ÙP Ê~Óò vi šÀ :–7j|ç9žþ„¦´„e… ÝTý ¢ ·ðh° €7ð‚à 3àœ¯¸€ È€—W(ÞÀ «° û(ãÃ$*à€Š–“YEžè ™=y¦C2„·¤šÒB‡C¤¡°·p 7   ú¢Ì ¢3Ð SúÎ9 ñ± õQbÀe#ÿr$*Çu?Ôˆ*‘y–<ʓᶂP.£KKã+ý0¥µà 7° € wà¥Ú H âМ-ÀŸZçí[° ÀÐjÝV$BªÉ‡’Цg(¬•Ú‹“Ú‹¾ÂtæWÆØÍy ²P4°À8`ªû)F´°€|²€ð P°«b ’>ñèQ›Äj¬ÇúW ¯ò:¯ô ]ŤÙ% È ¹ °Ð Àh –P^šÐðu ǰ€¸ð_˜MÐ^QÇ`û% *ðp±ª ²ú5`õZ²&{²¦“í¡ Ã5‘)Ùs¡¢·ÿ° P0Ðs€rk· Xb/Úµz«¹ºY`  Ð ç‘c¥ ȇ2Š*ªÂvàF©ïʲ’X¬Ø`\³Xàõf'1éµP @F=À'P ½° 2« xwhúxi>à@>•…´p K¢uaúFXÛ~噛;:¬›£Bø ;„uHÛÐi»0…0 q+âP 2ð[@/«' U&[º ¬€brç#È`1/ºçLòK:O‹yYÛ¸˜*¹j ¡‘Ø`‡ƒz¦B1Z!ªç ÿ¸ µ -p¿ð cð&Єÿ  ‰@p ŽË4LÖP ý0‹#8c¨Å`…½ª!ÀjAÃ˵–j¼æ¹¦oŠRŠÁ¬ã¢]”Zñ¡õÐÍé ݤЪ0FŸÐ!p8  ´¹'³ê@ß±¾ýî[„Ô·’ð ªøèzuëúuÙ W»{ùûµ[KÃh¸²6,?|㒙âÖ° œ ¼®`€­P·° Â-À!Ð0à'¬Áái ãQmçaFÁ¾ Âï;b籇È, @m–ׇp{ƒ‹9ÃÉ[Ãm|ÃŽ{©¡2=ÌzSd! ’@é@½+-šO@ØËU`<ÿà30¾åÛ@Û h³ as{ÌÅ]쾜0 tò ±` óK”§˜;©í¸úëÆ>ÙµûK¼A7„|„„1ÃS¹„ Îã0ÿhF. ¥ÐjOÀ.’ Ð Vö©¨¹3bÙ0 ìc ±p ­à ˜œÉý  ÖÐ ²Û Les6/x€ø{k¬Ê9\¼Z Çî¼ÊICwCÉKWãP—û&RºËÿX1@¨+Ð ¿à-€àÀÌ>•3ê©ß1ˆL‚*` !ÜÅܬ b\ *pCìÑ S š0 Æ´i¦ÿ‹Ãí|¼^ûÆAG™MávŒd¡÷`”ÿÁ œ@õð+Ð2ꜭð Íé´Í (Ì*àÈæû T ħ0 @ ± &pÑíÅ’à éÚÂáÒ0p ©°€Z\Ò¶ô›,Ïò ‘¯œÖ”Dñ5²M÷"ÑPÎà (Q Íù S:Æý¹ 3ÐÿÅb7Å/ACÅ  µûÙPˆ¹# $`ÕW=ÂÎ0 ûú… ˆ—¯HÒUlô`@rœ£hÇ£ý¸=¡ž;!0f"×d1‡t86MÄz½|mÛÎò×UzûYØüÌ"FÇPFà3 ˆuÙ™ìÅÑ‚íœNY|Ò!‚ÎÕ-àM;ì„(}Ö*ÿ½Ö)  ¸Šá+*A ä+_Å šp ç Ó<Ý + Ô+ Ô0 w$àHý {H~À šäóÔ'PÕ"ì t pÅûyßh “<¥œ §ŒÝó@¾™¦¤Ý ë¿?ŠyÇJnV6£ó 3°¹+àÏ-v€}·@% W t$69y×p$´p—Íyí¾™@^¬ÀPÌC X¿F²®‚Zˆ$¥Ÿ´^. ŽÚ]¹üëåÜ!ˬÔ.û=Cgœ‡S¢p µÀ€c#¨ZCƒJ¨& ·íq g4TÀšF"½F.ií zÿ` šÅ3 S ½ª>T^¥sî,„ÊÄ“ÝxgÒ»ÙÝ­`˺˜>Z=3۵С )à/ñ ÿ8§Ðœ3€Ý“„jª„Xˆ^Õz z ²ýê ë“!iÊ#©Ô0x¿YNêÛÍݦæ¡.êb®µ¤nÖGhFÊݱ>áÑ­°šÎÉíÁ†Œ LÄdLð ÞŠ'’`~P È€ zpèýÐ'àœ±ÚŸ×YÉ ºë´g|¸ IQœ®熼ÞÝ¿¯²¥ÝAiV¤¢àíÏÈÕ/Ñ­ZXm hîáqipïÐNÅÇô½k$*À $Q Öÿ¤ $ ¨ÕH™'ˆè«Âäñ$ ßAÖ³ž"~íàÞHÏÖK‘êzÆ ´€@Õ Œ@‚ } À§–É j…pì±€>l0Š °šðŠ3 &î"©ŠñK'’ð%ó`lüð!>âϦ¿ù€ w ç$*fÔ­„ Á(¶îÅpõc?LCÒð|¢mÀçˆ `0…¯ôáñ ¯h·h'¥p*‘Å÷ ¡–³HgÅÊô_~Ú½ø0nîœW›ë ø@Ìé­Xþ†@VV hôNï —Ø0b×ü o@‹ÿp Í€QÑ ±ªbúý‰úÎLõ3n X‡1B/'¢½SãPžžûþóþKÏôÿû?Q³·Å0¾½‚!#V,0^‰Õ)Ö¶SZ½£X±"# ‚õD‘E±U`SÑ…d´°€¢5Æ I'†dc P6WÌ|·-Û·ïŠUÜ×ÏèQ£çí›÷nR¨ó Y›gÍ´§PµnåjÔZW°a~ «”©S±iɦe‹tm[¶oን;w+ üös«“Bб`tÚÖéTÅN‚V<ôÀñƒC‹ƒ²©pbÇfïZur £U1q.[uëÔ«n…m¾z÷wŠɇR,ÿªuŸÒyMßu­jíÝTªasgUk·m]¨·‰S4®ysçÐÃ>—V¼zùˆ•3V`œ…SL»8xðŒMñ8‰Q`ƒ"­R8ßeÊ9xÆŒÄ{Å5Ö\ƒ­=¡ˆÚj«*ò7§ªjЏ­@ªmºëº¢Î(åŽbîº « º›+.Q`¸%G𨠃Z¨¡X²‘I2Z:%K¢AŠ®™ø2«ˆ!‡Z„¡Á`8%¿³ 'Ø“l¶w.„ªÁª Ù«Û²ô-K—Ò­¸ ·‘¶³($1M5áÜr.ÝÜŒNN|f¸¥–›~|§?¼@¡(›ÎG²ÿͲ*‰b+í´nÞQ†‘d,‰Ñ¿p:4ÐNJеBU H,‹bj)­RõAC««w¨Ê¶s+êDãF ³¢4qµËW¸|ý b¿ä X±òAå–[^R”¢;amÐB;9t±Dmt1p ðYɾiå„€zǦðzm›ot õ@KÝ-£YÕX0«Ò²Â1cµfß~tS ÙãØN‚ã’Ó­¶¤’õ*;ÇZ¸QÌ©G¯¥‰Fˆ¶ *Ç{ìÄÏ 6{Ò/P4– ãS¶ì¦Rfµ›SBm¥•PÇk¯Tz² óVߺÄWC±~£Ê_ÛØ¤(a4nÚi¦1dë·ÿ¬¤ša9EE»ˆ¶YL<ÄFÅ61<ª<ŠºF¿Äd~MJîlš©fîT Kzè©M9ûeUj°buðߨÈì綨_xUÆwüqÈ#—|rÊ#'vÕË+×òÄâê2)ftÒGÏD…GF?FŽ)ýõb,‘DK`u׋]tÛ_?F’G$Á xINhA›$‰ý„Pqïv§0·*ó«€Ûüqê©—^Uë¯÷þûÈérZâñqu87ˆ‰–“b‹1Ny1$k¼1^Mv9cúÌ4¼Ä©y'·b~‹á™ÏhŦ =+:ËÕ~¦Ä%‚&ŸuÊ—aK‚ SVÿ9„Q6pS‰y_þbÓ­u"„éÆ+N q ä0d!^lxS¸ë5zIP%‰HùlUY™¾t°Yh+‹^u†ôîUìÇUA`ÕIqiâ>ÌD ä…v»…šŒ3*[ ý׉QÐÂ[:¼‰Ne$u„BT…žèbk_'úc­PÅ´"zˆ"^ªM½DÅ*RÑŠw‚Z÷$L‚K™Iü ‚—Xdb€1Y'B¥®´à?x™EL– ÷‰c=ÛÇÏ`ÅH‡Íé‚Í1K8¦€M}X‘d1wYÉñ]’“™Üä2)¶wd/ B›EÊÿ3%iéDG­Œ5GUŒ®åmoStÎZ®¢¥IêÒ.JÊn>t´Û3˜WC˜1‘yÏ…)Ó™&ÜgO 3¨i¥ša6 “J æŽä±–P6³YŽ3b^¡†‡ N,6‡ý`Î;›Ϫ=2£#ŧœÒ‰}ö³Œ*}GülJKŒÒ•†1åMþÇ„†”†eÆfi@ÃUˆ‘ð°Š:¢å—Ì9_—&š¡“b­¤õLf3YªIÑ⟘A)VÍräjè;¾&Í1Tkµ!^ÆØÂ˜±Q…|´ qÂD¡ê Ò¨`)äáÒ·)ÒU ¤HI:Õ^VN)½*VÍã¶ÿS’¬"bŒEKÆj(³¶§9\ë× ÿ´m¦„¹j9Dv-…•'ùÊb€ÅI£÷‚bU¤øÔÄ*–ªˆÍc[«Z$G0hA'°`CsmÌ!¢lTN’Cüïf9ó$t"“Ö’Vuçn®r4bíu‰Ni 1HÞJ’²=æQÛ»Øàþ6¾®<. ÄÁ(P~ퟵVÿ(Ò™Íg3€¦4e¶cTDœ"¯a‹^@âµhÆú¨øŒ³Ñ¹v½”ä-ˆt›&ßþ6Aˆªï}3%Y‹€¿µïaÐ’¸r]ÿŒæ4Ê3‰îc*GÙ1„«ØÚH¾ö(ö+[0<´¨*ÿìÃP]òuB,ߨ ·¸õm±iÓFýå¹ý“.ÎVp —Z×FÉ®-!Ö݃âÕ Ïdaã$ÕMI6ïnÝÛáê<¹±óu%dûLµïè†fýäç©‘3¢-ê¯á¨6µ…%NS€Ì%òVÐIä^O[“ÚóΣ†¯ˆCÂçûœ3…6ÂøŠjì­¶È)þ£3³º†1Eh÷hª¦ô+KJŠà.äHzF%7­˜—Ía&âÖÃMµ¥£ç«¢Z¥Ú^æ+cylô’“¯Âœž´ÃòÀ¥ÙÝAÅsµßkçR›Z6òž·¼ÑNÂHT‘S#&U k"#Ξÿw¨­ý¦wƒ˜Ûû\¸3ŽÉĪÕw;ùý'Û`†8I nn„'œÉ"wòÃ9irfÒÛÛ>Ud-Ó+–ó•ûÚJ‹•ºiê‘“ÜÝíæ4Ê1ésRa’7CqHP¨Ç¹^¨Óü¤ÆfÛòu8¶*Ø¡I:™ç¬*½ëuŠp{3²MLSZZÕäP´5„Ù[ªoÈAS!¶?½Þ¬ÓYï–:?å­me#> zÚg.&Ãçv¼è³Š-á¼a6+žÔð†¶YÚ÷Õo®`-ûÝäD2ý«à;× S‰²Ñ BžÃ“—¼Áfùmƒ}ÄæÙ<£:êÏK§Â¢_ÿ{Õ+´iäY/rë)o|…Ë󱼎Oxâ¼-?“ôsU¦ÞˆžÝêS½zYŸóï—\ùã×<Ùž{Ý/rôº¦—FwröÕ‚Ý×pøIïú|.¥^_øÐ[Qôý³¾éÓ—ÅR?›:ªc0‹X½îË»ƒãº×Ó?"?°+üËy¹¶è%q#¾ÔÓ9騻®«@ ä?ô›6C‹¯È0#›"ԺŜA¬A|œ¦xÜAìAüA ,è¹A"äÌéžÊéí)ÂÆy<û Á¼0 ô<¤@ –…¡£é½–k“ÈÛ0ÁË¿ü;Ù›½+ô=¸¿ÿÃ1À  T½0ܺëA¬B}UZ]U/ÍTXÕNÕQTBÔ_VJÕÕ]CYµÕ½TUbÝSdeÖTUÖgíU^UÎP5Ö[ÅÕZ]VgÖcÕV3ÍÖhµÔf%SoõUlWrM×pEUk½Ö\åÖn…×bm×d•ÔrÖa]×x•×Y½W|ÝWzÝÖ€XAìWÍW~5Xs=׃e؆uÕ‡…X}u×ÿw-T‰MXuÅØ…­ØÝXpØê0‘Y’-Y“=Y”MY•]Y–mY—}Y˜Y™Yš­Y›½YœÍYÝY3‹ž­ Ÿuš ]˜¡%Z =Z¤Ú¤Uڪ쇢•“§M“¨Í©¥Ú¥…Z*ªÚ½Z¬mZ­ÝÚñùZèÛ±åZ©ÍZ³µÚ´Ý0²m޶µ‹·‹¸•ÛµÛ°­[é˜[¸ÐÛ4)*òÛñ\§ÜÁ­ •“ÃE\Ã]\ÆmZÇ}\È\É\Ê­\˽\ÌÍ\ÍÝ\È „ €40Š4( Ì­€0 = Ý5«Ï-€@(€ÐuÝ€]Ñ%]Ó=Š@Ðÿ¯˜]ßí‡Õ5§ƒ•ŸÝ‡ âí‡b¸ÝØ5Ž X³}˜]¾í‡ÞõC €ŸÞâÅ´ãÝ^(ŠæÅÝtÜÞ( ï=ë53¸Ý5C†Ïí^Òuº÷-€ÖÞÚ]ß6€4„è]ßp2Ž=0–ŽwPà4€~PÞb`Ý =H˜=àÛmŽy8øÙ°† „»Hƒ £XadØÞ}€4ÐàÀ,c1@†~Ø^d€ÚmþYå…Ѓ^á~á&dPÞ¾á ž‹8dÈâ&fa!&b¹`®a3("îâÿ®``da¯€ÔEc­€â÷õݾŽ0NƒÔíÈ_÷=€XA†y€¢0ƒ>nh€Z k(;^ážUb£0D>€Ã €À|ß9. ~‡žcxÞ¶Pa6Š! €ÝX]:¡dŽâä«xÐäîäÏ5ŠèÙ÷ R6e¶õ%]\veWÞ† ðÝ}Kî‡<¾åMž¨f>œ+H]j®a°Ðƒfe£àd鄘Æd^f»0€€ €höÜê€ç~ çæPg`Ý€d£@f‹2Ý>6€"†‹dÞ&dÿCîh`áv®dÀgGè~ h»8h>¾ä†n %Ýà€b˜èо0°hæ `Žö讨^>€„Ô­iL#ˆ]}&fN `dpduîP–ŽÙÝä6 ž.çj¯< žã4è•þ^­8è~ˆàñ-é Þ¹HæÙµЃ. 96u††+¾åšöj¨8è,~‡&ëkþ«ÝšF—žc¸Ðƒ(€§˜‡À`¥îê®0lÄlhÝwðé6 € hk`N»]pc²€¨¡f?®à¢ÐiéàëÕõÝÍfêJn`Ú=€ž­a¯Š¥Þk îŽnf£_æ¹ÈíR~îã5tcÖƒ/p oî°(€,ÖiÁ6ï@(q × 7oÞM]ß d Ù5Óƒ¤v²Úáè½rä5ßðm\¿^ÞÜyØf ÆÞ[¾jk^’ ]k¸å„Qp¤`k£@d³Þp'ÏãçåéÿôÍ•àÝDæò,?€,"ÙØ5óÚó&Yk Y¿•ó®H’‹2ŸrÎ tAtB/tC?tDOtE_tFotGtHtIŸtJ¯tK¿tLÏtMßtNïtOÿtFçi² kP/uS?u¤Ðà(/€‰FuWõMWu^žhÝÞj=xòç~Þûs†®ß/OèÐuk8ß•í°¾]ßE]ÏÝ]Xvhk ]=6ä€iMÀðÏ®öÆvnG Æg@àkÏvØiÿgÄvciîv»Žv|v Îhn7äw6 x®aÑîè0ö\¿ghçÐ`ßeõ£n`ÿx.ämÎè–6ç6aØuã|ßxŽç YWjÖx¯áe6ìnínOy†Ne 6á>fõ} €l÷áF甀RéŽßùÿx˜çFfäHÝêMh`uÃfa½.†Ÿ`hú–`†æy‡a{fŠ6á(çy®×÷žu5çwÿÝç>i †æk‡g`únçvöá{{¹–`VÝrçv=Ðú®ßûgÏñ/Y`ÕÝf+ÞNòÀ7 fx@^Á? 3v3øž6ò*Š|¾¿|Ì ¾÷Ìï|Ï/lpöÏ}Ò/}Ó?}ÔO}Õ_}Öo}×}Ø}ÙŸ}Ú¯}Û¿}ÜÏ}ÿÝß}Þï}ßÿ}à~á~â/~ã?~äO~å_~æo~ç~è~éŸ~ê¯~ë¿~ìÏþ¦Oîï~ïÿ~ðñ¿N(ó?ôO{ý؈EØ÷wXt%XÍõ¿õgi­Š•ÿøˆ~h­ „ \èð!Á†'2¤h!‚Œ7rìˆ@ÐʼnCZIRäÉ&S:\ɲâKˆ.cœI3âM‡wz™S ÍœAo%úSaQšI_.eÙÔéÑ„<§jôùóéI¬$µnŠ«J¯5Åâ$kЬ@ªT­ EÛlI·oÝ‹¶.JºnÕNekô®ÞÀfñæ,ÿØ0Z¾<ý*=,–°LÇ%G…üÐòBÅ;ÇÄŒ”reÐG='$ýU®é‚š{†ìú5ÙÔcaOsuGÎLmÿ¥íUvYć‹ÅÍQ7Tß­•FÍ»ñó˜Æ7"O hôÎÙw3¿ê<ñôŒÕ³n·þxmôËÕ /~}úØçå—'ßÝ;øðã»ÞïÍÐý Yî}ßoõÙ7`[j§`Hî–ƒÜU˜Ü…æe¨¡\‘AxÑus}h׆ü1è_‡0•Há‰Ò·"ˆ#’H–…(b‹æˆá޾ØãI5¤‰?™ ŒCÆwdTBzãŒKJ‰ ’D²håEN^6ß”Í%ÿù$–QV&EZ¶Äå˜]zI¦_né¦CfªÈ&˜jhgƒt¾ e™mÂ9'ž(¦èƒzîI£Ÿ|*9(£k h£ŽŠ%çgVú(¤Tjzg¤œ6™(¦¥Yz)“›æYª¤^Q*ꨧ)º¨©§ª#ª9­ê꫇ÎJk§²öêb­7Ý:[®gkl¨¬&Kì² \³g›iª¿¬ ŸÂ+°Ö^»+à.­@ÏJ;­²ØvËíºÕºû®­ ªË+»ßzK/¼ÙÖË’¹ØµÊ¬¸ã\äÀ1þ+pÁbîî½ /ŒpÃ覛°¼o›o»ž>LÒ {ü1È!‹<2É%›|2Ê)«ÿ¼2Ë-»ü2Ì1Ë<3Í5Û|3Î9ë¼3Ï=ûü3ÐA =4ÑE}4ÒI+½4ÓM;ý4ÔQK=5ÕU[}5ÖYk½5×]{ý5Øa‹=6Ùe›}6Úi«½6Ûm»ý6ÜqË=7ÝuÛ}7Þyë½7ß}ûý7à >8á…~8â‰+¾8ã;þøÏ o|¥Åû1Á˜g•{þ9è¡‹>:饛~:ê©«¾:ë­»þ:ì±Ë>;íµÛn†E¸»¥»Y¼“åûï»Ë¼WÄs>|ŠóÖ¿>ûâ«ÿþõ#×ühÕÿoÖýø»•?Yü{åTÀø°€< ¨À2°| #(Á¨ìÃIC 0œÌÃÐ`?ŠQ€ây„F?*XóQDiˆ2øŽœ¼Ã6,¡5 P=üD„;L¡YèÚÐ/Œ¡f˜“|p†9üaNbX€ú ˆbýžÈÃ~`„9ÀbAÊð!z €`(dŒ0' 2>¸¤! cLÒ €b`ýð 2ðB¡À‚Å@ ú˜“@ Žó€ÈÌ1 @á(È›Ìãf8€ pÈDúñ&f ÐHJ2Ö€ ÿ°S"cW|É;€-²r’zXc!R `†1À>BˆHE:$ Hc?~øäd3,Æ)”&–|K`LUVÓ†¼âñø’4˜3„4 D…ÄpÖ@ÆÇy”b ‚èÄäMÌÉHxŠqž q¦@H8€ùÕ²3 ä!AÿhiR"‰,f?ôpdž3…€HDQ)€ÒpF£b€h£Ð(%Mp€@XŠ@!MVZX’IÃ-óÀš.…éMPB›â4&ÐÀIŸr1¨/ Äö1]г[½ÉµYU‘öƒ¤éªW9jÿSB“¬ýÔ®ˆÐ?n‘(v|e2¡AÕ˜ ÐÀà;lªÄ˜c†P*Uz“4”rzpé^i¢‡R ¬x‡pÆŸZõ%@`ÙÕy@3&aMl‘!·N­óP둪ˆþÐ ¨5"Vn‚µ~xGÛøptô¤G“ɽdÚ–¶ƒÌ#9wÜŒ’¬ƒDî•“…Ž4 }..±}ÀÜÅ&X! Í`‡¶µˆk9ŠÝÛ:$¢‡=egY+ s”)kcòÐgî£i@äQhÚ¾šÕ 0Y šÔ w¼ p;‡I#ø&ùƒ¼DÇwÀ¾0M ±KrQ›¤‰MåyÇûÚ¾J|m2Cü`…Ìã¹zgNfé9÷à˜q&bÔU(ݤé´“Y¦Ô«6TmN q4dÉMž²ï ,å<yƒ4–oòã$s±Ê’mÈ™±ücšA¹³ˆ˜!ù,Q†|2‡###***777EEEKKKVVViiiwwwMx¨V«xs•e¦h‡®gвx†¨p±s‘³s“¸|–·z–¹}š»“GGžSS¥SS·KK¯bb®l|¸edµhv½q|ÎXW×Z[×]`Î~AÚlLÝgUÙrLÖwVÅhjÅltÂpyÁxwÃ}|ÎqvÌszÚefÐkqÝznÕuvÒtyÐ~}ÚxwÛ{zãWVègKäc[ërIévUäfeårkäxx€z™•m…™uŒœ|’®y‰¦}¶{ˆÂ{…Ô~ƒ¯v³n̈FÏŠỈSΑXчEÚ‘NÍ’eÈ›qØ‚tÐ’i×–xΤ}Þ¥mÝ¥rܪyìˆWç˜LåšRâŸ^èšUïœYðKêcä€~ì“hñ [à¡fì¢zï¬qì¯yð¤bð¦ið©mð¬p‡‡‡†–žŠœ–––ˆŒ¨Š”¢„–´‚½Š™¶’‰£”™©š›³… ¾˜¨¾¤ŽŽ¥…™¦––º…Š»•…ªŽ ®Ÿ°¹“¡§§§£©½ª­´¨³¿´°®¶¶¶‰£À‘§Ã•«Äš®Åœ±Æ±È¢µÊ¨·Å®¼Í²½Ë±¿Ð·Á˺ÈÖÆŒ”Ä—–׈ˆÖŒÝ“ŠÔ––¨֤‘Ô´•Ì««È¬¶Î»©Á³´Ì°°È¿·Ê¼½Õ¦¦Õ¹£Ù·¹ä€â‡ˆä‰…䊊퉉åéž„ä’“å—˜åœœë’’ï˜™åŸ æ ˜îµƒí·‰í¹Œì¹å££ä©©çµ§å²²å¸·å¼¼ñ¦¦óµµÈ¿ÀØ¿ÃìÁêÄ£êÆ«êÉ­êÍ´éϹéлñÀ¿ÆÆÆÃÂÍÈÂÂËËËÂËÖÄÎØÉÌÔÊÒÛÖÃÄÐÎÕÕÕÕÔÖÙÖÙÞßÓӨרßÛ×ÜÜÜÍ×áÜÞáÞàäåÄÄåÇÈåÊÊéÉÉåÏÐç×ÈçÚÎèÙËåÓÔåרçÞ×åÜÜôÃÂ÷ÈÇóÌÌøÐÏö××åßàåàÜäääççèèçèëëëïïðòââúææûçèüêëðïðóòóýõõþþþÿÿ Hp ·‚*Lxp¡½yöúÙãÆ-âÃy ÿqë7¢À~ýþu|h­$7“çœgM%ÇyarëHQ%Á‹ö2l¨3¡?`¬‚ÊÊ·³§Q†G“ä©Ô(Ó¦:ŸBÍ(uªÕªVbØÑàFC*ÜÊñ¤µš(mŠlùfY›2sfÕh5»»wá”;W!ß¾ ÿ^:ia­‡¡n¼¸«À“bÃ.\üÏ^I°%Wfû¯ìÛ0=L‰ñhC¨S«N}µ»eøR»\M»¶íÙ¶sëÆ ²0嬿'nüjƇ)F|Iµ'K•–¾\Ùr%Ų3eªIºtOéÝÇÿ_‡jUJ]¨À‘f&¾½ûöìßË—Ÿ´Ø¾Å'¼ßtÿÇ:‘–]J÷UI%EFQM2!˜Y Ú#¡L Î$R/ÍGZ,¨ì²8¨ ‚Îz–Ø]}&šˆbG ×_~úý÷Œ¿I(—3uÑ},!‘YNH…@:èØdu„,!Â2¢{â„(e/'¦˜âŠVÒ^‹Æ½H£Œ9z)&TÑIxEg±tæhɤIfµy!a­³Jyw®²Î{èIJ ,¿„‡e–ðZ"–\N£R‹2 fT_ŽÙK7žuF3]–dN)9!w8"ÆÑ.vDê.†Î3hª$²ú¢ƒ5ÿêß²úé~µR –¥i:ا!(ìAg¦$ê<ª7ˆ±¤ºª«ªB묌Ñzë£âjíQ/åTæD¼ ËÖCÊQgI?n„Ývà‘Jå<½”jè³®Ò[ï–±n+)¶Eé{˜D_õt‘±=¢»–¸Dš$®°qqU¬\à¡b,Šè¬´âÙË*µøù;\­ùz ØE-ÍY‹Ib„ÓGhki‘ Ÿe&°31G×KàÜYž²ï‰ã 8{V‰±ÐC·j_ÈÚŠÌ/€Jg5]v‰Ä_GžŒ©F2« ä›èžìDVfxJî²Ë“î­Sqyä]t´o§Äñ\ CÚ4¿uÛ]˜d‰ÿ¦sc•š*®5²õÒ›¥¡LvÎ!®Â³x¤¾Â zzý¶Æw5qwW»4b¡“9öÔš[‘BÁ¢…æ°Â&î¹] G£Bqˆh‡wgЊ£yќϋ¯èIï;:]¥7õ4ÊZJàß1 aÌ0!nµ±·ÏãnGñ¢*yæu„ÞäÅg™¾úÇw¬üayÓ}í@;šþÜœ6NXSHoy$Q§±Þëb–&ˆÜ5tBVz:¥f…gŽ0 <"‹É-nYŸ•ææ¢äypyÌS^‘>·€%jpâúJ?¸§"YH9•)7X8¬Õ%I¤ÒÅ<Öñ‘¨ÿR„è]Ä ¯Ô>ù½ÏV 4Èüž¸.í¥vqŠS?Îd¦sYÏ=IZƒÒ5ðØ©<‘ ZJ¼‡ @"ƒ‚ %( ÂM‰MìàÇæ·¼ø!i)Þ˜ƒÞ¸$<¡™cC2’ÿ7iŠšŠRå7GwÍl=FX±Äæö`ÖKsÐA\âÈË`¤MI1CíAÇ.bÑ‹f±qPB1 eŒÁ üÜœï8=ä¥ò‰x[eý –üUˆ–²H ýfÈÐ$ȹè{*¹j8mXB‚ fŽ’¥Ä[é) S—‚° ¤ûàBFò?íï ÓŽX°S!BˆpîÄhwÎØ ppH‡ŒˆÃ® ØÁ jHiTM Ði••ÙÔæKÿ5‘X¢Îa_I.E‚NÚ¹Ì`) É´'Ôö40%!š(Ï0†5D ](†^£)Õ¾‚®ªîÃUYWËÚÖºöµ°­kkÛ‰ÿzŠ¢‡S'Å(ɉ–‹À npEQM×6°3$ QA NPB„KÝêZ÷ºØÍ®v·[ÝtÉö»à ¯xÇKÞ×:e•NcÔR’¹&œB“XÛbî¯Gô¨wº×¶ºp­À" aˆ7ØÁ¢$Ƹ@Œ§îµ”G³*`Q &¬öko§ãiBÔÃÑ·¢ô; ÏÊдÕ3hÁ R±'l´ñ£Ð¥ò©…“:cþÔÐTý:Ø÷½VáÛau*sîW€rAM¹(úP„ò·=Ñ€†°: x߀Ä"1Žã¤åÅŒEûà~šÖQÖãU<•çmçÿ(ßÊe’`9•³$, ÖYVNu¹'žnŒÆ"é[ŒAª2©-TÊWÏ!ÍÇŽ¢…ùs’iØ(ºÚLiÈEß‘hAõÐ¢á —©{¨•4ǼÃFw!‡P¶c-3¾Œ FC¸¥©…4³9i)Ç„SÉ´e6 “N¦"Öc'©÷ÌnÜýݙF\ ¥ÈÁ=ÈÈ'.°OdØÚÌŽ–ð®ÿº´^3Ü“¸’,È—ôRl9œž]˜ º\d½xÅ+z±'n¨ øDRP‰÷|y 5&s™¿ ½\[“Í2·`“"‘ˆ(tR «x¼i¡À‘ä,\ÃånÓÕWH ¯ÿ˜‡8lP„ R ¨9ŽÑ s†å÷ÆJn‡GZ×1è‡iЦàĽ¡“³§ åØh·?z6¼P¾t˜¼QÒ„#‰ÌÎED-&7Èóû|Ü@Ç–Ä5édu.m§ ¨$ÚÈš«@^[$¹JÍ‘d1Pwþ}«ŽSxwîÖ w"ºÅ]nˆF-Cöu_4ãÑl1&«ÙGÎÂo"g‹IB/:â ÃWЈ™ûzJ.Û¯*Ǫï¹âÓ~öÆ ~¿´)ïËsžãÙ [?ØÒ‘¦ÃûfË ‘.гÀyè‚<ðµôw¶>æÆk´ÙgÿðÛÓžûF‰ûÿ›Ï w¹{î`û8DÇ zèÝ1d‹×”̹MnZ„¿S[Ÿ}ÄŸ¦Œ÷hkæ}àDto~rf2 ñN·0:æd ×`w ˜!¤"/“9àà>° mó*¤v«‡nÛ§f?×}¼æx“€Gd¤,CbqÀ¨/«` ÐÐe¤„‚v˜x*8…+HPVÈc28V5{bñ‹Ô&0ô)”tq>ÿ1„ó >%>(± C0DpW6Z8VvQ˜‡H…˜fW(0¹÷nšAˆ¢±Ha£ˆcø?Ž˜|:d %P7p'° ó€ "€-@D€ „¤…x€µWŠ|H€³‚…ï5L[H~\a@óbh1Ic(uf(9hÈ Làœ  %`TÐ / ±½àP ÐŠÊø©hŠøøŒ¨è‡DV!4ØpR6 Â?0ÈX?Åw@ˆ  œàP° ¯à»è")Q )p ó(-°G})ÈŒR¨‡¶·§gþXS‚ñÙc$òŠ5Á µs)ñ º° F„ RÿàL">`'  DcØP)0  -)‚²GŠØ”ׇ%Ùâ÷9LñXÖÐt—ÒN áUƒ|ñ! ¹#0R 'àS0šC`{G IIY(õ˜Paò}L©vP‰f:’{&£M„•—ò+Ý"$ô#“ËÒ†7Àê%@»ø˜—0ép D”3ps™1¢¸Œ÷¸‡"t$É—ª8V—Æ…_”lì–‹ØPÁbjÑ ð<Ћ>€àЋ1 =}_Ù ±‚uÈp güšNYa{™ù1•„„5P!!@ãb@ÎF  🠘«ð ‹¹ àÿð ¾{ƒ5 ¥Ð™Æ•ùˆœO ç•HׯôSEVèiÖð ”ðA€Ôà‹Ù†Ð}Ñç„‚r¹` Ä ¬’;!RÓWœv©7x ’Ê)Ÿw‰€gŸº”BLæ…”t0Ö”@ s0›mPÒž>  Ú‹‹Ù b ù”OhpcVÂ!ü¶rDœ*¢ú™ú¸x!éR '|Ùó#ÍvÑ ¢+ú" `Ð÷ ëP›9P›7rò![0Ä  †Vk„Bا–ÍG¤Î8§tª—ª¡Tx)Gw°”4$`uÒ0 Ý@ @ AÀ @›:ÿô Ð'%Ð7Ê ‹Öh€©ò;q ¨ i{œ:˶ê¶FJ…G’ Oš•1ƒ’¥f"zá 9P ;¤ 9P/`}ŠPÑ€G¦äóÜÀ ÿ@1&÷ š  ¨(š:&ç©4© ;xëž ù¹wú¶ð©G¥ K#_…ÿx&&ÁºQAË'²¼0«8P!ÀT’»»K—;t'Áir>$Áû@¼au¨P†ç=å±Qbç|'g}æ9Š k½×˳J º¨ôyx«g/³•eÑ+袷à#%>jà·8ð~P"à‰»¸ã#¢ Fâ 3€¼–À¿ý«Ôð ½à hƒI‘#<ßhH½8ë¹kÛÀGJÄÍ'Xv3IÆ[‡ƒ8Bž<ð °–8 b  p !àcá95 9„¾à©¿œ!¸—€4\Ú`>p cç3@CË·|ì‘ ¬¶IÈ¡ÁFì3K¢Oÿ<±’õ¨`£7€ ÈP9`‰—! Æá‘;±À©CExrêÑ 6Àq\Ã¥p 2à@îñ|7Ù† ¬”CìÀØ ÈmKȸÌ-YXl-Átn§^ç²Á¢ ‹© »P›þZ›<^l)̸L%Ì>î >° 8,v±`žÊ5Ì 4àj,ÏDZ@ З¿¼û›îÁ È…ì°-˜½Ï™¼÷abSÓ- £ˆü0j}»pæì9ЋïsòÛ~Ç áеâG(9Á£ 60ÃðÑ M¼ÏŠDøÆÆæ3° ɳüÎ΋ ËÀ¬0 ;;Ó4ÿ½œö|ĆlšLÑ-=òÏtf¯£«Ë Í *> ½Ð$K›­»Ý‘Cóà =$}&‡r 6Ç ÝÕÄ+/0"g$%ê{lÖB/¯€?Á í Á» ×¢;ºLq½ÌGr)LW?—’S@ÅÁÈÌfÃÌè}«ð€G0Ík•'6pÀáA*FD1m˜9¥ÀÕý[Ã1‡í‡ëðÃAlžÁðÀ À ×¶|˺×®­ŠÃ„׳³SþC´­É1'ú€)ÀTãÃ!6 jA\ç ò 6éÌÊ ¡À¿À |` €}ð¾™ÛÁÿÆG¸Ò[¢îÀ ó\ϋӢZÄHì<0(Ûb®8Ø1y_fÛæãÖÇÛ|-p²ïá ?ôQ0¥`)½˜Ï-¼ÄË ‚PÃÐ-ÀÝcëÝ ÞѧÀÈÍ"ñz¡Þ>[׃ÌÞÑ8Xjõ—ÜÑ^ñyÎm¤¶ µéBÌF6hy`„G虳¿ÿðo0¼Ö] ,ð ÀŸ-v¢}'Òáöç6ñòÒ¬À5ýÚï}âíå~˜!,î€S!ã3ù¨ ¹˜ñð”Ðx@ ÁIžÔ TØnè$ß½¿‚p‡@ |пã7N™0¼@·8„˜ÿ›|dªWè€û°NSXsÏ?†Ï1¸½D&!lBrfÞŽúÁ }kÞŽDPŽ0Ç4çšJ®@Âà ÏpÌð –°Fþ(  F´ÆgCÊ2„Ž«¾¨ —gÛ%ÓÚ[nÓ)ÞåªÝ—$uý}…

â±±ˆ …€@ € Ð0hŒÀäîˆ —°s‘p§`+@ Q } a°Ò¤ñäË+18º„åŒEZnð%Žé–~鬪ƒ±’úí=«° >ä¨6Êg›Œðíª²±åÎI…Ø@èRbu`àÀ†§pzF¹K؆#k}Lÿò ~ò†š~XTÎסbðZ®ð@Ïœ¢ß>n؈ nèòP1Æ @”Lóp [ ß@xÀ¹ wP’à Ó OØ  ap Öà (!Ðòí"bÚ‹Ø·´RâÎP5~æ®cC&ºuŸðBÏ÷ÍTT±Ì=Ð ½Ð›¢âÀÙ^ˆ@ ÝŽñóñ 0)ÑôÐð aÀÍ6ð>  ŒOvâÌFØ‹ ,àPñÄU<2ƒ&a¾ìÊú§ô}ïÞ«}ÚÀéÜ`íâÓ nÈzóàzâápüê%"OWæí]†ª ̰²L% ‚QR›¨bíKÿ¾À‰W˜¶ãwæ?_ð£:d]ùì·O϶»¯c„ïü« üĺPBE€ïîŽ*नœoóæýzÅcÕ}rZÔ¨Q¢Gûál©ðèÓšI¡NJÕjK©W§fÕZtž5•;oîâÑ£W¯yö»9okW«\…‚&ÍuÕ×PUÇŽÿªµtÏ£³iÿãfÍ·=Ï':TÎÇÄ‹ë*ëBn3pr+Ï[×+Ö.ró¢Q‚æ-etŽ•Olû ãFÉ7n šn¹ä/xðÞ±| Ó¾i£¥Áâö*¶tè–HŽ·ÝrƒÊ3’ ÄJÁ¢t+ÐÁÕ|ó ¿¤ižÞ¬ޤ4"É8äPQ®/會Nº¾Òi+#ç¦CG—|@G¡Žr˜H$qÐIO¤öHB‰$æ–a‡•`\âæûfRJ'}ÂP&nš,M!,„ ªœøSÂݸŒÍË–ì±F¬Þ´¬ÍÊѸ¹gÊ” ëEœ¸(£Ë.¼ôB…/Qa̱UFœN=ÅQì^ñA=ÿrbQO]Ô‹¥Ççêº ž|faÞ4ëBŸúj' Uó¬ÏÀ|ÍT+LUÕUQý 719=ÓB§xk­/qô$ £é˜C¥ûâU¡¸Äé1"Œ £‰¥LQzñ³¯ç)q%xˆ¬O&Y+ô4&…`𦠖Bµ«s¯Jr]vÛu÷]xã•wÞx}KÒ^zó}_PŸaæ_€ÿ¥†KþuÆœ xaf<ÑDO^a…™¹¤Q$fØM.Ñd¢Ž5y!‡R:Ò¤áÔ«!aÖ¤Op:ŇX2´_}Ûåç›ïÍùg ç=mU–ÒMÍ*1ÉÔ©TÓ\³27á vºÿj— ”Ïi©-‰#·b™hE'Sv•8©–txô±t>Öxú¨ÑJóiÔR‰.Úî·[µûܯ$ì–&£¡"Éš{¤ <Œú„´êWĨŒÈÙ%iÑÙåi"g¸f­ÛÑôFjÓ:M²SH‚ &uúL¢é¿+J(6«¤-Ëšrâê6¼YÕ›ètyï´é* §Ërʳ®Œñ¾ª»Îô’¯è"`§.®V~YqGB%{ˆ°muÕY3'À%´@Sqï,§•o½¤¦+¨¾'ìÀ½ûo¢R=bÞIâ&85Ke3 s⢞Ý ™ÈG€¤'pªOt¢”ÿ¥0å•û%mV©’ß?¨Ôšž¤É)IÓÝÒøÂÿÅð4àòjH—\=jà˜H¤†µ5ö@F#’¹‹.(D…0£X×úG¶ŠÔ ©ô&4%|Šü–Â§Ô TKqa¬zGÅ*úïw3¼áâÊh’§‡(ùá®D$Ä\IPZŠùžB0¢f0GLt"R´Ñ”õNŒZ¹býLˆŸ-¾Ê&œ¡ I8ÈGÒðŒî™$uÚò¯EË ,‰QÁ°E -jé$5¸ªó¡Jè“Z©„mcŠ MÃÂ͘鑴™Ö?IV2RíùE,TáƒW@îCIb$"… #.‰Ùžz¬ÿÉ9$Or†¢^sN—ºÕ=Ñ%TJŸ„ØG÷åI¢ÐàTÂ’ü1²‘cÜ%=#)L­õJYÄSI׋_ç™ÊÑçÎâ5kŠd#ÉC§ MÌè›å{b?Ô'õ¹ÐwF™lbS˜pJw¹#çþ|ùK{öò…Á¬d%Ń " Ñh›.¹@éH¤k‘æ¢uƒX 0“oŠSµ8X©KejCœé ¨|KÚáäVê¼Ê Ý&Èý¡4¥ :©PºêÕqâ3%.=ÝLy°Žè4 WºbãϪãôâP”i”Ҹò¸Ñ¶´%OX>µhåŸì(D.¢¦ð”ÕWÑ5OÿYòR¥,$Y­eV´†§Ÿhd+HÜ:¢ãt2§Ã‘®ðÊ7V‹Å(QËÂz©Vÿ@lëšCB5«¬#{KF±šÄ²v©L‡£<…¸i“ÒášçÎ6F9*jC•š.Œ:)UΧL\4MSoòÚ»=%n³^Whi&Çj%½XÝê–V\á¶u åÁf¿ƒ‘ê¥c›ãžöÉ£2³"ÉBfé.($Yô"K¥OFùó]]:©$M¢ü ÛãÅÎ%6)dUêÛÈRöŒ–UH1WáƒV„£G–ÜŸÀ†Š—$Ña4'W¹]À‚¡â«K|²1á’6%&˜‰çßr‡¾¢ÔÿŒéd/mKáß¶÷A’åjXá›Ä+Ç7ËÌà]üÔ{HõªX“NÊDº…«‘i~§‡?,å.½7ËÜ3á;,%¢ÂX Y“!§¢ÈÈ5µ5W# [¿¹ž‹¾çœIÜÒ9ßñ9z$ ˜±hd'--ИžÊ¡×˪CC¹ÊTžr¢«,â2>º²sæò)+fRY¼e† a1Ì5‹‘ÍV4£{ýëÉÖYÕ#à/eß”¨¿Þ¬t†­Rä)Y¼YâpÞj×aRÇÙÔîEõ ‡jHù #rjéj › iÜÐF™$ øCc ²mTm7δùôݺ]Ão{»Gÿt8öbÆŽÞö3m¶Mpbæ(¡;±»Õp”-Þpn »ÎX–/³£Cn&¼+ˆ¸¨OÅÑ[6ÑZ¥8o1®í}óÛÊW8À{T¢âL-äŽ É‹ñªÜä.§x¿/|q}ëí߬9Ó~—‚œ€—ù(hÀÅë/åçáöU[nô~‡]ÎYnúU-nï¼Ò·³ßÊ£½”Ï\Zb2Ñw ölË˜ßø°­ d«]âe’•<LS»ÚÎnrËûm˜û:ØŽÞ¸)/ò¬[‰J újļr£O<æ'‡|œ—nöÊ—õ˜'=ƒ IòNåç±{Ðl{Üç^÷òºÿIË|ÿ{à_øÃ'~Àp²{ä7õfcÊókíüä·ËëIGº{÷~y¾÷ꥦUXdM•óê¶èùæ¾äO}ì£ðz·ºirøØS…ñvÏ*ÞKŸyà’=õ•·<ÃÙÿlž ¸ë9÷£?l»¿Ö3¿ŒK?ýÛ?ÖCàù<#³?Ç3Àÿ«¾òk´T¿ \» œÃò? Ä¿ <: Œ¼4=„/ÕC¸DA |¼ÑË» |¹œ¼ÜAÄ:u± ô´ALÁ" ± ®œº|,­hB ,Á(4ÂÔ@šs@íkBõ´?ë+AÄÁ#¤>$dÀ+ÄB„A2CÿòûÀ5üB¥KB±ZÂö`<š!„@0¤ATC8´BDC3¼Cª;" DAœÁD¬ÁH”Â6ÌÁ?,ÃFTBþ³ÃK|ÃN?D\DI|¬ÓsA3<ôD7ôÄú«Ä1üÄÌÄ9ÜÄíóÃU„ÅV ÅTÄ-,E&”ÃYÔÂ]EQ¤D]ÄCbüA_¬ÃGDÅ4TE[¼Å\äEdìCiŒÆLÆB<Æ£YF³ÉBs|ÆWìFhüFkLGo”9rÒ6íÿ–=`°ê·nmû½Š ná„Ýž\Únk¨8€õ¥fŽ6lÝ€Ò>íšpnÃn kþ‡ä.ŠgxÕž„q¦Ü¢Þ°-æ=o¬EæÆå4†XñFØC€X{Hcé]g¼…À¨}՘冖֦ ƒ~b‹Æeún`¤µæüF—¨ípÿN€àyÕ Uð à`€¶Š7xUnxU‡µp£ØpWÅŠoá§fYOq_qoqqqŸq¯q¿qÏqßqïqÿq r!r"/r"·æ¤ðg#_r&oò¤Þ(Ff'Ÿr*÷ñä½ï@f6å¢M€K„ú~k¤Õê åÿÁ}b._g˜8îiVÖ™ÍdœuY'®r:¯ó–H^šu` N€]æe îœÖsØÝe@†äud¸\>'?·Ý7°c‘`è%èeÛ t|¶sN¯óä•e@×`Bf‰B6^ž¶å8n0odk°c/Ï\rŽÞQ—`àæuç^æåÍ àNÿu`÷‰+rÏà,7Þ0é@çé@oöQþáäµ]c×àptèmÞ>nvØá^voöauSaæç½}kÈræÝ‰f†äuÚœþ`-6ÞÐ…^3€mGuÒ¨fÛ½ïoÿw:÷c‡ÞFÎhs·åm¿tkàstwtÿ@ç]‚ô˜åÐÍò˜Mt@„~x§òïÆÍÕÙ4Þo¤…Ý÷&yÞw7q•h6ˆÙC`ü°föæ šÿxßù£HÞMçy z«˜s¡?z¤Oz¥_z¦oz§z¨z©Ÿzª¯z«¿z¬Ïz­ßz®ïz¯ÿz°{±{²/{³?{´O{µ_{¶o{·{¸{¹Ÿ{º¯{»¿{¼Ï{½ß{¾ï{ÙXKÀ|Á|Â/|ÃKH|Å_|Æo|ǯSPåT@üQÔ(½ ÇÏ|Í_|È—ü)µüR­|SUSÚØ|Óü$¥|1|ÏUÕ§ÔÒ?}ÙOüÎý½ü×UÿKÍ}£˜ýÙ¯ýÕÿüÑ~ØwýÖ ß—}â×ýNÝýãw~Û?SIþÓ_~UÑJ ~ã~=µê7}ëýSþÔþæ?­øþÍòßNóÏþâ_Õ÷Ç|õÏ|ö¿ýÐ×~ùçþOݨ,hðà¿„ 2lèp!·‡'Rü±"FŒ3r|¸±#H…C‚I’£É“U†<èò%A–SÊ”H³¦Ã›8êÜ)ÒgÅž@…ú$º&R„@.µÙÔéÓœQ¥NåYÕêU¦Yÿ%í:0ªQœakŽ•Y–åY•iO®%Ù¶¥×®`·&|[’®E¼v;îE©o\¹Oûf$¼ÿ’®á /Þ8é\Æ’·&¦Xyf㬗%>F™ræ«›=†®:š*Þ§®Æ z²æÒS[CLíVöçØ°EãÜÛ6Ô×Âuç½Ûôoਉ37^ùñÙÉ•»ný¹ôè¹[§¼ûöëà}k'ÝûrîêůÏ~ÞüxôµË7¥­5þRûu§•¯˜~~üí¤_^% w*ˆ Y šå ZþY¡Z²eámö'áwí…ç~j8 †#ŠUâ]&6¨âƒ,· ‹ÆxጾÇ!Œ7X£j(ò壇ðY…y˜Žþåâ†I6É$‰<:å”'Jùã•~eÉ— ÿ¹c•+†Ù"‡éuù!šBž©¦—kâxäcF¸%’PZY&kpNHgœvŠé'™YÝ0(¡…z(¢‰*º(£:ú(¤‘J:)¥•Zz)¦™jº©¦ qú)¨¡Š:*©¥šz*ª™zš*«­ºú*¬±Ê 몳Úz+®¹êº«¨µòú+°Á ;l«¾{,²É*»,¡Æ2û,´ÑJ{ª³ÓZ{-¶Ù.Z­¶Ýzû­²Ü‚;.¹åÎ*®¹éª».¨è²û.¼ñ6ꮼõÚ /½÷ê»/¸ùòû/ÀÒú0Á;°Á +Œ+ ;ü0«~)¢œ2VLãÅ6fÅÇ{ü1È!‹<2É%›|2Ê)«ÿ¼2Ë-»ü2Ì1Ë<3Í5s|xåL×Î[õ¼±ÎAó,4ž ý|ÕÑU%=ÕÒQ5ýÔÓME½ÔÔ@U-ßÕ;eÓÖ5u-Ó×,…­ÒØ8]´Be“¤vHlƒävGps$wFtcdwEx?Å ^|Óå÷V€g%øU„WeøTˆG¥8Ú;þ8ä‘K>9å•[~9æ@=óFBö pçM½qÀ‡üã9èP€€5§úS¬»žzS €ç¨ÃÔ!¤›®»è·ßÎ ð¢“QñT¯>Ï컃tˆ u}ý?‚,ÏQ?l €@B ÀL¦ó3oÐ÷à‹ïÓ0“ÿ¤>Ô<ÿ#ÿ÷ôeo¼ýüÖ·“y@oþÔ·A°Áv˜G—r÷Á/úcŸûP 0#öH€v66ÜP_3Òxïtçû¸gµ €/ŒáRÞ`:nÀ7”¡æ@€gø°0âN¬qk ï‡TKÀ<¸AD'>¥o(âsx€X#XÄ!P@½pƒŠù rf $1LÀ?úÀ޼{Ö@Bzç´<ÿÐcSÖù>éÇžq€gÜ1[Š `€A6òô‰ TÒŒ_'/¹„täRGN•$qãÿ 7$@Œ ‰íXH$îd‚àF'y9 ó1c—©<7 ˆ>æQ˜2±Æýì>cåsq € ¨¹˜.˜K7ˆ©Í @@+ÿèLŒÀò²ü-mù\r¤Ž§ €G €zÒÌç>}r¿  ‹UÞ@ð’÷û‡žÏè3•ûtßD+º”5v.£Ý í`PŠ~'‡ âo s(Ñ£ ôXI[Nôf’žÊ4?ÒC¹Ñ"½™[¿VMèÐbF‰K?îTŠ“%O¤BáÆ•;•n]»Iñêeûá@Œh=¢Í©Ð¤·®»FV aÃ_û’¤Ë×eÔ¨Rÿê}»ùeg‚•á†ýY._¿±Žœ×òFNU †Mêc‡‘q_eÜp-RÔ}Y#,=œø¿ÑG‘U¾ÜxrËV¡>­ê2tX¨ØV[,à²#…³ÿÌ\i¾ÁþòÜý™}{ãÌ}ƗYˊ,.ÊQ5ìf¦ØIÙ‘„H>äÞ~Xù³Ï>3E(a„6uà„bM¨á†J˜a‡ †ø¡„vÍ÷“s&ÂwS…°8׊‹1ÖŸU¢t`CØß€å9¦-­´B‹:ã±” W 9Sä’L.©d“PBùäxú=G\Š8aYš–Õ!…Ov†Qv[‰9VqƒØFVYÕ¥@ûÀÒ ,rÂÒ”Ž7e”|B´gŸ€þÙP•öm‰b}AqyQ[]õå˜-%†cn6„’€dYå"gÿ4ÓJ/ õò) z’Jª ¦6‰ªpH)ÚÚ•ˆÒÿëQÒ6¦¤ÙQª’¥;æ*fož äé8 ÓJ-©6´j²,-ˬŸKš¨ŠÔÆšeµ7U¥Ò£aØkK"ˆ©€4ReØCƒÙäé/ ý2*³Î>KO¼ò®*­¬†bkí›IwïznmÅQKϨcv½<™dd^e“>AÖRKDÂ+¯ªc\ä¿'Îêñ¾üêUm ´u—9–6±XcÂ`:µ+nÔ7?ãÈ9'±P–Ì8w6›±“C½1eúvæê^ýFdÇ&í\A~%$¦GÞn¤&›‡Í씂ÿÌf“IêôÒKÅL¶3q°˜#tÑoà íѦ%½ÙÒxávdT¹ÿ9uÒ)…£˜!uµfG_¶T•šR-6vÎl󼤨³øÂËœA')÷Ü›kN7i¦7Ò›‰uL#]­F+ÙßËÖ––‚Q÷ÄÇ®öxr=q9œoNï³ö’žoè 3h×vOßT¦W÷úCá†Û5Õi&l+ìÒã.¨E¶3gC—K>o瞣_|ÝÈß|³ªÓÈ~¯W!‚‘Aæ&T––D¸ë0³HInFíuª<+DZŠTG!½h‡±Z±»á%Ë‚Œ–ñDw¨÷-ê/ýáXaœ"-íˆ*XÙb^¦ ÉÄ&G*|]Jå)^У—D¤Äá'øAÿº§,ôψëÝñ–èÁ`©;_kÕA˜Ò2}åj-»U˜„•²ÔèW÷zXØ–9†„C€Ä4 AÐ"¥RŸH¥ *­ƒMäBl²¾j%aÐL0Õ‘I#¸ÙÛþ.â2ňäBNô‡Ú"VF†L#‹hˆ$@yısLU¥Ø>¦åQÇ™”Œü¨<ÞìÍÜðNŽXfÈCÖæ!S×Àþ˜†°glQªF¡É$¤ jHFðäJSÒJL¼ã)(£¯Ô#¤X·jž°©`\YOF¦E8À„R8è 52" P@&ȰŒ"ʉd_4Ý7ÿMÐð$„ÙÄPÒ8ö …1‰Ë^ö:•œÎvU)RÙjñ‹gô0rX‚ Q fá öåŸY(Ú-F‰ +ÿh¿ å \˜jÊ ëÈK1ô„L1`DY2A¶]ãŠp”ÐCiÓ“tÞHó©D“–²‰£3 ꢃ™+¢‹—ZΕ 2¹®pW…høäô‹qL̆° àá k©Rñù¹€J󩌪¿²U¿²HÄ‹¿šÞ _I£9¦#¡¥N‹¤@d1$HôØ$ÈÀ)4Á Ç+3—ZWh:uŸ¢9’hGKÚÒš€ %íBmš0’³µ_í‘<âŒÚÿÚÖ§ Á&j ÔÀp*ʰ…',Á ·M®r—ËÜæ:÷¹Ðen¹NKÝêZ÷ºØÍ®iíHæÅh"áß  ³+H…RRáYV…’Çf”O;ÈjÖV 5Œ"à€‡ptÒlè‚1ºYºÖQŸŸMð4õf:šd§0 ÉU c#‚Ä&†ãbhXáÛÅ"£1XA \q'm ñ¢Òèäæ¹…¸hÍ<SíÊO¼¾Á|{hLXÔÂPÂŽdJz)˜¡%ã™FŠ@>ÔÁ¿ô$ñˆj0ä=G)VœÙßóÀM½+h¡Ú´+~w~1»^U³Š YÿkØM‡ŒP›‘iœ#†É$\óò(.æúåüp×”6NÞèèW2Ô)6q°qzÑ„«{ËÕ«^b9a桵èÅ8¹$]!³ÎÀ².-ÒΖTÌ >¥^IH«GËî•“>SJ¨Ç&L# aä:Ž_ìLjÜAj…æÀ$eÌSY˜§2XMíA:oxì'‡cnÅfÂ}Kfó¨%–…‘ÈgÒŽ_Ìb¿¸“7Pp‚AÂ'°D“°L†wÙË­3=æ¼"*låNÀù• %°M!‰œ·6ËÖR¤%û˜E²[1 z”£Fè!NÐ (¡#¢ÿ@DÌêx׋³÷,¬g.ë£TµdZºÌÍéLdGbƒŠ]kiä—wp¼êÐø/ȉG0ÒžzŠ9âÁÜЦ9Áû9Ÿíl•ïE‚Sy±MM Ö¾¹2© ‹!/÷êkC©7Dîe=«Õ Œõ0׸à7&Êlº¸ W þ6ÆföhvØLa“)Òˆ§€Á`Ø—¢ø4¥Æ6$êä;DVúA­c[Û¶ÛÉá¼m¸¬¾oÎUx~åPÙ1è{S÷@â$^\ áÅvÐ"J©! ¬;=@/Ê«þÚ%Ê6׉âõ3§.Õ—ôG·v”|#õsÿí8ìw%»{¿×™ù˜4%¼Ó}ï…~~ÖÿÎm2 "8 Â&¯8¥Ãƒó-„×cý‘ &7C¢ò.êPuãÐ=Ð n£1Ųq°°ðp}7p§—h “"ûÇR;†ÁqÑÁa"=†.uSÕXñ{½‡y—·°0|B´~qÃårXmÖ÷jôgzçñuNÛ7~­Gv1˜!˜r9Rt;9ÁЀ´@¼ð;À=s‚ Ò`eŸ„06c27„hˆR'5E¬¡‚ãÆ@q:&(gh7C˜r±noGƒ6D >ð#€?GµD@EP¦Ypcÿb†B¸uDxF˜{¹iG–P~#g òW`s‡%{h,6´ #06`%Ð ô `+D‚°ƒG†¤'‚’˜†öx‘}IC±}Zea"APE…°0Vè Mð¡ð #@Uð -µ0¿Àp ËÔˆÎgmó—‹â¸‹õ—K@ÖwCñ5!!!È0t1˜l?ðµ O½0 =pŠ?'Жp¬Ðe(zàèwã}¨·„ iê8X<&UîèH$(9âH)ÁÀ °ÐA2OÐAò$P¼D)¦ FpÅ@Cãˆ}BRÓR‰‘¨†•˜}ÿÿÒ-£5rN•SC~7d,?w!S  %ðT@ pD€|pHPF0iw„3É‹i“\‰‰ºòAÿt¢+Úr#ãöŽ1\h;@,ã0"pŠr‰ ô°˜D'ëw•Ç—•òS“ I“ˆU×[ÅzRE8R¨f§…¸T‚Ýááà-°©Øê0©øSÀ;ð Ñn¡6.™1~ù—1'˜Ð7˜Úf˜ Yb˜‹ 3‡tUÿ#;‡Šð ‘@@ m ³à–½0³@|œ'7êÀ‘´  ߨ•øRŽ­I‰_i¾2àd›æX¸¤Øðÿ@ ¬  ÖÐnÙÃ7|ìù•T$λ€ ÆÀòÒ€ÉFÆW‹É®Iж†#”p´YÓPy˜¸àõ0 ;à@ ÅÙ¼ ž©è–±À'«0Oó”/f*oGAñ÷ŸgØáè•Peñk‰uK^E2‡)dR þð; pà 퀙8€™6ÐqP2\@ÆÀ ~¶jÉ">%Ç›|(] “8 „é Ô&éV0ØñR‰´&zàà€ p™6 ×lÃ%̰ƒÆiÏÒ; ­0ˆÐ`,§Ÿç÷r®¶•캢.š®ž%=ºK*ȘÖ£G׳ÀZ@_ GÚD€bªBŸ¸° b€@í¶@¤2bÿ`CJ$“d¢r‚°8±èª‹\Zs_Ú1ÿa\£5K0__&q@<ã 8Ê  j *pŒ0 z°ˆŸDŠŸ× ñY$da ? óÒ€vzåóƒ„J±k±äX· cª0ÝQ)¾THc‚“Dz€·pC¯€#Ðu·0 ì‡|7šã%Þ ñ ? ›ð ­G~J'¨É p“H·Bë«H ¦·ªQ0=é·bÒxÈ2¼g_¼À¯¾@°€70°ìâ¸k47$'¡¦q:Ô$Þà ÿ0ÿ° šK—§€sjU'ƒ×‹•«©º,ÿª®^z yO;£ë†+ƒæ× > k@µ7€` Ð_¶áS§9åp¯µp¶ñ °€ —ð ½ÖÀ £€6“Ä6À U('§«šh·¬  EH¾2I@áf “x®ÅP%ºÃ7 ¦¦7cÀ q bã94Œw7À ¨£ù ¥9šr"5` ¼Àÿ ˜Ð­>4Á§»¾×½˜Á…*¾V¼/°¹4;ç¢aƒÕ±êP­°¡6Ð Ê`8 ˆ˜  PÃ㡟µ¨(º$6¸qÄâ.³PÛ GŒÄ›ð P"|Ù ì©|S¬¥ÿl¨C{±««ÙgÅM‡K‹á4‡SQ; nÉ ½€™ÜŠ™;à2\û+¶ØË.Îð=LR k îb'¿ã£ðÇH ÖÐ$·µ` Ã×¼‘{wî6 ñ°ÁU|ÅÖ’Åxñzñ# ¯ÄfÑñ†Š]# 6Pw½`?P?€©8¼%g¼,11Äâ ä@³7ŒƒÉø;—CyÞÀÏñ,½¬`¤)ÁG|ArÈËÙ$ÍPÌÈ ¾á‹Å®;?m(i (¦“Ðì?±õ´*¸Ö >Ù¼Í\¸-p™áü¸,!*6 9$Q­Âø¨Ä  `Äò,ÏÒ» ÞО›lÄÿr9¾ňÌÞÃqêÐñðï0ÐAûÈ­[´É€”ŒÄ *•J’]ñ´“ÂÉ;`6 ¬Ã °&€§Ìr 5Puã!*B$1ì¹yîBÄ,ÝÒó|  ×Ëí@ÁÉh…ýL³üï B ¦FØðC[|&ã6Sû“‡aŒc¼¡%ÇÍþÚ&pE>SÜ ôtá01ÁБ¢,9ê ¬` G<HL3Ð òÀ³œ¡î™Ó<%íÌûðÃð×FëÁõ¡Ìz‚=#Áª) w–_Ó´˜ÂŽZ8uWº¡+°M ;tQ@ª`_†ÚF½ ÿl ¨Ý£0«í;ª…ìI|Ê·€°pÁ!•Ò¼Ô­ÁŒḻâÛKaÆ3‘S»9l•Šôˆ™=×g”g{¶7ˆƒó¸y8½Ò{ }€Ä`Ñ ôˆ˜c×ÊhÁØ;'AÒ—œlÍÐ÷­Û»=}‚2Øßñ,¨±nÄ&§]Ø ?à–­Í$”àz@ –„Iš$XÝ…C²×½ÿP½Ð Þ ÷ |qˇn{'K‹£ ú€}´ÆÛ€ýš½È+²)Á‚QãÄjŸ¼;^$ÐC PlBΛ´|fëÚéáÿ€žPáà3ÿp'÷\1WNŠdË¡›>TŒÐaãf®â-^zDí®8á3|UÒl»$”Š ‡ @ ë”FÒ°g …ÇÂá˜Àt°@î ªÀ)0 &pNþ—€$ááVØ€JnK‹sËWfF›)Žéb~-™n2ÉÝE½@':$§º>˰êóRê±~I¥Úp—÷Zw`Ýà”2PϬ`ž ª ÄÞêÀ…ýZw@2 µ@VÌn}©T4d–~Ì—6h^í w¨{PþÐàY],Ý…LŽ)æ ›D¿Øßܸ[Åu_æE¿ðkÁ {¤ >¿Ð…ž÷XUº$ÀŒÏwÞ'ìeªne—“Ѽà ÛpÈæpÏæ @˜ *8/šÞ‹uÆ}ôK!ô–^ðƒM:fúJ_Ð ÿ÷ïÚ=… ‡ÏçºlC FÓM2çz ŽK%OÁœl› Žã$¢òùˇ™¢Áòç†&8ŸSàÿ¥Èš¾º­ÿ^DOÐ LŸ+NõRï~V_$> Î'áà¸=¤b(Ä܃ )\ø¼ÌáA;lì€%Ð/z .T茡Bÿ$zóFŸ7lô$näè/¡¿Šô"räˆÏ¢?“I®üçåK˜0]Æü÷¥Eš9eêäIrfÏ”øhþì™#6¤ýÜÑVÂq?šöhÕî¡B^­ÆÑs6®« ÛýªÕ˽i”¤…{赕S«N[ÍjÕª×[ym´ ûÐáÂ`¼xÅ“’âa•/Sf “ž7|‘?²D‰/"Ñ¢:1Sf˜¹èfÏ/A;FŠ41ËÑ¡7>FêM)½»vFÿZµoÖ­]¿ö]«nÝ­}é©ãÕ¢‡º„q4µÑ£œ:ƒy_ø7aÖºÍúý™ípEš(]Ó|¬âÈ’ /ªÖÌ3rcöCãÇL½6ȱÁ_Y?´IËBâîªv|û¥œZv +˜V`gß‚¹­•ZÆù¥A«¨Û„Âr~h‡Y~ÈËœZò,¯Z¨KÈ:çw£È"ŒNÛ‰<üL¢h%DêÑ¿ø€œï³!E뉞ý$ºÏFŽ„,*¡‰Lò§G†Ê¡P¡º„ÃŽÃÊ2¡ËQ1ßZцêjÊÃÀè— û²·ÞÆ0ó˜D-§ò:$) {¬H# mé;ÿDUtQFuÔÑÖ‹ôQJ#“œÑtSgN¡M¡©¡h85Õ™Q6Ùd”SMµTg0¡á”VO…ÆL6ij“\[ÀA6Aµ…¼h µÖS7¡U‡†©å(Iñ«Ri¡M´ZŒ¦ÕvÛiçsÒ³oïËÓ $(©\¨ÀV~'A°¨³nÂZ:ÄPÅyßj·–¦Ú)ñ ò‚^áXlpœß§&l¦sSâÑ&? íÏbo1ÞèÛšJˈ>Ê赫ܪ –8 V±·ß´zÈœ^jS^03!sšÒù²¢Có®z ¬Mꮇ¦†áGÐ…Òéb>BÏéÿ„Ö‹ï=@­Þ((꺥̸YãÈ~R—!šeNYeÇ*Ëè…L63M.Q+ÁX‚)Óç zjÝ2¹ ޤwf»­#kÒã©ÁÖ k˜*»Œ½³WKhd‰,Mϯ'úšc"?ßèlå-]8väw‡_N!˜¡¬Ì‹9pø¡ð^Š}O0la { I‘ÄõItÕª¾I¨s·ì$;‡ZcÐ{ªÞúÑO?}^í²2EzÆiŠ+z¾\(Ëí2¨A^và Ë÷ “N‘ì”é'Œ¦¾þaÏ<‚J(µDJHjÌ’¤7=ŒíÏkÈP÷LçÀ*])|ãsˆùà׎ôY©vpòÐÿßR«8#+å Ÿ?ì'n¬úc`füg9†EI$TÒÇؤZL l ÃÂ=¦î]kÅëtG¡VÌî_¬ûv;¬Pˆw¾;XÂ6¼‘ÕcG8ìšmâ°æAéyúáÏ w86êuÎl>”“Š‚Q‹Wü`Á‰[ËZ4ãØf8 šÅ/ö¦—ÙéljƒÙ,z@7—уpI[Óøs”¤ïqŠã‰ 3#Ëo$š3Í %™Æ.ª1{l¼ aw¦ÙIm1ûE0¤’G«@G<ã p—P¥.?H“™z@‹M çhICœ?<öEoc:aHã šK‚'q˜›'—ÿJlf“t¤$__´´B :æCRçºÝd_MQÇ¿NdƒZ¤AkBÐW æ¢àÊ2ÄkIŽ4÷I˜D,€òIÞIÆEk” ]è6IiJ¬ŒsíðÊšÂò=ò°_ ‘Ê/^4£äü Åà˜ðN6<Ô?²1e:.& ”B]ˆ“ÌÙèŒ:Ì¡¡vZ.‡²¢×‘(Eß²U>£¬ÊFé!•`|ô:"• øv¿9%R¥ÆD¦K^:‘˜‰¦O³iQ^˜S€&ô™ ì©OGÉÍêç›á”èDÃ’º"îF_=›¨;C O!®Î]ðº'ðÖÏ}~,[&ùê5c"PÿÎ¥õI écÕºVžf³¡peÈP¯ƒÊ$µdu©Û:è‘3Aª´Ó Ÿ{y»Y-Šuy‡>ÞsÌÂ$>Œ-#KšùÉÉ´Ikp/ûÓ=i–­LãìŠÜX Xü äPÍl'µbº ©E.Á—´Í¬´8d+§ÀðÂù€HÕHRôp’¥¥$KRRµ3B ÷­¬5‘‹ÀÌj³¹ °_ |)öÎnæÊòÜ“#ŠÄt¸>ª{4¥É$ô¿’%Ô†?Tz–›"†à—ä× 11†ÌLdæë™šzÄÃqÍØÖ"ÍØ± † ‰…zàòÙF„(^dV̧ÿ=5Ö±ç”DÖ³úÇCj²Lyì@‡È»SpÊŒìàÇA˜\”£Ø ,\fgJ¯Ék%s››åŸ.½¢½ ËÌ›Hõ°w ,ÞÜø«5ż'2i^ëŸ;匹ÀpÆré°S—xÝ•hå”ZeÂæ nä¨HÁ­yðã^þfЗn€—+àE™ÀÔùÝ8"T:ˆ:< ‰¬U“]ä<.+©zj`ŸúÊÝc4±UD?¯DºW±u@ŸæSÙ1¹/†{›\_Ø­Ê ð°µWìo;‘ɆuXš­˜gG¹ÃÓþGµÕ]®lÿÚÔóîöÁ½=7VñÕø274iÍëu£»lÿ»&k¯ãÍfno»‡oVµsÅýe/û!çF7ñ®}5#ÏOŸî¯~åïR+<ØõNuó<çp3›r¡xOz”‘È zÔnfR•Á…è µy᜽w¹Þ͉'ÚPø=èd-St'ƒÜ²ô8ªÜs~ÿ<ÖBß4N\²gDëæV×½þu°‡ý0™BVÙÍ~v´§]íkßÄþöçR•ÂÖÜá~ª3=Ç:÷6¾Mþs ÿ6ç£5ÒyòEÛ<3g¨°í-uÀO}ða«oG.‡užTŽÃÙfüÈÞwŸ«êQúä$5ûf\5_:È;¯÷½Ó®£gÛßUnúÇóIoÿ¼ëqΞ*¯±ä¢|¿qµ­üã"Wúë™Oò§C^ú¥~fÆšæà+}ù±ïýço{ð ¾úE,faOjç7}³Ã2ík/þ[{þÛç¾öÓ_dzÿûáGýñ'yqÞó<Îû½øS´èã¿ý›¿›K8õk> 쓽›>⻽ñë¾ô=”6d8Ô?ˆÈ»çÁÜ@ô><ÀT>|ÀÔ¾$At:¬Àl9x;¿,A œÁõSÁö+> ,ÀôA4Aÿk:Ð#½ ¤Àþ»@Ä? ,Â$ä¾%| ÌÂ'$Â(4Â)ìÂ*œÁ+|¿lBêãB ÃCCBÿ(Ì? ,C8¸¤B5T«ûóB|ÃÔC9\@:lÃ/LC4„¾4C- Á:DD?\<¾‹ÃB4Ä-œC0LD)cCETBHä9!Õ˜<Ř?Ô+TB-TC=TDMTE]TFmTGl8‰ 8l’D0H„v;€LÕTNý8¨T`̉D „‰ðTUýJ=€Èš)õ(XýgUÕ@þ°TîðT5MU%9€ÀÑWUǘUb=€ˆÈÕMbE€ˆ8Ö_54mM½Ôh0€bÔJUl5€KTPU ¨ „6H×ø ‡u…ƒø8g€Q]½ 8| ØVX=5ØDo¸×D@€ð 8€ÿ‡† 8è×S] g8HŒ6€hø‡‹(W (X­WlB`X‡…X‰¥Øˆ†zÍØõ×̈Ÿ•Ù‡=Ù”ýÒ€-ØŒmgHY¡…‰v†‚Ô@å 8€t…IýWÕhxŒhÀˆˆ6ØZÕÀ†˜’ðPUx%ذї•ˆ8[àŽèX’ÀÖ‰ý(YzÀWˆÈWžhØ•”€’  Ô°qX\ý ‡ÈÛŒå[Žð[‰°ÖÀÖD(Ü8ÜÌ€i­TÍ…\ÈuÕ-ŠPU€ºý‡«Í\½½¸Øåž€ÿT´í‰D|H×»ý\ÄõŒ€¨ÝL€xXÇ•ˆ½eãM„¿…x[‰¯Þ¿U’(­µ[•-ŠÖ=×mÛ²u©‡U^º€êm[ðýñõ „H„ô5Ùõ퉗-ÕVgˆ_l˜_:fØüÝßÈ`ÛE€DÔ×u9|†¶=^À-YíØŒXÿ ^þ MÁ×ëåZ\‰ííÞïM`de‰þ•yeÖÞ]Ïh]Oõ xl(_Ø­_¡ÈÜ ®á•¸aŸ¥‡ÝáVu9Õ Ž6bž „0æ1€}\† .öb,ƆÿR¥‡ ÎÆÛA^[þýÛÖ-^E¦×F¦‰ðbŠÍd|h[×Í €ÍS`ÖRÖ[B[e‰pÖéõÞÕK×Á=[V ,öÞt=ß‘_Ïèey†D0XŸöÝ‘Å,nXcò ߸ã6ÈØ;FÝÐhÝ\Ûy åœXæØí`€fiNÜ¿-FelFZò›Ú;&„gŽæoçÌ0Ÿ½c,¾c ®çtîæ}ÆãÈàáþ)W‹åÕ!ùX†¦Õçÿ¢È`{TfD¸S|ø]Î`i…ÀVõPPõ†ÌÝŸkæ!ÆRæ_¾ÚQõèBžˆVõ‡³=i’FÐÁåT˜Vé)î 8ðPoðÐ:íé—ê݉~T¦nj§~j¨Žj©žjª®j«¾j¬Îj­Þj®îj¯þj°k±k².k³&ë ž‰>k¶në§îW6€øukº®kE…ëÏß68ßrEï%„åQ Wž>€R½ÕÐåë‚>Š@UdRÕTUÔLå\»¾ì­î×JÅÚ²EÎÛ€svcÎÆÏž^’í×ê€tMíÐNX8 ðâ©Ù€NXÿÒfbÌþm¬îWûí²e^‰hÞŒcý ÇlêÅÚöëu\’5n®ÝÛ©Y`6æÚNXnñöj¼¦nxÝZ¹ÎØ×åbÒŽcÒ~oÃ^Ü~ï¼öí‘Ùâ}o8ÜoÿêòNoæeÛµ IõÃÆ¹æâ‡…bgèWUucµE݌ב¥]ÝžØéE NX„pn’­ï‘¥^UßþÖmlðìæ€'íÑ~ØmPÅû¥nPeíÑ&q!¿êhh•`W‹æá6UÔþÝ;%Ž&ÕuÍÜ‘€ò•nPM#?áˆn‰-r0î~õí0/óÿ2'„°l3_s6os7s8s9Ÿs:¯s;¿s<Ïs=ßs>ïs?ÿs@tAtB/tC?tDOtE_tFotGtHtIŸtJ¯tK¿tLÏtMßtNïtOÿô©¼GQuR/uS?uT¿»Â\õÑdõÇÌ̳lõ§V<ú;PÝÎ 5P UTZo½­Nû´õ\Çõå„ucwõ_öÜ̸DvÍ vðÜu •vDíõLöh'Nf‡öm?8 ûöXugö =Tk9lïö[ÏÐeÏÎ@wY‡wyOww/wC=w|÷cwzOPÌ÷pï÷i×öz_÷Bø}Ÿ÷g·÷ }Ðj×÷ÿqWv U÷ag÷†ä÷…7øü Ðwxs‡xŒ'w§P’çø‡øŒ¯ø†çö‚WyBEøˆÏv·xí¤øby›Ÿø–ow'x^y…y—/yj'ö‹z‰¯ù×ùžŸùƒz×uŸïx–oúwz£Wz«gø/ú{‡ú”çyªçz¢Ÿú“Ox¬§yÿ {¦ûï ù¤_{¡{©wú—û¹oûº¯z·ú+…y¸—y¾ß{²7ùGù¼×ú¾§û¬—{G|¤üÂ÷ú•ŸüDü¸GP¶W|Âù¿ÇûÌ×МçüÆ×üG…ü´¯|ϧü®7ûÃGûÍw|É_}×W{ÌŸ}¿gýÿ²·ûÝü×Çù¥'}Ûýà—}FEýØ7ýЯuÜgü¯¿ýÑ7þâWþæ×ûßüè§þì'þ­§ýfÇþéçþÅ·þágþãýê~ÕÏýÚ_ÿ•$øùŸú¯û¿üÏýßþïÿ,hð „ 2lèð!Ĉ ÿQü'ñ"ÆŒ7rìèñ#È"G¬h‘$Ê”*W²léòåF“0gÒ¬ió&Η2sòìéó'К;ƒ-jô(ÒƒC“2mêô©Ê¥P§R­j5¡Ô«Z·r5šµ+ذbuVkö,Z‘_Ó²mëViÙ·rç¾]K÷.Þ«vóòí›t¯ßÀ‚{l ø0YŠˆ3ži2 !ù,Q‰w/‡&&&666HHHVVViiivvvMx¨nˆ®iвx‡©p±s‘²s“¸|–·z—¹}š»–EE¬IH¤[[¾PO²UT®l|¤tt»ihµhv¾p{ÃZYÙZ\×]`Î~AÚlLÝeSßf_ÝkPÝl\ÙrLÑZÙsTÈgiÄktÊmuÂpyÃ|zÍqwÌszÎ}}ÚefÐkqÝznÕuvÒtyÚxwÛ{{ãWVègKäb\ërIévUãcbähfämläsjässãywä||šuŒœ|’®y‰¦}°v…»~ŠÀŠÔ~ƒ¯v³nõ…̈FÏŠIÎVËQΑXЂAÑŠIÚ‘NÍ’eÈ›qÖ‚qØ…pÐ’i×–xΤ}Þ¥mÝ¥rܪyì‰Wç˜LåšRâŸ^èšUïœYðKä€~ì“hñ [à¡fì¢zï¬qì¯yç±ð¤bð¦ið©mð¬p‡‡‡ŒŒ•••ˆŒ¨Š”¢„–´‚½Š™¶’‰£”™©š›³… ¾ž¦¼¡–¥——»„ˆ»•…¬ ®Ÿ°¹“¡§§§£©½ª­´¨³¿´°®¶¶¶‰£À”«Äš®Åœ°Å±È¢µÊ®½Í°¾Ï±¿Ð»ÇÔÆŒ”™™×ˆˆÖŒØ‘ŒÔ““Õ–›Ó˜—ќۛœÖ¤‘Ô´•ʨ¨Ã­¸Î»©Áµ¶Á¿¿Ì°°È¿·É»¼Ö¦¦Õ¹£Ð°°Ð¸¿Ý´´Úººä€â‡ˆä‰…䊊íåä’“å—˜åœœåŸ æ³‚îµƒí·‰í¹Œì¹å££ä©©å¸¦å²²å¸·å¼¼È¿ÀØ¿ÃÜÄ®Ú˽ìÁêÄ£éÉ­êÍ´éϹéлñÀ¿ÆÆÆÃÂÍÈÂÂËËËÂËÖÅÎØËÒÚØÊÊÐÎÕßÖÎÕÕÕÓÖÚÖÙÞÜÔÔØ×ØßÛ×ÜÜÜÜÞáÞàâåÄÄåÇÈåÉÊåÏÐãÔÅç×ÈçÚÎêÚËåÓÓåרçÞ×åÜÜìÝÝðÆÅôÕÕåßàçáÛüâÎäääççèêääêçèëëëïïðòççðïðóóóþþþÿÿ Hp`¸‚*Lxp¡>{úüé .¢?{öþk¨ÑÞ6{·¼òâG)¦ ‡‘"ÈcfÔhæBŒú#ÈѦOž?ƒ´'QšFjLª´hSŸL Êd)sç¨ÃmÛºÍêDŠT)r »¬¾³öÀ‚…h+Mûî‹KPßSšvïjÌ«—a_…nõþ;”pV›gó&nûóáK¹BÔÊU$Ú–iÁV.‹siAŒûPŠ=:ñYÒQ«^ÍeÉÖ°[¿n­tpSÛ· CÕ}˜·@ÜõYž(R+K‘"aBÌü­,åå|ý*9Q¦õ˜j¯G»Î½»wŒÛ¿‹ÿ^¼U¡À‰¦WïÛsûï×Ãܦ¸øÇ‘^´s,åƒ-†G)æÒxÝ•‡à‚à1è`ƒãçT{òMøÞ€V¸›RÕ'ÖqeéÇV›%g\L ¤“Š>¡‹ã)ãw2v'áO2ß…ÒQ¸ãO$Ù%\EĉµYFQ”¤‘FNŽk.G [ÿ|5£=5^i]–ZÊÄ¥u7nè[Ž:òXؘ¾Iô¤OŽ¡ÙV½)™Ze•8gE˜WOª©å—](‚a–É™H™Ù›º9öQt a´IU¨ŸKôýg¤e…'f”Â7Iû´ù9ÄóŽv]z'蟄ÿ…èU*z桺‘äU…ŽJå?!„ÓAÆ=dßVÍÁ©N²µbR‰÷N.±TKË9[¶š ¶ÛF(ëŒÚ*j¸=»ŸF”ªvÆi†Ü±ô —IÍÍ$é¸ÿj*wÁÄr‹0ÀÄB˪1½:£ÁÇʹ¸Š‹oÄ™ûk¤™KqqmZ'WgݧbZ9ö›Tùé-±L­9^r˪ËÙz»0šàÚ:+­†éÊ«MSõB»ÛîÆG.û™L5}l ÏÖ½#pL“Ó2ÌS=µyß2¬ÛÍÒ\c½î…Ñ£ ™¶äK)Y*Qµ«q‰TE4*J…­Xe‹2]#I4ÿó9Õ²s5ÕÃhpØ8{­¸¢\÷hPeˆ+¤f¡Øm¶¦?É:Gg_ yb8™W¦dâ²È4FÕ@)¤ DµÃÄluá.žõâ[;üpîRôUnÁ…üÜs»§)rx[—oÅc‰ôó¢ÀJZuâøÁ$Ö R„ ¸óòìVW-3z5Cls­ð9°‡äÓu'Ä[mrH™jW,ÙI˜h••¨åsš:‘”$‡‘w lä 0ì‰;TÁ “ˆÊIêл_×€yÉò±“0“³‰…¶¦Š}ŽžŠÙ)=æÿ­8Š>n‘=Ì‹\ĤZö@`Ò ‡+D Ë0§Ëvè 4®sîìä37ÊÑŽzô£ ©GíRTnÎ]–;)Jíä®–†ô!ш*jÀ‰˜NÃ6ˆF 5„ NàBL‡JÔ¢õ¨HMªR—ÊT¤:I¤PªT§JÕ©ZˆwÑÙ½:R’c¦„?ba¦ˆ(“¹(Eæ&™IÒ€VÍkf3Û„QEÔâP 2ä0eèòœ½„àí°ŠI6 ³\/yÒÄ©¼¯D1%c‰qBM:N“±­´ Z@Y¬ªÖCd5È1†’åEdQe´°Ëä#–Øyÿîå,©ŒZßhý DIsL)§¬ÂJ{XÃF( ôW{ŒcÄ50² H¦£¥(`Ã×Ú«bt˜àL®$µ3¡ ÉS]^ü$5•ŠD&sc{—è’T(’hñzÖxD ½Ã‹4<KäÅ$¹[É‹Â6¼„ý‹µXŸtHEKÒXÄD®äƒxD{×qLöÁÀC»ã‹4D4ÕõÅ€ÍèKK&˜˜†}mV'¢ÁϤW^kHÚ`R‘¡Á©Ÿ~WF¨ÂV{\c.xåðàfˆÑ_c3VLe öXæ‘lww`¢œ—8y1‰ñ÷±l*¾w¤ÌNÜëê´dÿ)0)‘‚K|§ºi8­v·ËbÁþò»íDp'›"¹9Ž(r¢Î(?bÏQ·,É!§²³˜”Š%æ°ÁT÷€ÄB<ê`†(Ô!“srKX`½Sãµ¾X¼±=lPL©Ù*Å1— {%MG­|CI‰™ôdpª¯´’xÄ$#™¸ÒZ©®:»k¨,w™q²ö‰®tµÁ§l»%Ñ‹Hd*¶œ5=ÎXNÄÔLìökÆ›ÚDPyÜ o¸^iµ ¢v¢GlËØ!±­­Ÿb·”ø™Ñà Ț™œ–¤@A+³éìáÊ× LÞ1!¨A1ÂlÃM»À®åwmb,òœ¼Á7ÿ+xZÞp&ê)_÷Áȯ+µf_•lzö†|„Øa#Ý&Ç?­j«3䆵¸¶,Ÿo?oà„–Ôþ­.tãñ^¹GýD†/}Q%`«–ÔšÝÖw¿Uè_µ•ÿ|mkÿ[éæ•I­¹Œ®ÿ©ÈJº^^{K4¯m†.ñTûAvlUä‚-9û•kǽ?~tï¶Ðþ.9A Ý«ôÐ:áú¬ùÝÛÍdº0•¥<ÉÇìqiŠÛ»´à^7önÅd…Œ¶´ÕÎVCýòÀû]d §3XIѵπëp^K„ľWu ‹œ ÁïØ6ª1]ò¹Ê½¿2ÿæÝ®y“?‰Ít‰É‰[sa¦~åÆÓ6â6³Û%¸‚ D!x/3PE`}Ð\¥Z”×b¦`Ù¦e È€qrdFsçGõÃr£Ood"Îca%¬0!p7pà`šà(Ð*… ;à‡€•WmãWƒI·yR'wk£VÉW2b•k1BŸ}/QáT ³@%°Ã ä0 .°ÙC•€~f~6ˆƒç#|ý†jÁ,1qYuñL“bwÁÅRDÔf¬‡¯ ¡@V ·!Bà*—® …2ht ˆt¯6|$—ƒc¸eÿ8zC”f ³ByB>“F!þÕ‚SÕ"%pÀЂ£Õ HÇ@ˆÚ‚o?wˆ–†‰x~Š(rN6=±O¿¦%q/Á,Pçò ðö›`S ö )P|) ÑæŠäÁ…¬&~Ác±&†#ÍÔ`®æ6»È‹""n!ÃuU2›Þ€øÐJ${ öЙЂ)@µ÷@ßáÇv²H‹Ùˆ pá8w¶Ö.s$aÆk¡~ w¿µ ï(/ä@‚2€?0{Õ4 ¹ÀxÞ·…¼w¾GwÜX~µÈ’±ˆYV„‹<Á)γp¼V•ÿBzî’ò€Û€ ·p< äp <¯¨-ì ´€ «€kç…Ûw™Çˆß”˜8"D“xäLêGaÈÃÿØ @À;Çs³§{Ü ëð ¼  î %†÷J5às}–¹’V9•-9‹›gwZùDðYõ÷•p#Mø€ Ø @@‚$ȶ€ ¬ Fbô©õ Ô‚j™ ‚“—Q¹€| ˜~9h.i(™!doòs4÷q"ó&cïÀ7¶y·0ô i  ÏÐ_*#NCtöÀ ±ð& ‹4XšéWIš>Ä‹èf[afk)/mãOÕQ ²÷Jhÿ9φoðW‚2“ ±À2 9R™Î UuŸø™ŸúRþÁ•$µ1¨›1µ 9PÑ0 Ó {ưT¥]`Sb ÓÐTGå 5 ™¸¹ Ú¡úTû¢":¢õ’£ù…p7‰öÐoS“]åwhFn=h<Ðð’âÑ›¿œi€¸@ Àð™ 2-> {³—œ±”Mé=°2ƒûÖ—Úxƒ'ZŸ>2–8i¿U†ÝI„TqiÌÐ ?=P¤0@Ò%•i™`ð:¯$¤ ÂAàÓ8»Y—¯„—iÇœO*{yšÍIŸ|)?þ9/šQ–Ó&*’ neÿ°9à0P¢E#oÉ ¿pÉùÃPPBg°MÛQ-Óònï`(ã¦<r&ú—|J•¥|‰wÊ‚,Å' ÁD¤T\AÿPÈ ÍÐ p,°` “~`€ß8h'ªbB@ XbxÓqQ3yNªI­*š~º§¯Z¥ju«É‹î·BþDñòë€ Ú@›³!Bç` ®’qþRMOà 1 6@ ›0 ±à=쉷ðžQ À Lš”z9ŸSJ¥ ¨®ÚeÁB®ýy«Ìb!‘Aâô€ è`´80À±c¯øj{î6’  þJ ÿ± 60ŸŠýB „tx9yhwÛª•áÚ§PŠ´¦©8GJñ…J;Á^° '»ªwû@»€²f0Gà@¬ËÊ¥Š ©fª¯” liÃ@ · Þ ÿ0ÿ £ ¤£j-,S Cä€2ëxEÛ>ßÊ­UÙ­«*œ÷0{W"a†RoÃiq%8 hÐ và0Z×ñ·±P´P{C ð’#ÙxîV-g §ð@·Ÿà Ö*ª‚Ó° kod§§†‹¢+¥Ã[±^&wÐr©ôX+帹/áÐ ký— CРŸ{u™ îé™Þÿ{'5›z æð·`, »³û«p:Ö¡s@P-@àC›¯ƒ{hÂ˪AD¼K›U;˜€$B-± ßÀmäå’±«¤´háÀ¶Ù1À¹6 ¶Ìjý;Ѱ©4Û¹0­Å°©³2™Åì۾ؿPƒ–¹  EÚÁD’·p ¨v†°Z¼Æ›´‹Ã³&I\´^蘫¦®`aá ­9@‚+ûi.kÔ"5ÑPœÊäP¤ÓúVæ0Ä€kÂÆí뚺ººËsôk¿I™°¯´›[µÃü»¿G ÇÿKp>lsèÄ®¡“ÎÑÀFBC"­h 0ÀN|¯ÖÑ/Ûÿ4 Ã2axhÉÆ k®Ô»6€'Æt뎱€©b´¼»»¯X¾ì€¾ïöÆÞÇËêœÃ@À|⃌ækœÄ‹¢Ô) ìOfÁ<@ „p( Ü4(C 6´×Ñ/¯“ ¹P¿·©®» £Éšì¾6@…"ü|[º¢¸øk$ìz—’Äç¿sœÊulÇ+Ë9AGúc¨4I?Þ‰iBP£0 (·D¶ÔrÍ©¦7Ê&ÔR ´=p>P{ìP ÅÀá ·bÑt TAÂŽ¹s@p¿k›NAÛÅö@ ¾KÎÐyÃ:ŒÎÏy‹ËV¡¢‰ŽéhVÿqqæÿð˜y-p¦ß1 2‘:ˆ”«W±p–­œ-ѳ۾ aÑõËsh×/ãÍ]É`7v"]¸FÛ¿#MÇqHâ¨(Q:Gdí—¤$(¹à7€”¿[=ø¥_@ EêBp×g-»€ 0 u€À UxxÛì·€‹ÁÖòɃͰcÃJ{Ò¬|ΈhÙÕæB is(=¿a76ž† B ”óð– ~` A@„ÄE ¸Àá<ÓL·˜í{¦ð6 ˜*5ÙêzA ´t ƒ‚ÄÐnÚjñTÒ—ÍÕZ­¿«ü5¸3Áfgmà¹x#ÿ){§Ý’ : ’`dt@ ­à¬°Ö ˜ü s ØZá ö™Åí¬Î{€(ÙÃD´Ùé,ǘ ®}QÖÀ(PïÐ ‚@ÀŒ¦ét-”ë~hGÉOÎÑÞ'k³Ùç‘Cþ§$3JaMäÆŽàÀÞßðZa¢qeœÜ! Ðð pÞ ²E͵áÓ0â Ñ€ (€Ÿ€ ›~e›4 l-ËQh ž†Çñë~Ýþðgÿ-¹»5Ùÿ^ì2?|¯®Ä?tß H@C€÷ûãí“`¯yéÜ} >@­ª „|×ljë~#_ò'ô±ë%ôç{Þï ÷t„^ó´ò&}ó6óAñ†É~^fFogç‰= ‹ â`¯ªãÝWvà ;GÃEJâÕÂÖ½ÌÖîÞõÖAjâ10 äÁÃï5ö9(u|žó‚èbOö*ÙI†ˆNqׇƞ­ÑÐßÞññÆe ÕpÁ®7á½¼*EŠ2lÜ/²~ /¸1Á°Ë6ŽUùuAB>¹—Q_ÿÃtò¤<œOìm¿•(´Õ}ä2 ýäPúó{úHÿšú¾ËâûJFmK @ð™l›¶ æÁ7mòI vÕ"tÐK‘ ñÜ7±|InrëlÎëúþ $XÐàÁá.dÈPaCˆ Fü§o[8}úÂm¸p"EŠúìéóΞ½ƒþN¾£k˜¹\±€¤Y³X,ZäFµ,VÓ'°X¹È ÃùÎçQ{œ‚šÆã[BnÜ8—k*0`Ss!=æÍœäxÚãèOã6”?.$‹Ñ^¸µÿTÚó77.HŠwñîMÈw¯^¿$ÛÑbZ„ƒŸL(ÒŸÁ¹æ‚ÒŒ‹ëI ±jȼl¯2͘æ:ŸTÕ2–ÔB*óà1ÌÇ™ö¬¶6ÿÚÙ+æXäN’ãÌqßI“y#¾¥ ÷qAÇU*L9^¸Ñ¥O§^ÝúuìÙµo§¾íbtïÜÅc~ºÈhÑPÕÈ”~š ÓÒϧm'N£êï‡/?Z¦PÙoÀi>É„Ö89†VqŠû`˜ª†ø“ô³¯N¨¡f$¸ÊÏ:E”î»GTqEë„kN­!zn ‹0:«£ÄbDH$’LBŒ ¹Xr‰œ˜bí¶Î€Ê…©¢F³IÏxp)zxÇ*Ø€˜Š–"mû 'rÄŠ¥'ŒäâÑņx4‹1ÈNª 8%Šó¯9=ªS°½Èò-9ïˆ&´Ž+h.{x«¬Iÿ'¡äªÓ*Óͧs‚Ée˜wØ &JO:ÇÖXf*§šJˆ`bá¤Þ•“sh|ÂH}~c“F7ñ®&A‘«I#3‘F`}ÉOç-hF¿˜ÅõØ>‘ÍH/Bí±tÒÚuÒUs ¦UŸ ­LÕ6£¥¶+c±¥Óœõ)wiñIHÍrà VY¬+£e÷ܦ×f¶!³H øÅj”®?ýý±NgùŠ:eûªø`„ÞÖ'E7®IÈ—¨ôaTºü)¨X¦Šuª„‚µ`jR’œOŠ+̱6ˆ,ºj4hb€þs¤5RÓÇŠ.š–#d…F³é‹†1cÿ¹ê¸j{$ÛªP|xÒ3Ë|úÌ)b Æ]œ€‘²¦Ïž ¨Gy‹ à€'Ú¨W©£åK%cÓ-•˜Núá8óÖÛOÃíŒz!±¾ºj­wëúë¶ÙŽå²c‘ì†(mJ^Ê.(sàÞ3—ý† ²ð^<0¾YGéoÇ £‘OÄ/ÆXÙÄs|=%¬» ~Þ–†!²ëaF1Yf”UƲµa~à!fWƒ¢Ùf0Åì)uÖ½®Ÿ÷ËÍ¢+"é—vÎÞ}ç]|¨©ž¦ÇmÊe!ny´&q+ƒ ˆÎZ1¹Å0Úõ.x±ÆØŠÔ-€P.{ÙãU±šMÞ4¬ì `ãWÿÐ&…$P Ûá §»ö…¯b)T!ðæw’úa5SáÁöjr­aC> èØÁ©N}*T¢"U,€Àq©æ4@À'Øá*|Uð$ Aü%¸díÊ‚OÛ‘S,‚ˆZñ[!üîÄÂe1î…0ìÌMxƒXœS>xbªŠW2ÎÐBJ ê;°„­€ &ȃ‰Lt3íæM|Úˆ[¼ÓB†¨IŒ\ÌÑΔFÝ验›|Ÿ•³Æ¯]g`Í;xã)®DÎ+•Áj#„Öh)6YBä¸öƒÐM£zq“ÉFp¾G&‹»cÈ­’#£æÄnh̤Å8IFhFH Œá(Kÿyʦr2«¼\\yXC–˜¹A-'Ã5¯¤2H2]¡zƒ£‹ü#˜&sŒÉ=ÅùE™ÿ¸•3›éOiBÌ“•ß cèF8ʱJÙ"žK”ÇSMi¡ÌÊ r²ãŒH†üRXÆR–À¡¤‘"™'@wdÉ~:äEä»dÿiÒ3ô„m\Õb(Á>ņH1”¹ÚaMu*›öÈ©Nw¨ÓŒ ·`Uõ’8)oP1žr¹"ŽHº>„ø„nÊÉÈcœ–0MrÕ`|fîÊjVÔIÅÈ-„`‹r8ÉR˜ÊVºàZ“\qk'Áa¥‚‹ÖkÅ-ˆ~ìóO&”ž¼cBÿƒ l!bœbÞ$ IÊŽ1¦2ÕaJдÎï¦jåÉ„R³sÑD1HÒ"¬îe.oz §I—Ù´ºéY?¹ÆÑж´b [4BC[z¦µ±Fpלc.Ƕ¸:ŽbÙ7]²ò¶·mîp‘ܪ±rtšCî9• ’æ&FÑ­íïØÛyö³ÛEkvEMï /¿´jëZ¼.7"¯õeŒfkì8WõÕn|9ÛY5vw¿ôÛa±S¤0ª2›ÙßQ+C ~àűÏ}QfÁ8Yau•baü•}¼YØ»¤p(G“™Ê‰+Ýr"RúºÕɆãJ›SÁ¼Úâ\ÿdŠ”Šc¼ÛC9ÊrÁom|DæìHÛ² K²`Gv$1˜×LùsÊôrM=Þà¶rÛVp»,f¯Z—Ͳ3ù4«Ò—ÎwÏ×õ­”Kã Ë9‚tÖ–“îì«<ÿyÐüD e/HÉL¦Y¾›ÆîŒ…kåÑfyLuæ2Hfë£G7+’cŽNn§hM?øE±.è§k\£®Ñ£I5‹yß—‰-ÀQ²f/‹IXwzͦi•o]a¬`ØKŽ–­Fz—¹ ²IñX©\“°þ“ÖOžô Ý¼18;ÎÊl¤¶ÄUÙ–Š¥ëK³ûÈÍì{ãÛÓÃK·M×}åË\ÙÿE>–BR‘}¦´},bxÃþpˆ³=¢xÅ-~qŒg\ãQÄY„¢ ªä&ò8ø^ïYË:嵿÷ºûíïvÓÉOnr °‹‰Ûx«ÍÊsÏ}þmDï÷åo.µ»ýrìÛjv> ÷ÎUN7[ÂÏvyÑe^É-D#6p™éôB—ÛÁRz~‡Žn«¯/’<¸ õ-nžšÐ…>7©Aýo;«º’,Þê¸_ê÷eîÎN4ÞÓÎdyóÝÞ füÊQÞÀß¶ìÞ=»Ýy­÷µ£²‘ÏtÜçÞxÈGxòíü®;#p—Ê;ëMÿùÓ¡îz£~ê…¯zÌÕ¾¤½õaÿ»ãAÿz–ǹöw·=âù¿{¾÷¡'»­iOüËÇþøÒ‡;ì¯>ýëßwöB7|ñ1ýyì þñÀ?ù÷-|èS=úÙßýÛÁ^~ê·_üÚ}iK¿eïŸ<ðóø¿¿|æ ­–K¿ç;=äÛ?ß«>Þã?¹?És>î>Œ¿À t¿ LÀ6#¼$@®@=·Ó@ùCÀô?ýÛÀí3»î[¿Û#AóS@øc¿ A ƒ@”À€;À,A4AdZ@¬ÁT?"ÌA tÀœALÂ#DB!D¿"ìÀ ”A'¬B ¤A lBsãÀô@¤ASÂì?Ô tº3=),@ÿ#¤Â,4CüÁlA¬?.ìÂ)¤C1ÔÁγ>=´B TŽºDB,DC|“CLDELDÜZDG\ÄF\Ä1ÜC8,ÃJœD@<Ã`¹®[/?4¾8¼DL|Ã?ÌÄ%¤D7 DR,Å+|Åk´DoGp Çr\GvLGh¤Æm<Çj„Çv”Çz´Çq F9L¾O|Çy¤GwFr È} E|ÌÇoíS?ýS@ TATB-TC=Ô÷Z{˜Ø$^Ù"ÙFÝ`j àÿ­Ý‹C€0šØâãec}8ãmxTÈÒ‡XÑô ~E]%€«Mbßýø×Çá ãKUU?Ža¾½WP=€íX0t_{=[÷mÜÀ˜Ýp}cÊ­[Ú­âäÜKžÛÞÚÙ}ÞNžÞˆ €6ÎØUÖc…À\5Nd‚gµeÁ2ƒmShíÞ®aá¡e„…Ú9y^~Úc Ö‘3by…ß“eßÀ¨æ}¥fžg~&Þ“­c˜ZŒ.&žƒŽáö‹Ù%c€í_õ½Ý>çtnå€_Õ-€wfZÜ»Z>„3FgwµgY†ˆZ>cÿef„„îg„xhe&^jhÐL=~×PÝØ^“‘-iZ5€†æ 6€6é2e„6Õ‡âMÙaj…ºVmÐF Ðw.ˆ(^R1.à™[RÅi‡Võ‡· jŸ>€ˆÑ‡íT¥&ê%Æ‹:hÐphÐ5½ê…ØjuŽ•FT³>k´Nkµ^k¶nk·~k¸Žk¹žkº®k»¾k¼Îk½Þk¾îk¿þkÀlÁlÂ.lAá‡HbÃ^lÆnì°FYÓÕ_ÇžlÊ.lµéÐ_tfÔŒâC iZ&ÕP¶êùýÖ%…ßFEìp8UµäRÕUU¥TEÝÊ®mÛ~lHÛ¶=ÿÜ~¾Z XÞî^”Ùïy=îßvØ:@Þ6¾Ú“€âf‡î-¾mîîîRnï×ëo…è^ÖþlïÝä=UÕÌfaòÜ«%YN`öfàÔ«õnÿþo„¸ìÈÎW¬Í쎭Ý5îBnŸßÈY‡-ð¶%ß>Y’}^€ÆM`ïpðn[ë¥Û¹=âk­ƒmÈì5¦Ø/ކ÷îWÝñŽåדÕÝâÆØî5‹vX›öp¿m7ð“ ïF5ñÖðâÞÞ¾^pqðîíTþßànÔ+æ×ÌnTåîCàñïòÚîè´¨WK-Þ&UÿÍ-Þ—®éïéœvU2'ÝÔžƒ´héNíêíör<ïr½ó<ïs?÷‹C ÚþsB/tC?tDOtE_tFotGtHtIŸtJ¯tK¿tLÏtMßtNïtOÿtPuQuR/uS?uTOuU_uVouWuXuYŸuZ¯u[¿u\Ïu]¯kgìu_ÿu`vaveDc?vdOve?vHèÓzkÏ™ìA%}öµÏ…XvlÏöfçSjßÎÍLíŒÎôä‹l/÷dßö=íöøìC=U÷uNùŒsŸw@÷vçvgÇw}¿÷}o&z7w{ÏSwMiçÇtïw´/÷€Ÿv„wøÿƒxƒç÷ZxmÏ÷ˆÏø„—ø‚ŸøL²xloødÓø§x“‡x’×_v‘÷ø‘Oy—ù’?y•_ùsÇxš—y”ÏùŽïyd±ù›çøh÷ùòüöÿ¼Ïzdoy¢‡÷æ|z¨÷¨ ¥gvœŸy¬×ùßz®¿˜ª7v¦zvçy±û®ùŠùúz¿ú³oz£?zh7ûš¯ú°—{´wûzµv„Pûº/z¾'нÏK½ü¤ÿú¿wz©÷ÎìO¤‡Ï²|Â/|qwüõ„|»¿ûÌÇûÀ|¸û;i‚&¨ÆoüÓüÓ÷üxOý‚}Ò_|Ø7|ÌïNÊ7}Ö'×/}ÿÚ}ÙÿüjWÌÞ÷‹ÜçýÛ÷ö¼'þÊ/~ãבá·üË÷ýå~åoËȯ“æþÕ·ýäß~îß}ägˆëŸ~ê—üÉÿ~ïÇþÚÿÑ×ýó‚ßüê?~óGˆðïþówÿúÔzýçüÎoýõˆ,X0œÁ„ 2$ˆ°!ĈJ¬‘¢ÅŒ 1jì8£G CfIra“&õBšþüú÷W§_?€ 8 âùGP *¸ ƒ 8PƒJ8!…å=(P…j¸!‡É]øO‡!Š8bƒ’x"Š)Þg¢Š-ºø"x,Â8#5¢Ç9ꨣŒ;úøcŠ=9$‘ Y$’I:ˆ£’M:à‘OJ9¥{‚…[Q¼õF™mŸaÿ9ÓaŠ9&™ešy&šiª¹&›mºù&œqÊ9'uÚy'žyÞéÒ…õéÖŸ€Â([„¢eè¡´Y„èXŒfå裃ú))¥ŠFéU˜.¥é¦•ê©ZœZ*¨?•ªÓ©¨‚š¨ «ŽšP4…ÅêÖ¬´ÂU+[¸¢¥ë®¯úú+°Á ;,±Å{,²É*Û‘R€ödZ@Ûe@‡\õlŒT´úd¥OEC­·SÍa€t@î^uˆû¬Ö.U»ì†ã¶©ÆDmá+-NçfÒ³øóO40rÀê @Íø#ÀŒÀZ8Rúr1µYÿà°?ÔA²¸K ð²¶s @Íòeó6ÐÚ#òLuÈ€=@ÍÌS 0G4ñÄۤˇÐÕ!8üO»ÿ´óOhëQ d€ÀEó§ö,üóUàà#D@º?é3@8ú+ÎS °M8ó+Ðá*€´ÏN€µðëîØ6E£7Ø{¤Ï× ÿ3€¾K<@Þßê\TT|³@ÝÓúh¼xçKQв´XOÀʇ°-P·ÛV úÃÛX]ÔÑ”,:é6m£±?O‡Äü?Ô#\”Öè“ú?u¬î7#ÃþÆK PÇ6”¯»¶¶EÙÿãíÆé/ôRÿsÈŽ×=j\uÿàÞ68÷´Õ!9óN € ¶m Ü;@ŸZö0ð `V×Cžç~R‡?™maáÀT¨Ut‹s|[ #ÒE€h bÏûÉÖþ3Ü À5ŒB$W”2¢]¼ÛÕñ°~îk»›ʵ”äìÈÛJ¶”ˆÛ`Çr¡µÌŠíã ùîÖº5N…bœƒ=°®šªYïzŸÿŠÒ2³Íì‰QÄ ÖFÈ?ø#PE¼âTF(¦²‹€Ck¤Á˜Ï…£]²1ÞƯîËž£F»f÷Fàj]õ[Š=Œæ¹CnPsí’V@!ù,QŠw.‡'''666IIIVVViiiwwwMx¨nˆ®iвx‡©p±s‘²s“¸|–·z—¹}š»“YYˆcc™jj£CC¤]\·LKµYY¾_`¯gf®l|¤xx»ihµhv¾p{ÀNMÂTSØ[\×]`Î~AÚlLÜgUÙrLÖwVÈijÅltÁsrÂpyÅ{ÌpuÌszÚfgÐkqÝznÒtuÒtyÛssÚxwÛ{zãWVègKäb\ërIévUägfäsjättãywä|{érqšuŒœ|’®y‰¦}¶{ˆÀŠÔ~ƒ¯v³n̈FÏŠỈSΑXчEÚ‘NÍ’eÈ›q׃pÐ’i×–xΤ}Þ¥mÝ¥rܪyì‰Wç˜LåšRâŸ^èšUïœYðKä€~ì“hñ [à¡fì¢zï¬qì¯yð¤bð¦iðªmð¬p‡‡‡ŒŒ–––ˆŒ¨Š”¢„–´‚½Š™¶’‰£”™©š›³… ¾ž¦¼¡–¤––º€»•…¬ ®Ÿ°¹“¡§§§£©½ª­´¨³¿´°®¶¶¶‰£À”«Äš®Åœ±Ç±È¢µÊ®½Í°¾Ï±¿Ð»ÇÔÈŠŠÆŒ”Æ••ׇ‡ÙØ‘ŒÔ““Õ–›Ó˜—ўؖ–ÛššÖ¤‘Ô´•Ì««Ã­¸Î»©Á´´Ì±±È¿·Ë¼½Õ¤¤Õ¹£×·¸ä€â‡ˆä‰„䊊틋åä’“å—˜åœœî““åŸ îµƒí·‰í¹ì¹å££ä©©ê££ç´©å²²å¸·å¼¼ó®¯ó¯°ò·¶È¿ÀØ¿ÃìÁêÄ£êÉ­ê͵éϹêкñÀ¿öѬ÷Ù¼ÆÆÆÃÂÍÈÂÂËËËÂËÖÅÎØËÒÚÙÈÉÐÎÕÕÕÕÓÖÚÖÙÞÚÓÔØ×ØßÛ×ÜÜÜÜÞáÞàâåÃÄåÇÈåÉÉëÆÅåÏÐàÐÀãÖÊçÚÎèÙËåÓÓåרçÞ×åÜÜîÔÔïÙÙôÈÇóÝÉõØØåßàèáÛóàÏþíÝäääççèëååêçèïëçëëëïïð÷ææòòòüôôþþþÿÿ Hp ·‚*Lxpá¿zëq‹±ŸÃ†ÿq³ÆÑšÅú¸‰œ(q#G’&Gê[YräD}5ÆTf?ˆ1ÎÜ)P'Ï>f *t!Ñ¢ "©t)Á¦W¹2&Ôú*¬×ÑZ½]­qc q¢Ë°bq^,H1æ¾·o?bušq*Ý…vï"¼º”o_½?ý",”0A}bWn™V¬Ø­_Kj;i2rÞ½)ÖÛ÷¯ŸçÏ ûI í¹éÓ¨S—VͺµéÖž f8›vm«·sæ6¸”ëTÄŒëiäjMàM˜;2~\³*æ¨_£î»©¹ºuˆÍ®kß®9;÷ïÚ½ƒÿ—ËtwOóçÑÛ6o˜g{¾£Š]LüqçèÉѤ¯ö)VÓÆí“xÖ‰GàH`‚Û‘‡{ê½ç”„åA¸u0§Ø|h —•H.·ÜW"•&€éHÓ)Ø‹Â#……ª§Û»‰ÆM ÑC] W_G-¥„’ ÂGßT:5·u22(cW‚gåu@Åã—:úælzuYBZQ§âŠýœh Xó™´äIŠ!'‘ijéDåkÜ…ÓË7ëT·e– J(vv™Ô˜¹áX”£kÕF]›Z-td4 ·_b\-gÍdIôæC$¾¤¢EA9·§fëÄ’Ê«¬Œÿóâ¡×z¨­)º^£†¹£…døãŠ ©éãQ1v–cr´’W÷Õ3™p¤¢JО¥]—K*¯ì‚K*¬Z(­µ’[.1z¤éªKWV¨^êPYÊž _§5«\WÏR«âK¦H*K-^ÇJ*âºE¸^ٰɶ»»‹úÊ›»NMJ’®ðÍQ—m>´˜’nt™f«ø[ÁÕ­nDß~ð¹‚Ò\3ºîa Å@õŠÐ€ ‘™AJ"€7‘d“o¶§œK*-×gbž MÃ4ä²Î7¯¢3³Íã’]öxóª3°ïÕUÐùd²aýب”AýR“`™ÿ…wWMV¬²t«Ö À¡‚ A¼Êˬf?\eÄ9³­¶Å21Ê•i!IHTVzU™ÓcÁ©¬Ç×Ý7Ò¾u%E,CÔ 4" E¼‹/7GnöÙßÁòåmcž¹å"måÑ`hzh’g$OEI›O´¦MeÅyRK_éã ObO‘4 QÔ#OïdK£ä ¼®Ï˜óüœAÅuÕ™y(‘6&2˨ˆ´½êùë0)‘“p(‘¼4eUÓ€À"Χ„4A Æ›ï~Wø¥m~k+žå6×{$y?ë^eJâ!Nég>öÒȲªlÉåšéÆ"`»D(! $ÿ<›¹ÏE¬œ—è+ûý Ùÿú'*ÀQëHžRNnò´9å>vÁa=Б‹Xðˆƒ@˜ð„AL#d8CivD%±g–aýèw˜J¡°hRq NLç=ÄX1/pÒÞœ8F‡Ül¯W5q74a ˆ‹†××AÖqFhS"ñF&'N±6~©‰hru"‹œDt­3N’Vg–Ò熎\ÇÁxñ WᢊˆC²ÐˆØ k˜£¹>¹ Êᑉz´˜)‡7¹ÅD^"³[’Òr’üæN‰„Vgœ5´ʯ ýG*b‘WÕ}h ¦à„/C™äb¦–œYÿ!h¢•. ¨@JЂô  (àÚżEMN3|¨-ó†Ð¬ŒÂ—hF3žqƒ4£ E¸&\A£(M©JWÊÒ–ºô¥0éKK•КÚô¦8Í©MûéÏŒUdc©È*?–4ä§•²4 ÞZI{pñ€ÇKH?t™ ^ú˜HD4 ñ;tC}Ä`ƒˆÁI#r°“8{&)ÿi¼ižó]ÂÂf±PÖ¹À%M9ˆÜÈß&jE\Zª߸ \@U ´Kc4Ôw!r!Že]æYïÈÓh®•—] ¼4"W¼8çHÙ;½±Tq¡sú¥#Atøj=¼ÑˆDÿ0b)FËŠÆÞÓ¬žägŽ2«· ®§Kјw¢!°L…‹6¤ˆˆƒ·rBNQT?tX;i$B‚Ú¡’ÑA8Ò¢}“®òÈÖ=†°(e"Oâq~(©5aaGð1ºWî«1ò½VïPÆ\È!}×±îÙ ÝÚ½ÁMkeÛ‹\öÎÆ”Ö, }C­ûªÎ_é›ûáßÅ„j8PH?¦Q‡DòrÐÎ1„h -ñþe‡kÙëȸn•PsM&KPÇzо¬ 8Ž j³×ë 7X @€‚*ÄvtK†Çþ¸:Vo¤*|ãŽ\‰ëœZÑÒÿ+I*ätO*F­'ZÑÌtÂqƒ# î*HwÌa O˜ƒ"ã(#/ı‡R­>¾°ñ¢Šf…`Í^8 ߥMkg+êDRñ"‰p¢¦‡ì9˜`D"áÎï’°bôûÒ+aS¸Ò‘ÞYQ&5©ûÑ…×eaù’ì>åMÓ;š}QÔQÕª©ø¥«#òì^F;Kúœv­×Kfº˜Ù׸.”;KiÍ2;»lJ^[îôw³$* Y’ôÈW5.\û„ˆ:Ù ‘VOÎÑÁûà­sma] eÜ.7R>¬ç2‡…O§‘¤uÍbCY).zЃ<.ßõP§´ëáïYœ;ûÿ 2fK¹òk u¹oÝõË%"ìÎe¥n½‰=’§kåê&ß׫d¦ízTûªó¶Çî?J³å1¹ô™¯©f¬t®YUO|©#Yã'RŒ¸kÒt€+PßøÁr!«í¼:’àJ¶iýè Kú½/sr«>u‡H]º_±VTÔ,¢‘ð){¢öÊG°æ°ý2¬àxãˆ~®ˆÑŒ²6¹Òënë»üóz½Ï¯Ê€³&'¢— ŸQ™…Ô/ŸŽÙaQ\¡U—5¢[öyƒœçvÓ5i ã}ÞRF²Õ(Ýõ;M/2MJ‰ ͯq¿¥°‚ L ƒ ð.3(BÿŒpÙâ“VÙæÎŽ…ŸwoêÅå ÃýeŸÈkz/±85rþSŸsÌÖ"§`&€8€ÛP•0)à‹ó“cÀp¢Ô~ò~ÇG|2s¥×A¡J,DuUôzÂlÓÁ N° &pVÀ 00±ð ¼ðP $<Ø çyÝf!z¤¤ò1Ôenö§¥$eqðÐ P ¹ð ?@€A0*’ ¨°ƒ¿×ƒÚ‘r¨îE„Nu.ñÎAMOh‚d—M,Ô!Nú0±àÊ@Pàöv(€ ‹³XØp*0 dHGtÿG6p’ñdžÑbC^‚P£ Á‰ýÑçԺРðÀ±@$@–€PPõÀ *Pv *²–~áñˆ(÷ƒg‰½„mèwçCQ%Zœ²ä=xØb§bÜ Ô@ g%@€ÔH õ”°8*@”‡(›7»X“ø‹MD‰îÇ\؉=á1#3@—ÂzH–¯á4ÐH Þó (Tà=±¼ lç{Žxr>HŽ@8|•苼(U3§(:q]VÄnþ‡Œ Ó&Ë‚¸€ ÷À¯€= ßð r䂸À °` º˜‘¸B(“åzêØ@Lÿçu^@†70Â,¸pìðÇqF™W çp ´@ ê@(fI6ðqâ“vgŽ3©•5™Ž<ф§“[—'Ò“byK_Ѹðh€=à àq B$DiY.â*‹Æg© 6Wy†i“ÀH“‚ÙÄSÌRN¢ÃMf²šBCȦc1U=€:0™8ð ß!]@Ä âõ`2â2‚— ßxÁÇt[)m…ŽÈ6ŒysQJ&He±@úâ=å¾Àq‘Äqß‘ \p^‘i%#.” Ó—\ò—^˜V¡SÔYÖy E‹T7"â_•¦ 6ÿ°QÏÀqÂS¡ÀX QÏÐ]ð 2ÅR™`”@ 0P™¦Ÿú¹ŸESØùŸ ••\Y „é|Ò¢/ÊAT C$ÖÅ=Ñ‘NgUÿ˜™›Ù™â5°À ¸À—Ò*Gù¦ *É’¼C(ë§š]瘆ÐùšNr'cy¥¥ºéiÔ³ïP >P™~p[Ü!—s¹IJ èÞ÷ `ƒ™SIVùo©ÉŽ ù¢«‰¥Á„N³\GK†]jQù° d>à‹{°€¼¬¾P "¼Ô0Í Ð+3¯ÚËJ±OcdΚϑa1­¢‡lÖwµQ‡yeèÔ›kGg××ÁˆÃÀõA~ýNé“§QØ0#5 Ò‡û {°¿0 ‘` |YÙŽGªûjªçWp_jÝÏÿ<Ú \Úþ¼p< Š×ÿ²gF©Ðªz‡ „p ÜÕÑð]ŠP±5ˆ»”s€{]·Œ …û@†ÛØü®O›Ëf—cD­ÑÖŸýS¿|ÝÁŒÄ…\¹Ž’¼Ðdw½Ù–=ÐÙ¡íÝAç=ßä“Fx€ Ù¸©puFàû Üð ÿP€¦ÁËag|{>*m°À-±°Kš}‰æüàÂX' 'á¦ÅP¾Ý|áò6ó̤Ÿ'Ïõ°°XÍp8T× jà LwÐ Ó°CØ3Ü0 !0àÿ Ôc¿=šü*f ŽÛIÊÿà²Àä–æ&Ó¼Ö½Ö)&ÖcMÓ¾$´õU:‘ùlá€tÖqÞ‡ ë=âßá 0æÑpË®¬¬“° )€ a ~‘'’¹Ž#ÇÆ n+ÏÆîÐ À€dÉÁ—þ± ÑÕ-«É^áUîmÚÐÁEpèÁ¾\rÕÁ Ðí `Û²C²ÅÞ¸õ-ZŒ Í€)€°†` ±€ ã N“™°ã)¹Ö¡N¯ î­Ð xáè£åYÍsW‹MÞMégéd]fÓ¬ÖŽÅûÖN£Ù¿G@CpA¬²Ьs æüm’ªZ ¬"à)07pÇÛRï$ÿ7™ùÎÇ×áи—è= ð–¦B ºìƒ¬ÝÛ­ð“^é–nåÿ™þCæ=G‡Ï†ý´Ÿ ÕàÑ ÍŠ8xÐ{¸^U”ƦÐÅõý›ºn™ošجÁ°óe@Õó…´ðVkÚBõóI÷Ê>á#ÓÞ†åä,[Ž”ÐM¼#Ú Î³~++Ò Ñp¾½<Þä(™Ì-„~ïmyñ6Ïßâz¢ÑÜÁ°ö<ßó›ƒÓ!FoÐïµ*ŽôG¿ìE"Úw‘áÿ¡€¥ÅÆëå¯jøPOµI}ö¸?À—“é£8ðá¾]ó6t¯òKÿùlŸfv3/ÔS")„uˆ,SÿÞýÑ$‰qÅÌ{ÙÓRåé ^X=õ©°Ò0³NµŒoÜQš±¼¾Öj€|h€âj€üõ$X¯Ù@_©X}ûÆ*•/t=z°‚¬G«5nÔÈãÇõ¬qÓW›GŽýöSiäK˜0QƤY“ãL›9;êäù'M‘ú2ê³VOfÏš3’¬×d¿p©b L•ª`A\Um¤Âu•`Õ±R…óZ°”ÃTApàRU"¯8ºÖ‹…£¯ue˜õ›Ào\Ãé‘J™»‹6‚49ð¤Ó%!«\Œô¨e'5oæÜÙógСE&ÝÙÚHͧK¯­:µç’£lPjÿÖìÙÏjïæÝìÓ¥KŸzÇ­»%£†/¦‰Ò%‰—žÃÐa*î%ß0ÖÚȽ|ù%Â}Û¸$û¹8vmY·FÍÍ5çöî×ϧÿY1æûøcV~I”¤>÷„z‰?üJÒ§n”zj‡xùF¬¹ôˆ/ ³Š%^ÊKBƒ¾*Œ—X$Z§.¹~X‹%¤0¡…zˆÁTxáÇV~É/&û)ɨ”Vj‰@ý– ²' ƒ,¿#7é´¢öò£Š‚ì#•«JC'Ì2´ªú« qr‰/tr¡/Æ‘hM^@Œk-¶rI¥‡¼ZÄKÆ—$úa.+“…vœr§ÿ¤:´P‚ RH9‚ô§|r£$1Ë©M‡ÈÒ/•ÔQ˜Z*sÌ ³¤PÂ;cÉEÏ‚¬¬*ˆ¶¶beÃSqÅ´Þ„S¢ ‚1•­¾äÓÏËt‡:bÒšE3…T*!uªÓ Ò(ʦ2Zò4EõIÜ›ÈEÔ\ly²¥,½ZµÝ«`ä%œï%E¬¤Je-`qÐ!ˆ>{È… ¿ÑDCrÈE•”Ò¿rͳOu¬G¨4Ê¿I­¡vÈtu ùFrG&™JxÝM¹¬¨¦ªç‰:« °â*,—7Â¥°¯¬2H¬püŒ«†;šÉ½CM¦id•,UJA¦Tòx¨ÿ&ÅUzi‰'F7k­ŸZ¹ w¿®§eÀb>hæž×±y¬}uÀ .VÒ6(« Sù2°»íH›m¡Å4k¦/ÞÖ(¨% Šêp/½ÚI‰ð˜Ø;ì¯å}ð­Oð%X_~I¼‹Þ<ƒVHᇊöVJ{NŠxkŠ›²ã‹TŠc§¶škÇ3ƒü÷—$ÿšò‚|‰e• ^ù’ Y«ê†RÙ±^á¥W8ù]³TÃ|å‡Zíî+à?úæ•`à!t©g£ÍiZ‘ñCP³p¹…ìÛªw¾äýù/Uì½pjùà r*^ø‚0Г^="²½6…({AÓ¢7«¶¤å°¸ÿ:öD¾¹øB"Á°Èúž¥»sŤ ‹zœeæw’ÄMJRŸjïú'ªÞùîì^Ò¤B kò t/¢±âCõ¢ÞZp‹µÄB^ôz ½¸²¢Ó¹"‰EEz ŸŒ¤$§yLr´£“ñ¤b*#×Rè?ØÅQŽ(ã!ñú2Ĭ#0oa™Td&= „0¼0Ñ\ ø²½¬> J*ž±'ñ½Œ+p±J?ü!‘} :’‚þ!™šÎi‰ëš…tCÅ¡2•; ë <êqN=0àUÈv6@æQ´,d_p€H?*²¤Ð$‰ ¡)—ìA&­á,N&ŠQ,üˆ(ÿ×FSæ°šª™ Y99 ý0ˆxÔ¥c”9¢Í)Fõ‘¡ˆ)6èrwyÐ’Å…©{^Ĉ|ÆøÌ¿Ñ䌞dœe|ÄÆ€šòú›#½<öP/Ì-%d%[¥£jÚž ¸eJòJi™Õ^‘'HbpL8ë …@¨~œÐRcü”T—k•’'ÂÛæFtt rÓHBê7‡—%ã±"®G–Êt¦T助‰…]&®£L°±"Y_à‚Tˆ/\‘¾fm+ASÂ)A¿þ4êjp-ãŽhdž®2¯zõZ#Ê!W°`»Õ@¦˜"jJJŒ'A¡ }$ÿm¾®%,Y ^-ëРf¶¯­ü«Š:{•™5hId=À’X‡ …$ù³ (ÿA™‡º¶i—Åì^»)Tá­,°Ýíת’—fдÁ4m%“2µÕº•'²u ð˜[SýD6¡´}’têSÞ~¶,½]Ù`±$Ë!¶&c,ts2Ù=½•e¨m‹êÞ÷nœÚ½ wÊLqI+_Ú•X¡QÔ:ŒIÊí‰]/V¤iM+Àum|£KT$=T¾G¥/ØÚ••+åÍNx*âÅ„&½ ”Úã“~z-Bv$w %Nêàk¶½ÔÍHnSÆÝù†Ÿ©SUÊüÚ•hìÇD2ãÅôöbÿM¡×åëŒkë^à Ç®P$ñÖ.ÿ”ܘ­“¯iWÊšwº µî)al™2ë»~­0AvkÌ+÷^Zî—çeoml aN£Ó\f@K˜Žœms9”0-bÙÇ5™¬il #Û9Ä]òŸ!¬)Ag‹Ð…–h•3,åEW EskIǬøÎC‰TO—¬æ&?ÏÕ\v9Ýép>±–rn×_ _ŸwÔU‚§ÄSlú9Ó±fv³klkNO™ÊY 6¬ñó)¦”š1µC(“/iËzÖ@fs´o­¥9«K\³õ±½jbç°>ó¦w½í}oz—Ä;ûæw¿ýýo€ÜßÿÆ÷|âóžÕ<>w]‹¿Í©‡Cܨº=·´)žîø‰+ÈÝÖÉAWmæJ/›Öá÷š7]h‹ß8Ô9 ]×\ÓÙcΦÈo{f4׺Ü(?7®%Tít­ð­§.P«“mó›Ó8¾J²¢orPcœåæ¶»A®tœK<ëêÆ-´y^ñ•÷9ÅÓÔ!É‘¾ô’ÜìÏÞy›¡îô^s½ãáríÑÕòˆË랸ʟÞó,ëÝ&%°¥_mí¤›ïk'÷ÉÝø°;\7¥yÚó.xË£=óMçõ×ÿ.u± ÔèeߺæmúÄ›ó€{ëãžñÒÃïŒ_üÞc ѶWøíçÿÐ//{2Ÿýö¶7î¯{ȃ^òÄÏùá ûЧÞä9ö¼¹•¯dèG?ûËWüð™îõÇ»žÚ˜?=êi_ûîÊàG¾ø{Oþ»3?þéoþö±?á‹[ÿó¯Ÿúù½_óßÓ¾ÿÛ<ö£¯Ýc½ë£4ú«¿Ù³¿ËpÀÄ?¿Ó? |?àË<óƒÀ’?ø›¿é›¶ðÛ¿ñ»ÀòC?ô?\@­“À¨«ÀÁþÓ@Ò ¾ä> 4ÁÌ¿êÛÁŸëÀ ÄAá@B"l<ê{AÔ ßCÁL>þ@õãÀ(ÌÂäB̽*t¿$Á"Ü”B3$²®Cÿí:@ÏJÀTA5|µçÓ„/–ÈC=ÜC>T‰>üC@üCÙ DB ÄA,Ä9´Ã;¤A&LD9ôAýÐ6ÌÄI¬ÁûSD/<Ã&ÔÄM,C4LCHüD ´ÄKìÂNôÄL”>NtDS=³Íˆ°Úœ ÞB!€==ZèXÝo]V­åÚ°†Þµ€æ%Ûëý‡ìE îí×C˜Ú¶ßœY?ÝÔhôU_2€õ5Õlßù-VÝ0Ú…F}^ΕŸl…²ýݸ[ýpÔ¸­×Œ€àD €ÚÈV ®6Ž˜^¥}ëà\ î¥ÔèUýÍØMí‰ÐuTn €@@W§HZËø]k€XÇUàþîÙzØ~ÝšX>U`h`¥å‰@€À˜ˆ×†áÚÕb}¨bkðSÓ‡ÿÐÐëå†u•T%£½aPÖýpW§8¸Å'6TLeã^[s}Ô°P†UáàÞr(îå[Ë]híâÁ%[Ñb du\C[úUÚÐíÝFÞš €-FØMFc8\,¾c€^5å¸M¬zåÒ_]^þaÐc™5}Ù'éÝHãÖ*vápõ^‹ÕÞž(fu…^n_Æ–]‹chR¶Œ%&=n†Õã FŠÐÕvâwe_ì-Ý ¾ælîäŒð^Ì-€oÞÙå2Z=„*Ææn5gQ¦‰ˆY=®b]6„|ngøg]Ö~ hàÏg öVÿHUØU‰­hQ5€~î 6.…h*5.¥UÀØDv\Dö‰MåO>åÇoÞˆ¦[(¦ß‘†ÚI…àaE³Mí¯i—>lÑþdT† ¯ÍaxþäþÔÒ£† ¦ÞÏŽØè;½j¬Îj­Þj®îj¯þj°k±k².k³>k´Nkµ^k¶nk·~k¸Žk¹žkº®k»æ F‰¾k¾îk¿Þˆ‡5é@ß¿.lÖëÀ¦\ôÅæ=EXZ%åId£_g¥[ïåÓ¼æ†ÀÔB¦TTÅÔAÍÓÈ=lÓ>mxØ?Z®=€û…Ûv6Z˜W×^Þ‹}Øÿæ€pÍíØî×7°Ý-6Z‹€Û6„~¥í$FmçFí‡ußÙæZâ͈âeØ9–ßèlÈf^k°ÝxXLl 6×âÝÚÙu_6„ûufXT£}nùžoHì¦Øø¾o†Ý,¦í9¦m_À}Ø~=ÚÁî€m‹ØÞpà[ü¥o §oû>pâ[±­ac}kì,Ø&nñfWÔ½p†]W‹EÝÛ>ØåÕ‘îW“žp?í çZ‹e^k…Þ£½ß F]×.^qÚží½ñÙæÓ"^×ÁæSÞží@€ñòÃnh!×BÝ•žT}XÝž]Œo”¾òšnÍnÿéhFuêæ–r6ò‡]ó6s9GŠ@ €Òžs<Ïs=ßs>ïs?ÿs@tAtB/tC?tDOtE_tFotGtHtIŸtJ¯tK¿tLÏtMßtNïtOÿtPuQuR/uS?uTOuU_uVouWk]ŒuYŸuZ¯u[¿u[D]ßu^ïõ^O³öÌMôœOö,Ïî´NüðueWv`ÇNü¤Ï÷vóœv䬉e¿ö]oöûÔÊj§vbvç´L›Àvl×öúüÎnO÷owÏ`¯N ÷k7÷õ”Oû<Ïcowt_÷ž€÷e—wÄãv}÷a¯Mðt÷àwfw>…§Ã…o@'|xÿeã„÷u¯ø†gDŒ‡x×,öƒŸx^·x†y‡ø‘ßxp·vÏö‹×øñ øz/ø|'xHy•ùŒ'ù›7yvwvv§y]ù’oy™GvŽ·w§ ŸG Ïy¡7ö£W÷¡ÇwÌHú¥gyz‡v¢?yozª_yœ·zÆ„ù¢{­‰®·y°ø¨çù{gû§‡‰³ú«÷—vƒ7úºÏˆ¸gú¹x§Ï{©/{—ÿzÂ×ù¶ßvi‡ú¿Çú·_{Ä¿{²ßùÇùÅ7üƯ|¿×ÎÃ?÷±·{4­úÂozÍ¿üÑ|·OûÄ|ºgüÓgýÉïüÍŸ÷°÷|Ø|Éç|ÁO}ÿÇÇýÛ—}µÇü­þÙÏúÞÿwÝ~ÕÏ|¼ý¾þÒw}Þ}ã‡üâ}Ë7ý×Ï}äß}å|é·~Ñ_þÕÿð÷~Òÿî§}í~òo~Ågÿô'þï÷úëgþá·ýùG{ûÿ}øwÿäˆ,ø›Á„ .DÈð!Ä‚#Rd8±"F‰7¼È£Ç"†ù°¤É†)+¢\i°¥ËŽ1!œyЦEœ)kÎäÓ§K +…îÔIÒhB¢&•"•ÙÔéSLENýX•ãÕY3nUëW©ao†íÊr¬YŠi#®¥9ölY´rãÒýÚöäÜ·nëF½›“ïS¿*7¼ÿ4o_ÄfŒÔ°@’'S®lù2æÌš7sîìù3èТG“.mú4êÔ§cªníú5ìØ²gÓ®mû2ëÛºwóîíû7ðÕ.ƒ/nü8òäœs+oîü9ô裙K¯ný:öàÔ³sïîýûôáàÇ“/?~»ùôê×GÏþ=üø²Ý˯oÿþgúø÷ó߯¿?€®÷Ÿ€Ø*¸às 2ø „Ú‰!…ç …j¨š^/9fdö؇:…¨Rm¨¸"‹-ºø"Œ1Ê8#5Úx#Ž9ê¸#=úø#A äGmŒedXH~¥dTL>ådSP¦xd‡IiÔ•:e‰Ó–6uÿ9Ó—1…éÒ˜+•Ie’h.©f“l>éf•iÒœ#Õ)ÒEÂ9eš}Æ©P3cÖ _Õ¡O%ÚÔ¢H5jÔ£J:)¥•Zz)¦™jº)§zúiDм!>0*NoP€!ÿ”zª–`«¦¢ªÓ¬µÂŠÓ0ê«·ÎdȪ­›ª¯¾rslª«"Ĭ—²Ö£«°ˆT¦b[Q?m`€@ÐL­@3oиäšÓ4sÀÿ´[®–@cï¸øÎ¤o¼í½ïºT¼¿îÚH½POÁ6"/½ û ¯¼ ±Áés€H–lBõÿs€¸®®ûOà‚ir3/ÇlÓ­r#€>6Ë<4 MÏýÀü³KÖ`ͳ>{y@=Üí´N¼QôÑ8ð5`}óLl7Tc4òFZ#€@Ìù¸k D,–=÷Ö8À¬lÿC÷LýMÐÈýwÞ1|xL{ '>S õZnSÏÐ7Þ6pÀ?5_:Gnÿýñ?oŽÜ\ûmÒ.]L7×”ºÍ̾»I¦rC@ wÿ üHÖì«O¹¿‹¾u?♫0¹ö÷°}ýcpàLF'y~üKšßæW¿°¡jús Åˆö= >°"ª;Ü®*;{   Uà¾èƒ%wWztó¤!‡Ô>•}ûs½'„Ç<áòråÑç×ÿÜ®uœî] €‰ÑÅÕ5á‚-ð”#[;ûñGnrõŸD RNY¹VÍÈ1Â?Ȇ‹müõ'aië¨aG"%„™@ãìñ$Ö" ®ì’^Š‚$qe8à?1¶T—5,’àSÏ+¦(Ð]˜{/BåP]×<àÈ“H¤Q†ÉD¨–б©å{\iS]ãÔŽŒ !Å™e”ÁŒŠè±É—›-ÆiäAý´cË+¸Hâs,ñ„!×4SÆ€š'ècy½i•‹r:4l³eóˆ"p0‘ˆÕ˜9%>›ªÿ«¬,¶u(¨=ƒ .åÄV >Ì!…@€Gkd*ݬgj+®ÐôÌ+ Ɇ”h”ÑN€Œ²Ð1‹V­EFË^8覫/™DÍ43Ì  bFQ,…»üöëï¿,ðÀ\ðNé&¬ð 7ìðÃG¼°Cºòê+°0R "qà1ޔŴñE1¯®iå•äJv«¡Í3ƒ '¸JgÝØøh5RžÑg—–¬éɰ¦|š¹ÚÙ$ŽCчãC$Œ®QðS&tŸBòŒ_¹c9ÈA‰ÿ88Á‘(ŠQÀãß;…¹¢É )È{†+ðQ‹ì`WÌÙF5¦F¥Ô Ž„^³`溗<°€6ø^Ñ!azh¸t#Áó0±„btbþÁŒl€48ðq‰ ˆà$ P¤:‚1n9| QrŒ(|BøÀp¡‚ ¼¢¸@A²¡¦@-Ñ?M4žæð.}ôãS°E+z° ü $H%FpŠRþÌ‘w £ÈJìãMÍ>‚Z$gÝ(„áËeR-ž"P$¥¬„Õý †ª€ @Á øðÄ„‡>ŒàI¬##LHæqnáØF7 rÿ Ôr°>Üa‰DŽÀDD=¿XOâÝs{ÛˆèD~‘TB$.^áÂ.š˜¨Äã0¹¤|nc(µE9Z‘ƒ,Ð<í¨Å*\QŠk^N¤ªtÑPLº_BL"YØA‹Xã¸i©P!24¤ÂÌé±¢Ï~ü€Ì+ÔbŠ>õ) >SLl~wŽ BOÅf*·''}¢ %½  rÈVœ¥^(C1š¶À9†>¶H&P‘Ð6´pí{‹DUBQRå`giFÚ&4¤a4àqŽ%PAž´Þ4ªlÍ[[é ¼kAÁFÑ…,¸k^ðÂ4 °MÿÈÀ–PÁ\KAÛÞú¶_“˜p‡KÜâ* …ù…,–Q³àU¯|-\±ŠZ 5/°ÙA…HXÄt¦>¢Ð µùP&Döð… t ]BjféªW¹P"R]×.íð§á »*u©NUâ#:ÒÌáC±€†3p`ƒ¨@7Û QcA‹1¸ÀŸbô+°È6»‚Ç9Àsß6I†Ó£=†qŒ{ÜC \0Áa H<`rü‡«¾(u«ÑPjsöwŸ–uåË?š1Œzüƒª°ÁT ¾E<Àþc rÈWŸ9™PÅ|”Y´‚³ÙE-jÞ—BÕÿž.šaÒ1Œ{üã6¨A0ƒYËEć9zf[0g–ÁÄg‹1¬bQÌéÌrHB9{ÛŒ@Ô! 7ÜÃ5 ˆØÇ^1)€7bR½B¨]ÁÅ*Zñ;ï*¡hGCðáVX˜9äÙsÊQð´ÙÒo&°TÏ….|ƒ ÐðÅ È  9dhκRl¦®‚ˆ ÒEg5ÊÑzTv4*,Ñj\$ äŒ@–³æ5£¯~ÉFl¦ibÒ“¢W½?°0h»+ÿ}ÅfÏ*–.?nÅ9T¨¢­A'¢ñ )FöA lz°ƒJ:ßHÿŽóÜ Ñ…ÄU+¸ö Nc|çDÑȰ¡ÃòЬbnÎxâ +¢Õ3Å?àñfÛ籯€…vw>®ùࢴ†5òpZ\éCŸw¶ ùl»?s%6ø‰†94ì•rh×çà;Çrt!]XqøX© TP‰¥3ý¥(Eg ؃‘—ÜÍgFwuÖê¾PÁìu° rPö+så8¿šÆr¨nDT<6ñg>‡ôìíê Òðûß=1üлÞ÷®:>"ÞŠ8KŒW²¿¾…Pt€Ž@s®xpf¥ßå凿Wœz&¯~HɧØ_½%à!ìowûØYÆÇÿÐóÎö‘dʼnåfDOšÜè@ÁX•êØÌàÕ APóÆ›]¬¢:@;@Dí° »€VµP}1P ×—}«‡ TDrTiZ4ó† t‡º{DgËV4­TW…U4pð5Ó0ò(uP რ=@W(»DL5 zÙçqص =à@ÇÁàgä>“VX[Z—bqõ¯°4àRõS#cS6|° Úµ?Ð…ÊÇíH§9è€;øØ0Þgl6§AÝ!Ñg"‹ÇuMH4½@yòC9@c1 ް“ Lâ$%í ]¨à í0~\± ,ÿ¥‡6ÀeÈtg/^&dÑ_óä]XbýPRç·!Žg¿ÐBD|" ð€aBˆ×%&ŒhòD; q"°t~@ q@И>;&e6Gs‡qR0Ñu­CQŒâyxb£ÕpŠð“P'7R eÓT„? ´nŒP‹ˆøÐ}»ð:Мà ÁèqÑ@GÑ jHlÆöcÞÕeÒØZ²ý#¥˜{o\ÿtU} ˜@ް"6êÈ$²Ý0Pà!3pò‘°Žø±B€¤%@q„OØð9ÿ0W‡‡_Ö ¯`>(½Ã(ü@sQRñ¡rQˆ1öøX=Žð8 2&øÀ Ì ä`u¥ ãp vÒ EÆ’4à’ÿ@‰Ûà §€“$X'œ§Pc!C¨ð FÙlnuºGR%Õ{ɳ+çp1ÞøŠ0 ⨑gAP 1•Õ@öˆžp Ô@ „0“ÿ* ‡ZH$zI„ ‰ù E _÷Mèb˜JÙ„_GÓÂccñ ð› 0‹va'M3ŽS³8YrA¶wœ€ ØP §@Øp@†† Rønæ÷Ó wó ñ@€ÿ‚FÉÉMrÁ~»©?µPAE`rbñŠ{ VV]9­°xG @$D]ذŒbwÙ¹]q$§L¿ž²¹H™a!tè>†‘OÞóAŠéÝW¡À†j1V"{ÀEäc>–p@´¦]p •p00R˜§IôéQ`¨]Ö¿0ÁI;1ŠÝás³~MiE"W* +ÏVnø` “P 5w„AD=>p–ðV‘€Ôž²—fk^ç`¤:¡ø`ÁJ†qÖ1Š®„~:e¡ÿà”m•^QdÑ0¥]áp¤¢„`X *Ðhÿ%…sEW=pí@¦4 n¦n賦…@Z£¸Os ro•#QR§(-ˆù¡]¢#Š EÈ‹ŸtPšƒõ ç€ t•­@}4€¯€š Hù#{!ú}‡ˆ£¶¤BÊ„§ßÄJs’%[Ñ%©´žd¦]1i2À]±?»ªLb(A„ R(>¿Úg³j„EF~µ°¦W$?ʬQL1ª¡láMr¢0ëb ¯/³%0¡ ™ #°îb 2@ 3 œ` ™D™ ±ºU tÕ.¡Pš4 30°“ 2€°)™@ ·U±œÀ ñ`\ #Qµ9Z #³2ë²ÿC1Ê­'çžøs«‘†ož·+¯à~°š=H« ª?R¬ÆÖš½›Zs¤ˆÑÒz¯§Jñ3몗 7’ÔCù;Šb µ†è ]Û… E©bêyTh|• /m*>|é—R‹{t¡æ÷‡±9Ô*µæI¸srDg‹obQ¥Å|Ù…Lõ³‚¬àäJ‚zX‘Ý8#¹­ôƒw›ˆ›H²~Û`•Q§§(1¸®Qµ ± _"`£Ñš‰ùX¸@ J»Ž±Q}R(W?ƒ9ÀyËñIœiLëª ‰'5Š`WA·i›ƒ¤ 1µÑ*B¸q?ùS4Äžøÿ ƒ¨` ɵ@y#ñ<Ñ0íJ¨|‹.qºÐûAFÇóÝq½&–½lǽåaØz­ð ¾÷#W¿ƒ«›+À°²r÷†î»uáð õ*¿8”d«Ë§‘¿³‹½µk>½‚»¡°»Å‹ Õ÷«zȶE¼ìx¼Í‘¼EÈq:ù¿ó‹ !­ña½¼¿c± ¯  ?Ð JÈ—0è`…狈²v¹$¸]P÷;½3K%â¹ó„´RøCºýFÁ\ž‚©o+Ñé»!»ˆB»îÉ«YU„ˆ[FÜcǺ¶mK‚oËB¤¹òÓ® ׺˜fNü aº¶ÙÅ¡ôê© ÿSµðaªgÌÁ êy6€ c°…)h棻èDBûX‹¬€ôjæs»;àš¾’.|¬Û¤¥û¬Õ·€{¤‡µ1½IiȯÛcQ cD ây}Úë½ááË“¸p´â“€‘Ú¿9À<–‚ÈA†«vù ¿à¯|…¬§~»·žB­ö‹¿ŒìÍ3ÂÃÚË9ðËAôªö£a :°ÎÇœ» Ìó6…ÜwÝËžiѾáSƒ– جÍf\º0AIª¯‰<¤\Îú;(=,É”¬]:P­Âè´m{Ñ&¼f¡ì´C[Ê „ÊÃö}òœ«,¤ùäÊM^êJ³ÜÐ~ÿÛ· ÓòÁ)iÜÄîLt²±­«@CiëÄá¥Æ•êÓKU_ÁÛ tˋʅ¸@¾Û%ÈZAÈ-¡Ý|Èû¬kÎñºìcµ>¼ ?À æpe›¸ †Ö#á|=0¬ø€¸ð (®ÐSü†ó(S…7»À Yܬ"qʤ¡ºp*¸RذœË úKèQ¼åÀÂÀc»ª%³YRz 9­Y›Óº¼PÒ¡¾Œ¸Ï׊§ ñMìG ƒUŽ­¸†e¹ œ¦½?Z¢ÚH’›7ñÚüšb³}¦^$’MÙœ›³„Ùú¤ÙY µÄÆÇMƒij†JÅѳTAÿÚ©mºåì‹0Q§uZŠ­ÓרKµ£^ÉÇ^A×[-žßðܨÑÕp‘--‘XÜÈÖÞxÒ$jÜŸÅÕYR¤·y”éÂ8àág9ÙêÀ:kG(ÎH2Î6ܬ$¸HñÅa]¾³µÍ³Ô\á<:˜<Ýħ^¯¾Æç,Ñ¢Ék¨¼´m ™à|K¿rA¡ þãÊ6â.à\©ð”Ë1 â®ýM~ËJúäߌ=¿FžâábjÆfìÝä\MŠÚ±'5Þ„‹Þ€ÖmÝ%Žä½qž+!¸7­¶ìâ^åLÙžÅãpþÕY±kf~Á-‘¤ï–0:ñ[ˆÿžèоè\6ûè4[³éóÈèìættb±ý >çÃv¾Þ¡½çz®V´,›…+ÖeîjŽål^꘾¼§îˆ|HÜ©ŽË¯nM eê4¯²Lè5¼áx^M[Þë`žrÒ[µ¯ ËXì <ÈÎç³Îáâyí^ëFváØ~ØÁè›^ä»~ì7Ní¿ÎáàíÕÏ^î™>í*Þç)‘ëÎNìî.^ð.ç7îÊÞîcÝæïÕŸ­íF(á°ŽîJZ‡­cðòdìæîíõ>˜Ù~ïÝŽðú.ï_ÝÿžðŸñoŠéÏë—öí/nïoò¤òé.òDãðùÿñ¾¾ðg2îÿæ!#oñÒ®ó.oóè9ò6Þò4Ÿì˜fÁƒ±ÃGñI¯ðÊ–ò _ã_¾óï~ò_ô1ô^ÿõD>õUó`ÿôP?DßôFõ,ö²þò>ŸbZá@Ñt÷v÷tŸ÷Ká%é§öUå‹}$‚øLÏoTÏõûæü¾ôÌöèù’?ù”_ù“Ÿø†øŒ/÷˜ï÷‹¿ùOŸ-ú¡OúŸó§/ö7ä«?ö¬úÑ«ø±øœ¿ñ©÷·¯ñ¶/û¯Ïûoú¹ïø½ŸùÃüš÷žüȯû°OûÊ¿ü=ŸüÇŸöÎÿüªïû¿ýÌûÓÿÏýÝOãÅoüá¿ûßßﮟýä?þé/þè¿þçßúïßüí/ÿñOüêýö?ÿÒÿÞ_ý³ÿ$XÐ`8ƒ .ˆáC†!Nu)“«Ö­V¿r…Z5+Y° ÅŽõºÖíÒ´ ãÊ5 -Û³xUÎÕy÷­Q¾:ß &\Øðaĉ/fÜØñcÈ‘%O¦\8箘3o~ª¹óeΟE7õLôhÓ¨–^ʺ¤ëÓª‰Â~ÿI»vÎh\sëæýt·o²Á…'^ÜøqäÉ'â ‰Os¿ 0V @¢‘ô4°í_?l?LDH >4*0½ùóôúý«~=húóÙ»/>äë¼£¦ø(Žè€¨I¯Ÿâˆ€í2ŠÆ˜è ¨ù'=jˆƒ#}@3é¶€hH„Á\j¤ƒPB 9àjvlñEA‘£7 ÆDßh±B‹TðŸ<ÄÇÅ' À.£3(Äÿ €9öHd³)õ g| 8໘¤ÈIü0‘*¯´HýÚ[Â)Á,€#ÌëÀ;ÿŽè$HˆÃ ñ£/¿32J}˜o?2³m`€Â)À¼ýHÑ`y4ÒI9R1ŽS FÓ8 ¼Né@C,Ÿü'Žä›õCT9ª4¼p ^·16£O{ÍQÍ\S%Ö"VwćÁeå<Fì¶Áj¯¥ˆ ØNŸ`¾DŸ,QV­ ©Rëm°ÔÂô³pØPMÌ Ä·X*ÕG€~í¤ˆyl¸M‚ ¶ˆ~@¾?W}2Áx”ñü÷Û(ÿ!×ŲM5P©à ŒCê×JŒYF2£LÕ<€yþsf‹'*`Ç”uNùáÿŒÂAµ°ÃQóª• šváfÝ­D®LDMª¥BµŸ7>OëÒ§0ìÎÎì ‡0åúöûoÀ|p 7üpÄW|qÆwüqÈ _6rÊ/€×Ê3WüòùxvtÁ8ŽFã+®[Òö4ô|ijà çh™1Ã5×mÊÎXóÊÐô€Wa]3v&t/ñUà©™pT¹wp5B—xÐ=Wƒÿ÷ǃ‡Ðù¸7"õhBô±w›ê˜Ð¼Ë©A_ ó‹Æ0€]•W]‡xàËÜå¨)(i*^WðÒ<JJKr9W pCƒ ÿ¬+VŽsèë„Î)ðÄa—ƒ—ÆùýcxÛ ¡ ÿÁ!BéNA¤êG‰¸×¡RŽs²Wº¼„@X@wÛàùÃàÏ@DÞˆB¥°ËhyÀ#„«<DÈb=0× ¯D6ì†dôÐüÐÆ@26ë ¬{ƒ†ÎV6¨ÔŒ{¤È„¾ÇG@’…pS yHD&R‘‹dd#ùHHFR’“¤d%-yILfR“›äd'=ùIP†R”£$e)MyJT¦R•«de+]™I×ÅR–³¤e-myK\æR—»äe/}ùK`s–uN`ÂBc®Ä/È4N2ÕÂL½³™Ó,Ž3ÿbM˜PšÛÌ 7¥YMmvs8Øì 8Íù—à³(ÞLç2ÇÎo²“(êLÉ9ßiO»à³útg>åÍ}þ³-g<ï‰Î~ô  õ'CjPˆž¥hBç9Q‹4£uèF ZQb‚¡%)G#êцž4¤(•(?KÚz:… ))L1úRš²´$1½æMGúS›º¨9Å)N„úQ®T©CméL›ŠÔ¢^ô¨D5iM© U¦îÔ§XåêU÷²U¯>U¥UM*Y£ºÔ :UªjEëW§*V«Âu­=«Y³ê“·Îu¬]5*[íÊW½Êµ®i¥ë]CÂÓ®ø•°{u«b¡ÀâÕ±}…lNipYÌfV³›ålg=ûYІV´£%miM{ZÔµ«emk]ûZØÆö³ª•mmm{[Üæ6´´Õmo}û[àŠ–·Á%nqkÛáW¹ËeînÒ\èFWºÉ•nu­ë[ê^W»Û…mv¹û]ð’Ö»á%oy5;^ó¦7¼èUo{µË^÷Æ7ºð•o}•K_ûæ7¸øÕouË_ÿ¸¶ !ù,JŒ~,‡&&&666HHHVVViiivvvMx¨i´m¶x‡©p±s‘²s“¸z—º}š»“SR¥ON©__¸HG¤fe·ll½p|ÇVUÕWWØ]`ÇkmÄktÊmuÀppËqsËt{×cgßgfßhfÞlkÒtuÒtyÜrrÚxwÚ{zãWVã`_ãdbähfällèjiéopåpoässäxwä||érqê|{˜xŽœ|’¯x‰¦}»~ŠÀŠÑ}ƒ¯v³n̈FÏŠIÊŒQΑXÔŒHÚ‘NÈ›qÞ€Τ}Þ¥mÝ¥rܪyì‰[ç˜LåšRâŸ^èšUïŸZä€~ì–oñ [à¡fï¬qì¯yð¤bð§hðªmð¬p‡‡‡ŒŒ•••‹ŽªŠ”¢‚½‘Ф‘ª›‘¨™›²… ¾ž¦¼¡‚—¬œœ¼žž®Ÿ°§§§£©½ª­´¨³¿´°®¶¶¶‰£À•«Äš®Åœ±Çž²È´Ð¦¶Æ¢µÊ«¸Ç®½Í°¾Ï±¿Ð´ÂѺÇÓ¾ÉÕ¼ÌÜÅŠŠÇŒ”È””ׇ†ÕŽŽÙ‚‚Ú„ˆØŠŠÖŒÔ““Ó˜—Ñœ›Ú›Ô´•Ϋ«Ïº¤Í½®Ã¶¶ÁººÌ°°È¿·Ë¼¼Ð¤£Ü¡¡Ü¥¨Ñ¸ Õ´´Ð¸¼Ü³²Ýººä€äˆ‡äŠŠë……îŒå䒒嗘圜埠í¹ë´‘í¼å££ä©©ê¦¦å°¯å²²å¸·å¼¼ò­¬òººØ¿ÃìÁêÄ£êÉ­åÀ¿êηéϹéлòÀ¿üÖ¶ÆÆÆÅÊÏÈÂÂËËËÂËÕÄÎÙËÎÑÎÐÒÌÓÛÝÅÅÝÌÌÐÎÕÕÕÕÔÖÙÖÙÞÜÔÔØ×ØÜÜÜÀÐàÊÖãÍÚç×ßçÛÞáÞàäÝãëåÃÃåÇÈåÊÊìÅÅîÊÉåÏÐç×ÈçÚÎèÙËåÓÔåרçÞ×åÜÜìÖÖèÚÚôÃÂõÊÊøÉÉôÕÖåßàåàÜäääåæèåèëìããèçèëëëïïðïðððââõîîüëìýïðóóóõ÷úöøúþþþÿÿ H°`Ái*\8!Ç B4XÏÙ´zõ¦YÔ8 žE‹áÁ«oÚ4iÎ6¦92"A‘0áA$ ŸA‰s Ä©3'Ïž](t¨Â¢F“"MJp)ÓNz¬'°¢Ig2;¦ȯ%Ì”*AŠÄHõæ@’eÑ2ªôiP·Dá•;—n[»ñ6M:µªJ­)v¥ú,X„aš­Z“kˤeõþ‹,™2^¶F1g– TóPÏ=5wmi#G†±N.y‘5ê«X3Nã×Õdãg«MH»·oß5 NüwðâÈ“wUž<.gС9G—"¿Œ6gÆ”é,÷ÔXMÂÿF >üE%->Æ9–¦ÂÑÛã ‹O¿¾}‘óïëן¿ýì‹IVOÒé4àD*DSl‰dÓh«=ÆmÎdlåfa%Õ$nÁw›AðuCË6çÈçߊÛõÇ"‹.¾€y=W`‚ráè’]£Mè Cƒ…$SB"fIa9ƒÒJq(iý„𜃠(XŠN‹2ÂØ¥—_ÎX—€7H ux‘dÓl½÷áu&)ÓUâ½v!X©6JCþˆ“ˆ4Ô, ˜"Ë+ ˆ’"L1†I_£Žªi  ¡i©™o]*—šPÉHâ)§Gb˜ay¹ZG}ÕK#¹ÿÇ<¢€²è•ÝÄi¤Œòzß®,R "™šb:&±tõØÑˆRm$&o¥7^yéY¶]¥Œ¥Õ¦ ç$ ¢Ûèêk}ÀúZ®¾jc±Æˆ,A4¥ËЂ۞EI¶=ØaK×}UÏ„™ Þ²ÿ†HÛ^ŒeçiAÚäÁƒ °œ³ –äˆ;®¤s9é±—•Ù®së6e˜¼ Á)윩Íö?K^Hžz²QeaG'•g’e¯¦-ÎÿòÀp@–³hœq¯G[ìhº:rÜñÇNÛÅ“G5ÉvWAhYÞJ_¤5ÎÖ·²k‡©Ç4¬1ä5ìqL9€pJ-'}n¤wëwvÈïBÿsßq¢ç É Ã:j´ÙY¡àꉞL4Q5Úi¯¹k Ä(*Ï¿à 3x°‰¢³Âþš`B†^ì¡üa¡êàÒE/j±¢O¹èÂæ5¥œO5 XYzs³ô¤ ˜³Sê´Rxdctȃ2D¢ †C2%eC©¨Ó@N”.=ýž ™¢,ˆæ¤4ZªGrç¡9µ&%-sIч¯u§q´Ï*¨ð‹(–p)$+ #ŠV ú-­™Ü”ãê5‘¾”oHøšçXtzˆ¯’{%©V(«ÑX‘Å>¬ )…ÑUV$öeeìêÖ 5Èÿî.ˆŠe+‚Ù’h6$9w@k'ñAÅUÐZV¬ìÓ‹ý±b ûëÅk§Û¥+6–¶³­TÏÙ¸6É1ƒ›œªÔd•àuçeˆƒ §"Ûd¤Uöé*h*Ö±Âv±>•è ëXë`ĺ99jÕvˆ4î°©YÍ2äuõZ)%^;ë#Ž]A7¹»u®²„úl›ÄHN5"‘ñjÖTZøfç†tå1<mf‘0úÃ}ôœŒ]$SšD9¦TÓžì[0Æì¨a²IâeWý)&§.¢ˆìf1“­þš™-ëíJ:Ò­µ‚RlV\§`UyÒX²ì^Ê$HÀ~†{3‚µ±I ùhÇ:`±¥4÷øÇ‰*G£cß5“x¿&Öö{þ»Sð/Ï*˜DÈ’Ò_¾TAm²$}¤·ÀR¸¨rl¸Ãxst¿!ýï6g»ÄnÿMŽ}ÜŸŒ[¹Mß‚éÈ?œ‘2±Å(Ô1Y$ÊÆØ*éL)ò¥ü)o&ä¬i pŠÔÙ6F º÷–@ò5ë£y3 Ïi`i¥¨(Ar ƒ2TzDç·Ñ»mò’OZà´›Hœ;uk{꼬b$«`’Ä´¦_–æáR0®(Bø@8°£Q7ík¿4Òom¦¤7½ ¼f¹ª\ÞOyžE<ç[0ÍlN×5a%Rð>f  b³Ášö›=LEN9åw¯ÖËcªo#E^ù ‚ªêÙcƇ¤‹¤C·¸ 4И ‚¨ý¸¦M®jÛÖò„ÿÿµküÉ5²N­ºr£;š–'ýZ–øJ‚Žo¼bñÆ`é8€ í›ëöÓst4w¼×Èkò‚?¤$ñTzönkVRæH­âd€ÐAÆ}Cy¸'€æ4~‡r“÷V\W8”#cñÄe£qZãÅn!B'’­Rˆ°x`WJ¶§v!Èv$ÈtáW€¢s—Q8qÒò]cC uy¶=‰ƒ>+ã2ðu³€ ôöÛ€Õ%‚qç{˜"~Øæ&7§‚*QDÓO¯dIógIƒ1aw1äð ¢p ˜†2’{'h‚Æb†n‡bW8ÀÆ`¹óJÜÁÿQ9óˆ*e‡ä2®° ¹`‘Bø†E£X‘7b³%ˆeh„gâmƇˆcOzFµŠfC* ¸c÷± û³?X`S2r%Ö ) s_¡èo£H†•gŠ¢)¬ARzµ5 æMª‘xz&azJR!ËFïàT ¿0X®õ%Ý 0± Ðƒö€Bx†ÅøSh€|£Ž88çs4'“$ÿòQŸ¦\´X¿Ðˆ%X€ŽR+‹r +„’7€¤èä4‘Y‘IL¼DO¥8ȇJUÚ MÐD NàÄÀMÔÄ(p…0+À˜ ’4Y“ÕäMÿ™“:Y‘#ÈŽºÇ7û(ÑKÊEjA5çe9r3u¸ÛØßHSp ¢ð ÁÈ"Vâ,°•C³qy¸‡tr#·thŒÈ˜ŒÙ{Ç÷bP5)5‰‘¨~ëW5§ñ õP Z¥¶x‹L04?v•+B3@µ@ c ðÀ‰øö‰°6Œ$׎Chkï8ï—yn¡Òi)ÓNèÑi¨a Øà3Ìf‰«Ð RpŽZ˜h221f6Xb% Ð‹µ˜2Bdb¨–mW‚f ï"nL‚WÓˆµÁ*£ænY0Õ {ðfpvroÑ›/‰¥Eœ¨(¯à²oŽÿI–Ù›i©›>Y–È•œÂ!caIëS!ëeY Æp]1p wˆhˆY%Þ"#§P(‹  @7)¦°"Q ¯ð aùeÞ7™”Y„zŠç´žô˜‘ïù`óYU¦±8Ý È°RüéŸÝ'a–h°Ð °Ð%çР(m" R dà‰oѦj)ŠD¸›Ùu–™ò›ýÄCÍ(8WÉ·È96ã3á{õÓIçÐ •àaÝP+X‚ AF³ ¦r‰É ³ WY£4 ;š+µ(Û° µ2¡ö6žÖ–žeéŽçy¡nñm¤†6ËK*¾ÿ„'ÀÅ*N5 Ø "¡@šÛ¡§ €¢ÐƒC é¢[Ø…UB¦X‚˜ˆ‚%‡àaAž€""(¡8jh:¨„úv¸ª¡A•bRò_I+èRÖžÓð sÙ—Љ †@1öQ¦zŽðàs¦Ð 5Z(  ¯` ( h%Q ;¡\¯à2€%2àAz‡CJŒE™ƒˆ¤;R¨9&ŒT`"ÅdéÔ¨çS>ô)Ÿa ÃÐ)Ô™£³E>7£õ 4 µàsŠ‚+"11.Œ"¡¹2 Âð°>±Ê.€ ª •+¤Zh kz¦õˆåi¤’¹«hÿiQ™–9;ø^g¥(¢WWÊ—ÉÐ*+ºW.ÂÀ ¬IÛ •ûlÝ€(´ ´@. ð° ¦0.@7 û0²ÌÐ麮 Ð®ïÚ¢ Šoª7¹é›æY·Gh³ívFÇ6«â³û8!ŸCë„V1!ꆟHÛŸÛA(fF ˆ²² &Û ÞÚ >F«?† [©*àä0 ”@¶eûË0 ¯ ³*«*ÚJÝʘ©³Ž…8»¼I³3›¼Æ›Ç¯J2Cò¨Cǹ<”'‹#~€Ù°]/* ¿¨(ôA(Cƒ ¨Ð®Ðës?6f4À¹.@Z Óÿ ¢;ºÑà S«©|z‡ÛµO{2Û“´{¤z³8K<º{)ãn†|˜$`ÃjÉ Ù€ 0š^z%)`¦0¡ y@{€ WR ¢ -й=HµP Áø Ü{°°•Ñàã;ºÓàíª®ï ³ô£W ´P«î;·¹ ¨¥8¿±E†º]ð” çï×PlŸ×Q–YÙ—÷A 1a /õa  ж¶,`ÁöQ [¹©ÛË!<£ë 'à( „’(éb‹%˜‹Ž1+Ãw‹·ñû“vK¿Ë–Qf”P²È•â5« ØàRöóg Zé4pÈÐKäÿÀ¹4,áËÅ£› Ÿ€¾ð0ÆdªÆ.‚½Dƒ.lÌ«ôZÃn|¯ÜtL¥Šñ€êÅ,‚²ïD‰Ûñv` Çðsð9@Z §@뻵` SÌ1©40 “ É$< ®Ù)r˜Ž—˜l›±+(Ø1ʤ,¨q|Ã6nŠ4$÷Gr/÷‘Äð  ¸¬Ëð€ðÌß 4°•.€§04c e;ºá µ€º®  êƒ/(ôrÊch»¢ÜÍIêИ†Çútظ\õ Æðrð€€ að{` tðuð£¯çs‡@a0~ð dL-ÿ Pfý<Ó0À“ œ R Á °‰9 ,‚’Nn™4|Œß¼ÍQÝ‘ šÃ¨’0Q EÒ·üRf ð`­?–bÐÄ|ð£á² 2À¹ëzc;²ÂÀ£;€à®"Q ¦€ b6Íõ¡av¦4’5­ÁÐt+Ñ$Ñ ]Õ# ôŠÞÁtRUôa, Ll"ñ ¼ÙZÈ…eð}€ Ê á ×rm+cû^à" i œKŽUB¹ ¹+l>–%A–Ø¥Ro¨³’6¡ ¿óÚÜ@A5]S>^ó]ìThôñÿ ýµ¼Ùaœm wJ±4mÓ8²lqà x=Þ„̹Ñf¹ÖlÆöñ¢³Ð e†lðr$C ÙèY;KJZ·+Ù3 ÕH' çÚ¡i±=mFõ‘ °á ÀÎ+âÚg÷Ñ[…(÷ì®Âpíš —„ „¹ý„àu.€Ì}\ºacLàCL*Ìý;çç͵¶0y<ÝÔÙGn >ŸTáʰü-;€7°mkèl{ÀŸaPÚð0Ì[ — \™%h¾ 0ã Pã4pãôÑ íŠ%÷ Ün¥Ø»1*ªDÕéIä ÇíçÎÖÍØÿ]¢b”Üë½ °§+‚ üéAf t.*f…Ækª•¯ %` €ß5®Wî…0ÁË,À£2ÀxÎ,mÅÊð²à.»ÍÍN .ÝFÞëÛ¶ëäù•í¿ÃªR\«Ø* ýߣº%Çà >¶•Ы•µb ‡P„ð½Í¹*ë}ú –Ý@Ó`ü걮ГEǯ֮¢ÅkU§rUŽlUŸ[UŸf+‹KÏšFž«Í_)M˸ԪÖGî$îd_{Û½nÕ¯µ"b–:«Â:ó®RkÊÂëÔàFSšS®qGƒÜ›ÊÖ:,Ù,g5ÚT¨´æ´÷)Êz‘×ÎMí)£D\vÙÚÚéòV¿ÇÕ«e/›6wŸü4,i¥Ô´Æ¨BY*Ù©áPª‘Í¡wÍ^ŽÊv¶ÏM¥LYCÚ8ÄõÍî„][aîòwcþå+‹cËáW6©P9žýá-LÇ;æq}üc YÈC&r‘|d$'ÿùHÂ`r“üd(GYÊS¦r•­|å+'UÉH.Žc“ä./ìË[rƒ,¼] £8¯+vñ]¬áâ–šþɑܛ´ŸóQ£\èŽÅ¹Ë[.oh×›Ÿ$‡¹>¯½r–“ê;OyÔ­©ô ÿœÀ'¯ùÇßÍñ†OêW¯vxe¾ušç\çk;Û5îqqc›L7/ÚƒÞu«§¶èHW;ÜÛ(÷BŸÝé\ïûÑa*ö¶ûÝÔ¼®»Å}ï§»ýíR—|c«¾xV|ä‚,ánx•W»Š{ÒËžaΛ<퟿<âz̳}Ü玹Ö¿z¾þ뮟ÿüÐuozÍ:õ¸õ|îY¯w°såÔ²<.éŽS»'œÛ¢ÿ=ÞK_}ì÷ôö¶}çqosØ'_ù¼.ó·¿ôá[»øào=õùgýé“þÁÁ÷ùã1~køÇŸòò¿û˜ùžK®ô«¥Èã¿þ³µ½c¿ü{½+|@Ì3œ@ ¬À”@ Ì@ Ä@ ¬Àÿ3ÀÞ“&2A,AüÁ <>!ô:ä#?Ëó="\B Â&äÁ"ä3ÿû>#ìÁò ¿ëcB'|B)Á$´Â+l¿ôÂÑÃBýÛ½)¼»(Œ=ÿ3Ã6ôA-ÜÂÃKCéc@1„C.dÃ; Ã=TÂ<,ÃMäD4¬Ä|C<”D=ìÄP4ÅSüDQÄK,ÅBLEHÄDRtE¢?>|EX˜8ƒ€Úð‚ ›(Ôb¸Q~/ð‚:¥ a0€.€bø‡-°Ò³àÓÍ 0P®pEåT)ÝP5U0€1õe½Íh§b¨ .PÖÝp†–˜†€VÐÓBÍÌRµ ׈§РÒf-€M…‡-mV¨P® ÔKµ O€M €CAУjמ¨×b‚˜×Gµ×ÿ½äO›(€Ì”Ò8ðW€Í 0Ò•X„EØýR²0€ åxטֈ¥W÷BÙxšÔ0q% 6ÐTƒµ‰zÍШ‡1׋íØÚ0€€ –ÝÏû€CÝÙèÙÝÚýÏHW›€l%‹«} èOe5På ’ Ó&íÖoýg0Ô¢uW€ÚsÕÚàÚÚøZ@ˆk…ײ͊RPaXÛ¶U#pÛÝRºµÛÑHÜ–=€8¸ÙN#pP©ýØÞxÔ8(†sÚÐWà€Pz½S›˜Ü &ÛÒÌ6¬°Úfõ‚¬Ü НµÐøÑ¾åT¥ ÿ’…Ði 6PS `VÜZg˜ÔˆmÜÚ副¥Ux(Ôݕ٭±TÿlÜb0ÜfÅÙ(€b)€9 ]ÚE 6èÞzÈ^gÐæu”èL­†6ÝÜ%€dÝ]˜–—ý€S 8€yíéEÐ …ßÑuW4ÐÈÌGu]¤øÚ3ÍÖ¯ýWÜ Y)_ƒ=×’=ÞÌ$`ÞŒX.×»mV’Ú&Úª ï]Ô® VXœÝß›€Uaz¶;õÎ uÚ¿m`ðßZƒ>¥UÚ† WÅÝì•Ý1 ÛLíZÜHb6- æ!î ЭÙL=_àÆç%ÿå‚Gõ_Í­ ’½ ÿÑ•Þ8}Û­EÙ-Í^.6YÚˆàEá1öU…JVÿe8îb56aª(ZõßìõáÎÝâ.> Aöá›@]®(¿TP6]0•ÐFuQ©TL.Qä9¶Yïœäìü‡8ðÎz°ÙM%åˆe`üðP¿ôÏiˆØKc^›×ÞcSžÖ Ü"55å‡p¥åX> ©¿tP_^\>T¿œ¿äÎeF /¸ÌàðäüÌfmÞfnîfoþfpgqgr.gs>gtNgu^gvngw~gxŽgyžgz®g{†çÉ5ŠÝ½g~îç~–ÔT.€µõg‚.hxè‹][.îÏE•]68e®Ðÿ Vf²…Ò[[ÿÌçi8€ M` ]Ñ -Ðý¤Xƒ.i“¦fPjýÖ€ÐÛy @äd€:mi§ÕTI…ZSœ†i@õ‚œõÞdÍÔ°é8Ô™^ß“nê“–Ô¸•éo=Z›@ÚG½ßº Ž~è§u†œ=IÝPö\4EZoµÙ¸-Ü8Ð[)Ni@¥\§Žk¹¾ „ÝKMÖ„~T“-ß™¾ß™þk²XI}ë¼&€—ÎTKÚ¿€ÝÛ¹~ìÇ®k¾js-×ÜER/p._C^ak7]Ù£­lÞœéReì¬& ÉÔT†l×~jMÍëL}Z,ZeÕ[Ë]Ù–FZÿøì™–iCm™öÏämSöÏ–i6`í×nî’†äD1ÓµYW®Ð=åé6€M ëUÎîÞ傌æ‚D™ÜN6ñvnôNïªT¦Vo÷~oœ%’†oú®oû¾oüÎoýÞoþîoÿþopp/p?pOp_poppp Ÿp ¯p ¿p Ïp ßpïpÿpqq/q?qOqOlqqqŸq¯qDÏqßqG€;PË—Ô˦dË ¯Ë˜¤Oòÿq¨ìÇ´ò'7ò!'ràPr+Ïq&WCŒÉ#ìr/OÄ›  +¿ò,?Kÿr¤rk4K4wò(§Š1·ò2ßÊ”„ò6ÏË"¿Ë#'‹7Wò8Ç?.óýtUÆ@w–=Oò>Ÿ3A¯ÅBÿóEtH§”C_r Wó¹Ë<Çô9§s¬˜tOôestQõ²$ô/ôHñôu‡‹Ë4·t¼pœsAÀ‘©Àéì -¢©Í‰8ÎÄá'§Ó• iïOŽô¶K¿šcsOUsÕÿØéEاAª¬¥¶ãÞs¤¤zÆv¬û¾â¶­Ý$Ú¦Ò/fÙ± œã£G†òÔÔ%ÃqÉ+†“*Fš8`¨jXK =˜AA”SS®ED¤]]·FE²LL¸FE¤yy³ed¾kj½p|ÀMKËQOÀSSÏYYÐSRÜUSÉ`_ÃnmÄktÉnvÆpoÁrrÍsuËszßgfÞhfÝkjÓrrÑsyÕ||ÜttÚxwÚ{zãVUäWXäXVã\Zã`_ãdbähfällåpoässäxwä||˜xŽœ|’¯yЦ}»~ŠÑ}ƒ³nõ…͈FÊŒQÒ‹HÜ‘MÑ“XÈ›qΤ}Þ¥mÝ¥rܪyì‰[ç˜LåšRâŸ^ëœUïŸZä€~ì–oñ [à¡fï¬qì¯yð¤bð§hðªmð¬p‚‚‚ˆˆˆ’’’œœœ‚½‘Ф‘ª›‘¨™›²… ¿Ž¢¸ž¦¼¡‚—¤““¦žž©››¬’¢®Ÿ°¤¤¤«««ª­´¨³¿´°®´´´ººº‡¢À¦Á”«Äš®Åœ±Çž²È¢µÊ­¼Í°¾Ï±¿Ð¶ÃѺÇÔ¾ÉÕ»ËÛÁŽŽÊˆÉÇŒ”––œœÏ••Ϙ˜×‡†ÕŽŽØ‚‚܈‡Ú‹‹Ô““Ó˜—Ñœ›Ü‘‘Üš™Ô´•Ï¡¡Î««Ïº¤Í½®Ì°°È¿·Ê¼½Ð¤£Ý££Ü¥¨Ü¯¯Ñ¸ Ð¸¿Ü¾¿ä䈇䊊å䒒嗘圜埠嵅嶈í¹ë´‘í¼å££ä©©å°¯å²²á¶»å¸·å¼¼é¹¼ò­¬ò±°ð¾¾Ø¿ÃØÆ·ìÁêÄ£êÉ­åÀ¿êηéϹéлñÀ¿ÆÆÆÈÂÂÎÉÄÊÊÊÂÊÖÃÎÙËÒÛÝÃÃÜÉÉÐÎÕÕÕÕÔÖÙÕÙÞØ×ØÜÜÜÇÕãÛÝáÞàâåÃÃåÇÈåÊÊéÌÍåÏÐç×ÈçÚÎèÙËåÓÔåרçÞ×åÜÜëÝÐòÃÂòÈÇõËÊóØØäßàåàÜäääççèîààèçèëëëíîðñêëúèéóóóýððþþþÿÿ H°`Ao*\8!Ç B4XO[>ù´y󦱢6ûÕ»X¯äÇ“rôV²žA‰ùêõ 9r¢B‰6sâÌis'χ>. *ôfÑ£‰"%¨t鿦EÖÌè-_¾•Qjssc×)³ŽÜØOäF™ Ƽøo-R¶NÂkp.Ý´wæ}¹7.Ô¥…ö»:bÌ–.=~L¬uëF°Ÿ¬çU åŽlq–´ZbÙÏ E†Mºôh™¦S«.‹zõj¾}>:;¶QÛOûÞj7aÉ™RÛnyÖbÖÇ’QV½J’²ÌιJýý°9`âÚ!. m»÷ïà½wÿO¾Y5Ñ;­DøŠ9Û—Þ…õXˆazn¸]axÅöO#Âm%.´àSù1Ü`)ÔXÖIVmõTºôu8Mw_Bþ<K/»´òŠv-uèaxN> ^”O‚(›|XšH"|)*´¢7-2TrUÉXQq$ Eù(\‚‡]9Ðfq.Ï;LÎÒ 9ˆQ)eŸšçç†VžØW—!*"—óýf_¡¾Ø¤ÄýˆUJ’]f×v!º%\o½OKIŠh P¢JÞ ªèPŒjÿ¹e–FéC»ÕT—Uœœs5 Ö’Eõ˜¦döåâgñ WX˜uÉó /툡:§ª*ž¶Srë*­‡Ê:+Š/¡t«‹„ù6¦V`îH šÇ&XÙUyó.»eÞö)Fº$•>Åa+¾TÈí¶¬í·ä‚+nD±Î¹Œ)µ½Ž-VìrÇ­$)x;R–æJC6û#§ü]tO'­È  Ÿs“ÞêÕðͱlUt.Äüµ•UY6ZdYJÃ:'\°ë"WïYV1¬Öp…YKôÀ3«ržÔá:œsB¯ÂÊ”6ÿlvAuÕ kgx4Ò)]WÇ“ýVKsµÿgµ7¶„Ñ…Êd»õÌ4/ló¢b½8ãËdOŒEY<Æc²ÔÖŠ© ¨OÕ¨¦b¨Q'gNÃåSKƒwÑE3‰Ïìµ”³›ö^eëë¸îaŸ}’Úk³½®r>v~lJŠdìšÊ]íl¼þëŽOäa3]|ûáˆgX³É¸ï¼;l8O]ò¸»òZcÛÇ)›ñsallr)yj(~*{LID5‚Ëš÷W;<·ËKîÈ6¾àõîb‰°&å+½EFdê1Kh$²° Dù°.¢i8a …À´0†í%쀂!xx—’¯ƒ ]`êÇGvc´áO?.ùF5ÀÐ2@ YH† &C}ωákœ_6HÆ2šñŒhL£×è4¢qyðbÞÜH¿ùÙ‘¢Fª±RxÁ MXB AÈBòˆL¤"ÉÈF:ò‘‰ 'IÉJZ²’´ŸSè󨇈ð0"¤ IÀ‚Ág]f@ðzÎGì¡<7n!›á?ô±ˆ@PcgX8êAd Èà »7@UÑ.6Ì!_©Ã¥| ZøCŒÐó¨)~¹Wdì8:zf}Y„ÿüG ^~ÁuVÈž0¹ÕEô´óCʬ¡&—™Lð9å™ýb¯æ¶ÿ˜³Q3$D«Ê)•#Çæ/W;‹Z BX£$ÉÈÞ9DqN-³{ïDÌ1ý2OÖŒ›t”érB«È-dÚ`Ísf$ÐÜË$ÛleÔöI] ©$·è‚32„½[p€_d¦;ÚÀ õž&ɧM*RD½‰&ÉÂàIð!%Æt›,áÍB¤¢¾$z]Ð"4"Š‹ŸÊ.¨÷ªÇgÔ´Æ…‡Ea*FœÚ¨ºI”—Ò¦"#–§ì§jg“W·Ã ×á‚ ®c†Yû§:¥­m­Q{”’Ò«š>“Šæø5˜MÆ#kÚSV´4¸@#ƒÝND»N‹^¨Š³§<׺;Èÿe0ÊâO:'“¨µ)ˆU¡€4ò.–$~E‹wvX»Ý´%èP†'Ðsðb¾`툙ÑIÅ™“­mx½„P!ê0œá›@ÛövÃ+¼J޼:œ“©´«4IUK¬5°%ý©»ú5æw9J[ÇÙö'ô¡Ï ‘’à1LY âHfz¶á®7«>"m‹bé©çf«¯ ˜8ô´‹ÿr­F=ð2e;[žhX©nÊ‹ÁdÓIÓ9ÏIæ>UŸ©™Òy‚u“‡cGŽVÌ¢%21FQ\`¤DÖ=ã­Ka\¶[MÇ$™ótT’÷:ëD\µF³¬Uµ¤È%.I’·»äØ‚´ÿÅ[ñQál“Ÿ¯lv¢4\5)x#öm‚¤Q~:d±ˆI¬dØ ˜Å.ߊUìâò2'¸‘Ií3D³´1.Ù°V¶µ«½sJbe†,³’ðWBëhôYÝ<çHÇYΔÆtÔt«OK#&A RKÔ ³>•´½u+ (™Æ–ëƒÕÅ,‰:®›Ý®˜Ö1¶u3=eÉÖ9”|› H7Ó\¯°”½õª}Á D®@m0Ü ÆCµöÚY?úÍàmrÎr­Ö‰hX¡œe憅´¯\ä8¡3î‚^<Êã¦u(‚Ú°KÃÕ›±Rr,`ºý0~ӹצÜì—ï&ÐÛR5ÿA8É*¬o%!iG#XØAaöÎy 4îdŽ‹Ëãùžˆ9¼ŸÄ²”µzŒbØkÜu—-¨pLÔq qø¢ȆŹxí{ך²úî¸ÏÑg˜5Ç»BE™w´kKÑÃÊf)€Ö›’v¼¬$@Á*¶Îή£Šç™ ûÏÇ®›#ß±›Î7ËÄÓꋊO9¼|”ãåäÆP` ¾k ÀÝÂvŠ o" kÛEìžüDJ•¶;ÕÊ4 „‘¶’ðãE`CP€íFûâÀÏø€Á.iz’>)$2è …{!Ç«¾\ÚbjéÐ8 ˆ0jŽ˜Êóªýÿw@xoŸÛ‚';Èi²|œ`å2`ÁìÁ_¼¤~&´;ò r÷á‹Yð‚B8‡q}'zé§~ÆW€=‘vv.î÷v‚Å óôAK$1{mâWê° ¯ ¦àw;7|‡€Ç‡|çG^<óvpN›q&X%6²A©5~é  ·€ ì(ê00­PãhG‚=g‚H˜(é—i:#1øÒ^"a?Ò^t&«çTЦ ®ã:a°N¢'ÙE6Рآse„—‚lu‚Mgd’nGÔ#KGOáRýäiÞAWÐÈà 9UVOÒkV™Ð ß'€R~Pÿ–„·F‘g¨5\ÊcPT¡t‚eAi¢,R&JÄiÈÅjÎ`>UabLb {B„#iÄ7‰ÈtI¶x‹¸˜‹l/uDPEs\ËÓ1í“!Š V „ WpÑIˆ¤ 5` ”ð;À¦àŒØ˜Œ$IºØÞ˜‹iH‹§gÀRr<QS$± %a5\g’_ßᇀ(ˆ]À²ð »P†Ò³à<ó}øw'k±ˆoãøq¨†%è†M‡ŽÈ“PðU,£Ó\¿A/Ïdá¡…[X30ü˜êB Ñ`-±À@H0ÖF€ùr–m Y“³h‘½ÿjd‚n×ÔŽg\c϶*9x ¹°ŠØ¾`db-%ÖâÓäb#¹!䇆æ'Žk‰ÔoÓS§ô6¨e_ô>Uq#G/\ù Ë3N‰d­à{æñƒ°!?¸$‡X*y†²(“ÛVTl4nè&E:¨5p›±D¡Ã&ê!WSè˜lgf%Qd+Y†ø " ­ ™à ­ð2¬X±ðŠõ »° )(L“G8“49‹’ø@û‘˜¼øÍá1 a&7ó6•™h!æ§É Ò§Y­f¼ $×¥$Ú‘$“f® “\I›“V˜_ gkÑYìGíÿfMYµjéiP£U—àA•£ ]U90³`—Þá ¯ ÕÆËà  ÀR)!| J"âb­`E˜±™Ƽv[»¶¿VPÕÔFÇ£PsJèÞQ Aø ‹X-ÀÀ'-¡”þ€Š60+I­` vyÙQI²š«Ùœîôš º ¸æ —ËV}µ2løR¡‰#ü41&wMÏõƒFV ×ëbc*K ä œŸÙ ®° ±PGF»à@!@àÖi™^7›:Z›;ꕊ`à@ÄŽÙ¤`Ž2G[¡–ï“#F3Gë—õðœ K‰œà1 Bð Á°”Kÿ¢'$j->@†%áŠ$úk–² <à³@ i¨å¡!J øIŸ¤•›ûÆ£ VYS¶‡‘o’RùÁU˜¢rrRlÉ<¡¨zb*Ð0Lùâ‰:b{’$ÀPÀ >À™â /àټР“  ¦dj¦7Ú§©¢­bª?az]‰ª§êL­ê/1ø±ÊžHlii4ñ‡«Q¤†4ÉÏYbÑ$žŠ?˜©ßzšäÀ_5*Ÿ©:àØb[`'ðð©`³@£6zõP¥ê€¥CˆŽ8®ªt9º• §Qtt: b†ZíS?zºD{š‡0õ§Þÿ¡h¯0†þåÏ)0³0 eê_K90¾ B °>É™I2 ¬ ÿÛ —@ Ú­õਮ¬ +®Èèg®"K?ªnò>£,qSG͆DÌuUÞ0”7«'«]Ö@Pà 'Áð @Ð »ˆê ÁP†»€´4À iˆ­0Þ Q+µÿÀ J gª™¡WȪ¬Ûµ ŽƒY®%{®›¡)™×va…ÖT¯jQoÛ<|èÑ€Ô0N¨Ðœ­<¸á „Gˌ۹’‹ 0`¹-ñœJr Åd°Ô¹ˆ¶ãµ…ç¦`º‚ –7µ|öÿ%Kßi Q?µ7»8n…P pð éBP¿;ëê °B€ € škdO«¼’{ —p’*!b½Ñ6´ò±ž«Ú¹½Û©½«JgÓ¾³k>Ârø±§$Û‘ƒð‰PՀРê-£ZëÁ ¿ËÕ¨BPQú° >ìÃ{ 6°ÒY*€H¸Wy½!‘.£Kº,¶_k“þ–x'#¤U5ÿ‘#ø„à?„PÖ€Â*,õ•%È‘$B>P² 0%¡”À ÄÿÐ [`¥¹E·4ZŽÝÛO<ÅÿŒ®žøWå2{7XŠ~@ zà àìK ï+ÿ; V×¢€€%! Š*=›Àh3¹?<ËAŒ [—,É™àG(ˆV#¶$Û¦Rœ½‰<ªiT“j"Þ!™œ!“ Ê'0Ðÿ Ì‹ìdÝÀ3)%™mâC‘\„ðÐ0Æé¡Ñ÷ðPnœ©» íP¦»`ÔzÇa ±@§@4€µà™×½ßaÓh’/*ÂÏm˜€=²>‚Å {ý˜ÊÓTº {諹G@Cp—K_셹ѩ ÍZ¥ð Ã[¿«ÿÀ ›0R[$à¿;Úeÿ!oÜ §ý)ÌQש†v­Í½¯ÝÓŸk²v}É6Ô[\ÔeqÔÛ¡Êâ W‹à`ÜþãóVÇîL >àø ³p Ÿà+À&pœý!ÜãW-̯À ¾+Þ5ÝËD^tíJ݉×\ßæ}×$®Ó½vâ_G=™{H‘Bæ~ s&úõP ˆ@ ‡üþµ´­€ 3`§`"° ± ,ÀihšÊ«ywäÀʾáãMÈ,.JéE)LH® ,âqíÞ)ž²n;âKqÌæ2nÐm¬ˆrãߥ@¨Àø» Í[†> Õø»@@ä0@°1àE¤ÿ„%Vå™*¦<ÀáðÔÄí"&œ†‡§V^`.løœ×T¬âr1ßMÔ£w1¾Ž,<&ŽY÷= ú=šáÑ´£|¿á‘ˆ³@¾À7À±p´:ÀÖ%@Žà$P_ú©-ßZ¸K«ážå|4¶ÓO—éc#íd.#MÔ&hßœÅQÑ/ÐáaÔÉœN—-ÁÆáÑÜà­¿¾à70 1 ·žŸæ—FÜœU©­ÀÊ~hÍŽr™S(3Û ñðxDGÁˆðN“GgGœ£H  ™ d6ÐŒÐP 50  ›P ™™ ò0°¦`ë™  ð7 5ñÿ” 5`ñ,_™0 ÑXò›€ñ‘¤v»xGdG _ô”“Ïe^íŸÎ1¡îÏo1¥~º§æHüMKë4å­ðèýÇ=à9 »9p¯ÐÖ0cìªÖÆJá<÷ÓgÐ*EíbÇÞ-Î6gþ¦H‘4?sSn^áåAçSêòœ]ÓV ùi<à ]Bðœ<ÀÝiÝ™€š[¦bšf3ý ±Æz âx‘~éêuO¬mR¨¿é³ýÓ‰Œj†¹¬_Ås¡è‘ãš¿_@X¿AHÓR }»î‘ÿò «º\¢RÊœß7öWnÓ6ÏÒ¶øùZ¹O[eº·ÅÓ|ÿ?Ðâe÷j*×ï]Q^ˆîÌÖ™ê £€ö¡Ü _à¿Bà»<𯮾 Ò©ö¬ÎM0³<ˆý#HÐ[A„ .\xáÂõêåë—oâ?‹½IĨÍ[¾|Þ´åƒXÒ$C‡'U"L¹ReK—&aÆ,9se?‰9uÖƒ¶ÓçÏäZÍ’(އžõZµò¹´>Zñ‚ª£Õ«]<˜ætÊsV+r»Z‰+ÚjÐyÖÃ9’`>mõæ¶98aaÃ?D¼¸qIœ@“J¦œS(ÑzF‘öìªsi;¨R…ÞØá«/¯<·b MlرeÏíÿ±Vb«·ž[7¢à¼{ûÚ,x±Ëݼ+L·¹óÁ‘ö¬\¹Ý«V¾ÄÍ:ê Ô×Ù:Å~½u–Ž<|ùúÁƒ—ø¡â6]mìª8q؃In¥Õ÷Ü[î°Á$ê§¢‹2êg#Áû($¿<é9š(DNB¸0Ô-:ʨ£,˜Y\"²vg)ðá X“H¯bñ»þÊ+OµÔòaÓÌá% „h¥†ØêÙEE€OœX†RG"s|ÐaÊà!ð$ìš0:oºÜè·zëç.mÊ LC™ÐPC WjÓM%ó¨]„˜rJöÛI^x F\h‘-u|ÈQ½ÿÿ ²Q^Z¢Å¥„²!€%“'%:Ò‡$g æPžTgʦ|çÊ’v3ÍÞ¼ü² `²è"5!zS.4oe5×8§û°¿ZÙÂÐPº.»QÀ«çÿ¸ utØep˜åX_Èq6[ð<´ïüô+”ûSÍN ~ÔaTRpÖ-ç’ˆ¢ŒÚ­N5u­)ßZu•î§9}Úe µÚ9Q-_€º,©Ï nK= p˜m€X83~કhr«ÄwAm+ÐxXgJ¶êñÝ !Ê #¾vÉ·»ŒÛðÞ˜ôÝ—Wž{¦é_ŸÞià‚ÎSá¡f­¶”…È3â‰+¾X³ÿ=üX¶O…´Ú™2S X¾Ùe›-ZÕÖÞhýçå5qÆÕg uf¬ß^þ•‡`‡å¡kc±óNÙþ²ã®kh¥¥ÖZl·ën;³¼½/¿V‚i§¶rµªÇNFcY×Þ…Þe{nyùBP˶ݖC¹Qâwõ¸€ÞIè¡í¼óhÉNòªuê‰òP=…Àáw´Î ÅH#"–LÌñEIy¤*G”'‡‡;u8õ¯0IgHU†*¢H¯ºm› ïÏ6}|ÔYO_ý™;¬ÄW„€eœêø¬Ä´œÚùj~fy³õÉ4|’EnW¢zc¯€ÔU‚‹¡¤¬êÒXV&3‰!Yr—ÿNB’2!³š×ùZÆ&ö (uªK›œªóB»Á†ã‘}òç7m™¥:crPHD¢½ö‰N"+lHA"s ™°tqKárˆ(ÂúJ†S„Ý›²h|…–IÚm¶B™1eO/Å1ŒÙÈW'¢ÊŒtQÛùÒxB&Â-Ž­sŸaXE;n¬5¯á";#™0úå#gÌqòƱ²¦CäØÄGF1†y¬ )IÃù¼B‚‰SVexèF¨…HD#ÝÎ(Ę)±‘à“c$[©×éÄ’””È,s¢À]èI2ë ‘X½"wž$SC‰<&KY2ßΰ— ºm•¤¦)éÿèBZÖ±2bAQxŒõLý„O<’ ÿân€ò8åcåö†è‘ÆËˆ i¦­¹>Bò$±Ì‰-)iËo…+r/ôç ÇtDÕ31ˆÉˆ½qDy*t¯tŒ>+*É eS›’¹Úð¼‰MÆÌŒ]äEÂ"1šP”èDóùR|Â4ˆR iF·Y¤´¦"IWªœ“6('*hKY*SZt¡á{ÝNmú+pAN—ÍæA ”И&¤¡^‚èéŒ Ç9f5©J…?kéÔ¦V‡›Kù(H5ºªYæ§s ÉOs"‘.„œûª#])Ö¿–TujAq9ÕJîôly¨„"ÿ Žp™ß;eNŽÚWô…U³c¥¨IÌ:´ž5´ýT,_ 3¯½ÌÕôZä*¡CÖ¹T¶Ý#ìN šÇÛ¬†ñÍA>çYµ}Žš®"nq{\ä&W¹Ëensû\èF¹Fu­{]ìfW»Ûånw½û]ð‚7™Òm®G¼T¦èš·Kè%/tc{ÏÍ6¾ƒu+ZskÅûÒ´âKjib ÑíרӜm…àë’Ïæ÷Ž£%mM›ù¦½"䱿ÝçN.‹Ùv"U¾æp…ë[X‹6¤þ¯NZ×2‚¤ˆÞm‡—ÚÙ_“¦¡Uð‚,àÎMA‘õëq\kàç,ÈBÆhZG[cÞÿ¸ÅyÙql˜Æ@¬™*Ë#¹:Z6ñ“ÒäTzù½,Î,g«c ÓwÆö 1hß*fXé^+ž²*ìb(ßYÍ“¤q›¹8ºé­î‚WœØî6vÆ“íðhS\šöæ8Ä~“„ÿÓä®–÷Û:nB‰<äR–6É©=óO×ä;ovº½Jôy÷¼ÕwÃ~o÷5çPo¹ËÛ½ôw7]ã¤^÷Ä+Íò—{Ýêúö9¿žÇW«|Ù£žzÕ‘ns‹[›ÍZ?ùÓÝþv£]ìx×»‡±^rºÓ剾¹=ó޶ÝïÏz®ÉÍu¾;“Ìm{Ô÷¾g¹‹ÛñNßxå-¿Ðö†^ô£'}éM_\Š´Yõ«7COÿzØ77åcç9ík? Õ²V¹Ÿÿ}äÏv°÷þòçºç‹/üÏçÁ'¼í×®v¸;?ú¾wé×_ý®'ßøÛç~ó³¯|Ã'^òÒŸ>ñïnþî‹üûg¾úÑŸþÛSŸ……¿üí?é÷{ýÈ¿ûµÏÿþ[¹ë›?è+¿ÿÓ¿û<ÿ;Àð£¿ç#?Å À¤+À¾“À ”µö«?\Àó³@ôÀ Añ¿ýCÀüã@øÓ@ü=,ºľT@ìÀ„ÁDAkÁ¤AÀ|ÀÄAÌA $Á´»ÜÁ4Á´ACË@ <ÂÎB&lBBƒÀd¿¼Â B/œÁ%üÂ(”B*¬Â$Œ@+Ä¿ Ãÿ2dÃ6À$@,4ÂÃ:¼@2Œ2;\C<¼Ã>äC%<Ã,|Ã=8(üÃ4TÃD”A7CD\DHDBB ÄIDCAD3¬DK$Â9tÂHœÂL EQlDR,EÔÁMES¤DG|ÄKdÁ"DÅTlÅY¤EL´Å[\ÅZÔÅ-äB)¤8€@‚8HÞ3 m@‚Àƒ@mX >0èŒ@ ËÄLàƒº¼Ë¼dˆ>Àƒ@€ Ì¸@3‰z(òQ€ą̀<€0̸XÒLºH`ÊÉü (ÐÌÌÍìÌT©Í~H€H€1ÿÓDMä˜MÍ$ÍÝ|͸(8€Àœ¹”ÈãÄÍ`Nç,ˆ;8‚˜Î•ȇ@>€É€ihÎÅ臀µ <0õ<-öDø‡Ñ„ñ,#À4€|Àò4ϸȇ€Ú$P>o°Ï>P ‰3 € †Ùì8ƒýŒL‚€†›1˜†˜ÍiÅìέÍÞÔ†ÀeP…P -€ièM ÅPþŒ P€i €xÑ%QJòP 5h0Q }÷œ†5ˆàË%U mˆÐ5¸ƒõ\ @õ<¾ü‡ÌÁ(@£iðÎÿ1)ƒ0 m€oÈÒ- Ð ÐdQ‚@3H€  ÐÐê4+5­à+-Çt >X€0Ž%ÁÀˆ ÅÓµ T‘¨?TAeN+=ˆ4ƒPT‚`Ô˜ã¼Ë?µPD½ÔLu‰ Ì~=ý‡H€PµÐ•ºUºÈQ@¾üÕùŒ <€ÑTÃàÈõL€ÚlLÃH(€]ËÄ €¥T‚€Ö¹°Öè+= Ó 2uT+ý‹(0%ˆÐNš°TºøÏ4 €1ц¥ uÕ W9…Wy¥ U…K èƒÿ|ý‡} µK-WhØ ØÖA€‚ÊDeØy]4‘åUà¾dX—¨‡Ç4W1U(XÏiSuýCÍÖTÿ$–5Œ>€êOšuÕÁPׇ=ƒ`Xêdˆ‡ý‡3臊M€ M€ð†ÀƒzðØ*‹ƒÍÑx×%€¨]ˆ‡ÝÑz`ЬÝZXJ€ÐN†²­×•À0’ȇ-…Ú‡ð[ÀÕ[m°ËzpY•È H:õ†dí Â,@€Š} U1µÏ1Y€?Œ¹ÜÊ5Û<}Ï@M µYˆxX÷$Sv]Uát eN ל=ˆÿ;øYƒMÊÉ´u]8uX+õWj}ظݓ(À•Pã…\ßÞ•¸ƒ°ÊðMéT›Å^ª„ÂWw5Þ•8PHßiàƒ0=jíÔ2HYÃÐ[§UÏ{-]­ß»­Úõmß÷]ÚÚ,Výͽ5ƒ°^z%Mß2°ÐP¥íWñéY¹MTÔe`¸œ Vàó]TF…^–`ØíH[ÀƒNà¸àF] ØQX€i€ôU€>haFˆNßÑ…K¾äᕘ†28â2Ì;àÓåÀZ‚˜†´Ô…àP ‰~P€pÞ¸è_¥Ê%fÊ‚àªÌ_uV>ðÓÿf Ì4$ÖNoHÛ[1ó[‚`SÌtØ1ÆâF=ãHc”ÀÌ~`ÓÖ 8ÖT$.ÇäãU±cš@ƒCö†C–JE~GFbÝØc4~KMÞdNîdOþdPeQeR.eS>eTNeU^eVneW~eXŽeYžeZ®e[fË>@‡8ƒ6½e_þåW>ƒ%ðX`>fd.eavÖbÆW‚XÖ½2N`ÔÄÒÓ\×@ƒ¿4ŽgÖÎ3î’æUˆDƒæÔRmH€¸”âdnçcæ»L€XˆX‰ýS€(ƒy€|¨gq Qa&WPO¾g>4¸ÜÌQÿàƒ…ugÞh†æW}¶Ð÷äV‘>qU€; æqÕ‡Va¦ÌÑm%nõNèP£­h‰†>€TÍ\Žj¡¦ÚaæÙHj£¶ÐZå`8hoÀè¦Naa a^è0mæ <Í\þ¤è¨fÔŠj±vçe&fÝÖ8…S«mM4ÐnÐzøÑ—¦OxSWµÐù,ƒ¦fQˆPq­ˆ°è¢kÃþå²Njií\ëxýkŠÖ†8è|†aN؈ý‡ÅÎgíDØù|kíDƒ„Íg(ãàbuÖ àNmã>jä^næ^ <(vnnéžnê®në¾nìÎníÞnîînïþnðoñoò.oó>oôNoõ^oöno÷~oøŽoùžoú®oû¾oüÎoýÞoþîoÿþopp/p?ð¡Ž=_poppp Wp¨p ¿ð ‡ÇNÔpr”ÆGÇÄÀpg'CsìÅmŒCgÄÇðñßðÿpñ·pÿÄsÌñ÷p_‰ÇñÿqvTq?q#7Œ Ïð!çqctrwlr)·ñ ‡rUDñ'Ÿòq%_r+F"G.Ïò#rÿ/×r2ßòWsoóåXrGó(/ó"÷ñ/ßñÅ€ó;Gr;—ó+Oò4 =÷s0ßóvgñ3ukìÆ'´> ôuUÖCRtWuK·u¨ö]g$EöDwö¯R%@ô^ÿukÇ,eGCd1i§ökököp¯vÌêözƒöoG÷m÷tÇ0s_Ç>×um×Bv_÷rŸös¯wzÇvpçwu—¨w/õXŸôe‡C×w% xbøYöx?vÿy…øO7öŠ¿õVgøÅ˜øUõˆÇ}÷ƒ¿wo·w‘?yrGùv'ù|y•7ù”ù•ï+ŽÏx‡xœ¿øCoyšÇwxïx‹/vŒ¯õ_ˆš'úœúÿy›ú¸8z‚ŸwNœy™‡yª7*¨oø‚/ù¯ú®¿ú–ÊzdÇô¦ú¨×F^ÇzŸø›×y²Gz·§u¶Ìv´göŸz«ÏûR¦{Çû¯×{¿|²Â/|Ã?|ÄO|Å_|Æo|Ç|È|ÉŸ|ʯ|Ë¿|ÌÏ|Íß|Îï|Ïÿ|Ð}Ñ}Ò/}Ó?}ÔO}Õ_}Öo}×}Ø}ÙŸ}Ú¯}Û¿}ÜÏ}ÿÝß}Þï}ßÿ}à~á~â/~ã?~äO~å_~æo~ç~è~éŸ~ê¯~ë¿~ìÏ~íß~îï~ïÿ~ðñò/ó?ôOõ_öo÷øùŸú¯á·{„_¾»×ÿüOû–3,hð „ 2lèð!Ĉ'R¬hñ"ÆŒ7&üçñ#È"G’üg¦$Ê”*Gž\éò¥È–0gº”IófI›8w‚ÔÉ“§ÏŸB‡’ J¦Ñ£5•îLÊ4¥Ó§9¥ÒŒJõ*J«X?jÝjÒëÊ®[Åb%{Õ,Xªh¥®}Ú–é[¥qÎ%Z7­PhxQêÝK²¯_‘€ƒLÿØ£áÉ3nìø1äÈ’'S®lù2æÌšNCã1ž÷ž1` Ï?Тý–1€@[êУý¾Ž½z¯‚ ÎØž–iÔª}{E£[··á[§0pÇã×õ¨ö+3Ç  @ý[´3úiçî,šÐøW¾»_3¦¹ß?m¾hÐà©oo=à†þÝe,@õ¼wÞSýphc{Ô- ]jãýSFx™Q†Gêy"^hðñ7äsbˆxM3Ó¼ØÏ‡1‚¥ÚxÓ!Ž(¦U†õxc#Œ€Æ9^•ùüC@ ,ð„X6xÿÄÇ•!ÀŒ_†¹W$Ð¥™xõ3À4LÃæ?`â…ðš—už VšPvîuG{…þ)•8úsµwÕ–ÿŠ^} P€7—úåÍ@Ó'˜z€7àQf¦z¥ }ùÀ©®n•@˜âQ«_TZÊ+UÞØ%‘N©%v²â¸À•iq×_j,Û,Xô5€6ÒþÃ,^­5JwÓÞIß?pjËmZV–î¶ÔîØ§²í^ÅG¨‰YRŠi”lé ÁùôûoÀ`-0À @ž¿&§{'ì• #ÐÞÁ§5Mg,\1Â{ I²ÇRFX|€lF‹>5ÍŠXæ¡W –±s?ýÜì×– Hés8§…ÇtD½•q ýó^Ð$ ´ÍEûÅ`Jo¥nÐòae?!ù,-dž777˜JJ”UU³HG¾HG³WW¤dd¯cc¹}}ÁLJËNMÏPNÀSSÏZZÖQPÑZYÜTRÜ\[ÁlkÏtsÜhgÜjiÓtsÖxwÒ{yÝ|{âVUäXVã\Zâa_ãcbäigãlkäuuã}}〓¤’“¦¤¤¤¬¬¬»  ¹¹¹Â‹‹ÂÉ››ÕÝ„„܈‰Ô““ЛšÜœ›Í®®Ä¼¼Ð¤£Ü¡¡Ü®®Ý´´ä䊉唔䜜㢢䨨岲佽ÅÅÅÉÀÀÌÌÌÕÃÃÚÃÂÜÊÊÒÒÒÜÜÜäÅÆäÉÉåÏÐãÑÑäÛÜäääéééÿþþÿ€P‚ƒ?!"$;"!?ƒŽP?!>>!@PA>@M‚?R?ŠŒ;¨;KP4RR94#¦Ž>KA;;LJ,R¿:JO‚ÑPÆÈÊÌRJÏ@¨tÁĉ„X"<˜äU³P>ôÑ¡C:øø!A(VX¤nGÚ !8˜ò‚ "IÉx!‡6ÈR£Â 2ØÂz>@<ñÁ¡Ã6ððAâc !ù,Eˆ)‡ """***444;;;DDDJJJTTT[[[dddkkkrrr{{{Mx¨t€¡y…¦zŒ¯p±z—º}š»”;:¤@?™nn¾HG¿II³eeÃJIÏOMÀQPÃ]]×WUÜTSÜ_^ß`_ÃutÏppÝdcßhfÞlkÒtsÜrrÚxwÛ{zãVUäWXãXVã[Zã`_ädbähfällèjjåpoässäxwä||ésrê{|˜xŽœ|’¼‹ö“9Þ¥mܪyì‰[ç˜LåšRâŸ^ä€~ì–oñ [ï¬qð¤bð¬p‚‚‚ˆˆˆ’’’›››‚½‘Ф˜›³… ¿Ž¢¸ž¦¼¤¤¤ªªª¨³¿°©©³³³¸°°»»»‡¢À¦Á”«Äš­Åœ±Çž²È¡µÉ­¼Î°¾Ï±¿Ð¶ÃѺÇÔ¾ÉÕׇ†ÕŽŽØ‚‚܈‡ÛŠ‰Ô”“Ó˜—ÑœœØ’’Ü››Ô´•¢¢Î««Ïº¤Í½®Á½¾Ì°°Ê¼½Ð£¢Û¡¡Ü¥¨Ñ¸ Ü´´Ý¹¹ä䈇䊊퉉å䒒嗘圜í¹ë´‘í¼å££ä©©å²²å¸·å¼¼ò¬­ó±±ò½½ìÁêĤêɬåÀ¿êηéмñÀ¿ÆÆÆÈÃÂËËËÁÊÖÅÎØËÒÚÚÇÇÝÎÎÕÕÕÔÖÙÖÚÞÜÔÔØ×ØÜÜÜÄÒâÜÞáÞàâåÃÄåÇÈåÉÉåÏÐç×ÈçÚÎèÙËåÓÔåרçÞ×åÜÜïÑÑïÚÛòÄÄòÉÈøÐÏòÓÓòÝÞøÒÒåßàåàÜäääççèèçèëëëïïðóóóþþþÿ™ H° A‚­*\¸0!Ç Bd¶Ì˜±dÌ’¡j•,Y«Q‰i,£±VO¢¹ÕE”Ë*¢4¶l ÄdâÄ8ñ Äž@í)tèâF& º´iR¤N BºÌcMˆ8-Zdfl¤K®^I¢l2¬XŽOnÌÉì§ÅŽ[òŒªp.݃vï,©×àÔ»û: •°Ñ¬.ó´X³bɬ<—ÍDå‘eK³#9zÄh±͸?3†ójé˜4O«^ͺuE×°c—N-»ö錂¥æÖ½[°á¦¿{:–¶+d] ײû~²È÷F8ížØœ_Êm¡’-*C™0N­°‚ÚLñÔÄÚz†W¹$1c™VvÑÇâ—Þ]ˆ^Ém2ͬÓu,¢ÊKýë™âÃmÕÞVæ’¡m„¤ Ùi`YžIW¯„ø½5ï¶öB=2‡s¿×¯o,S-³Ô6¹ÿÚí¬áfæ WntpEŽ–U+§‚þF¨hÍ]7ÓÒN×¡å ž\XÞzçÉ·¥ÖW¡N®°ØUÕš©×cÆRš<>´lUjyöÝäOË 5å%ß}ç§:õðYÊ«´dô m®¡¦©töZdÈe[ÅÇ”¦€ÆãŽùzÛsµïw<ÀŸëkÌ­RMÎûšJ<Ñü’W|-#b›iœÇ%Á§Ñ–ÝKÒîrÇ4ðQ‹x§:›ÈÀ:ðŒ  ÁÄåJq¹º ƒ… JLd©e’! P˜ð„(L¡ WȺð…0Œ! «óÁÚð†8„`øÊGÆ\ }ï²^„ÿd™•0ïXáÖL‡Šc nMÔ{ˆÛ®g<¸£™`‚2QŒÊ 0€æ1 Êx8>ò!ð.*:šB–Õ«±D&pÂÒÉG€e®Ö Žm¤1Žºó+*! I B”ÐÅ’ñMßÓœÀÎXÆa‰o)i4ÖètF?„8*2 KÉ ·°ØýG!¦41ÈZäáš`Ú!C•H2î°‘}råR¬º‰üï[ùCÜÚº³©Ë""$Í€#!¨"H‚'˜å‰$4B•_l%#ñËXN3*R¤rò§¾Ð ‰‘2ÔH.ûÕQ„i“ä@C(Ÿ¤"ŽHB*AAJG@sw«ôŸ,ÇXÿMGîs–VYJWâ÷•s“ÚÐYÇ’\É8¸sgúŒÑ @:B€ìÄ=uç41noœÔ”[Væ0Cްó¿²óœuÌÎ¥86Ÿ]t¢Æ e åéE|J“¤ -£HÝ•”ªHÊŸ¥ŸQSç¢MÍklÁ•g6È’ùŒ†<‰(‘h[l¢¶è-$¡ˆIìZ>í¨6¹Ôñ U€êŒ¢¥mFb›T +6E(×íj+âJj(ä‘­b*n‰Å ;ˆBœIùÄ×OOõÈj¾Õ“°bÌp®v—á K°’Ú™ó.r’WålgšL癚GIÁ§mÚE!1‰Xÿ(b‘ÐW4ÕÚVÑõÓŒ@+k9K—KÉ„EÈìV$fš–[;ñÒj‘È8‰ö°mšÅ ¡•Åê6­\«oƒûÛ‘’·'Æ•$ªÒ»"¶Øï}†ò§¾b‘½š$;ë¤PqJ‡>iE»¹µˆw!»Ûðöveå%îy'âÙZF‘. > hŸº³Ìl%Ç@í ¤•«(mzñ¯EdK[Ûâö»5ð5_™`¸R6)v.ƒ;"¡omÉ#Øu‘YJ⟠‹$3ùÖ £cñ ¶¼S,c ‘ ÷TÅ ¦f‹]쯦,©¶”«r%vÔ›Ð8zK„œëÖ"®3 S”üÚ«D¬\Õÿ¬hMqïÄ‹à÷ó²~1ƒ5+WÚá¨(o‰hJš®©B°|ÆÒV°—•˜pµi†,ðœ<<0Ê,Þ—·R. ¥ÇÖ…ÍÐr ¶àŒ¥›Î‰JXR“Òq„Í}ò¤íÌÏ)çYϸÖtó$z©O³µÖaŸuZæ\÷¡z¸ñÊÃÊöáÈ"VÖ÷òè"1ý[<_68žbr-¯#Z c‚s¢‹¥¼ô"$1j³Á íhIûo´†¥µ{ëjêt˜Ê®¶ÓBUˆ•™M½[¡E²ÎÂBú^Î~v´é\éÊÊÛáð¶¥â·¢ò›pÖ%r|o,äË/\´¢LÍLcpÞEšÝ ÿ§4‰l}ë*Ç;¿äâOX‡Š½š{m‚}—yÁÚ‹9WKšù”œcò—G|Êó6ú}©+¼–Åææ¦.;­h)¯³@ÙqZpZ…#\ÒE§ö¥‘q¶fy¸XSírÆtŒÍ$FÚ*âbNuy¹ºVÂóN§w›]ì–-ûxe—h™[Ò¯)·Å&&©ç‰œ$;ë9R`M'\D¢‰èØÝÍð•þá*ßzµÜtyE2å[dTGz…él†Ù- шLèÂM¸`ì X0 ”s>ô¢·uÒ?Ÿ¾}[,Á‚ö0†| ²KF4¿iˆÇ@r …,ÒmÍ:‹ Cÿ½ÿÒßâáçZÊ_jä¥ã¾ÄDÝW#ª£²#\ž;Å(B2á‰dÚ³H»0`ƃ á*~G~èGvÀç9äenPÅD0ÓRZ¥<—Ñx™1_[â\ïÔž@ÏdK°K2[Õƒ0 Øw‡0 9ƒ28ƒ4ˆC4fÔ0ý–8dÇ,'„D& EP¡ C*,Ðk€20} „TX…JHC5˜…ZxC™ærÄ÷w…³%Æ/5U“N%#£ù·ý—H… à§!» 50|¨h–‡y•'{—€uö…n%x‡è…Hƒ†~ÿ•In„á¶%ŒQê"IËR}Ö7~ÈXw˜!¸:P ¡ Xˆ` ¹§{½çdaw~ X~ŠØpÔ(84È£v4h‚3êG†Ó7$³×p¸ “°]¢X¹%‹•‡´µ ³0[ŸH2¼5~‹‹/ØtŒˆ=¢6uŒa(ÉÆ#±taƒzÎãZAÂfÊØ]ƒðXï‘{‡À,¹çX H`Õˆˆ X^æÇˆŒ˜ Sajñö†n³pqµlÜ4=l¦]§h X’ƒ€p@ƒ0ˆ&hˆ‚Q ‘ ƒø…Ø‚ÁçŠþ‹ž82dÏÕz¦Æ(ÿÂv>f3æ˜cDbŠ !) ² !É'f ’ÐXdÕXg…Œ`Þ³,Ù… ö¯ø; ãZëçƒìóðGåˆ]A惷&¢{ÑÈXŠæ1 …€p†Šœ0 wð‰Î¸X… ‚•ÐX± ³u’F2Yy˜Wé’.h>û&¼DUjx‚AVh…&+0'˜»W8b±@ *¨Æ”´0b³ÅX§•ƒÐpi ³@ ±ðXøX’%™”…I•ˆ©•,‡•ºY\r¥_,‘¹ƒùãcŸa¹²f¨¸XŠÀ‹5ã‘ §¹XxŒˆ0 F™‘ƒ@‘€,À]é 5ÿ€‹…5 •„›YÙ› h/ie‰6yf¨W›åCÈ)–—l â0÷9hÓ·”½ ÇH”æ¡:P•pŒŽu[¡©X5ð}‚¡i‘05 z8z›#6 ˆ@—­©!†(‹îI5¼i•0–jr9’R݆êWl9ÃvçH‹ÒÑ“q[ ²€Œå {x &6 øH A :P ˆ€5@˜£) ¥i â‰: 扞ˆ¤!‰šK2¢ï¹žÕ¦˜+YR*ú‹PÕ¢¨ÑxÑ£Ÿ7yR:a8­dƒ£Jyb¡€Ú¹g¡]’³ dµé–|1PàGbŒe€‘ÿpŠ@ÌP - ¥¬dÖ‰ Ù¹Šü¢’q¢cšXææö5sÔh-Shã˜l.£Ÿnjn¶Ž9[…à}ŽUKé‡jž·zŒŒU[:`¨5{h‘ø¨±  »P Gðw t îá! šX>º© ªØX¢ej¦DCª–¢:9ÁiÄ™f¶££œy[-ð–ZQ deð ·U …€4p¨‰Š•P w º’À‡8ZQ­‘° À `j¢Y©T:Fj ”`›¦‹É㩵aÙ# ÉqGuXíD/…VcGf£¯ÓÝ Ý1 ³€[ƒÿ€3 ¯çQ |¸{Á:ûX«°Ì ‹KÙX„Ù&‚ •ûz±œê€«7ûQäµ,'£YTÔxAb¯ÓmØ&¯@P¤`…°‡5p¥¢€h¨:ðùŠ‹¬Êʬn`Ek´Ì¶JBg©ªø¥Q{|UygdÚ©Ÿ#šÃF9×—òNa›cPi`¤P` `¸°‡ƒ¸P­äQ ˆ³3…1 Æ ºÇ¨G  Ð·~ë«` ¦8¸€Ø¯Ð©!• ¼ ÜÚ­-™­ –›@!JE&¹ bb£ “gd³Pd` ¥à¹ kÆÿÐŒºÝ:À‡5À‰à‡”ÿZ»· òë·3!¾|·$øø ˜`—0µaš¼Ç+µÌk¦\{]ó“Ò—_jP^0 Yà ¯e; h+w›¬«Qh0’J«4€rp[”ªzË·ó+¿G{ ê»tò—… ½À†0 ‰Û±Ûê¿È;vzq² #(æTU#Ì, ŒÁ+³T  ±;- 2[f± 8`¨ä ·€¨'ð¸;¿ K- ©&gcUV\l³I¼–À¿9lµûQq*SµÓ6ÀÀá7ÍWPȳkd cP£À,0;‘ ñZ°ÿ š“”SPgð ¥  øxÅY[lŠ5"°a,ÆK‰tJÆ—k\¥úË;пx,ÇÜ&º¸,¦Mw`kR:™¯5}iÀÀjðÀ°¹ë ZÈ£ Õ Â$lÂå![5#P}k~K_s¿¦I[³Íj¡¿à 60˜Çw<+êx¸ÿ‹¢>Ìž€Á 53 64ù¼8E 0Ûû”ü ñP {¾ç »¥´¥´ ]9ëzP´` Ø| ðWÐÛ|Æã!‘d•´ç¡Ê˜ÀÊ®œ"t̸û¤>ŒÎGg˰ÏóŒ8ÿuÏ‘‹S‘ð>Ð?pÂæq½TP`0³‹l ª«¤ÆÀ…гWª{KÑݰvp~‹  ¤Ü,³`ž‹u¾K¡¸åÆp¬&÷¦Ò´ÆÒuLˈ ÓIËΥˣµêT2 w0˜ïñ C³T`Т9[“°5Pt¹‡xËXÓ\ÍqÀ°€Éâuã1º3P’€³_]2LÃ6ŒÃ¢Ž-Mel-×윱.Ý)BdÚx'zlœFÆ|sÉÌÒŽçáÐÆ@ h0 =JƇ·Z¬Ú9O-À À[€ TmÝ$YÝA’&i³ ƒÙá9ú;Ö q…½Çÿò±ÿ¹cÇ/Ý"•´ÚwÄf6·(Q%Û @Ûå!»‹ª–—8p‡Ó…9‹³€ žìÐ& XàØÌ€ÕÎÍÆº—[Óm¡ã9™mÃ[¼R´%0avEÞ‘ÒªÂᨭáÓK£2†FòòPjR†X×wÝ‘#½]|«êA€Š0 “0.0ˆ¬1@ Š1@p"0 à2B£àƒ[ךé¯ÅzÙž9Y"p[ó‹õâÁƒå$:å5ÞQ“;QÈq»{KH¾ç¡Ô]-·‹Å‡“P0`Šà$Ð\pÝÑm"Û¼‹[Óý ƒ ÂFŠ”qÿJgª¼R±…Žþè9äƒé"é<ø<•~é8qBwpp/Ô-„ À,°1 rÀpÀ‡pÀê) }€ãp w€.*PZ€[CpÀ në,{Є¯.¢>Cù¶@fyé í”éîüÎÕ>(#ž?%î›Ü"¼<×0\ÇjãN9•&á<4‡@ 8.PJ¤ŒXL>˜$V[àœÒ]?båŸÅè§â1mÞ7êå_LÞý‹ZËÜlô-¸ã‘ÆfåflP—´°‡|8“î.ðñ. Om·ä1šp0¥Tjžã`§ÜXM†Š·…Oÿ5ÅSÖCö­ÅåáÄ¥­Ãl]Þ ASMV‡Îð]ò,¥äÑòM”2`¯oò¹^¨1`‘Ý¡¨HÙ™î^ÝRéfj ˆχKëwλFà=Kð¢\ÿæÚ Àk Ï?¿g’‡€ýÍ: {°ïZq¬ƒðñƒýñ2€¥|¸§Ç rà”÷îâæ±Ô´¥ú‰ÛÃųÎ&ÑípÝó@íéL÷ _TáÎ!Úž±`¡O#€îh 8þ ›ëU¡>` À ~.ßãA kç«©•oÖFÖ`~œ]Rj=ôúÁ?úRú‰…úÌXèáûŽ­Ÿ‚/fuãZ/`ïÿÈ,øH¤ùˆûãA@{î„ùûµ,ü¹)AÓqÚz¢åíìóÊ?”W”€m[{~Ïà·.\ÔPÃÅŒI“nÌdÌ¡±HƒÅ’3¨Ð®JcÅ*4¨ÒCÍ4IÑ ».KÆÌåK˜1e΄يæM˜—±4Ö2YÏe­2K†ªU²d­PµÄÙÔ©S›O¥ÆŒ:ujU«O±f…ʕ沠BŽ5VI!ˆb5È­[5Pà¤Ò.EƒMê8R À3Ï 8i-IˆpèÄbÐZˆqkàˆô0"‰¸ÒªóŒ+™:E:º«WfA[­6öò!*cË\CÿU6jÜ2·æÖÍûænß.g6œ+XbÉ>Œ¤Ã³ç¡Aâ’¤hR%5NÐU‰«Æ`„&güu¡CÒ tÝê`ièõÏè%4C…5fѤÈ k+’üt¸¥]<›‡<¥Ò©UIÝÒªT]Ó’UW'´5MxãõÍauý0Ĺ5Å;V$ÖÅ“RŠqÆoÌq’XxDxE!5âÈ£]ŒUÒRçÌCÄ[ÑHÊA­pÓ‰§*om·¦wËù\ Oމ^7ßtî9`um«1‹r1†3ðBÓáž_ÐöÙ·Ö[Dà %Òõt°NýŽže†çb°ÓÿI|ñrü )ÙN¦·7˜XÂräŽåÅPeSKž7W]ñS¤‘¥m‡¨cð‡vÉKnI/ч¨³nêYŒfÈÊŠ¤õ,ªä‰ìºK1Ijñ’KfX„4¤nr°K´K› «Ï$;m³SN]u Ù¦ûu²Z†îˆ&ªè¢¼Qü‘Ð×™¾!^v˜kÜÛÉ!´QOícNÿMí³W‡0y—Xžýz±‡Ý­6óšå!g‰dö'aÉÍs3wyêiªjýtzÖÃlþÖ“ÓþzÙ÷‰O=Eä{ ÷`W>–`"}¸Ÿ1î6¢Ä¦z¦“˜ì'½à<Ђ¹±žÿÿ^×?ÒG"±ˆä–0 ÍÎwÀñPc<ähdŒñ*Á š ƒ$NC¨+Ž¥4’ÎrrÑÇ$nRo)„ÍÈ'KXbêIRšRšÒ”jK¥Õ eÈ.†QŒ¼ñác»ˆ¼…w&2‰|È"8¼]¯>˜ÛÁ%4Ä54Ñä!J _µ2<Þ‡Ñcýr¸6ý™q9A|ÈŠäØ1rCF/aˆar&WJÊjlˆ2A>o‡¼ùbIF×)2•˩֤ÖDUF*,†!ìhȘ åsÇëâ C)ÊBNo”¤ìá*cY¯¶µh¯\ä1!òZÚR“2ÑåJâÿ÷Ç_‚RLÃÄM)MÉAcÆR’eq˜‘"éLJZ“ÓŒ 'WÓŠOb3›Ê;%.…ÉÍ5…S•ã|¦gÇOìE䘦…’ÒKfìÑ(]ZPç|9Ï Ús›Á¼'"³çÌ‹¾nˆØâFË<`X9°Y—L°Èåä¡#EyèÒ—Z´M)M‘éÌYt_ÊJ—@Q–¶´že§D¤OEÔJÅ^N‹Ù›¬*Ÿª*é7§÷N¬fU«[åjW½úU°†U¬c%kYÍJÖŸ€B­kek[ÝúV¸ÆU®s¥k]ëÚ“³zÕ(ï¬Y÷ºš¾æµ¬1êD kXT&Ò£LÕcgçTÿâèä(~”ÊÇx*ԠΦÄÜ,gezSg:¶£…ìTD'“‘Ju*_jf½YJØÒ¯xH5£hÿIÓÒHk&=ŠúÚÚ ¾Ÿ^nþ2ŠQÛž“´µÒÆT‹Y£W¶ˆ®»Œ[ÓÅÚ´±ÌmSÊ%Á•6³Ð%juÉÔÙÕÒö‡Éý n™ªu­¸Ö¯fKߢ–w¶ŠE®vÙ««îâäJYrßt]k`üš÷¼‰=nhýë^.í6¼ ®oqïëÙ £K½!üoÛ:L–_ñ·øCo6-œ_ñ*8Ÿüu°M?<–cÅÒn¬jlãënWœ^î³âM ë—ºBò 7ìÁŸÿ±Ç%F e¬bâúxVÅdñ1“<–+gŒÉQ®¯}güä"‡ù8G^*1ã¢'†2Ž·Ü”2¶˜¦Yþ””kÕeòŠÌ)&ò˜«¼cCøÍ?Æsžù|è ëYÃÞ§™qúÞn"˜¥lîóž•8[ÙÑÇDs¤íìá ç=Ü‚|ß oøIoÝí|¿ûá¹n÷ÅC>òZÿû|øË?þà{—<ç)wŽoÞófÇ|æ'OúÒG¼ò^F}ãáz›~ô­÷¢âg÷ØŸ÷°wÿ½ìoOcÐgö§×»TÒÞ{Ýï^Ç×|ñ¿zC;žøÊo¾ßƒÌÎ?ÿúpß~ÝE¯ýhÛüÙ—û÷µIýß¿ž÷Ëù‡Ÿ~ß»ÿýòG?ü‹Ýþó«ù¹çÿ÷¿þê>Æ›>é#@ý3À´?ÿû¿Pb>L¾?óË¿ø£À d7ü ½ù£¿äÀ´À Àă>á Áì>À»@ás>Ä7Œ­4A«bA Ü@ ŒALÁTÀ”@¬Aë@d@"|ÀôA\Á$lBL@$¬¿(ü@ ”ÂÓiÂ)„Â,TAì#¿*Ô¼?B'4B4Ã",C4d¿ÿ1ôÂ/äBî#Ã0<Â9ü%,¬Ã4TÃ-„@0|C>„C„A9ÄÃ'üCC<Ã=•à†I«€‚n…^Gž`ž_V)a>H".b#>b$Nb%^b&nb'~b(Žb)žb*®b+¾b,Îb-Þb.îb/þâ$'`P0>cÿ4Žâ'ØM—PŽMc8Žã#^ãjucÙp‚JÕÔ`Ú+pàÈÊm$Kì‚€‚‹Ô<¶Ô^ëUÖT„²ÌOTh€„ì_9¾ä.^ã‡lèU€ÕXíP€h‚N€døä€Ý\cˆUÀüdåW…‚+‘ÍYÝ4€-xÕÀML.fc†‰5€@%åÜ×@[àÙG¸‚>€@…\v€5fÉØÍpæ…ÏÛDW`ŽUQè0Òœ=fw6f:ncmçníUÒ+eàÙaÎTb^ãWP;F8€&ÈÙÊüeæwŽhÿ9ŽçzÎÝ%ÍÝÅ×¢„TPÈga5†íìffÀY½è@e†„€ãthfhe–x€`fc‰®é3¦h;ÖÍeŽK~T‡þeTx€}ePXãS€ÓÔiWŽKSULŽK(8UWÆ‚W­V›¾j.…&Ð,hJûe€ ^ÑÍ<`¹|`fèæ!þjv†ì‚­v B¦äâxk¬®k»~‰5vØ»Þk¾v ,HKîkÁlÂ.lÃ>lÄNlÅ^lÆnlÇ~lÈŽlÉžlÊ®l˾lÌÎlÍÞlÎîlÏþlÐmÑmÒ.mÓ>mÔNmÕ^mÖnm×~mØŽmÙžmÚ®mÛ¾í4ö9ÝÞmÿÞîmßþmànáþm(îâv…AìCEtC:TîæĬ0îãNnè^à \îë~nì&é†äfníFD+¬në^ÂðæŠîþîì>ïB”A%¼ÁÚkÀPJoêÞîñ&ïDÌA=¼oÔ oðoçfïò6ï<äo¯ðïõpüÎïÿ.ðWpÜ@ð´o*\pÔoop«pwp ¿p ð §pÞàp‡pñ÷p_ñ —nõžðÏðoo 'ÄqãŽñ·ñßoWñ÷Ã21ñŸq—qoq&oò‡ñúFrÿñ$ïq r©0r,§q+¿r'Gq0óè†r*¯òÿ#s!ò.ô¶ù&óOs)Ÿr%_r4‡ó'ßñ(¯s.ïr3?s/sdÃøô r²5¿B;dbCC6—oB/tGtç‚‘YtïµD—tL×tD$JgÂLtQotN¯ôP¯ OÏ@5gtR‡ôHwõRo—Twï÷õWouXÏu]ŸtS¿õMuUÿò?s©˜õïóUgõNvZ?t²1ö<§siŸv;×sdOv™€v@'òhv>¿ö8çv Ñvbßs?÷ö§v/v« ÷9G÷s¯vxws§÷§p÷o—ó|÷rwk÷w®À÷tŸwl×Án—w„Oøbïuf?v}xÿ…xu_x[oøƒ_÷x{—øvgøQÿõ_ö‡ï‘ßxßrŽÇøŒ¯õŠGußu‘—y’§ù˜Çu^y›×yœŸùž¯ùŸ'bK7ømwùfWv y$zË;úK÷y¥z©'ò¨z«¿z¬Ïz­ßz®ïz¯ÿz°{±{²/{³?{´O{µÿz(“µ{¸{¹Ÿ{º¯{»¿{¼Çú¶“¼ï{¿ÿ{À|Áü·ß{ !|ÄO|Å_|Æoü°7| q|ÉŸ|ʯ|Ë_{ȇËß|Îï|ÏŸüÌ'ŽÏ}Ò/}ÓûÐŽÓ_}Öo}ׯúÔ÷ן}Ú¯}Ë}Þ°}ÿÝß}Þ|ÜÏÞ~á~µÿ}Ü ~äO~å×zãGå~èGþæ÷Šè¯~ë·ýéçŠëß~î?ýìÏŠîñßüï·Šñ?ôgüòŸŠôo÷÷}‚dzÖƒzú¿ù©·ÿúoSÜþïÿ',hð „ 2lèð!Ĉ'R¬¸ÆŒ7rìèщÇ"GrIò$ÊŒ&S²¹²%Ì/cÒd6³fË›8YêÜéógÏŸ.…æ$ZÔ(Ê HK.=©´©J¨R“NùêU¬U?nåÚUæW¦aÃfmZéY´c£®Å˜–è[¸m»‚šË¬n[¼yçê]Û7ì_Àv.lÿø0âÄŠ3nìø1äÈ]d¼¢€±ªM,@ŬƒXªZ^°ã ’mM¶#¨ ºhnÐàÆ pW}€k, x– ŶíVË(ˆÛ²ÕO0ZÆŒ4¶hê—37`Ù]]˜ê¤€¨–h²%@+©­` ¢8oEð}™OØÇšTx3M мA¥ *ªCŸL…E4€1 JPLe@ €(â‘gT2b!@+)ŽW^w|ÇÌmÌH`S Œ¶L&bÄ€s(bÆ(€à„U¥6À2[ €Q§A•Ì­g@] NÿU*­hùÙŸˆd†…S à™Çá¶#Q $€QOä TÉܸ$F'Õ2 °ÅÌ<á@UP`3ˆ‚Ñ<.b2둉çtP‰ °Ì™%3€›  4‘VJuEy~‚‡ PmXÉÊŒ D¡²Þ2$þ é•",wPa1€É ŠšƒWn1@ b´žT@Ê›N”‰ã²MCÛ2t¡&3™ºI¸ ë¤#Òf+3¨$ÚP´Òà±ÍþÔ€°Ù²È6…¯¯TW€×°- "TO¼Ê –!Ø ªRE§±NÉ ´A˵…Ê€r@]/O5@| nÊ ñIU1¥ñ]ñTà·ÎðÄP>bˆS‘oÆÌ@®R†yO ëR¤6p…SW}uÒ@ÑDÌ8n5¡+mqÒMMÞèíÚV¯T­6PïD~Õi+ 8 sé®s§'ÆSéÙ©(®[ÚÔ}5ácUÆ8ÐÆ›w}ì¿L@!ù,þp‡777t€¡y…¦zŒ¯p±z—º}š»ßgfßhfÞlk×wvÖ}{ÜttÚxwÚ{zãWUäWXãXVã[Zã`_ãdbähfämlåpoässäxwä||˜xŽœ|’¼‹Þ¥mܪyì‰[ç˜LåšRâŸ^ä€~ì–oñ [ï¬qð¤bð¬p’’’™™™‚½‘Ф˜›³… ¿Ž¢¸ž¦¼£££­­­¨³¿´´´¼¼¼‡¢À¦Á”«Äš­Åœ±Çž²È¢µÊ­¼Î°¾Ï±¿Ð¬ÀÖ¶ÃѺÆÔ¾ÉÕ¼ÌÜׇ†ÕŽŽÙƒ‚Ú‹‹Ô““Ó˜—ÑœœÜ›šÔ´•Á¥¥Á¯¯Î««Ïº¤Í½®Á°±Æ¾¾Ì°°Ê¼½Ð¤£Ü¥¨Ü©©Ñ¸ Ý¸¸ä€äˆ‡ä‹Šåä’’å—˜åœœåŸ îµƒí¹Œë´‘í¼å££äªªå²²å¸·å¼¼ó¬¬ò°°ò»»Õ¾ÈëÁú‘ûÉžêĤêɬåÀ¿êηéмñÀ¿÷Ñ«ûÔ®ü×·ÆÆÆÈÃÂÌÌÌÁÊÖÅÎØËÒÚÕÌÌÓÓÓÐÖÝÖÚÞÜÕÕÜÜÜÀÐàÊÕâÎÙæÔÝæÜÞáÞàâåÃÃåÇÈåÉÉèÍÎåÏÐç×ÈçÚÎèÙËåÓÓåרçÞ×åÜÜôÄÃóÎÎöÛÂøÐÏøÒÒåßàåàÛýáÇþâËôéßäääíííäëòèíóóääòìëûæçüììþñåòòòþññþþþÿg 8kÁƒ*hp¡Ã‡ !JLØpaʼn/bœ¨qã˨¦òˆq$ɉ&O>L9 UȱPÅšI³¦Í›8kÊÌɳ§Í>ƒâÜ)0•L1¹\Ê´©Ó§M•BJ5jÕ«S¥Æšet묤XÃZK•Ô²Xµ¶|ùÕ,Ú°gßV+ªZT)ÁÖ¥Jw¯Ó¾~—ªõŠÔmà§€VÌTíA½ŒG;ÙðV—^!ON|˜³ß»˜ÛzÞ;šte—Žc†Ô¹t]×oïª}zqeØhA/Zm»uíÞŒÕ.¾•uð߸˪=th¸Q@УKŸN½ºõëØ³kß¾ïî Tÿ Cê6òÚ²–êsBÄ å}£Ÿtà? .UAqâÎæó§9&P~$µÇ güGŸyõ d‡­˜uÇ h( }„ÍbŠ}  'èa!ƒ f8 ,ì¹ç߈,×à@§à&LYÂFmtbÚ‚ šHÛR’|!äaè(WrÊaˆd„ñE’”ñůXâ’‹QòEK Y%òù™–Tºäå‘VöˆåYM>å”_^(§˜¶9d›ÄI¢šõ¦É9î(ç•}")–¡‡*ÉÖ{¶¨Ørl÷hša´HfÀM ¦‹—‚)¢iQÊiAžêU§¢ªds0eÚ™¨šnÿui«©òë«/šº©‹„$i]š¬Zܘ€´f¢Ætp²—&C~á@»âJg ‚˜B|oI™#%|¡É |úJÊ'бÇÊÕÉ™¨0ñ…$äVúØ"$èR )Ô夑J|AI½£ç*TˆðtŒ0B ÜQׄJ ‘hñÆw¬K_›îº'˜@FkŒKV'e\PÁËÌëR°Ã¾ñ™’}b›m1©²Xšh°Á9*ÐFK­žöúj–²g¤Q¼´±eYAR©”,?Ù %NþœÎNŸ•u—_´b˜m‘ð®!3šs®¹”–G£ònh‘ÿñÅL€ñ…Íÿº4†À.½±Æ6ÃE6­KµY‡³V'‡;'*ly#‘:Ê=d™ªÖ}P+”`¡6ØC–¡6Tm„1F HçÑÆ?w-d¿A¤$’8Ùø\ ć´aÐëR'’¸1pämLnÉòNy´è_(ñ:*”¸!‰‘r/¾øæÄ›.Ð+žðQFBŠÝÔ&Õ I¯ÕcP‚ùß_€±ÆpIÕÈ€2pÒÙÊ|³ƒ'"«Y*eØ@Þ`µ"IéyAº€¸\°çAe ¸@ÌಖoymÃì¶—¤ÁÁI™ÄÕž" —IðM”›\↠\€o’Cÿ.0¼ªIÏ%àhÀ¬0åpÖÛQ†È TBn&d ´BÅÃQÂNãkÝË&0 Œ«MC¢WøÄG¾¢‚~š¸ßÒbšÈâ|C¸Šô”ÎŬ e ­6$(m€ŒP€Ëø&·2H¢‚ð]ò‚W‚7»±ËR.è’ ù޹š…'¾ð×-¥?à !¥7„!(£òö†7¨l ˆl^ö®/lqk `×°A0DšDâvˆ 7´±…t Sa€jÀ[˜Ò+ Ë©¼áeÒ:dzi$NóÃ\ f€Y._€3|! _ã΂-`'j°ˆæôFqŒs %(‹NXËÚ)wR†p”]?ŧi¬J°•]cÜÌ%4ñÞeoÀ¸4¸Á aê¤âÊ}n´¨´í0ÖUªT  E3Zx&V,$¯"¯2P¢ ï­À9K”AXÜ$0Aà Õ‚ÿ¨´g¡êÅlVx­ë^:¹âxx¥ ¼Ä:•5Z¡BzY. 2•à‚! ˆCä-? z繆mkð ”ýv2ee°TT‚ L˜Bvðˆ" ÀÂvá„$0áeLp»( …÷2SH³À€+@ç4Xžo@&8@ìxw°@±¸;ìÃK¡®ÒÈ‹ƒ®tfŠuô*`–<˜€@ÊP‚2U[‚°¶Ë¼Á‰øM^þKËvtËÏ)ÌÍÑŸ’@;K¸ìehÃæ— ÀÙ¡KIn'nÄ„é!Q˜(“~‰”'¤Ii µŒÝ®Òk§LßÍš;hÿ×ÄàÊ Ãܜߘ‚FÍ)ïœÃ . ŒÔjàÇSû“ß‹ˆIÂ6`¡ÄMÑH__è_°°VYQN Q¬qPÁfOR!$6È¢+{¡%þ# !äð‚6¨ð^´KÌF$ $kg4u¨`nM1 ¼äeRÈ(r¡Ô[£u\#‚3€#·~f’6f!79T¶0N™O5ø+bñzx·€cµ%"4H'| €YèH X$/çhPñšG׳9 W`°Øç}ѲDìe};æ·lègVÍe#c1ã~Ï×m¤D[¢2¾ÿGF@÷…®ò\GFpH(“uÀ^õ'tÃgo“J„u=ƒ€dÀ?Ñ—8ÀWHCF 7!…´çMjH_PåTÔó$ÿ'¸yfTr¸®ciüg…$6%gq†¶´iV“a¨pH@9‘hoˆT¼ä^Á8¸ƒƒÙ|e² o3Ä€6Ò¤LÊ“57eéX›@FFraYD‰ž±â8N䨉Úv5èØ„FRVoÐŽï8Ø‚X„R§„ŒS<¥7œ× d¤2½5ßhƒ³–S½è2mø"6%¦†ø‘ȨŒÀŒTذÿ7èzMˆ#0™;ÅàøT‰Ht‰¦@"$á—'¾‹³0•БӇu–€ã|‰h€#»|0=”~d4Gó–C'¥ñe “p»G;z#%rÉ”Ÿ´‰Íõ'd`ˆÒ27g&,§8Ab°%j£ …H˜l–SÆ–ÕR xyÁ8bXX»„làa¸bù×(‘‚bU‘_¥uXŽ Tq°}¢é`Hx73tšaÁfÔ»Ôš¡é({Q™¥7–{a±™mà™š¹øšOmJ¹膈L1}x"a@dDa ™ChbÑÊÿ5dLf•W®é›šµ“Ï醌AZ¦•žòñ?*v%3€$‡‡Ì™…ù¸„²wŸô’Ÿ_°Ÿà¨žKAö©ðù¶¶œ*p£ã8‘nèÙ›ó™p‹ÓžKÅ kUEY+N4™7¢$Z¢Wb0‹ðÓ¢.ú¢.*yš¡ú%ÜÙŸÇR<&É+8*EòÉ£5J77¤tÓ+üI¤ d¤J£L+?ª)Ýi-OŠ+Qš£&Z¥Vª¤; ¥=j£Sš¥]*¤_Š¢a*Rc*(ezOCÚ¤\Ú4GʦTZ.o ¤pZ¢kJ§x*¥š§qê¦Kʧ`ê§[Ú§uê£{Ú¦…ꥇJ¨€aj¨3Ú¨h*¨RH¦H MgÊ4‰*¦‹¨™j¦›J©ª¦—Z¤ij©*Ê¢0šªªºªÒ!£sЍª© «´j¥>ÒB‘«?¡«¼:@Ñ«AA 2*‘ÄZ¬"¬Á!ù,“n‰‡777zŒ¯z—º}š»ÁmlÆrrÁyzÏxxßgfßhfÞlkÚuuÚxwÛ|{ãWUäWXäXVã[Zã`_ãdbähfämlåpoässäxwä||¼‹Þ¥mì‰[æ™Qä€~ì–oñ [ï¬qð¤bù¨dù«hú¶|“““™™™€’µ‚½‘Ф˜›³… ¿ž¦¼¤¤¤«««³³³»»»‚ŸÂ‡¢À¦Á”«Ä’¬Ëš­Åœ±Çž²È¢µÊ­¼Î°¾Ï±¿Ð®Á×¶ÃÑ»ÄÓ¸ÇØ¾ÉÕÂ…Ì’‘É››×‡†ÕŽŽÙƒ‚Ú‰‰Ô““Ó˜—ÑœœÜ‘ÜÁ­®Î««Ã½½Ì°°Ê¼½Ð¤£ß¥¥Ü¥¨ß¹¹ä䈇䋊퉉å䒒嗘圜í‘ï˜™åŸ îµƒí¹Œë´‘í¼å££äªªå²²å¸·å¼¼í»»ò¦¦ó³´Î»ÆëÁêĤåÀ¿êηïÒ·ëÒ¼ó̦ûÒ­ðѳüÔ³ýØºÆÆÆÈÂÁÌÌÌÁËÖÅÎØÊÒÛÓÀËÜÄÄÒÒÒÐÖÝÔÙÞÜ××ÜÜÜÀÐàÍÙæÓÝéÜÞáÞàâÙâìåÃÃåÇÈåÉÊëÂÂéÊÊåÏÐçÚÎèÙËåÓÓåרçÞ×åÜÜïÐÑèÜÐõÄÄ÷ÎÎýÞÀùÕÕùÚÚåßàåáÜýàÅþåÑäääíííåëóûççûçèþñäñññýóóÿû÷þþþÿa lE° Áƒ<¥°¡C„ JT‘ À‹§2jÜȱ£GŽ}>ŠÙ1$É“MfluÊ—%aĘ̂ræÉš,1Ú|YsçÈž>=âlôfQ’@jªS©P§)¡ÆÔ˜S Ô©W—fÕJ•èVš_Á~ej5lR¨g•’ui6ì©´G׺…·mצ[éÕëS®Ý±ÂJ”ÕÛ>ˆ+^̸±ãÇ#Kž,ùªWy@é‘C*ïÜÀ,Mȃ'„ˆÎWùö ‹„ VD„˜“UõNÛ3‡’0åòNˆ2µ?îJ‚Ë9!Ìœz#K%JÙ ¢Îòáž»î]šöõìàÃÿbÅê’¥•Ô„Y³i¯ððUÙj„¤¥¾.íW3—ê7ã&.Z¬IZ¤n¹±†—$Z„¡Q}¾÷]|1h`Fê‡Ý„^ù €^x›„ÍÝUÖ|öÝ—I„û¡å\‡a¢{îµèTá}WâJ0ê¸#‡xùÈŸ‚'æøãÚx#‘ò9ä†In(ä’&69%•ðõxä–.V™&ip†$>É#F— Q†š…IŠ ¬¡d]UúF]# ¶ìI‘Hi¦x•&Çe$çÓ&žÂ„Úå™…—Ñ#`~Jh!‰¤X F*xp€˜xàeŒ5Ñ€H(ÿ0V°jë­¸&fÙE†"`p‘F 2m†$«¤)ftfy‘Ôu°¬}Ä„I´á}_œòfŠr²(­Ui–qÆn²Fƒ3Ñg`Hõà&’˜­M„£¼j‘ßKozñÖ›ø5š³Y$ƒážÂ(6¡ÅLl¡´›fô…§µ‘FÐòÄäFÿ5¨ÆÇjØ´ÉÇ ˜‘÷©w_{ Û'"R ºâÊ&çk_´_Ð(.kH‘­½õqñi÷A €%ó %,¢ˆá‰\Dê$l|ª‘»a¨Q‰‡)†›³J}Š$l@’ßÂ#,³Q[wÿÑÅ'“Ô·/G™h_¤ï~!ÉËk±E_4ààHiX€A}X°³HýšÜUž¸ônË…¡m¼‹fÓg ujöGiP`Ad KºÖþ­ñEÒr'ø¹(.E¯G {ú€ž.ÌFFlh`Å|¡€Y£­vF•_®Eæ›G¥ÑÇöEÜ0K]ÀË& ï¾Ñ›¶“ÿ±$ôøvƒÉJ ¦|ø)xËÛÞx—8L0®\#êŠ@熛y„fË C2‡ŸS¼Ë>Ò€þ,°dQlaa€„ê6Aµ°]mc(Q ë2BŸÉ%G®xÃ׈¦Að =hÚÀ T`bWÿÚ@¬4ljH£´ ‘¦!s–ÛY"\’¬8zä׋‚ˆxq+ÀB¾G Ф ÉÒB4H%æÇ‰PÄ€ˆ®€¢ŠQIýôưªIpÁzˆ à\@–4ÀÈ zúÓÀ~ˆ6H„7+¡Õ°@€Åó¸‘ Ö~ÌÉ"!!d$¸F@L K `ÀÄ ;Ò†/”‘³’€NQ¸Ejab“&>°„)À¡$ Wb4ÄÁÉDdLÈK€@E a<8… b9Kœ¢^ÙåF¦dY `XVïÒVD†É €Bž ÿÍÁà±s”«OÌ.Äà †¨ÁˆÐˆ †Ô%Cø.%ä`7BÈîÓ TNÑ«vB"2Ó™Hi4«ÐhR œ,(#\B„H–_tÁ!ˆi8-8€_€,)H`@— ^ŒÚ9+ÍyÌà§JýÉ—ô¬G© ð&Ìô]ÜAF qÃ8âlkH[ ðƒFb82OaT¤ ì#ô¡Àö*&Jì êT1ƒ“Ô/jX åÔ¾®ô uåIA€hdD ;úÑfñl‰”B+ !" ‚jðø‘”­A"¥íÂÝÿ *‚ΗÀµ±ÁaÉvj®›_%´W •±eZ°€03’ˆ}¦ôºƒemG ¦šùÕ#Ýc¬SY‡" "ŸHx0ôà`<ë)z9½ST iddŠhöÜsJw˜§¨.?ÐÏ–B$’È\}ÚùÝŽhU¤èƒ*0ÁI”4¾^tqA $XÀICEí#ÝÑJ·´ÔµnA`ô'˜Á?bËѪh0G^SXt!.˜H˜{Š@ÀåHý’UA6N üÝëúª‡²0èg bðÖŠŒd‘„G?Œcs$gåуüÙóÿ#Ó0@,éΪŒ&ô*exŸ°@A @ €$B¬½ŸÄl;Ëå˜$ØÔ¦Ç° £v—áII¬A¯ø‚%P‰0D ´FŒÀä È Y*d M–´Æ\¸ñ£ùÆ#80°Íi”:ErßG²>ÉZƒ"p¡0<€ìIÄfЇ?ü!„†¢¹gωùuZ𨙟ҕDd”Bdà€Uõ!  Âdüà„$0!YL°÷&`½2¡RPÀ”à€)Ìàà}˜A ý$† P7ÀÀ*¼*ßN`7®vU$‘€ÐÓäÝ9sœV TÀX§ÿ~bÀ…Øj¤3€ f@ëšk®ežz±òG”¼¹>AÔˆUÙ#£$(­ÈJ´K.åh€¿•ÜH" á‡#0Á³{"™/tX5‹@_ºX(e¥!§u{JN‘~cæH{y‡ÈnºhË(Š¡L Ð> 6­G1F3ÊO•žµ±÷ü(®…­íÖ@—gµAZØë‡÷: à˜îKÃBè„L’´ÂÁo€Â`»}áÈ' š$l÷–sšBz}]§|ŸÚ58C}`Ý\é ìSŒB‰i'*O¿“Ô³õôz½Àbï©ÈO€=Ÿ¶;†îÚ‡…Ib÷BöHÚˆ! žø.ûÐÿ€/Çs›@’ƒž½†5\óë¼dçñckÐwD $'ýÉI饓´! [ a×]÷= Iõus4q'esçNW•_€Ë3}G"R= B,H§?0…×zýG9£¦?Þ×2²e €ƒ—lL×g4ƒÞn×by`ÀÙâwr2JWzâ¢?§&¨$‚diø7ZðŠdMlÃx"%z%Ç?a¨&@4¢xðZ!¢õ·15¶øG1„+ó¦·Eç` Dyma|É· Àw ‡p!iyv<«wã—Lòi~e‡ ú“Òÿå>à·NoØFq‚A‡®· Û—íÔzȇ~h|tÅzÓ§ØW h`vxrúC,G‰lXv;–„Kˆ,ûç®U~2ƒ£grÆb…#ƒ…Z ã×…:†Ÿ·1šHdøhôt_Њüw„$‘%(Z–¸õÃv+‚t?X2âV€7ˆ³6ܶ`°I¤t°6’@wúƒ@4ã»%#ñ\ ^ 'QtJ#1ò1AàBâx2¨F}$2=d¨ã 20˜0}„_À4ZÔ*AB0“xæ'Itjàï×2úx%>{ê$Š®÷ø%'}ÿ€ˆ‡’1I}Öw‰ÇS“(q“o‘DLô’\R"I’"½×)¹, H9(û82Ùèf†ciG‘+b“ ?`wU9)¥3$6:øH'OäN¥%Véa˜• q<†Be*˜fˆ;w—R1W}0{©'qŠ9N!˜„)—féRÉh—Š©y -…-gY‰9™Jf{s™5âXé/[i#è$9( i.¨i˜åV‡‘+²9›´)›'‹©9—f¹š “¡¹“­éšç‚›|™” œ¾ù›Hâ˜Å©›¡Â›~”œçÜÇ)©D˜iZtšÚ¹ÃY&ÎyœÐ˜éÁù›ã)<­6Û‰öTu;©èZ‰ ÛÊ4¶ŸÔ¹?fJ×Lú¢;Êo~Ÿ<Ô i–ÂJ¡ÅXÁ²ä p€,oÀ‚Ѐ(`)M‰לkƒ°¢‹œy·£ÀÄNzùÖê@X&Ó­Di…ÉVº8µPФ„‚2 ñK¹ À@@Ȭàœ+(%\ЀüÌÁã¦Z|É:‹ èmL ^’"ÿ  µ nv+MfH®£ Å}„¤vgMQZS›¤”§ ¹ ‡„E–‚ç6»9“(ô#:+'}Ô,òÔÇŸ$Úµ–¸³3ÅAzêTQ`CÍÁ5Ô¡¡„hU<§®]JÅ p§Z4QŽ6ƒõ¼ÞH}ßàcÁÚMa“‘À‡Up*ÑDƒ"öÉô-?ª©®°™Í†êô:ˆóéG üì)DÝiZÇ”ú$FÀùSU•.ž|Š/VM&m*Ø¢­âF6“ÔP#Öø™õ±ô‹§Q%*7À@ÐW´òU é§øI“ƒi+:šz¨VÚ³›e9åZœ~L˜ÿ!Ô“Íé(åúYÉV¥H \¹/Êò²*s‘‘ý>Â3Q!e.;q LfµÉ˜´)av‹^F s$Àö´Í,H!¾À0ü¡c7%«¢vëYµ‚V+‹ÛZð€ýMª·¾Å>Wn(Áù'¸p$eW(…ÅÝùŒ³XG „ Vˆ0ÎkÓÜ~ò¬Oá) Œû„ˆE,(îd9¼ÕÓ«Bh!OŸÐ%£k9°1í¡•!ˆ°=±çÆOõ[alˆ@bÿ).²nÙÞoÄ—™2•IL½§p9Ë÷úókÂ=œÙÎEø‹Hà × Ô1=fýŒÒæFÀÙ r¾ð‘eåÎáW*ƪJg3<ר8cí+Ë©yÂbê6Wn† J"hü§Üª4†[w—Õq´ÌâïúgØÿ…lânK}çC[cI˜Þ‰ËÎM¶ZèýŽoåâ?ŽqƒZ©ß-ºQTUB­ŒàfgµÃ±‹)·9´áØþX͉$kPçL1%Ê ”Åçö8ÎG‡e¯.‡iÖš˜r'è¯è­œ(ŠÞv—I·\gwÅ;vO÷—+€£Ö8 ô Þ «ÆÞß %«î©G˜<ÃnÂäÒr‘¨D š•ŒC¨u›¾ëO½³¥\Àq `|•×nøg­ß7'¹0ø"å†9»Yt¶7ÙÒ«ìë37T»Ýmz†þÎЯJ€L_öj§=²1²ûüôëÿÜüÿ~Ã,>Š•n=•·úR06 ùo¾Ä­ýíç+.´6€ØŸ½ñi}%V4ΗjD`0A€.÷LX§*-6`ô-ÊBzóWlšVg«w\ \£ñ³—µÇ}X¶cNq*³*ü‘\iÑnäF+7ü!{1.¸n¾³|LònŽ·ªwl%C€]Ñly·kþòtïAZL÷tì³¢2-=J¤]Êñ}X—|&$<˜{¼5‚÷†,.„}B8„e8€¦Õ()|-"f*ø˜>TU×ò€›ñwºÒ^€[0[gHƆmvZáFp$GtÿT]ó5A À‰E h—„Hhn&8~øòjv0àÓA0¦Ô2T4ŠrO^È$}aÆ`†Ã†zõ÷^ø¨¤J¬D\!9”ãe 7à KÙG‚öW&ùfn èD2!…óŒtB7Ñh#—ØõÁ­˜$Bf^{ÐVÐ׃ƒ„¹X‚øNâDNÊÃ< ÐN€!&’‰—Rjéˆl‰¤‡D³r%’€MÈ3Õ…E‘R´å0Žòq&I`yPŽñGʸŒŠH%ýc 0C”`ÿ²q›È‰÷—s X]tãZ:.ˆµ=ªÕ3RL‰†*Z¸U#ÿõ"ì‚V@aG`{ ‘ E‘c˜Œ‰(6°-ð30$C”ð‘a8´C<´FVy•X™•Zé:À÷DWµDM$pb)D4rEdÄEJÀGP #0g—r9—_dF[y—x >\qQöd ’aG¥á  "öh’'©w†18é>í]àrXü$Ö¸U¸Œ@[€^@ކò\P#pš)‘"ˆ‚(¥gˆœv‹ˆø|=÷abQNK²$rÄðˆ$I†Gi‘%¨-âŠ5ÏÅå§4Õw;–ü†n&š…Ò(b`y`Z€¯‹Vÿ0‹axz‡(›èY”ÈU MNéD 6ÐNV’˜L¸†O3Ù•‘œèQ#;óÝ>ØR€Y‚€dVÀ‰ÒD¶$Fšãù{À“ÖéX° M驞‹É7ÐNe€¹göyŸjq­“tŠÔH3BŠßÓw£<‚kró=Ó5rÑF •vi&(¯˜‡òŠÖˆàªY‹‚‡ú¡êW@†›&šÄy¥ï•®Å3î1SG1tŽQx5™T£»ö@"ÁX€+[àIpVàš›)ÓT¨šš\ÀV;a,ž@– \`šoФ\‚ûâŠäj®Ô+„+Ý µ¼¹…zÂMÊ,`›a!¯¢V’õ©¾úõ,œW«ƒhN|9[A£²Ll—“”€= >`B&Xp$ÐÀ¹šb ¢éIÿ¼_pš ‰iX¬§^`µS‹µ„*N³Á;¼¬¡¶¸½ÜÊèG:ÍhÂj Êõ*ÓFIŠá˜ˆºP]E+¡Â²tq™jR¾Z&°Ë/PCf'0„Ì$bpšVÀH<LaY<É%PÉKA k€É8uÀ›¤]L”¢üÅ¥ &æ‹Æè[²EÉ1ÑYH—$+k&wC& t >: 3€¦Y)°ÏDŒ$}ÀÀ)€ƒ|GÚ P̪S\Åuz¤P!I Õ /KÁ °¸ÁÛüÉaœ¾ß Îq¾;ê²) }‰Q¾3n±·Z6ÁŒ.…rPK1Цÿi[ÐY|$b Â<n)€B+ž‰¤… ¡} H”¹ô]ˆÒ‡œ¡‰Â§Ip®Ù›ÑOºÑ=­d }µê\Xk(½xë‘T*áÒxӀɋ«ÉV§Y°©Ù¦`੉œ¤š*ÐêOÝ">h$®ZªXË¡¨œÊ§ &_Ý€§ÜÍž³ò«ÃMQ©¹.å1‘0òŒõ¼ýÄ z:ð9{šªb$pKlÄ<®åZ§I½ÔMØN‡SQ“ÐO`ÅYÙ™MÎ]MâüÑ`ŒÜ±A-Ô&nX¸W6S?¢Ë»,n ÔCÿÛ0°Ë»ü‘yp Lµ™»}€×n9½ˆ `¿ ÜAñ4|qëm×}š‹ÑÐÒ‹Á…¾ÜQÙ_÷Üެђ¡6fšO'× VI‘{ìwÀ°ý1 @`jðàFçÞ=™$Ý9Ðâ!ÉÀPßö}QrÀ¶ßÐKµ`µ-¨’ýq%íÁîÕÍ Ö äO3î,Z— SY†P¡-uLrðKÁ€S<Ûµ}Ṵ̂ø#0æ! loà4Üd×$<ž{€ÛŒë¸\`’ à Îà>kI¸LrE.=GnÙz®ÜS@Ó,eÿÊTdOáóÉ'âv 8 jPÐx}µeð>ÎÍË{`ªVP@-‡MƉÍ$Ÿ®ä…ªŒ$RËã>þÉ÷”ÜXºèþç›è ÎÕ‹*†N©t“¢Â:œí~[IÒ >ðŽ;m¼ˆ X`Ìû,ž¨êrMêAͧnN]Ñ…${`µ†×¯~$œr›±)Öî…ëô®ëF>Ö¶>Ù÷^L=NÎIè¼c‚ÄXNbоݕ.æãYÏŒ­¦©Ú°HêeNêgnêMmq@î4P-À7pîGBÓeþÁÜîFBÜÆÍiÃzìέ¨Oäÿ²Y6dœaÝï—Í#QÞë ®d*3Htû†Ýºk$ŽihéFrÀ§IÄL¬´VÐí-î/nê”KeàF¹Ty„*|ê§"±´ýÌ'µ±æÀâWF°øŠæ+2ß5°p—㙃Œf›çÊÝ\Ùȵþ.ݨÅ:ÉéU_5hG¿C ‹…ìŠ^ ' š¤î–Â|{Ð,~õá.î!Ü«ä^q`¨’ÀDföŽ;µ#€ò:íWYŽÉ{ªK1æó5Cà:5ày¿=Ðã¾®¿ïÑ‘Ö÷ûòhq‡.ÿLSçQÏØÅQò\°`Àâ#ÿ H|À pæŠ PêD6`làõ‹`K‘лÈLlò­ÅÆvQýxûÄ”$XРÁ8.d8pQH”jH0€ÁA 5.L¸ÑcÁŽ?†ÔˆˆÍ"‹Ø â(r#"–”â,Bñ $D(ÂdHÓdÎ8aµbe(+{†.e*KÑ!B¤(:b˜ ¼ÀäâáêŸ8gn”9s¦%(ÙˆÓ‹•<0óXñ²'E ¨$Œ2勨Lß¡µ…'ŽM‡5â$éRccÇ-#»|‘ÍJ‹°,ógáE&]ÚôiÔ©U¯fš ѯ[Ï6ÿ-;4ìÓ¸ ÛžM³Ìoà:˜ùm„CàÉ•—1³ÄH«Ižk1e„‡$eždð‚C(7Ä—¹Q£ŒÀ36€'áðä÷I¢p8"}‰ðåùõÏÉ›wlipÀÕ&£ "‰0£„È22!ÈIBÉ6Ri¦Eâ8©B SÊ Â‚ HhÒ©¡Æ„Zê-.öà ,þl©¿ˆÁ 0¸„?¸!/NÁ,Új)6n †lJ óÈã)1þx Œ<Œœ‘Æ-#2±Dž ŠÄÂ:T(ÂÑ4Ó!Y(€ ÀhÍ é$HM ñ4Ȥ×V‚ÐNJ†Z ±›˜ò(Eÿ¾üxª(¸øâã .Àø£/Œ&>J°Ê*0r¼ÎPSøÂŠN`JC3ˆHb¥Ü:¡„N8r.F±ð¦>Ò".¦jÌ&¦Ml¨ %\䨂Žm̧'ÓÓLH¤Ä…hv ií|ÖÀm#ëvØk4³b-DöP1ûú#Ç/øà‹V¨¨âFéÑŠ,ÄXôSPC°J*,˜úãˆRØ@^ƒ„UÖ¡(´Þ>4ÝTŒ^»tè\…J\$¢o R1Ì@at§>ýävܳ¥³c—X e—_Ñ-ù²Ç=t,Œ(´dŠE+@…TR8Áª/VT‹<– J,¤¤rFÿ,nô´„>¸œQX‘bÞéC3û0Ä •ÝÐY” TyM¯7jE˜Ó~ûO‚>®¦=¬àB®Jð ‘¢ø ü:¼¾¸.½¸q©ÀýBj·xëH¾±ªÞ®Òúד#ÃéDžÂœ©&“tR)&oÓžlm3ç¦P×Ï”;îºïf*ï½É£ï¿gÜŠ?O*h$c„€‰Þ¯· oTwºf$a„zI¥x(_ûâZfÇ>(ô˜FÇéìÓ;WÝ%ÖÓœ}fÚÙw?(Û—ºKÁxÂçõÚƒ¸Á«N™`I ‹šö´(MÉ ×ë ©p¤#mN{æs̈À„’/‘ 6f ÿ÷Î÷‘ôQ(v²{Ÿ¶Ö»t1E \¸B võ.FåU8Áò‘++h ûU¿6Õ·‡=J '×ó+ÊåA zË"2%•ˆ€0É_s¬’Ðs¢A ¨’¡.uIótB–0(¬ÝŠ¢ÅLWƒî‚Ê(b?씎zèQYá5ŒTN°…$4Gd"ÄðC¬ÝP*? *¶µ¯ÆmQhĨ¬dÁ$‹$£FÌø $•ub£Ù–B˜@i"°‚ 4Iu]©gÑ«Úû–«É !øæ—³¾!gtñÔ¤¶À=FŠT‹Ê ¾ÿ …(*òo˜ü’O69Q^•k,¥)Û×Jr® êl£[Tp¹¹p 0¸ëð.“Ìá8’>pzên&Pž ø¼Éo/Á¤R¯„€€T´Èh²½qŠÄ{_Ëè+˹‘SR0EçH[ËE¾“zñŒã<õVÏ?LsqÜg?ÿÐÝù &EñUääB—G¦&Áã‘Tšx‰JЊ!K Fï4™2õ©®ü蜨zÒ«Šp$]ÌRdIK[î¨^6»Òý¢ç@Oñˆ ÁôÂ0‹9¿,%3KÌ|R©ÓHsqQ6C Í*Klóæc dÁ°Mµ¤Uµêb¹ÊNÿÇbµ¤vóÂ¥ÒÒÑj^¶r¢Ä¬r½|@´*ôbH+M Ip—[•‚DÊp›*»ö0(Vr(£êÀD—2MÞäX㤡2ª1§¢‹± )ÚÎ Y“J6vs$°‚,èán”²ÔXï•Ý¥pa¹›ãÃ(µ"Za^¼r¤°@H‰! zk†øú ׵ǀ’y$ªÙýò)üáŸ3Ÿ Ì~ô§_ýëgk|³øÇ_þó§ýíÏ·F7Ú?köÿŸö+ 2 >XÓãšä£ºæó¹’3¹ç“¸Ùc¸èµÛûˆŽÛ“š§<#<3 ¾3@€¼Ãºd¾\=7ƒÀ ¤À鳨û/PË<Ï1®<Á5‰–°jÙž„›s{=LA”ƒ¾|·Ú£¾ƒpºd™ à£Aßó¾r B[AåóÀÖsÀt·T¹$dÂP",îÐë>,L+äÿ4B*Ä8 sÁ0œCL*‹²<34¸"t±5Ô¢7,¸ßs>cCÂüBÙ“A‚¸Ãí9CÐ;ÃÕB"t=IœD‘н¤KB%\;140ÞÓ¼)üCŒ²>,0H¤DÔÂ#”ÃB¤Ã üž¥À(F,ÅåE¼ ÄPÜC\äBKŒ8VŒÁ:0)ÌAÜBƢŎÆS4¯KÃŒM<4MÛlM;Yp8 äSMàÄÌÎôL” 4ʬËÂÜIŒËé´6PØPˆ¾ÔÃàìÎÀNãLÉíšLOüTÃ7‰ÞÌÏýÎäТìO…üÏã|Oä„Ï5¡k™QдÑQ½Âá̱ÑTÑÒôQ(ER‘¼ÏuÑ*µR%ÕQ.ËÎÉG ýÒ(UCé”RýQ0¥FISÿ5]S6eÓ lS8Ó6}S9­S8¥S6uM=-S¶ÓMÒíÍ?¾´ÉÀÈ0Ô#%Ó­B?½R5SH5Ò3•ÔHUÔET1¥ÒqTG}Ô0íÔ"Tê´TLE™òlÔ@ UQåSJ­ÔU½ÔRÝT¯|K¸ÄÒTUUYÅÕ\ÔZµÕ^UïlUa%ÕX½Õ=eUbýTP=VFÕTcÕeeÖbýUOÖW…Ue”SuVR4ÑhEÖkMÔoÅÖl¥ÖÔäÖn¥ÕZôÖg×puÕq%×d=ŸmeWs•ÖiM×`W~}WxÝÕÍ´×{…V€Å×rÕ×}×|EXN—zU×c¬VkUØÿ-XwµØ‹mW¾DUWŒ•WXŠ=Øu…ØkäCŽØŒUÙ•eX‰íבÙ]X3y؄يíXš=Y]eYÅY’­Ù”uÙž%Ú¢-Y_õÙ¥HtX”mZ§åU£•Z¤mX •Y¥]Z™$G¨åYƒÅÚ¬ Z¯ýZ˜½Z°­Z`MÚ©%XÕZ·T[´=Ú¨¥Ú¹R]Û–[¹Û¼Õ[² Ù³­[@ɺ­#Rº\ÙÀåÛÄU\À}\È5[ñ;À¼5YÆýÙ°[¦ÅÜνٶÍY¼¥ÓƒÔ»\Ð ÝÅýÜÔ]ÍÝܲUÝÕÝÚó ?´8¾Z¿e[ØÝÿÞuÜÈ•Ýà^à Û5€ñ#?å]^æm^ç}^è^é^ê­^ë½^ìÍ^íÝ^îí^ïý^ð ßÏpª*ÀDÝ5iKJhKöÍTm5U÷µ“ö…_‡­ªÁD_¡¥ß÷­_þ•ßÿ`ÿíßàòÁ¦“ù%`fàNßîõm`˜œ` Æ` ©` N™ø…à6`þµó—6a”9a;QáNa~a@aá5‘á†á»aÎaÞaîaþa b!b".bca _ ±H%nhDe6¨Ï½cÜ}P¸Ì@b%Öb.¶€b)~ÿòð8Xè$\O, ´1H€Â-ƒX/ŽŒ!,¶±P€äKã/N€8vãÈ@„8†„H€ˆ;Æã;c€p€ˆ0dEäÈXX€ã;ƒ&vC^Mæd¬ÛMJeF(ƒÈãÉx°¿«8ƒM¦H(€”¨ A„^v UfeW>T¨€E e[Î_ÇX„ €8.€°ˆÊ <ÇhH¼3`0Ýhæ)FÐÔaÀ s>ƒc fkh6(óø;ov pgJ˜ã3ØgtVg—08x€n¼ÿy®gô)€3¨fÓe2hΈ^7¹h`–‰¸ˆŽÆáà[«36 h`ðf qæ¨ÏÈâLv€Á8ƒ“NéÉ`ƒ ‘ˆƒ—€W~0@6é–.ÝÓ M&hÀ D@H2 x€ˆ z>Ì8ÐPÊ@jD„È•pêuŽjX€Œ`¸ê¬Þê €JŽâ8½ªf‰²v‰8 H€~ˆÈ;6Ý,lsf´`€‹pk>ìµf½ €3kXk-6椄ˆcÀëÈh(€HËfb 1€ÁãlJðìÉmJ¸‚nÿ8^œö è”H€¨iÐÍÈ8Ð\¶ežF6°\ÁVjí¡ömÇn°H‹0nÑ6e—èg(&>´(ç†n’Q`å-&oãcHÑp¸ë¾áÖ®ÏÃJ cøP͘V>ƒ¡ÆmáSÛ.AÓ­]^ ýŽŒ€ßhåÿ½6ÜÆnJh8Þ7f ßp`Hðî o—8ÐX€8@€fËn‘Àm6€ìèm÷þð…ÐðÐéÀ3q×¾€Ý<ÞŒqǨP Z€ >_%gòd(F„(¿a͈ˆèkY„–ð‹ƒxÿHàâðnÅp//¿ãr/Ÿ ó2Çp¥épó5Ý' wܽ¬6ædþˆÕd±êSÆìÀm2Ç´7@?¿n‚>ÐE(»6t—H&gKG=G§H× €.€Fõó=ˆT/á2àbØæíQÿór"î0l-øõô xèÙô@€`ôŽŒäð]Öu^7foöaŸóÓŽc`€]_„û%ÁÈÐp˜ä„„˜ï wŒˆ©.èh0íH×v ApÇô¬F€àVsGw\_¸qðP|/Áw—P€w€8ÿøu¸o?uvoø9¯oJ¨x†Ü8ÅG_çƒ(ƒ•—ãyǸÜ,á“_â^„ÜTÆu3„N ùÝŒƒ÷ ””†ÎëÎyÜÜêž÷è„”^Ž)zÊ ùl^‹TzÇv Ðú8Ðúóˆz…{’7C¨ïz#n{·{¸{¹Ÿ{º¯{»¿{¼Ï{½ß{¾ï{¿ÿ{À|Á|Â/|Ã?|ÄO|Å_|Æo|Ç7ˆ`€ŽhŸ~|Ë¿|Ì”ˆgPÉ|Ð}ÑÿˆÍWÏ nS~>§OH^ßMöbšw(ÜõU}ÿ®7Œ‚§„ÈØdâcƒ`b–}äOþrÚü(n€Øî´èk€Xç€Eˆþ€xÞ|H‹]Ž~˜~ív&Wsx6Ðîpgå¿ü¿´Í€Ø¶~sˆ”(I8” p@ƒÆ"ØÐà €”83@ A‹0h`@6 t¼` Ò¬ió&Μ:wòìéó'РB‡-jô(Ò¤J—2ŠñÌ@Ɍࠂ40@×® 0"¢„1æLJR!!0p`…Ì‹„ ¦¦z÷òíë÷/àÀ‚ë}jÿÒ88RlØj€¢e0jL€MâÅP‚û¹€]J/z`#&T²gÓ®mû6îÜ5 «½Êâä-( HË2]6¼rÝÜ5øJ¿G §Ä€µÕ]Ï[7øðâÇ“/øÌв”j¬ÐÊ€Féy)µnРŒVûP97xÉ=|4±à%7¤7Ð öåÇæ9ø „J8aPdQx!†j¸!†5$°‡!Š8"‰%šx"Š)ª¸"‹-ºø"Œ1Ê8#5Úx#Ž9ê¸#=úø#A 9$‘Ey$’I*¹$“M:ù$”QJ9%•UZy%–Yj¹%—]zÿù%˜aŠ9&™ešy&šiª¹&›mºù&œqÊ9'uÚÉ¥ qè¹'Ÿ}úù'  :(¡…z(¢‰*º(£:ú(¤‘J:©£ä±¦™B` Õæél †ú©m¢fꩤŽw©¦˜rúªƒÅج´ªJ[­°–zkx¬¶úª_¹êŠë®Äòšê±²Ò´ÈÍž!¬_¾j l_ÐV›¬²Æj+›µ|u«—§l€VZ50Úh4ô%m¦Ôz[ì¨ØÚ*o§ðr;\ý=àÚMœÀÿá$ð""MßÄ®«õÒ;ì¶ÈFœíÄ‚yÚ<  Þ@-´ÇFª!"0TCDÿ`@Á Àp ·Ú0ÄñÚ|³Ä8S¬³Å]§À¾üÚ$€É°ì±u!ÐÞPRÆÆ©µ YÅ!’Ì3»»×·à>\sÎ÷Vܳ±1ÕU.Mþ\Ò /T–ê ÀH40° xVV,øí÷Ì›:<öà<ÏK8Øag 7ÎqÚ#}ƒÒeÕAˆVšý-² İà‰ï¬øé©«~¸ážáB.<ôÐ ý2àî7¸PÀî•—f€ (°ˆL[•a48’M¤oíõ××Fÿîô\Û{j ÔPWUͯðý ø±à@êº p ¬É"´ÐÀ|64àÂÍÿþ|S]ç_½õˆ›ÎºØB‡ Â78à Ø°”E0Ï'Î+\#(ÁÕ‚Ì–r‚¶¯ù ,ÊÿWA²ùOz%¤Þ ûg6î9m6! Öõ,(ÂÒЄ­Ö°‚8´@-@m^hà ’ð†0äßþÈO­ 41lpÞï‚2"êFXÄ,jÑaIÀ 8ò4p0BD¡±xE4±‹Vœ$–,Â1“ÍSØ¿4ªÑ5d#kƆà‡>µÉ#¹Å@QItät†÷PR]‡ô&3©ÉMr²“žü$(C)ÊQ’²”¦<%*S©ÊU²²•®|%,ÿ=É-h{hÃc,s©Ë]ò²—¾ü%0ƒ)ÌNÞ ˆ8Ãç>':°`˜Î|&4£)ÍiR3–bƒ‹þ~R?V³›Þü&8Ã)NSŠ-@@ ^ ÄyhOö ulÛ¬I3Ç©Ï}ò³Ÿþ|¥ØVØ•[ö„ HV0…Ü@.a =öωR´¢Õ§ØQƒn´@1(M‡Ä¦ÿ¡› “|^´¥.})L­‰¬2t~D)BÛc’, >  äÓ¡µ¨FÕä½(S—,“'8¥DB)±˜38e8È Ãôío,=*XÃ*VŒžŠ; Al ÿÇö…xS j•$€50@6SÆÑµ¯~ý+4¹Å¬ 1!J[\À€© ‚$5p@âzB‚¤,f3«YWrKeÔÛP<8?bÆ·S êG u³®}-ley*“X²@/±ÍWc«ÛÝ–[#ÐÖâ’·Æ=nXïU–t¥µÃ-r£+]˜ИA ât³«Ý¶ñ6¹Ý.xÃKÍîBW¼æ=ï3É{H%.‘½KɦRà_÷Î’ñ*~ó«ßýò·¿þý/€,à¸À>0‚¬à3¸Á~pD{µÞ »·®p-œáU]fæ‡ÍbÁÿ ÒÃÞ0ŠMœb0%V1ŒÁób·ø/3¦1†WŒãÇX7ÄÌ\› †È€1ò‘‡l$û…Éwz2”£,å)ßd P@„ýÒšÐ@ ¸®^V €(0w‹_º “Ž) ÷äË"ÀÕ,à¹~Y}Zø æ `ˆj°¶/.°}â¸vj ˆY—¿¬—2Ð9>‘³nÀ€2 ÀÎ|ô¡vD'Z8ÃS€HQ¾>i \ —à c ®rÈúÍM)¯ÕµœÁ-ì˰'Ó€ÆÖ€í {Ѐ©0gàÝ_–VÔ@ÿÔ¤nJDZPÄÁÛ¥ÏHþƒç¿—©×®ÿ¸ºÖÙÔ®ë‡åKeagìºcº( ˆÄLóÒÛ&"ÿÙ`dþNx^)4 @!qº€,7i”`@—Õ‡ÍõÅÑ”Q€Á‚OëÅ€Ê/Ãðý¿ @!ÅFzBþòÔêS‚0ç Nã>ûƒÔ~( ûOFÝò—GoMlûܧx†°ßç‹€;ÿ@±‰%W Ô´-±ò°€± FÆ Æ8€bø­µÀ4F ð¶ù©Y^z¤|_¬Û@Z @Öéb(°Í_ýÝ_RD„ ¬€@  ý™$tó"ÉüE ‚}è`X]ĆÝäÛ^ÄLÌ«ýÿ„Õ9€z¼ïáX ÄÌÏÿ-… °ž¡Y_ BçЖQ”Áü¨ÇR™ž!¦¡®!¶¡¾!Æ¡Î!Öá„Ü€ €h¡ù±Þè(€Ù %=@Å ð&bNlÏ9u…Ò Å´•Ÿ9á^HaÇË"…ì•"v"Æ@íŒTÆ Bµ)~P•B<Öz8€ x",ð,€ý)šV€™Dl€®ùÄFÕôÔ@¸@ @²€GÕ8@b`ü™æy"ÏÁa"<HÅg|G$î”!]xÜHd#D–pq[%Ö"ixFÀTTCtÿF€ÉK\PGÆÀœžAH£šÓ–ÕDL´GJ87^….„@LÛnTF÷ \[!÷´ñüF¾ L0ÄWY–H¦ qÀ È ¤R#M¸€ßH ñD‘Ôt#ÀMÆDb%–…EZdM˜Ä ˆ]PE]<@|q \NÍ@Àa5tŒK´¤K¦!K¨KL,ŸE¬‡EÄÄpð"dääBìä cux$PVbl ñd…r€†bÜ@XÞT,ÔÑaÄç Ä"(ÞÈQ4^å6T]àjä#"˜ÓI”ãXê$Taâ²K4ÆZbdlipDœ@dUÀÆT„Dt¥ìv€…bÁå%aÒá–„§@ÂȦË]„ ´Gnþ‡ HfðÝ"˜ýÐGøÔ„ L òf¢uŒmÈ{ГìpÙXЀoÖü½&vf§vn'wv§w~'x†§xŽ'y–§yž'z¦§z®'{¶§{¾'|Ƨ|Î'}Ö§}Þ'~æ§~î'ö§þ'€¨€îD@!ù, •n‰‡777z—º}š»ÁmlÆrrÁyzÏxxßgfßhfÞlkÚuuÚxwÛ|{ãWUäWXäXVã[Zã`_ãdbähfämlåpoässäxwä||䀓““™™™‚ž½‘Ф˜›³… ¿ž¦¼¤¤¤«««³³³»»»‚ŸÂŒ¦ÃީɔªÄš­Äœ±Çž²È¥·Ë¬»Í¢¸Ñ°¾Ï±¿Ð¶ÃѼÌÜÌ’‘É››×‡†ÕŽŽÙƒ‚Ú‰‰Ô““Ó˜—ÑœœÜ‘ÜÁ­®Î«¬Ã½½Ì°°Ê¼½Ð¤£ß¥¥Ü¥¨ä䈇䋊퉉å䒒嗘圜埠ðŸ å££äªªå²²å¸·å¼¼ñ¦§ò®®åÀ¿ñÀ¿ÆÆÆÈÁÁÌÌÌÁÊÖÅÎØËÒÛÜÄÄÓÓÓÖÚÞÜ××ÜÜÜÀÐàÍØãÔÞêÛÝá×àëÞàâÚâìåÃÃåÇÈåÉÉåÏÐåÓÓåרåÜÜôÄÃ÷ËÊòÐÏòÓÔòÝÝøÖÕùÛÛåßàäääáæëìììåëòïïðòààñìíúãäüëëñññýôõþþþÿ Dd¨ Áƒ죰¡C‡ J|ñá@†úhÜȱ£Ç\>Š92$É“$M’4t1#Ê“*_Ê9³fŸ˜"Yti³#Ξ)¾üéQ'F¡‰"õ¹4èI£›Þ”Z’êG¥¡òDŠUj×¥_¶ôjõjY¦OÇ6 ËõlR”Zɺ¥9wjÚrë²–¥3nrL¸°áÈ+^̸±ãÆ}þà][WãÞž}Õ‚­lwnæÉ›+_¶ùù(eѨïš­7õJÍm]»-õtëÛ¯Úƒ§ ÖžeçD´gI-H”ü:š´ð,¡,Ñ#è ’)±qφ‹h –¨Hdÿ®}ø’,àÅ3çÜ|ffé{ª_¿½¨à…öe¨Zmú‡aGqÙ†à#•"ƒ#f‡'Šø¡…|±×âF*Ú$ÇJ8Q„’ø¢Lr„Uܸ¢}l(“u¾ÁÑr™WŠˆDâLt„·ÑH¸a¥‰Ãi´åLJ ±\HÀ1æ’.Ž1F`Æ9Ü€Q矀ÊXd}\¡GSTYOT0Á£„©ÑŽ=^A&‹iU‘_xŠÎ$\Ñ…H4ÑG‘F"‘d„Wš·!ƒTÿÄ6‘Š]Há1ª*p¤Ù)fJŠu^zˉ7©œ—M!)Œ2¾¶„u©DON”ºCHXšærM´©ÑSLa)€ÁF·„x„KEOt„ËÀ|}P‘Ö)ׇ³Fbçà›bÅq³+RJ4Qà©ZTD§º†§„›W$ç†iž SºRHnnDGOP‡Ft¤i¤©ü"‘ƒÁ}Àa…Ë9[n¹ôn pŽs¨ž˜²6G¼¥"‘ÄM0@+ISTpAxTà¯Î1Þá(q…¬ÊY2©P©›!‹4Å<…£ïRÈÑÈM( ³s3n䆣Y»áµ³VhÿdE\ëF T ñÈ%Ÿ¼¯ÓPKý¯Fá® 'Žj‰väáÂAêu-ÏúhTPeÊ©ŠióÍ9;ÕGÐr½ju׋D¤O<µ¾²Y…€^Ž^ëìnpMGÅJ\œñã^kDêÒ°çHh¼ †uW(q¡‹9éW(:…ï Pñh—êõÑüQ;=ufdi†G*ñíwêt¿¶Æ gÐ €G¸.0îä Bz7ô-g}í»ÀÔŒpˆa~oq^xpö¬èa)'HƒV (ÁQÈ€ õõ9€.:àÞö5«â%çxÃX·öÕ€ "ˆ¸`ÿ5’»ð¼ÎƒÃ9 ¢2€ÈÁQHp‚šç‘+4¡€àS2Їž•Ž†Þ³•4 ! @ü ]6"ðýÊ&äÚÆ’¸ÄŒ4±¹Ò9⬠<ª pB¤PF2*ˆïY¶rƒ~À…3¢jìŒUø5¯÷(aHÈOV9XT0ƒq%ç  Àz`KryÊëÖËèÈGªqBe–7œ6ðÏ! C}Ö€à˜ˆûà† €îisc£ùä¸>4¡¨¥-ÍÀ–8àkafãÜl†%DL¯zlY!A ¨! œ%¦f>SM"!ÕÀÿϨ‡> €6mi”lNbÑlã5WRBaÃ<°‘à ÈC¥*Y‰?”0øhüU ô‘\À HHW8´r$gKØVN'm$žjÐ úQj\ CCã€8“Á |*°Epó¤ÛÉQ›€/{¥Ï#M{C«i5›jÄÁ Tð¿tª ë”@¦Ê^IÅ#S¹¿F¼È¤µðøñª9Ý^š“@@”#j ë1CÐS‘¥© 7¨@æ¨O‰©!eêHjט!8°ìU$O )ØWZl—;,,D‹z20ÿÌà 9íÈæ¥¯à på§ü¹‘§‘ #x$ Hà•’Ë\C*%ËZ¦©£ùƒdäE#yo$;RÀÅT>ðpÃ>…K׺ „ø!H`†¨´sØ‘.Úœ6Öv$Žsüˆv!4<²$`zª°Ï 4¡wˆÃ 0ÒñA`iOA J0†äà%Ø,u¾à­¶¿É€Ä,õ‰ë$kõë Ãó¨*Tþz‚&à3xÁ\ð‚H _DØ·Yˆ¼ŽtÃ6; ø—~(Ñî_èD˜4  ƒÁ†à˜.ô;xÔÀ¬ aŸ;àB0\4@ÿ&ˆ3L@‚F" % Ì„Á;žÆÜ+ 1ZRÐð|C·m©ªzÂ(À( ³Pa72Œ`&±)“Gb–ê »P~Ša¹ë³nÄ›O𨀃…ÅÁQâ1ÉÖËÏ Àu†1ú`ƒÔ l죮¿šþœÊ:MøîS´ê3ÑÖ#Ìvë¼X¨+&dÆÂîç"p­·å X€¼—l÷±ñ›ËIm®\!.=Ö¥h«Â6½‘á!Ÿ’å§2@À ´­Y ^n8b^~„­‘FÛ¯ê-“£.Í h›J‹-ž}†Í|ÃMÎÙ®Ê,.ì-ÉÿíΧ?‘â/±¸ó2ޫֿÊãmú·|Ãàrk$\pè©Á”÷ üùæs”˜ZÒp¿‘l€?!;®B,`p>ÖpáÊixl?é]Szˆ5ÝÒž„ DÛ©`ÍIAaà.Hs6ßx³ ˆÔ¼ØÁ© nVŠº5è" zkDS€0è–î‘YÇ•@@Ýå]ã]‡Û×|š_#5» 8aj·Ç•k‰Ÿ tŽÀ%)[ÓT,‹HÐ ßèXUí{>ßµèžð€ GàO`)¾£îÒë¨Dì%ž@¬‘z­Þ]€ M`üÄáRm—LAçÓ'ÿE"óšÓå}pùà¯)<½³š¹8Þ…~£œÁÿ|Ô@·¦œöfÞ~ $~¶å‡Gj‚tËáGW°~í÷~2ÇL÷sHP?(‡@tu~”:ŠâLÿ €¦„{º7i ÅRAðRe'i”F|Ƈ|O—o§6Ï—CCH7}(Ö;¾–}°}ª‘·x u€±9ÛÆ·Özç’…@WÌ6;~uM°ŠCC£kæÃw'´x¯c/ ðÐÑ}¯ôJLð(1kµV,݇a;=§o³æ§@D.Úc$ZÃÃF€×Al•E!• gÿ‚DRQ``G‡÷6u#a>@=Àuhè"‡,gQr{4 (l•$\€iG# X@'thŠãÇæódbñ‰ù3I_×h¥*5(˜X›Øuá‹5±Ï…„Ñ]ƒ§[©²h" #>×UØŠÖÕ/'8¨×BðVìóGF—‹^•Œ(})&ºäp—„ŒîDÇL¨†¼(&\`+«Ø*1úèh÷xÿˆ¬¸‹"¡ŽIí8vïxŽñ(©RŽhG”Tæ˜y@åÂŒfá;“s)∉ŽÁ-÷1e‚qh,Ù’.ù'‰†‘& 0(Ù2ù4ñ ‰6Y’8Y5#¹"ù“Ñ”!Y”5)$ðˆ.'©“HéJ™“ÚxŒN¹ŽCY•ɘâ“My“O©•X¹•<Ù•(b•;ù•TKªC”¬b–Aé‰S™c™•jy”gÉ1II•rI–`É–mÙ—‘#tÉ—kù—C•z)˜€É”u¹3…™‘yù˜eé—F©˜õ–Tã•’™˜† ™‹I’‚9˜ ©™Ž)”œé–\‰—¤™š{)™ ˜„y—py˜™ I€±’/y›¸‰›1–¨Ù™q™“I™E)š3‰™ÃÙ˜Åù›¾)•1QÎ !Ô™!!ù,B”†† """***444;;;EEEKKKTTTZZZdddlllsss{{{z—º{™»¥ss¤~~ªzyÁmlÈnmÉqpÎ||ßgfßhfÞlkÑ~}ÜttÚxwÚ|{ãWUäWXäXVã[Zã`_ãdbähfämlåpoässäxwä||䀂‚‚ˆˆˆ’’’œœœ‚ž½‘Ф˜›³… ¿¤¤¤ªªª´´´¸°°ººº¦Á”ªÄœ©Àž²È¥·ËªºÌ°¾Ï±¿Ð¶ÃÑÁ††Íœ›×‡†ÕŽŽÙ‚‚ÚŠŠÔ““Ó˜—ÑœœßššÁ¥¥Î«¬Ç¿¿Ì°°Ê¼½Ð¤£ä䈇䋊å䒒嗘圜埠壣䪪岲帷弼ӿÀåÀ¿ÆÆÆÈÁÁËËËÁÊÖÅÎØËÒÛÜÄÄÕÕÕ×רÖÙÞÝÓӨרÜÜÜÛÝáÞàâåÃÃåÇÈåÉÉåÏÐåÓÓåרåÜÜäßàäääççèèçèëëëïïðóóóþþþÿ€‚ƒ„…†‡n‡Š‹‹‰Œ†|y~n~y|yynin™‡›Ÿny¤i¨¨n©i||iyƒ’¥®›‚Ž‚›µ±‹¶‚’”ƒ¸Ä„ÃÅÈÇÈÊËŒÍÎÑÓÑÐÔ…ÖÓ—“¥“¦›Þ‡~‰œ§Ÿ¬©ç¡ƒâ¾•²˜¿óŠðÀÆ×íúŠüý…þ6PQ¶‚Óêk&iܲ†°þqE‘S)J—ºeòÓПr¤<©c¥1Ø?(óÑ vIâÄNáÝZ„²¦Í›8kNÊɳ'Ï>ƒöê3!BC &SªÒ+“È8ZµiIŒmHŠT… æËOœ²ŽôjP^(I·­êV ¹wpÿãÊÍ#f®Ý»qëâÝ;W/^¨Å’RÌôáj…LMâÓið!´ŒQƒTäSkÙÆ=iÑjº‹eÝÁ¥ú‘1hlжñí»ºõ;¿®ù¶ ˜Øag· #ÒÏ.SµmSýš¥U«¡LÅ)VØç:ïŒé#jBÏß¶“Ù´êØâfƒ¿+~¼Üòqƒæ›ww¥ÇV¹+nÔ­YmPZd—+U7X¥®ô·ŽSG/kÜŠWè'}­ÒcÊ ²M%ò x5Cxó×cÛ*ö‡ddq7b÷‰+« œÅïÀ¤ÜÈ£èëß,iÂI¨Ky#ô?Ç8àƒ; ¶Ä‡ûl8ÐÌދ̯ð2‹Öí—Ê'2«ùt ZcYc'úÙZcëuê9»žk눿^1¯Óxô ,ô8’QÕ d6㦟)ÛÿÝl˜š.Œ{·5óË7ýóÐ'™8Bª¹ÌUÒh~èI™ù•V¡ÄŠ‚‘[ÐbÅósjS:לÎtì»Kã E¿øÉOzQq…zŒ¥Åä E0ÁQÌ>!–PÍÍéÛÌÔı?»E‚F4ãÚ[C8}Ë‚»™10%$=‡‡psÒ“VјPä„]±ÅÞŠµ]@.ÒÛ&ú@¼FV5t^ØpH1ø-Ãb‹b?ÀX&~D9ÔáœSF7Ùdó¸ÔÐx¦ £Yq[3\Mß·E.æƒÀ‡–ĨAfÄWSc¢-šÃ’O0±1.Ã…!ç¡îP ‘vܵGáèÐÿuë#2&)‰MrtËr$Š µìm¢ˆükÕ6vAÀjE“šà&ÕÉ z”,HnÈè@]ƒ˜æÀ„£ô‰0vBÊY/†ñZÍ—uL•Ív ¤^®ç“~ÜÙòŽ:ƒ#Öù…6»Â™ÊÅ { b¦Â¹µÅS“Ê’GÅ\êܼ¦ ÁÉEqò‹äY Ë©Hd P¬×E¼47°P†âˆIr$S̃N†Û¨Hÿ²º ó:€aˆ)GV)}å“&u¦3¬ñ3Xw¢…ç*EåÉ*²Q]á~yÒP².¥obI8äŒcij9ÑT•WŽS‰p ”Åÿ%êÔÂ}ªÏ§X èÆJ*Ì¢S¥-KšÃT¯²XRfVçAÕš«¯`…Ú<‘5Dݱ}€• YÑjV·•¨Ró\9 åRû(s?P©‹L*%*Vt°@c^¬`6†2+† ®ÂÖ¤ˆeW3!Pepu*è †õtÑС(fpß|t>°rR´}(R zCÔîFgIÛ{„XÙŒþ*Tª§ßfQŽ"Ç ù¹ÝNÛοþ¸õäpqhP”Šò7íb²ÒPDÒ§¢1/îÎÈ•µÀuTñé­wÃ:RÁõ¼'-ïYûA¬ò,3Ø/Z2Ë]@”š ÂÈÿH TBÀø5¤å/Iÿ{X³ ؘÆÝA7ŒÌD'rZËÕ–ªHʇ$'Ù—#ÕiN¢aø»ý¥ i lZ£†øÇÂ{oßù$FV¢OÎQæ§šu"åÐ7)nM¶P,H!´9žËA dP~˜»¥%C»ÈÌrìnf‡Ó¸±©OA5yë©kê0…:OÁ]¯&7,ÜÔz¹¸eEh:É<¯±¤ŠjpÅÒ°ªÔ=u¼Ù£Ižk²0….Üa˜B²ÌK¡öÀÀü² ûK5y5,£fM¶³VË£áb@uw5w¨³8’0…8pº›žÖb‡‹*ê/Û)ªBE•”ÿ­"ª­êrkH”c¶ÌXj2c¢¤[S…)ÜaG˜Â~í#oÊi¼:ƒ˜º×Íîv»ûiòª(¾Ž#oÉØJäj×ã袰)ÁG(‚HP)ôûàO8Âöî†7|Øt©Ù’•x3èspýuê‘OF£Ö®³p‚˜|½ÞÄ”«ü…õeXË;^H‹Ö¢9Ð5óÔŽöîgc‘Q°>ùÆÂ)VqÎ*XÁƇ)\!t¶s¥} l÷‰×Ïá4©E9íŠ*kç$‹›LŸkêå„7Í:WÓô-ô¨Îw ´¥çÐíMßø·V÷%¨ÿ\s&ýR›’‰5H¦U2ÿz*-±œH3= Æž—±¡³èBç*äz âØBÊïÞé¼Ýñ£9èI¤mA(›Eç(k3Ú¬ª¶BÖK4íξÏ%®06Xpz¨0…–wûÛy¸‚¸7ñ…-l¡åzï–ÁæÂŠë<ޝé‹ójÊÄ1:ªpýMô¬(eWã¼T&[sá{` nϦP.PÚòyмӿ Ö?Ø|Œ8ßGs¿‡.O™/82­ ˆ×]†×'ÒäB7—ý´]PW`i*]àv—qggU0n_À~q݆|xa%ˆW·wY×w¤7F u îä'Hoq³ô4&Dÿ Á± µµ,·v]\@›pÝfgO'SpÀ'sàq|šg|Ƈ~AEncÅa]¶‚ü§…ÓD‘QŠ6ƒñÆ 5#ÑäåXµS<ªaGXg¾ÖN7åçtS@[px±'u–'@?‚…£å…[GlZ×|ú€Läqç'²ˆ—W®ÐzѶ€%¢b¶&gY°Uðthy”6nyÐt' ià6|v±%pY %ÇWX„]pØ„{æ_Ÿ¦\}2§dOV:« Û—Wk‘}žgÑLq“d€a6C³ qPr¤©¨y^° ^°ÿ'P«xp$„BH„ñˆƒXˆ¹|R÷tû%Ë7j‹`}ýpŒ=5BÊX 6o ÐzшbŠg n0O\‘xfQ ¡¨5t6‹Â‡‡sÐtè§„S&7#p›f„RçkSH…Vx›@‡WPw˜gœ—ýçŒÈ‚3‰^—5 ‡’YDÔ ‡÷8™Ø,šxdÿÓM’Yb²~(—Y@ˆðG‡vÖq° yPræ¨yY§xX!8‚¹˜Š›Ðt~“%l[H\6©ˆÎ†Ò§x$QG+Dd©p†_÷ŒPã±' úAi_P)`!ék*÷_`w[pÿ•À&wyâ`–[@ˆhˆ¸(à(Ž)ù‹:—þèaýXŒ[uÓ7P54ð;1Äwå˜QP¾©žR·~l›n‹¢,$·s°ã÷s@ˆuv¥{'™Ak|Ð {nÄx6›¸Ô)¼Ûk_ö#Lı ³8Áµmïð™+«4¶â@’]P'pXr]I 0+³0;ô'©ÆZ©à9*³\›µ‹© ¨©û9çxz'¼ž3‘C*¸ˆ»PËe¶­´,h¶áúU]:„y`BP\ irð§•x8¦‹¯  ¯•C¦à5 -P9YÅw|›0‡º½î{jÚ²qÑx´´+Öÿ§ú¼Ä[¼O+ ¬`§LAªòÐ;×UjU ÈÓ]®*‡x1ev³§›)0up¯ ·q;£ 5P©0 dP év*<‹Xï+¢[Уx ¼kµ!—£g’bÃ+ KªãD§=‡Ãùû¿Î ²™WŸ_¹¼–sÐ÷ZW`•#@Y äÛ˜"–œ £ð00£`dŽªŸ‹©•í‹ÆóH¿,3" ÔDIJ¿u|¸:ÌÃŽÛEá Iª ±33º6¥°x¡;»ïYg&×' é— P(©5p7]lŠa««ˆ~*ÜŠSp¨i|{áÿÆ(rpdÇâpæ|Î ·/‚Îâ¢Îø¶dööÎöÒ/þò0þb 3K`I`rIÐ@Rp¯I N ìðbp5`мÉü7à/IàNà/NàI7ÐK`Ï 70dÀ0êŒ_,ÍÎçœÃ-xÇ×czìQÿX§ŒðÇÕêW\™È÷©’›°¶•æ‘&w’\™"U´&i dÆyÊ#ˆ½ÞËbõ‹”_¥?° =ä¼ÃöÑþk± ”XH‡Ð)Êš–V\`ÌJ%grÌ„VŒ¯+`ºó i€ ™WœéWÿ°ìg*GiW€˜³‚»Û»AŒ>ÿx¤êt ¦z_}“¥O&]„Ù´¹Ê ìŽï Ø¤{~ì¹V0˜ÄŒÁü‘#`ŽïÀp`€˜•ÉÂô'×p |ë‹×>Ú5¸4ñ‚Çi-6lAa=­b=¼]öYp½@;‹]¹[¥9øº½øJ+›%€‹™·L€DÀ–GÕó+¢;Ô³¨£æFËË ´ÿ÷±«¼œíÊ÷ë´Õ­ÃØ »y–³øvi¬k÷ÚŠ™Áì'‹µ[gx@ߦX½ x™›p¥ŠÜœªÖ¼„7¡%Cµ³ÖÙží°ý+ÓduàN˜ÿ૸àuÑËïw.nâM–¦È¶ÔÞFš7ïz–¾ &œA]>šß“ý¼ú-ëˆö`ö´´¸žë~èˆÞåS½¶$0,€ž:Ú³•æÝVXßz-’Y“<!Úí‘'ð³‹ês¾¾p½¶æh•)ÀWÀêøýÍãÊÕìn)ʤ¿¢fݺ®å1ýñ¼,™öÊÌs¡¶~xãÞæáyâ)é·!0Å4%€âPgc0È.Š~м¯w`rv’À³êÍ-w‘%+1àÄ0åF^Yο[îî!Ï[PòÁyòtžÂ Îòw°äÀw¥_ó3_ó*¯à'°óSàG~ÍÇWp;ôE ’v‡«Iî1,®´õ‚R¸<Œrêñ^õˆ~ÿ h¢ô^rx.Ø;æV(Ôwwo|Oð`nðT™ðšŸU½ä oÊVÙ×?߯Ão*Ì+_BÊ Tõ…ã›à뫳]_êuÆÚŒm×ÚŽ|+Âp éÑ~ÞW¨­„ê ×¹éD8º¹êŠœy/îoL{¦i$*_¦)õë^ëj­Š^+`r°rM×MèÚë?™)– uËzr ~gÐY|„ S‚U_VSYwyŠuW)SqŠyU%%$%U‘™™~~|| ¡¡|™|n¢¨©ªžŸ©§£¥«³´µª°¶¹¯º¼¡¸½¹¿À¶ÂóŠ~šÿËÌšbÍÐÑŠ[‡qKSU‰ŠwUS]sYS[Ò‘\%(\K(%\Ñ~µÊyœŠÈÆ·¡ñóòöü¾ýµõþý ø`A«êÅ#íÇy)nN¤9‡"Id8©K1]JLqW‹Ô»?Ê öÃe2YW©ä7ÓXÍa7qÆÜ¥j!Dg? J$†šEE³hɱ„G1æ˜6;9«%Ê<9eÆ:© æN]Y{…ûUÔX²eA) ºÌ![hÔ²Xæ-7oqÂchEuìHÒÊïl0|ŠôQM ±ZdžCžÜóm&·Ò¾lÙòEšnS<<ÒGÐ ;«1‚&Á´HE2ÿU²•§Å’AÉVäÕñ1ß‘iÿM9íZËR3½Ú.Y’ÔaV‡K–.u•§ t¢ùÔ\ø¼#ÉM7¼Ñâ»íûpñ²Ã/Êç[Ì;`‹§[grø!§ˆ~UÄá„°ñ)ž¸á`>îµgÓ|ŒÅw};‡\€ËPI¥y×€Ž&Fˆ ª—Š"¬D2OoòI8!†1YÈS…4^% ‡šx¨Š’Ø£‰@~§Õ*,îöb„2ŠE¡q9"d#*ZÆc&ò‡`BF’åSüg¤“«0hʃ‰1Ù¤ŠðEy›+­b[Wf²œ "ŽØe$ˉ–§&¸Ùb Œ¡”w^ÿz£xráš >Ù&ŽpÒ$'‰ub¹™˜\î9àI`:¦-ñ¤Áb™¶‰‡X&72ªæWS𩤦2gP•î¨)Pä: on08 o¼D¥ª¾:#”ÆêT™­·^Öl$µîž°§ŒÊKW…æ1lvëí·à†+î¸ä–kî¹è¦«îºì¶{.)bÄ+ï¼ôÖkï½øæ«ï¾üòûºçu›FÀêlžÁîŽËª£ ÇŠìèÌúS´V>›\®¼$Ö«°À$lo­ÖÈp†É* q}”Z|ñ³ÑâÖʲ¢j;Œ}©+ÜÈ";üèɧn¨òG*·,  ª ÚÏË5Û£Î$3Ý4Ï.1k1ÿÅt2DƒÁÊœôÓJç´”% µŽ>m6Æ XkÕ¶_wíOØÅŽ ö×CDuÕS[íV‹Êíö@8Ïí÷›c×ýÐÝ´ž-ÍÕ/e½ôà]‡ü6äöHþÝ)+Þ¬ÐÙºøøÎo3åÇ’nrÄ™ç­ú⨠ýyá‹.8è°›.6êR³¬94ºæf;£–Þ6á¿Ç{Ù«o®÷í´Ç~ùðqB}á©ëž<ï§7ï|ð–w¸@UÞ÷3âv/O¦ôJs7›µ·ßsÅ»kÊùùÅ7©>ú¥k?;ʹ+ý§ìãšóžW¿U®€Ä˜TÿnE¾Ã™Ïxú Ýýè»ȳžSdÿÀPxøËžÝçÁ÷‰/~{šI» Zpz¼Ù²2è¿ by,”à÷.8ÂîÏ„xû_ Àno‡0Ì!ørd8†4ÐB\FïdBU¹P‰IÄ"¬dU½zñ†ô{aä¸E1–‘…MÌ” åGÄþðˆës#}¸ÄÂ/ŠBRaߨB2V.ŽrÌbÔhÈ@JQ„tüÛ)H#ò1Òx¢ I42rŒ€¬à%ÏèCHFC’j,$Ú¨Åôù1›ü#æÈFô„ŠIN²Ó€rt€ …h5;ºÂ˜u¡6½©Û‚úS£Â´©B=ªS“Ñ>ÎTv>ÍjU¡U€*õ«2ÕhQ»êÕ­jÕ¬`}*WùOªªõ¬oEkZË*Õ©¯­…k\ëºV½º•®|eëUÙFÔ±öU®ˆÝ«bëÏÁºJÿ¬†õk^%Ù¹–¡x­lb;ÙÍ^ö¯  횘JÙ=6°–­iSÛÙ°Æóuvm-g5ëYÙ~Vµ2"-kW»Û@ÖÖ¶¸'ds›YÞ¢¶·Â-¬qg»\æ×±“S®oKÝêÞ–¶Ömìp“[Sàz»Îå.RƒÛÝþ¶¹×EïwÁK^ZJ·¼ÅnxÅ[õ®W¾éµ¯ýâK_²¶—ŸõÕ/~ÿ `«nW“ð}ûë_ö.˜Á‚=°{Çûà 'ÂÈEð…ù‹áó*¸Â>mvA Û C7ºÝð‡U¬á³ØÂ&… fLãÛøÆ8αŽwÌãûøÇ@²‡Lä"ùÈHÿN²’—Ìäž2c¤œ*WÙ1V~r”±Ìå.¿óYÖò”½|å1›ùÌe sLÔ¼æ/ƒ‚Íó?äÜ:×™ÌbFsžÓ¼e7Û™6F ‡1hBãy'…F¢y±h]4ÚÑnþƒ|3iÆT:-—Æ´c2ýNwzÓ u¤GMêR›úÔ¨NµªWÍêV»ZF7X@`Š( =åE ,€iÈ  €°‚  õ?†­€ÔúÖ¹®El ,€Ú¨ µ^ä¡Ép@¸-é,ÀØÆx€W€’(àÑÓÖ îlo»Û«·€¼C æF·ÿXæí€wh›Üû~·1Z €› ²–òÁñ †;<5xÁn >7À´ @†† Ä(Àò¸€ÿ`¹ ` €? €bLJÁÌ<|°ÉMÞñ ÞhÁ à1ˆÜÆ P@ @€ðbh´æáY'C”Í >½Þh@ `§çêR§ºÕ@†¸o½ë_ï…@<ÀîxOûÚ]2}ë.`€ø¨¯Â7ºZÀëô# UG» Pƒ•@ `Ì_Àë? Øüh°B¿£žçGÿÀ‰¸ô¦·‡Û î4À\ô xJíŠ+ ô 8{p€"ÎîÅ ™©ýg€¶l ` Üy€)D•üå7_ ý ì‚TÿúÙç ~kåo}úãW~½ÐÔæ0w ð Ð~[—Sˆ_g Àk €6d~  ~ýpÀ0×õÖlýÐPø±ö0uøh"¸q¡÷|`°§}¡§ ¬  qà ~(ÑxÑg{– 7˜ƒ¾Çƒ>8 7z79P„p„Æ0w¶Vz=(ðÿPh ~À 97lh˜…³ð†qøp¼Özü @Îfg÷ûÇ~ sdà{7øÑW‚¸u6 r,è‡Æ/:Gˆ pˆ6n[Xk€…g ¡XkÀ~ † €†À „ °n€6Àrl„X|_×;X‡¥X §x³u¬èŠº°o qXHkø„¸¨ 60 ð |°Pz¤8 Ñ8̘¶–ÊÇ|0T|n0ýàÄ–ÀbH‘Ñ~®çtïðáhÅhŽèÈSx| n[·O«pŠ˜{9`}6·sº „ §~¾—m8ÿ 7xŽoÆ‹)© §¨„|P÷·ÀÓhu9ާPÉ 5@—Vþ†’Ë×;/Yib@l/ø?h Kç@I7@.`x’+'-ÀQhÌø rCØØOù ”Di”üXoH•|ÀŒ.€- „ ` ”-ˆz良ØmHŒ¹x– PŠcY–¼pŠ €[¨lén™ |¼è6 –dùrI—¹ Âè@”ŒÉ—¢ ™@y|(dФÙÁV ðh²‚„dÀ‹ïG açŸàÐ 9 9°€•†šª 7Pÿi|°€…xÉב·€m.Pšç¼x.°µ ¸‡mZœµ™}ÄùÆù Øæ¸·–ÑœæWšJÇ‚Å) 0@žn@ž“–S´ž¥é ùjöyŸø™Ÿú¹ŸüÙŸþùŸ : Z z š  º  Ú ú ¡Š9À°ð¹7¡º¡úf ÐŒ:¢$ÊŸZˆ!ú.0„HøYÁ™çöf gl¹ ¿&3+J„æé Šùe0Ðp¥— k¯Y¢J:¢zk @kè^ø…Ê'-ð¤ÀRz`v*_¨rRjTÚÿ…0P0íXv@p]c·¤xš§¨à¡ƒWšˆ”X)ð؃à5£0iÀ¦à¡Ô¶f7Ê|œ'v™8§_H9ö׎zªzz¢ Ú} êˆk(XV ðh§«Gx§Ú…­—¢`Ðítr«€}s*ªÄª¤¤Šª‰¸‰È{©Øn0 ¬‡à(úì¸{Ê ƒÀ«0wÁú`Ú @§Z¬èº¡Çš¢eç§׬=¬ršàªVj­±¦Q×®aªqTXsѪq0P…aj]Xˆéš°:š2cõ†š €œÙçÿvº 5 œ©ç™mH.@k9Ð2“›G:"«°(›²{z§*Û².û6Iú²4[³6{³8›³:»³<Û³>û³@´B;´D[´F{´H›´J»´LÛ´Nû´PµR;µT[µV{µX›µZ»µ\Ûµ^ûµ`¶b;¶d[¶f{¶h›¶ +MlÛ¶nû¶p·r;·tû¶KG²”·¶·w› ÁCb"&!ë`'–_ö9¸/c _Æ·Џ+öZ‹Ëa&a­¹¶_Û·z˹й-¦]ŽëZž[º‹·£k3  c˜µ¹§ëº¤›Q©Ûºûºµ»¸«º¨kººÿº!&º¼«»°+¼ê»%F»³ ¼²¼j¼4µ¼Ð›»È˼ê¼XuWÃ;½ÑK¼Ÿ»»Û«½Ò«¼á  ÖKXÔ‹½·Ë½çûŸåûXé ¾êû½â; í‹bò‹¾É‹¿ëëŸõK@ûû\ï;¿ðÛ¼Þ;¾£UÀñkÀü‹À,À¬¿÷ë 0Á\Á|ÁœÁ¼ÁÜÁüÁ Â"<Â$\Â&|Â(œÂ*¼Â,ÜÂ.üÂ0Ã2<Ã4\Ã6|Ã8œÃ:¼Ã<ÜÃ>üÃ@ÄB<ÄD\ÄF|ÄHœÄJ¼ÄLÜÄNüÄPÅR<ÅT\ÅV|ÅXœÅZ¼Å\ÜÅ^üÅ`Æb<Æd\Æf|ÿÆhœÆj¼ÆlÜÆnüÆpÇr<Çt\Çv|ÇxœÇz¼Ç|ÜÇ~üǀȂ<È„\ȆlÈÿ+¸ üÀœ½ŒŒeMÉ’<É”\É–|ɘœÉš¼dnÓ›ˆæ<žÜf±ÊqÊ JÊÊsfÊ£ÌÊ¡£Ê©Ë€æÊ#Ëö`Ë‚FˊˆÖʾüʺÜ5¼Ljž¦4Ål3ÇL,ɬ*ËÌ(ͼ&Ϭ¶Ò<ÍÔ ´d l|€ll·&¶VlÇ–lÄÂpì–Íàl3ã¬ÍÄR›dHÎÛÜ$Ìflì¬*0°€ Ø+èÜ|·éÞY­ws9·ÏŒq™økÐ:Ç(0PbàqˆÐÿe ÑŒ‚0ÔFÑk"s4gs8—Ðkâ° Ø}͉ø!g¤Œâps¬ÐŒ¸Ç(ÉÙ‰jx{*# 7à„1Í(ßW{0}Ó­çñÒ6Í(²G{<-ÔM‚0°Ô¾q˜Ÿ`9À™R„+Ø‚á<jç›VÝ 0rG‰ZÝ$(WrdÕ_Í6¬ld½Öia‚(¨‚qM,5ujÝ95g‰M‚Õd Ø’€æ1Ø å¡b Øk‹³¸˜ŽÝ$ipv=w“-#±¸|“蛄-!Tý„™ -7w0pÜÌk=W¨-!N‡m« ¤­Ý Pi¯Ç‘²ÔÄŽ‘ô˜Û!]ˆ$‡ÛöÈ(òÈÐÂ=Ûía|ºqܾ1’ÉÙ“ÝzSY•=x@ÉÓ Ý함¹Ùm3øÝk‚y¨‡âÝ$O•ØJoÔ½&=½ÞT©Ý;Ár-si3Bn¶©*[šœP›Í¬'›(àJ´¹ßòœ|³iàÌìš®àŒò›øàà¾a¤!ù,=Í…777˜ml¤rr¿iiÁmlÀssÌsrÒvuÚxwÜ|{ä[Zäbaäutá~}〓““˜˜˜¸¤¤¤¬¬¬¹§¨²²²¼¼¼Êš™Ü…„Ô’‘Ü™™Å«¬Ï«¬Â³³Ü½½ä䌌ä喗᜜䢢嬬峳佽ÃÃÃÈÀÀÍÍÍÐÇÇÞÀÁÒÒÒÜÜÜåÃÃäÌÍåÔÕãÛÜäããéééÿÿÿÑ@È‘±Ñ^´$-¥„ž ÌÁf{!“Lå š½8¶@õšUÊJÇ” ¶.•JÑѳfËJhc¨Û_pI# ~v)Wp1tm‹J/j‘‘“‚–ˆ™cpœ’vTT. —/­¦(Iœb)v)+/%³j6a¬/./(!¿6.·5¦% 0*))Ïë6) hGÇV).¥»(\ ‚I,¦4% Ëp32 8@Á‡$ü00§‰t"!ù, –m‰†777z—º{™»ÂkjÍsrßgfßhfÞlkÑutÜttÚxwÚ|{ãWUäWXäXVã[Zã`_ãdbähfämlåpoässäxwä||䀓““˜˜˜‚ž½‘Ф˜›³… ¿¼šš¤¤¤ªªª¸¦§²²²¼¼¼¦Á”ªÄœ©Àž²È¥·ËªºÌ°¾Ï±¿Ð¶ÃÑÁŠ‰Ïž×‡†ÕŽŽÙƒƒÜŠ‰Ô““Ó˜—Ñœ›ÞŸŸÉ¦§Í¬¬Â½½Ì°°Ê¼½Ð¤£Ü¬¬ä䈇䋊å䒒嗘圜埠壣䪪岲帷弼åÀ¿ÆÆÆÈÁÁÍÍÍÁÊÖÅÎØËÒÛÕÄÄßÁÁÝËËÔÔÔÖÙÞÝÓÓÚÚÚÛÝáÞàâåÃÃåÇÈåÉÉåÏÐåÓÓåרåÜÜéÙÙåßàäääìëìïïðòòòþþþÿ€j‚i„…†‡ˆif‰Œ‹Ž‘Ž’‚ƒf˜™š›œfN ¡¡Ÿ¢¥¢¤¦i–Ц£­¯œ¨°¯²¢ª—³›µ¹¥»¼ ¾·j¬¿žÆ­ÁșʛÃÅ¿ÍËÇÓÀ¯ÏËÒÙÕÖ­ØÈÚàÜá‹«Ûã±éº×çâëšå¼åªZgžNùúûüýþÿ Hp ™3¸ŒÉ›Y»„Ñ:”HÏB‰˜Ϊ‘!F°8CGñãÑïJªLe1¢É•¥T!D²!HZíÌ ¹—ÒæK–„Îhé ïf²“B‰®3jJdÒ‹?‹¶ :*Ì¥9wÖ”z5”LšJÓ1íušÇ®ãDšÍ5–,Za-ÿÏú|Ëé›Õ¹xcÆe‹‘Z^[{7ömëÊ[àƒ£îÈW±Ø²[±ÒuvXT$BŠøHÍÙM`R”T®èI/˳’à´` SàÀ°À¡Þt¡~¸(ð#˜º·€„»õ.|â;`'¾•%ü­Z ¨Ôõ<³. €™H¢à0&HzÖëD›( h­\Hò–l\ÃŽéRÂ’ŠUµJ°ÊUp4¡Á-`˜ÂÙZg)'ŒA‡`˜ ¾„žÅ Ld'¨XÅ’ŽDÒÒT…CÆäk1ƒ ðœ@à‹ˆP,3ô@AëZ~dG3àqÿqàc ¼/TJ4­Ka'ØU.‚Âh°Íù¾¨Q‚ÃQB (@('y£a¢™ëñ1Ⳅ® ‰¿91 ·½Ò‘£¤à‚(˜qß"‘–(ÖÑ„ @á+Á- 3NÐ@@àÀ}Az¼Œ¦(†g³PÚ‘˜pÜhBŠË À b¢uzf/„¡„èÔã1÷»ˆO/(0Ý“U’’€4;1ºÒ…ò gˆ%J–¶¯‰b7Fø‚J(" `0Ši²Xl.Tƒ69ˆÀ  öHv0hŠtZ¯D)@=©JÕ…â’¨ÿ›hÈ£ < GFh€˜ †€$p‚E@†̨@÷4¤7R÷„B (ECsòÁsÃJ0" ÿ  sU¼.¯¨'…JóÌÕE¨•j ³÷Çû)×N!àå/ß5¥ƒàRââ¶µÐ18—%îSÅ{.#8€§p€Bh-Z““3±[Gc ÌI ‚¯lŠè® P Ç Š1›™8[6C—-à€!Á ™+; è3õ'bg!˜_ÂsN€;x~–ÿr1Hs÷Gƒ6È‚U%¨c+ˆ)é ‚' #hûÔ;ȃ=8x;¸„.X€1xÏu„H@:„³5&b~×R íAí°Wª•†j¸†ÚáZ-XÊA‚JXBø `x/^ˆ‚\q‡Ø—‡F‡LxƒcÈ™B~˜…{˜ˆ‚È7„ø'H€|؈ ò†¨ˆv(†Œˆƒ’ˆ‰Ê†’1‰‡hW–è‰@¨‰›ø‰œ(‡¤¸ŠxhŠ®˜‰˜@…p‰¯hX‡¬H†©‹¼¨Š}X‹¨‹]Œ¾xŠ¥8ˆÄX…©ˆ¨ØŒÇØ‹ÅX‹²X‰Î˜‹†˜ŒÊX­ˆŒÜŒ×ØÞ(tøH…£È ~Ìh<„†lØŽîøŽnŠfXˆâx‹ä¨ÂŠØ8‹øøè˜—¸ˆá¸¸ˆ}Ä € ‰”° ÙŽ !ù,AÍ…777”jj¤]\¯cb»ihÊhgÁxwÌ~~ÓmmßkiÒutÚxwÝ|{ãmläuuá~}々……”””›››©ŸŸº……º¤¤¤­­­°°°¼¼¼ÇŽÏžÒ€€Ý‰ˆÖ˜˜Þ››Á¯¯Í««Ø¦¦Ü¯®Ó²²ÕººÜººä‚䌋呑䜜壣䪪䲲㼼ÃÃÃÉÂÃÏÏÏÕÌÌßÃÃÓÓÓÝ××ÜÜÜåÂÂåËËåÔÕãÜÜäääÿÿÿçÀ˜oH”u*•Ë•Té|¹ÔH„5UVVŽöûå8Ä!/ãùVœìøÉrá¸j•[Ú9x|ˆ­ÿw^zq/S€xƒq~€ˆ‚{†Žy{Œ’”a–—‰švw]]!BCŒ72 .¦km$)h´]l&'pH2Ê?2¸;Ê$ ¦424̪?1:+*D95%"#7]( ³C=*  Ì«çÃE„:<4ø0ƒÄ:È™ã3QF 6D@xâ ‘$=|È0¸Ã G$A!ù,A•‡‡ """***444:::DDDJJJTTT[[[dddkkkrrr{{{z—º{™»”jj¤]\¯cb»ihÊhgÁxwÌ~~ÓmmßgfßhfÞkjÒutÜttÚxwÚ|{ãWUäWXäXVã[Zã`_ãdbähfällèlkåpoässäxwä||ë}}䀂‚‚ˆˆˆ’’’œœœ‚ž½‘Ф˜›³… ¿©ŸŸº……º¤¤¤ªªª³³³»»»¦Á”ªÄœ©Àž²È¥·ËªºÌ°¾Ï±¿Ð¶ÃѰÃÙÇŽÏžÕ„„ÕŽŽØ‚‚Ú‰‰Ô““Ó˜—Òœ›Þ››Á¯¯Î«¬Ì°°Ê¼½Ð¤£Ø¦¦Ü¯®Ó²²ÕººÜººä䈇䋊퉉åä’’å—˜å埠壣䪪岲帷弼ô³´ñ¾¾åÀ¿ñÀ¿ÆÆÆÈÁÁËËËÁÊÖÅÎØËÒÛÕÌÌÞÃÃÕÕÕ×רÖÙÞÝ×ררÜÜÜÛÝáÞàâåÃÃåÇÈåÉÊéÉÉåÏÐåÓÓåרåÜÜôÄÃóÎÎñÑÑòÜÜùÛÛåßàäääççèèçèëëëïïðòââòïïûççüììóóóüõõþþþÿ3 H° Áƒ™ú \ÈР† ^räèRŠ— :ÂÓç"F„39êÑ$G<(Sâ‰'RAŠ0>ÌÉ‘Kš6RX3£Ìˆ@ Î t(QˆF2Lªt!Ó¦P—FEz°fE¥VWÞ,©kב3Nôèò’Õ‘,–쨲-GŠi^šKpfO·ríXvgÝ© õ6(x0OßVŒ8*cÀIM¢ôIÔlÊaJFy9Ó%>*;n¾‰/M’û€vk¡Ýœ8 OdéöφssëÞÍ»"ïßÀƒÏõ-¼xpâÆ1Sm,”9óÇSn¬Xºëª6K£d¹RmŸ®&Ù¢ÿ® 3æX¶œß*¿-°¼ß—6-‡uˆÛ½ýûáàßÏß¾þþâ÷_€WeT:Q‚JÕÑ@­·àA;i‡Ç\á¡tÓFoQ´ÒE8å4ÛxáEZ\dUažÙö^s ÍF`yÎ8c6ˆc^§ @ þè” …„6ÅT…#ñ1\G,m˜’G:RUx’YÉYmz1˜„µaö˜Œ9î˜#fžy_šøõ˜‘AIŸÒu÷ȃJbÞv`Y G5±V‹ ‰&ÙE)ùöGÁ%_y”©¦#lNJ£¥ýUjŸ›sþ§œ)zêJœJE!E›½Õ^h©r´ÞDkµÿÊY_[蕌¨õe%£1Nª)¦¿újc©¡*ø)¨¼ŠJØ¢y"äx¢U^Z†fÛiS¢çÖ¬¶AG&u´aôž¤j+,¦û™ËìrÊ"Û œtåèYA™Qz}útž¡¨µe¿‘jä[M.Ugª»Ùk¹è¢Ù°€Ã¯»ïÆëœeÄ~Ù^G™Ø¯B`ÝTi›íz‰†¶TìA‹d¥{¢¼ð™êÒüðš8ñbüöìóÏ@-ôÐDͪбf+«¶†n«ô¿ÿMb†')MtMpd­õÖ\wíõ×`‡-öØd“m“Ôh§­vÐÎ;ac³Y´î©sÑû¤Kþæ‹w«•ÿT‡Àšp²:ÅGpl–%(¡{3|³»W3±ìKqÅív×eײìÞi¢Ý4Ö”zi×wÕ¢µ5á š°{>Á´Òà}{cä’ãÓä[|yï™¶yËuµj¢u­%:†ßqǪÓ>y뺊Æ7žÐÜr«;¥Ûs?#å¬?÷;Qn³kXÜÏ Ú‰aÜåñÅaß)·Ú|g adVç*^Å9¡¶#PÍÊÔ=ÞéÌwã3_Ûœ“þiDe4Y‰@F¶7²ô)%0IEÒ3%ÎL‡q³ñ ˆœå?âID{ºàí¾<Ë%ðmÁ;_iÔ—þiWlÑEòñ$êd¨«š•ÿ<²‹Ôf‡ aú@‚BÜ©P€9ƒ¡ _ØòUDùÓwÚ·· HqÔ)I¢84šÉ$ä.!ªÉ$XDÈsŽÛÞd@).ŠWÄbPÌ‚¢N)…CÛá£Yfg(jÉ3«IÓ²DûxJƒHH¸R½Ò±{ÞKa(><š*†¡‹Ê·"QÞÏySb øâ•Ežm'³i¢²SÚù¨qæib俍£M攞¬Ü+£?ìY±qÉËÒÂ! @j G†(èKór ³) Kö²€àdáL…‘s!h4¡9§’Αḧ.ÛÉH®É—=ˆ`“ĉ¾D„ÿ0[Þ²eŽè¦.ÇËLùò“S,'ŒÎIÂ}æ˜ú¬à;ë‰*E’Æ3¤È*#:“ZÅ'Õæ/*Ð8jRŽ’ºÎao&Tâ6¢eÊ'P¡‰[¡1M¿ …L …¹éMƒ†ó¤RDoÉR™6æS¢|SeºBhÁ¤4-Š_«¬„ͶäJàá \ d²Ö ô[YµÙQ˜R¦º´©-í¤RéÖ†D5~ñ1ç­Ðãºd¢RuÓ êU[$¥Ùq*)^Á%׺˶J•¡x\êcߺ0¿n\ $C¦(•èc°„iÇüVýÕµv½YA&N;Ê®q}êJŠ(ÿñ¤@FÁæ<ÉøÌï$„3…JMOÚ‰7¾f$¤H jMÊV”¶–“²…­r#Ù…B¤;DcnaCFÒtì¢áù­pÁåЪäxl¡¹Ôê\¤H©;ƒmu­ûÚúÌ2› KŠ£ôÆ“h¥´\íoSf“@VGLöe¯{ûÜ_&®ó]Yt‚\¼AJ¦Èí ]yè´·tg‚ Ôý8ˆ$Ïl±ímnR[HY–FØ©‹Éb!'X=a¢25åÙg¹V‰Œ U|2IiœM·‘¹ ^0X\ߦ¾xºƒIM±W9 ¡d•$™åhÉJ_2Óƒ¨ÉZê)áå*XÅh|g[Î'Ç6ÿƾ¦6×I",gyo̤å{z\[ÔˆÅ-»rD"•³^+YµŽõc‹êæ''ˆ¸*¦gÅè>—D˶ñì†BƒÑ1Û¥Æe>!’ ÊØ%óÁNŽo“œL7 EVœgFH$A|òKCäЗ­Shâ _Ã0¹Út%ºË–¯ª“}Ý#vÕ¾l — Æƒj9 ¿üIŸÄ&qF…肸»ð4”Ñ Fè¢Û¼lêeѳêìg°hÉûya±¶•·³ Ï™@dèB!t¡)Nò{™ÌìT³2ôW®õ1­Ü¹_)ÁéZf}e~CDÓ‡5€!n˜<¡ €ÿH8©Óïu³ÑNò6@Òu‘ÜRƳ (ŒÖ†Ì1‚ ËþÝŸ/táiB¡rt¯øÔ.?ÊÚ¦Nõª[ýê·Öy´ŸÄE6m̱ZÒb…µ²AáMXÂJ`‚+”ííp»Üõ“a¬Û}êQ—9d”™Ú€F[©Ôßá¦ÃÛhÁƈ»ŽÈÖ‘“&ˆ| PN‘_{ è*6ÄX~ZwK÷ÍpFµç76OÀçÔˆ¡KËhú)í¤nÎ2Ákyïk´` qDÄàˆp[àÀ:÷~Ö¼÷¼ø˜{äÖùz¿¥ªy~é“x:Ónƒç*))tî‰û¸ÿ ŒŽðÔ6¬ŽÐ½²c&qÒÅÖY¥$¢¼Ì¾¨õ¢N‘´¨öna@)áö$×0q”g~™wl¡zë‡|Rq Ss×9‘cR(-Fhq<6T}¡Kí¡}2»÷^ИgtHçb°t±gp˜EM7| §~ÖnøZïa:÷7vmõÄy¶'x£D†F“€öq1ø]Ð}Ž€]ðhpè 8nXøM‡¦ƒP·jŒæƒQæ~†Ã'J3Z£ƒ(ÛqiUžfE$³WTiðb0p•çi@åçà7n_Àtk°…€FÿwƒFU†m²ƒ?èpH>pCU-¥UÛ":©£u&¤ÁŠT2&tÑ"‡d€„@‡`tãÆ{aØMð‚0!j/¨€5XƒWxI98‰gØp.¦†§99†XTõ|¾õH¦×…HÝ•-³SD†@‹â–ri°{‚@…»×^pbðdÐg€+ n+€cÈZ’xÄ'ziÈ~|7S¦LI$f@æ$X’(÷W-]±Z}Ëbi!—DdÐ_°áh€ÇtŽ {(ppI'ƒûq&€d`‡Ä(‹i ¨‹£f†®…Œùx‰”˜ErfVa8ÿAÑ„é^HH"ã*©â'Õ7<Ú´'‘€p‘ ¨¡-€_‘b°(‰­øŠ±†îòx’0ø{¼g)èç`yGELJG]¢†S9éEññ‰|±?iCBùU„·åÚÔ!ƒå(ºw…·Ødy$@(€p³ø{)ŒÁ8ŒdŽbPähn ¸)3¹ŒÒ•–g)I05ãBHxÀ5`Ób(a^ ©2YÖSþ$;ý7˜ð“Gd_Žã–€Ð‰‰yS©€dy‹øøˆ'y‘¡{똙BuŒßR› ¸&Ÿû±‘GnÀiø‚þ  +0†Z¸…¸;01˜Â¸€ j›©w©Œ>êRßÂ8.S79ak³I³fæÃMoy(ÐRú…÷Q‰ÙNŸ+P Ç™œËÙœ,˜…âF‹)2}P#¼)n˜If•ø 2é¦Ú™VDJ{²$NX;A¶š12Cx!’0 ×cPÐik %jlÿG-àÝè˜*ŸÜW€H§{bÐr$>à…@Ÿ…x&4ø5jj ú¦1™AІAámCwF"ˆì£EáF´¨”ð}q¨å¡€-y(ðc0y(ùŠö¹€ÜÇ}0ñ/°p  p@ †V( .™~¨Ênš|¬ HÊmÑôeâŠ>90u Ɖœ¸4G0ƒ4Ú'°QpØ _êˆ,(€•·…gš ­›…._JΩf=Ú~Ÿç™ßºª†±¡·e@\èTBü´‡‘*n Pð±P“š‘+˜ïÈ’žú«l÷•Ž€‚b@F— [(üÿA]ˆI˜OŒ '§sŠN * “kØ6¤‚ldDªr±³Ö2Þ6Y‰6Fàu@  ˜r€P²$p²ø¡{&fKhˆ€Ù&9³4K°Ôz£¿G¥÷ÑŽïøñ˜¯š ´ûm³ç.Eë Û fZ¤„Eº? DTÖx4Bs°œk@¯öН÷1‹(@&ðKc(˜åç¶ok³îјi š‹ )’LP’?{ªG›?—U§‚;¸}«» Â@¢“ADÈeè$‹[ZëñPú«ò‡·„0µ„ ]P¢&Ùû¨÷aº§ÿ[°Ž€½bÐ…3ú‘]‰·,‹Y© »m´Iªª»[»ŸY¾Ë°”Ã{§Å›+GC7@@4ð3(RéVð)*¥¿§…ÚëÜë¨ø¾áK‚âö«i[·<Ûº›K‹o€Œ@»A‹Zò+®[¿+̻҆Ë>@™¸é·r«´çü±7à¼0¡ºK€(ð‡×¥ãÖ¹Ÿºz«Á …@œh@¢!Œ¨Œˆ°a꺆 “€e€ Új¿!x°g´dŒÆØqƶ±£eeoN›ê´7Öëtps ¼î1˜‘÷…ÄYŽl›½fh»nk5ÿKQpƒ‚@¯FlÅüa­ zâÖ…Š€`ÂI¤‰KtóÉiœ?p¬nU5V}†i´õ? ±±ßØ¿Æ+P~Ëv%º‚Pe[ÈÞû½Ï:°x È;0Ð-Ð}’îhW|£Zªö‘½“÷làœÜ?W%Êéy9Þ Ã\aÃB§h—ó+KFz¼;Ü#êÚÅÉ 'G‚ekbœ$@d0¢{Ÿ#0ö°Ñê;P³pTÀÌZŸT,Éd¸Ù£‰À)` Ë•LáY@ʰ¼7ÔrƒáSyzB-\«´¹¼ºüÁW*n‘—(ÿ0XH!`:?Ïš 2Ð 8ZpÜ÷ÈÙôÍ*Ñ'pÍÙ¼Í ¶O]wwÕX}wQ5YuM4cwu5 YÃPdQÀOyOàÖPWP¶OT°†üeÝ5< 103m‚ YCðU€vqd=w^CÖm=mÐwÐ3IÓÕ]}¿ÞªÆ*BÎŒ3_áj»ë¬ÂïLÏñ‰ Í®h'~þüŸ#_@¨">rЭș€kÀ¯k ºKYÉÆÆŽ]¼`,Æ¢¦Ñ–Ñ¡]Ê"=ÒnÄ)h…Ú°¬£0ÿ³d0p…€L ³„y‘§Ó¯]È!м¥0cX I0G’ [`ãÑ9·†Py'òy)ý±±',Õ«YÛ9´|bgŒ,UMÝ¡¤Ê×-çMGû½Ó !é}L]reÿ»‘úiÈ[’W\r”‘w -@©È °Ÿñ«kšI³;ƽrÒ$ý7véÂD;ÝŸ»£¬»(èÑYèúéåñ}‰¾tX^gÏ*Nº gð‚ðë–®·Žp,Êë=çŸn–/%ê»Ò<û;Ald|¨®äôëÑQ€ÆýæƒXå\Šå! ’$Ói*ðå½ÚÅQ°…ÊɈÄ-ÑnÛ,Y–./èjçªW!yŽä}Îìªë.k@^Ðnƒ9nñ¸bÛ{Þ‡%^È'¬9޳b°“g…òùŸ6~£1HåwÞ‰I%àãäLÞ:r\äoŒ±¸{ê{þ¾©þïØ~oÀ¨]ðPª+³T>Œ,pon¨"ðÏ$ dåÜκW8 ûúˆ;ÞÙ;•À¹h $ª¿²®_Æ N犋l©êÙ|~íŽÆ–à—,J¶:®ëG§éŽÀé+ Xx" Ë†ùê*â ˆ¬WhÏi{‘g‰ù‚ æù ~ šŒà“EL'ý€/Wí™ùÍÿ­¿Ÿ Ïæãûú¤Æþ‚¿º©ÿ¿ú­ïêYè¼ÞÒµýmƒ&ེÛ‰Y~% üYoÉiKü›<ùL”ü0Æ­0_á3/Îi™|c¢D—(Lœ8äÈáC‡‡¾tIC…L—3Žº˜ Hfá!2"Hœ9CB‰yD‘f%F8×tùÐÄ5‡N˜ “fcG-H´@#†‰BcBdêðL2€!*ƒiàU¬}°nå:Ðá¥K‘EÊÚÕìY´i·jUÛ¶¬[¸lá¶•;Wm]»gñnE$ô( kšBԥ˚†Rh±à "$‹há°°aÃ-2¯ó„Ðç™[ôDãØ1ŠÏ‚Lü%‘æ!š. Ð †ÿhhb—7ˆu éR¦½n/1]‹µ÷ï¼É¹Wþ¶yWæÏK7ý¹õL—ÖùÒ"L Ú ¡a’¦aÄ‹ß!’Y±‚Œx4=³B3b@2Ï|YùËš0 :Ï‘BÄè/?‡¾p¬¾/¢4ÈPÄ,±Š»´"Ñp¹«*tˆ,ê’ÃP¹ó*Ñ®Q ±¸³†{0¼¥^”¢§¢Š‚¦SJC‹2š±4ЈBf“¹­\Ë¡ç’KI%WTQÊ«štËJº¨¬RK°sqF¦bSFÂã"Aª‡ÊœQA×àHƒ£‘ÄJ,ä†Ã2Kðh8¹LkÏ»%­ÿC5­/Ç4ÓÑ kާÒthÍ÷rSF8£4 ŽìÊÏìIT¯HTÐBåòTèX…•Ã!}HL[«¿Èq"—zÈ4†,²NÞ¾rqVZKudÉgYTVWµd–EkÍÕS0× ²ðl3 ?¦.3ì ÅÀü¢„£JpÙQ!º- ëõíÊå•vÚj©¼vË~¥ôr[\i Í0Ã;$Â'’jj<ù=c…Ó~ÑÎ$5üͺ‡úÀ£ùè¸}ù}5àÿ8ÛZs-¸©™jº© p|y[Gb„ œàm•+±4ìcè(M.ÙIjOVziµuYƧ,ÌbÿqÖµ‹üà˜Úg£±r(— Õ£§dZ`”SNûªF½™F¬-ÃhÆ·sÚÓ­Ey«¯Ã^µë²fyð¦×–nà§_Ôyæš«¶š)y¦™kEãšè¯\s´ÏVÛð뜶µnÐ0››îÇ› 1ªÃØÂ>ÆöšÉCNuCl7çüsÂ;÷ k,ë¯'ûwêTî2éíüðñoJü‡Ê™}­@O8ìˆç¼¡%P d`ø@FP‚¤`-xA fð‚bCÿ=øA†P„#$a MxB¢p,üXñÐB ÂÐc2Ôà»wÃìq‡À¤ø÷=ý=jLþóʳbG@¸( }+sßûê?Ð…~ÿb¹eE!‚ 9õ⊋žçˆ¼´-wMŒUIdÆ3N‘zU â}H¾L0…yçkÇHÆ;æP06ë‰x< ›#¿éôÑlÞÞ ÝÈ!2UÑÊ#©ÈBÑ‘ŒbÛŠ7HBZÑ—ÐdŸ8Ù>~r Œä"¥8Jýñ”–äe&Y¡2âÒ}´„d1éJ*V2—Ü¥ã‘òS– Œ¥'‘ÿy¸RÞo™½t&ØpL[âQšÂœä5IÙ2eb‘™`Z%¾$©»q†3äD:ßÈMUÂqoæ$c<ù™ËwÆE—ìDå:Q7DwÒssþ¬¦(šPJÞs›íæî¬9ÍFÊ ݨ9MIP|¶QŸu(F3úO?>¢ M¦DÕÒ‹­”¥ŒdèKŠÒr6ú3¨ŒÚ¹Ï™Šó˜A'Gsj¿â¯§/ú)I±iÒYÕ¦OU©S•Î|R”rNÄ)<¥zÑ©RÕ£Ú|©VõfÕsBµ–F­'[Û:Ö¤‚o©6)öÀ:ÍšÞõ¦DíhÉšÕ²VÔ®{ÅëW {XÄÞ2¢˜4+OëZ¹ÿª–,¯‰M«[eŠT¬Š´±Ë»¬^?9Y±òµ¯a½ªK{Ú³6´­bE›Òp~ô ›•ëc¹úZ¯´³«%mQý×ÔÍÕq‚…¬eËÖÚÊâö­A•­O Sε·MD®o§;ZÏ®1³Ž¥-mˆËë^¯ºØ¥lrIÛ\¦>·»ƒù.»Š¨ÆW¾ó¥o}í{_r0…ûåoýûß®¿¶à{ÙâXºlû«f»Õêö³vmxJYôÒºµEè‚ËK] ›7»q†‡û`Cœ >ÚxaËb´’·¥ŒE1w‰{[ /4ÄÖ±ˆ1Ü`£6¦æ­,]|á"ÿøÅ¿Ý®R7ìÝÝ&™¦;–1‰{\å?EË[æ2—ŸÕe0‡YÌKs™Ëüe3ƒåÀ–Ö‘—›ã5Ø^¬’ÝŠê|e,÷“ÊK†s”},e+šÇxïž‘hAçYÑ‹>ôŸ=LC¿™Ðô£ù<é8˹͑ÎtŸ‰ìhP‡šÑ’ÆtàÜÜéRû¹ÒˆfõªE=jëöÓ®~5¥aj%ÛúÖÇå´ªw=ë_«¶ÕÁN°rMÝk`_:Õ1Vv®Imi]ZÖÌŽvµq íg»ÙØ>ö´…Mkpo»ÖÖöµ¸Çk6G8Ýê6.µÉìwÃ;·ë¦æ²Ý}mm››Ø8¶÷¾N]îxßàÿÙÎ7ÁíoH{»Øý^¸³ñ]ð‡<àþF¶Àåmð}³»ÝßθÆMúï‹ãŸxùr‘w›Þ<9Ê-þr˜›â±ÂùÝò˜ß|æ)w9Ç;¾r–ï<ç:?7Ï{.ó¢]²÷yɉ.qšÿ<èI?ú¦mîqO}ÅYoúÈŽuåÄ@ìc'{ÙÍ~v´§]íkg{ÛÝþv¸Ç]îs§{Ýí~w¼ç]ï{o;•bÀª¿s)ðZ<áUx)!>ñ‡g|ãÕªøAž:’—å+ïx¿ó‹ßö²7üì9¯V8°*÷\Úÿ½–zï{Aý^JÂ~ðüÕ'_ùËg~óÿ|èG_úÓ§~[f , ×Ï„ Ѐ;Û À<`_ ðØ î7§ëï@¼þæø€]bÀöŸ‰PH¤¹pøH€Ì8X€h¿¼x€±A¿ìhh=®Ð¿>a€8@@L"¼„H€ø|@á@ø\@¼À¼€X€ô“í ¼ Á­ AˆLLŽH€èÐ?ƒ”ŽK(€ˆ£à €çp„*œÈ`8 Â:˜ˆhÂ'Ì‹ÿHxðÀ€€>€ƒ%t€° 8€<”@€K0Ãð3 8h À9È„@”ƒˆ¿¶hÃ7h<(°CÀC=äC?L9ÈÄA,Ä3œ p90€ðDPŒÄIœ‹(9pÃAŒ8 €€Å<ìŠZ¼E,Ž ?h€æÀƒ>„ÄP€ BépÀB ¿L(€ôSpS‘ƒ#ücLÆ‹èg„F6|8@<Fˆx€ì€Cì \FxDG€@H€úƒ‹x€H$I<€G0☋6\Ç8€ yžxœÇÿzäŠ{ˆø»X€~üÇ€t pÁï“ÇAÜÇ…lH¸h€ý»„ØDx€¨ÈA ?–ÌŽT4 ¿ì£9@HHù3€HÀÂð@ɼh(€H˜Ì„žl€ÈC¡‹<‹¤ÌXFp€sÌÈF\Æ>I€¨Fh!´ …Ì[ÌÇoÌ<øÅ¹øJ<€¬,DzGxyTŽH€Á;Ç>€æ¸„õK`€Å$€C©Èk´ÃßPÐæpO•PåàËa\€p€ÄöÚŠè¬ÅlôôÂ"„‹¹¤A„,GÜM»øÊxTÑylQ¬ˆÎ¹Œ„øH‹àO?\QzäÑðQ·Øè½8Á(-Ò®ÀÒ݃ƒõ»JxIù HSÿ9èˆW¤%#€ÐËä¨Ox€)dK0SåÀS€5mÓ7-QÔÉ>„úŒ°Ò´H€4…ÙMäÌÎÄÍö¦t ÛÔɘÍ`TGu‹èL L¨T¸Tµˆ(OàEmÔLØÔNM XOx9€4u¨ÕR½Š]MÓýM°|9€g…ôÛw ‘ê9(Ï®L‹Dt²¸h€M˜ÉÝ“V 4‹ؽH˜I×ìx4Ò¬ø¿xV!ìƒòÜ“°ïˆcü¿ÁT×o Hw}x­’ÿ»„c¤Tà¸W‡|V9¤Êwå×›œ‹ÿpØ>pØÜXÿ©Øg¥\­> Y‘Y’-Y“=Y”MY•]Y–mY—}Y˜Y™Yš­Y›½YœÍYÝYžå`¶dìY¢-Ú˜•G°O£mZ§=Y¤uÍ¥ý`˸|€ÝuMd½l¿qóK¤ªmKˆšYÍ¿›|Fcÿ4Nc5^c6nc7~c8Žc9žc:®c;¾c<Îc=Þc>îc?þc@dAdB.dC>dDNdE^dFndG~dHŽdIždJvc»dLÎdMÞdNîdOþäMF•›7t#åQ.åSNeAe^K8SVå¥seT†e-a嫹Wnå\¾eiëå}±åXöeZ¦8af¦:»fb.f^fæ`Þåe†f*Qf«sæhžåf–æc¦ºd6æm–:¯36†稓jþfr®:¨çtÖ:’{Žs¾ºvî:qÆ9dææ{†‹xºr®g{^gvþºwnŽ}Þ¸|žgzhgž‹‚Ö4€þçÿˆ>h„~:yV‹‡nh|žhŠ^h†VèNŽŒæº®h‹6è’h’v‹‘é~^i“Þ:]Ææl–––v8˜öè—vi¥Ki•io¾èÆi¢.êŽÖi³¸i‰Žéz«é™¦ékjé£%¤ê¡>ê«öi¤ž0Y–j”fꦎê§f•(k³>k´Nkµ^k¶nk·~k¸Žk¹žkº®k»¾k¼Îk½Þk¾îk¶f-ñkÁlÂ.lÃ>lÄNlÅ^ìµl*alÈŽlÉžlÊ®lËlÇ–’ËÞlÎîlÏþlЦëÌ^‘Ð.mÓ>mÔNm¿íQm×~mØŽmÓfmêmÛ¾mÜÎm¦mÿéÐmßþmàn´æíçnã>näNmânŽännç~îÉ^nå€nê®nëîkéNŽëÞnîîî¶Îî¼ðnñïío» oôNïä6ï¹Po÷~oÝfo¸€oú®o×–o·°oýÞïÏÆï¶àoðèYª>iˆkðrj_pÂã;pp Ÿp ¯p ¿ð½Ûœs¥= o¢ '=÷ùðñOYW=Ý9ñË»½÷p‡q—ñ§ñq”mñæÐñäàñÇñr!7Yâ+›"/™#Gr÷Iò}arÝk"'¯d)Ÿr*·YJd•¡ýÀ”L¿>è?”ôHûû>ÿ/fPMÁpÕ’cäÐæLVVy$ ó£@V™™œÉ>ˆA׋P€¸ÜA*IÁýCV1?ûôEi F\ŒÃ9$¦-<Ã4tÂbÕ ÌS4Di)€B|FhÍB”OÏßÐB+FAÁa™,HY¼r*YÇ]ìÄ;´SéˆB䏨,çpû¤IzÄò– €]ˆi ¾À#G8G-ÜïG&H:;ÔÜkÅMo¡µFl,¸¾¹dHi€ôƒ?`?s´€ƒe„˪¤3û L´Ð4€èË}™ÈÌ­$JA‘Ä£¬NklÌ~ A0jÐq bÛ\Êÿ}Ù<¼KËÄò(Ã…÷iG°XÇÒÜ—»ÐCßÏH¨w8ç’’/N×tÕWÇ_r€O*q„ö»ð$Eu.YÂLàxxh?ŠÇO)qÉèWùqʘS•–»$Re0ˆvÔHW_ð@Àg RVùsý]ÊE€5_‘€@€ƒÈ=·—mÅ ¥ê¬J­¨RV¹ûÒ¤zÖµ³øð?u÷ß Vi9Ö^½DMÅà#ÄxI6uÓ“,dU–—’4ÌÓq”IœEVÁCŸoâ9­Ó} G?<àTV‘ÍëätÄ·3¨Ø)L{*¹„ÁÓX9iáXg!––"n×4ײ‰K{u€/bn´¿Øz*Ú¸¼VnÝ—t½Š~ÝGøVîÓýá+O0 !ù,—o‰‡777z—º{™»“SR¤]\¹__¯ml¦ww»ihËa`ÉqpÓeeßgfßhfÞkjÔwvÚuuÚxwÛ|{ãWUäWXäXVã[Zã`_ãdbähfällèhgèkjèopåpoätsäxwä||érqä€ššš‚ž½‘Ф˜›³… ¿©šš£££­­­´´´»»»¦Á”ªÄœ©Àž²È¥·ËªºÌ°¾Ï±¿Ð¶ÃÑÌ’‘Õ…„ÕŽŽÙƒƒÛˆ‡ØŠŠÔ““Ó˜—Ñœ›Ø––Þ¤¤Å¯¯Í«¬Ì°°Ê¼½Ñ¤¤Ó±±Þ»»ä䈇䋊셅튊åä’’å—˜åœí‘‘埠壣䩩岲帷弼ò­­ó°¯ó²²ò»ºåÀ¿ñÀ¿ÆÆÆÈÁÁÍÍÍÁÊÖÅÎØËÒÛÒËÌØÃÄÝÌÌÑÑÑÖÙÞÜÒÒÛÛÛÛÝáÞàâåÃÃåÇÈåÉÉèÍÍåÏÐåÓÓåרåÜÜéÜÜôÃÂôÌËøÐÏñÕÕòÙÚøÑÑùÙÚåßàäääìììïïðòâãòêêýîîñññþþþÿ ˜¨ Áƒ JȰ¡Cƒ J|q" Úȱ£Çc>ŠI’cÈ’(KžLé1FEYš”I³ãÊš,oÒt‰1&M8Q :rhJžq%úq)Ó™A‘Tú4¥ÓªWGJ…IµªJ¯$³ŠÜêS¦X¦gƒ¦íH¶+X‘kkÆÝèò]BƒÆèÝË·¯ß¿€ L¸páA„zº}ëq®Y¢må2†;¹1ä—esV¶¼äeÅ’;{í8òOÑ£;—Ƽx³cÍQY‡&z5èÓµsǾýX·êˉ§ÎþM;ö ¤Ã]û®éò¸pÜʼnãtœkòʯ­~F]ºòÝÜ{Gÿÿ>]vwòèwšïûöçìÓO¶öx÷àáÛo?ÿ½õóøñÇ’iñ(߀ëíwà[ôé§ÝrªÇIw`ñJ –„28ÒM„Ø„ZpÈXƒÿ‘TEZäAÇMÜq_ù¥(R!rDrÌx¢™‰ôDylÔCtøÈàev½aAHÐÃ`†e©å–\ò…Ø„7V±AdŠÀãF^È…WÙ $Kw„ dÈÑă€("‹X™x”"ÎÙ8’Xlb+¶HÇ2¢å'JÍÕ÷aRäâ86Ág:ª$¤€J:wáDkYä S ¹X`ÿ±f?ÆV]#åѪM:HM<‘ÅŠ˜©ˆ¾>(àŸ`¢ÅS´ˆfZÑè ˆŠøD’\+‡CÎêæ§%måGYرQCŠˆç±Mô°*Gtl!ǪœÆk¯ ÒXž@ˆ"†ˆ=jq'ºÞÙ„XL!A(a±!‚°A²_‘KR]€Ácºb’ƒØ¹AŒFºJlPÅcf±_ZLí¼DÙH_ˆñ„#sºÅF[ˆ°Á%OáÀâÒŒ®ºÆN\ñÅûµênŸ±!_ðb«tØÙ+¼MTAæl #»{ö˜¯¾ü*kðw$\¢§å{üÿQ…ÅÅ,¢rˆ€öŒ‰4§UÈrÝþ .ªö¼‘ãÍœ"]DÁ _hvhrÁE£XAdfÊ‘åXX<1ÆØµiC²EÜ9_¦w×_d0:I\9¢ádº*첃,°ÁŠ UÉ!îÛiï±éaÅ_€!Â÷ÅŠtÚ"ü :Æ–íx°{;ùšÐ·Kú€Þ$xˆwk®Þ ˆxðÅT¸ƒå>Â…)/Vº€‡v…Èm"Ô¥Šd'<½¡ Ã:rÓ]+(°‚ô:ª(ì!&ì§D@¦ H€ fZ—Ð…ºöŠPQÕÆ ˆ(Â.“9¯ÿh÷§Ät¡oëëÁ P ƒ¼*z"Є°""r$rß ˆ*•§` b‡Š€,!\›˜ÀB4à¸Aúz$ b8óÈXh%ª ‚TS¨ÂJFˆñ‡‰†%­• ùJã@Εp@ ÐNÑÑŽÀã š ˜òšÂ–Õš ³/òЇ$£GÄ¢ð‰Db“€Å¬¸1ÖÄa(à `†Èq!ŠS¬âž° d€™hKVØ®UHXŽ1‘a›è Ì‘°Ìe<ˆ™$…³I8l$@CúXx±1äa—vpZºè@Ê È¬ Í\àHªiÿMDv„žSôV&5]ú1W3L×BdS¬À2 âðª)mIx‚ñ¾·'` ïžù$ ?û)K:X,D,Lå-ÙÍe¶-2pˆèW ÎlrØ@´ÆÔ¸û5ó™Í¼/]FX’4‘wP\@•Ð[g¤œ7Õ²C¼„’ê:CÌ`ÎY†ˆLÅRœÂXIJSR•%©f‰‘%l„QÌ)Sú!òN$!èü0€ ì(©Ð@ШfZIx  ÃJiV}îó•xÃZ[` (\[6±¦¢$„#ü)Í„OðU GôÃúlI’UZ(e¦`¸ ÿØ¡ jê,9‘€Ñ‡chÁ!P„#ø`NI}æR=«,’ÒyÝ€!bBª¬$E)ù¾š-lÀ¾ªº›Ç€Q%8AÀ‚5°á r àz²&D‘®¶CI4@Ú ˜‘MC^ÆÀ ¡0d€@& ,øPB)0†#8ଘþâE˜à'®óð‚ KH’ƒ…0 té/-V0v :爀-ûšKJ™MˆÊmì,@'´”#„Á^P†¯UGàB¸´ ´»†%%Œ[­UÕø×ëqd‘UhѲÀƒFÚaLdêî kJxÿ}qƒ† 5Œ Q‚ë+Z hZÑHg“”4ð¥W}ÚGüÌQ^…/[RòWÍzÖ³]iÁÑ÷" ‚%À 0fÇ‘1‡yUÉMóÅ"OyȦ,âfË´€„#o„qM0eNM‰05­¼µú„@‚¤á ØÞGú¸eD®AÏÌÉ¡e†ÂoŽJy2Ö5X,sjŽòRȘE"ˆÖm„…ùÛP¦]íËa;$ãîÈ¡¸¤\c E±ÅôF•NÑ 澜•;¢ä <Ò“v® ´YÁÖé[‘®«pñjA ¶ ‡Í>,2{$=ÿ^3 @b"ô¢÷Ô‹9@”yô³&mVg¦Ùe-Zä@`&^‘.vrM–ZU…FmÀÀªY"Ouñä PðBÐñ˜Z ÇÜ@D™j2}Ül”vsÍ)†RÒúš @¸ÒI=ˆâý\Fã»@n/oy—„msI¢À3>`Lj›8‹jÍ/g¯YmU¨€n/P*hSÖØfWbr-òÔ`Ï„á@…)D=ÚX¦j°¬Šõ |!v2ûHêo"¹[ôÝA|…… $¶löþGBD†Û‘ŽP±MeÈ„´­ª™Áö»sUº"¾¶þõ±ïºHh?ˆC5|U,ä‚ÿîyïûz— ÛoÂJ<©pYe@ŸË2ÚeÇèg%ßœâëà7еÃg`å.U-Ê”r?†(’+”gyg6™WeXÀyî3e f=&z TzóÇr%‘eU%X÷[çL¡Õbãh€vfi¦}"P,Xúägö…R 0@5éÓvaÆ:?§.t •Z¹Že©”lÉ”n‰•zù—[™”è•úSx¹–u ˜w9’]¹—Ø“–‹I—py™ÌÒ—‡)™j–ú8˜Y˜š9=ˆ9™– ‰™ ‘f‘®ù𰉑s™„™˜b˜¤É™o)—•I›¡i›™9›fY•ÀÉ›9œ¥Ù™)˜&Iœ±0a!ÔyQqÔ)!ù,DÎ…777“SR¥UU¤]\¹YY¥vv»ihËa`ÉqpÉ}|Óee×wvÞrqÙxwÜ|{áttá~π〔””ššš¤œœ°””¤¤¤©¤¤¬¬¬¶¶¶»»»ÇŽßЉՔ”Óœ›Ã££Ìª«Ô£¢Ó¯¯Ü©©Ó²²Þ»»ä㈇㋋ä壣峳弼ÂÂÂÍÍÍÞÉÉÒÒÒÝÕÖÜÜÜãÃÃåÔÕãÚÚãããÿþþ±À\®¦›Õ„9Wj™r c:]í(¼½^7a ¦ H©HäVðNÃb. üEÕk3X ·ÓäµýLÏëÙ|czroylQQ3†e5ˆ"!†^0l"†:]53(00:0e9#O11­ˆ:#98& 2[3Q$ -8* 63 --),6!+4% '(+LB0,Ö,(B6)A!ù!,A—‡ ‡ """***444;;;EEEKKKTTTZZZdddlllsss{{{Mx¨z—º{™»“SR¥UU¤]\¹YY¥vv»ihËa`ÉqpÉ}|ÓeeßgfßhfÞlk×wvÝsrÙxwÚ|{ãWUäWXäXVã[Zã`_ãdbähfämlåpoässäxwä||π。‚‚ˆˆˆ’’’œœœ‚ž½… ¿Ž¦¿¤œœ°””¤¤¤©¤¤«««´´´ººº¦Á”ªÄ›¯Æž²È¥·ËªºÌ°¾Ï±¿Ð¶ÃÑǎ׆…ÕØƒ‚ÛŠ‰Ô““Ó˜—Ñœ›Ã££Í«¬Ì°°Ê¼½Ñ££Ó¯¯Ü©©Ó²²Þ»»ä㈇䋊퉉åä’’å—˜å埠壣䪪岲帷弼åÀ¿ñÀ¿ÆÆÆÈÁÁËËËÁÊÖÅÎØÏÒÕËÒÛÞÉÉÕÕÕ×רÖÙÞÝÕ֨רÜÜÜÛÝáÞàãåÃÃåÇÈåÉÊåÏÐåÓÓåרåÜÜõÄÃñÑÑòÞÞùÛÛåßàäääççèèçèëëëïïðòááðïðóóóýööþþþÿ! H° Áƒð \ÈР‚xæHœã¨áAGŠðT4x¨cĉs4Brt$ž“&eÄ£RƇð”)ñdK„]ª¨hgAGav¼90§EŽ’*]ÊôÓ§P£Bu*µªU W¥64z´«@®^Ê-:Ö+×Csœ®,›ð`OE/Ó~t‘e\”uñtÜËwdL”5antHoǃC1žtJØ+PÃ÷®‰L¹råÉ–3[Ƭ9òàƒ`Ù‚MúhèÒd žˆö³Yć\~LúñãM´BÑÆŒÝsçã¼µÿê…ëško¢=<Úq玜ŸK?}ºæêÓ]CD½ð4÷ÒÞQsÿÈšbÙЇ{ÊLú7æœÛõêÖë¶öÇ´jÊ÷ù5¬rÖû}žAu†u›!øÜÏi§ÚwÍAဤ•–#ˆ¬vž[*Åå}Š„ÔM!…ÄN'ÓDTu4…%¶_/ú'ƒ B†cŽ’ñè`j¤xC ùH?ZtÚ^÷Õ$¸éG¢H?¡•b“&µô_GÁ¥HuiÉ\[Î-Èãug&˜c’d c‘JÂÙ&A½±¹ÕB^Âuezµ}bJÈÅe"–4±Ä…º¨žPÙP¢™í˜¦¤ñaîråÉúÐ2¼9p,¤ÓÓûpÆžÝ „j¤»ëv°ªõM'‡NDÀ ‘+|–š¡!IX/l X0ò%²%J"Žòžå§ÕÕd&z!TMÿ¾2@ÈŒÄ|XG Ý!M…‘Òœù†ÇÀß=pt|ÁÙ ¨½,".f)›M¼D"'eä0úV½D?+ú¥/UBáî¨Â»¹°Šé£¢EHF²Æ”†ùÖ—p#•ÄD@ïÁ â®G­Sí$TZl!$ãXÀÒQŠ6¼"§¨É.•ío[dËQµ%´}ë0»9UH¾µšŸåd”¾ù #ä­1ÁLŽO¼$ ýxÇMÊ0HÇ‚¥cØÈæ•r•rÏp°®CÜA!Þ‹\˶*Å fËá^®Î¥KKîr;zô%·:¹G••mœ¤d´däC“ôñ$ˆPdoÌ–¨¤l€×dÏhÿÀJÎÑ€ßD'0ÅéÆrq/‘ £§ýdäL"TlþƒÃ9Ða1zêÞPXó$´Eœ·ÜKqi4(ê Av4(A[¨Ò'“žDè)«Uµ g`®SdBntK„<'K]¹‘ú3—µ[A%DÌpr§©CÍ]‹*« e(H\݇‚è$hñOÎâ FcÓr’]&å¦R9ÙË•ò²¥LõÊ(sÁ²q…¢»Q¤!§U›„,ÆP²r$ËXU‘j¶1”ÝrbI»‰Ò¥NÈ­QýTß ¸O&Q'Œ«|hVÃj%dˆ^Å e}FÁ™(gˆ•êQ›ÔƲ®l%[¦ ÿ†Êª;ä¨è”6²y欚Û$¢â*Æš²…ÛYÍ•V^a2²O-HÛ:[<-l¦ç\bª*²P¶ ‘§ÔŒèˆ÷ºòÈFËÝUsPÑVºî.9­»5žÕH`\U½D‡f49ê ŠÛl³ž#—h+l-R×ZÖ¸Â7µò¥®r+˜$£Xë™#¤ð·8:Ýæ ²«ÈÔ*ªÜÕ¢•±ÖI©ƒÆKcú/RðÂ]=É™5)zMÌ\gDZ/†o‹;üØ®SÆ4ËËw’6ºžòB´1 ¶DüÊû’8±é”‘¥£â&³xIžpaú]¡¼ ÿ8øqå¾Þ3Ü|FžÚ&_þ@.€¡ D 7 ]"=8¹f®îÔöËÖŠîT#¨rÜP¬$6º&U³ÜÁL™?háÓZÆ\äöBØÐgv*x\ZC7:Zq,ù+]_ -œÅš&™VaJ™0hÁ èôð³–Ð.Nsl—üå·´euf‘WÓò’ý­([Q×geFÜ£`™ŸX«L >½'haÆ>±©­lÈ2;¾«¾âGD‘(adPû¡”²U2¯ak?#îÖû6¬ÚÈpA è´Ð‡t—ÙLN4x>FñŠ[üâç×NV›êq|` ›¾Cž*†Qì "ÿ`‚<€‚T!c0¹Ìg±aüæS4ªu^,ïî¥$°ÞKRh§½¦Í'µµ·gÇhJF&aXA ¦þ‚sw„Ï~Fƒ˜Þ™2·Û­ï>uÏŸÄ–•Ò%ÿR“ú»4û¡{QÝ®™?¸àh`ôð…CxÔ¿>ÓzuôÜd;[ºag÷ÎW|Äîˆ˯ˆD*­þ–(@›c#cÒ(MËì —û4Ôìƒ;GƒOZá#þõ•&>ì°ç­|ˆû‘;ô»™‘.®ˆ&‚Yž„„=[«ªk©ÍÌxÚ Ôñ4Æ­…½Áê¨'uב|øe£¹úI“DpFû =¡ÛB ÿ\ʆ<Ӿ“-!Z0ðÝ [ЂÖžðC|áAÈ õ0Wjõ͆}`w}‹—hÚWoW3,£L e:7ö,¶×{05M¸£g|÷'Zz‡PZÀeàkËwÏj˜`ÿqX€îF€ñF]?ó'4(aÕ5ÐC\¼Q•0“—i%#pÔOa\ðÀvui`Rpz‡0zŸÆ ‡!¸{ppýE\§^'€®ƒc÷G/uUF\36Ã,Ã3\e"ò=…IÑ=Uõ„j}w‚ZÀõ·}p{PÏ·û×D¶u,o1¨d`(PÿuOÕ=7U('ymö>8T3û憰±C°r‹pF‡`|×ÈwZ°dð"™A+ПÖ+‚'µ`®Õ`g}ª†l¡N¡á,&3}ä"öÁ"¼÷'p±-ûf(D;†òQ²!Vzák w{·ĦpøWd+c uePI`_€„}è+¨ˆ¾ø‚½èˆÄcYÆ!`:ì1HºW Hgç÷{XÂBÕ{ßs2Šhc‚Zpq/°\€_à+…çeà‹²¨´h‹je€×wÿ·n¯whŠç‚^ˆEŽd7†÷HÊ6ö¡Œ~åÉÿå$XW-Ñ¡¸{×z¨a0u'p+Plp‡Ÿ†nƒHˆ†˜`¤øpŠ£}&Ùˆ›t’ó5Cædc2BîquòYlø',‘ŒÙb“fYó´3E·hËD:Exf°/°”+ðR‘Ï{@ŠËG…\`…XX@ÖØ{çŠ\™ˆb÷Žz3E–Aó'dãåx›Õmý¶vYWg_>S3vá6W‡hpzdà—!PSÇ|{јd@‹±’ë87η Y•ìØ•–‰G`)aé4†…A~þÕj8#]ó{4-—%ùÄ~†¤Ëhh0u¡Ö—)À|õÿ‡›ºÙ)‚!˜…=☟VˆÐ7œ’™’‹ˆx^©)Ô)Ò¨F=£j·~!—uaËé'L""3ÒiKùM 'Ð I˜†ˆ©˜ò÷Q•L’ûAŠ ¶•‘™‹…6Ÿ¼–"šf’ŸØ©O_~?A\1ó(ìƒM–a hð)p)Ðr'ð‡PiuχnØØÊ—p{G’xÐ_±àšNˆ úçêyd¯ÅxôYœc{¤±iÌXXc ¤SYº!&ÙDp5jÏ÷S·"U×Y° }Ÿ÷y{A1±`~….'È Ù Ô§’_¨¥žƒœ¥áJþÿ©ï3@hŒEÄt©é3xB`A€ù—ž/ -¾6¨{1¡W(Çwu!è| ~ŠD<2¡R°˜)V¨%Z™$J™†*lÈP…ZV;UóY£O¡88ÊF è¶-°”²Ø›{Ʀ-W‹á~_·•xЪ®ú§‘á#˜„Þh”N0ˆ jx»ú8(Š¥ðÚz·Z!Hb~ׂ60QYÃÊ›Æpy6 u0¤Ø­ Šp”±w)@{Í÷„÷÷iåȪûªû±E…Ôê|±j¹®¬·’!Õ¨¹ª«óÚ²e¡£ ?¥34(w·ÿT2øÔŠ 6°Cn€˜hð©¡:ªOÇ+ £H»”)Ø{¥ßš±®°ú”¿ÖFKߎK@Ž&Û‚.+Hûé4ÇÉsòÈTwФ˜“ Èaô%"¸R°yÐ@q lZ‹késê} 9ZŽZ´>ZQ;µ+®‡¸_0‚èé#+%+nf€‘™³!ʲËâ¶0TŸ[Ѝ¦‘¶7‰3lK|€ƒïŠD7Pkz_‘‡@\à/Pu ‚ƒ{…Û£–‘¸ŠKµòÑ´øil:±‘1•NµG xDڅ튺d º‰j¶b³A¨Ÿàÿ6R8[𑫬7p·{aµf +°H(u jI›K{¤Ê$àZ¼ëwY-Ì ²J«Í‹”…‚ G½a[³«Û®œ{¶rõ«W*õ %g‰‡¥QûŠ¢zo€n0·†Q”SW‚‰ŠZà»K›ÄkáJiÑŸú¾<À¨Â‹‘×p®Ñ]enCø¹¢+<Ç“ÁºX½ZWüA“L'¶JB8”šÁgЧ—´-—£-Ðð°-|¸ˆÛª€2œQ0€Pиy‹œSZ¥!¸¼»/ ÄTœ™õÙ¯H¼²—Ù%j:Ü¥<ÿÃ? áÀR5¾IB;šæ}`›_З'àa`ø›&™”µ~º;®:00¯ù¿9|ˆ!¸æ™»MyNÀˆ½èSÄ»ØÈÿ˜iKö¥,š=gZ;eÊÌ‘¦–»Ê› Ÿ6uf°&àa@)`®µ@5ЧÀ‘/@6¬Zð©:ì\™¡*°Ç}|N°ÄËŽˆsô\Ï8r$gÏs¶/"·Ï'—‡Ð1lKàSçý(Pëk àÂ"0l01= 3P5°9ઇàR N0)§ÐP0#@s£ÒíJ S0Õÿ4rú¬ÏÚ[È9-³$Kƨ¹æÈ×¹h–Ú±!)¸¿–”*u œ›&@\½ªÓ?ÐÑ2 RÐ1€ì»R’Z‹ÀŠËc©ËÁ#Ï(#L¼¹cÑ6äÛy”7ÔA Š¢häÀöe°æêR7u×|¹d ±/à» pNrð­s U!à‚€pu¾öDê›™¤Ò«¹C‚¬cÔb³iÖy4Á¨=™eaÚ€ãe¿„'uÈ—½»¡¦Àrêk^€wXØ.¬”'‘¸» 1°sð@Àæ¹|­×õ÷=uUj)sê„C¬œ¿ÿ8wWF~m]Ej Á:½ÓÙkVØ­X Žf0aý Z±ï ±(𜻑 1Àv`°X ¹›Ôà¥ud«È¼O³²ÈéqȧÉ@å¶ç¯kM„¸¹àzéLn«´éÂ!øLnÔÉ#왿†P›Á¦*h_ëŽáv¦Â¬‰lëKÁÞË.×~ˆ”Žâ“Áâ|!z%ÎpóÀ†ÉÄ=Ë »Ï×dÜ3^*ž³œêÙà‰\N>þ$€U~ð“kƒ¬¨GºI¼Ú´¾Ý Öî-ñ=˜óMáxÖlfÀú̓¹Pÿ À¦zà†Ô„½ÔžŸRãÈ@ÍÓßû•ª- „\äkÝ3÷ä±€ç‘+àÓªÙ|g„ÏÜÂÁ-Øáläú-PuH¤¹‰Ã)¸÷§ØKy(Ýñ·Bçàý“6³öêæoŽÞaÁ¥›.çÖõ–¬¹gå:´+Ð¥nÝ‚=ØI©ê‡í‘yμ‹ß`àNXë»™Û~˰” |9®ã”aµ 6½ÄŽ5ŽcSõØÚy3äÌìÍ®j]£.½ïm´ NØM%Ê'PaÀ¾í½f€µÈ‹ŽªòKŠö{}Ùeð¾ÎàšqèeÍÀN ¸“xÎéæmŸp¾«öÿã{¹a.â`ãÍ-PH%ÆJŽ)À{ñilð›Dúy˜<±9Ÿ€°”õ—´û-ï>̼‰ò=î¹®mœ™N×òÚòÐ^2Có•qóMŽpa^lŠ=ÿóAóD¿G¯œ°EÊ)p¸9¿ÔKyzÑZõ”âä[×]ßDÅÌã^?çšó/?öMd\48ïݪç†èèJ u ¿ñwž”Ö_ªUxª^æzÔߣ!ÿ÷‘~®ó[‚Z_×Cg<,Oä./öé­áíÛéyŸÆ\Ù€½íý÷%ü%p¸—}ÎÊÛ_à™«ÊûzM›¬®‘}£½ÿî¡ 8U ]ïš;Þ]Å*PÝ%Nþžû¸ó¼9=ÑŸÞi}Í£ç|ÀaÐ-a <ô§L3 ‚iñB‹-{¢!Ã¥…Œ\ÐxÑ&Á?_.JÈ%E )¸dÉ2™0eþtÉ&$E,á¹ÙÓçOŸŠ„åy3'AE@•.eÚRQ§QB•Z•jÕ¨W±:Õºui×¥ŽZŽe¹†ìY´-ÉtÜE —qÑb¦O-dÒ²,“‚E(,R”ÙK¶¦M±‡%ë•èÍÄ‹v\¹gcË71gÞl¹³çÌL?C.LÐliÔ‡0\ƒ·Á> ®.ÿmÒÌ¡5fRhIMÓ¨bćF;†šó°Ø¤¡A+W:|«s¬Ð£3\5qéÓ½÷bü¸fí뱤]Ø6î¾¼µS6\ºÕßÇ%§þ¼þÔû—ókÞÏ¿¿óë ËN;´Ö £­·â:d®ºöÀK¯ÒúbÁŒÀ#²ÈëÏ&¨2œlì@|/ÄÿDÜÀÔL‹"2ÐØ ºЍ¥=0ÊÔ¸@á„PX鞎h§¦„2Rʸ R'I,ñÉýFt2?QSñ¬µl„­—Âpb¦± BHÁÒÈhᤶì-IHª&ÌÂc<†”ê*7‘lrJ*OôóÏ(± p¯+ÇBã­ÿ=ö ËE \Q)ò«¥r L#ãsÏéíÊ@Aujд UkÆCjT-S=d-‰ÖPuÒæ–'šÛ”Ó;Mµ>)•ü•)RY- ÖfmÔU²•5/Z«êV!%£O4^‰ó5Tn»½¯Jì ;”‹D%]–Ù–ÆÝ#R-][¥,Ý)Ó…ͶÓa™ Þ|•÷Ü´²ÄhUcÑ+Kˆ.Í ñ¸Ö'9é´Ó¨¡ð»_oõôÓŒ‰M5ÝØà‰ÈpBäwJlŽ[ã=RÏàX²øâ^7Ö¸_möØJ’ î¹¥V c’!žÏ«!Ýþy¬ ÑÍ:-†uå©åªé›C`15ûl´ÓV{m¶Ûvûm¸ã–{nºë¶ûnLsZco¾ûöûoÀ|p 7ÜðùÒ¦Óì9ŸÛñ9!Ç{mŽ;Ö7êËŸö©Ø³¶fÖsGA7lZÅŒ~8ªÉ”~xjÌsÖ¼2Ök}4ž¯Úö²ìr V»j™}ŠÝò̉mø™+ÕjÜYkÞùÞÔB A j§Ó±2RÚ¦›B^øÖ¡9©8'KtÑïM}÷`D1á^ùîeŸÝ«ïý»ß>àÃ}·ÿ©6ŽD¬—<úÕßì¶•À°0¯yê“`i¸£˜| ì^ÿþôA×ícË«Ýó(XBÔ´ð“ßo¦@ª‰>2œ¡ñTVAÛЩF¨§Á ÒW$›íeCòEÅ|XûM¨;˜ð.†H¬ŸÂAü=ýYȬ¡}„0¼"ùGEîo‰·ûâ]Æ"qOV$bµøB%âðj:ìbjàXF96‰ŽfáѳN°Žúã Éh¿CžqŒÇ3ãs·HÜñ±‘w|d#YH©q²xyDa&1¹~}ò^ŽT¥ÓZ¹«–Ò‹ndd*'©@VÞ2œ" iJZFË…¡ìä0GiH]î2™ˆìãÏøH(0Ú™Åôä2%ÿ9Ml³|ztæ)SIk^,—Ù<&9CHÊ_ÎR‘o”&© ÈWÑœçœç e¹Goú±Ú|'<ÃYôž›ãfÏžYªhör U%=ݹPmqšù4hBÁ Ѧó¡ü (,•bIÓ4ñ >fã9džR’— åhS@ ½`ª³¤L[iMç·ÑrâÔ¡;K'>cú͛ꔌmiQºÓXö´›?Õ'K:Ô”Šï¤Þ«dAI6ÒÎY4¨O…!QsúU°ªt›÷\ê:kéÔ°>grkek[ÝúV¸ÆUmz;\]ízW¼æµo‰“k_ÙÖQаòª=•ZQ¦¢f“„\eT“ˆÑÿ,ªÑªÃêù´jL¤>Ò«™ì`÷ùÑÉj¢ û,g»êXeBöš…%(YkÖ™ŠQµe¬+g+PÖöä¥NLìU/kRÏ¢6µ¹¨MëÒÐ~n´B+mg©¹YçrUªá\Lu­{]±`W»ÛånuÓ]ðv÷»áÕ.Uk;DáFvªÍ}l}²G÷*'¾Ñ•.CÏKØú7¿ê]ïE÷ËßwBwº·µ-qL`ü¦uÀÏMïjÿë`ë÷Á¸0…;)àöV¸ÀNp„‹\´Bõ¾æí¯=|`CØ´ .&†%¼â ŸXÅ0þ0‚;,bãÒÄ&¦1Š9LâoU³ ¥ŒgÌb#ÿ¹ÇGFòGÌÞ/YÉôMò†«le'çX¶?²¡å&SYÊ´Õr5SÌd0ÇøÊ7³˜Oûä·YÎi¦s}ßуNôŸÝb"çyÑ~žr£}éJ[šÌ{>.—¿¬hMK:ÔtF#åRƒšÑ«fõ£×Ìf\žšÔ­v5¡aMkL‹zÔœrq­SkTïúÖ¾v—lh!ÿ:Ó”Ö5®—MìbËzÖÌv´mík;»ÙÔVÊ ¼ýmp‡[Üã&w¹Í}nt§[Ýëfw»ÝýnxÇ[Þó¦w½í}ïtçg Úwú½Ÿ|Cÿ¿Á >p„'¼Ÿ0x}Μ‡+'âW¸¾ù]ñƒcœš Ç-ãñÊ€<ä§ŽÈcò­ +*_ùÂmÂòªÀ<*2w ÍkNrˆ_Üß8ϹË×¢Ÿ÷'èû:Ñ7Tôû =éGgzÓ]þt¨G]êS§zÕ­~u¬g]ëR©r|°€t4P@æ[•90À&=Xæàu(à8a€ÄžÄÝ6!»Ù3óƒpˆ <$v Â1‡b€ÄCb XÀÜó€k¹½M P€ÌoE0 7<â4Ò;¢ h@M&_yü‰Þ59|äUßyÇÈ@ xÿ{ÀÞïÚŸ^)ºçýMv@H Àò•QDjàžmؽrQ€-=˜Bsˆí×@@Ö üÌ(B=¨AуéWß1ŠxH_ø xXCôp¯ H›ø¿6`p ö;»ŸXƒá›hH@À6(€»“ ú³?›@€˜ƒèþûÿ À,ÀhT@t¿­0hx€l\IÇøØå‹I› ÉÊG„ä»(H᫊§ä;`GxȨȭ¸GŸÄèðËHw|Å8„Á@G‘œJ©¨ÊÃÿÓJ®,Ÿä+È6ÀH~,K©èP€¤P„*”Ê¥ðKÀÌË9 »Cx;´ E€cC<€Ìp„¸K`€‡$€`ÉD.쿚pÌÌKÊ´LËÈ9\€p€ÆSÀ?RŠªœ.´‰Dò[>¬¸GÝS`Dÿ54¼ŸôŠq¬Ì—KË׀؊ª¼GE(€QÌÍ­HÀ,ÀäŒLžØá¬Š €¡+€Ö³Î; £î º5ˆ»m¤YÄ»p÷l €¨AæxN¢`¬Œ¼¤È>x”õ´Œþ¤€Où¤ÏÔ$=_PEÈË@€ílG›0€pO°É“dÊ®œJžŒË€ÆªÐI_Ü› €Pª„Â@„T u E€´t€€P …Q§P€·t€hpOøUÑžR÷|Ì¡$ÇÐh˜Rx»`›Ó­zlƒ´ Ç¥€@H Gp€ÐÍÊø[ ºÿ+ÍR:E¸E™ô:\N¢(¼ Räô‘H±´ &,¼ƒtS2-D9}:ŠÂs&ÌЧØSI¤ÒüÃÆ9Ô]ÜŠT<ÔŸ;T8ÊT*Õ Ý:R-US=UTMUU]UVmUW}UXUYUZ­U[½U\ÍU]ÝU^íU_ýU`í`€¢ & VdMÖZ¥ ´ ÐKeVi]Uf•Ég­‰€Çz|€ÖÜ7MØc¸Ý›;4­¶;½lGJÅ5É}«Ý£Â9h€¯óÒi½×heÖ²kÀHXH†´C€~Eø×€ dV`ÈìûWÿX…¬ÀÜL 4PÈ@|-Y“ý f n$X›ÊPNðLuØo€˜ƒŒuf ¼¨ÀpY`N`^`n`~`Ž` ž` ®` ¾` ~_¿Ú`î`þ`aa·‚€XÓ³Ʊ7Sᦶ/†ážá®á{yáº0Fa¶áî65þá&bîáöa!.â%>b#VbN bš±¢gC©!nb(§ú‘b-¾â)Þa&þb/Þ.Þ´,6cÿ$~â4Æâ$^c1ã.†c4Vãl)ãl¡âm³b9¾c0vb^±ãBÛã@öã7&ä8vá3æã1žc6¦ãFþãDäHæµ>žd=Fd7>dK¤JÎdFŽâM–¶@{µ3C6e£@¦äEVdAVåV¾ä‹IeXödV6äOÖdZÞYæäU–ä\ve[®åZÅãjóeG.äP6e«#æiæd.3U3f^!j®fk¾flÎfmÞfnîfoþfpgqgr.gs>gtNgu^gv^çªhgxŽgyžgz®g{¾g|Îgu~g}îgþg€hè€æg‚>h„Nh…^h†žgƒnhˆŽhÿ‰žhŠö燮hŒÎhÞhŽ®æ‹îhi‘i|þh’>i”Ni•æf“^i—~i˜Þè–Žiš®i›&虾iÞižŽçœîi j¡öæŸj£>ê .j¤^j¦Ži¥nj¨Žê‘~j©®j«®hª¾j­Þê„Îj®þj°îgªcæa›åcÆå³¾å&Á7¶nk·~k¸Žk¹žkº®k|ƒ¡,-¹NÊëž##¾¦¸Gúë«ìÌ ìÛkÄìľUÃ9Å~l¿^l¼ÎÕÆ>9ÉV ÊöŠÌN¹Ë¦U¥ëžÏnšÐ¦™Ñ¾˜Ò¾—ÓΖÔÎ`Önm×þÕ Ì–6»Ð³;š!;¹£;Û¾ÿÝÓ¼ÚŽílñíºî=!ÓˆümšÉ»ÜFî{©[¼E‡î=ñ=6D¿laÔØÂò;?3m8Jõt„í¶n^©XðÈñîî=¡@ \ï{YƨÀƒïl?ö?ûæÞµÅDÜïý°I€¾90Ãë~€òà ½4p^¹Ó¥¼È2<ÖòÞ;< €}dp^YÄ1\p 甾¥ð{C1¼ðϨ‘M øl¼y¼ÆñÈ@›¨q^i€A¡Ôñ&¹>êkWRé··ûq#ßi¤FkdršÙ,ò&ñÍ¿”¼mµ£q¢ä”(˜“ÿrØ^cÖ5(ó{ùʰÄñ'Í–9°@õó5ÏŸÊ:¿—çÇ<’íÁ Í‹‘GõM'å”þ+¼B7ÉCß“º.TNFñ¸ûMÑœôlÉÑ¥lIôÌóîôFß9=Q‘è¼Ó•ñ- ÐUç”A÷TWgGNùÏ+=ÅZožÜõl¡Í+õH_Ïp»üϽWçöý?¨eïé.Ä1-Ó‹á]*] 2•vÑÂ0m“mïž?­vnßçÆÇ¢zB=¶¦E†âx&šFFffs†É¦›CÂ)d›$Ö‹‹UX{Eå‰0†ª^-ZÄ"F;­ÿ¤’G±eÙP£™Mz¦®:òJY¥œ&‰)[ÁŽU¬cUê×r'U$\]1ujO»ý‰ßHõ–í aÙil†Øª˜Ðùz£¹¢k°šFxê»ðÆ+ï¼ôÖko½&áKe|(æËo¿Pª*ð½x¡:âÁú|bOo4ìðÃG,ñÄWlñÅc¬’Âwì1†ß–È =¶‰|•¾úéŠ%þ%«™*ÑL$:…Û$@]»(BžÆª’bµêô¹ FJ™º6ZÇî¦Ã†FrWO×ɘFü!Ô¨l Ǽ$ˆ½DóÁÇ7£¥ÝâÉ_í•VÐ%'mô^H™fCQÓÙ´±íz×SET#ÿ·Ð–M‚Ä6p7)eÓÖüŠ(ÑF…š=àZdž2£n¿]åpÏÍPÝtß-,„œKI‹b}hWD…·f2_‡Ï¬"nåB*W]ÐÞ yÛmåoÇ]®æ …¼çx3ž¶¶…ÖMÖªžÖò©§×D•̵I`ñÕ¤›ßÉ u'Û·O­»Õ¼í{Ñ.})ñ#çýbÊ"6´K×>ï}M²”—Š×ƒ}°ä`2ÈÉöƒ?mŒt·*_¤Îç¨ôuÎx샚ûÂó4ÓÝi~9cÏn§½{ØãîtB¨áD|¢«ÐQp)Ìu„¹h A»Ž-Ñ Ë⤠§yÏÚSëÿB2½ª&_!dF²Z1 ,ëžÜ\øB*^Î@ê»a E3Á®¬Œ{dËq¾(;Äi/"|°É–“ŒFQßÒà– ¸9)îEt¿³" [¨´®o‹~Ô¢^…@n‘Æd¿ù—$"œYÍ.!ïôtC­Rí¤g`&íˆ>*îñ22ìÎ9<zqFã #[Fh*, ð[‡ÙM©Bò­Õ¼åd´ä—vƒÂz+€,¥‡éÀ:š’”âqÈX™<á1³o1£e‡Ü3lKiÔ ßò¸ p%4æ²ÎÆÉz’˜X ¤2‘)NA:‡cÛá©O 1>&KH&!ÿIæÅPYYWÊ͉K6¿o¥˜2Y¸Â!:R„+¢Ý L5›ëk¬YüâÏ8ÆGÞ|Õ„3˜Èõ5òw1¬bHÿÈ@†P€ ‹¹ÌgNsˆmLã8ÿX“ãÝì ó›Ô^’rPÝÀ®‘>9i®"î‰â‘2‡ø‚@@õ¬»#€ôvuê%ºç¬žw¦F¹Kš6Ü…Ñ‘¼®— *yÑi_Vj˜B˜àg€ ®ÐI„zÔÂ.“™ ÃЯG{Í­»;ÿÝqF2±`fk­Úƒ—ÜÌI!sd #g™½¡:¢Žº°‰pdŸ«ëši(Ïe:ñ4Ó›®eäGøðïkRZ%5áyFh:ö, VàÎÉ/ÙVn¬_a Ñ uÎ}…½Œá꧇xê ÿzgk·ú>Úâ¨ÝáKru[(ñfÿÚæç$æ)uM›fg¼À÷#`á [OøÂ%чwä cÃÖ‘¬l¹2yõÕzªvxÖ&Û—86Ó]uDá×M/X A{ÚibTÜÔ‡PpŸ' dpY@Á¶|’ð|£ÖVf—xÈ$€­÷‚]cPIõ/i%3ÓÃHÁy"•0 @?qsw†QYÐÆumPM`zæl¢–w €pû—P,¶dÌF€òöl`‡C°„¢8…6Ã,ñ$dE" òD3IAœ ‹@„Їp£Öw&xE0{!fó÷|ù—ØI‡ªmÿÈ‚N£7|ác·CU2-'TÛ‚TüZü C±6 ¡ ` n jìV|'ÈwW€cÐð™1"P¢V"€‚,Õ-öŽÈN.(vo–H„TAA{J”iA—9È'p±-ý&VqPƒ‚Rkp ª¸|Áöp’°w"pl g•1 _ SGŠxeÐFˆRx.ö…HŒ‘ˆÏDR¡Á:Æ' HKágeô£UÂ…;ÐtV`ÞôÏga' YŽ]P"p…ðøvضˆ‹W ‹¼(LQ{(x+¨€4Œ^(F›õO–&ÿIÊ1@öúôÙ{}RÚ31(Xu‡`e€ ñ{Ç}x_@uà"€lyxìfˆ‡˜ˆæ¤Š]P­hjÑç[ˆ}a7“jYSôT½…`Þ&'¤†©{©CsBýÔKjãƒTZ°”pR@‚ª8je'p•"`S·‘Ï÷€Ð‡ …Y@…VØIߨ{G‹gù‹i©xˆ“ŸCd—#t¾±šH~Cöokw~Bã7€Ó—l0U0ì†ugp¦7މd@uÌ·9ºx‹)IfB’W`‘’``Y/ɖ‰Äò>a—i3`°ÿæ;*j8+Q†‚‚R‹Ò(=A º‰U°¿g@u¤Ö˜ À|ó·œÍY(ø ¸uõ¤œ•ˆ}ØùnW…ÛišÅ³x†ÁžµÓw˜á"uÁEgÓUqV–p {QWyFP%H••Y¢˜©™ðçOx(`qð} ‰)jfšZoÁØ‚Üyš/öìIžwdp 1B”TÿX2ÉreÕ U ‘=Ñ™q].ç' † ‡¨ø¢¿éyÊ·p€€Fð` auœLh øwW8¤ Ê…ky}¤ €^Ä_NjZV"Ñ(!Èÿó%ËZÀœ\ÊÏwT'àV‡‡e ’à }žçy{qàtú2ò(&¸)éu÷¨¬w¤ºs¥q¡Á÷9Ãk&39Ú j0˜Üè‡9Ð8ð÷7 '%Á«{1£U¡†|~§r ªªOF3£M°™~jaEJJ2)¨E!çÉAü!d§!|ó*EЦhª.ø = ¦áXW‰‹&z¢˜êr»Øì×_(@ÛÊ­tÚD”A"x„ç(•G`ˆ¢I¤ÊTKJ¨ƒZ®Ý©L 1~*3xné-a6‡uøà~@-zð|ìÿþÚ¢ G{ð³Ð|æÆ’W@=šªÜÚ­kQù„K’·Hj(™±Ú–åä9犫´[¶¡ô€q4nZu2…Ô--°:r€™gЬÏ­‘‘‡"¦YP·€‚‚Èv´Ië°Þj[Y‚ ·”ŽêHíHµäº±Š$¶M“µ»!à ]И@_ÐyKœšá"§°,0§0wpF@£ÂÉÂm¬ˆ”»z¾YùˆäÌ>¹œ¼<3?ÍÈ\[+ˆJ Ö+5ÛÃZ ~Q©•a¾ø›¢T e Ð_° G+5Poàɰž§ÆãxÍêÆ°eW°,˟Ѻ9÷Ò0s?õS1ÿg€ðrÓ4mq¢F ÑAðI@G@uG`ÔðQà³GðMP\œS20ýÍ'Ü À ÓpO rI 5'1i]ÔG0A}s3×5ýÒZëÇ”›_¼\pU[ÀL;T‘”Ô'ÆŒÌO»ÂV•!uÖÌœ°Yà¿Aq"3@PPÎÕzƒ ”­’ûÁ% ÏoÙÒô<ϯá=|êÚoøiêË¡ÈijûÃVd@KSGu ý©˜ü³'À¾. ‡ ‚A@2 6ÿÙM ‚†€uÁÖõ™9™q¦\ÿÙ“È9ž6R1¸ÄŒÚ«íhK:qä_†jC ÑÄÆËÕ¾¤V¢xl[pzXÜ\l•°‘|‘‡(€pMx Ó}¢;+,Ü Ðʾ⺦wÇß9OAø—$kÄ1©ÚôÃ>ÜÃB(¸ G¸U)eð¡ý¢Áö³ü³p. îè|0*'P{p(™]ç»Øé˜§ö¨Ï®bP>£vé±×Ÿ‹Þé}×öŒ×!«[»  éz$n>;ŽÇÉÅ ˆŽ0ŒnÑñ( 6ë™qÌ‘€œ©AjhãÚf ´¼þ´7™K?àÆÇ Ρ$^åRþtH•ž¹å“ÿaæ|z_îpW°0lÎ,à‰½³oð|j.ªmÎ!°Ÿ‰=áˆÍ¸vÞ6xÎÏzŽÏ:SCõ<âƒÎê“[â~â ŽJØâ“ùè Ž ÑeP$`ã– £I £SäëüÂÄÝØ¡^çB Ø;l¡?# yAO.âyýêÏ븂n5‰àŠ ÝQÝ')°ØÍwDHÅ[üß­ŽÃ&±]PV·¿ÉœlŒ‚€P_`zÀ}•ðŽŸ:’<€+dÈ^Ä©®êßΛíºì{pl€S×Ê~7±o+`î.ܽ^•ë~Ü'i’"­¾4îGÀ„öîœ÷'áYéwWÿiÍ0çtþ¿ßÃO$\Leh® ?Ø×Ží·êTãˉ œ§±.l,žˆCNÜYùpÍÀ_0¸…Kë…ËœA­Vẻ٘%@]ðïF®“£Ë§ó ±I£ôPè­>ôj ‡ #À Q MXÎå‡ç’ ç%À8PɆŽ @¥zp€ãkÊÎ,´…†p•óW·7^E™¡èß÷»óÏ®÷ ÖñSñxÿ8{/~߀ñ1ø‰®p>˜z‰¿ø?ø/“ÏkŽxŸ¶[ø}•¦ç¯¡ó¡è˜núäƒú¯ú^ôÿÏý GŸô" ì8_뉨ØÉuUŸWŸõ²žâ‹­__ìVx>öªÜ˜Çö°öµW¾*s%Ë¡M.dØ©OCˆJ’´i“%I–>”ØÑãGCŽ„È‘$I“'C¦T ’eËŽ/Z*t‚  ÎPäÙS +W24$‰PNIwJ:ÁÁ)‡ z¢j‰.GñCõĉ/eÈ$M*b« Ôz(ÓÌ d|Î5”…ê@!^´”PæÈM>K6䛿áˆ3T¼Ø¡ã˜#Küq%Gn¶š;·"eñ<ôåÊæž_J”øÒósØCŸ½”°ÿ:4/Å3c²” šåÌ£)êÂû¶¤,I?€ÈÒ¹ç¡2_È¢hx!Fž–‡´Ô=1Cì5R†¹}±ùÃèË“¯Ì^¡úNw~3ß¾ý®“.éÝ21mŒûÜ2’ ¹ ìɺøª“¾–L’Ï¢êÜ;‰B•8DIÃ÷@ DøäsP’úN<1(ŠÞ0Mžˆ'L®­7Êá 3¼N¯=üP!Œ l<?r¤%]±I'I$ÉDSìñ¾ F{£+)’±5Šj,ðFÇâ±G‹T(0(•üÑÈŒ’ŒRJ:5lÓ£;%*±G+¯œ/?@ö;ˆ4ðÄÿ±H(CA¯„ð “´PB圬N÷òüîINãóÄÜÆXj¾º‚²Í§©‚Ê¢¨³ø@­šst¦ž´û¨;\û’ÈZ-u³S; SË>-°+ª´º/Ž Î32`ëqŒÊRͽºóË#žúÀ£ñ˜$L[_%–xýôIÞ,iÂÞYñì£îú0øÂ•Ê]OXöÒ‰at§4?¼¤ºâZ|õý³â7€ÂØA7ˆ¢NÂÃIîPRˆ)søav‹U1ß¹ººÍã*5vÎfqÆ6å‘%)™§“VyC–Ïu9é˜=r÷>š÷·Þÿ+î/jùõàŸ/…ˆ`í®è£VZ²—J[í–%z:ãcïúøjw6õb?Cž©”êöÛp¯óNݲÍmzé³Ñn;¢·év0T«á®{®ÜŽˆd·)ƒd‰r%wMÁ`.ÜðLwlíÏ|æÉ%oÝ'¬ïÓ[!ñøŽS%ñ.ºíÑçT2ÔQ,ñ½&~öãçŠÝ¾Ù|Œs‰‘„>uà ¶þzì³×~{î»÷þ{ðÃ|òË7ÿ|ÛßP}öÛwÿ}øã—~úë¯?#í¿µýÇïßÛÿ¡o{¥3Ýy h@âÆxÉk{²¼ù̮ձ]ßB"!‚‰®wzbÿ¼.¤qΠÎJ¨¯>§ €D&Š'‰Í ­%î"Ük±"FxÁ“ëÈ“^)ˆþ±‹¡HDD;< ®DfÃ'zPŠ ë =åâ(‹Zœ–@.ñ-€Q´"ɈÃ"0‡ééቆ¸Àä ‘E Iψ83ÞSDcuØÆœmñn¼R–¢;êQqyT$׸°GVïÚ"8Äü\ac#OÇHOª‘{å"C2BúTrTQ©Œ˜ÈPþ”Œ©bËèG6^‘‚äå• ÃHhÂk¥4ãCI\"Sf»Ìâ*)©/ ò.’e3æ4‘ÿvLIê’•—ìeÞHwËYV3™Ù´æ®ÚÇ8v3`Ã'(ÅIÌObseÚ|f3ÕÙ5Êóhïl')ûiÊsb‘›ö„æ7méÎZúS¡ uä)Ñy³™ñÌg³ÁùÏ€Ösoó,'¯¹Íl¦ò¢½çGCú¢h´”Ç,`;:ÀŒnô¤ý\ècºÒšÞt¤CMhDSzЦ>5«Á,iXZÔ¾Jt¦QM_W_zÖ ^ñ­?ÍëW·:׊ît±eÍéX³ö×¥6ö±‡mk_?¶ÙÂ&¬ª­ëhß¶×Ȧ¶³ŸÝç9_›ØÓö¶¿½jr—û³Ë>±¥Çíídw[ÞæNwŠÙ-íxÓÞûæ·¾çíoãÞ[Ûÿê&ø»ÿ]phŸÝÕ8qw-î„×ÛàGxÄn\KÜâý®ø¨ÎlÓÚÚÏwÇ!îñ·›Ô*çrÃi‰q’sÛܦøÌžj—KSÐ —ùÄkîs›‡"* zÑ~t¤']éKgzÓþt¨G]êS§zÕ­~u¬g]ë[çzןî$)ì »†Ênv=j_{ÚÝþöY*„íä™»dê™»ãî`ûÞÛîwPæÝ1‚G ácøÃž2ˆ‡ ãUâø“@>òq_ˆäIbù`$šß¼âíÞw²{þó”ïÄ’dz¡^Cª_½ˆXÏž×ÃÞõ³§=ém{Üç^÷»çÿ}ï}ÿ{à$,€L âwb h–O‚(d `НØ d P@òSì×@!Ëoþbl0ƒ÷0`èï„ Àâ.kr@à_ú,@û0yʪŸPÌ;?"a€˜¿ö{¿ø; I@ÀMh€h€„xƒüÛ¿ 1@H÷»¿@˜HX닃ã» \@ˆA\XN „ K¨8?ˆƒ„ŒM(€˜ ˜ Ç„ dè`€7€ÁŰ˜K˜ÜA|@ÀH€>xƒt€h‰8€P2Œÿ@€M€˜B狈7hˆ?€8è„6Œƒ𾑰-D@h<(€C C3DC5L€8(Ä7ŒC*T p€80€PDFìÃ?|¼ˆ-|Cx`N,C‰PPÔÂ÷€èKX T „ `"\èë„°>ÄH„>ˆƒLY¤Å°ˆèƒ\ÜÅ,4€ùÃ"¼Åx€ø€9LA°EØCI€@…Hñ;‰x€!?<€=¡™P A´Æ íØœmìÆol´Å;X€sLÇu$ Ð@æãÆ7,Çz¼Ç“hÿôÛ„8D…x€øÇ7´2‹ŒJ4ˆ>㓌€8G…àÇï3K Â@@XH˜h(€Hì„“\ €(C–|Á€”ˆ™ì°Åp€iì Fv´E"I€F…hl zŒPÇeì]„Ê7€„K˜Ø0€…hBðÛK¶ìÁ$Ìp€0É`D IH?ØÃNhHÄØŒƒhLÊNÇÅh€èÆøAŸŒL˜°P¼L…ÐÌÃHJ·¿XK ‰Ú?`€M¨ËÿØK•èJÒì˜#üKª¬Èk¬ÄpJÄÌMØÍ8F2NáŒ\Ë8ðK±\Α˜P°„]ÄÍŽ OóüNIxnD K€²›Æ>€ÅØìK`€º$(ùGaÄ ÏÅÀNýäOÄ0Ël\p€ù{Ã‘ŠˆÝdEb´tTÂ$‰®AyŒÆö+Í–HÊý”»ç¬P¸PˆØÍ®´„HHU‰0O5tÑû|@Q’P½ÀíF RÔ{ì ÊÈÈï ˜Ò8¨PM”  H ËÃøÎx€´Ê€RÄÓÿ€*½Ò,}P$É3µ„ïTÒ©TH€)MÎlLÙÎÍë›$ Ð$Iḛ̀S<%‰ÝLpKøSTî€çt€¨Ó;í„B=TP€êt€ˆ˜R°O}T† Õ)­ÏÔTJLjƒ¸Õ°>`Î먭ŒƒçxÎ%QAN…EökËhEÖu¬Ö¸Ö`¿ME?uoÅG\õBŸ´Öq I•`zíƒz5=u&~ÅUµUá;X„MX…]X†mX‡}XˆX‰XÿŠ­X‹½XŒÍXÝXŽíXýX Y‘Y±àˆ˜E’]Y–ÅØÐC…PðlYš­Y‡}Y̔لP«ÜʘPÖÐ?¹ Aí³`ê“!ž½Ê{5Ní„;A]ă0>aµY®­Ù—e¾ ¿t€¸”Kn€H€[°²=€Ð×¹üA²5³…K0ÏÍC ¨¸ €;ìZÅ]\ˆxÙÊ´åLÔ,€…JpZ<ð[xYô[=€ÉõFX´ÃÖ,\¹Œ„ PÆÝÙÅÙ˜}GÙ M¿Š”ÿ´E\^­LÜ—…Ë`ÔY0€H¥BÂ^PÇÂ¥]ëíZÛÕ]ÎlHÎ|ÆÞ@Àß%Ìù|ÑíŃà^¡ìç€CœÞNÛ‹xÃ…ÙëÝß–Í^ÍCÈuÁï…Êé%\˜|m¿’,W >HBÚ¬uî`îáÆM\b!†ŒH€­b$Nb%^b&nb'~b(Žb)žb*®b+¾b,Îb-Þb.îb/þb0c1c2.c3>cÿ4Nc5^c6nc7~c8Žc9žc:®c;¾c<Îc=Þc>îã*>/@dAdB.dC>dD¾. °·€[·FÞ'{dH.—E~2esdLfäL¶dIN’J·MåIeQædRÖO¹KåSƹN.eS–“T¶á9¹›+¹”;¸\þ¹Ã˜eWnå‘Ãål39afðå`î9cº]&fe^f‰@æœÛ85ƒfžƒ9]næcÖdVæfo†ep¦åHöiÆæl¦¹+ft^9^†‰r®æuÖff¶ækNguV‰w¶çg¾å}:îç‰|v7zŽ9svf€Nh…‰fg„nçx.hÿƒÖçsn‰†–gj¦hˆèŠæè>‰‹–h;è‡.i“žg‘VˆŽè”8‚æç޾gþˆ•†é^蛎i™Æé“®±UþæpþånŽe FØZžè—¶é ›æzÖèØ¨Žj©žjª®j«¾j¬Îj­Þj®îj¯þj°k±k².k³>k´žjKIk¶nk·~k¸Žk¹žkº®k©^k»Îk½Þk¾îk¿þë²ÆkÀlÂ.lÃ>lÄÎjÁNlÆnlÇ~lÈëÅŽlÊ®l˾ìÁžlÌÞlÎîlÏkÍþlÑmÒöìÐ.mÔNmÕ>ìÓ^m×~mØ–ëÖŽmÚ®mÛþêÙ¾mÝÞmÿÞÎmÞþmàvmßnâ.nÓ–ãNnåíá^nç~îÂnnèžnêÎké®nìÎî¶nØ£ixVj”fiðïÇó:ó>oôNoõ^oöno÷~ï®;š^-¼Ñ™ïÄ+ûn¼úîüž¥þ~¼ýð²ùïÉÃoþ†X¿<ð—ïW™7£ϼW˜ ÿˆ Çð /— ïØS˜÷•ñÑqK1ñÓóp?^qoqšÄ$QÙ¼?9QAëëõ+Wq?„?æ;bDQ $ÚïÈú¼MYM’°?˜¾ÿKèÈŽìƒìð>XØÊt!G?'L’éÏT”VÅÿ†ìÂ/Ü¡#¤B+ÔAWÕðËI”C9)€8ÔŸÌ7‘<ß0B!ÌF aŽ|GO„q÷°FSLÄ1Ó*ƒÃ•q™OôÆ¿È0E…àÕÓ;„i4BKY¾g´QuLK8oÑSÓËÄ:ןø Æaô ¾®´G9ëë¾LòŽx[ÔÊŸduð\K©‘ÅÜͦ´(Â,J—?ŒÉß Æ»´v@pÚûìõ@€Íš´(ðÌ€x[e'l´k|LK Köóò´gOrñ÷×ÄLLMôðõuÐöìtIоM ü˜QA‘ì„8tß`1íkwñdŒd>ÐÄ}§ œ€.UP9 K EÒ$QR…ÀF…Ð$Yd÷ÓÅM,ßšìPPVò¨ýC€78Ó;z91ÑLÐZ–ù–ôÑ7§ ¨Ì–·Pò°Hˆ°4Eö„hU9USÝ9­D׃CÈH+ÅR€"´Ô‚g+Óg\?üÄ$!Ë·á.ýRKiF5<€0Ô$áÌà´s±Ïzà×z÷Ø„² X9Ø[-™–nÌtV…ÙÊnu€£vác¿¤õ•”ýÕ`µherµI@Öä£|Ø{N¡ !ù,—šü‡ """***666;;;DDDJJJTTTZZZeeekkkrrr{{{z—º{™»ÂmlÁssßgfßhfÞlkÓtsÜttÙxwÛ|{ãWUäWXäXVã[Zã`_ãdbähfällèhgèkjèopåpoättäxwä||érq䀂‚‚ˆˆˆ‘‘‘œœœ‚ž½‘Ф˜›³… ¿¹…„£££ªªª³³³»»»¦Á”ªÄœ©Àž²È¥·ËªºÌ°¾Ï±¿Ð¶ÃÑÀώ׆…ÕŽŽÙƒƒØŠŠÔ““Ó˜—Ñœ›ßžžÎ«¬Ì±±Ê¼½Ð¤£ÝªªÛ¾¿ä㈇䋊셅튊åä’’å—˜åœí‘‘埠壣䩩岲帷弼ò­­ó°¯ô³³ò»ºåÀ¿ñÀ¿ÆÆÆÈÁÁËËËÁÊÖÅÎØËÒÛÝÌÌÔÔÔÖÙÞÜÜÜÛÝáÞàâåÃÃåÇÈåÉÉèÍÍåÏÐåÓÓåרåÜÜéÜÜôÃÂôÌËøÐÏñÕÕòÙÚøÑÑùÙÚåßàäääëëëïïðòâãòêêýîîòòòþþþÿ ¸¨ Áƒ JȰ¡Cƒ J|q"Â32Š£±£ÇI²¤É‘hNª\É’dÊ–0[¾ŒirHoê¼)’¦KŸ@KÎ Js(P›7sî\ª±'P£DaBºrjL¤ •2ÝÊÈ©O«TO‚ û3*ÖZ¹.õZ”ḻná®<ë1­Zlߺ•º—¥\•t;Ú½ 2/ß¾U«ü{2°ÆÁ„=–©xqe“Œkê„gœ8† ¡Mº´éÓ¨S«^ͺµk×… }žM»¶íÛ¸qcœì÷2fße‰:Îȹón¢™£&º|äpŒÅD<¸ïæ 7KçI½ºhïØŸÿŒ.wbðèÍjßþѼåôÀïgßѽXïß«ËOJ_rwýð%NýÕ÷_|5_† dßo V¶_V Tˆƒ^!MnT!#NÇ~ص¥6(âS$nxÕ‚>(T‹žHᇎèb_¢…cŽ,î¸Wuý¸âW4"h£FÊh†5 c…N¢”$”R¢øc•ùE‰¥€SÈe‰&*™å[fx™‡Édš:z¹&U’gܘWιd‘MÒ”GTdñDžÒföå!Å¢Rdð…qª%Žöi!Å{Ø¡yÈYèž‚ÙL{,JRÐá©bD†Ú'LTHÿ±ÇHFHaǪˆµú؇³…ÖZAD€ðÄkÈ&«ì²¥Å–Û³ÐF«•}{h!ئêHÆÎu(}æB a¤A‡X¢(£—FŠ+Lu~â¨1­ÛÅw‹V{i¦±v›”ºk…÷–+Å¢)JE©RÔŶ‡ ظ%ìSì"1…߯:k!XØ:R]tñ-’ó¶ToŠ@’ZrRì[ˆRPá…¥21£6ëÕ2K/ÃiÒT`)·f|Á„À…ø»(·†‘3tĺr›_*8釀há#í+£íþ,…#“dtŒ]¡"‚œÿÁ¨ª_°kÇ%—d!7 á§@e¦PO¾/ØÁœ§KŠÐºbR#Y©F’´aŽº”ö T<0olv]'¯f²$q8kZjJz–$±XØÙO‡T¥¶ä°dÓ[ŒFÒÌÀ:€ æp2,¯N Ó/œÿ-¶ŤI"ûS0#o8‰"·(]æT%ïC\W¾¿‰–J#‘Cj:ƒ¿’¤­D”v-0·`+y[Ê8ø¶hpA p\†6Ð 'Áq%yµ{^p%¬#ÑTé”llÂöjña«g d×¢lkÓ àô$¼•g ˜i4¨!(SÙHì NíÆw¾'æVO²`±Å õ1„!lb'Âðóo0ù“N 0¯ ‰'°CjÚàÇBö¬ŒpÁ þÄá qè €V§Îqò…I+_©Åj«±)@qFBCÙü蚀ЯQO‚*-Øá 5è«SXA . ÖÐÃA{yËG–šc‹Ê9l§³³82lȽðÅÖX¹Õ|"øB&.±òIÁ¦ÚµéR_¸®ñT ïèûªD¶—Bü*9žÈL½ï±aDhJ.Üòi0uüšµ©j:::8g¨›¯©Dó;b.•1‰. ¹EL-"¹úH@4øÉ$–ƒt€}Jv_’~ÑÞVÿ¦Ð|ö‘ôK4³ƒÿK¹¸ÔB„à‰ÞÁ+IO »$_ðZ~̸jxߥÎiŒÉ¿ÕyàÓ_ð&`y¸DGJ`Gé”G,¡X¡·p´Ã~B ²zŒ ƒÐ)°tZ/R9 Sî¢tHƒi8÷U5§:˜¢QXpÚB3nGt$A%£3sèã€w4Z¼¦OL±´q/BU0b€>êwr÷á$ SuWs6g>8§sø8Åue”—H5owC'C…êã.èg@|ÅÇÍÕIÏ„Cˆ`ºã+p-e¨mµxvz §>ZÀqæ mõV÷÷V53 (h ÿÐrŠe< t^€:8z1‘_Cr@¸§Ga„ @‹@S ¶Ï{{|…0|'À6Óc®: `$±(iÐx­V3h–S«z€>#ãU—·††v\–¢eˆ©g!÷"ФhŠTæ6®7}²r~#£Kaðб8‹©h‹"‹R0ã:5³DµŠ ‡>ƒPÇ8HÉØxÌ(R[ñ~Ð8s(Ýs‡È\†ÇpÅ€ Çp8ˆ…Øqˆw@æÄˆx¤5{p~e ¤s–è˜È8t´‰ýõøŒa„d„_U%!>]‡t3G…+“ð’ðXFkÅuX€Îÿ3G[Ør0”‚dcH”ƒÄ‡3*ñtΕb+îgxu/smóuS9C'ptæ.µ/—.Ø(_„2T …àtåÓ6yЂ_$[–V¤L^°w!uÎbV×j²ùu€k5†§ˆåg0d^ h”ôÂh&§C¢‚'—±{hpKáˆ[³¶²õ(hð‹vH!¾Ö”q¢߇ágtF}°rŠhC™ÉTšÓ1šÈ×—nñ—W6õ—,q˜_ ˜K"¢ù*Af’%”0X`ðBHçTðèóÝ—7wYT÷Vguâ˜ÉÿÙäS˜QL_ÈF_5´KæÙJùwyLB’;!™-шžG9ˆaOøDœwµk*6=žGRhÈå{š›Û‚Æ ¤Ë'u quÎXšø¥ ×ãç ç2ã2¡$Q¡Aˆ›%¡ŸÌ !õT_ÿ©Ô$¨oqP %Š¡Êd Ê dùžš²a¡Qgõi¡{é6ºË9žõÔ®F=Ñ^ÞùKy Fª¤zR9 ?jŸž¨¤º¡WŠ7â ²CƒwŸ )Ã&op§rš,ÎrþvdwúowúþÆz,34‡$Dºn ¦:ñ‘†ŠŸXú)ÂÿÑwRPz›%Q¥º¨¬ qÎÑ?Zu*Æ—Gz©€º[ ¡zlº?FS©dš+DñHA›Ç‡W¡Êª£ Y3 £?˜H©š£´j©-ñxªº*«Vʨ«ú«† ©¹:¬£5«ã4^ã6~ã8žã:¾ã<Þã>þã@äB>äD^äF~äHžäJ¾äLÞäNþäPåR>åT^åVn¸U›åZ¾å\Þå^.-tÛ½³‹ÛÙ;¿–Kæz뺇‹æi~æÎ»æož¼lž¾¿«¿üçË{çz¾çÀ+ç~þç«ËçjŽçž»s>°©Ý ç€>æ„Þ炞è·Žè;éøë膾茞ç™þèÎé›Þéž^çÖꢎé¦>èš.¹‘þ飿ñ{ê©Îê«îæµÎ8—뺾ë¼Þë¾þëÀìÂ>ìÄ^ìºNÆžìʾìÌÞìÎ~ìÏíÒ>íÔnìÈ^íØžíÚí×¾íÞþíàÞëÝîä^îÚ>îæžîêÞìè¾îîþîÁÞîð>ïôÞ`ò^ïøîî÷žïü^îûÞïïíÿð_í_ðÿìŸð ¯ì ßð?ìñïë_ñŸëd!ù,•nŒ†777z—º{™»ÂmlÁssßgfßhfÞlkÓtsÜttÙxwÛ|{ãWUäWXäXVã[Zã`_ãdbähfämlåpoässäxwä||䀓““™™™‚ž½‘Ф˜›³… ¿¹…„¤¤¤«««²²²»»»¦Á”ªÄœ©Àž²È¥·ËªºÌ°¾Ï±¿Ð¶ÃÑÀώׇ†ÕŽŽÙƒƒØŠŠÔ““Ó˜—Ñœ›ßžžÎ«¬Ì±±Ê¼½Ð¤£ÝªªÛ¾¿ä䈇䋊åä’’å—˜ååŸ å££ä©©å²²å¸·å¼¼í»»ò®®ñ±°ó¸·ð»»åÀ¿ñÀ¿ÆÆÆÈÁÁÌÌÌÁÊÖÅÎØËÒÛÞÃÃÝÌÌÒÒÒÖÙÞÜÜÜÛÝáÞàâåÃÃåÇÈåÉÉéÉÊåÏÐåÓÓåרåÜÜôÃÂõËËøÐÏò××òÝÝúÝÝåßàäääìììïïðòããûæçüìíòòòýööþþþÿ€w‚ƒ„…†p†‰Š‹ƒˆŒŒŽ‹u•–—˜—o™œž–›Ÿ¢Ÿ¡£–…uoª«¬­¬S®±²³«°´·´¶¸«u„©»­ºÀÃoÂĸƸ½ƒ¿ÇÉǹÐÀÏ´Ë‚ÍÄÔÒ®ÚÛµÇÖwØÃÝÞªåÞè­áãÓæ·êÒñ¼¾òïÑ÷±óªìöùúÿ¸«mŸ³€Á ‚SlŠÃ‡#JœH±¢Å‹3b|§Kqþ~yNáµ$ ’3 ² É‘)Y¶Û¥råKƒý\¾,¶'Áƒ=ƒË ô¦ÐaD³íäitèO¥GEúd†RjÔ]Im6锪έV»žüʵ,°¬î®œ:¶¨Y„lÿ[º ûVÙS­uÿʼnliMš2«ÂU{ -`Âùö ^‹x–á¾ß)&K·2Ö»iÁ+W™#Aˆðð9ÖcWe~¨þ± Iétwù‘äŒ?ÊhfÌ™o«3ªWÕøf·Þظ‚ü8£jÆ1Æ›d¨ÑÆ‚1DÀC£÷ïàÃ;äè±3­3E(HX¸ªÏ¡—H~½ó¬20,¡æÇ7©­F›9A†”}²ôwOª¡G›mÊé¶Mð çÙB“ZÀý°ÊîMH+§ÅB„5ñƒ|Ê1÷ÆÏ©²ÄGÈ—™evyÌ0.ðÂo ñCHÌÆá ®¤ÿ8†àI1DmïE‘D¾á jA@·Ä`€¡œFç˜/g$Qd¨r†r«ý—ä3¸¸ŠJ€á"ˆ4ÒøãayUCˆpªV\þ‰Á£?qÄ qËX š,‰O gA,(‡³A÷FäÖ\Œ³!E¡€j™ÄSÚ¹˜ ƒ8!¨`” ¢ª(Aœ:Ä™æšm"Yé¥™Ö cœš„†\ £ýý8çE¬èö¦€ÅñÙçŸ":D‹º&¢Xh@An˜‰èjI€Á¹  ^² ƨg|D˜cZª*ýIzïÿ‚ A¨ [Ü{K,!á+€Äz®2ñ˜Vª©–o|3Là ï®Þ?X dz,±kKС‹+·lÁ’Bf0C‚xTŪù"βX“†¯`àõ‘±”q.4tl’ä.Ì @ÝSFÈYB3c d^6ˆË©28+ b° Ñž›j"1rˆ *¨JÜÀåv— R’>¾Ì« ¤+Œè (tp‚ 2¹XpÃl¯â0Ä+¦–áZX¾{ÝStÐÿõ9D,º „®Æ€´/ h†çZªk+e¨¾]µoœ8D3ðÞ÷ì&>Z¡HTj•¸jÀ§¾1ãYHø€Zà,t`\€Ü©èû%èh€!à!-Á( xîv7@©}p5`‹¥,µLUÏ4?ùÂ:°ŠÀ {^ô¦w3V¼‰@%K SX! yçÂß(' b ^«^UÌÊmyý   hS]¦¦p’‚d!@« qq¬èB§ÈBÌrB‘„TBN«†ü“Ùð+8:ð YoØA†æ5 éÿgu¼c+ô¸ÂðŽ[p…0¥ÕÒîªY()<Å ’lиŠu%!èVÔc¼Õ Q‰L|)/×SŠ` A R‰¿ƒ!Ág¯lùÌ'ô%A j°Ã5àø†+¸À dlE¸Ös¤ƒ1êŸaHè R‚O¼ÁªÐ…ÕHb€^0±I àѪdÐÐô9îc÷9, !$nçgCB(O<æ1ŠwØè€ta ]8B”ô†€¾ªRÈ&Ꮊ[€°=?€C‰ç͵áb8ECB(! d(šH²Xl¤ H°|[ÿXBæ6‘Y“ L’—'<›ƒ„°8ýwžæ‚@²Œ„ `  øËº$ûÒ×EeØïzBÇ”[@POÒÒ³øª$è@»"×DLF>“­’¬°l•m\å¦+6ÝWun2²£ÅÀð*É48!LÕÉæ9$W½28ÅíÌ« 7 LªÛ[ÁhžVˆ™be†œYÑ 4?gɨÍPWüÜÒMDbÐà©è¬Š í¹˜cAÞrQàJHVE–ÜXAÀ®IHB¤Œº´Ý`m×ëê, ëß龂%k(00aWx¸g8€$á(ÁUž(æ/¬jÿsÀ!XÄ!š±ËVABú="Àcu,rs€‚¶“Èc!ðy0€sÌßþ– ÙZ‰S(¡Y’öÒdÔîtè\K…€ž÷LK  MˆÀ2 súŠGþ—ý›®"8€©p@|IäOgñGºˆõ˜ØM_&k`@¶ýe\¤÷›áÔ™¯ÎП¸†™\f>Ãßg 8HGp@Fq~* T`ª¡B’ {„¡–Pç0ù\„Ä)WxÖ…dÃN·e´šgúæ’ôr,í"Õ-Áç@úŸ‹N¤ÿ@’VÐð¨óéžKBô³:Ác1h9l=á W­N›ÿh‘ÖÒEÏÅi”ñ_1XE.ïBÞ¶1ÁÒ%)ϧò»ßzRÞ\¯8Ã=î¯Ï"\!†°~Ûm# 8àõÀã¯ëm!Ô€Ãsò}O¦ì6‰ágÚÞ› ÷X\X5D®ƒ€!„Á3÷Å눟¯2 Xà©æ¾±}‰ðlÖ\mFA˜·ó„@.;•ÁÙWÛ$â”èãØYGP Hz_Cއz'«n°êâç¬Ïµ’p6§³vo0h·°I®1NÇg¾±)ÿÐ ÅiwBt¨X± €Åp2è %2 ÒMUÖ\BF’ ù—üÇjç€a44Rn­p|>Baÿ A猖#a„ ÄRç¡&ø6t?“e‰„.è\ASyoó‚æ°MSè„‚.7g7”òçS`;-˜…çµ…L€ï AaHidZx "w…xV(ƒ8B( ãÒ…^ø…ÞLJõ‡7B þd‡‹…Ÿcˆw„ƒ¸œ’5nX†#B@HÂu‰˜˜‰àAA†‡øˆÙÒX3f‰p€ž(“8ʪð„sèˆMR q½Š}аA ¶(ˆh鼯 ½Èˆ¿x¥hµx‹£ŠÁH"®ø°ø†Ç¸‹rŠÑ(‰ÓÈ7c¸ŒÔ8‹ÿ‡‹Ÿ—ÜHÕ"‘ø‰ÞHŠCŒThŒÍH¾¸ŽÒ!Žî¨ŽPxŽÌè€ã˜¬è$ïX²øX¨ûéxæ숔Œö؆ý‹ ‰Ãcª(ù ˆô‘ )‘¹‘)’¹‘äøÒØŽ ‰*‰,©‘çc‰šX“6y“œH‘¹ˆ’&é’¹’<Ù’‹¨“á“yÈ? “A)“%)”÷’>y ¦€ ¥0•V™ Wy•Ui “ ’Е`y_–^I–f™q–“–jÉli–!ù,–m‰†777z—º{™»ÁmlÄqqÁyzßgfßhfÞlkÜttÚxwÚ|{ãWUäWXäXVã[Zã`_ãdbähfämlèlkåpoässäxwä||ë}}䀒’’™™™‚ž½‘Ф˜›³… ¿£££«««´´´½½½¦Á”ªÄœ©Àž²È¥·ËªºÌ°¾Ï±¿Ð¶ÃÑׇ†ÕŽŽØ‚‚Ú‰‰Ô““Ó˜—ÑœœÜ‘ÜÁ­®Î«¬Ã½½Ì°°Ê¼½Ð¤£Ý¤¤Þªªä䈇䋊퉉åä’’å—˜å埠壣䪪岲帷弼ô³²ñ¾¾åÀ¿ñÀ¿ÆÆÆÈÁÁÌÌÌÁÊÖÅÎØËÒÛÓÓÓÖÙÞÝÕÕÜÜÜÛÝáÞàâåÃÃåÇÈåÉÉéÉÉåÏÐåÓÓåרåÜÜôÄÃóÎÎñÑÑòÜÜùÙÚåßàäääíííïïðòââòïïûççüììñññûóôþþþÿ€wwu„…†‡‡nˆ‹Œ…ŠŽ‘Ž’„‚‚unš›œTž¡¢£› ¤§¤¦¨šu—™«žª°³n²´¨¶§­˜·¥½³¹¿¡Á£»ƒÂÄŸʧɡƯ½Î̵ԣÓÐÈÖ×ÜôڿØÊãâà®ÛÞ±ê˳áÒìíñÕî‚oµTùúûüýþÿ Hp ›7]Ž™›§©¼z¼2tx‹â»Š f´ˆNâ<Š´8F|8q㹑M–„¨äG•°.†ÌHï%Ëh)WÚŒ)Ι0ã‰ô™N§Ð“D=5ŠjWR—Kw®’ Œ&Ȫ7‹Je'²eέêºþÄÊ4ìI¯@Ëz«5ªÛ¦ÿ¡r eZ°kÏŽ…u•ì[]q¿þÍ›Ué\µÅ£*³dÈVé¶KªLËA4‘L˜'åQH‚49#†A2ˆ­±]uæò&AÀ¤¦¶zÕ g4É"f63‘÷ R©±@ $øμ¹sáîu  Ø3ÄÖÄØñÚœUC†'UÀ1âÆ2fѿËr:]”ú%Õ.WMú6ê¶fAôÔ*–Q‹eC´Ä&Kl`gSõTŸ(G¬GƒA|w[nnÁ›&O,±Äw|É÷ &†r†‡ ŸL1¡%èFƒ˜½ˆ‹‰žPÅIC1wR4¡ÃnìwÙÿ½=!#`ÜFb3e†72`4H+­Ñ&ð^fnÃ'JÇuAQFžðáVnèÁvvµ÷Äèfd4£&ºÆt!:À¸Qÿb8ÔeHGGOt‹J¤Î—¦€6 Å ‚Ÿ®XªÛ4 €®³¯¸é‡>|%v*Œ r$ ŠØ>|1Áf¥ì„ö¸WG±Å I8ÆÝ€…\aŠ€vl„¯=á‘l6»;tÀG ºP‚"†hDšCòr MRàhw¤¸ Ô€"xNOcpÿè097»€ÊPÁtžwA J …cà %Ý{ð£OOJÑìÛ4w jg PÐÀ ~×/TÀ bhB%`zA€ HxÀ9ö†¡ÌT°‚HÏ;ÔÓx;›ÆœÙOpTCÿK*pÏÑ‘o¤Pä(¹vì4x !uA +£¤¡…§žÏR.Ò'¦‚¼”~£¥xiLïÁT!1XRĀءÁcTTÐÔ¹ì€%: Q}Ð`:ȇ@G²6(ìsüQXÇŽ! ˜é´rJ6«º‚¢¡Öª#T’= CHåÀ´ T-¨zR="¬nØ A‰m Ø<èá:¡?$Œ¦ LˆÿÈpì´5Kµ` 6OpH A¥n$´‰PFfàNhŒp±¥â{¬te&¶Î÷4²EYÛO$VÖtª³ZÀÿ…° ´èb$ã§ŽÀë]•¡¼ØÙ\MHá+>ާ–¢I¢§šÀå2hZA°`.- ØL£zñ¾l@6èRÓ‹ ®§.WPNKažÊOJ]SAL}L2êT)]S‹X¹Žº›hÈ4Aº¹¸{) #ÃÀdPP™úi2obÑèTšø$†* Ë›˜€Ïâ,ÍYE¶„ÕŠuàbMè+Æ øØÚ„&XÇ"ÝqÍöãN½Ãõ¯gñ$!üõÄ}ƒp(H°=ûRƒÓ¹Có~j4ú3´saC×—iBÂÈk-D@Äã(ñ%ÐàSkõÙnò(ÿp ~ؼ祖ƒ×KêBR;|½Àh€¤ › DÐÆV{¬%TxùË€¾L€ï0…ÀaU»mÙb7½ØB‚†  áˆ*¦›÷\JK—wâ¡èu&Á×DFÅï®™:,Ëgê1«‘efÜlyám½€^´HôÈ–’€6q™*¼8q.ÒiÏ€3X‹C:ÌñÛšÁ:Ôâ Ëø±C!f%ŸAÏ"ÝDNr“=å`y\våIàŒ4®µþ“>£ÛTö¹AÛw_'Óé6’/-Üêì[Dýþw ©%ðé.¡àQ•ÒÑ%à]à.|pߺ¦s·/ÿìf“ؽޡˆ œüº¼Ð&Q@yœqÔØ¶±h¬°]Û»s5—Äp³^Ï-F ðz(ÜJN#a(B^þ%)4²çD».À0îìï à=¬ßßM 3*´ÊTY?m‘S8‰÷¨¿pãw<ÎZ’l™D<‡âc`‚ ­ú¨¡ÅúÖ 2Àúôßú5‹Ü dÅUWr¦³™Pî~XÄ¿ó~VrbTÂØ×[]2wÞç à×ãi`F7Ï#"‹× ßSkœp_C_þÖp6çW"7R§à+ܦ5¿G $S:)¤Bö' Øàchã[Ö0M5(ÿ‚1øWþTuÅr}ÛA÷QxWChƒÔ`gB¸€ŒR}$H 4Xã 8(…8‚?˜;9ò„ÞðOLØ„¨(«pOV8…ê9ex…;h†ƒÁ †~‚â³U‡vx‡ÍXˆ„q؆淆ò ‡ª¡EH‹² ­à{X€¾aˆîŠˆƒç‡àñˆ‘Xˆ˜(«‰‹(†˜‰ŠÀ‰’è ‡¨‰‰q‰P3ˆŸˆˆN˜…‡!ˆ0Š‚Ñ‡˜Š•‹=ÒŠ|!¯H„¶˜,¸¨†²x½X‹¦è†¥¨ºÈˆÁŠ>⊴½†÷׌¿†X”Œ¾xŒªh¬°Œžr޳8Ù(ƒ‘±ŠáH蘌ĨƒÃ‡ÈXÞx‹Û(Œ×Ð(çÈƒäøŽæ8Š;÷ò5tˆ‡™ ©‡ùu¼(üØØÃŒÅùx‘å‘ú¸ßØ9äh ƒP ˆ@ $y’™€’(i’’p !ù,”mŒ†777z—º{™»ÁmlÁz{ßgfßhfÞlkÜttÚxwÚ|{ãWUäWXäXVã[Zã`_ãdbähfämlènnåpoässäxwä||éqp倒’’™™™‚ž½‘Ф˜›³… ¿£££­­­´´´¾¾¾¦Á”ªÄœ©Àž²È¥·ËªºÌ°¾Ï±¿Ð¶ÃÑÁ‰‰Æ““ׇ†ÕŽŽØ‚‚ØŠŠÔ““Ó˜—ÑœœÜ‘’Ϋ¬Ã½½Ì°°Ê¼½Ð¤£Ü¡¡ä䈇䋊튊åä’’å—˜åœî•–埠壣䪪岲帷弼ñ¦§ò­®õ¿¾åÀ¿ñÀ¿ÆÆÆÈÁÁËËËÁÊÖÅÎØËÒÛÜÄÄÒÒÒÖÙÞÝÒÒÜÜÜÛÝáÞàâåÃÃåÇÈåÉÉéÈÈåÏÐåÓÓåרåÜÜïÓÓõÄÃòÌÌòÐÏòÑÑø××ùÜÜåßàäääïääíííïïðòààûåæüééñññþþþÿ€x‚ƒ„…†‚r‡Š‹‹‰ŒŒŽ†w•–—˜™p™œž–›Ÿ¢Ÿ¡£w„wpª«¬­®S®±²³«°´·´¶¸›ƒ©»±º¿ÂpÁøŴ§‚¾ÆªÈͳÏЯÂÊxÌÍÒÓ­ÚÛÎÕ½ÛÝÞÄäÑàËâæçëÔ¿ÖØÆãÞóÓõªðêíîûµè×úúùøí]8{¼Ç bS"JœH±¢Å‹3jÜÈq#9]"LX.!Ã|#M’F`D“šØ[vp8ÁpÖñ8KL`ó)±è*táe e…v ó© Æ«*2¡ LD¬D0Á›tډ甠ŠJꯪìȧƒM BÇ¹Š»£*éçFÐ÷À§'ƒÎЍ¢WNJD–ÞÆ"„‚Hñƒ}F1ª”“Ò¶Ì;óM«¢ÿ`´z†šA°é¦*!ÁÑ0«¼ªÊLä 7„Ðë~M4Áa' }'–Ìc£‚ºdUÒÅÈܤøƒ³p0Áo±Ía°ŠD ó,MÐW[Äœ˜£É@O 4È0àY ­P»‰®µnxÌGóM€ÁÝRÆRƼгS›±“¯Ù¦pø@œ6+Á4<›À*¿6VóýPD&»ÒVGPÞÀñ(¾ÏLa Àxãx­Í6oãc o†â…ªtΊŠÐ7EØ—gJܼ"…`,ðÂë°ËT;T&Y*ÜW]<ø (xp‚ =:ÙÿXpCo׳±Ç6ç:ðG?rž¯™ÃÇ¡]uúl | Àÿ`Aêbey…ŠX­(CðÊó-8à`qñƒßÙŽV2@éK·rW µ•9!h°àlAEÎCp@Y( ˆáP.¼/‚Ñ+.Úu&þ®[ Uú¦8|aXE `ޝ|ç{+ô4D€nóªPt½ž­ j‹Å½– ôÝ*WFA¯:(8”Ð ª0°¸à‘j g"²u'1 ë¾úAK×…)¼.°#„háG"@©I4ŒÅ§BÄÊ‚NlpCŠ ÿ+8<ð…AZpàA´v75Éj¤È Ù¸. RSà€D°ÈYˆaT³ ^$]¡¯˜ñ’Ó‘B„ÀI/ˆò! #°¦³„ˆÍKóÁ˜äªxÅ*>@‹†<ÛD»La PÅ”Pµa¶b}÷Cœ,.F‡60Ó|ÄÓ\`8¶¢]ô‘RÅ.õƒWÆ3™!ñÀ˜ #肊á# ©B ä[;iQ=)ºb6JÈä)·É5°‡ªX«Y@ e€áAK7K<ˆ€$Ð9 ‡‰þŽAÂh®@wz. ¸»º0 Ì D{ÃsŒ †%À0DÿˆØÈ`|gèÑJ0…*TaÅCt±¾ÃÙl½Ò,Ðe5@!QNïlE U“o³¡Ï&à€%PÂ$z´BjAZX«ÒT§$ŒÎê`0*É”*¦¦ÝYÀ¨(`¡Â dPúÔ€µ€@`Xƒ)äàUÀt0ˆ`º$ÁDj €D$ ¨ÁÂóÚˆv=í Æ€† <^U%œ\Ñå›xI >^š„c‚,²UÐB!WÑV7qY•Å<èé†{š®¤3c…ð›2(A$Ã|è%ÔI¦1ÄÀ+׊.pJ5ØÖÿ”‚f%ñÐIfÀOoˆßÙÉâtÊ´o™'áU\¸•Iʆ†à²À¡òzÀ´¦ ÔfEa~.˜#Ì8¹›Þ,è´7Ø“ð¡fsµ„˜Wi½‰¡Øb T-±?ÅØ ×^yÆb•ÝÍ™„Ü$·Â)C®,dTåÀpV;C¨“p5L½NYË‹¯*ÞÀ3Urd†›™Yæ“­zeÅ…ÞŒ0¿±êŒUÁ»)¨H (<™žU!®QÈ;-Þ¯ ˆéɪ¸˜£ « ÖÀÀ2”Á°eu9ÈŠ.ê¿jÌ4Á@À‡]qáŒê-TІ¹ÿäâƒZ‘Àºú‰`û$if9®°‰wd x^€@ëIM^# Z¨xÁñMÀ-ô1 ¯+ØØ¡ ¦}f"Ô€LÙ^RÖ Mœ½=À«t [q¯ãA è‚À4P·1O‘šNV˜\/#4à«h€ƸdS—QIl5œ›|Ì_tM+bPÂ=æù«žÌ”‚xöÂˢЈ¦NŸáðg 4`IIhÀKáeè ¬b6T˜¬¦“`Už>f˜WŽªè+ÇB9§ptÎst­Û@‡Ã…:£à5ÁèHWz¡cµfJÿ@™Ž•’²FÓ«w^*`× B ÿ°ãá øÄçÃk1R3fäî®ãóñ…|äÔ\“ᛄ”wÌ­gètË‹JtÒÉð½æèÍë{ît[׬hWŠ3,à  È}hZì}[™Vš¾ù»3hãI V7åš´€Á8™Ëȯƒ€!„þp V|ý’YÀ)Û1Ïàß"TûÆùõÑËh³ª!À+Pe ¶ÛV)º+Þ‚ÈF´\ס½Zo_ɨ6 ;SJp±æ|YÒFrÑvæ;s§všõe>7UÇFú' HÄpi‚Âtv÷ «tS°3h9 ($ûÐÚ•'™€²0€K`€²Vf¸PQ°Çÿ ûsmÿÄ Aa ó“Fƒ™!I@uuòozÃcÃ4Â3DDTƒòuƒ*çe¦²ð„?FX9yG!àÂ÷1`h,T¸YªGYR˜4)8†eØ…oóNW˜ƒlØ[ˆ… xYè)I†bxckh‚zhƒ·€ƒ Ø·C‡+s‚~¨X °qˆÈÜÐu‰˜˜‰èуX…Œ2x†ü0‰äŠGhC"ˆ¢X‡¤xŠèˆ†­X9«p p‹£¥·¸Š©7‹qøŠ‰à‹^·‹©X‹»1Ÿ¨Œå‚‹¬¨‹¨ØŒÄHxÀèphÆX‘ˆ‚ÕŠfèŠ-¢É(±‰Ðè!˜A‹èˆy8 gŽâȈûçˆåøŠðˆÇŒSŽ”xÂŽô³‡ó˜é¨ŽáhŠéÙhø¸ï茿¥øÉŒ©Šú‘ )‘ ‰‘ѨYòÝ¡‰$Y’& áÅØ‘!y™‘0)hþØü¸“îh×` œP <ù“©”@é“¢0 “ F™”°¨”I‰”Lù”F•FRùT©”!ù,A•iþ‡ """***555;;;DDDJJJTTT[[[dddlllsss{{{Mx¨aˆ³z—º}š»ÁmlßgfßhfÞlkÖ~|ÜttÙxwÚ|{ãWUäWXäXVã[Zã`_ãdbähfämlåpoässäxwä||Á€å€‚‚‚ˆˆˆ’’’œœœ‚ž½‘Ф˜›³… ¿ž¦¼£££ªªª´´´»»»‚ŸÂŒ¦ÃީɔªÄš­Äœ±Çž²È¥·Ë¬»Í¢¸Ñ°¾Ï±¿Ð¶ÃѼÌÜÂŽŽ×‡†ÕŽŽØ‚‚ØŠŠÔ““Ó˜—ÑœœÛœ›Î«¬Â··Å½½Ì°°Ê¼½Ð¤£Ü¤¤Ü¥¨Ü·¶Ü½½ä䈇䋊퉉å䒒嗘圜埠ðŸ å££äªªå²²å¸·å¼¼ñ¦§ò®®åÀ¿ñÀ¿ÆÆÆÈÁÁËËËÁÊÖÅÎØËÒÛÜÈÉÕÕÕ×רÖÚÞÜÔÔØ×ØÜÜÜÀÐàÍØãÔÞêÛÝá×àëÞàâÛãìåÃÃåÇÈåÉÉåÏÐåÓÓåרåÜÜîßßôÄÃ÷ËÊòÐÏòÓÔòÝÝøÖÕùÛÛåßàäääåæèèçèëëëåëòïïðòààñìíúããüëëóóóõ÷úöøúýõöþþþÿ= H° Áƒžð \ÈР† j‚IŠš Bšƒç"F„=AÂÑ$Ç9(SÎ9gRAŠ0>ô4 ’Kš6RX3£Lš‚ J´hЊF“*MŠt©S¥M•F<8sªÕ««bÍz°fÅ­^WÞ,8©lÙ‘3NôèR“ד,–쨲.GŠq %8³§À‰cÉvl»“ïÁ‰0+^¬˜ ãÇ!;ŽL9òäÈ>±jÝÊyëæÎTªÌlÕ-ÒašLyÚ“¦;*;®¾;i0M’ñÀ¶kaßœ8ÿ¥ˆ¦ðψ+[VÎ|ñåæÌŸ?F=õ3èë ­c¨ucÅÚÚ~ÿ®YÖ$Ë•rñ”GI·GƮѮ.N;ÁÅñšNëð0ôÇÒýGY€XY}\m§`v †Æ×L!(^~܆RP&™tÓFwQ´ÒE8儘{ÊgS^†ä•pÃUX%W EÎèœÈYx bÇãuZ‘”Ú2hÐN5évTG,mÈš‡#UhPmì­Va•Æ¥8`©½Gr8Òærc2VcbE.ôc­ÙæKèEÒÑ›SžhZNÂQM¼•Ä"w²ÍÇ!zˆeæfj6í‡æO1Žy¦£eš©£glVš¥ö4[šj"¤Z] ŠÛlìQ7Ñ\¤²FØXnš•n„Iÿyi£a>Zk¤7RÆ©ƒ˜.x(¥u~EgWfÇdžÆ¥glÀ De•©ÆF£ ÉøK!F­DâÚ˜·‰Ù*¬f½6ø+¹–º©ß[1™{ò_ ²ÝE×\wªRÓ‚gq²‚y+¸0‰;£¸»ÂXîvç^Õ0D¦qÊ¥@he$_q ¡uS’6Í&¥&(…Õ’– 5»“b²éK+ŽL°˜ºî˜.½4×lóÍ8ç¬óÎ:š3ª¬Ý ê|õÚt†÷ò(Ð'5 íÍ5±!õÔTWmõÕXg­õÖ\wÝuÇJ‡-öÃF¦Ûc¡Ù6„‘[h®åZñ »J»•T‡‘œ*k¦ ­ÿ›y¦ÉÊ'‹Öزá/C‚°Ì 3Ü+ÙùuZ³%'v›l7ÍÍ^`TÖÝtÑOª\m ²*æL+íßÀ/þßâÀ6äã=J>qCfQ¬ÒÞ$fŽ¡zçj4‘|/d‘l{ç>\…iëÕmë‰ÃŽ®ì Ažà‚ht•žêQ™y„…&6‡u{è´ª#¥¹ö´‘5y`… èúëÑO:=õŒ›];”ª=2M+qÖH†Ã<¥DæÙùJ$ãá¥<ªS‘ûn·:–%Nqõ‹Yìð·A6Y$µIœ6@œàÏ“'“È2†–àø'>áRE9J” ñÁªyÿAl*ç•!c¹zˈ“Eb$çûþÂO2©8m E. ÏY­î,Â2VÂfRÊ4äsŸ¬<äµÙMn–TWÉ帶…˵ér]rŒ-; a¦*2š¢é:fnÁÑœ&?[‰+€^ϤGõ óH¬œ13åyOm*HœTq2'kœ˜T²àQéMÙ+nÔb)A‚ލi¯ŠÌâø6ùÅkVn}kkÞÉŽ7´$ùžKw[tJ.¬q ´ê,OÉÍñç?—¼¨CK8Ñ0VСHëèwˆ?$ àè²;…ìTk4t1-xa J†/“#ìä'WʌΒ£³jÇ%‘n—$þ\»àE/zþDyTm!ô©O ”Ôen±©ç‹êè.º4r+³…¦*ƒhÝô!±•PÅ,·9Ò¤ 6€B{µh·tËmì6»¸¸9ð °Å’ް8)á´¢H7zC„PÓõc ¡O˜( €øw¸ Ml5{Ùÿ'É¿.4(7’`ž¨RÄ1½'M¿‡ÓÕúŸ'³Í-`a•HÀ‚ Dî^q—œacKºÒ—Îô¦ã,hZ†\h4Zã U7cZÔ¼Fµ%h F°B0®›ýìhߨœîôƒ»ÝàîL`Ãn¯«¶×±27\Gã8C#1CÇ_AS„×¾>ÃÈËdÔe;Õª¶oÜ=¥º³æw˜‹Ëñ„&*Õ ÎTILL‰Ê~ÿ‡&8ÁÚ,tÛæ6¾=èHU~¬—'x¹‡/WïÎ5õz(¨ÞâáÜ$ÜK *Ë!¶°L\¢ XøÂjOMÇèñ»7„ÿ |nxÄݰm½¼¹Ïývöû«—&¹ƒ\*„<-K=é5&÷œ­žÌ–­£µJ̱m\ 8Û¦JGcàx!ufF·Mê'|šgp/Âr,¤r»e!\-aLp¡^ÿcL¼‚ [ ®ÁqZ ^`{JX y>·J] tqc0’—Mç]grÈ~›·sa2w7È”p E¼d'#³FòWQ©åS‰°3Hb3¨B dJd Mª ÈmÔ4j;˜fˆvrí—y¸¥, w4¥57Ät`éUA\µiže—ƒ9r†[eq…WûUUFÃwBSw.ÂUçZ­A+ÅL™ÀC†P_@ƒ@†àsÜv{cˆHˆ f«´€7xƒ[X‰…6l|j„×!IS¢WCŠÆç$,äe¡xŠû¥'2DU…`‹úrØ×‚€…¶‡Y0] Úc0% O%0ehŒHrÉXl™ˆr-E`È!*~%HÃBù2Ëâ2·'Û ¡LTõ' g€}ª$M­X{#àzt­øc#ða xVXÏñŠ]@ˆ¼ØEˆt‰’•køM×¥^a&„Düÿ…`/$^JiÎÂ4Go"˜] AAÉŠ‘€`‘ ha'0)]`#@‰¯‹³(†îòh†1ƒ·XtöxR¸Œp× •Ew“G!z{uè=?yx°U …mØ”ƒÛ’b9ƒ‚P{Ó”‹Ù·xð#àoµ¨{!'ŒÃXŒd áHäÈ{æ×’Gwjh „ftYUñ"*gI^Aq¥xè@¸£¹9 iiÛˆ]Øx_ðñ†ØÇme'˜#pŠ—‚ ø€@‘†ðˆZ‰“8@–+`‘Q{똙υ†œùƒl¸θeªù$"¢|Eôÿ–Ì‚ ƒC”ðzð| Mg % Šrwg`xcà›@‹Çq õœ48ñèŽÔ„n v cMù”’É’Õé’n“ÌxšÂÒœ®²`³? *º¶×R R 4Цº×…ä{­ç›¾€3À,06о‘!ñ¨OÝ:¿Š™J°»ÓQ ¥F¢‰Z¹”‹²×q¹ •¹>¹¹ÿŠC<|àÀ=ØëŠ>WFУ„¨xËm® »®û³ ¤BÊ3`«4Àn€Âñ©°K/ꉲ#û‚ÏU ʲ¯lv²øšÃÉæ¨=è#a+*,¤g•Ö>Qd”о³CðÔ«„¹xaœåÿˆì·¸?*,ÐA 4€Òaƒ8H‚ ±=ZÆì¯«ÅRš‡!W—–ªü¤q|޶ ,+Xcq<{ ­}Ü—‰áªÜFŸa<P†çºc£% „зŽÌª´;5Ps°Å Ïa˜ÔÔÉ éŽ!`ÆŠñ«ÁÊU1Á‚©¬²¬¼Ê]Ѭ>™Z 2knìIAá lB,#ÃI§j÷‚P}]Л0_àVœŸðj^ì4PÉžà† !‹§÷œdœÍ` å1L´ÒWã\Îæü¿±¼ÚøÊÛqS’ê<.BOag2’€Ú‘QÁ,ÿܦú´xe0P†_À!@v0l0CÑ—a·Ñ9Mœ‘X ±ÚìœýkDlwÕXÕV·4X§Õ[|YÇÕJ·uR³ÐRs]ÓLpJ°xJ×SзJÀN`¬SS3°%\U£àRã QðusÍfvW³vOÖíáÕkF¡!Mè¬sô5NúJO@¼¿T5œû\§&™ã»{_"€x- ÀZ Ã,ánp—1Ñ“ˆ»K¹ºP=ÃmA*õÑ÷ÇÅkkDO‰†:è—E1±¥Ò³¯ªSûƒDdp…ÿ8Š·x!P°ˆÌ~{§âƒÜýJ°•b8 %P†ˆ{V'M]ÀË ª+4 õ±ã”¬8,ÇŠ;_|묆N‹K¼”<î?®€A>ä_ð>MÞ$ä@NœL®JNÞͬÍåÛáÂVÔ@\Z脾ê­n²2r_'ß®{.:`´÷m{‚ˆáŽüºâ’ƒ4µ]P§…ô9âó T™}†Þ‰ù  â:Ââ^ÏF1Ï>í‘Ëå]~ã Љ)ê‹ÑÞe±#PàŽâ8]ÞŽÞ.úŽ,ÜxM]^ åïe8£çîolúý…ŠAü]Ãý¾%ÿ>àÑNÎ"ÿMã3Of˜ªXfÚ«9¾{>.TQ^Þ‹ùPÐШã¯=¹k±½±/(ÆÚ=¾)Ø›%@]€ïT~ lì¦=~CÇ1/ó‚Nöeoðb˜ýÉ·ãýˆ^æ?gç€ç%Ðe8PÌb.´!@gŽmä±:Mü R†°x…˜«äº%ù± UÑýÆq;í|ö }ùù5¿¬üP†#,Èp¤ISS%›žtîÔ©iÒ$Mžðð$Z´¨¦šF•.]:”éÓ§N¡N%*•êU«W©fÕÕ(RŽg¾h9Á%PM´‘9RÆGC_°˜¥ù¥D‰/4׊4´ÖK ‹° ;FK ŠZÎpÁòå­BB]V¨Å ˆZÒr úsÒÒI4'qíê¹kWÒ§•¦V]µ5TÖ¯wÆ–ÿMìfÜ5Ùäæ½Ùã@L°hy É,eÉÓ[!Id˜1ssЧ`5¥-Û;Ïî¯Ã«º¼ùï«¿:ç½›=û‰ ÙÈÄQPcŽñ[vɦL,pÃŽ©Ð°Cê¼ôÈKÐ(±ZеÁ‹p¶õÞÛÌ= y›è-6<ªO¡ûòRH¿Þøƒ„ ’¼ª{‚¤Á a‹Q'§ªQÆoôê¨ Ó°Gß n¸âŽKæØƒ®Œéª*í¸›ñAwœ°Ê¦¦ÄR=¤éÇÜÎcŒ„r+9,£Œ#‰ˆ=-@X ÍždQ4Ú<ólÀ)‹Ú’Ë+sÔRÐ.½”Ï9ÿ(j.7CÊøB BÒÚË- Ç(Á ]q*Ÿ€Š)Žð˜…>ëÓÏAcüUB-ÔP0Ó:c8@A®Ìö ••V'nµ5Ð ù bµ;BU[pUV]%ê6X{óˆ2‰4Í-V]§=±Ú_µbM!OBSh;a•PY*ÑM7ÙW½Ä¶&m!á¶·w½Ô–yÓâÓA¥ÀrM5÷Sudö\vå Zw{›U‹Z}¥WW´¤W,pEkß­‚¶Øq¦1U…×MxÙ u­—¦D'²öZŠÑJT°—kâ˜E<.*ÔQKåÉ4’K^ð` N϶˜W¦IL2ßSH1•ÐX_ÿ­Àš\¥ôüi@†ƒFùd“…68åhc¾Ðl{»y©Rs.·«R}z[ì±ÁÚë»Ûòé²ÑþRí«úl(¬Ÿ»pbW|qÆwüqÈ#—|rÊ+·ürÌ3§<46:÷üsÐC}tÒK7ýtÔQ¶òQŸ£uËaö¯í®›î£ fxo¿Ñâ›wÞÖî`·u¦j\¹ÏÛöÜ™o^ìÝ{üøÞ ¾( ŸUèjHTëÚèçküåNºú¿Ñ?pžl6j4åµÊÞù~ïì'X{Ч—^ýõ]o'¡Џ%2ô€/ \ í¢—!ÿA€OãSáZÔ,‹âÙ ÿx¾ †P€:± À”Au0…¸«Ÿî@¨¾:}:! ÜºwBjda¡÷BôÅ=$Šûp˜C~í°5úÓßþÈç‰ZHˆCan86? "GJ\áo÷Ä(ʰŠÕ#bµh#¼}1l^l¡Þþ7ÆÞ•Q‡g´RyÈÆ6þ° `gè-:¢Q…fÄ£ÁD2‘j„ ä yÇ5FR.Ú£"Ñ&G@6’)Mdâ Y¾„‘Š–4&“¨É#Úq‰žœ£$Eéœ)Â’”9ù$*‹ÆÅZ†ï‘«t£gYI+vÑ–S¥0A)I]RRe|Œe®F˜Éa"«˜¹Ìã4[ÿ©Ì¾ù†n€¾îyï{­Àn0Àª}ä+¿++(€J¯ 4@6s ýñW €(>ßqÏ“ó„X¹×Px7è» ˆ¿ù€í<À?ýã»0¤›ƒÇ³¿x(€‘+ »«?0>H€@H€›ÓŠx€¸¡ä;ã€î¡( D:H€Ñ¸š ìÀ$ŠÔ‰¶X€LÁ¼ €»ã@Ý+Á¼A­h€žÓ„˜ƒK7AàAš3€Ix¼ø:XBÕhÿ(€HéÓ‰-” €€=0ô1l3Ôºúc@O0dÁú£¡HÔ‰`Õ A(j¿T@O˜Ø;>œ¸CDB<¨¿XDOhDÕ>Ë¿Adƒ Kô0O¨| HH¸90>OhÂ×нsìCOAÙh€è@H¼[ÌEÕ°è½ûEF>DºPĹðD±£ŠnÄ9`M@ÅpÅ®€DfÄ Å“ÅC¬Â ô½DW4€pœŠq<€|=tTGª0»pDOtƒX¬Äy¤ øŒàÀÜ€c“@ÿ<ÙЄ–K`T$ùAl½ ˆHÙH‹ÄÈ×ÈÄ \€p¤Ó=¼RŠqd?´¬¼½Ó H´;„@¡kFLDº‹Ô‰¸Ç˜€™4Šq„ÄI(€$ÔÉ®H€‡¬½¥œ¡œ¢¼Š ËBš (K7¨XòK¨T<P¸Ä×@Hx€ÄKD˹,H€³L˵\ɯ3ÈËI@È@€®4D0€(K Æpm\G±SF€5¼ d$Ì(ÆHÌżŠqLELÊlÊŸ€{t@LÅô„ÌÜL¨Pt€pƒT 7PÿàT•›Ⱥ£pDOpƒ{ §>ø Mp€èÍil€8â4N9¸I°N`¬ dM? ºNGă{¬‘àxÔ‰ø :PäNé\Að|ñ¬Š ƒ¿3 ôt™„àL½[ O÷´ÂÓhm¢‹[PmP}PP P ­P ½P ÍP ÝPíPýP QQE)`§`ù+QmQ½bâÓ HH­Qm$Æ ŠHDä|€—œîL¶ó„ûc;h€H¹êQEPbMOx€ak»Ë¿9h€cÎíR…ÑkˆE ÅRä@€ÿP1€I(Ó€âƒQ(ÅÄ+S8ÓQl€‡ìHâ3€Å>/]T …ѰC5%Fh,¦Dp€R€9øS€Ñž[€â€IõÀ`€à«FC-EÞ$ìHFU ÍQ}AYMÆX*œ4LTÖFTTÅÜQ0€PŽô¼BVPAC¥Uk¥P[ÕUblBbtÀr´º˜_µEH0?QõŽœƒàV;ôgé›VO˜SŸx€CÑkÝ×ÍÖ%>HuÄoÄi-Ô9x`MS6€ÑMØX:uDM¤¼ÿquÄØD:¥QF~íØ‹ûÍ¢¯#N Ï$=ëÄNïü8 :(ÙXŒ³¸¡$ÕR¡¸YíÙ…Ñ}ôY¡õYH.Z¤MZ¥]Z¦mZ§}Z¨Z©Zª­Z«½Z¬ÍZ­ÝZ®íZ¯ýZ° [±[²-[³=[´M[µ][¶m[·}[¸[¹[º­[»½[¼Í[½Ý[ k+¿ý[À \Á\Â-\Ãý*H\ˆ€SQP;C Ç 5‘‰ÜF3ÊM%žPÜÅm\IC¡ËÍ"Në\DÓ0¥Ð\Æí“Ï•¦É]ÈeÝÕ%]£0]Î…ÝÑõ\Ú­ÝÖ½ÝÌUÜÓ´ÿCã±ß%µ;^/’]ÔuÝÐÕÝäµ]æm^¢0^ßÅ4P+³à%^G{'èý3ê•Þéõ4ë­ÞäÊÞBû^îÞîõÞí­(ñ^ò=_Hßô5ß¹Z_Q˳öußL»_ýµ0úM3ö_ùÝ_ûàðåÝÙuÞ×EàåÅÝfàèßë…_ô`¦` f0–à Þ`Ž´Æ_ˆÊàòàRëàü­`a>^åµ\äuá>–Ô-¨^áèaAûß~ßFaÞá¾àþ2íb#&âñõaÖà%®(xb(Žb)žb*®b+¾b,Îb-Þb.îb/þb0c1c2.c3>c®)& 4^c6nc7~c8Žc9žc:Žb5®c<Îc=Þc>îc?&ã;þcAdB.dC>d,dD^dFndG~ä0VdHždJ®dKdI¾dMÞdNîd1ÎdOeQåNeR>eTNeC6eUneW~å8feXžeZ®e/–e[Îe]Þe\Þe_þåVîe`fb.ež(fdNfQfenfg&df~fižf<Žfj¾flfc¢!ù, “mŒ†777z—º}š»ßgfßhfÞlkÜttÚxwÚ|{ãWUäWXãXVã[Zã`_ãdbähfämlåpoässäxwä||䀓““™™™‚ž½‘Ф˜›³… ¿ž¦¼¤¤¤­­­µµµººº¦Á”ªÄš­Åœ±Çž²È¥·Ë¬»Í°¾Ï±¿Ð¶ÃѼÌÜׇ†ÕŽŽØ‚‚ØŠŠÔ““Ó˜—ÑœœÜœÁ¥¥Á¯¯Î«¬Á°±Ì°°Ê¼½Ð¤£Ü¤¤Ü¥¨Ü·¶Üººä䈇䋊å䒒嗘圜埠壣䪪岲帷弼åÀ¿ñÀ¿ÆÆÆÈÁÁÍÍÍÁËÖÅÎØËÒÛÓÓÓÖÚÞÜÖ×ÜÜÜÀÐàÎØãÛÝáÞàâßäêåÃÃåÇÈåÉÉåÏÐåÓÓåרåÜÜõÄÃòÉÈñÒÒòÞÞøÐÐåßàäääàåëíííïïðñããòòòþþþÿ€q‚ƒ„…††m‡Š‹‹‰ŒŒŽ‚p•–—˜™—kšžžœŸ¢Ÿ¡ž„pk©ª«¬­«O®±²²°³¶³µ²pƒ¨··¹¾ÁªÀ¾ĭ»”Å´ËÅÇͱϫÉq½Ð¯×ÆÙ¶ÒªÔÖÛÝÛ©âá¶ßãäéÌë­åèéåæí¬ï¼ëòÙùÐöÊñôîb›oÜ>~‡»÷/¡:‡ýÚ¬yB±¢Å‹3jÜȱ£Ç×´ÁR ŸÃ‡ û•lñ¤JpúNNt¹ÐŸA™—½4I³%A†7{¦¬¹2¨Ï¡?1¢„̼£û•qˆ§×rê+Y™7^ŒA“+@©½ª–…z¶f™´@ÿÖ"ÛUP4aÇÊj™]ªVÇìmËÖ¯R¦X³âì˪àSº„u}Ì·pãɃéi¶“%dÍDa*fÌS²MÊ‘+›.Š´åi˜G¿öìÊqæv›ƒu†&‰";ÏNe[˜˜ªU(!MÛ0ëbb›‚IDÌðÖ°ã¸틌ÚT1€x¹~Û› íׄÁúò²ëÆ‘£ /Zpð`GýÿÈ‘HX¼a†HXW FDðÀƒˆ—Jo¿1a”jòM…œ‚ÆQPPxk‡Ë•wamv½A†@±ŒˆdÁRƒ(’†z6“›6I½•ÊÅ7ÄDÇ]õÝÿHH_j,Æ!¤wB4SĈ1„…êaE„{©0êÆqv‘Ä—I4CÆ—èµFV%!ÖULžHŸ]G€‘X,JADS6¡Ä âX•ï1a•^¨W&7gr2K¼§Ê‹F$F*d¨‡‰MVõ k€±„X59æ˜rbzmc˜ZÕx0Æ›#D ã,HD0AUD°§­}f÷œÁŒW‰å©ˆT—J{žÆ‚Äq„ƒmþ²Ê‹DÊêVI±æ…ƒÕæF“K¤²DTéDp)¨¢¦’ì²@4û,.«|y*væÙt¹ †ÿˆc¥Z•6Ð@Ö•zâx²Îj$­;kô*°)"¯5tFh„Íâ #rJxQÇà`•Má¶dH*¥BXÀD‚`±²+¹h›ŠˆÇʼš$ °…XL17!L(ˆÐ$ñ wq¥b5Í*‹òqÇS×£ ¾úÖêcMY° €ô0V”- ÀÏÀÕÜuOpwèMƒ]]­Nj-_lLA‚á`ÄŽ§+bx\ dO§ÑH+Í´?à @çqÐðƒßªì\U̦G™E/ †ƒ@!†Õ­0ADãð×@kä:rÿžf{a 8p>¼Þ<ô=Ó*b Ýã2bÆp©óа‘k`¿J“xPP„‘J ¡R›“ÌGƒ¨o}qšB’ª8-ÌOYè‚VW‚Ý / AF°‚0Y… €Àf – ®Âw•ž A ¾¯¾»¥Ng8pÀ áÓU4p¸Ã¥€|kðÂ<¶¬w©B ä³° ¼áYQoÌGì„(Y”,²’O¸†.| IØ€T°*d`VhÒx”ÈÄõÄBDP€*ÒðФâ-0ö('LY’S˜¹“ . ª0¤ 4ª…‚û”ëð€M6€ÿU ñQ…rˆL `h¡Ée k‘³xãR!P!OtÖÈ °0, `BãÚ„4à Dé'\À!(¥-‚I;Ñ)n®8X"KYœÀ‡(â̸íõk :Bäbw": sÆDfÞâðïOˆ‚ g†fU%€ØlÅUÉ¢5<‡[çá8pKM¢¨ˆÀ¡Ä;䳓Æü$Þâp ä ÀBVVŽéu2 x@@Y‘ÃÖÆ Í/×0…Ha–¬À؃ð4´`ÁzTý耠 ö @ª€’0©L`HaDSºRVT0“ÓÿpI`">ä˜M½1ÀdLþ4n`CƒZ,D!ùŒÂ>}Þ0OÈ!KTÉ¥,•Ú¢~÷CÆHžS´Îná1”Çág ƒЀ15€F©Ô¨XATÁ®¹€¡¥L*”úU]Yês–ä?Y¤óŸ¶«Êƒ”ìÉ x@S…xšL½¡E‡„¨v )¬*ÕÎ1úX$ €E\€€| 3pA íÀ;Èc žpƒÑ­>ðd$¸En€€ä?Ýt„‘t&E[¬U 9!©€ƒ(K7(@M…ÿ Q"Ú-2/.\.A`úœ®îª[DŒ’à‚.†ÁAz€TTÀºk¨b0*ƒenO„ Ì„ÄB„¯NP21•1k¼Š³3N³ÃÑÂ&Ûs²q ¨ÒºL'³ÑmªÏ1b&„âv7ÝQ*9%ä ‹ôQ=: )Õíÿbä… ¸Â]…:QDæùÁ<–È5“%©B-yì–Û„j•qô;OÐÖp“ˆÕT¨ám© óþ<Í]Ð6ªêíž5; )Œ•òìø„&Ýk•N*gàûqz&ó¢Ðl05³Ù ÈíŠ% ç4ÍÎWÁ³,„ÿÉçêÏL0B*ÐãVä8a(@w<¢B59¨O b¶H„ D¨Ê6Ʋ*þ#Øc pÀ—Có?ÈzìyÖ²PlÛ¤)^1ÇZüâ„! ¹BîŠ]ÙnaJ1¹¬S»ËzŒyw-hQ$Õ= Xàuós¨™U¹gƒÌ ¨ìÚ (1§’\cKh'U©-™”)¬ÒÏ&°¦xûù¶,ð6<ª8.ôz0½MO`{BÂÐêé$>@‡Ò\¾±06ndxÐ<†c¦«©/ ²Áˆ^9£ç9I5f•2áéQŸzÒ­¬çbÒ4‚øÖvÿ{LAK<{Æ‘tUpÜw‚cqʨ’ÙV0ÊUÞ–çæžùÒj΄¹?ç~ýÙ‹‰pøw¥ñ³7'ß¾îäèøÄ/SÀû þÚ ‡3hœæV€)nKqF(_\tJ€âý¢vÇAÂn1â'FÉÛWÎ&µq‘ #.‚¹%W:1‰ 9ÖBŒ#†r—NÝëäj /zÙßçr¼& n#I0Ä6}sPÍ“æ?{·?Êå ê´OðuÝ´"Èj®¦ hh³Pá6X 8ÿ7`"‡aÁP€J€€Åæüç Á &db ]…ÿnEv"B Á à1 j2XÈ¢'¶0c!g~[& t#@†&§¡"&4z.-ëÐR[’ÃuÄÅ'ë0\O@#\H…HDiQˆ<í †d% 88EsWÈ0ô …´g‚ph k¡ã¶—†xØõTœ‘€53Fˆ!PR„ÍáÑ1ÎÅ_’8‰”øò†‚¨ˆŽX†O²ˆ¸Aoø‰·'(Š(…˜Hƒ™B…¨ŠðQŠ 8ƒ…¸Šè'©8‹¯˜‡œ‹¡Ø‹¨(‹fB‹¼¨)SX‹¦¨‰¶Œ`ˆŒ‰Èˆ¸‰ž(-ʈZ¹˜‰ÎØ…ÏØŒÉ¨Ç±Èà˜ßè—‹âXŽÄx‹ÁX®¸‹ºÈŒäØŠ¸xŠØé(¬HŠíèæH˨óˆÖ¹äˆ÷XŒÃhÆ8Žæ¨ÃÈÔh )…‘X‰y‘y‰Óˆ…Žù™ŽçX £0 ¥’,i +Ù’)ù’™0 49’P“5y“8 :¹“>A?I“$”0”!ù,8È…777ÛWVÁffßhgÙxwÜ|{ãWUäXVã[Yâbaãmläuuâ~“““™™™¤¤¤­­­µµµºººÁŠŠÛ†…ÝŒŒÝ••Ü››Â¡¡Ï¬¬Ç¿¿å€äŒåžžã££á­­â¼»ÃÃÃÍÍÍÒÒÒÜÕÕÜÜÜäÂÂâØØäääéééÿÿÿÁÀ…â“*FÆ‚ˆl¦< Ì*er;ÍjeªZÑ*À-}Ã+S 5±™´z…1œ'E>ÇXðz|}fWqˆˆd]F h‰‰‹^ b‘\U {Šs[[$) i&"¢¤¦d"s"#šœ[c&$“•+$¶*¢E#¹#À+ºE Ä]"$¡ÚO (E$¯Ï) ""÷÷܉Owoó]:ä¤&oA†Zèœ@wØåìS&Ø@ Z€¥¹0ᨀ Ø28E1ªvá3 Û†¦ÀmÌNj ò¦7X{¯Zô¦·ÄÍ:`¨@Ä€E.M!î™@ÚR¨Â¶McàKï×0œJ†npš ¼®1u@,è60+p¯ A¢wBq¡0àXÀã ØD‚ƒaD™"¿€¥a9ÐF©Ù„°M @RàÙC8B»m¢bx@F÷r¹³ª`QT¬ÿCb áµ²e„ÈLŸ ä&ÈØ…L@Tˆ[þ†õ3øq ùƒ€83a(À퀅OÈFÀÉlì’9iÓØ<á+>úQ†ÃéD à”@àb¢'¯6ô@…3nÚÔËùS˜l{r‚'DÁcÎÖPò7ÍN`Œ¢ÌŽ*5Ñ…oÖ0––êŽ`и?(vr‰ä$#iIAd@k@°P…'šBy“LàúɉÆð+od.Û0…H¡•œ`˜€ZV3[od@Õˆ  ó À8)’j‰KbaãFÚ«¡4°#mHMöäÒ»PÀÿèO$ݸ ˆ nÌé¢0{F!¥Ã=‹JÅ9‰j–¿ŠI¡‡öå%ªÙ¼ÙQ7 êA Jpcˆ³ŒÁx€–À€tthO¨‚ ª°ÖNÎŽQR©D*W€i¯ÒóFqÎ}®n(RÂÐ#0 I0JF‚eµ“gD#T’*- €p®Ç¸«y ²€@A 1PÄ€¢Ás¸‘OÐÁtª€ì@ "AD€(@ÑhÀõH×Å¥OA "Ù¼ž°pZ•Vä ÀHà?‰5› „€²Ðã4a£>¹G~«#)ÍæÿTaÕ‰(êÄ dHB 5† (JèoNpv¾®—¢Á¾„t¶ ´s©‹†žB„ª²50ÙlÃJcªuª u.ÂÔP;bIîLzä¦Ô„5ÆýŠN¾°<, ö™Ì e¶”Àƒ€Rñ)olÜ!pÀÁvzµœ.{RO ³CFÈÖŒ®|Š]ò ÙêGÆÒ7J l: ¶ú)'<+·* –‰ü Φ°3ÒòÌ¢¹¶ÈÏá °“À&9ô{ÂÄ€hoBˆu(éQ0Ø)[Ö—Mu"M3@[Œ±(pæ/ƒAÍEa³”DÁK8ûwOtf‚‚ÿpwÆ›Àˆh ÷‰È95²þ.E"T€@L6U‹éD¯õ§Ã{¬l.N ¡°[u'¢¬„NÀÔé‡Cç—øoÀÚ'|["ÐBNv1–>,g E,±^'±¹‰DQ ]úÚ¡.¯éÍý˜ Ø®5ÀYŽó”J¨¤BØ[{¨‰&Ù†˜U€Lêžs0"Œf „­ …¤+mF×Äh@[ЯžhÒ ¨Ø=¨vlE@"f”H¢òÆŸM |Ž8 ·OCŸŸwPm”ü1!éKoº¤Ñ˜gP!¥ÞR®§ãcG¬?BüúÄ¿ZÿMXÐCÁ`Y¯©ØýýïÈKþ€“¿Zå FÂË,%3 Z'Å®¹õpþç…çh†·$Ͼ †ý¸.f8—.ЀÚ7€ïÐx™‰ â¶úö:Û‡')19b$kÓ/Ðl*[BN‘á ë(ÈÓGV* 4 I1ÃEøön2—%ªÉeYCГ½9tRæGL4Òœ_MrÖ¢’`^31¸Q$ÑPh£5wj èÔOpuñ÷Îj£†vOgwtO6Àu,ƒ ôÇW—gj¡ JнÖ| 28Ge Sn­§t! BŸf‚òGMºñÿG@—:RT f£?:¨RRœÇzêà&5l©”cÃs-‚I¸@ò‰Ö„'èOQ¨ƒåsgd… H„=GèYѰ„¬'†O…ne†óçTR¨†4â Y²%²`'£°>HHN8‡ã±†€€˜…7ø@Ã%_ˆ˜ˆŠö1PåR#€®1ˆ…è€äˆTñ‡~Ø€ ² «q‰}øˆš(Šœ‰–xŠ|Hˆ•؉ ¨Š¨hŠrHŠŸˆŠ±˜‰¢á‰X¸Š¬H‹‚¸‰³¸‹©¨‹¦‹½(‹Fb,Åh‹¿HŒ“è‹Çx‹ØŒÆˆ‹Ô˜x‡µ­(ŒEȋҨŒÏø‹µˆiØÁøŠÃhŽãø%å8†ÛˆŽæÈŒ×ÈŽ£ŽÖŠöèŠòˆäXýXŠñ˜Žî(‰óè†Õ¸Š¸pˆ‹¸ ÉÈô¨ÞXú噋ð8ÀÈ ƒ I ’…’"ù‘Ž` !ù, ’mŒ†777z—º}š»¿KJ¥vv¾lkÁNMÆPOÀ]]ÏQPÜTSÛ]]ÁcbÁxwÆ{zßgfßhfÝkjÕssÛrrÚxwÛ||ãVUäWXäXVã[Zã`_ãdbähfällåpoässäxwä||倓““™™™‚ž½‘Ф˜›³… ¿ž¦¼¤¤¤­­­³³³¹¹¹¦Á”«Äš­Åœ±Çž²È¤¶Ë­¼Î°¾Ï±¿Ð¶ÃѼÌÜÏׇ†ÕŽŽØ‚‚ØŠŠÔ““Ó˜—ÑœœÜ¤¤Î«¬Å¾¾Ì°°Ê¼½Ð¤£Ü¡¢Ü¥¨Þ´³Ýººä䈇䋊å䒒嗘圜壣䪪岲帷弼åÀ¿ñÀ¿ÆÆÆÈÁÁÌÌÌÁËÖÅÎØËÒÛÛÇÇÒÒÒÐÖÝÖÚÞÜÜÜÑÚäÛÝáÞàâåÃÃåÇÈåÉÉïÅÄåÏÐåÓÓåרåÜÜñÓÔòÛÜäßàäääíííïïðòòòþþþÿ€x‚ƒ„…†‡xuˆ‹Œ†Šˆw•–—˜™™tšžžœŸ¢Ÿ¡š„wt©ª«¬­­[®±²²°³¶³µ®wƒ¨·¾t¹¿ÂÀÃÃÁ¬»‚½Å±Ç̸ϾΪÉxËÑ«ÓØ¬ÚÛ©ÝÕ×ÞÝÞÄå®à¼çßëèíܲáíäãïÙñêëôÛûÑéÊóìÝhNW¾sýü,ØJž¾… ßý³paBfÿêÛ±£Ç CŠI²¤É“&éÔ)Cñ¡Å—±"„x±ØDqühÂ4Ð%ÁšÆðõœ¹ÓÞÍŠ?‹";XhФ1yµ©2Å œœJ‘6§‰×&O®*Ìês« -M¬¤™Ò„ 6§ÂÿàJŠGËU^ßê„ʳ®ÛTyÇò5J­Z¶ŸÉ;x© ®_Ÿ¼ÑK–hß;n¨ZÅÚX«ã––.¶u´,áÎÔ˜Ö«Ü”.NʨC~-X4k™­Y¯¾ìYâmÕœmÇæ¶ðãfAGsCå‰${‘;®´ÍÍ×&¬èîØŽFll­®±ÐÄÍðÝf﬌'0MҜ羪ÚúhOšˆíÑdÍ|ãŽiÔJ!QA;D°HèàƒФRê-!ÅT˜7 SxÀÁ‡"Ä— sÎažoQáaוWŒ!ˆ€i4Ö]§€½¥f ZiÀaEw S£[°xÅaÿZp¬‘Ÿ†ŠývVbJcÀX–{TˆXŠ}iq#í=ÁŒ6þàD&æ'Vý¥‚T˜øËhФX‘UÀY3pÀYA[©TU`]ÕåW‰‘&%räçÕbÉbÅQl†cVå’^=á`¥‘F~v::\8p¤q…ª9Em¤‡¤^ݸh=TšÊW™J—tÒIè-xÒâš+oà*âQ¬¨M8AE) €à4ªìªÅM!ÂX [°Öè‹tðk,TpàÁr n3«E¦¾b´,+ixxîZýuyE*Wˆà™iD©ÊJëÿ°ÝŽ x`Q²«ÀùÕ˜_Ö§šuöŠ ç5¶µ+‘j æÝz|ÄR!„‚”ñqžt@ëÆ´;F©§8††ˆ/¸a­c"ÈìšÙåi¨ ©O¤ÁÄx€‡Ï@³›JÚ |44ÄPÃlañÌ,߈X`¡!RSPŇí5¡ŠÙT€+Ax ¶Ï«’‹Â kt_f`¹&(ÑV p`·,X|ˆ]Ô.á†#€âxaº¯¨Ò²±^Nž\ÔðE ¨ð„‡ˆ |Ó®¸!³>Ô Wg(×^;øêb».ÂÝŽ¯2äWEÛþY0¨2ÀÿnxØ„n˜Ý QxÎÁ‚ˆ@G³73/bCLO=aX@2;«pCÞ ÄŒ9ý Uß _*ÆG‡*ÑA}«è’>ä H!D¶²Â¬öv¿ü­îƒÕ³€¯’ÅŠE j_ÄîjàÞÉÀ~XRb`à@N`Á‚:‚ t¥b‚ô>B<$ág\ôˆ€ªäTîr) Ãüpe\N6°Ÿ|Ò™y«qªpÃ7À€舋Cb?¦R0ª"g? Vrî0†¶Õ ±Ò`P €œ &º´Å.jà‹±¨.p`z`!Ä=[´,Tnd^·°®}áÆÿh€ T1xk:ä¡%ׯßi€OÀ€2DrE Á \@É$ÆÂfVXÃée¯)ðÀCšÍ-y†T¼@`°ßõ8t² kÚà¹?YÀŒbÛ XÇ‚-tA¶Øf¨b(ÁÑk“èäoA¤ 0ÀéÀ¾‡ÑáOð®c¨nÎᛂ A ”A HŒH+Ö.¯LЮ€ã0M6Yœ!Ÿ–KA4c•+ìÀÈ”‡bø¼2–ÀCZÐ1Œ3uèe%eQ>XV¡s]_©˜È¦yº"›tø¼ÐL‚yåCM«µšPPF.@ÿ0gXÀP<œs ª˜S~µC”u&d¥”£ ú}{±`Ž@ !—.Ès XƒiÕ ø¬ [ƒ ÄðÕÚQtXÃ4»Å ºÂ€ä([‡E$çoð™Â¬°HD!jhÃ2 :iàEƒ V°K&z§bSOŸðÓÆ2†7­peP‹ï©°‚2ð—)\€U€ÃC»ÐˆÂƒ²w;’bßÕ„:–_)ÒHH,`.p„0ÂI¸üàC?0¯6€„Eþ` DˆÀ4P %?¨8B„ üÀJo¸!Lh²0Ül¢@†—Æjàÿi — h­0kµ…çPi[…UØ„@èuB¸z÷'"]xi È#Bõ„1ø\RØ5DõviX2„wbi…Bsx€± VmbïY"öƒ.†_x"`r<¡]ÖˆŽøˆr`¨6ÿA‡!W–h…šX€…hˆ„x‰…ˆ‚ ˆ`™è‰›¸‡”(…¨Š6Š(¢ø‰¨È‰´X‹³h‹›ˆ‹¤¨‹¼Ø‹¹èŠOQ‰|XŠ“øŠÛ¡†Æ8ŠÀ؋°˜ˆj·‹¹Œ˜XŒÔ¨Œ¾XܨÏx‡É˜‰ßx‚[¬H‹ã¨…±(‡ØŒì(Ž×¸Šé؊Ä먿莡؎§èŒó8Œå˜Šÿáˆç¨*õHfÁˆØù’ÈŒøèû8‘ühke £°‘¨À‘y ¥ð‘’˜ &Y“p’'™’* ,Ù’0961i’,1“P“Œ!ù,“m‰†777z—º}š»”NN¤A@¾JIÀIIÏOMÀRRÁ]\ÔQPÛTSÛ\[Æ``ÁnnÁppßgfßhfÝkj×~|ÚttÙxwÚ|{ãVUäWXäXVã[Zã`_ãdbähfällåpoässäxwä||倔ˆˆ™™™‚½‘Ф˜›³… ¿ž¦¼³¤¤¤­­­³³³¹¹¹¦Á”«Äš­Åœ±Çž²È¤¶Ë­¼Î°¾Ï±¿Ð¶ÃÑÏ““ׇ†ÕŽŽÚƒƒÚ‰‰Ô““Ó˜—ÑœœÝ››Ã¥¥Î«¬Ä»»Ì°°Ê¼½Ð¤£Ü¥¨Ü­¬Ý´³Ü»»ä䈇䋊å䒒嗘圜壣䪪岲帷弼åÀ¿ÆÆÆÈÁÁÌÌÌÂËÖÅÎØËÒÛÒÒÒÐÖÝÖÚÞÝÓÓÜרÛÛÛÓÛåÛÝáÞàâåÃÃåÇÈåÉÉåÏÐåÓÓåרåÜÜòÔÔòÙÚåßàäääìííïïððááòêêòòòþþþÿ€zzy„…†‡ˆ‰t‰Œ‹Ž‘Žˆ‚‚yt™š›œž[ž¡¢¢ £¦£¥y–˜§®™©¯²t±³§µš«—¶¦¸¼¤¿®¾‹¬Á¡ÃÆ›ÈÉ´¡ºƒÌœËÌÓÆÃϭѰÚÇÜ×ÅÞÕÖÞÒÎáÜãÁê¼à»âåæñÛžØåìíóôªèÚø¶ÿd¹ƒO_3}îêÐÚ°¡Ã‡#JœH±¢Å‹éÔ1C0Áƒófó÷1à+w„î•4èÎÎÈh&O²<§Ç¥Ê™i¦,˜³'¿wq†¤ ­*Wà$‹)L('ljœHuE麕>ŸZÂÅÉ5TœT!çôæO=qœPÑ$•lV³Zÿ¥›©íÕ²<ãêáê¬X·Cßæbu*”7€ã1íE“›£I—b |ö%µÉŠÃÍ,8“½¼œ)ëµ,oÐÊ›SŸ­zuëÏ®[ÃÔ Zöåzýf›&‰¨17U LI‚ùõ%Ò³ÜLubáÊnÝ?ílL6)› NÜtæ}v£™`pìÒâDÍvè£Í|ÖÕª'lÎßþ©°KŒƒXðÁC‡Ià'à€F¤G11Uh7 T|ÐÁ„#”— pÂe1_hqI·ÄrÙÙâ†#dÁETRСÜrÎ%V›g—Ü!•p\¡–-QŠTz]9øËb¨5[NXõŠÿrQТ\UâUaá]¢mòŒN¤HGxPð2E–@<ᄆíe"|™dQEÊ´Ý3|QaÅ™VðÇ™üE‡TE•RRNE×-»aäTT(ÊPH™ŠZ\Q„=JE|YP¥†]µÉØ›ÅÀ¡ñiR£œmdGWS¥¨>(JXИ‰”k®©ç§UæÛ&o°:#6JÁÆY:ñDRX°Ö(U|‚$„ðÁ E‚ZrTŒE6VV©Q}"ï•J|@E„` Œ©WHᨬÑdS'jHè­_lH‰E&XŒðA—jH!ÁžžjEªtDÂèAÅÿMirf«¥Eg™rín|&…éŠè„lðv«.g®Cì ÈëeKl–n Ûâ´mÂg…ïZ[ÕÍS}5BÊL a—RR¡F¸pd EDè€êñ:n&Q=ËsoЀaà 7 VP„àÊæ]˜EVtVLžšl]E( Wgï>¼k>`çá…Œ p‚b9Bl‹’Å„ÌÝÁÝVéÍ·ß®>xë©&©”hÛ_w§‚7|1ƒ+@!á#ä>´'n¤<Âk‡±ZOÿ)5Õ‡~õï‘Àú>DKµsëz!€ š 0€:1…’…ÿ”wðß#ЬËëaÆÉ+u#h‰:'n¼-$/jqº¯z°ö2¡=:ð(áÛ„”F0¡X` RÕä·ò¼/~ò3CéE¤N*Oò"Æ êpØyav4žÓl䃜@:HU²0„@a ¡&ŽWµÐùPtCø<¸!55¡SÊÃ'ŒA}º ˜ˆƒöÑA !HÙ´w!6 ôáÕšP3ŒÂ(Háâ­ÄR à*‰tÃØnzÉ)ÈÀp‚ŒAJæÁ¢“Ѝt 8@ò :Kè! Ê8Ea,¥F‰1ÇZòÒÅNF‘†œ@ÿ5€¤FCâðp¦²Ý:àÐÀ ŒlJÐ@ò~£hÙØCQ°Ë]=P¬”›Pô ™ˆÀ0<^k pÀdÖ68rU0즇-´@t.ØBÊ8 kJá(|ÂÛº¤uÉk±æ6hâ dà¸:Òa|£ €¹Ü-‡OØ,AX .0CÊhFO°ÁZRa :=«6ö’˜ƒ@'Ð@OÆ©€™©ô >ðGIh…SùÀ*}à=€/Ã7P‡[FrÜë¬0¹‰ŠOSGCAM:|A^@&' 3¡¡--YN("`€ØÇÿÕÃ8‡˜¦5µ‰ 5$iO¡%z,ë›ÊóxW… „ÀA*ýåBÀ7‘ ¨€z¶A„a«7]£ fåLiuÀ§žèßÿ`”Ñuj§ Øp…Cv@ GÛ@¨  T ÀÀZƒÔÒ¦¸¼§¦85¦œît¬„J\(Ä“@Qì3¢¾“Ê„®ð Ð… è€Èð×.,ôš$×ÄVs9¡†ˆíFo"‘ \€ éŽp.¡@˜À;$á@ØB$€ X€FÀ,P†Á@8Â~Æ+ë¨!ê'šFÙ?Ŷ.‡`<¡ÎîM€ÂÿE¥«Z(lªSºô‹‘+[O¤uXœ@cRÓƒGµABêÀŒc`^'NˆEÌZÒ¢Ë$©‚…E km(5ZÔ¥.ÇŸyÚ]¢€6ݺ¸½(Û@—6Ñ2æLiobÔcÒx!Oè"ù….yÙ®+aÂÉU‹ZLÒs`“®‰'ã­‰¡à§W¨Ð®ý…™Ö|–ÚÕ ñ ‰‡4WÝÚKvùÔ.[—r¯ˆJMÌÁn™`àôþl‹@sÐ;Š. Ÿ5s )•r]¹)lJ9…6‡àÓqúA]ù Ÿ? )4¯1,lmpW 9§Ùiu®JYÿ»X¶$˜Ï ì;ÅG…'Ô/È;–Ü$°Å ý˜QNvñ*S쮤E ³rÛ°œcM$L-:qÊ6À0÷L™MY»å+ÐðèvNS¼b>?Æ’›VD+ôÜLBbwèr9rk§wèì¦'dÆ X†æ£ÖíöGå\Ÿù/zVðʨÏÊ-‰Ê5™yÍK±¤bÙÊ)R®Ù¥£…`Nôöó½oE»RÅ¡ðt¨á€i:h: K2@×]± @ÒܶUVLïÀRf•zýxÄŠ¾¹£7{V7Zú¬­ÂÀ,@]êT÷ôÕ?€¤TL:G—Kß– ‡ÿ”9(‹gï¸Õž©“@BÑö„.‹ÐËkî™ð,wù`žá]ëÚæ;¼ó˜à0ëÖéèú„Þáç{•o_®•C‡§xߙ΀î3 øl3ÎR¨qšŽ”º‘;Ul Ü¼wƧ $~ȡȠ0‚(¬á$~Ô–ÂbýMP!!𚊠‡ÇL!ÝybšÒf˜,DA-Jrº§D~šO§¨yQ2š¦†d+i̾& uV Åö|°ÁÜi ¤w]y†t[ðuÓ¦€Úp@­†&™à€†6 üä[P7ˆ•€è¡ üç!õyÖ xhlЧâãU¦Végd†Ñÿc®2 j1µ+(ATq¼C~³°7 B$¸!Ñ'z±'mÑPDAõ?OØ1¾k•ö å \[ki§QÔãX]×…Æ `(†Ah‰%…CD@…gmX‚Ž5Xq¨†eUiYè"ÑGƒnRŠÕzn(ƒPX‡‡hˆZˆQÔõ_Žøˆ8 F†ˆ#‹ˆˆ—¨ˆ~¸x”˜/Ï‘ˆœh h‡׉³ÐAóÒ+¥(Š™Xˆ¡¨‰›HН(„´(‹}H%ªèŠ·X†¬ˆ‹cØ‹¾¨»X‰¹h‹ÅÔŠ®hŒ¿2в¨Œj‡ŒÍŠÃ艖¸‰ÓxŠÅ!ŒÇ‹ÑØŠ×(ÙH‹ßdˆÅ(ÛŒ°È‹«˜Žê¨‹çØŽÉhŽËÌèïHŒbóÈõh÷HåhûˆŽµ(ÏÈôèzЈ‘Øù“Œðh¦ŽŸ(Ç! ‰ Ù‘†@ ©‘ i–!ù,‘Æ6‡ ###***444;;;DDDKKKTTT[[[dddlllrrr{{{Mx¨aˆ³z—º}š»”;:“SR™QQ¤PP¤]\²GF¿II³^^¾\\ÂNMÀQPÀ\\ÎRPÔQO×TSÚTSÜ_^Ý`_ÀuuÏtsÏ~~ÝdcßhfÞlkÜrrÚxwÚ|{ãVUäWXãXVã[Zã`_ãdbähfällåpoässäxwä||õ…ì‰[æ™QîŸRä€~ì–oí£\ñ [ð¤b‚‚‚ˆˆˆ“““›››‚½‘Ф˜›³… ¿ž¦¼¥››¯––º‹‹¤¤¤«««³³³»»»¦Á”«Äš­Åœ±Çž²È¤¶Ë­¼Î°¾Ï±¿Ð¶ÃÑÆŒŒË’’ׇ†ÕŽŽÙ‚‚܈‡ÛŠŠÔ““Ó˜—ÑœœÜššÂ££Ã®®Î«¬Â²²Ä¿¿Ì°°Ê¼½Ñ¤¤Û¡¡Ü¥¨Ü¯¯Ü´´Ü»»ä䈇䊊åä’’å—˜åœœî¶„í¸‰ë´‘å££äªªå²²å¸·å¼¼ìÁœüÉåÀ¿âɲéлöÏ©÷ЪûÔ®ÆÆÆÈÃÂËËËÂËÖÅÎØËÒÚÕÕÕÔÖÙÖÚÞØ×ØÜÜÜÜÞáÞàâåÃÃåÇÈåÉÉåÏÐåÓÓåרçÞ×åÜÜöÛÃåßàæàÚôæÙýæÔäääççèèçèëëëïïððïðóóóþøóþþþÿ_ H° ÁN l5 Á‡‰H±¢ÀK3BĨQ£ªS§&Red«W­@¾ú8R`«K—Bªº4iLš5sê´©j&I1S*|ÅÑ%H“[)}X´£G§PIB}:5cÓª¯beºu FE)`âÖWfÏnT›•-A¡/‘FL)õ•ʇ*1Ò¼ôÑ&ÎI–rž¢ùs$Ì–Ojí™ñè]‚•JžL¹²eɧ.kÞ\93çÏ—=OvK”4WÓÏ>ÀšµCµiQ—–=PëÙÄDéRŠr¦m»@÷Þ¬‰fΞ"Q‚ <iS¡r!²ìùø¢rÇØ³k×Þh»÷ïÙ»ƒÿ¿]¼ã“l»U¯–}ÆI8˜âòllÔîÏæwŠû’nŠÁíUWA ù’q:ý5 rC­4ØH,Y7HÔ5ˆWƒ¸Õvyžb^‡~âx"f¶m¢¸T  WÕ}¦­X•ŒÁ“‰x#޽d—pÄíTÓ` èXŠJõÑ€F”¡uÐø]‰RzGe•áeç¢~(JH1°%T0’¦S¶±4fF,‰Ä¤@=Å9XPÊÝHR+,Éô’_ I….J–œ8þgowVWZ”XfÙ(xW> R‰kÎØål_Ò&æVežØ¥V VZžþ]Hd‚'µXNñj_+íÿ5ت;Áô&’Kú¦P²RXFŒJ:©°VË–žªø©¦¢fÔiz—^Rf¾a•&„8š™€3·—ÛÕÙ§¬¢6•Ý…ªJç¯ë¡»ŽÂ;,vÍ¢í²²mŠÕ³íÝ YQ!Õ‘m*u;‰RÅÕ$UH6%RL¶Ä+ŸÞá˜WM÷¡Šj¬°‘‚,ïQ”&›©²²µÈ)¾(×6É„[jPÁ³*5'‘ »:-ć÷—BÞ5 ï¸%°#‡,©Ò– -˲Y háTür µ]"µ‚ LÖ>´¤ÁÁ)¤ O 'è×­DÝôWL‚ÙÌ#˜€úvžÇIL²ÞïÒÿkrÔ[O%QPôÈ ˜_F<”õVRkªN ÑQ 6,PÚ~ YjA)ñ™9«‰ÖµbœÐ xÞò2Ý4ßN÷¸™j5ÂZ@„AÑG¨ü…ôxس« yDqöävÁÅ¥{v‚-9ùvŸ~òU=¦sÑûQ¯¼A™7ìäûýtË€Ÿ5Eì³ÿ@Aª Ð L¢€M/3úøiT÷y‡9In†ž”¸m81AçVÏäÊn,á٢Ƨ7×U)vZã_ŒÖÓˆ¥@¤B€0Àq³£lHU¹¢•jNÆIà`å ˜lH.QXŠ„$ˆpL!ع‰‹ÿÖ:¾õ‚G©œUüu²³$€5 \Ì…WLâ+€BQ„.vñ€` £ÇHÆ2šñŒhÄÞEÇ*ìµ±n¬•ç˜Fá(0Hp¼ÉGÁÇ>úñ€ ¤ IÈBò‡|UÉÈF:R-P€ðˆ,À hz¢€ÅW@+ú›Jä–hEçr<b'´ ÃPº«åç$Y©0°-͈”——ÂóaÅPNÁ€× äp€4§P„@@¡7hšþʇ؉•_I:‚t‹V6ñVæÖÅ=>oBwNHV‘'wS˜å‹§ì¶ùÿ·© ÀpBÈá DhÄ+ŽÐ€Ü*”P¥E$z(ùg{‰Óætb!;JE2¶:U‚FWôäç%3'cŒ¢ÿ̤ˆù„©>3ØÄôm¥da( Q{³*¦ä‘GxÒ­öÒ$Ž iMhµÃÑiïs1 ž0 ?‹ÆJ¦H„×0‘ÇOcnå p([zÚж5m¢jcxx¶¡|YNR‘­VàpSëB(伫™Óª/Õ*0czJbvuŸ[Y@kÀ¶ŽUrL,åL”83¶&§†p_€4$»¦3Ù"JÇr øu¯†™*VWkOdyµ‡ÍH$ àÿ °ù)ba;•³ñ¥¨F9¯x‰§Î ‰a ‰b2¤±‹Ø&§Eí$VáËGÝsD× ‘kwË[›bÅ œ¹/ÝÒÔ)xJ×Z°Â9jIO$0䋺úb“U%ÐOø­‰Î…RÌE÷-DW%á“*__ºD¡hÂ0¶Œ¥ìjWÁæã.7kZ¯´¦5XYlœ ÕKg ¯€“.†Áp$ƒ9Ú‚û½¼ª€-Áe‹O <ØAšàƒñ:¶6ÇDV!§ò¸ùÿÍ x_y‡ŒaJ­fu–/úQ°éAÄ_p’ä£+%Qú/»R ;ðá(0.3޳zd®®Yͦ‘óœ/i;cùMyÎÿcWŒ”MVwJÎr0ÒÔV=¾jEÖh2ƒ$Ò5N0¥);ëÈ:˜-ú²0-­%¶X1ö`˜<_ÎÙ.mC•ïòœxÖ³Ò\II—¿æ1KšÒÆÚêþ8ýZ`óÚx&¶…všŽ¤×EÎÛÑLÚ5'!)D7ΦÄaœWÕíÝ¥eÝ‹cŒ‡O|›µá^pÝOs ™Üå®QOÊ•av'u$ŠqÒÄé”Ôá·a]#»ÿãdl³îžÿ °læ„£yá;ö.i‚µt›á3òÿ¤ •vNy²Xqˆ”@ù$г¡T×R݃ vÒIlx§c>ós䱤¶(;"êÃ8 GWÁw¢ÿTe’§m LŒ¨³¬À“ÄZ‚'?3ÔŸ>S˜OýîS9I#0"ûØ|ëZ_»3öê!׆H·!Qˆ³ø´SëιÜÉF;gKzËÆÂ<‰®nª{>* Â$ —[­â Ó9Æ#„äÍaÜ•Ö;Œ«du£ëÈM1ðÒô¨“£Y^d-¿<çoŽs;¼P@îPzÔ§9âÒq[a¢Þzq ±7êýÑÇó kÌim {ÙÿF}ßô\øuï<Þ¡¯‘$À+Ppóe^üç‹MúpZiµ?{ oî0?'a÷=@q\81–`R1w.7wrG}Æ'uì—G@8À|~gzesÊÖ,MqC€ÑJ·ðÄ.©'_ÈEt\ƒ@‹n ÈZV·^XVjÑ  ^ô±ÎgwøWŸf9.s#ÖJ‡&r‚!óFZ{‘*ö¶9ö…1¿÷Kçg…éG|Ÿ'N1 â1V×yDx$FevÈ3#É…ê”_+¡©Q~¤k2È…¸‡ñDEóWö7ˆoqte¸x&fZ¸7fƒqÿ¤0ÙÂ0M&‡ma‡â €€{xHwHˆ@ȇI“TI—T‡“8 À§…uåk[(þwˆÎfb6s@@e õ'{ZЅ â 1f- WÈrYxz?¨…NLÊÄLä%½ó;GÐ0pÚÒ„ 3q½3rä9v“R·C™q "xYŒ°B C@ "fÆ .`žà€1xlãHŽI%P?òó ôÓP(!o‹çXƒ…>õ‰‚A{n]—6ôÅ'¸8T®ŒP ‰ÐBàX ¸v e`š Â÷rêÿ§‡¡X#9;õA!¤Uô  ~A‘ge‘Yç]ÐE_¡SR¾e1¦eEƵ ¿Èp¸#”¦àŒ C0âe4&vÀ 6‰~Ÿ¸“ x!D`·¢ STEB)°E^ôEŽÔ—~ù—€˜×óqr~$¥Nt„˜b„> â=ÐŽ€H€d- ` 3@p@™žù™ ùGŠ$˜¤YšbÔpæf 0”‘Ièá»Ó °&Hyˆô·~ˆ•h§qd4Sõ¹×0RÙg*¸•q’)¹’B{€€  |`4P:@“ ‰šHX˜‡é–9iEÿðc­QPÏMÓTIE€§xuaèSâ(†ÿb‡é(¥Gé’\7s݈'ôhBÀ×cÐÙ!ž:@Žðbz€rÉøeÎè¢È–ᙕa—€P õ RÐP•R›4Ÿðé]WI˜÷†@÷• yò ô-FÓÃø?@“¡ Ž6"/FfÝcÒùe¡À ^v øä€3Øn$jƒX1 ÐfpÆš›v›¸Ù–Ðh7NK{²‹dCÄ1=/Ã\϶¥òÅzLw ; iv@c—hyà!È8c1 Øi~»¦“ žù#ôc楂x§ÐØ]QRiC$ï8}#¡0m³ ÿ"“ÇV&7Aö \&cR²v epvÀd zp– A€Ü™yfv¤*‹S:*sˆ:8‹ß)ŸÞ5¨“6$˜eDÇxÆÑdØR$œ“€zf9Úæe|¡R ¡ÚÞv c&c&§1fk›g¤vz¡€jR°à® p±ÚªÝZ¢Ý¥K»‡«½rC’,u3Óƒ@dÚ#D$¤1Æjº‚€z°r(w‚°ú£0†hI2¦ šàe§ )©º­x¨Ç@ž}*lIª¤ëCæ(-Þç'Ä9˜:Qôz*+Ú®=R Ôu¡  ƒ€–0+ÇÿÚ ±m1ö ÖjbЯ§À ƒ  4&§¥ b†­S2±³J« à&²æ§²Z¡[¶'G%K˜97‡×F•B!ÓumØñ ^c5‰£zÀ Ìš©vp€ -ðhß6€: 8`J[,ÚÚ´èzµZë¶å“ãƒRJ±N›lFfH_4‘€Ha>#ò:=ÈQ$ÞÒ¥“+¬¶#ÙÁ:€„€£3&f4ûb6 a–4»€@6€¯À%¸åá7ª ´Ø5|k¸ÜZT#U®Žû¸æj‚×o8QCÂõz‰Ú‹øÓ«„'Ï–98&­ÿXÙ¡ ÔyºÝÆ r: 1:`x`¦z 6±7z³ ¡·,pAh@ª;;¡Y¼ÏKÀÑ  ¼€ÿ)žïé±›a{Vˆ¼ø¥Db3ù9Gœ»¨ÀµÝ«o2¬evW•Èh»ªœ0p¥šŒ|P2 6: c5 ?€^@”¯0¤Û» á¶ž·ÌH§ky¼JlÀµ&$M ̼„+ÁO;*‘K]"¦<Ð=]º¹ ÓÁZ º§å0ô´Ñz|À;c§€£1f:0Ã6°Ôù¾rÊš º¡@?0ið M?'ħÀº ñbxÿ{‡8™µÎÛ¼GIž¬±±5§”KYÅZ«aæ‚!µâ+ýu˜ŠÊ5‚ßâ*¢Òrs ’V ˜ f„€8P4\“ÙI„€@Ç,Õ “vpˆ ,ð‚<ÈmÃe†œ¾ëû¬ŒüŒ É TÍ«Œ‹ÉÑŒµ§^›ŒºiÍJoïXðf+.±NLD ì,H cf8@µì„PÊ8Ç4Ì46ÌÅ|ÌÈLbpº»7‰ c/<§ÏœÄŽ\¸|)îiɱ(ÑIIo'U䈣5]º[† K Z V L€Ôi}{ºÂ›3¬d@Ë8p yÿ¼ÇÔêÇ€ ÐÈŒfù¶lÐCœŒGŒÄœÍÚlÔ?<Í|^ÐñŸŒâzñ$ c€51*“•‘ Up0ž@v°ž€ÈÙAz@Ï4°™2 § ¶É˜Ã?P Ež„\:@©@}˹Ü(¤Z©ýЃÔ!¢HÚÔçJŽ¥ÔFÕoAT¾•Q.Ë ªÌÕ^=§à£ aÖŽ!§:P6Ð{p9k³ Ës]×vMݯšG»0æ¬J«ª(HѶi،۹MØŒ­ºT{c•ÓÒ=Û2U˜€" %}4íh6-V€UУ*c„ 5€g´öÿüÇ,É;MØÛgݰk± ÍÄG]غŽŠ½ØLÍAÎ_·=žÅxÌX1±Õí¼•ðÖkk.í,[ðÜ5© 80Ã8¦Þá :pÌ€ÌÁ‰Žá:V`-}F e`´ëÔwªQóýÞ‡½Ô—l¼ =Q”ó¨—…Rš³ßX”ÀÊZ 5{¬J \€ ’€P rºà .þá/F# ‚l—páM€O_{½—°NÓ{«Œ‹­¶=(CÕ-®âJÍÛ#Jß)®Ó²'¬FTÛ‹ÑzÅR/¡Zã‘ €G ‹ºÚÍÝÞ]ÿf2@&àÃjIÙälðA¬4Û&œpèÚQ»6Àa@ÊZÔî-ŠZ6Ñj^ˆ½ª,^‘ñ&–à\·jY‡z‚ÌÓ«–DŽ A ÏÚ€Û¡0æP¿Ð FÏqÐA@”„Ó+“J`ÑÌ´æ-0æ âi>¥?ôí§~”«Îên.îÖòê‹:JÒ5þ¦h¾± –Í!Y K UàÎ<~ hí¾§ðx€Ï}›ŒÑªì u°“ém/ÛÁ  c¡í›>f"®ékÒȪ[ánêã¾æ‹îTjâNçí[ά©ÔX6¢çã ùÎÎKÿàë0ëe‚6`Kz Çv è%€Ð ð…sá¯@é¯aMxóLñçšÞº–êºÑ·í|vþÀÈÖ%¸%‹³¸òÍÍÕÛíã¢\’÷ wuãAŒÆŽ³‘РëØ1pÕéÆw,·vPð/0! .p ~W4÷"Bª¦ œ Ý9õy;ÛÎ|dƒ±„•òn_ߪh~ö( n7<ÅSö­þâ"O UѤ¡²ðæ+çœR6^â›pͶà‰+€Щè›IÏ8À ž@/pü/àÖ“0PS åÓâÉHf‘o»{KR¯Øcÿ¢›,ûWB“gmÎÎürf«W9sžÚ¨êÔ¥K:u¶êØŠèO¡I•.eª3hS¨Q_=•Zªª8£H0€ÁÒ"VÅ:[–jY©g£òT•SÕ¤SMÕ¢UÚ1ç%Ÿ8—m»3nSŸX©ù±±´\a:çøÂt?8j,ÊÂr=<]GR'ÀÀM€€ôy MÐàÕ³ƒ#FÓÄÑ1Í£Á'r2ÈliYQ’2μNŒ¬Œ:é¨N«À²•pdg,ß9KyÒó{öÔccô™¼zuz è@ zЄ>Î0v Mè¶Lêàad C¬ˆjУBéÉY–×ùŤðD©TTê³–®ô¥µŒgcp©K^2õ—v ÷,ˆA3S"2P¦Óú'5žñx±=&¬cкbÊjz À@µ0P*BŸåšGêÁX]Ø«,—+‹4Èâ'=,lÔ‹T%e À…“ÀÝl«3{Ñ(ëÕÍ‚ÕÓ¥n ;{I>àAyØ„ždE«“bÜýi<” V²ÚÃíà1‘$ !ò0ðzB‰M<ÅÚrÙ’â* ŒK ÌÜr÷¯Æ2§[b}.T,‹;ÌVpÆßuõÊ ëIldÃCx™À.Yî8…Û\¨ê(’E§Š§ á;8º—ͬK% Ó 3í°9^^ç>瑃žByzZ(!ÑáÊÿȪ¿‰pH—fB‘Ƙ)®…¹ze,ã˜Ç²Ùñ–‡Ê¥F`ÈŒj⊠ËÅÅ€Y2R€çä¬ÂXÊ‘ª±³ÜÎsÐÂ<î²—7ì°‡ñIJ± JÜÀ‹ÅÅn¶ß¢×|Õ9 …Êk¬³tOšç7î9Ç}ž !$Ú™ j´ÖÚÞ³ð-3Ï€!3 ^¢•ìUø_ÇËY LR9GZÒ3Îõ5[éËj:ܦíaH7¬by3½} /Ó@fîÑManÍš’›Ì-Œ9©6ƒu/^WؽöuÜ„}ab_’¯ÔSº/l¶5 -ɖN¤W×ÓRž´sÇ-î}ÛyÂÿçÖ_ºêÚc7ÆÝú3j#F7o/E„.‹³ïÞà~×ÚÊþ7À+ìå7i¢Ük7ÈiÒð‡ç›Ü°+ð  L–Ž«3ãÛ¾t¹½]ó›¼0é6Û4u¬óÀ[Þ*÷x½IˆoÄZç?k€N  0væ'Œ¹Æ«nõ²]ªv|m®uÚ6LÚ;:‘ ±í$s!X),†9ü¢°€¬¼¢˜‚@ç‹Ó›ãyøÇÁÞÅ~ºà˰Çi§8gãüâ¬m£ÜȆ;8Qp@ÜÝ%0lêQæ{Ñ÷Þù÷Û/ÅFÙÓþxŽt¦ó"ìg_ûÛç~÷½ÏøHüã'ùÍþñ›ûì¹û¿Ã~};꜑ˆ€ùlå^é°ÿ5ÿûo]Ó#½M¾o 0OéÙy9‰{¬Õs>kC¡y„(X¼ó?ë½Ýã== @,@Â+>0™Y<Æ’ È{½ ÜuÑ )p——Ñ?‘<¬ÃÀ›Ë¹ü@D7Ô»6d¼8µ›, ü6Ô7ß«Á\¹ÌAÜÁÁ'n§tÀ´Áç:ÂÃB&ü¿% =|B1”Âz'#Â"LÃHÓÂÿµÛ85ôÂÏ@'>(½\ÀÄz+t@+ŒŸ«£¹8 DAl¿«C;¤Ã;œÂÅBB.ô<]cC4ij/ô·$Là+¹1 Ã$.ˆ{¾?ä¼o{HŒ<Ä7„CB$>ÌÄN(ÛÃR„ŸQTÁITÂA”D,ÄUDD2ìBTüE~‹EªkDJ«DÁ¹Ä.1ÄàÓÄV,Fb¤ÄPœEO4FP¼E`\)dä²]dF¢sÆZ4Å5Æj<Å´FläF]äÅMôFsäÀ9“Æ+|F[$ÇrLE­SFLDGãÓ½vì»hG~ÄEztGsCGUTÇf„ÆoÆüÄqHˆŒÈ‚œCƒ:ÿ¼ÆzÄÈ,ÈýëG_Ì@{´Èm¤ÈnTHtÄptÈ€ÔÈÌȉLG„„É„œÇlÉTÉŽ¬I””Ès$I™üɤ#HdÉ®‚GXÄIF\HÃÉÆcE ÜÇœÔIvLIj|H¢œJžä¬Šɘ JTÊ• F¤LJ©4ɲÔ8¦ü:§<Èu4ˬüÊGäȬʨ|KKËɧ´K›ìË¢”K²äK¬¼ÊßÛJÃGmìÅ$Lš|GÀܓ̡|I¶4L»ÈÉÌL¡Üh€0‚ ˰tIÒ,Í`³ÌË\K¨œKºdMú#€#8‚(ÍÈ”Ì̈́˳´DÔô2ÄlʶlLÿÆǾ™؈){Ì6ËäTÎIÁKšèMßôÉÕ LÁtËŸÙŠ®ø ÜCÎHÔLܬN´ÜÍ-ƒÎ¼TLÛ¼M¿ü‘åhŽê³>ù{OøŒOùœOð ô»OüÌOý¤õ£Oÿ|‘窑Éî$ÅÖ¤Îà,ÒGÝÓCuÓM­ÔSí›OeN•TTíTHMTNeTX%UªtUGÍÔW­Õ>µT^eÓQµÕ`•”U]ÓîÔÕ]Ue]Ö\õÓfõU6*V\5Õ_VYMVfÅThÍVj%TVmU>µÖk}VJÅVrMUm-WU-ÔPýV)mÓXEÖtE×nåVÝaWPÕqWzÖ}åWZV|uWC-ÕxÝVsX{=XuõÔ5Vp ×åœÖÿzMØŠµX†ýK‚-Xxõ×ÍØjX‰=Vy½ØuÝØv…؈R Ù•íXuV‡EÙ|­Y•}×aÙ‘}YǤY‚=Ê›åX˜W™5Y£½WŸ Z ¥Ø˜-Ú¦mØ£}ZIyº¨£ÑœÕY–•Ú~íU¨mÙ…åÚ®Û™»º»»íLZ¦[—ÅÙõZŒÕÚµÍS6º¼Vȼ³ Z¡m[µ Ø·ÝÛ¯%Z„=׸…ŠÙ«½ÛK iÝY¶-Ù¨õ[ÁÜ”UÚç*ÜékOë»\ÌÍ\ÍÝ\Îí\Ïý\Ð ]Ñ]Ò-]Ó=]ÔM]Õ]]Öm]׎#x.ûÿ»¥xÅ™µ”Û…GÞ=YÿÝÍÝßEÚ®’@ ´ÀÚ%Vßµ]àU^áeÞæEÞç…Þ६|€\^éu^íÝÞWÂÞîÞÙ]ï½ÕìåÞðßé]ð=ßõÝñm_)k„Ÿ‘ßù­ß}¡ßûµ_KÁßýÕ_JáßÿõßP`.`>`N`^`n`~`ŽàVP€Ø)X€¸`#P€øÑ¨˜í|;8ÜãP€)`Ž ¾àNa)ȉþà㘂ٜ X€¦Ú\‹ûH€ªm„X€¦‹Õ‰˜P€©³a·`€øa.§n…H€À "6âz‘bÀ‰*Æb'¦ "P€ÿ¸½GÐ`©â¦8ã4v:Ð|76``€F€#¬8) »( €G@c,€Жˆ‚" €9…D>x…;Îã=¦‹æˆ‚#UäA6^´P… €."‚¸²µ;´0‚H€œ°»G`¨[#ÈdΉFhx’"‘åG(¶ Påœ@€˜„ˆ‚T6Û±`eW~… ~d¦e[. p€G0€hæWfan£x„P®Û"hØôæ)çP¾‹ø u.à!‚¦#ŽIˆf(‚Âuäq`d#ÐÎ0a3v€Ÿx„y®çà˜„0Џ„}ÿ>~¸¿I`äo.ºµÛ±8ãhV9ȉˆá±‚€¿æ°ç ( P®hm€"9…¾åWðèœX€°(‚ i“Fi± 1öàÀ<‘Ž‹(˜é±h€Ùl…PæœxÏ\êºÝ©Mž>øŠ6`«~… î‘(€GxéœÀé6U`äøa0jºh(€H€²>ëã0€€»cëWpëà˜ëW˜‚h6 \ÛC )ˆf·H€èœøLºˆéVgž‘Ip樶hì‡vl‚¶ŠÈÎ )€)°ìWÀl´Pæ–>h„¸ûl1¢Pÿ\¶íÓ }‚¯0m²>d³ÖN¹Iˆa°‘W@j›ÑãGxhÄ~>ްÀºå6î€øÐãè¾½ìûKíW0‚pìn öno`€V€í¾²ˆéGVÉíW˜„¯n€Æ¶íøf ö>ƒ¶;üÖo«ÀâMÇ–@G‹(¡Úƒï¦Øð—ÀIèàSqyœx€¥ÞÑX—½„8ŽVHá€máî/€¹kñŽŸñ'ľèŸ>‚Ù­ÛédoF9Ü)(iI®d±ˆé3Vx釦cO&pÏ nr‡ìÿhŽiU(¢®ò²H€åûÛê.‡‚/¯ ( ü-€-†sÚ]Š;§ßFHaÀfì8/s¦l"¨êhôG(nV”Ci"`Ц tïCFtE'ŽM7xôHŸt$ÿa`€DWâ­@º`oH€F'‚Vâ¦n´ˆiØn÷í»Fu€ëž@W7s“F€ÈV€Z¿u¨T@p¨b·À^·ëªPw€xht˜‚V¯s¡ÀöFrñwn…δr´x"xw"¸=GÑÂûΉG@pž^Š\v€¶P÷`w´˜ϤßyÇ`úUÏ”îêuÐK¸á"€wÿмGš"Ø Ï z¾aÈ>øÎDé…Çnz¦õ©˜xš†÷R6kÄø®.‹#@ùK@yùýx¦xyxw _y ÞyžïyŸÿy z¡z¢/z£?z¤Oz¥_z¦oz§z¨z©Ÿzª¯z«¿z¬Ïz­ßz®/ú)`€§0…îz²/{³G)#ðåœP€¸;{·{¸‘´—n¶Ç‰" ì9~&‡„O/E4^a?‚¨ZQÄ{•Šh…‹#@cÚ›„Èà|{Ë¿ü9K{nÈ `íÖ^j€ ‚ÎUøü_N{híCþ|ýÕ>(€ÿ×ñ^6)XíØeÌ/~ã?à´€À&ýZWî`qèq€¾€˜„Üw€´ŸÍðåpþÌ{g]&oàoíG˜j?~÷]›ûµgéö×†‚Ñ~pêUA)¼z¥ @+Y@(”Òð#È"G’,iò$Ê”*W²léò%̘2gÒ¬ióæÊ‚>l5€@+ŸZ `تÁ‘I @`àÕ© Fy•À¤ŸA xUk ^ªê…;q²mëö-ܸrçÒ­‹S'OˆEp`äUцÄfœôÿ¦ àÀ«½}ÿN À¡ßWGø:Ž¢Ö.èТG“.mútÈGD¾ŠB¤! ªFöøêlƒ`çÞIµÁƒV°eÓŽ|äÕ”Õ §äöxI9êèÒ§S¯nýºÉ‚¬±sïîý;øðs£$P%þ<úôê׳oïþ=üøòçÓ¯oÿ>þüú÷óïïÿ?€ 8 x ‚ *¸ ƒ :ø „J8!…Zx!†j¸!‡zø!ˆ!Š8"‰%šx"Š)ª¸"‹-ºø"Œ1Ê8#5Úx#Ž9ê¸#=úøc…R\2$‘Ey$’I*¹$“M:ù$”QJ9%•UZy%–Yj¹%—WVÿWaŠ Ar]BÚ™¢¥©æhk†æ¦]pÆÙæ—cŠYf\rÖ¥ç\|öI' o¢¨t`ÚI¦™ƒ²I蜌 Ôj'žpù™è¢™‚vižŽ>ªéIpÅoM:f¥oqj©§t­êÖ«°¶ú'¨& ðÈ)¹ 7Ò®ªìÚyý*Ò©wbZ««nªl£ÈÒš’Û!ôÚ$c€@§`€Q¨"@bøšÀüE졈v:ëºÎ)¼ñ6‹’Û ®ÔŽeÀk <ðJ#Ѱ“D¡À+—,Hņ™ª¬ì²*±ªÌ~ên»ôâšë´¯TûŠ…Ü“0Ü$ÿpÕAñòËéBÜV¬4S\1ÆÏ»lÎ E R¾Èí{Ð;uJW^9œ*ª@1lC«;qÏWmóÍX_ÍVÍE9ðõG öÐ^ E ¨²PSHAœŒî¡3smq²Yß­7N5ï-¯IE18»á@#¥±« ÑŠ*Ñ€mR4àà Ëü.Ï€_ܹçφÎy[ªÌ­’Ôv÷·è ïüzÞ[¯ì#µ?â·I­ÁRê¤{ì®ï{ðN€F ‘Ö»ÎÃ7ÿ;ôÑ·îüÄ÷ZËoþ|ñÒOß½÷ÜO«DÇ<Õ£‹O<ûí§/|Þ•)€}ö£¡ÿ³ì7á®?ß³«¿þÄ’<†Ø¯üËßÿ÷¾ðg­˜!(-Ðì6Ù_M0˜A^ƒTÓ#Žp‰#@¡„P˜Âòv BCPoà{¡û\8¾æÉˆBò”g? ”a ñ?6PˆqºÄN!…)0q “Há [hÄN‘ˆEÔš#fúaÏ6¡)}hE ^‹R´ÚiÀ ä_&9BØÆ(Rg4cñ8Æ*Òê Â%Œ #$À|Ù!`P@’Ȇ,ò#™kXïø·4Q{´¤qF„|Ä DùŠ @kÀs"`h…ÿ P.ŒdŽ=”¤ÿ(YÆ\ê’™ŒXA@„à8I׊ga Ë#°LóM PÅ%’[Šñ—vÌã$q™À^úr]­8€F®i€s•¤q‘!—APªWàGP@X!`0{Y$ÁÉKŽSœ´àã5‰)ìæ6%!B0…\¢8D‰òL""úä'Ô"ÐKbr—%i8 zÐ71ç²yé0‚¬à3¸Á~0„#,á S¸Â&ð¦ð’•-ïÂþ0ˆC,âÿ“¸Ä&>ñ€7Õ¦|d X@‡Q,ãÓ¸Æ6¾1Ž-¼©K Ï“HoiòÈ“!ÇF>2’“¬ä%3xYŒ@ €Â–\âtx  €ã4ÄrÔ˜,æ1“¹ÌfÖq³è:Á•L¯hT€3Má"‚—‰uæ=ó¹Ï~3qQÒæÀ™Çk‰‚pLv¤È~4¤#-iú$ƒnœßÌ—ÐÎr^sd&-êQ“ºÔ®´I.ýæ×åDmQÀ€?6Äeÿ45®s­ë2£º$k –ŠðÓ$À«hÄTùGïºÙÎ~¶Œ{]‰ÈUfã€9'€ÿË­@c— íq“»Ü–6Itw¹'BÅ pÀ™ŠÀ0(9Ìæ¾7¾óaẅÙúþ7ÀÇn¸ø;à?x©n*„3¼á’Vx¿.ñ‰Ÿâm)8Å3®q[\Žÿ8ÈiÜqœTp¼Ç}-jQN^©–“åü'Ìc.ó™Ó¼æ6¿9Îs®óó¼ç>ÿ9Ѓ.ô¡½èF7zž Õ^ß.ý‹M§àÓíRr¨K*êu™ºÔµËt«ÏëYßút¼N±ë]7»\Èžv­;½ê`o;Üãþõ·Ï]îW¯N½ë’w½fïtñ»\ø¾“Fðp1<¯øÅ3¾ñ.Qt¸Ä6 ÿ`¨qB,à‰—`§åΟU 3[Tc€-`S† rãÆÌo.HÌ…0€ÝocnPÑÛL PÀ¹Fy¶4¢õ´Q~æOƒ4b¯wËîC°)82/À#””ô £p„‹Dàü\¢aý¨·Iê_ª™>Ân|ËL)EœÂ ›a<@\ À#ŒM\ðK#@l_÷áÄ·AÀ%X ÷Q‡œ GìÅÅP…p¼QÜMp À6¨M¸ÌQ‚” Ê…(ÀPH£Y…•Î\»Û+ô_\ÿÀ$ É$¸=ù\ Àqṵ̈ÁEÉ8ýK ÞD#ðAœàR‡É4„NÉE:Ä<ºE+0ÀÙð—ÐR\ˆÍSMC|\< F´‚j•[øøÄADN\´Òñ{)@º@ÆNºņ…*Ü `¬¡L´YPð &‚Œ&žÆ¾‚QÅÅ~âÈÀE €Ú M—ýß[¨‚XŸ¬R¹MMBÉíÕ[œ YÔü F" EÁdšC„.¢P$ò€ù*FßK4@+ À楡5ŽÆ·ö˜a(] J\@4Ô¥-ÀäÝ{1Àè•J6ÅÿÅñ-#þ \[,QC @#Ànüc\ À™ôŸÀù„ªä+@Áê¹Å¥í9E^Á„ÓGp«™cu¬Ì&…"†Ò#@ ÀCº…Àׇ'm’ ÎDÀUMÂÛÿÑ…ùøÄ8À-¶EûÁ …Œ ÂE÷!ãjh#L¢[Œ`CtŸ—5"Nø„<åßH–äI Ù–ÁÉ\¥I^G+,>²aÉYNpÌ!ἆ*ô†\ðT¬ElÈà]4Ä%\NBŽÄW±Æä´c[Lι<Âå¼$MHAÅ^qüâÒp™YVdL4Âå°Æb:ždN&eV¦e^&ff¦fn&gvÿ¦g~&h†¦LP)Àa>^7F†¼^l¼TXi,Цl¢m–@ UK, c& bôÖŠµò0åL€²Í¦qŽDX ™Ï)4 솫ÉPµ†Üæ=Y1Ä$,€IVÔ¬Àë­ØZÀüݬÅÁ„žf$œeÈä_ŒüT0î1ãqÊæÚü Tœ‚EÀC`ÅgèæŠ :1bF ° ÏRÌÙQ ¡@œB›uÅU$€\QqËÀ Œ F¶UD_˜,a#GæçljVå-­58À€B„xÒÓÉ, а@T{aZÁÚÀ$ì…—uÿåÄ’9þ˜*çNp ä€ `ÐnªèfîçGÁË Ìm,ÄŒ…A€Œùèf„„ú(H¬$‡XœB=@@#`x¡AÜ ÉðW Fò@\)–jæ`”ŠBäcŒ¶FŒ*Ä_§˜ŠL™†RClF|ú…šFèZÔËÚ ŒadPL2^È@“òW,Ì·ÀZBÁ# ~ªgÖYòìFXˆè)h_Ž©”éc8’c ÆPT*ÚbWSÀœ@´ìh+ªÀ¡e P8Šª«®h0€ð1ÒpkšH¼F¹ ÇGTÀ¢*¸æÜFá€"DrË<ŽfäFš4N·"‡lp }ÄX¨«r¤Ž!ù,1Ɔ777˜XX¯FF¾JI¤ll¤yy²gg¸dd»ihÀKJÏONÃTSÀ\[ÑQO×RPÔ\\ÝTRÜYWÝ_^ÁmlÌbbÏ}}ßhgÔwvÙxwÛ|{âVUãXVã\[áa_âcbãlkãutá~}〔ŒŒ”’’¥““¤¤¤¬¬¬³¯°¹¹¹ÂŠŠÊˆˆÂžžÏ““Ý܈‰Õ’’Ü™˜Ã  Í®®Á±±Á½½Ï¹ºÐ££ÑªªÛ  Ü­­Ü±±Û½½ä‚‚䊊撒䚛䡡䨨嵵佽ÅÅÅÈÀÀÊÊÊÛÁÁÒÒÒÜÔÕÜÜÜäÅÅäÉÉåÏÐâÓÓãÛÜäääéééÿþþÿ€RRB#B†B>B‚‹Œƒ !##! ŠŒ:TA2A C–‹L.TT2“•–ML+TT;2"©?K3T¯:E R#IF¹ºT>?¾>K-ÄÏTL:"ÕÔM«­Îæ¯20ÊM>@R¬Ûç°ÈR?>ïÚæúÐLPÕï5ˆ(FŠT #ˆHéA!W€$O!Q Ÿ¢¼hàŠJ ÅPظÑŠ '*!ÀL”Ð4$%)à`Š’F>^T ÀÀB….© ™ Lˆ"Ùøà°k[P›²uNi[åiÞPÔŽwà¶Â¼Í«"ƚܷ£®(îŽrÅM¤üDé¥î~±m¢¥dB+¥U[í¦šðP§Æuœ{\pÊÝŠðÈÞ"LUƒè¦Ûëƒm¶†1ZA¢‰ wl SVEAGcl™ª†2À*Ø´}ë÷òÂ_ÖÚ¢ÈÎF£g&Äà³Þœ©¯×kv×ó…ûn†ÛŽnÅÙ†L <0Ë'»,³Õw Ý©$Æÿµ‘wîvÕQÇl–4Zá"3§ÛpÆÒ¼poû4Ôt»hbÞáNí%¤5íI5Û§B6Z8^¥)µFްÚA.BýÞ„ÛJŒÉ=ù|·Óײ¬šîûïÀ/üðÄ_|›ÄÿX6ø.Ï<ò›Foü‚‡{çüD®d¯ýöÜwïý÷à‡/þøä“×ôè§_¼ÂšŸhÓH–«ê‚µ5ShëÄ~ËMG©©šµÀ&—‹@ª5æPÅ4VŠkHÎv•ÚÔ03½¥H:Ô‚„¸f§Á­ )q¢i–•3Æ0g$+ ÏÚ’„#¨"D(‚¯•;ÝÅ­n¼£ Ý,x" ŽMkð²WdÿD”½0 gÈÚ¹Òæ•Ž©‡FaÅ’0Žg¤ÈV ;ÁÎ …jÁûó>·%%lf‰Suõ>¼1%tjóÌÒ–š-mÅ´áTAZ„à ã'©öeN‡Ñï⺰µf"zÜÕ’n\ju#´ÞÇ9›ÐrÅZáRaŒ ww°1VPŒî#ÓSL2£BR*4Ë‚@¦ÉÞd+MÌ( ’# § L‘ÊA6S‚—såayÈËÀD:9ŸØÃ4¦EŽ["»"-œ¸ %ê1ˆ_ˆÅª²UQ‹&5s(M~ÅDTŠÚY7ÁfÿÑí*Q“á”ø3æ†#&;CÆ1Žd /ǸÄ#0Ñ X Ò„ŒX=[9O¥àEIŒ¢ ýd2ž9>HL¢Aáâ‘·-=šJ§µv" DØЍ¨Ó.úL/&ʯd_RÞ÷¾0B†¨4yÒ³ˆÕ¬‹ÔLg¹X\l™*Íðmcª¢H3L㈰ÄÊÞ¹ªx>¨ÓêQªºHqµgpÔAá“<2Á©äI‘ªP‚Ž$¸dÑÄIÚ 1ñˆØt¬Î\%9ªÖ V3:l•‘[Ù:<­Žtî꓎RC”Ї.„©l¸æS¼ V¬9ìNÉ:(VNp£¯íhC Mqÿѳÿ¤ã™ŠJn‹Ž­MËèÍõh•«^+j9´Åá47J®•gcÓúXÈú EFÙѳ(„*ô($6Ö ÒM¬ú’[8î$AÊD¤Œà¥¦7UÄ2‹Ñž:ö¾±®=·‹Ý}t®§íŒîy¸† ‰=«HªFê9פ®¸KÛ‰2$JQ‹²ÖJf-$"[]üNë¥~b[x¨â]a·© j›¿T²ÐùÊq‹›i}Ÿ©ØŒfmÃùí0ugSÕ¸à©+Q±ª¿˜Iì0ˆc†›Ë[Cb£Òl„ƒ2å)áݳâXº:¦'D– Êö9O¿uSèܔҔ9ÉÝŒ¬Å\r›æ¥SÿÊ5¶ïŽçŒeçØ+ æÛˆ{µT¿%…ñ]KAL—~¦.lò ràLegú4"`ôlµœe„pð-8¬ á6¢Ý® Xl:’uÎBÇ`•«Í‹¾0†»hç;»šÒ­–HÇ,d"ØpÿUáòõIA’&fÉItä%FxÊ®ï£Û:ÓùÕ¡í®œ‚:µà¯ÅÕÚ¤fÊé®@+KVgç8/›WͶrºÝ¢¾bÕ)ÔC)þ’äÉôp6×á´xo#Ðü0º¬¬~6´5¼nuoYÍ ÃÉvv¹FŒ¤ÐÇs}°ÚÄ|‰{ÀJúwkkƒ œÝ× ¡Ç5Ä•ÖõÌóÿÖ+á„E1aÐ9ÙR†%áˆ@h¼PU&ø¤=^é%× w°ÛÔ.ÂÉΩ¤I±’îÄ»$£’3 ¤Œ›"¢˜Pµ…mœ”H ÖרP:n¡'ñL¨J¡ÙË&¤—W;€ ñ£2‰`„r¬%† ¡ŒÄ&Âb×/‡Ã~cX6¹å©]ŒÐyfŒEU4…VKê"ÃP B§üP3T»: B~øb}®óóÜôbGgT½}.o&t^Ís¹Ç6›¯»B$€¤ˆŒ "®êtˆ Fè7Îõ-õN}ÈO¾ò—Ï|á±}èÐë%A;fq‹Ï©øAö^„ ¼¢|ݳCÿ æÌ€¿ú×Ï~í¯ùðžàQ_øÆúk5<Û™lh9™¬ˆLòr”G–‡yCàŠ` }Íð6@¸ŸG2Gsš€sGõ§]we±URM&4ÓB+A`9“P'lÂI!wÊxS øÊ ;  ¯PS° UguYG_æFxvøE´tЗ$¸ph··×Q,€çO' ” Ÿ× ˜@XóQSbå6Õ€]Õ ÄÀU3H9H„jxzEøS®Ô]‰G>rtƒã&¥håÒhTtXE^hXˆ SÄQuŒ00U—Sœg ¸ZÊÿ&„8krò”)ÁzÂLæ'ÂÂ1§Ñ´dv¦³+¦…;¸ ›§öá¦X‰€è{ÑÁGš` –p\”†ƒ×†e'‰¤W–x.sm›È)wKEn±vÄöYˆŠ\õ—@‹—`Í@‹-Vq 8%Q8UQŒxSË]¼ŒCØ‹“Ȇ¥WˆÖ:÷$ô1©Ó:aQ}À…åPÍ@ˆexS@ˆ» ŠÐƃ¥€ |0ƒbhSŠ |š Š ÂÀUºhŽè‹¶sèh|dtO0`fÓ‰*@0–b›"&Õ Ð° ¹Í ™ |4ÿ‰ Ôx Çeu;8Žˆ0¹ Ä Â S–°¸ˆ‹Üx·Žì•i„Ê1Rua‚È€%ùm2aV6%"‹°ÑP 6u†¸± \uS ·…@ ÙhŠˆ–Ð-PX¼¡À; 9`å(O©Ž„Yz=G‰cbW:ý„ÄÆZ{aˆ†{ûXŸ°Ðà[x»ñ; š°…9V8YS6Àw|8™» Ayà€4š‰Š˜Ð9”¸“sw˜Á ‰TÙ\–^8³.Úd@èáG¦ŒÍh1Ó$¾"A°ÕàÃÀ…º! 8š_|Œÿ˜ ‘ ;`ª(  6‘ZHİ ®ppyà˜»Q´xS§èˆS‰—Žù‹Rqœ¡…tyø íò,AÃ$¤#a^̱™žpÍÀˆ¸‰UG6П´H ðÅ” 2 6Ðw[uSBpó õYy ”εn© qùƒÌœ •ê‘R™˜õÓ¤2DÀ¦ Qh8cwH™ÂR™e&G~Hå œ¹ á¨Þ(ð™SÛ°…7åU;°¢6°¨ŠŒø€ B0~p@£ç0.‘ ²¨ ˆÜù££‡˜E¤…Y¨å'N‘!úÿ§#P}A4y>Ò 7båÀ 19;1 deð `¥ Š5À¢ Gš  h jÊ—›‡~ê{`§wZŸ†/¨¸Ÿ;1žåÙ”‚Z|ÅI¤†:•n¨d·¨©rGsŸTOÊoÂ^hç^; ­ð„Vˆ4`ª¼¡ xuiJ±ªS@«¶z«³ ÞˆS|Ê-€VãxªÁ  9 C Œ„*vàÅ‚2?ä €Ewxq ¿ P²0Šð€6°K¦º¡ +ºtPª9° o§sZ§wz²õ¹ ƒ k‰¯ôJfjS>š¯çf3ÄÿÚ¯Âi˜iXuN˜mã;Á– Ñ Á0 j@² _°0Êð€ˆàÊ𧹡 ®4p~2°Û –0*£íвöI¥ƒÚ"a©Š–ðq‹u‘5Krüº¯7[¬ˆ Dë•‚ ׄF \À k d° ³À´N;Û†aµxÁˆ;6ÐŽ Z¥“—  ò9¶d›«!‹Ó*㸨·Aç¯ÃY 6›³ke°2UôºÑ \ßp ] lð Oð°± ±b ²„§AOði`‹òº5w \º±¹·Š§˃8•¶€¢ 8% |€‘ú:¬¨ÿk·w‹³ª+ "­ê%·€ë ®Á¼K«­R€ _»–ˆàP ­` zÂ+šƒ½3jµ`P®ÀÀqV]…½¼Qå›k¯uÀˆbeºýU·à˺⛺“&]9y')$Ëî» Ø:q ZÀ“Ôp¿0 O0¸Àˆ,À2@À¼ z@ŸçðT€§YÐmà}ù¡/Ëð‘L–`Üùù½Ç Â_¾$l¬‚)w…Fš!û‡U´k»¸»IÀ0O°c ± ½¤É¼Î ½¹‘ & Pô XP&ʶsÿó/Š ÄàǺa "úrð€×èÁF5·!LœaÌÉ‹¢ æDŒª‰`!»N j…K=ü á0 ¹€é ÍŸÇðž—@ µPç`V ‚°ÄàH}úƒÕ¯¼‘Å[ÜÅ»EìÉ«+Âä+¤_Êž@ò(úr°á n@  ÀúÉd RP_°­5¼ X‹žÛŠP® £ƒpÐpð PÈç ºê*ÀA iS‘+«»ÁÁ–PÐ+*+Äl`Ü‘ø¯#L2"nhŒMk¼Ô°‘Êà½Ãñ R@Ë4‰\q`#Š §rÿš¿(#0pa ̼µ4 —® ­z̽Þ+&î(ÎÛ¦ÉÕ\¾§{pËD‡bÂk§:M·ž°Ôàȼ̓²±Ë¸_H¦m*—B”4ð"àpW°ý$˜xq‹¹HÄÀ¼0mÔ¿1ºMY&iÔ¤Ó"’^÷:R=Õ¨O× ÑŠ'úB‚Ãd]ýÕÛÖº¶l 2·9°€6 ç®9@ Ê×r $ RÈ«½jubõ×"ªÅ4pÔ»á¶pk¾ á3?§¨h¥ÍÍ@qMÑùÁUi@ÀX‹UÒ ÒáPÒ°øÌÃkšWŒž÷Ä€ qÿM¦2p 2€‹2 x£Ê[‘ ‹BMԂ픃ê`¥F·5܇:¾t»°£,·ýAûa¥Ì]“Àªœç¸¼aÏ Ý±62¨õ/p›Ùý²@ ¨–ð׫‰Ì«Ûz?÷:éÕW‹mñ·â,Þâöâ.î;Ö÷#2N}4î;‡à ÆÀâã.ð}® -ðäó w uu€ä+0×uà | / -ðãåS-ÀãRÞuðã·äwàãì÷~ ã…“æ1¾b<ÆÝÑÉÉý¡rN-ŒsÁñ¦ÝÝ¥¹‰¹­“4P hÞ–1ðŠÿɬ"ÏÛûÞšÐÈá™Î]ßM-Sù}ÑnŽÑÆ-Ù±¡†gx!ÃáÙ6å²aÁ5arÇð€H˜è/Pë/°ÞH!›ïY<‰Å©Å¨UÅ85_<V€ê‹LHœÞeœµvo½ÉÄ,=;’sŽ^JíÖ cÄžÏÛ¨±bÈ¢á¶^å**ªˆ/zuXè½\vÁë8¯öÜmŠ]»4pרÊmÍjðÕ1%üÈ"Š  èXLXˆPë0]ë3°àz› §wŽIíè¼qÏ]õ"z†û^ܪB@pÂܦ¬³ÿÔmŽò$ÿ3%ƒ…— ¢sÃy‚¸ q½š¯Zå8%ɺ­Z®€š¾Ù ŽÖ«¹3{ò›®6.à×.óԾߙÎß3%5ˆ8†"¾¸ƒØóÁ7ñ3@QÞÝî©UÀ®ÀˆÄpôœ5€®©E| õýÍ/á|t8QõQ¯éyÿò0Ÿ"Vé$o ñ Vÿ2p᳎?ÛïñnÒ þç$/èñ¤ïÜwNç1ÿùY_ú¦Ÿá ;ìànußj*@Ĉì‰î¶.±>ÉQ¸§*ïÂNS´ø øê+jÚúœÔlÑOaÙ*d,£øÕ~õXÏy.Þ+ÿj÷¹Q ç™´/Ô±>ë$Ÿî¸þ­¬Ð1ˆñŽP3Hü9€Zäë-ʃ+jÞ20³ËÛÈ#Xà6„dXpWCˆÉí¢¸k›AoÞF䨑àF!#‚Yò£I”çH¦ ¹’%Ç„1cjBDc"!6hØP&3a3Eˆ0ýy„ÈÒ6E4„>Ú©ì –,É€ñ¨PbLm`ÊjÔUBšŠ„ ªI™ÎG˜j*Ú¶CFŽKdÌè™ðkÂ… ½móFnïÅ–/òõË—¡KÁ'≯ãbÇ*#s„ìØ§LKBhÐh&¬& L—·CôhÛWDˆšmn†pè0Žn³ÿ#iÓÛ„ÑÀ‘0õ«„– CèÙ&¥WÓX&CFëm6d\ŠyW!D„÷æ¥,˜œáÁ'+±2ãó‰Ó«/ÏPtpÍœ=oÖ$÷ém©›Õà욆¦Øf«í¶ÒŠÛÉ7D¬Ž8݌҄†”£¡†fœ«+‡éª‹‰»‚²#h»À^úΛs¨½“PŠ:ª¦¥&l橨¦ªjGa´Â$I¯ÀBD,²Ñd?Ò²-vˆËB ñ‚h¯¾þ)Ɔ*ŒDòP$3¥5Mj³¤7ádñœ²Ä-çdøoFÏiáÉe¶9F§Íöl ÿDaˆ°ÁÔRÛÁÑ©ã˜àÝa‡´.)t'J‰¡!OBCèD\ î:ì6”(£â<绘rµ»9g}¬Ö9[T±NQdF†áU™KäÀºm†D$ؘÉ!‡Ü"6­fˆu$‡GÿdpM,Q$‡FÑ„‘ÒU¦p·MÊ&؈£ŒÐü2&‹×<m½ÕE\ûÝ•W€/³.`^…{D˜;žDvÇ®fãUS.¹¨ãÐ$XÉU_ZÛãx$ÕÌõã2 6¿“ëL !WŠ"&¡ûZà¤Bs9DÞ} ÄW·!YÖ|GÙc¡YL™àöI¿Ó„{¡˜óË™fÿÐNÓ4ç‹Kâù»ŸÅ#zèòº^‘_£•æ5i³+=8aEjI†“‰+Ö™¥Œ7.úk²ƒîÛïÓ~mѺµ¤¾— ÊÏádê35E X‘œ›Áݬµ¦÷¼xãÍ_‘ÁOìÿnOð ÷I¸FÖ“Gê¨K¦i5Ù’6³a¶ÏEò«/]SõÙ‹À ‘oÀCO^yQœ×°Æ* `Õ•Žžé{g^¾4¢(ã1—G~ü°÷nÞy n¼AןGŸ¶Æ]1îîÈ Ëî/F ŸyþË7üñ¼Ï'Õ«ƒæw6.è4óÓJìwüiÌxûàèD7Ò•î|´ ÿôž$=)QO€×Ëžÿæ•‘Š€ïx&ŸÿÇÂÓq°ƒêk]Àx4Öý‰wãш¼J6¼âùð^@ë èÂNF†3„žT'Bv«Ol`H`e }©sÀ#¬BÄ bð‚õ3_ —xô¡Qi«¢GÒà –ägòÚ‘XD1ŽÑ2KDÙùÈFÇèï!Y,‰þÂCžŠ$R‘‹dd#ùHHFR’“¤d%-yIL6r/®àd'=ùIP†R”£$e)MyÊSò%“!+[YÉWóØÂ[â22|ì£ Õx4@îq"`’Qþˆ™¦0’1‰Ê\æýøGhzI$CdÈ ÿ‰1™€Ñ޹L&zÊX^þ˜ÑD•UÕ2†šÈÜ&3mé˜ ÏŒ¾ '9é0ÆDu|'Œ¾yÇnz³lÏ$(ƒÙ‘,òŒŸeI<3øÐ*ÑžµgzO öó%Õ£@›É˜zNô}å^˜®96]²§£*M)<çÒ‚ ¤09§65ÚЈº“¡þ(=Eо™Â+#léFsêÒztƒ>éHkªÓ:ð¨J*N{JÑŸ:/¨,-ªU“ÊÓ®‚u©Xm*PŸŠÔ¯no¥b­ªZÇT¸Êô¬TmëþÒêÕ›²œYÕjEÛ‰Ö¿Ò åê<ÉW§J“›u]a^ñÊXÿ9]U®|ÜVõJX·†õ±˜5ªd[Ö¾*ªœuÓT KÚÌv² Ee;{×Ò®õµŽÝl)[Y¿µvÕljwÛ·V¸ŸÅèiëŽÂVª²-&k[›ÛÅ—¨´]no}k[çâ¶ mä-u» ÙÆJ7¼ØE,qW[ÜËê°Þ¬u«;Öó׬¢]/x;æÞö²7¿ª5o|‰ËÝñªW°®/ ,Ñ즺£5ðlõ`GÁå/\Œ\ÓÖ¶Áép‡Az[oW¼~0„ìáïÄfçÉ\«a1®RÆ3¦qm|ão•;æq}ücOªÇCNd‰IŒßïŽÿ˜¦ fñ‚OŒbCÙÁJ¾o{4ve,gYË[Örþ¸üe0cÙËa&s—±lß#SdÊ.’CâÃöÀ9Îs’ó†9l\;G9ÅRÖ3ž%Ìçëæ¹ÍF®²šAçæ4z͈NôŸý^4O×Ð 4;#]èGCºÒ(Uô¡;íéKƒ:Ô–5¥ýä=§ZÕw^5«§¼éŒÂ:Ö‚Ö´¬!ÊÜA—šÔ´®õ©ýœéýÊZž¾þu«û\ld»:Ù¯&¶²Ýìc3ÚÏFµ±©míkKØIžv¶mmc;×›N.£1Íë`£;ÝÝ·º%mk\{;ÜËž÷·å]ï{ƒ;ß½f÷º·Íí7šÜÿÆ·¾÷Ýî€ ¼ßO¸¨áÍf„WÛÞ÷·Ä'Îp‹<â§8ÆÅ]ñƒ¼àùÅ7NïŽ{Üä*_ù»Ý­ð†Ÿ;æ¹ËgNó³œä:ß¹‰sîs”óûæœÖ5ÑknsŽ =é'o9Ð{îô‘+ýçHŸ:ÕƒÎô¦/ÚÜZ/ºÑõ¨cýé0¿ºØSNö¥—<ìf—zÖ­>ö·¯çg;Üežö¹·îuß;×»>ì£ß½ê~x¼Ù~xÄç]ír{ßA¶ÈG^ò“§|å-yÌg^ó›ç|ç=ÿyЇ^ô£'}éMzÔsEKÈëYäzÁ>ös’}{jo{Úç^÷¸ßÿýê{ïû×ÿž÷³¾ð#sûò 2Ê?~ë¿|çŸøÒO~ô§|êû××~÷½Wä*ü,¿ŠÊoþ9¿=ê_úÝÿþ\Å_þó§ýíüç_ÿûçÿýÿœ“&ˆ -X€Às`h€:c [`‚È‚`[ @P€-8o`@@ÆÐ‚ Ô‚P@dŒ-È‚`€@Ás¸`€}2‰mP‚.r€€Ásp…X€ |‰ð! |•PæóˆüHlÁŒA9ZBrh€h€ÐAl¨$t€pAŒB"| %P€¨@X0À%€ o€ÿ&Ð8A€1Œ r(€ “È‚% ËÈÃ&€s@p4T'È‚&oÈ‚8œÃyXÂP-€]p…7t€` &8€ M„@r&HÄäWh0‘%X8‡Q„…ð@­Ä%D€°…ÈLÜMäDOÅ€],ÅSTÄ”0€x€_ ÆY¬Å”X‚€H,Å%p…Hlư…O”Å%P€+ÀÃÈpàC&€Às(€ L %pŸ…5%ðÆÄ°…ИØr4ÇG4´>Çx€W€TŒˆ0 GˆÅm-@‚HÿD -x€ Z<€X€‹ÈH ox¤“Ð,:È„\HˆhH‚XÖ[‚˜ÈмH“ €-\@„,ň É‘D‰@Ar^$ˆ(ÀÉÈ‚€$ˆ”ü@ð>l€%Tœ|‰€€8ÊsPJÆ0€€M|ÊsˆJÁ°ÊsØ‚pdøÇs0€wÄÈpüH€u$ˆ`‚—ÉW¹Æ‡¬Çs°…Md ¶´0Ë~”Kºd -G-€-ØËsèË—àE,ǹt…Ã0€‚ D-`ÇÄØ† 4€X<L r@CXèG¶<‡‡dŒX€„Ì‚ÿ; KÕ|‰-NBCØ$ˆÙ\KŒÌ|ÇtÂpÎ ÌlÏL ÀìÍ]@€,؆Ð,Ì»ÊTƈKÏ4éôê<yÔÄìÜÎBj€ðKÇ„…ñG–È‚Pñ†€+x„L oØûÇ]Æ ‡ L`Ì$€YaÉvÄÄ0PƘOuÐÄHÌ‚\€&p,Å Ëp´ÆwÜŠ Ä4D À CìÇôMĤÁ%ˆ%HÏ€¥NÀô†°IM‰PP Ò}ˆ+ÐQ“¸(¿ Âs0Ê èRXÐX‚gœ #¥P8ÌÿÄÐO&x€;ÌK%ÐÒ5½O&€/ Ó1 Ñ%4ˆSoÐÏ%@)µK‚0€èR%¨Íp€åäÎ}ÚMù€¬4‰ÜäÓ+°ÍÔA5 êLˆLPTF0o€ôt€,TA=‡HÔPøt€€èRˆÑ—€%ØU%¨À+`€"D ì$XHO—‰Ut!h\%Îh€ñûÕ`Îñó†hM-8ÈU \^õË]HÏ8YîO‚¸G„ÌkmÖ‹ÜÖèÖ]`Ar¸ÇDU r%I^¥Ä°äÖtJ–h‚}Ý…} @ƒ=X„MX…]X†mX‡}XˆX‰XÿŠ­X‹½XŒÍXÝXŽíXýX Y‘Y’-Y“=ÙŽØØ&ÀG”}Y˜ÙŽ`X$O™ÍY}YšÍ›ˆ%ÈK¿<‡(Ñ+ÀÖ¸ÂsÇ+Ü‚h‚ Œ ÕË~¥T%ZÖk1,G[h€<Ö [±YXÀ €ÐtʬL„%H€8[ðµ=€€Eš€Ê¼Cµ5¶Ì&¸‚²-U`¥L-˜Ìhű}\È š €²|ÛÚ ÎR°Ð¹¸‚£€°ÂušEÁ€ÅÀ\… `EãTÜÊ„…-€šœÐÈÍ]ÝmˆžµÙÿÄ]Ý MÊ+p[°ÐÆåíKÇ¥ÙÉdÇŸE8%˜PEL\å‹TÜÝí^ÝíÝà­M¬Í}´N!l[P(^ÓÜh<ÝsP}ß²<‡ê^ÔÞsÀ[¿HÊÉŒMï `±ߟ}ÅÊõKóKíM\[x€ãu[W ÙÅ€M4à¼õKÅDõõË&X̼͂ÿ`ÞY]Œ,XÂ_e€o½È’ŒÖiÍÖ€,ð×d.ˆ%À-PÀpZ¯U a!b²mO">b$NŒ,H°Mb'~b(Žb)žb*®b+¾b,Îb-Þb.îb/þb0c1c2.c3>cÿ4Nc5^c6nc7~c8Žc9žc:®c;¾c<Îc=Þc>îc?þc@dAd)&2C>dDNdE^dFndGÎ$ˆdI–d^Ø:ƼK.»¯Ãä>›dO®äOsXžng‚Ëh˜j”ênê–vé§žê“–ºÈêðÞ¿¤Öé®Î¿¯ë¥Ö(­Þê°kýë];êµ~k¸îˆ³æjwöê¸Æ?¶ž5úËkÀÛë˜ë´Æë»¾?¾æë¾lÂþk­¦ë²îg…^hNŽê ö5À®ëÁFh»VëËöëÍfˆÊnì¢Ök·ìÎFlûKÏ.f¨VjÐvꪦj¬^lÓÆlÍ®íÄ.m˶íˆHmÿÈŽì‰~í‘êÉF1Þfj©öíß¶éÕ>hÚ–kÙÎmÒŽné>íÌžnêöˆâ®iŽFnåæîí†í“ËnÇ~lí>nðîîóö8ñmцîÛ¶îæ~oøöìçnm×Fïô&ê˜îj[ïýæïüÖïåfîÑžoƒðïûÆï«Nîïpò.ïWpáðà–ìoà®poðçð 'æqq/q?qOq_qoqqqŸq¯q¿qÏq¿ïqÿq r!r"/r#_q?r%_r&or'r(ò$r*¯r+¿r,ÏrŸr-ïr/ÿr0óçr1/sl3?s4÷r2Os6os7s_s8Ÿs:¯s;q9¿s=ßs>Wó>ÿs@ô(ÏsA/tC?ô'tD_tFotWtGtItHŸtK¿t:¯tLßtN7sMïtPu,ÿtQ/uSgrR?uU_u)!ù,nŒ‡777t€¡y…¦zŒ¯p±z—º}š»˜BB“SR¥BB¤PP²EE¸JH²UT¤bb°~~¸ppÈMLÉPOÎXWÐPN×VTÐZYÝTSÝ_^ÁmlËkkÝgfßhfÝkjÓwvÖxwÜttÚxwÛ{{ãVUäWXãXVã\Zã`_ãdbähfällåpoässäxwä||˜xŽœ|’¼‹Þ¥mܪyì‰[ç˜LåšRâŸ^ä€~ì–oñ [ï¬qð¤bð¬p‚½‘Ф˜›³… ¿Ž¢¸ž¦¼¥‰‰®€€¤””¦šš©””¥¡¡¨³¿¼©©‡¢À¦Á”«Äš­Åœ±Çž²È¢µÊ­¼Î°¾Ï±¿Ð¶ÃѺÆÔ¾ÉÕ¼ÌÜÁƒƒÀŽŽ×‡†ÕŽŽÙƒ‚܈‡ØŠŠÔ““Ó˜—ÒœœÛ‘ÜÔ´•á¡Ä¨§Î««Â¯°Ïº¤Í½®Á±±Ì°°Ë¼¼Ð¤£Ý¡¡Ü¥¨Ü­­Ñ¸ Ü±±ä䈇䊊ää’’å—˜åœœîµƒí¹Œë´‘í¼å££äªªå²²å¸·å¼¼ò±°ñ½¼Õ¾ÈëÁêĤêɬåÀ¿êηéмñÀ¿÷Ñ«ûÔ®ÆÆÆÈÂÂÏÎÎÁÊÖÅÎØËÒÚÑÏÏÜÃÃÚÉÉÒÒÒÐÖÝÖÚÞÜÑÒÜÜÜÀÐàÊÕâÔÝæÜÞáÞàâåÃÃåÇÈåÉÉéÇÆèÍÎåÏÐç×ÈçÚÎèÙËåÓÔåרçÞ×åÜÜôÄÃóÎÎöÛÂåßàåàÛýáÇôéßäääîîîäëòèíóóääòìëûæçüééþñåòòòþþþÿ‰ Ü%° Áƒ$¨°¡Ã…#6dˆp˜®a3jÜȱ£Æ‹CŠÜr¤ÉŽ Zœ¤«¥Ë—0cÊ|Ér¦Í›0kâÜ)³æ0ƒ+y Í9´hKFwúª iÒ›NŸÚŒ*5æÒ‚A«BÕŠ“*×£-bmúu¦×²g¹^˜µ,Q·Vá¾Ë–¬\—iÕÞÅ–iÞªï{Ñï`»ƒ?]K¬í]Å‹3v,rRËE'#~|xså¾c1=Z2躤y¦VmºðÀ¦“bËžM»¶íÛ¸sëÞÍ{·®] @«å‡¢[{W+mMW¤6vð@þ¹uòÓ’j±jÃcÇ"ÎÖÁÓÿ•´òÑ?à3/(éWÓE;þ¤¿®Þ51I‘þÐØ±ÃÑüÿp­%ÌsÑ}`€ë” #g´òÒ*ƒôAˆ,Z)×U‚¨½dÊÞ‘…RY¸U}t5†˜,yÜAˆ)}Ü!ˆ`áUWb[¨ÜчKÂX}3"Vã‹-åbg"šuš‰:¡¨"‹.êH†¹´a‡yÀâähIÙ+NX!‘"cuP†6&‚$Fùäš2ª‰e–iš¹#›höXdO`Æ™áœoêeŸ˜|’)ž›‚öù埔qõŠ yðGže¢æJ ~(‹V¯tx‡„œ guðÇ_Ô=ÕℨŒpÇ+º5Ù-7ìÿ È#~Ä'•,Bê"Ʀ´ú)PØ€^K=ôPUŠ ~q*¾~µÖ.º°aà ±Qrà ”ôVÛ"|ÑE(¤‡¶ä–k.KÀ 7 ¬²Òºƒ|ä!«EÉÒÇ )äû¯--Ú¨!~Fjb¨¢Ö°o‡ôõŠ /BɆ{è’©¦^Y§_“úH¼ÊBˆFmø"KÚ«¢,¨¤˜ðea¶%2Žw€(T¦z4•釹 ÂïzªKë‚kIñqÇbàqÀȶ´Ç²-"ˆ ug\ˆž˜bƒ<=HR²<-B“º âa„9|¨‹Î¹\Ï¿ ò†Ì)w؇Ì3’Ç^JÿÜ!j$lòi3kHÚ¦˜’bÕö ɦyôÚ’,¦¬Ks½Êä)v1Ûw|÷Ï+~BŒ.f¼0õÔd7é,ôá‡+ÃKçöúñ¨„}ôx²‡7ÆJ%ÑáA ·°‚Û#¾îÞ$=S/äaÈǶxù†+¬Ú’²—¿Ê$Ä@Ìôqo Ö».4!{ð=ºQkͲÒ) Ëd ¾Ùc*tVˆ–â+ š)öÐ0.srX1 ¾2Œà΃ÞT^ò4ÏŠ.³ð….(¡³ø½$S)XAŸ†Š)±Înù:Á VÀ*%å`˜ ‰A3ô!4RKÿv÷ ßU,2ö¡$ò *µÅÄlûrŸóÔö±­è2\ðE4õÁtÈ!ƨ>M€¡a¬i‰÷Z²¡â!±D³¸ÃîæLL T E‹ ‘‡¨`†’“˜! A/Ad1ƒÈ®îÐPlA‡d$FÌ“ûfmw( . Ñ:–e/±„Fi€ÌÁEwhA iCäkSXLÁ")äHHFÒ h‰Ù<Ä8¾°‘C/ ¤'íäRÁT¸ @„<àk/ˆ¦cò ¾ l&¿F[FR Ç:'ÌÍT‘CG|£AF!…!`¡%—0À\r€¼_wàÃ+ÖÿCìa•)× ^ ‹Û‡ÞŒä'F 6ˆ½Å%¯díŠ"51Œ.½Ð‚ `€)èò¤çtQ25B &:{A¾V >ìkr„èƒÜ ÃìÐ p[Ó| ¶Mt …(,±„& ¤ø2-±Ì(lÓû~ð„+D—/PA ÈÐ" žo‚Ø„M•†  šÄ<ôвÂC¦PCŠhQP¬$ pj$œÅ+:x^Ò&SâÐ4c"ˆ,VÎ3­@„š…¢à;)Å~à)ÀoÕ^V·ÚÕÆ¢ï`@ÁTˆÁ%-œ(g+©YT´w&‚H¡ìð…ˆ‚ð <*Ü’¢%N0&0©ÒçMB\áÀ P`F(.16KùÉhÚ¥Mª{Ýì$‰ˆ dD›LÁB ÂJùZ]ø3º€C^M½`dA,À…L„ $~›MPá<©”‘v‘ ÄÐ"íc´ˆëâ„BŠRÆœf»°ÿ__$ÄÁV€ D` hÒh“{¦ ƒP%–e’^1ß®Ñ_S^f“Ì bs—¸‚% “)åKm\ü]‘ƒ` ÀJlb©Q­%¨Èj›}Ÿº„+a´L Ú¡rRSË£× N®U¶¯H H€ ”ϘlÛÏ*lÝ z&½hAÀlè^¢ÔFPõh_²«> ‚ÂNÁ°x‚UôÁ'˜Ú LàÆèZqKó3 Yý6ºãq?½I®øy![ÙšÊ×›M¤> }Û`KvûKA¤:|wÈê³N—]¨B bPƒnF0‚lM "xo(A/ˆ!_bÿ0¹Pa‹ajè N ‚Ž÷F "Ð8ÌE †7t+åI¹~Ÿ­ØFßÖ¶”Iê옦@öB· Z`äá¿Bô1\ám%­ë#"&Nh»˜xvB\òBßV¯|!ÜéÃö Ì–mÆ$sbØÜÂg] E×CV’X‹ö`kÍÆÑzצŠ<6'šL| xÜgèU͛䦾j·qé³ýj{¾¬mx®xÝ¿)$ÄÀ¾pÝaØm6 0˜/zÑdÐö»Ç<“!«¨)\YéµR£â™"…dÉÌt!ìð%ræ ð³…4 ï1\²†‰-Ù•¦søU)>ÿ‘O²‰“4fÍ_ÖëQ0!p_þüš„θ³ìÃD² R z þ[i–E©§¬·M¯G+Ð'pp„@,?/q{¹÷!»·46qM|PGZ²_0a}€/@x1ñw©´ð[ý2xz#yqwn'`!{Ðû¢y{×yRò4}@/l'C¼Fz˜‚@n2´ÔÔ%†€@€‚~æv |“7w©´XVv0Äb0œ×wQó‚4$12„n'°Yý×Oˆ„óLú%4šµzMâ{NGC}PéfH%p7ý|+@þå":1„gógº€E-Ð5¼&|AØj&Kÿ"p3!~å' ÜWˆ×%$‚P¿Ö?ÇÇ0J­'9"nXF‰) 2"»fBeˆRH9h„'2“ˆ ¢R†€‰šÈ‰â‡}È$w ×'2®tl”u2D/‰åŠ‹ØJg˜†OZ^'€Mb¿7sX‡'p‡^€{È$‚ð‡[·8²€‚…8PˆxŠ˜5BH„.hm•–y€§ l÷‚Uó%Ð%pl$h…-€4‰:Ñ$!‰äv+°9¨°J>xDf3_#v7áypY§°i—p—‘.Ñ-Ðíöyh7|@ƒ›²3>Æ(TÈKz`#2³\‹HCPF‘†ÿ’¨tœ£"}Xc2‘H,0dЀ&'tÂÔÇo¿x~B1dB=)p„‚&pQRòwR?Ó?NÉPÙ‰D•H™“F±“Óô8BIE™G¹'IIhSC¶Ó96¨xTx^‰2„y€“…’eÊvx§_$¹m21u+TUé*;ˆÈö…&W‡Ö˜pÒjõ×I ç 7 âeF˜Ô•™@ÙV_Ñ™Ÿi™Îò˜åHK'™pE™ˆ—d :š¹™œiŒ9–¢)—§f5{mðè)—9(¼i•q¹šö-çÒœÎùœÏItêÂÊÙ,~˜ÈI–êtœŽIœ×©š“œßÖÉũÞ‡b„ž“CžÕ)žë ŸáižøóŒò™žÆI›½YžïÉŸî ¿BŸúiŸ™Ÿz =“(Ý©ž0‚ šŸ<¡þ) ÊI¡ñ™ À9œÚž  ª¡i„¡õÙŸã ¢¢ÿšš¡+Ê )£'Ê¢*Ú¢ó‰¢.j£Êž<Ó¡Û‰£%ª£Ê£Hä£çùЙ¤Jº¤µ!uqPJQ:¥QTj)!\:]ú¥^ ¦\º¥!b*fz¦‘¦jÚl*!ù,nŒ‡777t€¡y…¦zŒ¯p±z—º}š»®SS·IH¤yy¹jiÀSRÌSRÏYXÑRQÜTRÞYWÝYXÛ`^ÁmlÊbbÁxwÏtsÉyyÑeeßgfßhfÝkjÛpoÜssÚxwÚ{zãVUäWXãXVã[Zã`_ãdbähfällåpoässäxwä||˜xŽœ|’¼‹Þ¥mܪyì‰[ç˜LåšRâŸ^ä€~ì–oñ [ï¬qð¤bð¬p“““™™™‚½‘Ф˜›³… ¿Ž¢¸ž¦¼¥‹‹¦••¤ŸŸ©••°””³››¤¢¢¨³¿³³³¾¾¾‡¢À¦Á”«Äš­Åœ±Çž²È¡µÉ­¼Î°¾Ï±¿Ð¶ÃѺÇÔ¾ÉÕ¼ÌÜÁ……ׇ†ÕŽŽØ‚‚Ú‹ŠÔ““Ó˜—ÑœœÜÜ››Ô´•Á§¨Á¨¨Ï¦¥Î««Ïº¤Í½®Ì°°Ê¼½Ð¤£Ò«ªÜ  Ü¥¨Ü««Ñ¸ Ü´´Þ¹¹ä䈇䊊å䒒嗘圜îåŸ îµƒí¹Œë´‘í¼å££äªªå²²å¸·å¼¼ò¯®ó±±ó¼¼ìÁêĤêɬåÀ¿êηéмñÀ¿÷ЪöÕ´ÆÆÆÈÂÂÏÇÈÏÏÏÁÊÖÅÎØËÒÚÜÄÄÐÖÝÖÚÞÜÕÕÜרÜÜÜÊÕâÜÞáÞàâåÃÃåÇÈåÊÊ鯯åÏÐç×ÈçÚÎèÙËåÓÔåרçÞ×åÜÜõÄÃòÍÍ÷ÜÃñ××øÒÒúÞÞåßàåàÛäääíííïïðòååüééòðíòòòþþþÿ ¨k Áƒ&,¨°¡Ãƒ J\ˆð—Å\3jÜȱãFŒCŠü8²dÈ\åZYi¥Ë—0cÊ„Ùr¦Í›4qê´Yé—A•,w Í9´h®šFwöüéiRœNŸÞŒ*UæRƒVºjWž>±=úu&Õ²ZѾ¼Šµ©Z¢oÝÆe¶mÚ¸gÑæýÊØØ½]žK—éÝ·‚·&–Ê6+Y‹>Zw×ßÉ‘Ÿf6Êv—.¹s7sÆ\÷×çÃjEU-”­®ÓCOŽ·®®Ëg³Vjûh¥ßÀƒ N¼¸ñãÈ“+OžKW¨P~q1ÚQƒ.Ù˜Iô•Ž8r\ÿG¬[û@JáU±éÞoyÈuMÂéh$€Üg‡op~ûJàˆ~¹ñ7Ð,Þƒwˆ]hñýàw8´çà…©E˜Ë*Ž˜±ÊK©Ò‡!°(ö„†ÑVÊ,Þ‘G‰’í‡â@¸åKwRJwRÕnJ™gWl§ÜчK,þxbm)"U¤+%c3‰Ô9îØ£’22I#h¹¬Øb®pI¥—VÂÔŠˆ$šØ%b¢¦×’p6ù&y¦y&†z•V#Ÿsæé^ÝÙ'â¹g†v.šš~©èƒhF*gY„Z¥¥´}Õ !yðñŒ~É+ƒÂÈ+[µÒâÿb(¦qæB‡wÞé0ÞS<’x w´â(­†áBŒDˆ€RÁ"e.aÜQʰ|ÅÉ ù­¤ƒUáãwœBm`½ý¶Æ 0üf 4X²Üpb|ðE”`Âïæ«¯¾Í=g©±È*‹Ã |äAˆ°EÁÒ &4Ì‚´+}*"ƒåÉé­¸Êðp‹ÕÊ , bÉŠ{äâꫲšYé_¨"ˆ ÒÂbˆ‘F­ècK,*œ#,§àØqR™‚Õh˜[FyŒB¹ªÇQ®¾ø,!O¹2hE–l£‹IñqÇaàqÅÞ®´G¸+!B!·iXöQÈØ…$ËØ]ˆ‹o³ðb.P·ÿ¥NA›¥!Ïm Ýs‹} =“!yìѦÉ¢FÇ ³0…p’ ".–R Žikºòç°æ1íJ°”rˆ¸.Éìv*¨ãØbÉ}ßñ…â¹p’†@ÏbÃÙg-zñÂb^°ø3L®ÈÎâ´3ïqÊÜ[ß!{|päK¡TLÀ„R *°¨ se±$95sÜ3õ¡7"3¿È#ë+¢ìJಾR÷Àøê0ôá ƒŸèd¶ÇáŽ3ñaß´*a šÉ¤ Ó›–NµC¬ä,@A´‡   t°˜(@`€Á,°ÁùÒÇ“—ŒmvЉà–,5¾ÄU&@Á ÿÇv 1q # P ,Xà`a çPBðˆ†fqIôZA½”i&>¼ÀQ€µ·˜Üía}èÃùö6³éˆJD6Bß•á Rl!'ì„N}¹¸ßJV´½/þDg HœK6A…(TaCî XÒ&ˆh¬àh‚P~‚”¦<%0ÈP—ÜÍEL‹ûvÉXmA0@4 ! C ÆYƘ´B‰,C%UÀ7” y4%øÊ`‡\´B1AÄ|i{‘€¹hY€$ §°ÁÞH—ˆeryE1[hñ*ز B.6aP„ 9[ D_54 àÃÃP§Â UB%x@„„¡¿sIØ$õ•¾}@½ˆ( à„L,Á ÐÂ(| ÍLtS |3R)fö…(ø X(4YpŒáŠ. ø*a„"Á¨CH—f2¬­å-œ3d‹Zd a=Š €Ö‚Þ2žÈ¨ó@ðƒ[À iV)T Äò! €ÀàA¾€#Ä!ÍÌ…ÖöÐÿõ³S3 шXé¨m¥±PÄc ‰£Ôr +éD#«@ŠÖÂm@0ÀF± ÀP-iI`Ú¼zO LHŠ @T4£6ºá|x©—ˆ‰EåŒ !È+I,B¸Àت´ðU T'¤8€\2â&tµ+^ÿ‡‰&Tâ@kÑ€ü­ˆ(Å-L°dˆS,X&„"òPd*ëŽb%O0À&ÒêSôU3L, Q†1p‚ `À‡ H½Ã‹IÕDôL›Ì·|W½/Vñ´àX´‰KƒP(ಹ›Ûƒsá†<sœ6' Á$@ÿJX@.¤›œâ|,òéœÜ#B¿²èœ@'”QxÙ–A˜qëlÛÑ ëÃZ[Ä4 ²Á,Ôy(D/÷<“Ä–b±ˆb³›¸®°Ó2ñb˜ˆ©a{£cõÖk@!©³¡m%§ «£G}«bu «®D«gÒ¼WåÓœ„à€ †ØË—*8E+L‚r‡É¢«Ý–’Dò™`Ø¥ö3KhÅz&P“týxû’hõᆠ· öG¤¢#Ø4'GPH@ššt𤣍ßÍ›ŸX–1yÖNmRæ<£“E ƒô Ô‡˜àq5ÿ\IvÙ£dëït…·Ðr5„! j@@à®JxámPŽ%Æà…04, Eç@ Þ@î0TB  >Àóå„á9úÂÐy!} ;_N¿ “( à.â7˜îðîçšà K8!T0‚äáÃVqÉÃAÇa-qš&µJLµ[tmÝ’hM^x\*Ö°“»ÝÜç¾› Ø×…v*?ù ô^•Éd<ÚõûRv™¼óî}Õ8a•vÔñH’9äIDŒð%Xbýéæ¾ì¿­i·c|âIzª…â!Ú€w•éåvt¹KÀ‚^šÀ‡ù.ÅÒ¾÷¯ÙÄÌ9êCÿVüö ¥HÛ+EÉò,$í™Üúû¤Ô]bxK©÷[9Ñ8} P®Ä§ýT~Vè7Hë‡32‡SGá}%@"w{FS"•55Ó&'PLQb$€™Òw⇒Ó|iÅ#Ñ×$`r†`)p}<¥VÛ÷"ÝM/Ává÷vŠ‚:}€, z1Ñy¼„Ð] ·5Œ#{æF{g@$"{ S7»§y*ð7¥06}€0‹§DÞF|‡„PpJäæÄ&†Ð]ŸÖx-(~·f¼T>y¶1ÕÇaÐ1¼·yeÓxãg2J”p$p[<LlWw`á”a6ÿb[Ì·%àçvLÔ" p$ ‰c[ÉG‚Ö#HQƒŸ6"l7Bp¤oãmä7†NÖkÅ´"!7ˆ€°à¹€* PB"n¤~)à~³ä|§c3Gjµh® D0Òm>tˆøæŠ©Ãvh(³¨€°°0âSˆ‹»Ø‹&ëg4H¡6LèU‹p§DCZÏÈŠ¥–ˆ‹È0p7¦x…ƒnw–ˆ‰š(‚Êçw¡Ø9—&@ŠGk¶ì¸ðˆofH{6˜z¬G&¹°x€˜6, )èE„x¨\ƒzµ3N#òIO;§àK`èEw²04ÀT[, ¦ ˆÿ‡r:c“/¡F*Ðp¿wx…ÀT¨{z*vMz`$HÓ S5¹`f¥¶`*Èq‘}3ˆ4Èg‚3ñI)Pc@bzB)eq;Ž (f&+=¡~P–€R9Udƒl´–;Ñ–”—r9)e¡•­;Yâ•2–†0–ŠPbœ8y·Æ6‘/1xVhk¯b‘lYJ”Uù—¢êöw¨ó\{(A©vòe}ŠUž(7Qƒu†¦†jŽÕ˜³ƒÅˆqY¤+×ÁÕš˜š¨›‰½ù ¿i›ã"W¦q±Y³ÉXµYzÁ)œ~£6oál¬©œf Lg#™Å©*÷5oÀ‰•·I.2 ˜êy(4·/îùžðŸÁ1vÜ9—æ¹)ÔyŸÝÉžåY1Ëù#¹ž®95æç&ÿÉú™êOýi ûI,Vé˜F*üYŸZøi|ú Õ’ž Ê¡è¡çéŸz•$jŸ9䡊¢ª¢Ê¢ê¢ú £ j¡J£Ö$¢ ªk£¡3z¡!Ú *ƒ£$£' ¤)ª£ z¤šŸLº¢¥"¤RC¤«‘ Pz£Qj£Wº¥ª¤Tº=Z CФ-ê¥d:¦üy³±¦lº¦á/1§A§vZ§w:§rzБ§ѧ~*€¨ 1¨!ù,þn‹‡777t€¡y…¦zŒ¯p±z—º}š»”}}¤DC¯ml¸hgËNNÑXWÒ[ZÜ^^È`_ÀmmÀsrË||ÞccßhfÝkjÒyyÜttÚxwÛ{{ãVUäWXäXVã[Zã`_ädbähfällènnåpoässäxwä||ésrê{|˜xŽœ|’¼‹Þ¥mܪyì‰[ç˜LåšRâŸ^ä€~ì–oñ [ï¬qð¤bð¬p”””™™™‚½‘Ф˜›³… ¿Ž¢¸ž¦¼¥©™™¸ˆˆ¤££¯©ª¨³¿³³³¼¼¼‡¢À¦Á”«Äš­Åœ±Çž²È¡µÉ­¼Î°¾Ï±¿Ð¶ÃѺÇÔ¾ÉÕׇ†ÕŽŽÚ‚‚Ûˆ‡ÛŠŠÔ““Ó˜—Ñœ›Ú““Ü››Ô´•ã£ÁªªÎ««Ïº¤Í½®ÁººÌ°°Ê¼½Ñ¤£Ñª©Ý¢¢Ü¥¨Ü¯¯Ñ¸ Ö´´Ô»»ä€äˆ‡äŠŠí‰‰å䒒嗘圜埠í¹ë´‘í¼å££ä©©å²²å¸·å¼¼ò¬­ò²²ñ¾½ìÁêĤêɬåÀ¿êηéмñÀ¿ÆÆÆÈÃÂÍÍÍÁÊÖÅÎØËÒÚÓÎÏÛÄÄÜÏÐÓÓÓÐÖÝÖÚÞÛÓÓÜÜÜÜÞáÞàâåÃÃåÇÈåÊÊ鯯åÏÐç×ÈçÚÎèÙËåÓÓåרçÞ×åÜÜïÑÑïÚÛòÄÄòÉÈøÐÏòÓÓòÝÞùÔÓåßàåàÜäääíííïïðñññþþþÿs ˜ËÁƒ*hp¡Ã‡ !JLX‹ ®‹kaÜȱ£G?ŠÉ1$É“ ÄU«eËG.cÊœI“&Ìš8sʼ©³çL\ o±ŒÉÓ§Ñ—G“"Uê¨À[¶v25ZtjΪV6,(5ëU¯:±‚mé”a×±3Å¢­¥lY¨g׺l;–nÖ·CçÊ»—m_² 3ý»”°]«eså-Ü÷pVÇLßFl˜0c¹er¢üòTÏIÛâ´ù²\ÐJQÅKZoe˪›]ÚïëÛ{3ÛÂT;¶Oß¿ —µe+Ò£ãÈ“+_μ¹óçУK^‹6ñ–´áˆVg˶ûâÿ­EËF0jØð¾xO÷8³L¤žT󉃇_S~->54ÂV#5ð¡lÂmÅR5ä÷}}ˆf ÖÂÈy}¸p#~÷—µÐ‡^ƒN¸ˆµ”¢¥Ä4J x¢ŠWüáT£V+ÅõI<Æ1ÇŒVÝhS‚9r¦Êqò qòØ~D ´Xx¡Ä‡K<>‰à‡rV¥“-e$”\éZ-G&¹d“ZšˆŠŒíØã¨´Ybn]žÙÒ)0ÊH#™âåiÚZB¦¥-SÊÙ24™žíЧ£|&i£Š¶h¤[*¥¦ZÚé¤=:(ZŠnzbCˆVJ襫šÿyj]°¾)hxhÈw¤QëXp²eÊ| ’ŠW§ôG‚ŒŠ©b2¹qÞy7°7“2†¢A§¸ ¬ ´ÄP"áTªˆYËq|â­[‚6ƒ-ÝpCVH‰E¡¼ëÕpl!G -I 1@2Ýr\d€…|B WlñÂÕ‘­KáŽ[n 4Ü1 Ý&¥ "€ ò íî¹ë„€•ªF·J;í ,÷XòQ§˜p!ìhG-É*Û¬Ï&:,~ÌЮ*‚X©ÔŽNÂÄãÉIª ’;35s°~ò ’‡‡%zK¿/;‡»-©òÉ ýºuã£$dC{es‰@–lÒRÛ…^¹ðpC[4WðصL¨LÏ£»QÛŠäyÇ! vdpeKœ<’K¹h DP•@ ûJùXˆ$±%j« 0Gˆ¨ýˆIÍÛ‘¸Õ’}5¯¹Iˆ{HYÉ—£‚µ,q‚$Á–g:¡%™0%<ᨲóªkˆÀu)ÃCbg€… @€@ó×L“‚ s×ä4MN›ÚÕB ¿lqkMžˆèMb ’ˆ²Lä¤2ÎE²~3À6Àm#.&„3\KB!YW;'s­ë]Y‚ìG({&¸íÑD s–,ÍÃf Bq p›Û•¶ô÷”å$r›€ vMŠzÔ¸ö£îœkÁí΄]x… ü ;4Ò£ÀCªјd‡‰n¾'Ìž}LpïÏeõ4yLªÃ*y®z¤ÑEŒIšŒ¼Æ›t|ÒîžL¯²uþ>+=þ±ÿ qÉÝJqà¶«¹ý\_l›¬»ÐÓÊK¼&‡NL¸³ï[¥Jûó &äê26µào„Kæ#%¤pbò„tï³K-¡U|äS€Ä3€VótTE6È/é÷2²qÑ&dÃmãCn31ß& <9Õµ$ã7æ'xé·'äC'‚@ð‡UˆE?bë$qpxû§x.qƒ,…rp½7¸gM"Püµ{yÃ:Ì÷oÎwz'$#/b%À2”S}µwNÄ8xP2¥§FðÞO:§F5P}‚b"@üåk§G„û§z¬gM¤i9ÿã~w°;c}¶78§ÇD£F#çE…”÷„3ÀO:†&ÕU~l’ˆÇFxÀ$WK:Õ%~"àc–ÅLèk1ò„EÔH%à8wØzg3K;Òsl&5¨ X X&€Àû†CHcÓL‡1P…0—u93vÉ]§Ï#‰½ö•IÑxq‰ë&™­™LÈk`Alªj ÙœÇÊ4y¢Ù.@! ÔÉš2Óÿ˜C²ŸÐßxH3lIj,„Òil…é/ç÷9ß¶teW½i˜ W8°©{ÁpHµŸôù' ÄœáÉŸßbÓ ú šà Ê(œâ)M©žoS SqŽ Ê¡U¡2¢±’¡¿ù¡j+'雾y¢Y´¢ š¤"¢š¢ j¢,ú+ð£ úÃS(J¢*Š£1jIƒ Ú£ËÄ£6*£G ¤IÚ¤ÿbBú* ¥ë)*J£Z*¥/J¤Jš? žQZ¥; ¦^Z¦%Ê¥V¦«A¥5j¦Sʤr¤k:Ÿiš¥7ʦN§wФzÚ§CʧFê§ƒŠ§uª¦CÚ*àѨŽJ3ƒ[1”:©”:–z©Q¹!ù,EŽƒ*‡ """***444;;;EEEKKKTTTZZZdddlllsss{{{Mx¨t€¡y…¦zŒ¯p±z—º}š»“ii¤]\¸ON¯}}ÊONËXXÒTRÑZYÝUUÜXVß`_ÁmlÉqpÜdcßhfÞkkÑtsÜrrÚxwÛ{zãWUäWXãXVã[Zã`_ãdbähfällåpoässäxwä||˜xŽœ|’¼‹õ…Þ¥mܪyì‰[ç˜LêšNåšRâŸ^îžTä€~ì–oï Uì¡[ñ [ï¬qé±|ð¤cð§hðªmð¬p‚‚‚ˆˆˆ’’’œœœ‚½‘Ф˜›³… ¿Ž¢¸ž¦¼¤‘‘¤œœ¼žž¤¤¤«««¨³¿¸¦§´´´ººº‡¢À¦Á”«Äš­Åœ±Çž²È¡µÉ­¼Î°¾Ï±¿Ð¶ÃѺÇÔ¾ÉÕÉ””ׇ†ÕŽŽÚ‚‚܇ˆÚ‰‰Ô““Ó˜—Ñœ›Ý““Ü››Û­€Ô´•ì¬Î««Ïº¤Í½®Á¼¼Ì°°Ê¼½Ñ££Ü¥¨Ñ¸ ×µµÜ±±Ü»»ä€äˆ‡äŠŠå䒒嗘圜埠칌봑í¼ú¼†å££ä©©å²²å¸·å¼¼ßÄ«ìÁãȯêÄ£êÉ­åÀ¿êηéϹéлó̦÷ЪùÒ¬÷ØºÆÆÆÈÂÂËËËÁÊÖÅÎØËÒÚÜÁÁÝÏÁÛËËÜÐÄßÖÌÕÕÕÔÖÙÖÚÞÞÖ֨רÜÜÜÜÞáÞàâåÃÃåÇÈåÊÊåÏÐâÒÃç×ÈçÚÎèÙËåÓÓåרçÞ×åÜÜôÚÂåßàåàÜòâÒðåÚäääççèéååèçèëëëïïðóóóþþþÿ¥ H° A‚·*\¸0!Ç B4¸LÖ3Ïdݺ¥±¢,£-»¸¬äÇ“r¼Ur™A‰Ï–E 9r¢Â‹6sbÔÉ'ω> *4bÑ£C‘&Uª(C‘53Þzöl%G”²\ÆÜ¸ucÊ«#7F¹Qæ@˜5¥Åôùp¬Û±2ßÊK·®H»xóº«·ïØ³L›<8°Ó‡•F«:bÌ–.=~ŒŒ5ëF¯+Ÿ\ÆU çŽ8ƒ–¤ZÒ&TÈËN¡^ͺõjÕ®cË. {¶í’3Õ½»°aßy }œ•­BÜÒ ª²¬Å«—5£œZ•$g™¥¥=m¶mrÖµo‹ÿ/þ6ùò­s¼^ ðöFá¿× 5Ëî EúÌNÑ¥J1it•,¶lÆ‘uU±tQL39EÕD%ASÕkèW¡…º¦^{óÕ!|/øáD j§ßS¥-¶Ñq%yut_DUVß-S KÒ ·dÝ„[‚¨—!…CÊ&d‘®7"OK‚螈¾•xˉ µè¢q™äf' hQF8.§àcOf9™ egß}-Y$moÆæf†I×dNwB)ŸoõÝ×cš¶ô'AöåhUJš}fjì-‡ÓZiâ¸fq¶6ç›—VX§oyåäOBtØcƒ’hRZQ¥*g,ÍDs‹µÿd‘}r©Ù}ÏôèB•ø–u$d™fX¬±•òX¦’z~Šg³g¡T*D*NÛ’—¹Z`—¶*(ìJœm‹Ug„9ŠªAµUe›,‘ïº麗A묨öV$S‚´VU“E+uЭhkßE‡h«åæÈh¹V7!¥ñ¶Y±¼ïÒ;X¨KÝëéžITÑ´øö§ÖUcÁh‘g)ÉzÝr5©[kË—9(QKeŽÐDƒ ¼{¡Ð·iüÈ—Ìap²d) ÉTÚV¶ÀUÖ,·¬/Kþ¼™4_µÄÖˆ;/“ )G,á ÆA_lñ¼ËÚioÒ Ë-uVÑ0³¢P£žÿ «Z(Y—«Ý‹]JrqC8Òb‘BÊGÊÛžæ³ÝÒt74·—PG-u‹ãâ8¸­)•*R­ØvyÑΪzš/B”“(G yÛn§V±çJq_袃Þ+ã|/¤*»5k]Ä©³ðW±Oiãq·ï2œAÊ„Jñ³ðnsŽaÆÜo<7ò¼*_¯ãóXÖLˆÞY/ºÈ*öéÑ{p«ù⺻,ŽÀ„ßÅK}æ^û޶4øÕS멵PŪ™°Ê aÕ£®s½É„ä#ÄYY£òÃÁÈ,ƒ¥0EŒp„N8ð]´MÓ3ÁÏUÐ0ý ¢ÿ‡HÄ"ñˆHâtŽ;neKˆ“Î̦˜DÄEñ*±0Æ(~ðƒ<œâ‹` £ÇHÆ2šñŒhL£Ï–*ºñpŒc)ȬÂô‰y,ËcÈ’xE4¹Š¸îçf¼.L=4SýTehÂ%AÆ&š„MœïÁCû´#¿ùY0D<Š”vÆBÈœì28!‹ì0qefЉ µ^¦M H¨œzwÉdíÐHääëøÉà¼O”f™ºœ÷ ¡‘V™JHR6•ÏŒ+{OKdsjÆÊX•¤½û…riCLï—«!RŒ—¼bÆo˜L¹#~l"v©ðupÁεªùÿq™ä•ÚãLé¦ÇežGEjx à¥/˜ì¬¨0á þ¤"¢‘˜YË©j2Ñ0©Áht•¶ëe.- (* T5ÍjœÔy”‰‚R§;%¦Ý~RO€¥rdê ƒ¤2 z eÚñUÎÎâ-¡¦ 2à<Â.Ëi·Â-¬Ä)ò¼jÑŸ,&WÌÉàöE=+qEEüÔȶX‚M‡øÉa¦œT‹Y£–Ãzdza G\¢EB§kT«,ÀzR¬%ì;u²Çeÿjó!9«mu®;ʈ+ª’Ž·R”>žiBñœZ¢ D8Š@-²ÎySž¾6¶ÇDÑâæyÛ‰ÔG]Ë•G>Ò)!Ä"©¦sp䫦€ÉOKŠ¡D\BŽ@D%†ÄZùþU¶ÝíX]{]Sí϶ìl¯@Ó²&ÌF†aɉ•U¨sxv›ålg1Æ D8¢%Îåo&ûË8Ø}6ñ‰¢`,%¸;d¡RRC8pÍŽF%±EB¤t×31.Aæ/¼:¼ß’„xº~ݤ‰U¬âæ ¶{Æ-;¿Û¢ðB6@Ó©Ïᘑ^4íHPçjm)¶ úÚ¿ú1uÿûä®xÿÅ9͉n)JªôzbKˆ÷XG#÷beeaWª˜ãI‘‹&@kîs1 5'9Y\°u?É䢖d#š3dÔ ^Ù3´Ì§5o¥¯ÆÌ™Jã…±["ŒÒž6µ#®.l ÖJOÊÛ}/š\;š§reŸ¾í¸šJe³L-ÐÈQ®&µŠCYuÖÅ´5´}´¿²,oSî½NzË+Mè޲kUµ¡3“± h}µ)›ogwJûÙ¸UuK—ƒí´¤—Ó†ª‰·‡î «+Y››–«îGW*ÒNf÷`³[¼œ[×üqÊ{Ù«š%nØÄÝnƒ²2ÞŒÐÈãdf¶/Mëi[ðÝ%ÿwÌ‹¬fîY,ɱ³g°‰ÒîìñׂSYs:rѯYÉm–´NQ^`¯#Í\¡¡¦£mBטM,MîVPÇñ«T¥jæ9ÁE^)wgÉ _xÐAåð(·ód(Ñ1G4î03ö®Sy°% ³-Ý\§S€É>ö{Ŧ‰FƒMµ¯]ð+%Z«B(¹ª2ª³ÅŒÐÝìŸCzïL {èþNÇxû»aVùŒWÎz‘šY³xKÙt²˜x3äxý›Îw…o^óBo‹ÙA/Åû0,š\ÿPø7¾Ž(Ê&±0*¡ˆF"Öë6y»£û„›JlÇs¦»d5Z†·"KmÿŒúÇÙäcØ1Š$Œç""—°üÁ1¯Ο¼úµ7̳?¸ HÜÔ@àWB&U¨A•S9JÐKè‘_§Å *€Â`p[EÏÒwÎb 7LÿS|3waÁT(…B’qG 8f- @p› ESR G¶ t€º`³‡6Ábg{¹÷Zk‡er÷4låk.á³2 Ò4c²‚|«! >ÐP%¡J0$õ%]q€¼ÀƒHâƒ#„?(Gfx†h˜†qÄ-Û·D*CsÃGE¨”bÔ>°_„ @¨°FcT)oP/‚à‡ˆ˜ˆjÔFj؈ŽÿèF—rEGGMW |Æ&EG3í’J~B.ƒ2xDЊP XÅà2°h:XË×|™€)$7‰‘H}˜bÅ[ÿs+Ô„J¹òV€Ã#è¢l ¸€= ‹ÏµŠâ! 5`™€ ÍÅËÐ~îŽvyp¶NøçwãX C+mØg­l²Ó3GYƒ‰ˆ$ç ’0:X —àaèÑ\û¥ÎÕŠöU ¼P_ÒX!^G{™×‹N„n6LÂB+.Ä?#‘×4r•-üwh’|Ì•fF†Òuí·©Ñ~Ñuƒ•0‹HŽ`ÇåhŽd˜üñGÿøØÁr¹2£ç+@•5e Y¦e]ÒˆÀtˆp‹YŒà…%‘ •P ·AÑo’È‹5¹¿&8y‚k—máw8³2f¥}ýTnD¹jfæ–P•–P!ÅP•)f Q rPZÐ…Z-ù\E6 )†J#}A¨˜)Vk±“a–æ…¢§8'1@Õ$)¨A€P’ù\ŽP’­q ŠÀ¯¶Ÿp |P· *`Šð…™]º  õµ•ÀÔ•_ xC7“?hG2G›–=žEزÈÖs¦›ï§;XÅ  ˜ð…óu tÙ ÖY_Ï¥ƒÿ‰q€Z·p Ò`Òp‡ ]-™•Y)’½ ta)–Á)“‰‰ºå ŸvMÉIs*´Xr§œF‹Îåpà\‰Þεƒûȼ—M‰‰P ŒvžÒêÙ.• 4à\4 …)'¹œ^ –Œ9„BQl‡áAU7‘È^3—éq3²2þ·™óh ö•ûx—­á´™ û]ù¥Í%X]È  z8ËP 0 Žð¯H¤óYf—À¨Išâ¡4YŸŸâ.JVò6hÖ$&O£+µ0)¡–mùoS‚-Z—%‘_;x »À¬¡ ¯H›hÆ -‰ % 6ÿ а ºÀ% ™0¥Tú¡·¢#Š%z¢«Užb¦¾Ø¢I£¦Ö‡LöeX§pQŒ 6(d§Xƒ§öh-Co¤û… -é¥Ñ~YªUÉ ŠŸ¢ ‹.à2ð èI¥—ªx`ðùž:Ô* êåAªÃ‰ŸhZª¿É0z:Ñ‚:’§#–‘ìúÿö%³ºv]¦&óU_Š0ÑÅ@*‹Žà%š¯ûø\÷eË*&ðŠqð¬ÐZ¥­ Ô)¼‰¢}j•*¨ÝŠ˜¦3®ðƒªù§ŸÁxn‡©3W³}8±XɱT-S Ö™_*0š-Á g@h€ ùÿ• Š@1À¬Õ¹™ «X ‹–$ðº°Uj( "ê©dŠ9‰º¨òY¦›}+JiÂ9†ñTœ§ÓMg;ˆÆR­òœwF.è¸J,بªPp[R0úÅ©0À³®‘ °ø~{´I«´êyK… ¤Ð±w¬ƒÙ³VŽiªñöYrÞ£Q_ÙT ‘+Šƒ UPh° dPW ¯(6°ºùʰ¬60;‹ kUJ…€³Q¹ † žŒ»lë\Üz±Ž»¦»¨µàе×u–»aªƒ#ÕD2I5£Mƒ€%Áf`lP«PcÐÿ`ÂðŠˆÐ°¤¬‘ Œp·0Pˆ. H롯`»[p €Zþ¨’¨•°' ?» eêSY{¼÷—¼g§±$’tÙ½ùQwRá¹g·Pg° ¬à½àkË0•Ë€¾¨Ñ’6‹2`q€´ê¹YP¥ |Àþè-±…w·UÐQ۱ù©‹E‘¹ü!QkiWóتÐaPm€ R ºªPºep¥¦ ûd c°Wy¸64`Ž0x€žÒQžÀ¯ps›»y’ú¨7ü&¹bxdÀÓ‡¼áʵ ,f»<¨2½uŠeàÄ©ÿÄUܽq[´° ú\*0q[i`Å;¨ 4°¬#Z è¹_ð²°Ú 'оYZdLÉŽP_ûl®AZ¦µ›1ÕÔ¼< Ĭ”tœÀ¼ü¸#-B)TkÒqfPªok%1 3‹¹°tI ¸À R`´Ð’›ÜÉ.ðÉ©§ ©Àl, ð+°.€Öªˆ¬[׊æ\­ËS‘Ã…SÀ}l½ÈÂÌÆ[¥Ö¹e…5´=cÆIÜL\Û;¹`RÐˬ ·©™Æc\Æ•M§P½‚°!€ºËZ˜Æ*À²¼fv ¼_žÿzËУB}Ð…¶H>üÃ*šÓxb îÁ¯T;²,x 0|ÝŒ %!À V<Â&z ÅЩZZvàX€Ðû…2à6p­±q”¥e¸®ÑÏà'M,æËËËe3Ð? Ô“«×@!ÔjYÔ"{ԅ湕8p9PÓ®1ÁU€c ·Õ¼ êë¨Ëа·«;C 'à#à PÖgÖ†)¼P¢Î5ÂòÜ™ËU"fÊk×-ÔÓuÍÇâè  ½2 mP-ÑѺÀ»y¸ðØp[V]¯öõN‹š¯èXŒÂq -*íŠMy¨1¾Öm 4ÿ«Ýy|Y>R?xýv]h™HÛ±mÛ1Wí½NÄì–Æì}¡ΩAî¡Ý¹ «°ª Õ¨¡h°˜¯¯X_U9–00ðÎðÞ_*ÙY¹•¼ÆNûÝžNþl[RC¤Ò=^ûdÞÓìX€ò5À̃f>±&§‡€ø} úÍ“ü\¿»Ëg4°Šg]ˆwK¼ îà¤]Ú-1žiVáY*¢àzdiÂ&ÐÉJ‹ªª’¦%Ng$Rwµªåƒ!Äç}¹=À-Ü»Û- ÝIj˨‘ƒŽÀ —Ðà0Àë½à-€ÝBÛfä’›ËÝŠàÝM®!·U€¬ÿ’ÌÆ%¹˜å_AùoçMX ì+о價—Ù=’-±aÙ© »Î‹—@ÝEæ+©ù©%ß[ ÆŽ\ÕtSnaäèøëÀn†ØS0ÁDÃ;Æ~Es(F|@tÀh¤*Ї§)j„ vt‹tÀí&ð‚Ðàtp |PðœÓ¾FtÐnî)@€ˆßnÒÎF/WD„ì.²ŽÅþˆî]Ðy}\ŽÓ`þÚë-Ð÷Ìiçéç ÞÜ 1Њy^ 4Ð+ 4-±þ°»ÓhÖé_ç³k=–OŒŽå¿ìåþLñÿ}.S:#î¹=Ç ê’£åjÅÐjpš½ðаÈêïà+`@ 4ÀüMÞùê%ú´%‘ÏÐÕhÛ˜_ŒÐ³‘†ëþRåJq彌3„v{/ð(Ïá³U‚¶À:³j±Áß–õaõ«û~_fùµº‹CþÎ. ¬.`ÇÊ÷Õ©ñ^˜­VË´Hô°¸•'öùâ/ú0¨×(köìÓ¯ÓÞ÷5Ë3¥—†ïì´ïü6ðÝ0¬i® v˜À ±®qÙöåYZÞ È:qŒTŒSSðºœÞ·½Ãgªü¸{Òa}® Y*<7bòÜàNZ´žŠ…ÿî驱¤°>ã¨q °(]#¿Ïù„émWØÁQFLŽgÞ|½ü–úÏ/¨Ò/Ôë 0VÈ@Ä ÑŠ—Š]‚¡hÙÃeˆ[vªRÁ‹ºêBT âLJ1`PŒ#Ó²hÒ¤ÝRÙÒåK˜1_²”YSe´eÏZ>”Æså3”Ëdé”öLÖ2›I•ʤ¹Ô©Ë¦OF•ª”jÕ¤W±âY±ëW°‹)BtI—#2.ñqÔ±ëŶ+:r±Æ¥K3`XúW—DŠŠe ¬KÙ“`Á(‹6Å”+±N¬òa´h@ujŽv‹§Ñ[ÏžÝZÙ´VÓ3SÛD½Z²k¦®¹‚<ÿb&G‰l0Ò’£D‰4d” 1ñ¡°¶Œ.‘],W® ÑÓ:RØË#6¥@Ô»’p4mK5ÕÊqAí–TsÏEõÁ])V i5ïÖ‰D"‰×L|VXb—Ñ%-d “Y;âцhcÏF\¸VÜš´*Éš@ýv§!WKSÓe­ãrìjÕ®Æ,óLS“¬µÜ,©±”‹q¤Î;óÜ“å³Ò2ËÍA ; ‘LŠIQÆ–™0EFæöÔš* ·bLQÚ”>ÿ7¾dt±ÎzµT"ù­ )Œ¬ß¸Sd˜eÔ11Xp›„ .Fi`„Ž^–îEê,é1o^` Ð…Y1Šj™”)3M™®*U._bœb«;ÕÚS¡¾Ü[vm[7ElXdÏ—Á… ’‘Ñ?r„E[!ºb0l$»íº»­EZ ,“EÌ#ÉtìtÏÔ()­éF[m¾˜¢Š2ÓÊ#ß|ÊÌc»~«ÎK÷ž¶ïÃ÷ 0ÁTg9ÐñJíIÒü2®²×^® _ºúª±ß6ù£üððküŠD¼Ö^@¤_–÷Bc$£d +»É2úg½mEæbøËÿ.h9Q}„KêK7@~W¹H²@:(¡9Jj(H? †L%7Ü EØ’:Nû“J×¼’Â"1,ã Ìðøt·È}¥!¡ÔÄSÕ¯~ì ÿˆ¸,fΈ(T¢ª¾—‰;%&,Ã`wz‘ßHäláM€jø¼æÙg>ó¡ÜÇZ2=Nq1Œ_<×5²2Ú†Œ}™[úÔT¢}ev© _fl!‹ÊF4)‰DHã™@*É%“ã" ‰9B’k%L$mC(CÍ{‹L¡¦:S¤-µF3£ÉÏÕUÊù…0• :%çÙJV²ÊxqdXhIÀLÞ¢‡ŒR¦ÿg8÷ù˜šÛš0»éÍCº™`*Á˜9Ëq^q†Óôb⬠l^m›Úüf.‡IÌU3fô,¦FEî3'˜eÁÈ<öI—¢œ'Á‰ÊzÚ3ŸâÜç3—qà4Ó™4„JØŒ&›ü± &©÷Çå9´¡¦¼'¹":Äp’S ^;cÃgÑbf4­âQ$è¤=6®‚QéJ…Sˆ>4©U¤h:qšÂ§~[SÊTh@º”LMM5FáR%ªÔ¯2U¦3*ËZº©Âæb,yšRzø´þåG®s¥k]ízW¼æU¯{åk_ýúWÀ–¯@9Ea {XÄ&V±‹elcûXÿÈB6'‚Ý+&å ÀZ6?˜¥ì^ÛùÒÏz5¬Ælê8ÏzSŽv±2—±êHm?Íl•«ª=(h?UÌÉŒq¦4ÝíÓ™Ö§@ÏKýiëR 'ÛÙÒ¶µ]®St»ÛÓ~/ºa.V?bP‘Ú0¥ÈåªrÁJÍ–Öä¹dí­oÇYݤ8í§´Uål Þï†V´ÜÓ§@§›Ä}¢÷µº!wGkTïÎW¾ÿ¥oi‘y_Ï!¸+ú­æï×U74À¾mx—LÓ–WÁŠ{/B7µÞWؽF*…E,V~’··¾.{aÂᢖÀ¸…¯€\à±ÚWé qÓ¶KÏøÎ“Ä561sQÌ[Cÿ—ÇA²„i|c(Gù)ãÕñŠ—la,¹×Åø ²‘m3ûÜšþ¶»Ÿýh)³Ì{vª¹‘ìw«Û‡ÿ즵½Ó[^#Ñ××ö¶CEí×››?8ŽžáxÏ[âï.Á¹ í#œß—÷¿.OƒWOÚ÷η¸[=rL—¼áè6sÊ+·òŠ·<àÞÂLÏqâs ]èC7Ñ~ôžK éKÇ Km^ðOuVêS§zÕ­~õ¾æ$¨[çz×½þu°‡]ìcÿº±~v´ßUç,Wó°ÛŽï·Ã]ß.;±!^s?œâí~ºÞóŽòŽoÈ7¶Ûé>÷Ëñë|Œ×žóº/ží’Ç;áûîwÃ'^ñš<åùny?¢ºñþÝ<ç=õ½£>ó¦´Ç1_úÉžõ²ýìmñ»~õµçÿ=ä;ûÊï8þã‹ÿûÞûžöÊ_þð]xáÿô!¾êaÏ|ÆçÞúÆ×ýõ»ïýí#?ù*~áÁþé¿þüê?öqyósýÍÿ¾üÙŸþû·~ô^þ_ÿö@ú@oÓ>ê³?ÿ¿ùÀ @Ì>ø7Ðã¸êk@´@ÄÀŒÀÐK½T@ ü¿t?$¿ýs: ÁÁTAéÿDÁ ¼t¼ tÁlA¼¹ò“À ÜA L@ÂÌÀôÁþ‹?TBdB#tÂ'4À „¾$„Â!¤Â*ìÀ´Ám"¾,BœB+¼Â1C2”B"üB5\Cÿ1DÂ,¤À7„C'‹AšcÃ6ÔÂLC´C=Œ¶#”ÃìCAÄÂ%tÃ@$Ä.üÃ`ÚBÒ+D<ÌÃ2äCDÔ?4ŒÄ=”DClÂLŒÂGŒCH´Ä;ÄCÜÄ0 ÅEüDR|Š'XEVlEW|EXŒEYœEZ¬E[¼E\ÌE]ÜE^ìE_üE` FaFb”EØx‚qAFRQFQaÆf4gÜ’h”Fh¬Fkt¯iœ’l<Æk|ÆeìFOÙF×ÇÕ ÇrÔ2i0ÇÔPÇÊ`ÇÉpÇwGmLFy$xÄŠ{¬œ|”Š}tŠ~\ŠÈzäÆÇ‚4H-;…qQHRaHQqȇ4ˆÜ’‰¤Hÿ‰¼HŒDGÜHŽìHüH I‘I’,I“”†/X€ˆ•€h×’ Y`•à‚`Yp/Pƒ¢``ÉÕØIø‚–|ɘT 0à#a€`JiØ`Ë'¸ Hª”†SX€ðÉÉxªÁIúiøÇ¥Ü!H€«ŒÊ©¬Ê×jËhh€h€”èʯ´’µt€”Ê­œË³œ 'P€ÈÉTPIeôK¸ÌÂl‰-€Óx†ˆ‚/€¥$€T LÙ(€è‰à‚' €ÕX†ÏŒ`€S°¬Œg.ˆ‚x.ÀLÍœŒgxhËp‚/€ÿ[8Ët€À (8€P âL@€h(ͤ„‰Sh'€T†æL…ÊàÒͶD€…àáâ4NäTÎHò|ÎèœÍª0Hx€ô\ÏîüΪx‚HÝ|Î'8ˆ‚ý,N™PÍ•š¬ YHNî|ØÏt `Ñ„‚-€œ4 'p JÉL 'h€Ô…ÀŒ¸… ÍPÜ|¸JYpPx‚xú€é|‰Á¤PØÎe€/@•H£”Š/x€Øï<€í¤à¨ŠÜ¬Ñž€Ñ8ŠíÑu‰ U‰@Æ'X€#MÒÿ%} èË—äÑç,Ò*½R©h¦Œ†0O•x€øÒç);¥ú4ˆÐÔà‚H)U .M/0€gÍhË¢L€€ÐS”\€Õ0€€â\TihÔʘTi …ˆQi0€eR Ý¡HU‰€L¬ Rú Ð!=Qi­ T•ÕuUXÅŠ/ Ð/0¸UiÈÕÉ0O—ÄÐW=…H aÍ-0€–XÍÔÖe¯p•†p€/0ÔÉX† £4€í”†6]ÖL…EUiRKõÔçä‚ÎDIwÅ 0€ÂbMzU‰{=Õ«lÖ–|e…Kÿ™€Ø–ˆjmm­ ^m€¸àÒôÖY­S¥ÏhUs¥Ø˜°Ø QâÜØŽu®ÈTÖTèÖ`=Y§à‚P€ÍX€ÀЉ­  Ú•—tY™x†`ƽ…@žL`j%€tùRi(áL‰àQÓ Ù©­ZÓ(V]€(p€«|Nž² ‹Ð$EÍÖ” ^L)}ѨôT¬@UªU uÛÛš°X^}†HS¼­ŠZå|[Ü-ܧØpȰËÊM\™à\†<žU]eÖpÖM…/ €'ÈÏêÌ"uÖÊØY(x€Î¬Uÿ'ÈÓÔÐ](×…]ÙMÛ¶$Ôß}†}Ð\YU HÖu‚h€umXÍÙXS”•^Ø‚| ç…Þ§°Ø@€fU€ëÍ^Å…‰g€•u.hÞç•ïߥP€˜u€H`]üE_—ð_Ö%[‚5Tpv‚œÜ‚%U‰TXÙ0µ‰êtˆh€¼­ 0èS†¤à€T‰/`ÈgèÓzý‚_¦€Ê'ˆ`ȼ…••' ’U‰…Jfeá^R~ލŒ†µÞ•Èa,`ßDÉöá@­Š(€â[€b…,⸽â"þ=I1c2.c3>cÿ4Nc5^c6nc7~c8Žc9žc:®c;¾c<Îc=Þc>îc?.I0`š€ýcC>ä;†íT àYD~dHncE®×FN‰'¨U]}€¶Ý‚N€¼LGÂôÉŽ‚›ÜK¶U)ÎûUWdŒÂÄPYh€”ÜàH®åZVä—lèV€ÖhåQ€p‚]€gèåíTdˆÖÎìeøåg‚-¡ÍÚì4€/xÖ¸N[gr– E€PæëØ€çäÚWØN€…kvEfÊÐÎ`g…PëDXoŽÖT@Ó¬-g†nhi˜dF~Òÿ…î×n:Ý‚`® gèè\gE~Ö­d0€p‚¬ÍnîhPRovh˜¶eˆ¦èëmÓëmQŒ-Ë(Œ×eÐÏ}–¬eQ›Ui@i0Ï––†eÎŒøæEŽiªFä™®äìLgÈÌéWmén–…Ðè`>E>V(άffÈ4ÖÓìiÈŒ‚cef.xÖz­j»îãÞ.hK f^ÒÜ4a•Ø~hà‚)ŽÊBâ'`I0p‚ý(aY^ Ⱦk˾ì—Pd§ÅlÎîì¤à‚ eÏmÒ.mÓ>mÔNmÕ^mÖnm×~mØŽmÙžmÚ®mÛ¾mÜÎmÝÞmÿÞîmßþmànánâ.nã>näNnå^nænnç~nèŽnéžnê®në¾nìfè´Ûnîînïþnðoñïí†ó>oðÃÀ›±õ†´äzïmBïóVoö®o÷nï9´o.’oó¦ïûÖo»ûoÏïRâïôÞ,ºD:ÄDTôDM4 ÷oŸð§ðDÄoŠp‡o¿ð§ÄÏpþ–ð /qñ·ðêÑpEÅwDçÄ— _p¯DF<Ãwqñ Çð7qWñ Üooñ‡q%çñ%Oòɨqßq'Ÿroò*ò#·qSdr.§òRäÀ—or2rÿ!/ò3·(s+ÿòdó.¿r¬Xó7¯ó×A8÷rsôs3/s4t$r5Ïò(Ÿñ=oóDs77Éßr=Çs;—r9ÉGÄIGtI¿s3øtP×?ô?/uR?õAç PõQOuA?B‡õ4ߘUÿôV—õWw> 7uW¯žZõÿpTÇu^'öa—_¿u]ö^?vdvZ¯uev/öe¯vg'•dvlovo7öo¿v.Úv$¯ôF§ôs×ôN÷r×rLçtW÷xWt§h÷C§÷u/÷tÇ÷yŸ {Ïss_ôHÏwwŸDd—vnuqŸõ…Ïujwÿ„×wøMG÷‰ßwø‚Å{gô‹ÿøŠ7Ït~¿q€Çøïw¬yx7y’÷ø/yH¯ –·ø˜‡y‚ïø”wùÕ¨yyçy›Ïù“y¡?ÉK7ø‡gø¤wx¤ã£çø¡¿ùŸy”¯Š¹z¬Ïz­ßz®ïz¯ÿz°{±{²/{³?{´O{µ_{¶o{® ·{¹Ÿ{º¯{»¿{¼Ï{½/{¸ß{¿ÿ{À|Á|Âÿû¾/|ÄO|Å_|Æo|¹?|Ç|ÉŸ|ʯ|¿‡|ËÏ|Íß|Îï|çÀ|Ï}Ñ}ÒÏ{Ð/}ÔO}Õ_ý®?}Ö}ØýÎw}Ù¯}Û¿}ħ}ÿÜß}Þïý¹×}ß~á~°~â?~ä'~ãO~æo~Û_~ç~éG}èŸ~ë¿~ͯ~ìß~îg|íï~ðÀ‡ö†·ö¥7ÿ¦'h,Föo÷øùŸú¯`¦žG®Ê{œ-þi,hà“ƒ 2lˆÐ!Ĉ'NLHñ"D‹7*ÔÈñã@ ?й±¤É‹(S²L¹²eF˜'eb|Is¡Í›sê,ȳ'PŸAcmø3èQ I{.ÕÙ´(ÍSPJª°ªUƒX³ÜÊU ×¯a¿’-kö,Ú´jײmëö-ܸrY¦Š"ðv§BQ Œ4¼z­:QÀÿ@Và¼{­N#% —亡. À%Šéˇrqò A€eÃwËŒ6ʈƒF{à:ðmiN@}âD SñçCòEÚ-<³}P¥RÀ© |%‹²Üƒüå„ËÜ¢ Y!Å‚ êô ÏHcy@AÁš,ôÅY91À/Æ8U4ТPES@* ¤Â£40BÅ p˜‹EÞ8T0@D9ÕHcå“4)û ÀÙAµâ–M~ÁT`€À-V¢ Õ-PpŠ™oÕÀ· ÀEEÚ ”,È=#ÀuB…§4ÑÀ…¡S¡Xæ‹¶t‹u-rÖ™ƒ2øÀP²è]lÚiQ TU€,¢JÃ)T…}yÀ§£‰œ4¤¢*«E5@ªo¸’Z”,„*ëM_ }c¢™@N°”80í3Ì: mP°Dcí³Y ) ¸Ø*µ-Á•k`PhKn³á¶êàº7UçDüWT*ûFYŠ@uçÁÑüÛ@À*2à€‰'Ë$ °Už=Ð0ÅSÒÃ#lÕX9 ¨dÑ!ù,L‡ """***555;;;DDDJJJTTT[[[dddkkksss{{{Mx¨t€¡y…¦zŒ¯p±z—º}™»“WW½p|ÀMLÀTSÀXXÛWVÜ`^ÂkkÄktÊowÆpoÎqwËszÏyyÜfeÞhfÞllÔwvÑsyÓ}}ÛttÙxwÛ{{ãWUäWXäXVã[Zã`_ãdbähfämlåpoässäxwä||˜xŽœ|’¯yЦ}»~ŠÑ}ƒ³n͈FÊŒQÔŒHÑ“XÈ›qΤ}Þ¥mÝ¥rܪyì‰[ç˜LåšRâŸ^ëœUïŸZä€~ì–oñ [à¡fï¬qð¤bð§hðªmð¬p‚‚‚ˆˆˆ’’’™””œœœ‚½‘Ф‘ª›‘¨™›²… ¿Ž¢¸ž¦¼¡‚—¤——¤ŸŸ¯——¼šš®Ÿ°¤¤¤©¦¦ªªªª­´¨³¿´°®³³³¹³³»»»‡¢À‹¥Ã”«Äš­Åœ±Çž²È¢µÊ­¼Íª¾Õ°¾Ï±¿Ð¶ÃѺÇÔ¾ÉÕ»ËÛ΄ŒÇŒ”ÁœœÍ””׆…ÕÙ‚‚ÔÓ”“Ó˜—Òœ›Ü“”Ý››Ô´•ä¤Á¯¯Í««Ïº¤Í½®Ì±±Î¶¹Ê¼½Ð¤£Ý  Ü¥¨Ü©©Ñ¸ Ñ¸¼Ü³³ä€äˆ‡äŠŠíŠŠå䒒嗘圜풒埠嶈í¹ë´‘í¼å££ä©©å°¯å²²ãµºå¸·å¼¼ñ»ºÍ½ÁÓ¾ÈØ¿ÃìÁçŤêÄ£íɦêÉ­åÀ¿êηéϹéлñÀ¿öÐ«ÆÆÆÈÂÂËËËÁÊÖÅÎØËÒÛÒÀÊÕÍÍÜÆÆÜËËÐÎÕÕÕÕÕÖÚÕÙÞÜÓӨרÜÜÜÀÐàÉÕâÎÚçÒÛåÛÝáÞàâåÃÃåÇÈåÊÊïÈÈåÏÐç×ÈçÚÎèÙËåÓÓåרçÞ×åÜÜèÞÔèÚÜóÃÂõÏÏñÓÔùÜÜåßàòßàåàÜäääççèæéìèçèëëëîïðîòöòáâýïïóóóþööþþþÿû H°à@k*\x¡C‡&”Íž@{ѬY‹&¯Ÿ5ŠÑî“gQžÉh(5¦ìgҞ˄ûÙ#y‘¦Ä„o꼸³gΞc…8ô¦Ð¢H Mjp)Ó†C)æÄ¨ò#ÊŒ"išyuåÆ&›œ¹/ëÏ…ûÒªU+o­Û·pã¦m+·®Ý¹wó¦UúT¡Ó¾?ýÛ—0SÃGÒ¤êòëÆ®eÊÓ8Sãc•íiœ«±-TÉSm¢ÝJÚ¤±Ò¨S«F}zµëצaË6Yö³`ˆ“æ¾ÍpwQß;÷i®íp&i–];r½:ÙrJÈÉ) œœÑ¦Ð–Æ*NÝz¶wyÝ¿Ïÿ/5ñÀ¼q§·½^'p ï%Ïüv?Å’mîë\ñ2fèWYÓXI“µzYmužBùÔÒ :¬•7ž„RhAñ¹×‚µa† )¶Ÿ}£ýt Aa!ôÕL=M5ÌmD fYD‡¥?îJ(£„SyFX¤kDZxˆA}ØáNL6)ØÖŒ¤cba §‘B[Uå\F)¹èRdŠÁØKž µg ݲN;²À$„[%ydlwªf§„K¶åCÞho·Qi¥C&9' —ñ÷ßsWy¦d5fÇ!v'&”Ê:Š¡Ê7¤íy¤¨£æI¢zë ºª…9)˜ˆ`-ÿ8Q‹ *´KŽA u:–öÙL¡]9)œš$g7¡šj¤²ÉšÚgª®>)%´'ëCó‰FKÜ6çÙH`Y$ÜVí×â£Ð…KœZŽÅæ¡8¡²N>ètóc9Í2‹§¾ûÞùlz¬Â$­‡~6ÕÕµiym—UyŒ>Z£tšUg Ä /ê—»Á¤Ø7ÄÜòc(³ Éo¿ú’úÝ¿¼,ÖÀ€F;GZ2é°sôX[+æ\­ªÝל‹_±ùòt¾¢HRZà„rŠ-˦|2ÊE²,¨Ì0o\0†1Q„0QJËôXZ—¡”H`QT`~â&znJC“dÏ‚G',¼bËOÔ̪ÿl¡ß³Y-˜Ë|eMèÖ…4óׇVeÕpö‘Œ3íöG8ùÇ\?anuÖ{xÛ³JRXñK¾RO ¸l‚Fx»†¯ŠµÚû̳åP7˽³·2eÄbÃ- ë‘eDsEשñµ”V1N”.…ÂÔ©úÔà)Ûz«ˆÇ~4À_Åx㎻ÝæÈEœ®¬#ëbÃmÿä·ÛÝã o,3ŒTHòêåñÿÚõƒÁšöØsµj > áVc,ó¸ËÌ #ãÓVÎÞ ”‹€+p¶ ^¡HéöV½ýQÏ®àa8@{QžqhÓ™²<Ç[µñªÒœ08¹¡Í¸ÿ,Ò‡kø |°žpýñ …Þ¢jT¨ðudŠÂ´#šæ”ehECHsB3±äˆÄl'©ìJ4°ØáÅŠ 'ô‰©3¡³ÖØ2+f‡€ ¤ IÈBòë;¤ú"¶>óù°‘ó$éÌXÃHÇ–0„ Á  ¥(GIÊRšò”¨L¥*WiJ’Pò•°Œ¥,c‰Àì=Vœ]fx¼Eõ‡Yy Æj’y¤oR¨bˆ iRDm$#[Ã6ô¶ ,4a$ìÛ ­Çǰ…ÝôæS ¥­„¬©#4’ŽÐˆv–Ša L Ñr³ ÙC¨ÿ7*q¿ÜîØ­;¹ÅyWgÜÕQ,,p;±E.3¼É‘…Ì%±dYìA\ð bÿ˜&ê‚Kì.oâò½jÃñ¶6Îð…Ú¢+šp<Œ?³ #i ƒ"ÁÖ`2Ps–B õ̳öpw'ìÛK³” •̱0Pžaì7kkË‘ÛêhG7f1 @cåçr¨_nõ˜k¯ê:–ñT« §s3÷a6®*XšÕDº,ÚoJ0ñ Å⟀û@®WQ×Ù U6”|¼÷i±L›MÖœ6·.»@Ÿ=A‹{Èc>ø€.$Ÿ'tƒÛåÆÎ{K÷ºóÕÐþšP&ø"•øMºþüœ”>‹a´`FÌð<ØöMwzå{Os»;\ó:µÿÍ!*”Jþ×øfi«KNtë)W¥,Œ5£>ØA‹| È¢ý°Ÿý¹ç¾ûÆ{ÿ€0—@B';‰“o°µS—oäC.ta.r>„Ѩ BÒ,÷t|hÅ~S‚˜7Ç×l$OBvÎNK³Cf³;f“>1g%d*å £p š@yJ‚ W‚2'„¾g€Ü†€Ex!9ö$V`¢oXI§iCB¯À »pERÀÆ%£}?hy=w~%‚Óbh‚‡„å3>CE#q³†æ“dB|_W©á Ïó{—mMœ6 ßài©ñZ‰¯|Ý׺ÆbIÌ£ú\ÏmZÕ€‘>SA3]”`[± 0’<U­rvP$ÕÉÒ Æ€«¨À‡p Ÿ0Ö1Àž¡ÿðÙ9 ¦«¡›èõ¿S4×V¡N tÓ"+xÃË5ß4=߸³Û±éÛ^ÅÉG¾°à; >ð´«áÈcÀw ¾L½œ¦p°ò £0¿$ 9Ð-°´ïëÝà-Þªñ ›ú#žŒÖ­ÓšTŒÒw™«Ó·ß(~×±­ˆEñ×XØjÁ?qNÙÜ ”@£³± Bc`pè™ÒˆP5𡉠kw–ß Ú¢~p¥áÅ¡ 70 nól€,†L‚\š4ŽÓ{Íâ7ÓAÜ==º"ñQAÍÉ!i ®¬Uªò  € *÷k:ÚÒ‘1¦±¸JÖf}åØZÌéœ&ñ ÜÿLäU.è—–ôÁU²~ÆÇÌ5 çt˸,æ\eF]þüì.-¦æŒ šnÁІú9x70ˆŸ-ï{ßP€^Öá­á[š¦ˆ.­˜jåSÄÇ£LixçZo`&Q˜§ ,ãäÇ*eŒr„M7žã¡À– ÍÁúÒ[aЍð ³@Ö3` ~ဠ0àä½ ˜í©7¾¸RnŸ‹þë¤5‡Í‘Að¶£Ó«×Ñ‹(jDXžL<é*fÈüý#,`ê©AŠ›¼îá)ü#9 5{† .0 Ú¸ )m‰èÆ ÜÌè&>€Iìg®É®üØò.¯H‹¤>/ÿÿ‹DH1ޤD ŒÀ”J®ŽÆ,p «t ŽŒà‘Œ€ô' š@ÖŒ` ”`.ð ôªÄ,ÐóRÏŒp î¸ôŽ@á­ôwÙHATó3¿ö¢ï¸=¨Û\«Ë#Âåá#í5Þ¸«!'ß¾íýI:K2¨04°‘é 7.0 ¬ µïN£© °ON\ªu™ÈZn/  üŸËa÷eÎU'AðŒ¼æ·7¨…ú#<,-­^â– é‘ïÔµî9ðç7UʘŸü»gol"é)¦€, —iÅîJšËÞ2¡çZÛ+.ß.ŽþðËÿ>Ì/™°ç½ÿ?™ÀFÂMŠŸ¼é)¥0»_Öf-´1ÏTZ¨ Ÿˆ¯èü)n.-’±ï‘¶uÈn+>Úµy òF“·¯_?yÑ<ØÐáCˆ%>´6Ñâņ1n„¨‘ãÇ~Ar9²ß>)USÙÒåKyèF…šõ ÕŒ³.¡ Ë%¬P<]¸¨Qc¨Œ7f̈¥(ªnŽBBgkj·n3mÁ”7jÍ›5ò9,irbÙíí³'Ï^¿¶k­ „Íš={Ö¢½5kmߎ€/þ|pá‚QÂdÉÕqÊoAvÃ)e¨P.1Ë›A4T¬Î1¦Âúªr³ežß€v›Ü滥èæ˜ÿ±Ž,b‰‡-¢ä‹PžoÃmQî=h!îº+ïËÜ/òˆÎ%.~Ùø±ãȨ&W¾œ¹%ftk„ŠìBÆ,t³fŒ2J¶1 ªC±–×Í5L3dË Uû6ôÿLâ­!ºè I¸„ø2î7-’ΤAŠð£ )TŒ+뮃I&šº kJxò©¥§BªTbpa†Yf±)§‚Šjªª®Ê*”­`ê¬h+£ìK }Ør .·ö™ë7ãîÊ‹¸ s‹Ò°)+LnÊģΥ a²Qr0…>•ìà ³j0á÷*‡'Sf™©¿¡†Ša©¥PD/œXL¹!‡PX˜O XÒ¬á†ÿë3%¨r §†"•Áƒ„įÞ0²ò$k:‹À :(¡…Ä’",7¬ÊT/dì1Xrˆ4ÒrT©œXP™Å–j(MÙÊ©Og¹©Nrˆ%”ØÄ,@CIêF%ÔPD²…Ø-'R"¥R*1j‰\µôôÓ†ð*©­#O ŒÕ(UM—Þ¾¶l©Ë–¬šA†P ¶Û gÒIÄ®¾2§7_ˆXbxkúЦž¬³j¬´v]ûcOÖúŒAxœ(.#M½×,µŒÌ4Ky¯Ä·A{ÏjUK ƒŠØì[j˜²³Œ?÷b›Å^–n0º¾ÿlH ³cRZ­5XÔó.¼̉t?HoQY"‘DWJ³Õešk^õfsf»^W«óhý„®µhɺC'¿ýh³¥é§£žš²®ź­ëëiÛ t"µö†̶t¢´…Ó4ßx;[´;:ºëΛKÇüXà÷s©â]ÛqaÌQqb‰)6ØCœfñ0ã”6îÇÁAžeGydUÖ”H,×"–áµæ‚dFõ¹ñ_õIÕgYgý›+3Åy%6Ç^°ÿ…Ê%?SÚgo0…‘phíLÐÒhðTƒ~c³ŠÁ¸Š“ s©dm aËZâ6}Í‹‚x™ ÿ¼VǺñá¬|mëÙc¾4Š”Â×ÁU"ГtðD…*AE³´“\é ¸:ÅŸ5(mÁbΚŠ-JÛ•ÃOƒ2©·ˆ`je*ÉKa¤¨A$¥df¡ëB(BžOCcL ¿È“§Ìˆ*04Æå¶Ø%/zÙ"HS$|Pƒw¼#øôø=ò}Ñ‹æÓÛÉhFC~Ç;ÆH d$#Ó<&Žo¹Ëqú"º“Èã¤Ûä¶ÉÏ Œ‚´c yDž’m‚yyC¤ih’²¤Y:©ÉòÝ²Ž­ƒ(/ØË.bДª&1c©¬ÑrÃCØuâx—NAÉ|xÄ%¾øÿH$?9¾ôå/K)Fcò:¶€˜­`bŽ9 ŠL­9Óûd‰…Ôò’TÔ ¦0ÕÁÔÁK-àóæ6y‰›nªJ_+ g1Ѹ¿7¾$=¨¨ÖKrøÂwæ¥rÄM r˜”èeI»ÄâI8ÈÏ~ôŸˆ èëöUPpzÉFZÑP*IM%aS”‰Ë­ÑÇÑ4u£äéL}úMq¢” °¢}šRcî㢺iéü‰6&¥=N¯H¬öô§h… ;¢ÒǨ-ýªR™êɧF„.úœêö¬ZÕ´j5®råªA…êRm­Gd*L—„OÀ¦¦žÂiøÞÊ­’t¤Š cP¿z´ÿëåLGE*1 /‚PÕ–w]í²ÏvᄇE,0I)ÒÅb¤«Á+1[DX˜ó1¯c¥ØrS-† P ­=É•A@’6¤ŒÍjb‰KÂÊ¢”¶§\®3á µÜÅ©‰Y\‚KÚ’žö¸tåÈj!ûXÖ‚w¨(E—T‘´u·téîrÖõ^øÆW¾ó¥o}í{_üæW¿ûå¯|Ûb XÀ&p |`'XÁ ^°[ú‹_»xJ!üp4+üàüBH›¨-®qUkWåŠ×«}}î "]ͪµ{Ö-1?³Ûá¹zø"Þmîklã²¶X"W|ˆnÙ«^•tô°/ænaˆ, ÿôƇÌqi/r®(r0<Ö1êŽlZǨ`ï’Çèå—”w$ÙûñU‹ìâ oËY²c¿ fT6ÙÌl—¨„¼fì¦ÙÈ©]ŽIÇ ^8ÏVÎí…Hèì|][YÏ}Ö®š·|RÚ1’–j•BfÞ:°Âu2‡Ï¼i>ï&Éá¤trO)æ‘@y´l镵ìéO‹ÚÔ¤qxIÜiì‰Vg¡þä¢AÍê=7–Ë€®õw Šj`3šÓ®†5ž=׺Ôn¶¬¥5Ìëš1ÛÑÍvö£ÿüØi;œÈŽus8=çns[ÝëÞH´#]ìi“ûÙÏ9·¶ƒì_#—Ú!–ö ¹ékEc{$ÿÿ8DÜÝexû»à:·¦ÍÝheãÚ£6f¸!M^kà½^8I:îqa_œØý¾5ºÙ}oáÚ;âó¾6!Åýæ„—Üá-—x¶7Ns–k<ä߆9É1Žë•çüæ8O÷¶O>cŠ»6æ?7¹ÑŽæç´æD÷öˆîócgœáQ/7½§¾uˆ#}Ö_zÖžï®s‘ë/K»Î].rp—}ÜZ·ÐÚ‹þt´ßåH»Ò±>÷³?<ì¼×Ûv}¿ü®rO*ÝA^x›Û}§zzÕm}õwËœàW;ç/ôº¿ç‹ÿ{ãoøÃK~ò¯Æ{Þ1X$ØÃ¾{±§}ímûÙß^÷»—ÿ=ï}{D³¾õ÷|èSÿø¥ø’XR>ê)ïz€bXúÓ§~õ­}ìg_ûÛç~÷»OuáWþèÐ>øÇïüð‹_§*'ÿÞAïÖ÷ÃÿùèO?á¿nüøKýøúß¿aóïÿ!ºÏ›?ú+?·»?äû?¶Ë3Õ»³ó+@÷«?Áë¿T@ „@õ‹À <@ \½äÀ4@ÜÀ$ÀüÀAü A DÁ$ÁtÁdAÇ“?<ö›@¬Aþ»ÁTÁôÁt@ ´A BDÂ"ìA!,¾LB&J¬D2ŒDFÅU4ÃZ´EGdÅ[tÂ8üÄRüÃV”DUÌE\$FYœE]ôÅ_\FZ4F;tÆg„D^äD` Fd,FeLÆjÜEBÆlÄÆmüÆ^Çh GrìFC„Fo<ÇuÅf4GwÔF=gtNgu^gvngw~gxŽgyžgz®g{¾g|ÎgŽ Ј-U}h¦ç-€ÒƒPÙh…^hu.èµEhƒÐ‚ÿ•…Ù_60åxÏ~`Ô÷¤ƒèÖd‰fÙeî”7ÛžìýtÔhhϼd†Žé….hÒl˜Z0Ú£U€È‚›{Èé(-h8Z ÍiØé¢í6Ü…Þ'59(ÚhR™þj°žˆ‚€‹õé(ÖÛ`˜Þ’`ƒ‹€ˆ†©v€‚΀Ò@ëY-T&ý[­>Zd ØVè kÄNlÑ4è¹ÖÃnl#=W6èi˜Þ®Ì~Y¯.袭TˆF8€,€ÞÍjÌ_ÕjÅ^í¯v胞Ú×(&ÕÇÕÎ.ˆ€ÉÆZÿyˆÓ»î‡çUÙ¾Ø~mèRÔf‹ØjÆfmèh׆ì'-k­í’Eí¬Ž†¨ìž6†‚îYàÑêFjåYÍm킞Ej7(ÚµnùÎgEf7ÏGf€VþU,å=å~¸ëmÎï\ւФƒ,`véHðù~p‡ˆ‚&ݯp ß7H˜¾pïpÿpqq/q?qOq_qoqqqŸq¯q¿qÏqßqïqÿq r!r"/r#?r$Or%_r&or'r(ò÷>*¯r+¿r,Ïr-ßr.‡/ÿr0E{ÔHkÈÿEœHs5‡1ÇÈ6·H,s4‡Ž5s9—H8¤È1ó=Ç:ÿò7‡Ècœs>wó;‰?÷ò@7s2ïóCGÈŠs´§³§@ž>ƒFšó%Q…FuzZÑäµ™S Ü×2fJ• EbzP"I¦-îK¶ìØyfÓª]›-Û·pÏÆ;1éQ„vï2$ºô§Ê¨)RåiõêUƒcâHò¦¿ÁbeJŽ©l²å˘EVÎÌ™óæÎ™»Ô;št¼ ©¶lŠ‘£FÃOý‘49Û)Ö‘&ÏšD»÷gد‘=ƒ.ù3qâÆË½5içD÷ed¾¤L˜†gz„]Òäë×°WÒÿXÒbØ—Z­/T9¹òöï‘Ç—Lý´i¤÷‹|Êu¡È›ªÉ¦ÕT»]“Q`¶…wXk„•„–HÄoÁ™ó 9îLæÞ|rØÙ†ÊÕ·X~]‘¨Ú>QW&!b‘„Õ5(‰g L¸uÄScCíÔ_jîÔòʱœSœ‡ð!‰ˆÇ‰X"‰AçÜ@¶„Ò™¤PLNy÷‚Wa›j(Í„ãM/Mèäc¼¼2K/»¼K†”)y“Jâ9Üš½Aa~TZé_wý’G&˜abš) ŽêõHÞH‘¦Ë+t iŽLzrØ©§Jòù§Ÿ’švbŠ¢b·ÛbTžmàeÿ§Ñ’õ œ€† ”œ1ÅI§vZöé|Æ‘”GÙe]ªí–[uÇU)ò$Uö ¸‘¢áU+YQê瘠y#Ä ¼¸CÎëì‘ïÂëaªÈ•T¬Ì”¥ˆ\ÂVåc5"«ŽãØÑI އŸo`N7œ!‚< 鋼ñÎSì{_F/©£’÷T–õޏ¥¯•7r¡þµfz˜yN¢WëAý Ò =Ïèñƒ ´ÓaÆš]'’ƒl”–"çûäA¶<Ö—7bgž³ Ø’j®}G(¥Ôe]®ãÒj<0(M²:¼©Ò³‚£û)ŒZ òŸFöòOERBÑý“ 70ÎX~7…óå2X_\R¨ŽçC@“\ôÊêNÙ5 …6*ccM/Í„*âHD!ÿ ‘ã|èÅ6¹¨K ò°9žûepP4;°æ@îôÈYÄ¥‹l'`ûi&ÿf#ªLΣ…—¹…’¡1óÝB}»§ %'3'}I™fÊjIë*õHÙ>53óðçJ”ÊH-ƒ -pQÿÄJ Æ•"J@ JL+2Ó’ÔÔQœtÍUÐÂSެ$"-Jͪ8YÀ˜ãw¸ˆÂT£ñ’œð{jP:+PâkŽjLS·¥M<ÒWvѲÆäŸZè&A êV•ö0®B‘N¶&”uJV:O!¡þà˜.aaÕd3Ö‹6&é0†'Ò!“s𢾠±RzPÊÿBvJ2É•B«IÜ$qz€Ûm¶2GÜ`©E› *7† Æy¬kHr’-ÇhÛÔÇú2(':‘Éî’]çá([ÛùG£d ¾ÖÆ#Uaƒô÷ÑÓbΗò9„´ P1•C½$Q‹ÎÏ…¿%±’4q!++ÝÁŠÄJí9èžЉ9^Q‹˜ ɾ­­}äêP õw· Ž™0݉àÝ$ÆZ±‰p„¦¨#³3&€",’ ×W$ží}ç“ßüd°»òCed“ë*UÚOFüÓ®IèaÞ¥i9¾YŽ{…ßWÈ—¾^uÊá/nÃ:¹,cì·8ƒ[cª l°AØŒœLÿˆfBŒw(’ç‰Yn+~ázÝÈb¤f=émƒœ§JImEšëÈDãÙ-ô:FÐ1S§2Bg‘¬ãµ±õP8ïäX.—ó¶A”Ýâ:اC‘ÙyEõgw°ãŠšˆ39²ý²áŒ~¶MϸŽOïbOC„¿» ±Q Cè¾²d<߉ˆ‰õêáªÀjj˰ÀІYb.×^ì´mû ꇸp,¦•úª#"ö/Ù‰±èµÔ›:Ã<¥ˆD F ‚;`Œ±ZÞ³S?ÍíP/ÚÈaM ?ɘûÁ.Ý®ž(š2ÛD{œ© ‡/LÐk\ߨŸõÛeo{iÐ MŠ1só˜?“{ÿqt”»##‹ÎÊ¥€DL&!‚V\<Û;ÖõÆ}Üq‡Œœ)yÚÉŸ™¢ÁÄÄEßʰ“¨2çM:"Èf6‚ ‚aÜœÔÕ·u9Îï‡yM/ù<©pJè5oÊgµNˆàlˆƒ† ÝMß:ãMÚ9¯{®ç*d]®'üâ99M]Px²ÅLÐ[+øÕÕíd÷»ë|ßÝæyNüîk×¼ª®‘V¶ Íd·hë0y#xÝá‹ZðÂH÷Æy†·¼m®g¨e·-ʯ¦èˆ0ÖªcS¶µƒ·ÒJZÇ.bA TdÇz7M¯kïóÜ>vu¤µìù]D5SÑ_ãÿñÛ£]Ü‚íðÐ: ûŠ\löZ÷u¿mŸ1_¿[À%ó4±ÿ—Åèy㇬ð;¿ãߤB[æà¯Ð.ù}˜7šjÝÑLE8FÄ>ÕD‚ã G#M4ekCZ@ É RJîcó  ¯ yxG»&}|÷äÅ%8˜eO„æ`2‚q„bEg $˜ SpR"á^À!—B'—ð ›ò€—Wwt…X˜…Z¸…\(=Ùç/°ÂSpDGDŒ SðƒÄ T@ÌðH‡´ -p •3@¨‡z¸‡‰IÔ·w]7G(fE7À^Æv?a!MÆÿG‚ò`‚((RY@ ±° HAb4Љ#yÊÇ|B£iÚf·gƒüæ &4GSóqÙ20Ò²ãs–H€RP1Е‰Ã±;ÀÀÀ ë2 ó°~ì÷~:F{¦(€j§÷…cBG&æ/štr«È÷@iäg~¹€1Èz¦ëR_•1$Abeî`—‹ÊñVHð(ˆ§f#4¢-Úñ „•=Wn©S%Ûw²1VÂãha˜rë' ³<0'.è+yV…òÍØoaµƒ[µÄ¶8OD‹S‚c-Ù6FŒóЂ±ð´€± þ° ®0O(³ …" »ÿ° £È>¥¸]̈Šè( &Ò ^´Xxuµ:~#M`Te®W“¼ðî0 .V¸ ,ùZÑ5q]7FcÊè“ ”ýö˜ÅpkÈO±1ƒj#¡z§6éH ²¥ŽÐU Òe¾ ³iÅ ®Pþ0¡ ³àr²)À 'ä@—²“Í['ˆeég“e2fU#Mq€!AX*8b’Ù~± ƒêò S(¬çz°WeÐEŒq‚.°þˆi‡!"'9™“¯–•)‘h–™‰[eFö<ÇD†$i[e=Xqš’aŒµ` ì‚ìp)Ðõ+¾ÿà&æP•nò °° ™»É›Ê&»`:0$:`Æ)NF–˜¹ŸC&jvAD™µLÚeIAø–R±?br#AØEmr1Ê0žSyµÐÀ0žs¢)uö 6Ѐ%íéž¹ 4`µ` œ8¡•Æz³˜}‰5ˆƒ(ßöf¯ñ(w¥JZ±(è6+ ×Ï(„ *Bò+ÊPሚœØó%…qò "ñ <`)I™P!êž« SŸóù õyŸœ5Y›{}2zЏ5BO¦ƒv39úаré£U¤ÜÀfÙã”’Ñ&õÅ q¢¢2±~%Z¦5iÏEœ{Iÿ0Yêžà¿"œÃYœ<)ã9 ë`žÈh,ïÈŸÊDF 4²,¾WšûC§Úp©– j—— 8'–Ñ&S µPŸ¶:žÐ%_< 2€ð¨z îð˜«™š”‰Ÿó ¡Î•¤œ£z1}Ëx‚f3Œá/â”»8K¤-àÑ—qŽ.À—1 ˆP‰B ± 5 6 ƒë Àà€» ¬*Àžð¯ ©Ôà•õ)Ÿ÷ù¢›ã•¯¥óð –ÚÔzÖªŸÑar6ãT#¤\ŠVš¢qdµˆÌ ÎpMªPœ`Jô*ƒ“ èþÊ›îÿI6· «aÙ&rÒ¬­Åù•0 £hZ­7ˆ´.&7)ˆ¸ÁV ‘=l'–à`M‰ ;±À‰6À`k«–±ÂʺɛÜ0 £ Ó ,™“9> žEk¾j1gú©¹œ«/_æ4)X±S¦€“чð Ïà„i³œø ´°Ð*À0 . p˜þ  xàž¤À Z)yã¸~¶:Œ÷v¯ùJƒG¸3ªSt†ˆ«/1"&Œ+ˆÀ@ àˆ0Ñ@¹–«6æH¤6 Ÿ¯Àدep˜0Ô ‘Ñÿº )3ÙEï±É’´¸kN¯(µÉóˆ—áÎÀàŽià‰à …à† °µ q¯p …„À7ù³¦<ÑóU¤•/,‡Ð@s²‡ ذ®‰ 1›¼Ð°à iðÙ‘C,pM  Ü  v„Nÿ¼.4ðŽ,¯›eú ‚š°˜ag] e?ñÅë{ÂblŽÆýØ7âQÌ%0¿Ž`¿¹!1±ÆÎ ¬ÀÐÀ:À Z_×ðx€p -h2@]+¬a‰¨ìhÉ–Qe¾`X¦É²ÁÉé›»(üÛ`…x3U##D§,ˆ° ¼ÃÑÇÖ&ÐOqB½ö© î¦Õ0 ” œP æ²SÉ¡2À—Š%ùZ>k<›|­ zÍ‹ÍÚl=LÑÍ,òÍ2± Aà=bŠÅë‰@)KÇ< T:§ ž¶.à<€m¢ÏóÀÏþ,–—aõ9$ÔÿÉÒüwK±­»wÊ AW¥ì$Ñ ¼šŸP· Í@n`k°_•`6˜œ8À{KÌÆLÌ2pÑ–—œ ¼ 4`ÓîãbÔl/êÛ,/¥ÓÉBÆVcÆ ™5§‘Ê0¾åÚz¯7ÏÀÎ`m2ñ\h«_}ž”ü üÈd|8©“5ÖÀR-Ö‰dДíK4‘¤¡ÂQÆq a–A×v=;žœ¡|* HÌwè²:`ëpØŽüÒ0ý•CR_æàÎò9Ö}™•½Ó ÔM›Ó –"aʧ¥ÁGÍÁ˜'VÉ™ƒµ`¾ÐÈ40 Á*çP 1°Õûÿ&–̬˜kÌa­ÛҌٽýÉÅ}§±qÖJa&êEäAÔÁ9$-ð°—á‚‹#MÓª‹è 67V /@‚é¬à;Ž·Ý¡Ó[‘Í\8á^ág”h‰fákt=v$|¯c†Šô š  ŸÀH'ý†Ê` -@ ŽÄ œ` šÐ‰šã*0¨ÐÈš  Ÿ/ -à(ÞHšÐ%®ã-  ¤0‡3Î ' IÆäÞócͼ 7ÙØµ§ÔêõNïõÓñ‘ïuÆïåÙ-)/…¯ð3[ÓÝëŸ!Ê'æÀð\ÿ=5@?ñÏÖò¾óЄËñT_óeíŸíõ½í/`¢2pà¾à 9 îMaå~îqžî“aØì. 7 ñÞó<}ñf@³µ <0 …ŽÉ`j)0Ÿt¹nò—¸éºîè&[®5 :P1Àœ;–äP“µà€Œ.¬Á ì¼ýõ<ö€KLbþÙ×-¬4´Åî ·l(àöÅØèé‘Îm¢_:½ºî´  ™(ì{“Ž^¢íB¶2Á 9¯ó^öB!ÜP$öÈ繆=¯€^»ÌOmeØn©ë^æ6À¹0ÀÝ2|_ÕnÏL_Ÿî<Þ°eØ)ÿ¬:À ð 4ï{Þº/dŠ¿ø©1ö½‚ÏÈÓáòîñ"A½¾ 0pc»­ ¯jÍ›GŽF‚ó^½b–p×+rɽÚ勯+‚îhÐ`'C†»yû‚ÉæÏäÉ“ÜP®dÙÒeÊ—1ešT9Ó&Ëš7uÒÜyr_B A• º ËFw7#JМÀyCº«Aä<4€é€±‹à.:ž,HÃFÂ…C¿B”H iÔpçq]È‘%]æìi“oߘïìðϦ@Õ&öŠÆŒWXl̽JÔ]¬W¾>Õ¢¨ð¢¯Z”kÁ±k— µ.g&Ú†¯Ö7ŽÿEŽf`TiÔòå#ŽŽ_ŽeŽIä‰mVÌI`UŽ8ãž5 Tè"^wiÿ££ªúhw]Þøa ¹îú&¢…ºúæ±wvÕLnÒV{m¶Ûvûm¸ã–{nºë¶ûn¼Ý¶'*eúöûoÀ|p 7üpğǵ·ÒgY¿~<ԑǶÚr³™ýYò™9ï|§°±¾:s8IoJëÈ=gò…õ¥ùà²-¿œés¥†:ÉÛ[ ýIÌe7(Ô[W=j׋j£×á¦sWÓø û…}tß™¯Ýù¾Xz°‘·Yyz³nž{±Ïžò¢©ï]üëÉÿÜëè¯ùûêÙ¹|÷4ß'ï%¿8o{Ãà (¿éUíóK”Íd»ü­‚ÒØëG»û½or”àÿë*˜¼ ²l|| KˆÀÒo}Ü\üà·Aºdwd³à EØ>*†ÔÉ gWÃØÙ¯…/Ä_uHÁv©/ˆ,t\]C#šÄ‡ L¡ ™˜º':‘ˆZìÿEÅ*p„YÔ ¡ØCÖ ŒI¼aõÅ›ho€hô¢C8*Âd Úá`¦VGw­±rBlb ùF8Nц@lãÏøH3FR&Š\¢YHDn1“šZyGFåqSpÄÙI@RKé»$9IÞÉò@&_Ùxà1¦z2õîã0Ÿ”Q$æÌ4@‘÷Áä [V €z¹\fÀ€%ö€ü+  hvÎ> Ìy¢•£è<˜!þ ³2­{ Ò°GMhÀØãP/©ýnXú@_È0˜„ÕÍ ó>@3pº'Ê0¼,4Ãtn†œ¬Q“Ú$d¾†ò jV»Ö(¹F¬‡-†à!ÑpÎ €h2Ù(²0n4ƒÏ_ƒ¸Z€ÙÞö`D=ô6Û$h÷üak*ÇÛÿÖ.€°ç?X›QÞ‰àk“{Ÿ†Ü“{£÷àŒ»Æ< ào€KøÆ-ÉC°'n’ü&~€=Ío“€áƒ1@èÛ6f΀VŸÜ)/ Ìÿ`m2€Þþ@¹nmX€áÞ7SñZÝøÒ5Zݘ_@—÷Ò›Þ—„¯d@”….Q ÐÍ7ÌýQpå0ùßšv´Ü ˜? o€~{Ü_ó´û#éf÷²N¯ø`T¶¶û‚u&sƒyPtס¾“°ëúãŒGûç3Í^zscÒ…Ùš P^æú¸I`é/Àß…¡ÿ¼¸¬mÕç=ߎnòÐkkï$ñ.÷Ñ—äËó Û:ÝUÂeÀÀ<øþè÷ñá]z”œZ÷h†H=€Ý/Ño÷× Ó $ÑR¶Ó2!å?ú³¯Þà7Nƒ?1 €ŒÄƒ5Ý[Ó=¸»ºÆÃ;VÓ¿™=ô½¹€<@ð;‰f®"û+4«óZ[3çà53€>åø0€Á ; ?ø°%3aÛ¹K¾!Ñ2é²:nø8Za@”à<“h7-C;ô6†ó»ðA3YB«B+¼B,ÌB-ÜB.ìB/üB0 C1C2,C3ˆDz2S¹? EhÊCû6®{¸ð· |=S5ð¹`ËC DCEU<€S3<€à3?85Wlì”îE°/×rLÛñ«»37n^ÙqÞÆ£á>8Ók뛄ž-˜¶íÚ·íÞ:ÙmoÞ¿C|¤éÝgÖm™Ö#Ú±ŸE«äÜ´ÀÏm2u©\!]À²sÿÿ /ž/ùÛÈ_½ž}û«ÃW^âIÃt=ÛÔ—ÚâhÒÔMf&}ÖS[’ ôj}· -Ù”ÓWyGá]2¨Þzñ%Öá{Àq]üÝÇIr!H‘G­5“F›1 thH—Á5L ‘T* )Š7f¸—…FºƒäléôaUOB "| F ÑL†Eƒâ‰més£Bg…%F*ÅøRgtÍèQK:´`“ º (¦Èò (¢HxÖ’òÙg†pºWœ•Q:¥¡Vý†åG[2t’t‚YQN7Ö™kz†cw ^W§ º# (z¹M]~–—ªª€RÖ¢Áÿúj•#ÞÇV MÊ–†n"„i1VgQ®Ë¹÷šgr¹YžgÝ™ ªI굪xÓî…«¬Ñ:%UØfkr¸2DŸM½dntp‘ÄÖE^že0VJݺÈåä$kª5Z6 Á,åd¤8ÐF[¤ÁSxí{Ý.µ-·Ú:™V¸=—P˜œiÙ>3 X)ŽÖ™–]4g©«ÈÖ”ì@‡<`F!ìä,#¬¤Í —·ð¬ ?\hÄ×uäåFZeÕšÈmÖ“‹H‡#_GãZ¼6DP^ñCÍ!C%œRË„8ß\¶Ù £<(Ð>?Ô°ÚITůøÕf8–’W!íÿš´Gʱûh¼*Iýi“Pž6ÒTs¸ÓÙ8W{›åyí,bÏmÇÊ6GÍM¥Ý¡AƒH5]xE&ÔtŒ•yV²Q2ŽÍãE|±»äŒ0æ´_—æksÞ¹Ûl³®Ï;D^î§J£û•F/f ãÊ ‰65ZC™((DûLcL×{ÁÄî[lÑËžg [«!÷vüÇÓÿÛTÁÒ]÷ŠØ¥’êešœH¯`ùOprù¹úѲœáJ¨C2|±….°¯lî«ü|óÖnòs÷œ÷-sÝ(5€Í<¼”1rÝÍcÌØ±:Õ£ºÐãÈ`„< º›Úÿl–AðlpCÅóà9¨Äû5Å%í: @b˜é k7êÒ^X¢S&ª!'>÷ñ=H‡30! €€°† VîlCñBh¼%2qs#²ØCôÃHj¾²Ž¦J¬5éco(–Õ¸$—vAÎ [C’p]¸‘ˆp,âXGùiñ“  ¥(GIÊRšrL]ea i/@¬$\OYÀ™£ ب°„#S IœÑú°’ëBú¨PÁ~F«ˆãè"ñÈR‚®´¥ŽA¨¾ÄÅ£ç¬S3ÍÛ€ú翦d7ÕÞ Or@ìáÉ8‰.*øKˆÔ’þlŸJÙÙ›ùÔ¥44hd²9¦`Fd^!àQ¦¦¤d‰ŒáN5模ÌcŒ|YÅ|¡$ ®“R½Ð&«zM—Z‰E‰B'ÒŒtFSãt ºÆ"¥’¢–Ë`ãô©sí…[°d0–Ê ¼bpªY(LýÚWlê‘*…ÞšB“ØÐ H3Ðy¬Þ”öÿ5…Ÿâ /ÒÇ )¤ž}£^AÈ×Nbõ¯íD¾šº¨1c¬ÿ« ”Vÿýô#‹ÒOAö’¿,u $…jT?;\ûM¹/ÅjhE/­¸OlŽ{Yø(ѬðFÕ#Yá|J–ÚÂkSœ]7÷Ž]Puñ,P1 =±*¯i3odÐKU‚Rx½Wª ö0ìUîhx­<µ(G sÁd]B7+Û] žE`A“ƒsƒRó€–¾0 µ:‘èªWññ£Ø4Ô”.4é©QßB#Y鯅Èï|ßIÊ1ªYdH¯ Ptcã²÷¸¥W¾۰쪫QSdS[ „E²ÔÿYüÁiBÀÕÅîØ(Pq– iùŸåòyüÄWÅÌdìœV7£‹jìêÌIHì™,Q¶Å»9áXx=gù$~~0y#,è úƒ†¦Š«Ö°UûÊø}ŽF~¼‘w,ALySMÎrgN»ƒÊ °2–ÿ aÁ×Ô^¶ð©2à [i¾¬¹Ñì² .rÆ#[’u3R“™ç‘ A÷XG:`A¤”¾8Æx±Gml 'ÙvLuU íîoiXÍz¯L^2ÅTvop'VÞ®]µ‹à#¿¸Eže㺈cÁ þS±åxìw TÙð¶8DV EPMÅ%¸MYQ·ß‘¥øß~ÿôˆ-FŽxÌOÌ(FR)Üšçf¯ƒÎ8ª—mÍc15rþ^¶ Ô·’Dç"£‰ê°„hpF#HCEÅ €„ °áž¾3Ø–¥Õå‹ç\½þ:‚èèVZè6éŽüˆ£¨edLóeRâă$èH ‚È¡fã.©ûåÂcÜëßãŠ;®¢»Sœ¬ ZHŽº“5K‰E¸aY˜ ¨ÈÆ,Jedý¤€|rÇ^\°sÙÊe¶Pñ}Ñoi?ü¾³#´‹œzçÅ-n±ƒˆà,‰Á'NŸ¤­ÓœâõöÏ;'oÖËÞ¾áQzC\ùÙéu»2ÿTÚÅ–èEÃÝxEßAê !„Ì7’óóŠËGçõ«>{¼âp1igN—Ç&¡³N¡¥.Ew31 !kð!@36—dsèa҇ǣ†'Bs¶a‚‚S$Nqa-m¹øÁÝ5ŽÐw!À WZ—zíVj‰·`Ç­—a¸?n—°V4!y@§fB“7þ³1]Ôbå0 ¨@nÏWƒWÑ×sˆ·s¸c\‚r@¸{å§#„8î¤E{={ƒ"ÖpÑ"¯ §Ð 6}8xY˜Ó'%NÑlÞ@°¤§#yD6)EE³e_kx$áà « äÿp!â€n/@3ìF‡„׃ÖWhy1í•{}È&3/Ò&ˆ²#ÙA@¯•-ž>éó&u@Ò`Û @0‚wƒ—(v™¨…wˆ…ÅEhhd€TÁ"¼‡H0„y2ò.ÑU°¹à rÕYâ±, p 3x–¸z:Ø‹x¸…zÈRÇX=çô\`!y;¦˜†Siá—ˆyá TpW'ñ_@!£¢' §’‹ß˜^{ƒBM™ ¹´@ØSzYóòJñòÊd TÀ4 UPÃÀLÄ /Ћ20’*¹’ÅäL ù’0 “À(Ž3)ZDç3ÿ"/ÙÁMfÑEÇŽa¥Q¹Ð(Ô¸Zp ¢ð ¸H?R3•2Ãpn‡c#qªG˜Ž`FŽœÈR~'¦Sˆ/"¶+÷!2Ñ ó0 HÅŠ®¸S 31Ö”³!:°µ0 c î‰èF‰¢¦‹àX9HZ^ù3d–‰&BrtßgmÅ` R汈«Ð YÀO¸g·‘ ;ex$?lå° £b——Óu±gêѼ(ZÒýc:ÇÈ&YT*‘)qvÓ£%êRz0 ðÐXÇu'!0Ÿæ¦iµØÁ Y'¡æβn„©•³i˜ãø‹\ÿ؃*òSÜsŒCç{7‘]©UÇP õ@zðÆÀ†zæ—¿Æ,¶ ˆ Ðz)*¤r¦'Q ¯ð W)eYv‡¹•ˆ)žåŒ™bž#4fñ+jQ#&˜:!q Ç0TõyŸ\6e£… · ™ÐГ0 '1'¢°`2¦èöœ¾Öj‡¯é‹Aš,Õ,ä“˨›¿Â=cQõÅ›Aðó€œÊ©©© ¦š1† 3¦³ ¦qÑ€ ý1š§)$§R x’ Ù0* jnúz@J“Ô·‰Š9Ðu¡“Š”QªŠ®…#ý Ö'¡ÿ€™v§ ð¢0ƒC 9eP(…¿6*1æ—“ðgЦqÓi¢'w²  <ʆ>j§D:¤¨§XÑͶ#üf@‚$¨È7òÕ7Í ïp Шy˜¨ÀÃãÀ© ç/g ÛPj 00¡*ª¸U¯P9$9P«z¢uŠc²z(åê9[µbYáG>9b?f+ÙMê›g2,*Q ÂàÇ™œËY£Á¦$/Ç¢{ ; µðryb*Í 5f ‹­hy¯05€ ª•Û£Oh cú¥Ö‚5 ž±š˜³eçm›¡)Ï…"–1I·`eXZ#ÈÿÐ]%j@ò,Á   ©Ù•{ey'´p´°5ÐÁp­£ÏÐ ¨ð å¶­Ý ß®Ìi è¦Ÿ€s°É• «ãyhc–kŠõ›¡Ñ²e,²ž2Û\`ÁÛŸ8kŸv1'Y6 w²± { t0–ªAÿ±£“;Ïrª¨ªªú¬â ­ÿúµ"[¶ßyxd[¡‰ájW“)LjÐ.nw¨¾ù¶j»7ôšº„à×°¯WZÀ& ¶˜'z1'2ƒ ¨ð­ºûr16 µà´‹ÛÊÐ ×Yn:©:§l¨°î 0|¦¹Wȹa;¶x º‰Q«£ÿË-DgBø¼ ³È×` ðCX $0à¥g‘ °` @R ¢450ƒâP µ€‹“ ¡:¢JÌ€ Yp*¯ð­Üºª ‹:z´î@ ”‹½uøªÝë3²¹½Zѧ£»7i.sVYæt¨È_#,óp oùÃPÅàQ€ ªX;Üvñ p¦  <•0p€ üÀÚ)Á9ðœs‚'Ò‹6…{'Ü`¡oçÊuTm è)8ñFÊ Ñ›B”c E>࢕5°v¬»z¡ £Š¢Šˆ  3Îû¦Ñ+'BÒ¬9ÿ#¼3C[|§bë¹¼§Zõc줒I€ØU5#adßÄÆgQ|Ð…pÆðzð8 P § ÔkµðCÜ 0 sð +ห£ 眑¨»} x\ÀLÒ §É]¬‰&›(ŸËlÚ‡kÙÕ ÔcBñ>Äðî ¨¬ÊÐY îËÍ’.0ÄPÐ ~<ó µLI±Y\½ªêœgÑñ—Ì1.—<²*ÉÌÌÅ}gl[nጫ˜†ðyP v`Ö€ŰÀ:z/×{€z@ Š'Ÿ@àq€Ëý@ hù¼p*§‘ÿX '1Ìôw”U"œ É$›§ÏŒ®ÑüD£ÑÂ×É—RmuÁ­$ ÍѧìQmà î°¬1i€Ã‚Ìîð 'À #  Á 0íp;0' ®'q t‚ U–Óy¡` ö¥éq4;õÏÞûÓ d®A ÆŠ㇆CµL RÁpÃíÍp¿p gñ„QÈ0Ö hΰÙ1À5Ðx0sÀÄu!0>¬¿&¸ à·Ì0&$3v×”r2?­½˜ŒÐ“LÉíÓ‹¡ÄMÌ…Ün¥Ü²ü¦• §³a õéCm0s(l‹P50¦PéÑ1VÞçÿ]Þ1@är}¬|Þ°3æÂU= g ò‰âÈ“zmã»ý•¶ßÞùƒ ŠFöÂö¥ÔÍ’ÅÁ€Ï|AÙRh „P™ycQ©»P9*‚{å¬ÝÚ³ Ê ¦Ý‚.é”Þ$þì(kŒºÊ¬oËVm~ØÀ½MÍ¡én^ÔøB.5 ªNÏ<ëêzaÕ1ÄÅú *¸XÞ'éÃ9° â°Ú¬½å\ŽÅA’eÛPáÜ:é*>Ë|1»rö6mÓçâ½æ3.¾kÜ\Ù»‡eèÛ%e{!Ów U¼ê†ŽÇ±¨° ³àÃ3` ;ÀÚÞ€ éý ¬}½¾&ÓÑûè7jìûÞÁ“Âd¡ÿòo!ìÌÒŽßö¡H!ã£Îk²S¸¢/Q´Xü¼ÙiÎ{!å_ïA•³PÞŸFò3qtºöü ÷^_NÇŽ7 ðý|¶j1yöhÿL©”JiO‘¯¤JB¥$ÈT •L0 Œðš°Là Œ Q ƒ¯2Ð > ÁP )ÀÚ/ ÷Ì /p÷ÿ  #iø’÷ÍÔPÐÔEl/&¤ßömÐýíéÌvÍ ßÁTqÐ<_€eLçâÊw²ñ[Á5¸Á† 3@?’Þ ¢ ßâªòr lÂvô=FšéN ]eÏæmþé6eí‘á.—5¼ÿÖí~â®È qåðpŒ`õÞ•QYõPï#~å9€¥P åöÄÅþiµn7 è°ëýŒ6ÐàÁ~î*Ô‡°ß¼…îætXÑá<Œ1RQ¢E!Eöã8Ò$Á“)Iªô8/dI• 7šÄèR_DœƒåäYn*XÞrfUÔŽ ^€UNa9T JÕUtF ¬Xg\! g¹ªJAeSø*G9^- Õ,§îÄÕ˜qëÖ uaZ¬ RƆ{OÞŒ8p!3w 2cŒ8æc½G –lre—1¯TI˜§ÎÏ¡s‚5kª5fiŠºç+PQ±¢Åÿ*cGŽ­°"ÂF•MÓrµ˜fËVµVhQ3@­C7ã>Ë›+j©pÞ߯GSøY´Ì\J?I½²yÈè«_Ó³è¢å»Û[a¶ÔîvÍÉÿj P`ኩW”‹ˆ?ý¢Ú6²Ü!ʵœØÙªœ†FÁ+:ò"{ì¦ñrÇÃÌ ºI<æq,ÃÉPÔPEÎXd/¦z/´øæ ­>TîËo?Pú¥œÿ@©/àše¯*Ê©``[p¬û@0'f °RfHC!ãа»#IDwHôîCAŠ1¥5Mj3Å4[ÌÆm쩪Y²AMµJZˉ7PfCE«YfÁaÿÝâÍ7à„…8ãBE¹uÒ±Á†|¸TñMõÁÎ%íôáîCÁ›ÈÌ8âT¤UÕŒ³UW;£s¾ZP eSŒˆ(£@9+…~THœ¨L™%,®²Új«Þ*ÇXLÉ!©¥4 -µÊÆ”ØÄQÈ›b°Å-W ©/7%5vÑô°ÌÄ*³1wSEV‹ðUõÕTלñ³:yze‡¬b˜á8œÚz«–j@!X§æZv†BQ+xX| ¶(¤8ÎáH¼-무\«e⼫qc@Ç\‹pRì%uÙm× ™p¶ÎÞ|ûå7M}÷•u¾€qn@É‚®”?#m5?“+mOÿb±zå¬Pyú´ÔLk­FG!¥‰ßšÔ+‚sX烡Cé\‰°«·gȬûfžYõèŸùZ¾¢wËbB¢¶šå3õsgÉ Úâbp ëwp”eE¡tPÊ#{tÈÆÁêJb¸EÓŠÄ|(^š7üHÞ¹ƒ–Îv¼ÉÃým¿Sú—§ÀÜÊÂFÜ>Ë©2®Çk‰|ò*·ïò4¯‘Á(_9y‡§f ¡¬Äi¨ÕYwÈuõ–½C×3˛ͽ»ì]~ßg í褗ö>®ÑðìSÊÅ)ç'û”ä°­áIO]Ó“”À6œâŒMy30›¶æÉmîƒÛÿu<§Ç0änæ{Ýæ‡¢Ýqð„#ù]N‚§(‚) aŸáÕRD1w€kb‹!V¸÷¹^%å(90$„R£ å-ZV „²«´ìe%*S‡b‘™ä/בÓßÚ§B¦„¹Ó]ß6¿9V¨ÅJ¡ù´…pYT¤Ç… "9È[Ü—¶œbZbÑU-^!Š1¥¥ˆ ÿÄaŠ[¤c†ỉd’‘ŠxÄ:­B—¹49»1v…f%)Yh?;¥RqªœÏ¢~Ó”:âé4üLK5‘h Jv‰!L UHO1$”¢Ì/‰F“´'/d¥ ›)CA ±ÜâDÿÇ“,VqL–|Lúúq_¶È›_ e8¹Âbº•Ï„;%%¬& ‰šÓ³fh²I"ðp3&ãt‡9;;rŽÑŸè¼2O©Fw¶3¡Š £`ùú©–8û.u©N^*d ß¡0ËiÐ2´ ^¤ÑBKj#CjO>ãKµp«¢ÜО™cæÖ͈Lä\5cºþ¹+–p£géfüµN“‚¦•½šRO~2ž(ŒŽ3ÅY4 QQél10 YH.GT†‘‹Ã$fHéGÔ¢VD™JMê2iÁH!ÔY樲8Ò‹H—Ñ&É*´´JæœEÈZÂÌ„"ÖØû\S¶Pÿ[Æ‹¯ 4+Bº£É`‚°½HñŠÖ³&©m]¥hû Ñ²2² heiJª…dÖ¯œ%¡kÓIØô`p¤u«|ÂÁ*t®©«Go›×°«¯ê£-?[ÊÐB7»åíam£8ö± ½«G£ÙÊL¼ïòêÎ:‚Içþu¨Òeo{EbX…(–òuGJƒKÝájq"wÅ asÓóòtf3êlsÓ‹™Á‚VÁÅouéûÌOt³ÒÙ¤vbb7 ×–³ë=î‚;,Z¹:¸ºle'Á¸™/ä‹ïåi3ÇXÆ3¦qm|cçXÇ;æq}l3ˆCÈC&r‘|d$'ÿYÉKfr“›,‘ûø;6cŒ”a\å(÷8·¦´m—½ì—Ô&5¬sNL\VÉ0<”5‰3Ì;ŸØ½ÏýðœÁbÞ–9•zÆâtº‰^â*ä¿»\Hã,ç:Áž½sƒóóu£\ç;7½ËÃrž3Xß?'5Í5^ð”oÚãwyÔ•Žñt#<Ù†®úЛ›ó¤O¼Ú²^Ó¾õ×{êB]»Ú~t²;SÝfG»†½.ö¼=â];±cîÎ’—½îš†úÝ7Üvø½Ý§õ«¸˜Ïž_®ýã8G<ÜmÞwƒ›<ëØ>yä ù•+ž¹|ß{Ï—îxºC>í‰}ëcwùÉ“^‹Ÿïã;¿zËÃþáHÿýçKuÍãÛö¦~:ÞYOyÞS]òʾàµ>wÕÛô†½îÇnýëO÷ô& ¼Ü£Oxãç^êÉÏþòËŸLO¥_ýéçåúÝÿ~ø«¿ýñ§ýç_ø‡Õünï8ùù/{æ#ñÂŒ$@ÿ;>|½ë½ð[¼DÀý?ßcÀÛÉ2 ¼@ Ì@ Ü@ì@ü@ A|“ À—›¾ßkÀÙšÀócA¬<Œ@ TÁ×Ã>¤Á?×Ó?ü?\ÁœÁLAqƒA B ´:ŒB$d»tBê›B"TÂ%,¾'lÁ"ŒÂ B)DÁ$´B1¤Â*¬¾üÂ2$CCÿ5ÔB6ÃÝÛA,|Ã4¬Ã0lCôÂ.ü:#½äB@,ÄÌÂEdD4¼C8„B9ºH$ÄJlÄA4DG|Ä8lÂ=ÜÄOÌDLTÄP$ÅR$«´D;„DVDSôC=LDTìÃŒEX¼BJ¼DNTÅU”DO”Å^äEW FMÅ]F_<ÃS$ÆQdÆetF`lÅa,º_¼EPŒÆiÌFm,ÆW´ÆÃCDoìÆZÄEϳE&TÆgìDt G]<Æf”FdäÆvLÇdüÃq¼Fv„Æ|ÔÇ{4Fwä™T”G~ìGqäAs4H|$ÈYG…Ès´Ç‡„H„ôGz|Aÿ†ŒHr,Ç„œHŠÜÇmHj\dž„GüÈT3ËúteÅ@å75Ëh0ËáÔe‹(³$ˆVÞdðLfe^ffnfg~fhŽfižfj®fk¾flÎfmÞfnîfoþfpgqgr.çîü[Š8]s^gvîf=Íä¸Úvžgz¦æwØ«MbòœSσK¦`þ à\†Z=å¦-Otކ4¾ØÀoôNoõ^oöno÷~oøŽoùžoú®oû¾oüÎoýÞoþîoÿþopp/p?pOp_poppp Ÿp ¯p ¿p Ïp ǹìpÿpqqA8qOq_q胞lÊ©|Ê­”ÈKÉ`qgq—J¬äÉ7J¢ôq±¬Œ/rßq¨¼É…\òTG–´Èa2r#GrÜËH¯ròoɘò"§réƒñ!ÏòÇrÿ-ßréðòsðƒò&r%gr'‡s{Qsgsp‹ó7wó9çs:·—p ;×ñÊ2?t­äòD·r“ôÇó_t3ìs=ßóJ§ô:wô‡ô@ÿJCGt4ÊEõ”ÐôM/ôIõ 7ó3§IE/uS?qNÿÆaêôLuU'sP?‰X—uTïqVö1oõ®dô‘èõÿu‘$öb_uaÏu]W dŸõI÷ó?ÿôaßõ+ïò^§v9¿vlugÏvm?önWv'wuwßöuçõsçñevh§wvgö¬ÄN[Gwcoövw÷{Ç÷Z§uK¿tk?xƒGx{`·wWï÷ÿ°L÷zwø‘`øy§ø|u€ør÷÷ʰx‰Ÿøwßø‡'u’/yÌy?ùŒ‡xOw–oùÍPy—ù†ïøˆ_yö” y“y›¿y‘ùx‹ðùq'z™OzŽÇù ¿ø˜@úGyžoú¡¿z ú ‘úªÏz~¯ù¯ÿù¢Çøàz£¿u¡Çzªïú±wú£O{«{¹_û³—÷? ³'ûœû¶W{ºw{´W‘¼ü°Ÿú¾Ÿû¿Wú¥ÿx¸÷z»×ùÅgûȯ{„|Åß{¦GüÉ×ûÀ‡z•°|¿?|Ç|¾ßüË×zò}Í7ýÐgýÕÇ|Ãw}¼oüÄo}Ø—|Ù¯}ÿÛ/xIÿvp§}Ñ×ý×ç}1ßý·üÜ~á7‰‚i~ç~è~éŸ~ê¯~ë¿~ìÏ~íß~îï~ïÿ~ðñÇŠPó?ôOõ_öo÷WÿòùŸú¯û¿ü÷þøÏþïÿˆ,hð „ 2lèð!ĈûQ¬hñ"ÆŒ-Jìèñ#È"G’,iò$Ê”7²lÉR%̘2gÒ¬iófH—:wöÃéó'РB‡Úäit#ѤJ—2m ô(Ô‹N§R­jõ*¨Z{bíêõ+Ø™[£†-kö,Z†c¡¦mëöm×µGáÒ­k7¨\£w÷òí{2/O¿‚nÿxgáÄŠ Ö¹ø1d»]F®lùìäÌ.£iÖɹ3ËÏ 7б´é‹¨SS\ͺŸëÔcfÓ®mû6îܺwóîíû7ðà‡/nü8òäÊ—3×­yÌkŒÐ£WœN¢uêÙµ_ÇÞÝû÷ÌÛ£g]Þü÷ó²Ó‡W~«ûÑñ;ϧÏþþõúÏßOÖ/~r×ýñ×X0á%ØÝ‚ ~×àuF'á„Zx!†j¸!‡zø!ˆ!Š8bjT4G¸cÚÀ l0‡i(€Ee¤8Ojó@Q0.â(Ÿ@ÑiÚÀ#ŠÀZE>2U4.–ÿAQ”+"è"ý„yŠèÓO0àqÀò @Ìè#Àx[^Ñ0GÌ3Çœ.¦F€šúPF <‚&£4Ž11,Iß̤èΟc0Úc`î@1Ž6ÀÁ0G›oÆyØ<‹Î@4±Â‰æjöcd?Š:ª™4ꀫ°¥QÁL'€;3öéi: PDÀšÍ3@4S`¥£ ÀL4áVIѹ‡~ÀŠ(ŽŒTy¤°‡£í¯÷@cóø*m?™š–åÙæxige'¥0lf©Îcçºý‚F @€¢+Ö:oˆÎ±,E7Öÿ§Àk23kg¤ (ÁÆŒú°ZsÀ—9€˜ÝZÀ< ÷SÃÞâáfÄýØ Úe0Cï&þZ¦fîàxçÒ" š›f€r?cZÂý´Ü3üjvlÑXZsÐyÞ-þÜóš@§èšB ° Î)ÙðtÅJ À ¹X7òË-hx I@0ã² ³f¸öSiÆð™Wás&og¥ãaäß×Ò:ÇšÜúý/ߟ0?:né輬  µYÆ0ƒž–²ö©¢½?-8Ò×:<ýhpÎÁª;TÍùsV÷gaw¦h±rŒ»î€ÕJü§ççÞ˜>Ö­îûhÄÓ7¦v‘gƒš?˜d§vx4Œ4º¼œìbªÒáêg€ÃÃHÓ  T5¬uÆ£:Üü§/#‰)ƒ!ù,J‹~-‡'''666IIIVVViiiwwwMx¨nˆ®iвx‡©p±s‘²s“¸|–·z—¹}š»”OO‘YY¤AA¤__±MK¾SQ®ff®l|¯st·llµhv¾p{ÁVUÛ[\×]`ÚmLÝhTÙrLÖwVÆijÄktÊmuÉoxÀqqÅs}ÍqwËt{ÚghÛ~jÓtuÒuzÑ}}ÚxwÛ{{ãWVã`^ägfãqmäxxšuŒœ|’®y‰¦}·{‰ÀŠÔ~ƒà‚¯v³nõ…΂ËFÏŠIÊŒQΑXчFЃYÚ‘NÑUÈ›qÑ”i×–xΤ}Þ¥mÝ¥rܪyì‰[ç˜LåšRâŸ^èšUïŸZä€~ì–oñ [à¡fï¬qì¯yð¤bð§hðªmð¬p‡‡‡ŒŒ–––ˆŠ§Š”¢„–´‚½–´Š™¶”‹¤”™©™›²… ¾ž¦¼¡–¤˜—º€« ®Ÿ°¿ Ÿ§§§¥§¾£©½ª­´¨³¿´°®¶¶¶‚ŸÂ‰£Á”«Äš®Åœ±Ç±È¢µÊ®¼Í°¾Ï±¿Ð»ÇÔLjƌ”Ä––׈ˆÖŒÔ——Ô´•Ϋ«Î»©Ê¶µÕ¦¦Õµ¥Ù¹ºä⇈切䊊삂퉉å䒒嗘ᘗ圜í‘횛埠í¹ì¹å££ä©©ë²ªå²²å¸·å¼¼ê²³ê¿°ë¼¾ñ«ªñ±­ò·¶È¿ÆÖ¾Åã¿Ä×Ç·ìÁêÄ£êÉ­ëÀ·êηë͹éлñÀ¿ÆÆÆÃÂÍÈÃÃËËËÂËÖÅÎØÈÅÒËÒÛÕÁËÜÄÄÞÃËÐÎÕÕÕÕÓÖÚÖÙÞÝÔÔØÖØßÛ×ÜÜÜÀÐàÎØäÔÞêÜÞáÞàâÚãíåÃÃåÇÈåÉÊîÈÁéÎÎåÏÐç×ÈçÚÎíÑÁèÙËåÓÓåרåÛÕåÜÜîÛÛôÅÄòÑÑñÚÚøÕÕùÜÜåßàåàÜäääåæèíããèçèëëëïïðòááúääüêëøïñ÷óïóòóõ÷úýôôþþþÿý H°`Ái*\8!Cô" ŒHï¡?‡éÁƒ·o ¼f ›Á£7-$Èi7›¶ršK“'7>Ä(P%<‹õræìH°¢ÅŸ}:‘(QšFg&Št©Ó†O-6JpêOzÍP’ÌZ’eÖ¬G¶Œv²¤HBÒ´)³à¾·p)ÂËq®Ý»xóî««·¯ß½óJ¥ºÐ*዇£&¼X±Ó>±¾¼éµ™À½U†| v#EµÑNIp/ÛÓ6ƒ¡^ÍzµêÖ°a¿Ž}šgáÄ;ƽT÷Sß½7‹Ì5ëÇ“—Ik† ¶«ÊÜ¡9&Okš6¼ÙÖ³cÏn}{vÛ 'ÿ?žwpóPÑ#jº¢äˆ]Íš¼©Ñe}ΜGº|ÛRº@Œ¢ADÚ@ÕÑæw­ˆ k Æhê‘g”„èQÈzûô BÙäÏq ÝbH-áljöÕäœOkÔ¡[Ü5¸ [2Θš¤ÞzîxáŽ2ÔáYmÔ‘i¸K™å’|'f_f+qÔM>XàFÜ´¢Í9§ÕhãucÆ&æj9V¤AâÖæ`¸™¶¤‘ a–B2!Ô•FÅDVˆ%QIKîI×”DxN(—4ªÉ74–™ ¤“Θfz²é#Po*…›FMcçBHfèž½ô¤“e…‘Hþ˜ÿFÖMZšMZÚ¤Ê%ž¬’Ê%š€©Ò™3[,Žžfºæ¦pöø©¡£.”ªªi´Wq¶™I¯Ò* ¡/òXkJÞ&§’&—Ë(77RŠš± ‹k²æuʽTáor²äCÙúû¯[­Ô'”(W[˜ ¹ðœ¬J¿jÓ®»‘b&²÷.ë,³{ÜF 9`A¥Ää‘U’–¡fô,É•¶'ú3o©9OÑÆº2…øƒ*çhÓ(9k¼‘¼1r|ÛÇÊ‚ü4Ôÿ™t)©&¤¢ÆúgYPšâV,MóµI)î;Zd'û\ œa‚ 84ÊJÆJ/wÒÜ]ÿ-.oúB(µÚTÄÑ NM…ÖV"™ÅÑžŒ«Šíj>?¹-Ki¶èai×À!Æè± Ÿ¸²ñÞd¢žú‚~®£Èƒ¿Nõ©55ã7áÖÒgÖ[¬*üaL×V™dE¦Åçd‰.>ˆT‡ÕÆj ¨Að¼súÞLkç4î€k»àQWí‘íç-LßJÑðÇd µßx¹¡9)ßMe©”–xû !ÒaØß4–½îl|݃Ý÷þã½ñq$´+OP\ä¸þ@DJ#: Wš÷ŸUmDu!Ùßêt 5Dt‚ÂÈ.øbXª+ ª%p:³!”nǽ° m´ÍÿN²¡½Ì a›!ÞÉ|ƒv¨ƒ€ÐP$ì¿à‚`ˆ:š‰†²«WqÈ@&‰‡= MÊV%“ÈÅ +@L ãf¥“T€‚eDƒ&XDkJË…¼ªvµÖ]qÈ [îÆ¸NÉÜSFt¸7ŠÄ“o´pÿT¶(9$¥µòP;€Ðj$âÿ&¸l± H„Ã&ßPE(X!,õÕ5¾òn|¹Ýs.¥CžA`É<ƒhý,s¸‹†}(bfýÈIµÚGS‘jâš_T‰Ñ¬>Ç‹µRžZ`W]U“ª¥›íRäT¼q±qLªx%ÜûngÓ)%'xªÊnäèb…6ŠígTGuʬž*¡ ͘¤y«ÔʵW2*L¦YD™ŒUgZ" ˜È?vÊc:hQjc×…J@}¬(?[ÕU6ô´a¼èN6_Û•’ƽ>ãV‘´€BE F“L´ îænx¯r#ô>µ½TN`¶xß®V­m+뤌|%¶ÿŸÐ&§‹L#½¾Ò­.)Zè1²X¨#–ìeûtL~W =®oBó{ÑöSôC2t³‰ Ê~ÙÒ=ob§ :#×$AY¢ýNˆ¢ûÐp  HA£vT9€îl޳¸èTŽmȱÖôÞÖ&TJÕHîts‡sÕÑgLD“FW$´ð‡=4aÔM瀶 9ôÌç2ýzn‡v¾« rA—”=°®d¸Fè&M ÑOúa™ËviXï㜨&0p`ƒK°XÍ(Æh1å§:p¶•‰ž/m£›IÑ©,Œ¨ä¯˜Ü§"NryÙrŒnÒÈB ´˜E p`ºP¼`;àÁÿ:ÎÞ«øÞÀç<ñ¥vtá'$à8öRF%\B“PAŽs"û2ûÃ"0 ²@$ ðà P+p&`x“bøo§~q7|HKz{7zMQIœDVLòAû×z!ÄúÀI ´ #ð¬Ð  ÚÀ ,ÐÌ0@|Õvº¤yÒ¶~ Ó~›_õmÿr(ét$Y¦"uäþz( Iàí8 "€ p*±&` 8è.—÷€;ˆo=xƒ„e˜CˆRX’…Lx§" d?ðáËP¨{„#@©À€uõ =`¶ð…”††g†Å×y>ÿøy?qr—BsÔ ’V%hLÞ’a³V1cD°Ð $…ðð&°n &𦆈z³qc˜~øˆ›‚†wÕ^âb<—ˆ‰ÓÑä¢FX¢*Ñ.«° "åÐ h0y±x~Ø8‹J|Aøƒs‰±‹ªóº}ëÃ5¦yœ°¢ØÂ5ˆ&‡ð ž@ ¯Ð;@W r“¦€ Z ™çp{òÆ–à®0 ªÑ(‹b{çÀ è2£BNk9hª¡E*¤àøtÇñCéŒFÒp„!±p &*ûpë` m Æ`äÿw=Fsqð`¦Ù1 “ð~@Z,ôV1lW™vG§š™q:§òé->B˜XuöóL.7@¶`ý@ RÚ` ~Å%¼rl3©Áàà”Ðܵ¹ž€›á © ên™G”pY”¢ ªñY†vªÆi%Ì×’­3ŒÆ>£“¯ð6p7¶Š«‘Çsñ¦ ɪ ÜA¦þÁú°»¢ zÖn¿BjºHž*I˜9°h­¤Z†h‘!!²—û‘iåBê3Óëàxòp =8 ¨ŒŠi: }¦¦¤ 5y¬  žÀgò ôêrÃ(ŽÂ.®,Ú  èÿò¬g§ŸÚ›¡*w"y°OÁt|çCrÉ`Õ}â*F(ðà 8à òÀ gPW§a³?© W4­›öˆf‡l>é Ó óʲÁjz]ò%ñ+ÍÚ¬?W‘:+°ÔJ°/&§?bXP"Šœc+H{">ÁeûÀ ªy 9ð  W{; ·y–¬QèBjs{žÀ çà ZÐ%¶jë²§‘ Ž×(´÷¯¹ú£;‹·—Y°<{­³kSaL_VV-‡R¤ "äªÏ„I ¬@µ3À± »r7Áp{𺡀šà ·,ë²Ú -º,»½k+0Óx¡ÿP ×¼kž²%;/þ8­ì{†zk`†ÕIË“* ñ-6¶wž¡AÑgŽ4&í@{Xi®r–®lÁ( Ûo«¡ ʵëò+­°­€-¢Ë½þ ” ©`v¦£© ­ÉJj„ɼéºAZ­± ´ÖV}Xr^õ[÷ËeGèèâ•ÿK®-P{ð@ÀºòsÃð+ä+y—Ðx#œ¬Ü0jr«3 ½Û‹Á0[j1p·s[¾šKk{&ü¦¾ù³Dʯk'×" q»–Ø! ©z} G–aÃ6 ¼1Y P?`¼lA¶š`–Á‚»R7¡ð¼6ðÇ·Gj¬` Pÿ<-K–  ™z3˵Z‹³«[½h§ÀhÆ={·°‹ÂaÌ·¥—;¡œ‰†Ioh´í"ïH{RÊ%`„䱌2$«@#†p Œâ š@{4`G®à Hs¶ó:ÊÀÈs P~ Õ› ´çxª›¾«ÁœÅµÁÉI¹Âc|bŒe7Ó"<1Ÿra.QSNb*'ÿK(˜+À¢­1 6ñ6R¤”àS—̼ÓÀÀêw0-‹)@ ,1ÍÕŒº+ÀbÉ«ÃÄý:™ê+­e¼ÑG9Îðk¤lÁ‹™†Ÿå6'ðC÷ ˜´‰îÖ9Ÿc ÌŒÿ÷ c÷ǧA©!¬€–ð0ƒ¥6É5{³Èë(9÷€‡l7­qžܾνjÕ!Òûµò@f,m{ÌîЉ@pñ<ѳÓCw Ÿ@˜Ì–€¶`ð=ò8°¥’ œšÉ Ún9*†ÄlÌŠˆ5Åe°dì¾ýæ]mx%]],õÕxc½…7 …ú³ÖØD=’ sM1O|P% >íðÁª€–ƒý¨z.é’ˆOÍ!ÁƒÕß Ênù¾’Ù‰µwþ²ù šëpÄšÀ‰€P |%ô9ÅÀ\ƒÿ ØñFÔ jhÝ´™Ô-ÐŒ ” ÍÀÐlaÔ•Ü“[ =ݾýʼn‚R$ÇÑpš¡ÈíͲKªçÎ[ç,=Ï6À¦6Th ÓýÝÏ#Epð Ðx¹—0m Epàm1bGÐ0xÍK{âi÷ ¼ É&†«‘g{&,9²8‘%ÜÂÒ†ÄÝÉ.ä¿a5«Ü`ÿ‹¢½½„u oÃ?ðà … ËØ ]Šoˆp È`BÏÀ©#^â10 Ä`6a4)˜4ð˜]Ü(E|¬‘ví–ã!˜6A>Ü0²9y^àC®ç[Fx]qAZ(†JÌÿ†Ó ‰pÝÙMØj M^ “ì´Ž÷ÏûÞ{lŒÌŸNºÄžK§A¶¬À Å–ãRbŽŽ-Δ´ˆåãQMëÎÑÐA¶³`ÔdMéÙ 0ì 0ÚÖaB…Ý£õ+Õœ Áp©Ë¹÷Xvðö—ðzÄ4àÒt{ðæ z&ѱ6w¸‰äîçÓq'}Þã¡üê3‘ë­jDÄáë±ì­‘ = 9Ъ۟ †`«jpåM;‘Ñ= 5ýÏ1 çØ~í- ­¨Á ´‡º>œãô0Z“Ñë+ÕÄtÒÎ{ëî#è`1cÃqè=Õï*aÔ‘€Ô´q ¶ 7pÿ°{žn{€Ä¬¾DÝ(YÈk®òúÈn]Ȫ0ñá.±&}) ;zà+…ñ·Žî/c N‹‰cä‹ÅÊï¸ 2¹ä¨Á©Á°Û¬‘åùh ‰P Ç›ÉG\È`Òxè2»²æ‚ì廬ÍJ¡ï FŸ&ß0ZÁÆ\•„o9sZ½î°>ª\ÖôÑÎÑq2íÀõçõ¥ØaÏÍla¹>‰ÑBŸ -€hù—-žíÜàÖlžíD1>¹Jyÿ ÏØ*%0 «u}+Šò!»&Ï‹‘”°Ë­(Ÿè§Áò.ÿõá=½Øl‘ ÜóÁì 8 ˜ß ‚Ù¬‚ù¥åKß7;ôúº÷`ÿœ-÷Ñß%8øMÕÇ ¼>^ý´ÂÓTï{‘q“ÿ“–Ïô¶Ú«ð¨+˜1ÚxÌqÒ6XƒWÐàAxÁ ¦º¤­ ¶K©¸á°qéÅKðöùãØÑ£¿iEúƒ7Íà´i=ÒÓÈq_É‘1eÊ 9ÓæG”9uîäÙÓçO A…Ú¬™N£D•Mšó¨Oe8@±6cư`YµnôèQ¤­a³ZŬ‘ŒIbÕ{Ôè‘ mµ¨AÉGÁ"µ ACÆUµjÉ«WÆ£I2ܺµªÞÒžM§IFZòeÌ=oƬ¹Ù³ÇΟ=‡¶Iï(½ÇÍèѽ™%½}&áÉìÿ'Š;{¡""ä]Païƒ CqcuIAà¼T‘U(¸çBõM…£¯&Ý©’'4èʸ6mš.¹:'ž•¶ì-g’ùzËÙ_jœÏ¾õúûùñë¿iŸ?hÑà1ʨø8û/&ƒšQ/¦v8IãÛŽ» ËÏ¢†xûF•P"G•F*è¸Jdå¹»ú¢UšÃ¡·sž{ä›…(²íàCMÊi >•¼ ¡ W:è±Q[m%$„gÉ7ó/J¨iʘàƒÒ@+™Ä²#|ÚQGÄ }+žCQ…F„v´.‘!‚¤»¤W.LQE¸®C¨<‹ætžêàÂÑ ÿ;Dî½›)²J×P›é=Ø Ío>ƒ:JP=,°Ë+AÅIÔŽ¾äÏÔS?ÃôÌå΄ѣ@I…‡‰üFB©tLd"! >Ù(Mg¾šÑÌš«|hÀPhØF™>" Ù‰¡ œP†(yHŸX º“ …òÈÖ¢Hb’ OA7Ñ]1 Ò$þ´t”ð¡V jIÊ1”e× êSk¾XÇ1ÈÇf2jKb(©äÑ”Y›®Ñ%O]ÐÇ¢ ²œ’R‡¬&P èUàô+ÿ2™»É›¤:i+©z^rÕÎd’ahŒ\z »î°«`íÍA¹æ²„𬬅G¿’ÖŠIŒ­ú‘ë[­Ú‘ÿÆÒõ±wýOTóÊU­ñµ‡šµ•PéT'¯•oí9 S陵¾Au²s¥Ïh‡wÙgê” zÍ,gyãW¦"|Ž…å3ƒd®›ö¬g£0–š>éKJRRR¹d±#Ùtµ±ÕjV•W[Û· ÁÁ€“¦òõFz:l–¦ÓPÉŸX:ÉQj ÃŽøSº”ýduwJÛŸfW»e áÜx»YŸ&u>‚«êlÛL” ¾Íœæ}í%Ø–»ú¥PP³è]s-©™L‰d \ÏÙÐ4µ§mp3#lÝ­>X$tì+…•S¦Fþ Ãuê†[ÒaëgJƒC*ÒÉà€¢XÈV±|öª_¿öÿ7Y= ð=ù&çÖW$¯yL‚]kC ™È)ær—©9a$Ÿ‰»™1›|`y8J)#TÝ+Y™jÙÄÓõò‡©{Ýüº·êÓí¿zæ{>&ÊgLóq!ËÜJMõ üÌr‰!L_ÓyRGÎîž}jiâ>×JÔfŽ/Y-_u4’ÞòKýååï‘v#ó–½Ó7?ü×CÜøáÿíaŸyÓÏþíç=ù³<~óï¾úˆ=ßÕŸ®Ú£Ýý«×ô¡Ÿ÷óû³îÀõ{ºë;¾ªû¼+?ÿ @îS<Ä?ö›?݃<ü1@}«?´?ïC½ö‹? ü¿Ýé¿Ü@ô‹ÀÒ£½ ´¾ä‹¼ <@,¿ìÛ¯ô»A4À<Á4ÁÀ#ÁDAô@<“ü“?œ³ lÁ”A—è(ŒB)|‰)¬B+¼ÂÔÂB-ÜBúØÂ)Ä@'äÁ÷ƒÁý A1´O‹©IÃÿ2¤@œ/ \À0ÔÀ B$|C<Ìú"ÃÜA:œC;¬CÐóÁŒ¦i;DDLDE\DFlDG|DHÔŒ>ôÃ@¤ÄJ4ÃB$ÄA¼C=äÃItÃOÅ3ÄÄLD9DNlÃ$\EVìÄ?DÅS$ÅKTÂ8CKÜDS´Å[ÔEQEZÔÄXìÅW”Å`ÆYlEW¬E^DÆPdF_tÆglBb,F8Æe”ÆidÂd,EX¼FlL@eÔÁlÔFUüFhäÆ]ôÆ×òÄa4Æc4Çm|Çx¤Fx\Ç%GwÄÅn$ÇrœGuìG{ ÇïÛG~ŒFüGƒH…dÇv4ÉzTɉÌHÜÃ{H–tIšÔG‚ÔÉ–Ê_ÄÈ”¼I£,J›LÊ•ìH”´Æ¦ôÉ ”É—Œ¹©œ»™<ʘ”ÊžôÈ­|J®ÄÊšDJ¥tʂ˥dJž˰<Ë«K¢4˵ŒK¹üJ¸œK¯¼K¼ŒJáûI­ìʲd˶L¿üK²LK·¤ËºDL»ÌK¡!R"-R#=R$MR%]R&mR'UR?(0Ž0ƒ06¼‰f0ŽÀƒ+m†(‰Òðƒk1€ ÒSÿ2õ+ÅÒÿð<ø3SðRÈ7›€ù܇ €;õ‡`(€1ÕØÓ}0Ó…S‹1O;ÅS—ÛSG5€ÔA½5G=€ˆT†QTT0%)…Ô+•T2ÕŽÀ4å80?8R-€(Ù’< ]ýxàU3ðÓ`Õ† VzÀZTÆ:Ïiõ˜†cõƒ€û0ƒ ŽØVbpÔ}30fm`0(2bðG%hUŽ“VùôÓf<ÈÖmíÖo W ?-×sMWÑ€ …õWn×zQZ•Öÿr%ƒ`¨W‡•ΉýÕi.ýŒfWyMÕ8 Ö(9ÐU3øXS=€’ z€ ƒÕf€¾ €i(€’€høÜWŽ0›=† €,íˆTÙˆWxU‘%€5ý mmWŽ ×ˆ×˜ /m zØVøŒÚÔ€@Úr]ZŽhZŽ(øLU?˜Úªõ èÔ+EÛ®íÚ:µUÑ0€8Ý Z@Ù³MÚÓò[†I×0€› <€×­å¥}Ó ]5Ú¶Ûû0€€ ÁÒ€n\˜\ýÀܸ­ÒðYŽ—Ö…,˜Ò5{ý ½ÅUÿR•Yšõ‡fàÖÍZ0]ž…]Ýû¨]kðƒ•-ÚÝõŒ}µR:€`Þá½ ^@•UåeÞ9úÞÁ=?hÜ„# SÔ­[ú‘UbàYÌõ‡§ý3MZgåˆô}ÓÈ Y}_–› ÖY3xÝì•Ô˜¨]6 K^y¥ÓÖÐ[3Àƒ`݈ÍÌm†t=ÛñUà‘¨]……‡m…`ÄD}UûÍ^bà^‘uÜ(€Õ ‡PÖŽ]<Ѧ‡n+aÈ ú„Ýi VúTðX€ª)\€c݈@Zþ@a/Ó#Æß¡ýÕ3=ø,׉ÚõU—­]ÿªÍ½MÕÞZžÝ[†Ï-ö‡£ cm^‘Õ[ËEcͽ  ápµczxã¯u\)î°Ô@NZçrVÅTÒ­^™°Ö*^X?˜V…¥Ë% "6ßÿxáÖÕÛ}×ÙÍPVb¸d2Èdþ¨ßÅ}W2øãü a¨b2(×*†ßûÐÛŽ¸ßFÖâ]¿•_Y¦e<æˆÛÛÐeŠ™=ÛÀƒže[ æ>¶‰PØ*~áJöƒjFæ‘ØæJîˆþý b¨N0Ńú½U4×B’ug>5€lnô5eçõ? Qz`Üxõç³c~¢Óê¤Òi8Û…ÉeÀàµMáÿæh”]ÓôåÔh¡Ó}°Y‡^èz¨N2½h•°Y þ 3¨Îi¨N%i™Hiê,•{~Rš®i›¾iœÎiÞižîiŸþi j¡j¢.j£>j¤Nj¥^j¦nj§~j¨Žê¥Nßš€`©¾j¬ÆjtèÞ¬þj°^ê­nÛàå) ×ƃ€þã5eã‘ÖÝS]ÛÛ¥Rªž†i\ø´RØÝÒ(UÛ°þkÀþt½Ò”¥Ù€€^¤ 8ff=lÒ…Wt5]ÐUÉVlk5ƒÇ¥a}×€l?°ÖÆâÀ>íÓF×ãelší\ŽðÜruâå €iVëÒm†Ç=tÓÿ®žß_õÜhf×ÿ^èMeSEmå^î˜kûm×ä~îrå[nl'nlìÖ]¬EWkýØ®ÞHìweWËÅn ÚèenõVoçþîÎÝYuàO5ƒfèjæV†Ý.ÖÀ}ïr%Öw \ÈWÒ}ôµÖ^oìö¦Ùw-]–ïå=oÈn†Ãö\ÐïÆfln}pƦR&Ö®¦ÒÊfl<@ðOñ¿NçøèÕ.e\„^Ó°eÜ}h6åÕ‚~q‰&º&ƒøÈg2]iÓVq"Wqtò"Or%Ï< ¿^r(r)Ÿr*¯r+¿r,Ïr-ßr.ïr/ÿr0s1s2/sÿ3?s4Os5_s6os7s8s9Ÿs:¯s;¿s<Ïs=ßs>ïs?ÿs@tAtB/tC_îHLtE_tFotGôEDIŸtJ¯tK·tQÎÚ ÍåDÎÔìtN÷ŒKuRŸôL·ÊÜlNÒÎèuãüˆRuLJÓô¼‹¬õ€´u]'YïuI?uÚüôãvâtNOOõ™ðõ^öà<ÍWWNáÔMV·M+QvYgöéöbWõiÇM\ÿvP±öXÇvr§uÞìvMONèŒ q/õrÇ]÷œ\÷gouQo÷Q÷[?wW/NcõmOv|¿t}w~'ö¯wj/LøJ/øÿ\xywvçö~‡u‡xsŸ÷cçËŽßIz¯ø†Ïø_ßxŠ—ö‹‡öMWxow’7u“gøv•W÷™_y‘xy˜‡w‰?ø€¿y›ø„ÏyGˆŸx™z‹Gø¥ÿyv/ú£÷ù¡Gy¦yªwú‘(z£ymŸúš_õ”·w¬—ú¦÷z±7û…ïú²_û}çx¥·ú¯GwT÷ø·—‰!¸{œ¿z´oy·gùtûª·{¼z¿Ÿ{zÀ{½g{Á‚¼û°O{dG|¹öɉ»w|ÂyÊ|¾?yÈüºÇüÁOü½ÿûÊoö¤/|˧û‘ÈüÇ?{Æ}ÖW}µ‡{ÙŸ ÿØßüÅÇ}Éw}ΧýàgùÝ7ýÙ¯ýl¿|äú¾‰âOýäþÞï|Ñ_~®?ç÷|Ô×~çùܧ~ÅýÍÈþê~óŸ~áGëçyQ!ÿðÿþôÿÓïþØÿýÃ'}Í7~ßÿüÕ?ù,èošÁ„ .DÈð!Ä‚#R,8äbņ7œÈ‘£ÇCФH²$Ä“(ª\©°¥ËŽ1^âæÌ8säùpgN 3…Æ$zÓ'K¤kUšÐèJ¨(¥–¤*ÒêG¬ >åêiT¯ÅÔºÑìH²:Õ D[Ñ­I¯`§²íÉnD¼)ëêýÉ÷oݪ€ÕöMzÿw0Ù¾ŠX¬â—½Fîʘ°Wš7sîìù3èТG“.mú4êÔªW³níú5ìØ²•Ê®mû6îܺwóîí[4í߇/nü8òÙH“3oîü9ô觃K¯ný:ö쮩kïîý;xçÜÓ/oþüöåè׳oï~¼ûøòçK‡Oÿ>þü½íëïïÿ¿jü8 Ò   *8‚ :ø`y B8!…×IX!†&w¡†z¸ŸzŠ8âo5W•ÉtYb(:¥âX\‘1#5Úx#Ž9ê¸#=úø#A 9$‘Ey$’I*¹$“5æDF]P²%¥ZT’e¥XXz¥¥ŒQšÿø—N…©Ô˜H•éÓ™<¥ù¤—S~ÉÑš3ÅÓœ.Õ¹Ò(åYÒž"õ æ›ý g›Uzå¡Y&èCÁÔå([ª%)Y”Še©W˜r¥©Sœ2ú)¨¡Š:*©¥šz*ª©ªº*«c†@ôP¬H™Q@~ø#+­d`@3»ÎZ«RÀ Û+R`¬¼Ë“¸êꬭË.; µ¶âŠP¶hþ ϱÏnämÍZ.Jû!€`@0è mÁ˜À>ïÆ;oNfÌø£¯¼d@ÌÀðÌ=˜aF¹ó;<àaF ïëd( <ûäÇ¿k¼p¿ÿÿ@ÀÉSDÏH)³hµÏï?d´«æÌÁðì³Ofè:ô ý3OÄ01JïÓ3Ó35S@3Ü.æðLõÖJ`†ÔT]€?ÍP6Ñ<€nÓ„Ì@ÙŒ0¨@f´‹·@ÑŠ€Ó£”›·?‚ó´Ä@ àž xåŽç”¸Ðùå<á!0é>)-‹î“ø#4ɯ´wã,ûc†ì+ù6ã~T=ÉLÓùðCÝLðɯ4ë4àQxãÎ£Ô ÂôÈÛ<ìhïÜ#5€®Èûð4Ë‹Ÿ<„@íÕ‹„»ºóäîÒïÚO}@ï9Å‹®þüÁ?ŸRPÛþú''\`ñJ ÇæÈ‚<‰@þUA*ÐjŒ àÝV« ƒ#‹Zû@ØÁŠà®rÈBÉïF2 Xÿ@̰†ç €|õІH™œ ihD9Ñã¡}B ð.oPô!š˜vÅ%Ò ˆ¨à‹F>»%‹Á?°7ÐÃ%ĘΠಘtŒFûˆãcâ7ú\Á¸üX-> Ò'Áˆ] -I)²_Ë ¤²òˆ?f ¤‘ñ¤de„!ù,¾†777”?>˜AA“XW®ML¥]\²GE²IH¥rr©{{ÉPOÁ^]ÎWVÎZY×_^Ü[[Ýa_ÁlkÉddÁ||ÈvvÎxxÐhhßfdßigÞmmÕtsÕxwÜtsÙxwÛ}|á\\áa_âdcähfãmlãrrã|{Հ䀤••¤šš©••ºƒƒ¿ŸŸ¤¤¤Í‹ŠÁ••˜—Äš™×‡†ÛÓ””Ñ™™Ü‘ÜœœÌ¦¦ÁººÐ¥¥Ô­­Ü¢¢Ý©©Ý±°Ü½¾ä€äŠŠä㔔嗘䜜䣣䪪山帷任ÅÅÅÉÀÀÍËËÂË×ËÒÛÒËËÙÂÂÜËËÒÒÒÖÙÞÝÑÒÜÜÜäÄÄåÊÊéÎÎåÏÐåÒÓãÛÛäääÿþþÿ€L‚543!";‚ŒŒ^]D$"”&AX\GBEKW_]&KMXAD^\A¬¬^WN__88^L^¬]FAI]YB¯L__=WL«B]®GÁ_Ä=/A(žBA]©ÇÐÑ_5Î^HABH»C>:ÞßVW»¬B(íßWðYJX]]nHÀ—oߣƒ@XȘ¾ƒ(dØðË+èl9òab€o²d0‚U=ÐHù˜B,6Á’$È’)ˆÅHñ­€ ´y1òì‹€ìè…F¶GD»¥@p`‡ŠhZ¨A1³æ+'-(8XP é'V°µz„ƒÃ†SäÅÃÉ•.IŒ áâe‰ !~1\PÀ *¹äK  &Tˆbð`•Řƒ€ †ÐÄO–˜ó;¢„­ãCñ²Ø„G˜t){ ^½[!ù,MŠ ‡&&&666IIIVVVhhhwwwMx¨nˆ®iвx‡©p±s‘²s“¸|–·z—¹}š»“EE˜nn™{{©JI¤RR·TR®l|µhv»po¾p{ÆUTØYZ×]`ÚmLÝeSßf_ÝkPßk_ÙrLÖwVÇhkÄktÊmuÃ|zÍpuÌszÙfgÐkqÝznÔttÒtyÚxwÛ{{ãYXéiKäb\ërIévUãdbähfällãqmässâywä||šuŒœ|’®y‰¦}°v…»~ŠÀŠÔ~ƒ¯v³nõ…ÏC̈FÏŠIÍVÊŒQΑXшFÚ‘NÍ’eÈ›q׃pÐ’i×–xΤ}Þ¥mÝ¥rܪyìˆYç˜LåšRâŸ^èšUïŸZðKä€~ì“hñ [à¡fï¬qì¯yð¤bð¦iðªmù¨dð¬pû´x‡‡‡ŒŒ•••ˆŒ¨Š”¢„–´‚½Š™¶’‰¢”™©š›³… ¾ž¦¼¯€€¡–¥••º€†»•…¬ ®Ÿ°¹“¡§§§£©½ª­´¨³¿³¢£´°®¶¶¶‰£À”«Äš®Åœ±Ç±È¢µÊ®½Í°¾Ï±¿Ð»ÈÕÆ‡ˆÆŒ”ÂØ‡‡ÖŒØ‘ŒÔ““Õ–›Ó˜—ќٛœÂ ŸÖ¦‘Ô´•Ì««Ã­¸Î»©Êµ´×§§Ñ¸ Ø¹»ä€â‡ˆãˆ…䊊ää’“å—˜åœœåŸ íµƒì¹‡í¹ì¹å¢£ä©©ç¶¬å²²âµ¹å¸·å¼¼ëº»ò­¬ò±ªñ³²È¿ÀÕ¾ÅÝǰëÁûÇ›æÄ£êÄ£êÉ­êηê͹êкöɪñÀ¿ûÔ®ÆÆÆÃÂÍÈÂÂËËËÂËÖÅÎØËÒÛÛÊÊÐÎÕßÑÂÕÕÕÓÖÚÖÙÞÜÑÑØ×ØßÛ×ÜÜÜÒÛåÜÞáÞàâåÃÄåÇÈåÉÉéÊÊåÏÐàÐÀãÖÊçÚÎèÙËåÓÓåרçÞ×äÜÜôÇÇüÝÂôÖ×åßàæàÛúãÍøéÙäääççèèçèëëëïïðôççòòòûööþþþÿÿ H° Ào*\8!Ã{ï}‹±C‡ ÿ}ËÆ1›Åú¾‰œ(q#G’&Gê[YräD}5ÆTØoßÀ}6 œÉSgÏŸwz(OŒ WîT)C}Þë˜í^HªÙ¾±„8Ñ%Ö¬3:¥H°ŸÙ³f•®DköÛ·pã¾u+·®Ý¶wÙ-ºWlß‹Fõe]¹Q$جY¥Z-Ùí¤ÉÅB"¥ö_?Ê]b~†¹³çÏ9ƒ=Z4鈉:ý[p5k¾C§.ͺñžÆ©Ù^†±£áÄ™Äu©U˧7'_Ñ4óäÎO§êúµLë­ÊJûðIÝÇ{ÿEX8âðP?îFþü^ôöŸßÃ÷,ôt Õ_çÿ»¿àåã‚iuÕoTÙ•Hþö›U"µ%’[ ¡wHÇý÷\}óQ„a†Í=wßOýõâPý„ôaBP‘…G¶­ØQK)}õ"‚IÖN“Y•"xímÈ¡?z¸×ˆFÙSŠUE¦PTÿQ8a?fsm&Éxa¼IäVeHY!{•³Ë8ï(Ça|g‚$e'…ÝyØýeT ­W£m …EÞ`SØ‹eÒKZ´ÚJeuö,©4ÊÊ9”­ Ÿ¤“ Yä›Ùa—žFvÒV‰"-ÉUa#äXG+UÅ^cxFÕ%EêuÿvK*®àbK*¬”ÙašQÚ£¥ªaJ‘3múM§¢–ª•¨´õY¥©¨ †'…/íxÝ[ñH+©èÊh9òÚ«¸ã2׿LÄâ÷¦œ$+U³tå?6*(£JRaPfDïàÑ­ã„K®Áﺜ»~ ›Nñ Q’(ªU„—‘S‰½é%•ÏŽ\jg +a¬SVÍ#EÀpË;ã4Ê ûz!°Ô9üðAT1œ¨'Fò±–ý騳/Ñ8 DFSE£BÄõ[!EÓ@A'œàC£¹Dš°Â_ÛìóBé‚XÐTn z©AÅMicU ˜Raðv†\©¦NÔfŽdÿN@B !A¬ð /f†ý5ØÒ ©óµa4ÕØpžm IfÅ(e'õ¦¥“)׫`K:ÞçTŠBYH ‹DA÷ГxÍ‹‡†³º:;µÑ»”gj9µÝ8ØÕæôú6ñçlÏýâ?ŽEYˆV#®i CóÁ63'¶ã¹Ÿ 7>¡˶Ž] ŸãѦdC^uþb[_Bî)DáÐàŒöd ƒ2G®î-ç{ksØjžÕ;ßYîmÆãœoB–•]dVZV§ ÇŽ[À"аä°„'¢Ë ƒ(.Bçvf ßùê—3…¨ePºÜ•J„B¡§JxË ¿ÿv–y4ÊQ×x„"ÞÀ$Xmד{jçÂÓ Ð| ”aLF–¢Š<È"¦ºX¬\¢¬’ ,© Q3R‘‹q0Ê÷h„¢HDà`P yUEÒ\±†YÄÐbÒ©’XF`AHIŒ“´é†#H" Ò XD¤Q÷xÝÈÀ†)8á ÇØcšúXœ‘ñ”¨L¥*WÉÊVºi­ÄàÇÄ Êo¸|%‚z¡‰g<#2Á3ЀR” PXÂ|ÉÌf:ó™ÐŒ¦4§IÍjV“AåëIÙ´¹./F,Oté"]$ÂÈ<&1Úqƒ Nk’YcßG0bˆ€ÃÂÿ;b°Á Ä"÷j7Es/Ö1²~¦/.ën¾‰ÌUš6·¡Õ/Dò TU”i€á4bg†rA…m!Aÿˆ;„¾F¡ʈp\ôNR=ô,‚à­ô‘#BêÀÏ{ˆŒxD5 r ¦ƒ% å@©Cnjñ5ìúfLDâ]~^Ê)GŒ61Äôð@ ›Dà¨Áˆé}FdX†{R( ÚQÕ  Ö6Ÿr¼÷m‘xÒâ—C2œ‹u$é´ 5Š-dxðà-æ;ÏЂ ¡|FSia×ű4†.µÎ cXUQ Ó"'©æÇX³Ú†$ Æ Ž¸9ÿ|&¤…˜ŒÎ*¯XÔëUÂÕ«ìä«ÿ™ÈÉT¥²"#†Ú袋b~8A%@ÓT2œTªSõlUÝ4Üž”ÈcPÛ MÏËÃQ!TZÁÍ7þ4¼[$*˜H/†`µœ £Q2B¡ŠœÃƒ¹ÐÕ|H©¦ñ¢ëqÛ§_÷Ê/Q$$Òiç6Ò )%ƒ úTe¢ÒŒM<‚À¤)³#æ*C Fp)\ ÈIN•ë˹B/«\°*#Y Ñ"%ù&müBÙ?äéÆTÀqÅy·æéd¯ÔÁMðP¤»PûæK³”i-©8%¡Ç¢¦d#¦bÿk/†ò=Ê‘ KBDÅ•ºëÂZcâ‚9¦ûú —%"f4?¨<SD:\¨kýg+é‡-t tÍŠ¡ó“ïç_é99 t ¦Ê¶cÂÓÆIn=6(¨ôÇ"Á‡‘¹”(ÔŽjTÁä,e66yÓžïŒ[Úg?;O26^ zå<„xÉŒX±Íz\” m<ˆ0AÝ@šñâqð€·€Tƒ#ÒbGµÃÊŸn\^Gmö¦WbÇÎŒ¯¥”1Mo¢ ñàVáà¤pl+p€ƒ­íš>”éàœgaïyÝo¢pÃfRj.VÆËÁÉá"…vè 'RÄã„P3^q[ø@lÿÄU6¦±ÔÙ…÷·.»CËWõ<èd;›¶–ä+äe¥D#‡NÏ aÒŒ¸ 5ðâ`ñ‚ Ax(ª(Ïc„´Åޏį8-é:ÅNò}É! õóòÄ—cJV†@0ƒ”À÷À„L œ ^s8ÌAÍç™g!÷±µ0îãsþ0Jï ÈÁúc@« ¬ xãÈÅ 6píðÊW·*Í­C,‡fÉÖDt(ÑÜM/}ËïK]|¯1¤p Wð ðP‘JœžWiºIj“•—ôÄuÉRe|© mçþn}WH¢£ø'Ã÷؇1šÐ( ¶°ûÿH·A„#ø|}Ìiì÷ög¤ÔçBÊ”ÆjNÆ_üâD̘ÇúA %P!%UpžpAp|pFÀpUçr/§n2§u£gCæWcSfNàá1Á‘-Aa}aoC† €{ ð—píp vw0pp¶£w¾ì'—H6ÃÒ,«u\Çd7×chƒSN#À€.@;PpQ– °n(|2H|}gƒîx©¦U¦VfÆ…¥b >FF”XGx ãà 8À˜F.ì` ¬ð ¦ ~|qØ!q€oÑ÷nÔ…'!3’HIR`¸"®v4á 3P8Ðv®@ôÐd@ ËWœ`¡ ©ƒŸzä5¬‡ È3‹]+ÂCšÁ¶q*ô1Wb„8pD8 ¤± \PWh!Ü¢+— àâ‹£1ºÔù‘¹S~8Ašãz £¿¿  ÔD \€¾ ]ÐÑ`MÐÄ 1p —ÀÒh *9“4ÙLØ”.êÿ¸Žœ8ŒÎA Æ“jþ‚6<d1 90OL8טÛHcð ¬` ½¸‹¢Wpão‡ˆ$æø`ÇǓŦ%Ó—A™£|kæ4CñP¿P9€•,J5²8‹[°5GT• ¡HßÀ= tÑ3ÕH‰•ˆ‰ W‡x‡c™Že‘Ž4f¤¢añ5bØ ÎÀ 7P:ÀA Rj∲P b0Žï uFß  >GœÑ(‹ÂFïPÜâ—7–Yö˜üqŬo<ÊX#ƒÑöõ0 Æ`ö[vÀÔ R—81³i´9ßð ÿÿ0ÿ` 2À îA‰¹‚gƒnë·‰VŸŽ©áŽÇ¸%§gtR"]Ë0 ôðü° 5,ðd‹Ô csF+Q&0à)ž@ž¦pž™° ©€8 ®€Á ¶` _Ù†ï‰u; ™.uqöy*øÙct“†Á:‚Ã`ÿ 5@"Ð8Ð5 º Vw½ö„z ¬)¡úúbðd³Â „+er+GlãV¢¢'Œ(ZlÅÁCU±"#qH[R/¢œ`’³Ðöð 40ÀØ©ŠR¥ `¸yD°Àˆ˜‘ —ÿ‚Jž¨ UY›Ž.¼€+ãÿ0Ü2¢Wʘ58ŸZJ"Ê6'#ÇD@)IS kà ¿`c° qà0R˜á¨–È 3»Mø„â&eb &¨‚š¤À ”!&d·¢!Zer&©ðI©' v(k147eK_±4õ–qé—ðà °ª˜˜°p¼øW‰£š­` ¥À«½J¡ÔדÆÂ:`¥Aª¬&*ŸÁ¨cY(?S<\‘ Áƒ_n¡<,¢œÈ™*›9Ш*sº÷0+]ó ªi¤ž >À ¼ š¹ò-áé®ïZžñJ¶°° X©±¥0¹à ®`Q|[ÿج"òRv:›â»ñhyó1(Ü8Úv< `?JŒR0Ï@«Ù〕Ûdåp+¹0²½Úµäù ©i«ÄZiõz¯$zzDÕˆ6{j[г<1h¯ÒŽ>k#m±f ¢ûY´¥…´ûÈ,÷д1+p ·â²A‰û˜¶Z-æ ”À«¤‘ GT0Åj¬Èú²÷ š®ÀïÐ¡Š©…çX©9Ë¥–#D6°Ý"†dWR»±>ý¹ŸGÈ €€&`K½Æ »g”1+[ °`¯/– ¹º«j •Û–  Ù b€y û‹ «®ÿ © ú-3v+UȬüJÏJŒ]×Cþ6f†ÖêH7Š9À`'ðDŠÂ(2°§±2(ŒÂ ¬À90:ppì€ Ÿ0žÿ }¤{ÀÀ xF¾¶`¯•f¥|ƒ%— »»ð¹¨×˜ýº¾Dán9òÐWo<¢ë”©ÑjÁŠ­8*p—  T#B@¦àd©ÀÓØÀ™!žÿ0žÐ¦Ð,ðÞâ¡Li<°i³‚+â[P÷ÐbǺ•l’¾+¬¾Ìúlx'i cˆ> :0l(g³Vm¥¬€•:à€l¼#;‰pPÁ`ÿÀ†·Â½Rú½ú¨›kd 6ªyD§‹ºb‰Ž¿Z²ÆÚ2bxrv á ùøf3€ó“ày0 ±:­¯ÃX™ ¯ÀäËÒÏ ”PPü *È-›;»ÖêY&†™wÁ¼À º™Â“zÆØL–Á|=vÒ•ÀnOHp«ì`5 pÒ3Ë™;ßy»<°ž /À ¨ )(¤Nx ½ØžaìdÝ:u5kÆÚ̬)oüNq„” 8€žž¡VŠ0 † 0 ù8ÓÐV0ÂŽ| Œ@‹Ë÷À Ë /p0~ðçÿ‹¾”‹÷ žÐ¬¯Y ·Àø¶Öñ6C6]·6m§ÕÐÑî¡V#½:"”ÛpÌG$v Ä‘ Ì÷€ ,€Á,p !Ì•>€Òh¶÷ð ´ SÖÓŸq`Ä -ÔhœÍ"Ò3}hZòà9°ÝòŽ#õ UC=÷  ' â³Oˆ áP ú³ íémÐ(7Ö1ƒÔmŽ¥{DŠ+ŸQn©Ð sÝÐ@­Âê7…±>r³9òTôtÑ “°ÑNMât= ßËÒ9À0ÛÂÛÇ©ŒÜ3°i»Ô>Òk¹ ÛÍ ×ªM×vÚúÑ ‘ãÛ±>¶ÿQI—Žæ¼ä½ëœúST½T·RÖ÷ú ï`¯¶pant6Fš uìg&´"YÍAmÝ ]×"¢ÝüyA³ñÝçÛi˜a D?@øú眠t°Ø+í :€ž¥0pùÈ•8+øÍiûÝߘQöÚ}À àÕÝNà«}°‰Q\FËdÆmÓŒ* ’|á V“-eSv ”6³XéÈRÇ]ÇË­â ‡•PÊÀ .ã×"{ȇwˆ×ų<ÿ°×ZüמўÏPПQßB “0 ;Ð]ÑeBå´Ò(&¾Ãâ º¢_Y|­Å/žå««ºâ#æ^ÿ>Ô6,!1Eæd;Ö\æ(LçšÌ ñ†,À½XÇÒ8ž¡ŸÑÈ™'¥¤!ްP¹08à >Ðvç m¢mWÓ zÓjË} VŽå­~ÚÜþ. ®“¯Á%ßLI ¾çÞ(1 ë±Á:!Þ}mÇ—— uüdÎÞ£.ÂÝ€ŽroÆê@'‘?ðŸJ÷vo¿J¯JúÐ —P’Á”’Ò$ š  ¢@MïK—¥`MÑÐ —  § !“¦0½$ ,Ðv1 _MšÿÿË1  ¥Ð’$ß ½#±¬[ÞíGëàÎ] [ ¡ãê…([gÆ.ì|NÑl ø»(ÏÎmÇ ;ž8Ôž¡ÐíFÓMè@ÍKb¿‰îÇã.næ(ùŽÐVmé†`ïÐA—@³÷pX™•¹à„¢î&~ÇÂ넚 n%çÁ[\¾•hÚ`ŸøbO€†l‚mï§ptŸ¬kþÏ‚On•HâégµÙ Ü(¢žÊHmуÌé¾kYüÁÑŒ`ÔíegèŠïó./‹éS&Ûû˜ ¥õ$ I åI‡Ä8 ¸ÀÞ Ì¨á˶œ#û4®å³ÿóÏöBBgv6û8EÎi–Ä©ÿp H+)»ç*ö ß²ïºÞS8©eœìêpýRÎÔ_¾×?›æ®ýïÀýt vì¤oÿî¶R•8îÞ½q©ldx¯ß¿ߺA¤XÑ"Åo5n䈱ãÇA޼(’äIˆ&9ökØÒeÃg/eÊ|Ç*U®q°pèÈ% –B—Θ¡Q¹ríÀq«¡ÐqR±zÇkê¸q6y¹|øï^6”âT9¶cY³ѦոÖ"Ë™3cÆ½Ç Ö*® ¶L˜Êo*:XðHõî »Ÿ®rÙL…ƒèc‘wÂÊõîÜ-W<|¤Š‘j¯­À:x,<8ÎU*Xü<’e Òmë”°9¾–ÿM"\º.çδåãñ [[²»E™—Á„ ³Ó!9i.¿}ÜLدͩ|ðx¥‰CÐ:D“æåE°¬e«]ß¶}É÷ð?âÎ 3®U5R‰i®ãûËšn*å§…XÁá&ü;j[l! –s)'A ÜÍ*V°ÒŠ9(Ky"Jï$ÛZ+1­ÍJQEè«ï Ý^²EŒÈÞI(²\d*µ{bòëò!)<ÈAv„¥4v`ȯhÀó¬4…r9ð w€ÆŸlF$iűÀT/¾ØÈ\­#_Œ1(q°±±àtäÑÇÂrpSÈàŠ$ I%™ÔáÉTv+ˆJ[ÊóKÿ-¹ôr$1Ç$³Ñ/Ívêß_#Ò}?ŸXÔõ®4y·;—ñøÉ~§»ŸÓ hÀJ}Däßÿ83óÝÃâŸÖ¾qA fPƒä`ÿ=øA†P„#$a MøA}ôè+da ]øBÆP†3¤a mXÃ{胯 `ðæ7<ëQð€bDV/~õk_'¸?èù~I4x;'‘ˆ <âô¨ØÅOˆ|bÈÜ'ņ1j³XÄ(úpJœâ™x78æ‘‹hl`çHÇòñdŒãÖzhH?þñw|I§E#ò‰‰œ$%/ÂÈÜR/R ¯¾(I6ö1PÔd)9 ÆÚ’‡vt£!YÈUZ2”^d%]¹Éút’QV¤¥"Qy›VžÏ‘<£EyÌJ*“Ùd3sùË*~Ҙɼb…ÿùÊb"R–©”æ4ßLì ³t°2{iÎsVS·4å3A9Kxr³–Ö '6÷èÍxù¦-¯‰ËÜèÒ\ÝŒå>å9J3:óŸ÷Ô¦/ñ©Oƒö“ž¸§ý²YЈBóm£?ë Pº4]ª,g:©yIpRÔž§Ü(DMÊÏhŠ‘” ý(C1zR˜¶4¦hêGO}úS úÔ!A%jQÊ’£&U©CUªOwêІâ4§fѰªjÕu…n›.êCŸ*UŽf•xÅëW˪Q¯š•¤%íêM_ַ•D'¤k]ízW¼æU¯{åk_ëêÖ¶²U®] A»U®6±ŠU+c‹ØÿÇF­iÕie-KØÂBö²Q«d'ëØÏ v±£ mf5ÛYÏRVµ«=ljYKÚÒzªœÅì.×[Ùft³­Åí@O[[Ûþ–·½©p‡‹Zâ͸¢uíq_Û\çF—¹Ð5­nwKÝêžõºÙEîs¹{ÛÜj×»áí.mk^Ў׷³îvÉ Þà²÷»çU®|ç»Üûb7¾öݯxÕ‹^Øþ·¾ü]¯l]ƒÍ°íM0{à{àä*¿ïM/„ÝÛ`O¸Àf°…1Ü_ç7Â&pq5ìawXº*f±ˆGLá ¯ÆN±‹/\cãÄå•ñŽéÛâ÷xÃ<²cLcÿùÈEV2’…œä&ë7ÊR61‚¡üä*‡xÆT°–·ìe#s™Ä%î2‘™ü7¤YÍkfs›Ýüf8ÇYÎs¦sí|g<çYÏ{æsŸù7¬+Ð’´™ mh`:>Š^tV-Âè÷@z=’– ¥+hLgÚѱ4l:Í–O§%Ô¢Ö4™Fm–S_ºÔ&´ WiWo"ÏX­%ek3á:×ÀÒu|zíkY[ØÃ&v±}ld'[ÙËf¶lQÀ"p(€® ›l"ƒ¨v¹Æòì$âú0@¤ p‹ûÔ¶vk1ˆ””Þÿà¶îa–{ º €½ÿñŒ„;-ÿ¸ö? –~”;Õy7DÈM€A×ûÞíÑàˆ¼[Ò¸lú!xƒpCÈ[s‘Ã!ÿè÷32Þ}`p€>±ñŽSõ4Ï€o¸<ÀXà0@„èÒ0ú8мà#y†0q4@'€4pî“ècçƒîw60¡ý=ÙHºÁÝPx£\60@Èá íÀÛ'qÃîñ iTü!nÀ{Z²€žàpyZÄ>€@›" ü€©ƒäím/ÀÖï‘ñ¶@Ý'úÕ!âõl=÷ævXèÏë0÷0€åŸžyØ B멇ÿæÝ=}„œò8[ €’ÿdza3€ è¼ÿ‡ïÓ2üD´`ü?°÷Žd¿"ú @´ñn°£dõ‹Äyàðl},ÃϤ¯øîÿ=÷ €ÄM})4É8iP¼áû‡Îkr»¼›ƒˆD(<³À¸Ê8@ŽÀ>íã¾y¬#½¶[·0€~¸»É›·°X¿rû”ƒ¿D ú«9ƒÓ@ˆà@Š €Bc¼oX9¶è‡€#@?¼t©=ˆ—{ˆ°<¶ Aƒã6xÛAŒ<“3·´§³@‹?4Ó; ½ÑS¿{{»¾֛̈¿@“Bÿ4«=,D¼öø¹%<iHž&„àó 4ùc i°¸c9ˆð‰@Œº¨Ã;ÌC³8À ¼š D7 €ˆÀ¶Cº%tƒ§[Â4‹õ£ˆ$:• Ó€D€J¼Äö†5‹A8@;7¦#8Ù¨:\Ü70Å4°µY\¸‹H[#7غæ«=-œy[3iû†ÚÛN¬ä´TL ct8ºS·<€fl6qGr,Gs„¬ÄhSºí„‡+>ÿ2·d·‰ƒHi{À :x»Âu 8x˶gý…Lɬ¢¹j«»÷;€Ë `E tI±‹I›”š“>9˜”Išü98н¨8I€Dø¹›ì@•œÊu¡9û³É÷C¾#D<äËèIŠŒ¾lн 9x;È4¹äSJ« €gpÊ™¬C· ¤J»t´†DÀ««K½|:WTÅ›$›Lô3=šû9¼;È~ ™tƒ ¬¹¦LÑsÊ»¬LIÉKÅD¾ÄãJmK88ȆƒTÅ¢»‡x³d9CÔ̧[9Ç4ĦL:èë±{J­³LÛ|Ì|?ÇŒ>‹«>¼›Éÿþ3D˜L>0Í›´É¢ÛM›”¶ú[¹ƒ”¶Ÿ´ÉAø9e¼MëD7˜8’Û6`|Fu;`F`Ü:³dFîÌFNëÈìt@`·oXÏëŒOf£9©”Oû¤ÇA ”¼OþìOÿüO PP-P=PMP]PmP}PP P ­P ½P ÍP ÝPíPýP QQ-Q=QMÑqô+mQ}QQ!¨Q½QÍQ« Û4UYûQ­r´×ÐQ#=R!­`KÒŠ`R²â¥Å9R)ÅQ' ¶*e— ÅRŽ˜R/E€, S.]Ò1ÝÒøÒ)Sÿ2]S3mÓ+=S4EÒ2}S7%Ò9µS8SUÓ:«;õS6½=5R>¥SCÅÓ>…ÒÔ=ýSE=1,;3ÀbÔ-TD=T@MÔ(¥ÔµÔLÅÔG%3ÁâÔNuÔ‹Ô s²Æ"Õ5Õ{±0³²ÄbÕõÔP•U1KÕU¥U[=UIýU]#ZSW…T`ý23V^-VQ ÖCU Ö^}Õg=ÖX³)ÃVh½Öd­VgåÖûÖ+³Öl}«$8×$ðVd ×u]2XU2tM×+WvWwUW‹W|¥×{×,»U©ÒW-3_×må×ÄØq5XrýׂmׄE×}uXŸjØ1ûÔKµ…=XŠ5V†ýXˆm¬mX‚­Ø… Ùw¥Ø‘Y{UÕ”-Y¥°•EÙ‰…Ùf¥Y‹íQ•ØœRP}Ø–ÍU™åÙ“ Ú—½X€íV|šY£­Y¤Z„Ú|%Z޵Y\=ZÅX­¥¦Z¬õÙŒÝZ¨UYª%Ù§5Ùª=Û˜ÚsuÚ¬MÚzõZ·ÛŠèÚŽ½Ù¦íÙ![ !ù,ë‰Â‡&&&777HHHWWWiiivvvnˆ®iвx‡©p±s‘²s“¸|–·z—¹}š»“?>¤FD®RQºJIº[Z®l|·``µhv¾p{ÇXWÛ[\×]`Î~AÚlLÝeSÝb^ÝkPÝl\ÙrLÖwVÇjkÄktÊmuÂpyÁ{zÍqwÌszÙfgÐkqÝznÑtuÒtyÚxwÚ{{ãWVègKäb\ërIévUãdbähfällèjjäsjässãywä||érqšuŒœ|’®y‰¦}¶{ˆÀŠÔ~ƒ¯v³n̈FÏŠIÎVËQΑXЂAÑŠIÚ‘NÍ’eÈ›q׃pÐ’i×–xΤ}Þ¥mÝ¥rܪyì‰Wç˜LåšRâŸ^èšUïœYðKä€~ì“hñ [à¡fì¢zï¬qì¯yð¤bð¦iðªmð¬p‡‡‡ŒŒ”‰‰•••ˆŒ¨Š”¢„–´‚½Š™¶’‰£”™©š›³… ¾ž¦¼¡–¦ššº€»•…¬ ®Ÿ°¹“¡§¦¦£©½ª­´¨³¿´°®¶¶¶‰£À”«Äš®Åœ±Ç±È¢µÊ®½Í°¾Ï±¿Ð»ÇÔÆŒ”Ę—ׇ‡ÖŒÝ“ŠÔ““Õ–›Ó˜—ÑÜ’“Û™™Ö¤‘Ô´•̪ªÃ­¸Î»©Â³³Ì°°È¿·Ê¼½Õ¦¦Õ¹£Õµ·ä⇈䉅䊊틋ää’“å—˜åœœî““åŸ îµƒí·‰í¹ì¹å¢¢ä©©ê££ç´©å²²å¸·å¼¼ó®¯ó¯°ò·¶È¿ÀØ¿ÃìÁêÄ£êÉ­ê͵éϹêкñÀ¿öѬ÷Ù¼ÆÆÆÃÂÍÈÂÂËËËÂËÖÅÎØËÒÚÚÇÇÐÎÕÕÕÕÐÖÝÖÙÞÚÔÔØ×ØßÛ×ÜÜÜÜÞáÞàâåÄÄåÇÈåÉÉëÆÅåÏÐàÐÀãÖÊçÚÎèÙËåÓÓåרçÞ×åÜÜìÒÒïÙÙôÈÇóÝÉõØØåßàèáÛóàÏþíÝäääççèëååìçèïëçëëëïïð÷ææòòòüôôþþþÿÿ Hà¾~ûí+¨¯ Ã‡6ŒH±¢À‰3䦱ã@Ž=‚Lد¤É’úRöK©ïd¿z.cÊœ&Í›8KÚ̉PdÈŽ#ZäV¯è¿—E“*寴©ÒzÍžJJUjÔªX³½ª¦O¡CÁf$Zô`Ö¦d•ríÊvkÛ·nÙöÔTìúv‚ÔgnÒµ~±\upÕ¹cóFÄ«ø£@…úC•œÕ0eµm‡m¬—óÝ‹}[¾<™4ÕÑR5Wdܘuë”õBûEM™víÌ_=;ÖM0­N¬áz}[gÕôTÛ’‘UMÑu^çÏS>®º.Vªë¬Æ=U>ÛøqÜ@yïÿÿÏ7Ò©¹R½Ú…++â½o—?_nnÞÐírƒ-û)«TðYfôÅU`i]1·yå1Øà?|÷Ô:î%ÕÞ7È]wö…G^~bÙTÓ4b ¹¬óÍuèdH߆pq§ D U£ IXT4<‡ &üp/õix ZÍøÙ‡¦Õ_7y<àˆ4ƒ ±,¾w ŒoÉxŸn7þDVC:Jó@"IAA=òhiä‘^z(^˜!¥ã40’&i¡†1.ÊÇe[qÒÅ ÷éØ L©QøIÈÄ·å‘&ù¥gˆÊyTQèä /Îôø€J8AÈ4Éq†¥o^ÿÚ¡¡LJÐK+^ç^5 âÆIôMŸmf*(¦…&Vë²G­ó/ßX‡K=‹ÈEŽ@pkÀú"²àÑ:g“·†“J,I]WšhÁÆM|QŒ·Ç®²ãÚTd£ÄpI3Í<#ƒ Í0À)ep…WìðÃG,ñÄWlñÅ×£ZwìñÇ ‡,òÈ"ßêl*ÐJKíŠDcwtÃ&1lxAL±õʚজu*î§ßȃ 0¨B6Qš ›gLÊ…«87([Én–/³/ICìQ‡Ìõxãˆ"LST1®–JÓ󿫦ž‚InB‹J)"yVE É@ÿÕ*-ßÚ;+¾øÍýžxˆšËkRe ó6ƒ¶-ë ÷ÏrÛšÐ4v¬ ksTṳ¶h1é1•¿•’1‹_Qdrƒ‚ €Ò‡ ’`…6O·ívê«óÜZ“IŽ Eôè€ ©deŽ1ž˜£Ô8¢òaSwUõjš×[?æbÒˆ"ލ«ÕZ¹bw=‡–7§sCvrÊ©L{~RóG[rànuášS®®#¤÷h/)æBWQÌ'šþíì}=k‚ è D:`QÌe¿z0}ªÃ ë6Ò½9%E'íqÏu0t¿¢äOeØsàå—¹Áî(èpq¾ÑƒäB;‚QJúÿÜ“þ ߡNØM+¬À„ÄÂÓ<%T£Z'Bá)ÆgcÑÉAr‹zàâ:@™{¬ ³¹‰‹ÞÙ^sJ@…죰ð @Pƒd)/ˆ€°Ñ+Ž2t_#@³œ"˜Á H°zT‚%PÁ Lˆ"ÁQj÷ú_ ç$Æ~p£ PèÄ*D0+ð‚ˆÅ7x±‚ T#Pˆ<â E©DÖƒ÷€G'  …\¼¢øÀ8p‚¤H¨À%(u©HörNúG,Ü¡ *<  p±É¥a£&†4M“½"ÑšŒüP?tÑ xð#è,Aÿ‚'T¡œ0Áî°a}í "5»Áá*Ô FI¾!$ó D=ÒA‰MšUDÒïFz/>§I¥FK¾!IPSt!/bñÃ7’tšïäe<ç„\ âüxÅ p‹o¼=РqÐ VÀ‰dè"jCxàâìè,xÁ)jñ8ç¸-ˆ¡ÊäPW1È`KÚÐ/ï%úh.z IIâÀ]9Ť&•†¨ÁÅ:Ö;^*Z´VªŒ°7t“5˜Ò’uà`5xì ^¡yt ÄHÆÞ( 5¯(—HEHs™Sî¹N±‹-‰/¤¨«­j%\\QÒÉÿü>”HÅ€ ;•ÃŽ€Zì~êaŠÄ `Ï¢0, .``ÏèBž1‰e"”  "kŠêz÷»ÓÉÆKÞòš÷c7r²˜fŲ˜Õ,Æ Và‚°XáÈ/ëQHqŠ¢US±t9.è´œ*Þ;jÁƒäÀ¿,øCÙ²¢×½nAHºÂïT¸ 0¥èðŸ±"ÊžUWjm ÿL{µ|Õ#Ë nP°`JLXiq 1ˆv¼8W~›ñ”‡ßô¢rê láø†cJ7_óÇ;Žq 5l!vP„4ñ€<ÒMNL€ªÂ "ÀÿÈÜ ÆX•¾‡2biçˆ`F&C/YÇ*jðØ/Fa¨VˆÍn~sy6ñW\b©ÈÒm‹ò ÝŸÀE–¨Ve>·?)! ëÁŠÐ À‘­h+ºð?4ít.†üøÚÈÙ t öWô°BT:4£®ˆíÎ]Zy”¯«G9ÞÁŒ]¸: ~(z@f3OÊ£¸^”u‹¯.e½öµ¤©ŠOà×ÉØ/ÜóoügÔ•)õO ¦Óc[  Æ€‰8p`hÀÒ¤bïTÄ€UTQ/v+Sšq”(AºÕmdNPbÊÁNQÚêP3[¡{ÿÞ÷•ñc–ëãf¨A)„ p  —ÊYc‘ÛÁVŠËÆ/d‚sü—ØDV*؃ëô@D¹³M½r0¥Ä-AÇcsЂƒË Ûg.6Ê ä]S%söEß |ÂèGç5°‚‹­Æbþ5{¾ñÇ‹W¼ÂzOñ­‡«D–„ã5d¬›Gë§XC͇§ò ÿÎYáÀ… ÐýkIª¯©/èt¨+µÖe•"øñ»ð)9üVYÀ0>ÑOIÏ´žÑ½+%‡[M}§Ã4¿™& P€-:™®0Dò’Ÿ|ÑE ò+бŽN§¸õ`|¶ÿÕõõ~h¬øƒJp°Oè?¬A²¥’!Å"O7 )4ndQðAÒP%ÍÓ²´vë0o×pø†rR+¢@ËaRúÑ$-W~²—,€%`ÂòmÖ!å–%B>Ý`¾À =3 ,Ä ¢ oE¦|ûg RäYIñ€seA=uüekÊÖ EÑ '~„×3Œuá@Wu5*0aXñ JÁ#¦B¦P?© U-ø‚D&‡pÖ oÆ%ðCåYâi=xA”îÑ€’+&`'D!b88$I? :0IåNPb7x£¬à_:ðŠh@vÍÿ Ð 5ø)À€¨l¨C Xo÷&v*d‡Þd(xxágeý°Z¶— hˆñ€‘Ày Ea&hRj‚þ• °€øKÂÅ Ÿ€ ¡ 3ðõÓ§l,äDv¶C(èà ¾0e^‘+Á ­×Vn•«åC4%E¯HÐ# ðPxr‹ë²&MV¿¨¸ð  €¯ $¡GXyVN”fE±i‡ÄVõ` óz;Õë80*©€~U €ÑPˆð‘P7Ž x³˜8K©@ Š@‰@‹õà b@ û§,0 04›È€9„W ÿöhiX¦4Ð&éµ’’Ղؘ‹À‘Pa‘"i&¦’ذŒº"v`*ðf$B ,°Ðtæ*?€‘ezx¤±ð,žTÔãüà)1\±S,çr¸ò™FaYŒðKÓ <¢'õp ããÞÀw4… Ý0 Œ‚ yÆC’–T±"E9ŸÕ}ºâ{"Eyס î p CÂU—T…MÓXÏ3)‰‘ ‘J©Þt è zÙš›øsˆCeœ3ÐAÄw”´1?üà­ A~ûÁXWu°§ ¤fXÑ ð °ŽlÿÁ(`³‘fÓc uͰO‡ ãdg.µk©ð‡ÊØlSa.¯ î­Ð Óùa©yÒ1Uex“çAŸE¸PBE„ÝYfŽ€ht˜+ù :@g¥E¶§ˆË–óéAöyzùùt© š: ¦©1­¹AŠ:Õ3séš(£?𛸠ØÝ€h=’ntk(C ôwþ•‰×ñ‡è÷‡Éi¢:ç_¬Á€,ú>I3"—+a3ÚØ‰F¤×—yÖ IðYSÒ ÑvyRd@Rª×!¢O¸ {§£¡6j‡÷`Á ;p¥ ©šñK,”ÿ±-áz&´yéƒkÆ †¦×§@׌XÁT,Єõ‡‘õX=Z÷„÷Ùl)tÓ"{:¨ƒZÛÈ:ûUL¡ ;§HuùšÄ©;Ú£Sa€$i@YZ±¼ðX8°’¤M’j’$(W“÷¦‹èG¥V O‰ºX‘Áá“H±«*> úAR‘BÖ£Ü)ž–J@|(§²ö‡ö Cx(÷Ntxi$š±ú¥Q«¿Ä ‘/A®4²/õÐ/”]C]ó —p Ÿ`1 0”£€1Ï  ”p Rt !»]88ÿò –81 {1—Û Ÿà/ÿ{ âÀBr^ÓrMá³ŒÜ ´<;2&ó,8 ¥éz.Ê:R7‘( ëUÑꄬð«b­™æœÐù ÜJ\Šáº㪇¤+ƺ§?ÇŒ+$Ô“E¡B ú:þõ_¼0S™ù"ˆ2S—Dfôtn¡9šü0© "£›“,Á› R=}¹–j:S¢'DË¢Ãf¬Næ )(§O8T’EgJ!}ÃÆBmøƒI*nYšåqÖ 5¹á¨F:2°Ea ·¢g„1?°¹U¼0 ¿j€© I$I}¤UDEçò š ‰ôÆ€¬G ÔIB}–°ÿÓ¥ Á¥v"¼±éZL¦§ Ô<•F¹ YîQwzj>Í üz„½1C‹ Û:?W¾û^Z¾1Dèû ê« RÑdï«[Ë[Ö³¬¨Û¾ÄÑ í‘yv˜¦ÙèaÚ0°µ‹Xß+«0JÀõ`ƒG¹,/d¼Ÿ¼ç²¼-ˆ¯ùÊ 0å{ÄZ½ï¡µ ˆÛÛö®"Ìàkr !cJÁ»ÂUá ±° ?ð £§ËötŸZ©¾¨¼ÀŒ™iºR¤YD=Ç$$«;r‚ëºø Á`OA»¶«¸ûµ=‰',I¼*¬bUqFOˆrbÕœ6f™Øj·x‹ªéÑCºÿ¢¬Ø°p øÕºö£Š°z¸ÿ@»×9ÄÁ¸T¦ä`;¹ÓÁÄR1od™ b€ˆGÉ_Ï‚¼ûEQ»U¾­¸0­Ä+µ:À °Y?\ÁÃØ Ú* ³;\-ç½q™Äb+°¾G¬É:Ò%t'9ˆ™²FÛ¹¾Ž…ð1–¼@WöSË¥:y ÌjF…#·Áõ³¬ÍÓþ°;àÅìa™œÂ›\ÇH#ÀvlÏôü)¤ü¸ ÍÚLͼAB†Í¹Í~ìÍ#ˆ ìZíËù+j1ÅÎ:ðÎñ<»u™^zÏÊœ»%ÜÑýüÌ„‚¦\¨ì_9–óóÂûµx»Ò4,­3ÿPnH‹Ëôƒ ½|½÷ö©­:´ÄŒÇ¿Õ¢-‘Ìâ×dÛÌ¿EÒ¤FwhXW~Œ¹ò¹ED·ÿ5ÕõÕ|H¸K@=ð k!‹Ü‡¼¿8¨@p¸ý€Éó£Ù‹¥*©žüìÏzÜÄiYià q«¯üe®ð×;ØCÔŠEÖ*°Ðd Š ¦‚hë ®°Æ²KÀD1 yülšZ¨J!Ê`ÇÎl¾¤e9ì´·¼?#D§×L¶¶j¶¦SÆa¿óˆ¾ çIqãÆ=ë¼ÕãªîœŒ¸ûܸÞÔX~ Uë}°G-Òš|eŽ}Ážå+ÖÉÑÑÔ×Ô¾ìàîVþì2>åÌaÝF^í]®è¿Îâ€ÚÑ^çè^ÚíŽí´žêïþÅ^Ô£¤îßqïÀ^Mä.¹Eþà×äïMÞç¨îî¶ž‡ç-î²ðN>ðuRܦ®ðÏð_Цëˆ~íÌþæKBÄß8Ê/ñ /ìùÞñ_ï!ò‹¾ò8ÿÒò'ŸãQåìI½šßîòñ*ßð,5=ÍÍŽï@?óBÏóJ¿ô|ôbbñ>ÿòŸ¤ñ9_ò-†ð˜›ñ6Ÿí*'å 9ô%]ôT¯í1~ð`ïæ0?îURtÄ3±n÷p÷n?÷7Qñ#ÌöŠQðÁí |ïð$¯÷‚ïõ:䆸Hâ…_ö‹ÏøOŸ÷ùAøÃžøŠ?øˆß¾ùœßùžÿù Ï³Žù™OúúxOù€ù‘/ùNŸúªoù¥oúû²?ú­oûkŸû¬¿ú„oõ¼?ûÁû¾ÿû_ûºü°ßû2üÌû¨OûË/üÅOü“ÿü_ùÐüÔÿýÕýÃþÞßýÙßüÎOþÓþd/þãÏþç¯þ]ÿÚŸþîÿþÛ/ýøÿýÜ/ÿ#ýöÿ$XÐà@n.T˜áÇ!B”8Ñ¢ÀŠ-fÔ±ãEކIRdA“' ¦Tù¥Ê—0[®œ9²¦Í›c–Ìyp'Åž(ƒ б¨Ñ£.sþìÈ´iR§ “*½uãT«³…º´ë×¢[=‚)–¡Ù³dƒ¢ÅY“­O¬j{¾…[UîÜ»vó~¤Kôh_šãê ;¸°à½O/ !Ö6‘%O¦\ÙòeÌ™5oæÜÙógСEOÎÙ&©éÓ©¢^]ZukØEYËvÿ›¶í ³‡êVÉ»6îž¾o ž³YÒãÈ•MÎ|êsèÑ¥O§^Ýúõ‰õDÖCÝïÚ›(pèä} Xû×Ï@â ¨ÏÔ‚ „ßÞý¾~þ¯<¾î; @ýøs>‘Ú =h `€à€šûú 8HO£f @;ÚšîƒF8:ÒçPÏi&€C4¬ð €<A±£€&É{¤ÐE;jChhô°G¼ÈA ÿ)€Åzxì’ó4êñD^ÜðŸ´ÓOF M Sn¬©Ç€Ú @K‹¸ˆA³Ì‹@p¿ÿ<= ÓÍ:2€¾~ÀQ ØëHP‚ô!€8 È€?j³=*¿Ô€­¡ð#L³€€›èû§Ò0ýçàN? µ#ᨕÒfPýGU‘Ü[UÀP4³ËàÀ`[´µ£Qßã†AêQÖj5juÙ#ñ<öVi/Ò5Éz4ÌöÑŽÜ Æu7·\‹  €ôô) €¼´Ë)-Õ•L‘Fupà gýçMVMã&€ñ4ÍCƒ§hT}X˜P‹8Ã÷”˜â‹ 9l4×./<à€6<¼ÙІÛýòyyéÜ[åÚ0Y¤…É4Yg+5:ÏÿAZéFƒ&y¢’¼é›;Öˆ['‹‘<³Ê™ p3ÞöÒäf4 ÌCð$[ûi£ÕÑ>À)}&3¯îÝ®p2n$ÃnqÆwüqÈ#—|rÊ+·ürÌ3×|sÎ;÷\òl?ó”ýtÌKPiN3„£jûL.óáÁAÝEÖc¬›nªÚ4cµfî“Q]TèÕ×< i0ù{ušc@ —à^ဥWqäáõùvïüy¹ÿG€‚ !Y«D‚­ÿ€ѧtаŸ@è75 Y‡ð4xUé¹ït¥—§¼„ª Ä_Ï»ßÿó<*4…ˆWTÝ„ "…̃ Ó¯$8:ÕÙ¯ªŸ§Ük”Î_ŠW3øèYC†4ü‡Š$…< ɪ3Rߊ^(:Õ©ˆ`÷b“}EäYCyô€Ÿç< IÑy1zÆJ£ì9O¼bÑ='ˆü€^E,“Ü AÈ‘E´›席6è® (ªÛÜ\2H7&Ò"!jŸ"9A€O¤d%-yILfR“›äd'=ùIP†R”£$e)MyJT¦R•«de+]ùJXÆR–³¤e-myK\æR—»äå)y÷K`S˜Ã$f1yLd&S™Ëdf3ùÌ`ze:ŽiKt¨ÿÙÃX“:׬‹t¸ÉMlSœÓÌ&tÀém’31§7Ûywª3žó„g:éiÎw²Sžöä'>×¹–|>çœaŒ?ï)ЀâeŸí'Bÿ©Ðƒ–Ó¡hC%zQiFô¡µ(GúÑŠ‚¢¥(FKêѦԤõÔ§FOúR–t¡*Ý(abºÒ–’ô¦(Å©L]ºS›Š´¦nI(O‡Z–¢Â©3íéH…Tš*Õ§:]êOsúT •©GmÉ@ÃU™lUªN*V¯Õ¬V•ªeEëYÉÚT£Ž5®Zµ*[á Õ·‚õ$^EJ]Ãê×¹ºU¯ZIjZí:X®¯ˆUŒ\ëXº®õ¯’ ìa!ÛXÊ>Ö°yÕ¬`/ÛÕ„Î@´£%miM{ZÔ¦Vµ«emk]ûZØÆV¶³¥mmm{[ÜæV·»åmo}û[àW¸Ã%nq{\ä&W¹Ëensû\èFWºÓ¥nu­{]ìfW»Ûånw½û]ð†W¼ã%oyÍ{^ô¦W½ëeo{Ýû^øÆW¾ó5m@!ù,Q…w3‡&&&666HHHVVViiivvvMx¨nˆ®iвx‡©p±s‘²s“¸|–·z—¹}š»–TT¸QP¥ll®l|¯zzµhv½qyÊQOÈVUÖXY×]`Î`_Î~AÚlLÝgUÙrLÖwVÊfjÅltÂpyÅ{ÌquÌszËzyÚffÐkqÝznÓsuÒtyÝuuÚxwÛ{{ãWVègKäb\ërIévUägfäsjäxxšuŒœ|’®y‰¦}¶{ˆÀŠÔ~ƒ¯v³nõ…̈FÏŠỈSΑXчEÚ‘NÍ’eÈ›q׃pÐ’i×–xΤ}Þ¥mÝ¥rܪyì‰Wç˜LåšRâŸ^èšUïœYðKä€~ì“hñ [à¡fì¢zï¬qì¯yç±ð¤bð¦ið©mð¬p‡‡‡ŒŒ•••ˆŒ¨Š”¢„–´‚½Š™¶’‰£”™©š›³… ¾ž¦¼¤‹‹¡–¥˜˜º€»•…³““¬ ®Ÿ°¹“¡§§§£©½ª­´¨³¿´°®¶¶¶‰£À”«Äš®Åœ°Å±È¢µÊ®½Í°¾Ï±¿Ð»ÇÔÁ‰‰ÆŒ”Á™™×ˆˆÖŒÝ“ŠÔ——Ö¤‘Ô´•˪ªÃ­¸Î»©Á¼¼Ì°°È¿·Ê¼½Ô£¤Õ¹£Ø¸¹ä€â‡ˆä‰…䊊퉉å䒓嗘圜ðœåŸ îµƒí·‰í¹ì¹å¢¢ä©©ê££å¸¦å²²å¸·å¼¼ñ¤¥ô¼»È¿ÀØ¿ÃìÁêÄ£éÉ­êÍ´éϹéлñÀ¿õÕµÆÆÆÃÂÍÈÂÂËËËÂËÖÅÎØËÒÚØÅÅÐÎÕßÖÎÕÕÕÓÖÚÖÙÞÛÓӨרßÛ×ÜÜÜÜÞáÞàâåÃÄåÇÈåÊÊéÇÇåÏÐãÔÅç×ÈçÚÎèÙËåÓÓåרçÞ×åÜÜïÔÔïØÙóÃÂôÈÇõËËñÒÒ÷ØØøÖ×ùÜÜåßàèáÚýãÎäääççèéääêçèëëëïïðòââñîíûåæýìíðïðýñåóóóüõõþþþÿû Hpà´‚*Lxpa¿wßM‹qŸÃ‰1Jœ†±™Gó †äH"Éyû$~œ6 Eˆ 6Œ¹pÝ9uüΤÉSfÏŸ>þÜ)4&Ñ¢‘*íwt©N‡!QÎã(æÂi)ßµì·Ï¢Èw+=jì öY‰9šœhq`H­C•ò»5ª.ª{›:5¸7i_†~:˜¦Þ¿‡¾3ˆU`ȶ‚¦œ&v¢ØŠË œ<ÙlZ–{;Ä5J.º©rò-¼šµ@ÑKa+•=Ûµ_Û‰­2mÖöñÕ˜ó<:¦¼Ïw¿à‹¹JììuâÖÌã"=WN5uÕŽm×¾·vÚHÁ#ÿæž8jqªgo/,[¼ÙÁ¬d›™ŒuãZÏÐ)öLܵ¿ÿ}å”Óß9ÁÔãß|ÿ%¨à‚2èàƒý!ø`QâU¡…ÜEæšhi„Ùo†}ÄÛp%m´’I•±4ÏH$©õˆ’½ôÒ)ŸÄ"Ž5Ÿ|ò EÃÈèã@BÔcD9d‘í÷yæp+:¥Q=½XiE™ˆ*f´G"^–Œùõ#69¦IËKGé&oÆ §›Iòt¡’K6Ô“*œŠ”iY }ÅQ4•y¤\dRDÏ[@~sŠ(¦Ø"c›r‰i¦F¾Y§ayò©'SLŠ X[ýIÙb–5³\­ÿ´åA"M™—[Œça¦›rúc¯¾ú¬ŒŸRijawÆVjŸH¡ê˜{béÞ«-Åæ´ÑêÖšqºûÎ°Þ n§t •,¨¡Žz.ºÌò”UK®è–".Æ"‹³n©%VôáGªc¹Nå-¸á\°§æ¦ËÚº.;ØyÅ")LÒÊ÷е_Îzm–TeíV;ÕúèÁãþZ2(]»,ëɰz½%ß‹ a–Õq"m¦V3S¥¸1—òV+‘YVí”Õ;ô $6µX#Î¥' µÔåbxì`/[}õRða1µ…ŽYL´!ª(eBOåÎ¥Ò2ŠCcŽ¢hÃæÔ{óÿ='’ o=Þ¨¯9Ü—oõÑ\ÐÍçé•Ѽ`º—(HÈ)÷¢ÉaftDIË'¥ÌË'¢<Qʾ¢ž:ÂZ/lx“Y+;Àq§¤øØ_ºw»bЂyX­h1ÀνUxØ+Ž ¤(Ÿ˜N#6û­:§¨-»ÂÈ~¼àHu­òz½OÐ>´Î+ÖÆ*ÑüÒ¶ï‘8¤G4º5Ñó==¯¬¯ì:öÎî$AV*ŠÌrÀ­È>é \Š+”@Ž^ÃJÒŸ=qK`2JÆ!~àáHGõ›ÚýäT½Àµ,{Úóß­ò""ë)b ÉH˜³µùìDnƒW´¦aC.æz{ÿ)r @ $ Ar´¦Fm„q*aëPȽbmlòi\m$¦•žÉG_äÓ>)‡$aa óƒ´‰A„q€"Ñ  RPó›¸ô¸GÀMñŠü{ S¨5 !0ñbW4Ƴ̈©,ÁÙQ„F÷|©‹u"Š•èöd@`‰@ÞÑŽ<êŠo’¢þ¨hEA†(”)¤ ×è{I$dQ Û)¦/ŠÍ-ùÊR?*‘†“É€€!B1pa ½pâÉPé&Uâ©•ƒ#œ ÷äH³Àƒ#[,HT¼xŸãè®bçëCZt¢,2Ç”5Ø9"Ix&¸ðÿ‹Óññ[ÿhÕV9HlVÑ)Gà,iYK•p)s>¼Vcç»JJ´%¶k BŽöXœ‚Ä0"Ô@„#ø!ÀàÂüÉGjj*×ÜßAY)SŠïn1 ÛÔb¯YIe†ô"´ xÑ\ÅóÄÛ2!ˆ3AF<†3K)ÐSÔšv d6ÕåʾÐF$ ŒùÔx>¾ªEhœHäÒê¯xŠƒy´°`ñŽB¨! Q@DÞ€2°ÔªÿÄ*»jJXØu•kS™eF=Ö˜ŒY²|?‰–êµ@$ܤ(šN‘½C”`àB–`„+ðâ¯Ò»*L³:Ópz­°­lgKÛÚÿÚv¶>¬íPéeш¦ˆ¨3\«pm’ad’Æ0Šƒ £ ÐD¨€"© Ò ?±Â~$è+7\Ø‚®Ã‹…ÒV*&6Èm¥?Tq¨o¯Õ–£"# =àÚÐàwT„8D2  •rã:>-…»ÚÁfxÿÈ)$2PÞ»PŠq—Êá |:Ä,Ùð²’›áH"–’yÊ„P&XÁ`|+¥¬H-›-ÌÞ"ÃY›rÊwçg™39#9«¡ZÕ y€ñ|À³ )øŽdÂÁ£±XÃ(ä .œvev…¤[Úfc44ÚûW{âxºr8kHg Åó)j¨”¢˜¢-V'à (HÖ$_ìÓRا/v Ø _ØÈoÖªWÕ •;72Ïg‰$íT•%,ApKq3Î&%RìÁv A#‚Tf.ðXÍkæ5¥ÝŒî†g:{¨”‰U øq-Áäf\™ š$qB ³/HRIWsê™HuÖèÎÝóa¿j>7Í|²B+­ð÷‹.ZŽLxfoinÀ|ë'â:×j¾OÀ}·ù׃ö¡ÁÞ¦Øybœ$/)_£Æ*òÅ ­-Ðn;8Í3“ NäƒK,ß!²Ùή\ð“Î9Ã/ýkKoµJøq¼áý{É?yZ÷ùW,¥ã}&ïª D`qƒä ‰Yšè ¬¯.õ`7¡ëyŽiŸ³íð}÷*ÂvÅH%Ê3„ÿS¦ºm|œËÊèH—#ú%_ï|'ðÀ¤Â {úd¯¾ÙVLŠÓäâ9ÅSZb9ƒ1ÊQ-aâ .2âÄ}ïð \‡T9± 7AÒ&[' à0ÐGxÒwxÊRv­÷B+1ât•çq“S„blq4ÀÕNø)ôH%à Å·Dîg2ÑQÕu^×õ÷÷z†e}ç^XLaµx"!€Q–qåqjõtÜÇ@h ï 9p{G:Íp cfJäv†EˆSHx„û'dkøs±§¸Re%4aI÷²Ø¢Káyï` 9À @9`)§Ð<À=]†Z ÿWnѧ†Ô7‚l˜øgS˜74shx‹eo*˜p1+»¡V}è/Ó 2 " ï 0'DzÐ7ˆ†?bŠw—‚®å‹–c&ng<³V÷E"¤f…C³kÇ@Ó`H0 ¡!à´ p Ö@ (€Ë M%ssØk0S‰ˆ'‚½¸„UÒ"B#V‹·S‘@%è1?cIYÄï`ãp “€J ¥©˜@Ñ$à à8.âˆ2äH&ÀxHúG‰Éxì(%4CRöX±dº¤DÅ¡ è ŸÀH`9’! °D8ö >@º°$£pªÿçk騎\¥„ùaMø5;!TÍ t«òNŠ6+4>²`õ WàL "€Mð’@<ðt@@Ðu I58‰n8‰;ù†hi‰ÀQ{œ¶c”«B-ÁGŒÇÁ€4 Р ñÖŠ~ùïD$à=ØG¸øc §“i„æ“ ‡™Ø–s§Khód¡ø‘™sYBy!a «ÈL€Æâ@ §Pføˆ‹I,“i–©–µyn ±v7¥Q1(&j9ÃyìTj°@ó  ¥ 7 ÖP ©™|'ó °@)œ@¹8›¶iŽ·‰›iÉEý×(õÈ%¹ÿÔ"–·(’3+ïåžð…Åg|Æ'„Ââ ¯À »áiÈ›/¡‹’‰ù“Ú9>ó¨è„6‚ö‘‘” ‚büÊà…«¸Š7@ nÒ û´Obàc™B#4Wr t‹iX–ÙÉz.óp‚Œh€öE53q-Á#-]"7 4£2P EÒUÀ» Œ¦k¾?§‡•Ÿ˜"ô U <™¢j¢çø3ƒ%oǪ"…‹19<F ‘¶P|iR|E Ti!bà-Ìc:ð ÐC¢×)‰'Ú¢^zº§|Ú§¶%+á™[ÑV}6 œ@0°\ÅP|¹ÿ^—@P \ÅPUP âÔ]’ð*°£œ ^¢:ªÙE^~zª¨šª°¥sÛ¹z[µŒ—£ Å}Qq1€¦Vk‰nh…KqYöºóx'í0 ¾à c0&à„€ ˆqЈ¦ä²¦'Ÿ‘¯°²ã‡ Z€¡Ã¥ã|óÃ9 ‘B³™Ps5›&§àµ_«²aë¼Ðà ´P ö*³x=¶@:Ö` Ìcºãؘ:»­®™m8¾7Y€×òdõ;˜ÅXïËS05°’° à8&#ü 0 =x#µ0§ªÉš®9 ˜@À,¶’ „Lã4ÃG`¤;:Û[Á¨ë«û³ +· y)7%˜b?4V½YÂÒ²"¾à4@ˆ À Ã2¢Ÿ§§#ê#9˜&K: Ž ÄC¼¯œÐ' $ÄG¯_øÄÅÿ¾Ž™„ìªBÿ¡›h±Q¶ª¸„Lì+H«SÓð 9z+ðÂ1¿ZK½{÷-´P#@r 9 ¶PÊ¢ Œ@À ¶‘9ÀÃ>B|7p «P|Ë «Y ¥@s ‰¬ÈÅ|ÈSü‘§I(â*#¡gn'é$ãÇ3x¦+Ø4°ŠÁ»rÄ;#Ñ: ×`²?b ;ˆÃ§ ÊðÊ+; ±\•€s€p¦»š­i¼’7 ÈÆû ›&>êŽV¾É·ÞK Xœ‰›cžÎ¬dÑ‚ùrÉÕÜ3B4 ÙÌ®*†ïðÍñ9tU £ÓË/ÅЗ« • ¯ýP u ¶ °Êÿ¹#z—&ôãÄM<½8WÊ¥ð âºÈGÌUœÐlÐTÌ„Ø2c²*@«âSb´ÎL9ò¢É7 yP# üz' 12ò9Kt ¨œÕЯý  ¯P’°*°ÑYÝ…&»\÷À8\Ã<ÈÏÓbä¼›œÔs‹ÈEÍÁVtµä@µ@˜YKòâ~ ú€‘[êu ”fr¬Žà*ê㪮ç{Q…ÕÝ„cZ¡7ça`P> ¹^ìž$Rqð ƒÉ<9nމЅZ@?Ö€ÝcÞ<‘ò…ëÊ|¦:“2Ê6é„A>N}–êä^î¹ê<Žñ -ÄK<óÿžÿ#†86 E´Lïà U‡Õð>> ÿ Ô ôô k;ð>ò4ü <ºŠ›Ð¦Üæ@Âôá´3êôêv.ä²^àoØ*YD(ñ’ð‡ Ô.#¹.‹Ðë¿î&Õl% |íìÒ¾õ·É:¸ŠÛ‹ ÖàîUUô Q«?§;}[çÈŒ;UAñ©›àSõ³ Ì»ï†ÍƒýÎç#‡°¿‹þ&ôÔe¾>f£ãž°0 âÈÚÀéÚ€&9º¼>?æ§k÷ÂëJÿC°n+Moî¬öHŸã®.ø„†_ÍüuÑ¥×|IzË>°:àþ $‡ˆ ¸lðòÍð›àáåM¯9ò9£Ïø*ν>Gÿ/o !ñx_8.îÝ™d³ç_ñêÏìaõb$/ð7`Å/º\ 1î&Ô ¸Fe¨špnÜ(Ekà)k´>-¼!ㆨ†2`½£XÑbÅa5¾kÖlÞ¾iÍÞõ#Y²ä>Š Sšd9ïÝG—#YÎì7æMœ8mæì—rŸËyY{7ÌÚ§‰`߉£u*–¶wÈ£¦ñì§¢¾æýTja,¼2Ëø¤öbF‹¶`Á²Uñê¼iÓdÞŒ)ÒéÍwӰƤ:óçÇšPE/¥‰Ò¢h–¤Që\]T5N«'Ó|ÿݺjÈfÓ:÷ãlZ+W¯jÅ’5‹V-8Q ’5ü –Šß(6¤1PFlß" ÎaØ"â°Ê[ÅyviÈ»1K¦Y=ɘ!ÛZ»%Vú¡ó³ÞO;é¼ÜÊóˆ¿þà{I¥óHBIœähÁæ”ñ6²åQ¬©$¹ÆÀ !…ôòîI>9ƒ*%Á´9E°Å;åò*š°Bk0$$‘\Š#Í2#Í´}L³/¿! ,©HÛ\MÉžä-Ç›˜4Š"’z|¯”°±¢… ë"ܨKŠ ÄæÃM’ûÅ뺡ĴV|ó+ÃÀŽ¢³&ºŠžÌô§>ÛÓ­¥w:CIÊÿÑŒŒlQFuôQH#•tRJ+u´#F1µtÓH5,·F]&f˜bbˆ¡˜S[uu˜J$‘¤’WkU•Õa!“Z{-F’G$XIT “†$UÁ`Xµ×^%VXaÄl_ÂSI=õ4Sp¹wÜGu42µsMb@Í sòO#B°´µ´´¼O8I¤Î:-Âë“¶gE‰Ø߀)šÑš?i,² €27'ycò̧öÒU×ã§@ÖÏc)cƒ2J+”ÞwîZÈÃ÷ 9ñ˜³H›XN¡EœobydgŠ´hhZ ì:ÀnèN#¶N‘®°¶R:_ÿÍøœ³£ŠºèJÞ,š¾Íî[ª)…Êl£%;ätËÃÉ´wzÖ`}alú-»ÄË¡«0a>øRlQs;Á¬“A”‹\(Læ`‘:‡|¼¬&©šyOɰ߯Š*´¼¨$•;3ÙO"E9ÝÎë3½6¸aÔHf×-RÜÁS¢%†/Úð“Â#¢aïb±hCkBÔëáˆ3\Ù$Ž eݲm“ï§—ºþˆ½'Û iòþRW=zðÃß8ö×ÉßHË[(F2.¬¡>‰%" a‰ß}І1óΖ#¼œ¨¨Ç{l J.C%*ÕÄ%(q€H—¤Õ‰l€"ÙÛÌw˜ ^}xZ_ÿFÚÇ%¯ÀïZ’ vfÄð+à 6ø—§Š\. ³ÜÇÄ‚n$ ´Gœâ@ÔEð†Š"Ë2£#Rdv÷²]%r7<ñÎ!{-ppáU„xÆòl´æ‰dðˆ ô*ØŸXL^Øc—€¸·Ÿ Rð\q„טAØiħEJa³Š¸l![Npâ¡‚ îhÚ æ†³ñm,QãJä`¢®Ê]Î(™»j@²¨É„®*•{ %xÊ!ñ&­»`‡Ç¦Â)¯"r£…-Ù•¯h§‘E«ÝÑr˜½)'˜kÊ)$!JNÍ1XÉMI*÷®*iÍ"\ËZk>ÿi“¸-›òIeèXM;†“%¬4Ÿ+†|B CC&Ó„;ã@„`µ»Á7Ö"œbv²ÝƒÐ/JŒÎŒ‡9¶¼oùº$²‰f ÂH1ŒñÍÀDÓ@ŠGà°p¥ÂY¦xmH›ÙL¡#ÚµŠ\YËrŽs¥-í¹;ã#0úÒB"ضs#ë…3O õ'ºÍeIE ÊM£®šÎ“¾´‚¹œ]MçO»‘MŒ¾ìhÔŠ=À>›B_÷€˜€seu­K<ç[g:×*~¡˜ÔòëDs.‡ÐnõHâ¤Ëq®TŽf–[CîfcÚȹÖ+¿˜عØ?ÕM¸mÝmHÖÞud6ºÉý×ÿÓÞ5¾X7Hæô€½( uÜwv¬n0üC¶öµå½IŠX¦mšM{rkøà‡®ý¦¸îrK[Ó_Þ³k=žð §ç\¦ÉÍ\Œ'ÝüævÅi]ë.»îË fw» Cl!H>=’tra¼è07úу^Φ/é‚z¹ ”C›0Ô(ÛŽkf“D.¸Ç]îs§;¹D-¼ç]ï{ç{ßý®wmÕ}\ úá7eøo ¾Œ£}ù½»~n;¯[ãìÆv±Ï•ª£&Xgö£ÿìÇ/)òŸyÓ®–²§ÛÔ*yÏWÃJ­KÔßw<Ò^ú°ÜòPÙÿšfI.eÖ{~â´=×m/s<‹ì8ß=ȯNºÙwÞì³½¹!]ä‡YùLÕ½RDãÓRGýóÔ¯>ùEû¤û:÷ë'ûù“~®E_úò¿×K‹}ÉãžòÝO›h6‹2â3?÷«¿ë²üK>Ó«<ïû>å"ºÐ»?ëC €C¿ÛC@öóŽÔC›s;ãk¹¬=Œ¶Ô¾ä?‰û@ @‹À4@Ò³Àýc¾$Àì<úÛºl¼ô‹·ìA @ÌÁá‹@ |À"<‰ $Á |º#B#,>\A,?;ý›¼l¾ LA"lB.”BLÂ#Û>/3AÆ{Âd9¬Áÿ-„Â`Á1,Aì¿.ÔÂ!dA:ÄÃ<¬ÂåÃÂ+dB;ŒB0¼Ã)ôB7LÁD8?„Á,LC4ÜC5¬CH|Äü:îóÁ?D=CDJ¤ÂB D'üÀDt°LTÂöÅ/äD ÅTdà Å›[DSlÄIDû“ÄZdÅCtCXL±%dD@tD[tEÙ[Å]¼ÅC e\FflFpsFhŒFhü,i¬Fi¤Æj”À5$Fc 5QýÐ Ñ…Q -QõOÑ•Q¥Ñ­ÇEPeÐç¬Q½Q#MÒ]Ò ýQíÑ&uÒ!U½'=R$P…RµR.ÅR&ÒýÒ+ SeÑûÒ¥Òÿí3hS7}S8S9S:­S;½S<ÍS=ÝS>íS?ýS@ TATB-ÔA- 30D™Eõ˜FuT‘yÔs‘ÔITK½Té£T#ÑÔþàÔýðÔOÅÔtÕü UÛ0ÕÖ@ÕT•>’PÕÕpUÑ€U¨ÕYÕJµÕMÅÕ\eUZMŠ^ET]-_Šaå‰b5Ö` Õd™a0feV‘yVhV‘ÖjVlÍVVÝVníVoýVp WqWr-Ws=WtM×m „ 4 4( Ç¢h >×fØv-€@à (€wÍ~ý×~ˆ×y¥@àƒ* X†í‡|5D£‰ÿwXÔ}8Ø~†ð×Ö8€É1€}݇€ýÕ…… €E؉‰ŠU”5ªàX”=ª`Y,)ÙWíØ}5†v]Yy-%3ðÙ’àƒÕ,@ƒ@€… -€ýØ€ž>0«¥wÀZ4€~ÈØapZ° ¤€yà¨íØÖ˜‡€E…Û@€iÛ@8€@ 4 ¼5†”݇@4@[Ñ€É00†~HYc€¤Ý¤·]ÔŒmà»Å[½å[¿%cÈXÁ%\Ã…Š8c8ÝÍÍ[È•ÜX…Ú·\3É]]œÐZcxÛ*€{½‰ÿfèÛÇ-Z†íÚý8°Z4è]Ø×S=€Ì0†yª0ƒÞmf€ €i(€á€¶ÅÛDÅ\’0ê=, z5‰¢ÞpÜwpZà%ƒMŠ»U\’ˆÜp܉|õ?ðí ô ‰w0óÜô-‰õ%‰HÔ¢ „ø_£€œ•×Þßý…X©… `Ø}ñíã%àóÕ° ÆÃ¨^œàƒÆÍ_’@_…€y°ZòU`F ø`vÍ€È[înv`x=î%‰`^¨Pâ#wí]˜Ü¤¸`ªZè•Þ~h†¼Åáð€!ÖÞ&î‡ÿ'F )žÛ€@HÞñÅb£ÀÜx}Ø/ã×3€0ÞX§=ã4~>ávY€-b ¶ Á cÐÞî‡ö¥€=_µ% CVØ8§eäÔ3‰$^4`b;nY“⃠™…ãÇ}XѸà€àƒ®¥Šß]nÃ%`@Få’âÓ}¼u寡Ä}W@6†<^¨àƒ(€Š)³¥äS^áhžfn†x%y€Fmâi[GîXà]Wïá~€±¥Š0_Û0æ|eØq¶äðÝZ=€DÜP–b­e^)–ßոࢥæüÕ^ ÖåD½g6%à~Æ^ÿ5Þ žá¾a¡ iöÛˆþf›èßgvç’™åèó¥&µ}Vš b9ÖdˆgÔ ¸=Ýþ˜a¦Þ>n f.e«¥bÆ…âÕØé¯5™6š¶IFaÆÕf0^ a&€x6ÁçFF .‰J.f²c'Þ`§ef§Î`ÑhùÕ誎]¨ˆ^>>ë§æjŒæ‰8Ýxff˜†ä¦~ꛨk˜æC6 cxÓ}åƒIžÚ\ÝÄ]ì‹5€¹.ë~VÃ>Ö@xÖyHaÇíCÆÙ%yØ7}×i àΡj“°åV=f5Ælã5ØÎåšxØ} ^ÓíP›7ý××NmÿXN 4xÓixÓfÝí›øm7=’ÈVWå^nænnç~nèŽnéžnê®në¾nìÎníÞnîînïþnðoñoò.oó>oôNor5äpeõ~oøŽïân\öbù¾oüNïÂÝìðb§vW¿-e>Èl6؃Öí+ÚV¥âweïipkNÔxmb{e×Îo Ïðù–×ã•Þ€hcó ØkÞ´ýð nÜÂb°Zñ¹E–fÞeÜ@ñ@˜Ûf ÿq /\2&qéÕa’ØaÁUg4·p!n>€ÂeØþŽä­Ýa¶NÜNvã6&jðWÞr1óœØïÿúîÚÞíoÁÍ`h.qu.q8¿bû-ܹMsé%€gÜÄa8ùuc2tA?Xú¦ä"—`ÁÅ^VÞY4h†þ†æ¼%æa˜ò°õ`Î^°e\Fñ¾ âŸ(ä¹ÝìAõ /t5g\!^Z#îÝ6Ndþð€I/qÏ[T'ñwåe°íïwmqçƒP'uaÇðÁ–‰¬Å×mƒuÛÉFvpÜ)'àÎ0lÕ6ƒ7™0dÈ® lvoÿvž(\wr/÷¢à¸ps_wvowwwxwyŸwz¯w{¿w|Ïw}ßw~ïwÿw€xx‚/xƒ?x„Ox…_x†ox‡xÿˆx‰ŸxНx‹¿xŒÏxßxŽïxÿxy¥XI’/y“?y”Oy•7Ihy—y˜y—/„oͺUQØLS/­ËÕyŸÿyš÷V›ŸÑ3S'Ó¢¿‰Ÿ_z˜únz--Ò)UR Sš`z¬G§çV¨GS ÅN«ßùm¬gú­ßÖ®—Rœçù*ÝҶlj²_ú³gÕ´'R…|úšú¼ï¼¸ú½çú¿GûÀ§ûÁ7¾÷ù¹Ÿ?½_|Àg|Áw|‰:|™Oü»o|¼¿|ÌüÌ|Éoú¯|Ë×üÐ'|È7üÎyÊDÑ_}Å/}Ðg}‘9}Ôÿ|Õ‡ýÚ'ýÑÇýÿ¹’ý™§}BÔ}àþ×~áý–OýßþÖÏýå·ýÛ}ãGþ¡tþä~å·~ìOã×zߟ~ê_{¶Ÿz±·í—~ðOú.=z¤{·òïþóGÿñ—zõQøö7ú, ûõÏÿˆ~,ØošÁ„ 2ˆ°!Ĉ J¬‘¢ÅŒ 1jì(£ÇŽ C62Ä]È‘$+ª\yѥǖ0Êœ¹Ñ¦Åš8 êœieÌ,…FìIÔèN¤I‰¾dÚP)ÉŸ)>¥JÓêU¬¡Úä ÓëW­ý¤ËÓ,A°.Õ’dÛ­C¸qµ’)÷ã]·Såê- ·¯]º'÷òÍ{ÿ÷ áĆXWc㌑‡*F;™òâÊTKf¬Ùì增 fÊ9çè̤U³Úêi̭ņ½z¶ÖÚM±Æ–¨»êmË¥sÇú›`oÛÁi¿v]œêñ¬¼ûÅm¼9óçN£ß 4ðrâÚ™rŸ8ž¼Øä»­[-¿õüQøBË«þº|œîÏÞÇ?ý;d؉×túÇÞNõ1´_Zùéç`WÎÄ ang`{(!‡ku¸…ˆ}X¡pZÉp"Š)ª¸"‹-ºø"Œ1Ê8#5Úx#Ž9ê¸#=úøcŽø $‘Ey$’I*¹$“Mâ(¤@NJ9%•UZy%–RBÙO–]zÿù%˜aŠIä–cšy&šiªéd™kºù&œqÊ)C›sÚy'žy*Y§ž}úù' -ò(¡…úæ ‡*º(£W&Ú(¤‘J 䣓Zz)¦/Vš)§Nº©§¡ŠZ(¨£šzꥢº*«iªÚ*¬±vùª¬µÚÚä–ŽX]‰^Hà†X™1,±Å{,²É*»,³Í:û,´ÑJ;-µÕZ{-¶Ùj»m¶.™qØ·r…+î]ãÂe®Yè¦{˜FêŠå®°à–+/¹ó²k¼ñÖ»/ZùZå¯S|/¾ôžkp¿¯k/Á sØÃrE,ñ]Ãe±YgÜ0Ç{ü1È!‹<2É%›|2Êÿ0ðοÐÌAÀ‡U-ˆ@h¸<Vó Ð02óL•p€@À´U`Ð-@³Sh(­ô4ûØ,0ˆ2£!Õ0ãTôÍ!µ À>ý @  €´Æ À>˜ºMh0uËŒlï‚í”ãlÆÆ 5S”7ãò;€›!U|˜q€¼cÆDNÕf #oÇ=·Mó0ÎG`ñqÛý,ÝÏâeÎûðº@€íÑ0á ðNÚ[åsûB€@MÔ<Lƒõ[N•ÍLó½Ö•øØÀÜ2UÐ\€ÖLÿoÓ0Øû>¶Góôžv?€5§xm×ë昂Ì­r €ð„¢ºyà-}ûsŠ1@`q0³]ü8>(O ;ËÙÜü×¶fÐŽ)¥Àà(@›4oûh]HTØš)¸+À<Ø4${€›û7§ Í_Ò’‡3¦¼ƒgy;âAç¸õƒ(áaöC‡ÍÐQŒ‡†i\އ81@⸼„èðßZ\Û|(€ˆÕЄü# ÂE¼´M#T‘Y°3ýiÏ)8†>·µ(¹ë‡å,(€ßôñS:ˆ¥Ý±zµãCÛÙ¿ÞeÐ šS‚ p¹à†ÊœSÞH4#z»œV@·8Z.QD¬Þ“I¹yÑ ï@Ò*I”(6­‰\dÊ∹V¾'¶ ¤=²q²–T $±Ê¨41†nd#Vø7¥‡„0›Öþ˜5ðÏK‹ Qa±¤MÑ)ï ÿÊ™Gü- f!ù,Q‡|1‡###***777EEEKKKVVViiiwwwMx¨nˆ®iвx‡©p±s‘²s“¸|–·z—¹}š»“SR™jj¤]\©ee®l|¯ssµhv¾szÚ[]×]`Î~AÚlLÝgUÙrLÖwVÆikÅltÂpyÅ{ÍrvÌszÚghÐkqÝznÒtuÒtyÜttÚxwÛ{{ãWVègKäc[ërIévUägfåsjäxxšuŒœ|’®y‰¦}¶{ˆÀŠÔ~ƒ¯v³n̈FÏŠỈSΑXчEÚ‘NÍ’eÈ›q׃pÐ’i×–xΤ}Þ¥mÝ¥rܪyìˆWç˜LåšRâŸ^èšUïœYðKêcä€~ì“hñ [à¡fì¢zï¬qì¯yð¤bð¦ið©mð¬p‡‡‡ŒŒ”–––ˆŒ¨Š”¢„–´‚½Š™¶’‰£”™©š›³… ¾ž¦¼¥ˆ‡¡–¤˜˜¶‡»•…³¬ ®Ÿ°¹“¡§§§£©½ª­´¨³¿¸ªª´°®¶¶¶‰£À”«Äš®Åœ±Ç±È¢µÊ®½Í°¾Ï±¿Ð»ÇÔLj‰ÆŒ”Ä™™×‡‡ÖŒÝ“ŠÔ––Ö¤‘Ô´•̪ªÃ­¸Î»©Ã³³Ì±±È¿·Ê¼½Õ¥¥Õ¹£Ù¶·ä€â‡ˆä‰…䊊삂퉉å鞄䒓嗘圜풒ðŸŸåŸ æ ˜îµƒí·‰í¹Œì¹å££ä©©çµ§å²±å¸·å¼¼ì½½ñ££ò¬¬ó³³ó»»È¿ÀØ¿ÃìÁêÄ£êÆ«êÉ­êÍ´éϹéлñÀ¿ÆÆÆÃÂÍÈÂÂËËËÂËÖÅÎØËÒÚÚÊÊÐÎÕÕÕÕÓÖÚÖÙÞÛÕ֨רßÛ×ÜÜÜÜÞáÞàâåÄÄåÇÈåÊÊéÊÊåÏÐç×ÈçÚÎèÙËåÓÔåרçÞ×åÜÜëÛÛôÃÃ÷ÈÇôËÊøÎÍøÐÏñÓÓòÜÜøÓÒúרøÚÚåßàåàÜäääççèìááèçèëëëïïðòããñëëûäåüììóòóýóóþþþÿÿ Hpൂ*Lxpá¼y¯õxoÞD… ö›w-Z´k׿y iQ Hˆÿ6JäX’ãµ{ cÌ(á¾s8qº+³¦O„= ¥8t(Í¢2"©t©Ó¦NB5‰ò_Ç‹/2”yÏ#Å«Y)FC©ReËAÿ=|(j¿·pã¾Å 7ݱ|q-ÊÝË·¯\½~ Þ8øiÔ¤‡'Ž:uqãŠ÷úÝycÕ­2OJþ˜òá[Í*W‚|8ZëÚµ?›Z>ͺÜ'Qkg}ÒvëÛ¸sß¶­»·ï‡¼{k5ºcqãÇ‘6N¼ü4ɵåúìè1V£]V'Iû½ï.±£ÿ­©úwªO´ÊiûôI\íßðqOÞüÜÑS'/¸üpÿýü8SMßõT y?UT’IÕ5YƒGZxÔ5H’bñ£ N¨¸§7ì…h k÷Õç[‰&ö†"kùM' @ÿö¢‹3ƨœS]½ô H‰ÔQFUR5#Q7dL ä*¤àôZ9½‰“Š(¨à²[Šñ­ˆå•¾µˆà‹6Þ8ã—`Öè”H~ÔD!yÕLkm×ZG~‡Ù?½ÂKJ´ ·¥}ž¨ ].&qfމ¡€‡¶uf4iòØæHmçCRú#j ´ )ð¤´^*j9¨©§þæå¢û5ꨢI&ÿʨP–Á”ãw?VXDB¾^‘ Òg¥4Pžç¤d‹Ÿ[¢Zê *ªj¨¬³Âº«ú(™D>)ˆšH»ª•)…#eº+e&mÚSFüBŠ:é°ç!–Î6 ­nήkµeZ‹\¿É)è`MžuÆk•Žiw<š»®—†dŒÁ£Ê9LjB›oÜÜ¢ ”$Þ+ŸÈ#*&¿(û; µ‹YÖIúZ:[ ±uЩY‘Ávtédã…u?û´3onåœÇž(Þ„Lò{OC-Ü´§¬2Å,'&´Ì M¼-TkIŠ]¹:{ôÝX‰RÁ4YŒ±Æ½õyJ-²‰2pQ¯U¯½&ÿ…-™V_ý7à‹m}df¿¾¤¦ 7¼]ƒgW%d4³ëî:ñ¶§›(Ÿ€|7RG½7½Òž àà¬^mÕ˜¨ä2Ì« B/«•+ÙriA¬+Pž½(Ëìm®Áölã7 Ë3?µé­²®z§U¤ ¾ |8PöZ’Y‡Kgd¹:n.I‘ ×Êÿ|j? ’z›3‡øÐBzëi®w󣧘/Õ;Në#=þ4{™L‹Â!nõƒgEÒZе#Ž@ÐBŠûWžö¤ÙÐâ6Ì€Ð@à€=# ÝÓúg¢ÿA/9ü×ôVÇ2ÍMF<©“‘Œô²=Hg¹ÒMgÿÆV.‰ýkIM:Æ“Xƒ 8HÍàÃPP%.å…õq¡ß²Ãú®z ™™uH¶üð-Ý1ƒz„)–üCA0±LùFž:E‡&þØÐ9Rq·µ4CƒXË&0yXQtÍsžnx§ÓЋ1l¤U¢!FFJ!f´ ±Bâ³5²q,!IÈ‘"­%-åÁ3$`A [Ã0TH2,ÒG‹ˆ `q"ùÂ.–q,ý GÉh=Ë%¼Š¸,¤¦´ÌD<ÛY¦^ †5×åk˜ „#Är [(Æþ–gË,•n‹Õ‹ži˜N]Yò’˜$M׆ÁLqËšj2Ÿ…â¸ÿ=vd5-Ra‹dˆPiBúà clÁ ã¼b"qù*]:fþt$P¨IL‚thÙycw"Ó õS¤rÒ•=‘TÍž&KƒÆ!Q†!A„Ì€¥!¹Â‰ž3—M§àTÄ‘ô4/3b¹y‘ЈgS ›[ª¾µ”ƒs¶ÐÆyf1B¤áO@ÄÜ`1D‘üûiE‹ÊVÕñ’zÉÙ¹f;n‘‹“u5K~¬J™ S»û¢K¿µ°gƒüÂÆ"T!gíiZûTu u—Oͬf7ËÙÎzö³œÅ góY!"6°´¦=_TWÛÙŠ ãµ™x$^« ÿÀx€&¸ #¡ ¯ ®p‡KÜâ÷¸ÈM®r‹+,Ð:÷¹Ð®t§ûT]Ö)¯ãèâôâ­i*N;L­”î¢ÁÒ€‹Aû;«~"«[íªÁ @œÁ Ø($0Æ@`ìT²äTk¶,ÊŒ¾u½…+ÉJœ‰€òJ<=QÉÃ<Ú‘ 2L¥Sͨx×¢ ´à-”¦áă2£^§ú_‘•>p[} I¢&x" î–Ä.ƒä3Âhô•JË–©‹¤ò!Í@v06äwÙ@!ጇã¡ß¸DŠ! `‰Rv­–%°¢,Ø–yvC¹Õƒ",’ÏXÄÿ9¾ò;d!çg5Ø|b3ÁJݼb ưC_ÖYÆaž±ÊÈLÕŸ„Á±KJ„$^ô!³:öà!î>BDZw•o(-Ô@ÈÜÄb EÆ•cQh/?b&à:­á–)p)hˤ9RéªpdG²Ù~Ô× }º (ÑÔ b€3P'1ZMmܼÁ4Ž5¸mù°“±Ž%g‘\ôŽÃ‚'w¤ÃPºF H KÔèÍ•·°b.w¹Ú·¹v™³­hÑ[’IŸ$‡²L`~g3¤ñÎ×röžqÒa Ý*’ø‰S̃0è#@‚OøÃÿ 8NãÂ;P/þMŒ­[ð‹ÎÚÆ : ¤ÇîNfruÖ]5(S Œ ‹-è ….ü‘S¼D’8!qX™¿4DK䛡_]Y‚'Ú­8¯‰Ë\ÏÃŒ4tŠ ¸ê(¤áø ÝÞS¯ûR?÷Â÷\µúCì®U¼?k²\³×¿è°seAtøRØ]–í%•NlaIS9ñ7©vá)Ò‘’[ø='´Œ×R؇Tt€_dG¹Ýmk)Œ?i£xŽp­”G¦ºR‚¶‡ Ýò8È;Üånöll6°R¨÷ûÝô&׺«UßË]Þà×ïšgÈרœ×AšxÿÃ?BvÐî•#È98žBÙ¼Æø£ß;VûžwÔoú°®yoÞú…ø|á2‘pZ+Ï16C23~Ò0¸R½çðAó K¤ 8€´Ð4ÑÂaX' ãðw÷‡«g}ý7fÙ(C¢s·WÁGÇZ³CMÀ”yÇUëÁUã ÉwBÉS2k!PÕGþãS‡Fs_GxØw‚8$vÛ§sâSJ$ÙáÞ‚ãuqœÄî@ «P4œƒ ˆ ó0 8`ïõÑÀ UvHÿ6‡W‚6w]®—‚²Ö-ˆ7ÅddÖ1tv$Z8IœÁ…¾Òš·ýЃóÿ€ 8° 08`%©À;°<ðOYµ¤„‡hNx‡3ôzx˜CMåF± GÁ5膱W†x3=’ˆ‹(*~× 1"` ó 0'PByà4Óp,b‡ûwŠ(…ÌhMÓtJU8pá^ÖÃ…ÑUl±bH†Ÿ€ ×@F0 ¡!À¶ Ú` (°Ð@K.Šø×u¬çŒz¸‡úÇö‚ ¢a 5,)ñpéâ0=’ƒÿ y“©0 F€´p 8°‹8Ð$°@ž@÷s„ŠL8ŠÍXŠûþè2èLG1^tôÛ£{ø€áðÐ 'ÿô J`DÀ8"0 %tbÓÐ$ð  - Ù"I8$év’Õ§SeÇWäÅ#Ó‹¾våþ€“ðå ‘ F°ó $°n0$ð}´”¹A—u)`#™Ú¦QØ„ÙS{ÖRå3tZ)^jW' b=8ð0 ½° 6@Ú°‹”ùó0PB$ÐCÈSŸ˜z$8•%ÙRIšP™s©˜þD·Ãf0ˆ¡yÀÔú„¼° 1€â  ½¸JpÊ·w¶ (‡¡9‚Ö†’}é—OÈ—¨9Xn¶*4qƒt$y“46C>Øñ žà ùÐ 6ÿ¢p 1`´  §0œÍw/â0 T ö8šù眤8=¦¸—–wJûÂc9›Ä…iç#Á œð øÀ8pžk˜|ʧ|H(á ¯ ä("/À|ʈTÌù¡ ªŸõù”®cý9~Dö0£! (z @ˆ ø æ‰jØ‹½h¥Nà-vÁ·qðrúÓ¡³ÍI¢Ð¢øh‚éBlc!MPå k’Ët¸`’`âi¸Pã9ãçò0[ Æðg¬–×° 0“íuz’0ÊY‡Jê¤Oúœ"*xz¹&—^êfnYJÀb6ýÀ žÿ`¼`\µ¥lÈÉ÷Æ „ö`ºq Èð`tÊ9 óŸ:ɸœ{ºª¬jÔõª°«²ªYròŸ¢5læò õÐ •ðZœ0/€ Ê  Éç Éu Rà´5S  Æ{ðªÈÂ% /ðdÊ Ëõ­àúZÍ5«äZ®æÚYy©—ö™šé²D¢OlÄ]‡sèÆÔ` îörÜ|ðÅž½‘¦kÚ¦[ ¨ ³p4ñ©0­¢jU©à Ê‡§ŸUsxé”꺮Ï#ª—,ÁIÖ)IåäcRåp w  7@¦É—x@e¾±£<9ÿ)/Ρ° ªY(ˆ ʰ—¡"b±Kˆ±Pú§Lʧ¢¨—=d«h3²²ƒa÷ Jç2zQ°VPdš;`b*2¡¯ Y0å°,òC:»³ ;Žhì‘4ïUÜÀ9›E›:»´JÛ´If@XãU =žL%õÕÑ> ’µ0X@ ÄQ`m@Í€hEŽ}wã©Òº°n; ’£È`vszÈ#‚÷¨«±§Ù±³ë±U¡nT LózJjÄ#÷ yœ×¦0®Ð^¡0 y7Ð øBz·w¯‘³¥kº ;Nw ’ á8¤ÿúN‡ª¸0 ³`%æt´|{»}[xMj»¤H3ÿ »µúfÃi‡è3ÃG îÖ²µ¾3  À60"Î ½w)Ÿ`œNGl{½ØË³× N÷Ï×'¢0PKä~ìQ!»€{Ÿ´û¾ð[šÙ›1¥)Å•6)cѸÿ°~ b¹2pvЀœë¹¸a·™p7w"|d½;˰ †¶P óB·K:¸ðÚ  eM¹¾"ì·¦¹¤ì»+Ø’h.fZú¬Ð ¼p §2@Z hаpb·aÅŸðp³wÚp ¨Jœ’ÀÒJ×@@•ÿ@’€gûHØ1sß kˆ’_¹±èám9ZÕ›ïÚ€gÿóé]óËþâjÞâÅÑ…ZÑ ê0k±¥6JÙºQo ŸñtPp0 ™ùèŸmpP$.™Ö}B"Pkè²y‡ 7%¡ ó%q ¯C,µÍ0¾’Íîì^ló†r@¡ 6À j<è øž† '† !ÔJó R‡Ù@ÕÆù Øà Ù4 ¯‹u¾÷y¬ð@þî]=<žpøpß8¤ö9ï`¢Þ—þöb?‚'Ê×ΙXÅ ( /‹ñGÿÙ0k°}Ï #_ò'¿Ù§qUñ „½XÜ  y š·ARâÚ·¼™îìá—ö§ú›^úÿQ sjt<ý` lXzåÎá¸q °þ ðíñ‘MO&ñU¦îÉ7 ÈPÖì ð¾ 2žŸlÄÀ1ÏàA„‘%d8ï^¿{ þ£X±â½k׿EËxÏâGŠ=‚$ùïZI”)AžLÙÏaʼn*eRd9ӦŚ7mæÔ)“gO’תѼ­Ÿ*çþõ³eC·O©~úÔðà¬:rô˜eµá! p ’°&›A\§œÎÛ$ʆO8pP¥JK` Zóîôª°¯A‰5¢¼çcá‘%ö›ù(JÇ]&ŽùøcdË—3«Ä¼Ù¤gçõ+z²— ðØÝ°A«œ¨O¶´¥úÿÔÕ*®O¢´U‚ëïAld%„u†ðuìGoO5µ‘J›-ºŒaûï¿1F›‡Òåh£ ;„X9egÏèÿìW>qzÐãíYøåùù8£í7J)/^ÖšGÞš«¯fùD›yѦ¶¾Ê±%Z¼™§™E˜Á†¡r Á·`;¥®»b0±ªßL—Yfñ 0Œ2l<ÑÞ í‘Ø# ¢‡>ËO3•¾;(?õ2+ò±#)Úˆ¿îäûq½¢8bŒ¢^Ò9'/ƒ4ð­RA!´jØèb°/qfIq h†·âFêLäë7ì R.Û"’qFï0š¥yÂ+ôšÿA/B£'q²I¤“JR’¼‡#?£±ÑÑ#ͼ¥:Înh³Ž!Ütãí“RÐ9èDé²/I¢â¦©l8½IÅÄM” σRÕF›Þ s¨¨&9“i#é»ök´"J#½–¦m“Üh¤K›]éɘ¢MTH¨†Õ E/©zAL«¨:ˆ6n~k‹*^ ¢ê-\mûÕ[fµ*Ï/³„0°BÅu2¥„Cô£Â¦t)Û›(nìOŒ3ÖxcŽ;öøc;ÞïÏ‘C6™ã’3âHÆÂq9“qY`PÆeœsF¦I$©Dg k¾™G^Èh¤•‘äIÞZZ’fàd ÿIvNÁÄlFiI^øyç$YfY•W>yã”S&yí³ÛvûãÆ¶õ±QK1ÝnSlŸô4¼„u6xûÊ3A[cx`„Š-•·Êùµº|E1Uðbs;6Ù{ði±¸UòÔ¾iÙûÎâÎ寝[ÔoZr?…üñ î õ ©’5ÅÁÇ,“ª3ò†–T‡–G6È›·’·eÂ: ² µ†$LE õ,5ÛúÁ!‹ì“}n†úþû#=¤ˆ f´{ÀLç6uºëkÿt½×ï;¡áƒ?ܫܭ’¾BÑ%.sy×íæá¸O”ej^®¨#Š„çï:Ó,®‡ƒì‘/}ØâOÿ8%HªG¤Re`'žõt°uO:Ÿ³®ÕÂ…Å/t)¢ ýR1`™˜\B^õ Å)3Ë[°¤§¨h£V²2²X…ˆ"q 3÷<|»Žîf:ÆP[/”›cJhÄôóHW–Þ¢"y%D^Òù-¨“›YÀ%q(B½ 6 /#LTéó˜ÉÀ¤;åŠØ·BÂ0–~VœdEθFƒ¨mÐÇ=–ƒŽPbÀšÁ©p©A âÆÔAEI|Ÿ ’H%-²Iær$ù )ÉJ)˜Âœ!&¢IþM‡¶¨Dòà >`¶`Íçÿñ*%æ¦MLÖø¤HA~’çö6‘.f oÄ$c;mùNK3¿ÁE*BƒSôŽvŒ‹ Ö¤Êyˆƒ6Ëa ‰ š¼·èïw»"à‚¬g ì}ç=QÚìŽÂÒÝòOÍ:á”V÷K`ºsœ#%)E.‰IdZÏ ¹jÕAòg \蟢B—Ǹ•âÀ.r¡ Oˆ I´é¡ØcÏ¥FV‘jªŠ„_F{B‰ËO›_$‡CŽk˜']cJqcƒ|" É*CFÅC¹eqo(°f!¬Q•Š_¥ªMž¸ùD‘¸’¥)Ì~–J’Ϫ$¤Ã"çÄé>­ŠtŒð\¬däyÌÿ¾Ìb¬6(ǃøe•6~’K3HlÁ+Û¼œÔ† nJe\Å¡€œŽ5H¿ÒD©ySIe"æËàr= Ëê¤BZÒùôö¯³{¬Š4ÙÊz¨¥ÉìºDIÙÎÚ ¦ÕÑ“œ¢âF¤’`«}%yz’Øšd¶µdª¢Æ7Ü™èT­Ôoû^ø÷±^HX' Ýèá°™Ró(û¸`Å ÊäàfaWË9Ñ7yx£^ò–$°+L,PÊyÚ"öŠe'pƒ»£âfò/\©tûÒ¡ŽcÈCè‹òe'ƒ p.<õT‹//F¥âR’š˜¾®Ó"‹) C„Tÿx)9o|?Ìá'C™«hL)ZR! ”b¿^ñf…@-#$rQW@'~¢^áä<Α›8G }ÌmCÅÞ ÛZ·  ®ÁçäP;vÔˆnˆ©mH!ƒ•iõ«c­ÔYßy&º.TH©mé^»·ÃÀÎv1çKìDƒ‰Îi´¨p8›HOG•Þ̦3íNwC‘ׄfl”ë=e»«4d‘‹þB&w­vŸÿpÖ‰AógûIX$L®û‚ínÏÛHƒ¦·°‹«o*§hOT9Uô&Ô†¼T:ÁH50#ÿ:Š‚áHU]hI†»Ï×*·7·+Ïa‹Û/¹ër÷—&ÏðSò6Uý”NãVîwÑ·_|Óãùþ+ǿߪGÞµÓ©ELCœæKŸ¹¯Í®mù–Zç;,w¯þó¾h}\´×s öÑt}°Kgº‡#î÷¿ãüâk1Ïœ,bý&Ô Ü{‚ÄÄQ:R:ßkó‰K<ó¢<áI½ñ·ÃÝ+ŽWTô†#¦ªå€îs†-aÌ[æì…ÎùÚMÝoŸc]ñ:ÿÈÃòóîÜyá1O»’-_vŠoþÞ†žºÔ _ø¸#‰\Ë2lÁÉS}Øóùš—>í;oûçzôÝŸO"O"Ø ax½Ýz[ûÝÿ~øÇ¿m-ÛZýíüç_ÿû¿?Ùäÿ6³‰’¶ @µù?qªØ#?À»9“b¾çk>ç۽Ǜ>ÒÀ¾XË; œ¹ÊkºÀ{:Œ:ÜyÀðS4ÒC/ÏÉ3a >DJ2D¬íã@ü@ô¼Ì:¼ÀƒŸÃØŒÖË>²C;»ë@¬=ƒÀ”Àö"¹ëC¿± BB!tÂÁÄ?D†³>óê»ä¾ô@)Ü 3šA+¤A,܉ž°-¢óÁÿ0„Â(|ì¹$Bq3Â*?ßR‡.C {ÁT>à¢Âë¸B3Œ¾<´¾Ü»äsÃ8„C1D;B¬¡2¬D«(ÁË›64>?|ÂFüB9Âï+Â\Ég¼ÈxD´yìŇ<Å—tIU¤È‚DH|lŸüI  ÊŸÌ;¡,J£ J¢Ó%Ô@eT4EÒF%ÔH•TJ}Ô?mÓD-TGµTCeGD…TNUÔ.U3U2ÝÔEEU.-ÕKÔJMÕW…U-uÕYUU*¥S?ÍUZ]ÕCÕQµÕLÕÔOÕÕ]eSaVLÔI…Ob]V^õÔZuV^½/VVíT°ÄV5-Ö`•VmÖPµÖ^ÖpWjµQ u]WvmWw}WxWyWz­W{½W|ÍW}ÝW~íWýW€ XXu 2›ƒ½–„m”…eØmiØ؈}XÿŠ­Øh”ØüÀØøÐXÐàØŽµØ'ñXÏÙÌ YË0Ù“]Ç@ÙÇ`ÙžpÙtEXØ™ÍØšµÙu„Ù˜UØ›µ‰Ÿ5X™åY¢-Z[D¹AÚkQÚFaڦݧý‘¨•Z¨­Z«UY¬ÍZ­ÝZ®íZ¯ýZ° [±[²-ÛÇ„0€3 ˆ38ØÊ”ˆ ˆ=pÛh ´=€@ 8€µõŒ¼ÝÛhÛ·ÝŒ@Øšè[Äý‡ºEi#”„í‡0Çýd8½µŒx¸Û~èÛ =Ü@HØÆ}\ň\ÒEƸÜÌ}<ÒMÆ8ݥݖÅÜ»]†´5]·•6ÿ2À݊؃¿¥]À€3„8\ÐÝ~€XØ2Ϙ‡é=ƒø‡@dH^ á€{؃åÅ\˸‡€„2¸†ï „  80Ѝße@€è‡8ƒ3 ßž@€f!X†ðße€¿½ õe_ŠèÞh€=˜ßú½ßüÝ_X†î`&` €XÖ`ûu`~ÙX†õ`2@8F 2xáõ¥ ˜Û&‰hÐßþ]ÄÅ^ÐH°Þ3˜Û€»-Ù(”e¸` 2`bˈ†h¸†(bHßú=Øh°Þ!F€ÿXŠ€Û•M[Š8ž‡ä-Š0Á½ úE`Šx``à莺­1^5f4Vc6þ]!>€ƒýÝ@ ã°ãž€ÙuÛ4`9äæÕ @Ü~€ Þ_8d^§N^ &€QnàKÞޔ؃îcŠXcÃ%€{°^HØ×µ €å@[Ï €û•å e^>Ø@â3H€/¦xbxæî1µebˆ`øã¥xa8¦bƈûŠ\þ‡hdîâiþ‡j lf „%¦ˆn~Œ nÛÅ%d¨bu>ç§B‚žßwŽgï0èH€„¹MhÿB1Ø[e¦äÌà@X†.Nç€ãÍè[5Þƒèf,>Ûp™ä½hLüˆtžçhNhÔ‰yÜ`Ý|nàÅí pîÛk(€=ÀÞrâžHçuö4–iybž‡úÍéSæ½^Û„^b Øƒ8¸‡ßþç;Ój®¶êhhÛyhÀ €…ækpåÜÂ\èᜀó9ä&þ^ÆpèÍ€êºEÜ·i26c¿M€ƒà–f!Îá'~ä ¾ãoîŽßýê>îbÆÝä¢>ØÀ^Y4>ì-^êYîŽ{Çæ^Èž àêýõì{°ì@Ö óeÚ`ÝÕVãóŠmŠp]cŽfÿÏ. øuèö5áømB¾b‚¶ «ŽæèÕf¶æÇXní]á&âÎ Ve¾«&ƒÀìkfjph2`‡Æh çŠé§_tNXUÖêïo<b(€g>óŽa’ëa‡Þƒîþî†&í=m™8vh«îù®o”Ppஈþ‡·ïŠXv½Û=ðhçýÛþÝ\Ð0`—\@pye¥íð ¥p¥½‡Qf`“–]$Y\v]Ûk@c‹)o‹jЏâî‰@xq$\ˆ¦ñIYÜ~¸bÏñ ”{`×½=ò)òûe×k`W¤¥r”8vÅ#GãÄ6[2/sÿ3?s4Os5_s6os7s8s9Ÿs:¯s;¿s<Ïs=ßs>ïs?ÿs@ô>‡h–ÈiA?tDOôÁ]à7hEtH×ó–ñh2Ðæ¿M€hÞOmÁì)ïæÞýqL7éŒHÄ5ìÁÅ\Ä•[´eãHuYg[pÛ$®â¨g{Nãúžë[Wßzîõe`d€èÍuØuø=XæêV`€{†__ŸéYÏvY`vîõ*öeŠøe¶kxTçôcŽXÖôéýè÷&^ã>à”¾g{¦îZ‡ß“Öv~ïwZ§tîáFàMÖj_·k_OønÖãÖ÷/€ÿeWà¾å„;¾gÏø~ŸôJà-¾éÚ=ƒh¨t­¶_§F†FܹÖâ?æ•õõ ¶ør‡ˆ‡†_×xuŽw÷%ïvã]f&¶gŠå\€^Wy_ïuûUàcúuÞÞJ_[cïõ=ÀùÏzH×ð&¡^ºe\õUñ¯G^y1/û&ƒµ 2hˆ>q“x{­¯{»O‰Æö»ß{¾¿‰=0Xï{Á|Â/|Ã?|ÄO|Å_|Æo|Ç|È|ÉŸ|ʯ|Ë¿|ÌÏ|Íß|Îï|Ïÿ|Ð}Ñ}Ò/}Ó?}ÔO}Õ_}Öo}×}Ø}ÙŸ}Ú¯}Û¿}Üç ÿÖÜ}Þï}ßÿ}à~ÖTâ/~ã?þã×À[íÔSýÖg•ÕV5V@~ê§~åÿÕ3WeÝ~íïþdµŒêÿâ¿þk­ÖnåþïÇUõþñ'ÿqþó÷~nEVöÇþüpÿð‡h•ÿ<ˆ,XðšÁ„ .DÈð!ă'BtHñ¢A‹7þSàñ#È!5r¼H²äÄ“(+®Ä¨²eC˜_ÊÌX3"Í›Eòä™S翟:…Þ$ZÓ¨L¤0•¶dºÒ)ÊžR?B-Y•ãÕY]e¸Õdטa~¥8ujÙ”cÉ®µÙ–`ZœoáΗeÝŽg{Þ}Ø×kÞ ÿŠ­KÿXáa¶y÷òì8ob·†O†˜±OÊs#K´ì¹2èÍ—1Ôü–3ÝÏ¢UŸ6Ý–tiÖmQÛu½–¶@Ü‚e¯… R7pÛcƒó.<¬oªÇ»ݺxØæs“{”þÜùìå@­g_LûmíCÅ%4°UóIÕ/eßÔýSôXá£o:súéåsÅ¿]ÿ|þ'`yüEày®§`{ ¾gàLj%aØ…ç`|ª…a}há} F§á†"æÇá~&þ‡b€$úåa„,N(c…«©èân7¨c‚<.ècƒ8f#‘×Ù&ÉŸ}#Òøá‘.Ù¡Cy%’Q†¨¥“S¢ÿ×ä‰^¶Èe˜d®X¥bbΨfXJiæ€hJçŽtöhçx)gjlBéæ–€v©§’|ÖödŒ~&Jh†Š–hhn0>*h™”žÉ(•FŠè¤YZ'¦)†*©\œ–êè©£®©*ªxµú¢©®²ú§§†‚yé§uæzç®y¾°Á ;,±Å{,²É*»,³Í:û,´ÑJ;-µÕZ{-¶Ùj»-·Ýzû-¸áŠ;.¹åš{.ºéª».»íºû.¼ñÊ;/½õÚ{/¾ùê»/¿ýúû/À <0Á|0 +¼0à ;ü0ÄK<1Å[|1Æk¼1Ç{ü1È!‹<2É%›|2Ê)«ÿ¼2Ë-»ü2Ì1ËL¯¨½îis¡87:ë¢o‘ñ3ÐA =4ÑE}4ÒI+½4ÓM;ý4ÔQK=5ÕU[}5Ö?—DF`\çåu]`Ï%¶Ï]›ýµ¦‘ÝÖÚkµ=ÖÛaÅÝÕÜ@Õ­ÓÝ7åMâÞ2õ Óß-¾Òà(¾õÙa§-Ðá5¾ÑãE~ÑäU>ÑåeÑæa!Øçy…^×ès•þÖém¥¾Öêcµ¾8ì±Ë>;íµÛ~;î¹ëNâ2gtøÞÕÈ?À /÷D“|ðÇå<ôËw•ø®¼ô:b<òÜŸ}ö׈O¼ñowóóTß=Fì‘[ðóÿÿ³GûõCÆTäy/È8ú@ð&g2@€,p€rÀ2(@ êä8ÃæWÁÖdØÃ AedÀæ1B ‚\!A‡$œÈ= ¯ € À5xÉô#L^ÿAÿáÍk@F§”3 ï¸G©¨“e €Ëc?¤(ÆšDãÑP_í–€y\ãŒq K΀F5nñÿˆFö¨EÀ~¸Æ/Dp-¦˜€ôC…9ƒÿ¢1|n #'ýØÀy›üG'uÒ,ãËÐd(ÿ[”–¨åMH9€À–©lá}‰Ëš€q0e,u‚€Ib±†ÉÜH$Qiœ!…È/™ÉSb5©a®áKoÈà&9[¼k` De:W Þc€èJð(€=ܳ+@Þ8"Ák˜³Ÿ7™‡8ž%‰f ¦ùj^óÙ¤&“€4&`’: ýêÉQÞä¡ Gʾ€T©NÜ),c£ÿè(>= A›â(ŽüOIZë ¥7ªLqF„Šô¨mä#ÿ!¼p­’Éè? `2àyÊ$@Gp­rÕ«7IÀö€…ôƒ¬]‹+³ºÕ·â-­˜ [ÍZ“e š›Ì+ÝÄX¼ ` Øè`øOFʵ¬OÅf$p¾’¡ÃŒÈ2ØDüP&.Z?6ÛY™`R¬”ÄÞhk²÷‰6,¥½Çi9ë¹e¶µ] Äèl»Åì±µ®Õž@t»Üþ.{„gú!ù,è†å!‡"""***777HHHVVViiivvvnˆ®iвx‡©p±s‘²s“¸|–·z—¹}š»–TS”ss¤]\«ff®l|»ihµhv»uzÆXWÚ[]×]`Î~AÚlLÝgUÙrLÖwVÈfhÅltÀuuÂpyÅ{ÍruÌszÚfgÐkqÝznÓuvÒtyÜttÚxwÛ{{ãWVègKäc[ërIévUãdbähfällårkässäyuä|{šuŒœ|’®y‰¦}¶{ˆÀŠÔ~ƒ¯v³n̈FÏŠỈSΑXчEÚ‘NÍ’eÈ›q׃pÐ’i×–xΤ}Þ¥mÝ¥rܪyìˆWç˜LåšRâŸ^èšUïœYðKêcä€~ì“hñ [à¡fì¢zï¬qì¯yð¤bð¦ið©mð¬p‡‡‡ŒŒ•••ˆŒ¨Š”¢„–´‚½Š™¶’‰£”™©š›³… ¾ž¦¼¡–©ššº€»•…²š›¬ ®Ÿ°¹“¡¦¦¦£©½ª­´¨³¿¹«¬´°®³³³»»»‰£À”«Äš®Åœ±Ç±È¢µÊ®½Í°¾Ï±¿Ð»ÇÔÉÆŒ”Ì““׈ˆÖŒÝ“ŠÔ““Õ–›Ó˜—ќڒ’Ú˜™Ö¤‘Ô´•˪ªÃ­¸Î»©Á»»Ì°°È¿·Ê¼½Ô§§Õ¹£×¶¶ä€â‡ˆäˆ…䊊åéž„ä’“å—˜åœœåŸ æ ˜îµƒí·‰í¹Œì¹å££ä©©çµ§å²±å¸·å¼¼í»»ò­¬ò°¯ñ´³È¿ÀØ¿ÃìÁêÄ£êÆ«êÉ­åÀ¿êÍ´éϹéлñÀ¿ÆÆÆÃÂÍÈÃÂËËËÂËÖÅÎØËÒÚÖËËÔÎÓÕÕÕÓÖÚÖÙÞÚÖ֨רßÛ×ÜÜÜÜÞáÞàâåÃÄåÇÈåÊÊîÌÌåÏÐç×ÈçÚÎèÙËåÓÔåרçÞ×åÜÜíÔÔìÜÜòÄÃôÌÌñÐÑñרñÙÙøÑÑùÝÝåßàåàÜäääççèêææëëëïïðóããñëëúååüëìòòòüòòþþþÿÿ H°àÀ}ë²3xϠÇ6ŒH‘âÄŠ jËÈqàÆŽ?‚䨝¤É“(Ù)k§Ï2eúNÒCI³¦Mš3oêÜY2gÍ‘b)4"Ñ¢ûÑ[Ê´©SU§Ð-muê[ÓeN³jÝš+ׯ`—zÕÚéQ¤AÑB<«v Ò°ôÐRÅÔÖ©nWáêu:vïÞ¾NËeÛ–pá¶I÷¾:u ]·S§Êåõû—²_ÀM 5Œ–sgÄó¹‚ìJ2×oSçâkY/æÖ[_/Õ Ôó`ÐmU6ª*©\˽RåjWWØae#ŸLÖ,n‚º7?èOÙ­¥·#W¾œ÷îÊiÿŒ>~ºGóÿö)ÃKïñ«íݹ~_Þ¹yòåÍW_M/—vØóŸ|\‰~!¡÷‚ñöÊb‘Á7àqRØÜm÷)È Gï@5{_}£K7À1W¡X'²¶• fˆÞ†õSÎ-·˜Æ:ÎŽŠ)z×#Sõa8ŒC)莇ª€¨Uv­àb×o&ž €+Ú7¤† :¡YAÜbVù£c)‹h>·ßRþ]§•\t-e—’SZV§Zù‘ñ‘zì¡ö^VÑ("D =¡˜?ÞI™™µ½ˆ¥~ÊØ—]n6õ ¬1Â<@Æ£=:zYžBî9©y¼!YâRÛÌÿÁ"Ðøñ ÅY˜¢©•U™*n~¥ >¾òêRÐ@`SD@Ï<ºJ9&™žy¥¤è½ÅU4$Â,d|QF1QVÈ«k¨Z«*¶æi»Õ6nD@ë!D,!î_ Cê®ÓBšßµi>çnS3¾’ 3œBÀ†IüM2_ˆ±¯´e¦iÀÀ*8ðRŠB¦Ê4Š’ÆEpúL¸ÐRËožª›1»ÓmŒT¹t³˜¥ˆ°±Ä‹D‡fLln¿ÿ».Æ m,(SÑÓì_œÑY #ô„çÂåï0ýÜ=Þ-#¶Ø¡¼P‰ØÍÀÃ2 4 V(aDc×m÷Ýxç­÷Þ|÷ÿ}7=÷h#øà„nøáˆ'®øâŒ7îøãÉL³Í§à Á!Ï¢FÛ<+ÌX“2ÅÍ5Òˆ ÑÆíÁР- "•5²&ü̳bàkEÄ£cMtË,¼ÀZA³?ÔñFçôp³È!ŠD³Ô0‹óIîV“^ªé-ÿr»YÁ;+4‡tË•,_$ãIJ¬\:ðFï}Ò„B Ç-¯ÜÒ†³[Ñò…ÕË -Ü·=øn~©Ó¡à€‚Ôd  \9¾hA|ƒ€ÌŒžäçµçè#­hE.¤¢Œ€ž¸Ã ñê}awÙÓ^™Â"ލÎ!7Äa–RsŠVÐã0§ÿ0‚S€eÅàÄ8šü>¿«Vð:ÈAÜ(£è(UrK(â‹hZršÒ±¹ëT,“bü@“ÃÜ PKÔÌNQ³›i)s¬cå$ô>5ŠlDOut±]ìQQ¡‚ÒãxŠAÑCŒ­ÉÚ"ýØ=@&=¼±…]î"'à@£ËXPc©¥@OiÌJ 3ÒFè¬j:íà!6é!%h)y¤\)#EUn0]ÃM?²óŸr˜±=:ÐÁ-vô•¾”Qæàc)iÃ`Ó<ëà¡¥c)s¨Â6•-y´”‚=Qš3œÍ//‰º¶(#IÝ€Ê.Œé zØ‚8 ã\¨ñÿ éEkh© Ì:cͶðc=Û£+v°‚Ì€Æy ~ð ÈyW$Eɽj¶S-­ÈAÙÃMz”âˆA B zL‚"8Á§ö@NÚ”†é+ŸóÎnÄó»Ð”°‰T|PÈE 8ðŠnä˜F¹|P þêšlK6!übJ`Â-Z¡”ò€#` $F`Š©j´—½*;³ª–~ìªÐdœ $p!°Å§ng Œ nÏF›ÙQV” írÌ)xPÇtÀ ”ž@MŒàq¨Ã†ðªÅÆ®VuV-Ùwà38ÀK7>à”ÿÒVô0‡$>5‚ØÒ´Znp[¤~=¿À TªƒrtC¥+pB‰Ë\䙉jq*WÈÒ)÷P‡)vÁƒåª¢1°Á-ºÑ èàŽ*^]AŠíª³»:},ZÔ‘ih£:H¯làÉO†óŒ]!G-d!Œs,ǘ©yA(oz_ÕΕµhyÇ/L¡ t W¶°JÓ» ¸”_ø"Czhã+‹!•Ιäô¸Æ-J?~¡ S|Ó»@Çrg°Üø,ó¸Â„‘ ô Ð)Úp†@·¹q)•àä4}‰_)à0…)ôS¼3Vôý&ýÓ…ÙŠÜ þ«‚ hàK¬H€ÿn—•Ÿ¾ Ixì†.ÂäbPpš×ð}:! \€tñ¼$Ž%"É©ršd v~6}Qwm Ñ #§p a0% =° ã—ö {FcY1 $@gÿÐ }lÐ Í <@©` ­ðŽ´¶ðI¡80€Œ§w(ço¥§½`¶p ËUlËu*~00{<—ytämš 1@g`Ò@ ÿÕùd{Æ~Za ö ° \™ò|Õukúpcj¸†B½PJ·<ð <0*uxF¤xN±x± ÞÐH[Ñ ) ÿPy¤0‚ ÔÐøÿDì•8€ww]¤W§@ƒ68\LA©¡ lh€Ønè&q8‡åµp)`yøuN‘–Ò ˜¢Æ”"1õ@…ÿ ž×Hà¤R8 s”x!€ˆy¡×=TŠ}·ƒ*‡=H#AXठz`"0Hès¤ 0pLYq ]À0P ™)@Ò ¤p0Ð5ÃÂ(‰6äTf´|ð$Oy&£ û¢h¸á hDt¨k)€"0&ó&‹»·…FÛ°Ë7`1p¦ i}¤0Or"Œ.„6`eL!!æI Ž7h„Dº  þÿ`k„€ˆÑ÷Ä¥ô "6b'Pn_Ñ š’0à¤P9™¸\8` Ôà ΀…Maf¬øö¸’·.IƒŸ´KĤ ·" €§Ò¨“;Ù“¨R^…1ð^“+ãS>t  Ê…]Å¿±qLQp) 70—ö´þñþèS9–ñ[Má©Ñ¡Ø–I?N•\•^òðŽsàÈ¢,Ìå \§P™»Ð^éEdr˜[ò˜‡IR•“tRqo5U»0O«Dý8¿É–D<™é^ø£’¹ŠÀ) Š@ܲ,KÑ,^ÉgNaåE`/à ¡R]ùÿcLוãsq‡ec#6ôЈÁ“—é–àx6`0§\áPÏ…Ž >‹ð 僇ÙTþ! ‡à† šôàäu:€ v´‹Ù|ÆTbôt5åt12w6œ–™_ír ª°yLaf#6Œ\êü‰ É’0s` ²™0Jɵ‰LÌ¥ž´X^DVƒKÁvñ„‰E÷Ф86ñ9ŸTZM:¥ñ à”Ãö™O¶‰·³ ›â-ôP _´Ü€GÖu r° Ñ/ÖÀt¤aúE¦RWæa©Q†fy!óbX¨ X:òÿéNÁ¿¹ ÓÕ4ó ªüYŽ 1ÜnÀcú ꥚©M13r™r»ô ÝPrƒÊeKqÁ 8qXx¨Ô°¨•Y¢q«¹ ¬¿à&¹ÀŠKós_¡ ­ z/Ì ÒÃf Ë€š•¸L¨±\×q rÉyçKoq¥K±«T–¨Æ*N}ߥÑ®¬ü±¬ªÐ¬×ù¶>ÐA°‰Ì©s‹àunЦÚ 8@£ðc“¥n‘äúHçš®Õ÷b» ¥Šª«WRçö:øZ‘:©•šKªš™Ò Ûÿàuœ2þÔxt$ ž$BÊ¥ ©Ñªz©Rû¡ÜEeÓˆ«#¢Æ€“«ô°w_6ÅšZº¥qÒ ø$ƒaú£Ë€žoò¦; Žð Ihžù™R¡\Pቻèr•š´ eÁ±…3µûž"û.Æ®ìYÁ‰« ²SQ¨1BL™Âµ0)¤YÁta«ŒYáM<4Nòf )Ð\K!—D¶\:ð Ø¸€èš®¿¸ÿÀ±Õ@8z»:ÂI.ÆbÚ` îy«&;eq¥!9t„©’+³IB³pƒˆIŽ_‘e¯ð Ëš^­`1¯`´¶ R/vª Ш´ÚÀ´9ﲂcoÿÑ.f¸˜ÙþzJ —w´ÿš^¸»™rà” rYJÏ‹x_;¨åÙ ÊÀxËb«+,®Kt‚#`#JQ»…k`s7e# h£6˜¦7P †Æ7,6’ð¡à7Í€ ’P àT #lj¤°\gÓ ) R/Ü7•ð‡¶ À 꽉ªÃ²F8Ô°Ã?|8;œ½=\İvºË691{ƒ\aÇ›˜û[«ùIG¯ k8b´"¦ KÌÕ V+¥TûR*µàkµKÁÀ Ì:Ïŵº”kŒYÑD“E· çÍV¿ÖÕ§rh±t ŽÖU Øõ’ŸdºHÜážÿ¢$›ÈM8h»‰ ÉŽÜ·:¶æÄÆm\ed[~<ÔU§pyŠr«° ÂÇéUdq‚GryìAÈ:`ÈòŸ:üÃâ’œMZD‚¸ÿÀ(ïùÃÚ{ÉT…y„©– ¡°ÄN| Âøª5`êÕNÜ ˜ÐÌg½Ü̼zµK$Ä Æc|gÿðÍMš½ñZ¬C%ÈѬÝfweMÑ4PÉE6`HÏí» `Ò¿ÿ»"‘½´ÎB‘²Ã:µø²Jñ«QÌ@Ñμ´ð,Ïí[ÏQqϨ30BüŠÑR± vñ Ík *K rM{¯ ­· ýžÁ«ÿ<JȬÄËÜ ÎÜHÐ [Ï›^.[Íu±Ù¬˜Û¬–Á·ýPßëJ:¸Ô9AÎQkÎè¼´ë œõ»ð ©‚ãTF™¸pz%|‹!B§¼€© N80ÇMDV¡âÊr–±ì¨–\Ë*‘ËÛkÓª«²KÌÃJÌÑ[ ƒÌ«R@†ND^d§¹¥ˆ·Ç¢›É” »×mÓ,žçÝqÍGý*‚Ó`Œè,8"nê9qÆ«¾á p§nà"Fþ¬g» 2½ 4 ^ì¹À«bâHœÕ(»ëŠ•"])ÒÀîbÂþ˛¨… Ì®ììòí¥Žâ¨Îë¢êÄkí®>îœÞ«²îìM[ëãË.¸þ´´nîÆšu o,×P&é^™ÞííùÈžq¥WJ¢'+Œ7mr}ÖÄÚ•ØÙ[!ÝÞ® ØÐ«mç#n,f•ì^çnqçíÚÕ¼ËX€!:#ÊZRÿz¨±kï©­@åí`Ñ¿½ËÄoë6Vóð>z ?µ³ÛÎþäøŽòóP컞 ïÚ¼ŒÐòÙ®GOõ\à:¿eºÍ,o†.áóPwÎ {À6¯CÙÂôM÷…¯±¨ ô|;ô·«¨$îb"Ÿ¢þñÂÄöî¬òû>·8Ⱥ×NŸ˜í³œðvMçÐmœKŸó[öÕ¦´ûêL.ÝNŽó¿ùœõ7O? ÑbˆßÒ€Ýø ñÀª–úª¿ú¬¿ú¬fÄF<ÄAÜj²?İ8‡Ìù)ñqOôm!¢–Ï_œùkùûÆõ½O¯±÷oqø†È¦_¾‘ŸïÓŸüÔ-ðq¥‚¶¨Jÿ_ýÆü??ùOŠùˆÆšïýº¿û’ïûØïß,bþÅŸþmŸóž¯öÂ_âÿ½ðÒwïèßÿýýþ $XÐàÁÚ.xÞ½~é-TÈÐâÅ1n<ØÞG!E޹ŒäI”'M¦dÉr%Ij”)2æAš29æÔ‰ÑcK ô^%:”hP£!oöÌÈôß=¨y:¥HuãÏ£(“fÕʵ(Ê¥L§Z-8–,A³gÿaõ*rk[·p[¾¥¶gZ²xóªeÈV®Ð¿]«»—/ÎÃ3wü‘îßÇ [ÕKµ²åÅýÊ ·³çɘ37MºôfÐãª^ ÓðèËNc3EÿÝö³×Û¸CË.°·ïÞµu³™›+]»:g+ÿ½\§ðãÄ‹KŸ~2¹Lç;›ÿ†žÕøÑïàw‹í]{pÕá‘Rw<þnùíÜûͧ_ßþ}ûuñïç_ûûï¾³ÌÃÈÀ[ìžÞl¾Ò¼HBË‚0 3£¡ +¶ø@Ä0C)#q±qÅMdQÃKQÅ]ñÅÄf´0Ʊã‘/ÑúQ­ q”1D<2BmštòI(£”rJ*«´òJ,³ÔrK.»ôòË.“¼qL‡,°GÅ$3G3_Có=%lS´8ß”jN:Õ,O;w\“Í:ÝÔ³ÏÐÿ?—$ô¼Då44ÏAåOòåRB‹ü°Ñ3-½TÒB9íTÔ4#•FS%Ò=O½ÓÓJWýTVI5ÕtÓVS%ÒÕ 1eÖ_íÓV$s5öX^ýÔuÔeKE6YÓšuVQiY…6ÚgU­6VZ%ÖWF·åöZ!…õÑÜn½5[fÅ ÖÝwÉÅÑnã¥^;¿E7T|Õ×{Ù=”Ú~ÑÔ·ÞsNø_€ xZm îñ`‰_UØ_y)~ØÚˆ7Uã€ydµÐ0ùd”SVye–[vùe˜c–yfšk¶ùfœoÎ ÞxîùçÒ|ša‚„Þù7£K:±¥™&z ¦ùŠZjÿ G›ºä§ÿ¹š¬­¹®úè¯ÿ]¦·±É6»´²ÑÎzm¶Ûvûm¸ßìÀ&bŠŸûA €ºÿYÆ¡ :€šµ0 ë…飡 ðyî¾ïÎ;òú;p±"G@ Ê'êGqÆBpÄ1@òB·èto]Öé¦'B €)5(` ݉¼ŸÔP€Â9ZæìÖgþ‰Ü™h×éð™ojècÜuçÝwà p†oâG¾'p¦}ðsß}úê{Bcg²'eP#~ñ-ä~ù@Fp¿…¯}k @ò6rºßýÃÑ»Ý "X€AôdhÞÿ@¨G€è`"së öÀ³ÛÝCÔ ÇÀ@b‚YœÖ `Á`°'Ý^H¼ÛÐ=9Àãú€îï.„áBЏ–õ`‰Òûa÷ÈN'8$È= P5 PzÖë‰ׂ¿ Þ¡Æî˜ržQ @´a€+f‘)\B„ÑpdÔI÷Ô€Ç`küG2:7&pˆÄ¢É ƒ@ % GçÉ„‹ÿPC2'Hé]±ŒQœ6 Ðz0’$b×çBO†’#\l=t‡Ê'>‡y´ó¤3dIK™ô!`Ð= `E ‚’!Êd¦1©ÿqHzx’gÄ»ŽE¸x?Ùâ‚‚cŠaGGgØñ$|#Ï´¨¹p›è&C¸hÆ{ €‹ §L ÀLàÍóêdg2¶d.  ¼N:ÍÕQ ˜'ÐðO§ð²šDñ4ÉC§˜‘ Ì$J™Áv&²ˆ¸3æE‡¸Ç bðŸÕßõ¨É>´£¿ Jeb€öiÒ˜šD!túR„•¨áä?ŽÊÉÏÉæŠ(£6\hžŽ–ñT¥ˆ½ ªõäÐû8 ĪXÎ=P–Á±r•w(ÓÊÆ×…¨eh« É7ÀV°ƒ%la {XÄ&V±‹elcûXÿÁV•¥,¯¢'AFVV³’º¬yQ0o¢}¸Gä8gCÎ⇬hiÇÉ&!àq%%àG°t³ˆ¥Û°Fà/ ,Z€þ{~,®3ŽGG “~nÕÐ0ó€hðãoÑGãêr·ƒcq×éþcô €RGÙ’6 vp¼Çy6é]¯—8ÇEâÎ Dvû(Æñ¶³Í; ÏûRe׽ƥðj;x¼;¸.w™wßRƒði‚ »`âñxìEàèÔ@ Ï*sw¾\~ÿ\j´w>ó}€ßÕ1"›ìãeM|b sÿw¾ ) äßRƒƒ(n[ÜÝ)¹¸´“#<=K»ç·E>²aíÖ‡É-qª(ëÊÖ‡%F¿~mš‹F;B Ánª kBô\f@#äxâ t¡ùÒ‡ÄÐЋft£ýhHGZÒ“¦t¥-}iLgZÓ›æt§=ýiP‡ZÔ£&u©M}jT§ZÕ«fu«]ýjXÇZÖ S­m}k\çZ×»æõ“*f¯b)h]v° .Ží«V5*v¹JÔìy­ Ú Cö¬*4í_/ìÚÌæ6ܦýín?;nàn¹Åííp{ÈÜêwº·]nw³mÝï>w½Ý6oaÇûØOÃ÷¾/fmyë»ÚÿãÊ7ºá}p{ÓûÞW6œp„³;â o[¿îp‰¿Íâ öÅ3ÅðÜß ÛxÈ1Nqˆ?|ä똴AžmŒ­ïkÿ9¿¤®ö¿í‰_L ÿxÈG^ò“§|å-yÌg^ó›ç|ç=ÿyÐo¾ ¡'}éMzÔ§^õ«ýê]ÿzØÇ^ö³oýìm{Üç÷µ×b}ï}ÿ{àcž÷Á'~ñO{‚_ùËg~é‡ß|èG_úŽþô­ýàWûÛç>òÒ}ð‡?öÚùÍÏyòŸ_ýë—|úÙÿ~õ»þó¿üéìÛÿû¾þùÿå+ˆ€!ù,e„d#‡&&&777IIIVVViiivvvMx¨V«xs•e¦h‡®i‹³x†¨p±s‘´s“¸|–·z–¹}š»™vv¥]\¤ii®l|´hhµhv½q|Ú[]×]`Î~AÚlLÝeSßf_ÝkPÝl\ÙrLÖwVÉgjÄktÊmuÁssÂpyÅ{ÍqwÌszÉ{{ÚefÐkqÝznÑtuÒtyÜttÚxwÛ{{ãWVègKäc[ërIévUãdbähfällårkässäyuä|{€z™•m…™uŒœ|’®y‰¦}°v…»~ŠÂ{…Ô~ƒ¯v³n̈FÏŠIÎVËQΑXЂAÑŠIÚ‘NÍ’eÈ›q׃pÐ’i×–xΤ}Þ¥mÝ¥rܪyìˆWç˜LåšRâŸ^èšUïœYðKêcä€~ì“hñ [à¡fì¢zï¬qì¯yð¤bð¦ið©mð¬p‡‡‡†–žŠœ•••ˆŒ¨Š”¢„–´‚½Š™¶’‰£”™©š›³… ¾ž¦¼¥…™¥™šº€»•…°‘‘ªŽ ®Ÿ°¹“¡§§§£©½ª­´¨³¿º¢¢´°®¶¶¶‰£À”«Äš®Åœ±Ç±È¤´Æ¢µÊ®½Í²¾Î±¿Ð·Á̺ÇÖĈˆÆŒ”Ë”“؇‡ÖŒÝ“ŠÔ““Õ–›Ó˜—ќݕ•ؘ›Â¨Ö¤‘Ô´•Ϋ«È¬¶Î»©Á±²ÀººÌ°°È¿·Ê¼½Ó¥¥Õ¹£Õ¸ºä€â‡ˆäˆ…䊊äéž„ä’“å—˜åœœåŸ æ ˜îµƒí·‰í¹Œì¹å££äªªçµ§å²±å¸·å¼¼È¿ÀØ¿ÃìÁêÄ£êÆ«êÉ­åÀ¿êÍ´éϹéÐ»ÆÆÆÃÂÍÈÂÂËËËÂËÖÄÎØÉÌÔÊÒÛÕÈÉÐÎÕÕÕÕÔÖÙÖÙÞØ×ØßÛ×ÜÜÜÚÝáÝàâåÄÄåÇÈåÊÊåÏÐç×ÈçÚÎèÙËåÓÔåרçÞ×åÜÜñÄÄòÐÏñÔÔåßàåàÜäääççèçèêèçèëëëïïðñèèóóóþþþÿÿ H° AƒäÜÇP Ã} ~»ç¹{÷¾iܨѢ?ŒÿöY¼xñÞʼn÷ü´QàGŠÿ0ú‹H&Í›[âܹ§O‚:îL(”'Ñ¢C‘*ýyT!FŒ%ŸÎŒÕäÓ‘9~Û‡‘ëÊ’#÷}$·‘\ЧOyBôǶ­Û·péÉ›×nJ¸xóêý¸·¯ß»m—"L³)áÁ‡4¼ðžX‘fýqµyÜË–lc:ÎØ±£ÔÙBiêÅ©»ú‹¶µk´ñ|ÙšK]ëj¯sëÎ{·oß½¥*f<\qeãȉ)ÐcjÔˆŽíxò[É©aŽ›’´Y¬»ÿ6f‹—1ٹ⡠.¾=FöîÛÇ.Xùaû÷‘ÇÏüÙ©\ÑG~!iTÑ7’uW v&q7“Ug¥¥ÖKñÝ“‹-êÝË-é¬W¡{ð}¸Û|Åéל‰ˆbR99&K¢Q]DÙIfÝ?/‰ÚX–™Öi˵6á‡ñØ’ËSÅØrއ"þb“¯‘˜˜ŠJQY劄ˆVU *D%Y¸’ieAEY ù8fP …W¡lÆÄsÎlî0 ¥nOÞi§L%šh%RbyÜM9ÔÐMVN†g9fYiB¥æ£eÊh›îô2[/uê–Îl "s›žx’Z*Z^‰b B±*è€+ºÿêu ‘e‘uÙ¤WäˆC]£\±¹ÐKñ\˜‹±ææŽ/¹ô¢Œky’­´­¥ h¬XÊúªØ"•QKûXGEÕ¹ä˜fŒÞzcW‡‹yƼkK¼MN{§½÷VÛ§~Ú²¸m«Ýõí¬·Vw#Žç>¥UGþáÚß@áɶä=sú%¾õšÊ›¾Sìç¿Eõ‹¨O—ˆ¦­”6’¼‚©®£–ñØexä‰z2ó^¬1´;óŒê¾Ée 2Àú½hmchÅÄEŒn4ig 7Ê’@&á îKîÌæ‹l¶t*"Æ_÷<êϯ*ôÐ>‰|Ðd kŸ/­|.Ž¥m岺QwT+D’Æÿ…ç\häÄ»¥“Ì9É>ö‡‹3Îq~f{ŒöÈÆåxMéôpMä6lV®ú*õVšAvn€£åŽ1Æx[l Ö6¶Ø÷4^¡”,ùäT!‡zn÷‹Ê]…²ºwoÄÐDßã+L|º8m„¿F/Ç$™Þž=ÛîYî¾ïþ&ö{æ7™fkðYÕ7Ô-o“WŽMæÖZsízkf([‡Š£Ý{8@²åŽ_g#_ac9>¥O\‘NBª†¼¨UMBºŸ¼l†3z¹¦HGÂH’ªç=ù°v _äV¨@/­Í?aÛÜò^u‡;çJPVÄr¼”i¥$b^fÿ ö‰aäSs 7,±„ÄiN]ãÞÎJhBªPw,lጚÑ£EÄh¹Êgâщ# DD‚«^Emjmz yŠqx$ɃOÉÆ&p‡œ@³±YHEñ€¯>âšaU“Ð@FU©ÕèB³>6ŠË:Ì ÂFR\Y+<Å2mwrüa—І"ŽÐgùŒv…tR ™Å -rP):JF¼Ø»·QÄ’lqYü¨æ™¬XEnk1'ÛX†ÐÇM°³…/HymL O¡îaWŠ-–À™åRÔÖËZÞ’[úÆrt-_®¬W¢) YZ’.c^dmÉSužÿ7ý† D6›ð5ÀRÔ8G$NH"0‘‹4Lða‡B¬~`2Í/iÕ´ÎÀ!+)“Ób„ú¦z @*%Ñ+T j˜Æ ayÂCŽ¢<ç‰ÓE‹©jh„}hƒ€&¤oL¦NLúšÕùÖØãðð„),‚ÔPCfúÍš6´X «Nщ4^.°M5Ó/]ö˜Î0$ZfÞ>·T 労ñ†% A(8aÙ(h7QHH¯Z‘–bµåXwšX§¸h22)ÍL:ã#ñè+Ì<#4¨›P"㲡ã$ð`/\‚}(C¸Ú=ÃF0§ãÃi ÉiT‘ÿ˜}TsÎÓHâpAˆRÚ‰_VHGÄÂIó)³¹‡6Ý 9`A dpk§èZ^ñ¡æçW¶ËÝîz÷»à¥Tx{X–÷•·¼æý!òÖ–ÚUã½ð…/,j Š÷^Ã6¨ ‹5„¡ OàB|LàøÀN°‚ ³ñ:øÁް„'ÌÝØ*¦]r,[ {“ðíV•Êt¾aFÉr ‘Sas¡Ï†ö“˜€$²á;ô¡Ül†ÆÐŒÁ¶–€6õ©"-¼XÚ^t&À»‰]×sŵŸd1#&Å•²Í¦n7ç°Á X0ƒ[¨'§”j6¸Ù˜†A«>Vhu3ŒXì6öÿ–F~ŽpK¨C52ÇÃL0?GTj@Kv6#b8¾‡9.! Kp#ÎÐê:ZQféþ¸°‡½iv˶X²&Ãf]­Øˆ™]æhKŸÓˆ‡KÔ`-(E¥6$PÝC Ô¨]VƒÑU 5d²móX㜚ì&[Pjˆ‚CnDõü¦œF‘è ~81ò°ÍÜ C Ò­F¤‡ÑkL¿öºŠ}sDMF7\0ñŠ“mâa”j¶RY­®Í‡€jyÐ4`:Œ/ÀTå¦i¦…Ìiuk‘ØŒ,J¸NF\ÐÄèžÏ™ø£XÆ?‡ÄÚuD/x õC'ÿ@+q‚Nì&Òj8³¥/­ðs ›Èn¶R$D\º{¤Î„÷¤Ãθ±s5TI6*^Ü#6HÂ%p[ø†ÐP;ТŽó”<_¾^8XsžnK-nÙd"Õ>5¨QfÉCæZ?kãŒñpdžñ©QXB—H®,Ÿ‚W#QDkuùÊÎøsº*G9ÚâÎeò’ ºˆ3jÚLQS´£Û0RF|º4= Z[ÐqðulqéO¶°Û\ÓG·N]…:„ ‹¶µßÎÜTbyXEÄëòÑÊó’$%#É0=ÅfÈí¡‰ÈµzÆ\oÝ›ùúëJîßÊXÁl?É8 ¾ÿ<­~¦9/!¨ ‹‘$%‰Ð>‚ ÃyDåcDð­7wõaOvœÏ¾(·´€&Q:ÄÃcÄ'žÇn‚3¡"B´1Õs*©g .fùWsûÇp°åއ–vBÁs%e:m×<Ƴ0>ÍäLhA9sY³=ç@` ¶ÁP„*Fò:C}lƇ}·sÎäB«vè!H1ÎÄ^§A!~æl×~³AGsBGï <À€T³ƒNõuC¨E貂plÂCyh§C)âK(È2ÆCža+uÊ08Ó£ YÓ ÷P Bàh$ß æM4ÿ—pk8vGØpf{@aY¥qdÝg{šQXÈ2 s#X±o#„]x½19 Ïâ 2pG€~hÓ¥fD¨x8qu‡¼Ã‹›Hß7? b¸etiô iŠ Á‡¤è~ËGG´  p7Pãp Ð&À(p‡P†øˆºH9–h„ÿ·iF%‡üD‡ÁØ2a0zXmñ‡¹pHRP©€ #@[€ /оpÈÐà e* e(‰nH‰éx޳|c@Œ1Îa‚¹•7VYZ(Bà ©PW` ¼ BÐ(ðpµÐÔ’‹Hÿh}9©@Àèi8Á‘àÒ.›øvmä„ÞQYì"ƒO¡ Å @0Y@QÀ|$PÅðcJpÌ`“zò#vÀ¦Žmø†dIx4MaIªb$¥Aâ.O!'¶ .æ¡PT ÷p 'p}'À‰–ŽHŽ;Ɇe™}¹2"Æ}ç9!œÄ áñýñ€sˆ7àKr#ð- ð ÷ðŸð'0ˆ˜â¨˜¹˜ŒÉ“¾™ærlM24O¹éò„qüÄÚ€ ð<`@àç`1? †Èà <˜˜¸¨†åxV9–Ö“’–åÿŠoÔ7”9.Ã'ùðà 0¬ É™ ¼p<` çÀ <†´Ä%ºáMÙ ³x´éÝ94àCFɄĒeOcR:ޱ ÐE@ Ýö <ñ'†‡wí@ ÁÐ ð°%ØÐêY*50²ù³y h³ ?á‘Ü©4êµ0fœ÷Ä(å°  ÇI° õ Åà¡ÖhŸº ´S0õ>FÕðœ¾!%uQÄ‘ˆ “h£ŽÙ ç#S6\Á‡ãÂFäbÚÀ º †ÐD K†ÊÉ™ÉyNçö jÐ Ôpkäÿ[ ]Z¯ƒ¢¸ãy¦™„géPqÊ ñg'©ÇÔÛ`z ›P  /àt¤ a*!úÔ¼†oðWñ¨ê¥¹Ñ?ñ ¢8Ê 4%¶¬ÌÚ¬àu^Š^ø¦ åPûÅ °u «ð^³5P ×p a¸ Ö aÐö%bp ïõ‰ð0¯]Z ``¤PŸð / ¨³°`‹` æ¬[° a¹©mfá+é–0¡ ›À •@ À0r_—<Ð.&†Š¨ŠzkiÐ ¹à Ýà«ô ¬­>†bÚ,Ïÿv¯W›:»³“££ae$q…1óS¨E*UK„¼ð Âð9Ð1û†àh¾Q¥V €d h`® ¯óÚ²¤ª:AàŠ×0'N£˜†i¦ «°¶Ù©c§Ѫ2¼Ç›Â•0 ¨Pñ¼ð` e°9à/pb6"' Ä€JB6À ^ûµ¿¶¦¨|¸1°¦²?ßókD“ ÈÚi>Ù¶ü‡‚“$rk~2.£o¡w 9pÒ p+À’  —0`‹¯tŠÃj“K¹‘Ê%Y3¥ÕpƒE"}…h©Ž#–¡«¦7š¦šÊýñgŒR5)‘0ü4LËÿCƇ»ÀPG¸ ð§   ø)…6^;¿*®¡)¼ ¸` Ï"¬R¬~È~7ÛŸÒ;º¢›6¤[ºÇÊÀq)Ú{^Ý›‘ùv#á»~Åà´Ç`!9€"À< *î ¿ayÖÉ ‘+¯@ø›Õ`‰ð(RöG¹p†÷¼ Âzô—³ùÀü·9½®æºn:Ò½|è4òs3 `²‹f@IÐ@л¿ûñ°,é 8h` ¯À¥ÿP ‰ð«0Œ ³ º€†î Ȱ ^MFÒ!ø¨rÀ>(ÄlKÄFÑÀ>{)Q+ÿ¸0˜!Wx³oÁ =мðm`€:£pÀ cæÓSù8—çp8Z*vP\ ‰@Ýð Bà¸åáöð ¤d8ˆ#ìÇ~Èk;½×‹Ž!·?‰vY´CÕÈé? g Qz¶ l­ø EÀР £ZC¬cº%[*³ º³ º~[¶€ ÅÀ 5DºQ ñ7@«,ÈÂlºÄl– ¼ŽV€F¥4f¢º|Y¿,ðV öY ÆœÅàÉÙ0ÐÉ6àÅÀ{5S;ää€ À &à…ÐÊÿÀ 6@s‚ˆB¬”Åÿ¢¾ð 1‹GyyÇVÈÆ<ÈM½ ™†1`òN’9—áQ ¾Bp§g 7 é 9`"lu%ÜFT èp\"] /ðõÛ Ñ ž`6“ ‡x$ùùªLÖÙƒøü”¶°Ï@ ‘fÁ³ÿ пxÄ-BÔhٜԢÁCëåºk4qOM/RMÕòi¸È©ÕïÛst×pGM…!Ê 2`P €äË â ah>P'¡*K’$½,Ûý GÁlŽBí¶äsÈKA€MÑãR5â ( Tf¡7òÑ÷9ÑPmÑ< †€&Àý²Æb=<h0˾` /ÿpÒÝ@HçðÔŸùªÏý¼‰3éÑÇXÛßÁ‰~­Àý*¼½#øÛóãV94~QÉÐ¥VWÕû`'X`,60MO±D€W²¡ N™œ/P“f¨ ‚(B¬MÍÍûÿSˆûy]¢ÁGtÔhÚâ³%ؘ³„úQÁ™æRw&6OfˆBpzé¥QÊT»×€z$Uz0 ¦w×É šº!«<` 5ðÔ ®¹1âO Nú4˜ €\@Pñ·Ý£Ã<ß sßû²d=MyÁ’žÜTÖX’>pü‰z¦$k´¹³>@’Bà|0çŸÐt®ÞixîÿýÇ=ÐKXaÎ×eºx€=ÄA]æfJ!=­‚Ìဠ÷PÎ|öY»± ”ð›€Ö„M¡Mî³¶À)#îÊ Ÿö)¨Sš‚CÏ;1]ȼËW¨¬EF‚Ñn¹­“Ö;éCíÂé/вºƒÖ†¢ž–°G0–p¥êʵMV~±ŽI"Ÿ!Z½HÓY­#¼nzÂk!Â=˜Š4mSß»hÈ0îÓÆ‘ÄþA=ÀOe é›0 Œ ° ±v Ù@k“`è8ó ’ ‘pê~h$Ê =¥ðb¹‘蜼fh$â8ïq˜—cé,ΩöNæ‰qAÿf ÇâA²¥­­1vêÕPðoMRõá€ë b| U€ »N1Pú”%jƒò)¨üŒŠåÁ,xòh•éÁ"mÎòÉ~)B)(h^½ãäÌO†2Båýïˆøô”0cV z$P÷w æ0—êî åÀ )¥˜ƒÊï¯1'ƒjÒ÷γ¡Ó޾K&ŒîßÈþõ)ß×bŸï’N5"?ýÈ€ Ñ'-– ÿ ›ð /æ@zðoŸ ø¸ñÿñ¿<—{nŸ»ÕO‘çà¹_„ðØõkC+·’é-ï¶Å/™/Ÿ©•¿‹â`(Ö!ðô‚ Q}÷缯ÿa ðýíí‘R‰¦ð6î!Z Õx­r̓Ÿ’œñb s.ý\}—)91ùZö0ÿ$XРAr ú»·oà½{ %N”˜âE…1n¨‘#ErâîÛ÷\.È "ã‘+-_ïÙ²%Ó¦ÌbJŒQRìæO›–&ü¹i‚s•ñò‘ëž,”|ðBÿ惇¯sȬzméõ†çÓÇÚ,[mCrŠ%2\œv1Û†Œû> ò"DÒ÷VŸh˜;à»mZÿN0ù7’2£òh ñœÙ@lÅ;]ÌÖ¹{ÕÎu™/cÔ¹G›M²)ç§ý²j‰>Û0ã媬nð†š‚“i8™²Û§¸³Ðò0"èo.¸Ò{Î Æ6¯<„.bN&»‹Ñ¼ûæF›ñžäL„+[¸r>ä£/,ûðÓ¿°ÞÁÌ*ü‚s§˜€p"¯r`ï ÒqG« Á²P8›àâ"‡ÎÇõ&bŒœâHT NƒÄCÓ»ïð,ˆ¤íf4ÎOôÜÓ$’z¬hÆÿ¸Rt¨×I‡3à~M4Òl1 I˜r íÈàD)–nà!$TÇ ‹)F˜ÆÄÇ4±,­·”£Ž¢Äàâ10沃HÐÀôV?…E ½‘l=ÈXަ+ô´—Z©BLm©É°h’‰³tÆ„Š¦R¿¢‰½Ú~ƒÕ”8 C´äÒ«Cµr”×EÑŠs¤bÖ¯} có_€x`‚ 6ØÃÙLø`† ^¸-l°©fbŠ'†¥†O&¾Æ®©øãjVE”U@þ˜c«ù¤XLùšR>…=Qd~!‡Y´%ä$¬¡c—A޹äÐZø¼†6Éè¥ÿmºè¤£–º`ÿûåˆÙ’J4TG}6¬F7Ã6¸W1õÔM]µ)«Ì|ᡇxPý  s”ì2c};íð¢Èëéâû×aW,\0«7Ú×FçQ&ÃJ¦\Ô=­l œ´ê¾ŸÔ1ÆdâqǘOB‡HÛØKé?0%+€`ô?QüµP¸z1ðÄ»7PŒèªÓ¦·ªãsÏâ ¯Ï×¶ßåÉC”¤ÝÃtË/óÿ´Ý¦É§ªêÚÊ!ŠÛ]”y²u ·¼Á)מ¼6J­sèøŽn¼ñwcñW(Ų$Nw7yDSÆ)«yΔ‰å§ mO‚6ÁÜ͇G¹ÍÈ€ÅÿÝnbÎHH6Ê€À!A„ç(EÚr׫¹0kj aÐÔ·D9§w„ªó¼P´ +hÁh¹‡>ÈÏ´~¢-­ø H` M1¤²¶ Uƒ[í ¥‘äÜËÒ»‹^ ÈéŠ!ÈÚ¡¼~Ø‘çÅqXD,¢Úêh“$ÞãKl¢¶nB“xDÑ/¹ABÇøAù±O:¸ø3fD$Ç£ýI4f0mY£\JâÆ7nFct«wG q‚aÓ 2VáA›€Ð"”Ûê(“Â{¬°…å{¡¬""à-4,– ƒÃèè0k…bc(á(ÄQŽŽ¨\ט”ÿá \QßælTi>qgh³¾ µOu>Àžçx„ñqVo±$Ñdý}ƒñßËȦÉä€ÇÒ(CIÊCAQ§¤&-TŒpµïR6¹2”qÒÇ©#ëÒùºoÊ\U™ z!Š+ÝŽžîʧFòÙL âŠ8~ûK‡Ž£¼äÝïžÎ$f4£i6ô&ª¼hx[ Á6>HéOÕAþ ¤mK,gªVu_4êQKÌ`g^ÕËç´k)Z[nÔS…Π-Ì ã‚Vž&´˜?íC…ÚÄú =ñع’ır¯BJèæ™Uu &JüLhrÿ9¹+:ÊæYS`Ž“þä&y'ʸÊÕ§s¢]…JÔbè•|UÐDoØiÅ£«%,”qXr){d¢"mÁ.û½Ë$®eƒÙëäh³düˆg݈PºæÉ’¦¼k*ƒcT¤*õmÙ»`f^ɶ±nrS«XÉU±ã«z zÆz\]7¦ÐÙxhê¾½•F¡enÕ¦»ÐêŠå¡•kDò½ã¨Sm ûQ÷x“¤&äEíÔ²3µ«1ú³ˆ?^º³z‘ ÂCõ@Û\¢€üoŒ ËÀÒx¨ÖôE.„  tŒit¥ãÔùpl_ÒºGEEgŒ^ÀÿÓZò<&ˆ³Ó‡¤%N \+NEl'ä$0îñXüb¶’–º2¾™Jf]¦moÑÑïE–i4c¤WÌs˜çì˸Öy¿b°™ñêg¢ÞÑZäàöòÙ:. ôËrõU88zDyþ¯çhÚ†ššš.â"«ÑHCŸ1xÈZt•1"i=ïYÒq>\ª[léÚÏdBs¦vy¤²äwÒ#œsgAz ÀþÝA+]WÓ›žõŸ-¤ Uø'š[27ËR½åÓÔü$ž øÄ§b‹ˬnõ±¥{éYsúŽœ¶U"5;_ t¦#ÙòGÞ"B}gÅzR‹I ÌÜÙÜÿÜIvï–Ju×QÓ“:Ç9J³½²…»³ØqŽÄ ƒ§¸ÐNx.%‹Ãõàën6»7'ô¡sý0âQÌËí]OƒôÛ9Ûéç3Íþt°‡\íén»¡] ikè‚y“Åkj@DßïÛ* M>þ÷³ÞÅÒ\»Â ÿy¹|GÈis³Ø¼ëÿ=Ù«ç<á]ÿú¯_ŒÀ÷˹ð8½µ*¸ü Ö‹:îð¿ÓÚ>í3@ ¼ Íš@¿ã?§Û@ìÀÎ+9T?£ÀQ.Ô¿ýË¿ÔÓ<ëK?À­“@Çûè±@®YAã@Œµ”@A~Á/Ä@<ÁÍC¹kAŸ{ÁŒÁ$´7ùã²ë3; C©ÃB«ÓBžãBó#ÃÿÌ¿1¬B%lB&ÜB'„¹ìB7¼C|À%ìC? «ÑÃ=œÂ7ÜÁÁ›Cª@5D6”ABÄ'äC9ôÃI¬AF„C#ä¯B$Àº‚½J¬D@THŒÄG´ÂKíS?ýS@ TATB-TC=TDMTE]TF½S™ƒaT@‘ÔITK½T?¡ÔÑÔMBàÔGÅÔLÕÕP­TTMU4Õï`UîpÕW%ÕSUÕR•ÕY]U[mÕÂÕÃàUÂðÕ_ÍÕXV«†a1V@AÖd=VfmV?QÖÖhõTj­Vk½VlÍVmÝVníVożo0H„0€oàŽG(€x„Þ1€°tUWvý;(W»SˆGH„@qW}ýr5€qÌ;Iõ‡ €ý‡jWÁ8€í0WHrW`=ˆ| ÿ Iý×€-ˆ{ØŠ5€²HØuå—Š=€²À؇-€ˆ-ˆ9P×sņ°Øq-WS[Ù8×q…Wîð¾€D˜ž=Œ{ðY;€0Øj€ye¹H;€}HpÙ`¹IÅÚGrHÚG8€ð ;°Å†Šõ‡°ƒ§½W¨€™À†¨Xlœåˆ}¸ZI5Øo€DðZ°[²5[ÀƒU[¶…Ú»€ÀÈ%ܰÅ[½½  Å†«UÛ9¨½¥\‰ÈÜ« Wiõ‹0žµqý°YÁ˜ƒàlØ(‹9h]Áø†ÈŽÿ ‡ÐסµÚ€ÔÀÈÝ€¤pÛXÙ²ý‡°Û{PÚè%€¥Ýˆ¯•[ÈÛ°Ûˆr °…Ôê­•{0€åU[ç…^@Ùç]×ëÍ^Œ€’-×õ ßðõתýÐW€ãý‡ÔU_æõ¢ÿ…$ÇWÝý‹G€}àÙä}_ú½ àt­Ž€Ûïˆæ%Œ ~„赃^ØåV ÖEÞ½ýˆýÕY—­ÝÛý‡o[¿¨ào€þ]þö‹þ‡­x„¾ÛæˆÀ­×~€jøá ®)b„UÚ$^âåøb>€ÿG×þ­)¥Å†ß­`éµ[®Zµ•ZHãÃx„˜¥-a×eŃHáná,ÎØhbz âö‹ýuWr €DÚ²ø†èÅ`ãu\õcC¾ãè…Ü{[Fî×Ί[xclàâKæˆD€pˆ}(€¦•ÞB–ˆV~åTþ†z½‡5¾$u%€Òb#vݤ-‹X^Âe&£Eaã Úw=HU[@>äèZ›mbìý‹ý¥Ùvã„ß!†TgþTõ­æÞeâèÝß ææ ¦xe³Uç}ø]þ½ ©UVðØzf^‰Ûç·U×fáäÙêÍ]0ŒTfaž­aºaÿ¿hè¢Å†GÀZÈ= 8f`ºÝ‡Tžƒy†àO&€džµMfûõfy™^€¢ç‹Øèÿmcé^–áëÅÞy>é͵·ÒMæDøèe¥½‹€ÜdNådFc¡¾i‚8ê¥>dq•ã_ÃY´eXî€[¬&X€éHc@ÖD€cÂxd݇–ã4&Y ìW;…WrP_2i‚˜dt&å»0ë‘HÝy]ëkîˆ~õ‡Ü¥ë¸>è±Svõë»[;%;5VÅV;°ÓŽðêo½lÌÎlÍÞlÎîlÏþlÐmÑmÒ.mÓ>mÔNmÕ^mÖnm×~mØŽíaIc‹˜bÙ¾mÜÞÖ§•ãÿøáÜþmàžÂÝ~ßi6[N´žçy¥ÙÄ6€z=Øç­ax¥mr8}¥fzUW} ×tuÞàoÏ~ÚrUÝÛ=(^Þ€šfóîÛônolxÚžEoõ4;HxåÒ¥Û€(ÞZ÷îdñ^pÍ~Z#nïÛÕ`Ø`µf%ìVnþ?€§Õ×Þvã Ý`Ûm`#Þâ®Û­]×ÒepOíá–^¹mqWÛþme÷f÷ÞqèæÞ§ÝÚÖím õ¦Û¸àìâoòÒŽq!×`ßí]E~X;ø†Þnå° åjøð£`)W[£¥[6ðÿ² aÆ@ã­¥j'oóñ®[âì÷ï¨r%VrÿôÞ`èr÷nï°¥[¦ó"6ÚÞ†WûnïDXs7oôÎÆ†9‘Ÿ×vëyíÛë´¦WŸUßâëF~ÞêŽô;n`vulwtU7í§MõUuOoX¯u[¿u\Ïu]ßu^ïu_ÿu`vavb/vc?vdOve_vfovgvhviŸvj¯vk¿vlÏvmßvnïvoÿvpwqwr/ws?wtïõ§\wvowwwx÷ßCz¯wz‡P0ýÒõO- Ó}¯{·w|'S}Ò2UÓ7ÍRÁøzx7%Qÿƒ÷÷ˆÓ? †¿wˆÏQ‰×xŠŸx,­Ð…¿x‡‡Ó4RŽÿøûäwŒ¸xùùlÑø|£ ŒP•Oy€ùŒWøŽ?y“×y”GxÂ`y—ïÏùý”ùÕ4úaúœwÒƒ¯ø§÷øžwúgø¡§yú÷ù©—Óªø«ÏÁ¦÷úçú55{Ž`ú‚çù³§ú²wûŸ‡ú¯ø±Ï÷’o{²{©Ç{‚Pû»?Ó¨g{Àßz¸ïú¾ÇùµGû~û¼7|‚ÿûðûš×zÆ·ûÉ—ûÊ|îü¬Ç|½üÅÿ|Åù¿àü„/|¾×üÎßûÁÏ|¬?ýÆOý‡O|Ôo}ÑŸ}È'ýÿÛ}Ûw|Ü¿|Þ}ß'yà}Ýþ—Ï}›‡}Ë_}ã_þÀýç§üÝo~æWýëÿ}çÇþè¯}á—}âß~ï?~è'üà'ÿÞÿäûò›y±§ýó/×ÿì§ä'zöOú =zþWúºˆþ#Gð „ \èð¡Â†'B”HñbB‹7 ÔÈ£ÇCŠŒX’#É“ U‚dy1¥Ëƒ0cœI³à͇6UîŒÙÓåO–Ayæt8ôäÑ’IE.}YtåÓŒQ¥N•YÕêÕšYµnÅYµ)Ê®^·‚ÝX¶e׳NÓ^U;R¬Û‰q+­ËöîÔ¹:í’å›U¯Q¿mãý+çøëἉ£ÆÚ·0áÇ’ CFlyrdʘ/kîœùic“•f¼ôiŸ©s†¦º™ôkÓ¥i¶FXÛ±gΟuó†õðà‡/nü8òäÊ—3oîü9ôèÒ§S¯nýzsŒØ·sïîý;øðâÇ×Nþ<úôê׳o_ݼûøòçÓ¯oÿ8üûú÷óïïßy~ÿ 8 ®  *¸ ƒÙ]Ô „JÈ ‚Zx!†îU˜!‡z¸Ý†Š8"‰È…X"Š)~x¢Š-º!‹/Ê8ã€1Òx#ŽõÙ˜#=¦·£A ÙCydt!ù,Qƒ|5‡&&&777HHHWWWiiiwwwMx¨V«nr–vs•e¦i‡®eˆ±w†©p±s‘²s“¸|–·z–¹}š»¤[[¸QP¥bb¬m}´esºq|Ù[\×]`Ï`_Î~AÚlLÝgUÙrLÖwVÇhkÅktÁssÂpyÅ{ÌqtÍsyÚefÐkqÝznÓswÒtyÑxxÜttÚxwÚ{{ãWVègKäc[ërIévUäfeårkäxx‰m‰‡p€z™˜m„™uŒœ|’¬x‰¦}·{ˆÂ{…Ô~ƒ¯v³nõ…̈FÏŠỈSΑXчEÚ‘NÍ’eÈ›q׃pÐ’i×–xΤ}Þ£jܧuìˆWç˜LåšRâŸ^é›SïœYðKø›Iêcä€~ì’hé Zñ [à¡fç«pì¢zî¬rì¯yð¤cð¦ið©lð¬p‡‡‡„—”†š•••ˆ‹¨Š”¢„–´‚½Š™¶’‰£”™©š›³… ¾ž¦¼¥†šº€»•…ªŽ ®Ÿ°¸™ §¦¦£©½ª­´¨³¿º ­°ª»´°®¶¶¶Œ§Å”«Äš®Åœ±Ç±È¢µÊ®½Í²¾Î±¿ÐºÇÔÅ„„Æ‹“ٙ׈ˆÖŒÝ“ŠÔ——¨֤‘Òµ™Î««È¬¶Î»©À¼»Ì°°È¿·Ê¼½Ó¥¥Õ·¦Öº»ä€â‡ˆäˆ…䊊퇇펎å鞄䒓嗘圜埠栘춇캒壣娧䪪絧岲帷弼ò­­ó¯°ò¶µÄºÀØ¿ÃÚ̽ìÁêÄ£êÆ«êɬé˶éлõΨñÀ¿÷ЪöØ»ÆÆÆÃÂÍÈÂÂËËËÂËÖÅÎØÊËÔËÒÚÛÃÄÒÎÓÕÕÕÔÖÙÖÙÞÚÖÑØ×ØÝÚ×ÜÜÜÜÞáÞàâåÄÄåÇÈåÊÊîÅÄìÌÍåÏÐç×ÉåÓÔåרåÜÔåÜÜìÕÕëרìÜÜôÆÅôÜÅóÔÕåßàåàÜôæÙäääççèëááèçèëëëïïð÷êêóóóýõõþþþÿÿ Hpà·‚*Lxp¡Ã‡ý²é˜í ½l¿aÄhï›Ç‰úìéë×ÏžI{ý¾…x_62Åd Cú`¤6Þ„•@Jø’Yd™i¾!¤_‚Õ¸f£•ÑGSQ8©P]hbzº°#Žzéðù§{§úÙèp,Úß¡dfÿùÐT5ÑÚeN+ÁÙ•Hf”éYšöŠŒyjR:²¨'K©µ‘£Þ³¼ šª´ÓZ¹êq²¶ ëÚvkTŽ*õUEiTTuus)GÉ)d,;K²/ˆ­¥3 +²ø2[µ¦ò[–Þò窠‰ ÔEµŽ›ZÙ)u\­‹ftVµ…¤Iê‚q*'9g•ƒèoÙ ¼ma›œÂ0Ë0šNt’WÍx±Æ¦·§=£Î"eÈók­}¿hðÉN¥LtOaTÑTæ ûcg*i*1¯`±Y ±Fk/ÿ,´I@}%ÁG£4AEíX˜×"´ÒIÔíZ·WÁfDóFÖÿ$ڛƦ£Þ,é¥Â¬‰e˜¸â#'Ö6¢%¯½e䇭„§Áå–x3m%Q‚díÝU¸¤[Ò>Æò¼¤;ÛöZlû޽8†ÿª½4åH?9ca¥ÔxA4  B§dnHãb¤.GÉŒõÃú ~ñIéè¢Ëá­¡÷,{Ôú;6Ù¿c›6É’·8>S6B‡¹ÃY…¹ØI}ÿuÉK”cû&©û =Ò—'Îê¬hk4‹]äéCýšÖìæS;ò©ì|°Ò]¬“¾àAÆj"^¹Ð2¿Ñlæ~éŒHBÒ?ê ®pØ3Í’@”(…è{ „O‡;–O‚ÜJLïT&…¯sÞIžÔÿ°Ò¼Ì‰k©ðØ:¶š:ÝÉ$y` éó½‹Åm?_ù&—¶\}‹+“­¨¶5ÉL¤93IÔ:¸·ËŒ¤-ÓPntfgùl5Ö€D^ªQ.©š"ÏfC€e‘K8DYAzuÅåZðóÊ€ú±¼Kõª,ˉ¹:RÉÑe°SÓÓ.ìÁŽ<1ñ$Ó æP‚ì@=^{¡ìª8CV=ð–’Käc„·åü'!É9’’§ 3~Q« „B§·7kzð²Ózèepì‘ !„ ‚|ÅNh‚œÒ±ˆKCÞPi÷9’b˜Ó“$ Ãˆß†å ²Ü$:iZ#vÈ2ÿBʤN{©˜5MB 0â$¨€=èñMïÁpœ¿<$9Ï9ð²‘9žX8Ù’­ñnäª'±B:HeåR'‘Îôvc <¡GPÖ€ @ž*œ·©¥o'ÑÒ°4Û¹‡G"º“&3byšu<Ȇ¬¥R|ãÎKR§pØ¡ÙlÄž0S2!²'-!ÊNŸÚ’¢Gc$Q(šÑíÏ“4ð6ÈÆÑñaT­W‡x UR€JhB!¬¡ 2 !¬%!ZNÛåZì«2Æådæ& SŽ$ø#KŠÎWx]ikü¸l@boXT9 ™2T´ «dwjNžÿ¢µ±ŒU˜æ¦gêBWb“gÈ5¿Ð93¯¦‰&/Ä‘žQ:‚O¸B$*‡.°±Õ©mt ].²¹/aà†œPhHO-‹Eš*BarHòŒ˜J?fÇ“¨Ç MÚ&pÁØíCgÛ]³ÒVPžI°‚Ìà;øÁ ö¤ƒå)fJ²Âncq7’gxøÃ þð(d° Gc3xF"@Š2dÁ J¨BˆgLãÛøÆ8ÎñŒ±áûøÇ@²{ì6Ûf‡du ³Ó™Å¸2AòFó&ÍÜC;2Bîy–´ÜæÚÃhÄ4!‡<€c¡ÅhÊñÚìÊÿ£+êiY·ÈEÜ¢¯@ꃈi0 ‡U˜'âêdI…u\Ø®F3xA ^  Ùlãš~ÆBÑàÕ,¶Í|³‘[Ûµy÷»Ž© gqd•¥kÒgÕ¤V×´$dԘÄЇ;œÙáˆD# a “ðè¥ìæÃÙPrŽó?Í6â ™À Ô$â0õÎ2U›2GD3}8C V¨im¬ŠMj4Â¥µ±”‘šÂÚ"±b…öZ;Íéðø‹ZßBXæ£uÆÏèzY>Žúe„Ëh,MlÖ´TÒEÚuø¿~w±{ìÉÚù¬½·QÈk~ƒðž ÿ‘ðTµ¨êí:ß0Ã2êÁOxu­±Tð¬ Ô¡6Éðª-®àU°n<Þï ³“&ò¦Ïùã82æGµÃ{èLŒX¯¸Á…eGÝ`e/b ^Èæ'( @á‡XÂ6¿^8.`Žoºô>ÙÒ™>ò©Ä­m¦nŽf1#¦L.hyêÝÛ¼žJ£ÃNzV,ìAŽA•(A*nƒdxâñ'9Ç^J;Mçä§ xgN=Ž3¼‹Y-šn`j*{³E3œq +Ì”`‹;Òá$^8khD$î+ΓÖN¤—¡éëÛ»ë}õRòïpØ»°XLšÑ”ÿH"Ä6‰,H눇³À†ÇÓ‘òU.sS1Êæ“’Ëó¯?â¦÷þû[{WgA\£ÆwPÑ#AF)ñ}§aQ61rûPÆà ’'½`½@<£¯„@öW_&Á|ûglÖ‡zÔ€ØGY(8„€¢€èQärF?’?=ÆâG¸'zE9;K9u΢$È8&˜zætPׄ@Ñ}Û§CÚ×Ñá>È3:½“N÷p~ü“:`-P´ê!@€bòçefcwL8Q'¨zNB­·K:!x”573i?Rƒ?2ãÚðò0 ›Ð'¡!ac‚ƒ@â°;ÿ  †x†&ñ|¬ b³„)x`™x(X4v¨H˜R,oT´²€–8‘´7ï © ?h>¨£4*£¤¬„¯d†Ý£ˆ£'2˜øš(Œœ¸‚nèR˜RKf>µ|87ü:öp ïÐ×° Ðç ¬ó?©à ‚# ²¸9Dv’ ÓÐk ut•t:±wHg؆ó†#Áµr(K<À² ãÇ ó¼ðcñ -E“Ȳ°-6°ú2 . B0zpk–iÁX}›…·õ†ÉzQf÷h€1ó(õFD2#hY±h‹öp !4@#à öÿ @)ÐJЋu‡tyŒiŒD©‘Ù§&Êè$ 1¡aYÖQÔhØø!Ú@Üè ßÀNÐ «"@¼°0 âÀ *°Ø`S¢]gÈŽEV”óhoÉæq¸²ÎĄ̃k1U~÷C” ­øŠ±8‹Ž8 àP  ±°3¹P'a %€ nÙ'p©*CY—ĈHFùtyÙg7Q1$ÙVû4‡Þ¡^7ÓƒXˆ‘á ¸À ¯” RàLà"0¸ÐJ’¶ DPÙÀȆt©lOš¢)ì#U9ä^Ù`{¡”C"#ÃCU¢’ CÈ\ðR  #àSÿ`›PB}PF@M›™ŽÅ&—·’œž©‚q¨t>Ñ‚9´FÒ9#Ä”ÿðš‘Øˆ9@9°'â 0“ Š ö ˜ÐJ%ðfØž@)`ð¹;9Ÿpx—ö9€!¹>H‘L-§RöäðÀ †)Ô °J;âP“- : „hÈ ³‰îi…7£„Æù™:Œôé¡íÈ4UxE#úYŸgòó#Àò@›€ o@°> âH¬ ª â äŘ…Þ y˜iB+[Á¿k¯;Ð:¬u4¬ÄšÑkÑ©äWv` ô7ØÅöp²ã(Êêl¯.©Ì¾1v‚çࣔ¿âãº~»W¬ØthNa!Šû¦íò VŠ¥bžÄ5¹0N£ƒdÖTnçÆ¹¨‹Ž‚þN£˜P ;`ÌsžvŽÈˆ¸:ª9“ñ‘ŽØwjÔBîXõ®o{ ƒJ·ÍÞî:¶A °”ÿ@P…P0Úã¸,)o¾€¦j¯‹È{ã/IMÜø*Kþ$É$ò!ïÌNïñßÜsò©±ó‰n¯È­ñ iÏÓ(<²gO¤F‘´ǎ×,]z(LgÍN…m¸R‰³'n ;R±cX²cª A¦*È.V*˜ºLÚ{V°ß?œ9sö3©Óç?}ß¾ÙË&TßO¤I“~SÚÔiN¦Ny–|ZgT«Y¯jÕŠ•ëS¯_‘º &¦9ÒéÊ¡ƒ/9t±c•йY©pÍdH‰Â"J†Q Äwf¸ v>¢0ÍW*V¾v䨱)ïÞ™tSæ`•’f{äÄ¥ã[ÓÞͤõõÓgïhR}Eƒ~ËÿöZìÒÛUÃ"UÍÚunŸ»®TxñÇsçÆóÙd^(eÚã•#¹T³Â4\Òð uŸy\ÁÁÖìiœœ×3v“qsñö”2Q†$ÏÐ4꟦ÒgÀ‚”š(£œÐ6°Ã­)žl+9劫¸ sË+會®3^ ªŽì´+ˆ»îp!" ˆ­?{ ¡`H¡ÀŽ…ìñ%Îì)¥3ëv ¦TtÙO¿”v€‘&›’êG(††2е Zcð'“ljÃÛ.Œ0§ -t).¿*“«3«"Ë,´ÔbË-¸ä¢Ë.q.ëî1VÄù¤._–´)˜Q=†æ<+­ÿXªËaq¢ƒi³Î@z±»ÿŒ*¨lìQjª'›„Í5ß4mpL✲ɷ+5$µÔU“㪵߶\•Ÿ`~)‡>í2-V ò(-‘H2L#ŽžG/òêÓå{¨¡dšóL:%ÎHâ5•—ŠÜO%––¬ôÖVÃéI¡ÊõS¢bMí›=õ)Ü›Òìê©©SÞ¬ðÕM+¢²ñ÷\2g•'`9*ÈÈ"ú•²‘R܈¦c'-Iºˆ4¸»tpYaÒìIɆ´B"'Ï@RÒÛ&aU Üo´)WJƒÒ’·¡ jf J ªU¨¬ZT}÷å¹ÌØØÅ4ÕžIýyÈÙ2a3«ë.ÿ; ÃSO>f4:V¢îîéYÈ©Ž†bùˆ†sf‘Lìï?N9MîRÚ6î)[*ÀSmæy«¿Gúï2‰z-6»u :)Wàq./r +q»n‡…Id»CÑÈaü¦³‡LklÌÔίK³iŸÓÆJ›ØÔší¹Ù§ÖPãiq§x·ôeàƒ~xâ‹7þxä‰÷÷åå“wžøT‚¡éLdåì³Ç~0Á>šfˆF{òŸùd“M>)ŸüðǧÞúõËfL6I‹þMV°Á””61È@|ñ#ŸkŠR®66|Þð¨@æE°¤àñ„68 V¥h¢ ÿÒ7¦¥5íi]3Œ¡ê”¹·ÁH#aãZêT·ë<$-ìPÛgÎÆŠªn}kÝ©¬tÁ)­V|;ÍT|w·Àõ.pGœUúõ/Y‘Šò`F*0w1¾L &$„‘iÈC1"=Ì$çÐÅ,P·L ® çHKß2‹’…ÄH”áK}6Á¬›Ì&AàêIN`…³ e )*s ï~¦âneItá©Xy0i«’Ç,˜Ñ…:\’²˜%­0 ÉŠPkI^^ዊőlžéUIæ4Jqäñe :äUü寙q©–HW#ÅR¯01$S¨yb¦ÉÄ&® ™¬"•süôLÿ@³ŽSÃËèFÿ‘C†¬0·òŒ „”–éd…â!?âæ., ³hÌZnzóC+uJS·Z_Å’ýÍ;Ž5:ÉÅ”¦7mqA ó̰mG[(Õ 5Bß=×Þ.lKeÿ(L¹;/SÕµa‡Ãñ%qoWzbG3E,v1µŽk’É͘3´1®p,N‘Åt 9 Ü(êºÕ%'r>rrÆûA¥,y¨îè“ífX«:Ê%±‰ï›ØCçw¿,®ñ4í2Vd¡¤À3¬!.ØFƒY€ut'|\åÖÁ ÛÙÂÙ˜²A5Ä&ó«ˆ?$¯”E¬[XzLôÍò¡×S\²}y&ÓÂ+Ôa6B7W¸>™AwÝX\2Q2Zln•ï®Ö6­¹sžK2Wp (^±íc«w¢í Ðã¾²­_jîÆ²b¯&u‘ƨÑ0ì.É,„ä¶Ì–ñŒº…(K;.½]Û½ÿ €Š™[D¾]ª1¤Â™IHIZY¾Ã!w«hbs·4ãÐg9uâáˆ#R6B©6zy(îÈõ½U¦òn-Žå,üÖ1·D%šr !Ü'$eWUoÃd>¢¼¤Bþp¡]~t£ÏZæ§¹–³ ’5òÀ9m8Õžëü)@ß`¹^ôXËZì7tÓ ²ñ~¢ÝO‡ëÇW öA޼ƒÀ9§í[wl“éao¹VÕÍ¿?sã¾°´®gFXj ˜Zß9n‹ñ -hAy¿h{r1MCš¿ÍÅëx.I#D’˜IìÈÝŸìRƒF• rzY¡(eà|ζ¸Ž)ؤ½8žÿ.èQÖŸ«‰#k]D'·OS3Ê‹E9VÒ£ÜRíêAë>ó{wïmö¥›„X“-}p‹ÿóÖ}£©zßù<Òñ#úÞ¦>ù¥O÷ì÷ûæÞþIºŸâ=‡É⇻ªRcþ¾Á¼ès5¡k¿¾S:ß#>³C7ÈáKÃ{¡ä³ NA¾Ü35º™ï{5è+À <Àê‹¿ë[@Ñ £ûÿ ô™Ú꿟ck³Ù³(Õóõ@t?Ü=äªt)!<\ˆ@NÊ¿ù’­J„“£BJIC$B2D›),?ôëB\?ä»M AK¦KÅ!\Ã@‹ä#$ü¥nÃ+RÄ=SœÄ—cEïËÄLtÅH,¯k$ÌX C%¢D4QƬ°>ÄÄUÜÀ̓¤SƒÃQ|¿'d¹SCøãEü‹F5”DÞ8 ›Cÿ«ÁkäÆi4@3ôFû‚FšûlÄrÔDÜFÄÅyŒÂ]„Ç™ Ç\¤jÌ­R¼EfdCvìFd:€ÜÇò;¿ÑÆpÓGut´Å›\F‰ä¶˜<;“TsDÔÝSLÒI-ÔKýTN%ÕR-SKUUÅÑ?õTTuÒS}ÕDuUV UQÕÔ0µUIÔ]õÓt\ÕLÅUVJU/mÕc5ÕTUT]ÝTXÕ8Öa•V÷¤Õ`½Öd•Uc…ÖbÝÖeµÖnmVgõÖgýÖl­ÕN=×h¥VmEVnT^ÍU_ýUl}Wx¥ÓEíUb½Wj½Íz5WuýW€Ør-Xw%XƒMW{½Uf×iØ„UVrØÿv•؉ÍW}íWW†…؃¥ØŠ×j]ØŒÕØJÙuåØŽU‡¥W•eT” W…EØÙ—-Ù›•×y­¸“­YŸýÙ–uÙ€åW“­S˜½Ø™¥YqÕÙ¢5ÚqZ‹MZ¤•ZŒ}Zª½Z¬ YtZ®ÕÚ­} 7[±[²-[³=[´M[µ][¶m[·}[¸[¹[º­[»½[¼Í[½ ÛªpƒÀñ[žÜVÜÁýÂ%•ÃE\Ã]\ÆÍÉÄ“ÇEŽÈ-ŽÉ¥ÜÆ]•ÊŽÌÍͽÎõÜöü‡Ï‹ÑåŠÒÕŠÓEÝËUÜÕ…ÜÖuÝöLݬݾ}]¡]°µ]ÉÕ]ÍýÛÿÐ}†À^žÞV!Þâýã%•äU^äm^ç ]è^é^ê­^ë½^ìÍ^íÝ^îí^±P„ 9À 9(8ͤÈÀ‰A0_Rð-E (€ñ…ß_ò5_ôÕ E„«¨_þ‡ö5Æã Àí‡ þ‡gÈßù‹` µ~¨_Úýß’2Ü>`,I`6€›x`ýE>€›ø`pÁ`ÒÍ_R“†ðõ`óÕ97€áœ„ûeáA9P„ø_áØ=§€Ap${Pb9€`àgbý }„!Îߟ;Ü0Vø†*V„ÿ€¯ƒ œHciàà~9-æŠg087iø–¸ß¬Ð0\΄3Nã5nã7&i`à9®ã;ÖŠ8iÈäFVã@dÓb0žc7x†Aîd¥`biã«€õEe¤È7äà'.Ž0$–ƒõýx_Ï=Û‘}€›pƒ^¾lô €o([€/¿Udœ0d>p €Ó¼áY.€?¶‡ žeˆà¬@ã=Æ A€?MißWIc¿gL±Ðæ9îæðʼnðÛVr6g«€6_|vgw&à"Ö à~kþ‡ÿ\¾çmö †—;X_Šžc§?fgœàfàP„Ð$Æf~è¯0€€ €ˆßá€5é éÛPi€&߀fœ`>çY.)ß^6BÖŠ„î‡.&fcþ‡lPã–®fÀigê ê¯øé ãEàåknê¬Päòàx†©®ê_2«và æj¯Þ¹–èP„õµë<#˜_&èØ bipf•þpŽúÝf.Æ ¾.éÀž lº¤å°že9j¶aÿ=ê(&a³ä抄®ßo €Axâ›e±Pél¸ã{¶kÏÎ °Îd{HãѾhÿ¦Òãñµkixë£ÎŠA€8 }(,VìÎVŠâ>îàΆòµ¿¤\¡þ)Ž­ü%WmXŠöå*¾‰ÐæÜØíö`ífìjnbû=¿ã¡k&~_°.g±HèVnvvf…~m¿moѽçùf毞å„Féüfé§ €ã~ãׇg­àbâ–ðmÆ6 Ç ¶éÍ>ð¤ ãóÖdEãLF”vªëÎkàîÍFâ¤îã¢þ biHq7XñÜHlîc}n7€ðïå6>o7˜ãó&ì¯HèœXlݶâ«ê†6l(ò…æŠü.ggòQ†$W>ïA rÿ#ŸrwŠÈäóîW3ßòŸXó·íõ󤆱%µAHìÝ»ß8žàâÈcAW`Hs.ßháísÜ…láÕ‡þã°¾g¨ü†Ûñý†{Ö—%׉կ d.m.ô\Ž`¾Vaåà~@æN×ôH}Ûù=uÔõ5Ûo[à¥u¥ƒ±… S§tïvb/vc?vdOve_vfovgvhviŸvj¯vk¿vlÏvmßvnïvoÿvp÷ªàë¨mq?wtw;–ô˜êtwxÏöuçç©.rñ}ãÍH‡ðîïYgêõ¤_rÿ†`ùþ‡òjõßþwÿˆx;6_]6æ€kmÈrï®xCÆxŽ—;Æi@â‹ÏxØkéãvå> k2îøÚŽxœ‡x;ÎjŽ7æ—Æ ˜žãðîê8x}¿élé°cn÷Ãnb˜.æÎj·6i?&cùuåœßz®ïu?¦÷'îåvŸã….îŽïŽO{¦Ng;&c±7fÈø>Öc”N{(g²îz½ßûyWlŸ'è9fæXß –ƒlh÷âVãÜ~¦Ÿbˆ~éf–â>†è™wc›f½&cIß{ÎÇù¾û>¾iÞé^kÀ†è‹‡i`üŽçx5}Žߨ–âvß’çøAÐüÿÎß}ˆ×sQYböÝèK`CVôà7€?fza'`áÏ 7 x7¾>ôäˆ~Þ¿~ì¯ ;¾ùìï~ï'nxøïò/ó?ôOõ_öo÷øùŸú¯û¿üÏýßþïÿˆ,hð „ 2lèð!Ĉ'R¬hñ"ÆŒ7rìèñ#È"G’,iò$Ê”*W²léò%̘2gÒ¬ió&Μ:wòìéó'РB‡-jô(Ò¤J—2mêô)Ô¨R§R­jõ*Ö¬Z·r…úí+ذbÇ’-kö,Ú´jײmëö-ܸrçÒ­k÷.Þ¯öòíë÷ïÞE¿$,ÿÒðáÂ$ƒdüÑñã‘€'OÌò`ÅšCbΜø3h”G÷µ¼±óéÍœU7fíuj‘¤g›Ö;ãmŒ¹u»~ÝûòbɳGׯý;vèÈÇm/g.{8å⼓ûn>ºçÕÖ/Bž½5öïÊÃ#O^c÷Êâ«k?o|»ÅÝñƒ?OïWúEùõSäßþ|î]מhöÝ·‚Àøß‚ù'у g _øHàx²§a‚å™W …uè‡#¾'`~ :8aˆî§bDÆãŒ(^XâF!Vhâ€~è#<¦HãC:Ѝ Ž$&yâ’=nø£GF"à"ƒMiã‹D:$ãC\vÿÉ"…T®ˆe•VÞ¥gÉ‘”bJHæ˜p¾)gfªÙ’—[jÙPž|îé'õÉРJ¢‰ä¡ˆ®©è“:ÊQ_èùçB…&d饔Vªi¦œ"é¤~)ê¨vfijœ¨J* ¤¶š¨‡2šæ©ªFÄ*¡ôÙ*¨®°*ë¯Àf„릞„é±½.+­eúб !›¬«¹kдØ^[P¶ÜŽm§Õ»+¯âŽûì•ä:.BÝä®@ðþ#ï¼Ûzkn¸ê6Ä.µø¶kï»$/ÁÊzį¶×ëï¿ ÷‹îÍN„ð½W qÄÌJ<'Ƶ~DqÀ ,²Áש/C ÿ\ò¬-»¬Éå¢lmH*Ç˲Æ9ëÌdÇ©. óF6/lqÈ3Ÿû3ÏÂ:©ôEBÓ;²ÑÒ*8á…~8â‰+¾8ã;þ8ä‘K>9å•[~9æ™k¾9ç{þ9è¡‹>:饛~:ê©«¾:ë­»þ:ì±Ë>;íµÛ~;î¹ë¾;ï½ûþ;ðÁ ?<ñÅ<òÉ+¿<óÍ;ÿ<ôÑK?=õÕ[=öÙk¿=÷Ý{ÿ=øá‹?>ùå›>úé«¿>ûí»ÿ>üñË??ý¶{ÿýuÆm§‹þb¯í6FÜ À°€< ¨À2°| #(Á R°‚¼ 3¨Á "n ÉEÂŒ„#)!HPèv„…-œ‰ 9CÌ0#5´á A˜CêP&7 àMÄöPˆF<âK~x%V„‰qâ‡HDR±Š0yI°(-†„‹]‰AFŒ±#e4cWÒ¨Æ5²±n|#Iúa€È¡ЇFôaÜñÏ(@±7Ø1ÿc ÈAÈA ƒ°£=4bPRß0@±‘?fò˜T$B&II4ò‘ˆ¤FÀÇH^²“ydÿ´x€à•Zl¥&ÿQÇ>:äxÈ ÉE@Ž€4©‘@|ìGä üò"rÀ30€ìQh¤m0Çg@ÚÔˆ" M, À ŠÀ  )E@ÍüfFôq7@ §9·iÃ$³ÿhç;õ 02ýpAPK‹ØãÈ%Bá9d*“!Ï0"ùHôÃå<çBä`cþ£“ö€FÉg !€ 12Ïy3"5hL)ÉÍZB³š‘ƒ¤Él°Ô 4È#õñ i@ó§y†äHÔzfD¨éd*0ŸZ• $À¢4ºÿŸ~j¬Ü$¤&_Ús†ôƒ8I‡zÈ4Ä­W%9R“”1@î˜×l¨õ"8€"æèÊ#ˆ-æIÈa¢Ö € ÓÅ6#äd+{‘l`pçfuéY‹(býÐÇE}úÜf¤“6•í_ÿX†èv·yl_YܬÒµ$+7s‰›i.´¤ÙˆíE¤€lÔÑ“EåEžIEœ6¶Íˆ:€A,»„@¿Û[ØÃ „ygk Õ­>Xzßæw¹%mHqõqÜ\–!níä7øÚU™ ä·8í­`æ‘á䢹Ͻõx‰%ðƒÁiM f’ÃvjoÁ9bh–Ø"g¬7˪bŠ*¢ýÀ7nLÓÞ¶•¥¨£&#üçuÆ^ˆ[É QýV$´<€ ùXæb„­+í‡6åPNŽDöÚu`|¾s¬¨™‘ °žasFª*3§9•ë-À6á,gŒdã¢{Ôå7ñ‰‘É:•šR–è’Q©à’òYÍ Ñ‡ŠáT*¨ñ¨GÌú•Áæ,¬ßk˜a[ÓNtÃy]aP÷# !ù,R{7‡&&&666IIIVVViiivvvMx¨V«nr–vs•e¦i‡®eˆ±w†©p±z—º¤]\¯cb¬m}´es¹r|å};Ù[\×]`Î~AÚlLÝgUÙrLÖwVËejÅltÈugÊswÚfgÐkqÝznÙxxãWVègKäcZërIêxRäfeårkäxx‰m‰‡p€z™˜m„™uŒœ|’¬x‰¦}¶z†Â{…Ô~ƒ¯v²Žmô…ï„:ï’;ô‰$ñ‰6ñ’9̈ỈSΑXÒˆFÚ‘NÊ–kÇ™u׃pÐ’i×–xΤ}Þ£jܧuëˆFì‡Uè—JèšVñ”HðŸZêcå€íaê•vï Vì£^ñ [æ£cî¬sî±}ñ¥bð¦iòªlø¨cø­lð¬p‡‡‡„—†š•••ˆ‹¨Š”¢ƒœ»’‰£”™©š›³… ¾ž¦¼¥†š¥šš¶„‹»•…ªŽ ¬ž¯¬ž°¹“¡§§§¦«¸¨³¿¹¨«°ª»´°®¶¶¶‰£À—­Å±Ç¢µÊ®½Í±¼Ì±¿Ð»ÇÔÆ‹“ׇ‡ÖŒÝ“ŠÓ——¨ǣ„Ñ©„Ó©‘Òµ™ËªªÈ¬¶Î»©Êµ´Õ¥¥×·¤Öµ¶ä㇈䈅䊊쌌å鞄䒓嗘圜埠寀栘궈黔ú½‰å££å¨§äªªç¶¨å²²å¸·å¼¼ñªªó²«ð»ºÄºÀÛ¿Á߯®ÙɺëÁöÅ–çÅ¤ãÆ«ëÄ£êÆ©êÈ«è˵éѼõͦñÀ¾÷ЪúÓ­úÖ·ÇÇÇÂËÖÅÎØÊËÔËÒÚÙÉÄÐÎÕÖÑËÕÕÕÓÖÚÖÙÞØÔӨרßÛ×ÜÜÜÄÒâÛÞáÞàâåÄÄåÇÈåÉÊïÎÎåÏÐéØÈåÓÔåרåÛÒåÜÜîÒÒìÞÐìÚÛòÇÇóØÊøÚÚäßàçáÛôàÍñçÞäääççèíâãèçèíéäëëëïïðòááðêãðîìûåæþïãüééþõëóóóýööÿùóþþþÿû HP µ‚*Lxp¡Ã‡ýœ±cGš3gñ,:£ïbÅŒÔô œ¨OEûQ )Ðd¼–ãÅ# ±ßËš8 ÞÌ™s'Oœì~æl("Ñ¢"UX±©Ó§P£JJµªÕбz¼ÈµkW­M¿jÍŠÕ)Y‹Q㙜ȶ­Û·pãÊK·®]»ú@^ÝË·¯ß¿€ÿ]:˜°B}nTÉUãÅ•m²S»–$Ƕ%iJÙÏeÂÊÝÍV4éѦOãõi¸ ÒÖ_Ã68[¨ìÙ·uÊ(“uB‰¼+NôÚ8äD›M)N¤ÆN";}Ow®ùü³ÛÔªébÏ.w;w¸yk»ÿO0wkóäǧ§í°-sÌß/g›¼y×™“! ‡¬ö$J‚ovÝwìhó 6á¼åm-È I¾á¶^?èVá„"eÞLjÔáq 7YK"ÅdßF±•™D™Q¤Ò~ÂqÆ[L ÆŽƒu…#J&ÿ×å¢ïÅø¨[rJZ8™p–*™`£ë¦c~'yuEª¨.«{nÚ¬Q]ùéÔrŽÕêÑG2é'œobr·#+á`ã7þY,wÇŠ—,NïÂË쨡–º›M÷ª ~2ž(QF^q„Ÿrfü$Lºz ¡ +—6öôl^ æ“ó¡¹ÉvݲÍ1c€0ƒvPÐc¬ßtcwª,—í±ä]Õdˆ©"[m˜&õÖÛÀÂ-ù„.(u6väOA¨ÁN DÚ …0Ì÷A†ScˆàM²4¬Mí RƱD?÷¬$˜$CÏßi 1‰Éiiû0>²…Gì(èÉ€„!H!yDvè€[ìV×$0XÎò^ÄR•ãÊ3}$µr-×™ãÌhN³šÏ\ 0ÿÍ&0t#P .D¡B`š÷Ìç>ûùÏ€Þód´LèBúÐQñ-x “@]¾µ$¸“«Ô°a˜h$ž1²O;\‚» Ÿ’Ræ0;±Õcø m°ÆWqA)ଋ­X8uú]Øé–Ê8!c/­)½ ±Ki¯Eò©WÇ4£ÃèÂl=ýlÄY&ÐD‚ áÒèã«KÜB² kîN¹Öä´rDÁ]¯˜7÷Ò]yÈB>£VŽn¹Er‘‹ü QŽ 2Ò`ƒÄa ªfÇ5ˆA(c"¼Èn7(±D(««»‹7®½Kî¢4K=ñ,ÀÈTX¹G‚Έçp6Â…ä">ÿøNñ…&$6.ªem +ãFØ=…”e}nÌF\âhƒñ-½·ëš´­³ZB™¥Md¥‹¼C#ϹH8ìý¾fSÐ6òä"X7 ‰«­ùÖ‘pǺS³æ‰d…^N³ÒnE9zG’î"Eí‰"Û+Áaoxtäê]G$äX6ˆ bXƒ\â·…S8A¶;G{Ï«\qÈÝíãæÉã躥>AŽ­š s<“§ã<àáA†Ã …+D €“˜1—„kÝáÿ6ÅžùðZ9/j‘aÒºÒªm¶Ì<üìF*ÈœÂôþ‚0?c,±‰—Šÿ( d‚D™ K7|‰PN„hš=R­É‹³ò,Ž,æ‚»n|ýW9ÀEZÃÆ-Ct§ õöS¨Ðw”¥ áà —â Ä€duõÕ+X¥:gkøçbÆ7qÓ"¶³=°UVÓ½ó-\²nñÀ ¶æ€ TT m ÄÑT Wj– þôl‘aG˜„Ò#|Ä—'¨‚j2XRcieCWÈ%ŽR>V“;ŒÒ‹1aÐ-„ ¼ k,¯0¯€„|Ã# uEJ(MF6ø„<'nŠ3…~x»a¾±=‡¢(e„•L$óˆdÿØ-vts©±Mª,Á¢J,À.ÀPÚÁã„y¨ô‡öGkÃ…ûgy8ñ‚ŽcKÁŠ.¢LÂ;""Ѽ° ð°¸!T:£J=Â#QÔKh„¢†:%x`§h‚—g`ý'F«(2r^l‘6ÂFD4"'² Ý E°|€&Œð#lQ&¦#B"È7.à¬`ŽÆÈ!È ßð7P茨ˆ‚g•Š5BÊ—km!5ô±`4Ôå#O^R± Z ¸PE e—È–È#þd.þô œ‰ UŒaÕ\òg{H…ò‡RØŒ@÷°(‹Oò1±ÁãCÌq R° Æÿ Op7pŒ ‚°€?O Ì é, :½â Çpp6y›’vö‡¦øbüèsüw…œ5#œ¡r£J•`òRp ª=€` ‚´Jõ‡¡à%À)à;# &P5`np'Æ £¨"¥X…&y’ú‡’ܳ/[ØT\9Y[’T}•|Êñ[ ‡ jOjÉ–˜â–qèO—Àp'àÓÀŠ`{ pa|%I•S)›Ì¨’Å)-â’{“ Vi¡Ä8©“û³K¼’~ñ“ ù I«h¾ê ¿º£CqM#}Æuëu-B†¨ê¶÷ Ї0[{ªþ ™1™XÀ:G •·r+®T)‘˜››®ëj!ˆÖº®ÛºT_\6ƉŒp5@ ð pŒ gf ) gg–‰´ðg”M`  +·Î hŒ`‰#`¶–hÜ‹fƒöºàÿ¾â[!?º´}–ì 2#«"yÁA™”|°0`à ±'Ú‰¡Ö­s±¶mû¶ÑºA{J¢P°šX‘äš3;c,ƒ9›ãi©V ¸¸ÄSµ`ænᡨð g[/ð… ½p -`¶™8u`pt‘³;Û³? ±ásá í Æ`.ã·GÁÈ.Œ±¬hšºXÉŒÐ!»’Ó ·ž$5{‚Ðfá -•¹f;5`m®¤°¥€;Ô0 Æ€yð6,i1<‚BDK)GË:AÌ´Cì®k¾OËSòeþ! I¼;Ïÿ‘ ¨¼˜' ³&@šÚ0„­Uð ¿P lÈ boà—µ* ·ÚÆ›gVÀoÁ<7k Ì£&yè™cÓÇ|»º‘ÈF,ÁÎø$†[ZMãc0õ@ª@š­p#¨º l8Ÿ¦ðO›0I8sÈÔ`Êý€hp«vS  Œ° ™°3€4—2H&ª ¼E¸Ü±’ê·ìJÁçD4ÀÜ'p3Ì#RÌõ0 4ëáP»'° ”¨ )¼Ìœ(ÀÀ£ÍÜܨ`s€ r®sw[,ªp¨5½‚&ëx‘#}Hõ<È÷¬±”ªÏYHÈ 6(SÿËžV£Œ, ³€œ”“|™ŒN apÉ(0tpà¢LÊK¨ •@{ÆÀ"PÕ ΨìÊ®p­#é ¿à ’=VÕ+™’œËI)ó K+˜L˜‡é´lÍhþˆ¡>”>äÓÄ—0 ²°P0Å'`JÜÊ àAP€*pŒ€ ×Öl”bÊyÑ€ – kå Æ` ¢@«ÿt?<2~™Xµ?kˆ„•,N¨Ö0­ž-Ý®€¬Ëy¯aÈ´cå³ & ±<Å£“ Sœ ¿Ð¾í‰0àØ¯Ü<¦ËMmá Ï›|.`ÄH:f¢ !ÿ})›   `Ô$ªÀNÊ« Nk=¡m ÁEüÞ~Œ°(%²Y!G¬$Ñ ,0 Mš,À ‰p)@®{ª ¬€ªªà ¨Ê$°Ø&ÐÔn1J7RJnagV½œ ¥£&‚ô–Ié0¦;HqqÞ, ¤‰ÅÞE#»,ÛGüÒpíÞ嶘-î<æyrŒ îðß‘|Ð¨Ê ›„¬ÉÚà¿=ÑégÑmMÆ wxáµà‘ÊÙ–™Ð†ìð Hé+ÛzªóüzmŽç¢H¹Þàᢺ. ã‚ÌÒ}ˆ–Æ@ù5(£ãÆT˜€ ñ€Ì¤É5MäÝ5HN°#pªMÿÛÜýt#Ì“‰á÷Î =±|¶,€.¡ºÝªÚ)ÍÚC kÏqþâ;ã³¹Þ'…ˆ…±ÏmžÏ¨¸o—|G¡èk#îàä {ïk¶.?3+³ÒD³5ÿ+.ìJmAPѵ–€„é½§y;–ëÓ([·tº¯‰NˆŽ^:$d­ߥnîäõnnŠ6ÒXô¬ÍºŽžªÉv‘-%sé‘í¸ìná ©š‹›íØÙáá`ÖCIÒ)U‘ƒ0OOõîKR¾½¬•±b á¾¤Ë™$îA/‡{Šsq‚ð‡U[ÕUì™Ð0þ°À­{j¶bÏ‘+,ž©‘³œ -“´ÌÌ¡K»<½šµk­]ËVÿJ“X±°rªZ5%;Á½ #Öxö;cÇØ6|6(¡kùÅÊMCÖ”­‰ 0ðÁ' &Ž-î°™†…7SWË?inÜÚMg÷UÃîG{µÿù4⯿M+§‹*¦ó2q%‘ª¼a……\q¥X ‡2m.rŒ¸µ9d@Ð"±k"X£¸ŽéH"Š,ˆ¸ Áb·°>Ô²ÊZ駆âY©3âÉÏ>jœÙ6ÿJó/È!—„ªIѨlÊJ¥°ô‰¦ª3f"ƒ2lÈ2Ñf ð:±¡ApóAÖDŒ;k*Q™¿2™ˆUŒ g"U¸™®:nΫ«ÿóÄ“³&)£ 2³†Š¼ü>ÛL³¡´DjK"[Š”É •ÀQ5Õ‰K¼“·ÊØ!““3EIS½5U¹†nøpQv‘‹@TŒÎ!Pnd§ÞÊt¡0÷XIQ°\àõÇlº©¡›ŠìÌ>Ðvòq©Q[¢¦Ð>-\RC5Ü,óÁ'¬ð 7t×ìIBÒWv¬ ®7ð”Ž2Y…L2/qƒôä™2ûxe’9¥Oå’ÃÅ’Rgêy´ë¢Ê*¬rö=x¯ÖL° zÆír¯ðE½Qez‹±hµñ¦ji§UMä û±é™¯ïÎi%j>ööÚ²K‰óÎØvj¨Ô týb¹‰2Òì$ažÝ%šEF "1{]éqâöíW$ž×à'ÓfPÂãF”U KV¬C›eœ0NRôØ€<2õ˜¾Ÿow¼Ñ¥½öR‰¢ô2#É•?‡3æ"mNŒuV9 $/È#ŽšÂ?^! /áaVU¦çì±ÀÃ#ŽÅ8c:rYK#`{ÿOʶAÕ½ä‚Z+[ÜJõ5¦P…+da ]øB²°n_›a m˜BÎÃ&0Fa‚JôPˆB¬„ !ÄQ‰=”#!‰%*1‰>b£ÈˆD0¢*XdÄR` °0Â’AX¦hÅÖy­R÷©T “´ÆªÐn¤aãxG<¾°mñã#fŽ”1ÝåÍwÀ{(ƒ/®É¼¤A8AÁ-2MïE—°7±ðp"_ó^M¾×Ovk ’ýÔ‡-º¯}}LÐÜêf·÷á¯.w1ãÖÔ4¼<`’”“âÜÓ·pƒ¢˜ „1Á†Ü¦7¤樖9¢¹ââ°‡Kÿ¤¾­%"3Ýý¼¥ÔlÄ>®‰Ç)Âι}b%fÒY>™±cPŒ8ZㆉÌ]¬hõÜ.õT˜ZêRžñ,îR5›áæ7Ë„0fщslók›Ã”¸^éŒnŠ vM×V siDc¦£,SÙ²vÊ.oá%À\Ú–¾t#Åë+±Éø.bÁM –Uø4ÄwóØF'F±S¢l#½‚R*¿Î¤ 46‰Ôí<£¤“¶~(•%Ke*Ó˜~•ÿNUÃnDM6zn ¢Š2©U=+‰DGè¹±Åä>¬Á¨7´.r¹$RŸúÌÉæ·Meõ¯[Õj<5Vÿ±F2²!+6̺ȴÎ*l=Ó R0ÁWÉ5tµ«R;i¶¯1ãjmÆ6Ø‘–&XíGý«Ò§Âͱ0,¯ +ÓâáË’À©Ft*–K2CAÍ“(æ!£"Õ“8YêÉÚ±W¿â*¡$ÒT¯UÛ?æî¶Z§S[ëžµ·rú-GD± €˜[œžX9Ÿyã" ;hÍxÚb†C˜ÕsC!*Q¯u2¯o¬[FÓu)˜éµ4Öš”`2RO]Ô~‹e,‡Ï»šô¶w½ê­Uxrƒ Fø=Ìå–i¡Jú×ÎZ–{jüÏrˆÖœ¨Ö.j”‹Ò–µßÔˆƒWÙ sÿ°¶ç´æ;;ìáÆ~xÂeñzEü¤ VèMˆG™›Îˆ7ªäX.© í@4-³ñ." ƒmú™íÆ’Tغ™—”"cYS $Ê!«RÏQ&4”ÑKå+2€\N•yè?4aÖ0]j˜ãí¹ ²Jœ›ŒÁ¨&V\=ɳEUc²Oò(§%ùÊ»©'“7Ö¢ q¢%[+F‡ÃÑ7ƒ´¬$½ÙTUúf—ªx6Í‚N‡æ®ÌKš]êþùÁd»Û]céÚr¹ZÐG.´v»=e¯Ú1W>–lC:ˆ¸3jP3Suæ4¯ùmF¤§³)çµ)©ÎÑÆ³3ΙëÚÿJáî~^M”ƒÚÛ†1¢Åíðû—×·ÄK@¿1³eNÜÄŠN}™µ¬Ws› LÍ}|QeÖƒàìèÚÀ- AoÍÈß–unAµ[?œ·‹‚Åd\à‰lðʘøhI‚®Q,‹{'¹g8$Še8¢Zã ê ›WPÞ¤›%u}8 Ö1Y4åÔsØÕ9Þ›K™Ö×yÎu^e±µ¨G}ÉŸ±^¤#±1Âò™n ·šÔ™×Üæç¼kÃÝv·?î_Ui§Ž×lå°Ÿé:T–í÷>^~ïÿA;áÕ•Z#>ñâ^¼Lñ2ÚxÔõñ¬¸·°Jù Ûδ˜çªæ;ïyš§6¡Gÿ|éÅê{—ºt·0ʽ™¼‹ÜrN¸FïýÉYëöó¸?ôáÛ|°ºhþך'u˜¤÷(\ýQÂN›Ô¤&ðì¹F6ÏùèSá ·þÛE?zÄ/C‹¦9tœ²ƒj†#Áµ™6˜Ø üp²“9Uj>¼ÜC2¶³?у»} æéžùÉ=и&èë mû·ù“@†{¹ë½ûƒ»ïè8þó‘÷“½µa5¬»áðy?$Á郿\µ T¼d$[Í9*»“? «­"³Ax*Áì:Aé›@Ã{¬"¼@^É@I•¢*¥²B(ôŒûÁ£Bl>ÿ6\)-äB8\ýK$NJ‘ј´K¡¶²YÀ¼ @…+Á5Œ? ܽ!$½-ìBîs©¬iûX?л°Ö3§ôë&ñ3ÁmÄÂs7\ÁëKĶkD2 )¬<´°€38*ÄÄ+LÁV¤¿7dÁ8 ÅS„5™a‰ž˜DN‰¼*T™<úE` FaÆC+:FdLFe\FflÆdL#bŒF9¢!8Š!8¢#iL!UsEÝãF ¬?"œEÅtŽ9>É;™”éEAÓÄ ¬’NÄ¿Dþ—¢GF¬E„³¼¯Ë&)¿j) [Å@,ÇW$ÈHGDLJ#Ç‚\¹"C=»}ŒÀL¼=ÿNÜD¢à½OTHqcÈnü‰©â3ö{GŒ„Ç’¼’x´Ç|âH[óH'ü¦T È“ÄÂBôÆš„EO´@YD<—¼É•‹IVüHA´H“$I¡ÐHÜHžÄÇLq™¨I™4Jš¼H©´ECDH[SIߺ¿ž¤J¨zÈ‘œÊ™ÌBôÊê‹E¥LËqdÊ>³‰ȆlG¢œ’²ÌÈCÌJP\˺¤Ë½¬J«´I³ÄIy1­\””“®,J±äK¤È¸|I¡\;¬œÇ¼\H¶ÜFƒŒL¹ìK²ËœL¬̎¼LÌÀJÎüËQÌœ ǤÅÔÌÇØÌLȬMŸ”L´LJÝ´ÌÙlKÓôLÿÙô˦\”Ÿâ­ÈùS@ T0T>EÔ&uRÔôP]TFÕSGõÓI¥ÒF=Ô<ýRJ­TA½TL UNíTMÔOÝÔQMÕ=•TSMTE}@íôTWýSV…ÒSmÕL}Uù„T[ÍUZ½Õ^õUT•ÕYÖ`ÕU5Vn+ÕcUUbÖbV)EÖd…ÖfuÖiÅÖluÑk}VjõVmýUe%SKUn5ÔrÅUkE×ZíÖm×pmWvW4eÖeMWuýV]]W}Ý×~5×j%UqVwõ×¥×z•WrÅ×y%Ø‚X…ØBmXÿ~]X…MX„ ÊŠÅØŒ5Øx•V ؃Íב}X€…W.%Y‘ýX•X–UY”}טµ×{½XÝØ›-Y“mÙ“•YšµX‡­Y›eÇ Ú¢åØ£ÙõY—}YŠØžmZ¥•Ú5%ZœµÚ«…ˤÍY§5Ú­]Z¦Z±[˜ [²ÝÙ²5Û¯ÕÚ¬u>^}Z…Û®Úµ=[´½[¹[¤…ZžíÛ´[†ÍÛ©õÛ¿µ[¯m[ÿDÜÄÕÁ-\ÂÅÛÃÛÈÕ[®¥\µu\Ì…ÜÉ]YÎíÜËÜÆUÜ6|[Ð\ÃÝÜÐ-]ÓíX¶å[Í¥[×U]ª]ÝÌ}]˜(ÜÍ]ÝÝ]Þí]ÿßý]à ^á^â-^ã=^äM^å]^æm^ç}^èÞ2ø‰é —ê •ëMìÕ^ëí^ïÅÞïßþÜÞ!ß1_þ@ßô ßòEõu÷]ø•ßþì‡ù-û…ŠümŠýå_ö-þUŠ&ŠŠ6àú=`¡P`Ÿ`àpàþßóu_ ^ß 4c@— • •öàpùàáa>áúMa^ana~aŽaža®a•?(@ƒ–@ƒ0ñìg0€–ȃö7×ÈáøƒÚ2€àá$.€%îá&Í?Èqqb,î#6Ô v¨^}8ðâ~0ÿ)fb¨8Õ0Ó'>à+Þ& €êíâ/&1®cø4žâ,©ãø<öœ8Ö_)ö74¶ã"þa,ƒDv‰<€âB^@ƒ?€+€?Þ=P€<(P^ ve4€~(ccÐäÕˆ‡˜dˆ‡<àd)»€êÕå?jhå?8€h 4h a6†:Ö‡@4˜e¥Pf¸›2€ ®cc(¶\®Þ2vÈ`fb6fd&c(cfvfh>Š8cxçqflÖfæä\fæ2Èf4˜g ecÈeq"öç˜p†cî€d,>eØ8eÿ4 â~$28€²1†x€)Š g” j(€†\€éç–Xh8Ï €Z„ä„.€ fMNhPc¢æin‰l€ €1b—æéÕéŒa‡˜žéšÖá–(€é…ä?àiŸ  ä–ifÖé£.¥0,Öpé~€è§fæF!kÏæ0"^kUÖ‰<°f¢n š^?€xå…žê¬n @ëv€æ¼î‡½À¾ê>”n‰¸èŸNèm"€¦hØæ£0jϱeŽöh!fÂnixl“Îì~Øì¦°ì~èå€?˜èÿ—&m¢gÞb¢Vmg`íÚ0ãfÙ¦íSAî´>€? âå&&Žì­ž0Mnejì~ÀéÕp♮喈n¾€Òdì†DŸ¨ì„FÌî<Ž Ûî‡TîcÞVè-V Óvbj €<8åAh¨lg€æ˜^îù† Û~gvæüvëU3€Kþná6âöl¢Èƒ(–ˆ‡ˆe ×ìòãpÇpgðav˜îÕ €ëÍlj¨kZ“b èü¶yêŠnå9™.7b,ŽñðnéR~â˜^ffo™°mRFbÛîi¨0mHq¢6i.ëÖîºé$Ÿi&§ï„6í¿ŽòÿÁþ ðpdVršÆr¤>ŠZî`èã5óœˆs¡–âÆ†o6orðqxþ]~gþøkPrqç^ ‡oPíjæì¦XôT6A/B/ ïŽëjŽ /ƒ4‡Š'/föñìn Óv ð†pWÞòÙ&ëíO×r¥ˆòžNóRÏgó#hgYÿtV?sŸ(€wöq ô?èôOÏ bt—0oe§õ—0Ýõ·<ðî݃befcØØv–cöZ—ë ¾vNv:6€ ŽîAž’-Ö]îîXR‰o ÞïZßàx€h5f÷0׫-Ö®wy×’xÐ]&x|—ð£@ÿÝ¥ÝÍ`†Ï ˆÏ]Öø÷˜øîxÿxy‘y’/y“?y”Oy•_y–oy—y˜y™Ÿyš¯y›¿yœÏyßy؈î Èožz¡úgÞàPí¡Oz¥·ù¢ŸjÕöôFføÎƒx¨c@®ò…mGÆwÐæaŸ§†Àâ/÷áÌââ¥Oû¤æŽh>€Ü–é€_'h˜e¸olk~æÇPÞû¹ïe4¸k'èj€¼ÿƒ^¶ûW{È|û¶{Ƕ{f.åþüžhì°§zÇv†»>€gÆâ£oȩi‚¦pôÖíܦtXb‚–|ÙŸ}‹·f§?eŠ>zÿfÖr·{·{àí ~æ^Î}&¹¯f ÿkà€žÖmÚþèoúïöhÃ.i’"†c4p†£çða~pcýU>ëëgfU®æ³Îûcnì•€î^&a韥§~ݯæÊçaí×lçÏ{gˆ` ô+£° š~Îö+ "Âóü1Øï#È"G’,iò$Ê”*W²léò%̘2gÒ¬éÒXvó”ÙiÀ@žeþ|Œwà§1Ÿ’"Ìcà€>¥A…Fü“ó㟟D©]µéõ+ذbÇ’-kö¬K„:Ѳmëö-ܸrç²ÌC ݼz÷òíë÷/àÀ‚.lÿø0âÄŠ3nìø1äÈ’'S®lù2æÌš7sîìù3èТG“.mú4êÔªW³níú5ìØ²gÓ®mû6îܺwóîíû7ðà‡/nü8òäÊ—3oîü9ôè°©Q¯ný:öìÚ·sïîý;øðâÇ“/oþ<úôê׳oO üøòçÓGP&5²ùÇîç¯ÿ?€bõÖ€’U‚õÝ7S_5èÕƒhà„`EXÓ…˜ ‡ð-(S† VhሖhSˆ –•bLvøaL,Â$ãK4Öx¢†8â§ãŽc¹È!Œ3ò¨â1i¤I*Ö yã’$ ¥€+Né’XnØ$}Ojÿ¥ƒV‚iâ˜(^ù¥X\*Øc•ešé&›mÊI!œ3©ÙeœRÎI'Ÿzîf"úx§|^¶”%Kˆ®¤è¢g&*æŸdFj¡…æ è¤ofz)¦}vê©W•Ægè£"iª¨¦º© ªº$ª‡œj ª¤~Úzk­ŸâJ)¬¤6êê¡Òš#°¥²Ú*“½ÊJì°Ìîêì³ËJ;­L°ÚGí©Íb»ª¶ÈFëí·Õ* n®åš í¹èÎ.‘iŽÛn·ÙÆË-»òêšî¶ÇÂ[/•úÒ{/¾û¼®[Œªd0JŸ¤ðÂŽþZìÃóþë[|1ÆóPL¾hJÜ/¿,ă¥1ÊsÿL.Á ìòÄ0ƒ<°º5¥|³Å+¿Ü2Ï=wLrÉ)1\ÒÐD“…3Î:Û+³È!=òÓNëïKH߬tÌ5ÿ5Í,ûìõÖSŸl5ÊXÏÌ4×]ï¬uØ;lòWd—ݶÐo»tÂÂJ ·Ú1É­2Ýyã-8ÕM÷uà„‡õwÆfþõÚlGvâ&=Òå˜ÍøÅާ ùÒh‹}8â”Onºßœç\¹Ñƒ7ìzë°“”yH´×¾¹ê³>»ÝuË®yï¯þ¸Í¹ëŽzé§+Ÿ|è 3ÿ<ô.üòg;ýç’WOüî¼5½ç£‹Î÷øwŸ}÷"ÙÒúý€Ÿþí¿>ù×sÿ<ö,½ÿýÛ÷ß<üâG?ó 0%ûóŸøì÷¿üÕO{ $ ÔÊAÒ-ð¾+à#8A î­üC_?Ò¾öõc„Á^XN Â²°….|! c(ÃÒ°†6¼!s¨Ãò°‡>ü!ƒ(Dv‚&C<"“¨Ä%2±‰N|"WXÄ™D±ŠV¼"³¨Å-þpŠ2á"Ã(Æ1’±Œ4ôbL̨Æ5²±nô!aòÆ9Ò±Žvc_rÇ=ò±~ b]òÇA²† dK ©ÈE2²ˆdI##)ÉI^ñ‘+¡$&3©I@q“žü$(ahI•„²”¦Üä(SrÊU²’‘©DI+ÿc)Ë>¾ò$³¼%.ÝXK“ä²—¾ã.KòËaÓŠÁ´`;˜Le*Ž™Íä`È’2P³šÖ¼&6³©Ímr³›Þü&8Ã)Îq’³œæ<':Ó©Îu²³=AÉ;ÇϰÌ,õ´'Yîé}î3Ÿþüg\øiÒ„ 31èAJϲ 4& …ÉC!:—ˆ¾„¢-±è4ªP|nô+]ÉGA:Qʳ£5é@I*–¦„¥-KRÈS±Ì4,5µ©LsªSšî”§Òù)Pƒ*TÞèà AC €—™ÄÃPj?òTgÔ¤ SíGS › a*H…êLŒñ“¥Dõª4ùC @ÿ”¬nU&Y+Q¾ºT™dõ;1ëA“ª¶ÒäK•ªtRÔ„´¨ 9ÈG‹Ð?LÅ À;»–‘ØE;€c @“Çã©ìO,;4`ö yª1@š=ÉfÓJ¤¢ Îølhi‚[4 ¨UmX« ZØfv³K@N@[ÑÊ„´b%€o—\˜ˆ:IíLÛ§Cm­ ,«åu»èîwEb¼3e@/vµK4@´Êgi2€ë€¾U›»ÄQ)Cyé*ÂV¿  PŒÿöÀ=;¨!a7$Áymp?ò;“ÿå °…er߀FpL²kÝíÚU`ÇËúúŠ÷Oe±N¤j£ «¢=ÊSúac“8C´ˆiæ*v à'ïTkM 4+š‰VÑГ'³XÊ/!@€¬\yµ1Ñ2AÐå~ CQî™ûqg™8d †Ú<“$·ö¢­³Lr¼b<·6*Î`ÈKæÜÿØÑ6I C‚ÝE_z$sγ¢rPØ5Ó¹éŒÒ]¬xø%y5ŽP‹:Æ~ê•QÝhÖÆ°eu–íÊèÿÖ&ì¥FZM]]³„ ÈšÝj—(z*Oæ°3 iæRÿÛÚÆô;ãQ€…ÓL¶oP¨ÑÛAï÷#(FزÿëŒDÅÄ3‘jž-Õt¯;&úvgß=hac–Þý°7MZü‘«›©Þ¸[%ììxá1ÉñzbcŠçGÈÛ>jyîqpÿעθ’ûíéC³wÂNtLŒ#¸Ó09€œj@žmO ]—ë(쥹lþ’Ö¢ç¾íùÏc²j¬´üå1À}]Žt¥§…ÄEæ¹C¢þ’·¶ Ьiyëæ–HšÂiŸ.É[kâü¡ìgr[âR%[3(bõkMè ø`ía©Þkb |äïf¦îSðBxÃÃÄS+ñÉÞ±z”­:>ðØêä *ê¬@E(Œ‡I<Új 7#øò&©{ ­™Òë# !ù,h_(‡&&&777DDDJJJVVViiivvvMx¨V«nr–|x‹yv–e¦i‡®eˆ±w†©p±z—º“WWœy[œ~¥]\«|\ºM©cc¬m}§{e¤ss¹hg´esºq|å};Ù[\×]`Î~AÚlLÝgT×vMÕxTÈgkÅltÈugËsxÚfgÐkqÝvhÙyxãWVègKäcZërIéwUäfeåsjäxx‰m‰…tˆ€{”˜m„™uŒ™~•¬x‰¦}¶z†Â{…Ô~ƒå€¹€Z¯Œ¯v²ŽmÖ€:õ…æ…+ç‡5óˆ%ò‹5ò’;͈G̉SÎVшFÚ‘NÍ’eÈ›qÔ‰f׃pÐ’i×–xΤ}ߣi×¥wêŠEì‡Uè˜Kê›YðŒDñ”Fð›Véeå€~ì˜bê•vñ [å díªvî±}ô¨hð«pú²u‡‡‡„—–…‡ž‰š•••ˆ‹¨Š”¢ƒœ»’‰£”™©š›³… ¾ž¦¼¥†š¯Š¨›—º€»•…ªŽ ¬ž¯¬ž°¹“¡§§§ª©¸¨³¿¸¦©°ª»´°®¶¶¶‰£À—­Å±Ç¨¹Ì¸¼Ë±¿ÐºÇÔÊÆ‹“Êœ‚׈ˆÖŒÝ“ŠÓ——¨Ƭ–Ñ©„Ó©‘Ó³–Ì««È¬¶È·§É¶µÒ¥¥Ý¼©×¹ºä㇈䈅䊊åçš†ä’“å—˜åœœåŸ ë¥…æ ˜íµƒí·ˆíºì¼’壣娧䪪縨岲帷弼켰ñ¸·Â»ÄØ¿ÃÓ²ìÁœøÄ–êÄ£êÆ©êÈ«é˶éлöɦòÁ½ùÒ­ùØºÇÆÆÃÌÖËÒÚ×ÅÆÐÎÕÕÕÕÓÖÚÖÙÞÚÖÒØÖØÞÙÕÜÜÜÜÞáÞàâåÄÄåÇÈåÉÊëÆÅíÎÍåÏÐéØÉåÓÔåרçÜÓåÜÜèÜÑìÝÝöÇÆôÙÌöÛÛåßàåáÜìàÔéãÜþâÌöæ×äääççèìááèçèëéçëëëïïðóèèþñçóóóýööþøóþþþÿÿ H° ÁÚ*ˆ¯áB„ø´áã÷oµ‹/jÓ6oÅü´e¤æQ$µ7ª4ÈïãC‚ø^Ê\s¦M˜7s L¨Ó&Ïž2})t¨Ñ‚E"©r#FŽçáë80¥É¦;vl¹u ?­R ¶KökÙ³hÓžõ¨¶­[³oãºD¨taÒº;ñ*¼«W'ߺ$ç9¥Q#>7~ÜúõjÄŠŠ~­ùUêT’Ájž÷l³çÏ ;vM:ôèÒ¨çþû«”õQׯõbM»¶íÛ¸™>9²7bÄ&?Uy’xÓâSŸ)_μ¹óçУKŸN½zu©¹³kßν»÷ï´ëÂÿÊðÀ“ŸfŒòßÔ‰•·fÕʳ{û“3ƒ>º¿hÿr`hª”=!˜`_­ÉÔPMÊDCuä[q•¹§’`A%_S5DUEø™6`ü¸ŸŠžÈ A 棌/åX¥R8jµ¡E]6V¢ÔØS!’–W&²øM/Ýœ³YŠ,NY¥f.Ö¸š–[r9£—½ÇOJ]ö6•QFQGS©w}_‘T_BìiClŠÕä€çÀ‚ÊŸ«ˆ£•WjE¨ŠYÖøåL‹2Êå‚ ¸šxîH—BGdŽ‹M("š®ÙÞKñyvhiº âŠ.~®"¥¡…~ÿvꀉ¾Ø(QÞÊ k’ŠôÑT–ææER3¦}‡Í“¨‰Ö@K2¹â‰« òª+¨|Ö¬Ur `­»‚)î£7±&&™õ)“E–Pe\ÉÙ³9VèÒfÒÊzâ9¨¬¢.¨t³m¬¦|§°ŠŽ›0¹å¾Ô£Žê•ѯMùT‡À=È^Å1•jå‰~êrN7’3°Á'Ç n_ºÚ•+à ¿¡{á:Óe÷®WXF]Æáq#q”ǃ‚EÎ+¾b2hßüé4/E£ +Á+˦°­0ûtõMî6¤Û›¼ýÄ&{ØüF>CïyNµ«°ýêgäÀ²Ê+¾|,µ€T#µµÕ{gÿmPË{ e„ÅM5™Å¤Õp$-´cŽÝ©êÒQå,z«¢æýUàºßAõ½®yî~8z"*nao 鳌´»áNÔóø)ð<$Ã’ùÝÿå £é Oz— Ï”fê==’²CfE\á$ÁãÌ2Ä(Ãd´ÌÔó¤ õ<¼ bùæÀã­²ÞZŠÎ~ûÇGÌà˜”:¨Yz) äz@×Û<Éh†<æ1Ž2<á ´3FðæAŽ?ÁÂO¨XÚ‰87 –Æsâ1^lâ8]ælëÂL†„$™ æ*»¹DÆ!Ày´¡ dPC2h79þt£ZýÚ]hž%»IÍ‚¤Á`ñÿ’GD¯/ðâÔCò#I„* aJ›vS¶‹†0þpF3ˆC5Øbµ¡ú:B]èB‚Ÿé“Ó…»Lˆ,b¸Œø7bTIb UèÇéf0(ÄHC<Õ 5<Á ¶›Ô0Ž1ÞP:ôLª\± €¹*enÞ¥äÈ7øÑñ}xÖj˜©$вˆ SÈA&K ò¸…Èàb´A ‰ Z?«(œ‹‘ICoÒKƒ‘i…¸Ð&ÀÆ©hP€vXÁ rð§ñS£oå‘™L‘"¯‰rJ‰Gòž]QNRÜ™StšOí¦y6][¿õ¶Žlƒˆ4„Ð͇HÕäH—ROŠ´(–±tªì¬%W¹HM6µ8Ý',•ùcT¼v \à¢n˜T#/ËÚŸ>B+?ÇíÚWcΓ®  -ñŠ8¨ËfO„ž`°Á• aªQaG¨H+ÿÒlDýSNJšhP˜E‚pù=Þl£-R*Ëà9U§…]ü G^ùjªšÄNÌkSг ½ õÈá#!;ÆÒli…Æ#P\Ò.Ær7ÓQê25ƒÎý[Ií›Ú«^ ¶fãÙŽâä]Á†XE6H¶ÛòÂU¼xÆO)p‡(LÑP†ØßBÍKÊíd]ï{¼»à,žTÕgÅ ç˜14I;+Ž5ñ±‹ € S(_ƒ½uQ@M#ŽC’ðSh w³¶i¡ê )ÇQžýl)ˤ#{ýC#$±²W±SmÀã0ˆPT—[båE7ü”SHÜ¡ÿ ^ˆô 7tøJI¦Oˆ›êdC¹F'• )Ù#*ã2ÁGbì©q ÃËÁ NÐ`kæ¡ZùÓ<~ºÈ7\A bPà‹¹ä=ã·ÏÍxVžåFÆÁ™^Ðb-kßld~F(0‚Xg9¤ˆÁ&–ƒH˜¤XC¨.üúÙІ6vXMíj[ûÚ·9u3åSϾ²ÅglŒâœÂÏe]„¥öšÇ;’Šax ^à,9«¥f6Ïx4Q=lC³Äxƒˆ±ÙΖ¤Ëµ+ªaæ>Qâ‘T÷³J¢?…$˜ˆd¦(Ä1šÀ„އ ðõgºQìÄ Rÿ²Z' Í.R aØpÁ›T„‹X´7ÿdÃïHÊ0ÕlžÚ‰ŒÕéÁÅp–¾t'C䞆‚?àáßóàF$‰htÄÇ()jƒå¹ÛQžk¾L÷9ó`7;ea²i,xá(+çÎ<Þ± ((½éKx-ÜÐ…â~æ¼é}ÄoAC 5(ƒ3¦©¯Äd¿0—¿mÑñy“Á1ÄSCZÖØLx{\×㇜Àz'”Aé1ŒyÙ#J=°Jè-Ô Àg€ý‹§¼©‡8ââëÐ9íC<Ÿ:e݇'þ„Vb¨GÔp N8äë—À†s€‚†Ÿ‰FÿZà´à43ô¢Þ;ù*UžFlÇ9ÓþÔœtm{‡œïf{×wLçP°tðõ a_çÀ ®à ¼ %ÚÐ+`¢+` ¡v0Ç{wsvpG ¨Lw5c2@×.e ÂGÚ%SQ¡»ÀL·PPC‹ÔHØâ4®0ßB0a+€ ¤1È ÞÔâa” ø~1³pMög=n¨T:!$X(=þu1‡! Р­GK·Ð¸äåã ç@ØÂ M³ [ šV6ä4ýò„ëTsR–s‚8ˆógRwZH‡H'R'YÿV!Câü ’€—p;p·PPP0çÔP@8Yô¶f8…§‘f¦XiPˆjGˆÄg|£u…%‚J€#JŸÂDE§$úÓ, ’€ óàkà0G Æ ¯0½Ð½pŠET—¤‡Zi‘‡䊉Èg²‹%F‹Ñs¯(ŽË¢‹èa'LÀ(Œn€ÆèBާ>åX²;¸p7FE§Ñ4 ¦Ä!kg…9/ðRGu¡B"e‚@w Á`‰àt@ m8Fåó4ç(÷ˆŠZ¡Šö†>rÕÚ&+y|´¨Y#%è^“#Ø!"wÿ÷?­ãò à;Ð_@I ¬² ‚¢©b>dÔ‡¼“9  I©d=Ö/åð;)YThyùE , ‚…¼¸hñRtÀÑ,_pÐ »Ð M@tÉC’N“S 6å° úHT‘We Ø-yy\iF¤•‚vˆlPRÆ&R$—A n° Ì ‡dsð _ BP›Ð‡¾ ^Õâ ô ó€ 9p¨P>«@ Ðàupev‰É˜-y™§›Õ…RöQù±„uÃÅ ì0dÐ<ðíMPð „NÑ—¯0p4u 1ÿ@{€uw†˜Y©˜ðç›áèžô4ކU)sÅD›B–ÿ0\ê óMàÐùO@Ö™-ØÉ;§h “&2Ù0™@* +PòFsë Ÿ©¶•"øá0)™j™å6Å™ÌÀù™¡)„Pš®rš«Ð 㥠R@Ÿ  6¶¼à$ ÝÀ -ÓQ¸™¡ª5ìÙ¡,Y] ‹w’G)3ùûЖIÇzL@—T`—9€—øè4P Ÿ@V  ® i'$°Za +p >˜›Iê(Kš§xj!5óY_È6YT d€0$žp’ÿp”S9¾€ «[Y@Rð'9Ðk¸ T-g B°ÂÐ!ϰƒ*_vꡱؤ¤ã˜nˆ8OŒ† äVü Íà ·£zv–Q#ƒ ü¸f%PY  )@Z0›°@ ~°Dð*Ú0ª0)Áç~Ã÷dªêg½¹p¸HŽÌôG²Jn‰ͰvdÚÄ °€”ZÑ ¯)7 0Ýp&0iôŠ ~‰ Bµ1 CÑú0­•iªHŠªØš­YêaR‹.CR®U8Ù„ûÐ Ëp¨`OðÚ„C`J‰!à7À 9@ÝÀ 08°±€° •82ª°ÔJ°žUŽ»ÿ黪—¢§%u1¡ÒÌ`¨e0O ­ÉKß° ˜  À¢ð®«à ðª Ýà *ÿ³2;°B’ú ¥pª[…9ë7 »°0)?øs!OÁì ËðcPf€ íà«Hƒ tàà= Ž 9¯¯©û¸~è#0ëµ[ªý±Kýh­6‡³¼y¶ ³¶Kô•¨õ¶Œ4s gp¯i„‡«=À`ë´Ð`µ9àš Ê 7À ¤Ñµ^ûµ’[~ò€AˆQˆš Ž;‹Ê_ìÑJ¯“e'AÀ «  ©;«k =`ŒÁ0$°½Cÿ ¾p!K!+?ȵ¤°½ë»Â/FØ¥9˜ˆr­Úº¹øÛ˜zZ:$%@âˆÆâ.Ý À€©°I¾2¨°”àÆ²9å úè4ú¸»£À¾í¹L ÙR³*™ªÈ{¿…m(œÂ·1ºp{ ÀL» Åö ú¸ Bà ðt° ¡ ¥@Ʀú ÒÑÀ¾ ³ÑÏ&Ø€ .`¾¥mÏ1m*¼Å\ÜÅ+AÂÇëÒeÃJ'qêÀ tho¨›Š”!@~Ѐ‡ù úXo[ Ú°¾{ M ¡P Ñ}¢¸ûÿ˜— 4¶äÕ9ö»¡œ»˜™¶Ì+¨Íkk ‰lp Ép¾  ðSCÀ‡®p µ€æ«.0]ÇÇÒú2»* BPé Ï@2?H¹Eõ-‘ŒyùÆ…¸¼Up»ÁÉ7@6à‰bp»20~ œ *çp®€` b`æë@ÀrŸñ¯ÿ`ðM|ÚP 1¾þÑ—ñ'j$¼Õ‚FATÌh{Ì7›ÌwÊ¿’#Vd¬%óÐiÌ l`8Ð Ä@ Œ 1À ß Š»@f Éà`Ðy orÆèù²ÿpÐÒ`Ë€Ò€ÏÒ@ºÿû ä*Úx ©áÏ”<ÉíYÉ>­¤MÄÀW4s»œnà¨P¸À »À!› ÎØ­@³ Mª@'໥x-·ÑzËî ÿð 1`N‚4®° ª`fóàÁó€-éÕN<ýÓA-Ô@ ÐO&)E½?ä–ÔÃè¯y¸ |4,¹P¸ÀÊQ½ 40'075`Π¤P q •PQ|‚-x¹[©R½­"%³—µ×ShÉÆ¬¼ºçbE„­ ­Æm¾i@ѰyÑ2 -é«`à=d B@9PÒ']’ß ¯B аðóܸZÁ Uÿ{˜ ” ¼ $Yý¢-2J£©™\™Ð`ŒÌñã¹^i‚ÏåG¾"ÐLÑÒ Ö,㤵7à »3Ph° v@#ÖšñHk-0"¡k¥ Ë%©®.»±¨œ´‚ ”ÅC͈SŽ0¬ˆvûº²Ý¹'NO0)¥_iM£òÐ|»4@ÑÖ<>¨`ͨ lPã9€ >0$ ¾» L¼`ë—84’oø Þ¬*¨  ¸à 1Q ‘¹õš%þ+ްʬâa¾ zk‚ÔÀZ[±Û¼ Øûˆ»«€ 2@b ¯¸  !‹ ä²7ð Эàô â°«ÿà ²©FÃD2°¹4 þæ‹ÝØÖ+¨Àß6ŽÙF¸Ù`ÑPÏà ¼4r9£×‰ Ï8½ðšþ’µ K^,›áZnÀ]^+øbžÞéâ4Q"B‘&@ò|¨^ºg€»µË –ë‡{>º@ë‰ë ›ëE©’SϰSžÑ@ú؃v Ù| úˆ»&#VN#0$>â§H_ï“!$¢|(ØÖêcŽ)‹H½‚æØ€3ú0½“*²° ²º çtþÔ7`Fy¾ç7° ƒÀ*@bµ xY‚ÿtè%/%ś [òI ¤‹žÞãÅÞ›Ô­œ×Ó Oí×Þ׿ÙâχÁ3yRº¾z»ý~ãÙ¨ã@¸î  +Pdž¡FWþ6ÅuÛà'¾0©|®Cäà ªyN¸[Qú¿Z!L­™¸µ«¯’(DŸ…~­ôý×%lU*Ï4Æ–a‚ÿ ê¬B騯æ›:äšwŸõýݱ¼'óàS†¥€S¾šö AÁÁ½ºðL!ìšÙ`K™è‰’&'&ÉGû´í±í1|ÿl¾Š=¿´NYï²9@’f…Vj¥x}˜ •0¯ä ²˜ü=¤¦‰šr½ú T* ¿ðÿ?Ûúûð}·?̰FW)Ó*éš!ú˜ ¯í” |@ ••o˜E$ JC÷›á Z 2nи!#Ǽr«P-DÕm®†óæuC…‹ªUç&¢böÏ£Gm?òã'ÒäI”üði+‰ÒåË“!aΜ)“æMœ/mæÄ¹“'MŸ?õé‚ÅKã¼…ŸÁBõMâÓ§¾nä ªëÆvPµF¢@a…Hó¢Qxô´+RTG™:Õ 1ÇÕ1^å@%ñ/XºÈI„èp#.Џž®ê(2èÏ“ø$R›‡1ÐÇ=#OÖIæaË )óÓú¬o›0í|îjQT7Vu~J‰‚#h‰Q ÿ´ Xh(@ò «/T˜áyDI¢/Œ¾ÞæØÄT0ëyÈWuë¦Ð×EV/þˆ92çyü´Il™¹»y—ÞÑçTO¹ýä÷0ÁC-— n¿ót­Z¥+jAÚ :Hh›ç×xƒ¦«®ø°!…Š!)Ä3‡ºÉ!@ºH댜·ºá¹WPq…Ô1)¾ðqq&Å\Ô&Æõ4«Ñ0œ\tìÆóxü‡EÄ€L©3qȉVK5‰4„+-èæ)šämžj"y$nžº+¯=(˜d›hn³¦¯‰64JÖ(2R†ºæ9džt)ÏFù´‚i¥ñ¨ÑfÆ…üé½ù$òñÇÿCeo³ÎRC…L®"Ç*xá‡t9G!^¾q.JסD6£|Š ðxjJé”›ª¹ŠXÛ´ Õ|nžoºÙëNDg’•{ ?ù¤fÇõ]Ôׯ‚E¶FeoŠ²É •è*¥Þ.S‰x¹¡©ÏžZÈÔH$0W‚°L…ê¶m$š-ÏÞñ™sÞÂEœ/uç›Ôdð¯ßƒ:ãµ=ðt4Ô%>çñÐ=_”,Ñ™8Cöà@!öqÚ¬ÛµU’—nUãqã„!~ðAˆ[Õ‡+>´LµËè\a’%¿Í®:ûý· €µ8â?ŸoØÆV¢ñ%¡¥=´×—$þˆbÿh-æc…TRJ-ÅTSN»ù:éº Å:—%ÚF·áõ’ÓHopÅÛ|n!Z• °å§†®i¼•‹š¼ñÂCXÅæqÚj¦ÃsöbÆoJüY”°&ÒÈœ'ç«VKóª£Dó™ÀLÍWœy ¡švµ¢(5Õ4êÜÄ…té7@8¡ó{$[ïOàGZaa™žÑEòRêê«i²6òdyR˜ê…OQ­ê»/?ÛQñ¯IyC?9"Òc….!†"2•\\ÈaÀ‚D4èrÞ ºi?Jü׌µ©ø£Ég%¼:É< g@–$*+y‹tÔ@è «X£\þ¾Óˆ€F4Îÿ¦å)ó±¦lgC…æX“ÁߌÆe¢·â 5‰{ÃE€H&°„<à)IÑg½ËÐDa3BàIxŒÕäiƒŠ K¶#b1‡Õj”–Ò茬d¦‚*bBÖŒK"kq΢&ž]Å…Ï™á Œ‚¿µÈpkVÑ$@%úê€â•b|g@š€ƒ$d! yHD&R‘Ú ¹HHO1Ï d%cƒJb"¤¨d'ŸAŠ`Â’˜ô¤'C±‰M„¢”ž¼d&7¹ÊUn›¸Š,7ᔢ ›xF(\ Vv²1‡\ØŸöHF3’†D&2ùÌeFSš‡ÌL+ÿ“£ 2²‚q|ŒÆ2Ê*lcS×3\öMàp°œPÑ,°5CàBM« çãxÄäípiyÜS³gÄÞ1K|Xór2½ê‘ŠÙ‹ÐóÓ¦ô©sêBC*qÅ(“ÂÄçQ¤%Yʸ3ˆí¦•òÈH$|úÓŽž§¿äM‘Y}CÉþ†i™®”+åAeZ1žLŽŸÝ”^6:uMª(2•9]vºÎ¼îŒtù¢:ÏÁVø"Bo€<7ǧ0¦%,e˜Gr êQow0r˜KT,æýä¥ÿ+XÓ*8Ÿr³j[(tœš6À>å¯ÕŠ;åN7’¢ž|ù *t•ÿÑ`gWù^Ib$CáÓž+±|bÍëEæW»láZ”ÍcåO@5è£4Xº ¶±ÅU¸&r•¡¥Šˆ÷„\|+ŸÂ#b°þ¸MØ„‘wmå.81Ŭ¸O4+^óÚܘ4'ƒÊlië×ïBE‹·½AnÅÈδР\2 Q¼å¹’H×~ôˆÔÒƒ©Qƒ¹ÚXñè]âú‘º§•â±ûÓ½º¼á(ƒ +65†b±½q¬@àéÆKqËp¥Íl@7kâñƒBpôDë8qXqž•QjU{` ²–¨¯epƒ£ä X¨"®¸èFÒ÷÷±‰L™ÛVIÚU¸,ÿ•$ ±Yˆ¬‚æ®kmrûZ¯®-A¨u¯Ë_÷`oÁ5óÉÔôX>E©¼pU5R¿âÅ~¶ÛC`|0y'dué]mrWëÕ‰(]\7³¬SŸUµ«M°ŒÃ]Á’™Æ7N Pq¸ ¨4œRl¬”ô(Ä™†64ì7pqŠtd,F6ÑlgÄÁ1’ˆÔ+±Gµk>f´ûdô¢³Ë×Öθ̒î.1}ƒs¸ÉY —9“±yhkCÏ©aÆ{TO f£Äøa]Ó­ÏzÅè;TžØ÷¿µöµ ÑcwçÒñ.±ëÍ—c'vio³ÑbdKä-ÿʉ'_æg[l§Ú#åöq¿ýçˆûGŽ+JÌýá+?Ú¿¸†wd:^ñw‹™5÷&3É‘3KÃ…©o{”„cÕÎwŽZ°xð©Sí,V{¸‡Ç‚µâd­‰÷ÚÖÁ*pÆ£Oÿ ½ÝJ¯&˜û;ibk…ä9ó‘Lõºª–ã£KÊœÀI0©~ÏzæéG¬´ÊäÛwEЭ¬mš*®Óš«^ßJ@‚~\ï"ïÌÔìw¯"¬ð†Ë8êQ9aµðOÅÎn¨žcÉE+ï ˆÒžNm<åérÑMrV>e§“=7múö`7ZõrmjÔûîz©»Þ²uÄõ®“¾§bõO_ÿò¶ÝêEïØÂ9ì‹m|zË~Ý?:7¡‹êÎÈˈ97g>µêßÞÀN÷8ßcüÜ‚ßïo€í©n\3-µÒ÷|ŽºíûÖf÷&N=ý‰ÿzñƒ?üÄž=°L+¤›¿ÓšÝÞ޻¾œsœ˜ú²á[½tk½ü‹@—ñ\À~#´ÿj2‘¨;!º«öˉÓkѼ -n=_¾ú{@¨3¾ñû®ñë¢…à›¸k‘ÑKŒ¶ÊmÀ†b1»9¸“µÌC·LAî{ ËiAØ{AÚ<Œ ´Á¡Ë *œ„Ãa)*´¥c·¦k@ÖSB×cÂØò;4ù Ö 2œ2ÿ–Ð>ËðCÙŸ%›¿ëc"0 ¹¾*> tÁsRŸÒ‘Âx‹ újC\‹[±¾Q7…êB/|Ã#t+D>2$,'œŽê(¡4lD +t4ž’>ZÀEdÄ@tÄ;”·HäÃ=ô¡AQBÒ[ 7¤ ¥iò“!,=¦k7ôD¶1Ô¿¤@ Œ5¤Âªð`ŒöÁå©/=ÑÄà{D;T0=”DaT¾)´?óø"*Dm»5Ê©CžèEDE1ŒºI ¬u4Fiì¾õšH¿þz¾mô¸iÊG}ÜG~$¤I‚%€ HH‚,HƒÈaêG…Œ&er&HjHeZH3Å$ÿï;>l\Å;F‹¬Âá5èC±Û#GCôÅŽ´FüËH•”4ŽüŸÐE:"ž¨ø5R,Å0;ÅíJÅ%ÌÆ¨kIŠ<( ü¼²z ˜$É‚2I—¼¿ï[ÉžüÉwD—ô'z„Å¥¼IsäÆ0FuôIþ‹Ê ù‰‹Ã;¼É{Ô1µÓ:5Ò-EÓK¥ÓI•THõÔO•Q<5Á2•S6uTÕÓTÌL}ÔPÍÒJµÔWåÔNÅÔRÕÔZ¥UT]ÕM5ÕSuÓ;uÕ]•Ò^õÕH•ÕY­Ë`åÕbÖX…Õc…ÖhݾVeÖ\5VJ}VlÕamVkíÖ<]V$õÖqMÖmÕj-WsuÖiÕÕ_m×sµUU%Vr¥×ue×lÍW}E×[Å×}•Vn}×uW%Óy WqµWp%Õ„EØz}X†…؈½Vÿ\½Wu-Ø€åуXŠõWd]Xó”X£cÕ~ýV Ί=ÙæÔÖx¥Ö’½XŒØY‚…×”V‘EÙ›µY“¥Ù–ýY MW…õÙ íYž5Ú-Z¤5؆åX‹Z–ÝÙ¤•Ú©Z‡}Z¨=Ú¬ÕÚ«UÙ•ÕØ¦Ù° ÙŽõX™=[´UÖœýZ®uZ¢¥Ú™m[·ÅÙ²…Ù¨]Ú¸•[²ÅÚ®ÕÒ—ÝÚªÅÛ´UZÀÍÛÀÝX±­[»=ÜÂ5\Ç\¸•×±ÕY³­YÆm\ËÍX½}[ÁÍ\ÍýÜÇ…ÜÎ%\ÌU[Åí[Î]\Ð ]ÒÛ»5‰8ˆ]Ù]Ú­]Û½]ÜÍ]ÝÝ]Þí]ÿßý]à ^á^â-^ã=^äMÞ̈ƒCa^qÞçm^é^Þ±Þë%LÀÞõà^ôðÞï¥Þìßßå}óm·ô¥ŒõŒöu_òí^ôßð¥ß.|ßÇÀ_ÄÐßýµßóõ_Ëà_žàÖÞx†CA`QàN`~`aà‘à 6` ¾` Î` Þ`î`þ`áÉ ðˆC8 †Ìh„8€Fh8€:Xá~ᨎO‘h„C‰îá8a˜I'r^~Hâ®áÈH€gIጉaö6+0çb"¶8#¾b(‰g`âA¹â( -Žâÿ˜â8hac,6aþÀ5>6á€Cˆ=¦Œyàã:€(x°aA €C¨À‡C€0>AL€pÞKnІg€FH@Œ: ðP~(~€:pd÷De°ž8Någ€;AKv^C¦†8„NþäPþ‰Q.å@âg0äUnåGþ H€gxæ`å°e\þ ?~K^å8¸å:˜æaF‰l¶d€~Œ@=®ƒs€:ŽŒ8Hz|€’ˆƒsŽ j’m8€äJ&æõe@|N€Œ ÷\cc>žÿO.0EƉOŽe¸e@àPœ~IPfÞy€B…^å†>€‡fÞ5nŠþ‹þ‰0cNéþè ¦dž@€æ0ècF”^häòéŒif êÇhÀ=FhpaÊ@€0¡faË €Pîh0éÉêF0æ:H€öxçœ8ë•2`çƒÎežÐi~dˆ®ç’ †pîé‚°öçµþ‡¶F ¸þM&hº®f»Î _Æa îh{þ¿î&gDfáÊvk#ÚìcN€FÈgyKdDÖ©þˆ®jJ^åH¦bÓFl ¤Dë¨é²fÞÿÄNëÂ&€-6‰Ä¾áøâÇFjÄÐéÖ†8„@îkcþ ©¦†fFéßî6ægžP>n –7€þíg¸ljˆîœ88ÇÀ‡€¾î—Poö.ojÀáGka0çÇŒ)êÜîä’H…ž ï^km€ª.è?–á`ÞU¾Â—Hl?®c˜öˆ¸èœÐé9€Žöç~ ©NðíEi w‰ÄÖi¨¾ðBÖpš0ö6åÇižˆd€/¦ñ….AßèöjÒÓc‰Æç¿~ŒòNk=–ëYíŸXòA~†F¸äg^p¶FèG.ï8(žþ‰Ä&e~ÿ×íä¢ÖîîDqç]jõn.÷ò¦6fÈp/ó3OñÏ3gfèrJfsŸ‰xf/o'í9ÿò“8ôEÿˆÒ®–;Fe'Î KwŒ#F€Bs¢VàCXíÉs+>dÙ.c$âÙaÕN€h!s‘pîÿn0W`|Hg.mT æ|†õV|˜ÝÖõ–ÀgZlj:˜]m˜]6ö—XvÙíŽNak¿vlÏvmßvnïvoÿvpwqwr/ws?wtOwu_wvowwwxG÷Ò–‰ÇŽw{¿wlwd>€ËÆwÿwÖ÷©¾ì8ë;N€´>|¸bªþ‡9.vÿÀa%vxƒWlø“èá¿áîafax‘ÿvGFau¶ç`l…ôý>ù[Wy eGöpÐã”_y mñ>`osže€ÆÖä—Çî‘_z’ù¯~ù2ÿã@ñ« €ŒWøjz„çcÖ¦ez†6çð®íÆfl*zMžm¦ûsø°äsæ÷UæéCpùœ×†—ïûˆ×hGnûç‡XùYo¨î{°èƆ{ÇGw¹·û±ïg~.î(®jà÷¼eî~GîáýÞçš.sŸå 6úRöj• mM¦àÇý¦ßw{žå§ŸaË7ìÅ7zÿjHù©·y§Wy‡욟aê&d~ŸaG~úCh}Øo~p†8ž>6a¢Vu¾õO§~Sÿ|”n‰PGn‡ŸáFˆ~Ùæô!çOÿ¥wd¥W÷wþC0€ú¯û¿üÏýßþïÿˆ,hð „ 2lèð!Ĉ'R¬hñ"ÆŒ7rìèñ#È"G’,iò$Ê”*W²léò%̘2gÒ¬ió&Μ:wòìéó'РB‡-jô(Ò¤J—2mêô)Ô¨R§R­jõ*Ö¬Z·ríêõ+ذbÇ’-kö,Ú´jײmëö¡¶¸rçÒ­k÷.Þ¼z÷òíë÷/àÀ‚.lÿø0âÄ 3VQHÈ%OŽlù²GÊ5oÖØ˜ñcÌEsä¼ÑôiÒ©USü¼8t娲Gg‰:ãmŒ¹u{v »ölÚÂKÛf»xF׎!î¶Ø¼âsèÆyO¿}âuì½?ÿ¾:øwïቃ_QywòÀËgß~½xÙ¢g^Ý9røêõ›—Ÿÿb}pÝ'Ý€Íg_Ú¹GF:t € Z— DFÈŸÒ炾ç!ƒñ}¸‰%¶Æá…"N¨a‡*®â‹0Bä`CÖÈb‹&ލcˆ<öxŠâ(ä7Jˆß‘þg Ùèd‘FÊH`’ NI%€AJé"–\*ÿY¥•^†)&CM.ôä™QB fz>"yå— j¹&œ.Ùߎxþ˜!›"¡©ÐŸ *¨š€ÞÉ'™vÆ4èAŒä装*)Bdé¥-±)§zúé¦n`*Шÿ”j*¥š'«­F*¬°Ššj¤´T꩸Úz«¦±úÊé¬}¦˜hŽzîéê›u.ô+³Á*[¬±Éº)m´]N볿:Kì°×ŽY­µˆzû-EÙúºí¸m‚K.²ÔŠ».»™+ºðªû.¾í†«o¼ÇÊ;/¨õæë/ÁîòÛ¯Á'ü*ÀŸ |ð½C+ñÄ ÇùlB ;¬«°Ý#·DbìñD{ú°Å/ÿ¼ò¾‹òË™Ü)Ê Û±Íçìò–043°óÍ$óL§ÏHË ô5³|qÒ†vL´Î-§ÌÓM µÔC+nÅ;]PÖN[ý4ÔES]uÚl·]2Óf¿}µ¢^§¹ë@[s-PÙz«½6Ýa‹=8Ú*›ä·Û†+^·Ý]ï]©Lˆ}wã“NýuâŒ[$ç{þ9è¡‹>:饛~:ê©«¾:ë­»þ:ì±Ë>ûìêÐ~;î¹ë¾;ï½ûþ;ð£Û<ñÅ<òÉ+_ûòÍ;ÿ<ôÑKúðÓ[=öÙkÿzõÛ{ÿ=øá;ß½øå›>úܧ¿>ûí»O¾ûñË?¿ôðÓ??þùûn¿þýûÿÿêøÀ°€, x¿*°D(Á j/‚¼ Ç—Á r0zì Cˆ;u!ù,³…777”b3¥o;‹{k¸zF¸ooÇ~^ÒvtÙxwÝ|{â~〔””›››¥›’«Ÿ•¥¡£¢¢«««±±±»»»ÊƒƒÏˆ‰ÍÖŒŒÜ„„ë”߲ʰ°Ê³ºÔ««Ñº¼ä‚刈└䚚䫫崳帷ώÂÂÂÌÌÌÎÌÒÑËÆÚÍÀÒÒÒÜÕÔÜØÔÜÜÜãÂÃäÈÈéÐÏåÔÔäÜÜäääÿÿþÃÀU w‹¥nȤòæQáp±Êr Já¸Tlª|YØØ–[ü‚¡ã©h‡ÓÊuÛV›çؼ̞Óapr~tbI‚gOO.Il-ˆ)škXg$5|8 W !5k,`4(6&!$1*™*ˆ8c!!E.b™.O[6!"K).#%#!%I63/.** ²Á6H2"! !2…62'3Ij4#‘¡™).A!ù,}N*‡"""***777DDDJJJVVViiivvvV«nr–|x‹yw—e¦i‡®eˆ±w†©p±z—ºœis—}fœ~¥Zb«|\ºM¯ci¬m}§{e©w}°ag·frºq}éw;Ù[\×]`Î~AÚlLÝgU×vMÖwSËejÅltÈugËsxÚfgÐkqÝvhÙyxãWVèhKåcYërIéwUäfeåsiäxx‰m‰…tˆ€|˜˜m„™uŒ™}”«yЧ}µz†Â{…׃倹€Z¯Œ¯v²ŽmÖ€:õ…æ…+è‡4ó‡%ò‹5ò’;͈G̉SÎVÓ‡E׎QÚ‘Nß”TÇ“hÈ›qÔ‰f׃pÐ’i×–xΤ}ߣiÖ¤vëˆFì†Wç—Lé›XðŒDñ•Gð›Vègå€}ê˜dê˜vð [è bíªvî±}ð¥fð«p‡‡‡„—–…‡ž‰š•••ˆ‹¨Š”¢ƒœ»“Ф•–©™œ³… ¾ž¦¼§ˆ›§•‡¥œ“º€»•…ªŽ ¬ž¯«ž°¹“¡¨ —§§§ª©¸¨³¿·¤©°ª»´°®¶¶¶‰£À—­Å±Ç¨¹Ì±¼Ì±¿ÐºÇÔÆ‹“Êœ‚׈‡ÖŒÝ“ŠÓ——¨ɥŽÅ®›Ñ©„Ó©‘Ó³–Í««È¬¶Í½®Êµ´Ö¤¤Ù½©Ù¼¼äã‡ˆäˆ…äŠŠìˆ‡åæ™‰ä’“嗘暕圜埠騈栘춇鼔壣娧䪪綨岲帷弼ﺹò¯®óµªñµ´Å»ÃØÄ´ìÁœéŦé˶éлõÉ©ñÀ¿ûÖ¶ÆÆÆÃÂÍÈÂÂËËËÃÌ×ËÒÚÚÆÅÑÎÕÙÒÌÕÕÕÓÖÚÖÚÞÚÔÔØ×ØÛÙÖÜÜÜÜÞáÞàâåÄÄåÇÈåÉÊïÇÆîÌËåÏÐç×ÈåÔÔåרæÜÔåÜÜîÓÓïßÐìÚÚòÆÅñÜÇöÙÙåßàåàÜíáÖíãÚäääççèêåàééçëëëïïðñéêðïðòðîóóóþþþÿÿuûG° Áƒùêåó—°ÞÁƒÝüի篛Ån×®u«—±[>ƒù.ÖøÍãÄk Z\Øð¡Ë—ÿ>œI3fÍ›.eâÜIp Ï>Þ *´&Ñ¢3ÒœÈÔ_Ò„N+jÌHÕ¢BƒõJrÔHQªÕ‘")¾ôG¶¬Y³]Ϫ]ËmÛ·pɦË6)R£wi*Í ‘¯]žù ¹ðßVªU7Šý'1EŒ=^¼ø,c¦˜3Ot¦¹³çÏ›A‹Íy4h§/÷ú¸Ú¥êÕ¯ýÆÎk1òŪ[7¶$²¶í•˜å.¾ ¹é¤8¿€£ŽfoÊ™©ruöU%Ÿ ~ SB,­4ŸCÓÅGe%´#WèIÿ„’p•èFu6$œ¤ø©C‹*À¶RNf›:Yìh¤çP¡¸,³0MT`‘ÃÙ Ó¢äåö¤Ž¨.º¨X`étMâÇ‹*±ðòk+—Æ)ggÇŠ–ìÍr÷,^õ$mO×P;¯”3w—ýS——E4¸º9Ú}øµ¢J»±¨"fñâ—ñgÿRéß½‰*rN)õ¶Ðš©ÕÄEã D¤¬·g«­üa)ÄÑ©£J+Lé¢ 8¿ /PŽlï”Üg¢™uœtjˆ9Ù­¸4a–`­D2ǤSn}¿ò¢8Àž´ÐIJÑÚ²³5m“`zá¤kA‡¡„ùÿ™5…ÔÌCO.lÀ!hÍ# °²˜ý™8ÀFîKÚhŸÍdÇn¯ w¾ms~SËaT›™¢ã­XÛdÄ .ìàC .là‚8SêHÜŠíízv-­È ¦•[®$æžË†tæš+]GZFÖ¥™_öSTiƒ =ãÉÃFì¸t üDçò¾*â+¹qtçwF<Û­!ßû°!Å‚¤?²á N0\=ÜÀs´’)ƒ –!;s®XôÂgì^åGm—¼4£P€ùž>-H˜¦‹ Gæ8•eŽi"æ œàpÿŒ7ðšõÈ¢*¶X¶ÏH¬]¿º˜ Ç™KO‘±}¾DçNˆ¤˜êè+Õ2HEØã¼z:H!mšˆ:ü¹=8X /œˆ ˧ñl">Û&9yu9sBò‘7ÅéÝ~’FL"$K‡ÂUÂ*x*æyEBÊÇ:` \X±Ê@F2r—œNr ÔÌ4&1„ˆl]'ÚfjI]>T‚-ŠR(Ô/¡øÐ%~ryüÊ AEÂàHBI r ƒ4°Aç4>]ÔC>c)S¤A Üa+Ȱ`¸Ð±6TYêLgZ„•Yõ&;!ÕÞ¬6+OîmtòôL´¡ büõ4ƒ=“œÚÿí,X¹›ˆ7ú@IHC@hï<²f³›åÉ$ºC‹à­­œÕ—CöFõ€ç<¡ÞÂ|t•ãˆ7p-,bqƒœa ºÐÅï„GËæv"ŒS[ŠUhÆ#NÑzVþ $z:²¨M·Ám¤g#‘Éaƒ’äD=¾ï2ØÚ‘3leA3 Hb¾H(%ž Ðâ^–^ÉÝSŠUŒ]ŠØÃ¹j%YèŒh+ ºJ®‘gO. «7 ÒŽl®·Ä£ñFz+H Á …Û+ÈK1Ú¢+ÆÉr‘«¬¨v“‰’+ªòFO$KV9G\ X!Ó@ÿ ¢àÙ4ŒdÝ©ËÏh,ð…)(bÊ`ƒ6ü®ü^Ù¿9='ûvã—µ7_“x"fqíÍ6§†0dÀéœT˜‚ é|,°«“€Ä¢„ÆJ£”4.akš9°@·pX¬@'àÖœ§‘Ñÿ cÅ.U‹ œÀ ÑV•\£P«^~ý¶» ظm½EËÀšôÛU:Ä ¿Œ«ÎÐÜi© /½Ü­@ž6709ÚŠa[´€­½éb­ é©aç2Äër)>Þ€"ßéªÛóMß&N’¤BiÞ±ß ±Øg}kÙ:Ù2p1I”b—=f0B@9Ú£M;â` ¹#„ä^¢á ÁkÏ• ¾0 ^Ô^;s1ú©é½šŒÑF{ß¶ÍÆyI#( [Bfb Õ2ÀRäu±;b05 œp$0@Û-yžJ;àð e¹®›¶ÿõе ,™ð^ˆÔ“™^>Cg\ßÍå]>ؼŒÁ*ç_yæ#ÜfZ Cª Õª nX9 >0$|®E —<Ãñžï4â(^1¬  ±uímY°Jé_Nº$>âÍæE˜{á+c5‰Ýâaà”K­ Bæ¼Z« ¼d d7ðyBž)å +õ´­ JK E6ê8—\èÑ–7@ µP^,u®nTâÎ~âÛLj´GѱAmƒÐ¬¾í>àm¿θâ½ÕZŽVå á0Pž^”ë©Cª ?Y¿°¡<ÿS¼Š{dêp¹Â S}ÇÊž<š‘ðÐnÑ?ô'ÉðÕ*[ñN!ñLÂ!ÌiâƒñDÜæàÃñóëŠ{‹#¿›B ‰ÕYT^®ØÞþŽ´P^$l6‰N™“.éB©åå¶&pÀ˜þÔ›œÛåŸDÑÛfÛÀkç Äž´Ài9À ÞNà~°Dî­@ D°î˜a[­žFÉîD9Pñù—rãÁ$¬¸_»¬ZïWnd!nV,™´xOô ÿìÌ~Œ¦¹÷m(fÆ‹ àZ»¸#lê¨Îû1 *°®Ö´Dì¹³UÍç ¿ kî†tÀ Ž“ÜZëUåÿ¥3·8 •¡óÂå¤9¯·—néé¯þvt–ˆû¨1Î u2Éáþþ‡ìLÅ9`HJþ¼2 l1iZ=„ Öƒ¦PˆòœR¥KUŽ2n€[¨ØªbäШN•*ui©WOÆ9t%ì–O_=ÿtîì¶ÓÂ|ùæÜYÔèQ=‘.eŠTiS¨MŸF¥jtjÕªW±FúSa>¤?ÕµRå ÜÊ™i‰ã¤ªUÊŽõÎ ÌA+cޏ%ôÖ‡Â$i‘(øi2fŽoóΕ‘#Ó]—ªhóåV0·àÀ‘V¯[M¯Dyõ:tëQ­§™¦V½”ukÔ°¹Ê†ÿzµ4ذÁ<Ù ]½“)­l÷cÈ‹ãåEhIRKFJñHU²Î7+ã Ñ‘åÍÑ"Çz»g~ÎéÕêQ¢[ûË×M>í÷øWëßÏ?¶ÿü¶*í^hñ®àꎥ¼>Ê¡@^@Z.¯I šà¯z¦¡€:„ %•\È"˜nˆA–TAH_háå„ÎÓ­"ÏìÓ ¡ýªžkêÁ À^ÓOHüˆ”ÍHØ4ª´¸Ôb˲¼ÔÉ@Unh…9K(€DšE ¡Àoòø+0 $‰l²Ê2‰$H¢«³V€Á(NÐbNÍ8«‘(‹R²ªÐº1 È?U+ô´ÿC±J4+Õ˜ìU ˽zxi¥^úh `ÌK’/ÌÒ̇"ê#›zÆã-="¢€’È8‡¤Æ@\ £ðn˜©Æ|B˱© ~\J¨ jòÈ ‘õ³ª`·Z”ªgg;ÍÑ…ÊÉH :«§0îL¯D[ãU2³l&‰d’obÑE>(¨Ä›iÄÌFÆYé w¡Ý®HE„jºIؤ¢rØÏxüŒà!• ªƒu8ÚÚe¸|y¬ÓqðÅnàe¬²Ä±3¯,!±¤ËP/Fè‰N9cª“ÆŽÆú®0vÅ©¿¦€¢ïØa¯©é³k.Òá‚¡šX‰•¥X*ÿ‹™I8Œ*!_BG²„Nºx Ê–`—Ó„¼<ˆDtqFŒt)ç]^Êù:£L«l,¡û–mÊ«`ûDª>A® ªf£–b¢ÿ1¼â‰™N”Z…®V0ëÂ|áÚʯi à¼tâ„ð9í ûPW¢vßôîJS¸½(EÞxñ»oÈu â„®‡)b냚©…ÿÝrÈœœêÊ£ðâ*ËÚ˜À<Yd’Í:Ù¸ÌFÑ3íz¼ ¢>r—,AŠ¥ëÐämçk}V¾i©­¯G¦õý(b mxÒ’òp24¥-ïq[ÙQ6=æX‹SÚâH¼5+¤.MRÿGœ¡ž‹á­õ†%¤Á6~Ä‚)± *bqÝùK¤û™k–¢øã3;°Ò#J®&AùŸOp˜,æAN!ŠJbUxt (ІӺ¤$E)Ý©"Sº‰™#£â,.ª*ËΡ äÀSÉUcÄqü p@ûÇŽ€òbƒ‡R\ }l4AìE±£¦½¨4Îq„ÂJ>ŒV¬¤ÑPsR[—î™LŒÁ“øT¡-Êï’kËZº¦‘XЪ´è™."º" CñUÂöÇGI"EaBù |h0¦!±€Œtb$ëÈ¿)B0/ ZPq:ºÑQò$1ØdGÄÿ"g2§v'¡î@rÊ]±òª¡…’Cé0žÁe2‘·Nöåœ:ùÉ!séæSŸûäg?ýÙ (ò0 ÿ$è…â „&T¡1ˆ4š‰˜B¡ 5E 2Ph0Ô¡Uè(8Á‰Qpt¢}hDEÊQhp"œ‰J9áœ"#œpÆ(\ ’ ŠCÒx:Ђþ¨@hQƒzT¤&•‡ÂDÖŸ9D€:ðrÒ\‹%7¸î¥šyÙ‹ËœT™Q2§«©^‹®ÆJ¼D ­@Ëý„_Ñòx”óa¯vä˳‰ ä+UžEDbs !#5)—Ýð&¬bMOrXÿ„”£@"P&ÈYkfœfリ”ƒ}®>„ä!n"¦“IÉ;ÜW¦¦HÔŽ–w\Ú0IÛ{*‘9ïâÄÍ8Ù«^l¬!lQÞ:’Xn¦ˆš—TÇJ^ òÈP#×"ÆQÒ#¢ na„ ŠŸ Åû( ¶ð9b´N{Ýþ™GÚ+1•é²á’O¾ šo”Øg²ošâ{ Q‹*°u- æÕm¯9˼–ÓºØ}꯭§+€~*$ƒHÀ¦¶—*ƒÕK}ë_ךé }¯©±}G‹×r‹.ˆ¢ôÉXCC§TŸPùØSTtÞðd|NáÆ‘ít–†ñYµ´ÿ8Ä\]²BF ŽïåÄ£“’FXâ_È/Žñg<ÏYJu;áQ޼áÈáèÇ8 2j×Ûÿ§¯“$Ÿ’›¼;Ï7«vç(ö#ÉøW#hÝ,¼“ ã®±$3víÑKYf6r•p:)üÈý]˜®’ž3šë|gø¦ ´`EbÙôð†›7H£­¶ãB_D7ŽÓ 9èƒÚñ¨†Ú]=q¤ï^#¼Ìêî"´G2ÿ0½Á&r‘m{d*~ÔŒ¥$­°Ê„È@5kuJ®£ÙÙ¥³º‹5l²„M…צ öS‚mÌM!nô´hÙ"ú×I:sâäiS»AÿU¢*Ò`OåŒ}ú¥QaÊÂçí´ò•¼ªãÂø”EÿÌ⺶± è`¦ó®>M„ g9sZåtxÀã’g—üêè×8óM)£DsõÈIvåJ¼ÄÓFKöSÀü“^­·—O ¼™ºÃ9°Óë1È¡Ýé« V¾05Ìu!sšW)[7[Î¥4s„`DNiÑß„¾§èµŽ5DúÐÝݦ[XFŠº‚ÝIõd[?(¯÷ƒ‘j—wøN7¸a‚»¾²ø™Feåss%.Ñmqñ!Æ©ñ¤ý„õø5¯o»>ïï[¡ôɃIøx»WëÒN¼B¸®Ö ^,±ËýÿMf £-kËÑ3çfg®ÕM“!:ò»Jz°$§C}Þ},¯lN{úôÊßXüá…[{<‹š­ÈÁ+‘¶Ê^¶ÍU…ùB ÄÀ2!vÅu°kÄâeßìz›Í]*¤|ƒñŸ¹›¿Úâ¾í›½–?„àº;ƒ@—¹DÃ%“c–GBMœÏƒ½Ê8z#9Ã{6ÝB<¤¯DÁ;»5 ¤ <¿Š¤šx3Õ8:Ïx=}«1ÚðÀ§Á÷ú¾”À%Bæ`A/“º¼‘ÿ3Š6›Á%¼-tâAa²Á Ì­”=–3A$B㸠@K{žÖÃÀ£‰*ÚÈ8)ô¼ ÁÿMÃBd@-?/œ/!]Ðló;ÉQ¶û¸¾¨ð?ý@" –`aÃxÀ\¹7ÌB <Á9Ü:ò±ÞXå)â)¶Fê†mx$þȾœš0š}“$O¼ÂEËTÉÎLÎՄΟ\Ní„MÉ NDÌ 2Nó¬N`dKŒÍÐô0ïœÏ½Ïø,ÏïeO=­R>­S9TC½S5Ñ@SDMÔ=mÔ1MS:=TEÅÓ7-THõÓ?TKeR7õTLÍT%ÔP­TGTJEUS=UF]ÕHÍÓNÝTmÕGUNeUZ­U]UUWÕÔTåU`ÍÕ`Ö3]TbýTY•MRÅÕbu–³|VhViVj­Vk½VlÝ¡´ìÕQ]ÖWÕRVdMÖ^$×Û´ÕYmÖp=VcU×XõÖIýUwýVpeÖvWxõUtMW|ÝWe•×~õ×rÍ×nØ{]WvEØ€åÖ‚eX~]Xq=X…•Xÿ{¥ØŠ}WƒµØxu؇XýXŒØsåØÍX¥W‚mX’Ï„=ÙÝÕˆuY}ّ٥Y¬×‹ÝY”MÙ[íYœÍYsÝLŸý× ÝÖ•­Ù–½Y˜W MZ¢5Y¦µYž}Ú¦…XªµÚ¬ÕÚ­Ù«ÅZ§õÚ¯•Y•[²ýÙ—5ÛªÛ®-Û¥][¶ [·}Û´¥Ûº•[´½[¼íØ©mÛ¼Û½5Z¨Ú ¥I”Ô¸ Ü’=ZøÔY½[ÈÕØÇ=[¾í[»\ÉMÜÌý[Ì¥\Á\¡-ÚÅ-\/\Ï]ÐEZ¿­\¸å\ÖåZÅeÙËí\Ë5ÝÓ•]Û­ÝÍ}Ýɽ]ÿ¥]ÜÝÝÏU[ØÍÝÖuÝá]äEÝÕå]Ú=^ç}ÞâÞä^Â]Ã-]ê ^ßý]ãí]ÝíÞÐ]æUÞêµÞñe\í _ñM_ì=\X…ÞóÝ^ïý^¨üÍ_ýÝ_þí_ÿý_``.`>`N`^`n`~àÿý9`š v˜ ¶` Î` V– F–öà`ú`aÿ áÞ`Fa 1aý`áaaÆ`®áæà¶áŽaÖáöáâ vg`š"&â`:beQbdaâ&6b(Žâ`šb*®b+¾b,Îb-Þb.îb/þb0c1Þ‰D@€0=ÿüx@€G¨£@;Ð5fc°3NÑ¢x„DHŠ7Þã(ã8L]ª`P€äp†5nãÖPa9cr>ç0äh8æv~gh>ÿP€h˜è‚ç|6€}î窈†kng9p†°ƒ‹>h¤ðhæ €HdpÆh;xé €[n 9Pψ†|€œš†k€ø€n@€=fk.€ ¾–N V< ee…F|®p68€e®Šp¦gØçÀçž2>|ç ®¸¥êv®jXÖ‰T–`6æêðêÓS6c¹>ë³ÖåÓH€=öhtN€¸žê2l<Šè`ì|ì|®`Q†€PìPcü(€q.kxkÙ€êÐVh;P¤Ö‰¸i°VhÔ:€˜iHÿŽÆŠÁö‡ÆêžÎ‰k@é­`íkÓ6êØþ‡ÙVGPhn.xÝÎçÞ® ¶c?.gðé(îùH”Nf5înÚ^ò^hx„—nîèÖþ¬¦7žêD poÚx@(eFíðëÕžàè®cØîîMÎcÛ&æO¾nÈVÁ~ãn0€Dfâ¶íãnꈎkø^ð8pçÖiq†p?¬yŽcøŽð¾ ¯ŠD‹|@ØãgŠŸq¿;®øæmšŠiìšþæœP©– ínûnj–†c˜àvÉWhFãGÐkøjßžZ€²6jÿÂV Ö~rˆj+,ßo…ì| €.׉/?˜qtnó|0ó´Þ iVbøä=Ÿêû teÒ~í6—œjãn mýÆm{Nï­˜tbކGÀ扎rÙ†jhfq90€j†n…6g%—%'p ç£ú.qenùžìR7õÖñøòâD˜oÙx„#ÎÆÆçÐŽë7O ?Öß8–oxV/Š _ó‡îuWqßox‡3?ö Îw{?”|Ðß6vïRæ÷ÿÇ ;ÐßnÐß"vx·šøüå FÆø1þxy‘y’/y“?y”Oy•_y–oy—y˜y™Ÿyš¯y›¿yœÏyßyžïy¨po¥¸nŸz¢Çùgvwï¢_z¦ù£·kð–ÜÎexíD`÷õDÈ{ r½_~ÞëgÞ}¨÷°{{žç|ûå÷êêö}îïyà'~ðëV'êxiàíkHúãçzPgxæ=>€Äÿ¢†r{Nl€s&múhonˆhÿ,hð „ 2lèð!Ĉ'R¬hñ"E;þCÀŸ°ó/@‚àšp¦Q$€ÿBŽ,ùï€}jì™èÑFŒJ—2mêô)Ô¨O£É©70‘œ« $(çÑÀ| ¶:Óš@ ÆD ø3ÛÕ«ÉGU>Ú ¶Û\©z÷òíë÷/à‰­.lÿø0âÄŠŸ&:o1äÈ’'S®lù2æÌš7sîìù3èТG“.mú4êÔªW³níú5ìØ²gÓ®mû6îܺwóîíû7ðà‡/nü8òäÊ—3oîü9ôèÒ§S¯ný:öìÚ·sïîý;ø¾ÝÆ“/oþ<úôê׳oïþ=üøòçÓ¯oÿ>þüúÕÿë&ÕTøB%àS&¨—‚M5ÈÔƒ¸à„NE¨Ô…2X¡ƒø!ˆèaˆrØa‰(¦(áŠ,¶¨á‹0Ž#F^d£E8æH¢ˆ=ú¨â@šHã<9#‘éHÑ’Lž¸T“E)Ñ”UùЕX>)#’ABÿiä‘^r)f[Ž)$šiºHf‘f¶Ù%›;&©$˜k†'s:©'•uک晀–ÉgŸ„Zéç—†j馜pÞ)蛎BÚ(žyJš¨¢eÙЦœ":襘V*å§‘>:)¥§Š:j¡¡º*ª–ºjj¬{Κªª¯êº+¨¬FÔ)CÀ*$lBÄ˨¬¾þЬ­·&[+©™zÊl³¹öªì¢Î>û'·Ý*µ¸á.ÑŒ·×ZKk¹æ¦‹+´‰.¹°®Ë®¼õÚ«î½ø~ûî¸óV{.½¼¢›oÀWÄo¿oëo´ÚþËp«K„p¼? ñ²ÒN+qÆ/D1ƇR1ÀlñÅû¾ÿ[±¾-»l2Ì1§ü²Ì¬ðÌ4ç\sÃØjZªE7£LrÉ;/ŒsÏEM‘Ð:'­4Ñ!‹ÌñÔT?ÔôÉN?-õÏ#wìs×PaÍó×`ëuÙíVmöÇü²œ5Üq­uÔH×m·»ns½±Õa³½±nÐà„K5öÜr'NöÚP§½7ßN!¾ôÖŽvã– ôÁzã¹æÇz|ù袗ŽÐä•}7Ý žíß›cî·ã¿N{í°ç®ûî‘«ízë¼ÿŽ{è¦?%òÉ+¿<óÍ;ÿ<ôÑK?=õÕ[=öÙk¿=÷Ý{ÿ=øá‹?>ùå›>úé«¿>ûí»ÿ>üñË??ýõÛV?þùë¿?ÿýûÿ?(À°€< ¨À2°| #(Á R°‚¼ 3¨Á r°ƒü C(Â’°„&¤ò#5z÷(ž,Hâ?‰..¼'³æL›8ÒÌÉóŸÅž6•)thâFy"MŠp©Â‡'V|™1ä½Ú®†Dy¦Ö&5Þ[)£K˜ù©]˶íÚ‰nãÊ‹‘®]»pï¶Åé”iY¿S+ì+8!a¿‡ JL)bEŒµIÆJÒªâÉU±e}x’±dÆPBIº4ég¦S«^ý5ë׬]Ã.óhᦷ&Nº;wï¡¿ÿÑ>Š–G“Ť§¹²FµÇENsôìÖ׳”­}6÷ìµçÿþ;ž|yŸçm§þ²kͬY)VY’ºhä''¿:½è¼bÅœ“ÝwÝÅVàuÎÞ`ë5è`z†AÈ^N’5YIΡÚKZøij=Ó>Ê a"0芰%Û‚ž7!_BÈàƒã”ÑG_eµŸd.‰ˆVW ¤h( $Ï2ÌÄ‹‰Ç¬È¢S®æâk0â&#ŽãÍT`†)æ˜d–if˜–DßšôU˜f}a]8™+ȼóÌ3ž|ÁÅ|öé矀*è „j¨ (©è¢Œ6ê裞)^y^ÊÄ5;ý’pj‚´cVT¥dq )¢@Á,™1h¸"e•©]ÿY¥¬«e©—·Uúž1n)SW;[YüqÆ&Xq(YFi¤£qÓeêÌ2씣Îh ó*¬¥ÑÊ¢·©ÙJ®êQZ#¯·âzi"$n»Ì6»ì|5&QòÆW•G™úO‰&ªñζ‚c‹7ê˜î ·«¯æªk#¹å&´?üæØ`í¤–pvÚnˆùAfÐŽòJ5;l´ÌÀg§Ž*§Ô| 9Ýrëâ2q—ç¢ëóÏm|$U¶ö5drªL’cC)ÕŽ™^T`Ã¥ÍrŠ*³Ð|JÂÛé¬0ÏAI Å“ öOÝ’@h±­ÐXÔÀmVÜcA‘Ôò)ÿ7Ð:5«v‹*Ö 6Íàœ&vÎölÐDû&ô¸A[ŒÆŸ…¸q¯ =ñ¦‘ ׎CJ÷œ@ý°“ŒÍ_Ç<›:5¤µ7Š/vãeG^ØÚœ«]yBì:,wEô5¼î;°à´N$@¸PÃÀ ®Ö¤Ñ<‹:Þ^»íô`ê×o¾ïfGä^{U?ÓøœzúUI]¤ÑdÒ¨£'à h`Ì®Gš™Îz¦ëNa ÆO|*#Jú˜Â;-M=äQÆ’­TÈYÇÈCî¥ RØB¼ðB @PW T¢ìˆÀÒP t í è8 ž/W¿CWÿÓõCœ$X`Y‰³êf5šŒÄÛ3EV„w˜®¨ÞØ¢µYpñ^T]÷¢ÜQ0C¤Ü}xƳåˆpKâ7ÕDÑ'”b N zŒ & à±óšÑŽÝSÅ·ÀGÈîô0“\!§;4æ¤c/±Šñ³’нP‡)f0\ÂLh0Ž¡†&ˆa Ÿ=´–C[€q‘Œä¡)ÉË^ 1ˆ€Á\KzA„^ùV@bp¬/ ˜°z¤ã€ÌV#g¨ ¯Õp@Œ ÙÈçËÝsbçLJc:S“S%Ë^÷qVÜDuäâøœ+\1ÿW­a b@«Ð0îtÏf‡dÁ¶ÅŽS‚•tã$%Ñ¡„Î> ÁH¦6´®øÄ*$¡§)ta RÌ¢4˜Å;Ø€`ô…ôx…@ÅYÀYlï5´ξ·Ã‡VŒ¢å4ç!I¿ EmH²0çûEÇMX)gAƒSÐc LX‚é¡4 ƒ¦9hÍš­©¢Zk,{Š;rõ­påQÙ˜£&µ!ù² ðB BühCª!±EU’ŽX A l¶¶*nzs5Þ£âxº8]ºˆEÌéפ\~‹»b#%1$ iIOšÒbËDlø*Xiù[ÿ†Ñ43”Ý)È:Fµ¢mÔìD1«»ÆôP'œIB€U¿eQDjIÂØH0¥Ÿé¬Iº Á h@ƒT¤â±|È1†aŒÁÉÆQ "M FDo{µ^o_cYàU¢™ ®pÇU< s¯û*És±Ñ&zn%cÚŠ6ºñ ¬`þûß`HÀ/zQ]4 4&09 6¨Y×ZYŸ¦¸÷ÅïäæZÏñÇ(KYÌWöMbå8¢UÍ?¶±ð¹1ˆ bà…™îì!3d¹‘‡ 0ƒè pØP¶:r—UqŠó«Áqý„$Ç%âr òèx¤^iÚÓ4B•è>ÿذ)†<‚H¨‚»c8ƒMGÜHzMpž€"FÂaz ²Ï%þíOQœe-ÿ’KáÛ€²¨Ü !ZGv2‘œ„Í˽†)ôgƒÄ …PÇgP›Ý¬³‰ÆAè"°” áE´Øê»h¡ê—‚›eñºòSÉÀØr]ùHÊ2¹6E§}¨›)¦1 ¼%0C*h`ê2xã #Æ7êàdh(¢R ‰ŒAâ]›Ø}¾Þ2°‡Dä„YÌc°GC/{dAü¥4î1nh9¦Ž>‘îÝ\Æá38<:8 ƒˆÆ1Р†vëŒ×'Žw£÷»b`·ËÿcîñÈL¤ÏµI¹v“†)Lqz4bøÌ9 HP‚(@Á¶/Xk6 F$â N0‡¡ÁR˜Í7†Úyäp{"lzO])F¼1¡%•3£Ì%¥£Y;ì! TÕ6  Zà+”  úHfx0íÑct1;€ rŸÕ»{ÇèÂW·É-sÒINy|°˜5ŽSèB”WXï/Ô®µ´“àÕ´RïHbÇá®¶¡ Oƒ¶týñÁ[PÞÇN<_"EûÚ£ NdòœŽEOë‚$êè„ *q§M¨ý ¨D Lp(>Â˜à“ \0ñ Œ" _ˆ‚´Ðüî{Qü±½ÿøÇOþòK Þ"÷Ëg#Ø6µl}HN¬Ðבôl¨Ãf§*¼¡ ˜à¿ÀQÀ:”tÇ·´‚ ‡ wÀ † m/ãPŠr–Äe±wAUWvs¤UÊòôG?—A Ø0Rá@ @Àm4€vQ I0ƒ_ ìÆzB7}*à­c MFqÐ`h]…_Àq‡+ ‡~Ž–~‡—NK¨NRT 8ëcLüµ<¢Y1 ¶` .pÐô‚6 K€fh†K@ 8HÐ0>Ð{PHÝÀŠÀÑðÃÀqæ ]µzîvJHr#7oè„þ%"•”l˜ÿ‚$-:ì’8ä…4 P ªÐeˆ†HÀ®À[k©1n妳¶.%ϰq®’hWvYL˜Ø„O…Omíôˆ™ä÷B#„2˜ 뀗( Ã00KðŒKàŒHPEˆì5xÐ5³@n«ñ$Úò {Ha8‹öUˆøk°wŽ…±x=G¿7‘g5 f$÷€GÉ`v+ÊÈŒc€KUÒ¨êð &òMô v 6ãu° \°nVuX†‹†ˆŽæ¨Ž96拉Ͳ10A ¶À A+` ›Ø‰g¸M`†ìö 2Ån÷×M'”*ÿ€ |€’À{H„Ú4‘àQ‘µ˜‹Hy‹”f“ƒ(ÆÔ”Ÿ“/ñ‘1÷g ?Ð °!fQ€gˆMPP]õU^8ô.ð‡VÅçP Ÿ #A]s“¸D޽f‹éÁ†ˆsC¼¨+öBLWq/ú¶o÷à…*6¹ Ð €Gˆ [ H¶$8d „ vȱã[aEC{I‘´è— ˜V§”H2:ìWTe*‘7BùiËòö` •9Ѓ0 €D cÐc@„±%Y»•^[s€vgšÒyKbäzø¶‘©­¹”=7w¥FFÿ¥2Q£\ÐbG¡˜À…!™v@l“I. Ãð `C[ôtbjE_#!zQš ƒâù—T'˜š ßIžSÈYCž{cž›"/ù  þéE’yðió‰-®8eScÅEÜe|C t[z5:4 J! Ú Ê¡:¯çY¶y2Z÷!|¦` "¦ Á9œÐq ‚k¶d39”Võ*ÕùjÝ‘„„w”„H£Iy‘ŒH˜WªT]ÉÖ.Eb;’ZêpˆFï  À €ÐQ`…Ð5˜°S_d3”0Þ€v³ §všJ–šE¹š[ºX ›XÿgQaú”È5Nd?—ãCÀ-1 ë ¦‰Äc°G QPª)bœÆ !•öʵê€9Ð'£`vePáJ¥Æ]:° 0OüÇР /`àšsŒ ‹|±-,w+}0`c°U*B3'Ä–ÿ‰½Ô,ÆÑ€KØLrgªlª  ÜÐŒ +ÐuÀ]`´Îí, :0™»à!pÒ-H'ÄmB†OëÌÿÿ rp± Ùh .$ŽÝ‘[‘­d5ÍÖü½$«ÉØ<Ñ‚ T2-‘ÑÜðÚ@U?0.PU™[UªvÏ9y `°“¹]^$XZýª4ÐÏ‚€ˆ@ =ö÷lx…£V• ³| ©lÃ3Luæ7Ø„]{õ¤0ê@ -0d;ðÃ×ǘ0}ÏÀ]˜ð=   ˜ wB 1@}wÂ]»p'ˆ m7íÈÿà[À'ý}|2Ù•@ÊBF Þg¬…ýÛÀÜc¢Í€]ÍÝÜ.öÃãðc/°sP"v÷ª§Pqê°6™0àÿÀ]u§ÈÍb!ÏÀDÔàx .dÚÓ̪13Üu¢Ï)Cf%Í£uÔmÜ«‹xÙì×ßË,÷æ º€‰ p> z¢5 ±` ÜöpÀa@À:ª@ ¯PBÆ]+àxhÔ°Úm½ m"^àŸ‘%3hg ÏHJ줪‘½LMÆ5.Ñ×|Ãö¥k‚ $¥]Є ˆ”†` Ï °‹ Ñ935Pd`0BöÑ@Xq'Ôð æ ® EŒ0Ù­Š†£Ðê @ }ßû­ßÄã¯kÆkNrÅR’u ê ú_#bjÀj© ‡Ï.€OÒ=ßµdÿ` ÆÀ^ v ÐÀwy0‡“V­: iŽS§ÀÏÏЧʳÂÓÉÅã}ãJ­ã ¼1Á§p ¶€ «ç¢w×§ ³€Oµ>ÜF¢9” 1Ð ®$°a¤ŠA8¨*ÔÚA3,bôY“µŸŒKãRûФŽê¢îæ~¹!«žÑºàù§³[Ÿl`v¥vÏêPÙ/€ÈüzR1ë§;.MÆž®H8]cÚa@<Fiµï­³ª³@íIßù çq>êy1tCá@RhÞt×çBvWUƒþ‰Ó¤™ëlpè0 }ð!`’Né£08h~@¯Ñ™zÿ©Æ`  089U3?VµÖ®ílÞæðMÍÜÜbNÕÆ‚%da´àCfj3àú¼î#qgú÷$^2`˜0!0Ç.tK<ß2ä  Y@¨ùŽáz\3•€@ •Ÿ`dSZ“ ?_êz¿÷Ø.ô ψy¸aúï€ 3õæô9dSŸC§ Ï§` jd6P ;!b[³×™>w D; 7įªàëµTåŸf‡÷DoãC¿ð¦ž÷HÍ”;ºÍœB̰ Íà ‹.Ptwî/ˆOUU ¦†a‡LUëÞÕ4À_ï)Ÿ5q÷ @§Ë@Mj@‰³¦\ÿý{½ýªAUú· Ü¥ XO ôA_ô}Ÿ«€ï EÑñ©ÂA¬ò h> ”?üè®îù ³èÑ›õÂ81^¼Aã=E  ¤¨ê”7zϾREÑ#=o4hظhܬS¶Ú²á¤ª4TTgKÕ,rg¾hpa'Þ«3‚ZÚ ¶¨¬‚µ iÛ0¶3Ñì«5•JSÃ5ù¹ç²F„í¬×àyåcg³›*ã†F‚²Kÿj@U`$šÈøÓ½exZõ& [#'°x éivhÿŠ6iH’¢¼‰Ê’A:% …:îÖJîßsÖ¹æ•ñU;Ì›£âÙád—m)ò~¦ì¡H!™ hIdH¸©#Ûm'XäÜt+Q¤E&¦ç@–FÂäØi×í©Á±ÇÞ5Î×´yWf·Ùv5î6߮ꪹ§L$C«ÞŒ"PeÌrÚEÏÈïÅ+µ4kD†ÏK'h„@Œþ³N?×[*<²Býó©æD[)±æÔ&{ZU_*ëó>_œQªõHɉ1@aw $/÷£Ü'z¦ÒÅé©IFº!Ö¦YàaŽàF4g ”$@ኔfÖw£;…ètP™TD$:¹l¯{¥“ÛÿGz3¾Ú˜/m¬s˜Göf‹rei'5R ÀS,p`®oƒ„àtWBztcu Hý(×\NS@¢L€Šø]¼*fdcÊ@èĽ°Èå‚Ô¸Þ9'ÊI-a†@8Áâ"Í3Z2(E 3¡HOƈÄ1Œã@×z RV›Å3ÔÑœÔä&äø“x¤˜[¬)°Š‰–rAzd°ŠC ßU¾Æ¥„Í5ޤ¿Ûµv|ûOª˜×Ê’=C3³s H@YuDCËhêˆ 9Åmöª9E™;]&3ÍVÍ&n¯‘6•þqɶYÔsThê¶I¶4¡ÔãëRu¨Î̲£<™_cB:Rב¦k®›Å l0À<¯0Ó±‘ l FwMˆÚ¨Oª”—½UlÉ< ̰çAÔ‚sŸ`I'Q)Ô¡gâ&}8b·ÿâÍœ1D'ÂJ³Î”L+Yøì*R˜¥¬ÚÑ? !vúÂ~Â5cÎQÿ© ©ª‹Rì+^ªLò ©ðjêlË—»2Q bÇ’Ê6²22‰I‘âFSwZ½ìÉó)CÒ;·ÈG?d;&€Ñ ™é©lÊWdÆ ¼fÙ­pÓÆSøÆW¾ó¥o}í{_üÆ—-<Ýo~ç+–gXÀ° \ àJ¸`ð(\P ˜Á&0Š øÀNð‚3L`LT" 1&VRÏÅ ^p ]œâþÍ 23Ø_ØÖØ¿óÅ1ŽùûãYÈþªS±•¸ÿ¶‹%¡ëƬȺǜÞa «E·Ç¨³Ô2¡ClBFÓÎ@ºXÇ)pñ=€±VV }&š}úÄ¥¦™8¸íbnGxä¨@•-Áuo&ëøžSÄÇSë–¹\B@—)ä˜ÅÏÔáJêsŸ”<&#·æ£'a ìƒxZ¦ >ˆ G¥ÊGlWÕUòA5P#úêÃbe¢æ¥jUm‚‰œ ºÑ’Æá•&HœÚ3à t³6†ŠÍÔ s:E%îJ‘ä¬êÓ”$lQ¢J˜IÕ™Ì)©iê@»Uá¾6Ÿ­Xçs÷v‘u”»Ý‘wK6%1‰-FQeÙYF !ó)0AEJªe®ÿ­Nk›í$'UÝWÉ"÷ šÌ$Y{‡u¬+îÅ&»Û×ñvØÆã\ˆÞÐ5áCô¹“¯ƒH± 7‰¶7–õºzeVí¼Úëm°h²å;?*„"ù[–ßÏB¿¸mßíqŽGéîyHh0rå®’­‰á‹» Ü£¸B1_,6ĆmÞ½ƒÁjÍq^nŠc]ìé^û¬¶ï¥'½Ýr™±ê |ëä2z1­.^Fñ âõ×ÇRd*¼í e­Ã߉+vá:åß~tºw‡6ñ º„=ìÃ0P2Ñ[>Û:§ýV[,ãv‰¦½Úå˜-Ù–hµ¥)»Ší§w*ÿwå-¿x¦ÖšÝqÏ<ñ»d#™àmו3+óÈ;K?Ðú˜+_=2^­\™ ¾¶U® øŠ2ž"z »Wª?^jweÖ¾/,û¯©Ô:_îÄT NQØm¹X÷â ¡•¥0C­–{¢ík(« ¼V)ÀHJ Øz9¶P¼°8¹=¬h8™»¹"³8#›¼~»Ì›â›üËJ¾È@®I‘Q¢‡3 E)ˆ[Ð$~ Ý“q“t¤Ä{@䈽©ðr3᪥ÂÀB·÷Û@ø#ùKºAu(Á™8.6JAýXÁ ‚x1Ä« ³ˆ»A£Á  A<*ð» 7ÿ!Ä +BÓ@%œC .ûÀH¡?ʰ¿¼"J ¼ë?/û¿ YÎà·–#Ž RDµ8ÀÛJ@*B;¤­3 ¿G’À8»)°`³ ŒÃò£C¢E?Ã<°¸9ƲȌÈ}t7ŽÔºr$B< ‘T;Ú0É+â:g¼Ç•ÌÇQ¼ÃŒ„·£”ÉaŒ@ñZ*NTȈCÈ%s™G<ÉxQ36$Ê¡ÄG®,Êá;J¤ŒÉ:²ÎP ò·˜9Æì½Þ@5$³žn{¨Vs"{t;–„“PšI~TÊ¯Ä¡ÎØ eÔfšÇêÑl¢ IFœ[ ò’ º”&ŬK3AB»¾øK¾¼ÌÒ¡ÀÛŽd‚H¼¼DíI¯ÂÃ$Ó±JÉlÉŒëK±LJ¿ìš“ñÌžL@ëÊc•9SH#ÔÄ»¼ÿÉ„Æ<ÄLâ,¡2™¯¡ÍؘQɉ̺0¼-ÞôÄ>ÛJëlÆ%ìµâ|M‡áÌé§ßÍӬ̀+ÍæÌÊ ¬Õ ÊÉÌK£ä΋l¿ÔÑD*9Zq&ñkÀÇ,Â\Ì8\Ïߤ™Ë{ÏøÜÎÍ,Kô<Â6É«ý)sƒË¸L3Š@Mݲ3ì¤È«4нDPv«OÊô 'z9¨Ì:8C›Þ´PÜ|έH½”ÆÌdBŽÑÕ ¥ 1ŠL¤&²C(—2ýQ Ò °+R#=R$MR%]RkD!}Ò'Õ1Ë/)Õ1(¯ô¼NÕRåPõÐ:¢Qö|ª± ÑMl¼N¤NÿÕÐöSáT:0-ÅÌÓ¸ÿL‹äÈI}¬P9¼ÐÈÝP×àÒM`†`^àû½à F×¶Äüµ_®` ¶Þ .àå•`>aV^^a vaVaNá¶á~a.a¦aža Vß^ÓŽ`ÈâÖáþßVb$nâ'æa–âVå]!á+â,¶â-†b&öâ b"¦âÕ-â/®áÿ%>ãFã4&a cÅ]c9nc7â*6ã:c8Æbæã>öa'Žb6äAÖâ?6ädB¦ã.fáB6b.>ä$^dFþD<ÎcE†äIFäDÞd5žã@þäJîd0Þã#ÖdGåP6eOeJ~eXneV.åFNåQžb2¶]Uæd\~ãZ~äY¶å[ã^ea6æ_fböeI–ådFægÎdTfL–æ`¦æjvæf¦å]žæn¾flÞæpçoÎfmVf—|ßq&åcŽepFg5]ff¶d)–g?fçvveo.çuÆg~&ç¦çbvgsÎg}>gžgè…†f€v膆hÿ‚.è~¶ç{îe1Ng]f7èhþhi‘i’.i“>i”Ni•^i–ni—~i˜Ži™žiš®iš~ 7À—œÆ•¶•žöi]ùé6ê¡j£>jê$ê5Qê aêßpê§FjZêÞ êÛ°jÚÀꬎg­Ž®öŠ¯ÞŠ°k©.ê²^ê³Fk5k¬`kªpë©€ë¸Në¦ÖiºŽê»Ö•gÀ—½Æ•¾¶•¿l½lÂl¿æëxNlÅ^lÆnlÇ~lÈŽlÉžlÊ®l˾lª@„ 9 9(`X¦  Aí¶è Í.Dˆ8(€ÎVí`mÏmÑ DÙxmÿÝþ‡Ó6=eÌæ‡ àþ‡g˜íÖŽ øh ~xm·Îí1ØéßnUnë6²HnÚÖë>²Èna‘n¯ží¶Hîë6mÐI7Po¡„Ø6ï9@„Èmïð77pÝ ‡—ƒøã~†ýÖ{ú€{„þžížDØé GÐG„°ƒ € ñg°n~9 ÷ŠGrØkë~ˆmYÓð6njAñ/ñOqxãnññ­€x†@"'ñßq°îo oq7Ðq9¨rœÖr×(mÿ0 j@ñ0€øÖmÿ0€—ƒÒþHí¬>€³x†{²pƒ:§ jâm(7€ €œò `s@a †o5/€½¦‡ýVsXn¬@ ñ ÐñØëHŠÓFX`ôp£tØ¢‡HŸôJßì (€œŽoDàtO¿ (oЖô×tT/¯0Ýæpô@ˆõŸ$c–€f_s`_p¥„/õ  tÝ@„¸‡góZßu°0€€ e×ìÞ€çöðvÚ ÷\÷ì@ô <ÿt5/àì:7ߊS– çs?ÿj ñÿsotwCç÷ðw°È÷ððD óG?x¬òÏîíRoø‡è†xäÞo‹Çøó1G€@„Ò~ùt$hmzïõÏÜo×rÿL×מt  ›ÿö°ýîyÑd |Ws9@€—×nÜx÷n_óÞöŠ„mm A@p²HóØ wjˆqØw“Çz¡Ðx(§‡ïúhÀo¢7ùg@ù€Ç A€˜{( ßû~7·Àü¾§†Ï¦œèi~×lÿ¶Ù&€2ïzx›X·s' ôÛ°ûÓÖmË7úF7pØ>€œnñ¨Ïú (ðÔÖøN„oÿÃ/uC÷mbø£Âv@wýIý¸Wó„wÛ7÷© €ÁOñ×§ôÞOõ­°ð¿ï†þâg ëõÙ†w9 þÇm8óDØð)Ïqou@gyÚèûªð·ñ ùWpôWÒ¿÷ˆܸ÷ €þ1lèð¡CD pà€~À"Hˆè9,ðìßr é’á@б<˜páË ±€FŽs>¼ÀÀEA6¢TÉ’èÃ."8xñ¢¥8AJ¥Ú‘Z>scÖ µ‚bB%ÊOÃgHïµ})÷]~ ´¬«Ó€“jÙú}˜ÿ•á=À‚Á"øXøŸ6A Ϻ« ©¶Ç“3DòŸ›™šÿþwoo_ÆœýFfÈ/tFȘ ߣÜRõdÑ…åPÖFù$î¼Ï6Ô–Ú@ãÑÊ—3oîü9ôèÒ§S¯ný:öìÚ·sïîý;øðâÇ“/oþ<úôê׳oïþ=üøòçÓ¯oÿ>þüú÷óÇ6ó?r„ÕX V«ø „®—à‚ ‚Ö\ÿ Ç‚$¦P_nPÀmÈQ€Ÿ%D\ÿiÓ¡†n8¢dÔðU]ê¸c~ ¢h€ À€À?€Gy‘J>“`F €‘F"€rÿŽG4@ˆp¹äg<ª¹æ{ €’ på? ‘™ @‡ÂIÍ—$(ƒÏÌÉFöæAˆù —$Å&¥•ªG!C Ò3é? j„MKæ¹$©&@R‚\è)Ed@AA’ê}Yz+®ßaÚ©œitgañc"5 Ò4À?ôT5è?MR3'?¿‚¶$5AN´'?÷lÉ¥`¹zû­u»zJœ]&9 ‘I Ø© ›J"K®’pQó&¯pQ©¤ Ü‚û/ÀÏ•õ™ 2¦›}i«Xg ŠœckéZ‹n|_Y0Ç——`š‹8á…ø6 øÜâÍ5î8t3'ùr”fùå‘G‡ùcœ?v8è¡ ž8d›k~ºsž¦:k¨§î:äŒG':톓Îz]¸C¥ûî°Onºì¾+Ç;QÄ¿düKµ+?ºâÀ¿.|æÐGÿ|ðÔ[ÿ;tË/»ó±Wïýõ؇_¹ôš!Òù!i¯<÷å¯Þ½øãïþû߃ÿsë×Þ¾ýäÓŸ;üðç¿þÍïmIHôG;þÉÏ|, !x?Jp‚dŽEÇ@ N¯{àC(B°wÙË è6HÁr„dá=X¿~ð„(´]óJX<ºP†3laWÃj憇Sa …Ä$*±†>l ÄϱpH$â§Å(f‘‰^"·èœ*Z1‡\ s‚@ˆ¬ñ!m,¥¨E4>‡Œ„»"—øE=†QŒMìbé8ǺØqpxä#" È@0jtäñ é’B2¯t’ÉáxFAÒ„›ôäiÃBRŽ{T¤ÿ˜JF‚R•œ<¥+ÿ[Ë^’q4%+iJQî—yDå+a¹Ê\>ò“²$f$I$0³™Î|&4£)MiÊb‘À æ/}™Ían›Ýä¥s¦)Îq’“™Õä¦6¯yLdº$“–Tf2áÙÎ蔳žö4§5Ó©Otþü'8;©ËpÞ³ â<§7û™Ð|*4 Âè:¿QÍ´¢ÑD¨CÙ‰¾ZÚ’£qç;:ÐY.Ó¢&Å'DGJÒxöR¥ŤG?Ó†œô¤(CsºPî´§>Å)Oê—ššô¦.•¨P3úÒŽ¶´˜MeéJ_BT‹Õ©"µjTç9Ó^U«òÜ(t¦ZѪBõ¡?=*RÑÚÿФ²µ­XeŽX JV¯v•®YëWaºUº¤q-è\ñZWÁÞU¯yeêS [X7Òó¯ö ¬aÙÅ2v¯·L©Zƒ Ç>V³o5«[?»T™Z¶´Ïál=!‹XÊ’6±Šmf=[VØŠv4¨-§j+ëÚÉÒ¶¶êŒ-fg;ZMžö¶ãÌmk%»ÚÞ 7­Íý­o×ÝÂ÷¸²µ+k͸Ûå—¸ÊÕíw±Û]íf—¼ÌïxùºU®ž7´èuî{¡û\éN÷¬ÀU*|_«œð·¿þý/€,à¸À>0‚¬à3¸Á~0„#,á Sø¿£©0†3¬á s¸Ãþ0ˆCìß ÿ‹¸Ä&>1ŠS¬âG˜Ä,~1Œc,ãÓ¸À.®1Žs¬ãóØÁ7î1ƒ,ä!¿øÇD>2’“¬äyÉN~2”•Üä(S¹ÊVžñ”¯¬å-sÙÃYî2˜Ã,æyÌf>3šËŒæ5³YËjn3œã,eÍȹÎv~ò›ï¬ç=Ç8Ï|þ3 Kìç@ºÐÞnrÃkÞörw¼ìut_/kßœP¦Ò–¾4¦3­éMsºÓžþ4¨C-êQ“ºÔ¦>5ªS­êUSæ!sΫa X7‡Ö˱õ­£ƒëÑìš×³Öõ¯«ÓëÇ ›ØÁ~N±ý’leÙÍ–õ±kme·…ÚÕŽ¶´mæX›ÿ(Ýöö¶s­mê|û%å6w¸•sÝÏÎö¸á íyO§[ͱ÷½¡ƒoæì[9ýöwtþ­\ß78Ù®ð…ß 9ŠÒòˆ@2Ã*À¹/S$‰eD¶zŒ—‚€k†€É˜Æ%ó˜ìD@Y]trm$¦Z݈2qH|7ÿÇÅË•§¼3( YN”Ò9è¯Ë”c¼\-?o Ór"“ˆœäºC¡ó£ËåTÉ@Áèä—{‰—!À3póºL%î €s¨#4xÆ8î‰äý$H˜ÛCõj BpúVêR0ÀŠTÿ7ÔÇÛ27ÄÝ3hwƒÚë‚–€þSûÜs¢­Ã# ñÚÀ|J B@2ÏÒI4’÷‚¸ô«‚;Õ7•v¨Ü^A¤"Ü¿^ð¦Aë7)ØíBÕ€Ðó¶€…'4! Ä”í¤Y™‡Ê=€ñü],ÈÚ çIR-˜|›¸‡6¨AŠŸ]9,2ÊG„Æc@ZØœ€ ÊöAŒö„ÕÕ…¶lÞ?ÌŸé…’hÄÞaôÙpL„ù¹PEà`$ H _c\øúDaPœÿžÄ Flh҉͙cnðŸ>j:áG +…šHö5 B´Ü_:†ÊÚFè ƒ4£'¶_ùÁ#T á2jÝBZ£†¨ÜÉ`6DL@ÞžpˆŒh„8’„ý…FJV›\Å‹8Eæ„Ì„4ÆFtDFbŒÈÜÉↅ@„æ„@Є™^ài†ò„¾„Fø¤̤Ô$T â†EJ¬ÄNº[4eAŒE[8cî¥, JáE|eÐ$Ýé!=¶Ë=%`ncD„…[ƆXÌÅc$ßYDhx¢_˜\ÊÆ¤Ï3†€ð!T¼Fd&F`hEÆidÌ`¬[ij”Ü^dÈ]vüh± Ä{"ÁEl8°ß¾} –dI3áÌš8/æÜ)Ð Oœ>Ò *”%Ñ¢C‘&ũ~MïM$ˆòÞF+¢ÔˆUªÉ§úHB½·ï_¿³hÓª]{o­Û·p϶K7îܺgyUzp/_†ú Lpp`Ãl3¡Ï~UÿaÅò$WN%jó*Y[L}0OŠ=šéÓ¨O›NÍ:õêÖ+s"V:imÛ„§æî›SñŶ 6–cq•-9Ùéæ‚ž/††Mú5õëÖ¯ÃÎκqÍÛBÁÿÿ?~·`ó…s6ë[0ä¶)9Z y3ìÇ­Þ(>Ü VlÓéÚAÄ]€¨ H`uÚy·zäíÔ ƒè!ô l;‰¦`_Œ™5ÒFÌ9EU~ó©tÖH*¡$RDïhࢭȢ€ Bá„ßEØ“éÙØ`rC…õÔ?óqØ!prŸGö¥$Ð{í0ÃL;ؽȚ‹RRi¡Œ êˆ#Xf9#‰"q¢Sí%é‘HQ¡¸dÊ´áfÉPg%‹sª#…3j©'Ž’miãf&fEH~“šƒ†¤¡KzØ4mÄÑ /nJ³”®aZà@íi— þ•Ò¨¤–jꩨ¦ªj|ar$ä«ÿyU¬gwOd¬B 5«Æ®À+ì°Äkì±È&«ì°N­êì³ÐF+í´Ô¦œŸèõ£ÍL!yfhþ³ž\õ£_¹ïIÔ.mXzO4mèr©¦Ò[§5æ©ï¾Øò«âVDÓsâÞ$‡†*–dUUjnJ%õÓæëÄGÊÌkïIuØ1‘ú›¨Fñy£§ATb¹´ò‰oûÐp)=„&d“E\Ïo¶ñF=hN0äÄsïÆãên$_‹²È#74®}ìqæØ{K4sƒ¢kÕ\6/Zâ}êÞS2sБ ÐAkÏ-´ÄM‹:-"ôuêæåÞ|?ÿõBí1*.È.„³Gcùu£àà œ‰¥è1‹¾Ðr‹/pÓb4Œv?ôqÞN÷ý7ÔŸö›2tŸΛÔ]ÔÑXŸŒ³ãZ#gÖ=oÇ}Ëæ­}|RÜ›ÃmÎÝÞ%Ó~ÖôÒÈ/4µXïé øfPu›.dÔãܸ‰6‹hV7bÿ"Zu#İ µHž! p¸<^ KŒÑò!æ»EævXI6ZÒ}Á$f1M¶ÄÂí&*ü¡Éš6³%Ýg[ƒ¢U6âñÒà¥Õ….Ð /8 á m€TŒf Êí–©ZÑÉ>_Þ˜HMªFq“›t•t¤¤¢Õ¨¢ÇÎè‡9¶˜F=TñÒÜB9ðE=â§›¶AŒ»Èi/qè ²&‡q£7ÆN7.5KI95‰Ûf€•ê΃Œð' õB’£²Ý®D‘KÓ¶Ìõ¿Ž\ƒ¥8€éi [ìBœ‘†2 Á»×Øò!=Ôåh¬a‰BЧãëoÛºsÉxŽJŒ#e j¸°äMeS—7fEä¤`³˜Ç4p‚”0á Ñ ÆF¸“¤hªA è¡-ØAÜÔhÚ þ—‰­ÕK^o|ÄÙRÏÿ>ð\°S–ã¿#=1¥! ïIn!~p‚ ˜A F ÊÅŽA­ 4_ø(@PÀÕ`„^F¢šµEd3SÓg}„ŠÑ)Ob˜ ’¹j[IÜ×T28ÉãÕh v°XtâƒDÚJæ‡B4s» —)‘.›ÍÒt=³Gõªæy¶e5šjf¢Är¹OGJµýD!ü  6¼ØÀ ŽˆÇbq ¹Ýw³°±*Ql%U öõi©3íÕ1»Æ6v¶kSM=||zà‹™3HºÇLúÄ,ÏGNˆ¸‰Ð‡"¸Pk°E m rø”Ì] J(á mÿƒ›¢Qædcºæ.Ž×ówz¶6C˜W–[®\(ñø ^@=ŒÀܪDúXñ ÞwNñÀ\0¨Ñe ìa U`„5¤á³–WWÙþÖôÍÅþl¨xìLÎþ fœê]EÁÑ„ ‚ñ‹p0€iWS +TÁ¾^MgㆠKLÂSXB—«AV¶É¸w`ÏÑ¿1Jöršò€ËLšàã=Wq/&áD‚ŒÂƒ„ìv‚È`[P Ê©oÒ˜h¼G%öp…0X‚~(ï)ëR;à2/;ÍgN˜zö;¶TdT?£HÞˆk‚FX!”a0H#£õ•c}ÿ ÞM¥C$n÷è2fé *”!cµw9¿Îüä[^TÕÊ¿þKEdTU˜+=€”@E@ ÁyG0 »r ­G ­ *°Ë,°0£,30TG°àd`Sðx‚(È,I²,Ø‚.ø‚¨r|ȧÞ%^8w›—m(Ÿ'¡Gèd/Õ}äp )°¬€ a`a°F§q{Eˆe•@”P ~ f“ tPkcQó‡y3söWe¨ÀáW,!9¤.Æ7¡ /@z¨e/ÐB9°zVðNЇdðÐ@|Aø3`FÜàhUW fƒYmÿ@>3Kôb|F`f8†–x‰E[p'5TB…ñ?YÓ  âà 3 MãFy¸OM‹±Ë¦C ‚ÀZxã` ”` Öðï€Yð'°Ño’WyÍvy¢†OÅxTÛÖ(ž‘.'q ò0Y´a9 E p 5R‹³ØQ  qùF"GrHo§Á.–B \'/—†©•‰÷çŒhw†hø5²E?¨†L^1Œ³5àÓw6p ´6ž  5Ph Ù8‰É¸bð˜ã #‡”’1ÔÐ&U¦Œ­ÁŒ€1yÿdˆ‰Hÿá|BñI ùñm@²ó0[Dk0P™‘hÐP@YùñÀ nBQ÷` }ðr|€:Å aà&ØËHÊg“›¶|eI–LÙx;Û˜B‹¥Ð/`G ¡`Žè(‹P ±ÈrÔVÁ QÁ`4àð-®0-à ©Ñ&èPû6–bx“š˜™8™–8?‚f;ÉOžY=´@>"fDðÓ$f;`°N ‹M <…Yš•9ºsæ0DPu-p>©Ñ$¬%¡RG•þõrv%—‰™jùŒ;±y²*QB3£*AÚ Ö@—Fÿ`˜ÅàÐÀy\½)Wç´;¹ =4 Àh èyƒèCÊ©Ÿþ˜if‰pÚj"^Ës=a33س–À Þi |Ðf3>àŒð ÐIÐ h hðˆñ%]û…b:4fQøn›Q(š{êĜ׵™géœÑ8yÒG˦7:; ö0ÿ0 á÷B0 jTž}pqàæyì’ ÊÀ ›C_æ„e>%f¥5%a~‘Ÿv£2¨™3Z )£rÐvH±£(‘¦Úb@²p `vˆTž~ ¤kФ“û‰N¤uK•‡½6F=t_^:9`Z‰Ñÿùœbú¨eÚ Š 1©ä¥y$a Æ€P&³0fàp¡Z€ÉðžðvNr£F¤õS….ú¥ÿ sZ£4*4J Ù™Ñظ2ŠÂ† Á` ²Æ AèT¦Ð à=Ðb`Kà˜3 rueXFFfD«ç Ã3F¸ÄŸ»´¨»J¦ŽÊ™·  ÆÔ«Œ*5'±ƒ*“òôAC Ä„д`¹$h`ÐLðVp°.f‡(¨áINGFƒ´z³°( QÉY%‘7“ëÚœ[“ê± 1© [múðG‰E ß7k€b¸@YHpª !ÿ@ˆ0 À£ª7fà£K¾@k? / ÖÀ Èöuæš£è ²Ði¦‘ª®6A$Ã7zÐ' Wt ”‡èh ºtOàA@cðy@Ô <éÃYXF‘2 C;D£àÿ@ÿÀ€"ˆ»´jú±ì*¸d)µ†k`T ”W XÂ+äšèD`«$Oàg+Q°¶mÛ¯o;®$ ­÷R+ð ÷Ð ð ·°2ð&–1Y¸c µJ“N{¸!²š8£öý–óY35ið2K³6K‡ ³šÃ³T`ª@ |çÁ@ º«ûÕ°2§¥€ÿÛŒM;¸´;»å+»21@r±öa ø0œpÁÀk¸#gБPàk » «­*»·  V˜#~;0 ½Ûk0ß+®±›®æ[«¶*äkÁ+xGT²[± –ßÙ°fÓßÔ²gP©°˜p­ÙJ¿á7\`T7;P¾ÐàÀ¬¼¢³Ê±„+ÄC|»¸µŒ 66x2®£ Õ° › "ç„г?äm0@ÓY세#Au[„'p\ +`]p£°ÃÐÆm¬·ñÃVÄ1ú´lÁHL ´Ë¦Y¯V… ÂX‘à·¾)o uÿ‡;…‰­ƒHk¬¨>äÖÔz( ÷€ ÀÃo,‘°NËĦx\»çKÁ ‡¦v#Q ’P ‚LȆ¼Pb ´Q@ÜJ [ ˜Ü÷R;A/%\V;€°ÀÉL ® “4†Ê¦\ÊҬǧlĹ{ PE Q –€ ÷€-ðX9À‡9Qph`Q€ ät æ0  ` à®É–ʾP„yˆÔ ½°½Ñ·šu– ¡ìÇãK«ÔŒ« MÄίÒ$ÔP Á )pt È1° =4b`h´@* 7 €@ð0 ×Pnyÿ˜z5=ÌàЫ ½Ô‹°È HŒô"ŠÆË…š2)Ê]ÇvüÐ|Ĺ뮽¢ ËPH4@=ð,€°@kj B{4?À ÀLÏÕp 4°A«w9P ·ÿ@ ‹°½>­eP!jY,7‡Ù›YÍØœÇнØÖüÔÓ¬|Ò 3@ ö 6`,BÀƒ„NeMÓžðæY †P¤]ƒt˜×B4 K9-yy ‹×€^( aÄ"ùõ:ûYJ¾ÝØP]Í|Í™Öd¢ÁÐCõ›E7¥²¥nq­˜<àÿÀ @`žÜIÁuÝ]{׋ ‘  {Múp dPqð"Ñ ýJǤlÜüÝß²ƒàúÇÝ`¤ç0/%Ž6v0  Ï£ÐÔ0H£@BÀ °€£Ð » 6à»2H°@ ‘ÔêMÛýŠ@`,‚Àá  ©”±°,Í"à>þã@n*ûíßÅ}– sÞH :àGzÀcf¹7@´àÐ  †i4æ°ÚþœÌåÇÚ Ú@ X€ÜÄ.kð@ýi{¸–zbvK]iö“ØEÎØÉ=ÊC®ç]RÛY³ÀG§E/4Õÿà­«oÐ ÎàÚÀÐeE>·° » 6z0`Â(Úâé­ ¨¢n2X]׫7u¹´ËcvçQMä{îØ´^ëR]£¦†¬IPvt£€K´¶n!Zz7‚P ¤ Co£‡V…”œ½ˆ.sæÔÔ@\ºÐ ¶\4ñ kÀCØñÐC‡½Ô ]Ä}îçyîîx^£öñŒÀ Þ@”à³Pnš3foÀn¶ %×NR^¢÷ 6Ð r0/ÐUø{€Ð‹„åkÛ¥‡Ýàc×Ô`>¿MNŸ¥î%¾ìÞî·ÑÊ*í!œÝ ø ÿÀïæGß´p¾ðRÀ0D-ÔV´g 6 dd)éT€Œ8Ç\ò×7·À¼@]ÓÃòàÈMܸžëw¬õX/-ÿòT,`ÝUóq@kå×ñ0á4ÐÏqÓVš¾ó´ÀX@„ô@Q˜³­n7vª­{oF¤5 +ï*oëYø‡ÜÒ35`ï¤$À©w˜þ>íl PUðãª*;s ð5p…@%°oñ8d°À;è®;oŸ‡ QÍ ­À;p•ß<븴0³¾õÀü\ßõÄ/©îz'± ¾ì<Àš›žNоXæ†c wm_KÝG)cP7ÿ°£ Òô‚7 Qä@Ÿ8T˜¾ WGm9ä7ÉÊCD3¥€újøúûð®ÿû_üWÿ$X\A„ ê»×𞾃õMœGlÖ*nàë!¹9rÐ iÃI”ÁÒBIƒ´7&w€2¢D Õ:ŒG‹Ö-P>ãí$ÚÓ§Or÷‚ý4ïÖOŸ¾n͸EÔª¯;hM#¶ƒ˜Bƒ`ÅŽ‘ìÙ°hÕ4»Öm[·dáÆ;—n¿†ýðÞ³Ûïß-bóp™ Øœ6ÐŒÛA2«cZ h؈ç‹F_XiøŠ72GŒ#fX¢HQ_´TR[ê˪Ã[Zƒ-¥ÿå”–¹´rÔn÷ë†Xsܪ˜ã«\‰ õÑ%h—yÚçbGG8ú?ëѳ£eè÷^¸ ùÆ"ÖoW9‚Ak³Ë\T™iìˆGm¤¯Æ®ïYÞanÇIFØíJr"ꩤ¨)ç'àÈI+rž2'5•” ‰–{"„A=ž‚¹Åu‚Ëj«®Ž«-«´»N¡ížk‘ºéŠñ­»<‚öbh–xúá=õØãÅ¿ÔplË6»Ç¾Íò n>"s€aC Ôi§Ô\£&Ë×zé)¨Ì!'ªÔŽºE$dž2ꨤ²ôEyh1Qºö(/WLhFõ¬ËÏêmnŽôjÅÿ{âQ0 CŒ™Îvkl¾[HBR2Ê,ÃL3ÎD¢ÅX0‚4ÓŠ:j¡^KM«[bÛm(Ú| $Ç60µ[È¡-ÚÈá'ÎyÎ2ËÆïÊSвeKYèåS­gÚ "‚(ŸxˆÉáÎh£ ˆ¤eÒËFj©B–PÂ0J>`¡ ´Ê6ª†jÈK(±Dœ§– 鲤â5{“Ìaጂí¶ýB"æa´†½Ç;¼–c.Za™ÅNãe™Å9=û™È/D½»gŸ8oée—] iè=Z¤î–¥r°!«€FòerIzÁk€sˆšª‰7^>b‰y\Ïr¶*Ogh,ÿ£ì•°aã H¼‰½Q9ñ¼“Ñc?†¶l²•mk/‡ íRÖcÞ©QRíÒÒ3çz'¢ ,©¦À@t{p­ì×RPFÚaî\wíõWZ‚åÏAëÜIì±ÕF›ãÓvVô¯•+¶Á£RM•š«_ƒz·q/£goN*„“†Œ¦Ä¡x#ýɶ߈òг›õ^©¹“êg9ÿ±öôfoä<.‘Á™^O³O=tÏ»],¶»”Šà•xca׳’Y¤Ù#‚ ¿Ç vo(Þ{ìnK¦E¢J+yˆ3Á¡…ò˜WcÝ)Q™ó“x´‘@@eN “àŸ¼'¨ì„ooÁ•ÿ9êÆ›.}©f'(0‰j4bà„8ø¸ÁQ ÓUd(ÁJàN)² ÉFñý¸)” Öóœ·ÀŽ…,/àÀœŸ*È¢í=qO¤‹àX4¸Á{xéA9+S¡†ª ­,\’ gh´£‚YLÝ úp4 `"yšTâ„Ø@ZsHØ¢–‰X C‰½Ï‘%»`‰+nPæº ºDâ©„ÄSгÊuB £ÍðÛÈ—%ÆÑ¡ý™‡5^ÈÔ$…Vó¡UÆd.aƒ™–×ÀG±@„‰Ú8¹")ú,ŒK2ÿˆÈG$’{ÓjÿG5¬è`6:ÀÌbÌD¡™pœP!±8 ðÁ!ž¤ c²òC¹ÍK7—‘“0h`"½@q,Ê¢b SǼŽ3~²OÑD&!‰E¢ˆd(ÔIÍôµÛ0¨|{³„<*K@´!/<Í=V´U‰ÄÔÀ#fÔÁ«©ã=÷¹‡<칃Œý’âd1ïALcŽe‘K¤B*ÆK$Õ¡ÐüÞ2Eê‰.©¢º©FßS• ÍDˆD,’*_é<¥R΄!Xn\Z9JjhjÓùät™>=TR“3cú!D¹Þ—š#Q© -è_5÷Ôüí&׬L´ ÿnrnàN¯Z!+‘Š£@ñDÐx"«kÒìK5ô‰gêyO¹Ö…‰y S'ÆÄ®IKý´«> ‹T½(t-M"Ý"‚>°ˆ$-yI‚äAµ¼J—4&°ÎK€!ª'ªQÒŒI­CñT–†K]öF#»Q1ÍËÄ`6äÁå¥1'ÒÄ‘—·É²"0ÚTߪå§ÚàomšiÞÑp8ã`T¢Üq5Î¥tœ:§‰ôiÈHn渦€w—©½ÜrúŽmœ×¿ñµÞ>aË—'§óåžP'ÂHü:ò,u/8jA×>µƒTðgUóÍx ±€—UVBÚ[ÿ¥n·0LJ3)uTj3ó°§0äZ¨Bagµ6±p«P?tb{a1‹{›ß‹å§h—3ˆØü™oD¹ªC|²·2¡*ºD¹sCæ œ´ú¤Ž¥UMûA PÄ‚½ $VÅ>|bô‚LÍNñ@Í—¢Âè¼›æt§=ýiP‡ZÔ£æ4ÏkjRoš!Ô`u«]ýjVÏ`­Å `kVÃb hµ¬qíêVŒb­øu¯gÍêZߺخ(F!’f6ˆÅHFA´xÄb¨&5P‹ Tns;Õž··O}îq§[Ý Æqš™ªÈ€²vÑoFìŽí&OÕÄmϯéž™²+,ö;±ÿª9Õ¤ì l"ºµ-–ñ”—~.ú¿ 1$mÅì¶2G1ÓN\Ë~û;Á‹tM¨Š0Q´{”$[EàÀ9žs‰¢ŽñÅ£2 ·×$/©žáÑ@ñ8-â çà• Â,¦Å˜iiøÒwŸ›£ø´²7TKSkè¦{7š­>cª·Àp΢‡F¢ V†f)W9Da "[¦q´@mS‹Xy†W;àïÇ âz‡èAú!m\÷é½ê–ïsŽ~ÄŸÆÖã­m¨aaäøÓq}I’‡èʹîÍ‚”åßS,%óDûÆHŸ-lOç¶¾Þ)ï4öò㙓PcUÜô4Æëè][á>À§ÿ<ï{:gH$“ïóNîlÚyd{Êa¼ËÒKÏÛ,6æÜ|1vTç?/¯x}›ûc¹{¸’·üïùfþà;(Ä'¡ñkƒüÅŽb9ÞGêó'ýºxƒ—Ú¨>ä*HkѾîX³­i¾Ü¿‹¼ÝÛ ò3¿†hÀ§ZŒ‰`hÎ+0Ï» ¸º…Ú;$Ù³‡‹­„H¼~À‡bj½Œ ˆS¨LÚ“·ï¿ÂÒ½Þƒ@ó³Á†ðqÉ•´S;)±£,z š9 𢻺s¯­A1Üšó$iŽºã?컳aŽGó)¤ZBç‰Â.»¯«ã8¤<¬Á –à¢wš0ÿÞˆ”Kš¼¡\ò9%´ Ÿj‹½3º(4‹(´=¥S3¦“4걡“:¤Ó«üªó1ý© 5¸¤”[ŒÍ“›jƒ# _ 29<¢Ù¦Q|³A’1&îKË+þšÂŠã)At Ø;&3ûCEŒA3*2t@~óJ¤š[BC«¨3¢Ѝº‡Šr’C›ìëbB*‰¡˜‡€F$:ÁW, ?Ü#"s ì;¢)œA„±]Ü:HôŲӪ`Œ‡a¬bdc|¿0RFõ`FbpÆê “F¤£ÆÙŠFˆÆlÄŽm$‹nA­S‹p¬ó¿ðËEräÅtTÇÿóI¤DKd9Y±@MT¬‚s OE+[ÁbÊ-S<,Ô3ÈÙJ<ƒtEm€Åj”Eíy½1c8\,GsdD‰,ò³H¢ÀA34®½Ñ®¶ ›{Ƙ”9ôɺRB$†ðC…à+£*<+´¯ÿ™ÙâÉžLD²³ŸÊ¡Á"ÜZ(,š9ò˜§xˈÀˆû†ð©¼«“¾Üœ¬»&›Åë­Ù˦[1ê¼Þê°E<ËÈÔE´äºGLKµœ¼§J½©+=‡¬Eî¨o“8²ÁŒ+•œÈ²ŒÈs¬LGÌÌ„MÍ)ά?ìðƆDÌý[c2À¸¸´ÿÓäËØ G³”LÊœÌÃÂLµ¼LËD¬Út¾ÛÁÜD ìMÝL/j NüSÍÖDÎÛ£HåJæ|ÍÍT¤j4½j¹ID\Ñ´1Ò¬¯1;”DBÅãôÎâ¬ÏälNØOĺÌ`x@HõRÈÈsÈ}âÂëè°ì¤@z΃‚LüäNûdM×ìOÙäϧzÄ2™y˜“…0ÄRLîo(BñÊ­<bÌoüòšP …Ñ”¦^ÌL ©1œ`I­ë(ØrP/ìL¢Ë²YÔÉf‚È?ý´Ñ Å¢Xš˜âÑÆìëYÏûG®1”÷|H# R=R O‹¼ÑÊsRçZžæ)Òÿè°‘*ÝÒÝB(lâ\H”нR§$O&ÝO¶¢USÃ[¢¤³SáÄ«“T¿â˜à\Í Ó%]Î&5Ó­èPñª‘uSµ($8å‹õ'ÇÌÉ:ýÎî¼ÓÜ2õ½=eK­B@© eÈí2}Ñ­­[äRã$TQ­Ð ÔT…¨WÕ;UASÄIêœI½ºÕEU]­U åSh¥Í7íÒúâMq\‹éœ8Y7níVoýVR[µeWr-Ws=Wt%WSWvm×o;5së6xuWN£Ó/õRR­QHV`ÖP%Ö3Ö³XÁdÕ8$ÓP-U¡9UôÕ~eUF ÑàÚ‹ÿºN×T¦ƒE؈ÕXtSudXSuNÝØ,DTM}ŽOÅU’Å×fQ%ÕÓ}ýU, V•mÙ»²¸DýW›mTMÒü„YñtØ™YfMÑÌÙ•õÙåØ\ÍÓg•Ù1Yˆ-ÚD"oÔÖ{åÙžeZûTXàÙ…Ú ¢Yëû-d±e¥Ö©mZ<•½x[¸Û¸3¹­[»½[º½[½ÕÛ¼Ý[š­Ù]ж±­­uÙaÕZª]SfÁÔßÚ¸¬ML‰KÛÂeÙÀ=\Äe[Ã]ZÊm[ÎÕÜÍÍÜνÜÇ­ÔÄ]ËUÚÑ%ÝÔÔÓý\Óm]¢Å\Ð…ÝØ]ÝšT[)µÝÛMZÕÕÝÿÜõ]Â-Ý×­\Ï­]ÚíÝãuÝá ]®^¤•ÝåÝè•^â-^ä­^ì¥ÞæM^ÖÍ^íý^åÝ^ï^Ô_ãµÞßåÞµ…^ñeÞö5ßëß÷%ßòEßô•ßðßúÝ_þÍßóµßõu^Œe_ý-`ÿý_÷Eàîߎ_øu`úm`fàVß ¦à –àû]à ÖàÝ^ öà&`~àîåà®`üá Fá6áŽà–avá^á6àÖá†áàq¤aîa!na¶Wþa Fâ$6â"¾á!Na)vâ†bfb â(¶â+~Þ,ÆÚ&^>b,&c/þbÿa c1FcÀÅaÕ¢W8Žc9žc:®c;¾c<Îãz]c6.ÛŒÝa@ä)æbAîâ3Vã&a"®bBd%^âFväUäEÞâGFd-6äDæ]I.ã'ŽdP¾d7¦bMÎäOe3ÞdH>äQ&åBeTÆdS®äRãVŽåSödFÆeæåZNcY>3Jîd>fažÜWöådVfZ^æIîcÇådWnfj®æi&æb¾ågfc[Öf]¶dfÆfU6æ6Nåqæf?Ffk†åoçvvæwÞåm&gÉ]åsîåxç{&çrÎålöæ6çYÖçnÆgvÎçkNh…ç…fèƒfe€vèÿ‡ÞgyFè‰h‚>f{¦hƒh†èŽæè_æÆè†>i‹–èy¦ç?†gþè—Žè˜vg†i“Vé•.é‚虦éžvéŸ^gœNéœæiã‘NguFé ꢶé›Î裖é¨~êŠnj©îç«Æj é®Þi¨žjkŸöê¯æê‹&ë‘Öê²®j¢~ëšÞj¸Žë¤Žf–n鬮g¤>k’6ê¾ë¿l¶^keµkªVëºÆ]¦6ë¬lÁvl§žk´¶ê¶vëÉ–lÆ&l¼^ìÌNk±ëÀ®lÄ–kËî졦k¾†ìÈFíÕfm°¨ØŽmÙžmÚ®mÛ¾mÜÎmÝÞmÿÞîmßþmànánâ.nã>näî×Ö˜:`–æV–ç†nçžnêF–è”ëÆîíÉn@án=ñîïð®ní&ïî6ïóñ¾ŽõŽŽö~Ž÷†oôþnæžïñ¶ïô–ný¶îúÞïòöïüþoþjИW–G–WpfYp@qðop Ÿðí©p ¿p Ïp ßpïpÿpqq¿ŽH0€ÈÈ8Æ m8X„Iê8qˆ¾<Pñ7€_ññ‚ˆ„E( ?ò ñ°Ø»{î~@€hò  ×qºH€C:€˜ìï„0ò­9€xnÿ&wòjr2?¿°ò  2G¿8óïørº¨ I+/óoñ.Äs°ñ%÷qK €<ˆ0òpó€pžX„:xô踇HÏø‡)§†D_SX„<}X„EræÐ‡€çVõHpàôH@ˆ‹< €Y§2ïȃPq]$ª(p2§† tîHõçžrm€E€uY§u[Çõ †)çu_u·  HiŸõcOv·˜tjHu^¯dσqíEOõ²'m¸õ8ýTú %Û"ømæ|@€l P€lÜ@w›u´`ƒ¯ ”5uxX‡[‹\WC®Qc˜H$¦†"b‰‘pj"â#jú̈šŒ x8}XDà†”pä%´M…M¤_Ž.Æ×ãZIP?…)i$Hžÿ¥ÏsQI˜Aºå1$8C~6fGg~ˆ80ª8'uÚy'žyê¹'Ÿ}úù'  :(¡…z(¢‰*º(£:ú(¤‘J:)¥•Zz)¦™jº)§zú)¨¡ŠÚ©ŒHV5*ª©ªúi fÀE«Ê:+­¶új¬ÝàZb-¢#eñáe€˜Dp@“ÈAT*8”N2¡¤Í‹•Õz-¶š¶zì\„S@at €>à²æj«zð•»ã& y,@HCÕîD‚oД- Ûz®æ^$ÀWÿ ðÄH±æì¯ k³/­žä*ÄF  ºÀãÒÿÆ/¾*ü2Ì‰Þ V÷ EsY~À¼àÌóP­®ÔjË8 î¿ñ4r 3ÔQ :sD£WÅ5”‡6ðQp÷8èñ?Biq?X¯Å³WMSô”>÷⋚ÔuÛ}'Õ°fy²¹ °á¸¬MóšKM«'‡»vÃùftrDŽÇkî"sß}9æÕuHÓ"7ŠXæZñŽ#AŸæñRŠ}þ$‘ÿDRM2¾(ì™Û~»¡Bã¾;ï™.R@н ?<ñÅ<òÉ+¿<óÍ;ÿ<ôÑK?=õÕ[=öÙk¿=÷Ý{ÿ=øá‹?>ùå›>úé«¿>ûí»ÿ>üñË??ýõÛÿ?þùë¿ÿ÷àøÿ?(À°€< ¨À2°| #(Á R°‚„ 2¨Á r°ƒäà% å¥DQ%<Ô •Bêƒ.|aCH¨ÎQ4Ô •Ã@ípO0üá eˆCqQ=üÓý”D<±‰1d¡‹¨¨%ò‰Š{²bœ¨Å Q‡R$áMFAmQ‹]äáU˜F(N±…elâ…Å<ÍOu¼Óí”Ç:í±9o„#ÁÅA¶‘„ú#ãˆÄ5ÖÐbt$ CE*‘‘C„¤1 (IN2,$(ÊAq2ˆžD¡%½¨ÉFª”.¤dŸÿú8'Yªˆ–$²eupÙ]jÅ•„eS‰ÆU^r”‘ô%O™Ic.S”Î$%2“ÉÊg¢’˜ªdæ&£¹A`^Q˜rôæ"­É'mnS™æœæ'©ÙÌNñR7íüË;éO ³’ š§•êK}Sœ{j@*д =hèÈÏnú3œØüB#*щ*´¡ö|h1Õ ¨‰r´£­(F¯©QtV³P=)Eí¸P=ás*-MÊK}S… ´¦éH3šÎ–”P6ýé@qÊÓuöt¨çôP“šP•ZtŸMígHù¤T  µ¨V%*VÚ§©þ´ªY%éWuzÕrµ¦^Õê0£úÿͧک¬feªZšS‘¢n=éYÁŠÖµÆõ¢>½«Gó*Ö°Òu¬zµ+`9*ØÂ6­suì ÛÑÅBÖ°ƒÝ«\#+Ù”âq¥”åëcA«ÙÍFô³™µ,c1ë×Ñ’ö¦p íi+ZÔZj¦,±mGpËÝ.„· ñmB€;KϾ¶®—=ìqýDƒå2·¹Î}.t£+ÝéR·ºÖ½.v³«Ýír·»Þý.xÃ+Þçj¼æ=/zÓ«Þõ²·½îoyß+ßùÒ·¾ö½/~¯ßüò·¿þý/€¼ß¸À>0‚­;à3¸Á~°| á S¸Â¦®„/¬á sÁî0ˆC,âùÿ~xÄ&>1н[⳸Å.nîŠ_,ã‡8Æ4¾1Ž'lãó¸ÇÞ±ƒ,äûyÈF>òz‹Œä%3ù»Jn2”£\]v·³lei•õx¨!q¹Ë^þ2˜Ã,æ1“¹Ìf>3šÓ¬æ5³¹Ín~3œãç:ÝHQuNÔ•ç-3jφò³¦M(AŠÐ‚2t  (Eÿ‰Ñ“rtŸ Í'Iï‰Òz²tž0'M÷¹Ó‹â´@MgOÛ9TtKÔ©•êC­ÚP­.Ô« kþѺֶ6Ÿ´æ¢£°ênÙµk  èú¼”´lAݣΠ0€TTC¬?5K(²RCljß™ÿ$ÎÙ¶"1`q:ÑÉÃE°í9-ÚUe£‘}˜€E@çÝë¶guÇûOya*‚›²äÝÁÓÓ¿Õ➀àïSÂ’®´µæásŠ›mââëC D†Ý›ÆyD>㛞GèÿÉSˆ~q}ãÄ7ú‡6V:D'bÃT?]ÉZ|H‘ ‘^ Â`¸EÉì!ù,Uxs@‡&&&666HHHVVVhhhwwwMx¨V«nr–|x‹yv–e¦i‡®eˆ±x†¨p±z—¹œ~»WH¬|[¸`GºMªl}§yf¼go¶hu¸xi»r|È}>ëx9ð{.ÎZXÜ[[Ç^eÖ]aÎf_Î~AÕjLÜfVÖxLÒwSÈchÅktÈugÉsyÙdfÕmqÞviÙxxæ^MãWVèfIäcYësGèwVäfeåsiäxx†mЇs‰‚{™˜m„švŒ™}”¥m€«wˆ¥}µx…Æ|…Õ}‚倹€Z¯Œ¯v²ŽmÖ€:õ…æ…+è‡4ó‡%ò‹5ò’;͈G̉SÎVÓ‡FÚ‘NÍ’eÈ›qÔ‰f׃pΤ}Þ£jاwëˆFë‡Wç˜KèšVð‹Cñ•Gð›Vègå}ê–eê•wð [å díªvî±|ð¦gð«p‡‡‡‹„™–…‡†™•••ˆ‹§Š”¢ƒš¹•‹£–—«š›²… ¾ž¦»§‡š¼Œ¼‹—»•…·“ŸªŽ ¬®«ž°³•¤§§§ª©¸¨³¿¹§¦°¬½´°®¶¶¶‰£À—­Å›±Ë¨¹Ë²¼Ë±¿ÐµÁϺÇÔȃ‰ÈŒ“Êœ‚ž׈ˆÙŽ’Ú–‹Ó——Äš¤ÖŸ£É¥ŽÂ¯ŸÑ©„Ó©‘Õ²Ó³–ΪªÈ¬¶Î»©Ê³´Ö¤¤Õ¹£Ö··Ý¶¸Ý¸·Ü½½ä㇈䈅䊊ꅅ튊å癈噙ðê¤†æ ˜íµ„ì¶ˆí¹‹ë¹”å¦¦ç¸§åµµò««ò¸·ÄºÄмÇÖôëÁêÄ£êÆ©êɬé̵éлñÀ¿ÆÆÆÃÂÍÈÂÂËËËÃÌ×ÊÒÚÚÃÄÐÍÓÕÕÕÒÕÚÖÚÞÚÕÕØ×ØÞØÓÜÜÜÆÓáÜÞáÝáæåÄÄåÇÈåÊÊïÃÃíËÌåÏÐç×ÉåÙÙôÃÂôËÊøÎÍøÐÏðÔÔñÙÚøÕÕùÞÞåßàåàÜäääæçèêããëëëïïðòááñííúâãýïïóóóõ÷úýõõþþþÿÿ 8°Áƒ*,¸P¡½‡ ÿÍ»6¯"¿n׺a¼Æq#ÇŒ+bœÇ Á‡»¡³—/â@~÷bÞ+9О˛ mâÜ)P'Ïâ *Ô%Ñ¢"5º”éΊPi*ìñŸ½XAfÔØ‘«FŸÿºA×íU;}Μ¹ãǶ­[·3ßò#)·®Ý»sñêÕKïR¥MÌðTÃI'ìpž=~ö*6Àˆ€ ÐJð f0fà>¶bRgxä‰ÿˆ¥ØvŸèsJÖzø¥RŸaš¢C¸XêÈ©ÇcVð€õPƒ  ÝeCÐ «D¤y0oÀE:*ƒ ÉP :dÑ|}öjïE?ŠzgéôO¸¹›˜š›¼y©óéE Ê_9c\*ÉŽÿ0ª¥ªj—† ­V‚ÓD¤z«i0«VÔPÑg¶& ´]ȸp¢t¡§6¬\Z¬‰¹¬¾)¯–ª¬¹¨9('$‰¯ÊõPå {@Œ'è¯ €zʧ~Êt€ sôs¦ÑGÔt° vYÓ‰Ú¨,Õ¥äw¬Æê±`Ú¢Yô¢÷)Y!(6¢’P!fŒ8Œ·š°DÕ$ ÿ° À=`pL ÑÓ »5ÎsjE–°2@iÆ6nз¥ ¯(š¬^Z¯ðI¯&kŸgj‹$»6ÔA>££5WÝÑOo`WÐPppÛ®V‚窥ÓÄyÖö! ÕдÔóy%J¬í²„k¯cе™j©iÚ²^æ©ÿàŸsÜ&— ö“fg  à•s0 `ðEP#ý¶vÈAþs/àÿ0ÿ` ”@ À´‰®8¸†+²óº» ¯¼»©~Ò½£¯é€Ûqi§aL¯ i‹þTPàAau ÏÀ TxK–1ÿG2 ÿ°+@°MË}ŽB©#†˜SKµ‹¸W+eù<8EJa¼È;Öe³ ~ô¼Ó4PÀÕ R½ÛÛÝ;x» ø'W*Ðåk¾ÿp @¶Ëž¯ñ˜Žkµ¾û»$\¿‰{¯œÃ¸¡B¼ûY“éuWapmйŸºE@¥‹§ËvÂÐ Up£ (ppÁ| °h¢R[µô[¸¹[ÂR<¿9Á‹–“61ú¸ú £è’0 pQõe—Qðp{r«´‰J´|t­£pY=;p€ÄIœ 0îkŽQ<Å&È‚\ÈC2[d'Gÿ±¸@ Ã0ŒBà>j··#…¹e0¢p<„ B;c< ¯ \pU@¹'`zŒÁ}ÛÄ‚ûÁƒËUlŽ¿˜º¸¾sÃà n´E°§€€ºmwkÌø·L´h&Àœ P«ŒÁDþVõÄKÈ´|šjÈÝœ¿Æ£Äk]Ä` E€‚;Ð ÐÞ[MÏÒ$ª}QÅŸì½d–cEŒE|ÄÐmÍbÍ´ ÌÂ"l˵β\ÈÐÚ©‡ùÆD Ë6…ëÜÎï Lh g p`maB·Ó €‚rµK$W1Àá»<ÿLaЎʱ•ÚÐ;ÍÓ ÍÍ#|¸ÜEæ, ÄÈiÃèš°piÞRPf@R  pŒ ãÐ š  à§@f©ÔÀ ‰( ÓæÛ 4}ÏP‡Ð73µ•JªðÇ‚&¿= ÔàìІL£ïû¸@Ã0 %ø÷VW¸0€ {`@fp°KÍš@ à@ðàÕ@sÈXÈø2 »Ïp¬ÖÒPÐæLUµAZ*êŠÐ¬>Ý×µ˜×?M¦'+P¹Ž{Xæfn„æ\ Wð'Whf@ 2  XÝ ð ÆÔ E0Àà ÐtÐ ¦p/ª`2ÿð Ñð 2×MÞj-ÒÐäÏ€ bàg8c°ètø v® šàN9  Ó0g~ꨞêèÈ*nÛG ;ð’Ñ–6FTWhxkã@€0 Š ³ à~Щ1.‰ÈÞÖ¾"R*“¨t[©cpõ÷j ×â–¯+>ÛòíÞv}×c~kÃ@ éð¦;`°o•ImDÓÿ»:пÀ ¥µ<ªfZŠ ÊÐ :@ZÆôƒ@‘"q õroóPÞ¬£ÜDòuÌ ýUZú ½Å æbÞê®^Û‚ö÷mL}~ #ÐioÕ ü¿ ¶cÿ Ý~ ž€Gª£Ó6ÈĈC ÍõG«ý -8Oê xëM”Þè0ÖñWÂ$_×åÈêå®q瞣°Ðçz°™à­@s¨!€m°s·€ C…Ý2 W»þÆÁ`gÀ Ìðaày0Š ÈYmx[?d dcŒ‘Aº'I0Ó4…ÉT%×dkDôXÝ Ž û4–ßx%b׉Ø+Í(¹àïœ"²ã eÉÎ ™#aqÏ?ó î-s؈\$À,`ìA“ø5Ž™Ú,Tf4͉\"QoRt•&íÊ,Ù˜•ëXè©óè×¹’?”‡]#Jsb&a PtJÒÁ—t ³#›ò¥#*!L}ÒÀ>=&kb³`ÊDçá¦7¹±C_QÉ\:ŠÕÿ­f5±èTgV—©Ò®²säŸUͪ’Ää†Ù¥cÌ7¦W­$#Œ\ H˜õ˜Dæõ09`<†yM'…uØŒv«šÅŠŠ~sÕ«du[¨V2J-²R…”Ýä˜XŸSÒ‹žô³, í>I–š)©}éjY„ ¡CdíI"Çן^2¼JÅK™Ö4£„£°Â.ˆ¦Ã ­ÄBέ_†2KœÈq±Ñ¥!œK\ÊF˜³ÒÝ.KЪV#å ­Âx+“X«Á*ñ(á0Qú T)Ž×; ÕʓȰPNîdÏ ]G•Z Ù8̺QÎ ÂÖÊS0ûºwÿUÉb™’Ûˆ» ¯D¥~kéK¯fžY1µJ {F™Ø[4OÂf•˜ÑXB°«Åäj¯ÊH8œúÔ¨&9wgDêâœ\•¨ÒÉÛ¯Eq'ºXÊ, +ƒ¯k–åÂyuÚ2:Ü9+çÕ&Ä2Íò=—Æ*/c@ù壑^ )Ðéo¡ŠËS‡«Ù Àبóey'kœ‡í†‚SÝì~å¹Õ5t0Yï™8žý¬-ø/ÊuÒåq‰‚½‚ÉÒ,q`‚ê™.QÄ¥~³«õ2nXÇÞþŸe#Kkí¾×:´¯7[äÉ:ÅryE+ÈœÀV”´ ¤‘öeÕšßÿØ«¯F£G=¢6žwØÈé:ÏzÀ`ëÊa\kª´î°ínV=þq‡\ä#'yÉMþq‰¢.å'¯Î3\þr˜Ç\æ2A4\® ¤Bæ.O… 4áòhÐÜæ;w¹):Ñ SýåB¿yΕóhtBˆÔ;ñ¨"8*7õÉ1Äܯì+÷zÈWNv•×ìeg{ÛCÞp¯º[×Àv“°é]ocãò€1Àq‚A>2PÚ´ü{"òEÑq±ݳÁ}1#?6ÉX‰f]ýø÷š¤/¢MMî\µÂ›FùrB°ŒèÝ‚…×4ÃL?søFÒÄU*ÂG ƒè¨ÿÆS ¼ä´INuÖgÝFÎ'[¶†x^Éuš³ë°9ÿøçuÜmHÆNž~õöm'†eA#ñdÚg§o_súAO"Ç“-, gC¬0µ¢œgrf•«¬ iUL-G¾WÓŽ1¾RZ.rJ4¨Ú<ÍØw#¶(c½z› ½dCaH…¹b‰¬q‡r mð=Ä’˜Ê'úy¡XK#U*µµÀµŽ¹¬Ž*A5‚¨Âª»±jÀÎë¬ ¼ \½Ô7ˆ}â7œX-¹(™v€³àØ1©`#Ã,Q¶°p“7rÁâ˜.5rBAY. ‘·CÃA‘ÒÁÂ1 Ü. !Ä ÿÕ*Â39ÂZ€‡ü/ü&°¶mhÂk¨B0<)3%-d . &”»%#2 Û¾<Ã2tD³Ú‘Z!SØ@}y|øÀY¨‡§j†“AS¼D@~  'ED´‰ÁQ2AôDêƒ.ësÀDdÄ „ÄÄÅ\ÁY˜™×C= —¦¹ 1ቃˆ¿Nè½ú6‡ ° â4‰A¬ˆ@Œê¿!‹ˆ °&Ä¿AQÀCDÄE¼Á|Ä24ÃÀ›–ê?Ò•O«$˜¡/aNô½ê°œ0´Ð¿‰â‡®“ŠúSI°l‹mœ¸è[‹&KE†$ÇZ„À ÓÅ[´ ]²ÿX@²´ÑÀÁ !„@tඅ㯠K#£#»“D@°8·ˆBEZû ãôGSƒŸBô ‚,.@£M³0À'›³†dLîüB {LÝÜMŠÄ…˱q %Úû#¢€󼘬R…£5Rü3‹[ ãB0 ¹p=þÛ³[{>ll£T»ÍÚ¼>ÇÌÅðäÁU ‰LAÖœ L–ÖŒEC̯£PKÉÌCQìNï,PZ4]P2\ÐUÅ>ñÊÄ‹BÌpd [7¾|¸ ÃYÌÁmD-Ñ=ѲÄûYQÆJ,åO]£Q²(ôPÛdÒ-«5ÑõQŒjÅ‹M }Å UÌKÒ²"ÍQ}Hs$QÈôIZ‚ ÿí”NoüN°úÑÏ{Žÿ)ˆqÐSP'}R=Ë2•R3MS«ŠEáêe²n؆ÈâíŒÛªì#®5ÍÓ1Ç0…RýSLµ mò3šTTqâÔ&¥ÃÃn¢8ΛÔí´M´4«3MË)MÓPZ# í!k©µ5Ы˜Aûœ®¯` ÖTÅUaÍÍb Ï TYD%üÃвà¨"»G*\Íi¥VI-47Ö½VM%”ê|W‰#QU=ˆ)X[,·EÕ=ØÿUE©VeUÕ&‰í×±h,“×n”IœMi-×êÃMkÅVvMÓå×+¤«pͪZ¥ó·»YœÍY%¹–{:ŸýY  Z¡ڟݺ=Z¤E9µ[»“[;´KZæ(YJUÕ> X• ;=Ì©­Io•¼]EÙŒV_=Yž¬Ú•½ÚœÈÚNÝZBE2…•Y¯ÀΜüC5YØùWuµÚuÅÚ– ÕzµOÊk®·ÈWëÜW¿EW>O´5[¾5׉ ”Ö$7©XÇ娻EÙµ\\ÅØÊuYåSÒ×´ÛÎõ\Ä¥XÆ=Ç‹µX–ÝÒ­¸ÂÜÖ¹e[ÒmÝÙÝØ¦¸]ÜÍ]ÝÍÝÙ]ÿßý]Ýí]à^ß^ßÕSË­>YêÛËíØåƒØsµÜëÝÞè}^ðE^î5Økl¼É5Üðý^õ]ߺm^Ö_èe_øßöõ^ùíÞÇß‚¤ßúEßùýßûÅ_ý5UÑ%ßü­]þ%[ûíßNß÷àŽ` †à `®à²°Bºµàæàv`¾àî`þà.áÎ`ëUaÊaVà†á&W÷ua –áÖÚÆaÞßöàâFá¦ab fá:Za"b$¶á!öá~b(.b#vâ&Æb)ŽbÞa%ö_+æV/Îâ)þâæaÿ-îâ1Fã4¾â26ã5VcNâ-æb2¶cžc:–ã#¦b?†ã8d=fc<Îã^Û3ä>Vä@vãBfÞF6äE¾ã*®dK~dH>äLÖdíåäNžd>eFcDdBÞcGÆdÅåTnãV>åKþcJ†åXžeY¶eT~å[eRÞä^öeW–dV>¨-fc>fdNfe^ffnfg9aþåU–æiæR6åQ~c\®åm®cnöfZÞe^Öæq&çl6g1ÆæsÎåh¶f`Fçt.àn.gvngUN¾H¾æa¶gjÆgOöçŽ]užg]^çz.hƒç„Vh‚Žç€Öׇ†èÿD^hŠnh‡îg‰Þçw¾g€Îg}ÆèÂhzþæ‘fhp6iqFè“®h‹þhwÞèƒþd¾hÖàNi~Žéj†çœæi—öi™®é ÆéŸæh–ç•ni˜ÖéŽ~é ê†ê¢6êžé§¦êó謞h¥¾j¦nj©>j­j–&ê©&išvj°¦êªj²Fé’6k¯þêŒV뵦ë¶黯k›c´îi¸Nk¶˼¶ëºk±vë›.k•NêÀl¾fbÇŽk¹Žj¼.l«¶ì¿>ëÍ^êÇlƆìËNlÅFjÊîjÍîì¹þlÎì·>mÔÞkÖöìÊ–íÙíÐÆíɆmÿÞnìÞíÛNm×^ìØ¶íÜníÚ&mÄ>ìÌ6îâfn¬~íßÖíé¦îãFîçÆìè&îìîkÓÎníVmáNnèïñînÉ&ïònå^nïæêê¦mõvnôæîÝîù~o‘Žïˆÿþopp/p?pOp_poppp Ÿp ¯p ‡p­ˆhÑp=áp<ñðç7‘'q?qO›'‘率ñ·“oŽ?Ž/Ž×ñÙÜñ·ðñ´r³ò!Ÿq7rGò$Ï!"/‹&‹'ÿŠ(—r%wñ ¯rÇryhár=ñr<ó0ç17‘ÿ27s2Os5ŸM6os7s8s9Ÿs:¯s;¿s<Ïs=ßóçh„ €:ˆŠ:( Þ¬¸ˆŠC ôkèó(€F C(€@o?‡tA'tCŸŠF8„>™tOÿ‡E7#µ,ç‡ Rÿ‡gxôH‹ht~˜ô'ïô°1àðQ/u¬˜‡S×u€ŠVÇtŽÑõ€Š^'[ÿñGotiøs^'tþŒƒg—ŠC¨tÖ€:h„ètˆö€4€CˆsWŽy@÷:€Põgøvå°‡Èv°‡C÷G/{8àð€oè†yo„¶¨ƒ €¨HxÿiÐu~€:¨ƒ|O‹g0ˆª8iø]—ÐvŒxWõk€C8ø„_ø†xUŸøŠ¿x³€œgy…ù‘òpø‰ƒgyžÏð _÷n€DŸŠkpx·vOo÷ç80÷:hzht?€Ã’{¨ˆƒ¦/Žk€¦€n(€©Ox Où¨0²?B êµv¨/€Ÿ‡o‡zxõ²@ø ‘€SZô´ø÷Ðp¿7°û‰Ïû?ŠÐpkoÀü±e'tÊW|Åõq7 ðt~¹ÿ«Ÿü»w²Ô'”‹({ª8ÿGü¨À{åh„°s§{Ì÷|¶0€€ €Ö÷󿀅çýðýâ ~Îô`û¨®7‹ìgô¦7’/‹Òç~{±ÿ‡kPøã{~µçþð~¶‚h„¬ˆÿ Ôhð B„×Ô)pHà€gøý»6 !Æ„ü \ø,@#‡¯e¸ñâ $œG@@£¤ @±$Îü@J ÐÍ@hæÄi €Î‡\Yg£Ï>6šYóæÓ„@ÿ5" °Î‘2çe=ØÕ`øÕa9ðaYƒÈíFàм‰½Æ¸õ{ÃÂ@ÿ¶ïY™æÐÖ/ܲ;Sï5¾q( Ø^¥ÿ,ÆÈÙ³4×–þg/@P¡»è‹_t+ ›íƒÔüH1ep´n I;¹ß  …‚ ºkÙÄqäÊ—@LÛsÿÅÉ`¦Ï̓o}N~¸õس&oæ÷ðe xx þkÀ­·™Ï$ÀZþÅ7ŸAKøÏ3¹ @A5@JHÓˆq @tÝ÷Ï<°qâ?©ÅÄ¡Zˆ*¦µa‡†¸•L@–Zü—ؤÇN)ÙÜx õOciéŽ0Ç="e[b-vU@‘ÿY–=¼¥t>6 R_|˜Rj6Ræ•©™¡…n$MyÆAÒ!8¢¨S…Ò 'ŠÏ ªÓ<™ÜJ<ØglÐ5ò =@ÔJ0øT7péGA?\pD„—@q0Ç(¥‰†—é¦Euj’ª¦ŠJ*˜ŸÆkª«öUǧÝ|j ¯«§AÝ,ú'³Í:û,´ÑJ;-µÕZ{-¶Ùj»-·Ýzû-¸áŠ;.¹åš{.ºéª».»íºû.¼ñÊ;/½õÚ{/¾ùê»ovú¿ <0½u@Tz¼0à k0ÂzõH@…€uH¥ü…W^»T€‡M\ÐJÝtsÀCÿýÿÓH×(ÚŸÃ1Ëü®Á  ÀD0ÀþUîvs`:Ox°ÁçÀ”Ñ=«DÙ!xÆÛ‹àÜÈ…A·63×]?t@OSÿ ÙÀMˆ2Æa_µÅ<”pOeŸ¦¥H@U_Ø1o^ >8¸ @^n%¼Ó•œý[Б„øÊ|>ÚDðü¢á9x|>:é׎ùN6í„6KÕqMœ]ÄØ3?´Û5dó³:yA/€WòcJU:òÉ3{úâ/†MÙÏnõü’j:Ÿ @í`ïÜûóV[Â% ô!Æ+>ú¶áyØ!±õékáo飖Òÿdûp7½¨\ÅqX£b"¬­¥¯€´–ÁxÀ2]‡ ¡(Á R°‚¼ 3¨Á r°ƒü C(Â’°„&ü!ƒ(Ä!±ˆF<"“¨Ä% ÌdN|"£(Å)R±ŠV¼"³¨Å-r±‹^ü"Ã(Æ1’±Œ`DÓ¨Æ5²±nt#$ú‚«?Í‘ŽÎª#Šð"=&‡}¼ã³ühA>å†<$"ÑǸ’‘$$›ÕȲL’’‘dV%9…¢Dr²“Š”ã%í(ÉG†r¤Ää)E O²ò‹´ä(ÿK LjR–´eph)+\f¥•¾lã+³¢Kœ “˜¼d*ó˜LSÓ‘!ú%4ÓÌZ¢²™°Œ%6UYÍmrS™ÏŒ&4§¹ËljÓ›ä4g9Ñ©ÎuÎr“àü¥8sŘ̓žÖ¼f7™yÎvÞ“šÉy'¹Ö½.m• \æ6Ö¹bÕíw—Tè–»æ5¯v…;]ïF¼£íOÝß䜷¾ÈM/oÇÛÝõ²w¾Û}.yL\ûضø °€¥ËÝýê—Á Vðƒ‹Rà ÏöÀŽ03¼`cxÃn/}),b×ÿZ¸´î°‡©Û_ÿæÅ.ÆÈˆG\âƒX½)^ñŒiÌâר61qŽqä¿8¼ÿ-ò{åËUý˜ÂC¾1‘{Ìc)_ØÈ6n°Ž Òä ?ËYî²—Ue*›ÊaÎÉ– f+_™ÍSNò‘Ý\e2ùi&ðšé\g°ÂwÇs†s›å\æŒÜÙ¾yt ýf?ÉŒn´ž%\èóúÑ{Ni!­hGZÈ|†Î¤)¯ „Ô¥îó’Q=êL‹yÌ––t¨¯[éT+yÖ´¯ 5ýjOcZÕŸÆu§]}ë8û̶5²Mì]{Õ¾îu­“ m`oúÏö ²­íms»ÿÛÞþ6¸Ã-îq“»Üæ>7ºÓ­îu³»Ýî~7¼áÍŽäÄ»Þö¾7¾ó­ï}ó»ßþ÷¼ƒóï¼à?8Âï€c[á8Ä#.ñ‰“›á}¡8Æ3®ñsÜÝKÇC.ò‘“\â/KÉS®ò•³\Þôn9Ìc.s™Ÿ<+3¿9Îs¾ñš?Eç>ÿ9Ð Îó¢½èF?ú»‡ž¤3½éNÿ¶Òqòô©SýèQ/IÕ³®uœ_=#[ÿ:ØUÞuŒ„½ìfßùËÏ®öµ+|ì a;Üã>p·ÛÑÌ6¶™í~íEK{Ú‰®v?%øÁ¾ð†?<â¯øÅ3¾ñŽ<ä#/ùÉS¾ò–ÿ¿üå©?mžóÎê<Š@ÑþY¤/•é?Ÿúfõ¬_=³ZoÙÇ…öµ‡½çUÿzÝÇ÷¡÷}ˆl_á?…øÅ~éyŸûÝ÷^ù¿w~ð‘Ÿã…ú9±~I°Ÿ}èGŸùÌzÐ÷Ÿþ?ŸüÎ*¡Ä~õ7 ý!rràÏÄùÓ¿þç;¡šc€îô¥9"ÙH`ßOˆDHÇ@GÀEX€H_̃¥(Ê? `dÄEÆÄFC@•E[<`7TJTˆåF…èÿÅÅ’Z_#À… „þ)PFøÕ©ಔ„4THÆ` z€L æ ~En<ÈbÄ žJAÿ åäEû”M\Æ!ÌO€40„m|H …L–…D…‡Hƒ ÅÔtÈ… ìŸÂRHCnØFû$ â¬!U\a?PÆH&JUö…=LÐÔ$WBIPè$iôddXEXfÀôq(¤Uâ„RÎCCžåS¦ˆj°ÆTº¢oèÿm€`zxãSü¥@|å;ö_n@¤=ÎEÐF1~ e¤ª8GF‚dÙü#“0`VØå+êÒ54Âî@€ô FŠ#u¨Ìu ¦AXÅi>ÅDÆWtfVXʲæMF„H…l&‰˜ÈvŸdÈÉ8šô‚,…¦€‘ÄJQËÊ0Ä ÆE‹ $KHÉ‹˜dNH g`MðæðÙI‹¼H>âÄN0C”ˆªŒgQ°%È0 z"eFD‰ŽØœ”…OZE—ÈåPN%Z ƒžHuÞOêŒ=Ô} %wÖ‰A˜JŠ b| Y¨ŠXf…RdG=Iô‹fÅ%êh¥\JpÌEOx@ «?¸Jp0†Ž þGŸhJ¯ÜèƒRŠý4Eþ”Å!àJÊ­\eL\¢ž<„”ò'F„© ZÊ¿è(BLŠWÅD@!ù,Åx÷/‡&&&555;;;HHHWWWiiivvvV«nr–|x‹yv–e¦i‡®eˆ±x†¨p±z—º¯k7°t>GLMS˜CA”bbœ~¤MM¢X_¾NL¹[A²TT®mI«|ZºM¯mnªl}§yf»eh¶hu¸zl»r|Ç{>ëx9ð{.ÁONÉUUÛ[[Ç^eÖ]aÎf_ÜkOÛfVÖxLÕxPÈciÅktÈugÊsxÙceÕmqÞrcÚxxæ^MãWVèfIäcYësGèwVãfeéopæsiäyx†mЇs‰‚{™˜m„švŒ™}”¥m€«wˆ¥}µw„Æ|„Õ}‚倹€Z¯Œ¯v²ŽmÖ€:õ…æ…+è‡4ó‡%ò‹5ò’;ʇHÊŒQÎVÓˆFÚ‘NÈ›qÔ‰fÕrΤ}Þ£jاwëˆFë‡Wç˜KèšVð‹Cñ•Gð›Vègå}ê–eê•wð [å díªvî±|ð¦gð«p‡‡‡‹„™–…‡…™•”•ˆ‹§Š”¢ƒš¹•‹£–—«›œ³† ½ž¦»¯‡‡§†™¤––½Šºˆ”»•…ªŽ ¬ž¯¬ž°³•¤§§§ª©¸¨³¿¹§¦³­¸´°®¶¶¶‰£À—­Åœ±Ç¨¹Ë²»Ë±¿Ð»ÇÔÇ„‰É‹“Êœ‚É•˜×ˆˆÙŽ’ØšÕ——Äš¤ÖŸ£É¥ŽÂ¯ŸÑ©„Òª‘Õ²Ó³–ͪªÈ¬¶Î»©Ê³´×§§Ò· Ú¹¹ä㇈䈆䊊脃숈åç™ˆå™™ê¤†æ ˜í·‡ë¹”å¦¦ç¸§å²²ä¸¶å¼¼ï¶¶ò®­ñ°¯ñ²²ñ¼¼ÄºÄØ¿ÃÖôëÁêŦé̵éлðÀ¿ÇÆÆÃÌ×ËÒÚÚÄÄÑÎÕÜÜÜÛÞâÞàâåÄÄåÇÈåÊÊëÁÁïÍÍåÏÐç×ÉåÔÔåרçÜÔåÜÜîרìÛÛóÃÃòÈÇóËÊòÔÔòØØøÔÓøÙÙåßàåàÜäääççèëëëïïðòããñëëùááüééòòòýóóþþþÿïq«‡ïÞ=}ÿ*\¸°¾‡øú-¼Ç°¢Å‹)bÜÈñŸÆŽ +r IRáÈ’$O¢ ©²c½z÷ö¹cgͼ~8sêÔqg¿z>ƒ Š(Ñ£D ]ɰ%SŒNŸZŒ*U$É~× w ×®t/ÊK¶Þµ²hÓ¢=«¶­Z¶h%J¥ZÕd]¨wñ–|·l=`¸Â¹M w°á—…NÜ?üˆƒ‚"ž`ýÄ0¸ Ã2ÌpÊ0^|!M5x|G}ªþÒ²J×Óä“Ç®¦‚´wï=GµÒÔƒÎQxÎ\ÿà3^äQO9¥›Î§ôõ˜C´­$Ϧý Ü?];j۩ŬqZA:pÁ|ðƒ6p‰‹™ò8Ø!CvØXaôs«€ÍRjÛTºd×?–}Ï„A/ør„ÁA¸Ù€ #¡Pí@¦QC„æ(F1ÿò‡–Z! WK MtBb.$Å8‚œw uR“¥”Zœ¬Œ8R„èC,QLàq~„1XâY‚9ÉecoJ½‚£ôÀLÆŽP5è8[Šü$,é8‚¢@)àŒtøÅÍ‚0‡opðm’ëFÕ:M\ Љ*Pþ…˜Í,Fär×z€BÌA¡@Ðtf€7*´¨ǸF>% 0ÿˆÙ¨¤úÖ§®‹®wœªB`ò»vâ6€Á ,Æ”r†3 ÁÄ KÊ–Ed·ÚF'4Ñ0`!ŸØp”¬¼‰¸þV³ÁjSŒâÙˆö 7PÄçÅÎ`<èhÀƒzYw,g;Æ7>VN‚ jè„ á=ð6“æ-˜zKˆÞ©p#"–@˜…@ΚѸﲎ â[†¥šaIN=òiÆ=”! n`&yÇeY•VXª6 7îa–CD Ûs ƒR̈÷½F,JAƒ©G´ˆÞ+[ ÐâmÐðä.{™GHÂ’˜ÇLæ2›™Ìì…hx4ðÿÞA ` 5ŒA ILK€|,NH`ØÀ Ñ FIcnˆ•SkWàT® Ùqq_Ò‰ØÀž í([8.láÓmÀÃdÝJ–o¼7=ÈX¸ÒÙbƒQf´C •:\FØi7žk®#M‘~pÅÔ9Ø„(z¼þà8GàB´Àlfw!zëÁF  ðE ¢ÐõðF'6щlØ R嘅ÛjkßJÒ—Ýõp¤¥àšà¸V `A_X¶³µà…aè! ä‹bCº ´¢LfÑ-ÙzËèóÚÝéÞl=òa]8 4Û1€ÛUçà’#n µüGÖóózÃÏ­s]ç Â@ t€ < ‹<ä2È µZ ¹r6Hó:׈ šÿ8•r)ÁcaÄÕÉmÆgŒú°wÅ ;0K@4 M6ßë@ ó\Õƒ ¥„ Ô€ s¥À.@ÒkC4"8¯hqôlKÙFºà,=`MŒ(êš$ǬœŒÌöÚJz4^ o C` ŽM ¸›ÇfØ…T \DÇ&D}l£´ÁÓí<°t ÕU· ÉPSF¤âE$“µƒ"×A×ÜYÌu­¥5ìÉŸœspléÐ!C@Ç0&GcqY½UÞÊÊ}¼›u’ÇG€”çƒ3^T¹,Ót à@Ç×EEkô’¸ðÇȆ4`ö64Õ,äÓ½ÿË»’æ˜dÔ-úÓá7\u´mÛ¸ý¬oF' t!­E®<=ÞŠ”ñëa_”ÜCßö4öóaDƒŒÉ±…1-8o&.0ïà0±Ó=m›wEvMÃä]Þì 7ƒ ~ Ø‚Í']H† tHZ ŠŒ}C]äÊ%¾ 060•Jø²aqdÙÕËwÖ €¨º8øfVHoúÌ]!ÃwUn›<ÆYÎÚîÁí°:\EB°ÄC«'­†}lÔ@S]Õ_¿˜vàU¿¬}*~Ý2«§DàAæ É@2y|l´(8$»:ļ$« /Hxá?1èÊÿœÆSËq/@Ç,2 “•Û-÷a]‘EÇáA•W'Hù\9@¿Ïø4[ƒP ¢”£t²/q´Þܪ$‹®$QÌM¾ÉwÅÓµ®áS~¯ í®gH`Ë qj~kƒ¤éä­~òQ'ˆð‘TÔB;.àHZ <{äÐ<ÌÍä9 ¬‘Öÿ¹ëmÞñùB&]~» ‹.l—T¬®”Ç6j œp ðH¥TPâÌ24,É옮ìf]~þä˜L\/±ðUõí UÜ ÉR>å?QŽNŽ\ Wð•NôŽ &`5õpVIõKÕî ò#ÿF_oöBÔæÐíP~‡¾n¡Å<ˆ.îã.qÌ1ìÅ>í©d镸ÈeQš€ •   ÇXÇ7Ãží¥° ƒ° ùŽ™^‘ ‡ ½<Û¾äÿÐðþóy±äêjñ¼ÞÚ<çç ôŽÿ² òDû~–ï×Q|3êùtqðB*3³u™09äÞÚÅ[«‚ná0²n¿;Í:-:ý¼‰ÎÑYµAD^í“XäEåèg¯v øÄ7¼ ~Þ€WDmð Ý Uà ‘â”ß?Á$¿öÆlu/œß»².úEïð aú ÑºÇ`í€ßEFÿp Ç`C Ó€JL†dõ 0õU?Þ03‚OÒ~IöÇaöä?øP¨ÑÉ(cÄQNút ÜÞûWÐàA„ þã¶ÐáÄ !Ö«G°`?Š5n䘑‘tõ®!r ‘bÁ°Œ¸puÌØ ÂMhv$¡EM²Õ+†‹$ÊkéH#—î0¦ýð üWO DˆXb¬xïE‡÷Z¥úЫEˆµ¦e{pmBŒhÿqÝY—âÇ#Kî*©’È.—0)ʬ[,J&QRÚ­)áP§My£˜ Øßz´ø²š+FÄȱcFP¦Ûü0\‹;&õë[¬æÉz×ëY‚ã¡™NØJóßLZÝúª\‡· ŽÛÚ!WÕk/üz¯ßW×Ò’·…¬ªžýæÚn'rˆøáA"´«g³v¡è›£< ‰¦¢¾é›èêr *rêÁl~ÚÄ“þ ©Â—p±£«Æjk­ÿü»¨F_³J6‡¬:K?…r¬Í@2+ƒèZp£srùˆˆ#<¤¨¨/Ì— ;êðÃ,;:§¹Ï¬Ü‰8Ž0箂øè‡fÔâñƃ¤ˆ Õx ð>±\èGÖ¸ñ³ ;+B2ÉÿùÚBËÉ'3* ˜pP©®ËÆ;&è¤ãˆ:ë°ÃEB/_RoRÆ$…t¥Ì;â‡eª¨¾= ?üj VÛÒ"ë+àÒ«CeQF­G¦¼  ‡¦Àbši',{³#Â(R–1ÍdZõÏNjµ¬úà;Í ¯ö‹+ÏŒìP×Ö´Ü‹¬–Îc»æ^|óÕwß{{èßRz …ßkhé¡|ý%ßXPA%–…ûý÷Þ€Ž_TJA壌QÑ™úxyd’K6ùd”SVye–KnÒØ”ÔŽ,}nÚ®aLf“v¡”&cbé)"âÜõªŠ€,ðekýµ¿\!êï?ÿ°¢•µy£&°ØFÇ”IZ3;bQ&Ÿ{ º.¯Ë䈜bÎK‡¸RŽÙ°Á)‰hç?‘yEÍ+­B-^ê$RI¶hS¨P±²&Ô+„ønüÎû`®ô)TJ´‹8··;[ħ˜âhl£<“¶ìzÒΗoîÁ§´‘c-(] ­Q®³ÜªqÐCkçSÇ`} üuÖbwé­$ïhsãO¾ôæ.½¬$Z2åh4M¦½¢ü\»Zx…~Ä{­Þ ÿ ;©&hêvÿ 7Ü"—×y÷3‚¿Ñfëùæ#‘Ž}V£¿‘ùNuO-å‚—‚Ä5¬ÄO㣱”–ªÅ†F‹ë¿ùapyõ»ÿòW-þiyú[É p7ŠU¨8YÍk…¢!CÊ%$ÙYPAñË7’ÁÙìyLj…ô6ò·Ò”†o#öÒ·½A‘¯5ý°G¯ÜÃødíi²AXÖW«ùˆËce€¡‹##lúŒ¶ˆ&.QÄÐQ£êX72Æ©,Þ“Ý{˜&áNQyÔ±j´'Øí‡u:Ü¡}ø>»c[UF0wŒdŽ!1G݈ÀŽïÍnÓsOf·£!ÐWÔ•F¢8.²N‰œÒ|çÈGRdŒÔ!Bp1‡)­©fÍ‹^ˆøœËÄé‹HÄ^¸Ì7«_i 4rÍ{ÈÿB8©5³j¹™Wù ÆÊ­‰1—ò+ 0A¢ƒY/ù —ðB‘#Ä \ Rž ‚5B ï\ì•mÈV6ñ•Øt Z¶©ò°ŒÆc1Ì™tFh0ѲÞYxþ³+´'ð°¢B'&°!þã°&²§ÆPX3<¨IéÐqê².¼ô¥9ABK1D¿!š2_E•§)ð™LëG­¦ù#[ÅÆŸͦTÈ$m>ããšäjÕHN2U•üÜתsŽzÐmJíS*¼=ö-]£YâUP¹J=2q6®ÜŠWŽ”5FEÄjvLcºPËìâ¾cà&7ñœ bß,)˜VÿîQ­]úœ¹·È´èîp¡eÖ4 N=fä€g%cL{8Î1Ô,Nl©7mi–Àu¥Ñ”—¸¢.Œ~E­iS‹¨¦”¥ŒLG@a” é« ³«B×·uQmP(Ü!Æ5¡gõY[Ûê5ŸæzíÝ]c¡·Q¿MR]'UEŶ¤ Í-xà N(¶·¹Tï“Ø;¾ž”¼ù][0 CÄ è,g©.AC[Ù[žwº¥n>E›ÙÎ&ä³lñÛh“d$—v/Píò°ƒ¬£âí÷‘ý]Ðoó»®ûâ§] FÔmú²ZÁø¥¸äï„iR›æBÁ±Tyax/fÿ$·%NÔ‡ÅIa(ÿXäe2Sà ¯"W9IHv–,ä´<7½>îñNjóbn†Wƺ ¯aCOî©tÇŽr™¥ü`#Ãò¾ºÕ}eçᵒرzƘ×KæWø"3 ñFã—¦? F1iÅ;çÒÖ9ÑfVÜru^~“@®jBy¼éÞr:kžN³mwÓ–†9»&–•½.vk\çZ׻浾 Õ2`[ØÃ&v°™vê'§úÎóbµœA Øhy»Mµ• l;g›#΢Ÿ›Ü^BXÒN.ð·¯­bl£º#ܾ­·Cl`ºjX®É ·¹Ûbhÿ":݆[µ»­Íam2²Ùÿξ÷¾Ñ}p%wÚßïèx ímªÙgs¾m¦´_iQ=þq‡<äMyÉM>ò“§<å$ù‘/ÞÞ€·ÛÝWœ´eóö.œámn¼/=s7‹4¸Ÿ‰þsÜl˜Ö÷=º°š¾q¦ëüéöŽú˃Þj£[ÝßSÿwÕ·~u¬{ãZ;ÐÉv¤‹=ëgW{ÛÝŽö®óüël—»Ùç÷´×½ìvßûÚïŽw¨ëÝï||á x®ïܶ‰WüÐé.xÀ7ÞåïûÛÿx¸'^óRÇüä)ùÍÞòž¯üèÁzÂ~ñ'}ä%¯pÑC^ö«gýÕQ_úÙ_>õ¦·ÿ}í™ÍùØë~÷x¿½êi?|áã>ó¾w:ð‘ßz㣽ø¼ïwð¡O}ç+ÿú¹ß~ò£zæ[<ü[?ùëUlô§_ýëgûÝÿþ¥b_üÏï~ýao}ðã¿úúÿ=ÿûïú¸;>í³¿ýÀûÀéã>ü?,@×K@lÀæó¿ À×s@ù›? ÔÀ ¤@ó£¿ü> Ì@d@Á$Añ±Àô> Al ̾¬ÀäÀ”Á,?Ü`<tÁ º\@ÌÁOëÀü@$\AdÂ&\B4Â#”B‚«AŒÂ ,Â,ÄA*$B.LÁ.”9+üÂå{B,ÜB%Ã4½ÿ+: |C/$CékÃ) âCÃ5D<: ;;Ì;0ÄC(tCìÃ¥ûCCœC3ÄA<ÄEdÄÞKÄ:Ä3„Ã8LB' DEÔBGDÁ2´Ä¤AB 4ÅV¤ÄFDDOœDXÔÄZ´EYÄÄW¼E9ŒE/ä` FaFb,FcX¸k´FËFwãFoóÆodÁÇû"Çð2ÇsÄFu\G DG,rG‚ÇxdÇp¤GדǬÁÇyÑÇ}´ÇrÜFq¼†…H#È‚H„LHq\H†lH‡|HˆŒH‰œÈ‚0€ÿÀ¹„È„IP‹0€ü‡I°Hí ’lì(€pk0È„yA¹8€†è‡ŽäÇŒüÈ{8€ÈÆLIa©‡’Ôɨ•lÉÓI¨žÔžš>`ɆXÉ,ˆ¥\ˆ¢œ—{@ÈÆ­Ìà†k€L@@@ €(²¼ì‡@ŒdKØ>ÔÉk@h/­ÌF”䘄°˲L’³LË8Ék@I·„K¹L’@€k˜ÌÂ$ËÐK¾L>€kÐJ·äƒ½„Ë<Ìî¬D€¸FÁ,ˆàƒ@€¹Œ|JÅ4¬±TÌpIËÿº,ˆ½$ ×I¿\ͪ Í±ˆÍÙ¬M¸Ík|ÊLàMßÄ PJ‹”M·ÔÍã4€$9€ì‡¯µ<çtK£Í¬yͨ΂ðÈ‚€ñOr)€„p;D㜠ÏÄÍ{€#1MqOn€ €àúüûDüôÊ€LàOÿt:¾ŒÐ¸e-´ƒ(L½ìlÏkÄOùôБTüü@€¡ÔÐÌüÈ$ Ў䆘„zQÌØ„Q UL@€z KÏ;èKÑ#QL™„0€ó1€ØH$=P5Ï0ù¼Fÿ·d7ƒÀÏΔüìMa ЧôRâ|PODQÐ1ÇØTÓ`Ó‚ÀϽˆÓël‹àRµÔ{ÀSäÌRÏ4ÊFÍWâƒÉ$Ól€×”KåƒEü€@à·DÕÐXÁÍÅ$€MTÜpO O± ÕQMÒ‚ÐÏê4€UM)ÐØDÂQO'Ë$1€%EUEUÈ]ÕÓ„°Õ¬¡VBAO‚Ì„ØTµøHaìKnˆÍåRÕƒÒ‚€MMmU8ßôÖ¤tºìØD×rE€ð¹atIzÝv5KaäaÈ€¥H…]X†mX‡}XˆX‰XÿŠ­X‹½XŒÍXÝXŽíXmXo•ýX’-YÅËŠ Q“]YŽK‚4€ÕýTKùœ„œ\T߬S€=@ÉuÕϾ Yn0Öżƞ¥ÏrÍFeY¦Å¸´ÈE€ •Íd-ˆZ¹¤ZÅ˸ € 5OªµZ˜Ö)àÒ®½ËÚLðJ­Ñ¦½Û¸dЬ5Ð0SÔ¾mˆcµÙxP¶E€¸S¼ìÛ‚ø[b•ÒÑL¸ÐkðÊ–ìÚ»ÝÜ´pÙ” ÒþaNa^ana~aŽaža®a¾aÎaÞaîaþa b!b".b#>b$Nb%^b&Fbø{b(Žb)žb*Ž¿ìÅ<äD,VE_ÌbTŸÿ£k:5&Ä4NÅnãb-Þb3ÞÄ9æE1®Â1–cZÔã<æã]ôc<þc8Žc/ä@&cB®ã=d\4d1¬ÄCFdI~c;îãB¾dLVdH¦äEÖä2öäFÎäNåI~äD&åRfäTFeG¾CAfeQå;ŽäXžeS~eY¶å[^eXîe_¾ã6fcavE?äeQ4f]ved¶ä_NæB¤eUnee–æb¦ægä`&æk®efÎånæaÖæRèv¶çÿ€^æ l艦è‹6芶htîhŽöè^èþg…&i†–è‚.éqh”ipç•Æè”Žè‡†èuÎf:ni‘Öi“阞ižîé ¶é¡Þè¢FãpÎixVç¥vh¦&ê¦Îh•†ê¨véšFj˜¦ê§vê­–jš^jœ®ä®ê£vc²þ鯮j«ë³fëµæê°Æç¶æjºžëº~ë¸þä²>c³Æë¤k¯öi­¾ë“jµ.ì«îkÄ>lÃl»ì½Îê5ļÞgÆFë´&ìņ뿖ëÍÖìÆvëm~Ò.mÓ>mÔNmÕ^mÖnm×~mØŽmÙžmÚ®mÛŽí"¸mÝÞmÞîmßþmàîÖÎmá.nã>näNnåFmâ^nç~nèŽnéþæžnë¾nìÎn×®níînïþîçænðoò.oÝoóNoõ^ïÓFoö~oøo÷Žoú®oéžoûÎoý6nüÞoÿþïópðÝîo?p/mOpðopßïp §ï ¯p _ï"!ù,r;5‡&&&777IIIWWWiiivvvMx¨V«nr–|x‹yv–e¦i‡®eˆ±x†¨p±z—ºB7‡S+¬R;œ~¥JJ©VB¤XU±LN·VV«|\ºMªl}§yf¹dh¶hu¸zl»r|ëx9ð{.ÇSOÉTTÛ[[Ç^e×]aÎf_ÜkOÛfVÖxLÕxPÇejÅktÈugËrxÙdfÔmqÞrcÙxxæ^MãWVèfIäcXësGèwVãfeåopæsiäxx†mЇs‰‚{™˜m„švŒ™}”¥m€¬xˆ¦}µx…Æ{„Ô}‚倹€Z¯Œ¯v²ŽmÖ€:õ…æ…+è‡4ó‡%ò‹5õ•=͈GÊŒQÎVÓˆFÚ‘NÈ›qÔ‰fΤ}Þ£jاwëˆFë‡Wç˜KèšVð‹Cñ•Gð›Vègä~ê–eê•wð [å díªvî±|ð¤bð¦ið©lù¨dð«pû´x‡‡‡‹„™–…‡›…š•••ˆ‹§Š”¢ƒšº•Š¢—–ª›œ³† ½ž¦»¤Ž¦…˜¥—”º¹‡“»•…ªŽ ©›­¬ž°³™¨»¢•§§§ª©¸¨³¿¹§¦°¬½´°®¶¶¶‚ŸÂ‰£À—­Åœ±Ç¨¹Ë³¼Ë±¿Ð·ÂÏ»ÈÕÇ…‰ÉŒ“Êœ‚Ä—–؇‡ÙŽ’ØšÕ——Å›¤ÖŸ£É¥ŽÂ¯ŸÑ©„Я‘Õ²Ó³–̪ªÉ¬µÎ»©Ê³´Ö¤¥Ñ·¡Û¹¹ä㇈䈅䊊퉉äç™ˆä’“å—˜æ›”åœœï˜™ê¤†æ ˜í·ˆë¹”å¦¦ç·¨å¶µó²³Å»ÃÕ½ÅÖôëÁûÆ™êÆ§éÌ´éлñÀ¿÷ЪûÔ®ÇÆÇÃÌÖÊÒÚÙÆÆÐÎÕÕÕÕÒÕÚÖÙÞÝÐÐØ×ØÞØÓÜÜÜÌÕáÚÝâÝàâ寯äÏÐç×ÉåÙÙôÄÄöÝÅøÐÏýÝÂñÔÔòÜÝøÒÒùÚÛåßàåàÜýâÊôäÔýîÞäääãæêëãäëëëéíñûææûçèóóóþþþÿÿ H°à½ƒÜrW 8}úê»'®¢Eq úرbÄ Â[¶Œ]ÓÛAƒÖƒú¸Ýûˆ²¦Í!o œèOàKš sêZP(Q¢FêLªô&Ó¦'V”YóžÌƒþ6r‡PaÆ— #Z½çpà2^hy-# ÍŽ[;ÐþM uèÓ“/gÎí‰ònÝ¢—v:˜pa”{kNço®E…3;*œJV.UÙñÞ0^ðt¶³ƒ‡=qŽ’÷óÆ›oS#“lÖyv²‰§‚ÝM)[‡cê'J6ŠD;ÍG"q[MåAßÀC .¸ ™&¥æ°)1ÆDcãžy" j¨Dîi(m‚¦ªêzébŠ' ÿE‘U“yш‹^&0ê¸cŽ2>ø ̯-¦C*ÇꙬ’¦ö¹j†ƒÖ­A)ò$­O³Â×åd5ÖšÐL=á¢N^Áfz0¸˜{ì¨Ë"Ûn‘Íî6mPÏB»áAÛñÙ—\!곕¿ÇYéž|‹›𿢫.©ì¾Ûp»ñ>Y¯…€Ê*¸sÉ–—VÅq%œD!ÎC¡¢Î;¿;,‹»›ìÃËÂü²§þ5/`RV|ó@…ÊfíF¹v4A÷ŒL+WY‰£:“Vl˜Bü.¼S—J³³9g­u†;寫ÿÐ_EXùÄå·@s³O:ež™æš4¢M4èØ)óºUqa;cÿ¶µ½Ûµåc=¾¾u|Qc·´øbŒ3„#œÏÔy7Ãyyµ¼cýwà(]UÀauä/caõÒ¿ éƒJº™ƒ 2IóÆǸùÆ4Êf>§ï¿÷ÌùçžoxÛEÈ'¯üòŽ´¢Äut¶G÷ rC,×\Ë ¨d?†¯dÿŠcdoþù觯þúì·ïþûìÏÄüüô×oÿýøç¯ÿþÉwèOrYHؼõ-‹D¤UYicôÑ8ÁHFqïîa;91 xîÂàÞZÓ¹áï/]ëšM.sº®ŒMDd9W¸2+µé#Š  ÒD;ɽ!èH‡Þà© bpI?¢ðÿ$öA"±)5b!j’$Ò(dbKÈ\s©TÄä@` à Ôðóèœâ0Þ%ëWæpYð4¸9#Îx:Û O窌I+/LÄö%Õ%ù(qƒR<"L€àAæ:Üáe4c¨ØF©Á-ƒÀÛ ªŽÈÁ"1EW܉¾bU“Õ ­pú¢‹K Š%ÀN˜Ã’… \üèjÙ3ÙF¾yÒ—¿< âàÃkíË&Ãñ 7@TÌˬN‰HW9`)˃¤”†“t9ÅÈe¿€&}§I›s“œ$Ê=È?Ýä1шô:†€‚…Àß„…+L÷qxCÝÂüO!©–¿HF-uéØªu)m†v´wÊ'R¿ó¢¿2Bö1Fµ } `íâ è8ÆÒP‡gìedÒ@³KcÄ䛹n³§öl }·Ó.Ì›j«à¯±§d8ùú`ÄU¦r¡Ø¾©upr`" ôܱ§¦y‰ã›zšÍÿÿ.Hbš2™\ÉJ·"›g5´WY‹å¦*ë Ê§õ/|Ñ)M#ÒP#“ô-;í )œ0éKc:SÛ¦¹²'/^Ö‘BÑïø«fOô’M$=[é£åD9„ñ47ô ©*!U«šeª…œvé ­°! ø£PSä¾gYr£|ëV <+¢f‰è…##ÒRXH稷~ߘ—)($0‚ÔË}x ÍRkúóÒ+%!èŠ I$aŒ…í¦—¨õÃzÚŒjœ/˳r$iÛúˆá¶í/K #½- E h€¦° ¿–Ü0éÆFÚø]å»&hÔw0Êžäœvãÿí×l{ôpƒgËÄzïù%p$l>·¬ÒY%ÖA Áiƒƒtéðp=•„`Ýd\ÜŠFiätueE~‰7~˜¥ ø{èxå%:\A^QÔ%l5$éK€HPåmà Oµlð8‚×MrÅzš^ðtð&?2rXxG>øƒæ§»Ç{½‡+…T“q6×@ã B ¢ÀpKàQ¶\#¶\` á ;_$3y' Êp }' \ Ù0 74xRÃêW~µ‡‚pàu0§B,40aÑ Á € ›Ç 5 |*&•4qƒÖ.ÿÐ\Ðq:8$_Õ"ÛÀ ™ Z }‡ ŠIgP£”cˆGŠ¥È[µ6§%HóÜÀw€€1è„÷°yw1pM,¹f&-Ð6p`à6ð‚•9æàR÷° àcÀ  gPlhc´7qˆÙÈ[6„«4g¡„mÁ ˜ð rÑ ¡u› 7]24CÂrÎð‹µô¸K”˜]4B)÷ÐwÁv_°g `¡èCágŠr(~@Øü3?^a?ŒÂ%„£š Ÿ0œ„=„30R5°ˆ9@¥=¬ð‹ÚS .ððs>´À=æãab(´fÐZÿ-¹“;)? ù“@”B9”ȳ7ŠQ!sáG6›‹³x›·O*@e*“Œ-ð°à cÐcð)Ç(#É(Kë¨ Ø` } äFÏpgI³G‡†·™c-Öf°/x˜GËÈÍÐ | ˆ4 1!ÀE ÷Ti]`U0™f9耔èa– Æâ «7†ØFÁöfpCÔålX‡§X—vY1zùCÑ5Q+ÈpÊ  7PCht3  x&_ú—iW@ÆiœWÐC0ƒ ~ Ip€Ð–÷Pœ  œ 6„C³l ˆšn˜ ©xÿY1Gé*7yñ'ðÀ »Àï9áD)i" ¥n> W¥ :@YPœÈIX` s Ýi#1È ØP‘¢E$´$j(X•š'âÙš®‰E¦x™åYq·à²5»€Kh’ýW&÷) Ñ kjp.z-J]VšJ# 5¸„ sU$nâ)×€#êiráy—Jž_ç[z ¢¸ð5v¿Âp{…&4 *Ê¢Tp½£q°ðeD’ 0•4€P$¶'c€ƒàw:§Fª=v!k0¡íùžfr–.ª3ÐYJ¦ ŸüyœWÿÆù#×à&?’^¿ð Ê`,à01ð²1 H294:—HÉštJ¤Eº6¤ô³¹ªþ° AÀ4gâEæ€AP …ÀQKó5ÉPÇIYfÁV7ñ‰ lÐ2æpI0†1 kH"7°qq¸t©m8¤¦Z§à®…±”ª!jäÊ@ñ «NË>€ K!@¨M0cÊÀ À ÀSð¢ìv b`ƒóÀ"¿çÐ 7ðéÀ=ÕÉ üh÷P‰Ì†7ß©š©ú­â³1ôrÛ“¢ æð T† ‡G ~Úà2â@ £`CÇÿ Y ¤‰qç"NÚ0a=ÉP–fw„…ŒÊ83;¡«ÙƒÆ›83®úòLÔàtæ,ý(¥ k¨9ø÷0p¯ö Ñ .³q÷p 0ððÖÍjob‰]N7ZÔJ±Þê´Gú†ã9Q[®“Eµ|aµº™&[k&¿ÐQ²„¯‚P¶m€¶;Ä;LS“öaÿs[ Ìg}FË…ûØ· ö·‚k§ ¸næG¥-H!›ŒÁ¢ ƒ°˜ïx·9/³3Ë|ð i,¬7@ ë¹t{A°0F[X"›´~+§« žƒ‹±TK#WR°º% ÿá•D)Xª˜Ë¥S³3«° ÀCðdÐR@ ¸„ ™VK¸P ׼ʫ ̇ ™VzØUI{ºÔ‹ªk½×;ÝÛªêT#bñDà2&þð…·Ùs;°‰àaé";Á@jÐðS`]Â2AЎ梿l@Rþ«¼¥Ðvë¼y«UÛŠ·¢hžþF¡ÕËÀ¡v±«ŠvdÁZ#ø—käëE1Òj@k@ ½ö{à d@Kà¯Ó2,ó"¥·0Æc<·¨P -òŠØù};ˆºB|ªØÇsQK6ùÂò„]´Ó6-ò4³3jÀÚ•V@G e`}ÿ × 0up;ÃeŒÖ_J0ÒYJëÆÛÀo Ç CÇU›-¢„Ç«¤Çk)•2¢3Èl@;Y` pÈd€‹ÜÈéòÈo+ÆdLÆs[ Q¥©1à9§tɺ œºª‹ŠGQÄ3Ly|´dÉvAð c jPkU|ÅY¼ÐÅÈç@aœ¼ ¼q¨ð+30Û€c%¡ÞÄ ¼À¹õ—a~ÑÌ6ÁB„Ú ÷  ÕGXt/zUÂ]°Â-,N0̹ž« 猤0  à2¢·Ïº´óܴʜ̠\=¥"¦ÇЉD@MFoð_PÿœgÐ ‘R€¿5"лÀ¹s ˆ ¼ ¡é KÍàÑBšÀrüÉõ¼Ì–EÄ®gyŒk#)U!°0«.¨ è#e4ÖÔˆê{¼A ·€¶À ¨I ‡MPu ÒÒFÏQ-ÕU=‡‰k¸eq0Á²K0CA0 Pzl;q°­ŸHXʰӗd=G±ð†€@ C=éв¥ÀQ1pÎ[Ü$Ï}-Ò€ý×”U¸¥–ÇOÃð‘‹ÝØzÌbdÀ¸°XpÒŒ .Œ 03U0p ±p&ný× é% ÌÆñÌ×?ìÚìÉhÿ»X½JØÏ‹wЉ¦•—ZXj€X@ :,¨P z ÀD h‚¥PŸ(@ Ú ük\5y·XµÀÚÛý´#Äß•®’»Peò…¿e[]Ý ;e@h k€ òP)ØT |À`E™  ü—&ý¼p   Ì’nÆðZË2o”b›ÚM%ÜÍ´CîׯC˜ÇÑ,ש•)0‹É´€&lÀh¢k1îE  àÈ}ߨ@²^Äzu'P >$¶'Wµ,èr©Ï¥Çüà°ÒEžçòå®Tl°+ 4€ÿ,#šå÷ã¢PùÊ Œ Îµ€X©W€Z$óp‹6 •,óF#¯³0>,äþÚÈa–Çh2¢$›êåR%Ð>0…7ÀÄYŽéA ©BÀ• F¯3D;À’k¾­µI2 f Xs0Ë‚o÷е¦nÏDîÝÝÍD¹íô3Ù3C܃ TæaTt;`zPHõm=7p Á‚ KÀà Ð|€ Øs µ°íž=Á î3 f æsgÀ“èc=ÿ­\>À¿æã“Ü>ñ_ñ?p„ÁçY.Ÿåe4à€@)Ñ+K¸k”¿# à‡P©Üšµ>ÿ½Œ›$þénÒÀ0¢<,‚lÇ‹P£.®RªÙNÒEoô)myQ&•R); 0ezUJ€ ˜ý4@Ç ‚B}—H•ô Ñ` @hýÌ×™$m'ex”ÒóB2‚ê} ²ó R¡ûwÞÚ©®ê%M1y!ó¼8レP–¨ÊLÞ:{‡‡° ©`Ké¿£w©õdÑÚ‰¢¢ãÇàÛiÄ"{['¤$qÿ(CÖ÷ Ží×jöiy«P3ï‚`¥!@·À-9q0€¾ð #æE7@eei.ɰk°#tP3h „ɲGº÷y2P½ÿ°$wQÅDô~ûãOþ[y¡ý÷¯Ú€ #¥Àé¢ÏŽ N€ T– KòT“¦H¾;ŠÝK§kG ÈîÝÓ$ÛBˆ¯A4‡ë×Ât¸vEäØ"0‹¨táRvOœ8ÿþ-LùÏŸ>}-UΤIS\Mœ9uâ¼¹ÓçÏ=åIÔèQ•B‘½éo!.\é2` m—0nøð±«¢°{sæñ$GŽ é®ùȬ".dÈ€ìHvo×-Pø(Ùð¡Ç{1îÂ% Ù/¸€D|#±Iq1õ-T9¢>¢J—úÔ¼YggÏ9A‡Þ<štR— ‘6§ÌA©h¤€ÿÁ•o:ÂÊâôØáÃÍŽ>pÝ8kîž2¨¸‚”©“ ošEKTá$9éÌÑ’ºÐa¨Âº+V¶ë—²îé¤)‹5Þ¤¾}”Sßóç”þPÓ§ó“ÞÏÿôÿþŒz)¦ æÃ-¹&ˆ JˆPèM¡{Ì!Ëàv行³2„ðž_¸úŘ7ÊЇ6PñCpÈ£ï†ó "í”1Fe ;g°ä,ºg5¨Jqï>™&ƒ ¦{0cê¿ÏMÉ%™,MIËÒ§) S¦ŠøÀ.4Æ» 3ܸ s(é\ÊÄEš8Æ ¢#PPá9ʨ°R ú1¢“3¹_ÌI1Ät9ìÿ°"’©²“:ÉÈŸ|ÒÉ™$”Ò£,õɾú#s*Ž4Hè!™:Þæ@eÌ ÎÕ®JÉa‡t ..¶I‡-j@ñ†ê®ãhµ’®AnÃŽ„ beÛ%ap™QÔ¨ÊsF–jÒ‡›È¦äRδ•R?LQ+·Às3Cr²–œ¢R5¨Ø.{àKš7Œ©hdÜ,무ÖjË,m BB2÷Â…¡:!ŠÖ¸k¾Ì®–5çabjµ«¡/E_šiJq ?š:ò¯\M‘jÓ—sbW%wçs™]f¥÷ {•ÁW_²ä}ÕÖ¶Ë•`ÕÐ’+>^دa»f5ÿdaÄÅC¨ ª¸r†«³|è.²øîrÈ"Q¦Y¾l=‹Ym–ÓU÷?Ní{—°ÙÂ…TSQ}#š]»r5aFFVZmõ×¶ß…`h"Xìø$lÇžõhµ S¶+©KNFX?æøÑ,›¯Óûެ¬u§ÀuùÜ·á–;Üu#š25y4rxVx(!7ò,å2»Ì3ÓÌpá¥} !b a>£Et¼l8Ñ„r¢-¬à°M§Ùîˆöád¸J礖f&u¸gNMöLiO·v%ù¯iÀ”¼KkÙEu cCÞÑ2 ã!äP¨,ØBF‚! •)3àDÿ6˜ˆ`ãz×D-à¢^a«#ÊàÊpÌ"6ø½.%ó;ÙëÚf“™Ø‡H­»¥ü‡»Ûчóy xªf9’\,1«†9P¡‘=a`_CË"˜{ƒà6Rˆ«TÌ‚šËÀJÁ– @3öY§RÇ‘E¡km‰ãì⦿ ÑIïŠ?ø¨hNOy`X(œäù@‹Å&Š…ˆP¹^àp hIË#ÊèPpzSÅ÷”m†°K›|؈ÃÿÕñ(/AÉ]™Ç&ÁìS±"Fˆž§Të…ÜdYØ>E*¦:ˆï‘ Lr!×CSµîÁˈpÎ67Fçèÿ(2®-&iS‰|*E)Ëpƒ›{Ü,wòÃ$Ù§–Vd¢¡˜À #‚ ($ lL"9ÁE/J`;b rJ¡ @h’ÇÑÈÆ‚€Šhm(ŽuË–7½i.%qªd<ì_9ÍË!ªs‹IG.ls0ˆàŒ_a¡ò¢¸Mð30ö¨GHo097Ä%Ð ‚'ƒhq&G“ ¤Öð27ÄèO†äÔ"MIHCÄ#Pð×Ѹ‰t¤€9[Âv¦0r…žÑÎKïÓ‡\C„½G7¼Ç‰rT ƒ€'È‘zc5B\Qå¤ö3Ñ]Q~¢UŸìܪ!“Й¤ÿÃ^”œYÝê¯F’3Š­}@hÇ*%"öÌ(ô)S+–C€€ZåPˆ>†£&A*m¿•CUÊq'RzÉ8q²­Èœä¶“}¥NÆU\Çβ²q_`ÈA±PZ…Tà dœé?+·OJsq×HYq£ú¬q±·¥m€ö£ÃîD±Œ½*Mž:7äþÏ·T•¥V—‘æ^ã¹W9 ½BÝ\.K8‚– ZÀË{«ëq:´Z„*·€”Ö‹™öÚ.'þh”£«“³Ef¿5£ˆ‰«“Øy´¿ÿÌe•‘ÙZù€³Êð¬®rZòhıÈÍ:ÉÑëÿƒ0ÊMfÏÓ¹|¼ÑQµRë[“þ4Ê['1K6šÛ7JF²Í/‹šÜ£XæÊ¨ñ/ïÑUåÕ6;^ÅŠÚ‘½¦"ÆHÎ{l€•‹È[Ä*•_¤E“ lmñK3˜´ë$“.Yb"Î5¿g‡ª nù»“SÊÒ(ëuô9•ëf‚˜´bäE&Ô9³æ9b²íHŸ ¢Âì ƒiY*nŽmq+%æÖ££”6wƒÒ\†ñ”ÀÜÍB¦ŽÇÞ]Ujm§r &U¾2Q ¯&>‘ŒµþqDƒì"“D1ít–Y!òÄ&¶ªù 1RWbå`3ÛÔsd]K¶eãd±ÿ*> N(j•CY¬‘¶¥o¶™ÆƒÜ¥&Y„àf**ŽásÆMÅdx§ŽRëíp+»îí*‰£]i•ïöå­´/) ÒHQZç;çyÏ}Þó¤N:è=ŸÌ5Œ~t¤']éJ¿Á Ž^ŠÐbé× Å Jqô¦Oýè±@*b¡u£gÝèP—:ØŽŠR â˜®2·†NìŸïœ±Âî܇w¼¿}î”ÞûÞñþwÀóÛ‰Õ¶·º}j7·SÜ/­¹­ˆÅuô„<·SWì·½H+^øÁSÂ’Þ®ù›P3Ä~sÃ*|á o4Ä#þm$ÇâËѸyx‚çÖ9ÿÇ-ÓQ«RàòÒ0Áw°«bpŒfÛö¥´‘;2¦6u·Š’™îüwß‘Uúœ/³|kj‰Óø|Â@Å>X+yº["µÿŸ9Håt.sã!’:‰MlˆCDœñk¾}ab“F‹#IÁ¾‹4O[%Ž ¬KkR§=4›±i„ˆj\Åň À6° ÆË L ËSÁp Ç?”ŒG =¡ÈćtƠжÿõZAÒë­.ÄÈÍà­©òDÕCEo›Æ~\.2D†QÑÆŽ˜‰°.“;ª“#D”à&(¶nB¸lºŸ›ä²‚³·£—þð&ûÑ#+„ÉBE£IÄÃ}\¿uKIí¸–|?êzÉ…‰ÉŠœÉË«IçK>Š:Œ œü‡bÊŠJ  Ê3K=y¼B}SÊGû§´Àº¡ £$ÈÜ#‰GDÈÛRH|K¹P„ˆÌ!ÐËn,6´H´¬ÂßrÁ1ù£Åý’Ë€C’‘äÁ»ÄËus•¯ZŒ·˜¿á ¶–h»¤š#ˆØ¨s¬9“Ç㣙v„¾œ>:j6©çóÄN‹FʪËÿ’¬,V¬‘êY¬µÃ>))ÊÔ¡Ÿìs8ÈpF™è­h£ïƒ6jÀ|NﻌëãEŽ”²ëL8ºÎΠέ¢Àg³ªQ”,´CmÑ6áÂÇMILt¥L¼¦TE“ôVGMOH•ÀÿõÖî P7üÈÊ4U%Vs2ÖlÔuåVX5¤Öù§íœ×ˆ°V…Yu YŠUÓL5Ôµ¼Õ‘i,½ÒsÅSw­  Z¡Z¢ ZS-Z¤MZ =Z¥mÚ¡eÚúÈG›µ´ÒÓ©ý؇%Òs×4#O©e8.cΞýÄk½X9½Ú³E[VåаmK5WM[²­Ù¹¥Û¯eϪ¥Ì»}Ù¬•[»ý[ÀµØ½M½ ÜOíÛµ­[Á5YµE1ž ÏÆÕOÄ weÜÈí!Å]\Ÿ\·áÜvõZÃMÜÌ-ÓÑÝÐ¥\ÐÕS³5ÝbõÜÏ]ÝÎuÝüÝØ5×ʵܽU]Ú}]ÜÍ]ÿ¬Ý]Þ½Üà^;êÝÓ•\à-^âÝä]JÙeÞX½ÝåuÞæ¥^ãÕÜÒEÞëÅÞãÅÜìõÞîßÖ­Þ¹ô]¿ _åý^ñýÝí=_îÕÝöE]òeÖßnu_üÍ_ùßýÞçµÞé-_óeÝ÷…ß͵ߒ `úí_õMßFà}ƒ`«`ÖßÚåßÅàõµà æàá¥`.[ þ`ô…^¾ß öàÿ]à ~`>áváaŽaîàá6a–a6àÆáb¶W„=b$Nb%^b&nb'~b(¼Fáâžá+fa!Îà6Ê,¦bâ/c.öa-vàÿ1¶á4Žà–àÂc8.`9®â-®ã)Vã5žà<Öã8Va4ß6æá=vÙA†\"þcöíb66c<îc:.bG®ß@ÆâH¶âB®×9~ä;öâKÛNöäJ¶cD>\7~c?¦äP†äSFeRžäÎdKNåQÖäY–dEæcXeA–å]æeW&c]~åUfZfåa>dc.fbc_^æXÎåÔ…fUVæ3®åg¦æjþåF–æ^>f`¶æ`væ2Fæd¾ffæærçl¾eBnæu~gxÞflþæR6drŽgNvgzNguþä<Õgy>goÎç&hÒ½g|^d„Þgqžæyhƒ~hÿ…öç.h\Fgv¶g–^FŽhsh[îhîç‘&鉆è’Þä“Fé‹–è•¶hS†iþhšvèš¶i“ni—ÞévÆè„Öé™Îé˜æé›îf™ÖhŸþé¡.j£é…h¦nhœžjp®ã<¸j¬Îj­Þj®îj¯þj°k±k².k³>k´Nkµ^k¶nk²>—<€ët‰ër¡kL±ë»–뺞k¸ý¼v’¿l½ÎëÁ¦”ÀV’ÃFì¾Nìÿ`ìÆ.lÁ†l&qlÒ ìÊ^lÉžìÌFËÎÞŒÏ^ŠÐí¾¾†s1íÓNírAíÕVmLaí×îkÙžmÚ®mÛ¾mÜÎmÝÞmÿÞ6ŠH(à†ÿ¸„(€KH(€>îâ>îèàæÚš¸„HHŠä®îømXYã¢k8Øî¸†æöŒ—àv‰ämš îÊ0 kíænõnø6€” oãnWø>€”˜oõ.öV‰<(ná&ïøV Ï ˆ„<€Ó¸‡ïƒø‡ð¾†pnK €HèЇHý¶Ôº6ñKqÀðK8€XŠ>P ¿øö‡èçZ.Ë0mø¾Xî4+qºon€H`q‡q§q¸†ðÆqÿp¤€¸-wòò"GŠ¿†Çñÿ< ò>ðr0•áöì0‰kÐH‰<`óÐà†¨‡¨n 'ñˆë%W ¸óp‰àÚŸñ(Ó¾‡ wtÐp¢hqW "Ó€Áúí“uñ¸–ô-3€DÇqF/Gp¿6nJ·ô¡€ÿîS÷tOÏî@ ¨n€Bÿ‡0SWô«¢ëý øuâ>€xqNW‰EGö¸¾Gïƒøs•€7? m·/ €>Às0r¤¸uqH§óa{ñ¥8t³€iïsoÿp_Šqÿ‡¸„s7tu?Š%‡nìæô:7Ky—GhxÿÏ÷}Ç c‡íyÏuq•¸<÷ŒK£ËðjÿYÇvßönOxúžnGîÀïÿ‡]ߌ[Onq €Hðakù£ wnÀrS—ø•ooG×ò{pñ˜ŸùU2Xn‰¿†…çž'ŠH€€ÃàðGWùœÀsàŸa'y O‰HôÐHúß®nq¨p“ÿuå>€¸Æq’ÝxGð7ï÷J§ùÁ*ð¬çô>ÇõÍ ÷µ'pSû=çwG¿u}¼‡u  €«§qÃׇ¿õ£qÖü–|EW¥¸ó†÷ ¨çv/w ÷Í} ¿†K0q-' z×÷Cÿp¨ÏÈߌ~—ñÿ²Ï/û’_Š[Ÿ Hö pÇŠØ€]ÏðÚ¿}ÄW‰r×öèý2O30õhr°ý\Gú GŠÐò²‡ú²?€Khþ\Ï ?ïÿXÿ5 öãG Ž7ÔŽ„ØóoúßxSŸû¤ˆHÿþå)˜§Ï?qˆèð!Ĉyü=Œto`#rŒxéÚ@} \xi!ÅŽ*nô—qbÂ… WFÔg0OÉ“RfÜHbŸ›ân‚Ô™ò'Ò¤J—2mêô)Ô¨R§R­jõ*Ö¬Z·ríêõ+ذbÇ’-kö,Ú´jײmëö-ܸrçÒ­k÷.Þ¼zÕžœÙÇÀÞÀ‚§íÿ俎nìøqUÈSÌC€Âúˆ¤Ï% ýïdŸ.¼Œ°¯¸ÎšóüK]@ 7’ôAîí{«aÕ,>`ÀþÀ2€áDo~Íp€ä4O~à€>‘쎞ç8ñKà³þíþ=TÃ4_`û?üÝo8 @gžÑÇÍx› b×Ü7~úDgÀ|×pIr×€'Ztði¸áR’ ¤Ø=&f_ERŸâ8·¢†]dx€èÈ¡>Ä­Hx£qø#@ö¡}øÃß~æO‹Ü(vâÿÜsÀuþCÜÜw$}9ÿÇ qüóŸ?"©7diéáŒçÑs2&Gqܧßaò5¥›Í!ÄÍ|#"„]s‘€‡˜š‰ÂwM¬EBÛ?‘ F£‰4)b’’a’îdâ¤>tZ£&MZÒPí)º*«I¹Ø*¬±~ ¼Éz+®¹êº+¯½úú+°Á ;,±Å{,²É*»,³Í:û,´ÑJ;-µÕZ{-¶Ùj»-·Ýzû-¸áŠ;.¹åš{.ºéª».»ãŠó.¼ñÊ;/½õÚ{/¾ùê»/¿ýúû/À <0Áó‹Â '¼OG3QåðÃVA<ÕÄRU ÕÅK|UÆNu<Â!3ÌÑÇL•lòÆ)Wÿu²R,·¬rÄ+Ó²Â#Gä2R8ç 3ÅólñÏQéLSÉ4/ÜpÐËœôSC¯äôÓL{,õ?F#l3DP#MõRZo½tÌ`÷ÌõË+YÖy}³Ïbí¶Ðm‡=7Ðf[¶Ckg-÷Ût×íwÜpøCgã=Þjóý7áM“]vãS ^øÝ_÷}ùà‘7•xÞ‹g޹Ò*n9ã ;þxRœ#îyèšw=så$£¾óä§×¾9ë¶»yG£Ë~;îÀ£<;ѹK.<ïùÎ6òÉ^:ô­›~üî©Ãnôá _|óÖo¯’ê«wO»æËï=þOᇯý÷¤G¯ûôÁ‹;óÕ{ÿo?ùøs~Ôíÿ>?öÜ'½÷Q/~ò3àðô·?šOqüëŸ!A°‚, ÷¼ bpƒð#à3x¿Rðƒ !8Áÿ­°~¡ c(Cf¡s$,! =hÂò0‡'|ÝJf(ÄÖP|-ta U(Âü-1}Æó¡C†8Ä"²ïˆç³¢oˆÄ$jð‡]Œ¢gHEõ=Q‰\ü";ØÃ4š"a£ ±Ç&:Ñ[Ô!Û¸Æ7ÒpŽgá™ÈÒQ‚…MøHD?â1htä#¨Å+ʱŠ/T$ÆhÇ;®QŒ¤$‰Hàa2“Œô"(9HB6Ò“Tå ÿK©ÉIRr•†´%_YGZžò!²ì¥? KT3˜Æt¥.YéFLβ’–Äe.‘JQ²šœ£"›iÍk&S™ÄÜe%×GÆ 2˜Ý¼å7Á¹Í,†³ŒÓŒÈ/¸NvB³šõ¬å=é™Osþ#žÏlå;ÓéMa  Åý)Pƒ*Ô¡µ¨F=*R“ªÔ¥2µ©N}jOÙѨRµªV½*V³ªÕ­rU¨RåHWÃ*Ö±’µ¬f-ëW#rÖµ²µ­n}+YÓ ¸Òµ®v½+^u*ׇ䵯~ý+`©ºW‡¶°†=,bs0Ø$¶±Ž},[‹SÈR¶²–­ªd/«ÙÍrv¨™í,hC»ÙÏŠ¶´¦M,iO«ÚÕæ5µ¬}-l#;ÕØÒ¶¶cu­ms«[¨âv·¾ý­Q{ Üá—§’ !ù,ŠsA4‡&&&777IIIVVViiivvvMx¨V«nr–|x‹yw—e¦i‡®eˆ±y‡©pޱz—¹E=œQ9¾w;WL”SSœ~§SD®WW»NMºVE¾WV«|\ºMªl|©ye©{z½cn¶iv¸zl»r|ëx9ð{.È]MËWVÛ[[Ç^eÖ]aÃfDÎf_ÜkOÛfVÖxLÕxPÇdiÅktÈugÊrxÙdfÕmqÞrcÙxxæ^MãWVèfIäcYësGèwVãfeåopæsiäxx†n‹‡s‰„|™—m„˜uŒš}”¤l€©w‰¦}¶y†Æ{„Ô}‚倹€Z¯Œ¯v²ŽmÖ€:õ…æ…+è‡4ó‡%ò‹5õ•=͈GÊŒQÎVÓˆFÚ‘NÌgÈ›qÔ‰fØ|Τ}Þ£jاwëˆFë‡Wç˜KèšVð‹Cñ•Gð›Vègä~ê–eê•wð [å díªvî±|ð¦gð«p‡‡‡‹„™–…‡›…š•••ˆ‰¦Š”¢ƒšº–Š¢˜–ª›œ³‡ ¼ž¦»¤€€§†˜¤—”º€Œº‰–»•…³››ªŽ ©›­ªž°¶š¨§§§ª¨¶§²¾º¨¦°¬½´°®¶¶¶žÁ‰£Á˜­Å›±Ê§¸Ë©½Óµ¼Ë±¿Ð¹ÁÌ»ÈÕÈ„‰ÉŒ“Êœ‚ËšœØ‡ˆÙŽ’ØšÔ–—Ä™£ÚŸ¢É¥ŽÄ«˜Ñ©„Я‘Õ²Ó³–Ì©¨É¬³Î»©Ê³´Ö§§Ñ¸ Ù¸¹äƒƒäç™ˆå™šê¤†æ ˜íµ„ì¶ˆí¹‹ë¹”å¦¦ç¸§å¶µò®­òµµÇ»Ä×½ÃÖôëÁêÆ§éÌ´éлñÀ¿÷ЪûÔ®÷Ù¼ÇÆÇÄÌÖÊÒÚÙÃÄÕÎÓÕÕÕÓÖÚÖÙÞÚÔÔØ×ØÛØÕÜÜÜÈÔâÛÞâÜàååÅÆåÎÐç×ÉåÚÚóÄÃõÊÊöÕÍôÖÖäßàåàÜþíÝäääççèåèëîààëëëíîðòååñçèñêëûææûçèþïáûëëóóóý÷÷ý÷øþþþÿÿ øïÝ;pà´½#ÈðBƒüø!Ô¦ œAŠ+òsn^A…= ܇®$:| SÔ7­å4wÿøÑ£7žÊ›8UŠÌI?2sîäIT%¸¢HMÊt)Ó¤NŸJ'Upü¨œHñÝ<Š\+&\øï+Ùˆï"®‹–.bºhë"Ê+W4j©IS'7-Ý¿€Óõ+øï¼Ãó oü)µhÔÆ8C6:™¨äʘ .—°£7°_Å&ÌXñ 6ßU3Xl9ƒäv3H»6íauž|VGíÕ¶ƒ n8ñãÈW3Æœò2óΙG—þ¼ºfœ+B' v4w1 ÿoýú]ìÙÈqë~ÇÛ·xäð‰Oÿýòê§WÖ?™üÌ]••iX™VQFŸaä‚@½÷Î1»¸Û.ÇÀçLy<óL¹ýV߇ªXŸrä_c'J•¢Š%ZuOÑ&‘XyXš)ôSjÕœsŒ/EY„E”nu$9Lmó‰x\“NGb‹+6Õb~Wb™%A¶Ý×Ü‹e}w hÝuÖQxïÜa„CayÈ=#Ì0Î%|PÞi§—ÕU U–~þ¹%v^ HÖMQ´àfà˜ ¥¶Ê.¾sŒBT á.çÜ™§ž‚*eZWê [šÊ”AQŧ‰ Zÿ´£8Ò†‘wñˆ3Ê;;ìB¦åùâš§¢ŽZlpS–¨*OËæÔ¬³ƒ Ä*¡¯byUEÙaÛ™W/f‹Ð5ÖŒ3ŠôÚé;C;l”ŸŠÚ.¨Éø,¢¨Ö;(U‰iålj!4šE …äï;ÛˆbÍ<ãl"Á"”ZŠ©¦žëä»zRLlµ˜ÍKY©©F+mmCçjL‘†W\zc‘5¢\ã“2,$›˜ñfÅÇ"›óž÷LeÇ—¦³œ%öÑw'“J2E,¼Î ($Bi$mæ8ãŒ9#î̤׆üŸÏÊ4RùÀ¥é‹Ý·¢ˆ"Î2H@@‰°k’3a…]ÿ˜dÍÐg1»`ÛG¶¼öþ|6Rqåmhq†ÕÇ"È( @àÉj»±îy»aH ’ÐÄ7øÄ…‡(6d7—xÙʪ-ûì´“I«˜Ý• J8Ê$RÍï;à°-¿Ó²Ã*¿§Á†,¿ËÂF¿G/ýôÔWoýõØg¯½ô^Ñîý÷à‡/þøä—oþùè‡_?§ ¤Ý¢6nu&¾hÑ …·àýæÞSGéì©C0L—ºÓ‰(^øiR^‡¸,!;Cà HÊ’41!$5<Ù(Ä'ì¢W»°#p€"¡çºƒ9·:Ô OŒáêPÄÀ>™­Dµ±Èœ•CÚ lQÑÊUÿ M„c\ƒ@Å1ª!&Ѐ„E8a;8ô·;´ƒ€w²9$*°!І‡Kà ñC?ÉåkZˆJH"R¯À¯V~×&è‘0 TB†ÄP!‰A@B´i‡3ò ‡f\‹":‡þvqµ.zí‹ÏQ A$ «2¤Vdp²‘±M‡Œù„¬“qÂðàk$0ÙÀ+J­ñE1ðÆE‚’Ô #uyÉC%„1#£—P(ò6m (”¸F)%`ˆk,Ì5ã`¥+ ¢Èù‚‹OŠRÄ ",8…¨p¸Ì˜%sÉKÌ”1rh9ÔÆr£¬h‡_ü# ÁÌkÂ{ìãùvÿŽ5­ ›ÆQ?}Åšu9È‹JƒâÊPõp‡›´LF€©6OqMHBÝÑÄxtŒà(Z#„ ; šP;9IXÅ8Ç„j)ÃrŠÓ¦7½Ò…6aE+Ëâ;¬A]Ðà¨J`€'ÖŒ •¨ Å v°ƒ£>á‰?°*a{°Õ7pï0ÇwÁëƒÔ´D/BgÈ"œf–½‹ÓŠBzª’ª`PˆIF|¡Ä×à ‚H„H¸‚ð hFs‚ 8 ÿpxCn’Ô©ùÕ ÄÑ"@mù!̲νOñ{ùÊœld'hdH4|¡šsÔ@xµ€D rP„ðàUí|A!cŠ€‹s–$Œ5éň)rÀ¡Fô‘꣓ÿ è ¬@T&1«Jìœûùb¨¨Á „´‚Á>hÓ|@Œbx.€uàÂÄûŽ;Ôkvö§7ƒKc´†S_K/“ŸBI-A9Ð#¾õ¡a$?l©¤¢qQ3 Ù™Ö41.EPs£oÈC3ZHmã9ÉÃÙæ;ÊkÙcù™†³†xÄ£EèªÀH,2JÉFÈA‹l $¼…ã4£™Óžÿ® Ã˵ gØ Î@iCžp/yâä®5­:îV]e)AŒ£N¶#E¡,ã(Ç*x¡Äj4¡~ðC"†”f¤y¶BèE/„aah8ã3ÃcÃèà\Ã(éLmëž ê܇;S(âö˜pæU>4ÙŽÄ4A,ã8¶Y+@ê‰qø¢ftÂT[@¬jŒŽq~ûUÊÛ•„GmH¶£5Ö›±¬qŽÉí<$ÜÒÒ™Ãlç8Æ1”Єi‘— ðºí’| ’¼cý©pÚàQž°%špÊòöærÏ9é­Ô"‡Ô¾)aU¶"ò¯ \¸@Gÿ4‘Ê™õš›"Å£‡ôâðB€R]Ù o× *9A HàãõjŸw}–¡sM6}Ea}q7ÚwÞ€'“"q Ú€ ç€ä÷3#ÅP80[EÐ?–p$D°&ÀeKÔeP’fˆ€§bƒ7 ð€§çs‡¡z[±_Ñ ² çp‰ðt&$çàOàGV%sÐ Uõr 7bV¶ÔWÈg œPb€!I²4xY I(}8(AÆÔƒ ˜#5B@d ~w´Ð-ÐK Á1 ¥rOe¦]9¦]e0 ß:(s³´Dþÿ'à`@ × up W,w€‚††iˆgˆ6.‚j£}ÿ2Hwº@FÀ €|µá ~@-P(µ8`rš2`s‹w¶ Ùà ›À^`þg rH|Ö5È,ŸøvÑ4'bg$#D÷çp ’ˆ°+ï {4V‰˜â9A1 ;P2 W†¶1PÇ@0õbž „Ðy‰îŠl%z¡§#Vb«³nÒ’IòÃç vôZ‹@.Ñ Ð+¾@B%”)Á îØEP’ž'Œçeòþgmz@_ÐöŒ‚ƒíÿUÔØ‰û‘>62>¢áþÒ(ä°P Õ°O†ð;†7PR9‹=€¨ð;¯àŽÕ@ ¨ 3°=Òs Ç=4ÆDp vÀaàg–n‰=Ýã“r9—tY—vi—Qq8ÙF¡ÑI ‹ðáãhãòcV-€f£10³À iiàRÄúèJÉ Ö€ @â€Í m`HÐÇ“ 9z:©S¤‚k<‘´‘A‘#ë° K ~à ±X4@OrUE$EZÊÉw@†C46càÆ ôôˆÖ€ÖVlp‰xÑ-kžáÿYêt<±SBMˆ¶è¡E;pœP ;``ØÆ©[€üÉŸ[ðBc €àM‚0šï0žÀ žp }s‰æ` Ö6ƒš¸—n¸š¡¥—n7„?Ø>ü!¨€…¢?·‡ ö&„… ¾à'ÐûéŸXÀÁh@¡¶Á…ÉÇ 9þS:Õ`‰Tƒ­™ƒª¹šéös¹vq¡)­A æÅy³4$(‚@¢¢¥à È[Ð¥[À¥X gÛ‰£´áL…0KÅÀQÄuR yg¡ Èš é‰#ÆùYí& ÁOj^Cn ·e;PXC‚-¥[Š[ÿ m`zç0 t6×07°&& ÄÁ£–cØvãéSGš“wº@á¡Ù"Š…XPäÐ ÂˆŠ©Ð¢/ÚŸ[Ðü©ÕPjºá#¼ â 7P’P ‹P¥p~3¦©Y§Hj§E:Ya4ë”\ñê°ëp ÅBBEäÐEp ‡àQO@f3Çéý‰]PgÖÆ5¾ E°ÿp àOðˆ5@PÄ‘5³ÐrQYôo5ªª¡®I¹¶,B” ¤u?Å@ &¹ m²ŽLðŠƒ@±ŠdÇ  ®¸p^pÄ€\!×t ¡ ØP«ÿ° žÐ’04Vħ°É!§œ­¤ê°ÕO7IÏq›¾€·¹ ´ ™¾€f»1à ž ƒ`š @ ¦€G@Ä]Ú™öêàP ÿ0ÿÐ ¨@!›ÉaµÓ„: +ªB‹ntz/J‘HË»1«@v°).)qû’ЫÀ7&;ïvàŠïà?Íà ³p.¶¶ÿn‹ ;03‚ú³æUvÕu1¡z­{Ë·ô·æ‰\•1¸…» ‡;Mä@$‹;5åJ&{Zy0˜ÛB@ʳ¸K ¡+ºÿ€ %Tõ×XæuB:‹·­ëYÓZ€gc´ 7/ê@)Lÿ!O›…úˆ)ÇP ’‰  Y\ëµÀ~Ð \eÇ 5¶¼Ì l»p…ˆd·t ×kªÙ+QVûÕº‡Ñâ'«1Œ‡œF¨ S²Ñ®° ÀGjV` ³´ ®ö­4 ¿Ì º$Åàj‡¼ÿĺܰ¯û°[²Àz{žÜF0Ç­¨FYÇ@u?ð‹@cB)ya!pZTl5¯ëR ø›ÂÐÅ]ì¶«ð¼xö|Ô”°8“·®Û·­wš"Ü‹â8Pè9lE2p qð Ò6} jpO “Â)›¢ ´ÿ Â_ü¨àž¢ Öà dL¤D´j¼ÆÇ•"ÁÔ/‡R'±*1Ø»f¶îXfUI9° ±±jàp»À+,¨à àJ° 5‹Ÿ'yU*E>«þ¦[a~õAÇ@àª}ã¬mà#V%:Üã¯$§fµÕ,pÂé·0$r€¯Ï‚˜’  Wó-âÖÿµQ‚;ölð‘ S¿Q",Ç S½RÔ]nÕÍæÑ"I Þ9ëˆfw ?ð4 ¤€M ˜"Câ+‚^ IàŠÊð-0ëP`¾&(‚™¦ºÄÑm8аXQ2s1)„›ãJàFÚÚ›Ž³í9³„f"Gå­Bˆ;`ǯ¾ëEP¬­x £T PB³q)v êð l0¤•ÙN¢pq›ìÌnÀʾì}r—vIÕSBdz hFch†u? |°GÀ¶ e‰)«ðM  à«@<Õ€ ?°у)Ê=¶Àh=mÐo9= Ï…iäÕúþò0ó2ÿ?>l  þꥌiD0ðe†€ ÷ìJ³ –àÁ& à‰@²²»Bø À.ìþ30Uæ*GçD ¨Wã;¬ã× ögãésήû%@eFXWåDÕ&E@w@ Ïi¬þ÷Gkâ Î D€iþ Šþ7kÀyÅGM½Õ@pñ1<þÎ5?´œžà%2ØN¿Ž¯®,@f=° æ¡lA`¶m`r+À a¥HD|mP[cÖÖù$cN è½E0 " ³%ÑV–haàn>ù›|ù¯F®6ñ„P¨$€-Üœ’…w€‚½Ð 9E;€f›YÆÿðq !y°70ž†ÌϧˆÕ…õÔ´ ¼ÐhFÁÔ×=ü”ÝÆo çŠØð㨊ôØEn—¯wyòì’R¬Gcïª éQ¬Ø®cïÞõúìݹ]?bà(¦‘“kU®¬¦Ò »v­¤YS¥¯ƒ«vEû÷OcOŸïøõä7oÞP I•ö·ÔéS¨L£NÚ”êU§V±nåºTkW¨ü4¶T)óœF °íÒ‚Æ!B L˜§ˆ=Šœ›XÑà.‹D~D é#Æ !O¦´)Q%ȃÅp–l\ùλÒõœ§ÑèÏUÎÃúlTÓ§Ÿ¦VµõkÔ°—Šuÿ¬ò¢/rÇ”0 Ä  qC>v'È!t~ô»ã!¹wÇdî*²&±>Þ4zÒ¢ˆ' †ÄÙ#ª<0©(¥œ¶*¹Jft¢ìA}<&’A @&=Eüa9{Èè]âÜå™;Þ,%Vhái‚ÌT̲LÈÿ‚¢;ˆœË’I²|ùo©yÀG#KŸ¬êJ©8ÍòµO9¶u§Ô]h©©<ƒäúÅ‚0&:ž!./¼’ •~8Ç!!,¢¨˜s("‡wO<š.rP:kò¥Œ¤Û¥Q[½V£B׉jmÀ1 m4•3ϰ5TÕØÕÀ×¶ô–ƒViV&9˜;G˜:‚Hì™:„ù«=sÕ‹¯a¢Ì¡"6„±™£ 'èªy©1r⢖ŠÕ蘻fâ!ÐIªI *½ôL¯úª&P×}×Ýw•¢*yÿ¡w{U²ö¢^ÏIÑßcfC!òe®‡*’(a§‰Ô iÿ!p 9â@mL¢‹¢}Œ-!pr”œ‹\/®‡Ц¡˜lòs¡Òжžøkíæ­ðλæÓô^JƒòAUÕ²}‡¢]^uÖ:œ)V®¼Šðå!¦yõXa+z|—G@ !ŠeÇ[)Â̶­é"j}™V®³¬•é˜ u%9o™,ê'ÿüs9e¡ö‹›+¿¡œ™o°‚WjË.¿T‰™nêU Px£Ž:ÖDš:ÑŽsÎ:E™CH ¡ ²3öTºÆN<'éîbnÇsމO£¦…Ø¡˜d’é´ÐôNe-Ûº"–ßíÍSÃ#ð Ä ÕF#‹‰äB aãéy”ÿN$áeGÅ(ÓØ§ÜÀרÌXVbò•O¸ uŒµ£š#.»ØA‘ °3m³h7›…6Ÿé]»döÄ–fJ´“zu(Œplk·!‡NL·*Ê™H/-TɃÄa xÂ'9ØðRÂ/ Šr¨26c;ºåÎn¢Qɤ¾B$:qPŒ¢ðDEš¨Çk5±â¶ U ÚD‡rÁžØÑÂQt£Р9¡’òmŽ=‘¤IŒ…;Öm%mk"ƒ²Ÿw$Q)ýyMQÀ1©oS…,`¹*2>F2÷£Ó¶ i¸âE2ňË% D ︆>ÿ©‘ò=¤Ô‡ôç‹dl†3FáÝáæJUʲ@¢ÑÜ®¤ËsñRnSta0í©5Üx±=‚ú [fÒ˜QH`Ö¨Ä&$0 q"k”@'ˆ´(é ‚‚à'…‘»a¾ˆÆ>ÂÂÝ€V†KuRž«¡§ïL§aZÛÚÇ(¢«}Ò¤•H@ Â1™ÎC €â¡Ð‰^’QmDU\ª„[ I:”} n•bÒ”à9Ï«dµf_MR=_ÌrÜ”9ÜŽ\Ø$œ8ê”FÕ€¡Cß± öybéQ1 !Pˆã åÆE˜¹§>E,Qel,©êNÿu~t%ß²Ô;Â5Õ‘^Š¥ ß4 K0µ2þ<…ð+!Á~Dq´¸H•t£((Oƒ9 B%;µ†µ@†—vô),‹*qË¥D”þãSž¹]9.•7³ Œ s»JÝ’šU´•‰ËYªqRF‡sI1[è ¤žx©BEgP¢..Ũ;ȱŽ'¡l±Ç%n¨²´D&BEe–5âSÄjÈA~TS#}gKC»ÝštW"àeËœÆ{14¯2Åx”ðØ>3<ìËí^£c¢™TçÇÊVÒ™¨’¦¿½Tle1åX§¸M\î*iìÕ© ó•Ø Ð/!ÜÒšÿµª=k‰õº×ºG&ä Åëî)Ž“”Ï,üF°sìCeGá#¹ÚifçFv5—ªT;%Ë“ øœ¢ùñt§Ò몔*¢q®‘\“´f­p}+^âºÃJÄ !ÓÞaQXCt+ù‹.ta2å¶óÅ–e¬›\”£¥ˆEÄqŽ5ÒÎ4ûD\LD)¨‡òY5; nðV8]\Yk÷Ï£sãLñwÅBS+§ˆN”ÅjJDá<ÅÐ6êÁ”N‡k(Ñf×WøèN8ocÔ¥–u¥’»6[ —×®‘LNÏn\«&×ïü¼k|vÑPÈÎâd¤\*cdÃw ULp…˸ÿ>‰qÀ¹ÍRXöÇn•móÁ7ëwÆR³)¦Ì½ÒXCŲùõtY] ï “›”¦KÈ[X¤Ì0Ú¼DfeþM3«$ªp–nÀSMÒ!úÎáv8îî[*%ç:cÙű4j¤']éK_ºT‹èô"v¦S§zÕ­~u¬W}; :*vp‹¬ßb¨ úÖ³NuZ¬b´8ûÔÍ>u¯ƒ½íT‡›™Ÿ.¨S›éI¿¬¥.›÷¾ï]ð~ï;ÔGøÀ^ñ‹g¼ÒSVè¶Ùݺ9õÙ×Ú;˜>¿]“– ŲBY7ÁËó<H½Ã3ãij2Ózõ°¦Æ__ÝN;üÝ 'ÿ]ˉ¨aÛ„ó‚J6 ‡yŽ_¡âöŠ™ pÆîØ ×ÉFý¤Y—Z4¸ ÛL=]84å>Yº0~3>söã ÿHV$2þ >Á¾=ëç#ø“|:pÌ Ox'™‹¶Ü[ ™k¢¬q2çÓ? ñ›%£xµÖȾµ9µ&ºµŽã%XÛ=ö£¼¾—ʼ¸8†[à(ºªrºèC³ò;Š•!:¡Ðáj§¢—Œ à±.w²\·q‘. t°¬¿!d xðŒÇ@qJŠŸ 6k,¸É@ÐØ±Û1§4›8hûÚ»*®²Ÿ¨Â!Ú¸çê¹±Â"4Â4ôÀÿ³B¸XÂ&¬ÀL»š;.p)51$½Vr=›ñ†µaÀÚK°®ÃXÊÃÅâ834º dCöAxsDûƒ2I Z0AJIAc¬4ÄŠk"ˆ£AxÐÂæÓ3[‹Á®êÄXòAÉ[© dDƒÄ?“šܸ=!¹ (‚ÄB<5Œ>t“¸K¡Aθ>%2?hc¬ +t«³­Ø¹ÊªÀѽtE4\Ãõû@2"¡8IŒU¦ßÚÅ^\À&¡6b´‰Ê²6dÔ™NÓŠh‹›îó1 i¼”“!¿ÿ»9ET äFmtDú]á ?â(AáªÆÒ³9› 2˔暛O|5ÿqY¬X‚BÓ†lÁÛIÄRT ”GÛ+_‚ÅGÔÆm´ ƒ<­VÇ¡‹–`BåÒ r¡9Ž»%ÈâT%­:âI›¸¨j> T.ª"P4ÉAä1ë˜9$”Ü5Y<2G,†–,°™“ßCˆ™Ü pðÃ-l·çÒI웾 üÉ=<Šžü,JhSÀ¤Ä±¡»½« ÄŽ´½W\ÉFTId ‚lÉÓ¼שą¤Á†,¸ ŠþP™Æ¬»dŒÁ…+ŒœÃÌKt‰=ôB®h=’,ɇƒìË€ìÆ¼Ð®ŒIÚ £dÆe”*XR‰•YÇòÔUƒ¾žäÉNÓãGïë¶ÿP  T3WÓËl\ê„0Zĉ"àe[6廇Úü1ºad™bÅÛq±_Œ–E ÜÌü?Ï¿g D_TÆ ”J¾ŒE¿|Ïo UTŠ‘t@èò;~ŒŠÙ£®Õ‹OS¬¥©œÅ÷,MÿìLDzÂd\°Í¬›ã— ”Ï=„J¤4 ßÁFöLNåPä\JØ0Ä•ë C]P93' UK,´Ð“lÏ”,M]§szA'DE>°û$ËE”Ì¢ƒ¢þTÑìbQªÔÐ4 =ª(Î;³ÀIN¬OÙ ·,i’&)ÐLÏm ½ÄÐíÂÒ³ÒÒ—"R­=ÓGJ9ϰ Kè*²œÐÿë/õŒ'#õÑ" P«Ò"ôRõS8E¸…3«ÂA9qëS=MôüQ.íR:B;5µ­Ç&í³²;"ÉÌO ¤=Ô{ÒÔ̓O­jÔ]œ‹T;ƒ¸Uì#!³Ë’¼R•Ò9}Ñ7“ÁPS¡ˆ³R½D@ÕÉ< MÐdÕDÈ õOr“¢a§*} ®Ò8L8×ÏKí›ãÒ_íË}SGEÓ [QM;7(Å%RBWZåÔNuÑ`Ä[ òL½%3>|Öâ‰Ö:V÷”ÒxEWÑt§¦ µ sJn£½Æ Xݱ¹+Xƒ=X„MX…½ººX‡}XˆÝ;ÄK<ÿś؈U¼Ç3ÔV%WóÔZûØáËOú¤ÑÏ Wq-2±P–mY—}Y˜A˜YšU™­YœuÙ]õS|uÆ¢mµÇÎÂL8]§w!Yù¤½Wm×>Ê1< gEÙBMW«Í¥ÿäÙ¦Ý3wí¹¥Ú”ÅÚ¬ÍØ«Û­=ÒrâU­¥Z¨üÚž][I=Ûê¢Ë]u[°mÛ~ŒJ¹…ÛA¿®Ô¸eÛ±%Û¾\½ \§TÎ,\°USÄ-[+ÙÛÈ}\ŸUÕÉEY¼5\L¥\³åÜË…\ã|[¾í\Ð%\Òe\Ñ ]É5ÝÑm]×eÝÏE]ÁM]Ø­ÝÃõ\Û½›¼-ÚÓ•ÝÿÒÕ]Í…VÚ½ÝpÍÜáÝÜßÞÕUÞå•'ãm^á…ÞèÅ]âõÝâ ÞéMÞìÕ^¦¥ÞêíUìí^îí »õ^ä_+ _òU_:Þíí]ø]Uöm_ó}ßøÍÝóµ^B}Þú_ý½ßï]æÝ×Å_ûàf^ôu Æåß&VéõßÎß ^Ï^_÷•à Ö`îàó›_î_ ÎàáÆ\†Æ¦à>`vá&áþ_àžaV]fà ¦ßáâë•aþana¾a>º‹mb'~b(Žb)žb*®b+VbâkÝà$¶a/þbçMá-Fâ%&ã"Öâÿ1–_"Îb.>c4¶\0fa~c8VàÆb!nc7Þ_1žU:Ü?V[<Îcð]cB®a9ä4VäEŽáfc3†äH>dFöã!~dJŽã.Öä2®ä:cC>bOä;¶c=–ä9.eSždQeAæäNvd#nåUFäD®eW~e¶eÆeXÞcVnä_N·Pæ[>fdÞädVf žecîåeŽe_žfjnæ@ÖåhFå\&ÚlÖæ]Þfn†fqgiîæLþæa>gs~frf^fæBr`Ungo®fx.çuîc¦tæO¦çzögZ¶ç(’çSh€6è{vçwNßb¶ä‚fç„þçÿˆ–èÖç}žç‰Vçƒv臶hlÎç~Îh„Æg‘†h†Æä‘VètNiŠVé•öhŸkè‹îhŽ^è–viPFi“¾iÞè&é’–iR¦é™æîi Njâ!h£þiœ颶iž>C¡j©fé©>j¬Fj¬Ø¯þj°k±k².k³>k´Nkµ^k¶nk·~k¸Žk¹žkºŽkØØQÁë¼ÞkNÑë¾æë+ñëÀnÜì1ìÃì)AìaìqlÙ€ìÈ&lÉ~ʶlÅNìÌnìÍæìÆ½lÕíÐîìÇ~Ñ‹ÓîŠÔVm®Qqí׎mNíÙ–í+¡íÛ&lÝÞmÿÞîmßþmànánÂ΄(€L (€? ãFîžøƒ0€¥]ŠL˜¦Xnìþ‡I˜n¥O½æ‡ ˆ¥j8îä>0àH~XîÕŠëæ  ½îîò>wïú6€¡8oè&ßú>€¡ÀïXzïˆïÂ>nŽ–©†y€¡Ø=o m€þp(ìÞð¼®òž0B? €êžpÿ‡píwñM'€Ç Gòžpòp툥îîŠy¸q¼þô†3KòL/€MOðÏ„Põ«€ŸîZ_õUÇð®0ìæô8 õKw.d×™"€gÿh `vㆀÀñTï Lo Jÿ^î`ôžŽìŠvO €?(t€r®(v~XñNôiÃqmt(wE‡÷w°¨wÿÈ„|Ÿt~ߊ*—îíNuAwK‚DèøWx†‹oöÈ=WøcÏð Wñž@ù×È„˜:?÷vuÇëzÿƒwÏøï–ïMÿ‡?ÿžxlßî®(ö嘄 Ÿ¶ çŠu׆"§u‘ÿù—ßt2‡7úiÿB€æùjØxmˆz¬˜„(€+çtŸ‡ µgû²×é~•—zK¿ùŠØ{ÕðúîÆnpððœwË;çtžÇë ·×¤¨÷:Ÿ÷zõÓ(ö wûTWtc/xå2üJg|DoøM/öy€É÷uª ¶ïqÐ/ñ¦hu®PqÚÿfýKO.Ù?õÿã÷Å?²çù;¿w%ŸwÕøý¡¯†Lxq2u_xJGñ²ßÕ?zßñ¿ßƒ ÿ{œ‹bŠNoözÔ¿Šæ·vµÏ„èŸ~Ñï‰{çõÈ~7çŠ@§õ¸rþ ïzïŠ ó¿ˆjÌ$pÿ2dX`Á 3øw°!ÆŒ «80ï¿2i,i’¢j 'ØcòeCƒ çH¹â~0K‚›´pÐ=þëngÉ=:Nz÷Ó€O¤eþ›'’ä?œK¥2ì¹ßž–:‹8ʵjÐ=$µ>zöOZpiU²- 7hW¬Ïòíë÷/àÀ‚.lÿø0âÄŠ3nìø1äÈ’'S®lù2æÌš7sîìù3èТG“.mú4êÔªW—¦höOEÖ²gÓÖü€Êl­íû7ð÷sïÖ‰ÀÐþ˜D3!Ö= ¬5ð§€§ÿŽu ®¹r—× øÔ6²ÀÇàê×7¾Ý€Þ 0ð_€À*}ùUs[ö  }ö LzýíA_|™0¨Ÿvìi¸á`·@~¼pà?ÀψG @sΨ̓ËàÓnÕŒ¸‰óôgÀ‡eb_5 RׇEé×p íö‘º‰¨Ð?“„(8úYiNÝÆ`lÅÿPß„<Ο•0ˆÕ‘iªinJŠ(?(ž@EüX§ÍnRðÏ; 8ã? Íˆq‚¸~ÚÄGÀ?+òc•…m®9)¥I: Ö‡ù EçBöŸ6󙈛‡ùí9!ˆ þ£Í‡NE`~“0˜¥µYÍÚMâR”5E¥ÖL"ÙÔ«M·±”ÓJ¾2$TV¹ÞTIreh+µÕòuÛ´Öj»­c“·áŠ;.¹åš{.ºéª».»íºû.¼ñÊ;/½õÚ{/¾ùê»/¿ýúû/À <0Á|0 +¼0à ;ü0ÄK<1Å[|±zàh¼1Ç{ü1È!‹<2É%›|2Ê)«ÿ¼2Ë-»ü2Ì-#03Í5#Ð af¦ó`<÷|˜Ï-´aCf´_Hóe3Ó8ÿ\4ÔQï,uÎT?]5aLÛì´`J÷åõY`‡ ´Õ]—MôÔYkM3×h§õÛp_-·Ùgÿ%6Rk³MwÝ|»í÷ÝdÇ=wß‚é=sÛG xàv'½8á…KØá73þøà“ÿ­¹â™oþù_•'Þ¸ç¤_þµã˜ŸÎÞHµ“è«]ºé‘wN;ꩳ^Xì¶ßî{휫.»T¯ïdüKÈ—Ô»ðÃ7Ÿ;î»ë>{ôÔ~øèÎ?o=ðÚÿÞ½ôÕs¥¼F̃þýùÁ§=ñ®C¾½T棿~øí»ÿ/þøÓsO?Wò«?ÿÿè=²~ùÃßNü7@î dà(ÁúF4àý˜AðQдßK,ØAnƒ¼ ÷¾Nð„(„àA˜¼†%L ù4’Cê/†&, mxÃò F4bºÒC jP…KtbgøD˜ì°!GD¢£(En‘‹< b ](F©\ I\H’F5N‘Š`|¡ÝØF“¬ñe<#QæHG=~‘©#ýøGA2äŽYôbÉCBR‘dµ¨CR’‰ü!-9HFVR“, %#éÈOz’”¥l$&¡8JT&”€„ä+ÿßÇYÒrŒ>d¡I\ÉÉN¦R•½ìâ/÷¸Ë:êò”¬$b-m9Dd*s™aDJ1WyÌ8Êј¢”æ5ƒyÉÀDS›ÛÄ%01èKqV›Ä¼"c9LYŽšádf3ËÉMtNó™™ôæ"­ Ë]fœ“¤'/É)O~“ ›Ô';où—n ôî&B×)ÑÁ0Ô ÅçE1ÊÆ‰š”í'<úЂ†Ô™ö§E7ÊuFÔš i>5ªR™:ô¤(…iFJRœÎ”¦/íK‚*Ô¡µ¨F=*R“ªÔ¥2µ©N}*T£*Õ©RµªV½êTóÕ­rµ«^ý*XÃ*Ö±bU«d=+ZÓª€Öµ²µ­J5«[ã*×¹Òµ®r…«]óª×½òµ¯GÅ«_+ØÁ¬€-,b«ØÅõ°Œ},d#[WÇJ¶²–½¬a1«ÙÍr¶ª”í,hC ÚÏŠ¶´¦,iO«ÚÕ6µ¬}-l'ÛÙÒ6¯®­-nsëÕÛê¶·¾•*o+Üá"5!ù,•q•‡&&&666IIIWWWiiiwwwMx¨V«nr–}nŽ|x‹yw—e¦s~ i‡®eˆ±x‡©pޱz—¹B5¢B<”OO™SSœ~¢CA¸KE³\\«|\³cXºM¤dcªk|§zg¸di·iv»wm»r|ëx9ð{.ÆULÈUTÜ[[Ç^eÖ]aÉlNËcZË|XØlMÛfVÖwLÖvQÇdjÅktÇvgÊsxØdfÕmpÝreÙxyæ^Mã[YèfIäcXësGèwVãfeåopæsiäyx†n‹‡s‰„{˜—m„˜uŒš}”¤l€©w‰¥}‘¶y†Æ{„Ô}‚倹€Z¯Œ¯v²ŽmÖ€:õ…æ…+è‡4ó‡%ò‹5ò’;͆EÊŒQÎVÓˆFÚ‘NŃ{È›qÔ‰fÐ’iÔ”wΤ}Þ£jاwëˆFë‡Wç˜KèšVð‹Cñ•Gð›Vègå}ê–eê•wð [å díªvî±|ð¦gð«p‡‡‡‹„™–…‡›…š•”•ˆ‰¦Š”¢ƒš¹–Š¢˜–ªš›²‡ ¼ž¦»§…˜§›™º€Œ»‰•»•…·ŸŸªŽ ©›­¬ž°¶š¨¤ ž§§§ª¨¶§²¾º¦¦°¬½´°®¶¶¶ˆ¢À˜­Åœ±Çž´Ð¤®Â§¸Ë¨¼Ò´¼Ë±¿Ð·Á̸Ç×ɃˆÉŒ“Êœ‚Ù—؇‡×‘ØšÕ——Ä™£ÚŸ¢É¥ŽÂ¯ŸÑ©„Ъ“Õ²Ó³–̨¨É«´Î»©Ê³³Ø¨¨Ñ¸ Úº»åƒƒå癈噙ðœê¤†æ ˜í·ˆë¹”奦寰縧嶶ñ­­ó¯°ð°¯ò··Ä»ÅØ¿ÃÖôëÁêÆ§éÌ´éлñÀ¿÷ЪöÙ¼ÇÆÇÄÌÖËÒÚÚÂÃÕÎÓÕÕÕÓÔÚÖÙÞÛÓÓØ×ØÞØÓÜÜÜÊÕâÛÞâÝàäåÅÅåÏÐç×ÉåÙÙõÇÆøÐÏõ××åßàåàÜäääãåéæèìîããëëëïïðíðóúççòòòüôôý÷øþþþÿã‰óŸÁƒÉ!D¯aCƒù’óæm"Åz 1.Üȱ#Ä|ëå³ç±¤I&!’‹iòËG4bÑ|ì¬Ycw´©Ó|Ø®]ÃF´&ΚO³juokS«U±j=HÐc<‚ ‰êŒÙ¢ÛŠ+bŒ'Òa¼lùÚëë˜Ý¿‹Ý|§XNÙÈ^̸ñ]Ç€yê„|Ð%Gœäòá< ”nL k Þ¬ioè&;Y!@I†Ñƒâ`›Á¸©7­Ü¢c¦×Ç©R¦$³Ž”‘µT i6Öaƒ«ÿá"6ЀРxÒ?F†p æÝA›í}ijŽc2©Ü‹ÿjt=DòÈr6Ùˆ`­zÈ¡,ªL®X… pÀ¢´À?øÁ’€ðcgŠ»C¸°Ñxäám’V˜ &C/mêáH=-ì–3rYHDhXV'@"MF@æÒû[àM‡’«1î‡=H£uõÍ ^õÊ+z”ºDmZT+Ä 8ÄNÐùè-ºqFÒá`§CP+e'+\âÚ…uSÚ¨2fšZ\•iûcÝ!f7$VáòDXs€â®øÅð²ÑF@B-¢ì( Ï!QrH5¦A dåÆÿ£ ]Ì6BÇ@RÀ|M‰UW+j$*‘6HðH‰Ž p Å9‚a;“- (G‰Ù*éÓ/Í•¡C HA¸q\ñÃsu…ÓÝÁÖÄ"úP-¿!eðr NЋø—¤uüμ\ÁDs܆ E³!Ó¬õ_ÒGPhÃNÀ6ó™gRsärQ‹Ò¾¹ yÖˆ ¸RiC6¢¶-B NÁè!ÈÁÎÍ&Sg˜1‚pðâÁQw‘¤ ¹\NÄA”ÃH#ƒ2E m(€k1Ç0BàiA ˜XGŽ…P¾ô] m¬P›=,uÝ)vöF®’2â詈õÿL1Š´¦[Ì:…÷}ru†'@‡…ä f±µÑ +Œ!6ƒÑÐc‰ï|“HH¢9Kñ( m8¡ hA œÀ„Qƨ°1Ù‰ªu¢f°Å8¬£Í¿4›S§À ¾Kl£©kûœšž‘(óÚ¥ @'òaå4€Gpy±í @Ô 6À##r°càÊ`bƒ‘í ˜Ðú¢¡à„¾pài£6ø[ò•ønºÈ!0ä„H¾ár H`c_y)€kØ@RHÎV$ì€f˜Á~©i*€Œ‡'1†5„‚†xÃôž£ªgµ þëÿpt’O¬¼„˜ÙùØÉˆQ5Ä0T0HW:55$Å׋ò/êÅĹ!Y<÷Åeo°TªÇq4I³ ¨0 ¨߀â#KÀp ÙÀP0ˆ@5ˆ08PG:@y>«@5²P|Ùp «047g£ \c6e5uº€n _2øƒk#7¥æ]/%á2YEç0òà ¾À¶‡{‚ {ñð;PàX6ГU,Ð'4` Ѱb°ÓÎ}ò  š†`ô& |ð÷Ól/q]­E7á);Ño«ÁJ!¡ÀxDÈccžä"F [ÿ èy t’‚eEVJ<  ôv_wà©SoVrx(~ˆÔ)îrÐ1s90^Àˆ[ÀYð‹¿È¯#)Ú h¤„‡ñp¡Ð ¡° ª“ ÷õqÛ¤bEB‚r쨱 >—"|1k« aC€L« ?p^à‹Á˜]P { Ö8lÂDtîLjsxMרdñd-6P›¡· ¶A-¢p§"çˆ Ó^rÀÉ™œ%Šõè-tt ¢Ò‚!%ÙþXŠzö}Õ!©OùQ¾@¶(F°KÉÔ"9ÿÐ)‘YÀóu‘y°¶àYŒ± …€|a„ÐÜQkt£F+y(å߸1§Oè ã%9™¬ ŽìŒ\à¿xÙ@ë° ü€ »à&ä€60 ¸À6€ Žá1ÙlšÑ."4•«X"înÇ:,¢<èpF ‰àFP@<5.Ø À˜^ðY÷50«€^‚ÄœhÖc BÖé°AÊPMß%„u'€9XtÖ`q· J"|iÒ @A„†RWÊð .Ç€ÙaÆ ¥äj§ÀÀ®° è@®ÐŒ¡EW¦!Î2+²ÿ9›áìÀ>w g “å Šà-¯ „PÜ`*ä ` ©HPÆ ^ ¡¸³K·À0»8‚†QuJÒÄ:)¨˜äiÎÀñá ÿ‡iÀ³ ‡2 Nà bœ…{€.w8Ç5 ¶`*…© š éÑ ,bEâÿçP:údCØM «á¡¢F ¢ /o$ÆIN{P/Ú:@“–X7Š£äà ¦n–“§Ã°b]!ž Q¤³Ô癞ë™&ÊpˆHŠÐ ¬qŸù¹Ÿ ÒPJë¶ \ „Š£®:¢…CÚ Ñÿžhêɦ„tRîp›{q xáy8Y„–5° ‚Ôð À €"Àbp˜°A®à?ä`£…J¨Óä  +r ÓõkÞÉ®ùACA©©.Y5 aûs ­ao§ ººsPÀeÕ( µr " X°bð­7`F`(Šâ ƒZ«8«a‰ÊlÀÆšÁ*¬RYR.cí²-(6M ‡3á¢<{QrÀs0 óE@ lpP dÒ&®æ™èj«Ô™²Þ  Ðè®!7¯XU)´’%ø rl·/{Á®Ç€­tRq°IÀïÐ[ ªR˜ÿj«8Š<л”SOpÊÈ}Aʱ}åTö0ÿÃv†•&JÒ­²~á[Ð.Ë] ³4Û(6‹ À ”  `àá¬ðUri’P†Qi’ÊZõ ©s;Ì%¡ŒV“«R rÐs{° ‘а(B‹ÒÉ·°8*%ð1€Ê“k‚&Ð ýwo"·<¬ñ`YÅ\åöŠ8àuÊn3´qP‘\ ß*á:®[d®q °Ü€PÅgç¨`½¹L·¹XÕ¹PÖoÖCE ç©M1dqôvH°qð³P s ±* ÿ0»À¸°eƒÇàFžP`Ð@¼ÿH´z˜¦Fh¡Öó^'I$øÙᨀ ÀÛ'jä ˜P8  ‹€»ü@0ðg®`N`Š`R@H&¿Öe´¨cë¶$P¥c&Љ 3Ü‘¬‰z3”"Ý[VÃS½ Ü`´2«0CâõFü•€Âzæ±,j0‚&ŒÂ:3Wl@¾0]À3Ääª £`¥³…Üð p;à"À–"¼ª±šËÁ1+jj¿w%|9€ˆ‘æ©H©$FКmÐq pÐÃÐTÃ^~@2“¸f«ÿ° ) »À y›?V’ifÂMÛh¯ág=¾@Y;µÅYù«ß°mÀp sà ï $Œ² €Ð°J œÀ ç"2P ¯w¡>ƒOl¢DŒZÄ*·ÖSn9VYòä,€ˆºÐ"t@-r(·<J ¾ÄÅ…¬ ì©< GYCð ºÁ „¨ô ‚„ì€ÆKž ,b7#|“•t/P“p 9à„À´ûŠÍ»ˆ JàrÏ -pÐQ §çp¿Rop\ÕðL‚dÀÆîϳ9ÏvqÍ4Y¨1tºC0v<À¯×üÐF —‰— ¦ I ÿP:~&üZÏ®Q n@#{0ÀüaEî ÏXÔFý€8Á6¥Ã5®0Ye5YeKàì^‡ÊÙ&®N3 à€à Y“ »XM5iò n“ n fóo„hs¨‹œÍà ½·q«. l×\²¾UP Y9 „€·òq3¾€ ©j Äé& :ÏÉ]ÑE%uH¼ìvʬ ìà  ·Z¢¦"M»[%P…L ôÚ°´.Ry` Ôð[ˆ'À?| ÓP Eà[i’ðŒÎ„Ѡƣ»1sy¼]% l<•]¼9^ ™,ÿðX>à µ^B  o°c+ žð ª´?EÐko OŽåœè‰7âËÅ` RL=¨!ÑßÁvÁ(×½’ÙÝT;êÕ†À+@I £>Ð&¬‘ Ò VÊÓ…†Š’ @0³±m€…°†×‡AËlîP¡¡æ] PnE.Ç ›<ÇæôàqöÓ¾0Ç0YÉpžä\¡ @@ W ¹|Љcú ×äξÀ1ÞM3>“5îU5°Ò8³ã{°“eëÕ>p â\Åä¾À^2O­Ñäöí«xµAšÝŒBÚÎàÑ€Yàt&’d¯,PÂךÿ.ßv V8ƒá>@l¢$m°þqàPp^%~âÒ„º€,¡ånŽÑß­ lÔКûPÌ+9˜ÌºnÂ,øÙG™¾%‹ëåpBЕw:å ‚Ñ?uà ‚°Sàä·äÚéÏ÷chì/Â\&‚Ì–Lž¶iqÌ…ÆÊ ! "0Aë÷aÛ”5Q•!›LY¾@ y0QF° K`^€ì?VC$:“2WE>,4”1¬ Ï|P扞ò’?¶183 ppB µÑf¬1Î.²…¾° ×\»è\CþÐC ;Å›þD– ›·¬ ­ÇgŒm*CðFÊ¡0)Þvÿ`t°‹ë B€Ùö‘æî>ñ>@æfžpg.?oX:O‡"çÁCÙð£qÙã¢áDv×üQØ´¡.?KGÚ¡vÁ&zqñ8¯ó…±´5¿‹Ê3Y~ô w?n¶M:ð¥ô3/ÙÀOù^,5d­™ `5”&˰ Cð=’ÚnJð{að¥(žä Ïðï:7|cΞ? O\øHL !PRòõ®ìЭEã’W-Í ®dX[¨ Π&W®.מ©¹±Ê¥Éž¾(ÀYݱ´JBÎFÒ¸c‡òöˆh¦'sŒÂ¢Þ+Úiy¾›»è((RêMÕúî&±¯.¬ÿÞ¬vÁCÌ{M>S Ú‘æT,%í[nŸ»ZãLY8 ÜŠºiœ¨I»ÐÒ?üÕõLKÚ»ü$(\A„ òËÏa¼lã¡óU±â1‰×UT†.˜/ŒÇ|CçªâºŒ×ùða$Ø–)eFth…PÚ:QHäkÈO#A}¡”¹²%ºe-<¸ÔiÁ†i>¤xQ¦ÄªQž„øÝUe?+ñ1äÝU‡¦%ÕáT‰DѪ<LQ®Ùòêb¤ñ±Ÿg¯†š;g¼mpåRˆÇ5Þd‰"ü¢Ì]EÁ„e†ÿ¸ØöU‘$M½ZwˆcŸ¾Ðš¢ÀIÛ%NL™#„S'Oñr£SækU'BÚÆ«îKÙj#èØùb[öSÚˆo¯ßÈ:üC‘ †eYVqJOÊ!þv.DÀ‰g#‹x(ä? F‘Η¯Ð!kg|ÑǼó–Jo= J&–ZsÈ'Ö„›h5±îË(?m z+ºx¾ ¥“PÎQi¯c¡€s¶i‘|0 ¬B….Ìp½à”Yå§u0+BeŠâ;ú£«ˆãÄäô»í yÅL<ò($2!#´IˆV«nJ‡Âbp¤‡*Z, ú” ” ›3Ç¡ä¶YDÿŒö9F5ׄJ"õÜ” ÎläôI™:‡¸3˜KcMS‡Š7Ü„ˆ"R‹¢1x´1E›A3ªj¼‚\jȧâñf_oâyTªlÑj¨¯ŠTq+#W¦Ï ¶(‹†µ­Égí½÷¼z¼!§žzÈñÆÚY! ¸\ÝLKé×+ÑêŽXcI¦ÎäÅì©'iÒäŒý à‘SŠ 5yñüÐS†+âáa™ôth´ìqˆ¨£–zjÿª«ÞWê«¡¦6®»öúk°Ã›º^…]ÄÖ…‡Uº&[ì®oqÅ•[àæúm®ÏNÛîˆ:Æ7¡¿ÊxãŽ?&Ûž,ya86]´"MiºîL¼ê¼ÀÒ—_w>,ñÆ6­¬`Žü6-*X¢t{¬Itð±x¡Ì¯öZ‘AOl/WØØu˯’üäuS*](eØ fvÀee3wÝ3>ñé1Dù§ÇÆ+OHçqç9zèÁ¯mdŠ8è'‡øûî_üêGŽÿ¶òÃEßßõ/nßóñÅÿÜÿþeëz­Y‡öjæ(ÄEo~Ùšß^|á’ÕQ%bl ¸¦ênµŠßÿ1ÈÂ-LiÄufR†Ù·?†¼|”Tõæ_Ð5Á³ xÂýet,tSõŽ!Ã\Q{W©þƒÃöéz à䀸!vËxBSßõ‡B%öŒ‡Gr¡O`Ä\õƆ¾XƉ”Eù1±ƒìP‰ÈåáÃŒBcÀ¶˜¡~Ä¿ˆ`oŽ;æ5…)üžÿCbsƒ$äÿ˜ÈÛ@ò6‹d¨F&vnŽç±$1ÉDJbQ… ü$C™ÃQj°”þ;eS¹ÃUН•Ýëd c ¾Y:¯–=¼eôr)«]r±—ºû%_¹ÄGf²˜<¦‡ ºež±™iL&(eÿS;f~ÏLSªöMp†Sj3Ëd9Íé|øm“Ž# ÒNwòžîœçã‰ÍöáÓyú”? O¦4 õçš ZP"!4¡å‡B£I‡^“¡ ehD sЊNÔ¢ë4èCû©ÑŒÔ£ŽÚ(G*R‰¢T¥÷ éE[ Ð’ÚÓ])KkÊHšÂ¤7dNmÊSÆ”v#íèKgjT™ât§:ª ™ÚÔ|"u¨P*U÷IÔ“Zõ£Zý'WI*Õ bµBBêSjÒ±.õ¬GM©YתT¯’Õ©n…+]ËúÖºâ5¬mÕë^íêW´Š5­^Íj`ùÚתþu®l%ì`‹ÿ¹BV­Œý©8-{YÌfV³›ålg1kX—‚u‘-ˆO)‹Øî‘¢‚=ìióêڻ¶§¢M,hm{ۤζµºm,kCû[Ô¦–¶ÂÝ-`ƒ»ÕÇ–v¸ÄMîU‹;ÚɾVº±.oûÕçÖöºEmî@»‹Üí‰Õ5.yµ›Ûòš—¹ÛU­w¿Ë]ö.×¹ï/z¡+_ì¾·½]ímv×;^ë†×±ñí¯çK`úÖ7Àê]m+Ûû>˜Á†ðy©»à çÁp…ÿk_ c8½#^l†5ìa ƒøÃ&V°_ûðbÇXÆ3¦qm|cçXÇ;æquü”>04ÈB&²@‡L˜#Çÿ3ÉJ.2@—¼”'2ÊRn2“e3åýa9ËUv§– ’ †‚9Ìc¨˜'zf4§YÍkfs›Ï³‰`ò4@±?8ËY (€êY¡MT u4?*ÑgMž'CÎÇ`e#ÎsvÔàioØ •Døñèl€Ò²ªG8 €zTB’.© €!Ãz G¨7q€¬) €@p  D PM$` s}€™ ҇ģÖõÍú`€îy#ù69 èxÀÕ²7 \û ÀŸ¡\€^ó£`އ¨ãM€QËæÖÊH60gÄÿ@`nÀ¹}@r p´ÛyéæÇ&âˆ|[ È4‘,þN Øæ‡ø+«ž÷ŸëÌnU'œä²ÚD¸&jˆóC4“Å?ÎŒkœH4a~ô #Gw¡‰”ò’€¨DÑK¾n‡šfÀº¬˜^òC šžžx¹Ï-oŒyØ<t¼û €Žÿߎ‚zâìð€÷?wÈ™ÝqYecïÎÆ&`=€®;ŠâCO7ªß´zM?ç5×û0l®ïœîšœ÷B€mi†Àù¦¹ æJ,Þy›s=L/æMàlk¡c|grÈÞ¢—'ÿHÕÝü{à_øÃ'~ñ|ä'_ùËg~óÿ|è2öMùzô­ï(c‹¹Õ¾~÷+”}lßÚ!?ù0^ ×GžÒv×sìù i@^ä7Ô è™Ï÷Æè ànï# cë3€j;€€u È€D5d¸f36‡€s«À<€Y „J€ÿ“@fÜ„Y{@« @|À†{Àa;»‚‹Áƒ`¸ûC¿†ó†4¿M“·f#8(8j3=°9Ø„,<œµ™cA]k¶ðS6 ŒÂa“¼Jp@ $‡ÜB“ã7ccB*$d6@5ÜB|;B'ô:ÿ(ôÁ䶆6lË“ó†í»Â\‹‡Èc4mÛ¹aó4fDì5†K'œµ¼[ÃÔ¾jc¶¼³¤Û8 ô,¸ tÁäItÀ;ó†"ôÁ;Ã@¬FtÄ5Ɇ>ЙJ²Ô3Û£´z½ÓˆY³>”=ž›E§ëƒ;Û„W”¹Ñk¨bdEâ3¶TF'¬@gœFj¬Fk¼FlÌFmÜFnìFoüFp GqGr,Gs>Ï•‹–nÏ´væ…™Ñà¿¥~ƒÂ‰ò(LÇq »0,=z…Sê{ù%déíuɘ§½j×ò½«V L¼{QÛUM—uëÍ.%2.aL±rej°[ÅŠ„IN¼xñà )7μ¹pç„­Q³Ò5kţ¾½½cwïߺÿNº²`à ‡">Èž÷VÞ¾çĈ c2cÆ’QÝO51bÐdÄ6ñgàûÕ‡ FÄØ <ÐØA (w–…FaHTxâq(lL)$VB%!4Aæ¤Aýu¢D ÂcŒ/4úbÌ‚5hÇŽXŽ@R#ŽÑðXŒvHC!Yj硆s5 %PUQF! E*‡ˆòý£DÉÐxÎ94ê·`„zD ’ÑL4dAιæŽ;>c`…M2ù¤”}N¹l˜%6OmMu Ÿy…IŸD3ž#š7.Ø`œð9á˜tvjç‚é@M:ò 蟨¦ÚçL„þ•Y)2ÿº¨y‡‘('¤¾H ¥8^*‘¦·vJç§Âîgªªß Ê“²Ë®Úb!%F’{)"ZЇ‰Éi™¹¢é‹š²é&œÁ‹#±æNt,‡Ìžv*²ßÖÙT¶beТ³ºÖRBª“L0E\„E ¤Ž<>šî‚è.¼nxírÇn MReeGé¹«ŠŠ*zØSéR£/l&þ(ä ³¼§Ÿðn±`ïÆKQ–q}XVŠ‹ÖWAÙc "¢`äŠ/Áœ“ŒB$Í­: 7Ì²Ôæ>œlÍWc=¨ˆäîU)ä%ÏuSЦ˜b„xb <;ø2Óº“kÔ.Hu±Vwÿ7³VZûí¡Y˜y}bM¹XYòºŠˆäÌŠX`'qC ÏÀußîÞæ‚Þiß2Û߀sÑo„ÇdV쩈b‹c!ôÀS !€Â‰ ­4ÓNÓ¨yèy(:¤Ÿnúf¨ƒÇ¡Å:E„’½ù2Î<„X O9¢X® 3,0%q2ÞÉ'Ø>FÍCÿ|j7Ùø²KU4ÐÆ]ŽuÕä¦È†`m<¡JÀF0ƒM$T£ÖûV6A¯E¯C1sÞüœÕÄ´‡Q³« ×H!S"t(P »ÕèLišH„ð¤' -ÏS´`ý&–A rp&$2`ÿu¯¥(F œàD=Êщ6€ ¨/„à9^eÊz(†Ž”t®rj‚ñ£_Å8ÆÖ´çŒhÔˆ‰zÿXÄrÁ† „E`ãŽ;ÀÁnqÇ[ìÀwTCjqÇZ´A wL¤"ÉÈF:ò‘Œ¤$)’ÆJZò’˜Ì¤&7ÉÉNzò“œLŠ>|³¿ ˆ×bGB± rÄ·K“.\h&o©©A\V½xC …1/tË(—–܈`*Ð)ݸ"…¼²ÚX"ñ_ÄÍÙpp@°JAÈxH‡:òà z½ÄÑ/W³Av¶ó,aƒŸN0"&öH$VAŒ<¸gÿ9ËbÉch°Í"xÓHÂÜaÎ…)íÇ+×ûÖùbVÔ¢I1"븓´$© £d7rXü%ʈBì`“(¾5w@C{xCZ,uÐÒ”hû(*—` b;LÖ»v1½¼dZý#iaÔV ‰¨ Ù°@5%eBØÈeé”ҌሆAD½Ð;‹šT¿u£0ÖûLäÓB½5®ÿPÛÛàqÕhïæèêW%âS#¢ «ñ$b7]}q¢GE*FÕºV£h49M«b¿¼îÑDéÐNª Bâ¥1©šÔ1²ÅîRX¬•®‹Îÿ¦5)FÍm[aOuåL')‚ëAã‰Û9¡ IXa÷šPƒæîÀÅŒ„°ƒS@aD¨Ã3ë>sÙÍêð–YmÙ¬ S²“Š13ö[¥øoñ‡( PØW (&á Tâv'¨zÀûÆàAÀâN•‡‘Â"»ñVÀõØ¡–WpéÍÐn(½Œ6ÅEÁØAšâ4@)G÷@áŠ4á,`ÁØðÌ¡A›b0a[ë O¤°Á p…“w[ gxC•ÝðObÌnX³†€Ç*Ѐ߲DÓð !˜À¦¡ÆPpˆ±ÝR3òf±ÎZª —îÿÈQ‚3zÉCJ= «Ø¦ ‘+gÙ„(~@hœqèžô°à/6vRHcÝìÃ9›÷¼ÖlO<ê¢tÖE(A˜@4àþòÅ !Š7¡ .`‚ƒ´‚]ðÂ3¤/À!ª-®ÔT&5 ‹Í/3*¥ÉhéKgz!Y*O¾bl-…µBpÁ}K°ŠSÜ`;°ïúǸ †Còt$ZÑå6ñ ü'ÊCà`‡"ÙjC’°çôPî"{IùÿN²‘÷½—×ý¨©ÐxëÀ6ïHcC5Ð#."Qƒá<øÁ€{àƒ`AÆ@¨ž±q ÁÃWsR~|üãŸuÈy+2’1a–ç%®+š—Jm¡pÅnÁpÅ*jp±ÀEðJöÃT¼¢ºÀFÃv UÈGFÛýÌ(ȘQ6é”{]®\ç0ØI"öíiéú©º5wÐH0­1‚܇Nôb,M¶é(†à ‡gÓï1¢·½ äÚG •ÈËf¶³»ùºü½|¹—oi>‘sÜ‚„pÂ6ok!”›â7:ÒLÎéTòž±»ŸØN$RŒÇ·ÿ’å÷xÈ÷û",ጼÖ#ð°%ÇŸx…+~Pl0€XÄÀ(îŠwYÀ *#Ò Ñp<1b{h ü¡  p]à%^ágaŽ×{äW~vmM5ùr=ˆr»Sõ5hê Ï æ ŸWA`.°M†`§7ß÷URÇ}‘U Í¥>45¸WÍöfLœ¡¼ñ3'a(ÿÙ  ;JÐ9@0?52ê 6'…,@hÎǧc5×ZˆÅR ÙP MpAffâ§r[7„DØoôf1D A-ufÙ° ãZu>vXÜr 970?§ ‚Buÿ€B6$ƒÈ]YÕ a9ðÐhXç2Zgrx˜iPq‡ÉQ ³!jCHð€øçÃÆP8ÐeEÐ? — ÎDP#j¶<~&PH¢Á&ooX„¶{¼G‡ÂäoÙr-¢a2ô°Š ÐHÀ\ÝÄê@‹O S&t ösC?¨Œ8¢bg˜ Pc€E;‚)î„ã§{ÏèŒý&èF"BØ@¢h °.àM°EC¦€ Ë÷‚q„Vn„V¶ V”àHVÕOƒðaP Ú àt{Y—{FÈŒuŠ–ëgDÊä*¥` æÿ0ð÷ PF°gˆ 4à5p]€ÐGt1 bŦ’T!r¾À ¾ã_`–“ H²S'g,,éN0)–cÉA®Y"æ` ÚÞ°@“@‘hcU°…;P‹LCE1 ;P2 í(5±• çð]ðà ƒ0jK†àz •,Ó‰üV–l‡ß¡›&skI@Od–ep9Q\q ÛÄMM#Θ3R¶ „SiA#ð`9€·dnl_I=Bè ø‰«ÁI<“I÷²FÃ¥6@J°` ذOPˆpGˆP7ÿ@]9 ”=€«pG²˜Øp « 3 I‹¤ ”Hà&G  wÐbðh ŸêH”JZ z š —¿g8|qié5ò ¦àd—s)uÉWZåp5àG<‹3` Πb t ‰¹˜_U\ ™†P™ø {à:ÕxûØ’š¹™t8y÷TTá*ò#h²I!  ”õUµ|F0E [ ZÚx€Tsàöm‹÷ ÓOÙ‰€gmNšx™ayQÌé£?BZy‘1Ö&&áˆl·•òP;p€ ;kµØVº\Œÿʨ\ð T“ ‚p\‹@6 æ Ú N¹xÉȉo ¤qJ–§Ú$ ssõaŽe² ìø/5b…«zBc« >€^°¨Žš]@ z£Jðˆ†Àš‚Kè„’9¶’ÉÙs˜ªöóov|Mö#3r æƒd50´ˆ‹“«¨ r\°®\ ®YÀqkz¬M‡@VÆÐ=Ò ‚ ­¤:­ÕJ­ûlž OuöªÝ iC°xð0!&cƒ.p®éš\ÀwîŠê` ;âcÚP7P#'@âqÄ ÷¸ŒsºrÖjªÐXªÑõ#± C±ÿ8[°ÀvQ ±8À ¼ê«Ê^À¨q‚ ¾ÿp «^q50 ¸Ð5€ á²#ñÊ£œ™™-KY«búC3r‘§÷‘ÆpMcPç0‹E€ ‰Ð\OP²¦>Wú  š^r€—ãp á q³+ÜÙO5 [*¶€} Iu ‚™w‘µ‘+¹T‚b§,ÖsŠG#Æp ·I2}É4LÐ]%‚7õ– ̰ ðXÀ®¬W i `¼@ÿ0ÿ° ; ˜¾à š ¾ùZ»B†U³¸E¹í¥œ°ñ:ŸÕŒt±µD#·Ð¢Á0q¾°åó  @…° š3HÿЕ pTP qàq ¦×®`»€»®à Ô‹ƒ4¸cßâ¢Æ$Û,.éTÿëo…AyšfÓPE½»€“Â4¿i« 7“Ю &«[ð w°O·tÐ` šC ð¿ÿÐ ãps@2®Õ2Æ€½i¸£c¼,«¼rºµgWì¼rqÀº‚&®`Eç@0 ¬@ÎõU«ez@LNJ#½Â"|ŒXBv¿ÃëMÁ+,ý›¼[i4,J%|ÑhÐÛ-ÒK½L“ ‡ ¥±¹½&à+¾äÛ€ð &oã  ÿz,ºKxÅ4|zE3¶ú¡zìÊZÀÍbàÍà|7ãü · ŒÀ ®À ¸E`” 5ÿÐ ­í¦»L؃=Ï$­^íÁüðÈ à áÇZ·xÉL€‚Œ™h¾VÐpà³@ Ò•v«ÜÊ#@°  =é°ŸÆÐ\gú OPÍÞN=ÞæMÞåýC†ýÅ&í†xwžöUO¾Ž0«éPÇ'^™ŒÇÊšp 7pŠ0Ýÿ`«0b`î[M`‹PQ0^ÏÓÅPÛ•eÃVÁU2OðÜT'ЉiÆP$x’]9oÿ¢ÊÑ y$k·PWÿ@ *˜0° ó¶vÎUxÇ)O>Ãô çtXÕþQnøy€`ã åRNåî¶',]°chM¹’ ¢ÿpÜD`8p ŠÀ`: @¬åÁPË­=äFÃ…mÏ>ÀfÆ‹¾-¥/xÉ!K2R¬lÐpoРVI£v~PÛˆ Ãݦ,° ‹Yé*Ü>R·ìÐ ¯-ÕÒç]¹JþX¾@q±Æ€ q žÞ€&l°orà í@2v³ €Ð I@œ° ·H]1Зâê¸0’zdFï [Ó°E°›¶D^äs¾È_›yì̈ÎWq_Ö-pR º00s0½9ˆ*I '¦è·ž ÕkP·HqBð @ xRÇéb7É`ö@#öÀO=¹0ÿïéríò†m}9qx0?ð40 §€M@Lc#ÿî¨ÛÈ àJgÌ‹¸8t,Œ îàK' 8–.Þ‡vÃ0¯o3OÈtaóCÐd5qe"öuB@‘>T$õEà´?‰ ¦€_ ÀM7²4TÓB€#ÒÐ9Ö c<^ï /¿²d¿ì°}: ÚIqIÜôG®0qà6qÿ÷Jà/¥v€»ØÀ4®ðMO à€à |„ »ð¢GLà ‘” m‰än Œ¸² ¦«‘_üÆüÈïI²£Ð0-tD ù‡‚@i¢¿YFE— Ê'ÿ°6°© 5?,Š©‚E€#WŸõ Bß…ïTáSE° Ë «Z%~ÿrîøT½¼n0( E~˜ Á¢ „4œd;WDˆ"Dð‹&¤GF(X°Å×G_Á #òã¡@iƒ×ÒåKx¼ì̴æH_ê`îäÙK=púZþûsQ¤I•.%:ŽéS¨OF¥ujU¬K¯fåÚukW¥Bab{yîäà J°h‡AWð>ü$Ž7/²XäéUHuê‚aƒ7ˆIM8ZÈÆÓ%¶tň›ã뜺d!o†7î¨Ó¡-õý VéWÓPQ§fºšµÖ×±OË&ÿ*ö%Y—ÆŠìö•ÖÐ%ô*Ò#çÇdx‚öìG"Æv\<ÌrKd?äD‹¦‡ÍB²²€¨ÜfÜr}sùQ'çžÿ†W´>ÑyðF³vM»¿ìÿ¤Í¿m{ì%÷Zj m|é‡V)Î2ÍôÐÃ)Œ¹x°±Èc|I¦%`~u|ù!؃§ÆÐséÍPü>ž<ÓgÑìCªGÒæ™g?¬|ÍHþ”JÉØ¬ÊÀ–Òƒ'AxlPhØá! ƒÇB‡ŠƒN{0†ÆõŒ)‰C}ˆ!F„±1ÇÒK1$c¬sG£è鞣þÉÐAñ{)Ðÿªœ4MQ°m”É# ÜIʃ9'%0äZ á¤dîLî0!êxN_¦ëáx2û¨6ôÈÎ8yÂ…"È3'uÎÑå=õ@ XÇ2 &Ô–~ê¥`ªM4±ˆ´ Ò¤åÊÚk©M Û¥„JÄ¥¼ó£(XЈµLrq.!ž«‹ ½.Ú3˜‡‚!¦&€ ÃA\`!‚wBs‡ë’½”U—0 Æt’ÅI³§YÇ—~ÂÒ‡Èü„Ð"µmÊãù@Y䬸 +DŒ‘ÅdN&‡’A ‚`ƒ˜–ØÕë‡çâqÊx}‰ž‹XE \ à—î f*y}˜Uÿc/³Î:_ÖY§e¨šg;“/QM¦Êì³I.yÀ‰-Có–z¥UaÞ@!dô°#QÅ„è"TWéáu4ÄÕ±HˆüÝA×ó^ 1ÜÌöÜ)˜›’qU°‚çÎi´ì‰jžn<ûºD§MjÐÔ·-[d´ŒýŸi:÷%.É?š£!Ô¹7ˆ8£±ƒ4)úï1ËÔÍÌ–4,¢¡žáôåE¦[²ŽUlhô’'³ ²ìúÉ[JÆ¡é/îÅvV©¯Ã»õ%t6Rg_í´i«aqÿ£ Îwv^2„G<‡ìŽwÑ‘W‡>T9]nAõè”›õt(D–K˜ÿ/êõ‘ëeÙ†zÑ f&£É˜Æ8F¶gÝH®«ìðCÙ´íoCPÁ,⋺Ý-ov€†âP%¦"ã"Ñá ‡83Ñ ¢9˜Œ‹`9áIˆn Ì¡J'®B|²ŽVôâO‚”> ­huÌPû ü²UÃ×ÝPu²ÑÇדžvÜÈzƒR‡™àl.¾ï,â³–8H/Ó›` hPŽ\°iÖÙÁ°\¢ Ptå°NfÂ;„± Yr9ã.Úç£9 lï[[,IóBjË~­Ñãcã-puè%׳QC"bD#g\X½2Ó.ˆ¤R7ÑÉY#/ÿrƒ•ÀGJÙXŒ±‹õ0rq©ä êü4ŽÒÁ’,œåØØ8C¤\E,ÓýtiÃ^Þï—“*ËÃ8Ø´2ê •:‡+¢–Å%Ò :|JO9aPdF‰ðàCvsbÁu;B§S2v±¡À±Gƒr‰´FCx.*xÌ'lh%aö€ðAHt’ l“'Éà#y×Θˆ0EK¸Ù —pDŠÃÒ)L¾å u®é´OI×ù¬£ å–÷‰g·L 7Žã«²ÃgKgóR~ÆO(ÊÓ*qÚT§B$OÆxPC T¢ðІÚŽL‰‹ð€kóY„e¨ãO¥%C 3SHç°™Rž,TÖìÆ“UÁ"2g’Ü!‡<ÓE<íR{L{W $š ðll#×Z–x±öp -µ>›yÌH Ð<é •ïø²u©Õi\&·Ç{ŽRŸýÜ;@ÇɃ?#´ö Íc®ä.sl«9¿bë´ø}w³*JÇ"Ý}øê$§X‹ë,ñ··ÿíy"ùhËØçÝØ‘œ¥ ñ“懎m„6¿7_g5‡Ml&Uþ³è\-]î\ûÛçþö+?ËÊçã'ùÍ~ô§; ÿ*v ‹ôëb« ÿúÓOþ[¸Â·¸ÿøí?~÷ƒ¿ûË·vú¾2;À8‹±îó¾L@ðÛ±ŒÀœ@íƒÀŽ’@ Ì@ \@•’¸ü:¿{:Ø­ƒ(A<†Â‘Ç+ÁkÛ Ó7Ã<Ôé·6ã¥)är¸¼9c3U»A±¸¾Í’®é ¦[#”â3Øs˜Üó½ÚÉÂ2Îà:'„th+u¸+³Ì“*ü°pp¾[v Á—X”2:;{‰ÿ±ª;´A°ÆúЉÓ#G™Ã$lµ%49Whø(œc‰B)œBãC™¡yðUã/—;±³¹Eºö±4üÈ»°Ã¯þ’8J$º!Qî2ò¹¡;ÂçÓ;V‹©<ü¶SÄCpƒ2cð‰ùØA6R¶ûÂ2K ›­ÂÁçÂ<»"œ³×¸³âºÅ¡à;¼¡Ùy½TTÅT´8³5qEúXŠ¡è(@Á¯5CÂOl 嫾[5°‰'âÃ>–«mƒ%ƒ1ÖÓF’IF˜€¶³+ÃÚP@¤»ÖA’k£ÊN´Ê8¤»5ë%w¼IxÌISÜ)ú_˜ƒ“ˆBù¨6^¤<ʼe³6Ó·Œ‘§’ô¼!yÁ°°©‚>7K¸L³®Æ<ÂG)ůK¬HcPÌÞ™›Ë‘Ïð‘• »â[G±z!}»Ó{¬ÿ6ÒÆpü̦I#I.oô¥Nÿ…]Ó]T=³ƒ-)Œ%Í| Uˆ5×e”Ø‚k×€]Öxu׈óËzÝMyuOçÔ×t%²™µ®šå’õKi=ÙØ¨,UÖ'õG~Ê«Ö_Ô¬ç4S~]Úˆ…ÖeXæú•5Ç|>c=V`=ÚmØ›õ¬®MA>uZPmÉØøRX¬ 7Ж²Ÿ‹i[¡p[¸[¹Û¶u8º½[¼µ[¼Ý[·ÕÚyFæâ˜i\Nø$¸ëÛ@Ä]@B¹ZÆm\Ç}\È\É\Ê}\±I\ÌÍ\ÍE\ 4@ ì\ Ü\LM²ÍØ‚ÜrDÝIÕÇ´ÐT½Ë õÛ±-]Ì¢ÝÚ=]L´#±(ÑÔÈZÿ±%SÜUºÌRÝà5ݬÀQ2tU7 Ó…­%Û…®ÔÞá•Þ½›Pý[¤^ê-ÞÙåÞÛ5Bö|YÙíÞìÞí%ÞóE_ìíUößß…Þ EÍX5_ãUßúíÁ}»Þû][í]ßý%ßôõ_ cCý`þ¥ßÿýÞ`–Ê0ÕÐÎ'ùH®` †_ïmà~^{Êàöà$Aà ×áæàᕵ_ î߯`6áf` na®a†áÖaæá Vá~áÞá!îá"þa">bîÀVâöaFá ^bÒ•â*Nâ–® vá'Îb,fb c-æâ.žâ26cÿ(>c1._+¾âNc5žÏ&vbàýâ56b4†c:Þc>V›-žã<öâ7îã;ÆcFä@NäBbAfäFŽâ0vcC–äI–ã6¶ä˜EäEŽc¨äNdB¦`NþäJ&åRv^O6eH¶cJ¦bLNežuåWfcXŽåQ¶å[ÆWGVdQÖãPžåSFeVVeYNÑ=fdNfe^ffnfg~fhÞ¾MöåGÎe€»daåj®cmæe`Þåiþeb¶æ`ÖepþæbÎær¾æZîæVNgs&gåtgt†gzgjçmÎçwæç~&áufç{V瀆ÙaÆgüùclÆeqFhovè‡^èÿx–çöçz¶h‚>gM¾hŒfè}nhŽèŒL2îè‰éÖg‘Né^Fé“þè•~阞çngš.èŠviÆiÜhŸiŠîi›¾i{&ê¢Öh 6éF꤆i•ži¦–i¨Îi§~ê®ê«öã’Öiƒ®i–æh¬k­þ馞j¡jª6볦åƒ.k«kµVÛ£îê­Eë´~kˆÆk·Îê¸ë½ækÀ†k½þê¼l²–êÁFlÁ6ì¿.ìÅ>쥎êÈêµæiSkkÌžlÊ–ëÍæl¥6êÎîk¶lÏæjº–lÐþlÔ>íÕ¾kÆnlØ&lÇ–hÍVm×~ìÙ–mÝÞmÿ¯®mÓ®ìÖ¾íÜVlܶëËîíÔöëØ&îåfnã.íß>îàîêNŠ>ÈníÞnîînïþnðoñoò.oó>oôNoõ^oöno÷~ïó6>™ù¦oûö˜úÆïûÖ–üæïØý‡þ†”ðý¦–g’§gðÿnðØ€ð/p§p·ð ] g çp Wp‘épùþp]l™Gq÷˜gñ×–‡ñÿžq¯q¿qÏqßqïq’Ñ„(M(€@  r¢„0å] M „¦(r)ÿJhòK³úÖ‡ ¨lò!OHÿèÒ(rWŠ(Ç €ú¾ò/O xØò77€Ñs%o”7?€ÑóúÐ5O>r4s8' @ŠB/4Wô#·ò0B „@€ðrl€1gyK€y ÐsO?¨ïTׇMׄÓ„ ¢ˆulxs}€@Q‹\®ê8ñ7Ljô½CõúöònJxõXŸõZ¿uÀ/ßõ^ÿõ®€Ào—vY?öd‹>(uTßõ>@ö@w¨8wl@õ¦ø‡WÇŠ>8€ÎÀ†y€Ñèƒzn€‹ €q()‡8õ˜ïg' ÿø xòB·õ(€‡NÇxèô¬€ua' d€€ú¸òMõùæø3€‰ßu‹/Œ/€ù.tMðxÇ øó&y”GyI r}€‡ÿ‡0˜§øË*zÒøõ`úhz¬0€€ €¤rÙ€Y7y¢¨ø×ˆøÈù%?„'Šxô®P{ö!„€7eï ¡×‡R×ø~';Y7 ´ï{ƒoûx{Ó{Vл‡ø¼çŠggò*7yÿ‡n|°2ÎuÄW|ãò|¥?M¨wįŠ"§xR'ŠÓ M€ñãt²ÿ‡ž?ûù–ûÿ@`ûËÏr6Çø¸t<üª¯r°ú" …';àïŠÁÿu˜}ßO ¹÷vxˆuâ‡úN48òÐdžÌï†çÏ J€8Šy(PÏøÞ‡ŠóOñï&‡‡Ô§ «/u‚/ýØØþ+JÿÆøgð „ ÿè󯛃p¨/€¾…j"`°€n;$ i#Êðþõ)P ÀlÆý£T密 ²4PñßÅŒ8’ü§òß<EMMH À<ƒ?/ΛYófÓƒ”`;(À€Ð©5níú›Ë(:lŠ Åˆô 2ë·À¦I@Ÿð.Ôùÿo@CóÞöyJ˜£ÇÃT¼HY€ÐÇGèz`ß“¶EL)€&ÆŽG/5ùÔòÌ„çðy€’ꛟC?. ˜ò[ÊRhŒu¡oá œ-ž›Ï¨ú=¡&ÌR2|}¤ÙyÚÍf?™ð8,û°4Ð'Íë}ÎSZÙS=ëðÔE—?7½AúôÑPFãÀ÷Ø<ì±wR€^(ØÇ8vÕ F*xÐ8ü1÷ˆ!Š8"‰%šx"Š)ª¸"‹-ºø"Œ1Ê8#5Úx#Ž9ê¸#=úø#A 9$‘Ey$’I*¹$“&f_ 69%•UÂf€Vzÿù%˜a©%—,ÍåÞ?PD‰xO‰ÖR HØ×î=9Îmi:DguSTaz¨‰XÖi€\À0XG@mÎó¨ZYb q*éppQTµÕ5@£šhb)ö!:+­„a @•r@Dÿ€¯4©u›¹vsªš´¥L½þJ›v¸¾¥‰¤~¡úª”µj»m†YJkmß^„Õi– 0¬–Îë?Xb+.‘Öe€bÂjÖq»ï¾cŠË«>Ëœ>sv³åiüÏØ`)¦Ý,0K–B€Gj鳩«Þòûñ¶þþ³¥€¸Vê^JÿJ@£Ý<ú«§–Vªp]¹Âõ®#ßüi¥”¼jÈA#ŠMöQÒVw~$Ú¦ã”tWû$TÒøõ¡gÑ#iwR…² ý5ØCaéuØe›"%Du6Ûm»ý6ÜqË=7ÝuÛ}7Þyë½7ß}ûý7à >8á…~8â‰+¾8ã;þ8ä‘K>9å•[~9æ™k¾9ç{þ9è¡>饛~:ê©«¾:ë­»þ:ì±Ë>;íµÛ~;î¹ë.;½ûþ;ð¾g_‰Ähüñ'"âòÌ›Ø<ˆÐ_'ýcÁ[üðÊ?¯ýöÅsO"õ£…^‰×›@ö݃ÿýúÞ«Ÿüû"ŽŸÕù×§ÿï~ûøç¿þò³ï?‰êg½ûí€ý3 ÿ è¼ø-pD ˆ@ N° ŒÞÿ,¢b¯)óû5XA †ð;Œ ¿ÃÁß¡0…&Ì  §Ã–P†\aïZH î‡6<`)Dá0‡œá}˜Ä±‰N\"‹¨C*Q|H´b ±D*Ѝˆè;bsB0nŠ1ÔbÉwCNÑŒ\âÑG7¾ñŒ„ñbåhG1^‘aTcõ¨B)’1 ü# çHGAÆÑ$äPÆID2Ž4d/ÉÄÑొÔä& Ê=V“žŒ"OIÊL&ò“­ å(ÿùJW–’–¬¬%,g)K\®R•¹äå.o)L_Š2–ÅÔå1›’…eêA’(qæ3)9ÌIZÒ˜Œ¬c0‡²Ì,4SšÄ¼f2§Moâš1çBЙmv³šÈ'<­)Ïy›ö ;Õ™}åìã;ãYÏpRsDùôç8MùMŠ3¡¶l¨Føiƒºs ô´èEšÑ‚*ôŸ$¢hG=R‡>”£%éH#Z"ž¥¿Äh@c*Sˆª´¢Úd¦D ’S"ôœ…)P5:S¡*§=­iJ‘šT…ìt GMçSÂÒ—Ò”©? ªI©šÕ^nõ:SåjW V±’T«.5kY¿óÿÕlµ­nëFá:Ô·¦Õ«Fµ)]}Õ~âU®XõkU¥z×¥Zµ¯gk]ïÉÐÀ"$§kUìbËØÆî•²†MldQòX²b6®‡eëg!;WÉ’V³ƒmigGZÎ*µ­E«^¯š×غöµˆ¥mm {YÛ–·¢ýëj3›ZÕâ¶·P%Q’«Üå2·¹Î}.t£+ÝéR·ºÖ½.v³«Ýír·»ÞÕ®=¾óÝñ’·¼æ=/zÓ«ÞõF7¼×a/|ã+ßùÒ·¾ñuïhì«ßýò·¿þe/~ó߸À.p€ sà3¸Áo‚ñòà S¸ÂŽpV,¬á s¸¿nJ‡C,âPŸ÷ÃC!1ŠS¬bêš'+~1ŒWÜb”ĸÆ6æðŒ7rãó¸Á9ÖHƒ,dÿþx!C>2’å[d…$¹ÉN6ï’òä)S¼â­2–³ Ý(#$ !ù,奇777swšyr“n‡­yƒ¤yˆ«|–·z–¹·p:ºt:”\[·TT¾~C¤lm®jj¥vv³ed¸da¿r|É|?ÏVUÑUTß[SÜ[YÆcHÊdRÈ}TÔbNØgKÙoLÝfRÛd]ßk_ÙrLÑZÙuTÀnnÉbbÄluÍrgÂpyÏrxßgfÙehÝzmÛ{{á\TâZYâa^âcbällàujässâ}|€z™’n‡›t‹°w†¼‚KÊ…GЂAÉc׃pé›XðŸ[ä€çŸdî \ñ [ï§jí­uŽ€›™€€‚˜“““„•³‘Ф›´¤Ž¥˜˜º€ºŸŽ¹“¡¤¤¤©££¯¯¯¹ ¡¾¾¾‰¢Àš¯Ç£¶Ë­¹Ê³½ÌÊÜ„„ÜŠŠÝ“ŠÕ–šÜš™Ó¤Ü ŸÂªªÏ¬¬Ã­¸Í«³È·¨Â¼»Ê½½Ð©©Óº¥Ñ¶µÝ°±Û»»ä€àˆƒãŠŠã““ã춇䣣䬬崳ßͼêÁŸÁÁÁÏÏÏÆÏÙÈÐÙÜÂÄÜÊËÝÒÇÖÔÔÞÖ×ÙØÖÜÛÛäÄÄäÌÌåÏÐãÕÖæÛÖäÝÞãããÿþþÿ‹ðqD°`A@œä±“‡I"ƒ9:dР&*ähœpˆ›G‡“§ÑÄ'¦ ‰râ5<ãÂFG‰\è@€àÀ‰ CÖ< SzɳE 9FöôJô‘ vÑ‘£‘9ŒM@Væ˜2Ži´!‡Îıd«¢ˆgÆŒzÞR+óж[å$»—ïÌ/‹ÒÖnܲàZDG†œ/BËV ’3ì¸034À¡ ˜Yâ@ 1lˆ&-³•ªV¤dàpá !˜A.H@C;x™Bã©"Dh…(£>ðÔ©ña°,}ÎxoyPü‘‚ BäØAð¡C…â”hòM ?Œ表 "+TÀÀT\¡A$èˆüÑÅ,È€&°ñ´ð 2| pC6HF0È"uÈ „䀃YRCŠ5È`×]2!ù,’l';‡"""***555;;;IIIWWWiiivvvMx¨V~«kuš}nŽxz‰yw—f}¤s~ Y‚®\„°y‚‘j†«fвn¶x‡©sްz—¹“WWœ~¤]\«|\ºM½z\¯cbªk|§yf¨wz¹fi·iu¸zl»r|êx9ð{.Ü[[Ç^eÖ]aÎf_Î~AÛkMÜgU×vLÖxSÈciÅktÆvgËsxØcfÕmpÝvhÙxyæ^MãWVèfIädYësGèwVãfeåopåsiäyx†n‹‡s‰…{˜–m…˜uŒš}”¤l€©w‰¥}‘¶y†Æ{„Ô}‚‘€w¹€Z¯Œ®‘w²Žm´‘qÖ€:ô…æ…+é†5óˆ'òˆ6ò’;ʆG̉SÌWÒˆGÛ’NØ–\Í’eÜyÔ‰fÕ‚tבk×–xΤ}Þ¥mاwì‰Gë‡Wé˜KçšVðŠDñ•Gð›Vèhä}ë—fê•wí¡Zð [è£eì©vî±{ó¦eó©tù³w‡‡‡‰„™–…‡š†™œ’Œ•••ˆ‰¦‰—©‚š¹–Š¢˜–ªš›²‡ ¼¦¹§…˜¤›šº‹ºˆ”»•…³ªŽ ¥˜ª®Ÿ°¶š¨½£Ž¸©œ§§§¨¨·§²¾¸§¦°¬½´°®¶¶¶‰£Â˜­Å›±Ê¤®Â¨¹Ìµ»Ë±¿Ñ­Á×½ÀÅ»ÈÖÇ„ˆÉŒ“Êœ‚Ç–—؆‡×‘Ú–‹Õ–—Ä™£ÚŸ¢Ç¤ˆÂ­œØ¬„Ó©‘Õ²×µ•Í©©É¬µÎ»©É´µÖ§¨Ùº£Ú¸¹äƒƒäç™ˆå™™ê¤†æ ˜í·ˆê¹”å¥¥è¹¥å¶¶ò«§ó´´Ä¼ÆÛ¿Áã¿ÅÚÁªÙƵëÁùę鯧é˵èл÷̧ôĹúÒ¬õÕ¹ÇÆÆÃÌØÊÑÚÛÄÅÕÎÓÜÓËÛÛÛÆÔãÜÞáÝàãåÅÅåÎÐçØÉåÚÚóÆÅøÝÄòØØåßàçáÛýàÇõæØäääãæêçêíëëëîîðöëçÿôêóóóþùôþþþÿûí£Gï^¿ƒ–KØï½rå Bœ8qß½ˆDXN#B‚ VX¡É~üž\Éò¤Ê–0Y¾ŒI“áÌš5o〈s'Ìž /R”yr Á‡åî)%(t"Á} =†¤‡ÐaǃRWÊ ôGÏ6Ÿ9Á†K(Y…g¦Uû“bÄ•f½gñ¨È‰9ö{Z7/IzûŒB]éîÏŸ@zþ|]kÒìJouã×ÒñZËg1“Õ¼™gÒ»piÚ-XR R“ñ©Vmrßj|ƒ w›×o^·ÉŒƒî”wû¶¼Ê¹C·9œxq´mN^4ðA¥V!æ“7oÛ¶y³Îν{`ØÞ»çÿëæ-0=w³Ã«_ß};ûìèÝŽßùñƒœÁæ÷¹Ÿ¿çèT¹´ÒhXU9|t³MqüÁŽ]ߌ&á„õÇëÐóÍ…Vèa…~x”2{dC6{(3ZlýíÔâX÷½#KH-×iUÕèD)Ç6ñðBÇË@h—3Ì0㌈ve£Œ2ØÐƒÍ(#GŠLfyTˆL’¥”XÚÅâ}z‘)#OdâSžôÐQ¹u—[û‡7ù°óGI3ÄJ 3Y’¸Ç¡*.sh}<¨e–\Š˜ ¢Ë\¨ÍŠe𙿙li “\±¡öP]:B$ÑŽåø¡Gyô(çŸÎÿšN:.ùá”d“Í…&®“Í/ñ<ªe¤"NyèÖH8æ¦ÌzêlZ"=‡EM¹%5ñă ]¨¸åŸÄ¤C­„~H¢‰ôLê­†Â+ì:Ø`Ó!¦j6£½÷2­r<¢Š*6ÞÄC t KPˆ€ŠK¹"žKºß¶Ë$±‹™i¾Çi§iYUWE¥úÈ5ÛSéh!Æ.­ÄØê!®ºòqÅRL3`kŒoq÷)Ž4Fô”¿þVóyÕP£Ç¥[²ãÌ1ED]„E¨Óå±a|sÍ[ÓÛOÏD=Ësš_¯ ge8VK4DFo“Î0ÂÔ±.=ÀJÌÔTËʤ“P¢ÿÜ5…6Ó¼¬ØÃ-àÎ'Ñ%—Ï!EDôRåT# ;å42ÈšØE 1ǤãŒBt®²£ÞµéžñØ„Ž“C¡7Ð[k•Íä¬h@(R +ôì@ÌQ +|L¸4£~³òª®së¹~8M°]RÔ:]?ÏÌQÍ*XÈh A)Â;:µñÈW̼ûŸ]/ôŒIoýU‘Z™`¨Öè4ĈÆ7ú † á§…$Á9ÏNt"]»ÞWºø=%g¬[ëg‹É¤zû¨]^òAŒo°Â504Žh`` Q ÞŠ ·äYÐot^Ÿ§Á ¶d{?¹]ÿöR;œõãê@Å’À€h@Ox€¢5©QÍjG—¼ÜuÙýM‡>ä¡ǘ–µ™J{ 9>RQ ,À‰“@:q ŽSh@µFeÅ2[‘ˆiQ(…5O‘²~¨¼ Ù0ÿÄÊH(ˆÜ‘Qú¡j`Á°€#ñbà˜p@µr©ë`‡öð%PúQk9Ä !G*È}ší‚2±‹ÐØT*¹\CAr ƒ Ìg¾EÄÂßÐ@h0Ñ"X4:V‚%Ï›y.iüî©Oü•ѤŸÒŸLŒ²ç0å›Ú8Ú<²q $‚àP 'ÎáˆEì ™XZvmýÖ jQ%ÆŽu‹ÜSŸêÔÌ@µ%ƒ©sZSª]ãò¡Ç#(€ ‚äÎàÐ@CÅ¥E jkõ<  ŽÁŒ:J0³Ú«_ûÚ™|bå9FœÞJ„"­ŽVéc«Gÿ„cáBGe/KºêIQÅ"Hã)L©_iII+–Arµæi“j‹ð¨0³áªWYÁ GÔ6Š(ÄYÓºV[±ÃnÄ«°Î;«ÂöÂìö^ m¶€"Ƈ½­å¢kÜú5©žêý⦖þå(¾]yÿ,º"ÔY»wüã—ñ¹ö®CQtøƒ56jmlûèJ¯¶ó*ú¡›ž¤F€Û¤w©4¦Â’½0Šàuþ&0v_y“gUmòplEG!ìõjï%w2zY†eކ‚÷&Ü÷Ð LGñ l ôÀ ¦P ´P 7õ MP…P05`ç`WjB` ÆÐ7'‚ Ù@:\²´r §0aæa~"t‡}¹vz_¸qÑq{PÁtʰ Ø0c€Š`4Öl4d v èp å—Ad-0QFvdd8¯F(›Ç[vY€ FCÈ‚ÿ㤧‚8ñm]Ht¨¥Náû€ q€ ñ b6fJÐ9@5vh¹ƒi¶Î&pP"‚xè•Td¥§Ð7Ph®F}¥‰x'Œ×W†üÒ!4}@Ú0›35“ Y1ÔdÀ¥2­@xSó0Ð x(uIbhLVGÀ%!‘E Ga>2ø‹\Xk’8#^†ôhŒÑa¦’ c ‘àHðÓø14!ÌP8PjEÐ?0ŸÀD (²6OÈF`ò¥|UV‰G7ÿ€Ä˜#˜x€¦ÒÙ0ž¸Xð0‰?XQÂùjÿ5d2€Æ d?pwÔˆóäf¸¤`d@%‡b0$8!&˜‚`8’!YeøM’ Ø@ ÿhËö Ð-ÐK€ rBøˆÀuÎsΆ¼Pšä‘ ØY8ES‰bÐ á€"}àˆó”.Œ'ù•/X-  Ù RÄ 8`F“¸h§P4Ð50a’€øx1 c z£ÑvÄ0 4`pæBTM©,8˜QY’")÷¥8Ë×çÂæ å“€™€–<7¨¬¸5 Q:˜51:°h : ”Â^ÎF¥ÿdàæÄrÐ'¦ù—µ •¹i›· }'Äðû@ À¹Š0Ià ¡& çC¥ Âs EQ¡CÕP€Rº…2…G(ô`>ÈgràpÃèž$YŒ6‘M«$wÐô° ‰0I Kž`KOŽðJŽ7a9à™=€±ðJ¸PßÐ ± 3ðLÈ ½TK+—S |cl ¤XšLÑd¢\Ú¥^ú¥Ø$ŸH† ÁA+í´ÀPÄ Åyœˆœ´õZW-ðuž10¼P n0na X+àyYJ à ‡ÿÀç ƒÖrWïH‰ úž":¢¨Û'¦vÑÐ0 Ñ OP.´²I "P§`™4f<õ€BF5E0\°¸Ê(L)"é°r*'}á]42ˆ|{{0TÉ’H•$Ú¬)–zYñC82 ¬€ £~Y{;`ªß¹7@ ®°þ–=@«\ÐZЮíÚQ²oR!à€ Šð¨ô€§@ §1%õ ÈבȬÏÊh˜š©;Á?{W¬0ªÀ¯ ­êÄ Aù4‚‚бp~BPg±p >_À®ïª0Vø±R£A”¹H J!ï¤!(ÿÒg쉰 «©–ȳÑÊ‚`1 À q  àÒ ÛÆˆ55ÉP²®€ »W]pµ]`µZ@¥ý@_ã²Gq[ÐYÌp`â%2%8›:현‰&‚ Xc(BK´ô`´HK€¢´Ë7ÀšmE€fv658ÐS[µZðbYË®| ý^{€v‹p‚‚y;!“’"n°”Ëz© ;‰q˰¸ ±{§P±+K+é^¶P{QP¸8 $k²îÚ_ЮÙð ¹_ ÄP Îð åp5 ¾ 5à /³(<÷¹–J‰Ô[}r;DÓµ£  ª 0 Hÿ¢$ÌðPRãSépE `O`ÿFCµê°ä໿^K ;Pw@…½ú4UíU!ð óBê@—W‚m+ºoË1·)L‘½;1NŠp Ñ(ÌÐ z7Ò :Lð•‡7?ç Ñ“àY€µtÀ·ð»úû5âP wðÄ@ ýz ª^ËhÍóÀº9•F|Ä !‚Ñk1*”½ààùuÄ /T § ‹ ŽRHðð pU° uðr4\Ãå +Åá©^plˆY˜¢nKZ‚5­:KŸz›I;L¡ :ª±0<™Ð´ÿ`++¼ôð|“­RË0Ãù{ÉÀ; ßÄŒØÀJ%ÈÉ6Ä}ܳÐ*•¥¼Ç«GÄ1 ³m´ Ié@5…LE vY+œi€’lv½»Æ—¼¿Ãð'åghµmõÃZbÇE\Ê¥‹Ä ¡Ä;Êy÷Ä,ņúÎаš 0 µâÅ`,ÆPÖ°|Pø ¹À«Ì|}D‹ßÇɬÊp‹ÇwŒwœÊíiØký: 5(‚š„Kpˆ4 6(ñp ÿøG0o0Wð ÁÐ Kå@ ½°$ pyÀšQà  ·dvšžì5Ó;º÷ŸüL¦ûÿ‘Ï‘;5 J_›WhÎ@„?ð’°r+Ã9Pc0#\À†c`&P]ÛßÀ À4 #Mˆ—”7ÍG¨ôÐÓÅÛ.Ê\0½ÌÌlÖ¸QädNŽ ¯šÇÁS#('(xPo`ÈP|T@ºð)@…pp] œ ±°:L…‰I*ÓJëŽÒk½Îì¬ Kº¢2!äHG!³Äê‘ SER~ƒrÔÿKtÀH°ð\PÐ$P•0 ‘¹÷ >¸:`dE°$hÆoNÐúê—l+Íͼ٤œÖõ­žÝJ£-ž,De cÒ s7ƒ²$ªÿM(_ÀÛoÀ‡€œrÀ@‰Ý¼D(ÂP_7! %‡¼5€ `hÌ Ÿ>ÛÜÎÓyÇÖôàÖŠjNùJepŒŠï¥ uvÐ~ Ø‚ý— gU° !*'œa0º@ ¡¹ÎP¸¢s(0ú‘ ûßþÙšÍÙ¨A-ý€Ó¯ùGu:8P{d¾K¢'Ü‚µ[àÔ6P+WâR’ÐPý{ º0fдÕYšy(ÌÊMÖô,Á0Nã3žÇÔcã÷ÐÃ.ËdwÓÍH°[)ƒ{°pyMr œà`Ç@ X½Ð i°$c2„¤Ìÿ`ÄZOPÒÐâüýâ2nÊ;æ`^nHà–|?Zc&ð_< »I†sTÖå R0Üàù/³0c ô@ 5ÐŒ 5ÓW©˜ ÝdŸÑý)F4°1‹7OðU(ð`Ì“Òt›aý4|eD(â’1 pÕ ±Ö´§`Í7›.ýëà•NéAQìôpì*MôÛ¤žìÙ&§Ö,p°ZÀ05wpuM :L´f/óàp =àS vBP L" XS“XñD_˜t_÷î°·…#'_×wð.@™Ð 8Њ°Ý‘=<ï I“Ñ` -ÐûP:Å듎G…W‚p|F3 hé§ìÁ>æžjÙuÝY_+BÿPcH"h¹˜ÂÒ'dE€¼“ ¬pc@Q„ò9ãßÕ"¢ q°.†áüÝý¥/æî>æ` å$xÞ7„ &Ä!d-Z=zìØ!q…!?” Ú‹–GŠß0ÒzÒDÄ @(D«Â`?v$ÄmáÍ_qÚ$”#çæO ßèÝ#XÔèQ¤I•.eÚÔéS¨Qö£ZÕêÕrWµn½ºÞW°_…~eWD1´…±¸¢DŠÐ:KwŒ3zÄÎ~zp…  ;挽téR$ìc°ñä챦MÙ¾§»¶Ørp+TÍ@Ù ä 2ß#£“LXpp‹Äžû!ˆ:öC"‹ )¥bŽa‡cˆ€Ãà ÆÃ¡ í4‡¾oÖYF™eî &vœ)‘¾ÎöÁ§¿¬¾êç+Òô°@©b²É'¡l²ª(a[ð±™)bKbNbd‡L@b˜"z †¹ú‚c¬ù¡‡"˜©¨‡ºvüª™ìÈ&›?à¸aRÀ9EGÎQÏ·ÿtî ­ù€Dzú)2R#©2ˆ4«\rJ9í”SMY»2¬ýêÄ!æ-b)sÇÿøƒ)˜‘¨™ƒªc†bœùʘ’¡ÍbÀ/zH‘ñP°=†,´}LȯÊAòÈH÷;­ûîÁ4@O ×ÉqÿÁQÁ*õÌSSÕ«vÀÖge5«L8Ù©f½‹ñp%æb¸ÈWegôÌ74KdF3iÃ"­Ú¡,ý ´JM»8¶PýëX·Aö4ä­Ò+,^IÇ%`¤X <ÃÒlQˆ<Þ&S=ƒ­ž­æÑ.g¼5¨ÔQ ­ZôÁ%›uÕW‡}@¯~NÇß^ s:ѳ™#… 4ã{ÈFܯÆHä,±èÁØa+!ìJW쨎rÀ¸,ÍP(ëÕÿA|8ȧW?CÑäE‹ôY‹5¡@Ò6«˜æ…ƒŸëâ'.y…W–;ácfw‡— ‚œ‘=(Ã_̈^óµ/-ñKvprNò.BŒdaï7vú†³<“˜ÆìÈ.éàÕò|„Bn.?1Mi¾âÆ*1Ð ÑfÑ¡‹;$10–ŸñªCÜC˜Ä¼1ˆqú[®øU&d٪ūÐY²¨0°ð /ßÐdÓô28ïìh‰³†·ŠR•iõãt¦«˜üÒ˜­keª†³œÒ ë>ü…|_©1ü@î< ¾Šp ‰Ä‰„ ùELbXB4ˆ‚ÿ7ɱ 2¼ aÌ®ŸÍ¥tE‰Ôéìc¤¯}Í}ªÜ–Wâ8;Ê‘–RŠÝ;W;°À#Z¿i € :´gxyˆ0â·,oU Â"%M@ƒh“Ù³ËL–pœ‚§8ù„SAËÝÎ0H ú¦R)v’¦¤í[祺öNŽÍs\ñýÙ¶ƒ„eŒÃŽ]Žq#ed£wÉF £—ñL2“[¾@tô©Aàˆ‘Œ»|4ˆ!­QÔxÒl¥T•!],ÍõJŒm‹†ï“iõØ›°H - ¼æ\ê„—”¥ƒÝÓ_2'iùæŽÐÀ)À¡¬G|²1\¢XìcÿvzK?é¼–ÆÌZÓW^Vdlå,=m ׸ÒHre—©¾±ÓªÍ« B€}XQ G°â+T%X´M¡ö1Îx‡:†qJl9V¬iìO¥”D%­ŒŽ~÷éìLóXO5-b¼ÚWL«ÛÝ6æaÌÀHk=3( d °ô‡jûíäE›Ø•1¸Á8YK…–j£Å0åNw¢2¬˜’i¬S·¶uSÐÅRÄ œ×½jSFõ‘%=à Œž…XqEö°(…=Uæ£XB¤­ÏÐòŽw ¥”­,™×®…R”ò÷­øÑ¬gËEÓ×}6º–šÈ£Ôö*ê+Î0^ –RXÿø î0Ucäk}o‹¨**ì™ÑóEYƒk°åx…õUß8Oç\Ë’À¤â±´ÔQd#Z÷AXÌy ™$ÏèTí0è4z t\wÌh„RqŽpd¸;Ìr¶¼ß®|õúݹ2ªÔ¬o Vss¬ã·HzéU,0òÀµ8ÃDˆ ïª‚V²£ÐaU$Ëèg(Vñ™·òÕ¯¦O¹bÍÅÎ `nÍž0¨Ù,júœú fi0²ˆL¯EÑù»à6Naà o°ÂéáÕ{‰¬¸¾ýñŠº¿ºÎK_,­ê{£²3MfWÞXTð|뎡íiƒÚÿz1ãY¼h]mw†OX‚ž@Wú,M£V ´ÏPœ I›?j,î@à]²7R¬Ì-ô5WR™ïe_šßkV׿ÕCjg˜ZˆÜ%‚ªY½»BÌ3öë…8¥ueiÇéq,¤ðóFž“}òU7Ê ôßIÇ{4ÖR«VÌiš‡ Ç$“a×@ërȼ٠ 3ñžœ#··g]²÷½9p°t,o¢r°œ ¾£Ú@s_£ð=†ã4èXYõªt‹48&v-i#éH™,§`ןbl϶íêá#Û!~¹ÎM.H–šŠ“Œ²xàæÛ²ì¼¨˜›ÐE afgÞoéO·†…I_ÿå·Y"½òµ®½zõÎÁ×óz&¯$ôÌ·þûØzŸÔ…ë['eOƒô¨³FSWcr] :<ί5†'½·zï{]²ë´¢ÌÁÕKŸÙIîóÙ {…ë$Ùã}öMg¡+]JÜ£“=Ák<Ôˆ=ö ³ÿk·ðs ©h@ƒ Œ@  „ˆ… †ŽH Š^€ˆ—€À´@ ü‰¡h@LA\ADÁ•ƒÝs!ɳßC0áËžœk;q”å»Áû³Øƒ¾#q!Ñ(¹Oy%Ñy±Ñ8¶¬³º¡P:ï[ÂjY@¿½Ë¬PC?Î!Éá*È ½´ËBõøöû ux˜w(¿Ú(ˆÿ* ½ãŠŠ!/ô²¢½P9¹«X½2<$Š<¬4³¹®ÃÂgÓB²ÀZØ ¡®‘ ¬{»/D nx‡Ã ºÁüC ¾@LY©âC*!ˆ0ëP¼´¿³Û Ãà²L¼Û°¥ó3ÄB”ÅÉs9W£DqÀ#´½KŠO|BK´>ÚC%V Ü¿Û0¶33'KŒA–Š)–;Zl¹i¬Å;¸}`‡ahÓIÁ¾óª9Êôd1ÕxÙ;«”£üòÆJ)ÇvCq|ÁŠÅi¤A-ÔGÃÆáÆMŒÑ8ºö©Go””K9G+½!›ÛC.ÿxGl™H„ÄDÿ–2È&tG|¤E~ô½Žœ.»ÂE]DG^¶Më?Ò1%tú¾aÜV¬†”1d|¼%\F`4gä4ŒÈ”Å»Ÿô»8&/DŒî˜Ä+¬ÃLDŠúÒ» $={C«5ˆQŒRtºÙ H.ãD—Wì71äÈj´F…sª ZžìAC­ +7lÂP£Î¨79´7­TG/ƒÈb“˜Œ´’¤¤¯ÜÄ@ŒF²ôɱüÈûb¸òH;j!Š3 BcÌIl1<ׯo4?Ú´îcG8|B¬ÃÊØPF’Ü:°œE±¬ÆdÅ"þ‰³ €üÆP<:zœ½V::ýz …¤±P¤MÿÓ{¡í «ÿƒ!ÝÈn4MÁ J—cNh[ÍÖtšOBËi‘ÍIÎo´M¨|GÝÔÞl'`´Kìl:™ÜâD¼#LEKÎçr6jTͤÃLÌÅl>£+ÇŽ3Ç©L¯ ѱÌÄcÉÌl7t¡ÎÄË‘ƒBÑ„þ,Íö¼Ç¯ËÇø„?³„Í ±;”* L,B¤:¹,+ŽsËÒ«Ëô9 ®ÛSTUDPn9ů\αÌ}tÜŽb(J½«³¹ìѦ„KVL¼ó‘@tIµrÅ1C¶ÏØC|CÐÕ‹Q÷”Fø¬R-t¾qaÆn$Í…Ê’êRÔ°¾‡ÄKÌ´GžŒÐÔ”PÿCÄÒp‰ÇâDÎÔ ò3©8…AðÓšRÈÀœR­Q+E?6õ7U+8Íö¡S9G<Í1=5ÓãìICtNQ“Ti TNÑRHkP0M6ò<Ó$?Z*ShäSJm³R5°S¥KM Å?Š ³µB¯D=\RÓiÉôŒÒ=…PSS_Tý̼Ó=?„Ã'Õ½»T…½¥;RãTQoÙ,RÑTuÄ5 Ö(üT\õÌ£ºm]«­X%ªLÑ̽3íÕ4MWß[ÕpÏ.e<—Ê’¬Âq¬=)|×=×°$Ì?]WlýÃûš×ôl’x•È™Ô/{MB|=XDS~ýU-OµÐÿõTomÇÁsKuªX)åÕ}Ô ½ÒýÃaÝKñ/MÔg”ÓfEÇ«YiõXÔ|Xu¥aôaá¾ánaf`†aæáNàv_¶aÎß#öáâ!v^&~aŽMâ–a$–â¦â*žá&vb,î_ÿíâÆ`!†â)¶b-ÞbÿnEã46â%~b7ã0Vc‰Õá8&ã1¦ã3¶ã<~c8n]3Þã>Þ ¾â?ÎbC.ãBöâ–c¬eäFfc%nãD®c=>ä;þß¼ÍdMÞdNîdOÖdB†äHFdIždcSöcQ&åQ¾d>^åP†åSäXnåZ¶e@Ne"~åR–eK¾eVfWäGÆã\öå(Öe.Væefg~æ_>fdVä"žæìåå^Æåh–fmNfk^ccÞfoîæqfhçfÎfr¦dl^çYväÑ­fuæo~çJ.gs¶çpÆçs¦fyÎgtögb¾æv¦çy6hwÞeTæf€h}.h„nhÿ¦e…†ç/ff‚ÆhU®ç9èŒæèt>h†Žh‰þh‘é~fgˆFi–niA¾g~vé‰fdνè”~è•v芦i›éšá„~i˜ViÞhê}&jé’ÆibþéENj§.êbÎ飮jg«žé¡žê“¾j¨þg’¾i¯j¦nj£Fë–êµfk¤Îê´æê­–k¸Æêºë…¾j“þjº¦j»^j­žëÀök¼¶h Vë·k™îkÀŽkÅÖëÁVæÂæéÃFì½¶ìŒÍÞlÎîlÏþlÐmÑmÒ.mÓ>mÔNmÕ^mÖnm×~íÕž A`Ù¦mÛ›ÚÆíÛ.—ÿÜæmOéípîàÞíqîß&îáFn1î)aîæVnNqî&‘îå†îè>nݶîéÖîíÎnßæîÛøÖïñ.o±!ïó6ïrAïõv÷~oøŽoùžoú®oû¾oüÎoýÞoØ…8QP%8€Chÿpª8„@³Õ Qà'pïNXð:-ÀÚÞ‡0ˆ”oøï÷x!ÈŠ}pêF·0€Ú®ð÷zÈðGÒøpÅOÒ€ñÈCqÿ„ÿΊwqªðñÙ à„C€~àðo€?Ù`r¸N?Ù€ÚA(‡(…ÿ(Ý8„0ª8óohñ}€C8„+o€°ïÿ†(pÚ¸‡.¯m/‡à„2?ó4_ó67€oàð8Ÿó:§ H€o¨ôDGó>ÿóÛ„ø†.sAø8„L—ío¸ A@€: Ñ €r8Wr.'€Ù.  xõà–hp!gó~8ñ¦)7v˜òØ0s<§ ?/ñ€H©pAL]?’a#ö8'ö0ö˜m!fwvØ€_pp·vk§ð¸ €ð}óhsøvaS€0tªðo!€4§vªöùõÿ~@÷O[§ (‰/ 0€C€õ~@@¿x߇OGvV_<4× ˆ/PxZ¯ø~¸xÝÈx1'…Ž÷õ7›?‡yø†V—””OE €ª(sŸï˜vNÈ÷ˆ÷x…@)ÿyª`÷‡ŸíŒ?ŠŸp¸ð­Èø~hrÏùŸp‘”/à%_œY3)W±UÃîô3¡ÕXÕÞ“*È#Ú¯aÕ²[Î.ϼj.lÿø0âÄŠ3nìø1äÈ’'S®lù2æÌš7sîìù3èТG“.mú4êÔªW³níú5ìÅ9çBû6îÜ8z@Z݇gÉÛ7ð~ PÍx(§¢k :p/‚CxUn€9RåÊAÏTû§VE€Yü=ü¬¼·#<$è€EDdß=øðß7¼°ßå·_¢p'´‘ ùÙ'Š„vˆ!2Äü\ ö3@ €q‰NñÇÛS¿}“¢B,B¤S‰‰²ß7^‘ˆI&yœB¿Ñƒd?¿´R?œœø"€Yf€W¼Iÿh[”À@@"À=öei€„5)ùæ{L†éâ>µ€mûdWÎoVÐ=%áØ€å€ÊXÎÐÏûÈaopZJœœRfhâ„þ¹Ÿö‘€’ø_ŠrJU9%†I•‚ÿq"áQ—ÚzÛ7‚tÇ PUêÖ]DÍ´SOFõƒ£DKùÖBS!¥«B9ÑT´·Z{mC¼}ˆ-·Ý"Ɖîy;.¹åš{.ºéª».»íºû.¼ñÊ;/½õÚ{/¾ùê»/¿ýúû/À <0Á|0 +¼0à ;ü0ÄK<1Å[|ñbãi¼1Ç{ü1È!‹<2É%›|2Ê)«ÿ¼2Ë-»¼²1Ë<3Í5Ç\JCs1¦³b<÷ì˜Ïˆ-tcCftaFÛ¼ôÒ83„tÒE=õÎTglõÏ1½õÌN/5a`«%öØX'F¶Xh3¥öÚRkÍ5×^+ÄvPtÛd÷ÝfíöÕ|gíÜqç¬÷Ñ„^µßgõÛ7=xâ{#>ùß}[~¹â;^³ÜU-öç S^yæ£KÞÐæ?zÙ‘Ÿ^:æ¯Ã>ûB©ÛÜ9Þ,åþÑî¼³žöïYõÞ”ëýØÎ9䦮üò¤ÓÞ¼óÐ×~|×ÉÇ.½ìÙ6¼õÏc¿=HÔW¿zñŒ3þùæGÿ½ú ‰/3îÁ·]~ûÚ£ÿ=û¢þ¾ñÓ?÷È—>ʯn¼‰Òøç¿¶Ž \ßý X¿ïñ¯ÝóÞó§? nƒÌ`ˆ¿’°ƒö+á9˜Âé½O„*Þÿè@Ž…4$Þ …ÞP†94àu’Îí€y ¢khB úp}Zx"£(E)þaˆFÔݱøC *±‰Þ›"ÁXEß!‘‹]äa_˜Ä3®‘!a|#LjÃ-‘ŽuTc{èEíÁŽr¼ oˆÇù±1LDcûøÆ? °fä#)HI2 Qdùµ,’ÑŽZtd$9ÉïaRŒV,#9ÙIH¦Ò“§Ä_)ÿ§¨É"¢òެ´%% yËO:1–Qœ¥çjÉË]¾’˜«ôà-©_þ²˜Æ¤(+iÃQ*3š¡ì3ãèLd"ršÒLf5½©Ë/fS À$"-AÙJWÎQÃä&5ËiÎmærî|§5¯)N}&SžçT%4ùO\Ö“ ù4¨?éyP|.”¡5èCÚÏrþS˜ (83ªÑnn4ž½hD Oj†T¤ é—ùQ“ž´Ï hGIÓo¦4/mäHiZÓ’º´ ':ÑÌ{¢t§3§O%ZÓ0µ©N}*T£*Õ©RµªV½*V³ªÕ­rµ«^ý*XÃ*Ö±’µ¬f=+ZÓªdÖµ²µ­n}+\ã*×¹Òµ®v½+^óª×½òµ¯~ý+`+ØÁ¶°†=,b«ØÅ2¶±Ž},d#+ÙÉR¶²–½,f3«ÙÍr¶³žý,hC+ÚÑ’¶´¦=-jS«ÚÕ²¶µ®}-l!ù,¦l;‡000HHHWWWiiivvvMx¨kuš}nŽxz‰xw—f|¤s~ Y‚®z‚‘i†­fвn¶x‡¨sްz—¹¶u9TJ›U\™iiŸo—z{¤]\«|\·{F½z\©k{§yf yy¸fi·iu´|k»s|ÏqÑtÃk3Çv5êx9ð{.Ü[[Ç^eÖ]aÎf_Î~AÛkMÜgU×wLÖxSÈciÅktÅwgËrxØcfÕmpÝvhÙxxæ^MãWVèfIädYësGèwVãfeåopåsiäyx†n‹…vŠ…{™–m…—uŒ™}“¤l€©w‰¥}‘¶y†Æ{„Ô}‚倘‚y¹€Z¯‡c¨‡z®‘w¹Žh´‘qÊ€>׃<ë€ô…ç…*è†4ï”>óˆ'ñ‡6ò‘;̆GɇRÍ‘XÓˆFÛ‘Mؘ[Í’eÄyÔ†gØ‚t×”i×–xΤ}Þ¥mاyìˆHë‡Wæ–JçšVð‹Cñ•Gð›Uèƒiå}ë—gê•wî Yð [å dí©uí±{ð¦hð«pú²t‡‡‡Š…˜”ƒ…š†™œ’Œ”””ˆ‰¦‰—©‚š¹–Š¢˜–ª›œ²‡ ½¦¹§…˜­›¥—–º‹ºˆ”¼š„ªŽ ¨š­®Ÿ°¶š¨½£Ž¸©œ¦¦¦¨¨·§²¾»§¦°¬½´°®¶¶¶‡¢À—­Å±Ç£­Â©¹Ì«¿Õµ¼Ê±¿Ð¬ÁÖºÂʸÇ×Ƀ‰ÉŒ“Êœ‚Ç•—؇‡×‘Ú–‹Ô•–Ä™£ÚŸ¢Ç¤ŠÂ­œÔ¬†Ô§‘Õ²Ô²’Ω©É¬µÎ»©Ê³µ×¦§Ö¼¥×¹»äƒƒåç™ˆå™™é¦„æ ˜í·ˆë¹–ù¸€å¥¥èº¤å¶¶Ä»ÅØ¿ÃÙÀ¨ÙÇ·ìÁ÷ÅšêÆ§éÌ´éÑ»ǫ̃ñÀ¾øÑ«õÖ·ÇÆÆÄÌ×ÊÑÚÝÂÄÕÎÓÞÒÈÛÛÛÅÒáÛÞáÝàãåÅÅäÏÐçØÊåÚÚôÃÂøÑÍòÔÕåßàåàÜýáÈ÷èÙåååïïðïðñóêçðïðòðíþþþÿÿå˧NÝÀ‚ ,7kÖ?ù>TQâÀ‡ ZŒ(±£GŠCŠù‘¤É“Qª r¥Ë-_ªŒ)%Í“3æ¸N•,Y­Z±ã(‘âEŒDv<:òÞ¡B€ÀÕœ9•jU›WOÞÌÚq+×¢2w^<èj]»|íΆŒ¨OŸD·á>”;Rœ]pâð}][sÞ=¬{Ezý:˜kaÃWŲ['ÑÃ}9Š ÙoçÉqâø Ä¬90F—üìŠçäᬧ«¦žºšuÖ ÛÁ#ÈŒxbÉåD(vgÁÞbí*4\´@Þ€+_ž›¹ØnŃ7(P7¦]=‡l-“ûKïß_NÿFªÎ\¹5wÒ˜IS(ÞNÝÎã‹-79ú¸åëÏ_þñäù|H4Ø¥]v¦” L *ˆRF %ôP7i\ñ"w”!Í{;YC 5Öì—7ÑDst…DƒÇ€"ê×_|Ç]—t…à‚à­”£U8Δ„r“Æ%­¨SÈÄåÔ5Ë4¹ 5úÈ”J3僸×b|/:ç •ÒÐ÷M&¸#`f6È VÉ7b‚[4Hr˜5MºãN“!:‡¢7ÞЗ<ÞcÏ–òuéç”Sn““`jž©Uƒ’NÊ&A¼Eø7cŒQF zŒQcq1éÎ@{BéÜ}9ª¢ˆÿ+sðtÓM~d®Ùã®iRjEšj 8etÚ©’š©¨> #r­²¨l¬ÌÍÚ"¤¾òz`¥&¦¦Áª£ 8ã9ÆuÚ‰ç2zòߟB;-µÊY+"¶ÚjÇ-K‘þnBÝȃ”AÆc*5ÎáðDñŽŒJ;/½½Ù»¾½v¼m¿8ý›Ð°ÜìÁdÇ8¹ Äç)‰&6‡q½7Ûh`¾žíËñÇ!ƒ«iNøpJF$Q(;í²Œ3îXCP¯«%¢S›µ|?ë›­Ç@w‘ÈéÃiLð€@²Ê,ùô°LNSŸš3ìj³¬9wÿÝó×aƒ-˜A?òöh8uTñÀx|€€T°ŠÜZBl7Þvc½wÆ}o²àùì÷GCóÖQ8o<È pÜ „­¤RA&OG=uÕM^½åÖšß<ú^¢—ÄóßþË?Ë(1A-70Aæ\3A7 ó2ë½¹ÿNà^ƒ?’ÐCåŽ% ,°TpN 0ápÃGͨbŽJÔö¸G/ï!€ß é„FB$r Q0VèfDÈ[>R­BHCJ sÿZ´Ãåx5" !ÿ‹"²ñ'räHbÀK$‘=ÐAˆ‘Dbô`I¤Ã„‘DaÜO £ÇHÆ2šñŒh4£›ŠÈÆ6ºñpŒ£çèF„ SÉÇ** Šr´¢àÓ1$˜§=Up ÇI˜«4¸Á‹Åê‡W ÞGÉÁ­QBÉÆ¶Àˆ D€“ˆÂ2ä¶ŒrhB:ˆ˜ª.8xăÖad#{¨Hª&ˆâDvcÀ6 ä8xÀƒ¹ÈEÖ Gž`Ta•ö £q(.Ñ+jîÐ#eK×è2’Ÿ[‰oÚ4᪠xÄ,Ê!;R°ƒ‘è.> )r öèF! ±ÿjZQñ ä2î§$ÿM²’¡Ãe.]B><ŠC^•xÀ/2‹ P¢å©* gÑ‹–¥z5$¨;ö¦›5‘äΚК` #y(€F!QŠZÔ³cW;8êÑ|´IÎÐærLš»`ŽƒÔBiw N¦ŽÏ v¤È8Ìé tªs”¸)$!OzÚ³OñpYQÿÙ¢°Î-¤™ãAWÊR!¶Õ­ÝÁä?¢¡‡”逄– ddèñ )ÜÀ¨e‚ò‰]Ô"€4Á ˆðƒÿ vAÂpüÉ·œüôi͉!dÁmnI©áÙ¬7•»p­Õ¨úÐ<Á=ØÁ1vøµ»ÈÁLЂôÀAhA޳2ΠĬ. î{ñæŒâ÷Zžsêr3«ÙÀpƒ Õˆ4È„,@ùÀÅTkœ®"M‚„Z0µ!¤W ÂP4ëÞey”I«ìŸïòËÜ¥–ØÄþð@ªA`+¨d‚â`/ÌÔAvlZäcd`T!x«V£ÊpOÎÐ^÷H ºž8¹¯¹ˆsë è’G Áœ`ƒ,€ [† ,ñŠð>á /h† ƒè"ÿd(Ã6¾Q0=BFEöpŸðb^VWM†ë­±¸´)mX‰ð‚Ô’´ÈAz€Ú(43µ-ït[WBä@r,ólVgTÉd2oùd—HŠ)úX±üàΙ”¾A a " ²?ðÁ†=ì!”h"Äô€œ)¹çEÕ!s°)T“Žç„îïªYÝY)'¬I&G  ާJ7Ç„QPOµE~Ð ´}@A´CÞõå  Y Ã1%Ébm–ÿA†g˜ƒ h†ãsIAfpC˜8¶ ð/ðMð ½1 µ0vQàÀ¶c˜¶cn0 ê@Cç[#•LÅôf€£`2Ø7†ÚG‰ %‰“Hbñ#nA nPñC ‡× @H>ÿ·­°6ð7 X™ h÷n3@m(w³8Cb…±“¶BôQMŽèY(ŒÚFŒÃc¡ôÐ$Ç@/f ê>0ŸŠ7†Wó×7` S051ä030<Ðn@ ÿÐ]à <Û³º »ï€7¹ »P¢­@wdeŽñ¥ÈŨ­Æ#ÇYh9±.D ɑö –0=¼ ²‘pZ¢J°£` XÐ˳zdYÛ‘d5·ÐÇO«# eSÛ’hÕ,» ”î05ù9¸07Ÿð»Ð'5 ùP‚>¨ §°§]Ñ£PbHÖ§±Ó¢”6æ´0Ú±¢û¥éê·f7{¸5¸GP¸0?å,5‹`…à’뤠•+ ä°0»°rv³qc_Ì×,«¤´ñ‘·R›Ÿë¼âQµ˜¹ XK›%h “ ?i ÊÀ'dk¶hÿ»‹à úä {* · iGÐ}b²Ù£C¾e½wëC¡Kº¦¥;>HÁ%ª ¤ô$ºm+«6 {Œ ”õ$öà C¸I]ౡ  'û^EåC ×[ÍÒ´\s¿è:£ù«¿Ñ›±¦…hL·"EV­Ö` “Q “Æ.HV{! ÁaÀð€#@ ˜ð¤ù° íÛÁ4´h1crõ^»1(ü¼ûÛ¼Ð[™¡ |äG5¢ûv²ã$!Ü$~°uÀÏZV › )P"€ÁÿÁÊ'à¶,i¼.êP(j€åz•]Œ& ÿëÅöhêƒ!Æð)†4D?MÂsOÄ}dzIÐê@+° ÊðÊ}RÉGÀ¸u!‚]g“0¢¿x’‹¿£›Â*,NIñÈ{TÈ]BC <5/ó$!¢ÉPRa°MuP¨`€ <¼ÊÎ’ 9l5`¹ÐhÚzžpŇl«‰l)} µQSbÜG$¢3·ï—VѰvÀ 5s u°QÐ ·  ä€ r#ˆêpi ËŽq` žZ59`耔/Ú¥»Ì޼Ñ!c˜âž(ô‹55:ðp¤¯!…*wj{i€7p=ÿpÊ`Ô°°/£©ÁlЦyژ̣ Í¥¹ÌËí¨Q»½D¢& ÒóVOxÀN <……2e m¬x ¢PXθ¢²ËðipÖ³—ÔXð©QpØpԧѺœ×J½ÔÆxÕ²'—¨EQP¶š ˆð°[Ÿ6è¼À°Ì‘1o  5pðÄ7ð’` 70-'œˆÜÑ{=Ú¤]™Qu¼3Q©t&°•€¼_2µØŽ>Å0»@PÇ¡§â3Ðf)¸àSX&G•:£Î¢ÍÑ+ÌÔÝæÈRm€Në³]ãÝàåà ?ðLOHlDÀ ò‘ r/ÊPÕÔìÌäw¾òëÁ,;lƒÐA6ð ´ O Èÿ¼„çãµ°és œðŽ.Ss­ènIæö°"sÆ^ÜT»¤äzkçyþ{žÚ14RÆ'D€ZB©Ø1´²,G[G ­Óh ³ Z JP"5³CDã7*…P’GçɽÎÝ"ê£N@mT‹™JW´ Ã6iÃvyAÀ‰ O · ‚95»O,À‹° TtÐöDSs hd w0OL‹F9™üÞïþþïrå˨i|ÉífÙl:àTAµ %0´ ¥Á&àI` ÖêƒK)|ìÍ›noßp~ YFÎ µ¹¢®Ìnnê"ž©Éÿ¬n%`ÀV^¶åpÌc}ê î&ÏSöä$ÎÐ Ñ`ífÒœp¢ÎçŒbÖ7VËKD ¢pkßûÉÜómº$k—±S¨Z z6Eyq¤UJìlÆsw,BwZ¾µ‰0«3z$g‚ìèÑ/̽4 ˜°ËÃ,-Z£FM ΃HNQ²`-šRÌçîHQ¨A†Ø©Zšs>gEE dˆ?»½hÿ¡ Í¸S—]Ì“wdkßE–.oBÃ$ëNÜ2yó‘Ï¡‹”Þ¼¢N­Ô ‡hmˆ%!hí ç¢¥ƒ@-ýC`¾eí—y´þ.&-^D¸]©3\¢k-¹vÃj§xè‘ç½òQLŽòÐAç¦S©ºé0ÌÐBåìrÈ܈±ˆ­¸¤z&†¨¦@¼AÊš#ª""ƨ–Áå‡ â¡&ªÆˆøšx|$bÚz8+­ë’ʇœ¬N³È™#’Êj™x$âíyœ¡ðŽŒpBæ2 iCe*% KH'ÞâÚ%Éeúˆ*Ö† Âo‰&7jì›±ª#â!ÇGjbälÇÿ#Ûª´ôÚ{/¾Ò– º(H°á† •X¢ÿœМVTi…‰²ú,ªßâ±ÆO¹Ô™Qýtä˜f:7mteÎæ¶e^¬±ÇŠ´!€’&šh¼™u"ˆTËŠˆ¦Íéˆ`Ï£±´Z1§.…*'ê¨!AæÖ¯‰øÍä’8n¸K“/3Å}»e¹WjK»)_2¡Ü²£üEL¥ÕÉwv©x-@SCVöÊb‡’ Z)‡ J®µ”q*S ]d“LFÙ\éçô¸[§;Ì3‰ß®3Ûe¯½âŠÉ‰Ô&kŠr(F"ê‘}–U(™å ËUA(j…­^tÓnfÖKYGεºï©DB¯K Ê^%¾µ!9ÊAÒ÷¿Š´/X…‹ÿåÎR $/樀þ5øD5SE·%d0LìÚ…É­ŠåÆ'A î®w¿‘ᮥ´ºÌ¢©()RQY°É[^V‘!fª€„*îç }8èl«ÛöÔFØq‰ŒÚaJÚ(QŽùhHQfô윦}DEVÅ%)ñŠ—Ã%8"™©DsxçÆ¶ /d\÷N‚K²ñu6| ì~8Ǻ¼ÃG2:šµ4÷õ±"49.wE e­í`Hp¨1‰ À‚昢IôñÈÓ¡Ä…4Ìdš²§œ AòUoL]'}J Ѹ(ŠŽˆÿ`„±á`¸“Hµ¢ÄT̉€”`;* „°òa ©j8ªd“‡Š1à×fºwZˆ™zéa]> ÍŠTsIŸ9gÚ·›‡Ì ‰uiÅ:VÌqŠ{¢9Ö&ºQÈz`2ø„ùaÆÓT)ɤ7¹Ïú Ä(9z­÷tR •5¢Ð&DÁ›DKÖÎÙŽQ‰Ÿ6áh¸ÊåÆI(Ÿ|IªÇtT™¡4Ž+­‹4©IkbÓÚ’C¬‘»ä]ÄðªÙA¨Qbrp#©8ŠC‘.5:ÎùÒH/)T¹P¯PmWQöLª†r”Q)¥‘ˆž©Ðb"G\ÂÊÿj §³(GĶw:w"G’%];•yW¥æ5´%ý JÑh¡R5°‘óœ±QRe´®ÒXiÕ‘,|*<)@ê­j/ n^?Õ’Ñ‚ªCÈ9)j‹šT‹ü3°BôbýãU°Rn¬e­K‰¸Æâ3\©M-ø®—Ñòò™u½«GL«½é(õž*e­E.ÈÛŠÌÔ‚ ]¬n›BHá7ŸIÙFLrºôγ³q§]Mú ¸vŽïu]$ƒ{áCÃæp‡=üas¸=Ø0.zp £¸ØðˆC¬abìbÄx19\¬a£˜Ã¾p}üc YÈC&r‘|d/‘ÿ,³7©¯E¨û]‰a·›@”.ly7%U6ÓlJ®^\I[áÒiTÌÆóGg˜O”Q˜“Ð!/t£Ûäë:„bŸ³Èù¬»ÚÛˆÎbþTʨ×1*·CÃÝlJe8àšô–­Ìïê6²={~ôý˜*œ¹³‹áOGΨ •(6áÔ%Œ¡Í!¬øãwↅÞëô _äFº´Ž¡|/êà˜TÚÒÅÛ5¯k*´5Ò.,î¢ÕÈçÎ"“Ësõ›ëyæc›­®d^.}{íë^WYŽ#UõRÝÖºX†%©'[‘úHfëÐÙjëKxëXãùÚÚ,½%Èí';mlc›­K[î3ÊÄmÿ¡ð÷8Cr+Y£ð¦§¼³}ml¯ôÝΤfEçV»ŠªÔç é²O«nëŒY¯îžöatýpˆÏŽxÁÙ ïD èŒ?Èi~!<åÉ=êñ3ÑÔ.³º”©j›3¼áÖ†¸½WªíBµçN e°2ÿÌã/ÙÀ ú–rîjSÑF×g½hžWÛ&F?zÊU^—Ã!NvÌ2¬š*_´µ¹K%{+Õ͘Ñ-·ÓÀé&é³9K“’!°Ÿc7ûÙç]Ó>T³DKï-ƒ÷=“nOœt‚þú‚…ŠnAËSCÿ{®iÈ÷2|×d‡f•©‘x¬.žAos|Ó1/ùsQÞî¬oëëéçX\Á&ÿÿüÇÃçÉ“”UNûÚÚx¼*\ÚÒžz锋Csí¨àÞ»ïÍÜêÝ«IäÖçè--ü9"ýq„)ªJíYÈ_ÝÐÓ.\ažþŸû»ï_–>­))á;|ôf§7ËÀŒ=K5³¤ ÷ª9¶‚.ìË»ª‹·ùƒ>ZÓ²ò ïƒ3ð“£ œ@Xû=¼‚´$©¸B-1S³öcÀ>þKÁ&ӲУó[Y›0¡ºD›°æb™-¢;¼”ËÀcê9L¸22AœÁ°k¯Q¹AËã=ýû>¬/ì>s´íC®l4÷RÂ0KŒ l2ìÂ9ŠÂ¾Û9xûAbµüƒÀÌAÿßÓ@ÏkB |BÖC±#³Ê[.5AÃu[³å*0ž3 64³D¹¢ƒ3:Â@”ªŒª¯?¼7“CBœCsªès \‰@ŒIk!jSD8ôBI¤ªCÔ=6ܧvÓ7}COìŸìJ¯Ë©ÜÊU˲lH­ K2A˳¤J²”ɸ|K³¤K¶tI¹ÌK®¬K¼t˶ä˾,JšœË¿LWñËÂTËÁLKÂLÌÆìļËÀ”ÌÃŒÌÊ4ÌËÌȵDJÎìLÆüLдÌÌô̽ÄLvMÖyÊÍ|ÌÑ$M»tÍ×TÇÅ,MØtÌдÍÛ4ÍÓ„KÚ¬MÈÔÍÿjTÍÙŒÍÜœLßlMÖLÎÔäMâ,NäìMå„Nç\NàäDæÄMéDÍݬNWÌNìüNð¤ÌçlNò,OãŒÎàÌÊá Ïñ4ÏßOêÔÌõ<ÏéŒÏã´Ïû¬Ïí„Ïô¼NúôNðHP-P=P%2þìÏ­½dOüDOP}ÏíÎ ÝOÅ|ÐÿtO •P ÍPmÏQëäNõÑUQL¼Ð]Ñ …QídÐü¤Ñ=QMQ-Q•ÑÕPmÑ QõÏ%Q5Ñ#ER&¥ÐuR%}ÑÅÑ)•Ò&Rý´Ñù\R,}R(åR-ÍÒ(ÕÑ S/5Ó1RÿÙÜÑ+EÓ4å:%S#MR:mS7­Ó/Ó2½S;-Ò9ÍÓ>õSùdS@-TCåÓCET1Ô*•Ó7EBMÔG…T"µRIµTEíÒJÅT* R°ôTJÝÔ@åTFÕPÓO5ÕRUU†dÕV]TGÕÓImÉQUSWÝÀµÕHÕÔY}UXÕÕ=íÔ-ÅS^•ÕU=SaýÕK%UfUbÍÔdEÖ^õÕ`mVg]V`­Ög…ÖcÕÖk-ÖmÖ?ÅÖT•ÖnV\ÍUp Wk-WsýVn=×@z­W{½W|ÍW}ÝW~íWýW€ XX‚-Xƒ=X„EØvA„MbØÖqX¹Øˆ}ÿ‰]؆}Êy½Ø‡¥XØåا¬X‹ýX%Y™Ù3AÙ”ÅX•-“–µ—Ž˜•Y-Y›ÍHrؤœm•›žõÙ×ùÙvÚ¡ÅX£=Z¤MZ¥]Z¦mZ§}Z¨ÅXT @Œh(p T…’(ðÚ…¬ÝÚ|€X­ýr Z«M H™x °Y”èZ(€pX²][“ƒX½-ŒhÛªm½5Œè[ ©ÛÄ@ª5‰¶ÝÛÄ-Û‘x[ëQhÈQµ‡]Tu ‡@…Ð=ŒF€ÀˆÐ%½ý‡hÍFÙÝÜŒ@ÈYÿ½%h5 ]‡U[uQ@]ÕÖu]ØrP[Úµ]Ý 0àÅÞÔ]Ýß ^Â@Ï]Ý@àmå]]‘\U ŒuÛ“Ð].aÞ(D(Ä¥ÝhtÜ×ýÈÙ|HÝÿË Õ­^àõ\þ[^úàÔÒßöí_ø_`XÇE…>`˜°ß¾Ýß`&Œ[Óµ_( nàŒxà逿e`N üý¾Z€ß—Ùa1€hõ-á=ŒÆÏ à|ßúÅa†U a÷õa > !.]T0bŒ@bV ^,&(>Þÿæ(ûeÛÔÅâ½Pßæ@…аԵá5–bþßFèa±pâh„\0¾_±%Œ%[uQxâ’ø_žbÝÕ_,þãÿ½Þ|ÝB>áÃ(Þ2>cH¦ Q À\îã”ÙßæØd²õZu`_èÈa4à=vXZ& !ß—bNŒ%vÜTö\÷-áNžbZÎ_ÐåÄâ%Îfn‰8eØÕå6 ²%ŒÎíY€ãfn_jm 3¶Ý9FѽÞéÈáÆßÍ5cD¸æg¾ä0€q|¾cÁXâÎYMN]<~çRFy¦g-.`¦g}F_Àý5€ÿä€y~à€®f– €ëÅg3Æg0hŠFèWAÞYQpgè0è¼-€%iWV±µWáUý¥›ŠmdŒÈßCæåÍäx[—F—CÎ_‡¥iX—³­W« êœædÂh{U{ÍY¦ŽZ«¾j¬Îj­Þj®îj¯þj°k±k².k³>k´Nkµ^k¶nk·6Z’~‰B~kº®k™ÑÜ%(¶k¾îëWî]ŒÐëœ&â$6€=nd½-Üyu[FbÊWÂnl‘èg¬…_šžÚ­õkζÍÍZ5–_èbÄ iˆîâL&mÔ&Í¥aÒ®lÒ6íÒmQ€S†hÿÞ-m/.ÝÔÞìÎnÖMíNmÚµ_Nn“a‰näV‡Ü6lðZ½F]åaˆöä9öâ.&‡Ò­Zˆ&nòÎH¼ìÍo–_SN\Ô&m*NíÔFbÝÕÜÒU_Á€Òæ]O–fùöâòð×9ïõNîöeßAãFxßê¦á“Á^ÍõÚ0]§]öåÝðfßLF…Ò%Zñé0pÁæÝãÞÿaïbumî]Í­âÙFqÔžé*^oámÔ…'q çr@ ¾eá˜~[ŸféÄ-é@®î[$ß]áE"Ç’þi.¹ò ïò§½]/s¶…nÿ1?s4Os5_s6os7s8s9Ÿs:¯s;¿s<Ïs=ßs>ïs?ÿs@tAtB/tC?tDOtE_tFotGtHtIŸtJ¯ôßJPLÏtMßtN7ÐøtPŸ…¦$W˜¬UbìUfÚ§TG PõQ_×v-gX‡×l×S%ÎVÿtQ‡Jv¥UyµõSŸUU÷Ì\?€]vVEve•uqu[-öcW×tEõFõuZwW,…öWvfovn/uRŸvc¥CmçuSwg¯uo_÷XGwa-weWk¿ö[÷ÖnÿõU…wißvvow~Çwÿ÷Õ÷j¿÷€7÷tÇöow÷|Ïõh/xÿ†ø€w{7øgwx§÷yW÷~çx‰÷ø‰guŒGø„¯wjOvˆøyŠ?yUmùqßx8 ‚ù}Ïx…_xœÏù†oõ‡·ù”÷sWy×ø`ÿ‡š_v¡ú¥/y“ïu™ú¤—w‹/z«ŸùŠoz§?z¬ö›'ùŽ¿ú§‡z‹‡y²¯zž?øUz¨ü·Ÿ´ïú³'z±ú±w­V·ÿ¸§û´7z®gz°{¹Ÿ{œÜû¾Ï{¿{¼ßyÆßú¸|½ûÈ·ûÀoüÁW{¶ÏüEüÊ¿|w|ÉÿøºýÐÏ÷ûÂÇ|³|Î/}Ó_ÕÔW|Ò_}Ößüµzÿ’˜}Ñ·üÏÿ}Õ÷}àïýØï<Þ}Ø~áWþá'~æo~Ô§üçŸ~ç§þê¿~ìoý=~í‡üæG~Û÷~Úù“àþ›ï~ñÇ~ðýÚzóg{ô?ýóŸÿò—þñ|ë_öÇëÙˆ/_¦ý+XPÁ„ 24ˆ°!Dˆ#RT8±"Æ‹#jÜ(ÑcÅŽ Šé°¡ÀMrdÙ°¤K˜,eޤYÓ%C› un,™’`Bž=q’$ZÔhP¤'•dúOhF§>]Ê*E¬Y>•ÊUëG¯WoŠU 6ìØ´j‘ž}Yvè[£ms~+×.ѹ+þèë÷/àÀ‚.lŠø0âÄŠ3nìø1äÈ‹ç)”lù2æÌš7srBÏ¢G“.mú´eÐQ³níú5ìǪ Æ®mû6îѳÿåîíû7p»ƒ/nüõðãÊ—3ÿ\¹9ôèÒ 'ŸnýzóêØ·sÿ­½;øðÈŸ‹/o¾ô÷óê×§&Ïþ=|ÆéãÓ¯x¾ýüññëï¯~w@!ù,©i>‡ 000HHHVVViiivvvMx¨kuš}nŽxz‰xw—f|¤v~ Y‚®z‚’i†­fвn¶y†¨tްz—¹¶u9TJ›U\™iiŸo—z{¤]\«|\·{F½z\©k{§yf yy¸fi·iu´|k»s|ÏqÑtÃk3Çv5éx8ð{.Ü[[Ç^eÖ]aÎf_Î~AÛkMÜgU×wLÖxSÈciÅktÅwgËrxØcfÕmpÝvhÙxyæ^MãWVèfIädYèwJèwVäfeåopårjäyx†n‹…vŠ…{™–m…—uŒ™}“¤l€©w‰¥}‘¶y†Æ{„Ô}‚倘‚y¶Y­Šk¨‡z®‘w·Ži²p´‘qÊ€>؃;ë€ô…ç…*æ‡4óˆ'ñ‡6ò’;ˆFȈRÍ‘XÒˆFØŽRÚ‘NÛ˜YÊ“eÄyÔ†gØ‚tÕ•h×–xΤ}Þ¥mئwìˆHë‡Wæ–KçšVð‹Cñ•Gð›Uèƒiå‚|ë™hè”wï [ð [æ¢fí©uí°{ð¦hð«p‡‡‡Š…˜”ƒ…š†™œ’Œ•••ˆ‰¦ˆ•©‚šº–Š¢™–«›œ²‡ ½˜¦»§…˜¥—–º‹ºˆ”¼š„ªŽ ¨š­®Ÿ°¶š¨½£Ž¸©œ§§§¨¨·§²¾»§¦±«¼´°®¶¶¶€žÁˆ£Â˜­Å±Ç£­Â©¹Ë´»Ê±¿Ð­Á×¹ÁÊ»ÈÖɃ‰ÉŒ“Êœ‚Ç•—Ù‡‡ÙÚ–‹Ô–—Ä™£ÚŸ¢Ç¦ŠÂ­œ×­…Ô§‘Õ²Ô²’Ω©É¬µË¹¨Ê³µ×¥¦×»§Ù¹ºäƒƒåç™ˆå™™é¦„æ ˜í·ˆë¹–å¥¥èº¤å¶¶ò«¬ó¯°ð°¯ó¶¶Ä»ÅÚ¾ÄÍÀ³ÙÀ¨ÙÆ·ìÁêÆ§éÌ´éлúË¡ñÀ¿÷Ъ÷Ö¶ÇÆÆÄÌÖÊÑÙÛÃÅÕÎÓÞÒÈÛÛÛÀÏàÄÒáÚÝâÜàååÅÅäÏÐçØÊåÚÚóÅÅ÷ÖÊõØÙåßàåàÜöêÝåäåêìðîòö÷ééÿôêþþþÿõ­(p Áuÿþé[XP_Â…ÿõ»F^B…ÎC7­ÞÅ /F I²¤É‘&S¦D©²eH–.cÂŒÙr&M•6oüwÐàÃŒ "´—¬h2f?^;†ŒY²k2oê”J3'Õ—W]ZÍšp+Wž_»,ØãG† Á:¥gZ²jõÙ‹†nž=§ö´†=¹·¤W®¯¦:˜ð^‚dס}¸ïbã³ÿèYL(9á¾}úæeìÇÖeƾ ?ƒ9kiÒ§»¦F-ÁŸîν›ý.íÙ~â&ãžœÐ^çöÄå5YoܸpäV‹.]Xjóª«ÁF^mÚ‚(˜;g–9ÅhËÍÿ+: žÓhh§…¼u´ß*t'´÷øóë/§?>o…ÒM?+E']jÔé5]j a¶Ž9¤%“¼Ç_{F%£ZÑdˆž~ƒò>Úˆ<ý¥˜*.„‰ò2N ®–`MÞ˜’Cù‡Œ|C edbx Í 3ÓlhÝ4ÑD3MøÌ·P9ψØâ–WréM „Ì#Ï 3òU#‚g¢¹—uˆ ‡Æh”F!NêÃ"—*šˆb9~òÙâž*f9¢>àŒ“™6¦É\ŽköDP8ÏècŽ]TáÀ!wqC„B)%Ÿß<óŒ7ú|YÈ3xR© *ÿšb–¨¦:Ž?Œª©ëi:âtbÉ1­Ä"Y°²N!b‚äBõa¡1ºª4òÝ1Hž°®Èe|®BSH™~AÚè¹èì:¬˜ã /°L‚Ç… øL³Ïª— {ê7ߘ8¢<߃O·±òùeŒÉåÊ«££õJãW” ;ÞÜA`|!è!Æ«]êÓ!< µ7­~†.ɲ"Œ_Ì)Êã7òø 1h—»³s’Rò :kÜb$´‡–|rÊɬœ_Ëú¼ ªÌ)Ò¼¥Îé>Úµ×_%6P+îèÉKf0+†ÇÎæ»†Sú;À_õ~2s½+Øÿÿ¬SOç°âÎ;¬0R†ì1cìNxóLÃŒ”1„ñ´˜eŒ$ëy7ÞëÝ÷Þ›K±¤ÅÆB#et±|ŒÑxçÅdhùåëµXê©Öiý¹ï*ŠÎ÷ð¥û]•¤°¼ã+¨h†cÔ‘Tx‚V.GÁ3ÍC0£}QÜò <Öã÷'|ñ¤ólºº=™óŽê<â‡]8  8ðˆ*±èÃC2 áÊôá”v«|C`~Χ¾¯5Ð@#ÈXÚ‘ Á1£TpÀðà4€PÅÿ6d¹Pf „U ßÃÀ¾ôŒ$/4 ÿ&Á4†!Ñxƒ18Ø `ÿ.‘½íuï{Bá缺‰¥Ï…Æ ‹Ä$5¸d&IÀ,l0 PàØ(W”Û!wJ\¢…òæÄѹ‘xèc_O ÂxTB P @t@AK Üä*w¹Ì1Äf8ãÒ ÅÇF‡ÁŠ3<̯jÄècx ÀGLd1N1 ¿’·TU«¤"é³HR,Н”âX ² *k! 4G,R±IH€üIÆöµŧÐØÜã¦ÆÞ±†ë{¤$aY*¾„(G9@¨Ím.` •è&rÀahS<È…6ép`hë¦<çIÏzÚóžøÌç…75‡vg‡yšgeF%õ`·§hEñ_}â¦kß1(ƒkbý ¤`Þ–  rp ú «  ¹  aU¦ŠP –ƒv?€v«6˰ ¼³àà ßà${Òm߆b£·b'V€ªçzfhRˆRü4‘ƒ )]€r¸0>mg´ Æ ïÀ í÷B d.àSPel:»…J‚[Ö!ÿÐvF^d¸qhØ}Äf-á¯q ¶€ ðÐ*Çp gP7gKà:p9œ•!ó :%g,mh¬Õhù‹Ö±XÐ.¡à8ÀhΤq㦉ˆŒÉx×á‘AFp¸ ñ e@”ƒ dteÚ¥/²°x–1 ~8{ðQÂe.Èá!‚K Úæ‚©g‰ ¨Œ§€$qñÈ Ñh„úà Iبg4}F«f>h0 óÀBPÒ2†ý±l¸„&RHE•xŒ˜(fi˜‰TÁ‰Š¡q hpÇàZ €G ÿTø1 ‘Õd3àËÀd@УTJ+dg¿h©€j0òÑ4-f€‘¦4h•!!TAeC‡sXàl €.àNÀ­ð±0 @vÑVsÑæÁ°*C‰;¹$b…M¬s¡pàƒ€—[S†—¸z‡‰˜RшîBàÑà$HÑ „  #pxô‹hÁ ŠP.`!v 9à–'3“)H€ïQwE‘̃E’K&ÂVSi˜÷x’I7ƒ*ñt–òP‘PÅ0Å6 ë€G à–Ð?AH³È6P RÀ=ÃD92 ;Àn0;0‰ã“_åÿqåj@ xÐ6$yt¸©’g˜›º)ï{¸$Ä” Ä àK‰uj—QEÿà >õSݳÜb Ê‘hÑ… ±‚ "†Ðf€—}±}ÚÇtW™’ÕtÒ?ÚDPNå ŽàK°L0¢P<0 Ú4 €¦¥é9` ÚÔ ÙYÂ` 3@ú4OÅNâÄÛDÅ tRr°¤Kº†µ¥\Ú¥^ú¥` P$ñtïÀ”œûÒQP ë —œËÙÍù\P v6àgÇ=Þà 2@ÁÀ ^I!íieäa¸%Q©`¥ÿÀ‘P6øÐ †€—•kÜ7ŸU)¢»Yï rеÑK°Pð!íÁJð ¬Ð™>6e•Lv9F€G`pp å0÷rI´ð…M:ˆ!õ±V/x©Š Ÿ‰ŸaaKµ P­ € Á“9À{<`ªåÁ8 ³À‘>@«Ïóêê'ðÀ¦ "æÐV ¹„SAç°B%Ä"#Y˜öè¬ò ­[ƒúÀ C Ъú ¶p”劶ð~CÐg¶À ? d°6_À®ÿïê Û‹wf¦¦65ð8嘅Ö"T™ø¸t¼ÿé ñ» ûÐ’ Â5’¸$–ó99; Þ |{ 4`P#K²ÿ0Ÿâ… K ÙÁ2@W_³Áóž(Y³Ð¢j¨: ±=û³A»ƒD°_“g~f99àJË´3OµRÛ êç 8`%à³ù.Ï@Q¹¬j¶8r³3»˜<»° »³› ÛdÄ‚»À{RP·9p ë±êú`|+µÜ°J2tM"8`0 —`³Ð S'+³b»©d¢¿{¶ú€ P¼ € ¢%:U9gÑ@9¤@ #PpgT«Ðã&ºR»¡ÿÖÙåm5ŠM6`úa3Áp$ zIz‘[¶Xù¸«ÖÁ ð¬-E ÂРÉp;ÖÙ ðUvˆRàºØ€G À]À½Þ+µ¹ óNQÉ ¬PA+ØV®™hø¿ÀÛ¬c¼1‘ú2J žæqvÉP b¤ ø uä ´ HpmÁR‹Šñm,Lž5ÄŒ¸@½»Œ$ì»&Œ³ïñ4;˜  Ü£ d Ô N q³À … xd QRÛ¡—‹"‰¤`Êlæ“Ä™ÚÄrL³§‘PÜR̈TlVL‚„a¸µÀŸV~0Æ#ëÿ`Æ P°"h„|—£Žˆx—о!\Ç6«©sLÇö‹)Œ!+|¨å8 ’«Z È@ëpÃ9¬ŠÀ îúå R µðrFÐqÿ҇ˆF|~sÅÉòëÉvŒ©W‘¼u¶Á˜ SQs!úE·5`‡9P¶ bQƒ¼p € Ð€î  0ÆÐ¿‡–Dð@9ÑpzUVGúUt"¬ ó{Ïô›ôà!J BP £Â"­; ÓЄ@—siz…°há\Pÿ` Â` $«¹ÐËì|—(‡;-ØhIò¾)¢Ï*=°L¬ÌR! ‘0Qÿ5 eCùõ¼ÃTFgU~°uÀÍ€cU™(°ª!pÎÿ€™Kˆg2–CJEñ ûjÒõh’K¬Ä[ Ô^Ä¥ƒôx—ƒTí5Ýà¦a€L°3 Š@ € 87hm;eF0%p&pO 7M˜¼ËÒ-ÝÕ\íØTÖP3Ö !QW-+wùÎÜÀQ3%md ÀóPaÀ` %°–°Ð~[ÇgGŠq *»6À Åh©[¿Zý¬À0=J3½¨u¯8mʮ؂ϰvÀ7&Eý u P° µ®å` ÿs”ëÿ`hð É€šq0 uë=Ó€%ºØ¿Ü^ ÙŸ<ô`FÑ ¬^eÖ8]ŽÛŠiÉÌóP"ã´rˆ7`FÀF€ Š âÀFÀ ¿€l@´Ùi¡É[䆊¶ŒýØ ßñÝõÝ~葯·ôYã!‘ÕÜIp[Y%d ?­xà  Àa¹×‚PÂÙÉðh`e”¤Ñpa:¸P`ÙÐÞþÞ!þäå\1Üpƒˆ&Ãd×\ÍP@~˜p”ò0epV‰vC  -r ÕÒ|{¶Á#Oï#,õS«thvƒÐ@ð5Ð ²Nð›­Ótñ³ x„ šàjÜÓ$DYyà–"øÐ*Gh ïôŸÑ’¾ì.=êwœJh1ÕKrvê1?%Cà–<°ÓS}‘C»šI ±d ðSèaDFQÅ)w@2…ÀžMž]õ&_òP.å8AEW‚¥óôSé” gsg…@°ˆàXº— 0WÜ“ PààK`  ¹`NÛÍiÝÄ=ØOÄpsÐMZûZ¦Ú¿ýÜÿßý_º#„Ÿ$S­Ö”W·Ov9Ð`ʸ%LÉ0 ß\4õ•ບAÅC0žïn÷xY~˜%‹6OßA„ õýcØðŸ¾u#.lˆÐáEŒ®ÓØÑãEŽEj 9ҤÒ'U*d™°\BfF’É4„D >Xì¬ñÄ<#C†)2Ú·!>|Œ8"…(ɤ&cæíY B‡äÐÄê\Ë„Ç dGæTƒ`)bŒøãA†,U²{2e]wñvÔ»W£Z–/ÂÓ*ôƒ‚,ZäÈ‘3—> BÙR¥,*©ÒEuÞÍÈód‡#ñ`1" 2#>’Í“:m"˺ña$¥ðÂ;( Ÿoß ÙÁ)•9V&¹SËA„¤J«¥ÜÜzˆ·µzÛ+8ã$ÎÁ‘KN9„˜ÓGÀƒPd|Èa[²›í¶B IfŠh”’FŸr’Š&šd¦9h œÑ‡; dÈ!šƒRQ­¿Án»Q*Ü2BhÞTð@• ôËÉ%ÌJ¿(¬0! õÑÃ!\¨¡FdFŸƒÊ®¼yZô!šÿŠ«“âXBFW‹9f ÕšIŠ<0!ÿ“¨¬KѹmTJ#­d1!™gš%ˆD—Z¨A«iúô®´!þ oˆdÐó=Û¤2ÂŽBÜûAL pÁˆüökixаM©˜ÐP‹@ºH¡Š ýí8H7j¶!G›|Ö!À¦yQF û”JŠ$4<"±¬lò&³3¥Õ‡¡˜y¦¬‚ð#—F\`áYj“‡Ùâuöü†™hâIhDr¬‘¢MtZ!vø$µ`œ* o8šitø@ fB;ž9h\Ì€ ]/D7™oQÙ[–`ÁòM¨OflÉrש¤bÉd"Ú#ˆ¨a‰›vb°Z…§MÿaXâõ?T›ÉC!¤)$oD=s(¥PµÅ æIqˆ]œ'©!t°—‡\ù£4FmS—¥˜bluž£ã <ð¿&JzY’Ž-öɧŸØ$°` ø¿ÇîN¦†˜ç]!îü&gÚŒff²ÑTÓ¹5›+¨•íLFŸ<ZÅÿÆl‰°¡f[pˆ m‹Z% _Z¤”äb|Úlj‡Ø7–$?9™ÊjF´7¤ói>=(Ì37/]]Ì.З1Ta×¹9Ëqo“i7Ø~4Z¢’=TÿŠWV¸ä1ËqËÛ_B¤F5,Õ/)ÉÐ×¼o¼ Ug23”bž³¥mmm[“ÿ“¡‰Ô@ uSˆ¶øµ–ÀH&̈ ª ò„Y±ß¡|sC¦áP‡‹j\³ø‘Š c¹‘bÁ¬az‹É"3Ì]>hY‡0óºó 6xŠžJ8 !ç`E*XáŽØ&(™ ˜‘ð—4&á0iÃSÞ—ô(ä-ï‡HS‹µ86)„ÌŽ;¤Êkžñç„`í² ¹†0}8Ç<';fpàåXÈ©¡À#ŒA™À­SBþâÇ9Qt)Úâ€ÓCHíqBV²°¤¿uG=ª¢„ü„ò™¼”3´!*ÿÿW@ÄÝe•Ç ,!%)@é–ʱ% 1TŽÙµda‚âî˜X¨b±8È&S§xPX³sã C¢¿%ÁEIË’å± j,oJ œ;Ȱ£6f„ê çL'KÖižEºS-ù¡À’©sPàžyÊ…P¸®~)n†½+Z²€wÊ;ôP„êf—·PpJª—¿<©Õ)¿×%@…9D ÄÂHæ2) ŠHRåRɰE*Ñ~¸ôwTœDÐfÁ…¦>Ô#qšS qG+æCˆÅÔµÎ(:4!ªH*‹† ÕM¦fHÒVª ñ”X´ƒ§|cÿ ‹MVŠÄ•‘:¡¡ÿ„bd±Š•CÑÊ’x$¥lU,LPÇåBµÐu5åØ$T!RFV¼C`“\ÁŸv ‚ :lájË?h·’ ÉYàM–ż,`€: [EmC(Â4¦Q¶‰j—¸DÈPQ‹£Ö•Bïè$\Úq w0i«} }[ÇáV³Ÿs$/7k:KõR–¸Å‹rY”Fjb PPÁ X¬'Sùóïîã@æuËÑŠu¸òþ®òÝ&oKIÇÜ´7±ï-ÐXYúªÅ¾åÀ¯üZ¶ßÚõ0Ñ€–êþW?gŒ-µˆvaÇÞ7Éa^K8Å5V¸­Ôðp€«C®Îÿ’B– ñ…P…\åFƒ¹Î…nAt ¨> MÝ‘”;|”Ôv(ø¥4„°Âz‹a¾Oi@îêX3ß4ÙšEvˆ[3Ùä–d6ŠœÕŠgƒ’;¹¶µ_åøOŒº1ƒ™#ïÈÍð w¿ó¢×¥ÐZépÝìÆÝ¾4b6ýð3rβÏVsæ# J>³§Ít¡ÕÒ×ú!MÂþ ‰?FdŠø“ÎQìû™Y¾*¹FsŸË6 ún–âi ‡£éfy6[Æ[ä¤ú·"Ó”½<>„%¤\¯™Î›NŽð~­¬`çvZö¸Æ‰Ó·'e'Р謟¾„dÒK…_†Æ÷Sš—#=º-ÿÃó6³ª›{a¾–ìox-g5ûsÖÈE9Ê‘ ðÀâçxÇ=þqsœ·¸-xP ƒ¶ØøÈCnqaä"Âxy9\^ò“ †Ö;çyÏ}þs ]èC'zыޑbSÙðŽ7û˜ Ì\BËK¦P/±=አއ#s’ÕíU¯*|ØÂwº1P÷YÔMvªê}» ­:Ùû([ZÞ߬´±z—°JmiÜ J™fÞ‘ˆ³ØÆyÜ"±óÚÙ^fäÂ`ʨDçûPD»RaBv¸@÷¾sÄ)Aµ/5:l>ž}/ü}Ö#]%³Ý%²¿}[ GÇ6üó ÿ®[Àíaƒîø.fœEŒ/Vš{ñJ¾3íÂäQCŸB“n°¸*Vs'\ÓÚî<_JÒwrÇö.í¶Ì湜ÕùÒo2û‹DXŽì¦á ¾ñÒX:iîkš”Y?ýoñ2Ð82?ßY¾ £:ç 'Ùs?A‘£›,3ñ½ë<Ýø½S´ë?ñ[=e©!ó·Ã‹½õ;@÷˜™°Í{@Þñ¼T¢µ²+¥Ñ{=W2=aë4» À2×C³ÿAÚSÀâb?ÔÙ³;’¡HÓ»7`+¥¿£#¬´d¾[[|¸VBõëA¬ù‚ËÑ iÒ½Üc©­S>*³Ä›´òÓºú[3ÿ d,8K ¬¡' +LÀ,¬˜>P.¬¹ò+ñú¾ø;?ùÛˆü¡Âƒó=J«>BÌ;Ê¢>J¿¯jÃoªC¶óÁË’¾hÈCÍÙC)ù›µ@ôATÄsDìKDPdÄsÄ8ÛAV4»Âk¾œÅ¨ÙÂ.´/O4>5| 2L’ß1<4 ·C86œCÝ{Ã)?8ƒElš;,¤ÅÈ©¤Ìi™A¡-S"Äk, qóŸÜ=@¼AôS< +?áÈ4½ðºº¸B;„ƨ#PH’µeA<4{0®›ÇÞ9¾yäÒ{³|”Ã^ƒÀô XôÿàKGƒŒ7…TÇœÂ:…ʵ!ŒDݺ±ûÓ@++;"@Æ2@v<ÈóH )¿dÅr›Àp„‡«HSTIÝcÉgüÉË‚I+tÈ®BÆõz=W,ÅÆ¡À†¼¼uJ´ÊÔ“/ô[HÛÒAŒT˜N#È 3ž¦ôɧ ˨|ÄÜ5*<Æ•èGet€Ë½£É8ËJ¼Ãâ’ÊH¹ÈdœDßãIIS²œ?¸Ü0ã GtŒ’Y¥Îü:R¬›‚ˆcJÈ4ÉK“ÆlËÅlÅÑ¢Òœ¾|KæL:ÌǰºÉ¶ž@†l£;OôLOõ\OölO÷|Oø4:ÆDIðlúœÎ‰´Î‚džìÔN„Ná¬OÈ‚Ä>ÔÍœ,f¬Aïä! PÕ­ ³±ÚäÏæÔÎò´ÏíÎÅ£‚„Èþ …MüœÏ ÕP½K¼üÏ­PQ -ÑÅÉÌTѽÐuÑÅQ½NµÑ­Qu¯mQRõ4ÒðR=Ñ-R7Q& Ñ$¥NÑ)ÍÑ,õÏûÜR#µR'ýÎ0Í*%R0SEÓÿ4UÒ%=S/S(}¥+ÕÒ-Ó&S9USiÙÐ.}Ó<ÅÓ5õÓ@T²S,uSBÝS=UT65T:½S@eÔD•T uÔ'T]Ô(ÔTN N3ýTP=ÔPÕµÔ/…TLõTTEÔ:íÓQ½ÔTíKV}Uç4U8ÕUÍURÕU µÕ?UY¥Õ[ÅÕ^uU^…UbEÖcUV*5Ö]}ÔeÖh•ÖfåÓLTJÖ_ÖdeVhýVp=Õg WàôÕAÕÖmEWíTn½Ìi=WuÍÖw…WóŒO{½W|ÍW}ÝW~ ºy]×v…Ã9Wr¥ÖbµÖM XÅÖ„UØ‚M×½V†UÕÿqõV.EXŠ}XzÕXyØ%X‹Ù5Ø‘%ÙZuVŽ•X‡ýP“ÙrEÙ’ÝØ”mØxíØƒýXˆ­X—ÍÙ™¥ÙR…ٕ٘Øn ÚBÚ–åÙž VõÙjÅY¡MZ¥5Z›]Ú•eÙ©•Ú¨ÍZ®íÚ£ÅX¦ÕY­­Zª%Û—ÛÔZ¢­Y§ÛÑ4×µmÚŒU[•-Z2EZ¯5Û±­[¹ Û›eWwuÛ­ܸí[»Í[¾ܵÚÀU\´MÛ²m[Æ•R¶•Ü“}\Ê5ÜÆ¥[Ë\ÀÝ\ÏõÛÉ]Ø« Ò»Å\Ò=\ÂÕÛÕeݯ…ÚÅåÜÎEÜÙ¥ÝÏÍ\Ç­ÝÖÕ]×ÝÿË…ÝÞMÜÜÛÐÝß½ÝçœXâÝ[Þ ^àuÞåµÝèÝÝé¥^å5^æ­^ßÍ^ìåÞÒÍïmÓÊí^ë%ߎ8ôM_õ]_öm_÷}_ø_ù_ú­_û½_üÍ_ýÝ_þí_÷EŽCXžž–~–6`ˆ9`HQàfÓ†``)`N`¦`®`þ žà î`n– &Žá Ö` Fàa FáÒrXžž–~–¦aˆ©aHÁá.aîaþa b!b".b¼0…S`F˜Ð0PØ€)þPpb¾Ô‡.xâ(‡$^b¼(€ß €ÿ¨âî)Ž €Îb0NÇ~c`1VâEyã`9¦5Æ‹CHbŽc8öc-öˆA€ÒF}…ÈãÕ+€àL6X‡rSÀäº`„†ÀärxãFˆd•LeI~`xá7.‡`„ôÃäþâuPøäP€Q.åS€røâUnåXV‰([vfPåZ¾å¹8„Je8[f`e°ærðæ‰Y`ˆN¶â‡(çÿÓe·æ €C €>^e•dSþ‡xaG6…{2>‰P^f[®dzÆâÈåLNçÑgs®ç¸çàÿAæg†ðç¹pg9žgIŽå,ž ¸âNvç †.èŒøè†þwÆ‹f‚6i¼€ç(¾gF(tVéh¡èŠ`„;~g\®‹e®ä|väXi• ir~és¾âØé{æä–6 fêF¹åœ®duîå½ €•殆±þ‡˜çºàd‹å˜V꺠iž¾é®æIžþ‡H¾ã«~ç+ž‹X®âuP@j·¸g`r^y®ëµ¾çfÖLÞk”öhVÆg¨þä0ì“Þ€G¶l†€öâlÏþ䉑ì,žbr¦vç¸éVç¹àik ž¶h¢^ˆÿE~iÔ6è™FluŽç˜í#¾çXÖ‡Èí6 ðìSžmG戎V Jžáj´6n¸nvé_ð–†l§žåHvjaöôuNfÓvdõnuPæd—†bLÏu>uQ_ewni_çP…ÁvéuàlAmÐþä_ßh’vi`niòîlNÖn]¿ögés|vv?_eçl—Žj^_pWÆkP^ðn€V?„—ä–u–plŸw)Ñv<is.gtêumÎfÈ.‡Hžbèd|_årf÷SvÈ6ÿ¶¦w‰G{Ox^Çå}oiuïdV‡öTw ¾x·pémÇå䈟x•ïC Pˆc’vq2Þñ÷c7wWk_òCÀeShy†qw  _y£wàr?z¥sP\_z¨z©Ÿzª¯z«¿z¬Ïz­ßz®ïz¯ÿz°{±{²/{³?{´O{µ_{¶o{·{¸{¹Ÿ{º¯{»¿{¼Ï{½ß{¾ï{.ïWÀ|Á|Â|8|ÄO|Å?üSØÞæ]èMÞá•üÑÝN•X|ÌOüÆ|õÞÎ/ßÏwüÇO]“È|Óß|á}í…ÜÔW}Öo}ØÏÓÏ|Ô}Ê—]Ò÷|ÿ¬]}ÈýÙÇüÚçýÜ×}ÓþáýÝ7_‡øýÅ~åï}Û¿}â_Ü—~Ûe~Åwþ×7~ë—ÞÐw}èçþä_~ìG|íÿíÿñGÿôo÷ÇÝ(óøGþâ~ö¯ú?~ƈ,(pÁ„ "\èPaÇFœø°¢E‡3&ÜÈ‘áG!(iò$Ê’§>zù¯¥K˜#e²t Ñ&Hœirä©0%Г+{ê$è3ãQ‹I%.eZ”âS¨Q› ju(Ò¨/µnÕJuáW°^¹†íèÒjP¬JDzÚöiÙœnç†D Tíĸ;Éò¥ ÷mQ½FÏÚE‰ÿשßÀ}ÿÆ)xp⌅ ׌ìx±âÆ6Ke\w²ÉÃ5oƬ“óAÒ1UW¶¼šuHÔ¨»z®}ÚõkÛ·aåÕ÷Ú‘_†‡K <¯éݺ/ãžy¼àð/Åi/Ï]ݺò뱓—NÜxóÖÚ·‡Ÿ=óø…ѧϖͽ{úÞñÏ7¸|}Äåå£Ï?úù!ÝG]çÈœx v Ø€ ._‚bEh¡€ßÈ sb8!…vXá?¾7"‰7íGˆ †è †®ÜŒú¥(×{y'~-’W£"þèãBªã‰EÉß’,6I#‘Gò¸!‚Q2ùdXJ¨¥H;²û—¤y\v™£ŽdBF¢‰š¥æšfvf¥“Ur”&cºÙ£œbªXç‡s"Éf™wRéâ‹…Š¢ŸSÊ(è¢pB©çžŽn™ç¡ˆBŠ£¤“V&¡*Ié¦W‚j騟N䪩ªº*«­ºú*¬±Ê:+­µÚz+®¹êº+¯½¶z¯Á ;,±Å{,²Ç›,³Í:û,´Ñ»¬´ÕZ{-¶Ù K­¶Ýzû-¸Òr.¹åš{.­ã¢».»íz«®»ñÊ;¯²ôÚ{/¾»Â›/¿ýò»¯¿ Ü.À|ð·#¼0ÃÑ*Ü0Äû°Ä[œ+Åk¼ñ«süñǃ<²Å×!ù,¬h?‡ 000QQQonnMx¨ji„kuš}nŽyyŠxw—f|¤v~ Y­_…°kƒŸ{ƒ“i…¬fвm¶y‡¨sްz—¹˜a1µs7›XV…u}ks™zm™z{¥]\¨z]ºM¹{Z¤ooªk|¦yg¼el·iv´|k»r{ÍpÒrÎu%Év6Ù~8ê~èy6Ü[[Õ]aÎf_Î}FÏzSÛkMÜgU×vK×wTÈciÅksÅwgËrxØdfÕmpÝvhÙxyæ^MãWVèfIädYèwIèwVäfeåopårjäxx†n‹†vˆ…{˜–m…—uŒš}“¤l€©w‰¥}‘¶y†Æ{„Ô}‚倘‚y´Y­‹m­‘x·Ži²pµ‘rÙ„;ëô…æ„*ç†5ôˆ'ñ‡6ò’;ˆFȈRÍ‘XÒˆFØŽRÛ‘NÍ’eÅœxÔ†gØ‚tÕ•h×–xΤ}Þ¥mÙ§wëˆIë‡Wç—JçšVð‹Cñ•Gð›Vèƒiå‚|ë™gè”wî \ñ [æ¤hì©vî±{ñ¦gò¬pú´z‡‡‡Š…˜šŠ…›„šœ’Œ•••ˆŠ¦ˆ–¨‚š¹–Š¢™–«œœ²† ½›¤¹¤§†™¢•‰£š—º€Œºˆ”»•…ªŽ ¦˜ª®Ÿ°¶›©½£Ž¸¦–¦¦¦©¨·§²¾»¤¦°¬½´°®¶¶¶žÁˆ¢À˜­Å±Ç£­Â©¹Ìµ¼Ê±¿Ð¬ÀÖ¹ÀÈ»ÇÔɃ‰ÉŒ“Êœ‚ǒ؇‡ÙÚ–‹Ô–—Ä™£ÚŸ¢É¥ŽÇ­—׬„Ö¤‘Õ²Ô²’Ω©É¬µËºªÉ³¶Ø¤¥Ö¼¦Ûº»äƒƒåç™ˆå™™ê¤†æ ˜í·ˆë¹•å¥¥èº¤å·¶ò«¬ò²±Ä»ÅÛ¿ÁÆÀ»ÙÀ¨×ŶëÁûÅ—êÆ¦éÌ´éлñÀ¿ùÑ«ø×¸ÇÆÇÄÌÖÊÑÚÚÅÇÕÎÓÛÑÇÛÛÛÍØåÛÞâÝàäåÅÅåÏÐçØÊåÚÚôÇÆ÷ÙÊñÕÕåßàæáÜýåÎùçÖåäåïïðùèçþñåþþþÿÙícGP ÁË:ämB„J„¸oß¿Š'jœÈn£Ç;‚ R$É“M¢\©råÉ–.IÂŒ¹Ñ Áuëþ;T¨g A+Šì‡í½‡ÎKg­Kš(gBM9õeÕ‘R¯"̪õש1î×´¹rþô‘#§Ÿ[~éÉ•‹ßÃ~öæÉí‡2cW~ÿJüz•0XÁTsT¼5©ØzýÊ‘ãûÏl¹¤ûÇ×Þ¸£çÍKJoœ½“§Flø0ã­¯aÇöúz P‚݉“¶FÔ+wàIk³g™1»nYºŠÆ©‰ÚõëØ³W´®ýzÔÙ´c·ÿ¦9ž|íyøÊ”èX£4g´tHqãÈ+*ÇÈnY2xÐ1#]váÓt§ vÜ-ˆÑw³•ç’„OEXÛ>fIŽ7?AR0x¬‘ÆÞLgÎ<ÊYÏ3ŠerðÇŒ5H!w’ ƒ<6¸ >à”S9XG!„¯‰äkäØhã1°²<à`òuÖɨ3£‰EÍ–-f7H áì³òðè ÝácàZ…R’‘ŠGçlýx#4…Àñ@#áˆ[¤I\EóPóŒ5]Ng 5ÔИ>7nÇ^™j*ȦvÁÒ?<•ó‘’VÙiꩈUd×<á챇 ˆ ÿ"Æi˜‘F!î³i¦Ô¡©«¯¼j·+v—"¤O!ߌzg’u¢*AûÌ“dØ1Ï9YxňÜQÆŽÛ¹©¤†³'8ûWˆ4xlwÃ^Ç8 !«l³Œ‘Z$¾‚…Ƈ .Ô0-‚„±Å+ì2F!‡Vôå–*Èž“ÃMcãƒäú.–<†cc9ùRˆ>÷:Ë¿Šéë‘X£d‘† 88‚…¤)Í ¿ÈLŒ)*¨n8’9e8ǵqvñ^œD–̬ÉÏ.ËZ´û°òÈb¸pF`ŒQF zŒ1FÜ} à>ÑI,ô>­ëÑÂf*>þø³/Ô©ìt¾I ÿ4$4â‚ a„1Æá‡ëi¸û˜`ÄÙ]ZQÛdÃ4¯KòwWzï·ß%”ÀC 3xq†ÂctÍpÎ0ÊHnv?½xÒGÓî]©›kÕyMR?+<%€Ã Š˜qF { R{ØGö<Ö<“ÄôI‘D< Nl£Ûo[~íÔež2ÊQ“¯»@ûÀ2ÁŽÏ|…á;ø›gÔá è@`̰AìRõЏ³0SgÄŒLz§B'>1eRôÒˆAÀ!L€+ ‰ vðƒ!ä’“(À%ð€ˆ|£9âQÌ`Âl‘ƒL èÈÆž0=åä/ û$!+gÈ5BQw§Då +‹VàйDРé˜Bœ0=éQÏzØÃ•Àa¨¥±G4å ]³È&N­"ç8Ç+*@ wTÄ€@pËMH’,ÚÏf„‘à8©DÆ%)ÕÄ勒…l䜧Xîc†ç +¶™ÿ€ ¼Â:Ì0BÑ&bs¼ÔÉ8vR‘mc3 ƒ>t´’ €9Ì1ÃrTN¸„GÀƒc£Åø/6J‡; c£Ã¸H‘ßýR|ÜÙ;1ò*ç#dл¼#*ØAê-Œ{Í3㘼CÐ'ÀŽØ-·¹´ Ä‡!±ëbW»’B˜YV^)#ŽC/ŒÜÞËZö·ˆ‘¶Ì€†UôÓC&´*…(4A’ŠBÖüƒM°ÿ_2ÂjA… á ¯šXDyÈ(WºM+–«§OÈíoO+KËŽFÓÒ(2 ,]‚\Ôb?øA¥§ÀÚ!ŒZÚA@5˜ 1¥•³Ü± Uò3ÂéítÖ¼íçŽI ÷•Ü3ÇïˆE”öQ ?ø¡Ýhë%jŸƒ)@âF(ì ‚„ ØÞöEØÓ†Cˆ=èL6`}ÄìÜ6·l÷\ÎqÞàåk¥Tň‡ÞA!çD9(©1<‘ƒ$a@‚ÿ¨ƒ „g ÁÔ€­7|ï.ɱ)Q}·tÞ†ŽÛæåf¾Îw$zÖ p%×n¼ 9°Ôó0B ù3B0 Ô Plc#ŽærŒi2|`R|Ôa`Õð0€–|!kæ&q4Fq RÀ j-,xQÐ ”Òf8~ä7 $Dò`1zPÞÐXØ ’GyÙÁb1gSFnüweSH…Š1_ °P º°]ÔÅ  …µVg†w{¶g~è'ŒÕr†bvÛ•vØñd3PP8kT–‚7'c7IÑ•@% °d r  û@ ®ÿÐ ¼Ð ¨ej¶‹p Õs{Bp{ÿfÎà þƒâáÐ(07Pøqèð uÖgöbz(…Í·´X‹U±çð°"ÀI ð@^ÄØP”Vr ä mö ïð 9øEj0PX¦vj»w9w(‰2`á_àkJ^˜‡ BkVh‹~˜y(Ñ­ðó` —}3Ò. Ê  h`:`lN=`=åÕmtuÆö&‡†v°6Û¶dL\Bö ç@ Q°á†p÷‡y*wÉ‘Y¦ ì ´°ZÖ#ŒÜP¢`70=›ð_4(¦3µ}Õ34P Ðÿh{ðã‚‘09Bþ%%QWªvV©|³È‡ù§W! ª ¢á_QðApŒ¸€ÀSÐ’SÐI×A IÀÿ–A0i` ó€†E€‹ÚrC©Re”QˆU¸‚}¸Žˆï8  ðWó  i€Ê€_0K§f‡uÒÂS]£f~à ¢6}0NärFËVÉ Z°7b#³c‚.ÄŽÒ‘­™*¹¸‹³ô¤`Mt`ûнC;e=“Ç(±9 Æ  9` œr1'¾uJ¾¸+žŠ ×± \Æ«ð(‘B E=®b™§P k6%pu ”°ðaÐ(0ºÑ[º9Á }°%È!±SàJ9 DÙA%ÄP½ñ@ÞV»YÁGŒÄïu¯ ð £ÔP eÊ ùó¢P¦…Œ;Pœ ³„°1<ä;´Ëð(fb* ¼@EûÑdÒm·3Á<¡wŒÇZÑ:3NŰ£+b{Ìp ›Ô M éÐ%ìÿƒ¤p  Ãf<´¼  ‚bÛÚ£r Èš<FüšJüÉ¢ÜÚeÆÁ ©ˆ6ôy¹° ¼ )` ûP~ ÃPº‘ eÛ"2BŽ•@©,r>ŒBåk¾y|¾Ìa¥ŒŠnð`=Ÿ×KlÖ"`Lo¶ŒË£ì°Ë£`` $³s6h=¯7³¦u¼®ªÌ[K²Kœ},#œÉd “@°_z Ë"‹œÌ°BûÛ0 ¥Î)•7,)QJµÅÉÞø Éœ¸z,Ïó¬»,)ÂÅ ›X’%K–¼8€Œ<€¹àg‚¿ • Æ+ÿ€ÀB £P3 J6ð0=ÔPß“¦t>}¸ô<Êvܵ 1¡9C‘€ ‘Ò=‰²(Ö‰C0šx;ƒ…°i0#À,pÿ`€Å w;ÔpÃRLPÜPú‚-DŒL ÏÝÌË \÷¬’€UÓTMP¨db)PžäZÊá{P| d Z°+ ½ËÿR_"Ö×8Õ3#ÊÁçµym¤™§¶+ÁM}‹¦Ì —„jOl’6¾¤9( aÝÈ¡b°•êPb€`‘¸ð’¢ÛIখ4RlT'“À´ÝyµIýÚ®ÿÄKíy³]ÛqUP›ÛÀœ?V, 4òÛÒQbO0ÆÝÐ!ЦÀ ¿ØÎÊ £¶w¡ {gÀ9ð «í±­ÑHÊѾ¸ƒÍ …ý­Ó´´‰­ÏIBb! {`|Ðhc€Š uàSà ¸°;Ð7ì™ìpi Ì  q` Ê BÖ°' hZ¸Ý Þ ÎàA¾¸¤ƒÔ`±¥µhï—“<€ÃùÑÑRaƒ8 KŒ:÷Ëp‡ý Âl`¹2šû‰”´åÛíã ®Ô-ä€íÔ‹™NÛ@èc(b–) L `oI)e ­x £gÏ€Êâÿ²ÞÌððáI6pÔ°f°ÄS–œæ´ûã Þkîݵáë¬`x©•VSƒ›à™òjSR)/æÒÔ½"2 o° 7p°¼Q óX%xyH9äžÎéþ^³=ƒö—?S0†•'•ð83Ôù Ñ=¼p^A}°ÀXZ'£4 Ñ‚€l‚ÚÚ¡¬éìÞìÚ8DÖ³0©Ð.í#‘}ÃócѲ%Aç '`X¶—~f{>ðç—ˆ=C-ny©îÆNñÄ^ìªêñ¾–Ä[)½VLÝó`d {d B˜0ÿg ™x;K +BÍr Á!ë×Îæ¹6ÑÊnÌp{V÷2:{¤ÞÐÉ vPy?ÌpVÌ"¹° Nа é`–Öó¢cðš2„7̽2ü±m.ôoôäY¶=ÉΑ“hˆ{0°»ÈP=}Ð¥½boµ„lóçð AàZfy{FÐ ¢ ±¥Ü½j”Y· ônÏ·ØpDö¶7}01€ P <àARøbo M0KÙÐ 0PûT°Ïky–ã7s“Ò.`—m ~Áù°mñqÿù{,úQÚŠb{/b•ö(F€œ?ÀØ¥ÝûIÿ`Àôy ´pi `XÒñG[²ÊÝ!wà6=Qü±ùnñ›þöpÏBÙ «8eX*Å ¶x¶/Œâ$Ñ\¼þøan ¯)QD$˜€‚E¼Š™3—lHC޳q$Y’ã±;sHâÁcÒ¥¹}ûØÍ¤YÓæMœ9uîäÙÓçO A…½ùÏ还I•.U 3æ¼$F˜M%hI /^ááÒTkðž1£¶™TS –œ¨Â¥gϬÍÛo`ØgF’0eŠO oâ¤ò3–]¾G•YsŸâ¤‹%O–ÌŽòeÌ‹-gæLysgЊ?‡&Í×tR§1Ÿ%aÆ:É8¶j}ÿCÊ9xQõ"4-œ¬%”L¨PÊÔ©ÏÀIC2d ^¡;SY ìì°FŽxiæ™ÿ,Ç4Ê”tåó¡G§Ç¼žýe÷ï)W7ºîóK¼€ÁƒÇV^êÒmˆ"ö¬°zá’Vzaæ™yæy ;,Â9¢(®‚sª3Gži¤™¦fà™ÇšÃŒ¼ñ#¯¼Çä‹O>ÑhlÏÆq¼Œ>¾ì£& ™™H’^(‰e’‚™yÀ¤$œñfˆ ’ æ¬Ä*1¦j†à#œp ±c‡HX9ç• (qç´Ôà!+©©¼‹lÅÇZD*Æ;iœÇ=mìÓOwäq)ûâŒ)ÿÒa†«rQ²Ä )„+¨Áªš} ‚j˜±&&g†ˆfŸ&‡¨‡²öa…C6“r󙧦RQP™^|1OÆðììOEÏWÍ€•lPB•2tD5~RX%JÉ*çÑ”7É¢¦9L™BˆútÕëKªÉ©1lVAÙ±Õ¼;•×÷èeÏÞ{…]ŒØ¦”êôx¬q"IzáÙçæròB#þ R*,ƒ€g§JÂŽBºBN¦€! 4Õäkxñ.ÛääœÆ[Zï;cÞU_£ð=Ïæ›iΕ>k8ýÔ>t§ª‚ D•ØÏ¹TsˆJíH«T÷Éˈÿg³C"üàÅ^€€U¦²ýa˧žø\kž¡&ž#SŠWÓf¦gõtÏîxOë9jì#5mj¬éA„&F°ˆ"ì&&¥Ãj*ŸþÔ¬§™ gÈ“ÈÅ þ"[)tŸÉ娑‘›Ê™ùr7³ÆbšIWøt¦{^»gç©àɶ¦HvS*hòp¡ˆj $t­¡V/¬¤Ê%ˆ!æ±ÔN; 8#zèú‡×ô×ÓLQŒš©Õnc>«]ôqÜŸ—_Æ73ÿ-ìvÁ¤Ÿ«¦‹± ”@|¶–úŒ{ƒ5òbLÀû‹¦ü£•ýÃÀ ü¶ Œ½û9ôë9,KºõÃ-Ç;´Ã ô"ɳ?óóAÚ»@ñ»Áïã™±°#xØ·æûAÉã ) ¨¯’¾–¡¾"üc ƒŒìC ÃÈ[<£2¼D2s´5Ä@þ[§!èŸÀ†óÊ·Òƒ?Á‹Ë3Ûƒ©šù3Lº@d¬Y:ï«??¼­6Ô@E¬jèƒ ûH”»a±ºgÂ"$D,@[¤2x»1-ËEŽKC`dºB+>dCDdŠUlųxE1‹EØšÅõA¼]ÌüÁH’Æ3={c4gË>oÄ>SLFT|Â2:‹FdE#pÆU“Ä!üËÁÍà·Ž‹ ÁT[-KÂDEÃ*E_‰BsH½yC#ˆC:i¿9¼Ey³¢|LAƒZ6>l½üCÿ!´GÁA¥‹A›ÁT$HM›Âf¨B|ƒÚÛ¸JJ<“44~Œ¾õCÃò³Hˆ|×»=C¤5Ért¨i ö›)úË¿ÄÛ8Äű²¤&$GüHž 4qÁ𯫓ŠG=ì¤åKÊœLD”žÔ¨\@l&ªì>2»JlÊÊŒ<Å¥ìJùʧ¨ Åë²&¬~CʵTJ\CÆ­$¸„Ån¬JD+/˜ÇÙÓ¿›,BE¾|4¿4F³ Lðz¼LŒÉÛ9Ì¢ì\Ì»™Ë¸|ÌþcJòsJ’Ë?¦“K#”A@óLbÌHò$lͱԱ¸¤)ÏCkS°Å|Íù‹Íÿ†šM±¬ÍO¤IŒÌMÊÌÞÄ=ß¼©\ME;Íä4N%„Îä«ÅéÄ›‹NÝN›DMË /Ž4L/ëL,„0í£ÊÃ1ï¤Í~ HbOJ=Çô Æç”?îìÎý4NCsLºlÎ|iÏ^éÏñÒÏ€¬âÌj"ƺ{PP P ­P  =YOþÌOµNŸ¤Jä„)źOÝôÐ=QeO]½=°â$Ñ=Ð$ÐåÐÁl5ÂÍÐ:µÓ<]S3ÕS9=Ô+SõtÔGÔ5ÔBÔD Ô•ÔôlÔKEÔL U?ÕAõTEíÓQ]TTUÕ8]ÒU}UXÅTVµTJ%ÔS¥UMÝÔ[•ÕYåQSÍU:ýT]Ö`­ÕÏäÔ%Õ^VeÝRc=VaÔ]åÕXÕTeTWÅÕf­Vf½Vg5Ö_ÝVjåVi%ÖH}VhÖn]ÖuýVq×( WoÕÖwmWr-×Z•Wv-VsÍNxý×#ÍV€Å×z%Ø}åWJÕWwWz=Ød-ØûTØ{=×ÿhEX‡}ØRXk]X†Ý؉¥X»P‘Y’-Y“=Ù·kØ‹5Í•eYŽ}Y˜mUHÅØ˜UÙõ×XµW›½Y—õÙŸ•YdÅYžíÙœÙ~ÝÙ¢õX£=ZšÚ÷ÌW¥µØšuZ¢5Ø–Ú«¥Z¨íÑŽ]Z¦×©EÚ¯[¬íZQ×±}Ú¦ [·5Û³ÚŠ%Û¬õÚºÅÓ²ÕÙ™ÝZº½[)MÚ Û½ Ü·…Û¾E[¼ÅÖÁÚ¼åÚ¶ÛÇÕ[­e\¿ý[ˆ=\Ľ\̵ZÂ-\ÇåÜÎ%Q‰ÜÍ]»­ZÏíÔµå[¶%ÝÖMÝÒ ØÅ=ÝÌÝSÀ¥ÝÚ­\ÛÕ\Ö}]ÿÃõÝßÅ›Ñ5Ý´½ÝâmÜØÝÕ ÝÏ%ÞÄÍÝJõÕå¥\Ô ^æM^È•ÞÙ=^ݵMÞ½^ìUÝí}^×Þæµ^ðÞéÅ]ç%ßöÝÝï_÷…ÝÞ­_ê…^-•[uÍ^ô½ßòM_û\ÿ}_ï_ö¥ßžÛð5ßf`N`î¥D˜` ®` ¾` Î` Þ`î`þ`aa.a>aæ` ¶DЙ¦™†ažaF×Ö—–ö•æá–” ÖÓ!Æ‘"^aþaVâ%F×8b$Æa&öá$–â)Ts°›,¦™-Ö—.öbùb`ã1vb3>cÿ4Nc5^c6nc7~cÉH€T0ŠF€ÏÅH…Q¨™€>þ‡QÀc=FŠþã<þs˜ã:fD>ŠØŒ?†bÊàãò˜d£äGξCÆc£Xd:Ö$DÎdB6 LND˜cËåÖäCKeøŒQhRÎ>˜e؇QP¦É€æTv0H…_NF0e^þã€Fh„\>s€j6 D€,þcsZ._~aædöfp>DxæuDøæFHçd¦Œ¾æuˆçt¾0 ÿbd¤ˆhgñXè@„ˆçhOX6Šw®h9éF dÎæoæåäfg`®èÖéh‰é9éNå’þ‡P&…ÖdÎåjäó€@&fîè v,£®é°çx¦éô€ufé–~þ‡n„?ä ›.9öjSçóÈf^~ç}°hsväf‡ª¦jv è§ë—fªN³þ‡@k0g»æe·^èô8hE>æÁþ“}dæé@&aæˆcÆjÆk®~i¯l=kjŽç¾nêô¨æ?®ëQhëšy颎kÒþj£€Î~i{Þ‡_íÈ l¦åÁ6æÿÔNQp¸eÈ~m/ûíà6fv¸ã}°kÒ°mŠ–kÙê·æi¯~a‹>þçÍØéžNëÇ€e«Vn—Ælé~âŽÆnöØéjÞ‡ðî“9Ž‘­þhb.oÒØå.¶gHVoÊÐïOžcª¾îô0æy6‡Tfþ–ú¶çmξéôØifNïhîèË& zæénçcÆì§6êc6æžð—fä›nhÄö.7j¿éÚþpÒ¨Îg¥N…WmÉ q¥>ŠÇ&ñ ïè-…ú–¿ä{6 döhM ä ¦evèhÛÉáÓÖfÑžð-¦mÇVr©nò£àèŽòHæd ®ãÿ%ÿò+F¨`v¨à,>óËXs v™F~l8¾s<Ïs=ßs>ïs?ÿs@tAtB/tC?tDOtE_tFot”óèkGŸtJ?jÞâá®tMßt̸t‘¶hXç¿6jÚfdm6ud¾ãGu®Žä(ïã­¾ãèvìàæt['QjÆã_ŽhlªŽçªŽð†¦jÚ¶êª6j6öuîõ_æF@î¶Þh«Þëa®êB¾ulWó`öh^hªîvËøõQ8íªf‡ßþkâncöv¡îèc¯lnf:nèl¯wñtžn÷Oæ—þí¹–ëmG÷Ç æaöèL§q`nè\¦ê`Ÿ÷ø¶wÿˆÇ|Ït«–舦w¿n„º¾åЧmdOwb®øhŽèmFjà~ꈦíT˜ìˆoy‰çæ}/ùª¦eŒ§j'æ^?ödŸë'Þv(¯ê|§å¿e–wy£gs@„…Vîh'od-OrAòH¿å.'ò+GZN¥çò-oók?z±÷jû±?{td³G{¶o{·{¸{¹Ÿ{º¯{»¿{¼Ï{½ß{¾ï{¿ÿ{À|Á|Â/|Ã?|ÄO|Å_|Æo|Ç|È|ÉŸ|ʯ|Ë¿|ÌÏü3EYÎï|Ïÿ|Ð;}Ò/}Ó?ýÑoË%àt­Ý{°×7`Å@}Ú§}Õ‡_^}ÿŽ}ä`þåŒÚþÒ¿ýÎ}Ü7þè}`ÝGþü á~âO~^þþ•þé/~æ·Uùx~áþæW~êÿýnàð?ßëŸ}î¯}ï×~Öçýî…}ãýþÎHõ/ð?þê—fÿÝú l÷ï ƒì2lèá‡'FœhâÅŒ 5j¬ÈQ¢ÇCŠÄXÒ!Á”*W0èäÉ1_ΤY3!Ì™9Oîäyçσ,‡ªtÙ°§H¤Iƒ"TÊÑéS¦ÿ v”JÕ"ѬGZ•:ÕëU‹aÅv-tìC­Yš< ö-S´ ͺËT-Q¶@íÒý)×&ߺýÞÅËÿRoÓ¾7ÿ&¬X'\Á7 æ:Øñ嚌>†œ9&啈eJÆ\ZsdÓªQ ]ÔòiÖŸcnn»Zöí“®SŽþ:›vêÅÁqçö9œ8òäžc//nœysçK;ÿý\útè"ÁpïÞ]¸õ’µ÷jOý:øŸÞ×§Çþq|âðÙÝG•¯q½÷öú÷+GÏ¿º}U…ßwý™wÞåÍ÷€ô]D w &¨à{.hà„~!Vhá‡Ö'¢€$ZÄ¡‡#šx|¾˜Q‹.:x"„)–¸"Y/¢Š6>X#†!âH7ú¸£Ž¡dG²X$’CΕ¤DKFÇd“XF)ec3æÿ¨WŠ9fƒN~éå™f>de™Zn‰æ”TÆÉ%g†Ù&™þ¹™¦š°Ñi[Mlê‰gžîÉg¡&z߃:ú¨¡‹fI(¥‘ž$¨¥**é›}véi`* ¤–Êi§¨>)'‘P"ªê«š i*yp¶Ê꧇Þj«Ÿ´Æ÷'BA;,±Å{,²É*»,³Í:û,´ÑJ;-µÕZ{­²ý`»-·Ýzû-¸áŠ;nÚ’{.ºéª».»ÜšÛ.¼ñÊ;/½×¾[/¾ù껯º÷òû/À ̬¿|0Âõœ0à ; îÂK<1ÅÍF\1ÆS|±Æ{l0Ç‹<2¾!“|2Êý¦¼2ËìšÜ2Ì1Oû²Ì5Ûœ,Í7ë¬sÎ;ûs?!ù,ªj#=‡ 111QQQTSgiiiibswvwMx¨ojƒkuš}nŽwyˆxw—f|¤v~ Y­_…°{ƒ“h…¬fгm¶y‡¨sްz—¹•b1¶k4€W]ˆlSkA‘hTžzi¬yL¢w[½}Bº|Zªk|§xf¼ci·iu´|k»r{ÎqÈr"É|;Ù{6èy6Ü[[Õ]aÎf_Î~AË|UÛkMÛgU×wJ×vVÈciÅksÅwgËrxØdfÕmpÝwkÙxyæ^MãWVçfIädYèwIèwVäfeåopårjäxx†n‹ˆt‹„{˜–m…—uŒš}”¤l€©w‰¥}‘¶y†Æ{„Ô}‚倖ƒx¾‚I´Y«ˆk¨‰s­‘xµŒg²pµ’s׃:õ…è„(ç‡7ôˆ)ñ‡6ò‘:É…FɉRÍ‘YÒˆFÔ‰XÛ‘MÚ”XÍ’eÆ›xׇhØ‚t×”i×–xΤ}Ý¢jÚ¨xì‰Hê‡Wè—KèšVð‹Cñ•Gð›Vèƒiä|ê™gè”wí Zð [æ¤hì©uî±|ò¦fð«p‡‡‡Š…˜˜ˆ†š…šœ’Œ•””ˆŠ¦‰•©‚š¹–Š¢™–«œœ²† ½›¥¹©€€§†™¢•‰¥–º€Œºˆ”»•…»˜˜ªŽ ¨š­®Ÿ°¶›©½£Ž¸¦—¦¦¦§¦µ§²¾¼§¦°¬½´°®¶¶¶ˆ¢À˜­Å±Ç£­Â©¹Ìµ¼Ê±¿Ð¬ÀÖ½ÀÄ»ÇÔɃˆÉŒ“˗؆‡ÙÚ–‹Ó–—Ä™£ÚŸ¢Ë©Å¬š×¬„Ô§‘Õ²Ô³•Ω©É¬µÌºªÉ´¶Ö¥¤Ø»¦×»»äƒƒå嗉噙馄㠛췈깖奥躤巶ò®®òµ´Ç¼ÄÍÀ³ÙÀ©ØÆ·ëÁöÅŸêÆ§éÌ´éлöͧñÁ¾øÒ¬ôÕ¹ÇÆÇÃÌ×ÊÒÚØÈÆÕÎÓ×ÒËÛÛÛË×åÛÞáÝàãåÅÅåÏÐçØÊåÚÚôÇÆöÒÏôÚÛãÞàçáÛýãÌúçÕåääïïðöêåýïðþóéþþþÿ× ü§¯ ¾{ÿñGÎ_¾qãò훸Oß¿ó2f¼¸ï¢Âzò2òóH²äE‹&Sª\I¥K—ë^ÊTs¦Í‹5oÎÌ©S&Ïž,®ëh° =~äÆTÈ0!A~âĬ'nÁ‚òä%œ'®žL”@]‚ »ò'Ù”fÏ’L«gÛ²oѬ¨Nè6Bࢭõª7AÑŠ–{·Ì™ÁeË D§ ]AÂÓŠJ6(¯Üä˘3´¬y²M¶oA«}–té¸& î»Mh4AÆ¥9³ÅK Aà6\±Áuʽ{¼,ræo†å‘Ö¹9fÎÎúDmÒtXë@±g§^2!9À߸ ÿé¯Ù$Ï€ÑØÜ:úT$]‚ þág9îÈcŽ$ÝÃM4ÑG|SH fpñ¢`XMãL5#JVÍ4Óì—Ù=þmöÚŠ06'£f¡tcu@ú8ƒiæ¨VßðÁÇ ˆ "i˜‘†!Uê3f˜“¹è§ €jö'feztæ‚=6ʦ£ U:H AÆò˜“ÅXD€e¸Y}XjÝ7Dz£Ï_†D“`…vÿvèe‰¤Ü©ù’®»öHcEÊôQC 4HAË apñÊ:†Œa”•¢qͽVa`Òô‡!}Æê!Œ4^…`I¼Â„+uåå«Eú CJiÔpƒ#y€aÈ‹Ñ8 ­}Ëà_s¬~ƒœŠ~c BÞf6+­5¤î¹¨¥KS›®£N>íVòÈb´pF`ŒQ† {Œ˜Aœ•8œ>UK°>ßÀ:j ‡ù㣑B±¯è ¤Ì"4ÒB a„1ÆÑGïæÌ*Gmf_óÉ~Ò\3Œ7çŒs®GŠŽcò c‚ ;Ð Ãg4;FÈÏî{_~¦fðÀK/œ°ÝžíÔ5×[óÿíuÏ÷ÄQB 7  ˆgÂ!eÁGn(ËS3HTŽDHÀ㜵ýQ]µÕ—á-YÖ~—ŽîÞÔ©“L4ñ„ƒ‡ DpÁ#f|ÁG}á¸çǘx9æ÷9‡j4ªB z{6ë­shË3Ï :eŒ9x|Á+¯¬Ò…ca‡JX!JQ»öN5EáÌùˆu £è…Âï°ò}ï\¿ý n³Gã¸.† $þ0†/D ˆ$ZA }ø 1IßÊæ³²øï[X£ŸÖ6hºÓ1h>Èáª<¼{íp†¬/äA x@[ñÀ]n‚ýò–ü´ÃqÝê~Îã`ÿ㢎Ûàã)òÜ4àD"8X²wM˜}êcŸˆtxAäepM@l‹ÄpÆÑháè†ØP‰Wœ+ËXBlTàçÀFœP9Äü ÁãbQ–<0 CŒË«ƒŽdCoÐAy.`ŽÇ\‚ `BptHM¨å,‡9ÍDCÞx’szH Böªy£e,„ŽiÔCÊÐÁ.^qJ´£ ®€&pNnBŽ¥˜Oˆü¥ƒü¥BìYå ùÅW–ñ4×Ħ‚ó|ÜcÍÀ/'PI}д`1PWXfEÈ!ËN3CHÃZ“Õ4g6ÿ ÒyðŠDj™ŒqÜCw¸p ”£|(DЄKHÔ;ð1J ìâ¡uÀƒ0* <ÔA¢(M©JWÊÒ–ºô¥œŠLgJÓšÚô¦8Í©NwÊÓžúô§@Ýé6ydˆAå™ÀZ¡V\ȼ„|Ž¡Ì·ýK¯ÜÔ¤¹Ïú‘ÿLds…Žmd¥,0ƒ.@‹êC^ð#.0JLB Ëxà2̱‰ìsÔú !â!B¢xúìª+Í%K²,’\U$7¼Áw4Á W8Àxy×ä=ˆ`#‹j@ 7ð+¨u õ‡Kl¬Î÷÷ÿyUƒb%@š#CåÈ‚²@†^ þ˜"ðZ˜c0E;( à"‘˜B3 roâ܈­lÃ$ª.ÔÔì'nÃÊ^°¶5ø0Ä8¼a†?<âÆÆË*_¤­”0Çð:œ DâD‚T‰œ!¥öÏ@ëu/ow;Vñ#Û°‚@^Ð"jú(EÿÛËsT±_î00‚Ë‹g¸ï9±r°>(ø`ç|u¹Õ&…Q# ¦óXÇÜ–Û\ZP¢ÄX„u±«]-½ÇD[S¡žl¦¥†̱c»e ]Äx€˜Ð@¬îAw{ÈÄ (0AÿŽåæìƒM°%*‚j1Üxq4ŸiÈ#?}ºm–ß[a ãHí`ÅVQN}‚ G#!`1ÜàÓM`À+^Š]Ø"kFŠ|šB ‚Ä‹A¬(ÓÅšÑU¯lã?ÚÑbŒ¬‚.C ïQƒv ƒ|0(8Ã<`€# ÒŽò¼b:€ \àÜA.ðÃk¡B† 5tht/ÿ—`Å:òmi › }@‚ ˜ð„”€¼Ü2Pp X` Px v@„Ð@Ñ C¸Æí¡ˆ…N‰´dŸ§ñp±Ëøvô¾÷Žë¢ à:.­;M¿§/µ pQ øÀŸ–Bj…ÐjnAÖg.D†l~óÃòóÉÎP&º¥ ô¼½ïZ.zšH wÄâB"ÿÃBþQ–ò8$.Q¿º?‚ð…O"ñ!0…àÃTÔ­H×Ì mm‹÷žBG=ÌÔ‚”Ç“yÿa܃ƒŒã8à„ð!°ApÆŠ0Ö ‚ʇUÔd$,^,"èÅn½¶hÀ¦[©Çqgb« Õ€ Ð!—1ΰ ¸€:`9.ðHAð;BÒ0 ñ3ýi9gi‚ð"Ïg"Ñ7 F Ò’hÕ71Ù§Å(|wîP‘KÀQ`wéöxPà éƒÜVø~ð' èAñ-{`Ü`X) 'z™!c†!áV´ö9êe€¿ö•Ęqa3Y“™rP >q¨° °R ”RÐG—1 H° ‡@ ip ò‡DpÓŒ™ÁrY¹ÉaˆÅ•+i}- “Ž(™Èˆ†y ¡ €Wò i€ÉÀ_ €I%'g€uò—R]­VÐ ¬&~ÀL¦²CÕ6’æÀ [°þÑuSƒd4™ø¨züx†!¹Œ˜ä¥ðKu€8p¹  /ðPà°0´` v(Žð{1Gy1ÿ÷ð-c’ÑSQD;hP ç‚@¼†ÃxŒÅ©€Âi’ˆtpGkÖÓð'JÓð‰À&˜4’Eñ ‹p/€}¦ ;°‡ðG5€8…ˆž¡kËÙ“MrNÉ0Šæn‘y9è-ê¢w"I’’& ˆq `rÕ°˜T ÞÉV$v‘>€—@éO•C4Ð> 5`~P›ñdñQhMµ1uÀK’m㘨¢ù©}ú¸ r•qC¬£‘ †wd -§ KUNõ@ÎàW¥>± L: >ðÍ@Ð`˜Z‡‘”"‡ÿàgqœhb†Ã©Ÿ+úe¢¯` QU³°Œ>ÚN`¦P> @ E  zÆ ;€ õ LZpn  0…RÇàQåìy ƒ€'f0ÁÚRŠTЭÒ:­ÔZ­ÕZ·I£`£ýBSp ë° šà£@êBê‰Ö{8ð—>ëã 4`¾0 ÿ:B# €ð!ôáT¬`©Ð’ðKBry^])¦ej© ˰óD ë0 RÐM ÆANÀ#0‹ð êi&ZvÈj˜ƒið*ð`¯Û€¯xóçx[´Gÿ&Z•„DÚ2Ÿ[‰•ê°aIœ «ŠqBÞ¨«ÐJÛ ˆy‰>±ñá:À ¶àb§—@p²b)À²-ûß@#xcŽÐf— ¿¤î`´o´*óÆ"y÷)–A ´yÛ—ñ 0£f ë€Ë€ ´YU‰ KX܆ Î- + ”k¯ÒðtP·’‘­¹Y§˜‘U~"Ÿä–?K¦`‰ŸcJ´“ ›U~ ˆH ÄARr9yÙ—”ø¶à ˜_K¹•û„°{˜0 R2 å5žW1º>{·fº·.ù’aq¬;¸¯»ÄaQF9ÏÿÖm—³/°»½û»À¶Æ J’q‘ !‚°‹1uà›iƒÖ+½z‹ºó6~ ¸¯ ¸a†Kv‰ˆïÐ H仹𸑋¾ék¹y°"’zT¢ë 8 Å  8` šñL¢¹¤ë¿ÿ;½|ºÔ«0f° W’%€êG–3 H€ •0gR`cH( ¶é¶Ï`‹æe2+¢…”2 î RÒÁyã•ÔK™©[½F‡¯ ð Ò‚Ó@ %bÄIš>OÀ†:@Œ °¶¶$¡Õà.Æbñ± »„=¾AzÄÿqn]¬°0ìÂxûÅÆ©üÂLÄ`¥ò!|Ëp {Ä e è0"ë„¥,êÐÇ™ð ð§°Î0›ÄábûŠ¥ŠŒÉ¶\¥+ÆaÌ¢Ãae„± ºÈ2écN€ ‰ P° Z‚Ç‘°gP¯ÿP™¶Zp å0±SzÀô‘ôøüTÌ-WÅóãÅ/œÎ‘¬Î¨ÑÂlÈçù˜ƒÌ¢DgôÇ’ Í1P¯@ ÛL#ù%D‚˜³nêxžåÜÈAw©,Ì˽|½QÉùqɵœ>Õ0 #«§—  ð1Ê P Zð`^0 ×lürUiH²…Ëî¸(ÿÑ Æ6ݤ’%ÔvB› WÅñ!P6¾7€;p¸phÅq¾—P°!°þüàZej G[T{«5€¡S ê>»ŒÓ,´e‰ˆ8-·9Z·ÀÓœ¡žÕP ª(R  ×­…a|$à+À_°ð  :àëh"‘Ñ2‡E |p}pic€Š vÐRð å#"·­ÒœÁ° *Õ@¾ëS :€é`¨ÑÛá þä¦{Ö"®ÛI8 6x•ÆN¹˜7¼ò`%ƒ4a@i8€´2i,JÁmP»LŠjt¤ L~”½çNÑCÛÑòG‘Ѷ؃¯ìö|ÿYÔO°*V˜\R{pÚ{À@ xVx%ÿp0~¥Ó0g•´R€Øç Í’Ä=ÜRå•Ùã}e$h«ŸfR„›@›ñ0kÒ%5¦Ôè-1p  6q »€P I4Xz5ý畽Ÿ7mœã­Žúð;R …(À•à41C[|¢89»€^µg²ÐHfǤ3€ xtö‚)Êê­NÖ’\ícœí0fI¸ «à.îN¨íË;‡ ¯ˆ±ææ (ðW‡‡&|=ó‡X19ÓàÕ`ÊáÅMß®ŽÙ!®º°®Ž™>;0²åXÔòÿûßè½Ýd°| d𠉽>˜jZrÅ Š…±µ< ޝÈûK¿ñË)ÏïýX]˜Ú¾ Ã'v.À¤¿Gë<`žËpv ·³ öðßó ‹ÀÐLP«@)[û;Iˆ9â\Sqâ,¿áCQßçPoòª{ÀRi(Eá”yH| / #»Çp9~໽í[[š$môæà @°Z|9|EÀ Α Âëv«Ò.–]òOÿ÷™}wpôÆÂG~ 0p¡P ;>Å1ù|Y¶À˜„ žðÄ?˜}ù~>·%¯Âvãß)‘ú|ø®ïá­/Ѱÿ_»-%ÂgEðiWRÞ餽ÛÌ Ì ¨@ ¡ÆX"ÇÜà€Tã[ÔŸ`ëôý#XÐàA„ ®SØÐáA†%*Œ8Ñâ‹ÿ­ã¨O_9!EŽ$rG»vâÃKEŠi’È®]8]–“¹K ” *H8Ð`Ñ.b ‘ ñR&¶’"á¡2Ož¨!=räÚÕëW°aÅŽ%[ÖìY´iÕ®{Ðã[¸qã–{+I‘eyg9ÓŽ å­öÎÙ²iú–á=Å@ Š $\r欚<}ïdvV‰\¹÷òâ.š ?‡§a–ûPŸ×ßjLÿX‘öCÛ·æÖM±wFÐÁáÒ}ë ɲãH„œ¸ñ×ÅóQ̽»ëù!iߊ°4‘¤Â… Sòæuæ-Ú!2‹ìðôêœpÉÍtçøxÖp%rÜøÏ#ÁÖzãí7ŒôÍÀt>áˆóH3õŠÊ^Øa‡¿vɬ:!ˆàC µˆnðA¦SÑ'Õ»ÄlSž€˜ÆPĦAïÕe„‚†˜j ¶Æà,óÄiTC6Ù׎ Iý&º–¶…5jØájÊv.¸fuæjš`@^vW½ËÌ|±@ØÄ Îwô2/$î0¤Î öàDŠTPÐäyç˜üà%OÑg–áf™M·ˆ¾Hé¥#vKÓjd­µÊÿó¢b‰O“ 0½_©“‰Íï‘¥_õé¬gN»#ˆ!þØÅ‘\@X¹àõaNt. ®™¦ÙâòOY‰‚S8iÄwšháfoš*u­Æïjx j‚ˆ;¢y°:…`sìZ{™o \š¨pºù&nsoqg|«£zmÙŽ¯–iá‡_q;Þ\ZáÛම%R5ܵfQ Ý HF­Â9w¤Óo¥R‹<ݸv»Üõ<ÆKAgFȶbÄKyßrÞ•C¢Å}Í7_ᎺLn5ûÀk’èë;ØÐq€˜\²:•Óú÷¤[®µKààÔ¶¸ÉøøRj¡|/ØmsK Þ¢7[Ïe.ŠõKW$ÿŠ뉇hK§Qª•ýeqJLàä.ýUXË…(Ûç s^‘R"oåĪ4ÚGÿGW%Ïõ¾²qògåœb‘þ7º.앹›årly1¥óò Á ŸiHÁ MBVáó}”@ÿãhå<8ß‘"Ëêßù‹gI#Mϳ§'æg×ʘÆœÆs¼cÂÀT8Ê#a† Õ§©xoVVKm­ýìÔD¢ò”_ëæa´‰ £)c¹X™ VÏ‚«sƒ7††rv†ý8) ÑÒp qœó¨k‰¿è u®‘ĉ´—*¹lmçÕû»Æ=Ôçˆ*Û×ÎI†ÿý¶ÝxrW¸¢›+Öªë´J„#¼×¾‹Ëu ¨î[ÉÕ:îöGð}ÆãÆ6Û<&xbóòŽZÇ/82Å*qc$/\€Tr®æcKYˆª£ÅkCÕÁ Z¼aÖÖlj¯â­nÅÊ,¢ór·Ž7Ý#œ=j¯9ÍŸ!Ò\Ôç¦îÕs.q5Kìh|ý¯’a ÙS²òv¸ge' Á…Ž•cÜ$$sÏ 1T’”·ó]×@[ xÄ'^ñ‹_üÓZ}s|XF7îÅD’G=°Kð=ÿ¸Ø?z4ب¹¹ ï,ÿèê;¿Éß][¼•§¡^#͆èìó6¹]ÀcJ„½L¶P}ýoSÜ´Õ°ÕÁ2@e=êÃËmxê—/%ågÜ©é§sº$`ë'ÿ¬¬ø}ÈNó=º ‹±£.Ó+6ÐË ŸÓ+ù­Ù¨®™{2Á¿ýó¸ýû>yË#¬;·¥2²Ñ³³#À¬/ÿQÀ²“³³˜û½û{± Ä@ œŠ+ÁFA?" žtë4¦A"«w2ÁS¢܈œ´c‹7¼Àì?±›4L>ró5­[6ò3½&c%â{7(˸e{@˜¶ì³ ´Àüû¾ÉAg·è>ÿt”åÔOÕK=UTÕÔQ U=bR%eTLETmŒÕTíÔHmÕ[ÅUYÝPZ…U_ýU[%ÕRÝÕMeÕ’òT]Öd%ÖUíUK­ÕauÖgUUWÎi½Öh…ÖlõÓb•ÖmÖo VeíÑnÕÖcÍÕôDÖe•Õr×uõÖwu×x¥VuMWtµWS•×sÝÕY5W|×5Ö€XmWl׃ÝW‚µO~íW}eX€…Ø…mÒÿ‰UNƒWxEØpÝXŽMÒ‹íØÍØ}X‰e×fõ×’Ù”%YmX^EÙ–­×‘MØ™¥Y‡QœÍYÝYžíYÅcYŠ…Ù ÚWµÙ•¥×{Ù¤UÚ|5Z¦å×ÕX©ÚšÙª­Ò¨UX•=ZŒ%Ú¢UÓ¬½Z­ÝÚ¡uÚ²Û“Zk5ÛµµZ®ÕjSµm[ª}[·5ϰµÛ±õZ¹e[ºõØ´õÛ­[Ú¯½Û³…[™}ÚŠ-ܺUÜÅ¥ª¼u\¾íÛ®[ÊE\Âý[±Ý[Á…Ô¦EÛ¸܈•\ËõÜѵØÀ­ÜÎ5]²eÜÆÅÛÔ5\ÍÝ\½¥ÝÚ-ØØ}]×å\Õí]ÿßÅÚÜå]Ù]Ò]Ý:…ÚàµÝÃ^Ñ}ÜËÞÐeÝÉmÞÖ%ÞâÝÄ]^áe^é-ÝîEÚÏåÞã=]ëÝ]åEÝèßê-_ö}^ݺÈÕÞó5ßë_õEÔø¥_ù_÷åßþÅÝô¥Çõýßú}ßö=žü=àï5^*Í\N^ÿ]`ûàé½ß ` öÞ Öàß v`Þß6`ê½à þ DHa^ana~aŽaža®a¾aÎaÞaîa¶aA§âj!âi1â#Ž$¶”%fb—%ˆ&Ž’(F)â!Vb,Îb—­b+.b-Nb/c1nX.&2îÿ3Ö4Vã/vâ6ÞÕrpš8®–9ž–:¶ãˆ¹cKÑã=~b?þc@dAdB.dC6OUP‚h €â4U k! ä …GŽd}0bØä(EfäÛ0€£!€ˆ°ä5FˆIU&M†ä\4bK&‚åEfK6XåxeÚ@Ef\&âXÆ3a€Š …FèeYf6`fÐR\0"ÖfU€u(P…l¦F ˆl.Kþh„F˜fPgx†bˆcK.‡hfàÈf"~äuRgqr6gtQ¶åv~gË Àç‡çÿq¾ç|ÖD°æqDÀçFèqVˆ‹.‡^°e&h†‚ðæKö•ÎE~Þ”&D ^fgËLf‚@h—Nä&å‹çyÆgkÆéL>ç}Öf— ›^éœVäbaöéÈåŒ@éX¾éi†gMÖÀdoFi €¦6ê„øj§þ‡ ë_ÖjÝ‚.j³¾ šþªn„OÆäPªEn[þe}Öˆy¶f„Ö‡—þg»b’–k–æk¿Fên†kUl‚ €Â6Ð|niµgkAiÚ ÑhÏîë‡ í0P[>íÛèfgºíÆÆk¤ÖëÓ.Îÿ¿~g[Æì_ÆdÃK^‡KVlkAj¯vlx¶éݦ ªvh}ÈfàFk¯nçªækÐÞå¾R`%ˆæì&ˆH±ïop^GÖØ&çÁþê–&é߸kÆ®j½&â—Öª¾èˆ j«îHf¹^múp›ÖïØFjxÖ‡p ¶EŽ ÐoÅfˆ®Îˆj®ãµ.ˆ _é†èð[Vd¸Îo§ pvçzVmvèúÞfšžfpÖièFjsfm!ֶ팘çŽcêçÛVë¯ç‡êßéE†jÿh?*iÖh†ê!Ÿð‰‡fmpfíÖNòî>-÷ò‚píÿP®ò0j²žcR¸ëßP…9Ö‡5'×¾i†Áänæu°iâYbRˆšnþŽó±&å:Wá®i"Þsx˜NVaF>t(¶îŒh„^‡ŽcIWKWaÿ1ô²>dQuR/uS?uTOuU_uVouWuXuYŸuZ¯u[¿õ?víˆn\ïu_¿ˆwžãñþub/vN¯ç~édÖgÐë?·d«NæH×l_^v¼Fåu0JqGžoHäH6vq¿w~dÒVik¸æå¸®ò’†ëé†ìz~gÈ&èt€uïæFHoÅžq|çnŽëpw‚·zow•–kóNxÔ^wRøóÿ¸^‡ïnvòopFix/iˆk†ërèæE.é‚ùˆ ödï÷dgg¤þî¸îk„/i†þ‡wîæÁv-׿’žf¸n÷Çr’ÿy1ùªfø•NøønãŽf…ŸîrxgJo’Fé¸ðˆ‡ës†kÿhmÙz®7¡vD@øfyµo¸Îvyoz„'è°ow=Ÿúñnæƒæ­ïz»¿r@„Ø c&k<'åéžóLžs§õ6§tDhfUÐ{:'kFÆô¿{ÉW˜Ÿ|Ë7uMŽüËß|Îï|Ïÿ|Ð}Ñ}Ò/}Ó?}ÔO}Õ_}Öo}×}Ø}ÙŸ}Ú¯}Û¿}ÜÏ}ÿÝß}Þï}ßÿ}à~á~â/~ã?~äG`Ÿ]~æo~çþÄ;éŸ~ê¯~ë§~v8áÖ_ áÞ^ï·àÛ¸~ò/ÿÈþf`ýàô¹öw^„0ùÇ~íñ`4eòM™ÿvÿ¸® „ \èðaÇN¬hТňjܸ°£GŠ!(iò$Ê”'*9òâË–1eÎ,è2æÍ‘9uÖ´Ù³ Ê B°L¸ÓãQ¤? &ÅØÔéÒO3FZq(Ö•«F•ÚÕªD°a¹’ý)öaÖ´EEšýêvéYŽeÛÂíš6ëZŸuçöŒKs/]À}íÞšÿ—)ßš~ÿNŒómàŸ… oÜØòÌÅF?ÆxåX]‚¹åxR²ˆæfQ‰9æ“S®¸¦štΩ¢3½)bœyÊù'ž~:hŸ/í9a¡9ÖI(‰Y–i&—?J晋*zg¢— ÊhŒ’îI©\Fêh¥–6jj§:~šé©˜²š*ª>ƪ¥ªo‚:ª«­ªé¦¯ÂºkH“úJë¬Ä;,–¤†¦­È>Êf›Ð²¥ì²Ô.$¬®œþzì¶½f«­±1aÛ-¯à†kn²¹’ëì·å²[ªºç¢ /·²~Iï¼øæ‹k¼éöûlO@<0Á|0 +¼0à ;ü0ÄK<1Å[|1Æk¼1Ç{ü1È!‹<2É%›|2Ê)«M¼2Ë-»ü2Ì1Ë<3Í5Û|3Î9ë¼3Ï=ûü3ÐA =4ÑE}4ÒI+½4ÓM;ý4ÔQK=5ÕU[}5ÖYk½5×]{ý5Øa‹=6Ùe_!ù,UexS‡ ///PPPSRgnnnMx¨gg‚kušxn‹wxˆxw—k|£Y­_…°{ƒ“h…¬fгm¶y†¨sްz—¹˜d8µq7TJšlEssŸo–~s®[X­vF¨w\¸aE¸{G¹{Xªl{¥xf½ch·iu´|k»r{ÄY>Ïs5ìz/æz6ñ}&Ü[[Õ]aÊdZÌ|GÉzVÙhMÚfUÖwJ×xUÈciÅksÅwgÊrxØdfÕmpÝxkÙwxãWVædHädYéwJèwVäfeçopårjäxx†n‹†wˆ…{˜–m…—uŒš}”¤l€©w‰¥}‘¶y†Ë|ƒå€Žx˜…x¾‚I¶ƒX«‡i­‘xµŒg²Œrµ‘r؃:ô„ç„*ç‡7ï•?óˆ)ñˆ5ò’:É…FɈSË‘YÒ‰FØŽRÛ‘NÜ”VÍ’eÜyÔ†kׄtÕ“i×–xØ¥vìˆHë‡Wè—Jé›Vð‹Cñ–Hð›Vèƒiå‚|ê™hè”wì Zñ [ç£fì©uì°{ð¦hð«p‡‡‡‡†•‹‘›šŠ…š…šœ’Œ–••ˆŠ¦ˆ–©‚š¹–Š¢™–«œœ²† ½œ¥¹§†™¤—‹¤—º€Œºˆ”»•…ªŽ ¨˜§®Ÿ°¶š¨½£Ž¸¦–§§§§¨¶§²¾»§¦´¬»´°®¶¶¶‚ŸÂˆ¢Á˜­Æ±Ç£­Â©¹Ìª¾Õµ¼Ê±¿Ð¾ÀûÇÕÉ„‰ÉŒ“Ë”˜Ø†‡ÙÚ–‹Ó–—Êš£Ã¢ˆÇ­–Ͱ•Öª‚Ô§‘Õ²Õ´”Ω©É¬µËºªÉµ¶×¢¤Ö¼¦×º½ä„ƒå癈噙ðžê¤…㡛췈뺕ö»…奥躤巶òª«ó°¯òµ´Æ½Åä¿ÀÍÀ³ÜªÛÈ·ëÁœùÃ“éÆ§éÌ´éÑ»öÍ¥ñÀ¿÷Ñ«öÖ¸ÇÆÇÃÌ×ÊÑÚÝÁÃÕÎÓÜÒÈÜÜÜØÜáÞàâåÅÅåÏÐç×ÉåÚÙôÆÅôÕËøÚÚçßàæáÜúáÊôæÙåääìíðîòööèçýïðûòêþþþÿÿ 8pÁƒ*,¸°aÃ|×I˜O¢Dˆð¼Á³¸._Bˆ +.ù¤ÃƒOªD˜r¥Ë-_®Œ)Ó!Íš oâT¨sçLŸ'{8&ÇuÞüÔ¡ó³m:CFl/š²hîj  “kN¯_Á²;–,J³*·rUëÓ H‹µiôGL˜;Jµ!„HP¤B~ÊŽ >FO&Û‡q&VŒ–aã®!GN¸Xkä”/þƒö Þ¸náº#ŽÁy÷øé#¨Ï£BzòäÁ–7O¦ëÆ·ÑV6|¹·ïÉeïvÙ2s>pÚâù›× t8{¤ññG}\¸p|MÖ'N¿üºÿ”gÍš<—¹Í¦';œøoݓەŸö½ÅmÚæ‘‹7& ˜>ÛüA8I<€Ôñ GåäãÎ`‚Å“O„ùD3ÄFT‚Ô`‡ †Øá‡"šäÞ{fÑgS|ÀQÆ¢p}UÈøŒãG]„ˆ3tŒ3~|8~W9ñ6;mÍ1Wá4J–‰Vf–%ò†"{_‚ÙâYažd¢‹1â9äàãuø1Æà8“†'«°“”3[>¨ H‚å“ä1ᎃZ—ZfÉhˆ^Â(ic*®8&A•6´[f…u>‚P‡‡w<ãÌ3j £Èe`±E~€ÿÓ'”€Q<ÓH9 Dnâ7‚(õL£Ä> b¤”–éU¦ž^*Y²èÕO ùsÏ8€ëÌ7ÜøñG#èRGg¤ÁTH*Éd¢ QyŒ;³+ˆßøá‡ tø1,±Ž6JÑ™hN ŸÀ;ûlÁfÂEµÅ¬½~C*ùdD #6ï`†ôä`¾‚¨¦Ù ¿VÛá?­…¤é‹ÐÆ,ó¥Ì2¬§%u0BÖ~=Ü8㌠o8 È7ôAF'oy«UÓt,Õ4ÑD3/ˆöÜ{%B¢,¢Ê²ì_Í"œ¢²Ë,PÍ;;DÔÛ6 u÷ÂÏ7xàñ!„|ÿAÇdœ!ˆÔù€íµÉ…#îuˆ†»¼Ú@d·}6ÁbRÞ"ÛÁ™I”ΔE^R·×ÝGE!Æñ˜sV8@Hû^ÕVûÐÞä“” ÎÄÉçâŒûûø¿eO>såÇ_óÍœ®yGdKÔÇáØhW4¬0°üáE«¬#H‚8 ÑÇ‚…\"óùŒ½tB8ðè /ÕËhÏ—¿þjcN&zžÛ‹HÞ"‘þŒÜC´p…3ÐÀ‹¨Cq2gÏ|î‚W•J´»o+Hû†0ìA¿àié_û_òÀâ?ÇX8-t!Y¦’³‹ô‡öp ºF¤á +(ƒÿr4?Ü! ¿“]…ÞÅ+v‰ˆk©W·8*0(Ë3žÙ´H³,‚…†8õÂ#lŠXÁ ¼àºñ]Sâ“…(õŠù¢‡JhÂ,!k‹b‰áÁ¸8&AÒ+SÙÜfîМ1ˆA$(f.”a|8º £AyY©ƒŒ£Q6Ê?2ûk‹Ú‰Ê—¤ð !‰EÔчÐ|A _  lp‚C¡ ~À ‰YyWÊ0‚2¥d„wd‰}öJbáø¢R¾Ä‚̦•—JȹLSdãÔ0ÀÑ /pp pA.à!yƒð Ía@HJâd–nçÿŒÜ™šõ;á5·ÉÂn2¦ýHv®ˆ©¾t¤ŸhN¬À.d«8…¾1ÈAH B'Br (¹cRÆI)TE€fÌ_5¨)[ù„¦m%‘c¨ cùBPá:~¨èÈ@¢6baà‚$à€t6"°ÈGl‘ Ñ10tôÚ(ùeÍÕt-2) m ËÛètm%ižOÃ1g˜á t¨Ã*0ÊeÈ ØBBp5S혔®ÊÄ–ºôŸVkA¿Ê?Æ®p±ÌóÈ+‹|‚Þ/¨`…:H3np@!ñ†$!¥€%LŠÒ!¨Ô]ó+ÖaÛ¥˜ÿ:1aµ­³°éÊoæ$r)!^Á .¤@jÄ*Îq«c$A²¸A $@s\CLP¦`ð™¡Âv¶Ó¨W ÖÛâ¡a,¦xZÃRœcA r. ˜ƒW“P€”p€PPPÀ”™ÌebÈ™ ɈFµUÙŠ÷'¹…0yËk0Þ GZë(G+Ö M$ 9¸Å*( v@Dx àßK<L'¯–ˆ«_à ¯u HÈöØÇ]ŒpZ6בB("ñxÆ@L‹Cà¾ù(ª9`Š+@«h¡ Û«(ÞËTö2f‰Ì`˜Ž÷ÇFsšS„á6»ùÿÍp޳œåÌ7$×a € &À€L å(* ½€%LbÐ=ÐA€h`ôà€Ž|h_Ð!ƒÎ´¦7ÍéN{úÓŸ&òœGMêR›úÔ¨NµªI]<ä¥è6ù„!Ö-$ )ˆ¸ @Tä#3Lj¡¤aĘ“ñšŒ©Ç”åXljåñ)ìêi“µ±# çY 2¶‹¬£븆~E2<€°(j>´±…-$‚ˆ$ pŒ©Ã—Ð0²¤Ânðƒ?Çüì®Jxª4ïA+LÖ@O½ksø[àQMÌb d¨B0b ©ã"DQ‹êZL#ÐNÿ°¾2{<Ì^€ ¡³wRwÄÖàõ2nô~•$ÆI«ó(@rŒƒ•¸®>S@÷ò ÀX˜ã;"áˆЂŽˆ‚'!bobÜùÌQcÁ{|pÎy.mš"\ÍØ`AŠ3t´.du öÀ 8 ̇$  ˆ¤;æ ½EG8ñ»üzÒUbL8œïœîg®¶èÇŠ6àò Á‡3®@‰¬¢€AÁxÇ“øª}W;*ïĶ F±­æâXŠUÚŠH±7½û•?zjÇH²šI+êe¿R™ @JÔ¿1õªÃ"·oÿ"¼v±ÏkP þKÙ¨óyÚµ }ó×<ús“±÷mÜ>r0àÿ Uùà w OwP ÐOàJð\àâ7=p ¨Ð O2= QÐEÀÜ ~q‡2MñÒyfvpxw^Ì×s ·?&q~—mì€ p P–€`­7`@¸ ° «À · Ž€'pCà-„3Bp/j7"!á{P‚ˆ!W£D;&vgmö†…tm*H} " % Ò b = N  =° °Áಠ·Np-Ð=0@Ðz$Ò´~‚!,"¾ÿ§ ]è…цÎW‰É·‚–x‰b(t²b ñ b= ´`Bظçk‚ÑMÐ"…YãBóŠø$¾Â‹Àãy–z(XyW†:ŒhØ!žŠù †¤¨I@ ú¶I­8!ÇÐ)§@Ð6 ù0*#U¨cŇ(‚yñ7ŒÄx†›XŒ÷‡‰”ˆBù@e€ ë Šrð m(y`% M`$ ¸€+Çp“Ð }èNà- B 3` Î cÀ à0LwG"O2/TbGö…ìH†(™‰ch†î(~‘mùÐ #WTëƒò$òÿC(.„%@ ±=Ð@*Nˆ>0…3*b`/þD"ƒ¢ œ÷‹'8wòx’šøŽ)Ø’\ñgE íà ÓŒ{°ÌèfrByPГ0úÖ>p—x™”BCOùx€õâ‚%ó~ Rs7w•Ÿ—•XÉ•^IzÂø=Ùy¾àÒ’$‚$7 hÁ  7°F`”@Є>ðÊPC .çÜð—¸8€ Ä%U Z((nw’¸Žé˜,Ø•Ëd‘‰†h¥SÖXƒù0 Ä Ó!¡ ·@ 7ËÔ.`?ðø?ð b+ÿi䈃~p2„ !YÕ!š' c‚r·˜Â‰|ð˜’,9œ_én1tÑàâO ð$©›õÖN …ˆC°¨™šÏ€RTïs‚À WžRù{U "Ä÷~À8}óYw*YŸ÷œ_4™ai  0’P cÇ!î é €ú–9F™—>°š­y…g/ä…! #éˆí·D뢭fŸ+¥Rʘ¿)t8–Σì@„¨ QPœp_ÂqÅPª€ ·€ &Wˆˆ0 R‚—?€—²8É ýâ3!xŽ~Ò!ç° ˆ›%h|B¢%ú˜[ÿÙŽÀ‰¢FÁ9¶Ñ§À°à  " †â ApNgp[Ð%ðƒÜ˜!¸0«ÐÊP(| Kèú…RÈ—Âç~R—‘G‹Ý‰Nºª¨Sšp-H0<•^É ¦ÀýW À “ð™ò¢+€ÅP f@8P‡Kà;€!n—~évuØÝÈ£sxŠˆ~#[G«` à9‰Š8‰ZÙ¨‹ŠŸŽ°(Z9ã•§p ÿnú5e)‡!Ÿª á dPÊt ’§]X|î Ÿ)%@ ±ÐªC€|P5Âz…1|yêVŽðw|Æz¬û¯5ÿ{¢D°/9S›°°°‘ç®õgp¦ùÀ–P`±P ]ìi: ‹Fà@p¢<*E2ˆ"×è²X,‚0p1›¨óH³ ¥h«¶y·¬;SÎÊæ`eœÐ@oñP g`Űx  _ÐüÖ!ñµPvNH{ Mz0c!˜%zH¯æ€ X÷b/¢¤˜È8¢g‹¬Tʨ[y ;û€ –Š©€Ë `bqðK†Ú¨à.àLÐ  ²£P°vÙ¦ mð ëÐe½éˆPhEÅNf ç@$€¹¾)ŸÅú¹¢»¶6›¶0ع¬±¥­ÿ€ ðÔ•€ì m` °  ™ZG _ô«€6à7°– >J‘4ðKIš¼4ʈéQ…°4R,27¬’#°3[º×«½œ½y~õJƒ Ã0Ñ8 ë _ œð»èf{èÚ70 Qp!Cp Ê42ðÍP4À3j8ƒ²$Mòk>#öuP>|,œ½̶G ™¡;jÁ«gé²ÀD¨ÀÁŽÐ¢Ô b ½À6UÊ oûæZ± 3ðq 30êc8 RTj2lPuð‘œ+¢\¥ÛKŸm±j~üÇrv%å° ÐƒF°håÿð Œpe°L0¡P= € ¸üë:@ €¦ 2Àÿÿà0j›6 †h=À¼Ã €ƒi¬Ìi¢Ⱥ¼Ë¼Ü˾,-OºÇš+:¹Lü.ðÇ` !<‹PÂõ(yty.p—)Å$3ðÿ¨¼ W¶W¨.; l¨`¤ `b@3uv&©ÇÂܯ&ê¯8[Ä8¥ŸÒ§PùЫE ë P°K¾ò L " ˆ° ôûƒ% r9Ú„ÒðÍàüÛB½âA ”Ç !ë~#w_ö &~/1ǯôŒÏlÏ÷\œÖÿ;üŒœo1W«š§°>½§…«ÕÙ ½$=¨ =‘QëÂ) Ñ]ÌØ8æ° 8 `bùÐ:Í\ºãÿ& jB¶DŒ½F¼Ö7 Ó4í½ùIÌ}"«À@„þÑËy ´0cÇF®´À Cˆ´  ?0ÕØÝh-¯{X¹[|G±R8D’ˆ+£Ïi[Ï/Ó3ýÙ¶+Ú!ÀqQ×à~ÀÐDÝeÌÄ¿@Lƒ- Þð(@Õ‰Ê BxðØ {`Ñ.!$¹S{âÒ5Äm ÚlíÀš-n"¥­×¨­ÚMD# ÉD‡‚ÿ(%:à´mÛ¸Û0!.‚ "çà90'ÚôMq ¹Ê ×̽ÙníÜÐ­ÖøMRQ×w½ y¤|­ANë~î€ Õá­µ`؈­ØŠÊåÐ;B‚LHÒ9pœ –p² "5–/¾6Ñ}â2ýÜýýÖx @ÁìßRq ȧ@;TcoËÄrî Ê4 ’PPizÀÛMqP'ãvÒP0r7@U!’¿Ð4ñP3?|œÄù­â]žÇŒ¯ÔÄ"² Ы€> O’!øÄÂM •Wª9T £`ßÛ@ º€W`jðöÿ@%Àç{Kr "†QKú5!Q˜Ûݽ*ä¹)ÞÜú}ß+nœý|éd%/ÀÃLr—Ç0 Ø… hîèÐ1Ìç¨ü Š°Ñ 8Ðä\–…漫·ºˆò².êæšæüÝ阞é1²ì ^VV2GMt mìe@ ¶Â Np ó"n 0§ •° ¿° s¤{½!ñÒ]¹é…mŒú7æ^îÙËÍÙõ.ÁžsEfþì».íìBíF`í&‰"n…ð ŸÎöa /U£OR(‘ØGÈ+ï–ÞPÇØâø~ïòÓM<™ãÏ%2ê‚Qêæ|!Ó  Æ“ÿ` JòÁ €W@ãþ€6;\è~ê‰cÀ®Ã—GìÈ^ìJ¿ôœŽôÞ4ï1HæHj²y8W—`o¢1ŒÞ6Pª:`´@‚b¹ðaº Æ ³°žã+ƒ"!lÉr¼i…ψ„ãô(NïLÏ÷ö.ò%O¬Î.ôé3¹$7 µó!U‰¹Ò¸P` A©ÌP"x@#0)À`p”kø‰ÒeIR(†PB½å÷Ó÷~Ÿô°û!oßn ô” l#Vb½9(<ÞÂÛÅr‚±x yÀ bàV€¹) !*//œY!R"/‚±æ Öªÿ_ß$ÿå쀿éã/ø³ëÔ4e\Òe&¨ –¯r_€LsðŠ@åÊŽ¹‹60_>wÇ¢åSf„Ç F¦1ìáÄÉHìn,·ÑãÇÿDŽ$YRä:“)U®‰’åK–.aÎ,)“æÍ6qî$©“gÌŸ3}–ôXÐÝÁ„(lLEáÜÁŽ.tgdÈcFN„GÏÂ1_0‰'ç‹" å4ˆPa¾b3føðQc]¾Z.lä¸qcÓǨ ïÔdaÃ-]¼qc•K6,Ùã´c{D•¹UiÌø`¼ÌÓÜ)bDÙÑÎðÌÉÿHL+‡zÉYEÓ­Ìñ0kN½®Ì™^ÇfЀ3M‡‹×ÓrœHçÑ´`„!GÞ~¸{Íïàÿ¤\yüÉ—£Ymm]$ ñ)˜ãø1ë!:näh•oZ´h&ŠG;Â00 /ÎP‡Œè¡­‚23µ^ÎX#š†ä2Â…6’åc¬Ãn0œÊ ÊDžPÔXtÌEKL¯(öŒX¨UPYå®ú6BÍl(¡‰$(p$³Ì²Ç1îØ;êàå“V0¼åË Òê7Î(CBjˆ¦/úÖâ†kDñ£Ï‹ñ¦7iŠSN¹cqN˜,Ûh8w6›;Ó¢ÂlŠÿ$¸¤ÏÔàñC{òqTÀìKH¢Õ`€Á [j8ã|n¹Á‰G&¹!ŠxÔ\3$ïtÕMëL Ï<_]©¨¶¦Ñ4ö €B‡ÖNP@¤úÆ@0œF?"N™+7ªjÐ!Žrgä––|â¡¥¯z€­ÇUjsýÜÕÇ«ò+Á -! %Šg1îÀÃ1˜É§ ×n¡¥ $P ‰`¬òáe|"šÿÕ0.÷º5iÚˆä’×yä“{b×ëxåEò­—7:†.\h¡¹Z «ÐÖIh9ìÀ#cêÉJ ZQà%”àt€l-æÅ#¾žgœá&Õgòè®”»ãzÖ±ÃÞœó¯Mé¿W5 ¿!€ K!Tw‰™Æ*=ô°ê˜|B‰XÄa¤Í‰ÚF Ù™‹ñcùG#Å&sÊ'óí>w—lÏ;WyÆA 5ÆéD ^°“Xtp¢‘«º=w©eQB®ÉÄ…ù£¸jšxbP(£\ö¨ƒ¸gøÁ•›QK¦ºêQ/‚aC!³²î©*wXÁÿ]03CýgPXD°’¬ôÏFàË0 X,~ÀZÈ4Ú—™«” tXàAA©ç5ð$ÄÞö,xÁ;­C‰KdbøD(FQŠS¤â¡R,fQ‹[ä¢Õƒ[Ü‚.=è]Zp ,¡= …ÑnAÆr\åPp‚ `ˆ¸0°H ô ‹W¹Fµ( :Ä!‹u¨ƒ!£REHFR’“¤d%-yIL>±kEÔ÷2H®x܇ÿ+‚妃E4"5«yË1°"  á€À&¡ eð!û«šXÀ&p‰åX•ž&ñÇ4Ï'£½vYïzF,Û'¡ÿ⑆d%+@0 äö¶Øà æ˜VkŠˆg|€%8‚R(…³)ÃÎ(Âÿ®¢ƒL¬â)kRóæ°¥àdG((A È@’i*ƙϤ`‹$Ø ZÓ4î`ÜìX‚ÔLr»BØ!àÁu`›Z0‰Tàjñ¸Oæ0ÒÖåÇ ò¡Ï® çŒg Ìš@¡7½‚N/zÑûIB+¶‡&•¡œ$Š5É5´ iÅŽèA Jcé¨9Æ4!„"$ƒª³Q}ÀJØHyøÆ71‡8â3¡‰i]$ De‰¹‚ºL"òõ\ÔDêB™:ÁÃŽÄ©OÝ+ýб6ÿ”€ZMˆx )Dƒ.Ò(Í ÔÕƒ$Í@f ƒz¡b>is‹†;föõ <ÉP•)XuV·»&4«’Å^Sm[=ˆc]©b¥²ùø¡Uб8ú€jIŠF=9{ ü`gœˆjkzWefcÄôéOi X6¡7¶›$l{Ý++£õ½$ nip>ϱAÌø—š¯þªÃŠY2œ¬ÌAjýÁ0®võˆÄ†aÌ͈טÊTìzu’^ÀÖ–Ãìí¤a›IÁø:4±"îé&b®f& ‰RÀ0ú¿z•Su CI¥»ü(#søAöp‹E¸ÿí«Éfæ#w¨¦ÂÓ˜=øÑáì\î§­•‰‹êÛ:¥8¾]S„’tgh"PÂh!Ì¡‡ådTWÒ?­mÇø ìlZ,!£`r…ÅK‹½ †«âÇ1è!b_nÄDQâl1×å#Ì›†¨R[œF ‘XB°Â ;¬@Ò`Ö7¸:ⵆ.X¡…€ÍNMPÒUávà¶LX= -fê%˜lÒƒP ±b/-=dò¨ÒBi*nCÆÛ£˜Óš–m¹æå–ŽâêzZ<(„!LãXÎØL4þ,ëÆ#ºëùñÐVX•;ŸwÞýÈZJ³\ÁP´5ÿâø5MÔ|\:áj¥>iï`y½×ž/*fOìÛ 7Ë’´¶[Ÿ;Ýëž¹¥f#º,dÞ@ª—fPNkß…>HATnsE»rÊ`ô2­Þ4Qâ "yèKtˆÓÉË_¾ø¶O ܵ,3£.lu T«šÕ~ðFÿ°òܨ­0µ¾u®äY¯#"°A„mèÌ<ˆ¸ ÑÔèa × ='Nª¹XeФ» á7úÒSÔPgúé)É ™¿Á–!¶BXp‡å-pZY1Ù–ç’âæ3»A|¾[aô@ÆÛŠÇöo+ér¹Ø¾@6È¢ŒÈ9ãÅRÈÆ®’KWþïåòšPŽ‹Ç¶èÓt1‡|DC …d…öF¸}dîÂÄÝ4÷ò _xâŸñ_h}'z6´É¹®b¥… w޹#5ˆaú˜À`øXsP-Iй!°†FS†˜p"ô>À³¿ˆ£?nË?¦Ó6¥¾jsªëȰcÃŽ ¨€R‹¶RœzXXH…H€…ƒ(?T؈øH;y(¸ŸcV¤ÂiÌ-\*m¬BYüWê*Z¸ \‚"˜†i¸˜bZ%òÂÿG<XDJ,—$üÀܳ¶Þ Éßë¶´G‘¬ÆU´Æ‰ƒ)ÌÆ@ÜÆƒü†, «ø z±¡è)½bDX øI @CŽ4EÀbF‚R8ùÜÞÉjZÉeâG߃F¥3¬%LI‚üCÿ‹É{‚T)‡št¥?ÁI€Ë‡Ì(3(`‚%€‚d ©-Ìy¿Q :¥\"¦t?=¬&iÈ©T¼ªœBWdI€ü$n¬¯„œ†…äJAyȈœšW#Àá`H¡D¦EKë;KƒËgÈY‘¶Í„Eé!EdœFþ“-D”tIX·µô­Üo4ž<G¤¨‘¤;ƒ(‡¼Âᨲ+›ÿߋ˭©Gü ¾–H¦n;/ÜÃÇÊL¼Ô;Ô>¬ô ÄŠ5Ìà|—9¶rÒ ]Ä•£ÐÍ$µÌ`´"ì+%:N¡EºdJ.ã;行„Ηܚ–tJÀü˽¼ÏÄ„H‰d-­4@ ÏÓ ÈòüÈ”Lì Od¶<ñ;£\χ{8øDº“ðLÒœOÏ D+ÍìÁÆÃ£B°dë´—×$Kâ’Ác” TÑ2‹»EHÜyÃôtŒá”Æõô= Å?;ÅÏ´õ´ÏætË–L‘LJR%­¢+¢‚[À¢[$GªR+u$8Â"Zèa0¤a`£,ÊRG†0ò£*…£ƒhÿtXR6mS7}S8…"“N:MÁÿ\ÌÖ|ª˜$PD„;Õ¨Èñ[]6 Ä´§* …Ji <›(EÀÛPî)Éæœ­#õÃ:ýÇû$KÚИŒ±'‘¼MN@ôŒCk<ÔžøÈÞcFÝ ÄF½Çòš¸ò`ΡsÂĈ-J=:UŒNKÅÔÕ4›õ˜}–hY,Ô%ü˜Þ´²û”¶ÁÃL)±»tË~<Õ }O±±œ]Z±i}Êj}N^½Æ¦ÌÖsÅNZUÉ]¯Ë‰V] MÜGDÕ‰13ŒÈ×T¬×ËìCjìÕZÍ u%ÄÅãlÁò+‡cÕú EyµC÷KØÿlõWˆ 1n•P¢ RrµØþüU‰:W JÑ‚ÝCz$¨Ý ¾~ìLJ5NÚ’ØÎt¶SôÕ›XÂŒEÔ ÈW¼ÔŽÍTsYáÙ’Mº¤ MiÍÑìÑÓ<¯R\NpٞʼnGíÀ—mX޽ÊÔÑrX  ÚtM>eËTâÔ×Uµ"¤ãÇÀ*[¢jÏŠÔ-‘pýÖUÕÙX¬MÁíÚ¡ÝÛ¡7 k‚!\M÷LFUå» •K[¥Ö¨t[ä|Û¦Œ[8 ×¢LAÕÚçÌJ¾íÜÇ̾c‡Á%‚ß|ɼ|XÝ«ÐiË×ÕÍÕyÍPœµÌVÍGhÔOÚÝ ³…ÚÌýWšÕUÿƒÚ¾ýÙÕ†üy¸ŠÂõпZÏ Ý»ý«æýPã„´gÛQ™ˆJçôÐ$äÌš ,<Ü¿J½Û€ížàÞ¯ý[âåJãE^„]Þë=ÊçÝ=æ½ÜíeØ„_ì¥Oï­K©Ý_Éí­ÝÝÏ‚ô[¡õ\ìø ÝÁ‚~h_Ö­Wpí×¢E¯FÅPçEUVßg4\ÛÝ`­iFÝåOÊZ½5ßó-à2+Á%\àáÇ 4U§WúÂÞ’¼ÌÏœ­,ã«–u\¶VmÜ Õ¶[ ÎZÞßdb’Í /Îâ}­6ÿI¶“Ä״휦õâ2WûãZ1~Í¡cž¸Ù"ÝUgª)þ „+M˜åYî]0¾š®]>þ<ÆÝRÎŽ ȇ}?..Ò§›AÆÛ¼5ä9&ßD._O>Xñ5c?æ°©µE­äIÅbÝzcBÞäB>ä@Þ:f .FØ-ãØu½â$eü Ìkã2qµJbÎbQeËyBaŽÄè`J³Ü[}ääÅåãböËaäcfd6T\¶æìEÅRN¬w…^o`>gM–cv&æLRÈàÖ”5äÑ´àâ<…ã[^gl®Æw®¿x–fpÞgŒý;HmEå_~îçW.fWžÓh–Wÿ,çy†èðåvfè†ÖhN®Õ&eHŽgFÚgh|¾èÎhŽŽeXöá”Îâ„‚b¢eNZM1xÎfÍÕg‚ni•VÍ…îÞúh•ä+›6iVèŽîéFöéŸ^êîUØJîËžŒ8­j«¾j¬Îj­Þj®îj)²h–VjŒë&ë²¾æ§ÎKG>Íÿ…/”Fê°6k¸æi¹Vç-ƒºjÁ*êLh»Žk´vjÁì³Ù$&e£vëžëºþkº^iÀfêÚµ¶|Fg¿¾ç†ìÆæÞ¦ë=†¸ÊVìtÆìÎölÉ~lÍl¢ìkœ.íÂ>íÍæìÈÎé£vì—Lã¶víØëÿÝNlݶmÕ6mÚÞ²= í(\làNíà~iånîá¾kÞîí׆íåfléáê¶nç&ìéþíä¦îíæníïðîná~î·oôFmò^ïëÆîòfîø~ïÜžmñVïû&mï–mövïËÖoû>ïüæoú¾ÝÌöïìžoüpófpùFpðþpoo ¿éÚ–ðŸê 7îôþî ¿p ßïèNp7ñomgíq_ðñgqÑþï·ð¯ï q Gñoñ7pÿñ çðGnOj÷íçñÇq''ò(—ò&oð/r#ð'‡ò+Ÿò?îÑÞr,g%çòÿ.·rGó%gò?s5ïq-s/§ñ!Ÿs:¯ò4wóòPwñUOö[wcÏöoWwQÇvvÏptŸwiçöv÷w·÷|×w ÷,ßwoxø¾wr?÷z?u~çô@‡÷x|_vÿð½ö„÷÷†Wx‰xsGxw÷Œv†td§÷ïô]ù‹Çx‹/y”§xWù•ßø‡Oyq‡ù‚ùƒ§ö—Çùwøš‡v—ßùŽ_÷˜§ùŠ—yy¿ù¡×y /w£ïw¢oy¡ïù¨‡ú©ÿxªçù¢§xfïö¥ú«wz¥—z‚{¬ÿú ù‰gù´ú­ŸyÏù°Ïú¸—{Ÿçú¤Ÿû¶?úµ{¸¯ú¼¯ó¾GûÀ|އø¦;ù®Ÿ{³×ú…ßût/|¦güŸO|¾§üÊ¿ûÇ·ü±§ûÌ'û²ÿ{À×|¤ÇüÍ_|¶oüÁ·zÐ7x«wüÎç|‡üÓG|Ò}Ï}Ñ7yÿÚ¿}–_}›oýÔ×}»¯}á~Ø·ýã?ûØ'~×_~Þ÷z߯ûð ê¯~ë¿~ìÏ~íß~îï~ïÿ~ðñò/ó?ôOõ_ö_ÿ• ÿóÿñ ÿúgûÿŽü×üïÿˆ,hð „2l¨Ð!ă #R8±"Å‹jÜȰ£Ç„ CI’ É“UbLÉÒåI˜$eÎd‰¦Gœ9mJäYÒçO …¢$jÑè?•VdšiR¤N#N¥ a9¨Yn%ÚÕ+Ò¯@ÅŽ köìÕ´jײmëö-ܸrçÒ­k÷.Þ¼'K  H "òÙ\Gÿ@à'ÁëXòPê_>~÷}ü/ðཟ°ù_âÌó]”œ¹\å¢XüOrÕRŸ# ˜šðèÒ‚¢v¼±óaЂqÃÎÙwqoÛÃ?øé¯ðÕ(*@v€Þ6˜þ‰P÷“ù<ðOp¹ëâÉ+ïSö¾!#˜Xßúºô¥„¯¨(€¬e'Ù?Ôµ‡EåàžBd%Y9@G})À'úñ·Ñ¾&j‡È`Eá‰×m¡„- Ø„D¨ˆ†ý•ô"gV#AëxH!žMÇ*\®…DÈ`ùgQp!­c^>nö¤Gþ³Nx@ÿ)‰Éw^Vãñ%oíGb„ÙHXbi9^>ë¬YpaR5fmI9æaš…Zžt ‡ŸÀ%kEŠP¢`fâa_xÐ'ºùæ^äÓhZ¦ £ÿœy’©¥þ³©žˆ.´ê‘B¾ª$E« ”O_G²6aE$ÆW–©Êº%¥.jk’­j©¥øú°qØgÙQi,¢ýéÇ,®­HÀ~çe[¯<¶©]—ža’UÂ'P¹$YWŽ~ìž*­’e‹`®^¦ãeÁEºƒ’YY¬Áô.4%aE2KpD«šHß´ ÓK¹iËYÄe*a¼’ÿò«tr>ðÆë¹w‘SªÔ—:NÛ,I–ŽüZ”uœØf:=qx~…z©³‚çÚªKX=k»Xœ…ª4“OS‰Ñª ~Zõ¨õEÜDî-zhEðueâ@b'$7o}™zdÛYçh9¥ÔG7KŸNÇd»¥wdw}ò6I‹·øàE{mµG ªŽºK0ˆ¯I¨Þå"'únŒc’ 蟆žxCã9šaëò×^Ú @iŠŽ–²¹ëýîè@åq9„8O×OÛ‚Ò…T=qä2VäVŸHÒð»r¯¥¿}ö½P°‚¼ 3¨Á r°ƒü C(Â’°„&ý)Pƒ*Ô¡µ¨F=*Rj§¥2µ©N}*T£*Õ©RµªV½*V³ªÕ­rµ«^ý*XÃ*V± ¬f=+ZÓªÿÖµ²µ­n}+\ÛZ˜»ø/.u…Ë]ß’W·Äµ¯~ý+`[Ö¹Úe¯m1,[»ŪE°Ž},dûJغ06-•½Êe¡’Y¤D¶³žõìdé²Y£Œ–(¥ÊiòÙÕ²ö¯¡Kj}[žÌöµri-ns»VÛÚ•®¾-ì]t+\áò¯¿¥ìqé2Üå¶¶¸zM.l¡{[æR·³ÎuKmY’]•l÷$Ý%IuÃûØëVº½®]Ä«^À’7±æ5.zë²ÞùƵ½‹}ïsã«\úò—­öUËw¥„_ì·¿Fë-;àòêw.~ð`µ»`÷6X.ö„œ`ÌNø¾ŽK†¼aÍÿvÀ%NKˆ óµïíis;ÿÊÕr¶îLo»Ûæ.3´E;îQ;-ç~·’¿]äu»ºÝ0.7¼»-ï#Ó×»>/¾ó=í}#ÄÔ[ê·°í ››àiF8³¾åCÜÚïòÅMñŒ£¶âàæx©ï⃑“¼ä&?9ÊS®ò•³¼å.9Ìc.ó™Ó¼æ6¿9Îs®s’S£.;ÿ9Ѓ.ô¡½èF?:Î{N¤3½éN:Ô£.õ–+}.S¿:Ö³®õ­o½êrá:ØÃ.ö±“Ýå^KÙÓ®öµ³½ég‡KÛã.÷¹ÓÝì>¯;Þó®÷´¿ý-{ÿ;àõ¾»Eð†?<âwNø¶$¾ñŽüÊÏÈS¾òÿ—üZ,¯ùÍïójá<èCßvϧEô¦?}ØIÔ³¾õRW=T\/ûÙöH¡=îs¯sÛcÐà¾÷ø¼A.Û» ¯øÆ?>ò“¯üå3¿ùÎ>ô£/ýéS¿úÖ¿>ö³¯ýí£'UÊ÷~ŸŒßûÄ? Ëoõ¿ýua¿JàÊ¿&v©ûîï~ºà.ý_Êþù_ÊÅÿµ„ Í \ à[( [0`[8 [@àZH`RU ^àFiÑcÐFµ°ûpà[4ÆJF¦…-²iÔÍnüCoÜQ¬ k,Ç ª… ԠOȆøôItD”CìK{œGŠÀàUB…Æ¢º4"8&ÐL¢?ÂNÏü‰¨ø:B‰Ý¨ðÌâã Yé8äL ulˆE xx9ÕÆEäŒd í…çÉBÌŽZˆâ«€‰IÅÓ˜H¦ OîÄw<Ñ8âU¼O£ð$WIöe åO–ü tô€Ïó¨O‘ð˜#ÄRF%P„d‰F@!ù,UdsT‡ ///QQQhTU`_wnnnMx¨klˆkuš}nŽyzˆxw—g|¤t} Y­_…°{ƒ“h…¬fгm¶y†¨sްz—¹œ]$šf6¸t8ŠiTŠu~š~l•yvºXF¯{[¸k_·}L¹{X©k{¦yg½dg·iu´|k»r{ÄY=Ö|7ìz/æz6ñ}'Ú[ZÕ]aÊf^Ì{HÉzVÛkMÛfV×vJÖxWÇdiÅksÅwgÊrxØdfÕmpÝxiÙxyæ^MãWVèdIädYéxJèwVãfeåopårjäxx†n‹†wˆ…{˜–m…—u‹š}”¤l€©w‰¥}‘¶y†Ë|ƒå€y˜…x½J¶‚X«‡g­‘xµŒg²Œrµ‘r݃.ׄ:ô„é„(çˆ8ôˆ(ñˆ5ó‘:É…FȉTË‘YÒ‰GÔTÛ‘NÛ“UÍ’eÅ›xÔ†kׄtÕ•i×–xΤ}Þ£jÚ¨xë‡Gë†Wè–JèšVð‹Cò•GðœVèƒiåƒ{ê™hè”wî \ñ [è£gì©uî±{ð¦hð«pú±t‡‡‡Š…˜•‡…›„šœ’Œ–••ˆŠ¦ˆ–©‚š¹–Š¢™–«œœ²‡ ½›¦¹§†™£•Š¥—º€Œºˆ”»•…ªŽ §š¨®Ÿ°¶š¨½£Ž·¥–§§§§¨¶§²¾»§¦²­º´°®¶¶¶€žÁˆ¢À˜­Å±Ç£­Â©¹Ì´¼Ë±¿Ð»ÀÈ»ÈÕɃ‰É‹“È‘˜Ø†‡ØŒÛ•ŒÔ–—Åš£ÚŸ¢É¦ˆÆ­—Ͱ•Ö«†Ô§‘Õ²Õµ—Ω©É¬µËºªÉ³¶Ø¤¥Õ¼¦Ú¸ºäƒƒå噉噙ðŸŸê¤†ä¤˜í·ˆëº”å¥¥çº£å·¶ð»¸Æ»ÃÈÀ¹ÛÀ§ÜÊ·ëÁúÃŽùÆ–éÆ§éÌ´éлøÌ¤ðÀ¾øÑªùÕ³ÇÇÇÃÌ×ÊÑÚÜÇÅÕÎÓÚÐÇÜÜÜÅÓáÜÞáÜàååÅÅåÏÐç×ÉåÚÙôÆÅöÝÆôØÖåßàæáÛûâÍöåÔåååïïðûìâöðéþþþÿÙ H° Áƒ*\ȰaCt²d¡sH±¢Å‹3jÜȱ£Çÿ‰9’É“(Sª,¹²eË}0CþÛ7pLyßà)s†,ݾ”³T U5ˤJ˜?‘ºDit©Ó“MŸJ*õ)Õª.¯b]©u«Ê®^¹†u vlL"Ù¥Û6­Ð¶o‚òà±cçN´t(ß©Z5kÖ*¢-çQsF ÞÖ²cÿ!»˜qâ–½F–ü˜le±—™Î„¹.¼zäæá+'Λ7q¨çåm÷Nä»víZÚ»6n½­?3ŸÌ­›eo’“±¯:œøï”ŧO+’fºu"ËÉ“WÚ4¹}¨íýóW޹oçr¿ÿ›…n%½qÚûÕîW•÷o÷½“[]®˜¾|Ëô}/¿Ÿu¤¾oÐÕ£Í0ƒ2Æxà±Í b|ƒ!‚D˜Ç•LÄŠ–À$˜3ÖØ´Ï2Ëx¸L"eâ‰H™ƒâŠ,¶“Š.§œ}4î—óÕx\SþòÍ>øhCÈó1x4càÀUÈ<ò’&T¹ŠŠð€¨¥M ÚDME ± 51¦Xæ™+ÂèbX8B¦ãomb–_}oÆG’7†¶G{2c 1D dÈ# àÀŽ n¬² ,û˜3ˆÖÀã̘ûP³ aH„i ¥gª‰æ¨¢²ÈæuêçWs2—ªSJÉÿ)’8åxCF!Òðñç¼òŽ4kˆòŠ;pIc¢9Y:ƒˆûL:b˜ðì“%™1ÎSê¨e^‹â©¯^¶ªfÝÚîQÉ:R> Â{L#Í4„bŒ#iœ¡EαÉ.»Œ†Ötj LÓº„yLƒ-©erkãÃ;¢Úê·à>ESA2ºŠÒ<ÒB„Ҁà ƒDb/y¬‘ÆÜœ()¥–bŠÔ§ËÀ“å2³N„†à!ˆÂ gÛ0I&ö7nb'ñœI+mñ@H¡…ÜQHÍaºÆXÀÊ>8a ŠXjÙ剚jI-‹ñ&š „ò£¶'·¹âF ±ÝL/½ÔÅ&ñÿÍjJû„ó 8¢q#MÇq@à8…bÆm«á`®h 5ÔäÌ">‚ò⡉ºÝ"ÜESsë‡7œG#Ý*w»tÖìŸÔO¼<Ë38|ð1H"‰ˆGf¤aˆ‡/ŠÞ"Û‘2¯|šCo&7ݪ¶îðêÖ_/ûY2!wºHýè#¯|ìÁGG AÆóœ“ÅX@eü̘k~&8‡ÿ—!Òȃ Œõ<èÅÈtîùÞÔ²w6pbzÛßR7v(]äðÆ‘ø # ¡, f1ˆ0láì0ÄÀñȈãO€C : G°€aÃv¹‡ÐQ²fÃd‹4¹Ê¶Ð.‹žQ‰ŸRÚñuwÔ˜nø¸I>åCeÊ@†”À;  ¾pþ ŒaÑqV&3¢Ñ— T^<µgDSÒ±Ž÷tæJäHÿ.¤èÃO¦ùSÄ@1” 7@Á"Ìpu‚›|ØWŠæa g á¢BB<Î4ÃM2RÈ›2E‰ÏÊD3š°+¢=%ÈOïåFƒ¦ñrùâ)€„¾À‡>ô dàÃG!¶N…Iûë_2CÊC8>°¤9©JóIÕ—œ®¥P! "QŽo\A—kÀ¾°V¼b\ÑìÀ%X!&ÒŦàa 09ƒ®c]<õ:RRê3ªÌlæT½%†2«"™Ç4¾ñYXá@‚«ÌP% Dâcø(›F¢³Ø‡þ0YòR–tÛ^UÛ×AÕu¯…í)c‹ÀÚÿŠ%&ÛØFc­@†2H YÀC^aVw8ÃV€@ò 8 J­­‡:uZ`ò•©Çl=WÊÝgÖ¯UÝçU«4˜øC2G"¾ `X yø(5àE"8XÂÎjM̵®$Âkˆä‰Ý욊2ßum·^ïZì‡_ù^> pTcUØ`‰W CCËXjPÀèÀœpQULÖ½nç‰à?µÁ„…`±Êšä†ã¸Æ :°ˆ@:0™Â#­K,`L@€,),  µ(FôQ¤àä‘ UïçÔeÚØÌ86)4U‚hjÿÖ¸Á tà (@ºx…*ᘸ"€¦¼ “âRZZ§æà’®–‰yÌ4¾qše;iJ'XÁ;ŠI:FÛY4¡G˜Fî| =K€ÉU:Ç,X!èPà*‘u VLC¸+B}Û˜AÚCI×ÓÁ•vŒABìŽ(ú؇, „ à¡ ˆÁ *àTÀ樶³Í€&\bÛ>؈mb ÛuÀƒ0°- <ÔaÛðŽ·¼çMïzÛ{ÞÜ+¶¾÷Íï~o„zÀŽOnúá‡e4V 0  ÈÀd°@+öÑ ­CÏ‘ Ô1­Î›åìPåä£gÜZÁ»Æ'ÿGù¥GÔQ°$¹ÙÇ¥è9àÉ#P"`YTiÚèBa T‚RXÆh—qŽMì`a:\¡»BâGBƒtÉ—‚R©žÍ+Ÿ#JLdA»4&Î8l`OØ¢ f¸‚ g *)KDe- ‰[X#ÛP¸ÁÓ‘p¶¥K„hcÖEGWxèÌÚUù¯süWÀêªJ¹XRÈË9öâF&²`†,L ÚpDçÎè@bçX…JáŽJH·…$¦ÀN˜àã†87¿ø…̓ãËè²WÄ`ʧ쓾šÅ[’¦p^šDÛYÌ`†?@¨Fÿ÷a ø&>¯Ä9,ôhñ]˜¬u›¦ƒhFúÝu¾ô-?Û¿*PjÒp7! Y`ñ `³@L¤`~è·gèÐ_5óïw6Ç"Îðx£#:y…ZMy¾–ÓWy–öu$•DI!1÷r]a"à×s¬àÀîÔz¯7 •‘À¸§{¼—3Î"6øFØâ,HQIx`!p"È$8‚•Gvs#€HàX衵Ò°@µ™`YQL b&8†>° ¬ šR>@ SàGÜ0„I8*—B óp3ö·uFc‚®õ|øGˆ'H5+ørØçC0áÿ² L¶„`$GB°08 g7Ð ð ¯ ºP ’`Y(€E. g4 DÐ9ÄG„¸)xLb£?¼Vf‡¸Âö„ÍׄN8yeR d`ÕP Kâ>0Pà >À ðh2¯  :(à.àw .à‡òQ"bb3`-r%²T¸^ºØ‹%è‹ú·Ž’çr-òdP 01 d >°“°·€œhA8q  Oà`BÜ8œ3@Òp‡á˜)2£)1´0÷—‹îÈŽ»È‹íÈ„¹DóX0!Œú¸Kp O×Kù!Ë ·B0“7@ û°.éÿb¯x‹xIÊ"c Xˆïø‘PhˆK8”H¹"« ¬ÀøhÓ`ŒdÐH`Lð7P ° µ (p °@P/à;@3@¹ ½Å áðP{PXw‹š’3ŸR‘Ør‘ꘑñˆ”~É—}ùJ„‚H {gì0‰@E94"/ gM`·@ :à> gR xB€ŠØ­è……À5ëB‚ujâ,ÎPÖkBY”€Ùš¿(ˆƒxQsX'ÂU2 ï Z³Õð`Ò’e~w™8 ‘p Eðt.?Ð Dp8Bµ…P>ˆ!6!*7ƒT1Òx¨—³ÿ G›¯©‘I›?Qvcg"ë7q0a2ï€"“¢,’‚âV ž€<€BðBpŠ@ÎpE@ †Ç Øi,šT*‚Á‡Õ‚|ÊyJ›éšD‰¡F9ž‰ñ=}'«°Ö€ ð5+r)Π ·€:€Q.ðHA`TÍ6 _ò/;ÓA+ÔFñÒ6Ü)6©µ"óW e󇬉‘z¡æ¹¤Ù¤aá¡Ȉûð&# Q° xÙ,—b™PÐ `‚ØX4* : uEZò`C{ EV§“·ˆšªÉ"c·”Jú¤éyž{ê§{Ù¡ëi›! Ð` ¸Ð{(ÿÄ ‘O§eY›ÐY j"ó`u¹Cfu wÉ"FèBx*ž&GžŠž¬Ê¤æÉc,Åž'áÄ剬` S` Ys0ɰ³à »  Ìàw怆ŒÀ—Ð)ÑщEР̀^H!8„sL=Ù/(‚¯0‡|è‡y¸-©¡æ ¥çê¤}Z.^1˜»¡dWØ 0;€ÑCPSi] &‰2)&¼°†¯ðÎ0¦€@¥øO·Š¬X,¢&Ù,{"ëg†0f‹¨Êulæª} ¨«ª=>VAò¡>gV­ —€Ÿ8ã, É h`9ÿÐŒM<&È'„>‡Íè3i©w0~„[r"µg¯p¤:pŽã:…#[® ۪婮Ú€îŠ>Gqðdªxa’¯Ú¢`6pQ›À~-‹H3´€Ÿ"3@ [|ùƒŽ^Џ~[?·“yZ¡Š®Wkµ‹Û¸’Ƶ' ¶b»~P@"qÁº`gK m+-F¤H°‰@ i` ó`©Dpf3µ,Ò’„«â#² «v³¡©Ê‘’V²³])Û + tó i€ÉP~ ðd&‰†Q·"óPºR°{¨XÐ §(~ÿ hËç"î çÀ Z°!ðˆ˜¼‰²Zë¸ÐÇ®ñ¸9XtÀÒë¤ÐguÀPv¦0¹ ð/N)'2 µ0©RðÍ9“›9“o0 ì@k‡Kª”“mU¢Sh@ è°(„0¾T¿ò›®)¬Â,¼]ºû»ÿðµ ¬ pb–åÔð'peÔ0¬òjIðdLk"¯À7ð80‡š°˜êÿÐ 1ÀP£J¡+Ò ¢g¥“j¢xˆð¨-̸eœµò«´9Ø´2 r p’ÖÀOF Üs´>€—0`RË€>Åÿ  gP=ÿÀ¨ ä,•²‡‡Hu g“,´ÁäŠÆ+L¿d|ÆX[µíÑ‚îÙ›„KÀÄ q, †zb¥ð!š q0Qq£å Ou$ÉÅpÈ4@1JÜê’ûP%ñrnpy0—aü¾¾+ƪ ÊYáoÒÜ/o¯P‘°mãf² ®FMàP æàRP•€m•P:‡<àÄ@°·€m¢àÿ» 1poòv ç†m–éÁÇ0ÃcsàÏñ–oÓÜÐýÐÁrž,AŠA¨HQ¾L{¾àÆ5“%Sp ì° š`Çxüz,¬ì·œ8ðÐiWð  ø úü¿ÿPvV|"Ž3dRq¬p¨à“ÐgøÀ ‡׎:¿ÐÜɊ˧›ŒRJ(r±UR ì@ RÐM Ô’%NÀ#0Œð Fœ‰& x“zŠËYù,Ó»2&l"ð`™•9`ì¿©$¸ã3‰§§LÍÉI=Ñ-ØÝ®¹ñ¡»"ìP«ó¹ ðØ 0¢Rº.ê]])> ¬P >P–¦ Ë míÖÿÂOçðcx ‘ÐgUZ«¶S'Æ/s™ÉK=Øf¼Û¼ýԾ݃*#eò  žx…dM¢Ëp ŠÆq<{ eZØx ¹Å2}Ý»\ ƒ@·"ÿÍÆ°Ì" )‹Žf§Û½Âé­Þ€]؆ícÂ#‘@w0AÜ‘`ªÄL06åÄB`QÒ] Õ£Ýÿ@rÁÝm"H ƒA &3LW)Åâ×îÝÞ»;ÆèýÛë +¢ì"óÜößÁdähQ̘²/ à~Ý0¾Ëì𠄇è : %(pß:ãQuÀ¾ÃNÝáBNØì­É}9ÜÅ}Üô­ÜÌ%£kªðÀ .:,¾¸  Ö­Ï3M©+‰BQ©Y9ì 8 Å  8P .Âh>³àç}ážÛEÞÔFžá¸AAî"«…° —“9Ô°tExð@ ÿu –†R`fIÈ7ϰ ˜Ð  © „Àmƒ|Ê2×RPY8@Z-‚Ãfû”ã!Ÿ|ä°¾átë².äµç.ò ‘ ¯ðBcB š"&FÈO°|÷¯:0©‰ žð», ˜0ÓpÀy0øð)x•² yfVÌR|X<`¯^ërNäu>äþ=·Žˆh"F7C 9í й —°b» ë’ 0Ι0 l ƒðé³&‹0É‹7ï˜RîçŽä_ñŸîí9=ˆÕž£‚„—¤ Ü `2Ìp ÿ P  9ƒ ÿ> W¤àúÿ,Àð Ãà!¡ªÜdr306‹MÌÌrñxþÌæ>ñs¾ÔHtX¸^&Ÿ% /3"$Ÿejˆ),¯ÙÀj@ÿÉÀjr3˜ã_â)hö˜ôè>ô"Ëöm_ôŸñSê4ÿî"òÞð`b ”pÖµ| Ê@)t¼žàP§ É``o"4CF¾Ž§(ŽñkïÌoÏÌDoñ´ŽÛxD¥Žß·û@«¬° K7&aSTËyÿº7p }8&øÐ v¶  €°»°¢Z6Ôâ,6E J„ãnBùJMëF¿üš_Xzîî&âëÔ€ÑU" ¶9¼ÿ¶!Ö0ß+š`™½)†Ài@$ ìŸ8@þ–dý—D&“2¦’ï·Ë!®~ùÑÿ$XÐ Av.T˜áÇ!N\(‘âÅ1BÔ8pßGû¬-[ÉIX{e¡’»æBî›G’’"$—!ABä>vú@#Ë¢^vXHñ¤‹ä¼‘%O.³VÓÙ¾›9£²;‡nf̯_7ì8¶¢Ù‰eÑT»¡[ŠmáfœÛPaXŸð>ž¤`$+ çÀ†~®î³Äɼ;bY0ç¬dÞ½Ž#éACk‡}@…Ì2ÆDÿ+®íµ¸k×µËû¬o¶ÀßÄ[2t_­,xÝ'dá}ðpælL-5d?†ËˆYàäž2›;6]t24€±Án®7tàÀñi¦óÙûv 'Ë_ n³ пàp#µÂŠÊ$”TbÉ‚H`Ã&’¬ÇÆœÑ $iø¸£BÈã¨`”bÊ©e "‰AªØ9#`–¡¡9¬Ùá ­Ñubˤýü;£!/*ÒH‡ÒÀ»ðš®'v*±`ÊÀ@šp ‹Ø`‰ëh2d1Ê#Œ4ÒÌ$|(Ï'’xr&˜4Ú ±ôxjÁAÔo@&—4ôÐÿ$Œ«PƒfËŠ1ÃÞy…•Wܳ2¤šâžXÂIt AÊØ¨=òfXîÔ%ž¬ñ©±eàHãŒ8k°úcG ° ôÇ ùS”#FM²¿dKð«§Jm6ü¨)ˆnàTŠ%Ø„EkäÄ|ö×ûfšç$Ô.Œ!8r±!8öÑ(&¹‡)æ6¿b…;6¢f]ö¿D ¨¸ ¡£6¤é¤bÆPXÀ’ШGBî´ÆAÊ…Ê™WŸÃ ˆ"ô‚‡†Òcùšn¡6¼TЀ FTç{öm`†ž 4ó {¤Å`Ä*¾8cy‚òc™ÿ>È8„B’Ü„çXP x=$Ö]¯8Ž`죑©5]œ õ¹. {›geßVpEiósnžÅ´4ᆲ5A‡8QÃŒŒ=øÐƒ h°ZFC]nQÄ X¢˜“G™š Ï´¹Ï7)n¹V˜7Ò >}.¡‡Õè£?Zf= ^pÁ…ô\X/[Ø9é;ôà£eîÙɳ[Y ‚&˜ `•t4e¬ïéÃþÜy¦‘†ź($÷V¿MüñNý ó lt6YÃü¿,‹b="ˆ˜ÿ%þfäœüð§eìCzE`ð¯MîÎBO4E»"0ãsûH† ,8®rÍä{ƒÊÿM7·òu ³Ûß’šPo=„ðƒ`pPÐbPˆÄb@¢¬LXÀ°Ñ‰ðp ‹©Êµ„p- \EPøÈƒ ¸iBÞ›ÈGÈâAºeñg$\VúÔ÷Áõ™0vÌÉÖ3’"hKVEÂ#|“ä„o œOpŠY4¡‡3Œ5l¨˜"|.x˜âG . RÄŠÿÁâE˜.²Ž“¤d%-yILfR“›äd'+s„R”£$e)MI1èBëñÖã‚Å¡ ŠðÁ-"§‹Všc1ºF° DÀ `„.ˆJdÁ¢\ 6L9Jcà¢ÌCJÿùOfS›Ûäf7½ùMp†Ó’¥c9 "F½¡€Š9â^©»<"ºh–‘S,@ (°€"p g8£*Ñ!bçð9&:Š‚øƒg¨Ñ=ŒìÃ’RÍéÈG².’Z\:ÿƄT'¸înç‚DáÒIÚ1 p ÑI苦 *g|CG8âbvЉW0'?¼àhõ”FF$! Y$ÝvÑ’nÅhA<úQÂP¯¿4 ·Ýé":Óø ˆ<Ð.¸D+vñ¸y`éw@«ý´* FoÙ“Æ4¦]Etúaª~ùÃ>•£S•ªF«Xÿ\•m¹Ib~9 ¸ÀKP†¦RT!BáÍàÆüzâJ ÔsCÕBÀCÜA’XIK^’ÎŒä)ƒ¥‹›Ø±x‘Yu˨E¡ÊØ0Jv0²KÑGz˜ŽÙíÀ·ðìI®rÈePë©Fs®&ª|¤Bˆ…„@ƒ 0zÅjh”X“V¢Må`b«:â¹T­êb•û/¤îã¹÷ŒÏsbÝ}' ›.À9›Pƒ§Ý]†‚@X¦f½¸Åš3î$š±`“¾‰tjÐ\þê×±ù=ç—ë¸éq»¸Ñ úVÐÚóË jõ•ÜÁ¬ Â8!… ÿÁ¶°Q<ŽÑ=óèÄþbm¾ˆX+c¹£‹*.ŠO É/©Im_jð_’L¡[ HBWh4–Êe½ƒZ ’,9#ŠwÂþ ‹GØ.UúÊT´†BxX¨¢í(mÀ‘Ù¤%ÌHš´—»Œ 1‹N6¹’5X²ëÌ<؉ŷûF6—½‰Z*Ùÿ’nñ}¡ÍâÅ&|ÅÇõ(ÑN"ÖÀÉ(›G‰PklLS¡F­ÍÝÀy8ø&wÆJ¥ÓjXpÃ!ñŒ^ÌàÐñÛ#˸U›ì€û‹%>¸ŠÛlg#¼Ñ&tø2 þ‘¨øDÝǸÆY:q”õd=†¹¦Œ¶]$ÄySù®)+sø$߯ö^~Æ9ôAEZÚZf{΢ tK }¿7aµ—qmÝ–çZËà¶·Á-ˆoð:`c`©‘n!¬{sÖz°à—щÜ` õæuÖ€ >÷ ;ç‘& »ï´‡žËm'}Ïþs¹Ï½¿œ×ôëœc¼~„GB ö`Á)²t'Dÿ"í^­Öjýo8˜{1åL$è˜Ô+ÜóJVù““l{S?9zûê|í§w‹p â}„•Ì`23Ë“)Ï8C{ÒGhãáÅôžGÌ:H* çÒNA~ÎA%>JRª€£¾ßJ»ë:ô¡;ƒ£´Ô[¸hÛ¾ÕC;É©Љ±«< q(ƒ2u!¼k9¨ë w’W8Àh£$íÃ$,=¶+¶ûÒˆ,s;Õ›@Ÿë¾Óq±‹2Ñø‘ D*¤›™ ?‚#鹇™…V¨„Yøˆÿc˜ j@Ä‚Á¤¯«>,ò>‰Š@üJ±,Cl3¡u¨ÿî)–cH¿"`ÂÙh ¨ x…}@•¨B¿ ¨¤R6ü7FË>/¼²¹,3¸3=îÃÁ3œ3ô ȹZ|Å–̘$ËF ËלM¼´?›è¿Ç܇s„ W[ǽx’ÿærãx¹ 6©„´ÍͰèG«,Éÿ`Î1«E— ÈФ‹Æ¢ÎšÄÅpœ{êMl/³ôEÆÆÛüͤ N†i‡ 6hìÊš{㻤šôžKBÈ0|ˆùR6²|´Ç:Ìì|Äíü ʼȌä0¤D´DÚÈâ„ÎôÌH[EÿDßDM«„E uMdkAØÄ2ð³Î."Ã[ µDºœ0P‡tÃò(4¢d.¸´<ͤImd¤§ÔϨLNÄ$=ZÌ®Äü|O’œJEq:R$Ý$P"%]%]P¦gšR*­RsÈ¥Pº8†g:†Z%,RbP¥c¢RALR4MSÿ5]S6•ÏÞhD×Ä‹Š$ÐvSÑI|œEOuaÐý—%Í ŸšË9œP¯„ÅkÎýHn I&G^ ‰5ÌBÅ׎0ܳ­ä1¾dò}⇠äþ%eÂReXf½4\H%ÜA.ß7nÛ_&d”^ZF[&f-Ö= ~åUŽÚ.f`Þ`ZMŸR>f=C…œå`öåoîäJ–å7ÅZæddÖÚ-þ>fÎb8åfgFæ7ÆÊI†âü+žÕS^Wv6Ÿ"µd€èVèu®çY®Žd3öÏ]nfÆg‚–æÿžfWfå Ò b^îærŽç| ç[Žf‰iÿ­Þˆ:ãñ ®6]i–ni—~i˜Ži™ži²íçwÞQã…hŠÞiž&i—õÙŒþß”¶hŸih>êŠižhp$Kc•/lôg޶éœg¥6j¤ŽhVetæçÒõèÖj¬ég&ë²Nj®Üãë³Fk³k±nëž.j¹Òtçê¯~k¸fjº®kŸžbvk¢^ê¿îk¿6lÅ^ì±GCÅëŽky&lÊžk«¾jÀÍŽfëÉ®ìÄ¾ì¬¶ìÆ–lÄöjƒ~hÑíÏVíÕÎlÐækœælo.ì×&mxFmÖfìÜ®íÿÔvíÖömàîlÛŽmÜÞmãná†mâ¦mä.mÞþíä>ìÛfnÝnîåÆlëžíá¾îІnçöîéînéoåÞìâŽîêFïÞVïãfïöþîìÖîõ&ïò¦oÏoùžoî®ïÓÆnøŽoûÞnóöïÿ.ð×ïüÆïðïô6ðý¾oïop§pþÞë l_ðçžp §n÷qp§êª¾p —ðoð jïo—ñ?q?ï¯qçðÏqßñ·p'q!rr/r#ïqñÇñ''r&Wr'‡ñ ÿp*ñ¿r‡rÿq$—mïòÿ&s/s3?ò(s5—r,Oó7—ó1Ïr/‡l½ns(Ÿò-¯ó5gs>_ò*g š.tC?tDOtE_t7år8_k0Gó=s:×ó>÷ó$—ôKtAwôJ·t-uQŸtJßôR7uHÏôA_õ9ÿtOwõT·ó;ÏsN?óV'uPu[u\?<×q+÷òZßuLwóav@?vM×ubgõ[gvdOöXñSïôb7ök‡õ/—õfWvgçuh_öpïvovkÏvTßvnvq?wsw÷jv_§õx'÷i§ö\‡÷{ô}ÇvuÇ÷y§÷|Ÿõ›nw{ÿ÷?7xiïw|GxÿõÿHw‚ïåt/w‰_xˆWup÷‹gw…×w†ïõÈÖöŒ_÷÷ø…wx’y‘ø€/ø”ùŸø™?x™¯yWù–‡ù—w—gy~×ùt/y€zŽïya¯w›x¡?ztz¦oh¢OøozŸz~Çz“?ùª·x¤Çx£¿ú°Çõ¦ûŸçù¯Gù´W{®ïz¥g{«§yœoûµ§{»û¥?{Šwúùvû¼Gû¾‡ûÁ¿{¯Ç{¾/|·ùŸ{ÃûLJüƒ/{¹'sÄ'üÃÏ|É_|Åçü›·üί{ÏzßHÓ?}ÔO}Õ_}Öo}×}Ø}ÙŸ}Ú¯}Û¿}ÜÏ}ÿÝß}Þï}ßÇý…H„$~ÿ ~þ0þã'äŽåg~å~è_–æ/ýèŽéç럋쇋íçþêwþï/þáìñ?ô·~ò/ÿƒé~·p´€³ÿù_í7ÿäOõ?sH’þˆ,hðà@s2,¨°!Ä…#RLXñ⿉#jÜȰ£G„ CIò$Ê”*W²léò%̘2gÒ¬ió&Μ:wò„™J€G (°O%»Ge—ò§€Tÿöú¨ÔDžL5J`R_ÿ1åºq_¢U¹šÃÒ¬ÀNÿUMëÑ«@ªì–=zÖ.Ý¢ÛFÝÿV)Ù¢~ëzLÔ)a¾Š:0—¬P‚û8JÀkÂ*˜ `T¢Ò'7rà_QsŸWŸv½oTh !©°ÛÛ3;Ù© ¨¾è(€€¸¡«þãl£¹üþK@aUs2Wäm·i€Q‰o<žØ!uU& mö‹YU4{‘¦{La4âfû°ÃUˆÕXÑŠ°¥åŒ°ÉH‘je Ùcb0–‡%>ø$BS¢ø{ÿ4Êu¡mIR*ìSš‚1ž$]X¦Z’$µ @ib6—¢”i%¡XM¸QœSa\Ü]Tcnæ`ÈÎ¥I öÉ%…%éY›©J—¡1JÔX¡…Èè[Å 7éŸ ÍWÀpí#@RÙÙèFŸÉ–Ôw&QÄ\s¸ Ô*™× 7ëšzžÇg¨xF§kJmªe­GUõá¢çå9 {¢ª,DIºÇÛ³c]$P¨Ê–µ)ÀQ¯ž[² ­»Ï­D¥¸`}rxP¸iªoIx.]^b®¾!¾•©°Eh—Â%™Ú\Imu@Ñyk”=b"B|×yìiñ’ÿµÄ›9¥ãE¸MäžZ##$ó`@µi¨gWšSfj‹X¾’$[„¥e]¥Ð­÷so4“”&— N'[‘y[TšѰa·Ýlû6¥­úéèyXéæ5­ mv¥xj'Gœk)C«Ï^³ŠõÚñ}â¯^š“≼LµJ™E×Ñ.ÆêS>4 ã!¥òP 'tD쌕x"B%%WH€-åWÈâjÍùƒY}’è…l×éMËMºT³ Ôzy¤³CºB¾#äéêÝóÍ;ÿ<ôÑK?=õÕ[=öÙk¿=÷Ý{ÿ=øá‹?>ùå›>úé«¿>ûí»ÿþùÃ͵)üõÛÿL®=ä/þýûÿy®Ã" ªPSÒËÅ*Ó»l…u”_R¾’&¢è‹Uì 3h×p­Mt¡S›Ôµ¨MT‰Ôu\)4°@žqļ dÒ|Æ3#ä–s¨C’¨p„#lŽj'•áá•Æ<&EžƒÌe23'L)f3£)ÍiR³šÖ¼&6³©Ímr³›Þü&8Ã)Îq’³œæ<':Ó©Îu²³î|'<ã)ÏyÒ³žö¼'>ó©Ï}ò³Ÿþü'@*д =(B¥÷£…2´¡}(D#*щR´¢½(F3ªÑr´£ý(HC*ÒŽ ¤&=)JSªÒ•²´¥.})Lc*S¨)-ÑIpº¡›²D§;]‰O#2Ó¡µ¨F=jKkš’ b„©q*E Õžò¨(A*V³ªÕ­ÒÔ¦TýªW­*Ö±.õª\=+ZÓšÿR¥¢Dª¡«jXãÚV¸–õ$j½+^µÊÖ“¸"}mÈ_XÁ‚U®|5k^«Ø˜î5§t­«aKVÈRÖ#‹½,fUÚXÚ=v®“õldûYŒd¶´™ÝìOG+ÚÐrVµ­e-EL+[Å¢Ö0•,lmëÚÔVv#³ýí]kÛÔÛ®¶·¸5nqAà2÷¬Â}*q_‹\é*wºº%Is³›Õçz*º¼­.x“^êúV»æ-*w§ZXëw½Çe/tízÞùÊ4½ouï{ó«_òî÷»å¥/€“šÛöî–Àî.~ù{‘3x¥öõ«w¯ ßøÁ^Hƒ3|Ò6¯‚ýÛ_ ÿ[VÃæ0C‹„Åqñ‹bƒ˜Æ#þpq|cÏØÆ=汈Å+ä!ùǾð}‘ áÙÇ”£,å)S¹ÊV¾2–³¬å-s¹Ë[îG’•Üa&SxÂGÎ1D¼¬æ5³¹Ín~3˜—Læ3ï¸Ìh¶sòæ=ó¹Ï~þr˜Í¬^1§XÆEv2Eþ¬èE3šÍqóœ-è@çYÒwÖs£3­éMCùÑ…64¢›jð©z×?çúºÁ^ðªsœìX‡zÖµþtƒ¡ín;Üã.÷¹Ó½îv¿;Þó®÷½ó½ï~ÿ;à/øÁ¾ðxÛ ¯øÅ3¾ñŽ<ä#/ùÉÛñÿ¡<æ3¯ùÍs¾óžw¼å òùÑ“¾ô¦?=êú¤¾õ®=ìcßøÕ Dö¶¿=îs/{ÚÿC÷¾ÿ=ðƒyÞ ¿øÆ?>òéNüä3¿ùοýòŸ/ýéS¿óѯ>ö³¯}Ã_ûÞÿ>øëÞýð“¿üÛ¿ùÓ¯þæ£ýîÿïÛÿùÓÿõò¯?þóÿùûë¿ÿþ—<ï•[×yÝ&Õ™ÝىݽµÚ2`êF N V ^ f n v ~ † Ž – „ê D ª K¬àI¸`ê´ ÆàJÌ`c´  â ª„ nD^Äáò`Ö`á²ÿ`¾à¦DÉ2aÒ V¡:a*áj!v¡bár¡Ž!IÄz@“íHÍ-*F9r„tO¬XGu<£†¸#¶( ‘„ô°ˆEŽl£ÊÄE5¶+¶#r¤…˜hGð( ‰HäŽLǼ ˆDP`HÈÔŠSHãB^ ¥<¤$&cØ–qÐã?þÊDD.š‰ SÕ#YŒdFþ‡AvÉ@dËwT$C¸Æ¾4LSÒ³°cCHcZü¢Ç¸ gì èÖµ £Ø#>ÞLi4L ìJ¤PERLrˆg€…9.Dšh%ª@Õ¤p‰BDe2d—¤eDØÉ@&‡UÕÄŽ %‹äá`ÜHµ„a„ FàÆé@É™lG–‰V6U¶ÇC¼eCÄÿJGâäV.g0ŠÈæŽÌÉgŒ D6D\K)rIX²ˆ¸ˆ‰cFý¸]ä “LÄ>0¥ÉÐJšÔË݉V¬äSR‡¼Ìj2ÄdfDTPäcêLx ¥‚E•°ˆTråï”â¾4•j`ˆ.Eœ0qzJV@‘r^KÃÕDÌTÎfñ@§m"qø…Oî&]ŒE1*„F fZÆÎlIÑp&B̓$Ù(åA¸n¨ÇƒèR¦ÅqLè5Š͸‡uÄfA0h EMh.ÄI²È^xH­LÉv ( ÄŠ`à 8îÊÙd(à,§àÀg‡<(- ×8Šâçq`ÎtL¨1DæKu$„äU éð4"ÅÍCDHv6DÈÀ¢åˆHìÄR(Äæ)å0©ãéF`Ž,©ÄÀŽ-æ‡Ä(\†Ž:i'rDVŽMBNC¼é.u¢”D—*Ï?!ù,¥c#D‡ 000QQQVUkonoMx¨fg„kuš}nŽxz‰xw—k|£Y­_…°~ƒŒ{ƒ“h…¬fгm¶y†¨sްz—¹œ]%°_»f–lWŠu~š~l•yv¯{[¸}K¹{X©k{¦yf¬u{½ch·iu´|k»r{Ën×|7æ|)éz8ñ}'ð}2ÚZ[Ô]aÏmLÎd^Í}HÉzVÚiMÛfU×wJÖxWÇdiÅksÆvgÊrxØdfÕmpÛxjÙxyæ^MãWVèeHädYêxIèwVãfeåopårjäxx†n‹‡vˆ…{˜–m…—u‹š}”¤l€©w‰¥}‘¶y†Ë|ƒå€y˜…x¾‚I¶‚Y«‡h­‘xµŒg³Œrµ‘rÊ>݃.׃9ô„é„'ç‡7î‘=ó‡'ñˆ5ò‘:É…FȉSÌ‘XÒ‰FÕ‰XÛ‘NÜ’TÍ’eÇvÔ†kÙ‚vדhÕštØ¥uì‰Gë‡Wç–JèšVð‹Cñ•GðœVèƒhå‚{ë™hè”wî \ñ [è£hí©uí±{ð¦hð«pú±t‡‡‡‡…”˜ˆ†›„šœ’Œ•••ˆŠ¦ˆ–©‚š¹–Š¢š—ªœœ²‡ ¼›¦¹§†™¥–‰¡œ™º€Œºˆ”»šƒªŽ ¨š¦¬ž°¶š¨¯¡˜½£Ž¹¨™¦¦¦§§¶§²¾¶£©°¬½´°®¶¶¶€žÁˆ¢À˜­Å±Ç£­Â©¹Ì´¼Ë±¿Ð·ÀÊ»ÇÕȃˆÈŒ”È‘˜Ø†‡ÙŒÚ–‹Ô–—Êš£É¦ŠÆ­—Ö«…Ó©‘Õ²Ó´˜Í©©É¬µÊ¹ªÉ³¶Õ¢¢Ö¼¦Ûº»äƒƒåæ—‡å™™ê¤†æ ˜í·ˆëº•÷½–奥躤巶ô·¥òº¸È¼ÃÍÀ³ÙÀ©ÜɶëÁùÆ–êÆ§éÌ´éл÷ǨòÀ¼ùÒ¬÷Õ´ÇÆÇÄÌ×ÊÑÚÜÃÅÕÎÓÝÓÌÛÛÜÂÑàÜÞáÞàâåÅÅåÏÐç×ÉåÚÙóÇÆ÷ÓÍòÙÙæßàåáÜþäÏôçÚåääïïðïðñûìãøðéþþþÿõ Ô÷¯ À‚ó¦M“W°¡Ã‡ë:>¾)gœþyäC"ùsÝŒŽfœ±‡ e„QÆC¬`F<Ðò@à+¬Ä§šÍˆñÈœíª6o‹3Ï ùü ÃBêÍ7òÜà 4Ïñ€#ß[d}l‹/Æè_5 ™ÿà=‚"P9>ª5\ÿü›sB’ý-ØayϺ-Ç#Ï7|ð1H"‰ŒÇh¬aˆŒƒ Öp¢n:Ó‰7÷YÍ£å 9_b-=‚ðÊÇ|äá¡wÈcN``ñ@"xœséñ=ß<~ö7údi4ybìꬨ¸Í_;Þóì´3‡ŸšÁ‡ fZƒ 4HAË blË:†”!ø@>FÖÔjÔÐŒ á¤ãÿZç:¯õEvâ{£Ct#…Ò74Ä…,¬¡7xDÂ`ˆ¬ACwÓÇÉR½YïsÔѾQŒ{(°{?zH}öD¾ÒôЇ ‰ÇÿºAö‰+C# ц1¨ b0ÔrW†í1ï>Ñ’V§vT8°ÌŠ43]¹õ¸Fî‡%ùƺáB…ÁPSâ@¡ˆA Êã wEedÑ_9ê¢>¾¸ÀêÈ{«Ac"fƘ¨±ù8ÄÞh«Œ€;  À†üep…\a¦vôÂò1Œ‡#ÂV¶4ùÄmÎP(1ŒÁ cÁn`‚E ! ‚à!lŇzñOÕhÆYD…xðH€$²"œ yÈ.’‘eÄf6s›n”á a¸#@—€ThúÐ@ñAšÆpš¨Ø$–èM¯šÔœ&"_ÙÿÈòõÓŸ AÄ8Ʊ†+à± X¶Ð X°‚ cØ6 +ˆ‚>»ÀO5ÖÔŒüª%ñ4XJŠD€a ¿°ò ÍiÈአÄp° 8´šÐ(G=ªŒb+¤IÝ']]9ÎvV4ç»Ç/ª°…¢Àn°,ÎÑ"e,a¶À &Psÿ`cNèIXæy“·Â5®#mª]ÏèÔ»‚¦×8 8 |@:Ș{òŽK(@L8@*€)(  hY&›œ9¤yÃn<Â,Á‚»Y¼’Ô¸Ã=Í4ÄñÜà:ðD ƒ]ÀB>íÈ+ `»›xm)8e&”R YÈÒW}Îõ³î.|M*tøà<ŠhBŽ*ðÿÀ{ô&sТVÀ` ù,3ºHdÌ™U˜½.®T={Ð$ãÃ÷p@,„$ 7  @r”#LV¾òšp‰,û`>†•‡áƒ]X¹x†•ƒ‡:dùÿÍp޳œçLç:ÇY [ɳž÷Ìç>÷¹~Ç?&¡Ѐ P d±TÀúpEÑÌñßHdÊ  Ò(cRUÀe`ã PR—Z/úhFqvq_\(@*@‹0éC]èB#*JPB ʪ2̱‰ì€M%Ë!,WAPÔJr‘3Ü^S£”‚먇8xb+xâM@à À€ÿV QyàX"jZIà¢W†Â Œ„’‰hh‚ „ ¡-³ü¼Ã²9líoØ.éÊFÄLd YÀ”+àˆÀÁ€-ÌÁŠ ˜¢•„p ILAeÿIÏz¸±o~§J™Vy—*ðUR{Ô'.s¼(ˆ<  €D&þ êÃð…@j]‰ø;ZíÞ¢µö©}4àu²¹Oó!©¼ÐÈ‚f‹€‚,EÒ—.Ÿs@ÖîˆzÉ`ÃLkO;j /<í­_»àçK}†NëV0 ë(%Æ5N‹J´=ŒyÉOn*g9 àþQ/}œ5,î½æïíúß xÏÐç`€êà}@c€ÚC&l(0ᵃvïƒM´"÷)‚j1ÜÀüçSE2y¤,ÒNP]I/úу¦?íP+V¬BÑ „ˆÅÿì{ß&(°Å.l! ›šEB îK!!p-Ïüælw¥ÌL-}!Q;2Ad8}×·#Ô`v@ Ô`fà>PÐ >À ðÑ » P`-Ð>pBÐ~Ð(Ò„C–w&Bw8‚OYz:G}5hƒ‚·#`Ô Ñ`Bà 0 ú€ H`~ë nia OÐkB'8€£=Ð|8tÔ¢…¿ÅwÒg€ †aøu:ȃ±€A¨K€ ÆÖK K8#Ê ò¶M"7P úP.Ccùgaz§EÊ"R¢Öw¥§a7X}1 / ­ÿ°?hÑð€fÐH@Lð70 À Ȥ &p ±ðP.Ð;@3@º  à0L{PÏfa÷a*ú@©"€cxs†¨ˆ‡jý ìVëà}€~˜R.P~$€ µ >à÷%ó&ò7‚@p°WGS.f@"Ïæ#ÎÒ ¦|¦Y8Œ4Èuì¨õ±aB î E£ÔðЃ҂ïF8 ‘p E`l-? ©DÀ6串°;ŽB"ü'ÿç[âoÇ‹ âwQuˆˆ˜ƒô&ãý)ÊRò€`F ž€<€BðB@ÿÍpE0 ÷Æ i,]D'.²Õs3'W ’^ç‘ÁèŽ"9nÇ *t °4þÁ)Ͱ ¸€:p-àHÐód!Ñ &ùÂ2ì£?6´.Yc‘NƒTþñ)Ô5ÐWˆ_è‹y ’Õæ0õá# Q° ºØ,œ2PÐ k‚#XÝ“9 5TñP@{`ÜÐl~haåxŽ’w‰uýñ”Ö—ˆMé”.áç °` ¹€rýñÑƦ§Xظ ¹“=¹yÍV9ru‹&#u)É,ö1šÉCzy€Ñ)eÓ]…~­` S@ ðeuPÈÿ¯À »° ïVºÇŒp ¢²A°PXÌÀ ÐP‹àp6¤ã#x/ýq°P| ñ|ËWšZÇ—¿ˆš©)&©· ;€ÑòC0Nk°] $`_vx¼Ð{°àÍИ€@ïçÆVö÷ˆÓœnâ"Ê9ñQ°{½€xIªÙާ© x!i c p .Y*~ l€ È hØPÀls—Wk&p-Ð$¾yFÇ‚Nsuúr æP P 1X ;t 8•p§1Á¶&i×åbòÆ&ª 1 h`=±  ºEw…ñ‰ÊP .)*Bÿ0µP¢EÀ€Ð7ød¨ý7’÷(¶ö‡¤Ù¦>ú£rjš tZ‘VwPp#s°ã©°_K ‚J¨71—H°Pˆ@ k0 òà›DpR懚ª#bµØ©Ä”¡ê¦@ ªAZ4®@¤‘0À&Ȱj€ H—×¥†º‡lþ!¹*&'50Ì€BàF›š× fÚ ZÐC"§´£½Ø£Ð:ªoZŽÇk ¡×å¥`uðKû¥t¨à.N`)õA ¶°›Rð9‚ÿÀ õ°€ä¬@“7W&褥p‘B47ƒ+°Óÿ*ª8ëîp±Ð ‘´eSí0 qPß5 ´ð JIp]eJ°À7à8P|š°ÙXr05€j‹3ë© éàPŠ@7-6"ûöœá°}ùŽ5»šõA¦÷Z“Æ@kX ëp]0 Ð±´ÆvYê8p S°&Âwÿÿ€ =À5ÐôZ-™²)[ä LTÿ5 yJlû@bš Q ™ÊbðV­ ·’àš´e 3¢ &’&TÍ`lÇv#ëPÿŽ» >@405aäŸrÈb°.‡iµºá2ºm;°ÔJI'p  YVÿfå0 cÐN@¦P> P VV  ÂÇX ;€ ª@ ¿ ¼ÿp /vgÆPf^æ+k ƒð9hàfœexæg<Á\ÁzÖ5a¯æ "wëGe2ưÊ  ¸0¸À1¨‰. k² Ãпþ p ƒËY*˜ë&Bj©à“`jsyÀr^È£¥kÄpû¶Ô5&•°Ó MÐR@-eâL À°µöE󶛺Ú2ì¿„0ýš#ï0ÒXYú°ÛbèA9/£oK©Ä7+­ j½‹èëp(É 0È @•-’«^éVÿ¬)> ­` >pŠcLÆPÉ•ì¸y ã¸#æðµw ‘`ú°³ ÅZÕ“oñP ëҬϊÇ{œÇŸj³§ °À€~©×Å*¤ ¸0¯Éd&UŠ Y#he|ÉÿcPƒP¬<·¸Áµ '‘²‚7·z­±œ³ð˜#‘PnQˑМÃ@]<ñ?ÊÄ&X+ëÜ"pÌÈœ[õ2Ï,•@ /2 # B=åP,w¼Ž°¬Í}Ð%Á#á¬ËälÎèlnœjH`$(*ºÏ—ì¿Qò  ç :`&&P΢–ÐPü:ЦûÊ.ÍÍÝlz9RË·ÿ ¹œœ½\&ºÕy~Ä ^9;ÐŒÆ ¼Û€ ½`p|J82„Læ¨7ë 8 Ä  8` aö\ÄÿzÄ_Ä-Œ; «Ç¬à<|#lË4 ï*H€ –°{R@#ȸŽ Žà¿p` pâ–©æ4ʲÆRPS80T‚4€^úyÃÞŒÐ-}½²LÖ; ‘ °à?2 ÷qó¤¸O íÖ¡:0»P 1иG )€ƒ *í‡úat§)Êà_ Åœ>6cËÛ Ó®lÙ“ÐØ"JÊ0 "³) © —€[¼ Ù’€òлÿàÚŠÐ.Àÿ+n@ëƒ%4Øt¨—K2éØ,éÝ)É=ÖÈÓò}ãyZ´ þùk¢¼¸/ »À·åà  åà°ýu 0Þ 2‚œ»ì&)Ó[è¸wÈýPÜñMÙ{ ÖQß7ÖÛ€¤ßH ¼hÁ{~0 ë  ë tõâ#)£õ¤j2*w‡Î%ƒá~Ù~ÜC®Ü©ÂÜÎÞkR ”ƺ{ Éð|{]¥À0À n0I¤ò`ž=š=2ÏM2ï]ÙBžæj.·¢ÖØU› lÒ4òT7С;p¸à|r½°_ @kYp /² Iÿ5Ôâ,üÑõ–”ú'ÜaJÜóMägŽÄbâÙÓРa" ·ð<úä"0²/ñ'R  ÓèÁ…a|°!(€^:9€>á[œ®E1ú,7!—8„70"ÙA~éa]Ðm®ia1 “ö_• ÊDù?¢b&=5ÀvÐÎ`b€‹ v Rð UYÌ#…¡ãÕN*ë`¦lÞšì˜þÒEß7—!N[¡"+F'þ¢L½Õ˜âê~ ,{0KàöpcàPGeß=PHpXŠQ@ ¢¶ónéÆÞ‘|<ò ¯ ün»µ¥”¼Þk’΢ÿnðnrc  /ñ~”òn‚ Ä«6„¹ÐŒTŸ ï­Œïk^éhÞôß\Ìíì­@iBëòe^¥r™+wÐÞWà.îäî 玨¾üâk Ê@5@ÕÔU :`é`¬Ù,òÅîô^ò2ݡҘ*ÇÓ…õº^i)n4{Ge º·žëYä?h kð/‚Ä‹T;±• v;x¯÷õnÜ£Oß(Ï[nBÊ÷óy˜Â«wþKuÅ 8‚’í{¿@ À·•IÉ7é¬ rð.»U60 »÷ë 8€ ¡Ï8{Ÿé¥ïOÏæRÏì´ìj‚¿÷ÿER@˜›àËñ€G82Èç¿)1r  6°s »€P0 F:w©ŽÕŸ÷ôNò|ÿ$XP >„ NSöá;eÓN,§I‘"R¤ì(‚Ä„K#~DhZ³j†ÝÓ'¯Z³]𾻤ˆÃw4fÐà9WK\8„úp¨°âĉ•.]·ÔéSƒM¡NeJÕjA©WµfÕ:é†"%~Õw!F$Œ*èèø1¤>ˆÓâñ±ãGY3‡Z*ã룡¹X&8‚DÞ;Â=äéˆÐe³i2)’MØ• WËP1g®ÊY³ç©›A$[ï;ˆÊªQ6+c‘$n¸Øÿqƒ„¾HT“wÇÌ>zÌ8Óǰٻ]¸U˜ ` ±šÊšÙœö®YcÊ Í’µœPôèßÁ‹M¾”±G$šQF€  &&`$lºèµ‹ Ë¡râ‰näAª+…ÖÑ=¥ÌóÌDÎPL‘Ä‚²«fšiVsO¡ë0‚0"ˆ¸Ñ%dcĘ‹üðã"eô‰#&PàÁ–3g:$¦‰0¾"–¹!dÑRCXRH+„‘ÅËÈ,ÓLTÌLM0¯¼²5e^+‚0Bü†@©e("Á(""´É&P›ÿN\(t Œx›Sˆ9hæÊ{ò„p 𤮠3Í1Ñds+4Ó,ÕT4Ý|Ó¢""šÓЏá†3zćV lÕµÂtÀ! P¡¥ C9’¨š?ùÂèJpðà!C éÔªOÿñÔQ¯ÊÖªm¹eqË*g\rË5÷\tËáȇ]v!ÌkÁÆ&ñ—äv·Œv‘ ˜‚`d—aÆ=FÈÅ›tÉ-:ÈÍ#swcŽ;öøcCyd’K6ùd”SVyd‚T½°5"•…ôyïÛá‘HøªÆºöâTæ”0¡‚ ¸¤”<|§Që°Ë®ÒK3äÿ§ñÄŽCý§²óJí6´S­-Õåj  ¢„…¢0‡&´Ž $šo"%!‰ *¨` ö¤óš# Åh‡N`9çÂ,·¼möä± \±?ýðDl3×ÜL²YShi9&¡Úv¸o¸&‚>É#> Z¸Ä^¤“GžfޏÃuaƒÂï ÌqOCh¢±ë—¤ënĦ¬¶Ú577ók°Síü«í¤ÔM™€'ñ¡–H&BeäÑ™"Ž`†›£Œž‹¢Fˆ>¾ùÆ;t¤s`© ’vxN, áK?@ļ­èyZ›œôÈD½ÏXïz“!`ùb(tÀ'6¸ ÿD&-ePa„¡FYæ#Õ „BxÆ^„@ƒŒ¥Á \¤ã¾,Oá:H¨ ½ê‰ÊÛ)ˆ¾xHŒ“ n€«VyPѪa Ã/ T‡/0*\ •!„ Ð`^«™¡ðÈ'éœ$"™Ñ˜å.w¹ Noˆß*¢µ£ã¼£Äš/vàÄ×ðæ|½ÄZõ>‡˜&7w0Äü‚°NHÁHð¿rc(цìi†äžò%¬´” ì¡·¼6GAp)F|QŒÊ¢ó±g K0TF©±Ð­7ZÝ`—E³a¤šºC†ð‡] !RRã—¢´DE!Í“ÿ"¯|…*ªìŒQ9š ®g‹ÛiÉKbÄ0!5îð,]ÆG7‚Œàe|ƒóD.š@º4–|i.’Èr”  ²ÃpË¡%úf×N)A—)5|R‘V9C* 5TòXVcJ!L«p!Èc„E€Ñ yUÌÇ• SXÓŒåC;T ó´FT1A¢»VjQ9VÔ3×cHQ ‚:Ÿ*Ã6‘‡¦ˆP„j©™?YZy`QJÀ,NahBÏy©Œ1CÊ!Emµ¨ =HS!*JJt©ÛlÙ´¢wQÄ’‰ªa±!V¢Hÿ†À´«‚øjX7E·­Jh„ÀTk„Æ2B$èr‘«@Á"‘r0D¨_ ×(Ó±jºV›qt#h¸IQ©ræzMMG+X”9)C¤$5© ¼ášVM©@VœÆKc:Óšf¹Êèn0žN$–Êð‹‘ÒZ¦úðK+jyKÉ×¢ˆ¤JlT9·XöLÃ,*B¦©!¬`ZâÝD¥HÅÇž°+’heƒ¿™Q»òA'rX´í¸D)ç ‹ˆr ìëÆ&Š[õ~˜°í%"FÉÖÊÕl§®{)t6oˆÄUÓf¬ Ú„h/—SŠ÷2…˜xˆD…9¦ oÿŒ¯–ã˜x×+¶Ø*ô°Þ$1zìh”Ï®=dI)Ï$’Ç]ô’V¼NaÜd–vT¢°0Ç ]ÁT?åc =omº^ÌŒrEUNe¯LÎÔl™2>èA˱⯠+WG²GvháŠJÐ!BnEBüƽ¢·Es¾óyKÉá3qî¶Q Û¨ {åWzTU2M-xhÆ"YQ‚ FMÿU€kÖÇ9*Pi„\zâMO†5ìäjvÉ 4uByè^*+Õ©žvŽ¥ƒ1{´Æ>£ -*À s˜‚ E;"±æ6WÀÿö˜ ¦&?9Ù uxÞk-yÛ¶Ô~¶#9§m> Es=ÿBE•4‰W»,Þ~³W ©„¼{MSœåÜäêUÙqÆõÚñ)Gû“ù쟫­x¬H”S}u¹+Ê$\xåò›waX¸ÃÉ®Æ1œµ(;E†}¨D-NÇÜvšã&?9ËUƒ ŒÈ´G¨F5c5y¹Ûߦ…¸>[e×™y–·…Í>â‘›w•F—(´Ý^lµ§éMzY.«± «!7tuv`1ÀO”y(±èᦴÎ[k»…ÑŽa8=ÉM…<ÈC-òbÏ[îýnúYŠà¡rÜ=N2Ò;^õÁ—ìLC Nh‚VKô;ÿðZ“'Kã•ìÔµ–ò…oÿ#ÉaßMÌ^ó•ŸûÉ}V ¨žÆT·:M»\5Êht:ChÉ oÁ6Þ;lß½SL”ýî‹ß¯Œ”½¿o¥º›äGÊÀÜù”SÉž-È„Ðvð‰Tµ,q©¾ùW9Xk™88S<܃!¿Þû¤‰ƒ¼ >Þ[?öSˆ8yú:£ÎÛ‹€³6AÓ¥ûS°¸+Aë”ß“¼ðð˜Š;²Ç»œô ù¸ ³¾B?Ž£–¯X¾ª»º:90Ë6íÊ:è+Ó˜¾Ò¦v[<ÍpÄÛ0ð³<(»Š ¯Ç[»ˆ 7j¶Ëc²½Çj•¬6CC4gâ»Ó«Àì‹LŠa>ïÛ>ÿÝK<¿"Àóó4R,¤Â½¢Û>á# +´·T —tñ!Ø…qÙ†‰C<ĈٗqÁ0†t1†{!EŒ˜ah—„‰˜\MÜDNìDOüÄN<µü›º¤©.œ¶ô.òÁ3´Àì`7£bB®@ª¿Z*²#¹YT?±“Åô?z‹Á¤Ó!¤˜À?)›¦Û.hÊBSEcD¨t­ÝËšLœÂÿ›EŸSºŒ±Íû?l óÓ˜’óFlÅ#:Æ—ˆ‰+a5ÞP›_d¨ˆ²¦ò™ëk#=<:# ÀÛ»ÂÊK¿F'£¼ cBn,¾ lÇjCÈw,ÆK<ÿ“¸9*x³3ß32ÿÌØÃ&Ô!:« Z*H#RÈiIƒŒ<¬¸Ê©G}„3ïHP¡89ÄŠ¬xÁD:6"¶OéÈ7$Èä¼ ¼£Ÿ¤¶ê¹LIዳ8«ÃóêH—dЬF>t@ªà¹1ÑIw ?D5’,É“#É©¼J‡\/ˆ4»¤³g³³µS šÌÈ»ÉläH$œBž„Á ÚJŸüI¯<¼›ˆkÜÈi”Æ2ºÀÂG)ƒ­PúJž¤žklÉ{„ÃÒÊ ÄÈôJcãF}¤ƒÁlAÝ4|4T¶¬[|TíTTmìTôÀÈÑS'1uÔú,9%ÛTŒNµIW ;Y%µ.5ʶ>PbÑ]…ª_UV_ý?`•3i3•MÕà¬Màì%à6ÛüÕßó`ÿ¥` Ž_^`Žà fÚ ¶à~àþ ‘]ana~aöDÙEá`Na ö`½Åß&á&ßb×åá ¾a¦áöáÒ%bnb'Þ`#b †â¦â*æàVâã_Áe`$Îâs­áÿåb¼c+Öâÿ"Žâ%žb5ã0vã.öblebþb8.ã$6áfã+nã;æÚ?ä=&cA~â3ÖcCÆâA`?NäF®c4Nc{¥ãC~ã@ŽÛŽäë%dÓ½dLv`DväIæc;åR†äPFeÂ%eM®dK6åTve=¥dE†åX~dYŽã¦e\®e[â<~åMfä>.fcne_VeEååc¾å^~æfvæQæäO>âSÎåBþåYfeiFædþfhŽæeæfaÆæl6çj¶æ9&g`öäÍärFgxŽçpöæzîf|Îçq¦æwe}ÖeuþgvngI¶gqh)Æã-&ækç{¦çƒFèÿ!h….hƒ¾h®h­HŽîhþhi‘i’.i“>i”Ni•^i–ni—~i˜Žé”6“D›š.•›F“œÖéSÙi2ñéŸa‚j!jô0jð@ê¤îi¦nj¡þ¥¨öŒ©æŒª¶j§¦i›~j¸êÌðê®ëÞjœÎj­æêr›´.•µF“¶vëSyk2‘ë¹æj»¾k¼Îk½Þk¾îk¿¶ GUPp [U …4!pì …ÄvT}ÈiÈVì(Â6ìÌÐì ©€l±ˆÆ>ÒÊmÁìÄÎ.ìÉÉlÕ®lHmËHÂnŠÿؾéÕî8Ý€¬ …ÀÏÖ- nÐR€ØÖ-€›–nU€u(ãŽnËp„€ÛvnÈþpGXî®(0ﮀ´†ìr€À“è¾éÄ^‡ ìVíî îöîpï×ïò–Ò €÷6ðì€ÿ€÷Žï«HðVpH„ÏïýV Go· ¨öð°îÈÞg£ù¶– '€D Wï'l`pì?n«Ðoõ~oçï¡lIq}Xn‰rñ—ÒàžñšÖmÿÙÖŠ _íò÷ï« É¶îwñ)_ ,?ò(porÏÿïq÷ ÿ‡&wÈ–ìÈ2߆óÛvp­Poçfð!O“ ïŠ6_‡37óu(ñ0§sÿ®n3W<ÿo=×øFtç>qûæŒ ÏoJ7ívqývsçŒêãVó@ÿìš~ó8ˆèS2/oô/· ó†ìC'…?·+׊A¯õUsW÷ïׇè–uÉæõñvr9Çî4Ùu« €äVvV1h—vì^Ä&öPÏ c/qBAßp€ó›>ñ®hr—Š&ò®0ïàFómŸlg·Š^ïjO÷ÌhróÖ‡xw§ “6÷që¶÷®hî¶.ðÐæ÷ÿ¥`xØ&l3/oêÁnòfoUn‡góéfñåÆî$·Œ&ïî}o?õ=×/vãFuVÇrãy'yÿîlïð §Çrš÷n—ø©1Gp.W…Ÿw ¢çrÓsÁvñµ&…ƒ÷ ¤Gmgl#_ÉöèÀ^ïŸÆu}?öu_ko÷lýþö­8ö¿i¯íÖîhÃNûhq²l^Nkºw Gðèðú¿|Â/|Ã?|ÄO|Å_|Æo|Ç|È|ÉŸ|ʯ|Ë¿|ÌÇký–ŠGÏ|Ïÿü«(ﵦvÐ/}Ó_ ÑŸñîø&8ÇuÈ~òàž{×·m¨¾sP—ÿ/osÄwìÅ>}áçïhOyOï0s?ó §öè^nä?ór(o4GóÿFså¯nGÈö!ùä7îê>óà~òŸ êg~·þ0Oÿ9_,Çõ3_hwýj§vìÞp3ïþôfïR×øhUü+hð „ 2lèð!Ĉ'R¬hñ¢EGÊ@ßÀŽþP€”Ö¥lI@£¾üçÑf€‰~ в¤@U‡-jô(Ò¤Jjähs$€S’¬ùrG”Rõ(§‘ÔS–RIŽÜ `O“>ÿqU%ÐéÒ¸rçÒ­+·©ÈfS:ªZ0­Ïu¢¦ôúÿSê^}YŽôØWcKRoíR®lù²år‰bþ#•è$`õ eº+hÔ_C$z´Þ¾ª6TZè:Ú˜wóîí»7Ì߇/>œ”ÎÆ—3oîü9ôèÒ§S¯ný:öìÚ·sïîý;øðâÇ“/oþ<úôê׳oïþ=üøòçÓ¯oÿ>þüú÷óïïÿ?€ 8 x ‚ *¸ ƒ :ø „‚·…Zx!†j¸!‡zø!ˆ!Š8"‰%šx"Š)†X‹-ºø"Œ1Êøâ*F­“ÔHåh#Ž:öxÔŽÍ8$‘DÖXTHþÈ£@.©äPEJ9%‹G•ä•OfÙ$“Nzÿ‰•aiåPX–©å™\BùåšBŠù&]ÊÙæ–lÖ9gš`¹gdbdæŸhªætæé&Ÿoúy Œ ê(¡‡:¨ž‰Š¹¨Efú覑RŠç§Yª(¨¡*驦¢ªêD£^Z*¤v®Êj§²Ò‘«abZ‘¦¼rê«§±Â l¥¹¹+E½&ûë²ÁÖ:l³Å;&´ÑV+‘²eѶÜ:‹ë´Ç^‹-³Ú–Kî·ÖŠ®‘ãz›®¹ð¢k«°ë²;#²ñÒ[ï¬üÞJ줭ދ¯»uk°¼óì/à LðÂÏF¬nª KÜïÄÿ«ñÆ gìqÅ'ünÁlòÈïÿ+²Å…ñ2Ì1Ë<3Í5Û\s?*¯ pÈ,ûü3ÇÝ<4ÑEÓœ3Ê)']²C'7äôÓJ'd4ÕUã¬3ÓQï4Ï=sí²Õa[tÓç‚ÜñÙ-­ïEb»m4ÙZoͶ×k§­öݽ½÷Íq3õßfcý1ÉY/¸A|+>³ß‡ >8Æ]£]xÝ-~ùË+„øæ—-uà ;>æ—kžç¨{.·á‹î:F¥/~:B©×¾zèsS^ùîÉ®8íÙ.<î£ëyätWô;ßÁ4üóÅÃÞºê¯W;óo;_ôÜK=õ·[/>öÙ‹½ý?ݧÿ=ùá?þûå›?6ò“×ÿ´Ý½Ûÿ¹üóS¾ú¿øNø³œÿè·4÷w”ÜþXg‘* ŒÞñîA¼=ÐÌ_A¸ÀŽÐƒTŠ3XÂäåmƒ.|¡ò(„Ò°†6¼!s¨Ãò°‡>ü!ƒ(Ä!±ˆF<"H$2±‰N|"£(Å)RцK¬"³¨Å-r±‹Q¼¢Ã(Æ1’±ŒN£Ó¨Æ5²1Œhl#ã(Ç9ñt¼#óÈF;ê±~ücùÈA²B¤!©ÈE"r‘Ž|d ÉIR²’¬$&3éFMr²“c¼¤'C)J$‚r”¦<¥K‰ÊU²’†ªl%,MI€!ù,¢e)B‡ 000QQQnnoMx¨mm‰kuš}nŽxyˆxw—g|¤t} Y­_…°~ƒŒ{ƒ“h…¬fгm¶y†¨sްz—¹>?žVµd›WXžrRŠrw—dqš~l•ywºQS­^f¯{[¹{X¯jo©l{§yf¼di¶hu´|k¹s{ÖuÔz1ê~ìz/éz8ñ~&ð}2ÀPOÅWXÛ[[Ô]aÎd^Í}FÉzVÜkMÛfUÖvKÖyVÇdiÅksÆvgÊsyØdfÕmpÝvhØxyæ^MãWVèeHådXêxIèwVäfeåopåsiäyx†n‹‡v†…{—–m…—u‹š}”¤l€©w‰¤}‘¶z†È{ƒå€y˜…x¾‚I¶‚Y«‡g®‹­‘xµŒh³Œsµ‘rÝ‚,׃:ô„ç„(èˆ7ó‡'ñˆ5ò‘;É…FȉSÌ‘XÒ‰FÔŽTÛ‘NÚ–ZÍ’eÆwÔ†gØ‚wדh×–xΤ}Þ£jצxë‰Gë‡Wç–KèšUð‹Cñ–HðœVèƒiä‚{ë™hè•xî \ð [ç¢gíªuî±{ð¦hð«p‡‡‡†…•˜ˆ†›…›œ’Œ•••‡Š¦ˆ–©‚š¹–‰¢š—ªœœ²‡ ¼›¦¹¨€€§†™¢“‡¢™—º€Œºˆ”¹˜„ªŽ §š¥¬ž°µš¨½£Ž¹¨™¦¦¦¦¨¶§²¾¹¤§²¬»´°®¶¶¶€žÁˆ¢À˜­Å±Ç£­Â©¹Ì´¼Ë±¿Ð»ÇÔȃˆÈŒ”È‘˜Ø†‡ÙŒÚ–‹Ô–—Ä™£ÚŸ¢Å¢‹Ç­—Öª‚Ó©‘Õ²Ôµ˜Î©©É¬µËºªÈµ·Õ¡£Õ¼¥Ø¹ºäƒƒåæ—ˆå™™ê¤†ä ›í·ˆëº•÷¾—奥躤巶ô·ªñ¹¸È¼ÃÍÀ³ÙÀ¨ÛÇ´ëÁøÅ˜êƧé̵éмöȨðÀ¾÷Ñ«ÇÆÇÃÌ×ÊÒÚÛÂÄÕÎÓÛÛÛÂÑáÜÞáÝàâåÅÅåÏÐç×ÉåÚÙóÄÃö×É÷ÖÖåßàåáÜäääîîðïó÷ûéåþþþÿݹû÷ÏŸ½söúã‡Ï·‡öîœH°ß»‹ïúí£Èñ¿‰ü>v9q#É“()šLÉräÀ–09¾Œs&Í–6o²Ì©ÓåK|çôÝ3·m›¹k×Ä)ÝÆÍÇx¸ÔíÛ§O•¹ÕÓ¹²'Ê®^I^ +“,ʱfÿ¡M»6ìÔÜ¢³ÆÈˆA.^¤ $HÍrSת€k*® š+žZïY“ÇÏä-ž<9å˘/[¾l¶-YÏ^A÷=:-É}ü¸r§/‘]Aiô2Ã…¶}úÆ1j$ª‚Tªˆ1c{&Mž¶gÏêe®¼¼9æÍ”;›;½#é›×±Wɉ4CGŒ¸ÿP”&L §¢÷ÚhZçNV…MŒ±IÓ¦|òþÏ(±ŸsSAGà.&ÝveWƒ9ø „™“DGáB õ¨aÆ 0h¨9ã ²H=ô(ò†'´‹eò '£rÿíƒJ4ñ 6&x`s>¶ …âD¡ZG"™$:‚ü¡†k‚Hf¤/¨AO5ˆ¶O9ˆÐK,¶ì“NcÏh#4;ÚH6Mäx\šÎùãs˜ a‘;ÉgŸIþC×j,R lf¢h”åT*µÀSb5Š¥£4!·š86!YŒ<.WwRFªž þy–ŸIªÊÒT`¾ÿ×W ÖTc"ˆ(3Ém€1Æ!ˆ”S饙>Ø6qÞ¶¨™‘ãÞÖ”ZgžŸµÊ*‘ÖX=Õ0¢ˆ{Õ"‰XRÁ0ÄñFá,v&rj²êTsÊ#—‘ó#~ ­´™:’b)¹z’Á.]‹­¶“ÕãÞ{¹V Ë>ôŒãI%ÌÝ;ãbÃÉ8/e¸æ{ôŒ'gM¶ªÂ©²Ü2ðŽCN=ú„SM·w<0 9‹ÂF%Wšß~ý-¦ 6Ø({™>ˆ0R —^šÌʽõÕÔ¹\ÂÖe›äTúàº/=õ#ˆ ‰8â~¼ÁÆŒm¦Ô”‘l¦Ýt»K­J]aÿݵÖÓq]àfaM5ˆ(*_¤§Fõ¨ãE]<àˆkü[ bG'ý#97³O‰ŒTó"”æ­7Õ%õ Vƒ^¿¼gìÓ yÏâå©!"jX©ƒ 9\K"g„Q‹;Œ¤át`ÐuŒÜÇ™q 1¥ˆ#â‡"r«>7ë­|0í[nšà­ócŽP©|8å‰áÅ:ð@Éf0Rr5Ê ½O½÷*éäpV—(FeèC{«‹ÎÀ¼—µ…Í΄jı†jôn/Õx$Q‰8 Ám8C•Ö¸4¤nsn’̲ڴ¨ME_'$ÝòÁ‚Û±a„Ž4AAìcJf¨Ò‡ÿ<I¸Àg8Cy–ˆ¨mo8*dV ¸2 TYµÄ‡ªðqÑ-\C8±† ª&8rpƒ2´!yê[Þ÷‡{Á«9`Ôd(5†|ûâ·#$q¤a k ÒР4˜Àu¢C‚”ô¤­4 7žam0…R5Üà?ü¡ㄇ4ø°…Œá"0Z4‹Œö'N >¡©JiþqŸ$…jTtâøÃBLà„#Ê€bl¡ 8%6ìð€G(â=€‚ÈYPÀSò4NDÊÔh*hý $5«Y•âã÷èÃv …€s|Ã&j±Æ< ÐEN0 ¬£˜d™#e.•©#ÕŽTi‚ÒѶ„ÒØÊ?¢‘!x`!Á ~`.ßÿLEH@¢`T€WH€óIPŠR1GЦÚ½=u¯®„nt·Sg°cçÀ¶ûR ?øÅ`4©Ðˆ| Ȫ‚M2²#¾F1D´‹¹Ð -iSÚE½J×-òÀF'› GHA L°†ÀË‹ÁDà7-ªŠ,Ô›€ ÔÂ2Rê C¥/FÔê=›\NHAê\~æuº²;ñgÜáŒNþ"@@xüàØ€`(Žt´¨Ç>V€:ä!aÈè12†ðâtìÁÆè±1ü° [ùÊXβ–·Ìe+OE `³˜ÇLæ2›ùÌhN³š×Ìæ6»ùÿÍm^ÉJ÷‰'Ô b@ÀVpsE ³ØÇ,$¦ŽÁX^Ë€oû7.mÒŠ@ª«~'ô_¼úÓ´¯š7ü‹í’@·$X @˜íãcƒ$*Mdâ ÏÈè3Ô !Gó*‘"ȶD8SÄ’.ñT+=ÍÛ4áÇ>àÛ„l»¸@ ¦\úCºÁÐ \‚Úðqx`ë&Ì«=õUÄ#m2ãÈ£ž“†II•¤âþú—&Y–½ÜŽOx ^€Ž+0‰¦¨DTbQUÀC—/Lq ,Ì77» ǺÙ]ªz(ú£|¦SM|ì{_šØ…ÿ Œ¾þÀ6¢81¨¸‰ Ã0ˆQG`-o³ð³¥Ž4ô3צ޵Ø%GñÉëläVà [H-@\¸pª°9ÎçÓÖÈÄÃçóò8rRÛ#€ÍÕ£"?ús™Žt¾&½:”‰9adÁ€¸#W8.4˜uX"§¸Å•…¦cÖÓTÒBS` ˜v®ýíöf ›¾˜uD€˜g@aöQ@<)Ÿh¨ªÈš« =HýB! [ G CȆÀC„ãð'¼êq/¹ÅÛH˜>ÛÛKÊÀÃ>±øÍ>qA5(ÂXèÁvy …Ô¢¦ø…..ÑÐô@ E˜Áÿvsp„$4mãˆß|ÉŽÝ1÷~#ùÒçïvúß9ÙP²‘ >¨C@U C @ SæR ¿ðU30C X3@\rJS³)ÇTt”!v’Ej'õgr#H‚÷×… Ù0ÖàC˜°¼ÐÕçû°€æÏ` T08’G0XÀ4¨S ·—Ã*It#7lÃ'‚Jgøæ)¸‚ûGð‚PÀ ¶&P08hÈa ãr< ûÐÃè‡Jh·B˜BWÜã„gi%…'8¸ – îЂ|` ý§ƒÐ'TÀ&ÀÿÐIÏ` XU@3I€9à $Få€I°¿Ö<ørÐcOÂ&Z(…’|1¶ÐmàÌ÷$Î×J@Û%'À ¹ðC0ÛuäváE`~ž·ÓjðÎh" ð…{øÕ„¬ø„v˜‡¯ˆoݳîÐ"¸· 1WX…`…ò@\àFŒ=p–Ð J`k3PDPú¨Ip3Ä´‹°8]òÊa î÷Qí§&ð¶Šû‹ãY|á¨:hSa.ñÐ0Äa&õÐG– ¤ÐA€!DpàWF L Ø€ná ”âB RHƒŒñq!ÿ7G«ôxRøwˆ‡MG—ƒ±°?Ì0Cl" ¿À =ð 44Ðv'JÖp#Æ¢/¼£<„+%cÇ„“!tÙÐ1¾Ç”ÆÛØ“> wùFñ`.—`PVŠ›Â&ÃX£Ð)¨vq’(i p¥Q‡“8Œ½æ†¨T׈g§aFçx®ø–Þ”&˜r©~— @›Ð óµò€ í` V`k?€‰W¹û¨’,©õÐkc£Já,¨xŠ7Œ§“ÚØ­Ø›©‡œ)” ˆS×' ›€'` R#†yÐ û€ ´ ¿ à–¨ ‘Ð qÿ²F°>¨Ñ Íå 3EqH,“±µ0{Ö{ð÷:mé–š‰™™™ X[—· @@à)Ë‚¸ôo0–pÒg†: «W ñ bIà}4`käW~ÿ¨‹×&4ùs¡s@ ©§#¥iW–IœÅy2:£*hS f à‘iB.ÍÐ nÀ>P€RPA#gx‡‘8r•}@EXx£Wµ ªP?ðùI£Ägœþ£Mgjƒ¦[U1n9¢ ß0¨À;ð¡°s!vÄ‰Ï 'G€¹€¡J †€4þMxÊ~‰ŽSÿajoè¢BÒŸe:©bʓҦ ¦:Wro`ûP ßWP§W”'@‰à—l€ õp•IÀ“Ÿ”†Q`àŒðk0J¦•¬”Útƒ& ³£–0°VÍðnÐ 5‡º•P€z¸ÖMW XðÏ w àw„ _J3bª¥ê `Mó{¤–ò6ycZ¬’ÚtîÀw¬Æ P­S  åµ”ô]`@† p4@U0e²¸  ¬™P@vpE!up î E¿º4¹>Ö"½äª°`¢À‚Ä:¬ûi¦ùZ£ûÊi ~ÿ•ÕPð€ u€Â… ØI 'ລ¥ŠQ ‘À4гGÿÿp±EÀ‰:­»Y™“á~ÏÐäô?aî±n¿(Ãù²Âê²=qYº¥ö ȱ °…Úàº5` W@ „sN:=`? ÿPû 9B0u B0_|„&ñÒ&³ÐA{0˜ðr4¶Y¶Âù“÷Z;”¡sÓ¨ T²·—` Öpþ 9h£% ö(¸@¸Q›Ø@Mp¸ÃGò©ƒûÐ"¸ÒtÐPŠô*|lÙ¹ü³$%’eµ@–dðH–¸P 6R0ÿ° é0W@šÐcš@?{A°ª0¸µ µ¼° ÈÀ :°]†eËÀdE6#» ‰Ð6lùÛc_gœÀ ¼À ÜÀ,fX£¶ خඑ#X° îð  `·x«·›wWP=€‰1¿ñûÍ  » ¨‘i²&’Kh®0 ˜P^5Ó q;y™h»–Íû¹`„œ¡ÛmšàØpR W*12Q@$ µp´Òwä6ï[»\ µr@gp=óºò0ŒÂ˜û°¯Ý&aóý¢nÁ ÄAìÃBì¼\——áÊ™‘± ~¬EÉÛú”CàÄj2? ºÿ02°Å\œÂÀA”ÓØê@ £× –P^3«œE_»¦ ¸â«Àj¶g[Ç– ³wÜ™˜Q ×wyULG¼€®Š¦¤¼ŽüȶK?T¢Ý¢¤¼ È®öa‘”áhf&¨ŸÌ;Ç-‹Ê©LL –`mSáÊ–à›Ï€ ·åÏóI9á— ð¶KgðT"%ý2̃™ Ø`.˜Á%¢““Çõ ‘ßùϼ‡™qͳ¬ÍÜìÍ+´h¼l6™Èƒì€ÎŸ0 €+°ÎT‚=Ç@Cy ? #)°ÍùbJ{ ¯ü¬¼žKÇÓŒ¯)ç® Ë8ŠÍ´ÿlG¨ÊÍò “5Oû¬ð ¶‹* ‹D€‘.ÔIÖÈiü=` É =  ™Q"Öãk=ÍÒ¬Õ,ÝÒ”ç±y  s4²Jæ`Ñ ›Ð&Àað´PÑ+ ÉfT`¹lÇ„)e| Õ…s ˵ó Úà[ÍÕŽmÊ.MÍ?R –` µà<;‚ á#V‰#J@ àm'ÿ)Î@ „«°Läazp~Ç‘Zb§&Ï ^ã¤)·B2rvÜÕЪ,Ù¥Â?È »&úø YÀ0À ËÐc©@×ÿ°OðÖ k°;~ÿ`?|Ey /2¬—UJÞÒpŒ ÜÁ-ÇÃÍÞi+-¿#¿ Ÿò€#Á[¼`,¦Pºà ‘ ª@ǺÅyö5ÇйI/mr/,j“:ù» ÑØýÛŽáñtFßRtßMßÄ¥zæ¶­0 l ÞkÂ÷‚4žu#rRvßÎã‘ÝÞbº™QÖÉ) ¡ k;#'@Àç¼À{;RÂð]ßU|ðaÀ úñ 9é&,„&ÊÑŽæÿ6èé÷ͽ½ãeîè* Í^±˜ ÅÜ"—° ž³!« ÈR®W ÃxÁÄÁ‚ð%P\Å oà=Ð¥B•¾a˜Ld ‚¾Þð-ÜcžáaNgäÏ€ „6^œ<“Ï'2òS‚Àƒ0 ½ÓP |àWP ï”Æ&)p¢i‚î Ÿü‘úë‘þÞ¾®ã/ªþ •öñ Â,Å…É„ ¦N˜hS}€“PéàQóÝ&Ÿ$ä×·A€–h™ÀÉ+û¢í¾ëý¼¼¼næð.Þó>ƒöÉ÷þàV ΞÓï<²hïŸð‘ÿ±ð<Ò ‡«;`ƒ½À‹NÝ¥€î¥Üñ?¼ñ+­ñÀŽÝNì²Ph:ktC®¤y(}0Ì—ÔníØN Û®§èêmðÅð 9 x  @@óô)Ða éëÞãFÿöp)VinjÌPÊ7“‚ OY&hî0é³DgÀê®ëæ<ÄU o0ú±»9ÐK’å m¯îd[ôOæGO÷Â#4;N6œÑE çT>W«L%Î@ ©àzL9èGÎÏ`¼‚Mp¿ØzRáWÐÝPùî^üšù˜¿á”Ñí‡*r7Rq.çWp—¡€®ôp~Ó4¸#ÿ¿&6`và ;ðw°¿ÐU€ ;ŠiY‡™ÿþnù›ËCÂïæMVyWpkM ›öí“÷ 9DаIÓÆ‘¾}õ´Iû5o Á&JŠ(‘G0Ž!qðŠÈ«ÇÉ!/îK·Òå?˜1eΤ Ó]Mœ9sÞÔÙS'OŸAgZôQ£E]ºÄöLeAlK/¶¼¨DI“H~\M‘@ Aƒôñ!ôlšFŸ­âT­@4iRO^‘"Bì0¹:P¢4l]R•š”&RÃ?E¼ø°cŸ!Ó”zQÛZyŸi«Ìòb=«J€œàA?Ö6i¢­^5Rÿ3m_Siò~ñzTaB(É2y&m#6yÒúvžÚyñEÉ“mJÇ}²õëÔu2¿½vmÔ΄÷=Ã[„ÆŒ!gà=Ä]Á>| ô,ß³&ÒžñŠ”‚”(&ˆ…&6Ê(´ŒêâŽ%z¬©&œzVJl%wöÑî± eÂα 9̰¦µÁΘO9«ŽÀ+‰$T¤á Ò"Y&#BÉè™} ´*  $®ÞÔ1® l ,O hܧDšD„ˆ2LJ›,üpº+ÊRË-;„LI0 «ç™ÐæR„#jàÁ”\€¨Â« º1Çt‰"º…†;±°Ê5Ž˜Kšõù‘ÿpÊ©‘j.šÒÊ£ ýÐKÃ(MÊÒK·Œ L%Å»q!¼.S‚DTâ J†PbµUA£ë‡œH \¤ÀS®¨´‰s-«,ÇFb„G“¢2Ò.“ÍS£˜Ì YJgZj«µöZl©•kˆ_~Ákˆ!ðš!E)‚—Ý~7«~¹¢ ˜ˆäd¦eæˆ!¨µª›l©UÆ=¨ýãj‚va†vøaˆ#–xbŠ+¶øbŒ3Öã™8]PÌy” qׂKÖÒ&9ƒÆ[••žH¡‚ èD†"”çÏä–cÎPDE¤ý°ñgʆ%-2gSvYMaò˜»ÿ›À¿#Pàa=ôfàÁ uä9° &±†œ¹Npb‚ *ÀÂ»âÆ©† A­b”ZÖáŽI'û°z­sƒVK*—búéI5mZ©©Ã[iç2ã=aÓ€XïŒRLBDþ(¯ˆ:™˜âê©G&úè¼EѪh»uLl°kÊ’G¢sŽ6Ö›¤<öXÁÏpñÈ¢þ§qÇ/*’µgâÅdˆN€Â™Ÿs3E’`"špT$2Ü"XV)›#!‡FúøáYÔ©¥MàI,ðö±ÇžG ·ðwI+þBâõ$€>A^eij–íOì ÏhxQ½‚jXÏÈ6ð’ –hdD›Hÿ4Ž@ µ!@,`7¿úå~ÚG´¤)à¯xP£a ·T@©ÐzY ™hÀU­*…ÃJ^ê®" ç;Ø Ÿq#ä`\œ1aì ø™µF›P g¸ã½Äi6žâŒ‡Ã¥ˆ7òІ­0 ü04®QYöe­ |¹ÌjúÀò!¢¸ šð¾øIÅ.ËH X¼ƒ¿žHh(“d_(”Vç<#ED"Ï`Ñ;X€žœ09AGl)*Â’ЇÏ%ñ"(’Æ¢ú`$â”8N¸Í´E%a£<(©´—Pˆ€…™á•2Y“gB³“ÈkŠw°ÿ!žˆL„DA AJ $¼2X«œK+Uô¹‘§<Ï ‡"Žp„&ðB ”‹À/Wr=ið`|áÒ¾è’ EZ h3GÆ2F­€}ÌÌZ±»dUÓ„ ’ ‡ãzÚ0ÒUð²*^´²Tˆ4è*%á8ˆq…„¢IZ%~ŽTÎP DxÁeIÓƒ¶Yѹú‚4¹ŽZÈ¢û îñ¶Ó…É•RcXx5yÉï¦v¯Ú)ï1];¢˜®­jÉOqT rö;€± CÈ$¨É*5ª4Ry~7ª­D¯«.¨KÐÁý¤Bž°ƒ#åc+íc ߉0×S8ÆÛ‰¿ Áh Bê»"¬4ÅA ˆ¡­;¶×ë˜0ü?ÿ KAã©€I‡!8‚_˜–_à—8ÌC=¼–u™^‚eÈ–e8jéÀA†nÉl²iDG|DHŒDIœD×c>¾¼"Ê“Áõ£ÁͰÁqŽ~ú¾û£«ýœÏZ=Ç#Š7û§4„9RB&ü9'|Bô›Â<{.abŽ?ëD\Ì« E“”¤aÄç“¿ë9ˆC& ë`\ÆY|R[6-äÂê½l¢Á`Ts0EC¼"4Cíª9ý;¦`³¿¼-¢Z¦í Á/éB…!ûs ÞÓÆfÓF¶?#þ𪿈aFì¼ì³© ”8ÃG±s·z¾„GŽÓÇPâGÿq\&9»‰Þ È­KÂØã´‚4Ê„@ŸËŸK Áä®é[A4b»‰´ÈÒÚ=HœÄ¿#;²ÔË0·Ih*C¤è0“”¼ïRÉSdɈ$À(ƒÉ¥¤È~¤IÅHó <®c<‡lŃ<Å l°Å«ÔJë«Åµ£ÈŠì½§|¡–\FvÜ®‰ù"ž³GeŒEwÔšLÊ¡leDCÅ3Â.K§üË™DÇÆãÀš¬0cLB©à¹d,»¹LGî“Ȥ$žµœ³ì˘”IÌô,鳎c[ÉBèKMcÅ%´ „ìH‚zlj;ÇW„ÇX¼K£š<ÀÌÌéªD¹š8ýi«ŒÃÏ,ÌÑ*CÿNË)›$IŸÚ/<ÂÝÑ=…ŒM¿ÔG¦Ä¡~äÛ,ɬ»É N–¼IÓüMåt¾Ý¼ÎâÄH +Å.RNؼ|tÎÙÔÌÅ£Ns£½Ô“0ˆ„³ ƒY4Í£<·Ô¤K¬LÕLÎ×J|I²|ÎzJÁÌ9xã@âÌ4µ´.Ò´.cÌȼÜÉýK;ydÈøCŒ´Ûæ¤ÍôD= ¨þ‰¸Ïš«0zË_[¸iô)LAÿDÁylFK´Ë mÊõ¤¼³Ô0ô|·i» HE¾$ÊMÁu›ÑË4˵½ìÑ*)ÑÈ Ò€2Å?ºê>‘4¥Ð”*ÝRZ$ÒÏ5EÕëÒ¿kçÉRÿ- R.½!®ôÇ0…³1ø,Ï"Eœ#]Sò ÀxëÓ܃ǖ|F ¬SˤƵÑõO=ýÏ“lT³;ÔeŠE‘{dÈåì§ÕkRó\ÔŸúRÿ¡Å<ÂØ,H?e¾ŒLN=œ7ÍÈ;ÓN·é˜Ó&k-ˆÏWMUVõÔ\-U+µUQ]¶X5Ó[57ÒŠHåÕ…ÔÕYõ>Ye-Öa­8TDU\­3>uÔdUJjíQþ3ª´MtƒÅÛ«Ö¢P¡_ žß ŽÖn`æà Ná –áæÞàÎߎ` ®à¦a†áÆá–ÝÖá!&bFâ$¶a[ ®áfâ%&ß#žb,Îâ"nb*.à'b ã.VáÖS æbÿ®â4Îà(®ß+^c2b5Þb46â/þU÷ec9à1îß7¦c>Öâ:dBÝ?.d=ÞãDcáV–d?†åÌÕä8fäX–e¦=ãQÞe^ÎeV®åKFe1ödaVæJ†ã[FæFnãdvæfže¡ec&ekNe]¦e/†æUfbgÕÍãgöål^ffææbÖæ_ÆfwNguÞæi¦æTfy®f[Öç|æçoFçxhöæy¦gÆå¦íf.è`fh¡pˆŽhÿ‰žhŠ®h‹¾hŒÎhÞhŽîhþhi‘i’.é‘ÞGД”Î’•¾’–vi”Ži™vd˜xé±é ÁiíÐéžé›VišŽ ž¦Ž¡žŒ¢†Œ£FjŸÎ¤vŒ¦Û§NŒ¨NŠ©6Šª¶ê¥Îi êHMñê,ë+ë±Þ²Î³Fk®^k¶nk·~k¸Žk¹^Ô}˜éx€W€‰I€€Öx…T° ».ìHÀ6Ó}hi»ì®Þë¾N ÈŽ‰à »¾j˜ l©Él˜PìÊ6Çl˜HÉ®”Çþìņ Ï6 GØë›0mXiÐv¼× H¼Nìÿ½€t€É~Ðm؇TÙ~Ž€•fîWwøíWXnØ„ÖFn»þ˜„I(î¤H‡ïš¯¶ët€ÝVŠå^iÀv‡Hé¦î¤°nìþô&íîþî* ßöïùü€ô^ï‡ÖnG(ðÏ G@p›€èjà€šžp±pîv(ì}Ðð)iï£püv„Àpò.ŠÛ† ?à¾o¾NŠé&ïôFnî¶Å6ÿðÏ:q˜Hñ‡ÞkOé×Ökn¡ qÐFqçí¤Ćn?q¿qœ€ò·ÿžp'q#‡Œp·òÿÅ€”þòI8l˜fùr©Ùë5gm/ òFnÿp› ñ'Oiwó0çpÄvsÃøòçóW˜sü®sLRïoóßÞó3çsé~ô t îŸîxt/ÇðÅxîiî2çsÊNóû^sK€.…óïžpEÇrÃo»t=?Šûîó£ u6¿ôV¿oÿ®kõÆpY7ŠñÆëUt\7ŒTØîNô‹kögÿmwøë}xt ¯òňuÅ.ì?‡ 4q_ó•q£øòç‰/ñY·ÛslwrÃ(÷qÿ/wîNŒ/ï}€wGò Øk+á÷â†n{/Šãkÿ¶ìÿtω†/í½stïôÙVxÇømï6ïW`î‡w ~÷oG(îß^ñBvÀ.w §ïx—‰_îï&x¡y(î“ò”gq¾ò–7õ my(Ïyì–yàN ØrßúW úœHz* N?yüš/ôëTàwÇhúÎöíÍööKAl‰Ækw8ñ¦±éT°GìB뺶ú°õ±j~?ûËíˆîëéõ¶¯n‰v‰öê¾×‰Ih9›lNŸkÆo|Ç|È|ÉŸ|ʯ|Ë¿|ÌÏ|Íß|Îï|Ïÿ|Пüéæ E}Ó?ýœøn°ŽvÔo}×÷kófq ¿íÝ€5_{»†÷ÿÛæ{Û_m}—óÁ¾ì³/ìrÿëG?{½ì×_~¡øî•süó0Ÿp1Wðh_îâï07ïïó1þ˜þçžkÿp4—~à~n1W~æoÿÔ¯þêçn‡þ1¿‰éO…µswhvÛ—öhˆtüûÀ> ðÕÁt¯˜8  ÆŒ7rìèñ#È"G’,iò$Ê”*5NrXPB…/ü£X0UÃîr6Ðrß¿–gþ €#…æ¬àÕʨR§R­jõ*Ö .‹ÒX°aÍ‹ÿ|ºƒ‰“à¾éZ¦âº“`MšI¸;(À Í´¯&¦Ëê÷/àÀ‚·ìËÿõß܆“´{ÐC¦kyL `ñNš0·Ì™ŠïàТG“ÎЩÝ\Ø1ÔiNE[«m±ª]ct´øꂯBu¼4òäÊ—+ÿÉü9ôèÒ¡§z:öìÚ·sïîý;øðâÇ“/oþ<úôê׳oïþ=üøòçÓ¯oÿ>þüú÷óïïÿ?€ 8 x ‚ *¸ ƒ :ø „J8!…Zx!†j¸!‡zøáFîˆ8"‰%šx"Š)ª¸"‹-ºø"Œ1Ê8#5Úxcè¸#=úø#@Â2•;VYÕ‘D‰ä’T%UQJ9¥ŽCJõä•M*ɤ“Zfÿ9•aŠYå–]rY&šQa©æ™PŽùf”V²Ùæ—iÎiçJkª¤'Jpúù£œyzY'¡… Jç¡Rý¹èŽî9è†&*é£f*Ê袎¦Äç¦Vj)¥‚º¦™âùé©(qª*¢“FJj©~jÊj«¨¾z«­¸Šzi¬oÎzÒªÀzºkªÂÖJ+¯½Šù«IÁ6;,²Å>{¬±É*K%³%9«-´ÕJË-µÓZ{­”Ù’´í¹ÝŠûmºá‚;.¹Aš;ºôªû.»öºÛ.¼ñ𝾣ºªk´¡z «¿å,R½ ï˯ÁœRÂSÎëðÃG¼.ÁOÜgÅq.RÃ$gŒñÈ •ÿüÑʹ~ìñË0»1Ä4kXËåÌÑÎ<ß[sÇïJf}4ÒI+½4ÓM;m†?(§ÌòÉ& ³Ð)=½5×]+µÕW»<óÐ@cM´J^«½6Ó`«ü³ÙdŸ·ÜuŸÄ6Þx»MuÕo‹m·ÄsßœvÞ…w½·Îp>6àY38J†Kþ4âõ¢âaOmyæ~K59èKWîsß|oÎùß2«nRè­=:æ¥'ž:ä«×~{I®»»F—÷Þ¹é§ÇN;ÚZë:ïù®<ð³O·íÅG~<èÉc´üõÍ£þüâ;~7õ“[_öäkO:÷RÛ¬>áá>þ?åÇþðÂÿÿ.;úQ¹/9üòûþʽï±n…ëýê'ÀîEOz ‰È>Á1w¼ H’æ T 'ظ V0wd›Ó'–Ð,ÔÎȼÞÏ~5\ß -HÃÚ‡=4ߨBÏE¥F<"“¨Ä%2±‰N|"£(Å)R±ŠV¼"³¨Å-bÑ\ü"Ã(Æ1’±Œf<㽈Æ5²±n|#Ù¨Æ8Ò±Žv¼#Ï8Ç<ò±~ü#÷ÈA²†Ô¢ ©ÈE2ò‰l$$#)I8>r’–¼$&·XÉLr²“žTâ&?)ÊQN2”¤<%* iÊT²²•w\¥+"c)Ë5Âr–¶¼åk‰Ë]òrŠºì%0ƒ™Ä_ ³˜½ôG@!ù,Ÿb,E‡ 000QQQnnoMx¨mm‰kuš}nŽxyˆxw—g|¤u} Y­_…°~ƒŒ{ƒ“h…¬fгm¶y†¨sްz—¹>?žVµd›WXžrRŠrw—dqš~l•ywºQS­^f¯{[¹{X¯jo©l{§yf¼di¶hu´|k¹s{ÖuÔz1ê~ìz/éz8ñ}'ð}2ÙZZÔ]aÎd^Í}FÉzVÜkMÛfUÖvKÖyVÇdiÅktÆvgÊsxØdfÕmpÝvhØxyæ^MãWVèeHåeXêxIèwWäfeåopåriäxx†n‹‡v†…{—–m…—u‹š}”¤l€©w‰¤}‘¶z‡È{ƒå€y˜…x¾‚I¶‚Y«‡g®‹­‘xµŒh³Œsµ‘rÝ‚,׃:ô„ç„(è‡7ó‡'ñˆ5ò‘;É…FȉSÌ‘XÒ‰FÔŽTÛ‘NÚ–ZÍ’eÆwÔ†gØ‚wדh×–xΤ}Þ£jצxëˆGë‡Vç–KéšVð‹Cñ–HðœVèƒiåƒ{ë™gè•xî \ð [ç¢gí©uî±|ð§hð«pú²u‡‡‡†…•˜ˆ†›…›œ’Œ•••‡Š¦ˆ–©‚š¹–‰¢š–ªœœ²‡ ¼›¦¹¨€€§†™¢“‡¢™—º€Œºˆ”¹˜„ªŽ §š¥¬ž°µš¨½£Ž¹¨™§¦§¦¨¶§²¾¹¤§²¬»´°®¶¶¶€žÁˆ¢À˜­Å±Ç£­Â¨¹Ë³¼Ë±¿Ð»ÇÕȃˆÈŒ”È‘˜Ø†‡ÙŒÚ–‹Ô–—Êš£Å¢‹Ç­—Öª‚Ó©‘Õ²Ôµ˜Î©©É¬µËºªÈµ·Ù££Õ¼¥×¸ºä„ƒå瘊噙ð››ê¤†å¤œí·ˆì»•奥躤巷òµ®ð»ºÈ¼ÃÍÀ³ÙÀ¨ëÁûÄ–êÆ§é̵éмôË©ñÀ¿öЪö×¹ÇÆÇÄÌ×ÊÒÚÛÃÅÕÎÓÛÛÜÇÓàÛÞáÝàãåÄÅäÏÐç×ÉåÚÙñÆÅøÐÎó×ÖåßàåáÜñàÎåååïïðíñöóéäþóëþþþÿõýc§o6hÑ´ý[¸PŸÀJœQÁ‡ ÔH±£DvCŠœr¤I%Oªü¸²å@—+SÂ4)sfHÍræ„Æ0â?zÖ¬ÍSYS¢ÏŠ.‹Ú¤¨t)K§"›B}9µ£Ô©Wm²#h^Am`½j¤›6hÓª]˶­Û·pãZÜJ·®Ý»xóêÝË·¯ß¿€ LX£=mý~jË–M9{õÆ5ë8ñÄv·2ßj‡‘âZ—«öÍ”tiÓ ³.U½uE}Úša›·¤H‘={”écæ…={Š,—]… ´h§å–2_ÊÔÉE{nºu}ÕÑ’f­ÕõBî0Á‡ÿ÷ÑÞNÛG)"B‹gþBS$\Zå·Þª©í¼fKØ qÖew]\…yT¹&^KBHž@Ø8DÖàs{€œß„Àà6úàŽ"‹„R:×[Ö4 <63OÊ•`hNEy>ž¤B4Ï4G( !Eá"gœ Ja8ø(bÈ–}¬‘I:ìÄR&Íc 4³9”Óú4ƒšÓí˜#[;nÇà#áÕE:$OGÔV„ ̃/À0(á€cH"óȃHW,ÕÁ£ÓšmÚ¨5H ±D3Öè8'\uЦçžÞ­ŠŸÞmÿä5€ôiüaÈdœa„/ !5†Ø§8†È ,µ`÷Ÿlð@Cê§2Z³„¨5’ˆê©o¥Z•«¯¶ $¬®ÉêP5ФF"´òúÇ»¹ŠCͧÐ⎣ÔP§)4åTPN¡§¦¥¾5œÜR—–ãŠëð虫²[Î÷G5ÔTƒˆ!ÈHÒÆ^„Qˆ!âè+c¿Í”‰ÍµÚìV8ZöQMÂt.¬*¹¨{ĦI¬Ñ<Ô(¢ž!Ô„ã!‡TRA0}¼ÑÆÞ¤uγØD;­F5£©lm…³¥"|23ÍRÛ,’v¬ò̰ƒ8÷ü[óh¹%ÇÄ¢<àtB‰Z™nÿê)Z1êT0[ÛÇ–ò­0Ú!©•6ÛjßÜp¹o£%8á̃7Ô]Ç’„“H!j|‘øâf¢ÉfZØ¥-[ø¢ˆCçk¬âØ™í‘O î ùï9·MšÏ%nüµ<ó„ ‡4Òˆ|´¡FЬž;îú ŽöØ{Û‘‚½?ù·“oZ>æTsº<Õò. òõQ%{̃clñ@#|¤16íhi5^—ptúp”"¨Ñ¢a€Œû^g—áIÎ|¦ÑCüÁˆq”cKáPÞ¢„@ ¾Â nP…[¢ _ ;q†ÙiÄ@ËÉàÞB¬¹å«}†à"ÿ¬§8ïI0‚¾ ÞøT>Ñ|CåèÇÑ´„†öJÞˆ¸Ðè`} ƒ"G..k[# [B-ÙGá@>AŽŒDwIÌ`׆Á©(bvIÄÓ@ Ƈ/ C$(ñ3¸` eèUÜw†|ÝÐ!1"ËxX,‡xÍ’×££{dAò-‘‰¦ùãFy@ècWdè¢<I¸Àe(C”vù‡Û]/“Ù¤[lçIÖñ£lÍ/¨ÄSÚ䉿¢!æ“o," ±TW LpÜ cX yeÆ3æDk9QãZسN³{x$å2MÙGfІƒÜ8:”ÿ†4ðª f@ƒL`¤àjXÃ4¡.@”ì†F€$ªxÄ¥‡[e(‘Oe:ӣͬçTЧ>}”1Jb C.Ç =< ”PÈ@Ü MƦ®%ªsð€e£ãFyÒêñ£E^E²¤«6hA—oØÂÆð…XÐ`0ƒ”ôÐ&dÁhñ…ŒhªÕˆˆ8j2»3OTõ¨”Ó6žqBèÃYˆ’!¦j5Xªƒ8Ã0¸´²ÈORæPHZÊÂȶ֙h$m…ÊeűĨ6J˜^qE 6p} …UÝ =dáaèƒ À€ãÿÈb±lºÖctªÉÒ¬²ãɬggE²bj´-æåV„éàjÚÍPáÇfÒáŽZT¡Ðð…’Ib¬@ ¨À~* n„! ‘¨@2‰*4c±Íÿ@(|àQ ÎQˆ@^" Àm¡‰›¦ðzƒ,a÷n¼•+€r…Qè jРœ «Mk„¥*`‰]`CÖSÐË—0¸,Í͈˜£ÍçD#x uàDQ¯f nðˆ¹#•ˆA´-yÃ\P$àê HBv!”Ã(q tÀ¢ªpG&,„]”ÂVs‰N´oˆ}ì×™G¾›aÑÅÙ±Â:_ûš3ÝY¶x­jPà (Q¾ Úx@0ôÃ㘜8T¿Úƒs#hœ‰¼ïì9ÏA/|â»·r7¦²°Z4€· ¦>R!{ÚÉ»zGî§ù µf9"/ÿd=OA5œôBNÿñßÒzÇ‚ `;Oø[d‚?é¨$ÿøÈkëY›ò}|“#Ï¢ÀtI8‡p;g| Ø€PAv~è§Tpñv—hú€†„ˆP V°J¦PÉQ ¾ –t)°H01 d7PG ;—· Ò}22ƒ¶)j¤ƒ4¡v9W| 8×€zp × h A@S Að 0 áJC ¾ÐS1A1ÿ ÄòoAõ/~c†Ý'“X~?è†m8|xaȃ€×p.ô p ú° Kð„‘ïÖ)• 1*GP1`±C4Ô ƒˆIW#;tj˜'l¨€è‰Šp1Š¥¨sX¨è»ÀrPà‹ð–•u>`E ¸ ó17І¡4~Æ/åeimzÉø†òŠrAhqÇÕ@‡Õp‡hKpO :` ð Ñ )À µpˆS02>p6p½PHÕ$ õ‰Ps¡#ÚR!ØVŸ7ñ(z>øŽî‡iQ SWì`„·‚„ÿ2 dPp»ÿ€ =A dU uE …‹8_˜‰p7óúTGÏ _f†”–€æÈX•V qmÁÇq ï` uƒ0Ï3fu=¹UP œ€,C C0—syƒSúðS,[r# ²5æewvî˜^îƒE3wŽ¡Ô”OÙâÇhÁw›%¹ ä©˜@hp‘EFšÀ ’—ð` ëP TÀr=ðH”t9—£Yšh13w°YÂ&|ÂË€ u›™¨´éÀÛ èÐ ’p T¶9‹Ð–7’l½àù¹ \ž€¬›z™ÀÖPPUP0šO@$ Ì¡´À„' u1Æ—,ÆÿbPBt;Z <¹“žÂ¶SÇ"ø`â›$æK@æ3V‚\§¬0€ jr>s<­[*Øb*FèÌ=­ÔËßýÝÜ43ãÍPãŸl¯Ø€ ÉÌr>À ÌÐ ‚0¾ P—0Es” 5’NÀˆgƘ aå;¼ß­Ü…ž£1Î:úª=  €r¤Ò7;å–:0¨> »03ÀàdNVzÐ_° gâ °I-Wó,7b–\7ïb¨)îìÏžêÑNèÓÕŽÚ‚C§Ça º0@ד:ذ2U[ŸÀ“†,#ŠmP%Ð\Ú<°K°XRà{>-3ÙSÙy¬¼#è/ð/Ë+~ª2ÿ®o9q ó&e ½š:t-: 3€  (´0 zàU@ Bç®XK™ŸÂó5ÂèѼꨎåþ­õgSðÔ¢IÍP`!&€¶#.CcÓSÖpñ‚À/`N÷°f pµè¥"Q@Ð…K@"~ØT€ ½¹.žÑ ;ð1½q±èbïòÑf?-f*PÍðl_*i` ÷xh÷x? z¯Ëp¿s™Á 5ÙÛ;@ Wøªžø‹ÿÖ2®nó¢\o9Ÿ6ΫÙI+{FxFôJ? Mïêã»m0 Íp8`Øà2`V=뀲Xå.ÿø²×^õc Úl)D¸šö:É=Ð,Ô]Š0B»Tÿñ!Ïh94cÃÐqp&,|K2vè#˜k3‚Ï%$øÏáCˆ%Jd7ÑâÅ‹1nĨ‘ãLjAŽü'’$G}ÿ®dim $K¬é{G+-v &œ×lÉ'¤8©`©ÙÑf3ñJóg ?}„¡ªe š¯x ±Yóy”N›5G—àÈamÇtúØUÙ±MçÊ“ãŽ49×b]»órÄ»÷aJ–õa; ÞQl‚õí$h É:‚Vq’”aÄò )§O³¢•Œ Î;¼ûRAB·²†I‚æÉ"V<âˆdehBJH’yIA^jFU‘x€&IMtà”é§E‘p†Ðe Qw³~òʱ¤[ƒÜ5£^祗O` Õ—±žX]AŠ˜A‡RpñaŠJ`JÊZlÙË剨F ¶&læy¬ˆÇ†€ÆH|ú0Äq¨1¤woÍ©^–ýìÕ× óÕ·N†¬µjEÂl+ê&  ±€Ö˜Åv`"Vn"âëfÂFá£`2Rÿ>¨IH”ízwe—»Æõe{CÊi±sÊ6ûl´ÓV[íë‚ðÅ—ƒbÅ`* G‚ØÅL_ä>&_ª˜‚„&€€ ñŘ²•)"³aÚfm³‘á³ûG-v:÷üsÐC}tÒK7ýtÔSW}uÖ[oÝ!™gF”'k£æX º#õa’JCíÐf€^%&R¨ 8šŒõã9—Yd’M6§È¹8÷<^ÿŒóZ^°{]ö&‚f‰®–("u4¨@žé–P‘jÂéø&&¨ + à †8ˆ‚éXPºÖeµ}tï$NŽX –}-ƒ1ÿù$šç±Šp'ˆ•|)_8o:E8 чE !œÅ/Þ4y@C {x!³ 4…ÿU -‚•¬¸†½“4¤" y×»ô=…M8âë ‹•—,}„»Dbp'0ã'ÍèÉ’q%<ÃÉ’É܆ð;þ\£G8±‡X"è E2áŽ+äˆN‰±×ÄxñhƒQ ¾ªhÅÀ$ŠŒ‰˜:¥]Œñ0S„"šqk¬è‹yŒ5¸Â¤ga#* |X1j¹!?b«;!"¶ä•}ùK’ ‘dnôQÉàÉ@?Ú&õÑÉ—«E‚œŽÿbJ޲E  ꖘX1’ YÙnâ"H ^ð‘€Zäù«GGc‚6–v‰_ø@™OÊbÎÈ1B$ hnl’|²EÈ‘Ed°„>þ10¤I†1A^&H‚1 \`—ËDÞ ˜îlgp„I>a%F4e<Š*“&cСŸÝ†ÀÂ=Ä°šæƒ 4L¶"a¾˜D£ K–(©Dü é_œxAr¢$0‘¢ ÈHGÊ‹†²†Ìaý€O(Œp„=XM…0YT’C&)jQÍ"ܺ„]@¡„@*CÊ]Řñ(sDÂvNˆ)ø®JRÿxju0…Q’1XBšÃM~pÁ®1žp”äŠÉŠ€¶‹›Î#”H0e)‡†„4*är–´Â@g"´awDÆ"G±œkª^v¹Ñ'޲”,s¸“BÛ6C왇Ɏ€lx‡J²Æ]KË¢yPÓ%;‹è÷Öº]+œ+ùTsÎá̦÷Üãç4ZËá*–ªÇ5ç€Jª#*6·AÏÕÊ5U„êâºÙ5Äv§eZ™¬h&âý tB¹„šBé:êí+ƒ&ÌÝ&h¸ÝS èœJâ©òå¸ÅàcœU­" 3ͰlB CÇ4c³ý¬!À¡1 IN,²j¼ÚÖVÿÈÍ t`Ú®„¥%šd"ѹØZîFt ê­a‹k\߆y‚ÿýMUwOr)]MH§®E8qÌ/øƒº¬VSŸ”«c‹Šk ¯•á(é`ÿ§_?hX”ÅLüF´— êR%Ÿû²UÜÑýº¸Ì–ì`L©Rc ¸'Kø4bEpp')`íiÎ8†a,j‘¦äZTøA–`t%î¤=ç[ RúÄñå/rǬiÞ˜™Hf  u(Áˆöw3¡§/í‘ú1Ò£™­>ºXag$t]N'‹×iéoW:ÓÊ}qd™#ç­yAJBJn®}Žö æi@Ë3[È"ÿ·ð6‹å‹éGÿºŠæ^t–Ñ}µ9Ùœ~·B&ª/Õ2Ϙ÷Îw`ž&Vû[1}¬*@ t:ØM·b)醫¼71»2»7 ãŠ/&çÕ¾öD[¼7æ€:T‹ ¼¾LLçF•¸=L{™á„4³£î_‰ïå¤Ã´“dû%!¦ª:ƒÙ3,ÊY$}1C—ÅE%HαùgkÛÓU¸Õ9ó[^œÆö²ù;’­C²ëZGÙãʪ7gXhŠI{ZÎŽ ´¤÷ÕåÜõ{‘„gÙØ*ìn]~ùå:v#w4šµ:xy»€‰j‘ l`CFÖö§ÆÎ’¡ÃâGWÿ»ºWnp¨W{Ã_7æ™þeâÒ«~ï-ß‘czy¢~˜­_ÌKr§5èM6z`h1ðOåWÿ}‘¶W‘Ë“X¿Ú+>aï.\_÷¾{b>ÌKŸs‹Wœúç°~ð˜”}øÒ‡£Pk¨‚(€‚*;©ê<ÞŠ?ÁX?…Ó¾ˆ;ùK·¸s´þ’À¬+¿Ñƒ>®Ë9Õc=³s Ø“=Öª=hó¸Â0Ä ¿…Ó¨’ȯrʓϫÀ‡ޱ½ÝJ‰±Á@.S± lº[òÀ•;\«¸Â+—Ã{’Ä«Ÿ* çz/h3>ß3?®1¸S> \1ŽJÃ%G‹;„»e㨼s¾ç›™àaÂÿÙ©¸¯‹‰°»¦„È0ô9»"0) 1äÈ@Ì£ ‡?4±âS§Ðñ½ˆ= Ä –(Ã?,$„"lŒ×‹½Ù›¥Nã¹'”2ß±=Å1¼-–;>ªb´œ´´A¼3·‘Á*ⲯ=ü(F„™`ŠDÄ®#K”,ްÀÀT 5+ŒE†ëLÄÌ%¼ ™¾‚ÓÀ0¤Acü­wú±¡´ ‚"ð…²ñ…ÇÑFqÇ´ñ›²Ù… H†µI½1s¤cxÆ1›–s{¼G|ÌG}ÜG~7•°E¤DÖÚE­ÂD;ä‰MLÁ6ä;¹sA‘à-ûJ>,ì%©ó²ÿV\À.ƒAó»ÆZTCÄ[Hf›2_ zë¹#t>Ò;±ßŠ/¬ÇSt¿‡ ·ü¶)ZÀŒZÄZ±²C6<±EQÈqʹ¯Â #ɸæ!;¡B÷»²TÉdܲ=ä­ßÒÂŒŒÁ4Ã3=2ÔºþŠÆG«BÌóIÙ‘>É"ËèKɬ´¯ ¤<Óá«›<11ÀðC¬´9ŒlH$E,s±œ³tÄ.¬ zºS¤@·üC¦ãB,ÌT½sr¸Ud4fËÝêË} Ìüÿ¤œÌÂ\¢ÃäAý¢;©4·|ª/£ËlDæ3>•«Ì¹¼L¾ Ì¿ü@ÛDK©šJx±¥,>ÿâú»¦,·>œK“`Ä@BÿHMV¬MÏäLÁ|ÎÁ”EáËBÄÂ˶)—Ã/ªÜ(AŒL¤¿ÑB¯”ÉìÑL¤„ÎÛ´¢ÏÜ%ŒJ«.JsI,[DHsO-üN/¼ÁDCþ¤‹îlÍêÉÜäÌõô öü‹\šMS4Ž”»õ$.\ÅrZ¨£K× Oÿ¬ËÉüAíHé,Ð%$ö{PØÍ ÍúŠ4•ñ =F«cÑ.dÉÝ<ÆÆJ"‡OˆCÏn#ÑœKPSÔXt?Ã\Ñ@\FÞœ;§‚ÑŤK ‚RÄrÅ•FÐÄQF <öTOMI‰ÔÐX¼@ˆŒ´æ 6"QU$Ãÿ %Í—äQøìÐ ½RäÊR=É­8!Ò«„IË“R^«¢SlM¸{JØOê´É/ÜʔټjtÎ åR ­NTtO´²fD±íÔ(1¬ÊI£/ª\J*Ì“œ¬Ét{DªS|ÔH =ÞXNÅ[ªAÌ4ÒÜ âÔ*ÊUxzM’MŒËÄÊËIÕJ÷|'ÕäKGÒUâUÀ#ÃW}FDÖYmT]¾cÅ:»ì;É\>“zK„Ó©$>®”Åk¼ÕäÚVnMWV…Í”?ÝL¬OÍž]ÓÊél¬÷S$fÅ×lÍ Î{×&UÊ^5Ïq¥Åû >vúU~ÝÀ„ÍWÉ;ÍÑVÍËim¿ÿbûµGDN…ÅVtm7v}XRýUÖÛÁÙÿœ8†mØ”=X tLŠŒØF4U–EsrÈŒÕ×}ÕXu%Y“=Y­‘X›ËžuÓ›ËY]×¢õAp%ØœlJˆ³Ádt:^ÂØ•ÙMZbϧýZB>ÒKIª5Ús½Z”­Ú-ìÖ®X¼ôÙ‘ÝXŽ%[muÛ²íÖ#ÕQheZâèG½Ý[¾í[¿ý[À \{ŒS¸[¤[¹5ÜZéMµ©D ÛÄU\¬=\Ä¥\€ÝC§ÕQF5[+Ü…[œ-Üþ¼Éa O0óÜ£µÜÏEÝÔ\zåÔÝÖ­\Õ]Éu]ÜíØŒšEÈ•]ÿÛm[ßÛÚuÌÝåÈá Ýà=6ÐU^ÖuÊâ½YæMÞè=Þé¥^•íÕzÅÛܽ]îíÞÕ•ÞëmÞ¿ƒXëÕÚò5ß·=_«Uß³ßð_ôÝ^à…_ŠM_öíÜûÅ_û•ßùÝ_Úõ_ïýÝþå_þÞü%_àÿ%`áM`àvàŽ`F^ ž` ®à ^`¦à®Þ Þàa~àŽß6aaVa náÖ`>áõ=`gä\ý•aNá~_úm_¾áåÝa®_&âæáFâ%fbvá&6b%~â$.b)¶â>â+†b*Žb âÓýá/Öâ1&ã,Æâÿ3æâFcžböâ4Vcfá5®b9žc3~Y1Öc:Æc7öã?vâ7†c>ÎãBäîãDFäEfc!âF¾cA®cB>dGþX÷¥*ÁÝdNîdOþdPæGÂã0&e¢5äGÞcK–ä-få2¾dL6娕åQVäH¶c\Îå.Þe^¦ä^öåAfadW~åb^åcncX.e[6ædNeZ®eTŽåhî]U†æfvæJÆælFæmæfFÖæofæi¦ærfÛg6çpçažd`~gbNgr^ç8gtÖåv¾e|†gwŽg{>ezVfyžçe肞ås¾ç_îg†nå6è}öçÿ‡–æ€èˆnh‡^h}žhí=h„®hui‚h…ÎçŒÖè“ægŒ®g”Ni‰6i—^ioæhk®fèUé˜Þè–fi˜fgœöéŸæé ê—ê™îé£Fj‹æèŽ&éé’6ê¥Þ餖êvê§Æê¦Öêšîæ©Vê¯¶ê‘æê›.j³–éªFkp†jˆfê®f붦ê°ë¨>kµ¾ê‹¾ë±vë²Öi°Æk¾Æá¹¶ëœ.lÃ&j½Þk¹^kÞêÀ†äÃFl¿&ìÈìɦlÉ®lËÖlÀ~èFølÐmÑmÒ.mÓ>mÔNmÕ^mÖnm×~mØŽmÙžmÚ®m‡h„^ÁíÜÞmÿ>ÑíÞæí!ñíàî îâ&n1îäFîãPîæfîàpîè†îßîê¦nÞ°îìÆn¿Ðîîæî½ðîðï¼ïòî•s@ï—Io>aï!qï÷Vïö^ï—©oû¾oüÎoýÞoþîoÿþopp•Þp(p‡€‰…W@…?Dp ÿTˆð ×ßFp ÿ‡shpŸ‹ˆÐ7pØYq‡ØðO¢p‡qŸ qw‹FhðŠÀqÝ–ñJ rðTPp Opø‡?(q­€%}@…Àq­€Ðí/w`)wÿ/ Iðñ-GðI,?‰s€9¿mHo?‡`rÀórÝŽpvT(ó3?‰4_óØs‡s9ŸÖ>—ô)?ó=ïó“h„6€7o>—Cçt‹Ðô:uv€ñ)'s}xòh„TçWWs°ðVïò// QXõ; $wHïVgpa§r0ó;çó-ó”Øð$t•ÀrÅ_ŸÖ`‡rÜrc‡rdÿQ—ñkŸsh'‰Èð1ßuk¿v‹8w‡˜óHOukó$õnÏ‹àôfwö¼àõèvIÀp‡€¹w•hð÷q?'‰;ßòÿa¿u]7qÜ>õ}§õ 7ø¸èv1ÏwWXøEoxºèóZ/x)ÿCQ‹CWuÏøâ°ô0s(Gw-w™Ï 1/›)ï÷”§ø€Wô/ù€‰½w9Ouw÷¸˜sg‡Z—x§÷ùSO kz¢ßxEt}ðò¤Ïps‡ó™7yWú“@À+û¡ÿ2³G{)g׫?ùEu»èú’?õ½øAö×mW?‰n×tèö?‰9Gò}û&—zWïuÁŸ‹nŸs}ÄÿvŽhð;xgóÇ' -wïHGñÉ·ˆÑ¿ñÏ÷À_tNoðFý¼ò8ÏsWøòÒÿwÿ0çu,—òl'ü¬p€Gõ•Wüxv×—sÍÿÏt³wßopÊWt—~âïù["þsþ5çú)? ˆwJ_wè€ß—ˆð_÷‡yß?qk_~·vöFÏÇyöÞzI·ùy/ mv°ûgð „ %D¥Ï`£¨R¤èêœA}]t5°"ȃì&BÀðŸ@‚!)êkä²GF$¹2¡¤—ØéÄ(3dΗ"9þóxó(Ò¤J—2mêô)Ô¨R§R­jõ*Ö¬Z·ríêõ+ذbÇ’-kö,Ú´jײmëö-ܸrçÒ­k÷.ZÿIš‰÷/àÀ`%ÀøÿOÁŠ3ŽJØ0bˆH28 ¯Ã“‰6Ú\ô²€ÿu¦ü™À‰&ùNž(Е€ÑgÓ~J8ô€‰ {&€àä ±wðs„‘øÇÛ7qW$¡›x£Þº]I.»6øð+—þ¯·AÝçüÊað‘Ä OD|ý?Ýúˆó. À•nçH'€t~‰w ‚8fbûù™uU{åw™q|ýGƒ‰ à[v¼é£[yþ— Š >Öáz™Ç¡s’°ƒXuÍi¤õÀ~æe·£nä—˜FÜ-˜"’à­xXb?WŒAê&r…‘‡ž“Ó¡db•]ÿ‰Št†%9&cç42*'¡2I0e4І­§†s4§MTæÊ™m„RŸd :(Pz(¢W¡[¢:ú(¤‘J:)¥•Zz)¦™jº)§zú)¨¡Š:*©¥šz*ª©ªº*«­ºú*¬±Ê:+­µÚz+®¹êº+¯½úú+°Á ›jÅ{,²É*»,³Í:û,´ÑJ;-µÕZ{-¶ÙjËÝzû-¸áŠ;.¹Ý¾2Õ^T¥‹nUëJå.TðÆÛ.UåÚ{/¾œû®Uò>åoSL/ÁìN•/ ›k°ºýÌ0¿G%°R [|ï¾;,ñ¼ÿ»1ÄP]<ò¸wܰÇNQÿ¼ÔÊIµìrÊL‘<ó·&óÀ(ëñÎL3Í6« rÈ'}sÏF‹ ôÌB眴ÒQK=4Î,×Ë4ÉN3õ2R\åõJ`‡]µÕP7…uÖG#­öÓloM´ÏR¡=²Öe›MµÛoßÝvÜQÍ}qÝJ‰Òà NÑሓ-øâGýmqà07Þõä_W~SâÄ^ý8‘S~ùØ{ë·Ý<ûÍyç¤3ºápO·éK£Ž¯ç–³Þºè¥÷ûëKÍžo혻޻î»_üÚ²ÿ^nð¡ç¾ºê’Gÿùô·W”9BØg?<ì¼'oü÷^i/’õŠ—¯ùùÛ§OþTd¸ÿ>üñË??ýõÛÿ?¿óÕ ÿ¼ôÞ‡ßýSî'ÀP€ùóÿ—À2ptQ) #HÀ‚ODà+È·J°ƒ„= fЂ%l R>¨Â†Ð„ÈCá 7(Bê=p…6œ á¸Ãþ‘p„=ä!o(Äúµp‡@t¡gHC .eˆNÄ_×Ç>ýñ„F´Tž¨Å÷UÑŠ2¼"xD0†d‹[ìb ¿¨Æ5¦Ñ‹mLеˆÆ$*qü £ñÄ8 qŽc$cïhG*â.‹|¢—ÈÄ7ÒÌãJ‰ÈGBr‹d¤"ë˜ÈHJò†›´ä%ÿÈÆF:òzTé¤')JQb2“¥4¥ õˈÊ~²–ªD"+I9Ê\"e–´¼%.]¹K^ s˜zŸÝØÊc¾Ò|„,d%Ÿ Ki:“šè‹%0›yͨ ¡›Þü&8Ã)Îq’³œæ<':Ó©Îu²³î|'<ã)ÏwÖã ó¼'>ó©Ï}ò³Ÿþü§9ëi€´ =(BjPþC¡}(D#*Q‚2t¢½(F3šÑŠj´£ý(HïÉÑ’´¤&5éHOªÒ•²ô¡)m)Lc*S|¾t¦6½)NÉYÓœò´§2Ý©Oƒ*T’u¨F=ªE‹ŠÔ¥2õ Jm*T£ªÏ§JµªVm'U¯ªÕ­Ž3«\ý*W!ù,d.C‡ 000IIIVVVnnoMx¨mm‰kuš}nŽxyˆxw—g|¤u} Y­_…°~ƒŒ{ƒ“h…¬fгm¶y†¨sްz—¹>?žVµd›WXžrRŠrw—dqš~l•ywºQS­^f¯{[¹{X¯jo©l{§yf¼di¶hu´|k¹s{ÖuÔz1ê~ìz/éz8ñ}'ð}2ÙZZÔ]aÎd^Í}FÉzVÜkMÛfUÖvKÖyVÇdiÅktÆvgÊsxØdfÕmpÝvhØxyæ^MãWVèeHåeXêxIèwWäfeåopåriäyx†n‹‡v†…{—–m…—u‹š}”¤l€©w‰¤}‘¶z‡È{ƒå€y˜…x¾‚I¶‚Y«‡g®‹­‘xµŒh³Œsµ‘rÝ‚,׃:ô„ç„(è‡7ó‡'ñˆ5ò‘;É…FȉSÌ‘XÒ‰FÔŽTÛ‘NÚ–ZÍ’eÆwÔ†gØ‚wדh×–xΤ}Þ£jצxëˆGë‡Vç–KéšVð‹Cñ–HðœVèƒiåƒ{ë™gè•xî \ð [ç¢gí©uî±|ð§hð«p‡‡‡†…•˜ˆ†›…›œ’Œ•••‡Š¦ˆ–©‚š¹–‰¢š–ªœœ²‡ ¼›¦¹¨€€§†™¢“‡¢™—º€Œºˆ”¹˜„ªŽ §š¥¬ž°µš¨½£Ž¹¨™§¦§¦¨¶§²¾¹¤§²¬»´°®¶¶¶‚ŸÂˆ¢À—­Æ›±Ê£­Â¨¹Ë³¼Ë±¿Ð­ÀÖ½ÀĺÇÕȃˆÈŒ”È‘˜Ø†‡ÙŒÚ–‹Ô–—Ä™£ÚŸ¢Å¢‹Ç­—Öª‚Ó©‘Õ²Ôµ˜Î©©É¬µËºªÈµ·Ú¢£Õ¼¥×¸ºä„ƒå瘊噙꤆ä£í·ˆì»•奥躤巷òµ®ñ¹¸È¼ÃÍÀ³ÙÀ¨ëÁûÄ–êÆ§é̵éѼòʨñÀ¿øÒ¬øÕ³ÇÆÇÄÌ×ÊÒÚÛÃÅÕÎÓÛÛÜÉÕãÛÞâÝàãåÅÅäÏÐç×ÉåÚÙñÆÅøØÈ÷ÕÕåßàåáÜåååíîðúççþòèþþþÿÝ Ü·¯ž6{¹)DHpŸ=…Ú¸5œH±¢Å‹3jÜÈQ Ç CŠI²¤É“(Sª\ɲ¥Kÿòû÷°MnÛ¶q3‡ï^9 wÚüG”è»\Hs½ÛW´)Q‹N£Fe*µªU©T¯jµên«×ª]¿Š%vìײf½¢M{•é¾fдÕcbÄ>Kø9cÏ>F˜È£¨Î‚Z´ ÓÊè®°fì8RL'¹rCÊ ÙrÕ¬–³Öµž‚Ýt4é¢ûäAƒ6­.’D‹Š ô@ÒG1q.‚¹,dÂX“ãÐ[ÆlY2ó¬§MG?-UzhëשW%¨Í8#Øô!ÿ’m@…b¼Ð¶OŸ¸EŒBYPG°ðð‹ØXËë­Þòæ•=§Ý?ØyV f²• ‚NEP=Õ ±Ä4…QÄ ‰ F1,qÄâè³È!$úÁF&븋š<ˆÍ4r´šû@“ŒèÜD.˜–c)–C6èÔDôø]F¼H=i”C M¦1Ž8‡(R=‰¸Ñ‰aÀB™j«ÍXcû`“DL@ƒÍŽ:n$ vDže$Yw˜§ž{RdM ~¤‘†€‚Fhq iÐcÍ!¼íCÎ!sÀK-û¤S\\òLãfš¬aÛü±'gœ§fFçžunÕêg¬îÿE×,¢FŠüy( ¼JŽ5pœB ‡,BP:FŠõà\oGA6‹ýµ×3\‘>ê²LO=ã"4rFn¬áÆ"ygzxCVgšú馫J3tŒã ùª Ï>à¯×ÔMÏ5‡ðn~x˜õ¨Ó\@ÐHjÀŒxC{÷mÙ8k‹³–‹Xã‡Ä¬?ûëM}Øa×®³ãúãSÐãdˆ†irH‰æðV䂈`ÐâÎ"hÜeò´ÕDM# š±xwˆ>$¢t‡›V(Ò8Ûì|$M8ÎArTlDix¢ …¡ nÈÁ&á‡2,âjÖ ÝöÁŸ“­ÆoÁ^ûFÄzŒcúèž÷ÿ ó:×uÍ|‘à ´ˆs4DïSƒ5èwkÀ  ‘ Îð6˜QjèŒ5@P)§_)AVFÆÖ Q‚Bí”HG&:‘ PDC öa¨2 JJ€$^ð3˜ACˆ„áZ—Ÿ3’ #jÜËøÆÄe'ƒ—¬cò´AV,7j#ÔàÇ[¹à(øl@6ðP2œa Q¶ R”ì9C¾Ò`2Ž¿äŒúÊ4q”G j8”Ά3œà;PÁ#ÖÀ†C"· ½.ciç8lšGH¢6ºQ—–æç˜DMÞ]0DäÊ`H2„.°%Ö@ÿ†@B‚ „9™Á´Q±Éd¡ž5¬7ÃJ‘4½,JDùäÎlõ¬!"*”¶pH8p dC,h‹0œaC{ð€´`ЉC?ÚXÓ4öc¦8Uët»D-ºNv zÒ@B!öá-hè =ÃÀT B   ðY YüFø"Èš”ã)åèè¦L'/wzÁvšµAÉ]–P¢ÊmèBü@‹‘Âc{ÐÄà‡ †‘Vi4*®&U`ÅZNLö”§c+!$´‰Fá ÅÐü`NlÔŽH„xð„ ÔŸ€©LiÚ´¯ qˆ›l,c+ZÖŸÿ6R’€ÑA<Rì!š Å:'P`<@,°ŽnP@ È1γŠØ×ž3¶…¨lg{§·Xô‘F]vðˆ`6ðÆæCypB €Â `vXAQ8Ž7¿N$‰CuãHbc¶Ø‘U»ÙEð·*¡TÀ kÚ„}0Š$ÀÀHL&àAYD (}AaÜTxªL6ŒKC°´ غ6ËD)zVÈÒö4Á¹¢ ái8" IXÂ5²pá^$FôÙ‡aÔ‘‹X„X eltØhùke‹8‰¶©‘,ÆA:p&klãl $•HG2z±*¤ãÿ °P>€ì  (@Ò‘Ãð¹Ï ˆ'þ,„!|N†€Ág=ôá|>FôðçJ[úҘδ¦5M—xúÓ µ¨GMj4%² È%¸ÌcNsíì£É•ˆ…;Rs²Ã]XC&g H"pí›(‘ uÀª€G&,!„^”ÂWP1AÜp¨|喩ǰ¡!ΆqÌÐF{Í£= Œ¬ÌkX!(a¢—ûЈáÆÝƒáø#]«£üLãE5…íÚ›=ó27ÞæqT´ Z8 ¹ˆd*öÞw¡69ñ|Ôľši¼ü"^ÎHM»jödzýõŒwýi8RwqÇ¢p‡-•Îô\dB8ë¨$ª~õ¬›jSL;½Ò´)VYñŽ_üÀ¥?ý¶odh€öðcBP€ð„ÿ*Q*@Á¸£Ö/PÄ¢ùI‚tq!,¡àP~.-ã)lÔƒL¥fE²]2F€(9+ I¶‰@Eiµp< a; €¥ »` ã§<D †F€óu×2¤Çú·4e‚Ch'8€7VØÙ{ Ù°i0BPT0 B 0 C ÀàT 2 B20bNË×,LÓZAz8’5¥vÔpiG†§#„Ù@× B —°½À¸së kgR S k‚F W8c ù·…ùá/‰X]cX}Ñÿ{h‰¤*k؆û°ƒF‡OÐ ôO@y˜j«Q !÷ua;  ûA³*èF¬-ÊbSÇ]gˆƒ7h†?U8§so¸×ðƒi L€P0;p   *À µð„T@3 ?€7€¿0E¡DØŠÐoÌ‘¦ÒÔ3Ø5Hƒ¹h‹Úññ°ݧµ°qà((XI0(Ð ºàB f"g#8…D€‚ß§E“i@" Å›2 'ö‚þÖˆ¸ØŽè‘9 ·ð Gqᆑ ñ` Cs‰„@–(úåqÉVP œÿô&D0Dð“?‰k#Pû ¿)$âÏA&Ô•-÷réè*b戱W†fñ¯ üàO7Q©FQÊ¢)<`hÊ0 <t1F ‚DPÓ°I>w”Æ¢FÕR|£‘-¸e—K²‰†I•U# 1ayy 4Ô 4á)ÙÖ <àß$3À²aPr j‚/+3?Dêr5KÉ4^e†— O€µh`먎 f ²˜1–c Uð Pçø žRT Ï2…I r9—×SYµ;½CBûæŠnt‘‰«÷|0÷ˆ’ÿØ‘…‰˜š•ZÉ•â¦Á×`  ¾ u!ÉÐäGo>PI @ù“uy—,¸o–ã=äX2ÇI\YeF­g•î(ž‡ižš1’%¹u…±  W€¥@ªQx€Îps³ À —ê À £”E”~˜Ò Ões6”‹öRë@ õ縠ú ºÈ ¶i$ð(Á„†‘}  %ðÐ"G`OnàbP (P¦Ø&ÂÐ~´Óð,…€ 8ôf‚'H”¨ç|oâ—ƒ·…a“°~m"ŸÐ7žä‰¤º)p¡q¼6ROV œ–q1/ðÎÿà m°=p„Q@@À&c—|Á¡G(u±Ÿ|€w[ˆ|eARwê T€m8ž|z¤EÚ§~jaûÀkðÅd!Ç&Wú q k Ç `ÈÑ‚¦Çº–£b7  ešP|#ƒ,xb¦W…A4A«¯Èª‰ÙªIz‹°š†A«¶ªêPTp#và#º”`aO`ÂJ¬m›LðÖ(‚8°§Pû)!Pcv×§‡Ûú#²ýæ­Fêªà’âÊ‚:4²P¨•@îVÎàmà z—ð¥O ~öö…ùjpÿ 9`Ò ‚F0)–2©W¡Mÿ¨±ðp8$b8Q¹-€ê°ß:´“hîð{êÖ ²R ¦Ôda_@Š €30T ˜B¹° ø©O@uÀ“ßat€ î€FCD/òq`²Om ë0)‰@˜±jƒ®yËZ ±P °\ãØ@)€_Ø ³¥(Ððe’ A °3ÀõWÿÿ0¶D9À±æ¸Á”«Ñ$ås³d#¢r?[AAÛ  ±hÅ¥J 8k—°ÌP›¨ î_@¥`“°ž7gš* ÿœ 8€A tA Ÿ©2#ó&²ÿ Ez—àİ:®D«¾ë«÷€û±ÙÚ@‡ ¾k ¶\ªP#Ÿ`°¼†UÓ°“Ð ÒÛ¹8€ ƒÀÕ{@©×£g¢d .Œ0làâX›´{·¸¹·|ÕÀÜ  ‹¶ié@ f|fphé€ ”eRPªB` |– àòú ÑkÀœÛ ̰f9 &|iÌPÂ|V}fÌ€ ³xÀiûPj\ÜÅ^üÅ`<øÀý2ᤸ»"»›ªqÌàÐð Ã[¼ÇÛ}Áa?ÀÕXÀ|Àΰ P«bH7ô½µÚk­ —ÿÀaiÃ~àuÌÖ°²Û¾“LÉcÁ Ѐ1¡¶Q§†‘ î€ VQ`þ¢R%P@¡A ˆ"'DÜÇFüq0fà@>»òP‰&G»qôA9$â2)wvé+´’üÁ³ë˜¬ÉV¶îp¡d Í ™’¯›)§,2Bà±° B@ËElËœë-àGhP‘ò; åÇ •Àaûà·#5\׃rô° êb=åɾˬ·m÷@Æfl´Ð€ÙG¡ÝÑ 3;l–Ú SX˶|Ë-t(ið0y°°Mz³+ò˜ql™2)ÆRЕ<ÐÎlÉ— ö0ºÍQ ÿ÷Ê P i ÉÐ^Æa@ÞÄ&?0‚ºPÄpÀMa~°+ Äo‘‡˜ð"Ø€1ÄÔéP,Ê,Ð,ý§¬Õ‚ð»ªAÓºÐ8 *;-JÐ4Þd„Ö¸ÑìPÔž@ ,€Ô‡ò@È”i >P&*PÖ*SNzгWÍÌÍÌÕÜÁ»¨# ÝдðÐ%#ѪÎ'Â\$°¹ÿ° žpÀ°+°L~Ä„ƒKÝ„7[ì

é.ç_ÑîErà & Ø—ÏšÇ>€)Àþ3ïƒHfPðŸðUÿV@úe n /ÂÀ8À—ÛÈõ Ã_ñÏþ˜ŸùÉôËÿ&øì?fWL@Ê>O x ú©D( ?ÅPÕÂ6 ؼ}÷ià 4huܰÁÈ$‡lý'”(P•I•NÄ(OFmK#²”ˆ- ‘;v °òD(§PéZ¤oߨEI©J¬÷”‰6yÓjÔ¨óK‡;û€ñ r‰+õT®Ýwt§QÃ=ÿD¼XfcÇA#ó”*µ¢¼ˆO±U&Ì$I+V~$a¢B¦Ìа;”¨¡¶E‡ÌÖÓÿæbfÏD’`–‡ãà7zí«×K$!˜·œ ró¢ÐiJL½ºõ˜•—^N½Y*áÏL YðAÚ4ê}šéÚ3š 4Œˆc„&šÒ$?Ò fŸŠ¦‘˜^±€žP&7h¦Ñ ›¸ Äp%æ&“ˆÂŘ4ÌÉ£ ŒÒB˜ŽLª"ú¼ûP"hú#bdN†þ²§øØã@&‹¦¦Hˆ ((€…&tó,DÏþ;2z®±œÿ~”\²0*¥ÊQ  ”Ê—¬Ìl<äL¥iB4¢?$øt'H„„ÏÄ3höéó3(P`’ýtTGH&°éÓË$¢±Ò™C‚=äœÈ"zÉF-””§e£4ºg-•vÁùB¼ŠˆD1‚†JÑå**ùL5V]Õm(P QfH÷ŠÏ´©ç*#®æH}ü8r¬9ÇÇŒu YJ›U¬Ñg ÞiZ†;KB5!‰Ð0 ­(m!¶èáyýó‡&`%—(Ôm3mÆÅè³#ÉéÉÎA'àd FøfeVÖdWJçg ƒzh¢‹M`€éO!ú“á3#¢pDˆÿ^p†ét>Æ *JP€‚ X`’ù¹#„ú³nŠz™>òºœsx¶ûn¼óÖ{o¾ûöûoÀ|p 7œç*–v­zX]¹Þ%œ&ó‡I**.ÕöæáUpB $ˆ€“i¦‘7½x‹d_}ùõ· +éîdÿ‰=‚s×RÅçô"àHa2Ôa‡*Ô‘çO&–Häšq®E¡ ,°à ú‚Çš%êýìQhYC`…E‡Ÿ$‰B¼&•ÂgìÎéYÛ{·’0y¬MÂkd0ñ2#=2q?x‰2à„,‚¤zÔcKàE%"*XÏ$áLÿ¡µ~TªvH) û #°ú½/gð‹ýìw?•èŠ ñÚ%„ <á}‚F= ’$,AàøT®šFÌ)'FÄ8Ʊ>øÀ±P-, xl*}(бL˜B—pñI»k!-ôÂA©#‚Ù‡ºØÑ¥õ‚‡O¹×" ,`£?ÙXÉU0Õ¡ˆHÃÕ˜pðïÄbƒZ¼‰²(F¡‹bt ©#?›`Ò&hÄaÖ7nn;ÈØÃè¸;ª?ÿɈ„LuÐ0Bpð´¨(’ƒK! “’˜ˆô,Œî«_ú¶Bd&óŒœd$‚$m”ìÁøÁ(Cÿ$¯^°ŸzØ1£¡ŽðaK, Ba…0ÁŠX\J[˜ÁÆÂ ¯‘›œ'´Dx»öp~–”Ž&¯Ã;fJ„"™B[²w¯(  ý«—w–5" t¥D:•„iXã|(ÂŒI€)‹T ‡ì£œ4Ò}*‘TcÆKê,Zuf–zy L¡P0AŽ€>Àl€Ÿñ’>¥@uÉKÐG"ŒÊ„^DÁ ©J|¤^|ò&¿æ0“b³­ò,˜`=f•Ù œaF2”Ò–§<Œx²›q\U»"MÖ‹ˆÖCIÀ”;– €IëÌb ™ÿ mf“cÐ$ÁJÖ™Ìn¬úœNâ(9%~ö3­ÌäNz !@ÇBcº©‡F‘m°ÆÂÆSûêŸz´RW¥‘–wÔ§µJ—I‘fÒqÊL ÓX–$â<[)±jö¥÷¬§ú`Ó™’ö>©AmDÀY‘Àº¶²}èjý¤ÇŠê¶OÞÑ#*¢Ñ·ª©ÈfÒQ_Îj–9•Áu#¹”évÕ‘‰ñ§sd Pf®•CnåÒv÷qh̵®w=„8æõ°]1!b¹¬;$«¸òÂÐE vpÆ&åªõÑê…z&]¯z1o'\n>Ì,&®B¡…N/P,Ár-pjUD„T¯#ÀÿÁ‚ÙC-«ky)© lÕ{G´Xo—V•“¦ÁF¯¦pvάÝfçÈöÑnR70hÏŠ]«SQ!Lqç£á ÊãH Ĭ‚щÕ˽U™¡Cwå%ˆ¯“-‘§Rîvd=Z’Í53u;ãÏ>꺢Í.M©eÚìié­—“Ófjt£O¶s•ò U‚¾b޹Ò9É[1lãXSÒ(Æ#4ZOK¤—ÊœvˆýÉO¦ÃÎKI™Æ^•íäB™ÈÅK¨\ΆQo˜fsslà3úx`¦R°ÕÒNK ÖtlLö²•’²\!è3ЖŠ-P ÐB¥4þ¶‹iV|ÖÎÛÿl¶§t ùfNÇÙܽԮ€‘ê·~Æt›+òRraX¨C°°@µAæØqµ«´Ëô­ÿÛïq[Ç‹%ß±¯›cîOÔ‡€RNMµ”2^ÁS)²èøJ..‹x&‰¥/xQfMëYÜ”ay¬_lV„ˤº)…ùTÌ=(Ã6"› Q‘ß˱Êðœ$éP‡€fÏNÚ‘j+ÛsýOªO]Û‘+ÔíNO¹g¶êõ4ŵыÏ6 KІ6„ ½bNÔI¹8,r±ñžÿDí)$y¶Ç|ùoµÆÙ¶Xžð¨ßÓÖ$¬:Ã9ø•xfbÞIÙ}‚Ô`íЂ³§€¾9¯c“›¹&uÿ½tÇœy¼óºtǬԛ¾ôÐßøøþ ¶éшút¨~sjý)·^ñíXA Q°‚w$¯ôΗðòK©ûïq éEi>˜yy%]ŽæÛÿæÎ¡ßŸÁÞð„M|©+³Öd€Šøó/ã3ºž)¿%ñ<Þs?ZÛ,ª+ –«¬å·”{ÀÑû¾iÁ’ÅS ú³¬ã•¤²¯cžª î8®Ì‰»ïã½èú*·c@6›±¸¦°j¿ ©Àäã¶.š®íèÀÞ™¹ð¨9 ”ˆ÷º»’íBAÉ ¾ì<ŸØ6´›5Ã4F‘Á…i©#³´ &rSÁG’«Ð¿Ãk& {¦‡+Áv"µÿbc¶¦@@» ì‰åÒ=Äѯ,+\‹®<ܧ”âÃÆÈ' ,¸e²”éó®‡1Cfj7+©×»>íÀûð>½C¹œHÀ-Ü=›±cš¤kK¿óûÃ,@èú‹.·!0`ø`H›TŒEYTEµù™^f(f  ÁšTL†¤1›Ÿ«Ã)Fc´²Éd8£l.¤T?¥„I³4GÍÓÊ/ºÁJ«´’°Jä7KôÇRäJ8“¯”˰Զ±tÂæ[Ê™ìš|ɹ‹KÄÄñÉ•óÉŒJ“ÌÁ´´51Ê,¾£LÌ,=§¬Ë̵äF¿ÄHûÊÏ䢒´K9¬B#H–œ;—ÄKÍ<˲ü,YãÂçr;¼ÁD3Ó/,‰*ÁÍÿG˜$D'TÍ'ù<†´´—“ÍÙlÊêÒ¬àÄ»§{K(„B¼IÊJÎr¼Âo¼¶Ê|Lõ›C?„MñlÇÌŒÍæ”:*¬Î´ü"2[ŸM¼Ãšñ‰äôDTË($«–ÊKà CK4OætÎôÌŽõ HzŠÃOJ[;úôÍn»6ü„ÊÚÙϹ¼4¼üO`ÐæüËç GYÌrL<ÌÎÂ,¦f$Çò#˜Ý´ÍýLÇþÜA´;ÇNÓPõ´Á$ÐÓÔ<œÂüŒÎ¯Ú¬Ý,b|O·kͤÌÈ”¤™zBŒåÃÀ åÐH¤¤ÎçúMÌ 9è!ŽÜ<¸áÔ;Îs4EᬠEKt|ReÎÿ®¤ŽÉ#¢”¼pìËJäLrÃ5ú ˜háM£™«ÔRþ„SñëLúͳÏbÑSD=£=õÊ>½A‚«AÔ§¬Kœ1Ô–»»»\SLUÉžtT3µÎÏ#L:%#;½TMÝÔ_{¿ 5>*•¿¾”59Ó%AÉÍ´Pðk’E ¡ÌU+dºçøÔ–”Tÿ$NÏÚM¤dÒXÍ$^5ÕLmÖ9mÒ[̨Óɬ´PÈ$0S½SÓGµVE·&Õ´ݯn¤Ÿ]]Vl}?K-«å×deW#×uÖËÖzUÕR…×oÝQzu:ù4NTÕU{MUȼÕñtHŽÄŽVeUc­Rð¼Ö^SÕt…Øÿp%Ö—ó±„õKW…;ˆu³Žµ.‰Ø€}É·¬X£v<×õØmíWU¹ªV l3cF›½YœÍYÝYžíÙÀAÍ{]Yýء٠}ºËü¯JYtÙ– Z¢Ø“”ÒwÝG¦Ú¢}Z‚Úy=ÒÉz×ZmuÙ—åÚP4[DGñ”Q¬ÍZ²U!£ÅÕ¦eY¦[Uv4×¹¥Û±Ý[¾ÝÚI­Ö»زE[}…Ú¸uZµºÀÍ[qmÛ®ÜÃØ”»Åuܳ\½5\­…\Ò+\ÍÝ\¸Å\·í[¿}[¹µÜÇ ]ÐeVÒåÜÖeÝ×UÝØ=]Ñm\Â=XÓ¥ÝÛUVÆ•ÚÿÏ]É]]ØÞÌýÝÒ%Þâu]ã=ÞÜ ^áE\äÝå•Ýè•^æÞáU^ìÕÝæuÞçõÞêMÝìÕ^ò¥Þí_ôM_è=ßõ½Þò5_öMÞ÷åÞð_ú_ùßöu_øí_ÿ½_þý_õ_üµÝï%`ýEàÞ_fàÎß¶Þ†à6à–àVà öÝÆà æà ¶àîõ`à &á>a®ß´eááî`ûuà¾\Ža¶áža ®á6áab¦`>âbâ%.bFb#Žb)f Ÿ­b+¾b,Îb-.F±%b'Æá&þb&Vb2.ã)cÿö\ Nb6nc7Fã4Æ]Vã0þá5†â'~ã1Æã<îc86c=ã=džcÞÝÝCF]:®ãEd?ä3†dB¶c/¦ä8–ã¶äKÆä;ŽäBîäGäOåPåJnd>þãIFåTVeO6åMæØ våR†eFædReMvdI¦åZ¶åVÖeV~å]^e\>åb&æaþåc¾åDže_fæg†fanæX~Ø®æeŽæ^îfmžfCöÖlþfYçmöfrÆæpgs¶f^Nç.FfpÎäd6æy¦gw¶ç{–gvÆçs†çx¾æ€h¶­]nFçz–æ~æç…væ†vè}†èÿröç‡&h¤f€è`f}žhŠöh†é\æèŽVçi‹¶Ø“FéwÎh•i“é„>h—®\Œži„þg’VfÆéšîÝœÎgžŽh˜.hƒþi Þišöi¤Vd¡VèŠÞèžfj¥ê§^ê«Æj¢néªÞ‰Føj°k±k².k³>k´Nkµ^k¶nk·~k¸Žk¹žkº®ë¯†‰F ”¼Ök¾¦’½öë¾¶¿lúlë0ìÃlì@lê`lèpìæ€ìÈ.lÅ^ìÊnìg‘ìÈÐlÇàìΦlÀ¾léðìÄ íÒíÇÎlúIJaíÖ~m*qíØ†m ‘íÚ¾SÜÎmÝÞmÿÞîmßþmànánâ.n˜p…W°IhäVn—„ °ýW@…iníþT¨îd݇¿&°îH‡ä^îÄ0ï— hnÓŽ‰ì#òÞëïfïËïòv ô–î(!op‰ûfø.íä® ôûoœh„ Txnïˆpø‡òNPo›¬pI€}@…èo›$€Øëwp w7 Ip Oòþ„—Sñ—h`mòN‡ð.2ñ½.owThñ?ŠŸñòýÎñ?Š "×ò ñ!/ò£h„qhÿ"—'€›sWó¢€wò’`‰ ÿ‡Fð ©óíÞ‡:—$/ 7'€;Çs' —ò`m?w) ?t"q/Œï¾Ì@÷sÍ"C—ÓDw‰Èkwt—€t,ðêþtÏt¢ €î^ñA÷ôO· Xw Ïò÷t€%w äž _5·ôKw BÇn)—îv‰pS¯g§q#'ŠCñE÷óqó£XvwcßóîŽvØv÷uW¸ö)ÏöG)r>‡v ÿöÅxòóÞðyÿtÇ /'ÿ‡y\qaÇóÅPñŸÙpd÷õÎëÿiwö}€Xöøðw÷[7 onwTðö¢òpÏëq/ OŸøŠ—ò,ß×øî~õøs¯÷‘7 T€8! ×n•¿‰œßy wêÞ‡yÇó¯s^w ˜Ÿ÷q qwsç^vOŒis˜vTçøÂpp Oúšpõ’s—(ô½þs¢˜v߇ÐúHÿ Øy?{?{‚' —í,oï³zdïo_wö¼Îñ¯v o ×ñ w…ß{eGqBq o„¸·z–/ïe‡s|?ŠCu!/ò xh‡õ ŸüÊO÷G‡ôÊ×|‡—<͇uÓ'ø—}¢]çrZw…ÿØ¿ Û§õ—øÉ·qööô··zOwmT zÇÐ}úÖòƒGø(éî°~nwðtI1ì/ûOw×vy€þ&‰ù;ßëêwïüëåvq„¿ó˜ IkwkÖVœx°>õxãÞþïÿˆ,hð „ 2lèð!Ĉ'R¬hñ"ÆŒ7rìèñ#È"G’,iò$Ê”*W²léò%̘2gÒ¬ió&NŽ®¸(‰@ΠB‡• Àˆ2mê´¥Q¤ÿ” l$@€$~¢ÚG@ÀWU„ý·SÒûª^ͺÓ;¨þhô퀹q] Xûô/à“FÓ°ÿ”€†hl@a^7Ng”rº‰» €¾màªsc¿W³îx¹q㉖ çbT]»½À\¥éfÿ3¼2⣦ §ërëèÒ1FM*úÔ¥¡‚n|vãßkvšýŸÅ¤ï3 [@g±ÓçÓwXý<ñØØ·ºS :³W–‡îä·i&@qKyuÚQõI8¡A÷Q•`cYa· aqQvÔk³aèÙ?.¥TV!¢Ò™TºX_:ø…Š]ÿ B€\UÉçŽRÝHRFý8ÐsUå–ŒíD€Xî$ù"”QVd”jRZy¥I¨P%–]zÿù%˜aŠ9&™ešy&šiª¹&›mºù&œqÊ9'uÚy'žyê¹'Ÿ}úù'  :(¡…z(¢‰*º(£:ú(¤‘J:éSpYz)¦™jº)§zú)¨¡Š:*©¥šz*ª©ªºª¥¸ú*¬±Ê:+­µÎ*‹E=m¤«F¼bä믻rl®Ùz,²ÉÊŠkEÄ+l¯ÃB-µ){-¶·>[mFÎRäí·Óv+®EÙš›-³á’{¸µëîºÛ›Ñ¹õ&›îDïF¤/Dü:äï¿ñ6+°Dö\+¾ðœï Ûp¿Æ<1¬ ï+-ÄÜÐÆ uìqÆ QùØkþîé«ïý÷ÐS_>üñ~ûîKÿ?ýýì÷N‘üýËOþÀW?î5otdˆÿH>î/€ös X¶Œ(°‚Öcàúô—AB0‚胈C¸¼ÊIp‚%Ä 7ø@ñ‰°…ÂCa ñ×Àʆ1|ˆ sXr°ƒ<4àöLÄ„èÐ…?\¡ =øÁÚ‰)b ¨ÄJQˆKtâ EV±‹$¼"ÁˆÄ,6d‹!ôbBpW"Ò•®{X|£ÍXA4¶Ñc$ã}øÅ÷É1tDîj˜D+Š‘üë£÷HÅ?²ŽQ#îl‡ÈD¦1‚ÄciÈ&‚’Ž|¤%áÆE*’“ñ¤ï(ÊLj²”¦d%D·ˆ ËYÒ²–¶¼%.s©Ë]ò²—¾ü%0ƒ)Ìa³˜Æ<&2‰Ðd2³™Î|&4£)ÍiRӖˬ&6³©Ímr³›Ô¼¦7Ã)Îq’³œÒ§9Ó©Îu²Óœèl'<ã)Ïyóô¼'>óIO{곟þüg7ù д È¨AªÐ…Þ¡ }(DêЈR´¢óœ¨E3ªÑrbt£ýh6; Ò‘’´™"-)JSÌ“ª´¥.mèKc*Ó^ö# !ù,Ïš‡777WXppl}mm‰poŠ{v‰yu‘}|›wˆ¥y”·<=šd7°`ºp-•@A•RV™|}½MMµOR»QQ¼^_¤Za¢^h«uGª{X«ce¥hs£{g©{d³hm¼foºhk³{{¾wÈoÏrÞxÚ}'ëÌ\_×ZUÒY[ØVVÙZUÙ\_Ê_dÕdOÐiZÝfSÙl]ÖtNÖ~LÑ}PËfmÃirÅoxÉlrÖ`dÝabÝgiÝhjÓoqÞrc×qtÑsxÚvuÞ}tÚ{|ä^Vá[YàiMäaTåd_äjRèlVë~Wädbànnçteåuuä~‰xƒŸrƒœ{޳s€¯Œ²m´‹uÜ€)Ô€6×€>íô„ä„+ï‰,äƒ4ó†!õ‰%ð‰+ñ:ωIÎUÒ†BÒ‹IÙ€GÖ‘WÞ—ZÖ|Ô‡`ÔŒmÕ‹xØœdÑ¢vÒ¤{äŒ@î˜Kå›Uæœ_ìœUïžXð—QñŸZä~á‘dñ [ï¦jï«pî²~…ž–…šŸœ¢·®„•¥–’¤œœ¨›‘½ƒŽ¼™›¡š¢ šª«“¢¯¯¯»¤§½® º¸·©¹ÉÊŽ•Æœ‘ɔԎۀ€Û†‰Ü––Å—¡Õž¢Ã ŠÌªŒÁ¬ŸÕ²‘Ψ§Ðµµß··Þº»ä€äŒæ—Žä“”æ›“í¶…ì¼‘ä¢¢à·²æ¾¾ÒÁ±ÓÅ»ëŸêηÅÃÄÏÇÈÊÉÊÏÍÔ×ÃÄÒÒÑÞØÓØØØæÀÀåËÌæ×ØáÝ×ãßßäããþþþÿw´ØáÄHŒ2x5IÂä ©‡«~õ¨"X©3ø˜jRdÉ]ºJ‘jÕ#Ç`Àˆ°@‚¤%n>áÒEjÕ  €v‰…‘"GbÐ@c†UMT<°3“1~ iCãÇÈ.(,e ìÕ «HEÑ [¹¾! ”¥5dÉÊ¡-€»j;¹ŠƒFί_6ThÅ{w'œ,^¼ÐùkRŽ iñî¬s¢‹e1˜êF– ì—.bºðX1˜)W”(½Œ¹#ˆŠ KØ À% Fxù‚G̦tStˆ«%¸Œ!Ó…Ð (<Ð ‘' &>[V(8 !B„Pk@-aˆÑ$)G³h9¢ K)VTé!å«Ñ”J¢ä"J·¨aü’ §äp{¬rË" É&È;èPÈ(¥ì1 -À0,}Ü ƒ ˜ø¢K„½pb€ÐÁh\‘HD² M¨ø‘Gp°g4!ù,Ê—‡777|w‹|yŒyu‘{{›l‰ªy‚¤y¯u‘³{“´~š¼“;;CD•RV”V^ž\]†m›cnœ~¤GF©FG¬HI¡X_©X[»\\£Zb¯^f«|\ºM¡bk¨cl¤l~£{gª{d¤qq¶ej¾kjµlz¼gr·vs¹qt¾tëq;Á^^ÒXYÛWVÝ[YÙ]`ÜeLÚnO×eSÝfRÜg_ÝhRÚm^×qOÖ~LØxN×rPÑ}PÇ`gÀelÂjjÍdjËnnÃjtÍotÕ`cÒijÝbcÜgiÜnnÙorÔskÞrcÑsxÙvzÞ}tÜ||ä^Vâ\[ãhJèiJäbUãb]åiTâhYèlVéqWê|Uãdbåkdãnnçteãssåsã||€t‰Šx„€~™|”¨yв|‹¹~…Â|¯Œ¹€Õ6×€>ß…2õ…ä„*ï…!é†,äƒ4ô†!õ‰$ô‹,óŽ3ò‘:ÎUÒ…AÑ‹IÚ‚EÔ‡`ÔŒmÒ£vÒ¤{äŒ@ë€\î˜Kð›TðYä~â’dìŸaæ“zë›wñ [ë bï«pñ¤bð§jˆƒšŸœ‡ –§›”ªœž²¡·¨³œ«¿§ŒŸ¯…–¢””¦˜˜©––¾€†½ƒŽ¿——«Ÿ®¢Ÿ±±˜¨º¨™§¤µ®§¸®¨¹½¥«½® š­Áœ°Æ­½Í¶Â͹ÆÓ¼ÈÔÆÌ‹…Á“Êœ‚Á—˜Î“˜Ô€‚Ó†ˆÔŽÛ„…Ú‡ŠÒ““ÔžžÜ’“Å—¡Å™ É¥ŽÔ±‘§§Âª­Î¢¢Ï©¨Â´¿Û«ªß··Þº»äåŽæ—Žã“’曓䜜켑壢⬬㾡㵳澾ǾÈÈ¿ÉÕ³ëŸæÁ¤ê˱ÅÄÄÈÃÄׯÇÒÒÒÞØÓÜÜÜæÀÀãÇÈåÉÊàÔÔæ×ØåÝÝæáÛäããÿþþÿŸuÙò%‘B`!RƒŠ•,… ©›8Ѳ\ëеR ¢I’T®p©"h7Šêž™#¶nÝ/G¾l©"#V³-\ )’&ÍÚDqÝÖXg‹H—(Wö¤:7S‹eP¥©ºÀÐPi¢¼ÐqˆÙ(X ·LÙÔKU­®Õ$*Pú nœYUÒª½å"Š_(Rh䨓§š²W <èU›ëI˜04h,qÒ'Çe«X¬Vœ¸l6nHS™†4K>pVÛTŒÞŠáÂÁ£›«V«=6cG°löšˆICÚj[¶T¢Ç 8r5ª–l³ÕoÈ7Ñb@!ƒ9qÞˆÿoè ¡ë@mR[!E¬+ðÔ_gZ¯-0  /OÔH1E!tÐa‡„LË:#``1œXUÛL1!oÔq‡…LµK ÂȲÁü­“F3SÄ7žxó E”R  Ò/A<tÇx[la( É8Á»LcLÀF¡L&”á + @2Œ7àxFF¦Ì2ÁjDÓ…: ,‹Y£˜Q 2]SÀ$ê8ÂH¨ó› „ñE3Cñ„!RaS%y"§:]TS‰ @aš$S–5âŒyŠ™D¢Í]Ñà B„.èØ%M:À #0bˆÈaUÅŸ0ñ„2åØåÌ#„ð!BmÌ¡‡!ù,ŸdmЇ777V}ªiskuš}nŽyz‰xw˜g|¤u} Y­_…°~ƒŒ{ƒ“h…¬fгm¶y†¨rްz—¹::€IOŸBC›QSŠu~š~l˜{y¨DC¯]]µXX«^c¬|\ºM¹{X©k{§yf½eh·hu´|kºs|Ü|6ìz/éy8ñ}'ð}2ÀPOÆYZÛ[[Ç^eÖ]aÎd^Í}FÉzVÛkMÛgU×vKÖxUÇdiÅktÆvgÊsx×dfÕlpÝuiÙxyæ^MãZXèfIåeXêxIèwWäfeäopåriäxx†n‹†vˆ„{˜–m…—u‹š}”¤l€©w‰¥}‘¶z‡Æ{„Ö~‚å€y˜…x¾‚I¶‚Y«‡g¯Œ­‘xµŒh²Œrµ‘r݃.׃:ô…ç„(è‡6óˆ'ñˆ5ò‘;É…FȉSÌ‘XÓˆFØŽRÛ‘NÚ”XÍ’eÆwÔ†gØ‚tÕ“i×–xΤ}Þ£jÙ§vëˆGë‡Vç—KéšVð‹Cñ–HðœVèƒiåƒ{ê™fè•wî [ð [ç¢fí©uî±|ð¦hð«pˆ…†‡…–˜ˆ†›†šœ’Œ™••‡Š¦ˆ–©ƒ™¹–Т𗩛œ²‡ ¼š¦¹¦¦†™¢“‡£—–¹‚»‰•¹˜„¹•˜ªŽ ©˜¦¬ž°µ›¨½£Ž¸¦–ªª«©¨·§²¾¹§¦²«»´°®ˆ¢À˜­Å±Ç£­Â©¹Ë³¼Ë±¿Ð¹ÀÈ»ÇÕÊ„‡È‹“Êœ‚œ𨆇ÙÚ–‹Õ–—Ä™£ÞŸ¡É¥ŽÅ­™×¬„Ó©‘Õ²Ó³–Ω©É¬µËºªÉ´¶Ø££Ö¼¦Ù·¹äƒƒåç˜Šå™™ê¤†å¤œí·ˆì»•å¥¥èº¤å··òµ®ð»ºÄ»ÅØ¿Ã˸ÙÀ¨ÖôìÁêÆ§é̵éмõʪñÀ¿øÑ«úÖ´ÆÆÆÄÌ×ÊÒÚÛÃÅÕÎÓØÙÛÆÓáÛÞâÞàâåÄÅäÏÐç×ÉåÚÙñÇÇôÞÉöÕÔåßàæáÛåååïïðïó÷òèæþðâøøøÿõ ¤‡­ž>zÚ¨¯^BlÚJœH±¢Å‹3jÔØnß¿†Úúýs˜-›¶r÷ì‘3™ð¤È0aº³EÓ–;}1s¬¨³gOœ>ƒ õ T§>tËœa£§„‘={’écf…={ˆ(‰71Ý„ ²d}•…±Ý2_ËÖmœˆn­[†mêDÏ™³hN R4d +Îü„†ˆ¸‰bm ´5ÓEzΔHvÆõmÜ·k/ÏÕ‡-²"Öòê èLà?„X¨À¦/_8E‹@MH'Ыc‹ÖîÆë쌞eÌn5çŒKoš‘$Ѣљ3hX$)b&\>E†²÷YƒI]»W2 ÿ´m©@»¾õ9;R>8ðÌ 7 œ×ÇHS"*þÐCCf ühˆŽ!‰Ð3"mpòÕ®´U—]è©×›>Öq„ÎXß{ ÓeúPHh ‘ƆœAÆE±óPcÈaúŒcˆ®¸2ËQ)O4Rx—5J\Èkr˜¤\ÃMT"i ‘ˆˆ*þaå‰ãPóÆ)²¼3 5ÑuCvd—…[éS—†Ñ¢’yÓ›Ù˜aTCM5ˆ’L$m¬áE…2N˜uEC¦3aS$’kb$v}TçErþCç@Ô(²—!ÔˆŽ!‡P20}¼ÑÆà°Õ#6?ÿÉoñ<ˆdEâd§†Xz)E™n:=Øeçç¯è3O8œL¬šF(Qn²iQŸ‡uƒÝ<¿²_“Ž8ôä5ÖÑ@$â$Rˆ_pæxå¥76ÖXskEù¢ˆ@èÈHc·û!¿}ê:=âÈ!Œ0bm¨Ñ†"öE0CÛÕñÆ3 S?Ãì)ï<Õb% ƒõ1{ГclÑ#|¤ákÁ³æ»¯Fâ Ž>*BM ‚ÌsQÿ˜Ãkvâ4üÇshb,Þ ‚ TØrH_ÈÒŽ"gü CÔÚemF2 fʆðHÆ{è9yŒ3*vhLÿ½¢"à<m܃$}¡·Ô”=/gvÕj×Ï5v‡Í#N2ù(½tLçœÓ@‰L5X FÍ d@2Éf¨°F+¦¡ò`ž-de‘²=£@¹æ²ç†Wég¢OŠd¬ØŸD¢‚ e”ñÜõ rn¼ËŠ‘ÀÀ'½´Òvã-ª!„¥Î"i4e $”Ѓ 4Œ±Ù*:þ8­¶jdù¤¿Èää4c…£4iHƒŠÊ`4˜$ÈÁ ¡†5 QÄ¡àBhHF2’ÇFÚ–á |ûÉL¢ë‰ ÕCŠЀ LB cD Q"@˜PÑ*Ò…ÿ"·‘ Qch#^ 5Åë ¨ Z°Þ¶0†1|á²pÌ=d€ Y0…D|¡lX(»‘Ö{„õ«` Ð0!ôш,<ÇU4ƒD‰Aœa ˆ@hH X(Œˆ…*¤Ê¬ÑsŸkRnš’„iÔÑDÔ`øÐY`ñÑÐC†>„€ ø ,™ž"1’2Jb㥂u¤AGŒƒ†‘…-ôÁ„Ö Cˆ:è  È⼆0@bÀÄ%¨à D:#ŸèA.d­!ba‰0ÙêÜþ# š%Èdaºx‚´ ˆe2êCªàJ쇕Bä«k]ÇX†@Dç–Ä¡ÝănöW)ñŠv¨©VØG'¸ .@`°ˆ„¿¢&‡LÂépÅTñLT»(E%ªT¸6à1‰1Cã:C„I”® Ñ5¨a“˜Ž‡ÀL4@‹iŒWØË• TÂÿ{n}On¢A5¦ø`‰²ÐŽvÈb°øô‘Š3§¹;ˤ <Üì½*Û%(¶H[+"­Ff\3x_¡€´ã=þ±-0ÑuPâHV2“‘Ô£hEúYÀéÚÈI¡ 9:kíB ÷À)DÈÁ-ôAc)bàó4´g›OZ+nqÏõP ‰£!J(¢àqÆ 61 ‘KA 1xAŒPôuêÿˆý^&7HêŒÖ#2~¸½ÎÈ,ÐA@û&C Ip¡cþ&àó&ô/ØgpveÚï )Œñ€qt®ÀËÎR@r]» <ðA/JÐB´ÕP!Œ’+WS6Ó'Ü"€ÑâH1g×@-àf05ˆˆð`*•0MpS°z$Ã'¢`!G`rGÐ!(‚Õ`F‰„2*8ùuwÃS}×w•Fkw–€ ˜¦6R ¼ÐdÿÇÀ”0ò¥ÿà ow÷G‚&Xpù¥0KƒzogW&QM3(¶À}d1ïàIañ ™P%P ´Q„pwÀ € ¿à ÏpaèlPÀ0± ó'‚÷ÇtG ÐpD !.ä¢mz—(¡²@mÝöm—&°G÷¹– =&ñP2Ôm”Pîöv @à ™ðð»ð„`ùòõo·’6kÒ‚¤¨^1’ l∵6'ñ[XäU¥° ¨‚ nÀ ÌÀj°÷Rà†<ð¾°Œq÷NqO@V×jÿB7Eé R`]”Ãu ñúð[ •¶ a¢ŽÞ § 8 Ÿ0T0ô€]*¹’ÿà ÆwŽ4Y· „à35·††b^‘,A”xwgIDi”^!ìQmÀ‹ú0 ,ÕT0•U‰!úÐÊ•Z‰Œçøm° ô@“ÇQ-I´j7”^€а_pysA‘°`‘”ìEÌÐlÀ ff uMlôU˜è€˜Z Püvƒ ûF‚ðS·òwú޲¯àoà/P“ж&í@j襰šP 2•ÄR^ÐvP1R;Ò±ÿ äIžùø 0p÷D0ÆÐ½sBA¶ 7Ä© 6‚Ê—°8 ¯@  NöÖ0& QÖ` ±@Ž%° Õ[â)›æùºÐš(‚6p¦©zÚvhìE/_‘Ø1bBi;9œàa v¡ @vØÐ P T P ãYžå™eJ`6ð@07ðŽ(M¯+ ¯“ba }`6pY¾@9±–C°ô 5Z "¥Nª žAZ™» ߀¤“D§“YÖxŒò}²r°}`z£ Ø0|–UZ² W‰5 ÿYèP “ðUðP ª€@@r… *ëঠ°p †% HJW»p8PZ¢¥ •åX@pX  ‡@1jp¦U˜õÐÇ09!œÄ92JuQÊÐÎà :Ê£>: ±™¥Ð Z¹-à=€FÑ`8` ßmgYQÊmE \­ – Sæ²}eEqšŸ±_ í` TðO@lRPà"  úPø° .Pów!JÐfP=e 7ÓQñ0|Â7!Í`´‘ Ã+"ò*&j8~†Eè ð²°ƒ¡=@„@ÿ` ª ¡àÇ` +.+\ÔÍsô{ó;T/…É:P Èà :€ !T¼24Þ‹®°k à ø¢/Öà^Ôañ@$J —P%@{Ž‘Ñ´c´i€T¨V¦(K ¢‰”gá` ò’ÀßK ” i“!Ç0Iñ‡GàfðÈV`}ذ e0؃Vx piŽ+ÎðRXdŠÙ@œÁ?vq åjΰ îô ²@ •°éÑg˜ ¹ LÐÕi`5|°8(LV‰R® Ipr±[Ü-¨X¾§ñ`!Zµ ŒÿR RХĕ Šp •\àÃé!Š£!òØ÷9€ìŸp2ÈUÜ;‡¬ZEQË$HtŠ0•œ_„Ë’/óT!F²!8Êœ '^<¹åj!ØÁ&_›Ð “ÃÆàÆp°7"¼¬Br…EõÇüŒ$¯ø Ÿà^â 0W$=ðXλàm’ÁÀRÀ# mð«@¾ ƒÕÌ&=âé×aøìÇZ,Ê‘ÃÖŽ_Q º /!Ó‚åá(»Iž0|ÆzŠm0# KìØ; —KV]Vf"OXhu4ÜÅÇe–\0µ,¨6E!’A-ƒÿzÒ€5[àÄ *@¤@`‘7ÑJAÓ¼Ñé@µ5wÒ¸¡ÇΠN Yõ&‘RQg2DÖPÑ‚ (`Mø°f €DÊâA?ðoJÀwySp PÛŸ½œ¤,Õñ[TkÕA’~Â\­!i` ÖgÖhMj­Ì€¤ö‡.Æ ¼ç¿:@ MiñË+ý Áu ÌJ€F!"{èv;ÝÓ?= BýË7ºm@ ÎСv€ È‹FØÀ'ÀÝ(Ðx-Dö± bn,(–ñG„;²Í¡Ss=e°ÑýÑ•‘6E mäq¤6ÿ 1  qNÍÜw=Üh¢!R+6“ J æMÀh’Ù/'RÓÐÀ Ïv]øŒ/‚í t(v¡¬j ÊFí@:À æýw²Ý\h³oålÎTp†Ÿà›ó pÊâ/ãªÎoý#30tÐ 8Ðu ¾ R` i]è_÷ØÉBDT0_Jp e•+ˆ@Ÿ+zØàß´\$Bp\6ÐyHZqJC¸l%Ý¢Aã­hòÀÂã>¾&ó`Ó‚à <´fbˆé0 '0_ö§Þf?@%ˆÊDNgÿ¼™žÒ^›Di!=P9æ\½Fÿº{Ð7€àh B‚F¾° 0ÀšÈ€äw‘äÖð#rÍ~÷!-áçq™÷HšŒåìðé { ~ C΀‘$»ðàOàà ëðÞâÃE"ç‚2Ô`œ½Î ¢Ü4‰N'0À„þÊP$‚`¹GÀ(À~ Åqo^éé BÐaï}Gð Á Æb簜ĺ‡ö‡‚@2¥p = ”ØD²íúì¸à µ ¢_Âü˜Ÿ‚|‡ù€4à0ù`à Üu#1Mö×G€Rør= º¾í¯þ+¡¬` ñvó¥!fÿ´íY­ãÀ¹Ó4fãª<ßó†5_•å ö7|öÇŒDð€d“¼³j!\)Ú ð¾ YH!v‰e!ÛàªÉÀx`Xú@… ñÝB}1}& ˜E?= Ãå#æ:V«ðÎ'€^° FÌÏÂìéx.ñ?ö€ñfßFáA‚Ý& ´É×oS€}!I€Õ !¡Êd á@ I‚‚. á”ìžæôPø³$‡ìÃÚ±0 Bà j²„F`5} ‰/° °ð WeI°\ætñ'ÇÍìÆn¼ÌÅî6ä Úe @ð%ÐÍðÞ½19ˆpÐÿÈ×a@`±R×@p9{À•Ú-Mêÿ°üý¥§é¡Pëà B0èC'”1&Š ÎW¬ rMº#B¬Ys†MŸ>hD¦é£çŒˆÖ¾šîáGè>þÛ§ïß?‘ U®dÙò HgÎè=l1)Ù£è‘!@Q‰¡DÖLïXÒ‹§l¦É˜ÃŽåŒm¡Ã°scZiRsI‰w5ê‹gôˆ^"Fö¤ÿ½Z_´žÑ¨Ú3¤È _’b¼pБ¥S ?1ŸDÉÙ¹>†‚­m¦‡-š5l>D8q£ˆlj[÷¤MD/m!õ9CïL"óJv=yãq•s£íŠI9ØçÆ ì'§ŽY‰2 |’ÆŒ¸FCÄ™ ¤öªÐ§]„ ‚žŽX(!kèIè†â±ÈTb´À¬ù¯¹]bè/ÖœñEŘÙ‹žÝŒÀJC¨qÊšøŽJj)‘Zm %Z;ï*gôÑJ¥h”C¨h^Ü,FfÏFdHC ñ …4JG Rè $ß„Nˆ&]롟¤Äï#†4B§O-¹liÀx „I9ÿ}rfÁ4$}ªP‰h’²&à ;üP¡HE„¬@Q2DKN¦@e)º˜¦ûŸ˜>ªô®"VøÃ Y3j0ÚÈCO=öh‹r¼#z(!&سÔ*ˆf¦TU]É3ì^’U¹Š( ªj¨ç˧®Ë-°×Ž¢:%”X­5ô„àAuÆêê$ͤå,,§¤siÂxªÔȬx|é¯%z’ÂNçæý F{]Ú,_ÛZÊwàÑ©ò\•°é)&¤ŽÀG,[`ÁÄ–‡Hª·a‡'{ŽÃh°¹¬â‹=Êq=vé± $˜@¯NF™¥-QX`™§([²eWÒQÅ• l1ÀÿŸ®ºTœzj’ÏV?Ò¸×ËX‚%ꃖ†…^ª¯Ií‡äIˆ ¬Êzcñ\ó)ì•Æöt&8û¿ «Ü^¤±Ù¥'Hl’ð_]ZÚ[žŽ:Z¶­UñƒŒ"w5 ê£XoŽàôxÆœíÁ¥åÏqR/t,IOº%k¨€â *4Z]íÖU-üð#_¼ñÇc¦ߧ\"ôå+ºˆ­fÛí^+O]µ.w+rðçæž«Ì+Šk뇨ÿˆX%¾_5ü§¤Ç]qƯ~m¶‡x2å1o^‹I< ×û±Dv ]ÊØ3D­¤vr»Ýüœ‘ßÑë èà`é=øA Áô€ðA¦P…+ô NÈÁ]A*TvÑA²Çð…/ŽÁÁ‡´#mœ±þ7À‡OPþ“_~¹{„|2_W¢D.™*‚ÇÌÿä%Eæ`±K]#Kæ(b_ȃ3,sÙsæ5E3ŠQUräÒÃhÆ$â1x´ãY§GÍe® $ é£A2@Š\¤éHCB²dp,¤$ãF?/’|Ä$!ÿhÉJ.'“Wc¤-™@”•2a§¤ä'9ùJQzR“ tå‹bù"\æR—™Ùe/}Éœ[þR˜¼|Q@!ù,š_r4‡ 000QQQnnn^x•Mx¨iy›}nŽyz‰xw˜g|¤u} Y­_…°g€ž}„Œ{ƒ“h…¬fгm¶y‡¨sްz—¹CD—GKŠu~š~l˜{y«RS©\d¬|\ºM¹{Xªl{§yfºcg¶iu´|k»r{Ü|6ìz/êy8ñ}'ð|2ÙZ[Æ^dÖ]aÎd^Í}FÉzVÛkMÛfV×vKÖxUÇdiÅktÆvgÉrx×dfÖmpÞuiÙxyæ^Mã[XèfIåeXêxHèwWãfeäopæriäxx†n‹†v‡„{˜–m…—u‹˜~”¤l€©w‰¤}‘¶z‡Ê|ƒå€y˜…x¾‚I¶‚Y«‡g¯Œ­‘xµŒh²Œrµ‘r݃.׃:ô…ç„(ç‡6óˆ'ñˆ5ô”=É…FȉSÌ‘XÓˆFØŽRÛ‘NÚ”XÍ’eÆwÔ†gÙvÕ“iØ”yΤ}ߣiÙ§vëˆGë‡Wç—Ké™Vð‹Cñ–HðœVèƒhåƒ{ê™fè•wî \ð [ç¢fí©uî±|ð¦gð«pú¶|‡‡‡…„–˜ˆ†œ‡›œ’Œ•””ˆ‹§ˆ–©ƒ™¹–Š¢š–ªœœ²‡ ¼›¦¹¨€€¦†™¢“‡£™˜¹€Œ»‰•¹˜„°““ªŽ ¨˜¦¬ž°¶š¨½£Ž¸¦–§§§¨¨¶¦±¾¹§¦±¬¼´°®¶¶¶‚ŸÂˆ¢À—­Æ±Ç£­Â©¹Ë³»È±¿Ð­ÀÖ½ÀĸÇÖÉ„‰È‹“Êœ‚È‘˜Ø†‡ÙÚ–‹Ô–—Æ™£É¥ŽÅ­™×¬ƒÓª‘Õ²Ó³–Ω©É«´Êº«Èµ·Ô¥¦Ø½§Ûº¼ä„ƒåç—‰å™™ê¦†å¤œí·ˆë»•å¥¥èº¤å··ò©©ò··É¼Å˸ÙÀ¨ÚIJíÁœêƧé̵éмõΨðÀ¿÷Ы÷Ö¹ÆÆÆÃÌ×ÊÒÚÝÁÃÕÎÓÙÓÍÜÜÜÍØäÛÞâÝàãåÅÅäÏÐç×ÉåÚÙòÄÄøÐÏ÷ÙÙåßàåáÜùáÌôåØåååïïð÷êêÿñæþþþÿ÷ üÇn]·nóöý[øO @v6|q;ˆ ²kX1cĉŠÉp#É“(S<ɯå¾râÄ•#Ù²¥Ç}6ÿñ‹’_F‘5}êt(T%ÉF“M©¹|òœêCéÔi¹™"ùQ§Ð}¶ÎµCgËÒ¬gÓ2Dš•š oûÌ}㨴k ~d8C‚Àñl‘¹‹„_Ypu.–…JîKŽ;¹²e…l×N..¸!Fš‰†–w3¸yמ݉vY ¹É,8teá\k‡¯oëÆ|4®0ßrH'µ Ôb%“Uc€ "HgT‚;´YRa5wå%š«DÜÿ¥[¢ŠÆhVA(Ï|‘ÂóF‰¾’Î^…Ì#!idr`+¯)Ú«ûP[M~ûUs­µòtëZ¹F4 yAF{2c!„ dÈcš@áâF+­ÈW–Í\4Íh+(4÷éW¨—qÛ­CßÞäOÔR…Œ»î£Î4k‹;{M“kÐ8$Ú>üb»bÚZ6 óæc¸ƒÕ+ª“{P3 5„‚Œ#iœ¡Ep6²]&7Sá5ø!ÌreJM̃5Ìe„Í3!E 2 8Þ2H$“Çi¬W®üú pË ´ލ†à!ÈÔT3ÿœ™ÃXWŸ¨¢"³Ø>ò|“ $ƒE;-µ :-Ü„õ,Ø6€ÉÓ÷@_ ó>á|s>ÞL³u8N!˜±…æ4ÏÃ*^„]SM5u†_®Í»¹ÕކOÏxË38|ð1H"‰ˆGf¤aÈ¡Ÿ+šy\×ÿÞyDø³3ìò¸…1{Ë)wÌs_\A"x”Á÷ÃÙŽûnà˜þÍ>{2M^Ûç(T¡¼Î/äÃø 2´‹)˜Al1ˆ0l!ì0Ä A³}HN4”«Ìf'2·`ˆ‡¢ð²™:„#l€!ÃÖµAo`Š XH lðˆ<€Áš›Æÿi&7º]¦~Œ`ädàC€œÙ> aˆm¤3,Ã48†=LC`h$Ö †œ! ì*ƒ f(²2y°_zše|w·6N€+œ¢!rƒÅ1ða껆µ 8")C0ÅÈ=D‰~‚ŠcÀ.CÇÒŠyl!Øá¤2xãeäÄP0è`1øÂ4HCQ4sMî$ƒÄ¨=²zµÊ#|ô&ª¹0© ë ƒÈ †ŒÀ&X„ÎÀIBLŒÁ j q„jâçñhÍEeÇ;j€éÞ÷ö!DLy Šüô @ _àCú`.>t3Ã~`ÙÿšüMcÄãö:ªt¥Á ‹\þð…-¸"­à‚2e $¡ £ˆˆ/uü@ƒP .•Gú¥f€Ø‡"ª€)A0T f8P$þ0†/@€`g$^A¥(M ùùÀ¾$R(F‘LT‡Œ •žkhÀò‹‡ºv¨º€±y…Oó‚¡Â±V# SIãr°?€æ‰ø‚„Q…+ä¡›Õ€Aˆ8Ü@ €¨6ÁQ‚ÔPh5ªÌ—HîwB ¨ †žÀl°D,ÐQ¡f(¸¸ (`thƒM¨¦hô¹Ÿ³&Ö¨k5‡2¢ Ûÿ<ƒ:6Ø@<‚ä€l}Ú<0‘€,Á°@:¢&T“šÖÔO6’¸oÀQŠ]«,"‘€T ù±xs  ¾hPdö‹D@H.'>k €M+–ýrÈ^·¶„ew yGl&ñ&ˆŠ`Œ@ *œwŽ‘@Žbs[¸¾  @‚šA×Êñn†Ð™¨¢i™´îè[®ÉN"acìÂO0Ç@)¤÷@ F@lÂm¥(2óB+²S €ˆ2'p‹Õ(ŠA%æ`%·(ñ× f¢ À8„Ñ}¾° 7ÖÄ.pG¢O”B ×¢4wÓ@ôD=£9©ø8DEc ’“xÛ£¶a¶Xï@6’JPP…ب%=ð˜0ÿ ÐGG’ŒÊH õSá³F†à 2‚Ó‡8<·ŠÀ‹¶ ‹SbN×]ÿ` ¼poƒÆ Ø ± ÷‡žØ‰Ì茮w!ÅsIR7·‹'#€09PƒXˆ<áUõ"®` R@¢`As0˰ð ¾à ÂfOÐÿÿ° 3à‰@à‰÷GÏð ÿä¡s`g‚$Cè ~gˆçsR„…Z8Éc· : "Â%ê”iБ@—·ûá #ð —ty€0¢ç †z©'Š’…“$;Qé-b@w­U{*8  & ˜Œýâ) ˰ h`8@|Lð; ÌGš¥ù¾Ðó`%&@|,@Dwq­ÿ×YÚ—Bï† ç` O`h³d{iŠQ\flú™Ü ¤`5PMœ`QPM» ÔYëx ÀˆA · ùA·3K‰òz¤1-â i$èž*ñ™çÐ"O+qg¹`^JýùŸG J ÐW™j’¨0ß “Cxa'aZ¨¦¡± ¯œ‘@›6Ëh° –SÅ•J0wÒi/Z»Œ ¥Gð ¤~€_u£s çà Z°|!*Q"¤Át—Æ ¥M` ‘QËd^Z p.àOÐÝq¥Õ‰ $ðšÈjÿoP ì Gá·‹³Cl±ñNh` èP/„àuàv<ñ[) ® @ZræÕð%Ð\Õ` ° ™$€ÅU`¨:p”Ê84À¤Tª’¡ŠÍ ¥®Ca€ñDpê˜L‡¦´1 ¢‘ ×ÀÅE Q @P"jVM30<Ðo@<À“¸Ô6ÿ2I¯0Fuà“®”G¶ã ³T‹‡Ó£pV®P­’À]¤u ÕßZšè®š` €p%³Ýp®J…±:ƒ)'=snpyP(æp]Âdê +ddæP aÿÀMP§`Iqù¦àÕÉK„» Áp®-¶ 4PVvÈÑdÂÑ%–š ƒðâX@R›þz •ÀÕLÀQÐ2AÒK!зZ «° ²  ¥ 1š¤§Gb Ha€„pK—]Â%ˆÅrJawÒ3ä †€G¹’*#[©‹­ Ì«äX!G íÈd«`É` žP·ÿ01ª‰®;Q‚ÿ¾cP#uàv˜ ë%ªÅYüÓlú ˆ`X±_¶» /2v1b&Ͱ ±Ôʰ ]bʰÊБD}» •Lâ d°5t€j„1¶´Žƒ±áÐúp’'9>E‘– º&ú Ti qcM³ #@´EKM Œ ßð&ŒäGƒ!‚€Á<”À*Õ@6“±ßÐå Â_·¯ýÚ(ü¿+ÜÂ²× E°»»·`,PŒÊá8ü&ìâ@p(T §(Ž’Ób,,ùxT”'¬º¡¿ü œ) À$ªÅu=À ¿ÐŽR ¬É œ¡ÿ$HL"H‚aó2M­b9p¢p ›p¸P{¼ôËXè­Pv Ð öc;>…&ÖT ðpG –@wQ@D¸¯ë€Fá[¨Øûp%ƒ»Qp 7ðS“!ñëRtIa ‘ ±ðAc J…&ùqÍNç™9 ~x ÚP\à_ÐH!F«w&¤asþÒ éõPSY·"‚Û-E$ƯÐЉ̀ ¨õ Î, é쑦 Y@ |Ð$D¿ìa°G¸o#&H!>QϵÒuAâ  ù±±± J# OÀ¯Î’0EƒP\yæ ßP yñ”ÿ¬-ÒÒZ׸í9TÃÑî,G }"mÏUw“ÎëgàÒÒ"-·ÃO„-O\5MÏ!÷Ü ùLÑùq ”@Çj˜À ²TÐ pÐŒCO”(…‚¿Ò¼Š‹rÕ€“u§Œ|UÅ ©0Ž“OÊaž©6° ‡0ø æ•I v[€ ¬â Ú(9-Ã/ ‰É¦VÝ(w½Ò\ ’  ÷“²sL¦Q° ]r¶va|" r¥™i€7p>õ%¡}‚ÚB†ûÞÒ›­±Õ“°qæ ÞÄ/3-Õ$9à} t‹0 vQ °ÿ¶ƒ°Ý/¼èAøÑ/¢Áçà¾ß÷sçÓ¤5ÁE+O]¢-#Û~P2{ JÐ÷pbà@6T>­-ÔĨ·!¿|‘6B ë婟}î-CZZÌ ÜÂ¥Oh0v‚ßÚRbþÝ{n.ÑÚ² çÚ‰5¼`†•|¡°ÞË<©µsg¢‘Ü ’ª®ÏúñQâÂwБ7Ø­ÝÜ ß½Õ×zi0 Íà«rp †üQ×& Š Ê ÍZÕÀ»®öxÔÈ ÊÑŽú’×ð1CŒ¸­Û¼íZô\ÃmÀ*Gp®Gà7à¡Å [^Çn#jûÀ¾PYÿ’&‚íJq£-»ƒ.Ó½y ¥w‡¦¶³áÍA³ZM[ tgì7  þu>Lžs‘Cz„-ØQ‘œ@¦ò°zˆÃ;wØò/0pÐ 5q°¾pO0 Ã)ÉÞºQà®îúºª&ªÜwC³³¬(s ™î‘غ+3Gx®2° (ÃŽuÍ*(í@¥Œ`¬{מí,#þáÍ@O‡€2ÓÒÛç &jx‡×‰<Í(ÔßN0œýîƒÑ걩u׬bÍš‚ÍÆªŒw C| dÀë¨@Rz øñvñÎÿø/úaÑÎþì^‰Ò ž8„,p®šø„½‘Ú w`z OÍph0»À L°Ð é&úqÍY¯ðˆñ©«^y­óAæßù‰ù÷-bÍÉ€~àå½XOÇe|¯òç°ÏÉ–&žHÎ`ÑÞáF!ÂH~/`¢p :ð‘3÷X KP\Úð .ùRðÕ6ª&ÉX±òüõ ÃÓŠ•(åÍ*x&D ^¶CQðɱZúGPÉ´š ¶ y jÚÒQVßD ø`ÿ´ÈOe¡Æd¾Ð‰]Ò‰yL ò¶Ž*kùá QðŠÿFP À¾ dÊà€×‘Ú \k½9†_ÞõŒFýš¨0gýR¸ÕÒa¨ÀØ&$DÀ Úµyûà!r 4"GöM¤Xqâ¿‹3Z4gÑãG;R„v¤™É#AJØ`ñƒÅKPÎÁ;ÂðˆBÔÀùñƒ ,HiV´´oÓŒaHDǧXèBîÓH‘ÕªGNår«Â¦ C$ Á¢…-})¬I$È>‚òôìÉÓ«_Gç̓fäŽÜ!Lu<já\HŒU¯þ˺ïkWÈ¿V;R¹ÙØI=XPÂìÈfóŠ^#4ÄÈ3oA~©Ö£çÃfð&Z ÿÒ8CwrHru.–…Jî@&f¬‘1ÇÈÉ%W,šp_‚éšýÐAb×çØG÷2ÔlJµžÖó¬V­Ùµ‰Ï‚HÛ':È Õ&º2<ëq¬È•'ÿÚ|"téˆpÁ†Êší ©é³Õæ1‡¶Rí­;èê Ì} "ši¹!þðåXˆ >"'hì)®8ý¤´È<£ªylžÿk ©æšBXB„âŽi&¢‰!º‚PÍLôö™Ž®fÀ!DÓ#va‚$À³",é¡§¨~þlì1A{Œ-ÂfŒñhx"Ä1=RÂCËkŒ¨'wù!ˆyÀ#¢<òæá‰ˆêì!Iá*2ïŒ^ÍFÖ@È<Ùjf-o‹òã"æisˆ†Àd\«!uÙü²Ï]¦M5l†ÃU'‚&6Œìir+¢UJt-]·"[Í{V^Aè½Æ^|kz^ÖÎïßÏÀïˆKÒG„=¤È¼j0ʦ™qÿ,×\[{-JWŠŠJ—§f€–XA¾±G€¦'Öœ…VZÿjÿ]º™OB°A n-jõfhdÕÜAjÆPŠî)Фg‰B…=¹7Ì“è”Ӊ>íéà–«³á¡dfzÆXìɦrQÇ*ZX6Ñœ>Šši¦Çâ³eè fÜŠ(Ý}(cÍRéÊ!ª©@|rl²½ª×BCB6ù̃_ü[jˆVëJõ$nÝõ×cŸ vÿü3çq®1°n"î™ÊwÚiÐü„þ£‰ë*ÚƒœSžùœgMóèCúÍ[X¡%DÖ·O¼uÛq×}×Í{„$[,håw¸‚× Þˆä§½Ц),›™„(â<»yÏ#¯°€-0â÷­n~Û›ÿÙâÁfuªsM9X˜ $A‹PðÌ ÎxÀ(Á°sçÙC¢E#\ãF˜Öì†&ôïïàõ\h@6†6tLMô&ç(h%I,(À¾H¼/bH„aÍÅDs8±sŠb„”7*~¤QІ6p‘³#Æ0‰J<à ¯QÃxU‡:äa5|x¶)Å|i†ŸâHÇÈ ˆÜKâí&°”°e&Aa»àÑ0œmQŽ¡¦âEA)Ð& S$E&š  “p„"¹¢ÇîpZÄ;`ýr‡Ê%†v,$!ë¡IWNeŒ‰"-å7¾Ø€ÄŒSœŠyö”Iì™CšÓ¤f5­ÿÙƒ øBš¾B¬ùMp†3œ=ð¦4wуd€3=ØÅ4É)Nsó`;ìiÏV‚rP{”å"_¸=[ÞÏkºüáïœtH}Z¤“ûIB÷ƒ¥%3$ÈÃeêŠ=.v¥”Ÿœ#¢ á‹x|¯჌ê:ÇM&Ñ¡$2)FSzÀ•J)¦Êii>QL˜¢´¦ñSéMq:¼npx3ÝQ#Ôæô¦F-éEmŠR¦–H§Nåi}U® 5£òÃjWºŠª’Klc%kYWgV´š5¬iEëZÅV¸Š5®sÝ)]ÇêVưîpÕë^ÙÚW¿š°‚ ,Z[ر±RlbKÖÿÆ>ö‘],e+Y±Y±š ,g'‹YYyÖ¯¢µ«gIK×Ó¢´—MkjãêÚ×®¶8¦•m^kkÛÚÒ6··ýìn[{[Øò¸nqe«Ûãò6¸¿enr»ZäBW¹Ï-ër ;]ß2öžÛånw½û]ð†W¼ã%oyÅëØì:W½„M¯tÛ Yê‚Öºì½î{1;ßê×¾’Å/|›ëÞýVV¿ëpó`#x¶ñ½/ƒ3ëàÇö½õ%°|!ÌÚ 7XÁ¸Í0/¼à wöÃ6°…C,áx´.±†;Z¯øÄ1Þ+Šaü_‡¸Æ,Îñ‹7Ëcû¸°Ñíq‹# dÓÿXµ8²‘La'?9Ê òUlc WYÆP.r—“¬]ó†YÌc&s™½;á)[yÆ:Þñšµ¼å4÷öÍmÖ2–©<ç%s¹É^>2“¿Œç¹yσÿg:Óщæóè++9Ïq¶3‰=é?:¶n¾4¦ íèNCšÓ–2©ïlj5×YÒ¢V5›KiW{úÐþÕ´pGýéRãúÔºN5¥W½éV×É…V4ªE|ëYóΙ5°KœhG[ÚÓ¦vµ­}mlg[ÛÛæöµÇšˆÛ‚;ÜãN«¸ekîs“­è-»Û­n³º[²òž7¼ËjŽÛâ;ßûæm¿ýýo€±ÿ«€V‘À‹%¸Áã ¯f]E)òšp‹ÿ£Ÿ8âÌp‰ÿÃ?Jáü#âæÀÁ»“£|¥ÀÈà×} âÞù*À–¯BçvuDnþ›#áÿ€#þDHè0gLÔ‡œr¦³C§ú^s¾óÉ€1ˆú€Ž'$W9¾aNð? €Ø!öÀ½°tŸû?j~ö´‹ìy?º#0Θ¸VïÇ)¸áã~t“ã]è…õ¹4[þw¿vðz7üÖxÆ,åfw|q`v¿³|ì¨÷ké°q‹³ë~üÝ£ðÁ3}¯zOÿDâCtưÜðb/x"~^Xá£Ü«ØyX¿×Ü;ßøŽÀÚ?W½ýôàÀé‹£ô#}.§üéõ]ŠÜvúÎùô-ôç:ãÒ^8;¼/püç_ÿûçÿýÿ @@,@Œ+¡ë«Ò;@T¾Û›=@T9¬³¾§Ã+…œ+8—³¾ƒ:ˆ ¿$ºº;=ºCº¹£;³\»î£»œ›;4”“A¼AºªAdA¦Ã»œ;½RÁRÐ@d‡Rè>”³8}ÃÁ¸šÀ%„9Ô[B¦;º#dÁÄÛAÄ@´û”#?'d+(L¹¾c:2D= Ô:“ë»ÿœ£A“£ÀJë¿1„:-\¸îC¼º£;û“A&ÔÁ2 C¸2‡DÀŠR7ô{½ªs¹ös?Æ8D|KÂûD9ìBIü¿½JÌDMÜDNìDOüDP EQER,ESZÆ¢u£GPà:‚ô®]ã(p\·pùê[¹²£Ë.cÊœù&Í›3mâÜÙQ'Ož>â *ô&Ñ¢BU¥R5kVÖ*l¸¬jÕzîRi1ÃuP·ž¯Y]vÍ_¡AháS •æQ¤/áî|+—a]£wÝæÕ»—ç«T¯Úc¥*!Ô• W:Û3­Þ¼eÎVa²ÈØ"7ƒHÖ³¶ÌZ¿zëÕs¶Œ×|ä*J÷n뺯a÷nmÛ³w²cgq·¾ûþOß;qçÍ3·m\JvèÆ­í§üšrÇÿQ7n ¹qþ„þÿÎm—|TóåÑßfþ|û˜çh±lG«K¶¿YΗ}^5æÎéCKtôô#Î<Åx8õT8Üe÷]v<§Þ{ë±×^†?qØá{±Ä «˜c,Æ$£Žaˆ=´iμSMUŽ(b ¡,’ÆÞ¼³Ì4ú”£Ï2D±Ì;>.ÃÇÑ€Ã̓ÜÃÒ”TN)d•Xf9e\‚èá\z â@,­# èhG~|CåCúP3ÄFiYpe†ÑYòT5ÍXÓȈh a‡›Zbye£ÞV—aRza¥cNéŽ+”¤a‡ qüñ‡Þ@ùÍ7ƒüÁ¨–Iêðg•#–è ’ØglïBŠì²Î&K/¦ Vi*8A~ÄV9ê©ßÈSM3t<©<ï óN–h²´ ¾[l¼UÎK³Í*»q½ËVÎÈ$S‡#¿áCÇ£C7´AŒuÓ†9øà1$÷\,¤‹ÏD£I²#¸BôÒL7í4É-º(õÔTWmõÕXg­õÖ\wíõ×`7"•ò„;ˆ@áæ4D„‘Ïä1Çœ:¼-Kë¢IÒZ¦ÿkκíÆ{1Æ[NjgçÆ1^Ïb) Ô¡Ú¡3t ( Â ?ø@ÄÃSÞ¹wÞ®h¹Ž#–0Ñ#[Lx–+òÇãž©–å$éŒÎ@2H=äq `ˆ‘G>Œ»Òºò È®–ê`ƒ:.ûìŽxâ³-žÓíí5*äŒDðàÃ4÷B|` GŸïz7ƒ² Å+Ý)‰–ƒŠÑŒ–q·H Ž{µ ù˜;Û5Žw+‘4þåŒ>ø 'À† á_ðÆ=Â%*;A™%"8 ghk%UaÕ2‚àÂíq¯péùž>î.KŠÚÿ,çƒàAaè‚犆otKòˆG Ìp ½©BHI² ©b¨i¸ÍH@Ög—À¾ˆo| 4ãÍc¾)E#vCÄ€‡?€¡ `øÁP†xl%àøÃT¡ Xª*Õxi€@¶½m€»2à ©TƽœQ&—¬d^2©É¼ä§S’Æ ÄA¼ñŽxH%Á 4„ÂíèVŸXÒ»s iú˜Õæ£06Jc$\'eƒ/Ýí‡!C «HQ-Òˆ†4ñ˘ WЂþÀ/ZúÈ,©J«Ñ¶Hö²Qàúƒ¤1IIåИÇTcå©Ã<ÅQY’G4!ÿ<&}ãI€p~(3 ZVšU"9¥" ‘Zú†¨Q‡?°³Ãì1¹FKžŠÓÇ>¦Ä…‘PTÆ ‘>âáK4¢JX ©4(«øKÔtS6ÂŒz'ÝãèG}OzÞ‹¤øÌ8¼Q°{p#ûtƒñ Aøa Xè©•Xè®WºjÔ= ´’rüq’%ÓxÚB›Žnr¨DÝX~î S,݃š‡<¾‘‡<†øBÌ03 ânÁäOƒ´X´þ”&leëc‘ Ò¸VÖŒöÌÒ=€!M­ÆCZ©ÌàøÁ0ÐA樨àCÔA -kCsIcÿ}ªÞà”¢a&µÓBîÙId;YËרEÝ$‹GQQ‰‹¯xØ`òð‡0ä1'€h/`Áë±Õ•ÔÔVÃ2•sû$­È«Â,®L‚ÚV¸ztž÷EÏa°d*98 JÕ.Á f¡ fˆÁ a‡. ¢§Ñoyš¤Új©[ƒøV¸ÜoCJ¿M«ZÝY_üºÆ¾ùÍ–Ð’•"ºbˆ†uÁ€‡h   Šh¾p2xbøCtg)Û.i%ç„ÔY%JäÄÆKÄ211{ˆÜò­xWz1ò ;vJÌq‚xÁ L3œw¥A‘.ÿÉZ²o‹bù¾Å'–ò”U¬¯?È៧š#7!†/“Ò!Á `à.A¼w”ð„«òÐeX8KÖ°¸hù[ÉÖÏy¦òõ —ýV©l•µ’'†;zá aøBB0 b d8U H™‡n–Õ`Î(R‘Þô:wÎtöé;){Ù7ÛÙ¹YIp´´ÙÎê#ÂÜBÎÌÂÀhĸ=èAŽy ²>Ž1–¶½Òúm4r[Þ:/û¸UÆ÷¨EíIh-S#¬£¦€f4P \ÀÂ*\¡Š,|ƒsÀ€¤Š)ÕJ€n ¹çäwAY(œ´s¨“»o+/ó`@ÿèƒ>!… þá_ƒÞÁ0pÁpÀ·Á ù˜‹%n#i´G¸Žëãµ\B\~ïRB”å† –Ï1e¨BìàŠ…·Ãs‚´``hb…¹XÕ6¡™ã&î§IºGÙéuù$ï ɇUÂ\ø0¤@>MimpÀ!á! §@& #£ŒËhã³3ú°·ŽüÙ%¶Hýí(7ëãtð ¢€„—`i „+ÎÁeA¶ $@s`CJ(RUÜ]'¢=ÒëŽ÷¥¿ÇÔŽB†L!¬fèl¨<à”Ʊÿ€„€èp’P¤` ›ØSb©7´*Fä‹|Ï$Ç?³÷ÏF-Á àn3hp`¼8îÒ ð@ç§ ·7 ¤a•V[Ýâ\%I–|cw ·|ÌÇgUâh Lè ‡A0Ò ˜ ëƒ&æ@ «0 |3Co—d5Ñ$*¾JöÖt ÷yümQ¨\eÅ4°0ŽPÄ 3ÀåÐpAuÐ30 @02FÆ –@2:p:À3Z¨¼024# ## 'ó4€ˆ=5aSˆ†xˆˆ˜ˆŠ¸ˆ.26XÿbÀ +4@ë FÀ0`%à ‰~³.Ž€HÇ”Va+±/+Ádõ‚÷ç|&xwO¨³}o‚…çаà6à ¼`€0~Pcð@ £ Z Š@ ‘àË`.Ë`šp7ð6¾Ô- WCoPg÷–oú…騎}!m¤W%” 7àµB$2 € I0S@ 7¦bˆbòø¹P å@L0ÜH¾4BÇ VŽ7$#ï "È8$˜tÍw‚lôŽ0僎° $ï.Ü€ U0Ui˜&Þò kà@ æ  ÿ@ í  ¹ð ð–Æ÷“?Ü0‘I8ò ŠËÐ ç(…ëH‹‰L§QLX%ec0|Ðð’À°iú@ ð +ÁŒ’p'Öø0ð?ÒNšW%DÈñ”¡7…ì•è(zÿ†%~TRЮÀ@ g5 ey–ìr’w$*è–¾´”U!0Æ—T²qÎP—Nˆ—yy—{©—}1RW 1hçƒ Àëi2I“´@ g‚BŽ> ”BI³2ðUWJ)N楙Q‹¶È™R9•â1z£‰%ç °œ =Ñ€r„˜0MÀHp{Å4°:  « ƒ:ÿP O CÐÜ›œ6;‹Ä0Ëà›sGœ%¸‘œ?¡‹Ä2,í01ª;0ca°ð4`€3à ®ð ¼` 0$@AÀ*`€0à@%H©›””I.2… vÙ™ž š$z¢O×—ñB a0Ô@ s{ ÀΠ8€Œ°í P®À 6À$ * ©§{`*êÆ¡·©E¿#Õ‘|AŸÊ'Ÿ‰‚Š1|Ô°ÒÀ<:€ ¹@šŒ)‰4²*à6@à*ðcÅ$Ñž:(a„§7‹y‹}•Ãù|*ú.[Ú¥q¦p¹ÀIÿp+‘¦·ä y:ã3P ú°<Î%ù©EhK‘"¥hD¥#˜¸Ø%e,"I’_:Ò£a09"€K0!€½`0Ë@– @ÊL°*p@ð0° 2&Ü»†‚@Ž2(‘4#7%/|J•žwª&Š¢ž„%´À ’= òHëðŸr +`€I ¹P ×£è éJ¤<¡Ð)+µ0¡<ÐÎ0AÀ>(9³}òG#¹r°¹Ä”N¹™€ ´Û¨ ›wT2"òQÌ(‰Z˜ªp+È /…%0 ¹@6 l*°D@<îvAÒàE¸$QÕ5^RBM=u³ca|4Ô0(ðY•ñi¥Ujªr«_uË?åp'z›%î PÐG€MP­z:À–ðÎp²mJ<\ÛµÒP A€K+Z9œú(k°Z‚™Ÿë°õ)º ;·rQ%EK G»Œr(€”  Cÿ‰%ï@ é@I ¶@¤A€¯,»²_¶Sò8›ªUѾԚO¼ÙEÏ«°Iº Ë¿ÂU%;±TÒ]§ «@ O Ÿ ,>ÒpÉ ­Ð ¼À ¹0 °pÿÿð ÝȲ=À²mÍÐ óÆKU0ë©C‡d Êçà åY(>²¿Ò;½oë³;\½Þ ®Iˣߧœ €p£c?Ðm\¡Ž J©D ™ðàÁÈÐDÐ@¡+ÀŠ¡0›ªF$hû–Tb:Œ°u"¢n´Üú¿þ+Ç‚JÆS’.®„Ÿ` Ski{pg ÉPcP8šL€âÿiV|Åÿ@¸D ÌH8ª:³¾t –L*S35%;¹7æ0 LŒQÚ³ó ÀB•Ãý[ÇIE%3"ã׃ ù6K¬ + c E¢ àD`=ìÈÊ`.µ0µmã/P Îà6×B[Z»áUw² ,1÷ ª©¬Ê£:Çj«ÿph%ã oœÐ ÇÝÌÓtkÇer&Ò¸ ÐÑJ0 ö!¸¦€W ©`+°-8 "=ÒÿP¸$À([©êãl0 ëgF‡¶.”h"ne0 çÐã° «ÍÛL½WÊÍ¥æÐú°)  «àÀ{óØÓÀ#°~Ó@ ­PÄ"PãWWÕ¸ NpíÛµ0}¿É–%8» éÀp‡€UhÒã0;ÍÐíÓ§,×7ñÍUòÉ®@Ó Uq  ¨Õ°ã'ð NpŽL6ÐÃ[$09 l9¾ðòKˆ¤HoÉ :&ÐóÖ§­Ú«M×ÑÿËÚ…%¸Â —¦´Ô,Ðpd«pÛ€¼G ö |Åë ܘ@  €²4´ÛÜRàÿ,¾¶$NhBM„°Þ0ä°Ý©ÍÝßíÝ®8"C4¼€=Ø“‡Nã XH2àuX³ÐA(I @ å ßü¨°ެßû=¬¹02¿ÜZ˜ 1 ‚H2.£á+®h} €0XÞ€Œ˜äJ¾äLÞä[ãˆ,áPÄQZÒ£ <1´}$>òǰË ¼íÛÀý‹° ˜€ !€²<`yÎ20 Û f ÏŒ¿–FÝ@â7§°æ V ÞØ\bv]×&ǦÿWK´›Æò( ë0 NIàaä#J€ðF𢀠¨p‰Wü0¬7`ú6D`_pf^P0.÷Øs=3e&òØøa‚nʆÞÃÝ}èæudŠ)ëpÀN« ì зD7°4 #s •pæÿà4 ¬'ÛæEòp_öí`@ogŒP–àî¢×³§V5ái@ýÓ>º…^U"åTþ.®°  Ê™:·² ¹ #¹ Êpá3€ ¡ 6 ¾A@¤¹à ÔjàÞa°Oq@ŽXbå±=1«[8Pñîïòþ³t,áŹ¹×ˆÆñâÿø< àÁN _ÿU${ ¼@úÂêÁÖð¶à ï“f[†J‘Ã#{K‘ÐBÓ PX¿òõ=-õSŸ¢õ> ä=;,ïïùóF&óƱB@@ !¯¼€EÚ67°?ÿ>xd]ðÓï5 5›%çð6`$àõ””ëPOõ%ïëNòAÝÊ“ïûžÇ-ÿïï#ÂÇþ½`¸O°ö7  …öeÉóenbV›l]¥6@ŸP ™@¶Ðô€.wp ø¿.øƒŸüÀ='Ôñ¢ ̹ªV¸‚ÂæŠT$¦@ Ûé"0¬F’êÐ?öíb`³–ëÂcN²îzCÄÛ÷ËÿFbU_º¯ÿýâ²ÀÌHÀwN8®àŽà çõ#Ä uDâ6ô¿ЖPlOP°Õ€ ã8pSÏ iqþ ºWm™3yòœ-«ön/W«\-[¦ÏãG}ÿDŽ\7R$È&U®\Y’åK˜/]Ƥ sfMœ&oæä¹“gMv©Øé£¥Š-”úÊ%eÚ¤Ãeï,.#&cEgsš9&ï1t^}yYœ>‘ÔˆqFƒ†Že€gC²Í'·>AþG©¦š&4Ñ„;â’jº‘<ŠŒ;ê(œP»1ÉBÇ‚ª¨£Æ+ï3¨¤â¨ª¾œ9­šHD˜á-Q檳ÒZ D¸Yè?‚ê*ó8=æTº‰0Ããб%¥Ó±'«‹R$YØÉŒW˜êlÄâ$®Œ4Á£i–šJH"‚¸ahX3yػǗ@Àæ0‹R¦q†x@B°=«–)ëÿù¦ ¤ ‹drÊ !mò°I)…t$vXAJK.…2¿vQ‚Gp™&¶Îäñ³šjÒäÁ'2Ñ?$3@‹/Ì𵈠5H!ËO«LPB#WJòQI£²RÅ.Щ-É+q*H(XÅW(¤²E–Ì4Ñ$A>ò˜Cgƒ D‚™ã'<áE¹m¯²ÊáÒ…jsΉ.Òi/¥6§…SØZçš2׳óF“€‚V¡ÀœrQbï®ù8Rvš[÷/ŽPÂ:¾X„‚rðª8½c!"|`ð.˜`¢‰Hn¸¦¡‰–6Ê¢iJ'Ï&vjf‹.þˆÿ î±Àc=m™äNµ-=ã Vž#Œ—cŽ êc“­dXG]V˜Áû°i6ᣟ\:;¾­mšË~—éöÛp!÷j Åê=gˆÜ-:ôD^zíÅ·“} -¼šuÈ0#˜e`ˆájnX!òjl¨fo¤ÜoÙǶÓiÒ|ošu$uãÌ•è´h°–.½–g< *È _ÍVØäš¾`ÌPÃO"Þ&b>²åu(cï[ÿ·«ýÒÁ¹Ì}AÀÜÉÈ•¹ƒÉ*"x`s‰#Hý°{üA xhì QÀÂO€zJh’³Œ6˜ !B d0 ûplN Ÿÿ”Ì7;ô/„k_y>w»L#h8”Ï" òK ZІ]ÈÀ nÐ/hÀHX‚DØ8Â'B‘}(,ÛÚéèÎ N¸Á{H€JŒfßøC V5ˆ?ðHÕøÓ¢Ò㪠äå0xÁÛè˜ dåÂ>÷©ìh'Bí¤/CR„T ÉcE*êcA‰ € ¼F1ÆÃ]{X†Â@ˆsq„Væ€ º¨"ÄI+9hÃÞÓ86*j\!1$ÈU>É$∠$"dFM.ZÁšD` 2Htòp‡0<ÃS‘ãE.A àÅpÕCxÿ„iøå”ò#v>Ën¾¬$a"ù?C.C+`Á >Q‹0Á[{_Gj $äœXAXŸ°"y¬Ð+äÀJ’”@ô'C-*F±cÑ&ÚUCej"Óå'­8$3˜A5TèFè \lZy@ÿ¼¦ ErÓEÀTck"CÍ[7ôœ¡&†®KêõZQIÕ¯«emk]ûZØÆV¶¬í¢xÁ ­ÌJ+*i¡ƒ\4“³*Çixá&|x^cµÈðX{l¼Ö,ëànw½û]ð†W¼ã%oyÍ{^ô¦W½ëeo{Ï;sö•ŠòH—ÈÖ:„ÝÆóŒpDŠŽµŒÅ–âN$ ` g8£‡Z‘6áãY¢Æ5¨<ÑÇw£#W'!õ®­œ_å‹Kqk>Á âéNÌ  æÐÚ{†i|ƒ­"(ÂÅ(ð„O9ÃÑÂZ‰Ç WXM®õ3Ë„V’’0ÿ ÂÕÒ0j)Š!$ÙzÇBƒ \¨ —7ˆ'/ÞR ÈÅëä ,ÁŠ^<$"Îþ`’ª‰ £âØ¡SaÐ’¶&JrH†Ú Ÿv2xÍk!ã+å j>ÉQ.$t Aù3ÔU„!4ƒ!]—´â—QÃzøÆ7A<qâZi”gц¤ÏrΠŸlë[{óЈ¶ßG”ã‘Ü C7A.(]šA bP˜†V¨¡”ˆ"i† q.ÀàíÑX] ßkÅÏw¹–kh5Ê»æ5ã~­`ØnŠ],²‘¦†²¸<È&™¦Ñãg/Ãÿ=€ocÓm;_ËÈLwÄug «Oݸž¸®—Ún,‰u–…D/T7].ØÒqîCHëiäåGD Ã DÝFô?ÔDp«ÄþƒDÔL@¸$ÃÑS̱dLØ$IÖ<ŒÈ”KˆôÌTŠ4¬öЬ¨xˆÿ Ͳ„LÒDM$+*3D@HTMÂ\2JLÍÕ쉹#Is#ΧĸÉì«Ü,‡Ý0âðÍÒðŽÎÅt» @`K”PN_DC› 2é̵lη¼¾ÆüGt˸ü°ìdªÊ¬†ËÌJÚÌjèÌÏ„ÆlÁ¥œAê4Måü¦H|MM$šÐ‹O¡LL‘\JN´s¤Íý ?½N)«KžºK]ÊKÝI­¼A¿üÂ¥Ü.®$2‰N÷ÄQmM®œNÙLK´Q¦°­M¦šJZ$–+j1åËÅÐú¤D’/±lO÷ä¦Ý3…ÏÅè<•M¡úP!ÐÎÓ©F›¼Æÿœô¯+â9ѤϿTš2¬D_|A ½ŽrëË ÕP-­P´tŽ õD#Oôóß4Óò¸ÈeñàO:LІkÎê´ åR¢BÎ;5FL¼TdÎϳTêl¾/4Õš-Sm-ð^X-^¨®S}UX%®ÕÊ8†Ø:àb-Yu­ot/_ýU` VaVb}/L´3ÕLÎÄ&D='k4”hdSnDJÇœÍ+u>IŒPÐ<5Ê(]ÉèÄ0Î TîÅÏ Ò­T.Yºaq z„Vã…ûKœRÓ,L?EË#¡Ñód>y}ÌcMˆ2‹]7!e «T×ue#ú Š\°¦ˆ¥juÑÿqû?…»3ò"­N¥D }<ˉ…KjÍ.¬×aÌÔˆjÖéOþ|G‰%Ùa\>­TñZ;%ÇÄÄÖØÄÈJÂø?;µPqsGì¼Mdm·—%Î)íD+Í …ϵû,2ÄÏ–˜ ´Ï¶ôÐpëË9+¡õЃµM£í5¤ÙÑ\ÚH$F“¥5 Z™˜‰…LȬ+XãZ?ÃÔÕϰmٱȲÅZ­Ùù”Om…QÍ[>œÕѼÝYísLåûÙ9ÝÓ¢3W¨ü[À嵤ÔÌ[ÏòôÆòW`-ÓKµRº RéœÅÜØ“ýZ°%ÚvcYù¢ÝÏHZ|uÑÓ¾¡ÄWÿí<`ÈÅüØÝ•¾ýVpU’Ï[‡óÄÂ($ö¹5×¼Z]K½aD\$yPæeQl•µt\¾5]< SkM]ç}Þ‹^u[Θ•ÔY£^KìÌk‘Û¨åÝKÒèàP•œX›TNôÔØÜ°ömOì…_‘ßãôZ¿¤^‚=ÊÒD[«õ<ÿT\5à-`'´éå¥ÌÛÆÍÞ0T²«ý¦ÔS>Ýí2ÛÈÒä\ˆâ`¸cÈ5a*ÕO‹-^{µÒõ„ÑWûÝÂüaÃl[ŠÅÑíY€õ 6`edJ¾ßEâ½Ó­4I’ÜÖ+†¾òÔÝ$f^ó5ÆOÜ[dKÿ(FãìcÉ›M\ä^3þSè ×ÅõDž}\&‹b†“ÚPÍÏékAØu»¬Mµ–;ÆáÕÕcAV\ü|bôDb nDB†ÛQ=c5VÇ)7FîÖ*>\ê×õ9ÃJÖÁL&å4ÖOµ³ÐyýÔ/6_^MäÍ+ç¼Ï5Fd4½Y¾_8«Ò]Æ%®^°¼e ÆãDVda¦ån=æ¤lãûœÑ´-ßô…aKFæi®[ÈæÍµ[þ‹ãÞÚ­$àhžáR6å¾ä4”aXêK?®æƒüænŽæC6fp>å/ÛÂ=[òµá{j–êŸfê–6Ï/ìáØý6FßZ~èÆê¬Vê üc_Ö3¤†æ€öhvvê§6kÝ8:®j”륾j®žh‰öãµÖè¶j¹>k´þh‘µg«†k†¾ë¦æë½&lÀ_µeÅ~ëÃÖkÃnì®Ö¬ëÀþçžv첎l•V»¤Žk·jÏžgÍÞlÌ&ë̶cËmÈ^mÖ>m×~íÅíÏÎãÐVídžmÒ>éÔ†èÿÖ6mßflÜn¶åËmÙÆëâîíß&nÞVnáÎmã¦íÙ–îÊfîænêFnÛÆîì†çÝÞêéNnç>îÒ^n­ëðÞnóîîèÎëòþnôÖîë^o÷oönïôžoúVoè¶ïú¾mîÎoððΖoý~nOðóÎ`ï÷Vðÿpñ†Á~ðûðý>pò¶ðÚp/ðÁÆpŸp ñ ×ð /qð÷pï¶nÇoþîoqí¯q—ñßpÿfqroñçñÿqò$r&ñ%÷qwr Ýi*¯r+¿r,Ïr›~ò'r¿ñ&‡r/rÔ†qÿ7ò3Gs2ó/ños5‡ó8'ã_óá~s:ÿp;÷ò<s)çp.ïò?Os$_ñ@r3—óB?ò(s>oè0ÇóŽtDôAßóKÇôDïs?·tOÿôCïqGWrQõRõSOuCGu@WõUuFoôJŸuZ×sE—uV't\wu]góGŸôLçô9öEïõ_vHGv`7u^×tf‡õa_ög7ve—ö\wöi/vl¯uhßök¿õc7iç­ðh÷]ovp§tnoõn÷öv'vmO÷j7w ‡owõpÿk_·öoßwz÷w}Ï÷‘-÷€ø~OöQŸ÷'ø…?÷wxÿÊîôuÇwuGwyßt„Ïö‹×øŸø{§x{‡w‡§ö„Wxq–xù'yŽÏø”yƒëŽ?x—·øš·y~ø›gw7yrw˜¯xœ÷yR×ù‡øú¤Ïy£/x“?yžgù–úž/ù©?zª—zšgú˜0¯ÿz°{±{²/{³?{´O{µ_{¶o{·{¸{¹Ÿ{ºWûœ0HÁû¼ßû)Ñû¾çû(ñûÀ¯ê‘| 1üÃü'A| a|ìp|ë€üÈ'|‘üɰüËWüÄ×üÆçüΧ|ÌwŒÐ}ÏüKýÄ@ýÃPýÕ§ü(HýØŸý)‘ýÚ§ý(±ýÿÜw}Þï}ßÿ}à~á~â/~ã~T@…ÂXëHþå‰E€àf“@QØçßþëÇ~}ð{ç¿þ×W~æg ó‰p çgý‘Ðþ“x‘ÿõ§Mò·~‘(ô—ŽòˆÿD  Oà†2lèС!Öý+'qáÀ‚2Œ8‘¡¨E ä(P€þ,•ɘQªÔ'*€E2eêãOTÖ¹Dås'ÇEtþóY.á?‹؈”áÓª”k* \‘Wöü)°àº¢ŠËP)Ó„DªÕí¿Àî}yTnX¼ÿ á< ÿÀØElÄ$ü”ñ¿uè.nl(J†è n(YàP¢þeîLÚç´7s¾ëÖãÙ®(Q1¯Ñ»`qF=HPpÙ…(õ­[׳µÕ±°Y.ŒHûìm·I"×úï€ÑQU7àtò†ÙÁçýþ=j̘ù¹i†ì×çíÚ;~Ó…ð%Ô€¢`ð$‰%Ø]8}Uw‚ ë…æ€¸1%{¨ØÔx¥µˆhá´RduÖVE/…˜W…&ý5€Q,ù—S)½ÇY|B•Soyá—ß?ûõ'bxW H]Ž×™V ­#ƒL9áAÞ­@‘HÁ§WYJjÿ‡T2Šè’@Ov&J{é#@Jbæ•åHiº´ˆkÎè"g#"„£i^†ø~–x‘ S„Ÿm¦iåÑzsfdš €²f¨iði¥OŒF7–D ÚÛP“âu“}å14ê¡¡*PNì ZL.ñÇØE¥âg+Uå ò“^?Žª—!U¹´¢"$èd("˜ÜWM…õ¥@e÷Ò±eZ›mÚ6kâX(y—]¶:ùDÕ§W  —w.‹J¹1­;.C1Æ[«w¢Âø£@Fí5Ò¨øÁ{R»ýž×Ù:Ú²°!"­ã]‹xaÒF›} }ÇÝæo| w4êÃDŒ”> Çš-ÿ‰×"&¯crW)›Ô2à ­³ñÁüê¼3Ï=ûü3ÐA =4ÑE}4ÒI+½4ÓM;ý4ÔQK=5ÕU[}5ÖYk½5×]{ý5Øa‹=6Ùà†e«½6ÛA÷zV«mË=7ÝW½Í‰‰5¢ô$Ñm¡Ì·Fš¤È&(ˆÂ(œuK>ùXT-Ë^Së±GW„‡±éSUêÍWU2&úæB-‚&ä“@†BE9åµÛÞPé¯D_^»ÿ×{v~G˜ðdTƦK±'®z\½Äž¯í ÅçíÕ[/ÐÝlŠ wTL¡áº¯º“q¿îO“U5_„¶Q{=üÕgï;h»sÿÆ÷“)Ñ×ém²)d"4˜á±G'˜ë *t¿Ön~ìœHÌ×»u Etê_çS,FF€lIîR¢@’nå0ÄFDQxGa·9οR0㌅+kXPh°}½Œv%ü!©âC ±ˆø!ȨÄ%2±‰N|"£(Å)R±ŠV¼"³¨Å-r±‹^ü"Ã(Æ1’±Œf<#Ó¨Æ5²±n|#ã(Ç9Ò±Žv¼#ó¨Ç=ò±~üãÚŠ#ÈA²†<$"©ÈE2²‘Ž|$$#)ÉIR²’–¼¤#  ÉMr²“žü$(C)ÊQvrWÙP‰Uš†•­ì™+ÿKŸ‘²–¶¼%. `J¤ÄR0½ôÐ,ƒ¹³_º…˜§¤e.“©L\îr'Æ<¦0uöL^FSšÕä×2³©MP6S&Ót¦Ï¾qŽóš©4'~¶©Nuv³œèìØ;_É3rš„ž±çCÖ©Ïe¶³žáüç<:LZ³gû<(3¡Ðxú’ ü§C j3d"´¢¢ì'G$:Q†“£Åtè9 jÑ‘~£÷iHêѱh´L+ IcÊI“F¥«|©B ºP•òL¦>¥©gl ÏòT§E}(E}:R n”¨FE*NÁUo&U©eªK§JU§Bõ¨]}*6­ºÔœ‚5¥e½)WÍúÿU‰u¬ÔÔª;½ªÖ¹Òu¨=mëUɺֽ¢5­v•ë_ÙŠW„b52B•'`[WÅöugƒ%¬^‹Ø³2¶²–•%\3z؆fV³~½,g?‹Yц6±£5íiùÚXÕ‚¶£<ëlc+ÛÙÒ¶¶¶½-ns«Û. ¢¦=)iKËÚÉ·3»=.r“«\Ùö6¨¿õ-j…+ÙÔNW0˽.v³Ë[èF×µ”%nu½[\ëj·¼æ½ms›ÚÝW¼áeïzÇrÞùÒw»Îm/|¿KÝÕŽ7¿:«/€µ›Þ¬â—¥Ï½¯~¥Ë߸Á˰a¬Þþú÷½.ðU¬áãB¸¥ưTA¼UÿÇug>1n;¼Y·Ö½ ~1xŒâÏVÅ&p‚]Üâ ÃØ44þ1lmLâSøÂñìŽå d ùÈourˆsÌã$gxÉ3n²”œe$ǸÇ,Ž•¯ÌÝ-?™ÌQ.2—÷‹Ÿ0£Ëh.ó›Ïlá4ÙÇlÞ°›ç g=ËÙËuþ3yïìà<ûYÇ]¦rŸ ­åÿ zÐcŽóˆÍiH™Ï“¶t¥½hJ{vȆr¦5½gLZÒ¡>4ªmh5LJ®~5¬c-ëYÓºÖ¶¾5®s­ë]óº×¾þ5°ƒ-ìa»ØÆ>6²“­ìe3»ÙÎ~6´£-íiS»ÚÖ¾6¶³­íms»QÛÞþ6¸Ã-îq“»Üæ>7ºÓ­îu³»Ýî~7¼ã-ïyÓ»Þö¾7¾ó­ï}ó»ßþþ7À.ð¼à?8®ð…3¼á8Ä#.ñ‰S¼â!ù,‘^p5‡ 000RRRnnnMx¨iwš}nŽxy‰xw˜g|¤u} Y­_…°~ƒŒ{ƒ“h…¬fгm¶y†¨sްz—¹Šu~“bbšisš~l˜{y¢KL¨UW¹Z\¹^e¬|\ºM¹{X©k{§yf»ch·hu´|kºs{Ü|6ìz/êy8ñ}'ð|2ÊZ\Û[[É^dÖ]aÎd^Í}FÉzVÛkMÛgU×vKÖxUÇciÆksÆvgÈrxØdgÔlpÞuiÙxxæ^Mã[XèfIåeXêxHèwWãfeåopæshäxx†n‹†u‡„{˜–m…—u‹™~”¤l€©w‰¤}‘µz†Æ{„Ö~‚å€y˜…x¾‚I¶‚Y«‡g¯Œ¬xµh±Œqµ‘r݃.׃:ô…ç„(ç‡6óˆ'ñˆ5ó‘:É…FLjSÌ‘XÒˆFØŽRÛ‘NØ•WÍ’eÅyÔ†gÙvÕ“iØ”yϤ}ߣjÙ§wëˆGë‡Wè—Kè™Uð‹Cñ–HðœVè„iåƒ{ê™gé•wí¡\ñ [è¢fí©uî±|ð¦gð«p‡‡‡‡…•˜ˆ†œ†šœ’Œ–••ˆ‹§ˆ–¨ƒ™¹–Š¢œ–©œ²‡ ¼¡¬›¦¸«††¥†™¢“‡£™—º‚‹»‰•¹˜„ªŽ ©˜¦«ž°¶š¨½£Ž¸§™¦¦§©¨·¦±¾¹§¦±¬¼´°®¶¶¶ˆ¢À˜­Å±Ç£­Â©¹Ë´¼È±¿Ð¬ÀÖ½ÀÄ»ÈÕȃˆÉŒ“Êœ‚È’™Ø†‡ÙÚ–‹Ô–—Ä™£Ôž¢É¥ŽÅ­™×¬„Óª‘Õ²Õµ˜Î©©É«´È¸ªÉ´¶Õ¤¥Ø½§Ú¶·äƒƒå痉噙ꦆ夜췈뻕奥躤巷ñ¹¸Ç»Ä˸ÛÁ©×ŶëÁúÆ•êÆ§é̵éѼ÷ƦñÀ¿÷ЫùØ·ÇÆÆÄÌ×ÊÑÚÚÃÅ×ÎÒÜÔÌÜÜÜÆÓâÛÞáÞàãåÅÅäÎÐç×ÉåÚÙóÅÅøÝÅôØØäßàæáÜþâÌøæÔåäåçìòôçæþþþÿÿ 80-~ßÙz‡ŸÀ†ÿÖ#çO`=l躕ÛÇÏ–ºröü‘«Qd6r÷Þ#7®\Åæ\œI3bÍ›8q6ä÷Š‚+tèd%cÆ®ÝÎvH“Fs-6gÎ$9ÚS¨Ô#7„ÀÅsfß9~Î qo«³@„¨‰óFQ¾pãz•K·®ÃšG-Q pužAáà&5zíÈ‘±dÑQð²¦ñjü¶FóJª5¨–éÚӦ͞Àvã~ Mú.M¸ðbar³çB„èÑ¥FÈO"dók«Ôj +3õe™6kÖ°í¶Ä¥ —HèJï-½îM¹Õyó Î ¦Øtóÿ×6\8D„@×5냩ܞ?cQ°Ä°:õêr¯Ç¥-Îk8"G`n´…C6Ðä! iôijLiä‘HvˆP;3ÉEzˆìAYƒDEŒ%xVc€â5$ß^Y|èÈG~÷a¸“~qÑs!züDxHÔ˜GGч *¬ÂB áNŠ•9f,uµ#‰&PD‰…ºœtcV45a"AáG *”q†f¡BòÔÑ|uUÿæƒ>øph¥–¾‰—]_=…BX“O!¡úQF©}"¨rù€ƒH"ŸTˆb–ÔuYSO9&im抩\£Ñ3 €Ñ"D)RFf¬pÄd€“z°í‘†%é´C!&ÑcM4á!•nÎ0®¹"ô­h Í#ežB¤Ð=fˆhÄf„CÞ!ôÌcÈ›ÙÊWfa&ÛÀüXƒåX]•Ö­¥ Ãu5~ìa†gôAHb”1Ä*˜1O‰C­´" ePaÏR]]ke–Ù*Çmº¤OLÔÌSW›Õ r†‡ÐÌshç,5m”Ë;äAÖ¦î ì ?­ áV-ÛÿEÏËndO!å|cê¶sËe4l¨öQ 5ÕBH2¬‘_ BHsKÖTýbs¥Õ|Ûu!{TƒµÂåà 3ùä3HˆdJ=Ô òiZá°Uˆ$ÃÙml7pNC½S¶e5]W8°!¢!ªc=ÐÐÔDÔÎØo1Ú“°Á–ŒOüÌÎ&‘0\2Ê;]†YßrIØ6èyð@ìœAˆözœÑ½Ìu8 ”oP#wspÀ#ÂqˆA ¡ öKÞþ°¸'9vÉG[8D´û „g8ƒ9øÁ=Ô\rɇä¢7z„Ã~(„"A=¬ k@D˜—°úyŇŒ8ÿÎ0z£ÜI>†9ûÍ#;hóCjö.3äèÐB²àEô¯zZr¬&pãi 5ö–Õ dI±âð&½ð™GŠë2ƒaŸÕ 4‚- 1†.Ä¢ˆ Ýtâ¾â”†6áƒLvèdˆ9⇠¬« mî°–¶ð±<£7Öå-¬¡7€ÄÄ€¯QC‘džYÈXò Â<è Ì<‘Œÿ±ItA"¶C€ò Ôècú@ ˆÁ‘hR†1ôL ”[SF„”.4„ž6yxÉ]ÉE˜£1füÀ‰¡gË‘‚Œa ëÊgV5ÿšËê›v g·éFsî‡wè]mpæDœácCÁH°È iHd(OK¨4Ï´¤‹-q™ ô!w‰UaÓSgc ƒÈ0‚ÜÀŒ@Cjcˆ±ùs:P4Ä"–,Éã‘á(A­‡R~ô#4Kl"?^¹.0ˆáža¸á@H ! ~øÃnæmòC˜ ËÊ’hš2ÞìÑY"„?§Ë:Ҧʥ£NÇ;d!DÃ\ÁCp4<€¶7¾ðGP–¨„œÑg Ã;ØA–úFC´pNpò›J`»`‚LÿqÂbƒ+„BM@°€1ÑfœQÊ'± lœƒP¸AƑзy%Õ¾´kœ—…·¼r´$\a”²Ä=Þà„Р…К/å  [ £@Å;,1 ìb“˜Hïê¬Dx#éJw=ØM ]–ÓtÞЀ†@D‚_FIù ! ·„b&! L‚+«Kq\¤ ”üƒIPÏ»\†¦…+ % €-:x ÇC~>éÈ/Yô|ù¾í*’Žæá¾{ÔÃO×àí‚x„»b hÇHÅNv[ØB/ø’D#Üw¹[M8iµ$õ:„ø£÷hHÿÉEO—t@`è_€«¨Ñ‡›õ)˜€aàAø÷'\!‹ËÁ·0>p‚à Ú·Tø5 2‘IÃgï@!­@)† Lf`²08Àe7Ð ±0 ¾€ “r&€E-Àe4 DÐxWýòf¹·iÕw§ñ€øq f€×p x`€à!Ñà<€À ¾ P`-Ð> `-´aVÞƒ7iõ_q²Ñ9H~Õfp Q ©â@ ü° HàF{Ô’ð-€%D -0”Ô`€[x-CˆºeP(d)fˆ†üÀƒBÿÀ†K° ×K€tQt;P#Bp·À¨>n±}ü`[ÞT7*†ˆ[HRGujˆÕ„f`'$ÀOp#€¿p Î`š OPð-°D04Ð ÉtÞ =Õ‡rÔqVóðcxf ¯` ®²€rÐx3XEð\Ö$° ·@+>ÀeR tB ‚S/Ø~‡P>¨b,EP ov€Ymp1&P&¡Ñ{a ð0 äs ŒIÖsïˆRð(+²-? ’Dp@eŇ Eé²qës[tÁt/A ‘pˆ h×rÿ¡Ô†Àqâç@8ðkÈ 8ÀyòB‚@ÑpE ,X‡’A4mâ/Ö ·8(“Ñq ·“åG­`Ë é#`è »€:@T-ðH*%v.Õ 2w=|D;o!9^Ã’iå’pq-×` žç•P„Þ0'£HÿuÑ{¿§˜4i 6‰p¡‘V†e˜À s'ñp ë@M ¸0…E0! ’O•;!'¢h?Óø›Öx;ÝÇß'†à‰pñÊ‚®ÿ€ S@£[!uPÌаð ¾ð »` ²pÿÿ0 ’A’yXÐ oÕd &eŠ‘Š;‘± €Y ¨˜·8É„{q~ €!°†CUñ’@¸‰H° ð€ŸË qH Dp‚/q-è‚%™YÜÔþ‚yp‘(€cÑ•+F†‹)X6 š0” )ÀÌÀ j€9€„M<ð: ¢+ún‰ôp&€„-P#É™‹·…Øg2ß©±€§þ¦CŠ£;!!=ñctYò¡Ü€¥€6 ž@R€³¢¥[Ú íq Cÿy%B0· XâcDŠxCƒˆ£®Ð“sšˆpa§€§Š3kОü `¶R0¨…z¨0«‰êÈù+B°©@É ï#ƒ¥q‰A\€å`ö ¡&µðñ G* 0qôÀ k ÌÐxðc°÷÷·€¨³ŠŸ¾°Rw*X )(€gËJïЄèà \Єˆ ¬¸$zñp Úê§Àw S`Æ’`/ð}v à®ÿð–& ɉÀ"q` íPÞå/ós{áUjp ð°ùú©«¸©!X²à ’ð–rï` qÿPGf ¶ JIðc±« > ;°œMI5P­Õ¹¯q±>ΰƒµ„pÿ²ÛI§u±ve2¯@ P¡ ‰ØÐ?&0 RpZ[J: q¦)4@=àqP=ð›sá7Mó4˜÷ ÑtmŠHÊz¾R9I>Ã*Ýä c; VÖa¨€>`Ÿ+ÚnË Ç`°,ƒÝP·¿eºÀ œ¨:{!9‰ @ƒ°!^Q$¾P+µBlH £æ!àÀvµ ‘&Mà€ çp¹÷ù¬ð[ºÀS¸»Ð!ÂP·¥¶ 5`Íæ!)‚»Éÿë"« … àà˜Ìs γµòJ!`K[1ÊÐÎÐ h«¶lûð÷ œ° #Б¢k0OC6` Ýpkp–ê$«Ù Å p–ý‚;€8Ð ¢ ™ð¿ÿ 8@Œ)ºbaXïtÆeW¹… š õѲ±I¼¾í[±°‚çÇ(Æá »à»àÍP»7° Ñ :ÿ€œE0…» èòRh,f;vrr¯]K!d IÌMÇ£ø! 5Ç* qÇ€¢ƒ€° ¾` #àc:TŒ àP,ù´NgC'YQ±W ÿb Às)ŸlÖ¸–BÊ~œÇ¨ÌM«€`Ú‚íè <@…W²/ ËÅÒ3}d,bPIÆ ’å7 :€&ÍyÁ©‹ÇzÌÇ¥üǼ#ÖµÀ—TàÍ;À œõN¦òNqD#T#í 80 ÈÐ 8€ È<ïð °¥µøÑ é·­pAÇQqDEtO#ª€ ø'$PŒc‘ÃðÖtÆgÿ°’€YŠi5B,d‚§ùÎÿÐ ·~üÀ ’ ±ÐH\q ¿¥VX‚%O€–G¢:@‰ Úðcàa O˜önñr{Nã c&X×éÉánÝh7¹²¹"KPq Èó4 é šb¿€Ô“ ºÑ”y ¹J°Õà§B'­„ÓÿÄw­äE~(”dİoð/HP·Hð8Ð"¿¾{S³qü ǽu•ñ+ þK`yiÕ”3\Þ{0 ¦ÐÿFâÊlêÎ –CbÛk øí áqðÕQí¢§2@ÿÀà .”é q60X>”º~'O1 ½`k0üà 8”  Ø@./³.z%&F›%&€ü‚äÐc„o!TÞ¤.º{CÈX·3° xó–ø‡ ›®ySO§+Ó`ÃHõ[Ï7óÀ%€à c•\íAaû ^ Ùr•H:Ñ` ršµãàívÇhÕ;€Þ3ªàëwBy`SÄf° ×n¹ ÛŠ WL!ºÖð4Æ=ÙqG.zÎ’ÄØuKÀ Îë y€|V΀a±»ÐðMÀÐ êð+YÕÛÿ梁?† à•ú€’Š%Ê9%óèJ€Þ  W€€åü ýEdJˆø®Ñ øV²œEÏø $øÏàAƒ*<·ÐáCˆ¤ç¬ÈÅ"@€$ÆQ·v@‘tÑ™5$EœñC¤.&hõ"攋Øèe’H4‡F8‘èшFYª´M#6‹7n`³VD $*¥t¶8’ Pe«‰ÌE¬ñÃfÒ™Å"A ¶£[ôÜ]¼yõîåÛ×/Þ´>|ùÒèÇÆ…4Yäc—¯Ç†Ï]ô%JHÐÈ×±»Ë„øÀ{Q›Þí„UŠÔ5A£ô¸¾-ÿÒóâ@v@’ô[¼h'ùYt–  <Ð-šN~ñr/‚D®Ð¬_o‡­0’­[…”¸‘»ÅùQÐÅKYýˆ¡já|’H"…)oßFGíHÏ‹v%–tÂ.!¢ZãN;‚¤Ã¨ÌHhÁ…vÈÍ—èÚ‚?ÙC#Ä4yåg¢¡‡žhŽÈÃC"zé> Ð)è@tM)”3J|h„%ši©+ß !âh¼â+k8gâè!þ'DòÐaWЉ…KÞèÀì´ñ5¥Þ¢g ™ÔqF7v2žùAgª°F£kø™ k¬q› bÿ~*‚†ÖâÇ•ǤÑÌ3‘J³+6p³ˆnÈJ%:º3¥–¾¢çOkè<ÉšÿútFˆ hHŒPHeä‡Ì+MJ!A£‰›³(ùenÀH§"[,B%UrRJ¨ÞB"D¨ ¢O¤x‰/Ô»\uˆ*kUª"ý¨XB¦$$ìÉQöbÃ<@ÔÈQ~¢¹(jÉ#ˆ!ñ’Zx ÒoW£TÜÕÏšÖèÁ&šry j‚ˆ<¨(^Ÿæ]Ò^B‡³×™p B$vi¢… @øÖIwe˜­·âQõ‡èÑ™8iøHˆk!$t±)µ:TÚe^zöT«*ÿ@½*‚‡‚}èVLšÁ]X\A¥ŒÎ y} —èé—ˆ"° ‡jTµfeR5BâÔŒP´á¯Ø9±•jMx¨¯u ûc²ŠVP¨×nûí¸SBÛ%$öÜÕ–Ý +TéQ„q-¼Òhv†g‚r(#g‚ºhBÀÙI¥R‘pŠÉ§…ˆÚ¥@óžÝPB¸Š­?(\Ãõ;É(|Þ"È©ž†P¡BàÎv/²ˆ’ßq¥ÎI¸‡ûlíZa›of+Ps½‹2Ñ­‚‹¦j¨ ñ“(ÞªÚª›ŸÁ«T Ò T3ˆ(H}~Rˆª‘¤Ai-½Š‡/ÔzØM__¹ÿú¸@‰,Äø‚ˆ/xÁsç i‹VZR|,DtéaQ²&×Dí98D¡ !Ò–Êé†2DàC¨¾#&ÏWÄÔ ÷Gœކ5Lb¥*‚ÎÄaøjKöpx@¯M„U<“Ó™ÄaÞ¯ Ýe;£¸Çn&4}g9[ùщæ1¥ hKcúÒšFt£¡ügIg:Ô›5^qjT§ZÕ«fu«]ýjXÇZÖ³fµYÑÙ[ãz¾¹¾,¯{½k][º¾n,±‹=ßst6ÙÊžo³ýlh«–+²3ƒ€ÝdRDÀ¹:hÉÿ1m¼Ê<æÿøwÊWîU“ß<âÿxĹ ÓâüåC‡·Í^W„ßåÞ=çy]ƒ®ô¢wüè??Ò·:”óÜÞ%û[‹^ru—»kÐknl}ãnõ:™ì]t’S[ ¯ëÝå}V<ew«Ü¿w? åCOkÝívšßPû²M!w¹²bÙÀ²NxÊ¢;Ú£'}éMzÔ§^õ«g}ë]\†Çõ쯗îßáÎvÚ ×öôÖÿøâµýݧ6¾Ýû±ÊÜŸ7Ì s”@ú-óŽ{ä›UÞÒçþÆm.sï«ú¦¾ô³ïÖÝ @åÕ¿ýƇn î#ÝüçOkúç½óß?ìÁo‡úáosú++ûû‡½ã>mc?ž›9™k˜ @³:E SȵËtS|ã¼Î3Ñs@ü@ AA,A‚Tȱ£É%OjL©ò!Ë– _ÂL(s&š6]ætˆ³å,XÙ Êc_Áuè’¢«ˆNZµkýî›U Z7z7 Ò»v «ÀqÝÂåó(r$É1ÑžUK“mV·áì)W Ýœw;®R)MB„„úØOZÒjÍ +[¼¸ž;U]ü¦1ÔmîÀkŒ•]ó‡H¨P£!?ꬋ’tiÓya¦n¹šµé´¨ÕºcÇ.ž·mìôá7ö_½yúöùž7Oܼßóè±3ç-ܶmáÆ ø;ê?âõÓG9î*ÍÂÿm}’|ùؤ͛T÷5{‚üf™û·]ݬuùÆy­'®žHyÔÌ3=Ô˜ó oÿ˜SxʼnC8Ɖc]?âXC΀š$ž[ïñäzuuèákmØRYXàN4‚taÁ+,Fó‘4ÊHÃT2G(#ÏGÍøðH‚|㎎<‹½ƒ 9¾óÑ;~ aÈ="8ee©¥>åléå—žâ‡é™(—ˆ®™yRY­XÀJ9lø…‡ †ì¨’‹5£g3Ê4ó5‹EÒHƒˆâ‚xóN\ê£ÌM.ªÌF‚à T‚™e—šv&šk•)ê˜j’(&©0•µN%)6"Æc”ÿáMYòðÙ§<ÓaDŽÊ¼cŽ\H–4ú,Ú —xÒȘ4ò ’Çkäñ§eqJí—%¢ªíx¥²êyÝj”¥;¯\ÂF…Ð!ˆ vj |Ü1Dv®óŠ(u@3íy4úP#4ÔPT‰[h‰9×~dmÃZf{&™ÛrH±© …ûЖ,rÃ¥7|Ò'5ízCç7ߤ¦’úÐç–m²bÎ+TÒNÃC\–ÄÜjÜÞ¨›ú-Ïkº{%—ß acÍØùî72s‡3ÊóÎ1Nn™¢H¬XÀðµ9ë,Ú[A{ë³MC“}æEl·íöÛpÇ-wE—c÷Ý¿àQ‡Ýrÿ‡1Æø@Äp SÀÀáCA1ÌÝ—K)¥Äùå)ÞI¯\îùç ‡n÷Gs—nú騧®úꬷîºê°ž–ò¨<ÔCL+ÍD‘£3|Ø¡kãK·+Í)¾¶H1Ï\óÍ`‹±Ú=Ën±õ×cœ1öy)•xôqÉG4~ÇF ± ,´°‚A‘µH¿¾ˆü+_®I&O@ñÈ×Ñ“ÞΨ—½²¡%mq9ÛĨM•CRÍhÜ ða,ˆÈ„}ϳøÈ,jö%$ù@>ðÁü¨µ<Íl L“¨½rO\`ê Žðƒ Hヨ ÿÆÁ=Â}»‡7 qOxí#¿ªÄ—hä'@ég enHC.þÌ‹3ÜÉ{øy²;)ƒ‚ `?C.0Œ_¬!mx¢Š$yBù‚°‚=ȃ `h'Éð “Bñ D4‘¼UtIRŒÙQ!õ!Þå`žj!Ä^¨–Inï‘À &Æ|i›Q$ÐàCÈ@†2ìAcÄ !Oû8á†U¬"ÈZ 5ÞÁ'€Qqw¾³bÁ:¥Ë†ñ²‹`œ 1‰y*íÑÓ<Þ4âñÿ¥œEÃe C!’Í=愈ۮDñŠv˜ŒX"yàË© ~ÒwNZ.Á$v^ëb¼Xõ„Y@{Šô!ôXbe¼jmi›ëÚà¢hBÅpDΠ….âh5–HSFjðnSÊ‘-¤‘$i/©z† ’¹‡6q{b †ðR å CÆHß¸Ô "a_<+ kðXµð4Îr–ÅŠïÔ:·ôubNN T¢Å«Jž‡E¬Ic¨lB#$ëh¦6Uµ;®«nj¬74 -½23W,‹²þ¦›N+(‚à§` Øév¤°-il…vÒ…ÿèCedñP†ÉºÔKàðÔîÁ h”5pÄ7 3lAµ¤ [ú L÷ “ò¹Ú-v$c{­laˆUyÖð—‰=ÈÊPrèCDë–îqS¿ÆCßà‘ˆDˆi0ÃdŒçQ©ŒŸå8p;ð†&våuälÉ+ÉÚ6PÞ(C8ä!Œ=@·,÷øEMU”{P¦Épy˜ _¸ÁÛÀ6J$ÖÝ«§¾aÜY™ÌÐȃ‘žÊÚ O$LŤêz”¼äóÖsÂ^GW½AÝ;ýu]AÊïÞÈAaš5X ¢0‹A„a ¯X‡!Àú[Zffÿ£šz–‰Å"AàUvg‘/\Ø=+v¼SerT¡läÐlé]u°¼¼ei‚°âÒPƒ<"`0?¡Áæè,IzíÔQ¦²iÅãÅð­ô|d‘4äž‚M< Ò™|I(Ù¨Ò–Ë/aÐ`‰5ˆagƒ4s»eˆ:lF½z£â¼2}ôÕÙö«%Lk´ÅZÖŽõ­ Á©Bl™ú€&¤JHÀ+XA«zïÁƒ7¦QÖ’Jí}]ÛÓDönzMán{Ûɰ¶µ—Vx5“‡(úª‚˜`4ÁΰæhvÚÓx µ¦F½Tf»SÛÿ®ª…ÿ\pƒ»\5³#Ë–j7§u,VeˆfÄ@1” 7@Á"Ìpx" |ÀRDÔ HAÊwðð”œ×å윒/çvË·Îõ•³Ü¶Ù‡¦B0“U7Ffxç»$í¸Ç”]$#g s«üÛ…'¼«!kÉØñ™i°½×p…/|a ¬xÅ*¸ð*2ØaI¨B(Êâ¯*ö®Š³”ÞÉ5•rpÞõ?øyŽÃ¯£ñÔ`Æ¡ETV‚°¼̼Hüa _€ àöH´"„.Iï²Æ§Blõ`j}“_¿ýØ›á^WïÿH(bI&ÁÏð}3¡,à!¯È|;ša‡*@  y¢V¸ÌN¼C}Ѧz‚7x¦uv€‡7{á×jq{ý¤N 4˜_ ¿PW0,¢ „8  yÀ }ò'§÷'©'6؇-~Fp]Wk {‹ex"!v¤oÖvA`T°–—vÀ—ð çPFÊ P 8``ç€ Ð²|Ç+Öw}¨}A{Þ‡€ n¯76t Qp à s€2 lõDÅ’ ÐK `è ÀÒtNueaÞðaÇtuèhcÿ˜u6‰_÷ˆEó%± à½sž¨ À  »@36ó® ЇÀ„¤`+ &N"a2X&WìÔ…1({5ø…ˆ÷jNödޏ1_2$0 OÀžØ ŠÀD`Ñ@£ˆ 4#_“"æ0 ¬ÀŠ @ã(D0€üÖW†@Së¢t‹¸`»ø}Üç‹íèŽ!ò:òx:uó9±P‘PÀ 7ðåÀ|k„À1pðPv“9 éL wã;à£>° vs8Á`7Á 7¢ó‘ y7¤3$Y’&y’(™’oaaHX_bÐ 8€ë0 Iÿ4À ) l% “ÍC3‘ NÆ ‹½"rï¢tÿ–‹‚ç…+Ñ€ìØ’ H†´xf˜?øxí Q Ͱ ž(y()`B[£ ]Ð`P ”Êà2Ê`°;à;e2„p_V2+PɈIÖ‹ðh•ݧ˜4Fª’ƒr Éc‘à/bU ·Àf`ðÈó.yð,‰0™’€ ÔPð7À—G°Qv„e‚@ª&_ô'ï`X7Œ)‰‰É˜2H‰H·÷€9¤‘À ·—Wï 2ܰ X`X0I$'ó n «`¥Ð• >ÿ€   R  {¥DLÄ µi›:S+Œ!ë˜xˆ n¾ù›ÃäuáU¶×x|ÅTf` P¿Pm—¾ B5ó+vé$ Ó&@/(çÔ ý!p÷9•ïhŸZ•‰µŸ%A~ý&Ø„UP¯€³À]¤   ºG'Ø+C"¡Ÿ·ÂBÒ“zÕ±›3Ø›¼É‹À)¤„æjÄ ^èž_R  Ä ðë@rÙ¹³À*{ Œ0žåyžë„'™‘g1x"ýp>*œ?J¤iª¦$† ñ˜aW˜_rð¤OBf·Ì´›@™PðKÀ„lõ8P¨>Ð ¬ 4B>ÿ@ RàFܦÏ&6åd5Æ¡›Âˆ¦œ ¤k ¢ùy6Z ^þ &íÐ5«@„àkd@± 8à‰7À ð ¯ »P ’@™(€Dð.à‰4C€)¥Š£M&°¤ ò©¡Aʦ“詟ú¬ ª!¥Ú0ÓàyÓ0 v@~à"ð= ðÑlõ » O€.à>àƒ.àïRužõ ZÞÃ'ÍPó)†ÑœÒÚ©ê¡ÖZ¢bód0  ä 0 ú€ G@«·wCé(Ê Nà½3AàR]F “z¯Ð†K4gÙ÷¯W9¤#RŸÛ¦TÉgJÿÚ0 ˰ú­A±J€ |ÉJð+“š;Ð8Ap´ „eS¦Õ'mÇ¢m.‰Ô °;°¿È’•x³`‚œÊé°v ÜJâcKà7P À ¢ ( ±°®Oð/à;03@ºÐkeÀ àpt{P„iu4²N€Â²0è¬ÓªµÐʵ’+³1[I[2 ­P xª)±0™°«ÊL­Š$Dðž¸&€ ´€B>à‰QКA¬ïúŪ§…ÐXD6W©¥'-ÈzW»˜ Œ[¹7XŸ^‚<ð"š²)2 î ™5 ð:ûWH ÿp 7€Q°?ƒÿ³.ðä[¾´k\x§…€bA².;ò0˺…Z‚›šz˜0k¼Yû²Ã ¹‘ë—k©Z ݹ¹[ò+2ùlå´s+© «K  €

=ô«?Í`DðCÎɾĒM9#C©w"‹Íz¦»µý»Â,¼¿^{°lB\2Bì%» s ÐY[Ò ~€ (ðð»àGà/pÄwk µTQ}åe`E%7…`e¿`BEÓ ŠÂ“ÛÂüKŸ÷ÆbüµÌóDå`À`âl% P  Œ[Â>PÿC ´ïJdÁ ÔŽQb‚°f%Qk-xÿâ»úª%<:š:O5KÆú›¿«Â`—%#´ ³ À2 &瀉šx ¹€ž3‡›pÇxüµ°Ç±k¾?ÁL+Vb_¼›¸Õ5¡Y2¦Q¦þÚˆ[É—\­ÁœÂjºx™œ%Ê˼YÒñg«¬p R` À0‹s0È ³à ¼° @¬Ê« }Y¾@P¾KÌÀ Ðp¸Á57µÅ2QYr¯ð¨Ìò™êŘLÌÆ\Æ–üÏeÌ6­å%˜«¹Z‚®)R§Ð"°òS,BÀv~Ñ‘`±ú Ϋ| }y€0½ú|9¬Äš¾î¹²w¢ÒYR?P¨9rÂÀ<ÌþÿüÅ]Ì6-ÆäY8‘ŽgœyÜ ™€;€ž~°j€ È€f>ÀLÀ TMÕC ÎG #„OíCApÕ†²õ¥ÍÌ*¯`¤ðbùËü Æ”Œµ4}Ó“,aüù€É¼%˳5m’‡ÙÈš¾3ÑÚð¢`6)`ÀÑVýÉà2´@Ô¼3@ ÍÐ;!30:fu%œ'Ôõ+¬ [S¿›*Ðq-¼8Ÿ´e&w YyMÖ(búÐ× `¿òˆi°Íú ¢¨QØ‹]ÕÄ=ĽÇ<i` òÖJ³,mæ)E+ÚZ`ÜáöëÂâ5×ÂÌÝÞÿmƒ;Mœ¯¦1Ì ­Ô‘@v)Èh€ ÊyØJ Õª«Læ ¬5ðÌð«AàyE‹¼ë) Ö¬ k ßQ3mÚÝÓNáß-¼=ÞÑ-«²ÐÐÐyؤp3u@t¢¨‘ð °}ǰø= åàŠ@z«Qðã«´=o ëÀoœ]B”šÉwh@ nár-á¨Úp]ÉÈl³zí%ä’y±À ‘QH™í op( ÝÜÐ"PBü¥0 « àÁú¨œ°° 4P÷%˪ é yŠà\ ôBÿñäýL×P®ÚT^Ó.s`»%àù"æÐ5“°ÆP?K 뇠1 Ä0 ¯ )„™ ½ŽB4Ð>ð5Ц|à3'NäÄ(­PluÖjæäÙÐS.åŽ~á‹~Ú æ%³ ›]À™õ@ÑÆ œ. ˜…“ð pþâ8Ð'|Ù—ˆôÛ ëLÂî>¿ôLT)rS‡\p!Åþèø«ï/Ìï$¡’(Y‘SÄ)t‘¢ó øx7Y³ ÝHLÐ` £P"  `êÿ`4ðÔxþ;€ vã ²®¸P6’w8i7)¤šÿ` ƒ€Þà ¿ð:¿ó<ßó'ÙïÊnhw•$Ã`à^’à—~Œ³(ưÊ@ŸŠ@—À©®·8ð仂Í@6 ÛPiPä½ëèÙëÓ<¨P#ºÓ”K¼q¿ÝAéË.~Yƒ5ÇeQ?)R ë QÕQ€K‹ÒK "À­°©0 £ @g­É—:ð«¾si ówfrò)„BWÔáÏÛì$:÷té3[÷ŒÎú[¢÷Bž?ϬÀ«à¸ï8\FG°8€B6²Æ0 ­¬P >·âû™ÿ*ëöüc@˜fð§™ гå¯àÍÿŽæï«÷ÇŽìâ?þþ«%xUô¹~-+*¶Z§øói¸Pà~@ =bÄ¾Ó ¸°ÇDð®¸Í€¬(3ÌAƒd ¢ãMßCˆÛE²ðÊ+ ­">üבã¿uÿ>v$YÒäI”!Q®d¹ReK˜,_ƤYrfMœ7qî4©“gKŸ57B”¦L™eÒ†.ÝéÁ«‡¯DzXtØÃwÊŽøIÚì‘#;~ñJÄE-o@€ðÓv [0{áäé9 ”¤5“Fq(É!GþtI¸fPÃ6ÃD¼¸ccÇ…#K&ÌT5i»¨Yæìª>©TõYŪ¬ˆ2y½6óáÂÇ×/Ъåÿf ™· É&HPê¥ç$é0ª …èˆ%!®<¤ó”Ð{JWL$dëØk_ÉY_9ï–¥JxõJÂÓ‡Ô”áz—õÈeD•½ã…C‡”Ø;r $xÐv™ƒ¾ùA”‡šfš¡&µutÀb8Á¡–¿”Ó‡9ëžËPÃì6䎰 ‘§Ij§•Vfa ¼ð˜ZåX3i0CJ«÷ŽæiÞ;åpˆÂv€ïˆ4>! ÿÀ(#µr$}š)N™fôyLJ(,ð‡ø6ŠÎ$ˆ+1'ÓTsÃ13øÂ­= ‰†A ¹G½fä‘ÇJj²ÚåV^1ªÂé,,s;6ϤÉÕ˜`•MÊ:ä‰\Í™e TܨN;™Ro¾¬”F£Bm懔Ʉ‚&xÁSt€[G‰H±…ƒ$²ˆ†2ø˜Ë*­|§´N“}ÇJ¥Äâa Þk&H¤”rt’Œÿà¸ÿAÀù¢b¥áó`i=‚dwoþ×e˜q6{_´mæ0mšpeg–]{õhajϨcÕmFPj(1á†Ï$™d¯ÍvÛá&Ó{®†hØd«ºr>T«óˆ#y𙿳í­YíÇ>ß N9?˜`In‡ÔNnL ¼b‹ƒí†Dw¸y²’æž^` $F°#-LÙkx"â³]dQÓò=i’Ïü:2W6lóZeŽY{ÐCß¾¦S\‘`>’f"9%¹¥FÇåÙ‹j¾+ N|@êîf á#FøBŒ4088Âý$×'„)Y^£\s¼§*3‰Ž{lƒöÐô=¡pægœÖÿÝ”1 °Â¯°@%ÚñŸ5¯GDŽŒò>Ø¡ÎÀÍ ;¬  ØEÊ:X¬ai4_QưÖaŽsìƒeó+(A›Yp‰•Ñ`°„†0 X"1 7¢»*½Ç( ”†þü¥=ˆA M°ÇÄà ”Ã\W£Wz@ƒ |­J>x `Ž)6щ"Âàd¤ø*(âÄ;´ •‘Eˆ´ÂçðbDÀøŽ¯°>ì3£RÊ †°Ñd€£çãH¥ ƒ4`– ˜“‹ÜÀAÔP¢åIAC22‡œ•.a²È`ýÐ( ! #qBÇA¤yÊK3öhðá} D oÿ˜Ãö5Â,â:Î`(ƒ55bãLøaãeÔ$!Û¹ËDÒŠ—줢eÙÈLêh•“ºXIeî;°O,.£µÍÈÃ{pËÂÀ4 °€ ,ŸÒ€‘†6ìå«< p LjÀÖÄ%<ßiÒîÍó?¦ó©wḛ̂u„ÐÎ J8Ô•”rA”a0ÜC~1ŠXOzé”Qà†3å5°4‚ÔÅu cA#}¢/ËvK°F1ž4ii‹¸ ¶¹…?°í¢€­Nxñ`œ>èjˆÓ)Ó=ÊŠA à  ¤!úØž0‰LPcb#iXÝYRÿ”‚N¥kãIYÃJ{F$“QˆÂÀ‚‚\¢4Òø† ñ>C¢qjò°&?"œë4˜Á*i‹ }ÈAÂ5ÙXà>Ö±ÂUÛdaeYï`v|ñ#, ƒÏ†v´ñˆ!Wú@†Cä¶8÷3G,PàYf!wÌꌖ‡°VõømWOº•·{+.Y«h§³f6½ƒÚÁß^`;G ºöÀ=Á£ÁÒ;v EX€ P1䇥aG{;Zظê˜åŒ5‚ï…ï|)Ü ê×Nå+Úr¢ fýà.pÁ*]À,Ûñ`Y¹ƒôÀ‡>(ÃZ±.Ñ€0ÿa X:p –AAY¼¦Þôêy¡uB¶Ä$þjqEüËû¡–(‚À¬! áÌ/HÂßaŒ¯øÁDÔÇ“‰°4àß°9–¥#œÆ˜˨Üu¨\Ù,cˆËóZ4£Súå– —n*^à ˜E?7-vð„H*)t~r-–ð(l€â§–ßä±Ö ¬õ ³žMÖieE&:Ëõ±–·üh¯²DÒ“¦“fY¸f©‡7¸fˆ…Gø€…Zaá«p!¡§˜åY¥PCÔc$B¡“eæÚÐÁv4¯{m¯uÄ[Þó¦w½í}o|çÛÞ(,G¿ýýo€\àÿ'¸¿=ëƒ]ì‚Yöc– &(¸xð.ìWAí" OA(8€»F¿ø[PØøCôýr˜Ç\æ3§yÍm~sœçÜÞœkôI†Mì¼ÊƒˆcŒµ~ã<"z3™2Xh à¡Àˆ@&•šwðm]è=4HnÝõ˜\hÞ»Æ5‰Ø­9H»û×, 3Ð]F”!'¸Áiì‚ü“^3!¢ñ Y› Y´€®Ô o@ñÔ@ñ J⚦.;cB"˜¯×í=߉|çëù+Ûí*nX”;N¤ÿîàÆ»xÞÇ ®<Äø.ÈD+x%O5ÃwÿDÔ<Ð'È韻®2åɆèç`ÝÄ7;ç/èüw«]Øm}^‡(ÆŽO¢5&PB2pŠšdbF`7ά#0k] œFúðoâ:D1KˆL}$Ý`NþËôÏüÎ;»æƒ¾µ“¾î ¾ê«©ˆH™‡xt€±þÂ…ï[˜Œ1e˜i`–iøŽµÒš"zf‚gЮ  h.J7xY>¶Ã²¯;¾Ë @쥼ž´;@ÒK@„ÔtºX’6¢@C0„¯4ñ¸Øó‘†ÅÛ@e  ‡ÛŒÀ¬¼HsÁËqsË÷2Àvó2¬žÔÁdb0tò¶ÿIà…Ø¸A ¢"¿X„3c¡ôûsœ#¸Ch? ØOˆ‚82!4ÃýS滉°ùˆEd¬0D±\ú¼D‰Ÿ›´ÔIÃæ1 )À–@"‰µvÙ;3‹!¸Ù[Bˆ¨f ;!øƒ]x„‹šã »Áø‹ˆÀ¦@¤ŠK$.JäÅ3$6“†BáX‚¨!HEhÀŠLб 83Ù#‹1eøBØÆ#À&p€\ìEÊ@FdÁÙE¶xs¹y$Æaä9_ÃÍ ½´=nºŠÈ¬`!gЃ‚iH­oX¦@ fa!\ ÷É0ÿ­é@k#˜18DüëB¯[D,‹Ç±Œy¼GL¬G±sGÆÒ¼~äÇ”¬bTDÑ=Gb=å1 ?È0y ! j(-hÈr„Èk“%ìVkÃ$nt¸ø¸ÂãÃ<™ ©±éEE;34IšªGaì²;Œ2”A`›ÁL$Ÿ•ˆ–¢ HŸJ¡Ü»Ì0a¥HJœj— <S Ò©ÉÉë•\Ë 7—1Ì¥øÊ’ŒD„I²”ɱLÌ·º€\ÀZ+e8È„\Ⱥx5M ¯e¹6i˜È ¨H ëš%Me¸)ðHväBLtÁ•¤Ì—Ù7’TÌüJvì²ÿI<Æ|ÔGDKÆI[Æ:²0©’± !`¹„kÜ;­4Y‹1o”½øèË¿Á/¾êAÉxñ¿y‹´±‹·’ḻËÞlϗΫÉËš¬¾MsÑ®#°’fˆh€9™½è"P§‹5¾$ èÁÆUÔÈsIÊ:Ly³<±CÏÿóˆõËüÓÂÇ„OàÌÐkÁÊDC`‰ó±ŒeZ?¥( gÒ&•HÑ\«ƒÐ,ŒÇ •7–‰z#ÉÆ|Au G KöÜG´ÄùüÑDC€*å u4¥gÚq›¶'³‡C»–‰A•LOŸÛ¹uOåƒAúr-N0Ñÿ™|Ç$URFzQÎpŽ(ÍÏ¥7á AÁÒZ[HdÁ õ¹eŽy”—ß Tz2Óv$Ò1”O³D@¼' cQëÁ¡MýKã«ìQÿûÓÌáTÄ?mÏæ8$NuÌF N5=Ò³t;I%¶J‹gZžÇ¹N"€Sx¤Ê0ËÂÓÇÀQËV$m/³vÌÑU5Æc>ÅÁT%ÕxÀUoŒ²01ÅjC•ÀHO]´`ÕQ¯¤Ç íÕT!]IbeUfEWUÅW…ÔŒÕIsº"ÂAq"0ø9/iHQv©œTUÖ-íQqÌ”¬ÇuÅÇ-üT–T×qe×JlXÿ-ÒG5Îê£WºÉ×ïø ekq›!z±å ÕråÅã³GBÕÑÌÃP ©PƄְ„X”D×çó5D]Ö‰ÑútÓiåØrðX§#™¥@’Ø“EÖ>ÅBýÕ_|Ù íД˜¼š¥L„•Ù!ÅYx´XFuמ%ÑiµWjÀ×\í~¥Ø ÕÜ|WÜTqµG‡­PºÙ©•Û- IŠÒDU;PO‰EÆh-˜&ÅXb«VA»ÖAÉÖ|ržG\'^>‚ý—quZ•Xx-؃Å\tíT¬¼n 6•ÚÀUÚ¯å §[\yºYMÐj—Ö ÇWÈõR¯%+ô VÄÜ\îÈÂÿU©7‚=Só\ŸŠ¥Xg-݆Ü¥0Û~Õ0Ã=ÎsQ¦P[Øe[½•ÜŠ ÌÁÑ ]ÉÛ|ÌReÙðÍ\rµÇÚ¼œãuÔ®¥É6E] LM=]·«Ó £Õ‡SÙÔE>2• â¥ÚËËJÎm“ß,̪5V2`¸5É5= ‹`™ã·‚«àó Ø…~Û”³`þà‹ë7\ðc8c˜8 á»\ na~aŽaÞ]}LÜ|ßFÚ×ç½^ëK@J¥Þ¥°Þ/Få›\xZÁPØ_eXƒõT»µY\ûÓõmÕ‹eÞ¥H]Q[]YÝ®û]Š'ÕÕÆÚÚ¼µ{¤·ÕÿÜÔ#^WþÅBû*;ã±æp9EëÄ4ëÂÞìémÿBmÓmßnLŽÚ-ô\ ¦ay”[ßEàòÔ݈]iÉ%ÕÚMŒCÓ ¤NjµÖY—nàÖhj.g\lñið¦ÜäÐÅ{¼ÑàIy”c7¾a4 íµÎníîîÒ¦îU† ±>í…¥"õñe붦oÅ&íú¾oÀçêìÏõ:[¶¯ÅþtNìçnßnûžo9>æçlzlÛßl •pcp&¦ð›5ñÜÎpo&è-Ýo«îo¶ûïz pOq§çGi gpF6d§VïȈc‰vjß½nÏñ$ÿmÇn&/V0C ÷éçg©VY·n§®ð?p 7p'ïq?ñ!wqÿJèp^ñy^ò.ó6çrûžp2_ŒnEò;¾JÞ¼s;p0‡ó&÷ó/×Üw•¢:ßò;/båsyBk=ÿs@÷r/óÎÞpD†e4w[Þ~å>×ñMçô'ôÑ%ëzªô!·åfÛ÷.Ë5çq wt6ouWóÊà¥þrâ«n›âOwsX‡t^wõ´vïSN1³Ît¡îõ_ô7÷ôegvdìÈågÛ¯®vk¿vlÏvmßvnïö|›ôNö]Ov_ôrwvÿv/ö\gtEoöWvVvtoV5¶súìíøÖ÷ ïw?÷x—÷FòÇïT—Ì}?öxq‡÷†§wÿ†–ueOx…Ÿø…'wŒ7÷Œ¯÷OsÛ¦w‡Ÿ÷‹çx‹/y†xGÏÙŠ7y%x–×x˜wù“ù——e‰Ÿùš'ù—yœŸóqy”'ø›ßyçy §ùœú¤Wz†R]w÷w/z¤ïypù_ú«Çz­zçú®÷y«÷ú­¯ú°'z¦7û¬§ú¡×y´{µ_û²'û¯—û¹‡û³o{°—ú©÷»g{¿ÿû¾7ú£OûÁ'üŸü½GüÄ|ÆoüÅ|ÇyÅw{¼Ïûº—ï±·ûLJüËÇüÊ×üÍ7üÈ}Î'ýÒÏ|ЧüÂWýÉ·üÎ×ô¸Oý·÷üÕ§{É?}׿ýÿÐgýÖÿ|Ù·ýÙçwÔþá‡}½7}ÝßýÜ~ãý•gþHæ{å÷}Úïýß~êo~çþÃ}èçþØ'þïÿøäG~ÞÇýåoyô¿þê·þö_öÿÚÇ~é7ÿôŸÿø×þâ×ÿñú=ˆ\Gð „ \èðῆ'"”Hñ¢Å‹3j„ȱã ŠYÑ$Ê’(ª\Ù2åʇ/MÎYÓfÌ9ÞÙsçOA)ݸ“çÑ“I .=XÔcS–Q¥NÕYõ©Ì«U#jŠ5«×®a½®+kö,Ú´jײmëö-ܸrçÒ­k÷.Þ¼z÷òí»×êØ¨_ Ûÿt0᥈In]Œ±±aÅž\˜rå­Œ#'uìÔræË˜;s&­Yé裞™–ÚÚujرA‡®-ùuÌÕTgçÆÝûôgß0yÿmû¶qäÉëÞ}\5mÓË¥?—=]ss†ÂiF‡NÜåvœá©WÏ™=;×ïÜÇw<ßû{óìÛÏ\Ÿè}üÀY«ݺr èÝòíç\yÅ%¨à€6h` 2Ÿ„F8Ü….¨á†®—¡ ú”ŸQýHâ‡"Ògâ‰* E!x,®x`z2Úçâ‹6ê§c‰8Þx zîñØ£‡-úHäƒ #‡ä%ã‘H:ia‘T>Ù¤•S:˜%—J^ÿ‰%|(:$ä`E U™c2YåŒlþèæŽpÆùeˆr‚¹%ž^Òiäž|j©çŸbª™fb}æx¦™v&ªh†¾h…yF*)”ŒJc‚"¥éfˆ^j馄¶ j§¤–ê蜨JÙ% aŠz*¤•ªŠæ«¨™jë~™ÖÜ®üÝÊë¯Κb°Úõêë°Ÿ[ã²Ì.•´ÑJ;-µÕZ{-¶Ùj»-·Ýzû-¸áŠ;.¹åš{.ºç.”ÈVìNånTðÆ[•¼Ï¶K/¾ùÒX¯½ïê;¯¿ Ü¿Gl0¼ÓÂ15¼ÒÃÿÛïÀ|o£¤ñHƒäñÇ'rG$_d2E(§ÿœð?ålåòT0G%óÌUѼÔÍ8Û¼3Ï,ûü3ÐA =4ÑE}4ÒI+½4Ó¥"€Žäˆè”Rõ`O Ê?úuN^ƒýÕV¯”Ê( Ýö?[« ’>ðŽ­v9PŸ ÒÜÐÐØ*³-ظ+÷ÕtÛ]µ@yíÓÝZWxàCmã‡OîP"—4ŠÔqo>>8’ làøN6£$òúJ¥ƒÀ?U—“zí±;€>£¬µIbàîñ¨¯³{*Ю‘#à÷êcÿcúï‰_TŽÀ”.]N¡_d¼»\0 ó΃ýôÿŒÏ8öÞkÿ€ä矺ûã—_rõ^€DÏí{BfÇ=Ú­Y;`Aâg€Îµ­t91€û‘µ+‰°Úò,øºw×[‡*hBº9]ë Ý1(ûŒx¹sYéž&Çi¤yö#ßê®wµ­u}°ÓGYĶA¦Ì††á×âÇËÐNnK,ÝãwÀ /ô¯¨.ÎðjøËš ¯—Q„/ˆB\[ôñº îpo#é^ €/þC‡+É#^çF&v„Ž~Ô` ÒAø‘pPÓ ß̧û ¯"äc!]€@z1‘ ŠQ—ÇT@R~’ÄHù<¹:b²Ïcž*ÿ[Ò?4/wpC`ذ¹— IÝîÖAÇ®Äzמ@j‰Ô•ƒy½,&»ù6Ejï"ü]ÖJIÆ_^ml(Å%µ¨:6°›Óä`5)âGüO›p§él©ÈÝ1Dœa£®¦ÄNžè\>õLªíó–)¼ÙÀ˜@Ÿ(å"Q’ÆU‚q%îTè ïèBÚEm˜µfüf×?Nq’Wë?Wi"òM“ à»>ªÎøyOŽ$µãD F¹˜–n¥ö„ˆðd†¿x nt\5S‚ .ŒåHÅñ†š9ÂìÈî4ø:¨+YýÝS£ºA“ àèmØÿ‘uVŽtßH˜(ñ•w-U$™ÖŸN„¤QœÞ[¯êÒ…‘}{•_]q ]:õ­´ÜJÂØ4öñ‡H9¤µÒaî$tÜëJ>K9Z– ƒ0gM’ ˜)fÍk{à&-© óo&©8_ú岃g{-MÞùAwÕö'u‹Ø€«Û÷iVZ.S®B!-–ü–²M».v³«Ýír·»Þý.xÃ+Þñ’·¼æ=/zÓ«Þõ²·½î}/|ã+ßùÒ·¾ìm^CJißýò·¿ëeêßؽΠQº‡r±pþqB^ŒbÜR‘D^¤‰GÎM®ƒí'?wG»¿u“Î ê¾æ@ s¹Ëÿ _€ àëÅ›ìà˜=´¥nËÎëÀ×=9YËŠõ2ž;|`~^v›¼ÞŠÂØYlåø]ÛøÙ@?ã|^ÌãôF,¶T03Ï–þðž=d©¹Òyf‹=ä×9z“´ý3?¥&äØUúÒ®pf';­aP¶gSbþhkDSµÛ¡ÔR‘ˆÄ½lëö«“­ì…¬yÙÎ~vR¶ÖchS»ÚÖ¾6¶³­íms»ÿÛÞþ6¸Ã-îq“»Üæ>7ºÓ­îu³»Ýî~7¼ã-ïyÓ»Þö¾7¾ó­ï}ó»ßþþ7À.ð¼à?8Â^p¿0¼á8Ä#.ñ‰S¼â{AÆ3®ñs¼ãÿ8ÈC.ò‘“Üã° •ÐÐs¨”Må)9Ìc.ó™ÓÜä(šËSõ³œ¯Êg5ÿ9Ѓô“/ h<¿¹Ñ[^4¡3½éNï8Ñ••t¢½è;_úÓ³®õŸG½PW§ºÒÁN´­“½ì$ïz¨X.ö¡U]ê?3;Üã¾q´ÃêëlûÝÇ.÷½›î¸šzÞ¯ö¡ñ½ð[÷;°pŽ÷Á3>h†¼Ó,À7žòŠÿ×;ä3Ïu¤Û½ò¿<á5/ú™K^XŸ·<êOÿöѳ¾ä¥7–àAïyŸµ}!­¿½È_ï¬ÔÓ~ñ²w<îƒuÎ÷~í³gYí"üåk\÷ɯ{ñcÏ{–1¿úÎ÷ýôöü¿¯¾ú¿¾ñŸ}L¡wû‰ÿ’Âþ\•ûªþñµï~Ÿ¡þö¿?þó¯ÿýó¿ÿþÿ? î_7Hßû!ßü±Ì. 6 >à`ü‘Ÿú`Â@ f n  ü‰ŸÒŽ –`J ~àúMј  ¾  ¢à ž†ùM^ æ b  Þ ûU  þÌ!ž " "ÿáÐ!6!þõ`F¡N :¡!Na já jÆ~áf¡ü%áá‚!Æ Rà¦ß¦!Ž ²!þ`îGæ¡ΡÖ! Þ!pè¡ > Ú¡Ò`žá .¢â¢«@âV0"% #""Òá*b%vbþ]b$n¢&vá$z¢)Þ(®É#Šb’W šž–¡$rʤ|×+ÂÞ,K£øà*Íü"0£0#1£1#2&£2.#36£3>#4F£4N#5V£5c5 Í5n#7v£7~#8†£8Ž#5f£Ð#:¦£:®#;¶£;&£9Í;Îÿ#=Ö£=Þã=Æ£/â#?ö£?þ#@£6$A¤A$:êãÏ $C6¤C>¤2*¤Ï@$EV¤E¤D²ÌEn$Gvd;fdÂx¤HŽ$I^#HÒHI¦¤J®ä1žä°$LÆdJºä~ȤMÞäEÒ$pà$Oö$Bêäiø¤Pe?¥f%R&¥;åV(¥S>¥82eU@%UV¥5JeÓÜâîñ"&bWæb¼¤‹XŽ%Y–¥Yž%Z¦¥Z®e¹ ѨÌżeÑÀ¥Å ]&Í]ºåÐä%ÃÌ¥_ÊåyñeN¦Ãüå^¦Ð&`æb&&bÚåcŽWÎüÌdúLe²Ìe&LfÒÈfÿHg*h†¦hB[†MáœÒØÖi²ŒÙ„ÍØ æid˜A¬æÔ Q1NËè pئßlŽãÜYSð¦#5Žn&Åà¸æ‰h­•‹áŽîØÕ¾€ÙsçTØÎïäÎþPgT@Õa'óìü(Ìê UýL[R„'bq`9B³UzŽÙõ°'!O íÐ߬ÝòÐÓÁp‘%%˜jÆ!Q€¾PMD€îGdqËÏM¨áPêH‘v¦ZQ îLèTÕ'%Q XÉ´Q2ñÕVT5pà‘­(ŠV''Ý版ÕÔl.‹îSGEÒiøùP•6í¨F-í('}“"ÁÑ­è€n…7¥ù$Ó“V…1Åí(Ó~8Ï:€U–VévÒ”>O íÖT\Ó–¹SÆOù4б•iR“÷`*…V?ÁNEJZ×iLTŸ‚iTÍ'™ŸnÅ:Eè.a蚊çH1ªfø?EQÅ©KõgQ‘ÕY Wy‘ÏÌUîާz¦é¸O§VÝì –sŠêÑRùüO`[Á ÁU¤Ú“Ÿa`‘òäÕj]ÖHÈN´€Q†VEnÉii&V±6…ÍoaÊ;iPèsÈV´Ðå\“ý—ÛØ–qöV²W@!ù,[L‡ 000PPP^[v^`{lHSfUjnnnZrŽMx¨fjˆlo’er‰kw™~oŽpo‘yz‰xx˜k|£Y‚®{ƒ“i‡¬fгm¶x‡¨sްz—¹„cuŠu~Ÿmvš~l˜{y±TY¬|\ºM¹{X©l{§yf§pz»ch·hu´|kºs|Ü|6ìz/êy8ñ}'ð|2Û[[Õ]aÎd^Í}FÉzVÛkMÛgU×vKÖxUÇdiÅktÆvgÉsyØdfÕmqÞuiÙwxãWVèfIåeXêxHèwWãfeåopæshäxx‡lˆ‡uˆ„{˜—m…—v‹™}”¥m€ªwˆ¤}‘µy†Ê|ƒå€y˜…x¾‚I¶‚Y«‡g¯Œ«‘yµŒg±Œq·“r݃.׃:ô…ç„(ç‡6óˆ(ñˆ5ò‘;È„FLjSË‘YÓ‰FØŽRÛ‘NØ•WÍ’eÅyÔ†gÙvÕ“iØ”yϤ}ߣiÙ§wëˆGë‡Wç–Kè™Vð‹Cò–HðœVè„iå‚{ê™gé•wî \ð [é¢gí©uî±|ñ¦gð«pú³w‡‡‡…„–˜ˆ†œ…šœ’Œ•””‰‹§ˆ–©ƒš¹–Š¢œ–ªœ²‡ ¼›¦¸¨€€§‡™¢“‡¢›™º€Œº†’¹˜„»’°˜§¢ Ÿ½£Ž¸§™§§§§§¸¦±¾¹§¦³«»¶¶¶‚ŸÂˆ¢À˜­Åœ±Ç¢­Á©¹Ë§¼Ô³¼É±¿Ð»ÇÔÉ‚‡ÉŒ“Êœ‚Ë‘™Ø†‡ÙÚ–‹Ô–—Çš£É¥ŽÅ­™×¬ƒÓª‘Õ²Ó³–Ω©È«´Êº«É´·Ö¤¥Ø»¨Ü¸»ä„ƒåç–‰å™™ê¦†å¤œí·‡ì»”ú½‰å¥¥é»£å··òªªð¾¾É¼Ä˸ÙÀ¨ÕÅ·ëÁúÄúÆ–êÆ§é̵éмöÌ©ñÀ¿ùÒ¬ùØ¹ÇÆÇÄÌ×ÊÑÚÚÄÆÑÎÕÛÛÛÅÓáÜÞáÜàååÅÅäÎÐç×ÈåÚÙôÇÆ÷ÝÅõרåßàåáÜýãËùéÚäääêíñ÷ææþóêþþþÿÿ HP`»ƒàÀ•WÎÁyûöÑ£ÞĉÕ%T¨¯à¾ý.Òë÷¯^¹“åòãW°¥À.cÊtÉn¦M›5oꤹ³çÀœ>w z³­wõÆ£åN_¹zí‘‹øÏ=xØìýëG:nã̽£îiTrÖÈõ“JO =r ;ö;I²'L¢7‡â•©wo̾~ ü“ðÀˆˆ÷iа/!Q`…#-¢³eêØ±S—,É2Ä΀DúB(œbH”÷Q[¶ ëËð"ÂT¾ˆ‡‰KÌ»÷¾s¾ƒçkøoqãÇ'W^¼÷âwÒ}‰]ZÄÕÔ4«Sæâ¾Ð£K¿ÿÓ€:Ú<Öð²­ö{ßìÚ·÷åÞ-¼7ðúøï¶l˜ÿåù˜€vñ抭œãÆkèA"Þ÷š3.ã <Ö°6É#{B $n<ËPóÛ>Ë$Á‰ËB™8Ý<_~ÝGãpÈø~ñˆ—DiSoì\²Ø#d”QÆà$6ÏeÎS Hx¶ <èhàƒkìQ‰Îü&áj¬•8O!{´ÑƦÝX£›8ò¤ãŽs $¤Owö”gL¾½ &nìqˆ„â]oŽù‘GxÇ,¤ÜM›:à k&ZC 5ÖìS$]p! :pžX*oÄ͹§Pu®š×qÂEÿ×Íoàø!ˆ…Ö ΃ᄃHiø±èZ˜½Ø :°hp‰;pÚx*U9èꫪ¶ kpŽívN8E Q¦3Þ9Î<Ö4“Ç3ùÍ2í9ÇXD­h@ª›Î>›ªŽÓâdmµ{iÆNç,pÀÀèqGÀt !Ç1ÇaDrs‡ÁÈÄC AÌÀËrÊ)²p,òbO’,"§¬òÊ,GäïË0Ç,óÌ4×lóÍ8ç¬óÎ<ßìQpóüŠÈEa5Ia„gÏø•{{(bÉ.Y½‰‹¬²ÌÒûlb÷J['üâ{-йéñG¹&‘qy QD.¸ðB D ‘D»eÿYÕ°ÇÎ$šD!E$ózý5´rš½¯ãFã9,:“q† "„~´àÂ’~˜1D›Tk@KD´(+Üy@ð|O¾8ãû=ùrù†˜ì&ÄÔàSÈæ~”ñy‚ÜÝ)>à ’È'òö­zp«]˜á2Sç‡u©º'—{÷Ç}߸äÚG44Ý:#ÈB´`ˆ’f¼€d€ƒÏ¯…î‘Æ%é°/&棆3rÖxgF â¾âˆo|¸³ÝîÊyÍmChAæa1Ø-ƒfÇ®1yb ›°+€Ã¢2AÄ€ªQšgL$»Ù5ð?ô^÷RÈDÃ{0ƒÿÎÐB”A e \`yˆ+"â XÁ Yˆ‰5Ö€ÇeLT=¤-íz¢ £Á:ÐŒA©‡!(#áÔKˆ8ƒñÃ#öáŽDG4Ú@ X¸cW•A å,„ÖìCB2Œ ‰hXŸylN7$ÌkW6±ÆßPÒ’²'HßD±P¡ëƒ4¢!5kH¾0Ý$fÄBÑgi¤…q‘õñ!ö`1BP‡h”d0u¢ˆoxƒˆ}("‚óÈyD™£L8bTˆIhàiZCfõJ eq‹‰¹|ÃŽA„gôÿÊtá¯PÆ@Ð>äŽMHÂ>î) C&LÕg¦ÑƯڸÎ_Τ7ï< SI¢ žæhLñÎÀÏNGà>ºgÎÇ!†.PÔ¤ó {£)NÕªÑ+JÉ@‹vE•gø†iD âßx¦”ÉLßàc…B„<æ?ø¡‹Xô°4¬Býœ]o&ú¶5žíÔR¤Q¦ö+0Ó@„92yÄ3Ü41ø))*èÜÑ}âü̇y C aÈ¡‡3¨ÓTéi9iŽ–6iWˆˆÆRóµHþŒ såhGçiɽèåøÆ”ÉÉCÿ"ÂA…êbáçBL•7h ¦@‹BŒ¡ °`"¨jRÕ(”‘øqL¡RBèÁµ½‘iæNv²¶ŒJõ‰?òQCQ„¸ŒäÛd"ÝP’´°†ä {ƒVÃÜ7íCœäÌh{õ+ÓÈ#Æ()÷¼{ÑîZt©«…°aðãTmà&™gˆÆTËЇh¸@ DÈЂ4Œ‰g D2éßÕ´—ÑÖ>&ÃâGºi»wµëtWá8õ>‡H¦öaD1 у°$ZЂ1ŒA“JêÃyïãbÙ”(?C¥qsKË`FøŒ_&JŒï0MB„î ÝHÄŒ,Gœÿ=° †å±¿þ0Ì+]’ÎÆÚí²0y”ÚÉ0ú0‡4þÊ› áVD#­Æ@3á'È †4˜Ùrô}jD.g¨HEK‹¤[(c–Ëörxe ^¼øC'É­p;Xþ* “CÊ  h@hƒþð!úÁÕÇPhÒ–†Îz–7€¦ŽwLhbd7"æ~E\žÜ†,„! ]h,Xá…$™XÂF‘˜KYOiÖ[è³²Ÿm©®aô^œú’l™û¿Í(‚ öÁˆ+(‰ï&¬6‰@”! ÀŠ= WœÎ5ˆÿQZ{`³8‚ãÇà…Fø¬Ž†ÿ£1®¬êz†€hT|ˆÑPƒô°XÈÛÎÀÃ(ð…=Œ XŒ+\㤭üJ-W+̽ýmV%ü&á6ǸeäF0¢[™XDÈŒ+dÁK •aˆ9è€ ˜·:a! C?•Ëë³u=ɼµˆ'Ê­s-cfV9y¬àw¯nÀ,Òa¾e0¶Ð 0 tdOPk¦m¥Ø•jðÂ)¼×¿Þ£®$Ñ‹ÆÏ91…TªËÁ8‚ЀÖŒž{44¡ Ѐ:¦'¨ÈÔ§Nub F×öqJjÿ­ÿÝòó0?²˜D$)(-ðçA( ð"YËŠÈ+*P $ úžðy¦%è`±+ÓÅMbkâg~F~8Aõ1P Qàðç ŒàF€Ò`õ— Ébó²è@ ­à€(ƒ"F€u EC“£T(£ö}Z'hrxãç€:á/Ã2²“pÄ 9ç0rì£30 C2W(N  =c„@À 31Â0Â`0,³†l80.Ó3p‡r8‡tX‡9Ã]Âà : ìP K 6à°+@ÖdÀ‡Zÿ“,“€EÇ@€Wb€7c¤¥{9k4`6sC"!A ª&8D˜î SÀ–$Ð|$°hP¦³û° _ð p –0­Áèà =ÐKÃH»b[•M²€oEW´W{ÑÈmxqHÍðÕ&˜`50 —’"8p¡€ N€XP5ޱi²ÜH ¹` ç QŘŒt?ÓE† `¾~½öPpÕƒ>؉9$«1ד]¿‚“Ð ÿ2Nðð+ÝÀ Z€ZpTH} ´€¬ §à—@ @ ¡@ T° åÄ<ÎÓ þø_ó$Ëÿ@ôà yhÓHžHkAÁ/ÁrU“±h€ БÀ c˜@¿€:Ê’%À@ W6;‰ÕcR ¹ƒ?s~Á$ñ0h“ÂáDZpš TH Ce Ti•ü³wW2\ÉH8%7ò•„=q ËГ†F6gÉu xQ—Á‡mùñ”¦Ó 0ì0`á’"I FÂ?“à+Ù’/F¢P™V¥"!0˜Z¡ZA)”X–2qH΀mé–õ‘™™y:ÑBÔœÐRMðyÖ:ðœ@à ­ «a@P TH ݰš¯'[Ôýÿ –Ðø˜Òhž@01ŠÞérî/¬8†°af`²@:9à ° ¼` ”Ð* F060E@vg>P.õÁ":¹ mQž³‰µ¹¡ÕèŒnR ÷V Õ€f@@Q>‘î`M°À <*0‘€à®†P§PØÓH¹i È¡Ÿ˜¡çI>šø,`ÕÒ :@•°¹üù/éЈ²4 PJSCTT” Ýé£ÎECØQp:˜¤HšcèÙc8ȤN :SʹPŒKÀ±¥|¨!õØ39P û:ÓÿUn¬i”`⦜h–ix•Ê'*)‘QŠÒ0¢f°6( ÿ€ 'à½@.Ë š 2Q0ÐEP6° †fâj}p͈Y«F]áG–FJ›Gjª©®p ‰²ÀÀó)Dõy0¡ ( µà:@S`C€ 6 Jœ‡0P¡c…ÒŒ6R)Pâúa¬Éª¬Èš¯ê)U“‘ì°G1 U O:c=ÿÿÀ 9 S@8Ó0›±èÚRÏ&ˆU…ÎÒB»Ù“²‰¯úJ©qªšªñy %ù¬¾‘%|ÿÖôyÿû­Å :ànó;Bà H`Ác‘[OT/9E Þ‰“:É“öº²,«²[ëÂq §³\*[Ê ÿ… pP¾±=ë³ I1›3mì# Ôð‚˜è[ÊtkÔF#«P®ÇPbö0–ʵ]{¬‹»¬Å=ç`³hM” LR@¬.Ãmë¶}j£F°9G‹´Ò` z;P†_¹Qnñ:!“™t˜‰™¸¶)§-{pͩà ´ ³¦ƒé ~ì‡ º“Dr ë¶¶ºåª±A ´Lë$¹‘Ue#ÁšY]Ù®)»±é“sŠ»ßÿë˜Jêýú¯¼áF短€ T€¡@*$"uPɰ´ð   Éë¶¡`Œ+ ¦FÐ Í ¿ŠRãÒ\JH½‘°Ô žä™²µ›žŒ–V´Ð¬4ë¢É÷›$Ð{ãD0l ò“€' ­ðÂ0ì°È`ŒI EP 1PŒ Ê {”kzHmÊ~ Ïi ô`¡Y«¡Œ §Ü`Kj  * š =“€Ðl É h°^¸ûûÂË ¹ó:*>cCG™?ªšçk$°€¦Ê@¤Iܸ÷ºÄ¶+uʶx Íw‚õÿ¸4'¼ A h€INжà¶ žQ Vœ4CPµà Jc+›²Y¯˜*Ħ󦃬¸¯,È.›©‡¬‰œ%Q@s°õ»’@L0Qг —\ ç ¥  ì€4»4¿³¨0pÜ-e]à'¨ˆ¡íÀHµ˜‹É˜·‹Áãû Yƒ ®0Å“€À8ɰj S Í÷аÿ@ œà¶È|ì0IÐSà’zÐ :€0N{æ_7ò¢‘òö7G;à̃Ml©üĉQ$‹ÂÍO` ÌrF\0 Q° ÐÒÇì/´` ÅÿÈS {¨¿3q0 ìcß 4:5‹1 ²ðïÀŒsѶG-á{›™º~"o²Ð “P¤×î@ qÕG ÷Û ð0p •ೞ⠎1 ÙÙ =à¼B`7Ïúe& ¤ë0o“pí° :{L}©?ØÔxhÎÂ’/•ÀÇ|j ì À   &pÏ—ü§ k :  T 4/¨"6`?qp?`¼ 4X¤EWÖ¬Àñ¬ ‘„ØúbØN]Î0×Aй0¿ÚF˜ 7€m80 CßD}æv8â$^â&^‡‰NèA ÇŽ]€Ë@ÇÀËÐ €¡0Œ€¦àÏ©ã~= 1€±ç 6€ÃÀ w°w@Ç«3Ûàd,ïðž®pžR¯²lÁ[N΄ÌU6Hš«ÊVs Í<NàS@C$òM@$à®àÞû ù‰öXÓº4I°dàdcp]–ðð:®¤ÿM MÑåZ®µLÜåâûå„bž2ÑûÀ Ðé`¶æÐ:à:lžE­Ó ¶²j±AÀçIbd°^ðšè É© “Ð5~ÒIå;’ZJÈÂé³ìâÄâ°í&tiþù›ó_Ë “¸4Î  k6š ÎÐ>’fdGdÏd¿ê/.Ñc‹TÐRÀé’®Ñì ÕÔî1æø1 ét9 ×± Ä`eV"@IпcjÚn à@Jp¡¦§»æáÐk bˆ):b1x^BÄ5J(! 2ÖÐr’€2<ñ¨úká<ãìÅ‚XœÆÕØ$HÆ´àt(?üvó-ʬ*Ñ tæ»Äꑚ Lb³ÿ@üÀãgÌ(#‹F‚Á£…)Bá%«yî´Êá`"Ôˆe|c'EóÜlÈÔSQ•s¬U¢SÇ}öZi 4ø¨ Ð t¤11,+3©™˜ú ƒ‰'îɃ H48Ç™”dí‹*_°aˆÏöqˆ(²QÇ”RUE5US[ÈÜ„^ÕQZ–jýÈ ÒÙ¤1á9T¬†Ê@¨:ƒŒ’ÅÃŒfŸ–³i÷IÆ‚‡Qu‰!$uH¥MqÇý݇8nFÞêÌKÓ<÷ìSƒIí3î0òŽò#? qRI)µS’Ce'5‚YƆè°¦‡œéÇx uc=þ8cÿª]SwÝ{eçúrýHPãÔY¢ÚLDú(cí2ÆÐr .½Dx³« f78L‚á$bÐ!E\tˆçͨ5†z\©Ñ„íêü>ŒªwüƒeÔ¯A.‰ „‚ (á‘*|9£DûؘRdáÐC¬A «eäX#¬’¸jCç~:ÑaÂ7û4‹ž‹½„‘G%ë½øê*WB r€ÉJ R@‡½<ƒCH#Ej¥*ðÈàˆ*“„òRç›rI[³,jb!‰{v{ÔÞFö·Í£—,ÐVÀ Œ=À$/&XÌ"ø{d`  WôŽó˜‡3‡'AQ ®^THRÅV"`Az2\^V½×E¾”ï|]xÃ`¥­• PÀe`N+Ã1DÐŒnóP@pØgùR!ü!á@Dx@ >ùÿÉŠª@4|QÓtØ4¤y²E:H£²Å·&^Ù>0µ‘¢¨#’=@A.dü¡ bU †Ãªèi†yûhÆ áÃ!Ø €ÁÕîLHeÏɯìýðyB¬QÞº“¾\éF¾¼0‡vb,šˆ…Óˆh ÂD ï¾yC‚ ¼Ú“>3¹$Z¶-¡iÛÞ³ˆ˜=ñÅ£ýÆ8Z§•èÒràENÑX‚0&¨x•|' y@…ЇOL!IP2“K“Ûk—·,è%´n _EߚˮÓ~F”*H'JÈïCãÜb.©y(p§ƒ+g %B B x JVÀkÿéjõ†ËÓÞ\BÖSËò¬Ã}bF7r@ß³†3†ä4¡7 ¼£±’{IrÆ,0T")Ée„Ã#OB.œ _ ²­tXÊéäÙŽ¤¨éZª_wnÂ6—%þmψA’±TÏàC ŠP†£eáŒÃ@•‹%©š‰3LàJ¡Ú+¢h•¿¢K®<¨?OSÏmËv)fÛ5W&×kq„±Ä¿ Ê ú8¤Áµ ŒFfX^õo΃ӄ²w¬¾i/’{'©6ôzkîv¡ª½¢ê%»“ÝÞóXÛüæ§¡;jhýN¼óEï­P$‡xBÞ„w®ßûx(‡Qeñ˜ÿL›“oæ€j”}ÙýöW›$°¢w5z_csœ»÷Û¬¾û¸•H" zË`ºÓ¡Np4_Eôæ7©õ×·ÙÏë´ø— ä€ c_å2hŸ˜+ƒ²‡gýÐk2\¡‹-ƒ'‰Ó R‰ð¦‡"èB „s®«'ˆ’$“+0œ>åК°0ƒ´™Ë<Àbˆ·ë9õ4Ïû«šÃ˜ƒ{A† :»C=[#7" hQ‰Ëg†hˆ†p˜•©°8|+©‡ú=;«7/³Û6åû+ˆ•dÁ³sAæ;$æ3»,@‹8Àù¼h™Ï¢ ”ˆ£ÿK!‘’˜òƒžÁ*²Ë¥ÛR Áº6ì¶lÓ0)ôÂ/¤Á¡ª>[‰:)2‰2$‘/3˜˜iž‚¥{¸%Ûª<¡Â<³KÁìÃ̼BÃ2B*½ÃI!B,Äyù1’ÕÚŠFÜA“à©C1B#˜D ðÿ‹>,„¬Û ªôˆAŒ­+³EŽ¢>4ÅS,Ä5”£GCº# -¬Å(ãôk>ÜŠ2ôBiüĺK¡²ÆÚ"ºBÌ›'Á ñŽ 4‚­ˆ-±2œëÅB¢œi<-ÄÃz\¸m¼?@ªÜĽìÂØ¤Èß¼¨¾\ ’ ±ÂÔ“DI?K[KÆ6„NËñ,–¬Ìɜ͜< ô¨ÉìÌ/äCýÜÎߤ΃,œ#Oä, µì á#N.kE„!‰¶ô²·tIš ̨„ˆÌŒGªÜ<¿L_¼Í ËÑO— Qøp»ª:Ñ©‚!à…¦â¼BQѳjª\‚c˜ªc+§šÑ¦ò9ÇúQ R!R"M¬‡Tϼ`LôLDà2Eö\ÆïÏÈÌĶQ<»)ËOÍ´(¯ÈF‡ôOúÔÕÊᄸüPÎUÐÿäÌŠ/Á‹E„N*=Ò¯ô¼§¹-½ÆÕÅ•Hç«¥øp¾)¤2å¢2Ã/bÝPEÖL-AêÐÌIÃ’Ì‚sÊ¢bìÅ0¥Ð+­A$ Ç€4D.‹Ó0¼O„̇<¬jœO>œÈ,- Q$ÐPÊQ­3Õ‰ˆHËQ<õÐjD ³DЍˆ<ýÔDãÈZe´ÃÃR:V£Ç^P-ÔÂKeÈa­Ðb Y•µ¡+O[½Õ.“,]…Ê,4> MAu½Ê⳿&ÃÆ¼ìÖ鹬-é×ô28¸ÃÍLõ?V-̰™ì<ÔÐÎG%X05'Ó|Å%oÅJ½”Ðì\»ÿ™¼ÓÎO+ÜÓ§ÜTï4=…£Md¥Ÿyu8olAM LšËÒXÍÂüÓëÔ¨lǼ´F•W”ÓTØYÙ’MÁ¤Pw PõâIëäÕÕÖÏ”V¡-*­ÔÆçS؃…ž:Ÿ=×ÙìÕ¥ÍП5Z2íDËTZceZ(ÓÖrMV0”Ú‘eYƒõÕ´‹W–}Y }Ç.½EЫËËL*‰µRQäÂ’»‡ÕÄc%8wذÕNË¿¹Í?‹½Î§$AAÃHá„Ú¨%½©íI—üPnNvôJ1E\ͽKœ¥SÅ܉OÉ\<ÛÔ5ÛûéÆ:ÙÄ\A;ÚÓ Ù«\ÖÍ]«‰MØ$[ÿWÑ%+lXåÖÚµ]’í[´EÞ¡VÍõ]X¥(Ù½Zâ­Ý}ØäUÝSϘ…]äÜo¤ÝÓ­Þ´½^Ë%¸‹d;@“ÝÝ„CY+-ÛÕÕÝÛß>„I¿êÔ0\_n4Þk»FáõXå¥\úß1Ù`Ô^ùýËü_þ•¾öÇñõÅ„Ý]ÓY+»Ú›³`NÝȆ`ä•àœE§iM`ÿ»Å|}`ÆÞžÝé|ÚørÝòµCÙ\a¦áòõÛ5`SF7¹V õ_îà¾aÛ F•JÜá ýÊ÷…V®á#bN`ÂTUµ^ò¥â"†bo#¤(ká³(R1c2.c3>cÿ4NãÃb-Þâ6b)Žâ¶bÜ}b"Îb;~c~\}Ü+Fá)Îãùd9ÞUGÅRêÅb8¾ãEfä=žÓ[ÚÛ¸ÓãGvcAäÎE¼Ud6¦ä@Æd.Mc–\ñã.eQe… Ý æäOfåKÆaBNeC¦ÃD®e[öäCÓå ¾H†ÚSVå–åY¶dcöåbNfZ&æenfGffd–f<¦æj>ÞhÆf^îeg†ßJ¾fhþcTÞåcçp.çF®ckNçuîdtþfvVæ`Îfn¦çzÞfr†å{ÆçUÖf~þåvö瀎åsè}6è|–govgnh‡žæ‚Vhÿ'~g†Žè‡6gŒþçg¶hˆîhŽgŽ¶ç„¾hþè’Îhx¦h‚é“ni—®h“Fè~&锆é˜^i”–i€ÖéÎi›~iœÖèyê…>hžê£6j–j¥¾é ®é§Nꉖj¾íæ¢.d¢Æj•Žj®nj§ÖjVc±k².k³>kÅúi¨îj°¦éµn륦êIÎêªé‘þê»¶ëvk¶ÎkŸöj¦Æë™Žë¾lÁÞëÃVkÅ^lÀ~k¸Nl¤–èºÖëžìÇþë˦ë¹ÞêÌvl¿ölĦìÈæëÆfìÒ.ìÐÖìM–ëÕ&lÔ®lÐ6íÏŽíцìÚÆìÙ&íΦíÿ«Îí×¾mËîÔnØ–mßÞíß>må^îãnnçnãæí©Öíç.îè¶næ&nàÖîÞ6lÜöné®îíïͦnñînè6ïôNîé¶môÆnävíøÎîõžoûïëfïÉVíWVïú>ïöí÷†oßoÎ.ðòçÿFðÖvïçî?püÎï¯p 7pÿÖï—oïï ¿ð ð'ïÿî §o‡p ÿð×ðWñ—ð?ñûžqoOñÇqçññçoÔ%qwð7ò —qßñÿq /r_)Ÿr*¯r+¿r,Ïr-ßr.ïr/ÿr0s1s2/sÿ3'ó´XQó5oóqaó7wsTsÉ¥s7±ó;—sSÁs6ásñsØô9×ó='ô>7AgDWE?ô87tit¶ôI‡ô?/ÞsИL×tN—M÷ôNG•O/^R/uS?uTOuU_uVouWGuUP…¯8€؈õYH€``P…R@ [ö(_ÿß}€s[ÿõ8Y§u¶pö8€ˆ°uJ/aw2ld§v\bv_hßõôjvoOvèöÞ€R€ø_?öŽrwx߇R€rï¨6xUv wUø÷´€„€uçw[ÿÿ€„|7‹s8 •E€L·õs\7Àgs_g‡(ƒGx³Px†ÿŽ÷ˆŸø±€èø™¯w„çxô_/ø}ˆ÷X„pŸ'xöž÷w€ß˜Xw zˆoØEu€LïùXŸz{Ÿˆƒ¿xr~úc_ù0 ù¯¸øž;§çú±ˆú•5ú«—÷¬—ˆ¥{´ˆ‹çzd‡‹’v±? ¿€¥ÿz°?P󸇄bˆh•¸w2Ywüuÿx³P{~§ú£WúiWsvÃ'zcü´ˆû÷{U°|–Ç|Vñø¢‡|zGº‡‡‡ø}vÿ§?oªzGüÚÿühüÇÿ‡Þɇ÷ gý0öÌ7 [g‡¢ï|éþЇþâ?þÓ_y™ß‡g~ç·‹ÇõØ7þÙߘÁg»7Ÿ_ÿÓÿØ}õýº¿õÅÇ{¶ˆûE0ýáoû¹ˆ$`ß¿Ep»¥¬hñßEÿظè@F/’ü§Šâ¿ƒÿö8)P€ª’"Ĩ1å>ˆQÊìùï!¤þ-\¤ÓçE œS`Q€H/†üÕ辇 yN5‰2€€Úu ÊÎa °4æY›£– Jë¸^_ÂÌKVèÙœ ”ÂKÿQè[½IAÖ W±@U ÙJ¬ ù®À}“#ƒTÌ®”ÇE¢!mQïÍ¥j~­óJÇœ¥êý<ðãMv¦‹S2í„„!/nü8òäÊ—3oîü9ôèÒ§S¯ný:öìÚ·sïîý;øðâÇ“/oþ<úôê×£—|:(ûøòç÷\J™!ýüúçÛ9r+iµÚ ÁµÕo@k ‘æžn …´  évRMûi¨ßRa ÕÑ @VJ Y#jÖ‰ç,ÅâP!0âªI]fÔŒvÙhb† ß‹&š˜’Y#"¥¬fâgd-C%yÐ_-Ú5bSÀÿDâaÉ”‚ù—Ju™GFJ©Ò[`â'ÀŒF…È’›_>&&ŸçõGTG ‰(m ²ÃP]Ciæ"TB$h‰ A9"EJj¦Š”õ¹)yâg”‘¤I鈺±ÈT‘‚‚j"imJZª¥dÊ)­â³HM¥ÜT H®-—f›Uv[Sv&¯Ãyô ®³ÅÄN³µJ»éRAN{-¶HMdm¶Ýzû-¸áŠ;.¹åš{.ºéª».»íºû.¼ñÊ;/½õÚ{/¾ùê»/¿ýúû/À <0Á|0 +¼0à ;ü°´ìH<1Å[|1Æk¼1Ç{ü1È!‹<2É%›Lr)«ÿ¼2Ë-»ü2Ì1ÇÒÓiÝÕÌÝÍÛå¬ÝÍ1ûü3Ð0Ï,ÓÎÙÝÑ×%m]ÏA;ý´Ð4·tuTSgõtMC½õÖC—„µt`G'6td?§5×ií5If;çvsp3'÷rh«}÷Ël_D·r|'ç7r€g7Þ…«¬·E‚§xqŒç8d„^8âAîÙÔ™{'ùäwW^Ðåµinóèÿt~úç…×êgµÞÕëSq~:ש;R¸û¤»Ô›Dûä¶ Ä;Ñ¥ë\:ð† ¿‘ñ<7oôïÉã½<ñ_?4òÒ{Þ;é¾{ß½@Úo_ü÷8_¯tôâ×νùå_¾úiS>ÓôWÿý¸ýWçŸõþm÷?öÿÊV:1°€< ¨À2° |øÚAR°‚¼`!(Á jƒüà5(Bç•„&Öq €<¢ ïHH>þñ'LäÛìÉÈI2n•œÛ%‡—ɾmòo¥ (C)ÊQ’²”¦<%*S©ÊU²²•®|%,qc)ËYÒ²–¶¼%.s©Ë]ò²—¾ü%0ƒ)Ìa³˜Æ<&2“©Ìe2³™Î|&4£)ÍiR³šÖ¼&6³©Ímr³›Þü&8Ã)Îq’³œæ<':Ó©Îu²³î|'<ã)ÏyÒ³žö¼'>ó©Ï}ò³Ÿþü'@»!ù,UWva‡ ///QQQoKVq\lnnn_v‘Mx¨mm‰oplv™{l‡xzˆxx˜g|¤u} Y­_…°~ƒŒ{ƒ“i…ªfгm¶y†§rްz—¹†[gŠu~žlvš~l—xz¦Z\¹^g¥gX¬|\»kH½F¹{X©k{§yf½dh·iu´|k»r|Ü|6ìz/éz8ñ}'ð|2Å]NÇVXÛ[[Ô]aËg]Í}FÉzVÛkMÛgU×vKÖwVÈdiÅksÈugÊryØcfÖmqÛvhÙxxæ^MãWVèfIåeXêxHèwWãfeåopæshäxx…m‰‡uˆ„{˜—m„—u‹™}”¤m€ªx‰¥}µy†Ë|ƒå€y˜…x¾‚I¶‚Y«‡h¯ŒªzµŒg±q¸“s݃.׃:ô…ç„(ç†6óˆ(ñ‰4ò‘:É…FljTÌ‘YÒ‰FØŽRÛ‘NÖ”XÍ’eÅyÔ†gÙvÕ“iØ”yϤ}ߣjÙ§wëˆGë‡Wç–Kè™Uð‹Cñ–HðœVé„hå‚|ê™gé–vî \ð [è¢fíªvî±|ð¦gð«p‡‡‡……–˜ˆ†œ…šœ’Œ–••‰Š§‡•©ƒš¹–Š¢œ–ªœ²ˆ ¼›¦¸©€…¦†™¢“‡¤™˜º€Œº†’¹˜„¶•œªŽ ¨˜¦«ž°µš¨¢ Ÿ½£Ž·§™§§§¨¦¶¦±¾¸¦¦±¬¼¶¶¶‡¢À˜­Å±Ç¡­Â¨¹Ë³»È±¿Ð»ÈÕÇ„‰È‹“Êœ‚Ë‘—؆‡Ú‘Ú–‹Ô–—Çš£É¥ŽÅ­™×¬„Óª‘Õ²Ó³–Ω©È¬¶Êº«É´·Ö¢£×½§Ý·¸äƒƒåç—‰å™™ê¦†å¤œí¶‡ì»•å¥¥è»£å··ð¾¾Å¼Ä˸ÙÀ¨ØÅ´ëÁùÈ–êÆ§é̵éмò̧ñÀ¿÷ЪùÖ´ÇÇÇÄÌ×ÊÑÚÜÂÄÑÎÕÜÜÜË×åÚÝâÝàãåÄÅäÏÐç×ÈåÚÙòÆÆöÝÇñÚÚæßàåàÜùåÔåäåïïðûêäþñåþþþÿÿ 8°Áƒ*,¸°¡CîkñÅvûþM¬øãÃ}%†Tèñ¡Iˆ'S2T©²$Ë…._&Œ)!Íš oâD¹&AŠ Õ¥C—¡ÖÆ‘U‚¸ÔgO’O¡F9ÕfÕƒ:wf­ºµf×—HA‚t7×»¦'‘>äÇo`Û†j¹^ý9—n]‹wñæýú”/K¿ ÷¥Ãåœ9Ãö˜î{÷޽}ðÚÅ+Wîž@x„Ñ;‡i=Êõö3GZŸH±ãN|’uë½°cçÅ:Û¯ØÛ‹-e¨ÄæÍ=ˆ=ÞG+VÒž1³õcȳçñÒeó¦úŸj¸Ñ‰½öüù5zŒ‚ÿò"îóû´£_ۡ뤲ç¾w_{¶Õø&×ÏÊ ‹Ø0š "Ö€Ä%´“Í3)ôL< >cÉ$$âÊ$r BÞ>ñH3ÄwÆÏs† RÍ8ß ÂH>ì¡§^‹ìÑw×|2ÖE£S3ÚG~¡—AûTƒ*E‰c"Hɱ’%›@ÑÃbyHÉî“Á$Gr÷ŒsÏ$Hñ’ÄŠ -‚È80f—fŒ9ñ(WŽpÆ©£^ræçcðXƒÈEéYà>Ü]SK4ÐÃ3ÃII¥8ð\i"=ÐmÃ]Ï|É¡˜dîc&šk‚ôb§·Õ(_}u¾Y*©§Â…Þ~² #Gu~¨ÿ8¤Ïõ’‹.ÉIás–HR¡*"Έפ·Ï3MP*âs…˜ˆ¢Š,‚ú)¨hIe#ª£¦Õ)qkmZ赣ɒ ‘Fk„s=ÉuI6L0Ai¥ÒQgv#J“­ZzGO"ÄÇJKm{mjÛ—›Ûb«£·T)µ<µl"Ç‹'ÜzB ÒGƒ ×N-ªìQ͆´JŒwûdsÍ5ÙL¤ a€QI:OK­¨WA|ßµ ÷ä3Ï=³£žß¤Ž †t™Ípû Ȉ8â„Wðz#nÙåªü¥3¨&g|0j 4NC¯t¶©fƒËžh¢#NLt'ÍpBŠCO6Ñôÿ1MšôÄÃŒ¥çý(–,à,öتÙÕv¶³ 9WUnùå˜g®ùæ—{ŠÎç ‡NŒ{|ŽÇv,³ÌJa2{øQŒCqÄÈ„º-­´b‹îÀÿº%ÔüñÈ'|yœ7ïüóÐG/ýôÔWoýõ™ãyj-‚§âI$AÞ5M(¡¥ÓÂG¼·× µXƒþX”Îb±êu`SK§D¯æ°ä Ã&±î™ÉƒhÂÓšp»>ô IÄ ^ áM H¤S”øe=í°D'ª`J(nqcë×&“´ñ„…+ÜžªÖ„ެIãvIP#Œ`A¸àè„ÿŽpµ}  ÁþØ©!4g¤!ãª1ưh0|‰ ¿59;IqAM(®‘DðPib QÁ˜å#Œh„(·Á%®‡;ºŠÐûÒ´¿5©paZ 9§ZQ!b£5è& CÁ.PĹÔ&  áÈGx‚ó‡6hBí@Ü&@BkHãi yÎpž¡„S¢ð`$d[2H­Ò]ì‘A2ð1ð.=Ô` S âÐ"è1E¼Áò‹…v²ÖǨPæ£T±vɸXÚ²–^g8o¹E:¹·©† þ 5¬!ˆHƒÒ€$¼@ óÈHÆÿ:Ä"¶Ø×s²Ñ¡g ä;_„b†Î)zmÿóß,iIΈÂEŠ0Ñ<Ø3-k0b jX„:划¾sÕˆƒ*jñŽaG,5ÜZ*ŸAœçdóKÄ\ÓôÐqNô5?j!Ëékœë\kØ#LÑÃÏà1Ö¨†52ªŒI¼¡ `Ã!Ît›˜êk¦¤ÌFùšSöT øS Ë–Kò²œQUb¤–4 ŒXÏþèQ FèÐDâHQ"t3Œ€½!Ië*­šœm‚$DYc(zŒ¤¢X©uglõbãÔWˆÕ$åüYgâp¤!BbD;£¥&yO<ÊàÏ>æOÿTâ<ÓìÎ5oÓ/ƒ¶(£äáFx6 ËÌr/TÚkëÝúV¹Z4!ç0­ ‚„Æ5°¶«ìG8ô–oT£¯w˜À$ıˆC°! Ä]*qL‰Êó¸ f-ʇŠ<¥Ïâ&—{"1.s¿9ZŸ:Wœÿ8‡9Ö†¾ª¯zEO>2F̃â„ áG Áoè #Þ·SÆ 7=¶/UE*:®¿ZpŠ+ `}˜ƒG5ÃÒ{›|CªÄ‡žJ*ˆ@¬Ó’jè=Òá…2taŽðÃ.û©÷JvMâø®º¤V?i­÷ LX6;×ÏöÔ¿{nB̈@xÃèO¬Æá@LRÿˆ80tà‚\‰8CjÑçU½€Ò­ca$$ñ`GOˆðƒ"”êGýj¹#Þ¯gQ¼â¡Š!ýè«"Š˜NDìáYáQƒ›çɈoœK ^xƒx@‰?˜ÁÁAB°z!;Ð4IjV›­8”q]Ìfy†&>±r›‹E/ÿåÒI#Á2¹y Õ8ði«ñ3H¢q@ƒ Úp†y®¡ÌÆn -UÖÕ×H/5–CMìb;®ïŽ7ÏÉže«gnžn<Í0Ïbz “p Îp†£ž+WSwÈí[BWiè4–#½\IƒÙâGö¤éÍ1OB\Ã7±~ƒ´(ÿHrpƒ2´Æò”õ¬¡Y[«×Ww7Ù owûã-¼¥9åM~x×4ƚų4tØ g@ƒЀð``C@® ‚SžÚ›4’•¬óÉcM…Nºu>ñ*=ã»Ü)}ì”Y<œ‹qës‘êg(C†0ݰ¡ ‚Ä Ú)ˆµ/C·å;t ,åÖîü×ízÝéNQKØæ8YŠ2å"½3žoàBÁãÐ…2”! ²¨E,Ä`.5ð¡OØB*n³²<š/»e\‡[ôåJs^¨o:‹axŽsˆn}l4’`ˆ}<‹?P À? _6´@P€‰¡P†È¡[Ëò ’5 â‘X uy—yN˜‡È‡¯h°Ø"’˜PR‹ÒðR L` Zà‹½0( 8?2²`Œ pÆs,J°ÒpFÂQ`7…vˆŠ§ðq|Ù¸-سœã9Êó9¶€–€ÈÐ ù“@”B9”šC©K0’0 !=°í€ OP9  ð,pºQÀ”ö3(–0PËÐ.4WkAÂ7m'Zª¸ŠÜè–oiùhÿÐÙ ×pvìÑ©ï` Wð*“‹&@‰&Àl@ D@Ò c0’  ™pZó é @çãX¢f&ꢖñÇ–!¨‡9—r©„myüPÌØ"› ?K²2Ȳ[P ¼ lÀñ#$0Ž@›—Ð Ù@UÀ›ÙŽ¥IâŠÐk vŠÕ—Øy”׸šL¨Š¨±ø  Àÿg„z… ²` ²€"áñ Ÿàlà0’Ž25â@P ¸±­ðšp CÐ §p XàŒzGð ÔYSÄd#l§™Û9¡ %t]†H#Qñ(úXzëa$ÀlP•ôI · 0 I„?Òa™_’—ÐpGÈ8¡ŠKªš=ʇÚ9‚ÝYbZJ‡wùä[@µ€ õÅ -ú¢Ÿ„•Ò(5êXìòwÓ).#AE[”¡ÜyÙù£<÷÷ žEÈhž’&(º˜²Ð·vŸù‰ ¸0.Ÿd ‘0 z  E+º§–w09š_ÿZ¡jЦAÊŠŠ¦®Y±iŠ-¢œ H$ÐNð ?2Te¨UЬ:¡ ¶ÀJ0¹€CÀ†ð ˆ§8:¦jQ¦®x“*öa¦šv‰—» ëñˆ '¤Ò¦† ÿÀ ‹RеP § ºp K²= E0¹˜G)ˆ©ÄÑ._ #º£C7¬¦é¨’ºg ©ñJ ‚ ¶‡ ØÀh 1 À0AДï µ ?P+030W8„ $k‡[ba¨ÕD|:J¬øš¯ÂZ²qÙ–­l0¦çQj€ a .ÿÿ‘ M°­¡]y,B3`>Ip3€òe"Õ «k ("k”Ê·‡ü:µ©y²(›þÚ)0+³û€ 5û€³½OAñ³¼²œ@p;GÀ¹°B$¤Ç«ûà~ûøUë‘„Cšµ‘š¦úª²«µ` *扞í` ¶g ë5 ¶cû¹°Á°7ϰ` [U@3I€9ð Ñ&rãÐu°£©sÜÁP 2hçÁ·¨yµ@jµûz¡#¸&¸0 šð©0b ´™ ÒÚNhP˹‘« ½€O”‹WÀœGp®[쪋0[B¤Á1š/’2í²«²ÿK¡~¸ä[¾&‹µÝˆñƒE#íð#¸· [ØP…` í€È¹¹€W B­3PDPlÀIð]§)=¦!ÁñŸBMº·µ‹¾)k¾¬i¯á+¾é‹J­­ÐŸ¾‹ÒÁ” ¡ðpù»¿‘Ë ÈP = DG`®E`ÒÀJ@FíÙÀØ¡OÓRJß±&óÀ*¤ ¸¶[¬Ázú±˜é¡D&¼> -à p[*¬¿ÐÅ^Œ³ ;4Ð<yd ×F&µQ|© ”Æ£ã‹Á}{Áx¼²ç«£ì±8ƒ%ìºq V `ƒÿ¶Â^ÜÈdk±JÀC6|ÃÖ j<[;VjfB&Ýë¥ß»—¾º#´[ÁÜÇy<ÊR«ìñÁ¸ÂPœ©³X‹›à Z\<¶‘K20´Ñ{ÀœÃ;¼.fÒ`Äõ"­ûX6z‹:²jʳ+¸K¬Á¤œÁôêÄë±¾í‹ï€Ý* ›€)p 83"†yÐ í° bë° ®0°U“l<´J ÑP ««]zhx›/衵€DŠ!Ê·{¯ÎŒ»T›Ä=g9É#»Û»çñ°?²©Ð&Ä!H xæ p³ÿ0 Ÿ¹à›ÐÒM†äJ›ÿ©®ëºÀ µ¥”Ìu„?)ŒdŠÄ=¸D]Ôwl»AÇѯ…{¬R ôx Ð@àŒ„àpÐ ÍÐ$1p³ð Î0 Ï@Õ¤D+ °3p;Jp}s–²Áç°ãR éÀ8C² íÐ ÝÌ}mÁð¶Ôá[k8ûA‰ƒ±œçÒݪ@#ð+m®Ò°½@)w!¹@Õås8 /­Ló2OÆv]ê.ç!²°î U+Ø|¬Ä¥Ø·Ml„­†ÝԸؠØÒQ­toÐ Q €Àœ@ Öÿ€@m M Àç#Foà ôðÖtÿÓƒæ²ûà³&üîðA¿*Ô~ Í´mÔ¸YIÍÛ½ÍM·Á*³Õ–p–IÍðnÐ ›Ð½˜ðRðÌÔ½.×}z®:PÑ`®G@Í(YâÑxýðpBHqÄÍÐzÍêí£ÍÔô-â’Ñà”ØSÀ g±Z׋6# °4 @ Õ½¸  ›ùW@ ì¶btup ’a£XJ§DðßÌ\¯GÝÞ$>âZþÞYVÍ~LšbA1±g çIj¸$ïp u œx ¸@ mN€@- ?‘À4ж @àË7œ:à߯›¤èÿ!ÁÏÀ øÓK ŽÊ|Íå¹ý×€}¬bŽZé€8˜ðË€P€œí@‰p§pðÊj=CЀæ“É’9 CP: µÌ¬J7PU,A^#é–nÇ^>Û”~Ê„ #. ©M²„²² ê—0‹jØ øð  ð³û°Î! ›É™­Þ`ë“¢îâÆ V1¯qéµmÛÌîÞ]Þ-Dé“™< ëê2ùµ ‘ “ð’è€ •P S€­€Cp è  ð³^@Ð Ÿ3 ¶N‘½ ;°“¡³:3ù9®þ9=¹ï0ó2ÿ?óA™Êùæè"È`–Í ±Že‰ËÐÞ~꩎ ŸªD·=@L„Ò;p Þ°¾‘¨iìeåV®£ËÌÞ7ÿÌÒÌYø7K0R…1»­M›šÐ×pR W°M#2Q`& èmD=À)ÀœEn®çÓo€wŠV0îÞä¹E¬Ê@-é“nïb?öÊ^é}G˜öi22±—±à¤ïVLJ×ý$&åD²  Cà¹\ƒo.üvûiÀ½i’”`UÐ –6Œš_“ìȾìCï–ù,ë^бó½Þ)µЭ›úA Ò N–çÿ# ½ÉJ`±½ ôtü&OjÐWz°ºšîóˆSÞɆÁVïô¿ÇÉoÿø¿ÞHÉùZ£öi– ÔÚ·¯K¯=CV0Þ³&Ïž]“ÖDI EŽTT2CW8#F¥!™f¤™@ˆü WÐåKu2Q¼f)CÁ9uþÃù¯Ï};…%JôgQ¤I…UÚÔ¨S¨K£NÍÉ”êUŸX¡ZuúÒëËl×€eûZö«@‚*dèðÙ’gô V”6dÆ‹@h| )ÈL5&Ó˜QDï"Dr˪»ôCâ³ ƒuÙ®§Ö¢\1?ÝŒTsgŸAW½µ4ç¨fË¢SÝZm…Zµ* ,ÿ˜íY¯x›Dt¹0^°?°èâKškÌ,O£ÜŒ¸}èª!‚N/›4iÙä¶ûÑãT2P=t]ZÐòé¢G«ïÌ~³û÷è•ÂÇL§K\³fá2ËÚµêX ‚Xº&¬!$Úm·kâ¹f·W6顇+R˜ˆˆšxCÎXn¹5äBGDæÙGšÇž‘fŸx†¸"{x†<Ôtr©=ùÒË‘´íÃÊGЀ¤JÈ‚jÆ´¼òï?³j±Ä’ZzìdÊP ,±¤¢ .I!8,°Ëf›`@„2J „kô@„‘|l“†zPÌæ!`j‘¥‰hŠ+¯âÛ1«rªÿCë”ÐÔpÉ –tp‰%þ”dò?ÛžÉM"dè‘èNiŠ(â™N.˜"'/YG±v h€•]eŒ–ª}¦­4 ®µT[Õ¸eño'rè¢q3ØMš –LLÚ-ÞE':—ø½FÊ^÷¹Ë&ð8³€%øàÓØàg¡ª}I©˜â²2Ý”!OŸËÿl2I ²îÄ™O[}5Ö"ùæÍ|Xv)ÓOÙJ1æŸsºY…‡FÏç¤è®;hånªÈ#3Hò¥l™4ßwô %A‰®aßÇòâáK xè…ž‡®ÉGhà‰øx# W(Fž—¤vŸ¨åЇAyÚvû%Ay.Ínœõ^Øö¤ðÓ¯Rl)–2ñwl‚ñ^4›вɯ"®eˆ7•†AÞ8á„2Ðxc{zh"zµ¿xXOi~æž»…‚;ÙÛs¤½F„ñZöÜ/ ¼5§ùÅ$YÒ1R“w$pQ{×)B|Ä4ÓHƒ.¸‚)€á¯ü}ÊS+* ÿÔžQŽô¹¯}ñ£ßzäÇ£E[÷«˜¦Ür›DH‡½R¹íF"æ»õ±¢@  SÀGÐ0‰  ƒWÃaE„ƒ#ÔìDÚØG;ÎS,â.HZÜâ ß¿½ÙO[L| ]2-uØð%8\–úe<k hhù $*QSdV3rQíÀ2Ò ¢¯8?¦0v‰Ì¢ü¾ø'†‰ñR|Æþúg$KÐl.‰ÚÔš ˜¤‚èà ñÀN𠥸`\(™v´á ÅxFt€‡åeÃmVÄ"#}Ù3.âÈ‹#ìŠ$/UÀ‹\£šè[ ÕÈIi` Á±E¾^ÿFz0"%Iö÷†î}Ï…2; 4Šñ†9P¤ ÜMà¡§ZXÆ%ÙòTŠð8*@¡K)V>±†@(0 Æ*l!:ÒÍJ±ÃÚ  ìàë/åYÏÙá“}*M)KÅ$šå•ªÉÖÌŠ¹Ç]ÁU¡xZ6æA¶}ü”K+å *ØÀ¿ØÁîPEó²—s#¦=yÕ Åó¤Å„éljÃþ¼Ä"J¸Â€p‘4`n¹†8¡ˆä1e³Ž4F×2æ)¡WñÈþØ×^¼DªSµ*V KU—vqžêÓ§køHÓÿ—Ð,øZÕÊÖy,Ï„ºÇD/¶XÁYEÕʉJv`Ç&C,­¢Ð°--mñ[Ùrõ?1mšDz Ù¢f W£AäRàˆÔŒ}PC 5Lƒœ F/‘ 4 É`žŠŠ „E³ ÄÚ*h*SUÛ"v±éU/ÑëX†¶&[ÏUh0ƒüq¢Š\Úñ>ð‚Ä3ðõ"  €¢pX¬Ã É…Q{³§¬O+‚Åða=ÌÞ'vH‘ì*ÅçšlEKGU’Àb<áj‘X†EA‹ÌhÂJˆ‚@‰Ò^7¡B Aë«hÿ74ÂÌe‰RÅB9ÊYEoýJÌ´+—/K¢R!ŽPœ"@¨‚%ÜØÁ}LXQ(Ó6HA6cjôP‚Fê\pÍçµJã’EÜâ–Q·­2RVˆe}æ˜"¢²xÀƒ°•C0 D Hç"4¡;NhÀ+p!…2uXÙpã•ÀgŸ Õõóóz¯èB×dz¦u­m}k\çºÖDG¯}ýk`[ØÃ&¶°Ï:`CTÐÕ V,…G ¡ÕôÐ%`\¡ &hÀ(pDÈè53Ž0_ciþÑu»ÝýnxÇ[Þó¦w½í}o\{&Ö”y/¢WÃÉïðÿJ`B³÷ JXXÂÚÇ3 èŠÍ­  @'Ĥ:ª˵z~ì®RÅYßLÃq«í”ÛKeÚß(~IEúÕ„#¨€ûÅï x`…t´ñ"LP„5Äqç8†ÀBФŽj0aàÒ$E-Ô¡çÊ0yH?ùIO¾²È“‡Ø„÷tuÇw»r–·¬ÂJà¶…Š „ýƒEc=Bpõ‡úa˜E0TD'i0¡ˆøÃ‹•@æ#½ãnQ×Y$³r,UwQ^V×…éx•ƒ=¬½YÐ3¸ »¤ Î0h\>¥ˆ$0!ß`1‡ ª`G„8ÄÁˆ>üà—¤Töº¥êA¹ÿ̪mŸußñ‹ŸJä%ß;—ø« eZ}‡Û‹Î«]ŒxF®!*lD§Î/“ZA¢qj€ö9Âéd Û÷^ñJ‰úž {@3Þ)‚4$SÞïão²áqY~š¯àJ3 écF°#C­k+‚IœkPºì{†#0‚p6²8¿ô»ºÜ(¯C l X¾øãº’S!ü;¾šR‘xÈPÄ`Ð Èíø<¿33 Ó+‚^A›&èFX=#Q¸h#A?} ˜‘Ë'?»=ß4àÛ:\)È;A,;1‚J,p•p ¸ÓÑ9k»>ˆ;t “†ÿéè#@‚BJ¸/ ÈÁã·'34ò¸:Á £ü=­{¼”2AÔ­°;¾ß™ˆºŽ ˆ‚Ð$H‚>¨‡«ú:‹;|¡¯úzqPMl‚^‚  °C~ƒªõ{)õë@óhÅ](+’EDšB“ DBÄ:?üºã£¤†ð Êyš@p$À¹‡N2²‹ê@žïz™íÃ4%‚û‚#dÂTS2¨ Þ¹CÊÃò¨E³ÅÜzB+ÜEzB¹+¼2°##µ+‰ „éH%È·ª—ÅgÌ4zXÀIC™É´ÕÙDg› d,ÒP2t˜=¼"ÿc,UCÇZœ?%\ÂD^Ü·´2_”ð²©kËg à,èF&ä@<¬ŒC [G½dJuD¡=ìK§tÇv„ǧìÈC4I†Z’›‘¹°3$x”€Éµ Ë#»³úêĸ›ž¼š€‘;̧<|Þ›µÜ 9^zEž¹ÆûK¨¾\”?Ž,>,d-l9*(‘k¨†j€Ž‹™ÿi˜%ȇ¸¤¼~Z;4ü§sqü Ò¬Ë MÔ¹ôºQÊ«ÂØt$‘ÄHªÌ¿Z£Ñ³è¤Ô–… .å+ z8­hÊ4T³ ÑŒ*ÕôŒZG¾äKv\GüHÁ$9B»?yÏgr ñi ÆQ>åÓ£Pò R«´ ÃY¬¢œÁ½‰G[ë@øÃ=Ô¼ÅÒ°PîÁ’B\4Á5PRŒÿ@žìPŒå™J¦àÄ EQº|Å Z ÇŽ{?ŠL<ÂêŒö+L%Ì…Eà2ÐñdÒõŒ‡VbQaÄâôÉ¡Ô=«KJý|N‘Ó=CúO(t¿Í-óÂRÀ$¾ÝÎÿx OeRÐÊ’ãT›ÓÉËT‚ɧˆLJõ‹ª@q²/ûÔNûÓç¨3m¼Â$Tç<ÑUdSñä-“‡:íÄ cL»4bé‰Ý{)ðR?½NêQ¤´?öëOõ©Å?eÔ‘ìÔÖtÍF=L&…TDs8©é,A‚SžÖZË…3OüÆÔÒ 9ò²NcíN=ÜËPNPuÕUåTE Ì$åRùrÓ&5Ð[‹h´Ó!5MQ‘äcÌemÖR-<û´ÐëôÀ´NdEQS}'f5GŒÐ]ÜQ45R%cc—EeÑ…ei­â#ÛÁÛXda«%âçmàé<âf]½McoDÔW;á(Þ\8ŽãH&åDNfWµÎ%J„arö\èœÎû8çèTbríàw#DAbvE¦Wd^eKößvŽWöh¿Fžå7`aÖˆ?‡õRÓ%Ý à&C<ÿ «¿^öåg½hŒgx= Á=ÝMEcLNåLFã{Þ’¢:C~2ÀÝ].& ýÚ~néo¶èŒ>ææèCÆÓNéßÅ>&iÂ^ži•þå>–éŒ=j˜NS¤öf§~j›þgrfµŠ Çö\(4©ó2×¾=c†ö]‡†VßK˜ëiápæg¦.æÒ}g=ÜZ½ÍÏææÓÞcmîdfµ¥6DÖØ´Vë³Æfcì·L½Ö°tœW @U Ë]‰>Þ›Vå$\ºYº6\}Þg5lÂl´ÞŒ6~áÈî Υ쌽ç«ÒåÂ6lÎmpŽmš–åËíã( ÇhmrlÿÖ|mØžiàn¨vm® Ò~i3^Xb>jÂm¤Þíß®iâ†îÏ–í æÇÖRÓ–ÙânìbmßÞlë–îéží¨>]?”Wþ[$¾î>´ØCÍ즬îñîÎöì½}JíÍde«ÕmD~©&ìùïúÖhó>oáFpнXùÀî’«ÚL†äÖ¾ïðŽåWpŒ~î¦.å§…2‰S ¿p _p 'ïèvj‡ßîžpÙqÀ¦ç˜fqê.q/ïï/åÚ~ñ˜UjŸq¶Îp¿q Oäý–ñˆfÅ·Ù˜]Ì.Q®pOð#'òùŽ­æQ&gáì9Š6k¯ò1'sÿûNñ37s«Ø5Ö°0·f+GóOsú6ò+ó>sq—ÖX­r_?ÿs@tAtB/tCÏ·!'ò;·s9/r:¯ó2§jÍæê‰–rV^ôH·ñGÏï|ÖtÌ­KX^ï7pEotLÏôwôMOõQ¥ ÔîᅫÊK7uZ¯uH_uV§õœUr<ÇõŸs`öSgpF¿u§rRïubGõ_Wõevaöh·W8/vhv5Çölwvnïv]/íX'qo·uO×vc7wNÇï\Ga^·vtOwqoöq?÷y§wigìDWöw_w{'÷r¯wx÷ ×÷€òv÷õ|ww~ÿw€_ø‚/uÿf—wwø‡Wx‰Ÿø‹ïwŒßø·øŽ÷ø„Gø¿ö{oø’?ùmGù”çøƒùp‡ø•øwùŠù–ß÷Œgx–¿y˜×xŸ×ù¯yšz’z¢¯q ÿùŠ·ù—'xŠÏù¥—y¥ú¢y«Oz¬Ïú§Ÿù¡‡zªÇù‘¯ú©÷ú­{“'{£s±×ú²çy•{®{³wz´Ÿû´¯ö®Ov¦?ú³ûžg{¿{À·û«|·¿{½§òÂoû¦§{‡ûÀGü)—uƒç{Áÿú¾?|ɯ|ËßûÎ_üº|Ão|ÏÇûµ}ÌÏ|ÒÏûÄ?}Æ_}×}Ígý¾–zØýÈ}ÿÙÿ|È}¹Ÿ}ÔW{Ü÷ý×çýà7ýáï}àO}į}ÖŸ|¤/~á¯çC¯~ë¿~ìÏ~íßþ÷%~éoýß¿}Õ7þãÿñ'ÿóŸþËß}ôgäõoþQwþççüø×}ïwó_ýÏÿ܈$Ø® „ \èð¡À†'”Hñ¢Å‹3j|ȱã Š ±¤Iƒ)=®tˆ²åË”1MΤÙ2äM’9uî<Ù“áO•A#XäÑŽI•ý·cS§Q6}º±jT«µúÄZ”+K¯SflØ¡hqšý¹–ç×±BãÒU[¶îÙ»vñæ•K´mÏ· ¼ÿ“0Õ½ŠE\ÑpNÇsû2v ù¦d²~¥^†ÙÙ3ßÀz)“.=5óßʇG[-ÚudÖ§e¯†Û6hÜ+Q£æì·7ïÏ»…Û$>2¸ñÛºe&GÚ\#ðçP¥3§¾ÕúõåŵÇÞõ7må¦_«?Þ<ùòÜ»¯gêÝå{øí¡‡ŸOßþÕøpÏ£¯­óf¾ý7~ù X]ßñàfÑ%˜ÖÛ-˜Û„Fèß…Î=akjèá}†ât$–X¡„(²g¢r9È¢‚*~(ãŒÒèxú&"[0rh#éÝH ;úø#†A ¹d’Jêhä-F™Ý‘òU¹ß”+^ ¥“ýyÿÉ`‘‰ecNŽ˜y&šiª¹&›mºù&œqÊ9'uÚy'žyê¹'Ÿ}ú¹çBŽD%hQ„eè¡M!úÓ¢Œ*ú(¤~5ÚÓ¤eFšh¡—UéMœ¶äé§‚ºÒ¨&•:Ò©¨jJé «î”*H°†êª¥™ÒÚé­¸ÚŠé®r¡Õ¯E;Ô°Ä6UìOÈ&{,³Íø,´ÑJ;-µÕZ{-¶Ùj»-·Ýú‹L"Ð$°Od´Š¹k+,ÿìS€¸7½ï?åž»,«DD¯¿ÿ°»/HûJï¾è„‹/H T@CôÊ:P¿Í+¡£[ðÁæ ¤0¼H!¼®¹KŒj¸ÿœqÉ9’ò@«Œ+°íÀ$°Ðo ç@ò°Š#A¯t³Ìüc.:;=ô$ì³JÏáš4o„f­s;MÃR€ÑM@Íÿ€½ÿàõÆ¡-õ@Žð+½è0óEXÚn«x 6Hc—]·ÇkíQØ­øÎ€×}wGE£4ŽØ=Éßa#$9àN ®× þ²¿7ßTà“¨ûO`9rnצÿóúnJ«ÝŽ¥Û^0Ø‚¶ct¯¯~øE/—-À¯7ƒ+PÈ}}¸Ý=«.»é-ô>í´3ïðmSd<ó‚¾¼üÒ SdôÀÝÃ]½F Àï£Þ½Bî ÿwâꢮÐ*sK?=¿° yækÄïäK‰Ⱥ`¯a‚"Ÿêr'Öäò —ê†7®jè];RÀv ðÓ ëžB>)!4Û1r7öÌv)TaؼÆÃ—8®_[ZÀl&€ÄëšÉΚ֎.MYí+ÛÐŒvÄ”è ^sâJ ˆA€mÐ{y`ÔÔuCûnôÂÝ*PX6úÎdd'B¾ÄamI¼Hp†Ä 6-"s¼Hÿ€®}`hƒÄãB¹)–‹‘š¡4È–„«‘¸!S²¿ Ún”&ñ£&w7’M\TTåEÿÈW´†¯y›ñ(Eš­²Ž¡`yF,.’‰Ç; DÂe²`Þì ìCäÿX·:³3’ÿ™U·(ͰÈZâr2@Lv.%MS]ÐÂ%7°œ3jÞç4{¹ÁàI­iàë`ÙȆ:A}®œ·ôòÌv7§Ypžýƒ…=­†OæÁËjý|"Dn6?¿UÎj`‹2²ÄnöÓˆ =dA6jÊ#Ú“ è@“3©˜“™¡ÍaæDÉŒh/Ôk*5 B-FS|-žÐ šÆ5Eˆ™ª qü%;,îá«§4Iâë5Ô¥ìLñr*R/9‘I M¿ÂªB¸z&£4Õ§Þ:+ZÓªÿÖµ²µ­n}+\ã*×¹Òµ®v½+^óª×½òµ¯~ý+`+ØÁ¶°†…Ö×rÃÃ2¶±ŽMˆ;™'ÌÇR¶²ìÒlg¼™}Ò}kžñ®úÉ–Í„„ØýUÀriÒˆŠ´,lc»’¨™ lJ $Ð>§¶¾ìs œ— ç50 4"Î$ù9¹å:kae+ÝéB¶…ÖUšY‡]wqla;ú÷IG6²iFûm?[øÅ¹é ^º¥.|ã[Ì6R¢’U[Ùú×ÂÖ]÷slË×ÎÞÛÈ¥MnàuÝ›Qù2¶ôÝîý°»ºOânhœ:¢æ¯F²Ðh-œxX3ÿÊˈ]l0Š¥û`[w\ï±§Ü _7hrk±ç”ÖÈq ·…«8qŠƒ\Ù“nŒhëBPñÅ=Å™É6¥M“êˆqÁÂëi¼Úae!s¹Ëù¯—Ã,柰+ºc>3šÓ¬æ5³¹Ín~3œã,ç9Ó¹Îv¾3žó¬ç=ó¹Ï~þ3 -èAºÐ†>4¢­èE3ºÑŽ~4¤#-éISºÒ–¾4¦3­éMsºÓ ѨC-êQ“ºÔ¦>5ªS­êU³ºÕ®~5¬c-ëYÓºÖ¶¾5­ ë]óº×¾þ5°ƒ-ìa»ØÆ>¶°Ý1"0}©Fz6´-´dS»ÚÖ¾6¶­­ì1»ÿÛDj6ŽÀ½ì”d»Üæ>7º“=îo{[ÚÑNÑ»µ4ítÓ»Þö>ö¶¥oy³{ßán7¼Mrï¼àù¦’¸×pw3¼áüxÁ#.qsœLý¾øÂ3îlŒ?|$ÿ8È‘]q$9¼ã&?ù¿ý­p„¼å.ÿõÈ­”pnså+·9Í!þò·<æ=š¹¾K¾qçá9ÒAîs,©üæ)¯ùÓ…îô‹$½ê_:—šžs¢GÝèAç:E¬.ö{c]Lû×ÑŽð³½#c{ºËþ&I}ëj·xÝÓîv¸ó=ÛrŸ ÛÛÞu¯ãýî$gyß_í¿k¦IPŸ:äõ.øÈCDñ–ÿÇ7å×®uÍ?Þî„?üÞ//ú`3>5@ç¼áA?øÉ{^#£=Ì3_øÏË<ð²WýíQOûÚw¾õ¹ÿ¹í}ÿû¬÷^÷ÅŸ=ë%¿úá?ïÆOþó—/ü‰˜¡úÖ¿>ö³¯ýís¿ûÞÿ>øÃ/þñ“¿ÇG>óÍ~~ÜO"ä?üã/ÿùÓüæw~ôÛŸå§ð)©?  ýÝ_êñþ¡Ÿþ) ÿQ> Fààîßú!àZ`.„v ~ øQ ôí – û- ‚® ² J jàÊ`6Ÿ ¶ æ ¾`ÿùß Òà2  r ¡ÆÆÿ Â`a !¡Na÷%a:!Ó]`þ  v~!ZŸbáV`Bá2áC„!Ná !ªŸv!ž¡F´!ážàòaÎãÕ`Aä!!¶à¦¡ú!*"#.áE"$~à!:bš^ðõa#Úá#F"'Bà$jb% È%þ! Žâv"* à'Òa""b("aF*Îbý­¢rá- b)šb&"-þ"Î!+*!(b¢+ã"#2#1æ¢2#)ú .î¢0Râ2Bc2*c6Zã5Rc5Jã46^K9–£9ž#:¦£:®#;¶£;¾#<Æ£<Îÿ#=Ö£=Þ#>æ£>î#?âc?ô#@¤@$A¤A$B&ä=þ£B6¤C>$DF¤DN¤C2$E^$Ff¤Fn$G¤Ev$H†¤HŽ$I&äG–$J¦¤J®$Kž$K¾$LƤL*¤KΤMÞ$Næ¤;Ö¤Nö¤OþdK¥P%Q†$O%R&¥RäQ.¥S>%TÂcSF%UVeTN¥Uf¥V%Vn¥W~¥Mv%XŽ%Y¢¤X–%Z¦¥Fž¥Z¶¥[V¤7†£8n^4Z"]n#6â¥3Öa^ÊŸü%`¦`&a¦a&bæIALL 8Ê«8f­<&«H&eêJeÎʦLæe’ dZÿfd~&f‚&gj¦g’fh–æhnfJ0fcšfjŠæjvæiªfQ¹flÚfmÒfn¢ækÎfoþfNX‘IçpöqŽÄqvDr*ç²ìÄrjÄsRDtJ§qzšu^'vÁ ŒU° ŒÈxÌ?€Ì‚mUÀŒ ï N–Ý‘õ€§¾˜Ù—ÍÄ\Lm„iÑ QN»< ÆtPÀL i " Ë$4yºÍÌ\̾pçE(¹„K° gATLÌÌ »¼Í" MÑ ÔÀÏãÔ'D$ŽÝðÓ$€™rVÎìôL8u¸”è¯l ü€ßxWÕ€ÔD êH ÓâXNß Í†²èÎlè‡æMïlÿ#pMæLpùËÛPP‰VP ¬(„–Œ†BTB<©1‘ܤèâØÌ‘F„nyÍó  (-ÅåÎúØh2=L’SÁ HÝŽå KÝ“JöX’Ф„¸ÈíÜÒAˆË™Òѱõ°©B\Ož ÏýÀ§Q€“ÒWÁ)D §çݬN(9„–zןҩæ\Ï<éÏ4¹ÑÞ”çCDÍ&9–ž‡­ˆjT‰òS†"ÐŽ‘Rìüü”RÕÀ*O1ªCà–ÔP‘-QD¹xŽÎDD¬.„•M̧jTI­2k< Ð>Ðù KÑÔ ÜÈAP‘zª ²Nç@DÏ ùÿ±>ÈøQGPÍPÝL1Ä m)¯B‡ÑH0±žVhþì»ÊK˜!!êñ¤ĺjë„iUXM“QóDg4탫–+D%)ÒºÂÍ¡,ÞÄè3QÄ8gC«Fx'ÐPͯÔiäˆiÕ À"U*‡ÑÈŽ)m„uV¢*¾H ËÎkB°óhÓý\DÅ^ªÌBÄmj¾xjMH!©"ɆK6©T¹VŽ?}Oþ@ÌEñèE$Õ¨ËC¥WåËÝ@NG„ËÛJ“ÜLlB¸íÎ|SјÕD êÒ`LŒÞ’ûÜÍͼN´.Ä7‹þ «6­ÖÐÓ$UÓRl¶Rvê4î| OmMÂâž­ChkßØØ¤.Ø" I¡èì¼+Luš Ëë`lD¡ÎÌL•9‹êÔ*D¼N‚îTzâ‹M±fN „zŽ÷°Tì‚D”ÅMRÅÒR /XݨDˆî¿äçDxÓ/I¥ºT«ê(Ö'%ÄñFDY!ù,‹RrA‡ ///SSS~EKW`nnnMx¨iw™}nŽyz‰xw˜l}¢Y‚®|‚zƒ•g…¬fгm¶y‡¨rްz—¹“OU€_m•x^„cuŠu~œkzš~l˜zz¥\\­]d¬|\º}E¹{X«dn¨l{§yf®q»cd·iuµyh»r|Õw2ê|,êy8ñ}'ð|2Û[[Ó^aÎd^Ë{CÉzVÛkMÛgU×vKÕyUÈdiÅksÈugÊrxØdfÕmqÞuiÙxxã[XèfIåeXêxHèwWãfeåopæshäxx‡nЇv‡„{˜–m„—v‹™~”¥m€ªw‰¥}¶y†Ê|ƒå€y˜…x¾‚I·‚W«‡g®‹vª‘zµŒg±q¸“s݃.Öƒ:ô…è„'ç†6óˆ(ò‰4ò‘:ɆGLjSÌ‘YÓ‰GØŽRÛ‘NÕ“WÍ‘fÇwÔ†gÙv×–hÚ’{Σ}ߣjÙ§wëˆGë†Wç–Kè™Uð‹Cñ–HðœVé„hå‚|ê˜gé•wí \ð [è¢fíªvî±|ð¦gð«p‡‡‡…†•˜ˆ†›…šœ’Œ–””ˆŠ¦ˆ–©ƒš¹–Š¢œ–ªœ²ˆ¡»›¥·ª†§†˜£’„£›šº€Œ¹†“¹˜„¼’œ°˜§¢ Ÿ»£Ž¹§˜§§§­¥µ¦±¾¹¦¦±¬¼¾²§¶¶¶‚ŸÂˆ£Â˜­Æ±Ç¡­Ã¨¹Ë¤ºÒ³¼É±¿Ð»ÇÕÇ„‰Ê‹“Æ…È‘˜Ø†‡Ú‘Ú–‹Ô–—È›¤É¥ŽÈ®˜Ì´ž×¬ƒÓª‘Õ²Ó³–Ω©È¬¶Ëº©É´·Õ¤¤×½¨Ü»¼äƒƒç—‰å™™ê¦†å¤œí¶‡ë»”ù¸€å¥¥éº¤å··ñ­­ð°¯ñ´³È»ÄÌ·ÙÀ¨ÙȸëÁ÷ÃúÃ‘êÆ§é̵éѼúÌ ñÀ¿ùÒ¬ø×¹ÆÆÆÄÌÖÊÑÚÙÆÆÖÒÍÜÜÜÅÓáÚÞâÛáçåÄÅäÏÐç×ÈåÚÙóÇÇöÙÙåßàæáÛõâÎôãÔåääçìòîòöõéçÿöïþþþÿÿ H°à@}ÿ±[¨ïÂ…ì.l·Ï E‰ Ôx±#F Cv|±áBnÜÖ5t‡Ý*U³D Œx0!†2-ÒÌɤ¾’?Ù©ƒÖ‡›:¡ê~ÅzùNæÎ7qì7î[9 ŸöÜjQ_E‡úî+WîByå̽k×T¤T‚û¾$KÖœO®x»F57®ß?|ß¼Ó—¯\¸Yíd¾Ù¬ßÂvGæÕµ²e}ƒ‚#Óa82b(¬J'¨ …Y—/gN]YÜ h7b™vj¶Uß WÆŒ¡hrÄŒy™3•rß\Û5ì°ƒf³f®|qÁêï‰3fz>m°ÿϤ(‹;ï°S§}ïРnâ ½¦½>7nÛî^±BEhPžCáxÖ`€1Fy¨¡ÍLBé¼" 0ЀcsÕL3M5ÙuM4òèÎ $F×]jõÙvkîDB$gœW‰óx†Z4ónððÃ2@ƒ](¨†Ï-wÓ4@9Í<î• <Ñ@ÓMôawÓŠ©µB+Àè±E%ç€3H41ùìT³Ì 9ì›ËD∄˜âHƒ¨<Íüð$ðÀd ¯‰Ó‰Z¦H——Q@>òBÁ+#>×Ì2¤P‰%Kä°ÃM>âEŸúPàÈ|L.óã2›Âÿƒ<qHw† "N£ZrDYj’¾Í ^\:,šú09Í+H @Ë`Yê©á¼£êkó™ “H,#럵ފP®»ª×«uÑæ%+ç´¡`Ña™-¸ÐR˦ÍÌ d$à)Êžƒ€cè4µ-ƒD·… H¢‹Škn¯ZÆN%’62d˜aáMól ë<ÔqD·ÞY¤‚Hþ +fó¶êä<„èÁzøù°–[öÎ+–´¡‡!3‚¥eòõ~`ÉŽ„v@ãç¼Íìâ¤>nøS%[p±$èôê(k9_6l7˜ÓG °V3´™†ãžÍ©êêÊ–­‹³•¸Ã+Ä#)ÿ'ß®ç„CÄM6ƒ¥|áÌS 3x8“Û<ð ó­e’ÞÄ ]ߌA avÎç ‡:0yØñùBÄqÌ1?ÁCÄØ‘G0qüàƒB#:è±”RJ,»‹.)è‘LðJðÈ'¯|f=U”ÑéANƒDEtëLwˆŒ;áCßĬ¤—:j7Þzk^]Ø—Í“k~ ¡6¸ãÇDðÑB .°0„H˜B†t©ñ½‚5ìˆ& …GdN}ÊaßtäÖ Ü¡‡BúÀ‚d¬eÜôÁ,ÔècHNj²õƒüàTÎ×nÓ7^¹ @Â4îA ö äC ÿúÇ¡{€ãˆèæ˜BÖ0)_t _nfx ¢!óxÆàš!…ÀX\p„!Œí)‘ÐP‰t°ãr–Àâ4š¡6„ KË(!hŸÞLÒ£ŸXÀ‡y”! üdÂa&CÌC…PC&È·ŠÁÈ­I5ºc²°×-‚Éð\VÔÍMˆ¢‡2ô†ƒ CÈ0„!´  ò@B\ó†U¬",R5µ ‚=ÑzÙ£‡¦J?†£¯ Ñ£C˜¡ † Š*ù@M3ð!>lÅ+Üa¦$aÆP͸ ô1/NÊj`£¢eV ŒaÌ RT’e\C"ò¡JÑ@¦1¡ÿ4lÁ ‚ÐUTÎNq.‹Õ¸Þ0ÑÉ· BÈÚÜHîˆwR“ ҹР¡q ¾&‹"„‹|!35°l×.7åI„Jnü̈¢¯ˆFp$Ñàø ŸC˜òD}\”HdŒ/éCàÈ$4zIMFÅe½¤ 2¤ ÷(ó¦ÑÇ!tÚiš¨ò¼Œ8À‘¸{xˆ£rp€#ÂaAœ WEHfæ1Ç:Z¦j1½Ì=¢#WY®¯#{„ÈÀÑ2`t™•¹2ItyÌ#}è!‘ˆ1$(F‡Ÿ:µdUÌtö¯YÍÕ!Ü3Äõ&÷ ˆÎ2,j¨z(cð0tÿd Xp@"ò`›bHCyÍM8 Q!}° z˜D³*ña°™mß!àE¢p@V§d(CaØ!Ø€5Â,!.¼‚£ÍhmÒÔ¤¨ú­Dó– ÏGõm-Ä£";(*:ÜÕé*Ñ ŒuÁ<6ÀÁ#ô†ÆRê°ò|©.sÃ6ë¾í¨áàß²ŠÙhc\:54 »Sh´ €ÆÀ4ˆa•f„N½™&}‹¡´ñk¦ÂºÜ_åF6™1Wõ‘Ê0¬‘€€#XÀ1ˆÁãÜjì­Y¹7Ǩ‘r׋3?榿 ÍÐ D˜ÁÈÏ\ NÀƒÌÿ h­*!á Á”Âѱp–¹ÜcƒtèC§ ”¨°ša°aNÆ`à ‹8Ä\ˆgö¡\rU\3v°ì=èËð¥q1³ =)±&µ€~0ƾh1€A gH€^t0ôÁ~0e¼yŒö^/{ARÎp‹Ô wE>NkX‹–­B Wx2°P .°â«èÂÅÊp‡ (Á ¡ˆŠÔ ˆ=(:õ\|mWd3J.sqD„>aŒ ¢@c8ù"2€Áp€¬#Ñ Ôüè&ØûV¬Ð-×Q¯;£›N² &„#<ƒÞ½F²=èg›Í¸ƒà=„à ÿT+~„¥ë)¼Ê ßlTpƒì0;L5ÂÄà.‘à XHÙ’âàEB9XB°MMÀjNåÖW´žn¬v¥ÔÕ¥E„!Ü  ( îÐK¼"X\Æ$P‹œ@HG6$à„ƒé×$‹¡×îç°xhµôA†NÑ5fàÈÀB0ƒ¸h‰„À„€ê‚šp°MsÚÓQA*8-qc÷]K±ˆ„0)`°ßÁ'€ì}qňc€Ësbí¤ð˜'Œ3•¥Ä4ýu´d- L M€}3Ñ„"!U¨=.˜ÌI ³`ÿ   Oy„9CGtˆ*‘ÓYR~ç–·»XL ç .p…s4 ^”2€À0Ÿ3< ¸M€  ó>¢;ù÷»ð9²# Ÿ# ¥C<$±é‚è0­€ñ)À“ 1P]J 3à"Åq‚çã)ºt Âç-wF)î¶cÉ×e±ípvšæ ´Á÷—î R°Q{#0y# gð§Q9Ûà^Е@ R07Ë€œÀ<=-e&…àX¹²1¶!s[b«Ð( ¸Ð^z–@>ž"5sVð ·ÐgpÀã#zÿ 3‰ˆ’€ Õp8 †HÐRiT"…°l¢D„ ªÐ$9`nS‡"á ¬ÀR(îÑ šg€€×Ò6oÐ0 .A¥à• ?€ Ÿ S° 1eDHÔ  ŠËu¶´;™³pˆe#¢Ç@º Yf B•0$e(+ WsÅÕèט0'–KY` ñ 8 ~e ÿ  °¨ŽéÐtÞb-ðØR$†St¨AЦø ¨¨ŠõÕp¶!ާÁ ÀìPaà ~.ÒF‘ÀǘŒË8LóÒ^Y‰Á¬ÿ€‡ž²‡MÒ‡<–é!’& |°h`ððŸ L°v.‚Š9?À ¬ LR?@ SðGW2‡óÈFx^I8“‰—³ T†µ*ð°”´8Ð ð ¯ð »P ’à))E/{5 DÀ(¥‡E‘Uoq.5‰ÔÀmÔ 2 —sùÈÀ= €-r)»°P/ð?Ðu/ðÈäÔ^ç6s51‚|¤€PÔð¶ ™›‰ ?€—°˜'¸/OðØCBðSXÄ–4¹$î¥,Éa{s.¹¹›ìЛЛ‰ I°ÿBÅY'˜È¸#8@ úB%rsi©µN^öIÕÑŠ¯ Ü ˜é›Ý¹”’à tµ )€ ±PšP0ð<@4Pº0bd&•Ɔ ‡«Á$Ãä&-E›Ö©³Ð •`B¶ €È&nÉbqéÞ¹”»0.ô°'™(„™š@˜GiGBe@"³Pã1õJâ#)p)¶Á’2 ï FE €ÜÉ¢ÿùµP ä:<ð@ð¥`š£Äµkú`Ò'4ÂgMå“FzB¢¥° §ACr‚á"éñç ™°™a Ÿ=@?94˜@ÍpE°C³ÿx¦°!KÔAWO6i›ê2§ç€Bv ”¢A5È Kõ{:—êЧš@ P&ÀHð0€ôk^ ÓP5S†%.È"̱¦4ä¡`‘^Ò5çP§´ñ." Q° žÄ{º”Ç  ›iJÀ EšE A†z¨ÑP ¶ÊZ2F`¢eB ‘Dú˜¾™¶B«0 q:§´‘ªÇz– ̨§áŽ ”0 ¯}<° Z6¦@¨‹*h¹ÂXÊ”¡ùJ5ñX‡ë¬¹1>Iz@•‘צ–0'ð ]c(@o ÿ ŠÀÓ:—ú09ÀŒ€ צAÿ¦ÈYÌÀ Ħc•8a%ŸtS3‹ Q÷)¢$z£† ° 0¬zNCÇp"àà¯ÿ@ ;À ¯ðÍÀI@ jx˜ˆI¦ˆEÚ¡Q±%!‚+‘—±.¯0~ ð ˜<ÀŒÀk É€ €2Ц È@ ¸ð²-(”?Ð/€;‹{i'›ñd´Á4!™‘2)^2yà‡‰ÙSµÛ€¢p7p0—pÐ&ðù1tB €{=B@´P¶Ep6À幌 ‘õ%ºÁZº{G9¨Kª;$P Gr É€@{K œ ÿàB¸pÖÓ¥Ù“Cj` ó`°ƒÓ$:‘ÌÎ{Q±.­À·Ÿ P†ó jÉ` 7y °»‰íƒ< ÊH˜6Ì0˜Bð ±U·¤6 HËG#)B µ“礠7v i´·‘ €0Pà¸T³P j¸Rð^šž9$p0 ì€cêDWtT#û ¿–jŸ:óq±À ‘ðpç)î0 p€›7 ³à P{I0yJ*>Œ€0]¹ <€°AP6ð¿ú“—ÑTËàF¼Áx›Äx)èp9“$Ç0K@‰ì0y ŸpÃòZ¹/”˜0Øÿc«S5à?6àe?¨/‘] I s4 ‘PÙ>ÖÉÓðÉèÆÙ  Í$¢­2F°Š›(ªy=<«íC«dX¯M_æ—‘’°M’èPŸCÿØ+x­×-±~m(v'ðÀ ¢2Í͹Ø,pfŒ-ßr²¤iCü×ø Ű 9P õ¢·½² CÉ«€WÓð*œ¶‰ð`=Hp –0•Rp Ú-<ý ðbg O˜±«úЃáTÔR@>ÿíeã#)2ÍËçò ‘ ¯UÓ@ Üb0‹Œ=O ï';0Í@GÙ0y ð`àN|Ð~3r+nb8¹KËp{×öË~ä®à'§K›–T'±>$ÄpÉÍð¥Ë€ tÇ .. ê 4ÌJ ¶ÀJ ÑÐf°]ÿ"Bk8½)™ü¡^‚Я|ÑT·u*#'tØ“*°‡úÿð PàÛúä’ U„0y@Ø à0 X¢¡.UrC2~¡çòj¬~Îp€n(‚¾ÒÙcè7•™Ýè 0 Z’N.\&7l›L\⮳0 V®QYžé[¾ ]~çØS ”pÓ´Œ Ê Kìæk®Œ l|F'ÄUËP(ˆ+>Ô´W¢©œð*½dI²ÉÜ6 ¸8€ ÓK÷Ð ´§J@w \` s´ ŸÆ^î5/5H€ õÐé}~åÜž2Þ´ïx V3Wu•P,›ðB[Þ ‡Ðj@$` F¢9€?ò-2®2“-E€ ôpí§w›—!aË0 _r7)ÿ”>‘ê$×Ó$Ó*€À=~à †…‹ wÀRÀ—wäòj³2Àð°²òs¬£¾ pg9Gèäy@ÂI½tñN|0Kàö€càp±õ³i>p˜H@ÿ` Ëpõ,–ÕõSËq‡å$ÿ'¿f0½Ä!\O0f0 öwPföÞ¢öú Žü¥7ÐÖ£ Îó¼Êáò0Ï 2 4_^.ØDxànI@/ôDoôÑ‚ôì€j Ë€ÆÔPH0¾ÿôPwÓÐÁäó@‘J¼ ½¸äíP‚]#ÿñ!¯ïƒÍ jà¥]Ô@H  NÄ»ÿÏI³3׋<–-8dÓO°ïØ^³WÖ´ó| À0 X5ùN55¾ qÐOwgµO÷¹ú$8ð\A„«-[Ãj 8­8pœ²D'‡å :tOßÈC)œ÷I5xÍdȈ£ë†pÿô±ãùϧN‰AW­ØPàÃiB ")RDŠE¤P`éè²iášÖ¬Ú¡A&çUk¶+Þ@xL§^ 5äÒçs'»Ÿ@‰"ºwšQ·X•lŠ„…R©Z \ÿQâÊyM‹ð8FÆ;"y9O>}ö”q¦ïo3x»p)¢ AÁ’bj—5[;-fê¼á]ó_4sÒÁ—…ãÅ ¹/BgìÁî!ž;{úøYfo’f–Á…h‚ VQ‰µ˜Ò)ÕÂ[­<ƒ(¨ši¦±-=}šÑMˆÐˆ D”è‘c˜ú㦖чÁ¦˜8@G>£AöÀ“Ð. õ-Èô0Óí" ùCˆpø„ ˆ¤)¬Z|q­Z˜P@l>AË)šª&7 „@2‰’È×–*+î€X¨0tê‘ÞüïM2‘Ø!‡$8e–&¶Œ*©ÿj¨dÈÇŸxšèH#•tRJ+µôRL£úa—]Bûá‡Ð^hJˆ&ùévùôœ¦v‘Šà`db EFˆ"-âš»zšÐÂ5ÙT‰¥5óˆPåãá‘H ŠI°eÞ4E%R ‚0iÆ«yÜó;4%TÓX׆j‰ÿþä{ï¢@'­ÂŽ($šp„)GcïÊ0a¿¢QéùÇq[‹\òc‹‚®šB'á…‡Ìu"§Í Ä7«nK¶ÿð8Dë øèD °)ûlÈÓ¦C …$ˆi†¦ðH$46=|‹QdFþa-ó€ŠP ­@ƒ6ÓØ E3Ñíh}ÎMZ&(*ÕÀ®z#”¯òÄ ™n=B â ¬ˆÅAhQE9ÔQh’F¡‡oH(¢’ÆÇõj3!mRH9À\d.„¡ ŽÜ¼)tqÒÑéèC ’.“ËøÄpP#®1‰´ éVâ „;fB ø0ˆ<‚L“=B{*x2²7ÕÀÿ†µHÉa/"ê2 f´h@Ḡœ,ÿâ¾9™‰!ùxäK‡AÌ´«Z &‰ÔpZIyNt*—y„@±Æ€4Nrj¯bçÙ m2®Ê#@XCH¢ôÄ r©r ÂP µsïTaS¼R­„*r•¥X>T‚=úHTúaO½ Ó£ ¥P6½ë}ïkgûGÿ &xÁ ~p„k:ÜêöwÀó}j€3üá°ø’×=ñ…Ÿyß—¸Ã1>ä7¼ã#'ù˜Cþq~{ßâFy»ûÝò#GÞ0§¹ÅE>s•ç\ãw6ËW®s“ó¼Ú/ÿyÉõ-ôoÇè·¾xÑqÎç›ÝçK‡xÓ©Þm™3=êU¯¹Í‰~õŒ+8c'{ÙÍ~v´§]íkg{ÛÝþvµk87ž;Ýi]÷ã=ïw·{ß­w>ð´>Ç oxZ'^ñ‹g|ŒS!¤B'€#@üøÈûÄ(@ƒ!œŠQl˜ò¡ÿÇ(8ïyë£pþÁùs@òV=ë Qà·ÿ°> €º?`GìSñû!'¢óÅW½O”?b×ÿƒø}ó'ì{à›8>)€ò à“Û÷¸ÀŽíÿãñ.?ùÿ¡{ð£>ÀÝW¿4?zŸ Ø”î}r| >H‘=ø{? £¿õûGÀ¿÷“¿+€ï{¿Øã¾´°ä>Ó =vˆ> £?ôó‰Ê£?鲨[À탼D > +ÁÖ;‡T¾¨À ÁLA!€Dà=„ÀƒÀÙ @<¼QÁ K…Ãó½8¼ã“ÁÆkB'|B(ŒB)œB*¬B+¼B,T¼ã“° ÌB:kAä@/30|½èËÁÊã¾ÿßÓÁ1ì°Öã¼ßs½ñ €òû>ÈÃä{C8ÌC@t=÷{?AÔ?B,Òóà +C¸=> C鳿ÒDEÔ0F,DðÄ,G`I¬Ä »ÄHA@´¼G$DH?P„°sH„…ºBDt¾ÙCB&\E\ÌE]ÜE^ìE_üE` FaFb,FcDQQQpQboooMx¨kuš}nŽyz‰xw˜g|¤u} Y­_…°~ƒŒzƒ•g…¬fгm¶y†§rްz—¹™YcŠu~›ilš~l˜{y±V\¬|\ºM¹{X¦jk¨l{§yfºbg·iu´|kºr|Ío%Êo0Ìu,Ü|6ìz/êz8ñ}'ð|2Ü[[Ó]aÎd^Í}FÉzVÜjNÛgU×wKÖxUÇdiÅksÆvgÊrxØdfÕmqÞtgÙwxãWVèfIåeXêxHèwWäfeåopæshäyx†n‹‡u‡„{—–m„—v‹™~”¥m€ªx‰¥}µy†Ë|ƒå€y˜…x¾‚I·‚W¬ˆh®‰xªzµŒg±q¸”s݃.Öƒ:ô…è„'è†6óˆ'òŠ4ò‘:ɆGLjTË‘YÓ‰GØŽRÛ‘NÕ“WÍ‘fÍžrÔ†gÙv×–hÚ“vÌ¡{ߣjاxé‡Fë†Wè—Kè™Uð‹Cñ–HðœVé„hå‚|ê˜fê–wí [ð [è£gìªuí±|ð¦gð«p‡‡‡†…•˜ˆ†›…šœ‘‹•••ˆŠ¦ˆ•¨ƒš¹—Š¢›–ª›²ˆ¡»›¥¸¨€€¨‡™£’„£ššº€Œº‰•¸œ„º™œ§ ¨—¥«ž°¶š¨¢ Ÿ½£Ž¸§™§§§«¦¶¦±¾¸¨¤±¬¼¾²§¶¶¶‡¢À˜­Å±Ç¡­Ã¨¹Ë«¿Ö´¼É±¿Ð¹ÇÕǃ‰Ê‹“Çœ„Ç’˜Ø†‡Ú‘Ú–‹Ô––Íœ£É¥ŽÆ®˜×¬ƒÓª‘رŒÓ´—Ω©É¬µÊ¹©É¶¸Ö¥¥Ø¼¦Úº¹ä„ƒæ—ˆå™™ð››ê¦†å¤œí¶‡ê»”奥麦巷ò­­ó¯°ò°¯ò¶µÉ»Ä˸ÙÁªÙƶëÁðÁ”鯧é̵éѼûË¡ðÀ¿øÒ¬ÇÆÇÄÌ×ÊÑÚÚÄÅÜÛÜÅÓâÛÞáÞàâåÄÅäÏÐç×ÈåÚØôÆÅøÒÍó××åßàæàÛøàÉóåÖåååíîð÷éé÷ïðöòîþþþÿÿ H°à@}ÿ­‹ç-¸|×­Ó÷OŸDƒ ®#ˆbÇŒ 5†9r#É“M¢\)P%Ë“._–”¹2&Í›)þ›6­›¡C‡òITyñ¥Ë„‘Þ´‰SdSLŸŒ*•êS«W¥jÝ'Ð=}üè™Ã÷ñ L¹T{­V‚XqÆ•û6e]§w§æm«ï¹¯éÝܱc­ZìVº-\¶íÞ–F–üx.MË—#3ÞÌy·<„†vSf(7uëΩvÊ‚tœ9Ÿc³1ƒÄßW HÈ#câ¶ìµË¼÷yxëTâZ#cA†¡v$ÎMËSÍGü 8¶ÚVÚ­Çΰ®¹ÒâÊCˆl°¡‡Åˆg©¸îŒ£ïxãRÙçN,–´¡‡!È¢.cö~(»N§v†Å4çŒ^ˆK¤2•E*±.l°Éî:¶ÝY0}êkß„Êö Ö…£hš5Ôå¯E‰#?ä‹Ç–Ö4ÎHn«D;$h¾ÜUƒ¾{×ãÞò¡aíâ ÂÿÂå eHò°F3ððÈãÉÜfb†W¼††{:ß u˜Á¬°'9‡ÇHÆ2ž#y°ƒç „8 ?(âP ;äAqø„ „b˜QŒ³@*fñG2ºfŒ‘¨@, ÉÈFš1"µ‰¤$'IÉJZò’˜Ì¤&7ÉÉNzò“ œdR&D.îèD`5P„"ü }¸ôø8Äû!Äm®ùŽÉôñÂΰ|Y´a¹¸E®}±)A’‡Õòà$Œ |ÄŽ@>´ .`Á„€)"[ßÁ%xb³ŽH` QxDž­y±‹MQ™^Ž Æ …q…Îà# qÿˆ ¡,hÁñúP!¤Pnƒ‘>ja(Åfo?ØÁ~àÍöì’3îŒç×WLc¾Ìž¬C ë€ j܃þìʇ@dóT÷Ç!щ+ê[å ¸@Ç0[2ç¢ÁÑâ09:Ôwv™ ý<¢!DgBA`A!ŒWacGƒÐ£4T"ë°¢%"j8c„©–²˜Q„³²³VB½ åJÔ¢"Õžì‰Ç)¡)ðAe6ûZAGñ(„2‘ËVÌf…áâZ“ÖÊ¿­Î¢Z‹ë\éêQ»jTPÀ”†uÊP$> ‚ a ÆЂ2Ä㈙ÑZÑŠYÿh¯ZÖÀÛÖ†)V:·˜`—àùÙ£Ò…ž|)Œ8¶#VÍŠ1Ó8„Ê`Ñ¢–Ø5ðĆRÄ¢þªÑ=[˜VfèCs•}šêœTÆdô¸Ä] rå+¨iÏxfði93£ó”¹™ÆvŽá5 a ^ÄÕ„„½ŽT‹¬Ö`å©.¶ÛÞœpzP[0)èYøv83ó= ª_ì’áÏåŒ<¤q~ÒH##İ€>5°¡ƒBÒ\nqvY„pl….Ïyq9 ÃU˜')L˜â bãz8l™Æ~øP CVVBrb¹Îs é#áÈ$DEápÍ1Ü«pl¶Ã(näÇÿ¹Gæ0I‚º«v–³wþ>±Y× XOlÆ$¦J,–!Câ \€ó~ÏkV´n&A挕PÌ:ضS³!A …Vöa™È2!~ ªÎc2°¸ 'N1cî±!Ç#DÕ!D"1Jë÷koÞÌ:bÉ¡^Œ[Hçâ–ÚÔÀ*wî3Hº#÷ø«‚›A`×QÖ¹jð td X€@"ò`#ªT™8ªJã9âóp“¬l¨ØÙ¨Ív6”¿¬ŸV[ÅD6—8EÕ>¤Iµ6`A ¤P Bˆ ±XÇ!b-èµ…«ÇÌ)z"T¶DB¿ÿ5Hèü«T¿—¾L1YY\ˆƒ¦@vwÒ´ŸÔâÆëBœl€ƒGè! ‡h‰8=é—9%Ç…Ï%3 wÉ(q¯¿]®ò7ª¶3HÖü‘F ÂÐH°a ,@ƒRko»:Ëk ÜzCN4W!mÒ5”ó׉ùì—ü^Êo Ñg}œ6 ©ì$à°@ b¸¯ñøÂ߀Kïjî§mÖñ ï»ð†‡vÌUÿÑƃ ¨¾3@~º+ xPƒ€ G-ÇítfÄ›3QŸzé-x£ÙÎxrû¢ªm?4áçùàñZ†$•a #ÿL°ˆ3 !ö…˜nÆ$:ãu¯s¥¦Â#òóä[Øi~]¥ßäçC_+ʳe}§iÚ¦t÷õÝ'` g@,g}à~@Z}oÈ`f¬äJÖÒó*Þ’YÿçuÑW‚û7x$3/V;†w}Ágƒ Wyl€Â® ­ÐÅSw J`¤PÄS­ÄS“R!uu¹Âu]p(H‚)x#áCëâcÍ@ Š`Æ32gK‘d@à€‘ð 0B-ÑJã4J¸„wzü×yHNÈo{ÆtVø\~#G ]X$ÒYzP(ßÿå w`àzðЮñ Ô¢,¬4‡€S‡ø7jM¸z|èdz¸‡,Ñ{¶#* c € D—‘ V€ÝÒÔ … 9° ƒ° M³0G:g¦„¡¸lX‡Š©WŠþ§)XJ沟·,BpU ¢wЖ é@V̰p 9@`é° à¯S-(=$Íú¸#…QxWÔ·*×&*É ªÍÀG8°Ð0;0,6õ˜  À` R Mð:ïòW`y…L¸u¦xŠ&(…. 2 ‘  PRÐJ8ÿ“; ;Ð ¾„°KbÉ èx Ìc-@Öþ‚8ùø„ýX•ÿXOA‚70 PÐ9é ŠÐEpÓP>© n#äèP ®  °HúÀVŸHa—e‡çÁ~zÂ|x˜•OF˜,Ù’õäH…4  çP º€PpP•2€ÐPbtH¡¹M€ côÓâGù½ Fv4 b4 i¤˜´YFJ¸™›º¹›¼Ù›¾©I£$èP¯€ð&°“ 1P]J 30,LRœ½d‘€[Ȱ”€Ó”*x8¤'•"ÿHþˆ˜Xy‚æÙŽ˜î—)À±™í0 R°”“!`‘! g/3ÊàYÐ •@ RÀBÌ€œÀ<àJ=æ/…pkV“õ¿]ÒuFÙÇÍÒ–}Æ“K¹ÌmÎ-PÐVr >­ГK ٽݣSHPÅ®DRj òpÑBôqÛNïÉ=°Ì<Öþ<À<}ʽ’ó - ‘@ *Ê i  –°†©K`¥ªb .yе6ÍpµBð±ó¿?[+¿í¶‘Ã]»ñMÜÅdeâ´!98 ® ÿÐŽØÙÔ%à‘ÔP °ÐÖ$ Ó·Ä89À²›À5`,>Ò»Uóз Üh‘äb½äJ.ël‹E@+<±€V4 Õ‚ °=ºI j^Ð e²ý9€ SÐJ¿ü:5P>ðp`> ä@¥cïPó€ qäñê®’³/òlB*½p|›- ‚oó‰®ðë’0“íˆ w¹ Å‹÷B-Îà ÚVá Óî7_á¨N^ÿ0Ìðä·I¨éÎá9KßõÍoµ9F½0QÕš 9F?àGµ tIMà€ çðRPüÿr•P;²=ê@Àº FÀ0í© 6p/Fpäñú  Ìð›LßôNÿôP›—ÌS Oz›ë»Î”Ì0Ȱ̰ Änì£P u“<0pÅÉè 5pÄà v 'êýP¸ÕíßþäánÒ1»è~þÕ®•í‘ç0ç±N®Q ë@ RÀÚRpYãL!ÀãtK9€$ ¤}µ®„j0˜'yPs§Îï0Q;` óPÒZ=î~ñMÞçö]ñ>!†øääˆtÒ ü pÊdµà>£1P“[å ·ðð[Å@úÅyÔOÉÓ^èðQÛÿ°Ÿ !Џ¯ÒƒoñåŸûöQõWo±Ðà´;N£ An KéÚºpÎE¸ºà QfÈ„!8°Œ´CuÂécØÐa»Hb¡kÇNÖ?Œ32ĸîG!EŽé‘äI”!M¦d9reK˜cΔI¦Cœ9RcÆì3j:…6ŒÔ ÃX "ídVŒá;fHzRs†¤@„T-òâV¸ Aú!Kfl>ƒò Z(4JTë±ku¤G6O¾Ô‹’o_—€Sþ¬²°Ý¡B­Qëe-ñТGõ%]ª§S}P0“ǰª³/~XåãkØ>aÈ”1;°ÌèC­Cˆ4ò§˜aÔÖwê™L7âhÊ9-ŽÓP»½²\–rzeU}J}…UW‡¯Ú^ J2³8õiRfôŠÆêS}!ÄO}ìû&bhãÉ1}´ ª¨Ê™¦—òŽ&tYêØ/rÅý1‡ÖÕPt,xwÌx…š73fêê©«ôµà;gbü)¨>')„ dú¢˜š5©µ,NmDõöépC>Wêÿ©¯$ÕÔZReסV[nVY›ª•™[ã´†pàamL–±•Xc‘U€‘o½§è¯$›©žæ™§s?úvã™FÞ‹jOEÕL0%Ò©kçH„¸I99(è(>’4ðä]䊚{~I ”á5¸H…ª^àqhÍ ô»3~êqÌãLÚq  xæ,ÄðdxË\s*ˆÀ”$—ñ–‡*k¬±J+)6ùá'Y9¤5DŒ1Ô0_‡àžï©`®Ýöe:¬9Â9V¼ê,ï¯Òk¼£›âIXÀèøR%ÚÁ®­EEØœŠzˆ>ÜÁÐ` !Œ;°@ ¡èEÿOòÓ“°õÇZúøM=Þ2üå/…ÁÓ…ø9yŪZ°@C\at '£+Òwz'©Pã{Hư'Øcp„Î1­—ñ°*?ˆŸß>²,&È0+d!‰#¼áíÏk0t™ aFƬ+:tßaÑ1C ŠÆ €$Þ¡ M|b¬¢83eÔ ÉG5üqÅ,jÑJ^ü"ñéÈ༰LÿëIø¥H° [Ùà ¥1D}Àƒ QÁ fP  è g(I¶u A ÂPÇ=ÆA &(—[T!#Éà€±w-#£ËਢuT¢q9dcC'”gCšcäÿq>”… b0ŸЧ>3.gÂPƒÖ(edq#|æ‚ZØÅ^ÆSA’TÞ1ƒâŽIÅâ7 iU­„Î=a vÒ[Pî13ð‚|ÐC0L1 ØÉîkoêIÔ€†ÜÄ—X;ùK_R)¤‚¡§ÿ@H1ˆ=nvEÂç:'…bq"„ñ°›>hz–9DtQ¹• d^ˆ#s@d"y™¸þNžðtá•gFnÈ!p”‚xp(ÀÕ¢†8QêbwË3bg´ëZï¨ Yj\ª¨iç"G ˜ºv ©b$æS•U•6ˆŒ°À°ªU®Æ#‚`†Ê€ÿÛ‰{蘅 ®š+$ˆ.W>ˆƒ5´oé#Œ{]ê#KkÚ¦öµC¯Liòl''¤ Ÿ#nPÔ<”}ØC ak½£ºP„( €%ãzÖBVTÏ.’z'sò:®¤¦¤ÑYÞÌžãfä 0xÁ ù‚\}®ë€ î°‡>øöˆŠ‘tÁD  L @+ÔñϫȩÚІ\ç.’úF´wÚiƒ¹8ÕN²ši•3ä$„\†ÒÆdXå°J¿\&@°lqÑ+ý3W×І3¢¤)í.¸8:&-S}ücâl—Rå$3œ«BüÿA1À(lÁ(D"N@)±>| &øiŸ€A–§`6y°TE¸Æ5žqcŒ Ø&yQd­›]¼B8^År3­Ì@ªäJ;EÀS)<â Œ à $( PE-šà§«ÅSfÆ<´Q4§™Ç4aó¦ßÌà Á™Óô9G©M}jT§ZÕ«fu«K}Õô¢¹Ú^®^'!4A?ÐÅp{±½sÄ©R€B@`ŒèE1J !ü Ôú¸t"­}mlg[ÛÛæv·½ýmp‡[Üã&w¹±­é×9°¶+ñÇ|[£—ˆ¶Œ#3#©3$Lì©3ÿï0[¶¢ë±çD/¹Ì"ÕÜ`7£6âÓM·ºsê™EE%ÀzËûDoâ 1 q°$H -0½9#Ò8˜¬Ý Æ!û|8Æ<‚—„ãâ@~°¨×ìT‹¯_66fËôö"3pž¥ñá˜x…/¬Õ(gƒÐÆ\žFÁPë’h.8¶‡ÚÁ"{‚+žt;·È‡ÆžDhH°„eü“3¶*ŽÐŒo`XE?ÈÕ;¦ÅjÁâÇ!ðÐ y …šŽûMÜwyºpF·éÛ~w¼·Êƒ ñ“:Â[]Þ^;3¨@\Uƒ>,EÿÚÞôÑ !D#²B‚6øÁùñ½~BHB_!Ñ'¿îq6}L„Œ÷M®^­72 p0hÎþ‡°ŠŒ3l ¬h*Ô¨¹î™!„ _[~§t²p:_á‚ót?=}êã«9þ‹.P²†G›_( "›Â³@À0b<  X‰ <8„È >˜yø¬´³+t«¿Ðò4¾:ýØêcÁl‰ë2ÉÙ¤±é‰)(H³Ú!¹"À°ªÃƒ¬K¿†°°"pûÀƒ @ †,Ž"‰æƒAàP¸K—ûãPÛ’ê 2¤³¸î¢†Òé`°! ÿ<†§€#ñ"¾!„˜ð/f‡B >©‡l€ÂáP°è;AÓ?œh³‘È%1D’¸.FìBŠ@‹{%ÌÐ)Ya hØ ‚j+qè$»Š\a ]Њéi.¤á½C» m¸†~!œ)á9»Ð¥Á©ERÄLÁ¢D Dw‚>ô?‰#ºÃˆÁ–ù#©›žøƒæ’û ‚"°¯’†£ÑCPD4y@¿!BË@´7Â0  ±KqÅ{»EÜ'Ðs8-Ú%^\§}ÂÅÀÙ¿¡û?Ä?ÔF¨Š‡€ž ÅelÆg$9dl.É• °ÆªÜC¼¹oô´WADì¿¡°6A,Áþ›ÿ¨éE‹ŒG¹K-HT7I/3b)f¸ÄLÜD¶³8Â,\A4jE!(Eç¢Tœ2ex‡K;@”ÂüËʼnÄ6ÑšpYAs©B]Ìȉ+:t:s•0$újÅ"ÑŠ"‚H‹ApC’‹ ñŠ“9dˆ:Ì•~IÈr(0ùÑICÊŸ4ªXl8Žz¾¹*J»"Êw$AÿþûLÐƺäH¥,M~Ú!6yŒÓä }X½> %œ˜4B+‡kÀ´ɘAt;r¬?ÍT§àìͧqKà ²F|A,œG‹ƒ!Ø|ŒéáÚ€ÎÇ{•«‹KëæÏrìõT7¼Œ—Z‘“Åä›÷™´3¾ B ½\ô6k¸ÁàPÏ, Ï+ÊëÐw„GüÎðLPMQW•k.:°VôÁùÃO™°Ñaz¾eǵÔQŠôÑô4ADäR"%Ή¤Â­3%-“ÿ|³]ˆ“é)‚#¨ž#p.ÕÔn©Prô¼‹äN\\>†ûS_&þ[K@%ÓÕÉŸQa\ÏÒtSú°Š=«I‹•-Ké ÕSeËâ8GçcG† T^äÌ[¼L-%§¹+%™Ž,Í4íG=H52ˆ™ÔÙ³T;ÄL5SÎÌ¿k8Uð4Êq\;DÝI]:b5ÔU=ÖãLÒÒ\Ó6-‚7Sk˜S'Ä;¥Ò<ýQpìÔu”ÅD4U[ôR¿×du;0œÏ¼.ì¢ÒAýÒg}*ïú.dÒ­|R9‰R8šÒGTÅB-íÓBÜÕeŽkK×ÄTeí½2ÔðôÖyÿ#Û×ÄxÕèXQ %ÚA+¦¹˜…;VýLtWµ¼6ìQ“=ÕXLž‹Â+¥.QÒ˜ERî‚S9u.{ž}ÍÔÔÖmáÖuMÔvý¶lË>eYéÙ»@WQUÇD<Ä sWw]¸˜°4ÀùèÙC¤y(‡ãÓ‡¯=¾‘à‹ÉˆK%™n•Zþt ß XŽÒRD´M¹„ÛvuÙ·¥ZtD»SP‡°4ÚÁyð[°´†0Ü¡˜¿"dsk\Ç}\È\É\p;T”¸4$ð«hšE¤V¼†zHkA #ùV¼Óe¥¢mG]BZr%Õ£JB|ÚÛ¬ý£ZqÙH–0ÂÎÿÃà#‰ fÈZ’¨‡˜KÙ"õÓOå±ÜW`…ÙÞɘ]UÖ´s†D"БÙÌÝ¥m‰sÎý^☇k ²E ~XE®µM=Öu$J¢Ý6†œÂ43X5“È£*Ræ{ØÓ³ÑÍ4XïP¤ÔÈÒ³;D²Ðúu^ŸLÇ<J)l]ÚBÕÔ†LK§àÎ4й„Øþ툟Yè×q5VäëN‡ D˜…Þwå`Ïp4Ú„+W¾M&Ñë(­_îa_…áq\§ýSëÛN‘íÎs¤áõ]#.à¾øÔŸë9Ü|ݹ - õP†Mà ¾a½µ`Å`žÔ`.NÆaÿü,ׂeY å¶Û½ÌAÄ_„­Ì2TäÝ15aÍ4Ò'6c/=LÕß ÞÕæýNtÍ \”^1äÜ,b©¥Ù:ö1œÉQd Æä&WäÄ´Ä`DâI UîeÚpl]>Ú.~äxMÝmeÿ%ãÑúcM&ÎPåâ~»þ¹%X˜åÞºÕ±¸] –efå¶ë¼ªEcZNUº¼å’e[]&f^ža_^ `NáNÕá]f^,l[s=:e–eÚíàf¦Ý0VieP~HR¾_“ð !nÚO&áhnaD…eò=bÍ[erçs.ç!¥EAFŒnedA.Ä\ÔÎýÎŽÊãNÞÿte‰hþçóÌdg6háŒè~†Z;^èMËOv½Esœä|vÖìEàpþM2ÎèKÞè>Žâ0TH†çBͱþl!–e˜>ãj*ìˆíEbL8Îa"¦¹$çŸhWöcí%ê‘6j¼ýU>þâûÕŸ¦öé&vb(žiyÌây¶ätf⡦džÖO¯Öh™þE¸~áô´Åë d¥•Gy–h>fè›ê·Žk©ëG†äR¶cë`ÆçaVá”’¬ks†ìl‡½h°Öéµì*¶ì}þglÀ¶áÐPÎFf¥XÍ&Z¶îlϦhÑíÈm!&mÖÆ¿*}ì¨f×ÕîÜÿÖæí˜þkÊ~íʶäUWÜÎí·EíËní§–lÝ•l—®myÌì`¤áäÖÐúYæ †ê¨nï®ì;6O1¢nìY‹îm×¶\çfæõfoØ5d=ºÕýìÞnî÷~îûÆoÙ¦égÚ®+Ê pp/p?pw\õÞïïŽíànðÉæoXµNoŒþjévpð_©%o^EAô6mïð wïüÞîàã®ðH¾p·ï¯eîÎp›^>ÜqG.q 7qÿq×j¯a϶o×ïr$—ëÒVìö`#Oò Ÿr*GqTÁ×ñ¯r+?qràYçr(ÇpÿßökŸñ0Ø3Gs"ïq%ïò8—s8'sñ(÷ò;?ò%Ÿó=çs Îs?_ó:·ó4—rCóDè>/ôF_ôîÖsïtGÿr@·tD§óJ/ógtMtH_îA't§6sÏtLGõ?—tRoëß>tV÷ôOŸõTuSßñKouZ¯õM×õ]Ÿô[Çu[ôQ—õUöWw_7Wv0÷õcïugöNgv5‡udó_öÜ¥ôPÇv^‡vc×vk‡ñd§ö\wp7wUöRŸvbïö6¯ñx¯vtwõeW÷kŸwzÇ÷b÷mvúÎ÷S_÷zÏö‚t€ßrP7xox~ïwÿw÷öo_ø‰§xv·ø‹é„·pxx?ïs?xŸKp’/y“?y”Oy‡xQgy‰w‡wŒ‡ùˆ×÷øŽ÷øt—ù™Wôžù–Ïy'x z{—w›ÿxaWú€wù—ÿ÷šOz§×ù7z†Çù£ov‘§y«¿ú®Ïx¯¿÷¯{²çú±ßz´OûÏr±zµçùŠ{¤z¢Çz¹—úªwû¢Ÿû¥Ÿzº÷û¿Ï{¼|­·û»|¡ïûÄWøŸzÄ_|Žo|¸/û·Ÿ|i/w˯|½7|ÊßûÁÏú}ç|³ÿ|Éßü³×|¾ozÀW}ÈüÃWüÖo}¶O}Æ}Ö/}Óo{ÿÒ·ýÚï|Ï|ÞïýË×ýÝ÷ýÌG}ªÇýâ~Ú~äþàwò›}¨ÇüÓ§þ߇~ã¿~ì_{ŸþÙ/üãÏþºÿî7îGÿÜ_þÑÿôö'ÿÛÿïGxÇ×þöÇÿü‡ýè—þúˆ,hð Áu24¨°!D„#R8±bÅ‹!jÜȰ£Ç… C’tX²áÈ“UŠd)ÑåK˜Sª¤YS¦K›%uîÄ™ÐçJ y†$êÑèQ¡=…"ÝØ4£Ò§P™FUúOªU¬³V¥Ú¨V”\}&*kö,Ú´jײmëö-ܸrçÒ­k÷.Þ¼z÷Þ=™Hé_À‚…&<ÿhaÄVC&ÆÙØña²VäìÒòåÅ1«äÜ92dÐ2=—$]ZóFÓŒ'‹®ÌÚ0ìØ¨#žSZÛ6n¡·uçºÛ÷ìà‡/nü8òäÊ—3oî'«XýÓW`€#–ѧ t4 €¾“¬L ½NþŸ©ïá=ê+|ü¿sÒ©‡„?°ÀÃëª Žh}@`éÙ·Q{÷}'|Ü9õž@®§cÒ)”`€ê1”ˆ„™’zÀ†üóÝ9ÐG’> :€>¦ ŠØŒ¬°N‰¬Èè‘#xøŒç\÷ެ¸^EB²8P"ÔvÝ9pX‘u3 ôÝ:˜’ãŽõÿø#”yäFå™&©½¸#‰Dé—,”È›v^@ñ™˜x8¦(P"}î$"‘ë @Þ !UùW–P¨¡Kb„áÔ–btWžH‘Ž–Fù"‘á¥G Œ¥¨Ï:ëXW)’azå_v:â§é) ¬KžŠQçݨgÅŠP°-ifŸÅzT0@¤ÿÜZ’´ÑþCj©%Mj페'PO][tâJ:%F–¾¨i£Õnôí:D{ã¢äšû£Ò²¢.ìf$e¾Û–8”žÏ&œcÁå6´f:Žx°?‚¨§Ä%ÙxNŽÜ&\ß_·ŠÛp¬ þøÏŠ}ÿœ¬GK^§¨)ñž ,¤.»mÉÝjf•+S\´Ù5|ðU3SdÊ´áé3ˆ“›³†I—¸ŽwKÿL‘³#š5I>ç[ïIôê‰Ý·D†t+žݪàFKbíÔ‚¼'¡Å†èF·.©Okç ‘tÞ¢B¿VäânfÞw÷Bˆ#(´âî7P‰âÚ)]“aU¾â9¬Ì¨¸·4NÊb‰³z´ówßòÙe˱j ¤”>+:Ò¬”.ÝÙ™N‡ûêG”¢±[Ɖ»Œ+þÝÐ̦i¬íÃMPòÆ$qé i_±Çç]ìm¦”­ñm¯Þ¦£¡GwVvë‹Uc1×}uE¶û—½@ä“ÿ´Å…¦>~žEýÞÇ£³¬ã,µ Bq‹Ð'cÏy #(Á R°‚¼ 3¨Á r°ƒü C(Â’°„&å±’#ä!Ó€gC"ýiö*¹$ãQ²‡#Zc“ Å7>NR{–|% ÿ´I?Ú‹H† ¢¢@¤-뜑=¬—žjÙ¤aMëÕ‰ØÆ`©Ì bRDôWvJ)­äÝHÜ£¶žY¤=‰ˆiÙÁ¦)’¹ÌqZð‰X)T¬óÑçUgj÷P"®yeJÌ+ÎY?úðŽäüg ÉÐô éñgAªÐ…2´¡}(D#*щR´¢½(F3ªÑr´£ý(HC*Ò‘’´¤&=)JSªÒ•²´¥.})Lc*Ó™Ò´¦6½)NsªÓZ´U>ý)Pƒ*Ô¡µ¨F=*R“ªÔ¥2µ©N}*T£*Õ©BÕV½*V³ªÕ­rµ«^ýêVkQœ„Å$0)ëLd‚ÿÖŸœ&`}+\ã*׫Š5)j%ë]óš¼¶Õ%sý+`[W§ðµ¯{Õ+KÖ”ò$°Ž}¬W‹Å¥°‰µìM›ÙÆB¶³ž•ìT ËØËjö$”½JiIâÙÕ>´9-lS»”Ñ’–¶%a-nÿêÚˆÄV¶cõ­]E»Y•䶸pÝíV€ÜÚÚv¶Í½Ÿ[+Ý®"W,Ê%¬p‡«Ýí:÷$Óý®V«ûÌrº× ísËYð²W¼-9/zËkÞôª—¹Þeo{ëk_ù.w¿Ýå/v׋ßéº7&Ù5-|_›`Þ.˜!oÒÛÏ—¾¶ðd£û`éFج®0€/â ÿx#&°~G_7x¼-~¯€OŒÛ§õÅ0öïs¬ã«VÆÅ¥1[KÜ_ ™ÄE^1ywÌc«XÁGF2“‰Œã'3ØÆN²’EÜääR™Ë* ˜Ã,æ1“¹Ìf>3šÓ¬æ5³ÙÌä00†¡å9ÓyÈ$i3žó¬ç=óÙÍpž²³lä8;™%}>4¢è7_ÙÊ&t•»l]C+ºÒ–¾4™ýh@kYÊ[öò§‚éQ“zÑõ9=hUËy#¥~5¬Ù¬éKÚŵN5ªO}çXóº×bžu! ê\7úÖº‰¯“Ík`/VØ“v¶­¡ë]+»Ú£fveMki»ÿÎF¶µÃmil£VÛÁfu¡¹]ì/‹»Ý¦^7º#­îM›ÞÔv7¾óLî Ç[Þõ¶··+’ïãyßX^rÀ[h„»šàO³ÁÍÝì~?›âÑ>ÉÃ3îgxÿûÜŸøÇ³Mi“Ì76Ç=­ò•'<"%ùÉç½m‹O[Ð øËIsšw›áßn¹¿}BY~‡\ä2÷8Ë}þó…äIg:Ô—.õ©ß|ÕODz®õ­s½ë^ÿ:ØÃ.ö±“½ìf?;ÚÓ®öµ³½ínûÙé1¸Ó½îv¿;Þó®÷½óírHß/øÁ¾ð†?ü×ÿþÄ3¾ñŽ<䝸ÈS¾ò–k¿<æ½>ùÌs¾óžÿ<Þ7úÑ“¾ô¦ßºèO¯úÕ³þñ©o=ìc/ûÐÏ}ö¶¿=îÑþúÜó¾÷¹ß½ïƒ/üÕøÆ?~ç‹üå3ßõµo>ô£ÏxåK¿úÖ·;õ¯¯ýí§=ûÜÿ>ø?€!ù,µ}‡777iHTnO`ldzT}«_~§iv›ynt{œpy—y{œh~£w |–b…¬n¶t­y„¥zŠ­qޱu³v”¸z•µy–¹}™»Ÿ^3¸e,“JR`q—yi¥FEªLO©SY¸W]¶Zb¾_f¿_h¤``¼cn¾hs½nyÊo0Ëp0Ðr1Ùx4æ~5ÄbkÉcdÍekÄksÃzhÃvxÎqwÊt|ÒcgÐchÕlnÙecØeiÞjkÐlpØlpÒtyÜwvÙvyÚxwÛ||áa_ä~Oädcännättä||Žm†…y–‡|™‹›“tŒ›q‡u‹˜xŽ™” yªzŒ¤}‘¨~‘´uƒµ~‹¼‹³q·|ß‚=ì‚8Ç„EˇMÊYЊIÞƒGØŽRɈ`ÅštÉvÛ‘jϤ}Õ¨á…Hä€ä‹qå–hæškì›là‘wëŸqî«p‚ˆ‘—†ƒšŠŸ™—˜™›Ÿ‡Œª‚¯“²‡œ±›»ˆ›µ–‡ —•ª›ž´„ ¿¢½“¥½®ˆ•¦–”¡—™¥›•´»€Š¶†”»…‘¨Ž¡´¬¤¤¤§§¨®£ª¤¯¼ª£°£°¿²¢­¸­®¿«³³³³»¼¾‡¢À“ªÅš­Á¦®Á¡²Ç¡µÊ¼Ä̳ÁкÇÔ¿ÉÖψω‹Ç‹“Û‡Ó‹‹Ý‚ƒÛ‡ŠÜ‹‹ÜÕ‘‘Ø’–Ø¢ÞŸ¡Æ£‰Î¦Ô«ŽÝ¯–Ì««Ë«³Í°°Òª¡×¼¤Ö¿«Ø¿ªÛ½½ä€äЉå䔕å䱅㵛躟楥媪尰澾À¿ËÜ̾â¦ÅÅÅÃÂÍÈÄÄÏÏÏÃËÔÎÌÓÉÑÚÝÀÃÞÉÉÞÏÑÑÑÑÑÕÜÖÚÞØÖÛÝÝÝÜÞáÞàâåÂÂåÍÎãÓÔåÜÜäääþþþÿÅ#ò€Î43˜Dµ)Ã"_¼!C"œ¯NÍHA!Ã4e¦$QâËWqâz„`ɨia EIaJ”pÛmܸ? °Ð¨ JÂ|ýRJj[³qÆ…"Á@‚  š‰ó…Ä—· š"µ™„O 5köŒH ¶2tz €ì¸B|T±A†+iÉ_0h[7j§@YØ Q*­‘ŽÀf¾+áN*dÎ2T‘qÉ“;Y˜Äm «.¨ù\·µÝB}¢eÈâUÔ0Ö®'W’­Èk6f¸Øõé3”†:¨Åm;36À2áy$ @ Í3”—:NV"»DŒÿXÂà¨G∱ðùaTˆ0¥Òñc”âÜ´)Z‡¥Í5©(ñÛ ô† ¨4Í,¼7N ;ðð„(aCÌ cÔBÌ+äâ“%”€‚°„ƒLØÈáÅ‹^ qÉ „@‚ P¨°J)6dÀ‰8ÅÀG1Û\cK :°b 2DÈ0~hÐ ~øUCD0â4Î 8qË{PIe0lãŠ*3Ü`V#&JáãËDTáÈGÒŠ/ɼ‰Ò7¶XãÇ:ô Ž7¾Ä‘Fºˆ3Š'°¼ÌeÎT1ƒ‡Ñ…œnÁ‡ 3ÀCIü Œ$ÓÆ dìÂK_Ð ÄQPáJ³T@!ù,UMsk‡ ///HHHWWWZ_hNaxiiiwwwIm•SmŠXv˜Mx§an„n|Œiwš}nŽy{‰xx˜l|¢Y‚®g€ž~ƒŒx„—h†«h‹²x‡¨sްv­z—¹¡k=sYŠu~™~l˜{y¬|\»~J¸zW©k{§yf¼ei·iu´|kºr|Ü|6ìz/êy8ñ}'ð|2Ü[[Ô^aÎd^Ê|OÈzVÜkOÚgV×wKÖxUÇciÅksÆvgÊryØdfÖmpÞreÙwxãWVèfIåeXêyHèwWãfeåopæsgäyx†n‹†v‡…{˜—m„—u‹š~”¤l€¨x‰¥}µy†Ê|ƒå€y˜…y¾‚I·‚W«‡g®‰xªzµŒg±Œr¹”sÍ;݃.Ö‚9ô…é…'ç†5óˆ(ò‰5ò‘;ɆGňSË‘YÓ‰GÛŽQÛ‘NÕ“WÍgÍžrÔ†gÚ€zÔ˜gÚ’{Ϥ}ߣjاxìˆGë†Wç–Kè™Vð‹Cñ–GðœVçƒhå‚{ê™hé—wí \ð [é£fìªuî±}ð¦gð«p‡‡‡†…•–…‡›…šœ’Œ•••‰Š¦ˆ–©ƒš¹—Š¢š—ªŸž³ˆ¡»“¡¯š¥¹¨€€§†™£’„ œšº€‹º‰•¸œ„°™¨¤¡Ÿ½¤Ž¹§—§§§©§µ¦±¾¸¨¤±¬¼¾²§¶¶¶‡¡À˜­Å±Ç¤®Â¨¸Ë³»È±¿Ð»ÇÓǃ‰Ê‹“Êœ‚È‘˜Ø†‡Ú‘ØšÔ––Êš£É¥ŽÈ®˜Î²™Ö«„Ò®Ö±Ó³–Ϊ©Ì«³É¹ªÈ¸¹Ö¢¤Ö½§Þ¹»äƒƒåç—‰å™™é§†å£œí¶‡ë»”å¥¥èº¤å¸·ô¹«óººÄ»ÅÚ¾Á˸ÛÁ©ÕÅ·ëÁúÆ•êÆ§é̵éмöÏ©ñÀ¿÷Ñ«üÙ»ÇÇÇÄÌ×ÊÑÙ×ÈÆØÏÐÜÓÊÛÛÛÛÞáÞàâåÄÄäÏÐç×ÈåÚØòÈÈöÚÁôÚÚåßàæàÛùáÉõçÙåååïïðïðñôãäÿöíþþþÿÿ 8Áƒ*,¸°aB}õÉ‹N`Ä:4¨±cBŽCþ)²#É’O¢\¨råG—&a†l)“ Í•ûöýËGN\9õúéËùϾ|.õ%ìWÓbS…7kF•úôeÕƒSefmºÕeW<Éá‹GÎÚµqóÐæóÆ–-=”JöG—n=™q¯2Ô»—¯À¯%‹<Ø/BÂ3F\̸±´BÝô™$¤ˆ jË–ù1“è"3hä5½ØÜâiËœ½«–Y4é×MÃÎXØ0b·S¹›w�£Î­P8}ŠÉS¨µ@fθþcæÛpƲ!¶†èlٻ뤳ÏÿF™{cðÝå¦Wÿ8zÅà#>Žo‘!Ͼ]:DBdüÂN|’-¶>Ý}G`ià‘÷Þƒ~­ÕyíI8áB J”H!ÔåQÄ2àðQg˜QÈ7‡Q†$ÀŸx¨©ÆÚ2®eXàuÚFa„òXáŽe("ÔùÍ2I !gŒ1†dñ†)ppxâɓٖ .4ÑtScx Ö#_v¦^i²$B6B$… 2H-´ðÇ›A¹G!‰ÄÒ"–ŒÉS3ÓÀÓ8Í5—È=°‰[Ž>êhi¥˜®y•pqêc̆…læG7á|FLJ­ Þ=’ÿZ\4‘–Y[¦ljúT›XµçÛ¥AÆiŽ<à|@”°‚!op0‹«×…S­%’H­8š ,šºrõæ·¹bØivàœ"ÒСâpF—¼ŸµØÞ(·ÃQ n¸T‘»©¯¼Ú_†÷„c ¤úè{†od¡"'ŒhÁîØûj¬áÌÊïxÞâ:°À»Ž+rUœ‚×,­¨bH!{$޲|Š!FgìÁz ª¨>èÀB 0ÑX‡ÝbÕL3M5ÝÓM4ÒÄ££>úñ¤!ÿK²¸[sý[Á};\;“p IßÑœkàè‘Å΢=Áå9x±3|`ÿ¨m9< 67ó—aŽ9š¤¯ù[n×Zð×&Ÿ+¬Ã—˜£Ÿ4¡ ì°†‚»¬–Ù$ða*¼QÈÌú¼ã ƒÏøÎ;™ rm8ÝÊ0µ ߪõÉ^¯<ä‘›{]•ú'J‹ŒbÛ•“d„fÁz‘FK@à€à×áÿpµ1جìcñ)ÙÝžU­ç %’‚0„iÜÞ¥Žhý0½2íßH„"@!Ï¿¶ö51RÝUØØzöö·”-kx¿K^ŒW"Б3¡¤â‹gxˆP†oÀªQ|PÃ%ÐÁŽxfBNÓpF/µsÕeAÀŒµŸcÁ;Þ´6ØÁhõ®EΫxˆ(®-ðƒ<š”×!´à ŪÓDÁNh•¦)æ–D³i8uƒD¼Îm“[Þ–W¼ öíqœMa-&àÃÔå‡B˜áID ‚ ÎqBÄZq`+bÇÌTÃv< ¢šúV+˘•¸Ñgy¬Û“õŠc 8q-©‘iÿ1ÒH΀ ÙxFƒ:æRÀ¢úñ›dx‡LK$3/þÎÓ9ãÅŒÍb–°Ëüà•`Q>_übhÞÌk5‡´~“4Øl H°A \ø!æBG$3rªFS™öÆ“&˜…àƒûæµÒ 63°ƒ=áˆÜCšÆ3g8]¨h$‚³×Gð Q6_Ü‘ nˆLi.xåîØZ¸Þ)&­GCµDüi×ÝýµFÍžH«[Ø”Ö1¤ gQ'CƒfsÔFƒUþ'$јoé@€;ø·Ãæ™icCnNw¯=‚[¢ú:&ÇxÿºÆ˜Dl&YvFƒ¾ÿFšp|ƒœNÿ‹†³é`H€„HC"nP ’¡TÚ¸G£¯mIÆÉbxG 2ávgÜp¨Ü:¿Œ­`I[– D¿PÒÛ>lÏïxÞb«psüðô°7†p28øß?¢DD¸A l0…Y‚ ]€;î>õPpà)N£hõ˜ç4&vê×®&w ½ôï>óÛ{y8û§ýqÿ!ð<@Ý~3OJD7¾è‹Ý ‘àÃ!µc_6º÷p~ \ MÙÇBÔ×+Ö—vØw}£Gz–•!Ú¢ ›ÑP"fàÑàcð’àeÐj@O‚¡uû† ²h³tÕCrô4€q7w2ˆzÚ7ƒ4Ø€ ¢-²!È¢Fæ$Gæ!€'Q’i_äÃ$(È>Y¶‚â35æSs¨€rwƒWhi÷”…ZH€ñ¡*ÒÆ!êÒ Š€N2g,p(Ð6@` †ðEéw4à†DË@y£Áþ炼†€ò¶}ñfƒ€ø‡]Ho‹‘r~÷ZæÖ(ß@hÿðtc "gP'p9 WðšÃ‡0gBe(ΤÈe?…Ë'v}¨ (z5(}1ˆsW(……<×wõ—ia‰d l``q€8ó‚v ×TO•µEn—G‡/h…§7ˆ‚øhXøŠÒdz†MDuMãq…ÀX@fàY`3]Ð ®ÿÿ lKp£°Ÿ$#NÅCÛ•!F0˜ÚXˆÜhz²¸Å–-S·M¯ÍPƒ Œp_T6SiP%ð •`Œ“à Ób7áT ’ ¶ŠJw©±ˆ×hp²ÚÿI¬¶8”$H ©.ѰZ°|H•à‘ù£Ð$àP%®`7®ÑT+ÉA6¡‡6™€¬èv4™ƒèÑÆD#W3R ‚0"š°7 WnÄæ ”K 'À ¬Àž«ÑÚ}_V…~È…™˜°Ha9–‹Ño†)MØ6C€V6³yð™ çP—šKI Àè€ ð¤˜ΘFј`£¡˜\Ù•ˆ9›²I›ðÖˆ¸w‡ S WÒ !•!ð"@4Àeæ`—¡)U’ SN@Š£XŠOuŠ÷ ¼ù`v˜5y›Öÿ(–¸é•_9} “ SàT9Ÿ< #É» @àœÏù™à L¦0FШ¡¢m¶õçiž/É  Hˆ29iBAP Qàñé ŒàF€Ò`À¸  ú¹Ÿ•®`ÆA*È(‰&ÍŠW#qàIžây£3Yžä!T>êO5S1 0 æ@ ¸Q`J²!3° ”°”±¤u3RG »pP% % %¤jŠP5õ£nú¦p§r:§9õ ¹'ç ®ð *À•°2`^K°4À%ê‘ÿ€YZ «P p¸C n^=¬Ö‚ j˜ ¡‹Ù˜9ª£µ)iú°2­ è Š‰ìP¤èб0<àIñY%°i/Í)¥¶” ‘0I>çð =ÐOekúqX'?aT£“¢:ª ª¶y­ÒG6Z5 ¸pp¯ ™ U0 Ÿ„$8p¡p NX° € á °Pš@ ¸P æÀQËš¶v_rgÉ“žš­¥j­<ʘÛ±sçUQ þH˜æ0 ­0 ­0 »ó±Ò ZZ€Vú0YÀ ¢ð‘˜4 [t íp ”ÿ¸ ”@whlÑ¥ݰ° [ Y€`ó+`‰­F—´JfüðNúÀ: J,Élj–kó",b¥ðoð ¥€¯ÿ`ìÀZ—€7S°>@ OØ’h›ÓŠVÁ´ ±;€O˵SËX)ޤÑdZpü °°ð |° d+Ç@¶f‹~éͶ&cNÜU­E×¹aã vŠ£u;žÚ ƒ‹±ƒé³ÁQɱ0ìð ®“ ¤àа ³­…“à8«³f#Ôpy@ Ôe@PQp;>‘Þ »ÀQ 0@ Cà1ª{h·]†8·0é¼MË­Ëk·56vøÛ‚pÔÒPZ@• ¸< ’»§«0àTEpÅT /×’8€‹1fÈ0|ÃdÿlÆe¼´aÜÈŽŒƒ'kÜÆúÐÃCÇL€ ËêLy¬«3°=RC´ ¤U5#—Uëjû«È;Ƴ\˶LË<ŠÆñÁ±ËoœÒÄgàV(ÐP'¼`(Ë › OQ0ÐEP6  ˆ¤Ò‰~€a”¨Ak¬akJ+À;šÃçŒÎáÙ62 ®p ª5‚b®ìÁCvÏg`1ŸN€8$[@ŸS@°CPÂS*ìtVa¤uÍa4ÙÑIcT#ë Æì°í ÉÌ{§ ’U0(®Z%³à²pÔ —Á>Öù¯­S`XÕ0ÿ6}Ó ­rÊ?|2;kc|oD½‰ÜÑ¢ËÑmòŒÃ:š!¬åÀ§Ð—ó<x³§Q6{û˜p4,:P7Å :àIB\$Bà H`Æ+=M+N&)ò 4Š“zœÑ]ÔbŒËxí΂9Ó²±@Õ¤!¹¬JÈ7;´ ¸À=¥1žåŒJ" .¶ Rx{œ)l&5â¡b{“Ñ÷¹HMÔélÔG­¼0˜!˜s%æ0Õ°áeC RÀ  'FÆQ /6ÅFàYcMÖÒP F`Ùö~ ~v)íÂÈÇK}3¼…yÍȦÍÎ2ÉÔÍ2 O--³ÿÁ»ì©™ =;ï@ ê0 R°¬<@ÍFpÐ8fÖ)?W§Àã å Ýy!ØÔêà~Ë ¦qÒ"½¨ºÁ­ T€¡p%¼3v`ɰZ¯À »À ÿjëް MuÓBpÓ}lÍÐ E&GN.øÊp´¿¤4 ž›¼tÉÏ[×v=àêÆO5õÎñÕL¼œØ+ºÚ}U;Dà‹;ó“p:½A¼ ¾°àÎðbw"Â1°¬(œÂ;ÍiˆüÖm z3> 0<Ýÿ­ãJMÚ9Þ ¤dà>ž•ÉÄ*$º ›°Õw-ÐÉ k;>àQàOÿu©'¬¥„!õÞz`‹Ô8¼×cáã§½ÑÖ}×~ÝþEüTq¾ õ=˜“«ç0 ûTK¾ A i€¤ø `¬ÔÂd4#´°ÕM55@ Wnº¤sÔ(™;&ٴ웾ãê¢=Úžn“£þf>Éê êxFlpáú #ÉS`ë¸nÜŒÁT4ýTÄŨ ïýM Ä‡Ot¼×n€¨=í<þìÐ>×Êóæ™~í¦>çw> ¶ò l°É "™«ÀÛ¬£!IÐS°³%|‚Ð $<`‡ã†¿˜>ãìfãÿ ðÒŽÝ‹Üï~ÿç_ð½Š:Fž«O` ΄i #É“ð1QðTƳP ì=‘PÓ¦L\C ÃÀ*ÔãaàmJãlÇò/óíòc¯æ8æõn ±Ð±PšçÚÓ )@Ó0 ¯`ä( ¹šà¨å9: ¿žÐñ-6p¿ß ìªCAt_/ùyæ·ûîïeoö1ló ¼EžO•Ç ›\ ì«¡ õÞ½Zàè@ ›@NUܤh6ð@ 7ðåÍõ£¡é¡òö5Üæ8ÎéšÏï1¿Ô6’4»€‡7­ ´>­`ú”ÿ°ž¥y ¢ì ÝUpLËʬÜ ûÄþªHX AùÇ_íb¯üd/óh_Ý,A§>¤k æîRÈ.  „¥aRB€37KR„ œ<ÑpÊ). ¼¤‡ >z Ò—@_6l˜#†ëŽ…9u Ô§ÝO A…%ZÔèQ¤I•.eÚÔéS¨QÙý£ZµêT«YµnåJ+מaÅŽ[mÙ²wÄÎV#+¶Ý$°ÎµâPéì»w˨c·ÌSÆPS"q˜Õs‡)FzèˆÁÒˆgïœÙÀ1Œ6xÆšk;ö§¾aC÷ Í4Õž¦»®fýïkkØY_ÇŽÿ=›vkÛ·YçÖ»7mÞ¨;Ÿ†VŸ¹¼Ó†÷<ÇÁ9‡Kì¦MqâdŠr}yŸ4)QÂ,±°tä@‘£Çù“AŒ$I¦ ø{ ËyyjüUÇêÇúw×àþ³*@]+p5 Lð@ä*ÀûÚ*îã’‹XZÅ}X‘àC X Kž$ãìÞ©æ xh¥ b€¡Ôc¯ 3ÆÐQG3¾éɾûLóɿш$MHeKr«k²·'¡\À)•ì*B²ÌBK­eØÂ2,X&ÀX0˜<}̯µœ9k™õœÁ£g„hyãŒh¹ÃÇå>+òÊÿÓ¦"mÊ(uk¸*¯ŠTÒI¬´A°¾«¸e€X;Mõ™ä̞œ¤§âˆé)¯$Κƙ$Ö[iX€¡–o„â3z5ƒ×1ü(dBíÌÐ!õj´*…tRga‹VÚK)…vµPËšf/³MSQ]FÕì–9byz‚Õ `"ÖbÀU×?Æ0ãŒ_sˆˆB„ã8a‰žÕîÒŸ'½¦…»ð¬TÃ%yÑRýÛŸ ‹ÇVÌ"yœâ%6IzÎxL5,Qžóô`ÊX ;Â7¾DÀÝhÝ=¦øÆ7u)o q!•rw¨ÝÁ0ŒeŒ¡$'y¸±$î9hÚa¨ªvµž´#CŸÈÚ§8½7Á‹<:èAp!äÜ£€@–`‚<°¡ ¨xÕ.àÑà æí*·sdîÙEK:HŒE›a³’)¤)iÔ”ä>ÿõ–çPâ ´<^UjÄ*C˜‚' ½e8#`ƒ L †2°Až;ÐA<?k¦+>AÒÏúvLdRa(› ÍÆ5o8pŒ^%8Њs$îíøÑX¦÷©X¥2 œÄòˆgà+ FZ0…Pìâ,3»Kôj7•}|æ~Ã#¨2kz e2ó™ "žóÚ™–+ ]ÎQQ±XV­‚Óz>µÎ@àÍe`Â졇2@‚æx_P-$ÓŸ &(\ÌiN1å̃ò”hgEk¦|ZMæe¨a :JÅ ¾#VFÐÚ§ØUå ¡ °jΠU®¢Å«Aë>…r°ÿ²îôoiÅéZÍÚÓ„jŠ¡gq(D7 ŠrDsŒüz?è‡)IMŠR•¢k³Šlì"K3›ÈÞt²`¼$ávÊßu¯eÇ%wÔ»ödv1Q,Òd5¶È#~ð•È O6ÐÓž>”œ«‘3¡è·ºÝm[Í{^ʖ׌o­æp•㎠ÁBHÉ^‚@(0as‰TÎ= ?tÔ|F)bÑË_¾±rgÙE:~ó‹èí-…mJ^µÞ¸šméZ†C±i¡%9 ÏÂ÷‰8V#…ÔÇŠÑɱjEÓP‡j€rÛ L¸’Î0o ê[ 0¸dY,¨¨Ù“½Nÿa =X " N…8Ä7QCÎ̾¤¢8@!y8ض8¶MnÓÉ3£ÈiÝð—Šüa±<& ŽàÀI’àd(—kñðh –ˆ3(BíZÎ 0™%I]:Ò‘·¯ÌT§;¦ôyÜcɪ÷ŸìÅÒl»udy\®å‰A+QÀƒ³°çfz8ƒþЇ3±¿­³ºÁ›@ ô>Nã½úHªËy Ó3›R£‘ Ø…ìØ«!(‚õái ØWà…t’g@=(CC’©ª“”bóïS–dáÀÊ"?üY3Ýû7 ü:TÙše0½Jh`e°/tY‹C($h†n8¸– ¢†!p‡C(‡d‘:ÿÚ¢z tCÂ;¶# ¿ ? ̬%ÜÀ°X©žtˆ¶QÃ+l J„e¨‚i` j8³"/i†!€†žX‡Ì>BM¼ÄÄMÂÚ ÃÅ~[6%ÜCÑÒ?Ô@„“ȵã+CL„Dˆû9y½ èW™$‚Fd‡tÈÁ}ÚÁ³j‹ßè„ò²E#?;´@iÜ=Þ±tR»«^ˆ—¸œ›ÁB…3‚A88¾à  -Ñ=HpH‡m îcC¶b@·"«M“ãh,¿gäÇ$Ì@7 ¸T$4½ŸP³ ¾1Áq*=XÁ]$¸Çp˜9„ÿmˆ†rpË”À[¯<$ {kΠ–~tÆ’E6;E7Ê'§Ñ²«ñh¸"pÈhX•½’¶!8¸ô’h“¶eià /3ÖоEi‹Ž¯‘kJ}¼4",B$4E€tžÙ"±€¥¼à«gèƒ(j¸2p¸¨prŒ[ä+\'oR«yD§ƒ°FùºI#¹¨¼­1«Ÿ"1F’ÜG$Eh\/=\ɸZ :‹@Py€™"0‚j˜²h¨¢´ÅEËÅG´/ìXÄ$ˆË»4£eù>™b–"˜Ã@§ìËLüË|ôˬÃC©$Bj”˜Å"ADú”h‚Ç,„ÈœÌÿB¨ÌˆCËEŒH]üšˆœ5MFâ"º”:§cÆ€¹±e\Fy´!|ÍÖ¬ÀR<ÉÀ<ÊÃ䡬‹+Ò[†¯ ˱,–Pã«[L‚¹iXKÞ\D#xˈl¬º\¯~2£ù"¹ý ŠæPMÔNL9MÀÜÎØ¼CîÌ{”ôƒ«7™ 7 R—q2"pa ÎtOi£¹žì‰Ÿ´žE⾦ÌÕÉ‹± +|+“DÐ9ôÎaã7ýÈóÓ@¤˜÷´qK'iˆ†h rùg1È »àKÓúš*¶§ÜËyœNùŒ‹ÑîC¨Þ1&5Á¬CÂ|–z„PTL.Tr•ÿá0K1TZ{‡Ø¦´±ëË=Ѱ·ÇB¡€¤¥ôÄfÔ±œÊµQ“üÇð\B§A%#k‹4EUtÔÄ2-²øŒ˜ªÓÿÑ"„C$ù>¥N“£Q9ÄNb3³0íÎuÍ=S…’Óûð&›?ŒÔá°žê'7 Uï{¬ÛÑPÍTcN,ÕÂ$TÕÑP‰Ð«DÌZ[Å9 6c<’>…&> Ô!«ŒVPt!/‚ÖÓTC5SUÝÃé¹'ý5íDKõ¾Ñ„À-:Ñ;¼-EUš‚ë\À/-ÔÙ”Vo=ÕÚŒ9d xà?õðɼPƒÊE BõR¿C¹y½ÔÿzuÍ{MJj¥ØxìWS5ÌnýU€UIDÝÃå«\x o>pB‚û|:yäVÚÀGMÕAÅR’+ÖMƒ$X•Fi½Î‹ ×TEÅÕ”=ŽX!;쨡ã»k­X‘ôÕÑ€0äf¤ÕId¬Ù=2µC\ýN«EÜI+ܘݾ|ކj¸†ª¨‡Ø]ÜÜaØDE·Â×ÿ§ÓÈ9åÙÜûÄ¡ð[¤´KÍõ;Â=UˆEIaåפ„[=We «¸†š¡ÝaºYÑ4ÒÕÎÔÔH£ÜÓïüÓâI­ýÏܘT~Ú.%V0E_Ñ^`…YeÑY#]ãÅ_aQ›U”Ú*_O àÓÕØðeשÅQpåØuѨkÊmM”ËU^·êÏüýÄþõ\aÒ™ßÍDÕA*]Þ¾Qßî+ÞÛKa^ana~aŽaÙ£_æ]`l!à÷M’ç]þßÞu_-º[¾¬[cÄÔ…@±=ʶܫJÖ…ÞÞ¨Ôa=]äåSbz,Hã\ÞH ®«X¹=&,þ[/õ‰ÿ™)0ÎöaÙ<Эß&qßÕí]ð9УpÎ*FQ#Y!£œâ‚ÁØ:ŽYjíA§ä^7~cªdàöYß 6”4<5Š?Æ\?}[Iž^HäxÅd¾ì`A]äNÎQFeBö äÝjÕODVÞMýcz•0A>刉X vV±R]¶åŽ-eSæûÕHïåcñY]†e¼D`&‰´ñòÎ[ÍåÒx`^öá'Nb_þåFþ¥ «ýÌCªÅáC±UOtàÛâämæD$ÞáPVä`æaÍæwå*~P¨ýd¤èS,õÁ{äÕA†bà˜×W&³j¶æ6žgR†ç¯¥ØVÍŠåâÿN]»EãDÖËÍÓZöX®‰]ccJh…ÖfTéyŽ·‡Þ´º\C à;í\#BÛAæáÕÎiùdt–çGNgžvÞ—óT¼­ÖÍý o¶Z•Wþp[vÅhbVe"ÑZ©cߥàB¾flÜ…öéžå>±"žb~jbæà¤¦åþÄ#1ꪦ¨ŽZ«îåªÆ`³h‘꺶ëSFiêÌýÕåcÎì¶bCà†µ>š®S©6]ªvkþë«fèŽæj­&鉎Úþ dòuMÑÅTxÅl1ÞLºe›ŽäF²Á]lÉNí’îizí>5æ^éÜçš/ÅÞå0–âœ-Sÿ‹þ;yãl:.à»nèá&îŸ6îaç›þX½aÑiÂVÈŽìÕŽçã¦î­~C¯p¡°E^Òun¾¯Á¡ÑéÎêòFíêFîó¾` ÎVæ¶1×vÝ0oY^oÀUíìÎo“fí7eÂ6Ðæ>èÿnb˽nì&iýÞo¼žl ®`yËâšug× I+ÞWà>m„6páfp·îNþÓ è˜•^nÞÝ‚©[èÅp¸¶ï gñÇo/pó.qýÕ·Jfå×ð wñ¼ÅjôFpòþqCnWÃKé¾orþŽq&_r…r$—ï°^9#/ç(çñOòOïé#¿ru®ñ"—R‡Ýñÿâîr'Os5÷pq%Ÿ:eœ’øÎ]š}¤,wäÇòæð<‡ñóí£8Oî6cÇm?_sõÖsºæó>çò£ùfC¾mDwt6‡t3OôGOpEGs8Ÿò0—ë0’aR/uS?uTOuU?¼-çôKwõWoòM‡uO¯jIÿôƶ¬^tLÏtZŸqMuô·öžôÒÖõ1ö_WvYöçuB7gßÎádgög¯ugŸõkÇöZ×ij÷qnw_oöl/wh_ö7wïöm·öNw÷w÷v—÷5ïîÇf÷x§wmÏ÷t?÷yï÷n7òuïuq×ws/x€‡÷ƒGøVІÿwÿ…_xƒ÷wˆxr§ø}W͇ç÷ˆÇx‰OøŽù‰÷x’gø¿x“ÿv-?ù’ù‘wy@çø—‡y–Oy•·t›¿sF¿w‚§ùš÷ù›Çy ×ù¯t”úŸGú=Ç÷œ_úžOzz©Wz§G÷˜Ïø¿ú¬‡z­où­çz°·ø£Ÿz±¯ø gzª'z´'û³_û®O{žû·‡ûª·ú°oû§Ç{¹Ÿ{¶Wû¼çû¾ßi»¿{¿ß{Â|Ã/ûÁWü¯×ûÄ/|³w|™—üÉ|Ëg|¯ŸùÀ¯ûÇGüȇü¿}¬ÏüÍoô¢7úÏçüÔ§üÑozÓ/zRÅsÒ?|ÏýÚo}ºýÿ3‡{ÝßýÙ§ý×·}ÕÇ}Í/ý¸_ýàzÞ¯öâþãG~Ô¯|ÑïüÛoüé·þêÿ}Ìwýç—þíçþè'þæÿþñ'ãñô×þëgÿìWÿÞWþòßU¯û¿üÏýG çï~ìˆÿ±hð „ *lèРÇFœhq`Å‹3j|ȱ£Ã =Ž´(²$D”$U†dÙð$K˜1].¤IÑæMœ5u¦ä)P&J A}þ$JÐèQ¢BG.eŠ#Ò¦¥j¤ZÕ¨U“Q±ríú4«V¥^}‚•Xv¥Ø´d·>Mª–çÙ–cuÆ}Éví[¸mÝâí«w.κ;ó\ÿ¸­àÁý.nL÷®ãÄ?žL3qNÊ61#äÜSóæ½ž?GmøòiÔ–]ކŠreЪeÏL]›ömرKÏÆ=t5kÛ*[}-ü·o伃/Iœ8ßæÎ¥ƒ„þœzuìWµ;å6ùtàÃu›ßý+ùÞ»—ç^ï¾<ûöâÇÏ_ÿ||ú槦ß?s÷e'à€ûmG }^tw5è ‚ ö'™‚ßå§€òQ˜¡~ò÷ Z&È!†$ޏ¡‰þ‡âŠ,ªçâ‹-Æ(cŠøÕøa„Þˆ£ˆzxà!îä: aBæh$*Î`>iÖ„M:ye‡Q #”S*ÿÉ¥•Y‚Yâ˜'†Iæ“XŠ™¤\l*¦¥„K" '“gª‰f—eš™æšvJ©§*-2(¡…z(¢‰*º(£:ú(¤‘J:)¥•Zz)¦™jºi¥ -‚Ô§D…êÓ¨¤UªN¨¦z*«­>¥*N°Ò$«K´Öê*O¶²¤+J¼–äë¯{;Ò°«Ñ±Èâºê²±6ël[É^$íDÔJdíµÏÎ ª¶·v‹“9H…KÔ¸>•k®Qçê¤îºéºûî^ñÊ;/½õÚ{/¾ùê»/¿ýúû/À.­2€Éès™•’p]°Ê?ú0€Á,ILñ?+¬Ò*¥üt±Èÿ<ü1HúŒÿz€›3ÀÄ%°ð@0t1µ! d±¡žLsG*×ܲ@/Ç<•àpÂ4ãL,̽Ü3Ó(+´HÔ•’ñ@úÉ*„€Ñ4@Å”²Ú*y½5ÿ´lŽØn« ú”B6Ì%és@¡6;t¯8H €@€›“ô?_ã ´Eç=Ð"„›´9pmÑß Ô2;”b8â)Îø?,›C´ä—kÀ×.6âœ{n,Ùˆ°Hç ÞvBl›“:;4 ë`-²×.`Ú,ÀY‹Ì\xôÿ,²¼sqGÎÎЋŸ2àŸ–.ó,9åÕ,Ðázÿ½ ëp|Ñá²wN6üL6€ ¥/mú`;,ö>ÙMk~ÿÀ§°†¿ÑíÏ"m;Ù½¶°‡uÄ%ÀúZg÷ „ñ` €*¤š`Q²ŠèmΣ_AbáÀXÒCþ†&ìà§&ر”O ؉w&€‚-ÏŸ»ˆìøfŽî…‰AØÄ"ZE‰aëá*¬Ç¾+šÄsc$›øºØAâî2¡^ë° ðuM  ‰W±Ñ7| »4r±îM {™æ H•ÜP‰`bÉhEÖuLy«bÉ:r¹‹±C¥à"'©¾QbÒ‰ñ›ˆÿi:5þ…üÚ3I·Ÿ¤Ò".ÀÂô1µåÒ• ù¥> ‰0ÊymTMLK`&åÑò‰(!aw™G•ÐÒƒÏ<ßHnBŒ TàäëØÆ%êo$—ÃÚ0áXêp•ù^9K8%^®†ìÌ¡DÌÆ™Ókó FöV®$Ÿ‘;& ÖÃÏ…í5Ç Ùö>–Ô0mßäHèvI´M1sg)Þ08ÚQRpÎËÝ!Ð}²nqý, R,R®~­ó\ÝêéDòw3Ýäèô7Óœ¦î"^sßNgÔo}ÈhwQ¦ê1¦GMHV-ºÑGÄ…šç!i’ÿ±ÇÍÌ%l¥Ùô®Ú‘=`\¥HkIV1.‹ÕՑجNÉ e0C,¨:å=m ŽÆÕ¯J(¿*ÂREe„¢Ø7ú½P^g-T¸2ëÏ #r jS«ÚÕ²¶µ®}-lc+ÛÙÒ¶¶¶½-ns«ÛÝò¶·¾ý-pƒ+Üá·¸Æ=.rÿ±G†Ð2¹Î}.t’Rú3ºÖ½nq§û@ñÉ´`»ä)“v4xbÖŠM»ç ¶\vDµuŸBØ3 0°Wb·¾öÕÞF½¸€‡=\ª¼þ-ŒšÃ[ÑÖß³å4l@¦ò2ÇàU„ Œô½/†3Œ8nD,¢‡ŸøßRÿœŒìpáð&²aÒ­mVÞ5'¶bó¤†s¬ãƒhw˜O¥näêB0b¯ÃÔ¼œUq6²“­ìe3»ÙÎ~6´£-íiS»ÚÖ¾6¶³­íms»ÿÛÞþ6¸Ã-îq“Ü<7ºÓ­îu³»Ýî~7¼ã-ïyÓ»Þö¾7¾ó­ï}ó»ßþÎ÷.ð¼à?8®ð…3¼á_ø¼”@ÅIâqÓÃ3®ñs¼ã8Åçä§Š‡œJtBˆÇS®ò•³â?Èhbî&ÒŒ¼!-¿9Îs®q×Üä/‡ùÌ]ór½èF8Ïùô§<1ýN[jzGŽ.õ©«<éPßSŸ²Ž'¬oý"Tÿ:Ønu§“¼ç>/ù—Èî°³½í»Öuu®Ó}éj·¹ÛóÎv¸wÝîq—ûÝÏnv”ë½ðTç{Ýy4ø6¡ñ‹7ˆá#tľï~ÿ·¼âç^yH¾ó:§üå7ŸøÌkžôOˆçSßrЛóO?}Ú]_ö’¨¾ö)gýëe_§¿‡¾÷¾—ˆíƒ¿qÜÏöŽWúï‹o|È ¿ù 'þîGŸ{Ý‹¼ô­ç¼ó³ŸpèWùoBþõE/þ‰h¿üç¾à­?}é+Ÿúéü÷½?qøÏ_ýíwìÙ}Þ‡?ù÷×÷ñßú_ÿ >Ä$ . 6 > F N V ^ f –CqüÍßÿ j –  ž ¦  : F† ÿ :Ä Ö  Þ æ ¶ ÌÜñÉߏ„!¡R ÿÐ5ž]ø A!F¡Þ`:aüáÚ_CL!v¡V`zàÒÐY¡@|!¦!†!6¡º *„Î!!’a¾a²Dö¡Úà¾àþ‰à Æ þ!"&¢b¾Ž¡ ¢"N"%B #>"$6âa%v¢'&à%Î`!à(àD|"*Nb(âß&Š¢#ºbB¤¢,þá*à+²âÂ"BÌ"/Òa-b) )’âö¢1~á/â-Úb+ââ@#4ra2£ :c¾\4f#Nã0v£0~#8zc0V#36c9æ¢5^cÖŸ&.#0º£2æß9²ÿ#&và:ª#>î#?ö£?þ#@¤@$A¤A$B&¤B.$C6¤C>$DF¤D^ÃHH¤E^$Ff¤Fn$Gv¤G~¤@R$H€$I–¤Iž$J¦¤JZ¤HvÄJ¾$LƤLÎ$MdKjDMæ¤Nî$Oö$DÞäEø¤P%Q%M¥E¥R.%S6åDV¤SF¥TN%U"åDP%Vf¥Vö¤UJÄV~%X†åIvåCˆ¥Yž%ZF$Y:DZ¶¥[¾e@®eCÀ%]ÖeZÊ¥BØ¥^î¥VâeBð%`&Sú%B¦a&WB%b.&c¾$aDcF¦d–äcÊã;Zf<šãejffºÿá=æágrŠhŽ&i–¦iž&j¦¦j®&¥©0 lBKlnK®¼ælzËmÚ¶\MmöfnîŠoʦpêfp§¨Ø¦qþ¦  'm*g¯0'n§tFgsN'p'uVgrZçsb§M¼™J€gIˆçx¢ O'H gzšg»´§{–|Ƨ|×é Ìœ–Y$Íûü J<ÌÑ0Ñc•„Ͱ¡_ÉA % (SŒÐ£uÌy•„ŽËÓ -!•̆– jD˜i͸|¨ |QŒÅ`LCèŒrÁL(ØAÂä”íØÎð„ܨ Ù°T¯hN- @ðäUÁO-ÿáèÎÛ°s”Sæ,‚Bõ Sˆ Þ鎄ã$Ì‘&©F„Žà )åè´0”Œ:‘˜6ÅÈ›]éÜLY××<ýàˆÌ?ÙhÕdPH N …Kç Äÿ„ËåÐSâÏ„^iDÞœ[5E#5Q÷@ÚhP¡"HiÚ(ê±€)A´Mûð©E°Lð—é|*û K)ô×= Ž6}Bx*{ι4Q7±QU¸Q&•…â M?U×Ehí”EìРYR€‚MÓ…ÊÑØhA‘«=DSëD°¨ ±ÚÁ$ëDTë\’áø4²~é9eN ¾¨B¤ÕÞœ“­‚ÿÒ5áÒMëCèCØ„M0a«D’)¡Òx.Ì kÊÔ)Ö’Oý BMÒH(;¸YõÒE´që…S…k+‘½òX¹â©Æ¢ë@ÌÐDZáëî „¹æ~:„@Á•9•„g±Býú‚<ñP! P°|Ñ8áªDtÏÃ<*JÀÐ7 èûÔOjG”BuNÐb,ª>Ð%Í,¹²¬ÈL­S‰Ý”L÷XT»&Ñò ŠAŒSñë½*EI•LajGˆ”I)ÝFS¸TœjÄíMìPæt¬Bì­é4ùÍùd”BÑ×ü-Þ¾lC°Ì ‰ŒßžÚ·ºÔßzÜNDs½iÑKn׈õˆ•>”T&„8ýNæTÔŽLaùM¡”—·^D¦‹õmBÑÌf ŠíL¥õŠ-½•~Î]aK¦1DîúnÆð•z&„^ñn_)×_Mìþ¬nÅô®²˜L¡4‚*DóâìQL@!ù,WEss‡ ...QQQFa_mnnnMg‰Nn’OtZo‡_w˜Mx§V{¦jqˆf{™}nŽxzˆxw˜m}¢Y­_…°j‚Ÿ|‚Œxƒ–h…ªfвx‡¨rްz—¹Šu~œea—|j˜|y¬|\¹|I¶xV©k{§yf½ei·iv´|k»r}Ûy7ìz/ëy8ñ}'ð|2Ü[[Ô^aÉaOÎd^Ê|OÅ{XÜkOÚgV×wKÖxUÇciÅksÆvgËryØdfÖmpÞufÙwxæ^MãWVèfIåeXêyHèwWãgeåopæsfäyx†n‹†v‡…{——m„—u‹™~”¤l€©w‰¤}‘µy†Æ{„Ö}å€y˜†x¾‚I·‚W«‡g®‰xªzµŒg±Œr¹”t݃.Öƒ:ô…é…'æ‡6óˆ(ñ‰5ò‘;É…GƉUË‘YÓ‰GØŽRÛ‘NÕ”XÍgÉžvÔ†gÚ€zÔ˜gÙ–uΣ|ߣjÙ§xìˆGë†Wç–Kè™Vð‹Cñ–GðœVè„iå‚{ê™hé—wí [ð [é£fìªuî±|ð¦gð«pú±s‡‡‡†…•—ˆŠ›…šœ’Œ•••‰Š¦ˆ–¨ƒš¹—Š¢›–«œ±ˆ¡»š¥¸¨€€§†˜£’„ ›˜º€Œº‰•µ‰¨Ž ©˜¦«ž°µ›©¢ Ÿ½£Ž¹§˜¦¦§«§µ§±½¸¨¤±¬¼¾²§¶¶¶‡£Â˜­Å±Ç¤®Â¨¹Ë´¼É±¿Ð¹ÆÓȃ‰Ê‹“Êœ‚È‘˜Ø†‡Ú‘ØšÔ•–Êš£É¥ŽÈ®˜Î²—ت„Ò®Ö±Ó´—Ω©Ì«³Ì»©É¶¸×¤¥Ö½¦Û¹¼ä„ƒå斊噙ꦇå¤í¶‡ì»”奥黣帷ò­¬ð¹¸Å»Ã˸ÖÀ«ÕÄ·éÀœêƧé̵éмüÊ ñÀ¿ùÒ¬÷Ô³ÇÇÇÄÌ×ËÒÚØÇÈ×ÏÐÛÛÜÛÞáÝàâåÄÄäÏÐç×ÈåÚØòËÊùÜÃò××åßàåàÛþâËøèØåääïïðòèèÿóèþþþÿÿ ø¯Áƒ*hp¡Ã‡!JLØp¢E/J̨ñ!ÇŽ?‚¤8¢È’O–lDz¥Ë—0cÊœI³¦Mšáõ)Tí¦ÏŸ@ƒ J´¨Ñ£H“*}IeH§ýåÓ‡b=EŠa%·êB•NÁ¢;ÖkS³É®Dû•mJ³þÌÉÍ÷oßÁ~뙣úO®D»n¬daë&>Ü‘ñHÇ!'Ô{NeÀýÊiÖlO`?sçêåëpp`Ól%wMq1kÕ«Y+v}pŸíÛ¸sãVdhžíD†”Ù¾öL¼lÏžùÞÇ{9pyºu£‹N½zõéÕËÒÞî¶GÙÞ'†ÿZÛzt|†Ý®fè˜íä·¥=ƒg;\újˆ U3o;ÿÿÒY§aà½fವÆ@æ–Ÿ8ûàÛpû$·qôÙf!"²œyþ5Ø`ˆº Ø] ¢5^[ *H`y"î#‡¼‚ˆ2øìCœqÈ)‡›<âÈ“ã$Æ¢€k¥¨"‚'2édji›85þaŠˆ“G(‘\6ì!¡‘$Γ4×Ä#%nEâf"”OšµâY/&8' ®¹<&‚‡!F(!h—âüqÆ¡g„C&nó$çh†k¶yÛ›KÆéÕoY gŠzî³!8û CÈF ‚Mr†*N"g¤ñ!€!îÿxœ…zJj¥r¢Xg“Jòºkžk²7Î>Æ1„b#Èh,H¢1†Hë>òAºhvIþº©¯ÛrÛë¥Qê¹a5òðQÓØ7ȲÍÚVHô#¢´>R;_­H>¦)T˜¦µoX-ºèm§óÔx†F<#NF$Ɔ„ƒHfPÂ-#â&k¯F›/bßòûo¶Ú–œ+ŒkΓȳPóŒD QdqFeÀ¡ ¤+£Ž&g­mòXS 8ˆ­¾!Ü4ÉÞš .ÊzÎÓ‡!‰b ,ˆ¡7ó‘^-ÿÌè™iê6#‡é I­¨iÔ/CºF=õÓ"?Ù)nÊðÿfˆ¡€3«ex± {yp‹ÙÿIhˆàìíwÝÇ u¥RçmgÝÀîÎ<â„SÍ€Ly3°¨SÜÂ8ãèwVÖÁëݙ߮yw·‰ƒF‰XSÅdÀjd’1€±KŽžz“/ 2ï—ŸŒ=Ó›ë½7>ãàhzhüÇwâmäñÎóó¹ìÕS§»Óx_owïùëß¹ˆî E,\qˆ+eiJ_ÃÌ€>´¡ {@“šö¡Z ‚ÕPTnB”k\#ãG5¬µÑÈmѱ]öø‡¹ýáo{÷{áÿäŽJp€jhߟz3¥=l¡ ÒÄÿâÐ <*ÃÛÐÉÝÆ?ÄqÔ5 Æ6C@¨hGKÚ)'7ËqÏ…1 ãî|#Y(Ž}ðB&Ðak ç“à@;sübVϨ„$úpVHV´ <¤„)öðH!ô3p´m^\ŒŒý×ÂnY†•£€x¶ö˜âb3’œ|vV M4A<ˆ&†@r@²‹¢‹s¯}ÀCFPÄ€3,øEGŒ”¬¤0µ‡É/’QD<{džÂp± ¹QGϸ-8 è ^„d¥ßñJý4j>Ü Ž—2tË\îÒ½|]‰V8ÆK²ðð&1gø3Æpx Ø±ÿœo>ƒ¸È…|x”œJD‚¨øcÄyPUHPóIä3ÁHGê’ÖËd1%Ù¿.N’í”R;2Á³H˜áPiРmæ!ŸâÌIH‚—æƒD%>°‰¶,N¨¾ÅäLQ'oxCÆäËuSžñ¦F7ºÔcŠè´Ðúà'i±“†ÄŒˆå´Ã‚y¨Æ˜¾)_øtüà>Fê…/x>èý@ªÔ¦"U†îÌkHÅõ¸P…„(N6>dŸ,Q)Ö‘¨¥{¦cš™p‡\I×ÊZ6˜I­ëQ…Ù)a…J s”4–Ãq˜){˜æf í6œ´M,z6Y£ÿb¶wÕ¬EæF·Ô,E(ýA‡p‡KÜâ—|ȃpí@:,c@8B而<ð¡tˆ@dW¸µXÅ*jñ]âòl¸•Ø-ÊËÞöÚæ·ð¯|çKßúâÉ’ã"f]ƒK]zÆ4¡‡˜r7 õÂÍ4yv1[9²’-jnt+Îåö²·½ðåö¦²+B ƒ…ö°‡$á-h Xp.% ‰[0ƨӎJpB S˜D\%ì& {´£ej…[ÄÛÙæw¡’¨4¸kD(bC ZÐ*@ DµÍ4]·[pÀyÔix ¼öHý1)›5ûxÿ³ó¬ ’§ƒ%×ÀÇ! ü,*ÿ+!>¡ˆE„‚¶û@"˜£³±i©sÂoÞ­…ãLéJë¯Hvè>æA†Iƒ1c"…$¡f‡ã8Ô‡5dB혭&Vz i ö=õzÆlÍãIEzÈ@–t°…Ý=NÍù6ò`˜ˆYð‡yÐLÅD`B‡µyÈmèƒa1‰:Ê7´ºÆÜP"E’Øn†3n3ûk5;_ëDÐ0<+ÁfE(B Ð ÒÚ&vr€,j±Ó/ 2šÐD—@ü%s§9ÈéÎ0›M2éˆÛ•?âȹê§!E¤ ‰¨Æ³Èð‡’§áãÿ¨ÆPA wØÇ‰IÖ)®7œq»8§å¶Î<“²=Ÿ8Ň-ôK³û¨ÕÁÇ"PZò3POiº™G5ádýˆÃ‘‡°¡0úð†6¼Tlúf6žs´ M¢bÎÚ!¶³C:íáºyؾv!·Ýó?rt¬8ö(‚Þ(|âjýÆ!e(nOáè%ämG¿QŠÖyÐ>ºÁèØÖ®¥¹ü}ü·}Ýü«Ž" U:‘·*õÀ£Î8ÂaZ|ˆpïu¸€$Ä‘ˆB¨á ¾Wýÿ¦k}kݤ5òçIOüý{¢?O›}üÝtt¿{|JÃöþ°»oQ7ø4" ã5‡Ð`”CüÄ&™6;†èÐ{hw|ðwd,Âyß¡XlÚRÀ¡ˆBi~¸DBD³!%÷5òvjh°ó\0[pÀi`yäAè‡qÕAûPXÕp50×c˜‡J8|–æsÆW|ôwÔÁ'£ ˜w”Ç6â _Cj€`S7À6@·peð´Ð"èP4gìÁ6û±!Wâ!s•„¢çk QdC|îׄ‚H):·wbRˆÓH醆b3Šÿ‡ìs90 }@Š£ã†¶qHÇ…µ…¼qEâ >yh{7þ2töˆ…”ô;XÑ ¿a(iP sP -@‘@ oÀ*°e`3ið7ûç€ÐDNgìJâwŠPè„Oq°8ƒ¸a{ƒØ‘Ì·†po6C-ð*ðƒtº˜eØ!‚ÔŒrˆXÐ}ÒøŠÔˆ|ù¨vXqÉ·7ˆówY5<à°iP3·&p9!‡p(ŽøžØpæЇET<‡Šø¸õ7ר‡±w"¤‚a–…òW­¢d@1h`&`9àÿêØˆÿðq€N;u&‚2(J0AÎXE0·‘Øø‘ ™Ù‘ÕhE‡…U”e¹‚#¤‰ˆ"-YcÐjàÿ6I ?À@€sË46Sg¦6A¨RöXG)’s¹”­èŠvÙŠˆèw}Ñ(!VÒZPgð[ @_  ”–bùvðL§€fÅ#ãFP v-÷è”J™—Ÿ×”wiqD§|wçYoÓ‰Ñ`„°Ž‡b djÀ` ¶i“š^Y ²à:Ftã–!Õo›šúè‘tÉ™‰”˜Š»QšZwšâDI@ ­9<ÕÀ\À} ˜Œy›ÿ#ÿàÀ3²`DËÁ%ÂYKRb”L™œÊyœÌهㇱ—bÕ—×Ñ#Ù0 ³ °@Ä[ÐDí€ß ž¸Ð@ °ÀŸPÇq™xtUWœÀ&šñ‰œžù™!é”ÕAEZX;ð({@8€ @* p  ²° žšÐ3µ PQ/csBÓ)ü˜” é¡òY¤RHÖW•  TÐ > Ü• Ð!04À¹Ñ(Œõ9:PDÉ0 :à0DËB0ÒGgòó5²ãoeâA¾AÌ/ÌÅ |É”ÌÝ•ì×Þ)fä:¬ËçM% hÅ 0{Ñ1P¿À ¨ô“/Je3Ö nÏ #Ò9’ˆÕ-ÏNÏÈ¼× ŒãÝ­ÔOi$fä3è`ÞÖñ6d SÐ0q¸RòQfR 6gÎGeøßÖ G°â{‚‚9â¥ Ï Ã[œ½ß+³Û­ã ¾ã÷õݨs âÝ:æ¡wš§šÐ ÏKð€ ìpÇ`Ëf}™­ÜɽßýÍ(Àÿ1€öHuý w.Kˆài®æùÌæ©]Ÿk¨³c Û³9 ˱  Up¥à3‰DwpÍÐe³ ¿ ‘‹¨ À \¢ÜC Ü}Ñ BøoÔ÷!þq¾‰ôè×Ë€Qæ6¾Ú—îìÏîܲlìÆä ‚MغA·Àư´=psðP[ù@aP u„Ù^ €L ï 6§5· `Û˾ìÜè M 5 Ãk¥ì|(égîÚ®ÚÒÞ-· ı0 /š‰öD ¹¥À ïý¼‚ÀnÐ ÍÀj°@àO >Ð%)4óàe)ò/À]‚¾ˆ…wVÿ,æ0RÊÎÚ–ŽÝ“Žæ;_鯔ðÄ×îœdFJ›·P¹]BîÞ`¨ 8 ( ÀTQÂøLÎÂóàï‘¾Š ó¨­ó=Oéqšðê-ôL İÃpôH$»VmÐêûÂÐT0õUï%Œ¦ÅÝ%wÖ¬0‚ZgžKæ;ön¿à Î×q_žµ°ðE\÷¹aO²0ñ¥P °µóÐ mÀÍ  JM€ºbó øTмº|ƒ ¹L‚€Hú£“òï/œù¬àz ÷knïPím<ô.”XÑ¡EŒ3nH‘ãF%†üç.Xé®dÙÒå>t/÷½£‹V­X•0hàÀ¡’»ksPDxríÖ, N,‰-–´ 倡£ O=„lÝ:ÄÆ6l²=»¶2¦Ì‚[Ü×Î-A¶IмH·â\» ñæíÈ7â^¿r7$‰Öð˳‡Ýezšîä¥gÏ–mhÂ+[»¦4”¢2‰Ã-‚·8¤D'+GT?S¢Ä†@æÜøÿñ,›YÃjÓ®øve»´/Ì·¸Ýãt“+q¹È‡¥g»öëöátb­ä á¼}±([ªçª}Ï>qEP Ϥõ ¯ZÁo¯¯±ÖÏ2ñKÝ ‚«%·¹R%ƒÅ8XPçÔ‰kZ£„kÀã­i…ÿ&t *œÀ`sSBB ‚28Œ iX:ayì#g:“F?¢­ýuÌ\Èûˆ ã<¿øPL•ëŸãÐB‹W=1Ñ[[%*A ²Ñ û!¡j¬§Xâà³Âü²Á¦@ c Üa <Bø‹4æ1œÑÈùÓ!ô G®ÿ=€E䣸Ѥä°øŒ™Ø¹8Í©tóP“¡¶ò Nh À E%,±áµ£ P….@À„.XiDâÜçtÏ(‡Ô\ ®Í½:DÜc-mÙÇÀ”J&ïá“hÚó¨CvO•súÅœîs:Õì£'¼à^)¤ð¹}€ÑûPÄ!šÿ²÷#ÇÞ~®3–V²E[Þ¢Zäf Dã 3^"qh^$;¿”^0÷‘®U“,qS–29Ði|ÐlÑŒÀ%¨9ˆk&Âã€ÉJy ²ÙC-Âc\¢vÎ<æRyiç1'@Þb…¦=O¦Hd0Ò6†RM60A,cqÂjÒ$'=H€CøhèJΤ¦°ñУ’’ei‰µ"Çk_û_™øª_•ô\¼Ž;jŠ ’%&ŠÔ™ì†¥ƒä€óX>‚D€ %ÐC¾ÀŠºý",![Y.úXÚ‘£Gõc_ýzK?šÊ€”É E²´éU–ØÅ{:ÿºe#w¨ð‰Ò|ǘŠDJP‚1˜¡ £Ý”U"öQkË8µ¶Ã;V”k "_gÛT{ö´L'Ì%´“$fÂc‰J7x„®b02ƒ„1 ÝmáÅÐ ¨@Š_D&~‰ŒŒD¼Ø2õ¶¸\'yËk[Â6˜†E×wâö ž¬ä$*Ñí{Ëb·¹íLYdᬠîó34 ÷؃$Át¤Ÿsjek)Ú›Ši„¶µð^“zÞñ•‰ì}É‚áË•¼GÄuè>áq7äÎͱý-KÌë Nðw<Üà M4C6¯…{Ìœ û¸ˆ¹­ïaxû ߯ÿ¸>n‘Uê/iðL•© öDDwºÕ¥Â(²«º#ËÑ7c¶TkyœaÀRøÇ@àQ‰Ìᣃí`Ì«èëä( |µÀDo3Eüpg(ÃhÛPÚÓº÷žÉ¥G?È,!…¤£"[³Q+,ä [šjö„ó©ä\šØ‡õe¤„0¬(4–ÐÙ>ñaˆ4ü¹è1RQ‹¸ÎÕ§Tdå<Ö¡-k¹¥ZgN³šÑüWcgZAê=d§©Y5¡å?×8‚‘r0,*l7³ ËÕ(’NðU^CÍÄ3†EìC¥eûN:j‘€oE 6\GÅÝ}±ŒœÞ•^öÆA®q;nxªÜUÙÉÉmÅ a="Óšúí „Ð0EK¿à…#º&$ƒ²Û°Ç¯'…ñ:æ7è·ÒÙÌ÷x¿¹dª5ÌžÁ•‚½à5³¶Ú1§=èÁ€Ä3îÁšœñÀÀœ X¬ÃÔÚ¨û„Â+¤Û…%tìx²¡Þú×ÛRð%£êaþ“ç#a+F0ÿ‚îaÀbAbw„ îÆ=S«Æ ˆÀ$€îötHCÚp´é-2êÓKäj¬‡÷Òaß÷ïƒ|öD®§Îõ«š­ BDAJ‹H¡«9.ò“• '4…¢€Aþ« 1³¾»Ø ¡Âˆí˾¿ë¾T@ðK¯M[/ò·ã«›­‹#¸6ê8‚Îäb 䚇jSЦh…[x‚¦¸Õº¡ßH:*@‹8@e“­Ø«AŽ“/Ñ(ÙAìA4€‚_ø…­(­šÜ{G^`;tP_ ) óÀHø…ÁüB0 C1C2Ã!B³ñ‹@Ý—ÿÜ"8‚$8B„éI¨„FÊ™²Ø™g`µJÈ à/²„°ë#@–‰vc½Ô[@¿Ó4¦sÄÀº75œÖ!!Ö È„ù™È)H‡K¹$@k‡j‚¥à ¨‚V«¡Êì5샄°DlĦ ?It@À?J¬Äú‚+R +¡­;!ø…ÓA1"0‚RꮂàYùx#»~ ]Ôˆã1§Œ€ \´(sä8„D^l@×Kܶ z+¼„×9&pSS5A#H‚hÝÃ Ø CQ´Û+3¯«YȆ ǸhH §ÛÅÿu|ºIä4a¬/í"ˆ¦X‡ÃË:^ÈGc¢&Ex†+¸†­À˜¨6ˆªºÉBÈ‹#À׺(‡dˆã¡É‹:ǼºH‹LGïCÃ`¬DÃSŒ<ÈD®’TE¸S%˜‡(‚ ¢*š¸EÜIwŠº‰Ü!×?"§Š‰_t½ØsGò›6ù€‡l@ÁK†ÙÉ+ªŸ}ì½# ÝC®ðø)A`†‚¨o|7lÑ ‰ÄÔ˜›äŸDËTGÙJ“ò3Rk5+ؤXzC\qÆÊ2‚=˜F¬\‰<“`[7H{ÈR̽Ó>²Ì; ”̳DÇÊÔÈÜR-Hi¸ÿ òp‚¸" Íjˆã "нi¼ŽÃãŠg¸8 qML9½ÆÌÅp42CÀIƒÌÛÄÍ´\@¶äœ#3âºäš?`#À…‡'›Je!”gà…Ê‚¬d¨jCHÃä!ÞÀ!ˆ(JÉ”â>’éÎëS/vÄH_œL³ŒM©³'cFºŠ AH–yp#8‚l0¸jx¨æ”J¡³J—45VQImˆÅŠЪáI½'Ù´˜ü1³M‹´ÕôN uÐåÑG¤Ìò› }¶ýÈOõPÅ M•<ͫܠӼ§écQ¼rÑÂ<ÌÖ´ȱ Ò°ÇôÇ Ë3´ÁÍM Ò•9Oÿ–ˆ‚¨¶g`O÷„ÏÅÁ:é£ÊkÀO"ÐÏ#àO!ðÏÕÐwr-Â!¼êRÃt¥‹ ӜǪÈO]Pf›P mµkHŒËãÖ©¬#(‚@CHÎQd ®@¿ç$ˆè|$ŠñÆ}ME½;wÃÉ 6‰LH*GÓ¤+S2ýÕÀ³Ì`ª½Ûs¯RËi°†j¨iY%²j;úqCe™²  ªqUÛÜÒYuà€´[¥ÎkùF0MLÝüÑŸŒDI 9Î9±ù®¢´x²‚,‹ýP»/l 6¼«ÉXõÂ#Œê\T ÓD$¶ƒ J`õQ_ÍHFH᪳‘‰ÿx5ÊŽ¬±);ØG«ˆ¶(§ñ ÅQ.ÕR”qíU¾èX3ÐñÔM4}Ø–Ð×À,úž‹M%²$ž~TF pËZדŘŸO¿ÈIu¥Á¤eÙæàÕq\z(‰š‡r(Ø» /rìÙÕÎr’E­-Ø¡}·£½R§íÉH¥Ì…¥‹³Á±‡{yÀíÖê ƒ•HüY‹í X°ÆŽuÈÕ;L…]Û¢RZtE\µ4Žv`‡_Y:²8×´[¡e6¢ É¥UÉ5W£ÅÉ„Õ\k[Šœ7Î¥Ô•E[ÃGKa75Xýɘ° Wr´– ]¾ÝW5ÙØÊÒÛ]Üÿ†½QÂ…Ô´5Ýáuއ`ÝÝPHqLÐÞ}ÕÈñÂŽ=ÔE­RºÓwú\saÍ\½Q¦í¾¢%ÞâµÍÔõ–ãµÕU^¯ÌÞæµÎÏ-žo¯Õ+³êýÊ¿0ÔÝÍɰ ^Àí±ïEÝñ]×ÄÕ¾Õ5ßµ¨àÝZ1-ÝÙ-àø}ßíEÙjÉÛ×%TÏÕ]ðõ^DL×¾`ÚtÈIãRq­–C\ÉÁÎÇ”`t DÝÉÑVë¤à-ÝÈùÎν^§¥añÊv ¯Ik7¹á¶¨rÌÝÆ» iÕù¥ß²¤Ò ž(Ž5Ô¹PáñÔ_á ÏîP­â”Eà×=ܺ…aØòb‡ø.í…0λÿžÍbñe^üñ\ÝÀa&ÛÿUÜž¨Øê(c ÙÍÑcsúÒ„âB4ã¼ÚÕ†U-ÎÞ$ mYò-CHŽdIždJ®dK¾dL¾ëÝ`ÿ}H5VâÀÐ…tÝNÞ/¥QY5cÚ]Ère­ .åXúÆ0…㥢åŠÜaÕ»Ç \*®aË­`;ž[5=-T Xs%×ÄÞ¨ã˜FœådXfØhÆÝá€æeËåÀÒœ¤à®Å©ÙÎŽ% &‰mÜU½„g\þ]ßíÑ^|gjî`CÔ¤’’5[WæÎTÞ_+&ª®…]3ÎRw†çs-èyV[ŽØÛfdÚ]eF¬šÿ]Þ6žã?6ÙŽø®äÝ‹ÆhFèÂiÚ¶!þZ¼jшÞh¦h‹î NhFöY‰ÎÚ`–g™`’>hœ\ƒÝpäÐ%èXKôä~–ãžé€–ÑOé¥Ö鞎gjÞå Ø|–|&Àu»–ÌM=Vêw¢ã»@f«ç©æiƒVè¨&ëEÄ‹ Xb~ë¼Uáo=æáö娼âOá[l†é´Öà¶ökõáÜP%` ®…TÙ}.D÷%³˜þWÂæåÃc¾^kÃöìÏæQûiç-G#¾Åó=i¼ lCŽ\ÔŽà®ÛôÝäe^^ÎÎážf¨.lÿ©¾8Òž\Ó¦a“^[Å\Š`í’½!“nÖ;Žþ¥mŸöÊÛ¶å¥ÕíÝöQÞMâ¸`lùµšÖMÞ‡˜ÍɦÞ´ìØ6eeÛWëÁ¶nµÎéÞÆîê¤MBÕk&¼-׺îJ$~AD¶á.—ÒŽÜvo¶íø¾î7žHX}æ&*qúÖmyœ€Fe¼nb1Ö0g*ýîåÌFpÄñ‡ïÿQžpÙdpíõh–lþéYÞNpªVpïÇš–m>®c Ï G¥nCŽq²¾ñÐ&ñ'òÚè=~T÷ýood r?ò¯r+?p#Ï]%^&_ñ-~c"‚ñ)7ð"¿rÿ,Gò!wiž½êÎ\õ^½öpÈüÛ1_ãær3—q_býÙ 9ÇUŸaÅ\åî}ÔGóCßóïö¾ö,—÷yÏöz·wDŸ`J'ažì¨Lþw€xx‚/x,Yö{OdlÇ÷LÇócGwÿŸnw\ïξs‡W÷‹ÇxrÏøt‡ø ovf×ÅaŸTzoxŽ_wGy”WögÏf„_ø^·ø’7ù™7v›O÷ wiVyžßxŸÿy†ø”OõçÆíx?ùž¯yú˜‡y…í¢§nbïø¤z¡Gz¦oz¨Oñ§§ö¬ïú|ÿú—¿z±×ùWv£ßy¬/{xOx°§y«¿y^©'y¥§úµ¿û¡×û½{¼Ï{À×z·7{§'üÁ7ü°çûªü·'{Åg|ć{¿ï{Á?üÆwüÉ_üÊ—üË—{Í{̇üÈýÎ_úÌýi÷|Ôo{™|×?ýÕ¯xÎ/}ʧýÚ}ØÇ}ÿÛÿüÑWýØOûÂïýÄ×}Ð7ýÜ?þÍŸ}áÿ{¶/~ãßýægoË—þé—}Ò‡þÛwþìO}ß'þåg~äÇ~ïOþëÿ~Þ7ÿ߯û£ÿðîòïþöGÿô·ûùÿç×þóÿígýáˆlGð „ \èð!Cˆ6œh1âE‹3BÜÈ‘âG‰C&I¡É“U.LÉòŸË—eŒyÒ&Iœ9iÖäIPgH …f$ZÔgI¤+•Õ¨t¦Ï¦¥N}JµãS˜Y—2µêõ+Ò« ÁF%[v«V³4Å:dÛV­L·-á¾”«Ðî[º,ñöÔ«’ïϬ€¹žíŠÿv0ažˆÓë÷ïã‘‹¶«lù2æÌš7sîìù3èТG“.mú4êÔªW³nm:éä‹3.lûöÚØ²ÑÖÆW÷PàiÏ>œ7qãU•‹dÞ¼±ï߇; ]quëÑ÷RŸž}îuì᥯ûüÖä幟‡í¸=Jøñ½¯‡\ßþûüúÅïçßý¾dýå`Pÿm‡Ÿ€"èƒ ’§àMò&¡{ ²gá…H!T>Èa‡b¸ ˆn8b€(fhbpžÈâQ â„.¶¨â‹®¨#‰òèc‰?¦ãq6ÞH¤S4&&dŽA2¹›‘1âx$’T>i%Yî¨å–æEÿYdz^)å”dŽi¦“\öXåre‚éf’pÆÉ&VJ†˜¦—r¶I§v|æ¥çsaÊH㌀Öi蟈ªè]„ú(£Òé|”Vê'z–Öˆi¦Ž~¹'§žù樠–Š&ž]ªºj„Ÿšªæ§’*kŸ©²+¬¸æª¨®.Jk¢¼ö¥é¦Àvjì¡ÄÞ¹«°ÅÚºæ­M>Ë,²½æ*-µ×B©loÕëí°Í:«-ªäÎjî¹'5².»íºû.¼ñÊ;/½õÚ{/¾ùê»/¿ýúû/À ÿm8:‚‡ô¸@4ô7ψ ä· ;>7ä’Ç-På{5¹Ýq“Î9Ël”ºè®;Ôˆì¥âv㟠É+ @ê/@ߤÒò'í£¼$ü7:Â;=û¤B<Û!ù@ÂàßNõ¯ÐüE’ @æÄÿýÏïÑ“n:dÿ?P#$ý7:ðnÑ÷†·¤¢|çãˆúØ÷þ.~÷»H Ð? ï€üóŸË܇<4¢’0 ú¼ú5¯¨[õ¢Àà.qÏcI(‰ºý#bi„ÜÈ÷Âàð&Òƒ_;àÂBî|kGóXC*ã76q"¸S`èx¸74Î"ÍsŸÇEZ¤Œ3Ã8*ÄŽLœ[ë¶D‚¤BZÜâá°䱊müˆýäñS<‰$€¼C–1#¼ä …(rä’ŸcÛ 3÷¿‹<{èØa%ÿ=yDh¢¬aS.0‚¬à3¸Á~0BÌ×_B¸Â¾°zõGÅ›b¸Ãfð]7<^TÿªÒŽ «âÃ{RÛ©pÖfâ 7‘63¢¾1Ž]:ÉJrš”dÝhùÙJÒoµÔ_ôjÉÈŸ0x’€(gów<á–Í1–³œ$ Yzš¥—I äTà“–í(äI+JÑê5¯È†¥¥9õ¼½PËv¾3BB<=ªÒ¢ðS`!iiÃ.ŸP~„^÷<½ãåÏ~‹ì2G‹çIãXÏ~þ2ü¼LÓQy_ö:¢—8Šš°y´ä¡™%ɾûíä¤4¬±liéåOÈnK´ª%©Í#‡ºËÈ«5-™{jŠºËÊ{u¬“íáØ’nyv‹¡r7F >›Ú¢n-mçÉC·½¢ÿ¤;.ßÚáme“»Ü1´¹Ó­nžÜíÊë~7¼ã-ïyÓ»Þö¾7¾ó­ï}ó»ßþþ7À.ð¼à?8®ð…3¼á8Ä#.ñ‰S¼â¿8Æ3®ñs¼ãÿ8ÈC.ò‘“|ä®99ÊS®ò•³¼å.9ÌM³€™Ó¼æ6¿9Îs®óó¼ç>ÿ9ЃþsX@«èF×U´°E¡3½éN:Ô£¾s¢·Š[ÝB׫°î©s½ë^ÿºÓ©Žô£½êâZ’JÀ®öµ³ýëbW:Ùánvp…ë%m¿;ÞóÞó·oëìËJ:–´¾½¾ðyç{àŸø¸/žñ1<ä#ïuÄ—Kñ•ÿw|º²uÉs¾óL§|æ1ú¹O«ìñ<êS¯sÐωîãÒ¼åGzÕÓžö¬Ïzì[_ú¾7«ö¾Gýíµ{Þÿò¢Èï“/ùà'Ëõh‡ýñqåS¿ð̯•à›_|Ù›>#Õÿ>Þ¯ÿ­ìcú¤ß>DÀ¯þµ‹ÿXä¿ù»/÷Ù¯¿þ\o¿¤¬^(¿_}óöÿ?Ô៵ğü5^ ÷ ~^ôiúIßù½ŸJàæ ÷ÍŸß_Zà Šà‚`ù‘àD ® ¶  ¾ Æ  Î Ö  Þ æ î`‚ƒ˜t`š`Bð ¡!&ÿ¡î B ÿÆF¡N!Vá6¡¯œ`áGX¡~!†¡b!·ì_³ˆ!¦¡®¡ ’¡ß™!ݱ¡Î!"¡:_ÿ !ü‘Dö¡þa Þ!jáêáA""&b "^ æaH(¢$N¢2" f n EP"'v¢Z¢!Và"Gx¢)ž"‚â(ºß%bb ¢",Æâ ªb!Ö"º¢DÈ¢.îâ Òâ-^ &fâ&ò"1¢/#.êÞ a16£'c ®bþiŠ3V#%B£0z 2&ãCX£7&"6jc4Úâ/:Ä7ž£†#7 _#:b’â6c<²ÿc+*c=Òã=®#>J£(ò£;¶cÝ-#+æ£BA$B&¤B.$C6¤C>$DF¤DN$EV¤E^$Ff¤Fn$Gv¤G^ä3|¤HŽ$I–¤Iž$J¦¤J®¤E†$K¾$LƤLÎ$MÖäJº¤Mæ¤Nî$Oö¤Ov$Nþ¤P%Q¥Q¢dP¥R.%S6åR&¥SF¥TN%U¦$TV%Vf¥VneC^%W~%X†åSŠ%Y–¥Yú¤Wž¥Z®%[ŠdZ¶%\Æ¥\>ä[Î¥]Þ%\Ö%^î%_†¥^ö%`æTþ¥`¦a%a¦b.fN&&c>&dÞd?’ã8–ã>Rf6ŠcfÚ#Aÿ Á|&h†¦hŽ&i–¦iž&jî‹ÁÂÍȸfɰ¦Ã´&l mÎ&næ&Íèæn†Lm>×ÅȦoÞ&oÊ„p-Äq"çorDr*DsÞŽpö¦tN§q.'sZ§Ì`çGP Ò`Op§L€'Kˆ§JgyzgÕ gÉ­'{¶§ƒéUá¸MÎ9×ÈàMßü 0‘Ä“½ ‹éVY •}Žå€Î~VÖõV|ªèÐã¸îŽªÄãŒNæ¤Ñå D¨m†:„çüíØîH“Ýpj]ÛTŽÜ(ó¨„úÐôP¤eÄ_5މºhÛHB;<ÏòhÖEðhôÄhùœDl­‹ò`ÿe…õ€¶¨K¹ûPOc½•£h1’baÐU‘(¥Õèçuÿ0á–(íI(ˆú ¥THL(ÒQ!×G,R¥)‡yRÍ JÝP½RnL”‘JLÓÔ›ŠÅ-áÑ *U•UÍë R)Ä­U¢¶Öœ.Ô©U ÐŒîÓ U’))©$¬W -M'eEQ”ùj7Õ%5OªÅýp’|öL-i­ªÔkU8èDÜÏ01”1Ó@¤,ùèV5L2T%ÓÈÔÙ6)Ö^Ü®ÚéUÙP -ÒÒ@«@ùiÜy>„7)O·ÂЛŽë¡6ÿB+¥«C,R&«k²2K5”l ³“±fNÂL”šQ+M%ÎHu›žé(1ê¸6¬§rÄÝHÁ…~ÕŸvÓ»þPÅ^SCh,IäSÇŽÓ+-Ò…,+ùÓT=ÏllK,ŬºòU´þ®æ•JìØIÔa©Ð\UK°êY1·fd1)mHÀцŽÑêú$mZ­©ÔÓ’«D¨OÒNÕŠÅý¤Ö1V©¶Ͷhݬ•î‘dÅÔ>üOpu »$Înm¸êQÚ^D9=ÛqŽãämyîm¢ö­HTÝ2h Ý–áºÔImUo©Ë@¤yÝéÿ˜þh ÛBHLœ—%!ù,‚=Hj‡ 000>[|IIIVVVDLdnnnLjŒMx¨g|™}nŽxzˆxw˜k}¢Y‚®i‚Ÿ|‚yƒ”i…©fвm¶y†§rްz—¹ži8¡k:™c_Šu~–~j—{x½[K¬|\ºM¶|T©k{§yf½dh·iv´|k»r}Áj1Îs1Ü|6ìz/ìy9ò}'ð|2Ü[[Ô^aÊnJÎf[Ê|OÅ{XÜkOÛfV×xJÖxUÈciÅksÆvgËryØdfÖmpÞreÙwxãWVèfIåfWêyIèwVägeåopæsfäyx†n‹‡u‡…{˜—m„—u‹™~”¤l€©w‰¤}‘µy†Ì|ƒå€y˜†x¾‚I·‚W«ˆh®‰xªzµŒg±Œr¸”sÞƒ.Öƒ:ë€ô…ê…'æ‡6óˆ(ñ‰5ò‘:È…GĉTË‘YÓ‰GØŽRÛ‘MÕ“WÍgÆxÔ†gÚ€zÔ˜gÚ’{Ϥ}ߣjاxìˆGë†Wç–Kè™VñŒDñ–GðœUè„iå‚{ê™hé—wí \ð [è¢eíªuî±|ñ§gð«pú³w‡‡‡†…•–‡‰›…šœ’Œ–••‰‰¦‡–©ƒš¹—Š¢œ–ªœ±‰¡»›¦¸¨€€§†™£’„¡œ™º€Œº‰•¸œ„°™¨¢ Ÿº¡Œ¹¨™§§§«§·§±½¸¨¤±¬¼¾±¥¶¶¶ˆ£Â˜­Å±Ç¤®Â¨¹Ë´¼É±¿ÐºÁɺÇÔÈ‚‰Ê‹“Êœ‚È‘˜Ø†‡Ú‘ØšÔ•–Êš£É¥ŽÆ®™Î²š×¬ƒÒ®Ö±Ò´˜Îª©Ë«³Ì»©Êµ¸×§§Ø»¨Ü¸¸å„ƒåæ–Šå™™ð›œê§‡å¤í¶†ì¼”ö¯’úºƒå¥¥é»¤å¸·ò¬«õ»ªó´´Ç»ÄÑ´ëÁûƘêŦé̵éмûɨñÀ¾ùѬúÙºÇÇÇÄÌ×ËÒÚÝÂÄÞÏÑÛÛÛÛÞáÞàâåÄÄäÏÐç×ÈæÛØõÆÅø×ÉõÖÖåßàåàÛþåÍúéÙäääïïð÷ééøóîþþþÿÿ H° ÁƒÛ¬wN‚ûö Œ˜ð¡Å‹1j4¨p£G?z )#É’O¢|¨r¥K$õ-JDÓƈqf|É’gOŸ[ý'ÔgQžG‘]”àLpæf’»‰SâN¦ ±^ešôeו_Q†«U«ÕþÌÕhîÜF~ü –xëX‘wñÎÍ;r.Q¿KÏêk+0­9—u±&^ÊwccÇ{#KV\µ²åË–ÑáœW¨8|á !ÂLºªæÒ¨QŸ® ô±I¿®/ÆN »lêÛ¦«RëÌ[îË«ÿ®Óèd­³"¯mVxjââ%šæÛyn븉S4^6¹r»ÇÁ7ÿÇŽY;éyÂÍ“Ï|¹ux®ï‡zG8â>tøóëßÏ¿¿ÿþÄð±xügà&xZ; 6èàƒF(á„Vhá…f¨á†vè!…t­‘<âȃÏ}©‰ÓY"Qs›z"âdž{Ý1·\ñùãn2ÏjódóÌ5ñTuˆgûàÃbu¥Á#Š–Ñx#ŽSŠG%S"†6ݑӜ63`‚ ODø’NÓ ©Ú“¤ÍÈ]•VÆ _Ž<‰È"zû RÈ1]ÃÌ3ðd&žwF¤'“m²Y^{oÊ9'œŒÙˆ%yežQšÄD&NÏ03æ>ZNÃ勊ǨRW:*¶Þ‘â$ÿÉ"Ÿû Ú§§8ñXˆ¤–Z™›¨BiªÃ ”ˆ*šYȇs¢Ÿ€ Ê ž#–xb¯¾ÊxªW¬«ª”Âêˆ,‹øQȉˆ“MF$f6i«uÄ9d‘"Ë­±«òÛ꣓Æ(OgˆÜQHI$Ü®8~˜á°áÐ[Õ—a⺞¾.ÕWÆw›±¤®îXÈ7÷ "D‚`fÉ„ƒˆhP›]UÐj+yƒåñÇþzûmO¦9Î>Ã!DaˆgàùÄÎws§Ÿb—3Y=û\ìÏÿûänÔíAÄÑ„&ÈÒMGDÀ´“^US[lõ¶<‡ .ÀxçíuŒóÿkFE0#E q†…„seLr,ÃÑü§ÍÓ^L·ÎYïk·Ö[‡Ì7"Oû! 3I !gŒ1†dñ†)\ÎÌ›U,7NòP3Í72›e×wë|¿™£äë<|ˆ6H,°ðG¹“±‡™±Ìk£ÅIªGƒ9ÚaÞõ#1z,2ñ>¬3¼¼Ô²ôP@ÿà©{ÄÃ4æE±gðLh$!÷ÁW.t “˜\9*Z¼î¬´L­«HØ´’5óƒøS6¨¥%qˆƒEŸÅ [SIYËD5/Å„;–ZºžV/Ńnt_Â&¡ÝG… Ó3ð”&qÉzˆFjædT­2ùŒH+dÇ^¤º·¹Îý(|ã둈(è@ÁØCÐQ‡!ÌÈ‚z0‡bàa˜~0„!Ã?±8Å)bq Øå‡€Å…ÿ‘ùøÇ@²‡Ld ‡ˆo,Jካk°«]̈Æò Ø#¦Uyiì£ó¦w½ u°S!f…¿f×¶¯‚3?ðá -4—VG"´à òèoD8V°"•}—8™Vh9¹]Ò*d­µ}ëùº\6ÏEøJ~" ºI΀ˆšïÜhGƒøçRÀ¡‘å}&‹“MQìä}–,Ó|µªÜàVo9ËIšj< fØ6;3j?èŽG:F$Ø .|E5 ÝÿMØuAêg-Íw Á‡g®\ðv}4d`þí^[Š,ÚÍ`©^ZfÓH„t:(Žv“¿Ø,Ü@2ÓP,KOyDÌÉV©_&Y‰˜žéÅœúƒœž#y |õ_’³/M‰Àyÿ#gYš[òæöÛ‡<ÂÁ‰I°Gä7ÃÉe[XíÃKº¾Ö BuI³&YçwO…‰Ð0dvh0~Fãþ…‡”{t‘ ˆ@iÐ_ç%üæo–!\Îw=tB×^¨g!Bsÿ€ãeRh`¹w8µv•G²"ò @ÏcŒÀe@G›tU×Q*ù‡ùg‚Û‡‚NØ+Øz¸Æ}Ó…z’3hðudÒG‰4"»våbsîvz0é aÀ{€Ó (â0 ~*f2 É#w&€á`Ô'RSØ„ûGˆUX³>3h„·}¼ÿá]ÐÃ4ÀDf@7À20´``аÐXxƒ«1{wiÂþÃ#{À+úç‡8WØ…«n³hDç‘{òBôÃNÊÒD;G{ßà0^@E1ð¦àc¾Ñ@¢¸|bÒ|©Ñ]£+$¢D°hˆGˆ‚¨}…èŠTˆZŠBÞ`( ƒÓp8fàÓÐc “À) | 0³>4x~T¥X%èOä׊€÷w,H‹/ׂ„‰pˆ`€ûP;·:cÐ0Ž€ÿÿ`dð0~^§‘z¨Ñµ€ý7fæØˆ’)™fõUxÐ{ËÒBß h :cÿ·$P9àÿ©‘«sƒPÂ|ïfâ]àõLØ)µxpNé’¥ˆÄ…›áˆOƒ38Œse@d©? ”ÿ@ €õFUYB’0 “ø2’¸$w}÷”W‡u©‚{‰¦>ajU^¸Œ`IaÀi°g‰–‚P‘…ÈP1OÆX´ö|v8X&yS)…ƒšQ)•àȼW H~Jb.l€éYG] “™h 0 Uñ[Ñrr_…es’¢ •¥É*¹’‘ $[m vÙà E0ûÐWà0…Ge™ð߉‘‘ÿ”à ”J8qrŸB5–CœÇiœ.HzٗևͩO™·(?5H ÖÙBÓ°Z0 ¶‰›áù“€±ã ©„'첞·5¶†—ßH¡'˜œ¤¹pº˜šîTQ'…£ ŒGÁpYKí€z ˜Ð }å ““ ÀI9ئrM‰¡z¡9š¡ñi‹—a~Ù$ JC€VÀp¤yð™à §p–€–1 ±PO0`’™b’/Ê’£É£óÙ’^zO¤a•_Ø$É0©0;ÎÐb9Ðð!@<;Þí¥‘  € SÀN0Ï—ì"—U±~ပßÿš8:¦È¹£ ©ø$±@ Ð0'—žÊ¡° À¼ p‘ÿ€‘€–p0LP¦`XÏx”¼Q|S稒ګ¾Zœª÷ž•*"9u–Nà©ÏÐN`H@ V0ªTÐ ù‘  ¥0 € P:V+F0Q¥¨"‰ ;ñœ ”š—|)¦Â¬aa;v ±`”€Å 9è `:{Ð 0$ ðp­§°ª°ÐN° ù¨ôbú ¼€'6 ø1 V¯úÑcEV²&{²(›²%›O’à :pí` Kÿ 6à °*@€° ÀL­ÿ ”ð.È@«žø©Qþ¸«ì ¬îú¦Ù®SûŠ–qF­ ê`/ÚC퀯êà±0<à[ž* À" i0CÕ3M£   @ —0ÌQéð =Ðí¢|¡q=¨'ž™m¼jµ:ú«ñZ¡ŠKxUá˜;” ³™8‘ [v”ð[¤ƒW ¸ài€ݪeÓði`°e• Ù€9ð·I |òÖ#«i{QÛ¸‹û¸`ú®ðª¡8áeQ ÁY£è@ ­@ ­à6ç,ò  i à ºM†  Àÿ  0 ´¬p§à˜P @ ¡P TÀ ÎçlŠð ½ë»7еÔi!‹=ZµÂ{ˆU‘`ûÀ: \ì¹®•¡"|`C‚à8Ü{Áð±Ò™¤«† ¬¤·cr•°8Ó¥ö‹üË¿ý+ŸÄ Àáf&ŒÀz„—tZp  ÜK %xÁ¿ Á¬¦£ðS!¬|…&ûuT}g!f'œ}ð¦Å{—¼ÊK£ˆKàÔ àí qäK }eo”ðíû¾ñ+uY5r6ªNü„þWʼnÇ+ü¥§Y|µe•{¹]„ê0aÆ©6 ~ÿ€s~Ð œ+QбŠIÉ«:ŸÐ ±à'Fµ@@€ƒÀ;kbý°p)HQì¿yÌÂÀ ¹U¡Z[Û^[£ŸYî°`¬°h‡€Žgp±@:à©9à ° ¼` •À¹' F/à©60EСëšÄå`§|&ÌÊ­ÌÇ<©-ÌpÖ gØ€ yp"ãä !¹Ã <'ð/z0/\„¸YEô𠨋*¼ÇSìÐí—3G‚pØÔ@j@À–°¹Æì6B ³`/prE ÐTƒvHÊ8ØRAÌÀ ÁÿûÊÊiÓäŒÓ}limÑÎC°ÑL ëLG@ÒÌ@ ¶Û-69P û0j¼WGÈžÿ`Ì  5ý¿®ΑʸÆëk¿á¼ÐÛÔÀÎgàf%ÐP$À½$Ìp› úQ/ÐEP6° çˆîsj‡ƒ5ŠòÓ3ÝÕ`ÖR븓½uŠB ®€ ©†q»eíÐË8÷Ë_b0à©NP[k@à©Sp»C Íþ׼ȣ!£v[ù™½U2ÝÍÃKµ_MÅâ<ÎT)"ZfÖSí;´ð²~Ø )’„*»«­S`h#Ö/Þÿýݲm‡à? c.É‚ÁÁVåPö@Ù^=Ü:MÜò]Î"²j»| ç»Ù—ÁJ0˜tE•ñ%”•@:€JÆ :à¥#lÑBð H`ÄV½åâPBW/×ÐÞÆËÐz ÑWËá^Ÿ1rLÔ¼I]BÌ û ÉPîw^Å ¹PPpù0öd¦C &Ç û,6x"Gâé &å@.ÑßLŸôÎþáü÷$Ç4;èÀߥñ˜T RÀ Ê71"kQ xçÏFÐi îàÔ £>®~a˜ßp…'$Jl½=¯Oœ«Ìä ßñ½œObß´€ß„ꀩšÿš ºÐØ—ÅÀ” Ë~m¯ ÞAá>1zƒŸé'…ô2MÓmÇ)âMÎçãäJŽo´h¿qÜɹh„Ì­ TP¡0;è4v`Ê j¯Ð ¼Ð ²‹Éû° ìòÝBðÝ'mÎà w8tH-«ÕZÍÕÖÇ VŬÜ’ýç•MRí`ȇ¬ß¸Ùšµ“kÈ À¶=wð@‹YG_@ ÖäÚîÒ ˜ ïð x·<Ï [ÍÖ<Þˆ Ó¢þØ¯Ø §·ç êOñ“B ^ì¼0n3œ•U°0Þ ›Pàò,ÐÊ  k;>àQÿàí¢´3«v0ÿ-féz &¶wÐ -âÿ@\n…ô¨Þç~nÅïÆ`ÖÅêÎÄùtLk›´`»íbï㸤80ŸpS€¥I|XÒR Î.CPµ ðF€]ƒ‚PBX²Í¥žÊLÑâÎ÷J¿ôQÆ.õsã°VÏéÀJQ ptÀÁ¾“ ªL0c_öîrNÆÝí"ll€ ó`éùEL¾ýŠÑñzîÜOîÞV¼]|±Æb\øo?® ò  ”Pz;ÊÀk  ™ °¶ Àɸ?š=0ð+Í7 ÎÍCçd«uÿÏ®:aô+'ñ€¯Ê¬ÿ÷zµ…|È0õLüÇïÊÿ¦°^xj ª\ÀÔ  0QObí#X–­=xL‘ô"Ȉ‡È!Ö³kÑäøÏãÇClWrŸG‚ÛdÙÒåK+aΤ³æM—2qîü§“'NŸ?gt×ê«t•.]º‘é;X­`ÅjEIB… (¹»&Ç'×h½jÀ „ .ÀâëQ:¨ñÔ#ÈÝ»BlÜ`³&FL[*Y²]Ê”6…Þ ºfcÇ-!G9™²ÊË/™næ¬Ôiç}î0­MgÔ3fÈ,0É•­]Ú B1¼ÿ@‹ ­ '€Ñ±‰ŠàÌ’$±aã97~0Ëx)ËÄ"÷™,xsæœØ_Z¾Ì²÷ïÚ¡ƒ&_0Û5^ÍA§»Ðªà… Ìàíkµº%XOícæé‚+‚\¹fžI¨àž!ț⮮AŽ>ë¤ÄF©º’*%ð"ëp±… QÄ GBçDSTqEyÙm7^XL (Añ‚€(Y&ɯ'ž°àt€˜ÂLNÄČ»‚è!—)br¹U$É00ÃsL2Ë4óL4ÓTsM6ÛtóM8ÑD©<Ðþ’¯ÔÔÛÌJH3 5x.¢™vú‹m6ÿIj»í‚)ŒèAîJžglÀoð`Ï£1POšî¤9­+±§S¯;uDžXm5U:Asp>t.ʨ3ö²º“v®™Â '¦¸õ¢'šA„GØ*r(!‡› ˆáØ(ƒ l÷8DçãÐ0R/¬°º Åsu§sKÕuÓ¥)ÖÎfݧVÀ@k'*XÞÙ‡•úm€•‚æIâQ€6x€à¡[€€á…¢6‰2Ìãâ‹Í‡ EúÖ¤Oõð0‘µs·¦“gJù±uÙ-^Îì„Oæ`†Å `e”ý+—@ó|5f¨}&—^.é\ž‚4,ÎxŒÿ3¦I䎽ý(ºrdz©ëÌVf9U±³kV˜7so…—’ž º™‚,† ‹’@íšg’ Ö®!ú6â[ÂBˆ?ÌPÜŒÄÇð£= ÉÚã­92Õ¥ÄV»»–Ë–ìlÐ_N{³óÒneç®›™»÷¹èfæ!¨ïg€x¿{€¡ðÃÿÃŒ3·øyˆ)¤Ù)‰äQ‡"isÎC/Ñs;G{ôÍ:ŽõæœwŽ{ŸŸƒŽ™‚fíE¨Ð½]œ†c3и˜[t¦)„Ûy²y†ž~T"dç]nCÔ«Ù¤7½ëщ®p…m˜¢½X±Ât+ÎsóH8ÃIÂÿ5àqá¤":ÐÁJ1½% 064ȇ(„<ö14f”ƒÏX¹Ô5ž’‘è€æ"O/Xèj-ÄžÜ(A X¬moÅpP sE(¨¥%@žñŒlt#- ø@ç‡DPã…H>þòŒyôƒÌ ‡¸š‡2 B(Ö3`ý¸¡Xá)´`…¢:ÕDóê"¬›Gž(ufl¢Oè,(Q‰u$¯L`€)nÑ%l@à —m>ÿ°3´q!Xâ±r¢Ò£,ÿ8À"š, q C"ròr3xq¹8ûÈJ.ÈŠ(˜nb¬Ä>ÿaˆ´ìÃ~ß1’ç æü£ÌàF©j©¡Ê¥Ó1Dçªr‰vÚ±3½${€!a®n>Å šÈÒ£ŽòÜã,cÉÑwFϣਬ`Òé‚êqGT>¡AŒld‘D˳tЃäb¶Â‡/°,ay`CPÁ7^ă#âFÿæä¿ ~.dç¤I<³T&520[`³/)b„Oºª.0øÓÿyð-ÙðÛC¦à‰ÝÈ™‰øF0‚0” £Ý’@ }®M‡å´PH¨Ó×Áð¶‚õmkÒ|v‹<)E%Ú“Ž$bÂS KAh®v5‚øCàeÁÂÈ ¦ ^ &€’#3,ŠêÔÒ¯~uY`k^@æV·²’Þ˜•‚%)?(`ú¦·¢Q #œ „‚üP&<áz(C$.€UÊ‹•ät-˜. .½ž¤Ö¥m…¢ÞõÆ«½Å„o€. ârÄV®órõöXþf e`€€óp#X> ne9§ãàC¸èå±)\aÑa‚¤Sdo›Ä­„ÿ8`Ž|†ÑöIiüA€8Dt§[Ýëf7v2ën=zò?0‹*C;žðÃfa¤Y½CV[‰;ØŽÑèj¾ô%È<šì(ô dªû˜G"ü°83a´l(íi7¬ZzÜŠ:bÚZPÆÛÑÙÌ”Á°’Ës\je*Ra™„ 8 L¸@%ˆ| ~`®øŒRÄ®r5Ï5è!0fÌ_.कixBZ<•¦sŠ\³Ã–ÏRʳ¦ÀÉO9òèé>¨ˆ¨òóà‡˜M‚ÑãXUÀ6SËmîË›ÍK!戓MOa J  ÷^C…8„dQŸæïÿq¨ß¸A‹~L¤ wcæŸ<Ý”®ôº•Òîz1± ÀIÂ#.Фzß;ßòhn ˜ˆ3(‚ÏDCm:bqqƒIèߘŒarŸyâáøNÔ+Þ"[ã|¾bž°–€¨N6桇3øá}8C4†Y xð"€˜€ŒypÃÙ8l’ÛÇ9ÿ5Ú…ŒØS»mèüÁËÃ^P‡0Ûa†òЇ?‚÷ÎÐrñHÀ M¨ÀÊÜ1åõsÊsŒå$¯s_ßv畯8ÌöÜ ÝÙC¸KŠ@z,áY@†ß¿‘ÔÀiB ˜sÝbWÿ˜._­-¦B,sñ×ÎvοØJnä—„Cb2ÈA(jу(P"8Ç•ý´lÑ„´t#07Ä^Gß3†á²ÕL¸ˆ|øKùÂïüòé{¾Ýå/FhöyŒÀ @.á@®yX¶$à@‹T 'H‹là†Wú2 Q¿º0÷û=žË¼uR»t›—.ù@ AA^à…»Ø»PšÑs‚F‚\Ð:t^˜‚(üh€G˜8 B!B",B#<Â!œå[¾Ï,š!0$XA‡èI &Œ¢aTH«¸€ €MØ»’À£@¢º°0ÿÊK³ùsÃ7ü‰Ÿ³¿ÐK!áȇHšÈ)Hxp3$8j‡ç; ¬¸*@ z†~h¸×ê+Ë›ˆ[ ÍY?J„Ãø;7 ´À%œC¼q>#ÐÁBºˆ ^ 1à‚"0%>À‹ xMp…^(8š£æð½sºÄ;j-žH‰KôEöÛŽžË¨b¼ PLF´Û)&XP‹<9„"@gøÒë ¸ Ji/V꯳Ž6ܱqÁ@Ì9‰`<Ç ŒÃˆãÀÌHÆú#í"ˆ´Xf’È…iD&kJf¨‚k¸ l˜—e»p: z„lÇõSº+9|ž‡”Hÿ‹<;w|•c¬ yüÄz܇{,ÈD.L„DðP ‚$˜‡ Ú{(‡@ø®0¹Hœó”‰$%œçÀHã“¿ ŒÇyTF¬Ë†´„^и"§«ÆÓ3‚A =äêÆ ˜;Ñ!õˆ<ñÊ#tÌÄ¿êÉpᚢêD!Ú<úûDaÚ3 a)Ô Nb%8¡(–#=VÔX„É‚h2n°‡/ù6q‹­÷KG6$ ËáH„H´ÔÄMì@µl¢Äº†Ž8 òh‚¸"(=˜¼)1¼ˆXT| mÐfÈ1F3LžtÊá¥(L Y4Ú쵌4ÆÆœÈÈ kÿ¦ØÂhè(lø7q`)Ê’”•D®\xˆÈš–‰Ò† ('® "‘`˜hé`Ã˹Íût,/qi»Çļ–‰Gì˜É„›Ixˆ-ש«z0‡møK}0‡zèúx9n(‡Ô¬«}€À™Ô†„ã–T8›ÌñEÉàIP©M†Û5%l´0ÃÈŸÜÀÝ<ËôL·õä£y` ~øˆyÑ| ÏººÏ|`¥}à‡‡:JÍï‚@92P@ÐÕL?Ærl0oጛK±üQÜ$KÍËMÝìÐvŒŒqz{°‡¡Y†ˆü‡eX†g¨â,‚rX„Dð²+¥^X†l Î §|4‚ÿ~@P#¹e³Î\+Gr‘<м±±ìˆÈƒ%AR[*—aĹ¡äD&ÕÐÌà†S㟗e# ø”‡˜PÔ0‚dHàØË¡:MHZžôk?âëNÖŠ…ËvdÍñt?MU³1KTÇt {9‹JÔ±ìf€rpð2”;mà†uÀR{ø4 hȘ¹$`-Õ1Æœ¥¥ÌœÐ5p»Óq¼° Ë UôTRX·âÛÖØªÐì/Áì[¥¥ÀtÖi½É=­HÙlàÈÖwÜÐzýVn5OzõJ‰|ÍíÈ5Ž´Õtz-=‚Ä1 ÒÃÆ’‰§éØH Ä×% TœˆMÿRñ×iÀí¤H‹ŒPœ,•R½SkM§SW¢VX‰…رqUdôÑß+;ðtY‰ìNL\U5ÒÖâÓ®! ™õÖ‡UY[òÙíÌLÒöûššY;íˆác×v q%ÏŒÅÀI<ÙŸÊö³Z¬Tx·†s?§õT9Ç’Ñ޽YR]8h ¢ ¾Á8W­-´tÛA•8íhp³MZªÐŒí‰aâÝœà²ëµÞn_ǽßòâNäUÜïXåå[¹Úæš"Zÿ”MÛÆbÈüáù­àÑ¥Óè 5\WÛUÌ¥àà+ǶÝ×h…Ìñ˜W-fá_ì^†mXûMcÃÌZ“µXš5ì| Ýáþ•V©ÍÚw©XŠ£Ø^Ì_4ÆÍ”mÒólÞ3ÔÎ<:“ÃTG$]^r ]Ö-du…%-áOâ­åÚ[ö9°ÛHV¸Àô!ú=[ýÿåQ¶b ÉðªÜZ&Ù\ÞÞn¥¿b6_‚° e¶ÜË]žF3ægFfŽefnæKÆåo&ÔÁšPKt^\JîY> boófsnYr•Y)Ž[–Uäz†æO¡ÍÙd×G†äõû¶[èr1Zg^dÔgfT%gÿ[îgeè0`ß:6XñŒV]Ëãï·5¤g~ÕÞ¾BhAþÓ}åcFç V\î˜S1›ç|ÖÓ²SáÍí!Êõå^èÃÕbwÉ^2“h6Žæ–Î×p{0ë Æ]˦æ]ÃéÞ妦cÅ´abä<&¯£~ÕPvé‹>ØÐÕà‘Ñ §va¨Ö ©Nتæ5öé’­ žár&ê‰6êsf\;µäj–ŽVÖœäc™p`uÊœV>^ê,–ëtã»¶k–Îk¯k¾ä¦Å(ŽêIü¶½òa‘_IÎdœmÐt–×q…ìÖ߯mãå`Ì-[3Ö5Øî´Çíňí8FäÒ®àÿ¨EãȦè$ýjX®âŸf¿½^c ,H‹çZþm¼~îŠNnâŽëTµÝFf×ê(›%gçŽn°–lÚ‰®Þ¡UåëÖÜ‹Òî„åîÔ]ážìMžîÍ­né¥8å–æþäî¶hàþî£ULÛ^Û_ôßä#ìÜÖÈ"%êý×þJ݆àf߉|lÞÓVðöÎê}nèÿÆðô’ï[^ßavo»Vìþöoèæï*-q8î@ÔP©È1>q_q÷nÆuPÆF»Ìßf’Fíâåg‡oîMUñz&q·ñ!Ïñ#wðÕ~ã¢N¾ N·ÞýåUÍ+®oïp“Vñ sÿ5 ©,Oð½b[(¿r)s2‡ó8gð6äâ^Ø6r:s#—óŸó §f]ÞêéybC?tDOtE_ôC/r3ÿsHGrôB¾^­•M=goGt*oðNçó+ÖØ´›/OqIŸò0ïSßó–]}vl¸ÖðM7aOïs?ÿôóýÑ3ÎóºFõT¯uvNWXs|]pJ_õdWöHßXÉÛõþ^o~æ—þŠ_þé×tß¿~á×þí¯þî÷þç_}î—ý¨~ò?ô×|è¯}ç/ÿØ/|Ãüõ?~r—{ðwâÍþû‡ÿâþˆØ® „ \èð!ĈJ¬ø¢E‰3>ÜÈq¡Ç CŠ,H²äÀ“( ®lQ%J˜1]2¤‰PfIœuräÙÓ&P“AS%ZÔ§E¤I‹^dª´âS¦ J ÑjǪTj•J«C°a·;•+Ú´^Wš­I6hÛ›]˾…»Öe\¡umæ8×®ZÀwgÚÿ×(ݽ_/L8qáÆ'fŒ×ñcÁ”ùZny˜edɘ†¾\šíßʧQÞÙ™õfÑšUÇ–ÝZãëÌ´gïîÍ9÷m¹«uÿ®mÚ8läÁÝ*'nû9tÏÀE~æ]úpê©‹[¿¾\xóœÓIgw]Þü÷—ãÉwÇ~>cõêMÓ«ýRüPõïÊè?€ 8 x ‚ *¸ ƒ :ø „J8!…Z`QŒ0¥á†f(‡C…Ôˆ$ÒQ‰6¥¨¢‡"‚Ø¢‰0ž¨ÐŠ.Õh£Œ,æHÓ+õèãŒýXÒDîˆã‘-ùÑ’Lé:LE)%•EMie•C]©å“]zÿù%˜aŠ9&™ešyfB Ö*°Ê?û@@$-µù¦@‘¨¹J«”bМþSÊží¢À':nÂùÑ¢­)МMä§@rÀ!¡‘rtè@‰ P£xÂ'ª@òùO¥LºyP£›¦ZèBŒ¼:P)uZ #¬´¹ð¢èð¨HÀ »O)”š¬p(í*´cì*ÑrIPêl¢ÿI$¬Z:˜;#D™(:èZ‘œÒ ¤h;”‚­¶që-« £¨¸ä®kQÄ«ð±ÚÂ+oF½¦ë+ŒÄ ¿¾Ò®Æí0ª±€#‹^ ¬@%Çÿ4¬¸íð'ʆF«a¾”–<ª¸çJd+ÀD ì*€¬DÙ¯³9J@Fõjì>í´#'ÎWij@hhkÐ÷‘ÆV õÒ ¨µ°öØ -к ºvÖ_› @ Pó?m®”7Þÿ$­´HhØõ?‘*²Rˆg:ÀŠS:¯E;ësÌ|›M3x[û2ã!^mÞ«HÎ*åPÉ ºà!_¤1Gýþƒ-ë#?ä°ÙþúÏ(Í w³é^Rµè`;8ì°âµë\4À‰œ8Îos´îœí PJæÑ[døEØ/.øó!žp½§[ÿý¸» ê,ËÚsT ðÿ¹Áº/rù¸Ö¿±Ú¡'ü½+tkË(õêOóÍ4F'ð‰ë#ˆëUC7´¬ËVùƒßA¥¼ð¥lmbYF·®}@ƒv{Èìg3¸+„L³H³®”°Pp!9$•›ò¦¸ÿÈN$ÆRœ¯ ×.¬±\èX…´vX &¬]¬X -°n™P\kK^åtÖ»h•ë…¡âÙŽe,FdQtBZ?VĈ‹mûÂ"ÓÈx¬Œ@n cÛ*ÖØÆ4ùq º3ÖÚú—‘tyjmf´H¶–* oJT›R$©#¨Õ©k‹J‰¸WBA‰Î’ŽžáCÊ’qÈ““²È¡ÿ§LŽr[jG€¢DK…D"@)yÔ#Ñ$Ìa³˜Æ<&2“©Ìe2³™Î|&4£)ÍiR³šÖ¼&6³©Ím&$[ 97Ã)Îô81k(':Óy—rîŽelŒÜäΦ)Syp–Г§ÞY'ozòOàÓè<Ù&Eª³ h*—š¢5,u o£ê?–79yÎ]åòœ¯êÐjE‚~öûX»z¬juŽ =é˜. ÑaNp,µCKÁ½Îµƒ~÷Ô_þŒ¥±‰Ê±sÇsWµÞ4=”U˜ìÌ_Í)®Ò¯s#[éÇÊŧ25Äjh»ÔÅ•mEýj™ŽúR¸±´z‘pY°'ÿ't”ëO°VK;÷v¥Mo.SîŠÖ½ŠI¬s]i†š·äÍ“eëJ}E×ÎuR®ù«“Jƒ¥W¾R¶Kè`Īx5Ië1âQT“ä Ö¥¶*°k[å>1‹ÊÜ]Dµ•}m4¥ ÛÙ‚µ0)ms«ÛÝò¶·¾ý-pƒ+Üá·¸Æ=.r“«Üå2·¹Î}.t£+ÝéR·ºÖ½.v³«Ýír·»Þý.xÃ+Þñ’·¼æ=/zÓ«ÞkJ­½î}/|ã+ßùÒ·¾ö½/~ó«ßýò·¿þý/€,à»>0‚¬à3¸Á~0„#,a³"9¾áÎ…‹L¸Ãþ0ˆCLa ÿc8Ãîiω]"⳸ٰs4Œâ§ØÄ"q1Žs¬cÀX<öÉφÙ3cŽì¸ÈF~1‰½Cã$ËØÆ92”£ÌàkçÇý ò}øã)s™ËTFÏ}Œe "]>ó‘¿,ä³¹ÉJ3MÐ,g«9Ëe¾r˜ÁœçŠÌ¹Ï-®3™¼äAÃyÏñ3¢C h< ºÐm®ñ£oœèIOxѸ±ò¥ï\L/„Òž†°¥7mh;šÑæð§S½àP_EË¢>õš#ýdUÓúÀ¬Î §[뱸Z!µþõ­y­éWËÚÑÅÎȯkì³ [×Íö³’lZ/{$½Æu´­}íÁÄgÿ;oÖ3¬Inqƒ©ÛÛÖv¶Ñ]êL§{ cx7¼ã-ïyÓ»Þö¾7¾ó­ï}ó»ßþÞw"Ú­œ&ÿ>8®ð…3á_7±¿ î•4¼â¿8Æ3þî‡ÛÔ5J4.ò‘“¼ä'8b ñ›¼å.y¿9~쉻ùã9Îs®ó1ÈÜæ¯9ÐE²ó¡]ä=:¡«¼k„½éN_øÑ!tcûü!O¿:ÖŽrÐlëÏ:ØÃï¨3Yêf?ûGÄ®v°“=é4G»Û+²ö¹?½íT‡»Ò N÷½Ýîyï8»U®¾>ç~{Ù¯x޾ñ.?<ÈñŽøÅgÄñ–ÿ'9äÉ]õ•O½ò—ÿ<Æ3è™G^òr=ê.úŸ›^ó›¹—®nÀžô®ï<}bßuÝ Ú´ç¼H‚ üá¿øÆ?>ò“¯üå3¿ùÎ>ô£/ýéS¿úÖ¿>öOˆd¿ûÞÿ>øÃ/þñ“¿üÓß>D̯þõ³¿ýî?üþ‡Ä¿þö¿?þóÿþù;Dÿþÿ? ÿ-Ä & ‚_*Ä> F _&Ä^ f`þU Bh ~ ŽD–  ž ô A  ¶  ªà@¸  Îà @Ð æ Úà?è þ`ò !ÖŸ!&aù¡6¡b>¡N¡öED@!ù,Z>nz‡ ///QQQ~EKnThnnnNlMx¨fsŠky—}nŽxz‰yx˜l}¢Y‚®h€œ}ƒ{‚’e…«fвm¶x‡¨sްv‘¯z—¹~À¾{<ˆKS‚hQ†w|–~j—{x¨VU±]Y·^d¬|\»~H¶|T­bn©l{§{e»ei·iv´|k»r}Û{5ìz/ìy9ò}'ð|2Ü[[Ô^aÎd^É|OÅzWÜkOÛfV×yJÖxUÇciÅksÆvgÊryØdfÔmqÞreÙwxãWVèfIåfWêzIèwVãgeåopæsfäxxˆnЇu‡…{˜—m…—u‹™~”¤l€©w‰¤}‘¶y†Ë|ƒå€y˜†x«ƒ]¾‚I·‚W«‡g®Švªz¶i²q¹•tÞƒ.Ö‚:ë€ô…ê…'æ‡6óˆ(ñ‰5ò‘:È…GĉTË‘YÓ‰GØŽRÛ‘MÕ“WÍgÆxÔ†gÚ€zÔ˜gÚ’{Ϥ}ߣjاxìˆGê…Wç–Kè™VðŒDñ–GðœUè„iä‚{ê™hé—wí \ð [è¢fíªuî±|ð¦gð«p‡‡‡†„–’–…‡›…šœ’‹•••‰‰¦‡–©ƒš¹—Š¢š˜©žœ²ˆ¡¼“¡¯š¥·¨€€§†™£’„¡œ™ºŒº‰•µ›„°™¨¢ Ÿ»¡Œ¸§™§§§©§¶¦±¾¹¨¥±¬¼¾²§¶¶¶ˆ¢À˜­Å±Ç¤®Â¨¹Ë´¼É±¿Ð¹ÀȺÇÔÈ‚‰ÊŒ“Êœ‚È‘˜Ø†‡Ú‘ØšÔ•–Êš£É¥ŽÅ­™Î²—׬ƒÒ®Ö±Ò´˜Î©ªË«³Ì»©Ê¶¸Ù¤¤×½§Ý·¸ä„ƒå斊噙꧇å¤í¶†ì¼”ú¼‡å¤¤éº£å¸·ñ¥¦ñ°¯ò¶¶É»ÄÑ´ëÁêŦé̵éмñÀ¿ùÒ¬ùÛ½ÇÇÇÄÌ×ËÒÚÝÃÆÞÏÑÛÛÛÛÞáÞàâåÄÄäÏÐç×ÈæÛØôÅÅöÒÌö××åßàåàÛþåÍôçÚåääïïðöëëóðíþþþÿÿ ü×n Áƒ*,¨°¡Cƒûž3G1ßCü fñ¢Ç„?Š$8r$Ã’O¢|¨reÖ.ÆtsæÁš69ìGQŸ¿zæÎ]ÜG”(Äœ C"5ˆ3gS§K>9•jT¦Wo,ʵ«×¯\Ñ•‡ÈÑyˆíÚ®mW±kãÊ% ·+Òª.ñæÍ:P/J¿ù’<øßÜÃa‹Ž+[”"|ˆ½ÖyrÑ»„—Ô,’sJÂ…¯zþÌ‘òܺhÃ'Ñ"Ó‰a#¶lªàÑq³Ì Z÷ËÞ[e¯| ‘qãò„\òWÌ·GŸN]´tÃÍs§ˆ‘µäÊ™gÿ/Ê:_ß4yWÏŠ>a{™¥Ç“<²xùåmŸ¿Î^ýzªm(à€h €t¡£à‚ 6èàƒ:ˆÌ~ü±G„f¨á†pèᇠ†(âˆ$–hâ‰(¦¨¢Jï¹\sòŒ#d÷)fœcˆ\sXÙågS‹Zù×ßQÙ×uÙgœ"ó ¶Í4ÙÄÕ"ªíƒcàÅÅcs>ZEäRFù¥yÖù×\kÞQi \ó@㦛ð…OZEYS¥\[†÷œ~CŽù£}–I]sŽÕ·Ï"ˆ,CT6ÐLÏ6nZ(Qˆf9œ|`uS˜qÚ) Eòª™ÂÍ©Qv"C”›EMMœû ÿiš;bú•¦{ùù§®›Š &’ÊQ9Ž•Ž)ºO¤‹¾Z”’ˆ0Y«­oí¹ë~ þÊk¯ÔªÜbi!"ˆ"Ë@ƨ£Bc(Q1Î8´ÑzE¦ Ù ¯¼Öj»­c‚‚ˆŒŒ³ÍH,áæ6v*2,l–Íód”=Jëe¼ôÖ±Ä£Ú £q‹èÈKtð8¤!râ ÌU›o*«§»|Îë2ÅC sÅòÎr†qD!Ú¸2#â,’Æç®[Ô¸"+®+yêih/¿õ´ÙÊg'9ûs|§ !i¨a¨ $›6™Ò®Â*Ó]›«Ì3ÇMuŸ5—%FAMk…€ÿ-6Q‡œAL;öq…¶Êk;Œ-ÜrÏóÄŽÓ<Þ<ø¦ÁÇÐŒóÇJ¨‘"â(r–`@Ke\!]nÑf+þ6ä-?.ûì±K>ù"dR 4KA„j˜aFgœ!‡*`ŽÑg¥ŒøX×XëÚÙU»Ô´_¯ýö‹Wmë<¸fÈ/¼ H¾"ŸáGZµ˜ÎüY KÙ·7Bv)Ë‘cßøÃ°çï¿~ìZŽBˆpChgø3ì´ Äâ}r¹" h'³ÜÏzÿã_ÿº75nÐBÇ<Æ!k¤ADñ0 uBÀãBÆ…§Ê”ëšV­ýq0{ä!©ÿlU—q¨a ‹¸ÆF' `€ lØêSC šJK;lãôD!ºm3À’>È.9!B FŠGtá {xÇ#A ÚP‡øÓ 3øCö±‹^ÌŽ;h W$b_ýJa¾È@4¨ÁoxC $?uÐŰFÉÚE”md#ÛS8¬qäÐ/-öÃ#õèÇîñ\de½šãŽK`Àl€£Æa¨qô ^˜!ú0‡áMðHÂÉ7üÁ‚óIÖ›²A¹ãTIÑ›ž²Æ/jqƒ®|¥½'Y8°øÂ&ÐÑíƒQ•À@; ¥#iи%þÿVPBw‚Ç4„@ÍrÁn2DYÈT.°äcDe ÈoŠómÍIÞ>ìd Ó-Æ‚®BÞ%:áø UB¨„ª„J0†QÐ8f£TBöCÖæÈ•XR´¢&é¡OÃ9Kå$ïŃéŠãNFeƒ¨x`.¢ T¥ªyGKË‚2x|ƒQƒUMošSDìt†J™¨Z×:ÎJÔ¢‚jŽ9c9Dr}Œ0Ê Ñ‹\èÂUärÓ%&ÁOTütÍÆrŽÕ±W!…XhCqúÐU²®ÅìP/Ô!ʦ›HÞ$Ð ²5lò,®jÔ<´¡%ìUÊdf$Ÿ¹„ÿNc9(ƒ©›¨™ˆ?Ä!8O/ÔÎøª•šÝlrØœwТrøCÆŒC=Ty«G„¡ÚqÉ=Xã`(›0v»O‚r ý¾`‰åU¶§Å%7;»Åø^äi'©ÛÍØ)C4jçBÓ8Æáá‚å±Ç¼­W暨nÂï%î[—;ánÖ·ÂÆõ¬r®¶œqpîMÓ0”Æ¡0iôs™<š¡¶®h”(±P^„kƒá Ïׯà$jÓVD¢q(BÅðÅЇ"ØÌ~`‡dìÁưƒ‚P„"$BµXÅ*j‘¡ä-è Å#D›ùÌhN³š×¬f¬hXÿ8ÕdÄæŽ0¬l,`Р† øÐÚ*+¡ª]jòLw;ÂÃ¥ñOÍh×Ç™Õ"¦æ(? b î]úÐ%!0€A ^·%´xÊ4 O–v\âS B%Ü›è´:ºÑ·æ,}/œëű F•Ð"A/€ÁС†"xP•á>p)‚¥MBð„pêÓps×nÅ5…u näJ:„ååÝŠ |$ÂØdSv 1êP²† …ŒQ]íµ¨NihUî¸É-ß·ÕÜþõYªÁ¹iÂw/P„ÈÔ% â qþІM¨£1îÄY²1 ¯ ÐÐÿ@BÉk-p óº×4¤ãŠntmNÓ/Ä<‚'ê"¼@ $tÍ<䡈7€bаËcßTde xVì³, óWÝåá&ø}È©ÉXCPÃõ•†áÁ0PƒÔ§hºV}ðqc±Çz {66{d'Œ v©qQMDZ ´ò  ` αt'Mäµ²à€%ÈY~çfØ}gu«g;kÁ!ƒB’·M_Aâ@bø0Jéw@ ã°‡À``)¸7$gr^a^þ÷W´l'a↥‘ÛÇ}»±…1WTk1'ˆ°i~žS~Èø@%7"#ô‚ŽàhI¹”Wi((ˆ(h…—¥hÈ‚/÷……§}/˜pr(Œ02f°Jÿ('™TJèR”—/`gq/Ðó]@\Žàk0€“…”1Ö I±’Ö>Ÿgk„ˆ€‹Ÿâ…±x…1Xˆ]è}kAˆdˆ‡^A9ëc†>a#g”F-ðÉp ‰0`@ í°ˆåWº…z‡a'ÇaJâÎ’‚W·‚bÒ‚†xˆ¯‡‹ôuè§~ÏÆ ÄPÝ‚FeG~á 2^Ð ðfÀÉaBÙ¸Ž50s!`Ñ7,1RFTw‹²HŽ‚¨Ž È€™}†h+8”2k` ž“` 0`“` $ððPCó‹eŒ"VÜUøQ:ÿ(‘0˜‹™ŽY÷wÉ\zÈp±5¸ˆPvÃc0ðÐÿ+™g02``p1“Dñ|rq“w¤zëÈŽ­§‹¿a‹<)”ãÁ@íç-G°Âóx.&Q)•ÿ@•ÆpaPý—i1`–“~”A‰‘Z8ˆ¹˜5?HJXÄxâ@6k@†f0:j€)  p—xy ¤%g…[OÒ1³òÓ•Öôy`9–ˆ™˜邳¹‹ä´hŒa‰92c™g@oÀ € ‰—…€´UÌ2wöZÝö©xZtñm°)–‡É…²Y›ÛIs6É~“•ƒÿx%úò[P•qÀŒ¤–pœxI p \1^äuh‰cŽg‰´©€>ù“ûù0sCu‚|x´ Òp†°"ƒŒ„lðîùž p ² CÇTP+i³2¹“aÉŸ¶  "š¾&j]¥-`UJP zDÖà]P!í :º£xi <²pL†0ú<­£Ÿ#j˜(ʘ'zJÚ}sQAkIY™²w…À9žàT YÀÏ„wxi ¡% ò(ö‰O·7u: OúŸƒ·¤Lš¤Y8¢›Ã¡•¾T:€ÀH-ÀrÐ 9í ¦”À ÿ°PéP Å;¥'\bt §qÚsº©Nš¢4J’¨%ÍP­°<ÒPe;ð0%`>P  ’ÿ€©€—`€ßP 3 ¨ 0ªÉ(‘©Joj§M ª¡Z§œ:­çf+µp ÐPP·Þꥰ àºÀ  ” ’ ´``¢à  ©ÅI­qõ×w!J­Îú¬rÚ“›eÉ‹ã¡U SÞ: H ×€ã*™ð ¯€™ •ïp p Pbv,H@SܸŒ=ÆÑ¢ÌZ˜Ò­1 ­4[³îÿÁfâcc!µ`—€ÉÐ ;0è à;~ð P)ð¼*©®bú¯p Ÿ° B`LW´B òdÇ  Ç d;Ë e†³j»¶lÛ¶në!éò‘ D<Àí M@8 Ð-` €€µ èÐ p à õzÐÀw¶8ɯÍ*³þú¯žË¹ÛŸ2ȃ ´  CIqÑ>«îP Uàâå­'À p-ÀMDm€¤ÀP0—  USn’£ð?0ú×Šà†ˆB‹³[¢&ú¹6;°$º‹_QKƒÿv ½2ÑY޾ãÅ;:¥À PÀ[p hÖ`WP䃆˜Ð Û€0;À¼K ·$ây+š*º‹½ŸÊ½+\W†6Àîõ¡/»ÒE…P:'ŒÅp'Ã@Ô¶ Êt¼q¢¿5¹4 ¬8Gl–¡«ÀIì"o¶GEQ<ÅFš‡]±v]mA 'Œ U¨ `,ÆÕ¦€¦ðÿ U˜P“óZ!pCØÆèÈÀq|€ÙÛŽ æ@ FÁ\½Nì1 àí t/Œ ¡åq— 8¬Ã<Ìw{Åtnj½Ac•ìÆoìÀÚé©dY°_Zá;¾È„Er¡pʧ,mÖb¡ð¸T0O ¯¶DÁ<ÀB0 ±P Œ‚B V J`Ú¤Ì]ѓܽ|ɘ<Ìr,Ïš,{]á\¦Û©KMÛ4îc°@kŠ’j µ`<à­; @ ´P À  ˜ð¸,ÀH02à­8PGàP‹÷ÈÐPöàÎQ–¼ÄL ÌÁ\Ï·‰¡ jÀÚÿ  | „ '0 P D¾´ >0, 2 }P2@ÄÎ{Eô0 ïìÒ› ºX½½óܽ‰©p²Qj  Œ×lBÀ™°½°M8ˆl·‚%2uGÀÔV †©¸ÎèTAÐà -mÕW Ç Ø™\Ï^ `-Öû ÓEPÖNÐ Ì N@m},ùÀ?PeE°¹°ÌvTªƒúö Üð×ìËY-؃·£;y"ÆÌÁ×0Ó×`Ójpi*ðR°)ÀÁ 0ÐÀŸP D=S02ðGp8𠹤–·§¥=ü|íתÄÜÿ)ÌôLØáÚÛ¸`¦Ò&í“¿íPÐbwÐm‚3à­P }¥mBà­UÀE ÑH=-ͯ!̦ƱI¨á&ÓP|mÒ3ËÚ\}ÏþÉÒ×ë½ò!hà>«›<¸ð¶ÚP<³•ÃÊ¿ùÍUðjKö20.þ➊‚`¸£/ÜR“ñXåPöáâ]ØA¢Ò+ Þh©Ô6Ы ÃéýÊd·DaKrt~‚[<`LÊP <½³n=D0 J€íÂùÂl—0ÙÐãïˆ)ýÝÞ=á[Úä-æ$CŒNˆ åÕ à_XÀÐ &…š20Kÿ`lwæ;×ðtЀ¹Æq†A%É‘ãnRô æ Áƪ½Ú^áD.çANç2†M«¿Tà @úw2®²mSP ¥‡ÔH`l]îå×° ';‰¿Èá ˆ4"™ n ž”œVmØŸþËÍîé9GŽ ICËŒ­ÚÚ ¾ÐÃ_ÉÀ—@ÌëÊý ãCæb~2ˆÒ†Õ™,¡¤Ý}ìÁänþæ ç>nï²r,Dk‘áNº„ѱРV ¥°<eyÎ0m³ À ü‹, ’ð óâDðâqÒ ªØv=x.u1Ú¥}Ú áYèÚ@ÎïpÿŽïùNóæQfÍìÌKŽç½ ;¿à‹ÍÜ·û¦F œ‘$—POü-0ÁðÍ´ðÓPzãsÑ3À¼íÑ3~Az-ïܽËèå~¸ì3/á5êÝMÌûp ¤œÁ0„c2lº ²¥ð U^¹„ðpà ÎàlÐBP0@0“›2ó@m,Pø2PeæÞwR=Q=Õ ac‹fŸöhó0ßÚ£þ§Œhà?ŸËD¡Qæd»é€ 0IÏ‘û€ l 3 P%ÒªU.¹PåS7 UýõIQˆ{¨5Òš.öõþã¢úÓ_‹ö,ýÓB§å§ÿŸúš[¬®¯LS rwð¿– ®NPºÏûóvÆâ³noÀ ó`î6‚ïÞÎôÿþík·Ï @„í.dØÐ¡C…%Nd‘âEˆ5VÜØQ EA†‰Ð jÅrà  A˜1eÆD7sŸ, ±dM8À Ô¥ U ÍsöƳN0`êd $K²Ùœ·äGLV†ÈÈQH’!EÁƒ Ú6˜5gN„9°Ý˃ Ib9÷a]»óJÄ»W®ß†}[4¨nBË–¸l.–©Vf»M0nÀ”AUîöíaÓfÁ‚/—¦0P0cÆ”(µfâÒõã‡*•d„-ÿR„vdíÊN5è8¦Ã¶0ß÷Ÿà½È“ÎÈ\¯ó…ÊçJ·KØ »X`¥cܽ÷âw´bÑZyIBÉ—Üe«³‚”l¸fUVÁ„)Z1iIÚ1ƒ‡!Dùa $‡ŒÚÞöñ­-†dˆ ·2Ž:’0̺è8üËÃã@Ô0$ë¼3‘¦݉Œ–t²ËÄ,f,p¢—mÚaª‚ J‰ ÅöÁ„‚‡O¬@âHh–X‚¢Ž‚8+-›"ܧ8 +îÊ@ ÑË; s£1ÉÑË/'<ÑÄm²-ïÒÉ & *€ž}b‘“K@o•} Y ÂIÿh¦qí‡#§1&³I2R×ZÈ8 c®Ã3Áô´SPýnTRK5õTS{CgUV[uõÕVRH``m• .aƒ„H[,ñ³(¢°`t„¨Â‚MVÝĈ‡ø¡—U‡adzÉA[]5UrË5÷\tÓUw]vÛu÷]xA*S£×\lÁ;“1 ÎÅܹ¿1xñβ¬`¦AqÔ± ú± $~àa…gt@œ=ÞØ£±*/ÍôÊàˆÃÒdç¥ëSU¾Èe¾Ð¬×Þ™$ÅÝâ”L²MÚɦ ( ¨‚·²¢xâ„$É&ZxØA…vˆÿ¨–x3²öC‘q¨´4ºá¸TÓqsæ‰Ð¾‹å–CMÙ$š³ÙÁœ½kG[fÓOÇ2î™ð…Gß)i¦Å h¡å°¥ì…¬}§1 š¨¦éEŽ$¾—iˆxa Ê/7C kÑ#s E^]¢¸]TÔS¬û·Yf]n³mÐÞKXzöK ’4ƒÊZ¬l¦Y"ª‹° t‡"" LƒÍDøÔƒܶ„=.iïsßctHðY|ã»—ÿ›øE³ô­ÏíÛÇûâ$ Å ö›†d „ûý`þ  Ì5rŠ˜2ˆyül„ A¶Ç½ ª®mI¤ ¨8ȘÙkvµ»ú ¢;Þ) 0±Y0xà+Èð¾HÞò,—†5T®kè°"º6mLƒýàܸPö²y¯‰á[¢órA ®nM¸…,z4“(Ú ˆq,Ú”6!*IJ’ <²¡¤Vt‚<¨‚ 7?«€g°œÖDt(ò؇ï QzLã#p¹c̬4AePƒ~\Nû(»áÇ&‰”â%.A Iý.É(ôL)0˜PÁ­ÿ0ilãLYÀÈ@À@0âz@#ð± iÌ£ô€=ÆfÄ•yîˆfbâwÉËélpÚI.`Ñ0=&®+ 4’1}]Œ@ÐøD¢ Z\ë"AœÀUìâMðÂ5±A$¬ôžþahpCM+}™çXº¡z"Ñ—|¼ç/ׄ“ý¨Ph ïtB`”ÅQû€Ç‘ö!™^l±Sx“A¶‰‰}0"LÙGÃ!dTTRhùG= á“Í3X‚[ut©Dš¦utú<N "§Vª§s#*4‚Ê øEå¨PÒ46i¾}l3Q-Ur8&͆=ØiÿâlŠ^Ö#k>cÚ˙֭|´×` T®%¨YšÐiiš€Ú¢>ñŒ}µã¢ý$ŽrâC±5 ,ÝùN\–îz ÌåeÿhÜãfV‰ÀÜÙÒxº¦GÂÉâ…$T“‚þ.†OãÁvЋyìÂø š€>¼ ¬¨0âIyƒŽ•=N-›ã@±ÆŸ–UîZûÛĸÒ‹!&ù”é¯a‚Üí<ê·mÜ/,U…–(Fâ (@Ðð÷€K@ž|úJz€tnyIIn‰ÙÿÂX³3¶ç={ŠH{•™ÈI:hMhf·£ßý´+³ÿB|5rÈ…Hƒ/¨B)€a8šë„d³—à~H­›%³÷[\'Þx´Þ¡kYГìpgÈ'œŠý漨0(ÄpT Ðà„(Ü£h ÐQÒ¹ô«,–,…*4Ö1›9Ò2±Yŧf¯¨ÍÐx³¡0 Í-¯ð¸’Ä ´ìy*k@ÃeîÁ5úÐwJ4JÁêè·DvT$§ÎŒæISºÌfÆt¦Ù¤å‚ò8>Æ€zBm„žåbÁ3±A¬!ˆ> BOŽò”«|塸ŽËõ¨¯ÍÍâç[ÆÃ6Û½ÜbÏÙD—<’T L9Ë{©ØUÝ}̃ÿ `Îâ7ˆ˜Ä?=1,y£¥R™d$½³º-]éäZüâñ–7›K-•}„g<`ö B—0„§IÁ Óü^ñˆ5BÉøC1RQ‹ö¾w Ù ‡p ^¡\Ï2Ýî®±¤‰þn¤8Þn²÷Eø‚Å»O«ÂEGÁ»³È#·ûÐ:#žpx̃$ Û¦pôг;éë6úÑ/nÓb3]&›>ßsK]…*0j ,`@'è<D(âÁŒ@„ná8 ÷.ö~Þ dë»k]£=ímW{Æ5Î_·gœãr‡/Ãë6̘Ô[ˆÖÞûNgy,™Ð„ðß•8µ`£¼á%ÐÑT¼ÿïåaŠqÌû^LlÅ4çy{áØÚÏüÔfà]øÀ,JÚÆ<ú †@j †O§`ôâub€˜1o a*¦~™#œ³R¾èòg;±—N³dÒ¯;¾F'&™ kÙ Ð hè>Ah¸‡$ñ^(x‚ œr0µTYâš M ³µ³¼Ì{»ÊÓ¼û£€Û¿˜à7$°!8‚#°h¨‘f¸B #Û‡“;’'H¨„Ú?wH?G)ŒŽêñ@±±/ú«¿Á'ĬÍã¸LC¨g‹!PB(ØRÈ…˜‚K@zÛ¢Ô…'`Šÿo(…XÃoH?wBBºà’ìˆ IB)œBA`㬴Bß0²ú!A‚Ø6A‚ØSKS›°Xàûh\€¦ØoP©r³£:,+&L=ìC> >?¤‹xQU W|EXŒEWd!` !!âiA(x!è…ð“!@‡#†*˜‚ð 8€+ µªxDà)$P]œ¨„K@-¼h`óbÉ€O£ù*7t{;\B<$•ϹÃ?,ATôÇ~„·¸ÛÆ9³ŸS[‚"X˜ â‘ ‚t µzSE¸†ÿqÐÂú@ °‚ÞŠ¥~8»‰"È5 ¤üj©_+Éø‹Â Ä*\¬,D‚dô¤çƒœ!¢*µ"8‚úƒÙŠO…`Hub'´@”” x¢¯8ˆ“$›=œ?—üǪü½˜Dø¢$hHÆLp!p‚g8¹¡ØE8%†p° ©¹˜Ÿ:)>‹<’É/J€JÐÁK«¼J–D®ßËF53¾ñá?Ú¦X‡þk¾^ K¡Š*F€†+ÈÑ‹lت+¡BغtJHã˧,›{EÐt1à Lᣧ4Èm4ÌŠJLà™pDS{LF`„û9¹!X‚y Æÿ!ÈƲ‡r /#•ÓÄÆÉK#ºÇêÙœ´LÕLÅá»4×ÔJ.JxØMÌ„`¡x¦ê3ËDC° SsË!À|%8I»¼¥”H{'QœÏ.YÉêÔÏɲNm,6-)¹–³‚GÀPFQ¿j†f $ k(„  N˜X‡g˜‡ Ù5äÄ£¦¤âZ M¹ˆÅp?êÜÏÔüKþÔˆRM aˆu*‡r°­u¸½ß*ŽyÈÑÃ1cÞÒS†ÞI†`tc^0{äÃ[]•Z~$VL.[ÝõK$fàUîÐ"ãý…]YnâJÞ5AÍÜ»Ni Žgt³\üY¾žæÕ‚®Gj-•[VŽã·µeÁÍg„Æê³%`"Ö_tNgð}Øíõj³qgy¶Ý{‰Ù%"F«j«Vá§j“NiDæ“ÕG“Åèÿµf¾ÕÖk\…h2™]=.Ü –ë¦u^ŸžkZ–×i%éYþÝ/+ÙŸ]±‚í]<>kX6á~)͆êÞkÄNìµ+_§FÜ“œâŠÎ^‹F»pvÊ3niÕþ-þ^ÎŽjüuÒ^öåÿÛm5ífFmSµˆE¥ÔFuí¥ÅWÕ®¯:*eDÎåQÛÕê“~ëˆVåƒ]â]Sx¢WÉÖµÕ©ììq[ÌîéEkÎé4ìÅmß&íê–è©â«¥Z¿¾ÕÇ07’½Ô³SæïukjÎc— pKîVìVl?m÷vo®Îbl>ÝæUY ÃæZî@¶çóæ×¶ i®æÑNð§îø>p•Fë5ÆVMßU>™ "èö~qoøVð‰‘¦¬ŽþãÐqkŽ,}ÂññÞ†ñ_p"'ê·m)Þ[Çm·øñBNk!ì'q/r^ÊB`Z%ì‰fq¶qñ —q)7òÿ#ò1ÏqÏqÂÏb/Ÿèr-f¾MÚŽEó4¿s,?s*ߨ:‡Áàr9•ã/?ï5Ïè|žó$Fð2×ó=¿r)sùîÓþ/€Vsç.qëVtÇt+ÿi|mtæL\7ß‘aêLçôN'óMwôUêO_éyõI+õš>è*OtTfM·óG7õSÅCNºJ7æ«nu3Ïs<_ô ïóK¿æ`ïÓ8]dn .ÝÞcUçueGöEŸsp¦8¬-`Ñ!ðéÆvrõ)‡õc×vcgQ£gÏ&ô[×õ\·õ]7÷tÏv|g‹^éQþw€xx‚/xTiöyGøsGwFÿõ„gïÿámw–~÷j—ΆôzgødÏwl7Þæ¼æí©øq×xu_÷/w{'ò6‡l?"‘çí”?y”wø…§yGq\xxÏx›¿w“/ù˜—y’_àwˆ¿øT÷ù™Çxÿì+'ú݆ë£z’§úžGú¤‡qœ—wz©/ú¦ÇikO÷•{Vz«gú³_ú¬úªÿyWÎùµ¿z¬çúšWû»—û¼·ûkg{¾ïû·÷{½WúÀ|zoz³'üÂ_|ºw{¼|Æ|Åo|¸çx´¯|Ì¿|Ã?ü¹§|Ë÷üÌü¶wüÑÿ|Ñüºÿ{Ò/ýÐýÍŸzÓwýÓWýÔ‡ýØgý×·ýÿÜO|È—üÚWøÉ÷ýÕ§ýáçü½'þÛGýßçýàWþ´þçwþèGþÖ—}èŸ~ãïýë¯~Üß}±·xìÏþæ§~î—þò7ïûâÿågþöÿþ‘·þí?à×~ô×üôùïþÙ'ÿþˆ¶hð „ *lèРÇFœh‘àÅŒÿ*j”ȱcà Žœ(²äÀ“(S® Ù’âK˜1ª\YÓæLš9!îäÙó&J #…‚$Z´'F¤F;.ÍØôâS¨J‘&ýI5ªE¬¯RÝÈuê×Z·‚µVìY´eÕ®9öá[—msÆ•ivn̺$Óæíªá_|ûâ%|ÿ—ía›í3nìø1äÈ’'S®lù2æÌš7sîìù3èТG_öY¸e`Ó‰Ý6Œ˜®ßÓ¨[ϦSöíÕ®_djÕ¾u÷.þ28KâÇmý{¨så¹¥ÎÛøòçG™W×¾ý:öééw'_|mïN­oï>|sîÐÕkD޼*zñï³›ŸßŸ){ðÅ÷_} èëѧ`~úø]‚R-(a„Y˜^…&ɇà~6x^‡>aˆfHÖ‰(~Èa‰,²6¡†cŒ):tŸW6Þ(c<2¸¢‹üIâˆ3êhב{%©ä=Ò¸£6éä”RViá“pe å’‚mÿ‰d‹ ¾Ø¥—a)b‘Tši$™ÉµéæšlÆùã•5ÖiçœVæ‰çž|¦Iç˜wªØç „rùfŽˆ&*行ʥ¨}¢)¤£`Z)“†j i”X~™é¥š>Š)¨”ŠjéŸz¦ê窅¶êꤦ¾Úè©¥Ê:먵Úê ®¨Þú+¯± k¢®€}ºk°É*+f¯¾Ël³e’*m¨ÕKl±ÂY{í™Ïv‹í¶Ë~ .·ãB ’#骻.»íºû.¼ñÊ;/½õÚ{/¾ùê»/¿ýúû/ÀÛk#]ŒÔÁ=%¬0U çäðà K<ñNÏdñK·¤ñÆWl°Ç‡Ç+•\ÒÉ#¥ÿ¬òÈ$ƒŒpË.3sÇ0ÓlòÍ8Û<óÎ9¡ÓÕÏHÝÓÐDSU´Ï@½4Ó]9ý4ÔQK=5ÕU[}5ÖYk½5×]{íÐ+@‰@”PÀ>Ç P*gǶ¯ü³Oc··Üÿ˜6J¯¤BPÝÿÓ6ßí“pÝ|£#vÞ.P Õ½2B~ D·ž¶áˆŸ-Ðâq3•8Ûgs>9ºbºæ¦;äˆê¥B6”¼€ß„þRÌ @*ŽøŽÒ>ÀSÀ?g£ƒ;ñưO*º‹=Ýlýíí,ÿJÃgDI@®{ÝÿÔ~<ç¡SÀó9ÀÏu£ÙUÿ°Û¤²}÷/þ?ä÷¹óµ/#(Àüˆ»þÉ~Þú|GÌüóB Ø¿`m,ìþV¼– ”XÛ?0G M{#ü ƒ‚<óµC"œ¡áºW°v „%H/; àgÅ ›@D—îp~º3_ÚÚ¦‘ûýn‹¡ ƒh‘!&±`°Cbòg‘á.‹Å‹"/RÁ€‡+¡²F ¦í€(üžž`¾aÅè8pã?ÀX’B2…AÓ¢F ÆÚP *ìˆ"ç&¶B®~) ôÐñBDFr‡ d+™Â§€ñv…|'ÿèI§ÐO•º›!)#é½íÙò& ,÷4¹éƒ ÁÝòÚÈä!-’Þð‚Y’Û¡c{ÅD‰$HIÁõ“i<ÞÚb9ÇŽ´¯n5LÅ(Ó˜@¶£œ³dú.ÆVOœ‚[gí’ÇÍåDI…!Ó¶OŸðl@°dš­x «d;W"6‚ –—,É9ÃŒŽÄžÅ!HØ9¼±-¤ò ðF%~2mC$d2çO‹°s†,,)HÀØ>?®TÛéö¼6ÊT#ÑÚ‚S…tb+$8KˆŽWX/©-ñãïXhÌŽ,ÛûÆÒÕãMµªw éõ@øÿ¼åqÑ›–< ;¸ArƳˆ¤ó—V€¾‚­Óskòâ6=¹nõ!Ńãþ&8½îϧ€Ǿ*v¦,Ìu$Ë|IýÖ÷¸’ˆötÀ¼›TÙöÙ‘ôõr©M$Gë#¸u‘M™‘c™AÐ)ÞS#­[ 󯽳:åž,<˜m›r8uÉm¸îç÷8»®Ÿ9·!”XWJûµír·»Þý.xÃ+Þñ’·¼æ=/zÓ«Þõ²·½î}/|ã+ßùÒ·¾ö½/~ó«ßý>{ ‰%,à?„¬I4)¬àý8y6Ýd'׈9%±¹u !ì_eþ fƒ(0ºàÿ“x%ǃk!HÈB®í”Ší`!é†Jø•\qoG‰„ö}½ÃÝíNϹȩ±‹‘×È*ù’,N:OÙ€V´ ]Þðb,×SZ~·‹[,æ1'¤Á=ìÍ@€žR…Iî úô†»0;8y½{ûü˜d0k—Ì~±™› D%£°¢5^#醎ãý íÞ)a(åBŠ/Åt{5ÿ¬é"ZÒ.¦ )]HeÎxÑIöÝû>ÍAä”lH^¦7-ë£Ãœ žjÇ鈼a¹þ£9êYè:‚l¯°µ@†+·v {ÖÎ~ö‘! íiSû%mrµ³­íms»ÿÛÞþ6¸Ã-îq“»Üæ>7ºÓ­îu³»Ýî~7¼ã-ïyÓ»Þö¾7¾ó­ï}ó»ßþþ7À.ð¼à?8®ð…3¼á8MH#ñ‰S¼â¿8Æ3®ñ[æÿ8ÈC.ò‘“¼ä&?9ÊS®ò•³¼å&Ï@¹ÄE®pEk .¿9Îs®óóœå0÷–ÌÏUsg•¤çF?:Ò“ŽôŸ]è1wúÓ/¢ô©S½êVÿ8ÓgNs CëR¿:ØÃ.vŸGÝ\Z/;‘Z2öµ³½íÈz×›žöl!k$n¿;Þ§w³ŸÝës§{Þ/xïýï[—»œŽeóÁ3¾ñ(/|â…ÅÝîŽÿ¿<汎öÈÓZmÊ<èy5QÞXNÜbúÕ ~ô€’ü¢Joúœ°¾öww½ª¦Uw¿Þò¶ÿ½Øqï)I }öÄ÷=ð“_uᳪóÚÒýî;¢üéSù°r~êaû—P¿ûKß<é¡ïyè{¿ü<·þ¦Nÿ4Ôo_ûíÿó±Ÿ}øÇÿð}ç}ïÁŸ{ûß¿ÿþç;àD˜  & . 6 > F N V F 6°ŸBMp\ ~ † Ž –`® ¦`N” ¶  ¾ Æ œ úÕ  ΄ æ î Æ þ…ßJô ¡!þÿ`§¼ô!¡>!úàÞà:D^!fa*¡ìÕÿ]„†¡Žar!ì±ßû¡®!>¡Òßä•^Î!îàÊ_~¡EÔ!ö! Þ¡rÝù!!âbñß "#6b"¢þ _6„#V¢%–áaZá%v"#Bâ&J¢z")ú!("ž.b)®âžâÿå_(*+Î"ºbÜÝ".æ",¾¢ b*ú"c0âaFbó £(ž¡ j¢F 3>#4F£4N#5V£5^#6f£6n#7v£7~#8†£8Ž#9–#8rÃH˜£:®#;¶£;¾#<Æ£<Îÿ#4¢#HÐ#>æ£>î#?ö£?†£=vÄ?$A¤A$BVc@6cB6¤C>$DFd7.dFH¤E^$Ffä?RäEh¤G~$H†ä9¦£H–¤Iž$Hr¤E $K¶¤K"¤JNÄKÎ$MÖ¤<ƤDؤNî$O~#N>DO¥På3þ¤C%R&%MeC(¥S>eI2¥B@%UVåEJeBX¥Vn%L’$W~%Xê#V"DX–¥YÂãX^2£1²e,º%*cñ ]Ö¥]Þ%^æ¥^î%_öe½$å ÌÓ&º@ avÄa"æ`.&c6æË’’2ëJìCÞ¨P’ÂêE@ÔH™M“öé rN¡D4™ULR Ú\u©þ0^!'&­_ùxjFˆMô¬Í½O¥ÚÏá+cå•rN¼Úªþ@V ©U¾Bð”ø,ìKØ’ÁR•ðÜé·^‚íƒ'yV‘Œº4i ýÅ o‰…pÅÖÆl'pùZ^tìnA—djÉšX ÔkY[̖ɶD*0 Æn&ÁD@!ù,ƒ=kŒ‡777lczWrV{§`llyŠix™}nŽxz‰xx˜l}¢Y‚®h€œ~ƒŒ{ƒ’g†«fвmµy‡§sްv‘¯z—¹¶u:ŽNP]F–RY†w|™~f˜{y¨VU±]Y Xa·^d¬|\¹}H¶|T­bn©l{§{e¼ej¸jv´|k»r}Îq-Û{8ìz/ìy9ò}'ð|2Ü[[Ô^aÎd^É|OÅ{XÜkOÛfVÖyMÖxUÇciÅksÆvgÊryØdfÔmqÞreÙwxãZWèfIåfWêzIèwVãgeåopæsfäyxˆnЇu‡…{˜—m…—u‹™~”¤l€©w‰¤}‘¶y†Ê|ƒå€y˜†x«ƒ]¾‚I·‚W©…f®Švªz¶i²q¸”s݃-Ö‚:ëô…ê…'æ‡6óˆ(ñ‰5ò‘:É…GĉTË‘YÓ‰GØŽRÛ‘MÕ”XΔgÅyÔ†gÚ€zÙšfÚ’{Ϥ}ߣjاxìˆGë…Wç–KèšVðŒDñ–GðœUè„iå‚{ê™hé—wí \ð [ê£gíªuî±|ð¦gð«p‰……†…•–…‡›…šœ’‹™••‰‰¦‡–©ƒš¹—Š¢›—ªžœ²ˆ¡¼ž¥®š¥·¨€€§†™£’„£™–º€Œºˆ”·œ†°™¨¢ Ÿ¸§™ªª«©©·¦±¾¸¨¤²ª¹¾²§²³´ˆ¢À˜­Å±Ç¤®Â¨¹Ëµ¼É±¿Ð¼ÂȺÇÔÈ‚‰Ê‹“Êœ‚ɗ؆‡Ú‘ØšÔ•–Êš£É¥ŽÅ­™Ê±™×¬ƒÒ®Ö±Ò´˜ÎªªË«³Ì»©É¶¹Ö¢¤×½§Û¹»äƒƒå斊嚙꧇å¤í¶†ì¼”夤⯳麣帷ñ¬«ñ¶´ÅºÄÖ¾Åä¼ÀÑ´ëÁêŦé̵éмö¨ñÀ¿÷ЪõÓ³ÆÆÆÄÌ×ËÒÚÕÎÎÝÂÄÞÏÑרÚÛÞáÞàâåÄÄäÏÐç×ÈåÛØóÅÅöÐÏõ××åßàåàÛõãÑåääïïðõèèøøøÿý H° Áƒ÷!\X_à J”q¢Å‰ýé3Ç‘c?ŠûBŠ„x±$ÁŒEª\ɲ¥Jt"ó1BD œ"DÕ\ªtÇ“çK@ƒŠ„ɢУCEΣ’"FG{®$Š´jHª*Z JUÓ3ómM:)Ö‘ Ëê¤ê‘¸|á-R»ï,Ý–v+ÞÅ«²¢¿çÑÍ»—ìJ­…¯®§ˆ5Áƒ»Ì‹81á–ô¬^.LÙ_]t C‹Mº´iÒÆþøù³ç´ë×°cõ¼wž¸yb7‡ôúôoN¡ºïv¦M×ï_EôØf‹fMžÊ›âöÉDhðÈEÓªëø&5¢ôœ‰ÿ/d¾§"©¹.™ovâegfÞ·Q²ÖœE‹—Mü|ù!ÕWÝZí±4]çA’zÆ„$žHÑ8SÞ>ÜQãÝQשu ]ÐI7Ó}ûø‡Ÿ„"‡r8UK•mÅÛL‚(’ŒXùíן3ó…dnf©øÓ{{‰c ˆøÁˆ8Ù,Äâe£ž"Ñu=Ë5·×†µýµˆˆ±Ä—KŠHd¦Ž”*…7‰Ø¦Ý]~S—!DQ6âÉH8‹¤±FŽ=ŠT#"jÈâ›t©7Î>ÅAaCHjÌ'ˆ™[aUh„–…%œ4Íã‡EHW!“VÒ!gãŽf*mÿʦ§‡ÂG=0¦ÁÇΈóÇJ¨‘"á(r•X KUX z# ™Ö*=‹\È4Î,QF¨a†iœq†¨X`A:6µæ¬JUS´JÛ=ÈeÈ/¼ ˆ c†ëÇS³(›nSU:·`O‰E &3"cÎ8}žñ…2êíaÁ+5ÝÄêQc¼í¡C8áP“† »…k+ê"‡¶t Ô8_íÈ‚“‘,YWj¬±H5w A°Á†&ÌV…³ÈÒ¡·°›¶Þ•Ï83š‡ˆÈÁűŸ<ÒÅ{ÀÓ4RòÈ ÓõŽ,¯°’H‘GîÆ/d ¡†o¼ÿÑs«#‹)ÃPsæŠ"ec5Ù˜5ÕÆÛ_Œ(ÜsÛe½c‰•°A6—ˆÌ'N\x !}ÌñƒãÅ“ŽaôýÆP–ßxÖàŠptó¸ ¼ˆS},óÇš ×oùQb;ý¥Àƒ/„:cÉ$$¢Ê$r¬·O<Ñ‘ûñÄ#ž!4N°b>–¹û¨Wв^Aa¹–pâ>@(%bX&Á”Û±N?lŠ!ŽP¹!bQg]Ì¿ˆAY~až3¬! L@<ÀQHÂ@·Àc€4QS<¸‘&MH TX} h3½Ð…x¯@‡úö/FÌGMÎØÅ-ÿp!‰Ç’Èž)¸G,óY£.!ú’„ÌçŒB¤o} Œ`VµwhÂ\’@™Öp¸¦DH?ôÀ†”À$ ½.v}£Ý÷ôS5ÝN<¹KÄâ‡?DI‹h©ÚVà! NÈá[ú ðâ‡Aôი;·jDIMÑð÷¡8ÆíË_Ã*®öIp/qªK8aýd#G܇¼§*².-Áa::¨‰w˜r‹‚‹¢ê"`'óQ8¨>HC(ôˆÇ2:µø…äçú%Z>#›Ó íAŠ`e(CHøޱ?ÃBBŠp ÓÌ"©˜ÅkÌÿKP@Ý\rvjòíLç\ $Çg@©F™ü´È¼àì/P „»ªq“dLâ mø‚ñÀ—ôW$p’^'e–ø 0…’FŒ1¾iàYðVBj0¢14Çú±¹`ìñ qÓKÔ” í¸¬Sl’N^ô/” %Š˜zq\ËýÈÀûK26¶y„㕈Wnù:"Ü¥CߘɀD«FŒ‰ÿeîõ“• Ã’q„c™ùx51‡LB‹8À0 (8³›eI'Ãë’]%ºôØ_Ö KÆWVI>nB¹yœìÙs„#ÐÀ7Ïù0Ó‰Qs]Té Ô‡e2à mžÂENG~‰/¿Š»Øøƒµè¸ðGøa NÆÊ¢­"jŽBO¡F½ö;T,b”>5Kpõ¯¿È’_ˆÄÖÒ`„°@ é¸ÃÀ wÀZÆT¹ãv¢ÀˆÌ8~@ÑŠ¡ic(é$cêë ×”cpÉ ]¸€?à=”!‚Q¼CB>*2Z'±œ%ïÄ‘µñîegßИÖ@ a¥!Ôÿ€$Q‰ø ÿñ Véåç…ó ¤ëGçV§šDYÄ›÷å‚Ë 0è6ðr˜ûCæd ÄT‰ró˜8(;ÏÙ§ö’172hàhľµ^  hºÓÿP†4$qWrP2>“?n½Ñ»õVÑmb]j ”6ñԀ„Àjwz"ÎðÖq9_Ó †u„í÷îÛÎ2-Y’[G¼LcüÈð6$À‰wz!ä(e¬‰¡m kKšýlT?Y(!ózÝã!"½a gHC¸€7-T"õNÅ(T¢IùÖˆ¥•pW²³ôtørÙ€Æ ±GdLˆÀÿØÐä;–€EÍX'ßNˆSmÚ7Pª¿ ëó¥…EPÂ4¼4j¸¡ «q|sNG`.°À:ó¡$ïÇ.Ñ2}*‘{X4g/^…,ày3 YÀ´ƒ/î0   _ úÁÏW=‹\‡š7URu£S:€€7-ÀrÀ ÇÇpÊ N§ pç2 R”-F£š–w´6ËP«€.Ð0O;Ð $`>0åç“0 W‚«PØ U Pð%ÑyJ2y*áeá…—Sƒ{1 –  @Uà[;ˆ>@ >ÿ  œà€ ­à˜sê0@¢à€ gD'qB&^ò—'d˜0PˆÑðP€JP XàˆBÀ 0u mè•À P!‚ 4o^ÁîòŽw^ÛP°1 ` èp »°S€Ûâ5€@­p © èÐ °Pà ¡!«SO×(¾íT  Q à$¢1P’ !!<°–Ø4€aMÐ6`€4¯à0° øÓ$ÊŠIæ á5LûÀs¨ès+ñ6¯ ê@%€îPêð³P>I‰ÿh  &Ðl4c.î ]ÀŽ`  ™PÎp@é ?ðKR`q¡žVeÄ6€¨9e »°&²'œ€Q` š”-:¤  PÀ[@ pQÒöcG‰Q—° Ù€0;•KP`uÈ{©(5<}3ˆ¶ð –p‘ßS>3 ÐlÐ Œ(”²DP ¶®`©ðšp B° ¤p V ’1tƒI˜()Ö´>À¥È^ñJSÉ¢™Ãà=œðÁX¥ ¯Ã”åa—s†"\¹¹›h{{H ]0+ 2 }P2@k35@Tõp¦hÿR… Ø€^Q% € û° K𤯂žyDR ¾u„jçAï/#òDþ°¨*’!,ñ¨‘ºjZ”껕Pà!Á©!b=|ùóT;p ûU€±{Š1B$âfÚªUјéÕ°¦Õà¦j@R)ðR°( ¿@%ΰž0 |:S02ðGp8Ð %·£óµeo®¹ªŒú¬,hUA0déFz\HH0‰) D^%‰X}Y[ ¨C¦:óUjð‡Ãâ öÀª‰qQ 00i.¶´ÀeØPwbuvˆ— ËUÀSéô2ÿ08›³ël‚ 2ÕB$¼‘XAEå`ù*XE¤©0šüÚ¯c!±9fCctd2<°:È@ <ÚrVZ:D J€i5™üÂÑ5%Ö`¦GÄS3ŒiPëèé œ´ f-QD¾° üy20K T µ-ÕÐ[ÎP’qibq‚1´âQ »ă.èð´@›s Tà @G&cúUS@ ¨H T_ ¶Õ ȈkÃàðj¹!º{“{Ik KK3A¡ƒXˆœÀ ®Ùñp í` T•>€®H±:;bK¶iR–¬Üu¯“[Y/TU!²$ÿ«*¥¯À V¤€.æcyÌpU±ð ¾ð x‰ˆ ‘à J’³D³ ŠÐ µ·v¶L†ÌJÚ´Ha ûÊ\‰” °<ùF@z}#– =Ë$¿ ¢²Ñ `÷‚¥3•^ú¥=;5ù¡ª k úÙ˜ ¯Ò¨+C²ÃH žpµ"I/ÌÀ nÀ= @SK’kBXµL,óô¼}°yW–¨¬ ýÙQùéÀ5?ij“é` |¹$rû` l _" PR4¦ht#·pµJR7p 'Œ¬´8ghfD¦Íºýÿ9µcŒ¦*aƀƯ3Ÿuoð¾ûP èU@ÇvÌ$-±P6»$gõª@ÏkL›Ôs!‘£!‘Ÿ0 ü韎l˜ >¬¤` À”ôÀ oàÌpœ °“ àˆ9•˜±?P¬¹¥9PР¥E@å#w†¼oš¡ @Æ5¡lÁ;¨àK{ÀmЈ_` S 030Qp]+a ¸À¼U@ 7¬gUu` îpuÙìsBÚ½ñ§;* ²l 0æb ï` u th ¶ œL°“Ỳ ;0< £¡ðÑK8Á܆yU¦©,é€M˜ÿ Ê@¶š î°“0¤Ï¾{U`ÅBÀž`¾…Œ_‚8BP9Å;з'Šã …ì´\öÊ@"¯€Ó—0ˆ ! rÄsKQ)•ŸßÀÔ-×Ú™i¾ðU_•®! ÕðBPOµP Ä8P è U@Ƀš@>ð¢@`ÒCð»ÁÀÔ׸ 9 ±!…A>Ç€Í-¡§3ÍŠ¢è V  îà ¡ÐÓ?íR$(ò ücXþ¼â"ŽàcgÑÑå’õð[Áê×›[á Üì ‹f ÿ„‡Ö µ«À (Z)®L2Þ"0gpà²&´Ž»g$¹mëÑd¹ÝÚù½–` ² oÖp -$…IR Ð)=>`Ñ Yܰ“ dP&ÀŒ\R9ýLý»A‘´iÌ´¨ºqç Ç@dàƒ³Îà Oø ²` —À’乨 Ð^P ‚°âf$‚À‰|okžsËÊeQusD=tô=¾µæò•û@ S€Õ!‘ë— 3‰°“Œá` ó‘ãF[ëŽW펽wïæ#ïÔ½$önvˆ¢¬óD¹n©ŒP?C†LEkkì@±»¶ ìÄ­ÍþìÙÈÙ Þÿ½ÖžÐ MâÜîí  ˜Í7êVqQæBêî˶*) ´A¸µ.W¾Òó;° Ñ´Aù ¨Mp|ð`  ™å ”—½ÛàçVèÞ¬àzµ&Ö0ÁЩ žˆ6bgU¡ðUI Œ op'7²Ó<°¬3!·ôâªÍŽ ³KYÕQS‚GJ2_r;…Qƒ ÂÂ@ |ðU0¥þA>Åêï -ØTJgabwØFSh {O¸hàQ€}€“`èÀ)U—ÀΊ©¿úhmêñö= eãžTûO´h »ÿ¦¿ü2üéÿþ3U±øßAÍüÐ~ÂK°èHƒ`¤iÀùžú¢#¤oòc~Þ5•àl.A5%ŒÛ>³öe³f-Û>zŒ¥a˜æÌˆ=x,â,Þ¾}Öœ9+WÏF!EŽ$‰]É’Ö– A²ÄÚ>x²^Érò$HzΖ Ù‘BŠ —6n|™Ñš@…ú3ìÔ,kÑ|É I°Þ¾(µ¢¼¹c¶ñâmºŒDžE¿¬^›œÑ"Ʊ/͆\‰¤J•-W(à„Ø™5qˆEÍÆÑ]zÙ¤RE¼r›ÇƒùjÕxq_b®!Y.‰ÿdÁ‡dÊ–­Íć³Aj!Z1^ºY+"oÛ8µÖÕ(ÁZë¬,É®ôX"ù‘bÇŒµ)|l\²$½>j ¤Fšáhñ|ízda‚'Êè5î5:J†Rl1œâÀdd8p- Ü«>dgðÑ)gv‰D xbWö)ǹþ°{Ž ƒ¶:+šíŠ8ðˆ#dœ¡ ï"Qf%BYÉ™}vb鉠D¹úÞá/ÅØ˜t'g¶KkE)‚†H¹å‡),a鲃 \žP@nH™ÁÌn–tr¤ÿÞ$ ¤£:,$Ø"È1J„@‚¼?µb x`BÿUlâÌl¶ÙH#•tRJ+µôRL3E'2!|ñå@!„8P–Š€â!v™Ï—PÑaÉ—*¦0A `H.BQÎGy%¡7B¢$”ÕÁ(±„¬x8|)JgTQ ‰,ˆO¢©§Ÿ]åŒÓÛ¢YB'ŠPa”a*Ò‰§±%”P¤q¦L‰ ,°ÀŠ:êöÍo))‘˜5ÀûÁA_^k¬ˆ#AäGõ–_œ‰†ž~Pó¤€i„’NW¥•”öÿv$ŽÐaØ£qÓLFO3¼ò^ù”—×4>º$hRÂ*ë«qUjé]’æ¤>Š‚ ^Ö4M<Ùð:­´xU›jÇzH™«Î2ë³™¾¬yx[ ^¼æM3¿êcë4¸z¶ª­–¸.»OZð ’j*i×êã-¶ø¦¸b"ÓÂWîsyLðÁ/›.Âü-JZ ‰ ƒZ¶ÛvÛLÅúzhtk™¬H—âÄ,G5[5kg†32 ‡ô±H8Ù,ļfCl"¥BW =Ÿ†ÊêÌÍrÜñÆXgí¡¥)’Ç!G,!öÑárÆÙg€ã´^»ö1zi¬®Õ7Ò]·A/ªø–…ÿq!Øðjö"à(rF,û«ÊÜ>ü^À4zl÷”’Wže‡ÄFÌDìQ6ƒœÆ´¤ý›{Žß›/Tã|³ë_­5Èš†7OF †„„>:^†” ;Oê•úÛ¬Ÿ+»ÜsϾ<ó´HÏÈgìqD3áøq„hœq8‰”a%Ä2›{Œ«œxñÊGîüóð»ï|ô(R: Ò4³DDd8CÊS4fãqòò2jg}ÈjßÝÞ'?èů‚Ñë=ü¡B¡5D Ì&À>”gåCàx¢&ª½,ª4‹Œ$H¤×Ù%vDÏ–„ ÒÂl€ø†8ÿ W/$ƒXzX !s*!K<ä¢!å(8ÁæYñŠŒ”`À13/á ZCÀhQÜgÄ ¼,^3Œ›-‡Å Ö°]AòÒ jØA|ÀÔ †Lœo6l„â»TÕºNnŠuÌ!ü–”q˜ X‡@ à°ñuÂ\hƒàqÈÏ4QOd¤•EÅ;>’f;Ã[„Þ‘U "hCãÇ03 ¡mh@ÕBtÄ‚˜†Ú"ˆ—lXÃÙÖ7¦A½°<2ì äªhA;B²›9œe%8@ 5ˆòk‡˜V8ø°….@c|ÄЫxœƒ`füÿE&e«WÖ˜ÞŠŠÕÀZLŽÞde+ Nnf‘6ªq…0üà…L˜CŽÊÖ$8ÀŽn¹€½h\3*! ? ’€C±ôh! *‹G”ã…/xίcúJOÖ¼.HÞ±·‹¢ÚÊFÅlŸ­Ô0°¥'4úÑÖ¼&6 o„wëÈOòD™ÓR8¶×+hL‹Xá€Ú3øÈÐ#ÊXÝaƒ—Å$XeÕm$ÏúÍò.ï/lZ“0ú€&sÜ¡uHF2„€„ÔÁzèÃ0ê „ ¡ÆÓ,NqŠY¨ ÿ1\ªÄbe1¹)Pxγž÷Ìç>ûùN…Ž@¡½#”ÊF;Z3¢ˆ=,÷ÌJÐë^\Ã:¦Ä®No aÞ6ØÓ,n±„_T¿  b Þ_øÀ%6°Á j»%Y÷,¥ÍçvT‚S Â$ŽŒdN3y¼õ’{Z.sÀg>ˆ@„@ÔÀ‡ Šð]¼¸&µxav%A·6Ö*W¬bv;9­JÞÚ’Ó­% ¡ÖÈ"¨]:l¢³Žæ…ÁˆP0/÷4¤_Òç¸Æ¶Ô¡Î Ãy,]Ic{Ð(ÿjˆ³¡áJ0‚ÀqªÒøa ™ÿ@;£‰ñX¦—¤›˜§øÝñ~¸²u¾ó@ÃmÚSu Aÿɺ5@Ã`2Dy$¢ `N+Û^9éaÖ@‚¢Y[ìðâ¼É_G6¼ÁÞl½L#~@Ãv†Á6@Úʢ©î$ƒýØbÏy²{þÚìÈvQLÑ"Ò€Eœ½í€È|Ê7"ïÀP?µ4ÓË\mÓº­§ËõÇtª‘ ±aì'®ø{†h;Ü{9ÄÆÒh¤†q!‰6¬Á a0„XÛSú¼Ô õECáWûûÁQÆ»»Ã¾}Äoß3ù`Äÿp38230ÓXÂj˜tœÀØnÞ°·ö´-}o=€}[Â÷Ed&„} &Yax˜B{‡§}ßÔDIJj—ML2nÚåÿ0 È Dó@ BRu 1õ ã ¤‘*íF59£3˜xŠç‹`6_tyi ³â9–Ô ñ  á † _0.2ƒz/s|`þ׋¤%tçuæuTx±q,TPXipé×=æg.{‘ÆCóÀðð—ÐcLæ´Ydø"'¨%wx…Úw…zx€ŸÆxÞG€—óÕ²hCi€„À’LÕ$*ÿ’y#„vAÿm 2Ð}èNèxÓ LúRÓÀA£§b|¸`+¸8{½àñC_H‡|1=&T6B™dFЕh‰ÿ`\ ì`ˆæ×åwžA,+"›Òc€Ý'KÖ芯(qÛÈØô~LcHtSŒ¢ImW~ßp6\ðÃHŒÓ°DU~æSýæa¥R(—”7ë¦.¦€ÿHYAòFÞ.f“ÓÐ=gÓ`dððŽÄ¨]}†æ’-‡åŒ1…H5}˜€µˆ€HÙx¹“¡2¨‡ÐvD60`‘ÄÿèeÐÝ6‰Ô ÙFIè'Y’( ‹ÉlA‚Dá€SÚ–ßÀi@”G&à8™“ˆAö˜4øXFßµMHI’gé‚jy^à7M踸"àP:ið…d >h`-@[IŒã(P b36KÐBB9P£g–h¹–ט–ù‚>æCºhùÀˆ-ÒEg#wYcÐ2 Ã8ÄH Éà6‰Ö\éö£X\78€)i’G¹˜Iv‘ñDO™Sq$@ÓZPgð[02àŽ–˜¢é À€° þ•2Z7Z’–  >Ð ®Q o² `@Pª à` ÇÅ`‰²"õWxµª¥YJ®‡ÊsçêsÝñWp SÅ ŽH Ôpʪ ®zp³ð –Fs\åŒÿ±TŒ¥J×Ù¥è*±Ü·¥O¦%uÆ&³°•`Æ  ;0æ`À?}0 ;°ðœjÿÊ%@PÀ \ÿ"ó”f+½°%aF [B T–±]rgv´H›´J»´{¢®Ðqð x!<ìp M :Ð3 ã$HR‹iP I“ ÛŠ/÷_c’â:’æJ±{«¶š’†AKê)5†Á‹ï0 UàýU¬+0°3 €FCå a‘À ˜PÍ Uç ?ðGÓz’óPj®yãZ›¨›ºt·rëï0NˆQ ºà6«™šÀeë_ú£X ¹j P”F,~°]€»–  Ù`0;йKÐz%g5*$¹ºª«½‹«¹Š¨yÿiSÀÔi¥æP ®P ®@<2¤ñ žÀjÀв€54á0@ dñ¤§ð™` B  ¢` VÐ þ7pŒð ׋½«’º‚­(Á²×º}1Txá<àÿI«.t~@H„@>ö+ +¥  xn™pO˜û+` ù8+ÚFÒ‚¬ë¢ƒj›|ÑV¼Á{•¢uÈsÇXð&±Ð²µ0…¦Â+üè¥øòW2Üzôp\6æp(zHÁ¬Ãºª´‚âK¾Ujº~Á"оPìúË¿µ°)W 0À|À„×YVw¥A…]üÅ`L 9<Èò¶¿»³ÿ[Okè€mÜÆi4 € v€à eKSðØ:NãË<  à ³-H ¶`B …ð Vúšl…jáÅ8ܽ„j·~êÁ{ûÊEùï°­`‰àh³`½àS8€BÀE€ƒJ‘×6ã¬-F1’é¼ÃÛ›®åUvÝAh€ xA Û&p ú  KàÌÄÅRKZR€Zw mÁÿÅLÙb Á ÍÀ ·ŒÑ\ú½ ÔN»6ÝÑxÏE ÒN  N€*í0#½?pfE°¶ Ú¶"µÅ$ª#÷Ð ÚÐÓrûÓ†<·¸í½g Á'R ¯ i(„»ìPÌjwÌ»‚9P¬PàŸenBP¬U½E Í=ß\É2Ú†¥±LÂ+õÖÍ`Îu›ÙšÝÎaLîl ”¶)ô쀵´ DØ@€”«Ê¼±ÿÍUðk]ö80æ}Þ¸=Š ö4‹â$î1SãPÐpÉÍÜmËÇÑ/nÃ| OÚ}qOR‹ãDJA]æ@<0OÇ <ûsoÙ<D J€ùö¾# t÷4÷ÐÆÍ4TÑ˵¼¥/¢hq¾Pà~Å­`Ê Ø¢Õ ºðTƒ‰9°Ô–hüC Y× ú°(bˆÆÑ"ñÝ ó]ß$#&NÈ]Ö×!ªÑæ@àãd Tà@ú—Wœ¹B0¢ zÔVáN Ù€FÞ2¸ßPˆˆbæÂm¼2â²´57ÌÎøMåúÍÃÿâßµàhèð«Áª »€À~Æ •@넵ÞC€áÎ6Õ‚†Ï‘-ÙÓ•Í‚î‡'Žâ„ëk•+7FÄæÏÝz·Ðì š`. 1S…€x° úP °à ½à Ìkã À FsÞDpÞ.Ïð ¤Xw:X1¡ñÕÿÖcÝo’³,È»šßÜ«ânÉ‘,àŸáÙ ÍM¹@‰û«FЙÁ•ðQ´4¾ ʱРztÍ9йÝìÍëy7­ê<-KpRVSÔëþꃎ•°Æ®P@õŒ—mŒàZozáõö÷45gm€ìú@ ÉêUÀön4}hä}4÷Ö¨@žNcÿ%’° È&ŸîROõ†oåLÙõ": #ïÆŒ¾«ñ +/ • ˜KËÐl° (,ˆ;N0¾ŸÛô°?P¬Í:@ÏÍE02Õ­¿ÿ ·òöô­Ù²¿ß¬É°õ\ŸÈ¬ïˆ¦z k¬^P S09S¢ÌÒWÐ`­[?~ø¨2 Ç"!¡SŒ]¼fÖ š3hðßG=dWRŸÈ“Ù…dÙÒåK•0eι’æÍ–6qîü§“'NŸ,;¾sšչŽI•*å¸^,W±f¹ªtA•ÞY£óbkµ`Q˜à‚É„ buŒiGV„|ú1Ä®]":t´a“-ãF¥.“þ+X’]AÂ){þÜ”±LÇ]F–Ì’rå——næÌ´³Áw™Ôž+z©Y³dœèÊÆ­ ¢r¨ÿU°B„ðàdÉïfK–è "„ŽŽ Ͳ,4åH“$_Ƽ¸:L꘳WÞÎægðI³Yëµüó9® rÐÐ,ž>Wª-Ušpõ”¾fŸ8¼*øŠƒf Qè‡ß )Ƚ¬ .ÁŽšê¨%ÄPJŒ¤’2»î¥î$˱ êÐCÁô1gDK4ñÄ{ÑM·^P,1– *!‘ „0ÆœZ(©O(¢Øàs„¨bƒLFÌdˆº†øA—ÑËct™ÒE 3lK.»ôòK0ÃsL2Ë4óL4ÓTSL”ÂûÌ/÷Œ9ͼÍÞ©d´ÒN‹#+’a'?Ød›„6Û8¨‰ÿxÈÁ®ãF¯b¼Ñ£ =’rÐ#çN 1}©0Å.¬IÔÉHµÌT Qõ%7ÁSð=s0Ò¨3ô°â v¬© (ª˜£(žXaHÖ2(vpa‡“ áÚ0£ jûH$æÌÉ0Åš›ð°PEý§qR5¦s­ ±UÎ^QVðØ*xôi…|)hÅ z–HÔ!~Í&!|på!rÀᇇ ]ÂŒ3ÈXâ3À)èÒ-ã6$L%WÕrÍ=7dšH.ù;v9ƒ39•K9– 0ˆ% *0Ö/]öœšÓš]pÀá7¡u†ˆÒˆ˜b2Иf‘<,Ö–ãÿç2†0¥•¬¾Ð䙸Æ.]¯¿f5åvOpVv+±¹ ˜+)HAc Âh‰Ó¬f hë*ân$p¸"ˆä ÂÏœ @é㩵žT”cr¼º°1ûrÌ×%{©ñÊÛ\mcÛ~»™¸õÁ(‰fè)ènh„ÀA¼ÈáïÀ!ã 4 8zŠ9äÕ®Óp3ýÕÊK9sQÞœ3Œ[…Yfš×Ög…kÆ W}áÁ+dÿa—£“žøŒ4$ÆÖœiÁ–žl깇›šÀ5i&È›gÞÔäOÝŸjvÕ⯨ÍR¢×ªVT@hÅx¬1G8K°F<¬!œTh‚<¨‚ÿ F·%´)(ÃÄÈÕ™#‡˜‡>x6ŽzH%à"ÞMÓ1 ¥K]Èû©4îXØJ-|Û*Q‰X(¨gÖ0†‚@ø(J!-–pÁ÷¬ hd£h‘ ÆP8@,‚y8Ä"òáhô£<«Çãjx2N®1:ì_ªô·¼±¹é6G©E+e©"vde!=æä(»4ƒˆ‚/bQ K¤#xìpÂL‹4¡ ÔD¡¸E´gñøÈ=š¡ ¥ŽmRåcêhGâQ–Ws“ xþ2£{éšÑ ŒÈt¿ÑVt±=QLÁsúØ¢%ô±D Eíû8Šÿ<eã#1¤_bŽ·ÊÄ|ªxsìáÖÊiÎ<†Ç–AO.´K^Êí—ðæŠÉá@cƒgcæ.ñLBHS‡‡ˆ BHùæ"1 9%ôPWÒñœ”“h:Á³ÇZôñï„ç Oc C*ÇQ¿É&–5 N0cN”´$&'‰o”15ˆ_`ØŒ6ºqœÊc%A4Qí5¨Ome,]¶ÊæyT@ÁŒp„=‹²xðƒè‚²ÊÇ/$ 4{hÃPa·^È£#Ö¨G=ºÎî–nê,ù'Tïõ¢, gZ¥ÄºÙÉV–ÈÅiJ»e#xƒH>¡ÿ÷sh X03´A³=àÁÔKÝ´›êÔ7-—)Šâ5¢v½«^wyÀÍx´—HÏ9‚˜‰w\,)!½ ¨JÁÓ"{D4r·…G c5¨‚(zqø)tÍX(§†'×¶–µâRíj5OݺÉ]¾¼ŠAŠ‚šô/w£›Ï •‘ÉÂ@€0ƒ¢€>˜A0Ç(_UÊfЯ´ %Ì–Š÷Jtmwdp¦ÀÞðŒ#åíÐayj$xó-Ý _¤Á ¸ïаßþºç¿ÿ0¥€¹ÄPû¯ÁÚåŒ}è¼§<²¥­+l›•ÜêX!4~ÖË‚Lÿ#|D"Ž›Üå6÷¹©ƒÓ=¦kžØOËšªÐ\oÜÝŸÚ˜»® $l7Ó[hYƒ¢±z…L##ê{YêˆÂ¡ šmg=ëžÑÝtVÑéÒ§‚‚àìÒXÑ_V°Nái楠™‚úxJTh¨cC.aÊ’‚8`‰žý%‡H „ ?£³@«Zkz{˜‡[.mýd\c1_шN´8s,äÎÈ–N~}œ´eU¡’ Ð™ræ!S}<{I-=ú1d.›¤¡&ðªr­k0“«¢ß/¤“"á¿læR®B´L@Ç!‘ØEb¦ðƒFZºnpc ÿ ÍrŒ ÜmoãZáŒ^8Ãü`s¯оD±õñ›%@‚I‚·¼3<ᢂ@#†Ü³Ïžc0øAÀ¡Õ‚oÉ×$ØA*:†‚^0+‚#ø$?¸‹!ÀNx_˜Ó—ñ=N”œü+ž@ MÆ_$;‡KFedBˆ»ÃK¹ íÙÁKppfдԙ“D8%x†o= »p÷(%ù‚1OiĢc ‘Åà”n‰?šC¾Å&tÂK®‚@‹t»¡Ól ¦gZ„a¬[c³†lúˆlm:8ËûEŸ`Gyl“ÿã¡Hª7ã“CO¬ŽŠÜ Åè‰Yè†~¨mP¬làm¨‘¼ ‡r¨Õ¡Õ! –„5êS„êz1a¤¹¥¾‹ êD´Ã¼ŽÄŒÄ‰P¹‡¶‚Ên˜…YP‡l¸†• ¸mj+·¢‡|(‡mX:z≶âEYóEì ŠKÔœœx¸ JȘ?¤LJ»ü‰ñ‰é: ]˜Ø( ‘ÀR‚kP†aðo˜B(eP†Ñ{« d†Iâ  8tž8‚Ç ‰Í°!ºôÌÏô.L Ç@In¸yÑW8†^È¢éHØd‡tð†uHf`]`†çˆ±ID8¢DÿZÂHG»L!4âœÇeL»LN¼¬Íвb §/°ƒÓ’“€<ÇñúŽt„GŽÑÀãüÎ-ÍäSJz¬GJ0¦ •N1ž Ñ ¡B£Ìˆ¬õËN¬‘ËÌøï4´ÝdKv4Nâ›È¶ÔÈ¥¤¿ôì5ưšöŒ£÷;bô½û¡ÏÿŒ9±+íTÇÒjΨLJp"­¦L¸óTÎUÐuÎŒŒ+ZËËÃ00úÌ¥À'éØ)P±Îä»ÎûÔ̇jÇcÐEQó,Ñ»tJÒ\Qˆœ5¬yÑ0ùÏû±Ð›ËÜ”%• n«5áÌÒNRŽ4Òã;»ëÈK%%žà#Ít”9ÿCÏõëšÍ“Ïìжm‹GtÔÀ©%£ô@0ýÒôܵÍÃÒöK%àÜO'íÕ8R )4LÑmKÒ¹\N=íÓÿ¹S‹z¨A­-ÙŽ…¨íOÁðf„¨pN•O=ÒJSætCáÜT»<*Ê DUªá’7j%/ÅU">3=к´TJIb”È4Å®c­šžQŠÐáÔGËTÍžTVÑÜS¼TS&$T5tÇwÜÄä».D­E]Ô)ÍÓj]ü¹Ñ!=­b5Qn%oåÒJ׫Æ™ËÌ[Ž)e]ÝÑ·äLL 9 O>}ÕzýIJó”m›Qg•VÿYÝ×i509¢µ€T@ET¹ÚÐEφ-R››ˆØÝãOõR6=â¸bejR’ñÕÃMæN®e·-ÚgvÇhÖ û¤fa´fÀfužfNåfP5[ò¥Sz¦ecþã0µePcè˜áð½PM6»¸tQ7ÆcqàÕ¥ä9>ßpÎgÿ5æç…Eà¦µÌ ôÖBcÆ-;Ôð}CtUTçÍT6H…fžß~.ç«QX„…`­_™µÎ*5ÓµõOT~[›Eã§CMéýÕçvácd’_Ñ¥5kõ¦³ÃÖꡆêY^jJ,^>¾V—dC7§~êqÞg’¥è.6ênv¿¤íßÞÌéjüc±öY·¾çëŒé@\¥]ê Æ5¶æä·†ë¾në÷{Ûã$\Ñ¥]*®<vêŸÞäCfiÇë?}תH|Óüt&V,n毎êΞj‹•Ô:JÝó$Û/öì7~lÈ^í•þ[o62Ýë,ŽÏFµgÐ]fÆ&gÖ.cÿÛ.;»ÝlVÖLfk¢.äÏæì¸>h÷í¹îà–Ï'êÔÞíŠVíêÎÌåF•Õî¨=^!õiÐuèänmò¾néåkÆU•ÝéV–èñžhë†ïò6oúnN›îiˆï4öë¿6îþöïøžãÓ^ã• ï=pOp_pOB ^è÷æoê–ïúð†m­‰hžo ïp Ÿp¯†UÜžýÆmžíÿð ÷×Q×6ÔpñþoôqÀ¦qÝvWuüÜðFñâ®qgq/käŽp'î ¿qWò$7ÆâñÛ~p_q&or gh9‚òõq©.r*¯ò!'X/ÿr+oìÿ%¿ò0s!`Ð>òwsÔ†ó6's3oñ7Ïm$·s?s4_ó;§ó4ïs?Wó?çó×ó=ÿñ:GôEtBôD/ó@otGtHôI?tFÏô<çô8tM¯tJ/ô.WéMïtR?õO7ôP—ó1gõU—ôV¿ôQ§uOWqPuU×õ[ŸsX·uTOuQŸu`çõa'vY7öcWöbgvL_vgOv\ÿu_ßõi·öW—ögvh¯ö^÷önÏvl¯uKovpçvtßvs?÷\¿öq—nW÷p7õo'w{¿÷`W÷u§÷t×wm—÷y‡÷vw÷€Ÿò/w„OxdÇ÷|Wø†wøÿ~gøh—xvßw§öŠÿw~ø…ïxŸøGíy’/y“?y%”ò ×ø‹gù–wƒÇxŠxŽø'øšù›‡xœÏùž÷wžÏø™§y™y˜woŸÿù 'z ¯w£wú˜?z¤·ø¨—z¡ßy¦ú§/ø©oz¬ÿúª‡ú®_ú¬û±'{³_y«ß錄z›{¸§ú³×ú°oû²{·Ç{´¯{»ßz¹Ÿ{½ßø¿Ï{¥ß{À×ùÀ÷{¯O|Æ?|Ä/ü´W{®—üÉ'|Ë¿|Á7|ÇÇ|Å_üÁgû¾ç{χüƧüÐ|Îï|ºßüÔgýÌ×üÖ7ýÏçòã~ýÈŸqJÀ?ì™@|%é@)’ O) hbì%ã*°3â* ’$ ŽæøO’¨àDB®8P#¸V 9X'`Œ{±ÇŽ¥à¨#>ÿI€9ydG4`Ž™[ihNŒD6¥$j& Y52ß ÔÈ7H$;€ç§Hú舖õÊ ‘HBÔH?þS€k'®b)%R”ã’î 0€kt—\GЀ׉ú°ÃÎtšêf¥á÷¥› ÔiG’§œ¬­þÚQãÙèk $ ë^ –”@@@£ÿ8çÒ°#©Íú,^ºþ#I† 4€QâòG’šÀ”}ë"¦ˆ²³#H 0 À¶:º ‰[ã¬ân}ñ%¥¹ÿ Køæ+1Ž ¯j+nùàm‹ÍZÒ*˜ƒc·ÿø ®µ–’ÿk±¤©ûáÿS¬H³RÇ¥Øk)±ûv·,Ë[j¦ª2ÓL,ÖYlÄñ|Q)Ð> x)Àæ¹Ò²xŽ$¤%xì ŠrµÕ5°×Ù‰«aCâò Ò¬”ZMª¿ÃæËè ²-’¸³ê#€ÜžNDÀÔ@²}¢A¨jÔ"m|¼¶·*qIL“»!»Mf¥ù‡æ¬"£™\ï5€¾+2Ýâ€M@”ûÉòˆé?:~h8Eúž[,‰«·.ô®¶>{œ°lZÀúƺ“ØQfÆÎtì ¬"<¦Ë¶Ü‘ó™ï+ [)¾{Ût À¶J×A–uì,ÿc:ÿy´Àì'üÂ6”ñàJ}ökQÒó•èIü»ˆ$À°¸¦Ç¹ 3¨Á r°ƒü C(Â’°„&‘¯¤Õ!eñ‹i«(˜èY£-²• $â¥ÿV´¼"icäydžÚ¨Kx-IE«¤%ÒØ¤¬¨Œºì”Á\©ÌÂÒ‡Dò•¶ˆô.I CےΙ:"E’H jÒ±ð£laÓNZ&:7ØLˆ5I[I“æ¹ÄYF+⑎dãŽÚÉÆúñ+–Ö±#KQ£Œ¥³ Ã1G#Γ¡)k~ñQÔùê¾qa(~äi(“¨˜P‘/"5(HcH¦’´¤¥ @"KªÒ•²´¥.})Lc*Ó™Ò´¦6½)NsªÓò´§>ý)Pƒ*Ô¡µ¨F=*R“ªÔ¥2µ©N}*T£*Õ©RµªV½*V³ªÕ­õU^ý*XÃ*Ö±’µ¬f=+ZÓªÿÖµ²µ­n}+\ã*×¹Žõv½+^óª×½òµ¯~ý+`+ØÁòµ7ñ sªB˜Ä*V!„},d#+ÙÉ>Ö°; c’Ù§lE%”ý,hC+Ú³¦],b2ÚÕ²¶µ‚µlPR‹ÚÙÒ6!®½-no [l–³S9mm’Ûá÷³»Šl; \å.¤¸Î}îkK\¨,+ª….v³‹×㥺Ôîw«ÝñB—»I®uÁ‹Ï’·½Ä5¯TÔË“ÞÎÄ»q/~q ßžØ×'ô­z…›ß¯v¿e.‚Ó+߸Á¡5°Vú;_ O¸¹¾°d!¬Ù‡WÁ 0†C3šÓ¬æ5³¹Ín^s5šÌ•[9!o¾3žó¬ç=ó¹ÏbŽs”<åø¹Ð†>4¢]f@o¹V4¤#-éIŸ™Ñt–ñ£)­éMsÚÏ–®r‡AMN“ºÔ¦Fó§ë¬êUúÔ®~u©SêYÓz °¾5®%-kL_š×vÎ5°ƒÝç]û7Ђ^ˆ°“­l7»Â½.6²—-íi“¹Ù466”£MímSÛÿÚ(ƶtÍíq+ÛÛRn´£»LîuÛÜÇ~¶³ÅÍîy¿ÚÝÙ†÷µµMï}ÇZÎþ4¿Nj{‡›Õ¾FˆÀ®i‚cYÔß0ºÏ n.ãûÜ·ø o‡o\ãù¾ø»2„‘“¼ä&?9ÊS®ò•³¼å.9Ìc.ó™Ó¼æ6¿9Îs>r$Dç>ÿ9Ѓ.ô¡½èFG9Ïrô¥3½éN:Ô—žtD½êV¿:Ö³~ô©ÿCë^ÿ:ØÃv®‹½ìf?;ÚNö´³½ínûÖ÷¹Ó½îQ—»Ýó®÷½ëï|ÿ;àŸr¿ ¾ð†×;á¯øÅ³=ñŒ<ä½îøÈS¾òNŸ¼å3¯ù c~óžÿ<Í;úÑ“^å¢/=êQÏõ€!ù,]9k‡ ///QQQY^mN`s[cmnnnMx¨m}Žkw–wmŠy{‰xx™g|£u} Y‚®k€™~ƒŒzƒ•i…ªfвm¶y†¨rްz—¹žY±a©n8·r3žYX‚id‡xz“xe—{y SVªtA¬|\ºM¹{X©lz§{e½cn¹jw±j»r}ÉoÏ|.Ì|5Ü+Ü|7é}æx'ìy9ñ}'ð}2Ü[[Õ]aÆc@Ëd\Ê|OÆ{XÜkOÛfVÖyMÖxUÇciÅksÆvgÊrxÙdfÔmqÞreÙwxãWVèfIåfWézIèwWãgeåopæsfäxxŠn‰†u‡…{˜—m„–u‹™~”¤l€©w‰¤}‘¶y†Ê|ƒy˜†x«‚_¾‚I·‚X©…f®‰xªz¸Žh²q·”tÍ€9݃.Ö‚:ô…é…'ç‡5óˆ(ñ‰5ò‘:ɆGÅ‹VÍ‘XÓ‰GØŽRÜ‘MÕ”XÍgÇwÖˆhÚ€zÙšfÚ’{Ϥ}Ý¢jاxìˆGê…Wç–Kç™VðŒDò–GðœUè„iå‚zê™hè—xí \ð [ê£gí«tî±|ñ§gð«p‡‡‡……•–…‡›„šœ’‹–••‰‰¦ˆ–ªƒ™¹—Š¢–ªžœ²ˆ ¼š¦¹¨€€§…—£”‡£›–º‚‹ºˆ”¸œ„¨Ž¡©˜§«ž°µ›©¢ Ÿ½£Ž¸§™§§§©¨¶¦±¾¹©¤±¬¼¾²§¶¶¶‚ŸÂ‡¢À˜­Å±Ç´Ð¤®Â¨¹Ëª¿Õ´¼É±¿ÐºÇÔǃ‰Ê‹“Êœ‚È‘˜Ù†‡Ú‘ØšÕ––Íš¢È¥ˆÄ­™Î²—ج„Ò®Ö±Ò´˜ÎªªË«³Ì»©Éµ¸Ú¤¤Øº§Ö¹¹äƒƒå疊嚚꧇å¤í¶†ì¼”夤麣常ð¾¾Ä»Å˸ÙÀ¨ÙÇ·ëÁêŦé̵éÐ¼ÇÆÇÄÌ×ÊÒÚ×ÇÆÞÏÑÛÛÛÙÝáÞàâåÄÄäÏÐç×ÈæÛØóÇÆøÙÚåßàåàÛåääîîððïðþþþÿÿÅûG° Áƒä§°¡Ã…#쇡ċ1j¨#ÇŽ?‚|(rdÃ’&¢L)¥Ë”MòF“¦¼‚1_VÔ™p¥NŸ?y"ê’hQ¡-‘äÇ´©Ó§P£>e'µêÓ\pµã…á“<¦T­Š–)R£)ѦUZPíH·oϲÅ9¶nÔ²vŸbÀІv`ó ÜTî\¸ oœ›ô°á¹ƒãåwO]ºuu÷öýK8r]¼•*^츴頌=ÛÅk/R£×ö‰Åª•«×Ϊ­‚::$ãÆ¢÷öÍûwî±e÷¹ö†îQ£obã}Ú»0îãw†ÞÎçðˆßÁwÿç‰]wS{¼1½×(ÒØy¼pñrçtrùúÚ‹Ÿ¾_–á=tŸTe©“^S®Éæ™}ò³›wÂýàIVaj NÕ{¨³O:@’ƒ>ˆ[Røß‰(ާS†6õÍk4Ú3"Œøæ+¾”bOºøŽMM¦Î#‘xcãD:˜ß…-ZÈã”T…!‘$FudM:©#”Uî($€AzÏ™h¦©æšlª ;pÆ)çœtÖiçÐ2!€Üé矀þÉT›„j衈&ªè¢Œ6êè£6 œRÚ£Ž=²eÙ”í½r]šè£”a²8&™b"ÕàŒ°ÝSÖ=âlÿN=N9§?Ê5²¤yMŠje”=þZª©ÂRzˆI:çMX÷`㬳ô0µO{MyÓ!¨½>I,˜Ã›ê·k]‰k[òI#Ó06ÛÐ#޳å’ËÔ¹»V¥)v¾¢ ì¾§šô#à¾XÞ´î1e-4L9ÛÔ6ØD˲Þ(ûY¨Úެ·ÜlqÆB h+®®¥Ë¼ê6,#”KÅ_nëòËó¿ÆÝÇ©k‡<2lë¶û.6*óc)¦«±l–Æúò‹t¸wôoEªƒ³! ‰:âDáDΊcí#·F6¬²Òz\¾Lw;óÚI«ítÍ ¢â4ÅÝ[«cˆ|»ÿ‘ŽØN5û¬ÉLͱÌm/M3©l³ãŒè8¸ˆM(޳{G’$nÀôÄMõì.ɪ¡½¸ÒŠÇÕtÚ³£µ˜=Ó„¼N"n¼Qî!~†é ;¼`ÅŸŽ:âÆ»MdΨä L,Á ˆŠà®;SŒ°ÁL<\6<á÷Üz¿É§žX™‡ Üà=8»HبCHP¼áF#é<ÂFš`ÀK^xÝÏ>×=Ã!Ou«C òÊ—¸ŽÁèà!º(,A LxÃÖà6°á°¨NÑ648ðçÌ!`Œ 8>ó//„¡Dž¶"݃!ZDh@ƒCboD{ÿ|á¿n(V³‚ §^ ˆx < ÉÃã1…+Ô9uU¦l+ç¶Ç—Dߎ»ŒÖõt@¬"¢€d .A‚€B QƒØ€Ñ‹‚œùÑQÿ!ûR‰Ç&D‘-dâÎx&¯y÷Íokû9ÚÐvH¨º» M7IJPÂ!hPƒÎâ Kp0S¸rÈ™t¥*ÍB€„uc+Ïþ.o¿û,r>÷–yXÿŠg“°pìà ç]à ±ˆs×óC‘Ä)8Ãî‹KE€¤{6–yp•Trè>v`Ê)Ó úmc¤Á#øö@ mHG®^C9|Âñð (ÖŽm 9aÆÆ†Ì~e.ï¶è“0ɉ~a•Åóó6 q Ö€K Á,¢{ØãtunA•î>kK$‡|Ý|CøÏ¾}»Û5oòŽÞ8!ÞÀIª¹ƒL`B Þ`43E‘y¸Å-|Aà®U´ü请ö³z~\ß§äÑ«]òÓýÚv9RzêO~|#px$Bú@üÃmÄ2íà ^ÈD#uÐÿV£ŒvÊ8kòêpå­âª7ŸóÄùñãOíàæ}ëœK¤È×<|Í@Þ@Ó€ t dpŒÀXõ1~Þƒ ë‘5Nà{ØeLFŸ|Æ÷~ðW|ó÷oIt‘L’ _†9÷à ‘ð –ÿÿÐ µ Fv9õ!8âp{ë§r Ó]¾7#DŸ2YîG"¨„ÂFw !ßÐEÖ ¤×O$%÷àqð ƒ 0vö£  PÑx%ô9†{Uñ1åà6BSPp™wrÓVøev {ÓGÔXxN±éfñ  ^ø…ÿð GBqÿPÌÇ,ewvP!Oôd¬ä ®'‡rKHkH'|uø„(—F¯nÀ‚öãHÍ'-ÎÁDç@ ‰¨ˆPN …\/5 pè »HE”gŸ¸„Â(mô'yq.‘Ð7kÌ'-í”OL±R\d?b:0‹Šx 0 ƒè%La‰CXêà îô0í1€‹ä‹9ŒÄ…Œ—' y!7†€Š¸¨‚‘ D¯±d?Du‡ÀK3بˆ¾ðŽà¬XkøƒVa-4¢¬2)rs—II(£ˆyr—tuçf,6UQF_Õ)½tz ‰n  PŠ{´á-B8JÆd·ÿb)ºd‘yXCÿÔïŠè‰|÷ÑHå0/{Þ`?n`ÞP2ð.©ˆú~a±.³Å†9Uq•…<‰‡h‡ó¨"9—¥‹‘ЇüЧÇAk0ˆ ˆ1—•†Å•#é•‹Žx‘8–Y–f¹yA$e¤`õpp€’}3 ^ïp—¤   -À1’U5)7éf:…I˜«Ù“­éšC ‚±÷RÁ>üˆ?¼¨¸ûó1Ð1¸ˆ¤ ˆað0Ð`;+wƒ7Q`6b‘¯•IÈš°ibùšÙ›Æh(E#÷ûÿðŒ6²G|“¾Éj@@P1¤` 1ÐÖÔ08½Æ_G„æH_¸˜qב¢x‡ZŒ#!lä˜a•‚ÊA5tlàvjÀÿ€²0 _h 0!Ð NÑb>3yÐelá– ñØ„D¹dYkuÑHÕ€$ÚЋÀ”à|Ój€.00ñù ° › ‡¤QM1y<…3˜×)£[Ú¢BÉ` ‚a£ƒ£Ù[KÝð£œä rðvp  µp  b@&°¹ Qå¢5WjB¾S]¦‡:£_ª¨òÿçyy± áˆEÒ{Š@?¡0 áÔ ^÷ÉñP 0Àz TP¼p P ìâ.(ªT.ey. ”0Ú¨^º¨ŠSuñý¨Zɵ@Ð N1r:žúD   B €î@pwã,û -gc¨\z«Šy˜³J«¸JyA›øÔŒSQ [0 €¡ š!ð$`<@ Åsï` ÀR€ï° `w³ Í©5Ïéc˜êš‚Zú­ˆ*±ŒŠ Ø)®J‡#¾° à°“"K©à¤D€ ÍVgHJ°¦@ öE“]Ó ÿB#:ø{Š–µj˜tH ?««²ZÐ Y`"» ”`NßÐ @ÅÀ`Õ ¸À² `ʦv}Yy (ô¸ÕL;û¢=« ®‰!kg2h¨(¾p›ÀÑP Aì pAƒ °App'£†¸ `¢'HQœf·H€ pBiÏ'Ïphq 'ªæ¶žû¹ º¢{( ø‘Ò LQBÀñÐ S >` 01À 5JªËl° ]C 3„5 z8ú•:;®¥®A‹¼É«¶1Ø$î@6ITñ@·î ¾°DÀb"{ ÿÀ'q0†¤æpgp @Ÿà [0XÎÒ¦PE°5ë"`Ù nô“>›˜Z±N˜« 5U!ùÚ»Å08ýÙ @½Ûb^ Ä`qðÈf-„ `“ ÁœP âÀA`¿Q°~[’z†Þʶ1Jöº¶8LŠ®cÌ–B¢±ÊX» ¸À=ZE®¤ q P¸¬u5ê  ÀЪ ò𠜀Ű œÀØ0„8' èÃ2 À ñ< ´9Œ±Ê»¼5ü¼V¡LAB`X ±Oa ŽŠÐ?PÜ S ° L ]ÿÑQñ-À ~¹¢;‚3Œi{±o ÇÜb‘YwœÇ§E¨¹­'^p&¼P¸Ààzü ‡œÈ]á«Ú0«ÉëwöefB·˜1ÁB–|–̼O󉳑[áÃ@ü¿uܧXû7IÅV Óñu›` ^ Æbì{Êõx²JÇt¶nLÀs\”kÎög½Ó±›ÐÀÕLRáàÌÎ\qÞ`¤g¤Ð»ZU³ åÃB H` ¸à ëâH \€P°-µ2jŒÀáË—ŒÉä|Ù,Î;lð!ñ@½±*ˆQ!~q 7öNùà \ "VÀ¼ÿÀ «€ ÂÀ ½ËBàIp"ëKÐ ±Í“s‚¨è¬ÑM±¼¼t‘oáð‰€'Ve L¡Àþƒ D,p7€‚°7̤ÌLцúO¿<Κ|À}Îñy‚¡oLñ ‡ Ð üP Q0ÓÜ#˪]Xp“×nÍÓ’)”ÆžÚË,jÀå*Çq¬Ã,Ú4jwªØ‚ÍT½†MÅ`¿V@鄽T*\š¶A üðp4"^`É=™äÔy­×ä:ÚM Õ@¦Iu1ÄELØð XýÛ¦U€A °‚ ,ÿ ¾`ÖY8pEÐ=àÇД‘¹† ôUÂ}Ô“ìÙ¡MÚŸ­ßû}ÜB; À ŸPqbAD*Mz,Ý,N€"k*À\‡"»+¼?­ÖI@Ôø,"öðpoðï4t=ÑÅMÜ'¾ÉøßLhM÷lPDV{ óð gŠ`9LAkÂ.[0oV7Hžänއ D5œ²% Qâ÷Íß|mÃ*ÞÆx­åÿŠŒÒ± ª¥ºL‘PÇôÍeìpBQÒ B`Är>J° Pà.—Ä?t ®·aÉÆ{-ÌKåYÿÞ¼é,\†ä ŠlæñHñT `†Qñ\ÈP xÕœ7€Qp½vAß yÈ)«(Îa#S>ÑQQèý½âÆÝâÀ¬Ô.ŽXìPæPœ TÀZàõ5XH¨€~jí wçxþ âà(43b‘€Ș)OAåh8=ëVëŠ^ΰ¾è÷ñåÀænîÀ± Æ0ÆRAÑ› öKåí®äI ç|8çÂDKBßœ |ÜîLwÜ }åMë¥ØaHøV0.ãN½5  À*° €±U‹à~` 3± É€ Ù`ÂìàÖ` ¢ 5I®Iÿ.ÙN  ÚpޝWˆ*CðÃ…o{Ô®Îâ\޼ùê ñóLÏcn>àPAÖíû ¾E~ôÀëYNg° Guá\“ Í ó° è§C<ö+ÔCÝäÊ\ßÿðO[ɇŽè܉NÌO± ÌŒ @Ü8PA¼ µ« o>Ɖ@u` Ö0q0H`VF°5Á;8÷ È,ù7 iú.MÖ|Ú…fá©nïð ¿ðà^ôBï“L1ÎleðKHL¡X¾í *¼5XoLá qwc °ÙŠËÎbf?­U¯ï= dïEcðdßkÌÙß.î)ÿî¼vïý㮇MáÌi>ûµŸoMû û•kÇt@òü  NJ[`üÈÏ5QÁkF¾5,tdÝs²¤ l ÁñcÈ]C~ÿ$N¤8‘¡Åx +Æ«ØÑãÇŽAŽ$)QdI”S®œx’eJ—/=Æ”9"C 0øÂõàAÆ›A…> š ®\0XµÉÂl÷¬Ñ™c ”„ ´RÉ"ÄI”…AïE)²…—$7~(Òæ$É’Dôè%×èÅ’ùÅŠ×dM”4ÏLRpá–ˆGÌXqPw|ú&ÔòÍ»ã}€Ar­ ®À’ÇP9 Ù”…8²\ñÿ˜°"EˆlÉtãí’%¿õ@‹77¬Cˆ6/6ä›Q¢_Ç…£KWüqzãêÖ³ÿÝ^Q¨<\nµ»\žafˆóxáâÅsÓ 7ɧg+à€írÀ@…­0à"^, !¸@¢”"’pÐA%|ø*q°9.3nú‡¡æ–‹ˆ»î@ ñŸëj*Q¦Qì.Å—Ìs±<ô,“‡3^Ú ¯“„¨¹€ŠbĉG+ ,X…7 *ã X@ !Dá (±‰" |8 =~8›ºÎKÎ#¼ôâK³IQÄY\IM˜ÎD16SzqNˆÄ™.Ëk稆0°zøÁeGN6a ¾ÿXøÁ¦ raÈ($°Ù&·" Ü†¡sªGJM!ÂÌ2=dŽ/Šâ,ÉÔSÝDu17ÍÌ®9Xc•uVZbçV\sÕuW^ÙAfÉ%‘éW^.ØW $@"v€ÑäP ¬¸â‚XØAb‹ >¹õ“ ˆp #L¢ˆbn]¦Jv¢)æ †%ªVxã•w^zëµ÷^|óÕw_~auõL:ç¬Ðhè*OžM´‹ jâY4È!3)’!$·p¢!ppÐRz¶ñh΄@0û²#½DÝйçö*sÅVWÉfíT¥ÙÍ€_Ü4PvŒ3oÏÎ0ø$p¶°ÂŠ-šëŠ*N8Á’ÿâEˆ T‚Ro“ø* :Ú`cìAQÇ®•CêТ•™ók;œs1îjÞàžÍûÙ!¡Í‹g=^æáç– oà–†Æâ˜$œ‡$ˆÀE$p¸¡ß¾nÃ5:ïÜt¼ÔȺµÙžù" æ¶ûLºUÒîVó6o`z æ²g^ €^$«ºÂbä¢k›„°ùj›bn¸Jå‹ÙF ààüó5Þð&’?B›¢0·çþC޼‡suÕY'¿ºÖ½“½¼M±‰ô8:7y êÜ7ahÓhš+ …¶‰â«-ÁN¸0Ò¡% tƒ×`ˆF ¢ÚûÈM`ª¿ˆ:¯+_ÿ=¨˜ô}o}—±žd'?ú=À~üÀŸþ°ñ„¨0ÄÛ@ ð¿"àÀ€<ÄÜð†rî÷€F#q™•ª/•Ì’ˆ¾óÝ-MQÏFhžÍ)w»ëÝü<áM  ùY2„@.ä°Æx^ô<ç8tîlìðF#γ2i/L_EÅ?šƒP´¢ì€‘‹\)(YœÓ-&ó€[Ø vŠ””¦z€cJ³…„°\Ž`#A Øà¹5À‰ìxD#ìÁ~|I2 Ë4¸&@òƒRaìdÇ‹¢ h(WäÅ&6Á‹ö)$›%”œ‰`€*8#¶ÿ± qC+ hˆH|ãˆÄ>.Ø=·ÕR„·T§ wHwêrD†O;€q‹‹©ìŠ_Lˆð°{Ð%d†(,p…d“ï@â^¨ÀX #SÃ7‡CD0¯d¢ËFgnˆ $/aWÒ*â­gF1’¥Ï}îsAÆ\.5S(ñ£3Åã*²`B~h“üˆ„#´Â:¢#ÐhhG?Ä¡‘&†mSÅJá9E«&„¦ K²§—zjŸ÷” kj!ý}E§˜Ò6<ù¾ 2 DUÄQ!шu '9mk.©*R­æ²—ñÄêUCDÏ[ãžùëXi7—ÿ”K!ƒ’8<¡5J‰ât‰ÇC#Xä܇^/K¿¥M¦éýJØ“¾Ó°)ç/ƒY5˜ “dˆ<ÖcŠJZè!-³&„"¡÷0Î>”¡L CdŽm ££û(tüX·uºöµ²,yË+Ïî #-“L !¬hœ o‰rìŠCÿ{ËJ±$‡I*‡  P †6ÐAÁCB"(~øµÝ{ŽIÒ Âv¶æpUU:ÖEÒé± éÄQÚÌO”Æ´ ‘¬&P\°$D‡"¸Ä0T ÁTŒ„4”ªË™¥xßÔáóšÿÉ´Mrw@Ü^:Ét.ñiHxȳ♢Õü3ÞW,4àD\Êm Âô!ˆ6`ì =œú2ÁyLà5/“c[Ø:¿d«x|rc}VÖ,SùQp‡è"4züïÅüã-˜‡6ˆFxƒšÙ ¨7ﱯržs©²ŠÞ;+yÉzöeŸýì¢c£Ä¸81æch tǃ0C¼qA â8Ö1· Ç0TàŠç¼G×å9°u¨í¼SçÖE.þ 86Ì+cù³ÞØk#ɺÜ#†` Ø `:0ØÁ€þj]ìXa$Ùx¦·³G½ì{&Ú§ž¶¢ÁÂõ°§/ÿ+h’5,PAšÅCë>CÌØ„hÆ+|]ír׉Ò4²M“=ïù_õη‰D]}£M`ý„lžBLF·$7k[x¨)ü){–9Dn1‘Ž÷UÓ›–ª²=Lòf—¼µM¹{ƒ"e´B¹!ŠÞÂ*0.‡:ñˆüF¢¥½‡8²»]"“êã°zjœ=Íì¤7Y餶wvRk½ºoÃl”¢` x ëZçº=hœl â ’à‡dÝ({–&γb-‘÷gc>óGOoÓEÌrƒI½ñÎ,‚Öp\!!SÇ=ñC¢oà %Edƒÿ†;äÁñc«ýÂvç`7|äÓýÃÑvúÓ¿—3²Ü ªä›qÁÅÁ† QˆC úñŠa LòO?àedOt0dútò9r“rßÍ ¸±n+i‚&˜­±jøŸDH„ÿ#ƒƒ’*HÈ„[œ1‘øk ™¿<ê@|»<û»¿ cºý»»»(gr‹$x„DX‚U†"È‚Mˆƒ@¯†*Ð r¸À"Q; Œ§Šª Áú;Aü+ÁÕZ>Sã¿õÉŒÄ.©'‚ °'à $x1)y1‚H‚( !Yè=$iÿ˜™%á[ŒaA\ÂlB&”Ž~y?‡p>ìC?üÃa©$@dp%qå)+ $(†Üû$`(A†-È‚8” è`à…<ìDOüDP EQÅ‘ë¼ô<{À„('€CüÂ"È„M5´2l…èbÏP¤gÔŸKš’jxd¸†wxvx‡k¨)Èwˆ„¼vàöˆŒhÇÿ ¨ú«aŒŒ¬˜¹Ã¹/ÄÇV9,žáž{•„°{h(º9ÙîQ»Žk-Vù+$TŸy„I$ÉeLFåӼˆG™ Ê¡ˆ~øž a®qÀ|@¢v“ˆ¤l­`”ÊŸ«°Nc'—H-£Ä£ÔñH° ËcÌG–¹Ö1K:<:ïÚw¨†÷yžäx[ÍðÅxËyŠš€ª`üÕÒÇŸɼIdÌóxkHšdÇ lÌ“¹Œ•zœ7ªAa,ÅôÈœ ¹´4Á:´CÏÔ7ðQŸÈ,µ{?ŠÇ|Cõù.[: ÑŒ¼Ð˱ÉÏ Ì ´ÍÐl zM™•ÿ^Œ—¶£ËZ© ¾$‰Ì¤Çt²‰w3FÎ,LÃÌ?èÜM–èÆØ8R¡0ZÑ48“KŽ´Hßì‹ ñE™I%dNxsNÒìJËMêÌM÷ôɽ<˜PM‘ZÌÖ¢•߬H˜A¶"ô¼èHÒ)Ï·¡%8#ÍÔÜ#õ䪜”Ý|ϲ4¾èÜÈ™\Ïìô8ÔáÀ9ë¬$•ÿ|"O0)²¾´ ·û@ËX: »M¡dQ}QùœÏ˜ÙÊ^ŒÌÑYÍ ËÎæüM·/¾TPÝO¶³IûÈv*Pö,º•Î…QøMÙÄIðäQáÄÊNÛÎ$䣖á4ôlL° “"MRØtQ ŒPÜ4Óÿ åMI-x„MÈôÒÔl Ó$L>3QÖT›¡ Óáì4ª$ ]R&Ï…Ò(}R’üKãÄ#›üJÒáÏë Q˜,M? Y±IÍ<Â;}¢úœÌC•»Á¼ UÓϼÌ×\QGµÔÈÌ * »%b\Ì#*®¤L»{ÎéIBES²ôM$MU=•Kåp"$¬Zµ%É<§cýÈe=²¡<Î&-T'V^¥ÖÙäH­´KøCm™UJ¶c§n÷ƒ6lT;µÖtÝU] Õ/•Ô™¹ËEÝÉ;å*Ë1½™1UÔAMÂ$“}B£óÔríUe×S9Ñ|ÍW ¢WF /Z N×ÄRÿ?ÍÌ~m"quLtuPÝ´ØöDXÀt× r¡ÛQtRiÐcÍÐYY Y%Øî,4}OoÕΔÖ5Õ3‘(Ù¶ãÉbQšÍ! :}X!åÎÚ4NIHý×EKä$W@ÍU%Už]»—ùY>}W¢¤Í ÃVŽ ŠàËÓªÕ×åÄXeÚÍÕfµÕš½ZCeÕï “­Ê$LY£lZ–õNªäÐJÅÙÅHO”Ö˜EB©EYL=[u…Y½È¹QXšeX[Ê ¨5F¿åQ²¥\ÁÕÈ:m"Ã5OSýÕQ­ÌuÛOÚÀ…[ÄØS®R¢ÕUJ‡e[Ì>Ê#R³=Û¿üÜ‘¥[ÿa=ÕâëL™uVDM]ïØQŽ} nÝV¼]ÔÐe­áõ@Æ„ÔîÒÚDUÂ]Z¡ý]¼ÏÒmW‘=Ý‘åÚäm]ðWª]ôíIëPÍQ9ÚîK%Õ\¾ñå^Ü‹ï ŒQì_ÿý_``.`ÊKÜ&UPëe\å=WÅ^â…^Ä5ÏUб…¿VÍÔ‡µß&Z\Ù ^«u\PaÕØRdÆú}Üx¼Ž¦EZ&’LJ…7ãÜÊ|µXOeáÑ%[óM"æ³iYíÚ‘ÚªVðõÕS-6%TÔ$ÍsbXù“׋í`ÅE•äÌHŠeObFÝj•Ò][{mbFýÊßÿ-X ¾ÙM»Ì=bÞÙöb8–“^œ]W}·%*S½ Ë[²]ËÙÊeÖóeGò­c9–Û9ßÎM:Åã\âäãÔ™_Ò‘75¦cœÚJîOf`MáDVdRÎÛ0žÌº|ÚnÔqeNÆdÝ8~`—éäìEd¬]äX¾e¹Åbà…bQÎ#ÜÀPñåxu»)Fâ ^šMÛ¡Óâý5^].å/f™Kíà… ×XõÎÍÕ_ŠôSy•LX†XQ6Œ¡-âÑíbF.ßâ…fê´`¢S_"{e>67ÎÏ&6CÞOü=aß„`~¶ãI gižætå‚þX§‰_Ä ŽdøE¶µœÑÿüÅÖGäx%Ú mäêLßž[[Æå3ýhiUÚ…®Ü†> õdýM¶yÌ2uh‹ÎäAÆKƒF‰·=Ëg&èuÖé8vçÜd1‘ç»ÅJ¯¼çËgà d!ö`¦P¦ÆiAæé>ØÀŒÕÙtÔo–W òNxuC·çµÌsöH+¾LšX™>hŽfvé–ŽÇfêUÆT®æa'r îæOfêðâft-xEëŽÎe·fk©åÃ.Êå=\¸~Ùg•èA:c‘hªVëµöèqfÓ>–]šQ±ÝØM\Kžì¶¦ìÌÆìd&l§Ö·ÏÏ~lLv§Ñ®lË>æ©>mÓNm0fíÿæENÇ–CïlM-íÜFgÕ.nñUm$L[q–ÎUì)Ua£ lgŽjÒ¾nìÆmvæ×ö×ynl÷mÛîEîä¾mã>îĆPÉ>o}^ÃLåÎFhÃÎnÝFìõ.l›åãôVl˽r4?ó¹má­}VÀfr?¯sFoô'tA7Ô›…q3OëŸóEwtL'ô@§ô™Ö -®ôHŸrMßôQ·ó;—æÖŽ`Qgu"tT·ôVOõXwuÆ>u;õìY—õW‡õ7t^ÿu>Wo2Çõ?§ócGvì^]‡tOïôbïu‡öi·v_'vZOöLtl¯vi¿öpÏvkvc÷öqwR/ueG÷uïvwçvNwSöt·uz¯w|Ï÷v×wqçwx÷wrø€·w‚göx—w„ø¯õa/÷ÿ1Oøe7x…§øŠÿw‡ø‰Çø‹ßvv/xù…öŽ7wjßw‡ÇU8'ù÷x‘ù~gù–W÷ŒWyEŸw†§ùŽoø”·î™Gùy z˜zŽ'z‹Gú£ÿù¡7z—Ïy?ø¤—x¦·ù›×ùÇz¦ú¬ozª‡z“¯yŸ‡z®Wú§û±÷÷°ÿv¯G{ 7{ž‡û¸y™wû·ÿúº·ûÆUûˆ×û½§{§Ÿ{¼|£_û{/{¹o{ÂÇùÄGü7|©_úªOû¼_ü©üsÍß|Îï|Ïï|ÇÇ|Æßz«ßõЯüÀ×úÔWüÕ‡üž§üÖïû¢ý»ýÙ¿}Ü—|ÿ²ó¿§ýÚGýÑŸüß~Á·ýË'þÜ?{Ë?þåWþæwý®?}ä×ýé§þæ/~¾‡ýàß}íO~çßþêÿ~ìÕçþá_}é÷ý•gþë/òwÿög}õ¿zöï‡ô/ýK÷ûPÎþóˆŒGð „ \èð!Cˆ6œhñ_Å‹3j|ȱã Š‰Ñ$Ä’(#®$Ù2äKŠ1ªlYåM“9uÎ<Ù“àNA;%ú³àQ–I‹^djÑéÓžP7&õytªD¬«jݺ”kU«/»:$ëò+X´WÚ•©ví̶náÒ­+5íÛ»yõÆ”KïO¿#Ýÿ0_»+ VÜ—-âѦlÙñØÉ—sî¼Yr呌•Öœ9ôbȨqªþ ºôjÖ±E·†ù´ëÜ6Mïž-´¶gÜ·ó–=<µo£Åy&W®»÷qæÍ›.—nû:väÓ£nçvuâßÁ?מ½¼ñóÂÕCgßþ}pøè­Ç7ï>}}ûú_ç§ßŸü}øñ7 þ(ßzÿ‰  ÎàJ“H8!…Zx!†j¸!‡zø!ˆ!Š8"‰%šx"Š)ªÈá?“„åbR0%ãŒUÑØÓ8Ú¸#1å8Ó/ÙÒDöøS‘©ã’J6éã“PÆ¥T:9%/Z‰R’\nÿiR—`~9R˜döÄNXh&¥æQl¶Y•›g¦ 'u†u'žyê¹'Ÿ}úù'  :(¡…z(A˜„‰ð3–½Ò(Yµ @-ÿðc€Š®d)¦‹6ú¨Iµ¼Â§§þ3©£ ñ##§­²si¦ µ: qZ&B¦ ´©0²JªF¯âÚ¨@³†ªQ<±J:ª@»‚4É¥)+,´ Q+@E¯( €©(ûRh À+“˜‹?èbÀ?².»îÀÏ+â^:Ò¦Àèo-Ä3o-¬{&­¸œþ&ï;;Ü;Ð$ É);xjQ¿0RÀ+ÜQ ÿÿÃ1²K¬Qt,3¸'sì±FêVl.“tŒ‰É#¤óɩԞÚnKœŒI¤ÿ Õ$ŽÌt‹Q‹ïÃñ°4×…ŒÑºI;-ÐÅm+h¶k)ÛµZTpÚ‹ûð£“k°‹íòO<›F¶EkÇë"µpÇ+÷Dë²:¸ß«ªl‘ª \¶Ó+T9ÚÆ©ÆwãR-ðcnÒq£dqp»®â&µ€¹¢ÞQêŠCýµ@Sw»¦—BíÇ¥­/;XÇ#4å.Æíó.µSŠÜz-ï\üSO/.×ËTô?“ÍüO¦¢3߸ó6+rœ9ÿüp¾­_ªÆ»¿º‹t—ªÞMl"±{W¤´Ç9ø=ŠS^{…ò&w‘Ô=¯”Z%¢¸˜õKªš Äâ¥*ð1D‚y…ëÅ K„\ Àù1ŠT¼{ÞJ.ÅBhÏw&9›Ôæ-­Äƒ7 ›­œ·®N¥îa Qœº¢¸eiäbÛ¢ü$—D£ ¤jMDâÜTv±ÓM‘q¹©¾Ø.ƒèí"ùbSÌp#0äɺTë ÆŽÒ©‹ˆ&9ݹªö>Ì jæºTÆ´RÈwíÑ_qüá¿’v¯yN#lTêŽF¾*N¬m+ó½pIÖ‚’ûúÊhµ/MÒ!íÊ\Éÿz¶/ƒ½ËŒÀçh–¹RÊÒ„Áeæ²¾I°±‰/ñTÅn…’d¦Q}-)˜Ì$eÌ‘”òWNS4E£* )ªY¹2SIUµZRM‚«U6…òÁªÁÈ›LyÕ„2•ά‘s"˜ P<(„¦y&äž*ˆ-%д =(BªÐ…2´¡}(D#*щR´¢½(F3ªÑr´£ý(HC*Ò¹}óÚ)JSªR…0’mt\)LcêÑ–Æ‹kÛò+¬emKž<ÌÖMÙ—«f*uŒº¡úd(Ó¥2u$ïÂdëVF»ÖzÔ:Zë6=½+z¨›êц‰¾2cåWÀ —ÿÁ¦²µ­é*ô ÷°uE•v¡ê+ ½x ‡-dá¼èz/MBÏ ¦ŽæÖÅ26Qsé+]ú0•¡zS‹+ôüú¨Z*¶¦ñ*WÆ,v:Ì&6 =mLiʹ¢ ^å¡×ÐE;MÉì]§báóÖ%׌]ÎuRƒ×¦j°ú¡¶¸*U-¼x ½oE­u¸ë ×Ù*7„σ 5ÝW ׸ޅ);&AªtIs“¨•ࢹªkš]@\ï[¤¨ZˆWNËT>×úÝýò·½úí/€ ’IýWÀ>0‚¬à3¸Á~0„#,á S¸Â¾0†3¬á s¸Ãþ0ˆC,âÿ“¸Ä&>1ŠS¬â³¸Å.~1Œc,ãÓ¸Æ6¾1Žs¬ã{p>þ1ƒ,ä!¹ÈF>2’“¬ä%3¹ÉN~2”£,å)S¹ÊH>–³¬å-s¹Ë^þ2˜Ã,æ1“¹Ìf>3šÓ7ºní‰Üƒávºã}íu/èÓ´†·¼ó½lz;§Oî ¾õ-p\ó›YȾ·¹®pWœ:úwc¨½ð‰ë:Ûâ÷¡ N{üá÷“ÆÅ2¨kœä÷8ÊSާ5°¼å.9Ìc.ó™Ó¼æ6¿9Îs®óó¼ç>ÿ9Ð €Ÿ|åA?:Ò“®ô¥3½éNoúÐ#îï==½êV¿:Ö³®u¦G}ãÏÓÖÃ.ö±“½ìHïºÈ¿nt³³½ín{ÖÑnr=Á½îv¿;Þq.÷¯=ï~ÿ;à;÷¢ß)ð†?<âŸ>x•>ñŽ<äs¾xS=ò–ÿ¿üå'?uºc¾óž7¼æÕÞøÏ“¾ôp}»+oúÕ³^ì¨ß6ç[/ûÙ+žèŒ ís¯û³Ûžò±ß=ðƒó×ìÂ?>òaN|Œÿ>ùÎþò{q¾‹¾ú°¿ýõ}_¨¹k¿ûÖÏþ÷‹§$¿üæ??úÓ¯þõ³¿ýî?üã/ÿùÓ¿þö¿?þó¯ÿýï?á?    &àúùßC( > F N ò:Df n v Âß.ÄŽ –  ž`þ… B  ¶  ¾`ª`BÀ Ö  Þ`ÿýî ö`Ê Bø !š D&ÿ¡.!!A0!F¡êŸÄ^!f¡úU¡@h¡~¡rá?€!–ኡ¦¡Ö ®¡¾a ¶!Î!V Ö!æ!ŠaJP_êÞbŸøm^ž¬ˆ!""&¢"."#6¢#>â†@¯  L"“ø‰%fÉŸd¢” 'VÉ&Ê'^ &V¢(Ê(’"Ÿ¤¢—„¢)º", +ŠI,öÉ,NË)Öâ* qéI/âÉ/# ã£ø‰1ò˜2.#3Š”Ö žl‹A4Ëô„Ť, £(SX¬ÐQ‘ÓÊ žÄJÞPÊ@Mæ„´ôšð<‹6¾„²ÔS­ÿVùÔL+ùHÃÔÎy [Ø ¾è‹/=ºÌí…ÇŒU‹ˆË#ÙÈÔŒ º¨Ë¤‹ÓÜËÍpÏOøKÇÄRÁÜ£«@ •Ä+XÌuNX,PèDË-*Dxï`MX0 ¼”Ñ6NMCÜMÇÜ MNùZ§ŒNU?2‘æÄĬÏB`Íùä‰Áž$Lí¨IAž‰é˜‹YäLÌ .-̽ÔL@ …¤È˜ÖLäòpdÓDÏ \ˆÔ RŽPµY1åðCÀ”Žš˜åJxÌóäSÔÄ×QØeïŒ é%JÐK¾4‘'ád¦DÐ@Ìò\éô„ÅXÕQrÍE¤è°eOV¢Å=Eˤœ ……¹ŽLV…p±MÇ ÉM†?þLs[vqì8Íõ¾¨ŽB`)äLÓÙÄLÆÄå2AL"ñÑBâ$Ú8ašD¾@ ¼$ uÞ‰Áä‹xõÌ&ňÖÐR(eåxÌoê&rš¥ŒðSRø“„ЖzY#{­WJB„§¸ž„ä­@Uþ~&‹Ó秸É8á‰àx zÂcþC@!ù,~5>r‡ 000QQQXYbyNKiiibl{{kcvvv^s‹Mx¨oujy™}nŽxz‰xx™g|£u} Y‚®~ƒŒy‚“h„«fвm¶y‡§rްz—¹žY¬_0°b¯n1»k#BA—sRŠu~˜}k—{z¬|\ºM¹{X©ky§yg½cn¹jw±j¼s|ËmÝyÉi%Ïu#Æy7Õ/Ü|6ê}ì|&ìy8ò}(ð}2Ü[\Õ]aÎd^Ê|KÆ{XÜkOÛfVÖyMÖxUÇciÅksÆvgÊrxÙdfÔmqÛteÙwxãWVèfIåfWèzHèwWãgfåopæsgäxxˆn‹†w†…{˜–m…–u‹™~”¤l€©w‰¥}‘µy†Ê|ƒy˜…x«\¾‚I¹‚Wª†g®‰xªz¸Žh²q·“s݃.Ö‚;ô…é…'ç‡5ó‰(ñ‰5ò‘:É…GÆ‹VÍ‘XÓ‰GØŽRÛ‘MÕ”XÍgÅyÔ†gÚ€zÙ•iÚ’{Ϥ}Ý¢kاxìˆGë…Wç—KçšVðŒDñ–GðœUè„iåƒzê™gé—wí ]ð [ê£híªtî±|ñ§hð«p‡‡‡……”–…‡›„šœ’‹•••‰Š¦ˆ–ªƒ™¸—Š¢–ªžœ²ˆ ¼™¦¹¨€€¦…˜£”‡£š•º€Œºˆ”¸œ„°š¨¢ Ÿ½£Ž¸§™§§§©§¶§±½¸«¢±¬¼¾²§¶¶¶‚ŸÂˆ¢À˜­Å±Ç´Ð£­Â¨¹Ë¯¿Ðµ»É±¿ÐºÆÔÈ‚‰Ê‹“Êœ‚Æ”–Ù†‡Ú‘ØšÔ•–Íš¢É¦‹Æ­—β—ج„Õ«’Ö±Ò´˜ÎªªË«³Ëº©È·¸Ø¥¥×»¨Ø»¼äƒƒå疊嚙駇å¤í¶†ì¼”夤麣湸ð®®ð°¯ò¶³È»Ä˸ÙÀ¨ØÄ·ëÁêŦé̵éÐ¼ÇÆÇÄÌ×ÊÒÚÙÈÆØÏÑÞÓÊÛÛÛØÜáÝàãåÄÄäÏÐç×ÈåÛØöÇÆøÜÝåßàåàÛäääîïðþþþÿÿýë'° Aýöóg°¡CJœø0"Å‹-bÜhPÇ=‚)r䯒&/¢LIq%FÂÜ8“eL›/q¶Ô9Ñ%Ï?úü9”èHv2“*]Ê4!Ò¦P£ö{*µªRªAfí¸µaQ_q†{ÔªY…TÏVM«V*Ö­cYÆ•ÛUkݹ)ñ dÛ¶)_µôtÙÒåNæß¾KßfÕK²®Ý®Œ?F–\qÔÃVåÒÀYC;´–Ý*„ìøßdާ1¦VYÚtåÐL1W½¥ÁV;]@Ís ªâ «w–ÞsxkƲC'ÊY¡-ϼ{Ç ׸õ»×±ƒ\Ž˜->uéÖUÿmžðùç©Ò§'$í˜xñöÙÙäÞ7í=IŽòCâ•¶mܺE—^R¿_|‹!˜àv¨?øqƒ$Žt•fA'`ƒÊçᇠjwà|‚–Ð=Žp“>ŽH"U`ƒfb‰è­W݈"‚Üq¯qH•:)*„õÑØá9êh`’HrD_[T±èˆ:ü¤ãH$–= %u!*¹¤—`ñÈ iu“ß™÷did5‘…#˜n2ÙåFZžÅ–:HÂMšjY Oî %¦œ_ÂéPf=‰kþæ›MF:§¤9ÅÎ¥˜fªé¦œvê);ÎBH!|jꩨnš<¬¶êê«°Æÿ*무Öjë­¸æªë®¼öêë^Þ£Î=ü-d‹ùY(šŸ\îé¤ÎZ(Fˆ2e¦~øD N6ÞØ#…êô¡#|úÖh³ÓF+í£ë²ë¤tVêI!7Oácͽ÷Ö“?-*Ä͔˒‰.  ªKiºS+~‹ö‰#Ñ$ä5ÙÔν 3œÐÃåúu®Ð",²»üPµIñëbBÿ:“н ec¾ýÄËͼk}ܦM:ԳϴD('®¸øEÜÆϬеŽ@Òðe:J×ÐqZ}5‰½‹"DÃßÄ_lÍÔýK¬UE¬µI?{…5σ¾+:_â!’¨ÿÎPLq/8ÿBî–2á³m·°9šuÉB·K÷Ü µ­ŠWâÈSt¸:‡¼!úé ¾"¾ù*70É!›<¹ä¯Ûž™èLÅO,òͽ¡K’N$oÄvÎ ‘m1ÓÝ­þxë‘¿=RÜ\™Þ¿â5ó‚ä÷"oÀÑ0"¤«•ò2Ó\$È §¯~ó³~‘åI™¹'!N4¡•‹pï}B´¡Œ<ŒRùœ–<ô¹nk°Ë åH§áãkoĬ¡ŽB"¾ClÃShœ6°á mhÿ\Á™ó¬öBùrnHè„2 ûV¸¼õ±°…0¤> q%F<á7@"BDB´ˆ!d› ç­¤+?’ ’zRèÂÖÑyy!°h ü8"t‡@Ç:€×3Hã_¨­2.AþKE“â'IÉØµ¯Š‰ab¾“n¼ Q5P w4ðÅ"«²Ž %D+›#)£Ç<Ún=jÐà‡Ht£¬€4 9€b„Vi%$Uf.IbrŠTT¡+Y¹ñcbÛ—#àp<ŒÁƒ¤¨êz ³*\Ç#›IG\>kš–Œ¦43™žyFØ[ßB9ÿÆ5¬Á p Dê0nµÑº`Å2¸Qº(&Þð8ö…nt#Mol‘£¼xÂÓ£X|^ÝØ›ypB›95爆©cc(C61ˆ<A øªG;4€†Ö¡œÑÄðåž `M|"Õœ Rh~ôŽ—l*ѤãŸe  `‡•”51Mh@[ŒqO§NW“W 2—ÐoðãŸÅÁyO´J’˜*4´Óc2¥„ÈÛ¶š›ÌmF\8\+Q½¶qÁl0B‡7€„èn)8Á éW~ 1P¸CÏ ÅŠ¼‘ -¿LÚÖ€BÛÓ<Ýn7ýÛv:Š}ÄD ¦û‡ÀGmpƒ&Üà¹>î‰:¢3µ@J|ñµ(¦y ÊnïÀŸ.è=Fåg¹A`îÐ#¢pàå!ñ†üCN°î‘ç„´Rµ¨/,<8¸Ú¶dCvàÌ6Ñ”ß}åyG>èC/;³à)E+}?º!‰8À!Ü@D^ H¸ê¼ÿ+t1+u*vóÛ‘x/Ìכš‡J¶:Úr…|ùクÍÒÑÆÑJù¡}kððÜPÑ u0f@Z†‘~d +ò7PP|ì^VÊÂy‚²hx‚!uRÁ“@`‡Ð;s$CÜ ðrðp€ËpRÉÀaupµcI¾273ñU|Ká5fd!x$ÌG‚r£ýõ>üHÿ" ©·Q3Òñ04Xƒÿ jwé@ ›s“—tMCTPq4å€÷àm°( ¥à…/ÐEtÅ’Qá’øbŽ“p¤YšnVw49UfÁÅŒL!gbeÁ3ŠlàAn `€P ݆ÎeaÛÒ9ž3m™PI§érÐùL阚'cFu&—2˘&ž$:jP›m ¸ÿ9¯P™pIPˆp~Ò€:Éæ`(w„ßh`~é‰z˜Ñ#‘€Y˜™"ˆÉWs!zSbÐopa ŽÅ¼ù20U« ?V6˜G^Òv>3™Ÿø ¢¨9‚xô$°ä/¨à€ OÀýP ` :ˆ°20r Àº ɰ@@œp ª„S y4S>}ò¡$ú—ý9¢¸Žfq¢,“¢u\M Û£¼Ä s£"¡0 )ÀàiP'ÀÀ·€S 8IJ@:˜›è•ÔišÏ©šÿ¹cõå‡hA|‹pA¢@ ÿ´ `0Fdòÿ Fàð}@VpºP ` c1ZV0¶yúI˜!¥Ñ)Õi×I¾!•W9M _0þD‚€¡@ ñJð D° î@s/ñ™:Kj§½x§ÌŠŽ§ÊH­™Œ2 ] Ÿ §6$ %p>`'¥!õ0 ðWÀ  ïЀ“ Æ 8È)b˜Ô*K¡ê‹Ðª§_ùf¤'¼À И7 k©à`Æm ‘  L °®§`à ¶’ƒ£Vr&=h|£J‡NÚyœHª|Ú Á¥ž°X °ÙP XRÿÐ _ð°Ã€pEä ¶` À«Öwy©y@" N”ÃILª²¦µõ'µSkVk¨Â À ìð Ã0[Àà:D$à=0  —ko X0 ˜¢7•j]«Æp)¡Ö —Ò ”†µ·ök„[¸†{¸ˆËk 7 í·ö@- žP<hàU@>pRÃô¸Ø¦œ08ÒбDø±1–¢}¹TOk²P µþê¥ZMPaO1¢8ò°µî0¼ÐFàc ‹çŠ4 JÍai˜  ŸÐÖÀYíp GpV ÷0Cÿª'›“ÏŠ§yJ»LaRÁ àDP  ?†CB© X b @mÿRF Ò Ãì [0Ù;ñ'vú¨1§‰{Jµ»ç[µèKfµq[@ú©ì´œ` TWõ€èP d dpl+\}£z@›à 퀩¯0 Ð J0 ©Ð ^` Ft“€ÁO›]ÉŸ7Y²OúrPQhF@硤-èFŽ ˆr° ôÂËàV¡@É  ;E½ú¢ —u K!˜ûʯæÛ¤ů•S\ÅtŠÄKA{d¬¢ lë Vé bLƹá™ÿ:3ÁµÆñ‡vgJGa@À˜²O<"*Œ×¶ÁºÐÁì´M¡m ´ òà’3\þ°fÇ —ÐÃ?ÄÅç]”'¾2–ŒÉ™LÁÿ*¥M`¢Û¾9ÅNMápʧìqÜp©w¥ º\°W ±'ÕÁD@Jp ¶À Jð ^ RÀèð©÷IÉ™—<ǰ‹Áð¼L#º ¸[T¬[»ÏQ F D À ^@ ;X𺠠©` ÀÐ ¢ÛDK  Mðª¯6™J¼Ÿvê¬qܬÈÁ,}ñ p ßð ‚Š (°q…  ÿ¡¾º` F°- : ®ªаNNû±Ñ5YíÌÄä;¾KíŸ|׋ßÝq»ê ý0 SpФÈ[^Z ˜÷M ^À/)¢TEÔëܺr¬ÔMýº½ìËp&0P-Õ aÒM°«V0 Ù‹V^½4f•ÀGpjM0¿Ðw&ö•… Q<×ñ…rÝÄÀ,uf!Â$\Õ‚Ð * æ¶W C p Šc -0 ¼€Ó[°; Gð?Å0”‹¹‡ †“Ù³[Ù²K×É}(%â · h”!òàÏ©Ðö; °X°àÿUrJ °] ÀM0Ñ<½íÌXrùÑPÂÝÑÈ}Á<ß›|Üò,Ô–i¤»œá ôÐ Šô ‹ ; QñZÀáM]Ðov:°>áèýíé0c4%ù±(oaÔõýá þËømÙœœ Çϯ€©Ñ½;õ¸ qRæ$CÆø@7 ©@HC4'ÑKÀÙ P`s(œá*R{ŠQÜò-ª#.âšüÎÈMz´¡J!¬.Ί\ A6 P†K1^Æ0 ‘eœ:°S qɦCÝpyx,¦È’&îœoìÑq ÒL ÇL&åÐÁ-ôpRÀVð\ „ ÿÉÕ«[ îÇÓP q>þãÝP`iãŒ!IŒÅ2EMºÌμlÜOîºP< 'î )žJQák°¡@ BÌõð ðÀ \½F0ÛPPÞ¾A>ä‰ó0pÄ'ñMÜ;êzîÄ”âË»|v¤$pU±ßý-¶›Ð¶ ^°©ðvÅðÔðq¹p Æp Ì| —0 €3áL0áb Ø€ àh{‚85iÙÄý¬²ÎË~Ù¤®Ü÷ml!ɬÌ+nÎ ÝJ¡¾Ð+ð(pïWN°>•œ Vä-8ǰͺ@Ùà~^Ñ;½}Ñ.KÃ=’ÿ4¸žÔå ×KÜ|ýÀ ¥l `d:2Ạ´ £`ãB¬7`Ô@ t E H€[€cº¨ƒ ×T¯§Öëƒðekýé3¿ŒŠÔ£Ž²îlêMžôpÊhFÊ ¿J„¦ý@çÚ¾À³ñæ¬ BÐ9§ ]p¬Šž`fó 68Mð¿pòPpe5‰l‚ìm¢ìqÝäÏîìôMâ+Û§ãtï¡wŸ÷°÷;µr×uPîý° k]pø‰/8Kl84W°€½^g@–•”,ÙA/êmïöOÇ™¤¬¼àó¨Œú á·`ô©À ÿ@½ø@ u@ÔÆp®`¼½KSp]Ä‹€ ÝŠPW¨›ùê<ß,6ÿ$XÐàAy.T˜áC†!N4(‘"»~3º³ Á£_EŽ$™#Iy 4hèáÁË,®æõ $gŽf8myÐ`ÇŽ-Yx‘ôìÈ#]4éXÒÄiÓ&{œÉ«g͛Ɠýjü§QÞW­]Ãþ³H‘bY³ѦÈÖìZ· ÙfÕ8Ï–†ZíJî%IW$=]¶tñ²Å©†•œæyÛÃâo¾rEx°‚ÊK ºDêº4d/JLYRº4 AêÐg+×…#Å~•ÿ—Qì@¸q æÖMwo²ÀÛ _øÛ _¾É÷"/9O¥®vw=Y³&-ƒ•aàä½Ä€!•R !ûùÒÐB‰"£¼@aomÊ @’(Ù$‰5p¯m+ÜϵX¯Æ2N· $N®+J¡¹”s°$p¼1&?åÚÑÀ4ÀÀšzú±åºN8y±Wú±Æ nÉè ”°&›£Ž`/›ŒÎ‰Ï÷n)«ØÆ²m$Ú|[p·!‰,R ÝJRI³LbçI(£”rJ*Ù1æ¼óŒ©J]2àJ (Pâv|ÙdD °È"ƒWØQ¢‹ @y” Œ€B $H[âˆažL&>vž&!¶Ìˆ6ÿDUtQFuôQH#•tRJ+µôRLƒü‡¹÷jÃg¨£p¯y8É,: ¦ã°*/¤‘çÄî¾Ó$¼ŒÈëŠ#ˆØ¡´ëÉ!œ9':‰Gþ~TV«ÿ|löÈà öÈ%ÓªÖÚ;}ÇÙ©êªä,\IPäñ¦ ,°èܪ²¸.ÑL#]ˆb…!b´s (Þ«Ã6&uô !Úœ…M¬fNðÚ·¤…X-i§½HÛm9ìÇ[×”“'0]èé§J† ð™"W#”`œz”0Â`”ØA‡#˜êw 7Þ`ãçŸßHǤ…‹ ¢m«Íá'¦Z§ŠZêÿl1NîÓzBÅÏj]$°@]:š·µaê© ¿l¨³¦ßl†ÑAöÞ&&nˆÃç Ù€ƒIšéúÛï ýüኧ.NâÄ«¶š/­q\Œ9‘`Þ®9ÉÇg2ªj ê¼ÉfŠ~Ikbt(t&&˜@ä ØßxC!Ä‘¡{ °G$oRñÅ¡f|x³8}\¤'<ÞrÌ%мÎ=·& kðÉhôl”ÐA ÒØaõÖaã 8d÷|œqÄ|Š[úYÝ—¦¶qáë·ÿâã4^¹®¿ûòŒÍlîF¸u "Á Þ;1èf7 ½!?+;¸áuD$¸YÚÿÑr(ÀxšßýŠT­ý%Ç·¸…xú’¿‘}Dµˆ7"ä"¾ÇõðÆ{b "¡ +Àè¦P‡˜  @cC¬ÇH8âÿð‡lÈò¾Ú< i‡‹ËdÂyQAiIá^t1®Ì”¤ŒÉÑ'8¡‹È…î82"{쨅h +H ²‘ pã%(ÁbwItŽ?¨Áí"e±¢ˆwÂKb’Œ#O^|Q Z †È£Î­ñ |ˆÊW¥±Æ(0…c´±ï°Þ¬ðWƒU(C7DØN÷Ȉ?¶È0dNr‹Ìâ"¶2ÆgBs“Vc‘xÈÿ£"QŽrsëGUŒQu“=ýXÉ0¬ÑTlAyýd'ú!‰G¼¤DG:œQK*s6Í$¡ïüɤh6- &ƪ™ asGÚÜf‡ºiov¬ý"§Þ“ NŽðÄ;!ÏH8bãJ7¨AMiÑŸü< ýJøR˜Nd#é¤/>Ê…2kgC¥*³Áp|_1E5D%[æ’¸:É’FRaEŽ—Õ1)¦ÒãCf:’3Žk^ÙÔV )4Àœ‡VÁÈÙÔÖ½{áC>¾ÅdàäUH êpXˆÎöjà”Eª-“¥-¨p²Šÿ—â“,t!Y3¦6o”j\† £ŠÑ¤kJLqžU½Hˆ¨C R°7ÔA¶E Â\Ô!«Â¦?Jì2Ùß5ö·e¨e•³SêxâBí8#(fÕ”…ŽtoBäA$Båƒ%˜!ˆt!Æ NûªhUôþç}!ì]Wç^"_µÚW¹%=Ähä.z®ô®2:Э­_VY­"ht7X! û„2¡v¤­þ0¦a»’(”&lŒ[åª&9üÞâWÚºïCó»" ¸ƒh"ùV7I÷X%?¾JÜð€ Ž0‡òiaõj*È„,|ãkdà<ÿ¶È!±q¯Vʳ)×ÌÕ€bV]üøŠmÍ71ˆD@‚»Þ¯xÉ[½G¢÷Їê`Õ«UøÈrž³d›|åm½¸º)A#ûÛ|üW ŠY-‰CÄî mmhk[å@“Æ0Já\áb5Óš&îéÛCöT·€Ìzé’Ê),á^Z°‚Õæ~8"‡¸î! ±ŒVðB°„uV›}ýf$•EÉ‹3¦é<\&ßÏÇ…²¨øBo@aOC¸Wny S‚ãOíǶ%AV¤¹9aAòW.Ýáb£[Ýëf}1f_n¶x9"yqº £)´à¡ð¯:‰ÐJÂÿPÅ8²1ØÂ¥TQDÔ†ÓÍî:ûØÇQ¶ÁTbyX#¡¾„ì”ï}û÷ØU„5‡IZm·m=èᎆ_±ÒÉ<7ˆ'nÉ›ãÜΞ.k³·6ïŒàÃŽGÀ׿º#Pç=àÀÇ àpDÚ€Þ‹êaŒaT"<ä™GÂÔË,s+sH^‘¯Í%þðvW|ÙʉcÇ€žk˜æf:ˆS¦ªXc‚0"a}¸'møÄ*àòØÂŽb¯¨‘ 6ç<åwÞdw:9tù醡„Ò<á MXª€¯KHƒtŠPÄtû‘jö\ÐÄLlA ‘eáj©ÿ$äÔø$oº‹eO»ÚÝ­­¬¤’ï¨F5¦ÐH(¢ <B*~q„-p¢= >'ìq…—c&¡OØw?IH."ƒ“<Ú#ñ÷{UíƼH¦Q ÚLA êXµ#¥Psº%˜# ‚ˈ…~˜‡•hÄ`“gé ö>N«vÐ_P1†3EE\ÄH„Ÿ¢¥¹ÁYÄÞr¿6ÔÅ/ªD•úº¯k¸0LD6sÅHŒC‡2fj<‹¸E",ˆZT Ë@^¤Æj¬9‚‚)ö3œqs³ed3­ð:A,eT³~rF·ô›FsT©54»w¬ªk>v4·róÆÙÀ0 ‹ ¥ÊÔ$O«¬@²øÐ–”ɤ´OtÄME”¼…IÑ]²QÇ·ÌEõO-Ép´Ñ k<¥ñH‡ŒÐcB”I„PӜŬzR =R$ÅPåd‹ÇªÏ Ì”ÐàÒÜúLÿÂTIàSÄ4•PZ\ÄFÎòœG“tQ0¥–ù”M"23=FU¬ ÜF?ýK7}SñDJõ ÆBQ•IôÌPäŽg¡Í¯ ÎE]ÒâÜQ¥GþH¨ôIš3TcÜR#ÏçÄÓ:!‡ M†c&vÔÎFå+·5 Ô½ìÊÿœÌ*eTï≮$IöSUJ|˜VµGrÄÇv$ÕYUԤɢR Í~LÐIÂ"öšS'ÍOÕDU!Ö`ŽJEÖK$H5йÌÏN×–,U.}ÍfµÌLÎSÖn•Ê1õRVM)> ¶wõ@ÕsNõDÉ_­ÐbPÜÌÑO5Èi6bK–HýÒ}ÝVÿâÓ4%Ó‚U³…É* 7‰X~-Sy\L„U˽фeN©¼S{­HöÊR-…ÔQÅÍÍVyCììJ—-M½Ô]õØÊ¤ÙÙ >ž”Tø‰É…,BÍÖXMXsÚÀDˆu½QâÍïDàlJ|…F,B ÉtQ [±[²-[³=[´Í”ˆMÒ Ç¢­Ø˜¥ÕŽR¤œÙsìG¯„Í‹œF(Ûµ=Ì4‡­–¨¤E*ÝZp¡å|ÆaØdŠÉ°´ÈìÜ"÷Ô0D¥HƒåX–B Jå¢C™LŠ­J¥„EhùÜs-ÎñLu4×ë4QË]&=\ÌíÓÉ}غ•Ù¨©¤¦œØ-Òÿ·ýÒUMÇ1·ÛT,¢ô­„Ò…õʤ}T%RMÍ[«ý[GåO¶Ô’ä 3K°,F­-œ5Ú`ÓÞÞ5O×$ÌÁLÖôÖv½ÐêUJíÝXËÄL£ÄZF„Õ¦Ì8l^÷=ÏôZÚ&E©õµ×`çÞ%NM]ÍbŒÜÞÿ+Šßdý×—,â•<âýØö3Ž E\ÿÅÒ$Öàö…á.½O¾äc|É86Ìm4,‰xc9Nã`;:¦ÑyÓ¦%\~dÑ­d–lbš}b¼ÝÙÝ:ѶÒE`¯›ÜF¾Ù߅䙕d%Þà ãûY˜4ЙƒÈ7ýJýÌYváÆÑL¥ÞÓ…Ó3ÝÎc=c«ÊX®5BÏ-Ô‚Ô=e^¯™IÞ½]þd¥œ[æ§ neWc$>] ö-¿mÛö½cŽ,åýâofe1boNÜû fñ5Ô%Eæ;¾0—JÑ–áufgKîc¥çó}ÆJEÚìÝ_âÑguþçwfèþmèkgÿ¾¥S_5U}*bm¼Ò…æn†h~h×ÄÑ_uÜO-gßûI¤SýdØmngwi>ÞP\Äh`mî\_žZ:õÚ—d;èŽiPÞc–hˆ[àyÞg vh¡†i~vh…þ郖ß\>e¬j§~jŽöçæâ±»S•Va«^Va>ë æê®~é¦Ng©ÎÞ§µd¤ÞibvicÞêºNR}kÖTØ!ÍXÆZlÎk¦Vk­njÃé»NÇ0õk^UæÇSeßEë´ÆÞµfëÄVÒâE`S–ìb¦äË^lËmÐ6gª¾c.J’´]mÖnm×~mØ[_®lÂ.ìѦíÚ>lÖ¬Ùÿ-%צlľmÜöjÝÎlã®iŒŒë8ìÜnÌ>îæÆëèn™^ÞÍ\¾nêžnèîhé&n޵ÛÙÆí–îççæníÞnð†Z–\ô~oïVïóŽïî^oyno¢îúžoú†oû–o¢&ÐItïþ.ðÿÞï7ð÷o’&ðWð‡pÑöï¯pñ^jÛoŸp pþ¶pñ/ï ïpq/íï~p'mßð‡ñì6qoñâNo§ñÏq ¯qŸÎêïñ×q _ñù¶qçþðr!/rr$7ò%wrŸrýæñò'§r,Wr+Çn‡ò¿ò.ÿòÿ#6ï÷r_e5ßq"'ó7ó Ïò1—ó9os./ó47ó3Ïó&‡ó?·s)ßsBwsøÖò*/t&Çs?GqC§s6çs¥Žó>s@gt8Gt=WôFÇtAßòOßnM§ôJOrNïtIÇpŽõ@õM_tOŸôV/uZõZ·uYwôGõßrV×uX?uWuTöa×bK?öYïõAßõT×ðàŽmiŸvj¯vk'[h'öKçuU7ucÏunïö[×veömÿvpvd_õ:wrw÷egv\—wQo÷tW÷_7÷rW÷ußwt÷f/vgÇw{—õ|ç÷ƒÿw€Oô`_óÉöwÿ…ï÷€ø†¯x1ôˆ—øy_x†§x÷ó„øˆy‘·øswøÏ6ù“Wyx÷l'uƒ/xŽ÷{/y–¯ù›yŒ·ù‡øœ§wšz'ùž÷ù¢ÇùŸy—Wz¢_ù¤×øŽ?z¡_z¨Ÿù¥wð”—ú©×÷–gq™Wú«ÿz°÷ªz±Çzn&û²{Umz£×ú±Gø³Ïï·¯û®'{··{¤wzŸ{¿x½ßzµ÷ì´—ûúµçú½Ïô¿üÅ¿{‚?ü‹w|ÁÇ{±O|ËoûÆÏz¾üÊyº‡|ž÷|«WüÏ}ÉïûÔ'ý¸GýÕ}Ä'|»}ÖÏ{؇{Ì?òÿÍ/|×§üÒ|˜ÿ}Ã÷ýÖï}ÞmJH~å_~æo~ç~è~éŸ~ê¯~ë¿~ìÏ~íß~îï~ïÿþìJ–ñ‡–ò7òOõ?’ó/’öw¶xÿ‘ÿ¡ÿú_øÇÿ!±âàÿþˆ,(’Á„ dèÐ!‡Fœhñ_Å‹3j|ȱã )ŽÜ¨QdI‚(S6dҥ•,e΄IÒfAš)ud‡³çO‚>ƒJÔhP¤I‰ TŠÓéS¦R§R­jõ*Ö¬Z·ríêõ+ت¶P@žËYÌúׯ€€Li×¶ý—Él¿”³Z ”—￲òvìWÿÞìèŽD@XàYÈx&Ü+ðíd²‰ W„;V1c~ Ð €¼ß³–wÌ@€Àåìàþ©¸ÆíSà.»r/ö[Ѭ¼­¤S×hû?Ä‹Çz1éuè©wrÔ@Iz™Ðw[lv}Z%QâXt¹ôÙHòðÖ<ð¥!Hí1÷O|QR@iÝ=6%k $€O¹©5cpM7^S çâk™ˆPnýÈ#Ï[-òxQŒøeã½å(Ñm‚)Ydt·!ÿP‹-Yl¼7¥F¤øO”%±¹æ??9’™pâ— b€QØQœn­•Ég¬§Ñ’ÈÑHâ›i"äášÐ‰(ПEù›³ Ù¡Åw—Ÿ¿õašJ7i]ž½AewÝ'Ð,‚ô;ÒÙIjGyFÉ'ª¼¨#~v0Ö¦ÿl p…Ø £Åjùh³}R:¬DQhb²Ë¦é]o¡~bG­´™W?Ðîµ ›l¥x¶ˆÜ‡´8R·eñåaJy¾}h)~¶U%[ÌæÕäš¿¡UHþ~¸bÀbÞŠý€0š­EXÅ.B—¥ELJ!ÿLæl+òÚÑo|ʶVyª‚ónìÌ€ý6gæx¿5y1¥¤U €½/O4¦«ù©\Ä?›;‹Ð2ê$[2"]ŸE¹±ˆÀ| ʸÜn3$€öþf/T‹--Aëmç˜Ksƒ\€ÙÕZÀP­´ZÕ—9T­÷Š%‰S"—_ØÌdAÐn Cµ‡7­a‚$å+FÔøã¦x[…´"åe¢8%ò°î“éaÉ>;íµÛ~;î¹ë¾;ï½ûþ;ðÁ ?<ñÅ<òÉ+¿<óÍ;ÿ<ô#ÕZa²Ñ[ýñ9ϸ2öÝ{Ï»ö½Muym{ÝÁ¹H!ÐP<*Û±Œˆ6ækó©Ï}ò³Ÿþü'@*Ð~*  =(BªÐ…2´¡}(D#*щR”¢¸`Jè®’QÚ¤¢ý(HC*Ò‘Šô¢DÙhUPšÒŽ’´¥.})LczP“E¥S±éMY*Óò´§>5(M‚SŒze¨ù)R“ªÔ'F­iQuºÔ©Rµª hªMž*Ô¨ÂĪ^ýªO± ­:•«.+ZÓÚÿR±º„¬Y5+KÔ*×¹Z”¨\që[»J×½òU¡le ^Û ×”ôµ°…ýkJ ØÁ–İޥ+bK¢ØÄ2v$½lZ#Û¡®L–²zÅ,h«ªÙÍq¶² -j§:ÚŽtv³¥ýljcÛÓÕŠæµw•ªls SÚzʶ[i­@t+ÜÝÚõ·¦½-r“«à’V¹Ë¥skëÛ¬DWºÆnIØ Ýír·»Þý.xÃ+Þñ’·¼æ=/zÓ«Þõ²·½â•AªÛ[˜¸·¾ö½/~ó«ßýò÷»ðˆ|-ÂÜþ¸À>0‚¼Ýÿöå¸Q0„#,á K˜Á(rðE(¬á s¸Ãèµp€'2`ÿ“¸Ä&ž0ˆ1l‘³¸Å.Îoб;’Ó¸Æ6oŒ›Ýó¸Ç4Îñu]âã!™Ä@~.}‹¬ä%CøÈÔµ “£,åþ:+#ž2–³ÌÞ*s4ÉZþ2˜q_O$Ìf>3w¹l•+£¹ÍZVóJ½ìæ9KÎTa3ó\d;çtv!~ÈŸ-ã.¹Ð` 4CèA¯™ÑqvÉ"-éISºÒ–¾4¦3­éMsºÓžþ4¨C-êQ“ºÔ¦>õ¥ó±T³ºÕ®~5¬c-ëYÓšÓªVH­s­ë]óº×¾þõ­òëa»ØÆ>¶¯ƒmd3»ÙÎ~6´)­ì‚D»ÚÖ¾6¶]=m‚d»^ÛÞþ6¸%½í„»Üæ>·±Ç-t³»ÝºÿñîyÓ»ÞŽ·½ó­ï|ã{ßþþ÷¹û ðüÚ/8Â~ìƒ+¼á×5Ã.ñ‰·:â¿8ÆAmñŒs¼ã–Žw@!ù,~4lŒ‡777XYbyNKbl{{kc^s‹W}ªoujy™}nŽxz‰xx™g|£u} Y‚®^…°~ƒŒy‚“h„«fгm¶y†§rްz—¹žY¬_0°b¯n1»k#BA—sRŠu~˜}k—{z¬|\ºM¹{X©ky§yg½cn¹jw±j¼s|ËmÝyÉi%Ïu#Æy7Õ/Ü|6ê}ì|&ìy8ò}(ð}2Ü[\Õ]aÎd^Ê|KÆ{XÜkOÛfVÖyMÖxUÇdjÅksÆvgÊrxÙdfÔmqÛteÙwxã[WèfIåfWèzHèwWãgfåopæsgäxx†oŒ†v‡…{˜–m…–u‹™~”¤l€©w‰¥}‘¶y†Ê|ƒy˜…x«\¾‚I¹‚Wª†g®‰xªz¸Žh²q·“s݃.Ö‚;ô…é…'ç‡5ó‰(ñ‰5ò‘:É…GÆ‹VÍ‘XÓ‰GØŽRÛ‘MÕ”XÍgÅyÔ†gÚ€zÙ•iÚ’{Ϥ}Ý¢kاxìˆGë…Wç—KçšVðŒDñ–GðœUè„iåƒzê™gé—wí ]ð [ê£híªtî±|ð¦gð«p‰…„…†’–…‡›„šœ’‹˜””‰‰¦ˆ–ªƒ™¸—Š¢–ªžœ²ˆ ¼š¦¸¨€€¦…˜£”‡£š•º€Œºˆ”¸œ„¨Ž¡©˜¦«ž°µ›©¢ Ÿ½£Ž¸§™­©©©§¶§±½¸«¢²­½¾²§°²µ…žÀ‡¢À˜­Å±Ç£­Â¨¹Ë´»É±¿ÐºÇÔÈ‚‰Ê‹“Êœ‚È”—Ù…‡Ú‘ØšÔ•–Íš¢É¦‹Æ­—β—ج„Ò®Ö±Ò´˜ÎªªÈ«¶Ëº©È·¸Ö¢¤×»¨Ú¼½ä„ƒåç–Šåššê§‡ä£œí¶†ì¼”å¤¤éº£å¸¸ñ­­ó¯°ð·¶ÈºÄ˸ÙÀ¨×Å·ëÁêŦé̵éмñÀ¿ÆÆÆÄÌ×ÊÒÚÛÆÆÛÍÑÞÓÊ×ÙÜÚÝáÝàâåÄÄäÏÐç×ÈåÛØòÄÃöÙÚåßàåàÛåååïïðøøøÿÿýë'° Á~ýüùCh°¡CJœø0"Å‹-œˆ°£FŒAŠløq$È’ÿØy\ÙOžKy,c®T)³¦M4oê”™Ó`Î@þ ºs(Q= =Zs)Ó˜NŸ²L*0ªÔŽVwÒÓuK—;œW‘vôÖfÖ›ò†“_émç1â†V-ÛͱaרùiÎ{Œ¶!ÄÇ’έ]¿Š¦-4u„é’w,Ú¸ðád¯÷ÿcÎ(?tŒyþþ¹8ÓŸÜLË¿·^x{û+Ó9‚´~}ñá…æ>D¹÷ž\B±£à‚ 6èàƒFÈN3ƒ2Èf¨á† fàM÷¤sOjgeלi¼‰…ŸcÖÁßiøä„Ï7ØtcGº¥ÓmŒø׊ÄÑ…ºmC>Õ$™d=ñÓ\GÛ”§"€ƒ•Uý<Â4uS 6õ|“$–W"¤¥M±W݇19éBQ6ƒP’aS “ý ¹M‘E©É"›1å¸ci\ö3f—wvô"#Ž`y @Ý—‰¥â4©y ¦˜Õ8ÚOˆ#Fêgt¥Si!ŒI:ßDáDI~ÿ¥#:(6–%)`È¥ç#MD!ì«éÒÆ±m cërJ.Ö®tÅwgŠ(ÑD"Þ$i,$è<ÒÆžöÙ‘¦a*´pEi3M(ˆiÞ Ò†X’ìQ?™k'žÞýÉX|ý ÂÄÙ —ˆ¼ô"´ÈÉÀT¾"´ïÒ…O¥mÒD5é Òn´Á:ެÁF&èò°GärnkB†Ï#ö¢M5Q,¡n¨¡Fk¬aÇ+k÷¨dÍ&ºÒ=Üàörc¤Ê,AшœP=8ã‚X†p„%,ÁÚ,`±‹ ­eAš¸€.PÚ 1f‚ðXtÔ W½ªÙ0 xéS(ÜÑ#{aËRk‚ÐÖ,T‘®„ËÌRuˆ(ô3gKD  Ð„BØÀ7¨ÁÀ¢Ò~ 0eaU™L䡉PdA ˜˜ç”Ivœ>mÂ~” CÔÀß2„–M„ìrýè_j‚$$ HèëbÓ •ˆ) IXB7øÑÊÿÚ ³…PD^ÍwHDŠñëheÒ2s¡Uš9’6>† E謎8V n&°<2Í âà wÈ#1ŸXN7°ÑÏ9ݱN /C!5¥{x ®5(>zFƒ,¡n LzðqGÌAl±…JN©$ªN¸ê(éÉX¸üd†„:WˆE´aÿÈhà†{X!“Ã-l± cÆÊ†q쇦ªú*N™oµÈŠ~’ƒ¦ðõƒxƒá5´@ Ž`ƒ Ô±:´Bó@9ÃCƒšw¿…n5˜Œ 0ˆ@fŒ‚~˜¥!iL kXQ ÛM|nšºc™£m[yÿMøapúîXh0þ`|À°h}îq„ébÉÑh–U}©ZPsÜ–¯!r~zB”6¶*skÐuð0ÀðD Ð|ÿ!0^À ‘N›’`šôUË"r–%pßp M ý0 ^p,†0p€º È€  š€ S@‘`x21çò}71‚pR‚ð#HKÚÀ‚³ qðŸ@ ' °g0%°¸P@Xâ*E¨4ýv11€«´lXáb‰ð1  Ò£ ^ÃÔò D°Ð{ TPº` @ _&¸BÚÿÄ`¬|á'PPqwýÀ?K]Ñ#€`ŸàñHÀð B€î0pÂ’$ûç,‰2Á¾Gp3! [ nq >"#P<@ô\õ ÀU€ï° `‚ ×ç*Ù絆ºh<1F»  à° êH¨° @Å`V‘ 0:¥@ð ¸Ôi¶‡è!–c E|„œV ŽØ0 VàPÀ ]ðŽÂ°°EÓ ·@`Šc…^—·`Ù McÔ8&ÅL…R»pšÀÎ Aì  3‚ÿ  °App  G%” `¡° H@@@“HP ‚SÌ  ̰R+éT¡Ñ€ aB°òÀ S >` 02ÀôC:ZYV  ± ýx'Z·MfÄw™É3’=5!.éó° [@褎&ÐŒ& p0såpg` @žÐ [P ]Ô¥PEð*U†Žpk€(égóÚ ÍÒñ lÑ–é„3@ਠV`pVQ2Ì$ ¯¹ Âð ì€YœU–]§‡¹FD,QVY øˆì ‘šp 0±Cõ0<£ p ÿð“}´*é€ ½Ðˆ óà ›€  ›ÀÕði½ çàœÏɆý RD ›a„ð#Ùqmp(CžÊ@CŸ È€¢å t™L‚›€ykègj„: jØŸ1áabà.¡ p½ðaýð *¡|á‰x'|”¡U†¸DQÇU+!Ôéˆ(Y0†ù \‡žêÙ jÑ]šP òIŸöùb”T`ŽKk‘š«é:5áðbú µ …0a…0 m©YPúH?Ó)B€¥p »à%N€¾ÀHŠp€¶ˆС ò°—„A71‰ÿa Àáiçް \ êVÀº  ªP ¿° m¹BàI€êèKÐŽ<ÚZRá nÞà €àˆ€&7d € qšºP D+€8€°8€~ã:ÿàXÚXR‘nà Á ›UŠœÐ™ 2ª•›„8`M ¬\à$ÉqAPó¬Ñê`ÓZ­«KPŠT œiT = ®,tœEàSK¾Ðš%¬ÄjÐÚªÒ Ø©Ø Ü@«nÐV)PX(ÀÆ0#Õ°¡° šY8PMÐ>@ h7zêàoP`K=±°ìÿU½€ žZ7ñ5¯):a’Š$Nêh)`I§…ê¸ȹ¥j¬I ªgª÷ Yn`àS³ï*au`cò°½@¼7ÞØ‚õpÃÉ´B°…ESE€Ip·x;µwY¢5åaÂ{W!ZŽ ˆÈ³1@Z‰ô<†VLì€B@@Ï€ B`9[¤šJ€ Pà³5<~«&¸Rqsýj2j â# €k1‘IÅ Rt}8Q@YV¥3Ü€`Õp‰¦±n©¡ôaºŒ¤ì ¸6Aô³ Z@  þ±¾Fñ]Š£X:ñµaëy¹©·ð \ªà<¤}ÐÓZ¹` Å` ÃÉÓY • ®‚·J€·åê×p bÏæ(?a³+!a:¦ˆë°:ûÃýpš“ùÀ&PSVL tš€BO +Æ@§º@Ø eU#ª9À™¨šª|‹9:ìš@¤·ðà0ørPx¡ ɪ “{ŸˆPt0 Ó p0H`VFð*q¹k¢µ}Œ>%Àÿ@‰ùæ® EbºPC*Äôä‡qÍØ½pœ¯ÒÄ倭@ ,¥€[‹8š$Å)¾0¹®²=à YìúÄNíêJðŽ;ÉkhÉF„É Ð”éµsÂý îH[Pʧ +1QUuû*±5±€,QêÔw®4¤° g|¤½Ü« o¬ š`—‰Ó0r0 ºÍÈT0žøE°õYª?×@ªK€;ôàáJ`:¦dz„,¡¥aÚó|¯àqàŽd  YÀ 9WPb+Ñ ¿ð¿[€ v+°±µyÐ òg‚ŽŒúÀÿÿ±… Κ0«Ø–óÐ y ÕØ ½ GœRЌܺP ABÀ§¤P¬>ðî,&U†¼Ï²ï™2íœ$Ñp÷ú òÐŒ`ªpÒñZ`ÈH ¡À 6¾Ââ>pH?pøÓì{ãS 't Aƒ‰r d½ 上°`(¤°ºýpÅ™™^ax-HÝÈ¡’+™!Å€Z¨å”¢ .¹  HT½ ¦hVp ì€[pÄžpD§F ÕIP  È€×0) ?b•€¡CÎ`Ð1¬_þÈÑ Õ@ iÿ½Ö$Z¢…ŽE 9p·ˆ >Í`à;·ÜµLa‰Ž¥¡,ñWká òÐ [`V° ÆCWP&`• Xže©)€œÿKª¯sÀA3yGØ7Ëô ÓbËWܶРޮ»ú,E8Ķ™fZ·ð H`²u›>K>3ã÷rÐò}ÒMÝ;¡ h¼©a*Xb" }Ÿý(ÈÂÀ½N`¬Â€ JPÅç3Mçˆæàãw;ÁEö­e,X<® ˆâ l‹3É„¯"ÕK@æ8ð è`[[f/j€*]£,V¾ƒ]Ø@±åžõ^®bÕæÄôw„7t¬®R9 æ¶ÿõ3!ãæÒ €;ç‘C¾›XWI‹ãr'Æ E\`èE0 Lîä4nzj #ì@nƒj9 „…v¶ Ð¶€qÝÐEÙØ õPUQ Ÿ §[' +>$°3.pk¼Ž (aµžoO¡ š  º°sÎ H8S× † €¡(D\€ ä5͸#Èr¾Ðw6Ë΄«É‡+¢‚í}Ži6t·Õ ¯h Ò¾ ïNÒû À S0Ü`o`ÍãcL¨ £‹ íWa‰Ä¤BÅTC öŸ šý  Y@ØAî›ÐÐ͸Mç€Í€%í~/\Ïjÿy௢ñ×(§4Jä¾­'HàÑðAá¾½ïíöµWï'6ËßÐ ŽÙ¡@ ±"?ð P ohã]ÍžÔ2¯÷«\Q ]G–4…(TA Güp îÈSp€0e ãU dé¡… ®^ @±sDŒ¡ÁnÛF^v[[@ ¨%—_ †0'pÒ³@C QP@LøS"öôÎ x‘P®1ÌG®¢$ÂA‰ U‡ !”° €P[ ±‰-/ AAñ<´Šˆ\C‘gØèKRG”Ul@W°À—€ì°/ qã }å—ÿ'üqÒQü)Ö¶ &æà¶ü£ôlÀÑ_«ÕýwÒûÉKOú¬ÁÓÌe÷iC‚ R9rÓ& ¥e€jlAU¬Z5|ÿüýûÇ®ßEŒ5nä˜ÑbGŽÝ¢8q¥›ìñ"™¢‰›hb‰$r˜‚¿J¢ DFª¦²Hª"0™'¹!ƒ,3×Ěæj¨‰b GYB‡ Tñ¥ˆ,4!i7-¹L‰_ª`€qƤ(9‰ÀUtQFeôQH¬|0úF~òç›õgœv.]gqÄÉçqÀÙô›qv‰hÌ c•U0|J'[Á‡ÓKAý&Ÿžú1UXqð§V-´…"y"uöÑfŸ•°h)Âç¶´© (HfÉ`4¹å¡|ô§špþ©Æ‰jž±`Š-j¡€‚€!ù,­j‡777Zdqi_XuLIn`Yekt^s‹V­ls‚ivœm“jyž|{…y}pu—}r’~x•w~ ršn… sޝzŒ¯u­|‘«v’´x”µz—ºžX«^0°b­q9¼j ¿x5žVVˆmV”qQ‚idŽqc„{w”va—w SV¯{[¶|T¼z\¾hsÏrÞ{Ær%Û{5Ý=é}ãu-èz#ì|)ív6ëx1ò!Æc@ÄeXÅwYÄkrÁpqÝ~~ãgU…y–nˆˆ‚›…u¾H°ƒ[¼†U¬ƒ`©‡j«‘y¿Žb¹€}·”u΄?Ô‚5Ò:Ü„1܆;؈?îóâ„,ëˆ.íƒ8íŒ6ô‡"ò„+ò‹.ñŒ3ó“<̓AˇMΊJÊŒQÈ[׊DÒŒJÛ‹BÜ‘MÚ”XË›qÜlݤpàHè‰@æŽRç@å”Ké‘Bè”Jâ’Qæ™Uæ[ìœWìžZò™Kð›SñŸYî¡]ð [ç få£jï¥eï§jï©nåªvä­î«pî¯xï°xð¥f”‘‘“¨™§€”³–›£“¤¶œ«¼£†š¢’…¢•‰¤™«Ÿ”½£Žº¡’©¬²¾³§™®Å¤´Å¤·Ëª·Ç«ºËÇ‹“ÒœœÇ£„Ë¥„Æ«“̬Ԩ€ÓµŸÂ²²é¢„ã³ˆì´„ì·ˆíºŽí½”Ý˽ëÁžãÀ¡àÄ«êÅ¥åʳçÏ»ê͵éιçлéѼÇÉÍÃÌ×ÍÔÜØÒÎÝØÒÜÜÜÛÝáäÅÅå×ÊåÙÎêÑËáÑÑæÝÔäääþþþÿ‰y±r#GYjÅêsˆ°Bf"õébņ±S7´KÕ§V±b·ú¨Ñ³¥ÊcÆþÌ™… ¥N¾®ÚãEN(cŒ”H̘%Nøô¹e(Ð5Æä|¤aT4fиúHÌO˜¤Jqê,–¤Eiã kÖVƒðˆa¬XD­L™ÍÊæ ˜3ˆˆåÑó†ÇܬˆÀñª;þfÝõ§‹ W\h Pœõ@©tÐ85@V”(¯¤¢h£DÒ­p ¨Ü„ÉÈ¢gš#PBpPäÈãÆL4HQ©•(RŒ\ÈPB)”—8h0a™$qØ¡I&àÒD -0@JHÜ¡ÊGÅôòÉ 4ðÇ>… n¤ñÈ&º|4 Hà‰.X° =üÀÈäòÑ/<Á !ù,®i‡777iozVb€Sx¡V¬iv›zoŠrxƒz|‰pu˜}r‘wŽ~„{–}Še‰²j‹°uŽªx€¢x‰¬t‘³|•²y–¹~š¼›h; b(£j;«f5¿d3»w>ˆXB“v\…ypœhqš}w¦TW®_b¯gF·mT¶|T®pm¼df»ck´fr¾hpÃh(Âs+Ì};Üx!Õu4Û|4í|-ã}2îw6î6ò~"ò~(ð}1ËnJÈhSÅwYÖhUß|AÆfeÃ~`ÁpsÑnjÜçiVëuLìyDë}Kçucèxhn‡|™¼‹–„v”‚x›…u¯‚X±„[¼†U­„`®o¤‹t²ˆa°Œsµ’tÖ„7Ó„;Ù…5Ù‰?ôƒí€#æ„?å‰3è‡6í‚8ëŒ9ô‚"ò‚*õˆ"ôŒ.ð€3òŒ2ȃDÌ‹N‰WÃ[È[Ò‡CÒŒMÜFØMÙ‘OÚ”XÍžrÝ”aÚgÉ xÕ¤vì‚Bè‰@á„Vè–Lá–Rï”Uê›Vë[ò”Cð”MñœQðŸ[çŸbí ]ð [ç¦mî«pî¯xñ¥eð§jð©lšœ’‡“ Š˜¨€”³Ž¤½«»¤‡›¢’…¦™ª›Ž§™«Ÿ”²Š¯¦ž¤¤¤¯¯¯¥«µ§¯¸»»»‡¢À‰¢À”ªÄ™­ÄŸ±Ä¦¶Ç¢µÉ«ºÌ°¾Ï¹ÆÓʼn‘¡„ǦˆÉ¬“··Ñ«¢ä‚‚ã™ã±‡ì´ƒí¹‹ì»í¿˜åªªÀ¿ËÜʺëÀœäÁ¢ëƦéĪç¸å˶êϸéѼÁÁÁÍÍÍÃÌ×ËÒÚÝÀÃÛÐÇÞÔÌÓÓÓ×ÛßÜÜÜÜÝà寯ç×ÈèÖÆæÔÔçÜÒçߨìßÔåàÛäääþþþÿË”I£#É‘Á°=JÄð›JÉœ™Rã%‡Ž"6Æ û%ˆQ5i‹â`º@—2HУ-˜ aÙ²Kd§T)Vg¼ "DˆŒmÚôtZ X"\1³©¤ëV.Eq´ЖÇJD‰Š%]x‹˜/Am´˜ªgÍ_I³UsÄÐP MbÇjó$ ZZkØ|ݺu(J\¹¯–¥m4š0AÂX,׳¤…)9¢£¬¿‹§þzS#?jð9³¶gœÍ”ÁRÎ¥M£Æá%Ò$:3:Ä (Ðf^pŒ€I† ±zñÎËɧQÍÔÐPÁbˆRµÁÊ$”±cÏÔ€§Q±HŠ@3l €³fœµÈY“àÚ4x81kÓØkÍÄ$[\a *€ðB 2pÀž6àeÓÅa°aÁXpÇ0 P¡HpJ+oPᇠ©œ²Ê3µìñ lðÁTpS‚TR»á@xQ¨BÊ |Ôa‰*ÉÄD -LLàJ +PpA2¼ Ðƒ”„LLÑ\¢ÀKPÊ4!ù,²h‡777V­ivœjyž~w„{y„{pu˜q˜}r’yzœZ®w}ƒ|ƒ’}‹žn¶yƒ¤{Ž¥zŒ¯u’´z”³y–¹|˜·}š¼¹v8œYXwo~n¥`_¡xS¹zB¼z\¤uu½kj¾hsµuqÐsÍv&Å{7Ì=Óz*Úz4âw<å|1à{9ïw6ïz6ò,ð6ÏzSÐlVßlXÓsMÆefÅkrËtsÒnjÞ|{çiVìxAì{Käfdälkçucärrä||…y–‚|šnˆ˜xŽ˜“µ|†¹{†¼‹ˆ‚˜…{°ƒY¿ŠY­Škªy³k±Žp·“sÇ€?Òƒ:Ù…?߈8ì‚õ…â„-ë…$ä€6åˆ3àŒ?ï€6é€8éŽ=ô„$ôˆ%ô‹+ò€2ð„8ò8ñ:Ç„ELJHÈ„FʈOÅŠRË„SÊŒQÊŽ\ÔˆBЊIß„EÛ‘NÞ”QÈœuÊžxÝ€КhÞmîƒCê‰Zç’Eä•QçšUëYñ–OñšMð™PðŸ[çƒlêŒkã€êgë˜tð [æ£gä¤kè¥jî«pí®xî°yñ¤cð§hð©mð¬p…‡Ž‰…†ƒ‰’œ„”“““‘™™™ŠŒ§‰•¤ƒ»†¡¾Š ·Œ¡º’¢¶¬¼¤‡›¦–‡µš„¹££££­­­»±¨³³³¸¶¶¿¿¿‹£Á‘¨Äš®Å¦¶Ç¢µÊ©µÁ­»Ì½ÇÔÁ‰‰ÉŒ”Ö…„Ñ˫ή’˯¯Æº®Ê¸¨Ó­­ß­­Ó½ªÔµµÞ²²Üººä€ãЉåœä´‰íµƒí¼‘䤤婩䰰侼À¿ËëžêãêîéιêѽÄÄÄÌÌÌÃÌÖÅÎØËÒÚÔÍÊÝÀÃÑÑÑÓÕÙÖÚÞÜÜÜÛÝáäÄÄäÈÈäÔÆæÙÍäÒÒæÛÑãÛÜéÜÜåáÞäääÿÿþÿÉ€ñl:i”*²mÝ:lB9œ¸.H0ÓÔQZ´¨'¢´}ƒu”CsÍ9ãñâ 5i‹"#׈ݪ .¼²¶Nœ±ŸÆ|Ä@SNÙ"jëÀ cÇ.Ö§Z묡;fÌÙ8d‚Ò ª–¬ªZÞv± À¸¨ãŒ!›¸ìÑ"_šæÀ‰2¥ ;dÍZK»Öa´EŒ>eà¨wñ–u…î§Ud]ˆµ®œ´L +¶N" Ê$éy°‰Z¤@k>hVlÖ3•… 1²té‹9U4¬f}Ö¡™>è°A±âÄ»y?cÖ‚†[޶H©µ-NrÅÄv ’cãF§?Z$•ÿw'qÅL™æzV§ ‹7\´”I(ÅÝàΧ²¦IĈaëlâB [pQFdpqÂXìX“ŠbªÜ’C1ëèPà V¸1ÉY˜À”&œŒ€*à³Ã1âÜPB&j¸Ñ$b¨ÀŽ)¬°Ò̓¤£Ë±%MÈ·æçt :h ˆ r–3´3‡Œ—ßÐIÿo¤eÐ?´7z˜Ãðá¥ÛŽ3‡v; ­¡°:Àæ®]rÂ4Œ‡våEH™@ˆPì1S"‚#Ô‚l(È ]{@±Y{ðAÈ!ˆÞ}ùí×ÕDÌ@„2]'”p` QUÇYÁ0!…ˆ€#„ $ذChX•RTœÁG2>bb#10°AO4$D†ÔqÔ€¤a½à˜ `ÀXÀCGåÕÈ9ÈPPØd#€0CÀWº’X†"jH|ðaãABðƒ 4Á¦›D4QEÇP@!ù,ÈiA…777äedälkässå}}ç˜MæšQâŸ_ð [ï­rð¦fð§ið©mŽŽŽ¦¦¦©©©¶¶¶¸¸¸Î¼«ää‹‹å••åœœî³€í·ˆí¹‹ì¼’å££å©©å±±æ¾¾ÍÀ³ëáëÊ­é̳éÏºÆÆÆÈÅÁÌÌÌÕÕÕÛÛÛåÂÂåÈÈåÏÐçÕÆçØÊèÖÅèÙÌåרåÝÜèÝÔæáÞäääìììóóóþþþÿ@¬V£P†µÊÀò!:ŸÐZÉyÃY¯Ø¬v›ºR*Cã3(œ¨ZJݺ±Õ[Ûµ^Ð5åÒ!˜?MkOSDson5V6ˆ8u8E51e*5*x„D2†5މp]8W’žD›i„# ‡£[7]¦¨Ww³D_**ƒj#  ¹¢»87(8¿§U_HNzFœk $5 ¶.Õ»ØÚÛÀ½WBjÌj4ÐD%Œp7 Þ6y§²YéÄÐIƒ-j˜xø‚`"ƒ¹¡˜“o_Ã4ˆ¨Z 0„²–cÆy8Èc¨áÙ3 56<3 `ÆJÌ–W\¾ì–lYC ŒñpD #&ÐÐÔ ÆÜ°ØˆUŽPM§5œepÊâƒR`…pÂA[5u]ó•ˆX²mª^ËfêÄnP„**èhÒ¥MñR­JÇ8Ö¦@U€À€,Ö¨i§âŸŒ»D(Q"„_5lX0€€‘LCŽ,”Wo )þEÉŠ€ +<€Ó¼¦¬^«äà¶"Ø7ì;+ˆ«1~<‹$DPCÀs Ñ¥C¡^=hÜs~.žöâòAã!ù,ûh&ƒ777£££«««···¸¸¸ÄÄÄÌÌÌÖÖÖÜÜÜãããëëëôôôþþþ¤°ÉI½—5¦±¿Öw)ÒÒ‰^ˆnVИ+¦¢Œ¸p<Í"ƒ4€Ûëã}|À Žˆ2zAåPçÄ@£Â\SwÅ.WÕÌýŠÂ”k@HYlcÐ@b-8÷™ûsB L \! k Zh5  7 zo1  ‹ $`:& ¡Eª œ{²’ ¢»…ÀÁÅ ‘»!ù,d&ƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÕÕÕÜÜÜáááëëëôôôþþþÃ0ÉI«¥¨)teû`(†‰¨| 3®ìX‚L4ik¯ï7À\ßÀF®ÁÈz4UÐ6,òŽ>år¡É)f¼"ZP³ë†ÅUr9 Z(‹Ûø@†âŸ·þÔš÷ux oy R.i 3ƒH‹(•Dp}U/ `nJˆx[:% = §˜pn—¨yoŸ"ˆz²U) E/ |¾Œ,C# ÁZ;µ`gÖ#Åg"ÛÞráaàãÌg!ù,+bƒ777¥¥¥ªªª···»»»ÅÅÅÌÌÌÖÖÖÜÜÜãããëëëôôôþþþ†°É9Yc–ê-•\Ù–ŒäˆMÐ HIrWÒ*o 2Ó}W:€°ºåvÃ^‘s:‰¿¦3éc§Ô%pàQ°f ÑØšjœy„B+aÈ‚A 0XTq2 4 k7 - { Q - ’?_‰šu ¡ut¦©©!ù,3a.ƒ777¥¥¥ªªª···¹¹¹ÅÅÅÌÌÌÕÕÕÜÜÜãããëëëôôôþþþ´°ÉI«M¶²Ævþ`……Š´xaz… 4g–Ìtmßx ð"ˆ› 4ú0= 5 3Ǥ2Öt²€ì”Y]¥ÙµëEµZ1—ü´œÑá%™ÒÖ`}JÊb>©SÎ {| ~Q/†J kU- ƒ c|˜ > Š‹Œ) A ž %¯°,'A º¯¤ ®‹Å ´¢£s»}Ö !ù,S^#ƒ777¥¥¥ªªª···ºººÄÄÄËËËÔÔÔÜÜÜâââëëëôôôþþþ–°ÉI«m¨1v»¿†´p_y1E4£éNh¬íkÆÀÌ’¶‡ç4^#A,HD*Ä Š½ÊŒZ¦Ô•‚ÍÖ¶¿€Ž²ØJp„xpeslÕÖ a4Ö T _`! 3 qfO !b p O ˜™CdŽ \ “„f«Rzª¢%±µ·!ù,h^ƒ777¥¥¥ªªª···¹¹¹ÅÅÅÌÌÌÕÕÕÛÛÛãããëëëôôôþþþw°%Öm8g¤ðºÚ–4Aó…b”'Š êj‚ Ü, EŒ7¯„h»ýZDŸ1‡y)—³$N¦YH‰`pVg©+3p(ˆQC0 m­tƒ`0$+†µ©H+n r„! {ŒzHj!!ùl,Wqž‡ ///HHHVVVnnnMx¨ku›yzŠyw˜q}¢X®\„°|…“k„«fŠ´m¸z„¦z°x—º~ÀŠu~–k˜wz®|ZºMº{Xªl|¨{e½ch¶hvº|n»vwÝ}7ëz/êy8ñ}'ð|4Ü[\Ö^aÎd^Ì~HÆxYÛlLÜgT×wMÙwSÈdiÇluÉyiÇq{×cf×nrØtdÕuzäWVègJædYìyGêuXægfènpêxhèxw‡n‹†v‰„{™—m…™tŠ™z’€ ±xˆÏz‚ã~ƒ{—…x¹ƒW«…d¡€q±‰j´v¹’o¶”wÞ„/Õƒ:õ…é…(å‡6ì’?ôˆ&óˆ7ö‘6È…FÊŠSÊ’]ÔŠHцWØNÙ”VʃÇ“cÁ›yÙˆj܇uÕ˜gÚ—uÛ¢mÕ¦{èŠDí‚Zé—LêœSò‡FñŠYö˜Gõ˜Uï‡ké„yä›eè•xðŒcó˜gó™uí¡Y÷¢Zë¦fê­té±{ø¨eø«sú³x‡‡‡‡‡—˜…‡š‚š–––…‡¥Š–ª†™¹šŒ¥–”«‘”±”¢¶¦ˆ¨ƒ—¨•…¢™”¿‚ޏ†•²”‚¶¨–ª«¤Ÿ¦¦¦¦¥º«²¼¹£«»¨¸¶¶¶‚žÁ‰¥Å“«Çš±ÍžµÐ§«Áª¶È¦»Ó·¸Ç±¼Ð¬ÀÖµÁθÈÛǃŒÃ‡’Œ˓؅‹ÙŒ’Ñ“‹Ö”™Ò›£Æ¥‡Å¬™×«‡Ü±ŠÙ·œÎ¢¬Æ§´Æ¶§Á½»ÝªªÙ¹«Þº¹ì‰ˆåŽ‘è“‹ì••ò›…ð›œìž á¤œæµ†ä»˜õ©‡ó§–ù¼ˆ÷µ•㥥㬰豴ò©©ó¯°õ¶­ó´µÒºÅõ¿ÀÌÀµ×ȺäÁžúÀúÄ–ãÆ©äÌ·èкûʤùÊ´üÑ®üÕµÇÇÇÃË×ËÐØÜÃÄÑÊÖÜÓÊÜÜÜÀÏàÊÖäÓÜèÙáìßçðîÇÉáÉÐãÒÃìÒÖöÄÃùÔËù××úßàýáËýèÖççèäêñíñöüééüïðþòéþþþÿÿ ø/Áƒ*hp¡Ã‡â»çâÆ3Ĩ1#ÇŽ?‚¼8ÒcI‹"O&L©!Ë– a.äèÙŸ›ÛZ¾”¹S§L…=}þt9”hуA…¹T G›¶ú#NeÒ“WGf¹•kS§_#†íêu¬Yøþ0èïO «aÅ6%kòì\»wãÒ­›÷ß½?9N…‹÷èÞz =Œ8±â¡Ûªø÷-VÇ}—2&ùuóLÌA&¸íf ›÷‡^Yó㟞?‹ÍZà7Óô”¶^üvo˜±Æ•»òoàÇU÷]ÛõlÞÍ¡G7>úržÏ¥_G^ùvÝο+ÿß{yð´Å_N¾^}ûóè­#ôwß{òéñç߯]?ÿþ Tši•ß}Ê÷Ÿw΃F(á„Vhá„嘒J9v(!7nè nôáá‰(¦¨âŠ,¶èâ‹0Æ(ãŒ/®”Ý?ëx¢£'ªHÐižf_GÁÙx`IEÕ þ%È Aìxò‰*ª|âI;ÿ¨RŠ*úpvÐM•–‘7r·$“Nšy&š ªâÉ:åX (;^éPJB $› ¦_Ÿ€>¹` ‚ TŠÿ´ã‰ž”ÒN•ŸÜ™=¦á¤U™šw䥛rÊ‚qzŠ;û„²h¤†"j$B÷œöÇ7Hbÿ:žŸ™ª9¨¦òùÏ',°€Ÿ;СX —+™Çòµ¦²·ÚÚd¡}ò€¯|r¨£êH)i²ÌÒ *¡Î‚®·ßª"Á:> Áœukì²ÝŠ;+¹ž>‹+¼()TÊë–"Á¥d¹e—ÛâÛ˜Á#,›Â s›oB¡, Š¡ €‚,ÃïÚ[ë¸÷Ò[/Æ«´o¿ÿ¬Q’ÉúmÇ_¬ñƳœå¹éJÐãÉŸÆê°— #•óÇ/ÏíL0ª8ïÌs³BC+óÓPG]k)Áв®1gÝ´Ö[ü²Ô^6Ð-'ݳÏJ7t×ccݶÛl‹ý¶Ùkëü3ÜrC¤%—)ßÿM7ÓqÛ]7Ùeÿ]ø@ûй£»(÷}6Sig xÞ >¹¾>*,X~Çë4Ø–þp瞃®ÐæÿËyä!_N¸éxS.ûëÎÒ#Ρ®:qƒ»ìzì´Ïmøï¾k‡«jAt­æH7yïÃË;{ñ¢þøêÿœ¶M8§ÁêPâí>}é\O=ìÀ‡^}Áiö˜zìøõ¼¯Ÿ0ñä—oþùfþå>üê“^ÑG½Ï /ú žjÚò‡Ôˆ#yûC`F?çÕÏ~÷ßõns“›ð£r œàÒ4HA–p|´=˜ˆmH„#`a¨6 J…Ö3am¨$žP†é âÿhDÄ"Nˆ$‘—ÈÄ&:ñ‰PŒ¢ŠZ§C‚ÐgHA¡”[nâ½±€äßøE!ŠQ#t‹?82hPãƒÉSöþÇ–1…3`ÁÆ3‚p!lái´‘aãÀ¨Ç@þˆ05Œü£ixÃ;âQ{TÈžþa“nDÀˆF=æŒaÄñ² îjÈC´Ñï‚‘¤d%[éÊ–0Ò‘ÜÈ!D $Ûd«8Ë>Ó’4æ1‘ù£? é4ñÐ%0xéKÛt0/´c,1)ÉIæÑŒ—ü&8¢EW“ÿè¥(IiJ+ÖÇ›â„'3NyΓžõTH«þ°ÿ‡8üÁ œ‡zÈyhÃ-cBS߈ÏdŽÑ¡Ý\æ6eIÅ–¤E-}øéƒqЂHµPñÈTdD!Jѳ¢ÌdiKoŽ‚(ã:8 )-PEZˆC6­§ÎQ–ò¡Úl¨Lã™Ï¦:u©)}’Á†¼á&à´P =ÔG»H/UÊÍ–ÎχIEjZ•êÅ“ÜfüpƒpÐŒæA«\È°à ‚)+¬é¬fYËÔ§®Õ¬gEëa5ÂÀ=`á :F=ð ƒd TAF¬Ñ­¨ìTk1ÙºØÂBuœUfBjâØ8ô8¸A´@,ÿ`¡ X8ƒ)¬ä.ž‘‚?¾±½¡º”–â{éqcZZšö!zP‹2Ø ìáq°mÚÀHrxv˜ ­ã@þÒÁF6÷žˆM.sGKÚó¢·$Ýp•°‡pàƒ·‚9Js‹F]ò&·+û`ªZV®—Àíeo‚ìÛmC {È=n›PäãaHœR{´¬E¯p¯a F®•Ë`Ñ DK׸ @Çt~NÁ VÈ‚¼à6¸ÿŽúPÅ.±ÜÔ’Ô †ÿŽm|Ã>佉yyìååØÐ&4–{+!‚Í}È(*B6,á Ñ Î ¤TQQ`³ãJj—þ@Þ#‡[Ü+:ËZ†e¢¼ÒÓb®Ép$>‘ŽzÏÔˆðÄ>Lƒ8èÃE$J´ Cœáv®‡:ùQRÖ£†œÊ6ðñ@ËØÅ]®µ•ÇMîrÓ:w‘* &xä?±ƒR^pj.‚ üD$Hmj`x:”Õ¬6vÌIgFÙÄŠw‹ps‡"º AŽÛüÔpð‚iºûÞùÞ7\KÉt˜ÚÓ*ÿ8ÁUyð–܈^´zc-ëŽ\+u`3w½ýC«…3BiT`(›ÙΆvµ©‘axZ²ØFÃm·4üáÏuµUò!®ÓÜ‚[Æ ø< +Ø6%¥f(ùŽôàßõ5›Á@j~Ã)e¿‰ê@¸! nØCBaë_Ý% À?¼nx—;æªÐDà™!iã è&p`Cà,g:ïÙÑè…!™^<+2q€BÑ[ì|Ð? xÆË<ì_? M ò@b £L¥A}îY!¿õt4²¼l!ðŒnüËCbÐ~ñÒ‡~ᳯ©ä•Edÿ;ÿ!¦̃ph†Eêñ ²Dwªr=çokTßúµŸ5Ö©/E&"à Èð €tæà;ài¿ðÉào=€=ð R©°!"! `3ý×èD0{Öw}X‚²‡÷ ôzÀ: HÔ€€;pHͰpàv8ãGn²#ªðͧ-Wò7ö'‚#˜ ·pAVs%Q,xÀ0v÷€p n#0$@9ðvî—(RB%Vr3 ‘8`À­G„n¨uK¸÷7‚×g{)¸}Ü÷†wRmà ;Êð7p{ ¶aY€aè&–#¡ÿ°'U’\Ex‡3—‡C„„t¨„Yçp(8„$AJ>`8Àt€0ˆ{5jY v&´Å¢(7– uT è‰Ñ‡‰3qp}a‡Úw‰¾È„eÁÓPYÅ@ :`Uø…Y=YÈã] úP*ž@ ÁÔ ó0€åtÑp|ph„•h‰NQ}Áˆ 〠ÄØŽ»¸Žìx0m¡À0W9 T´Å…8 YpÄ þÀ°# `Õ&~Ò$Ô° ˆqÅè„qø‰G¨xõx}ã€Mvù‘µTr0qp]YP[o[åå÷iÿ¡  êÐtS(mÀ åF˜H††çæŽ)ùz ˜ðó˜ùØ‘Ky’#±OÚ`yBv"Å ÛàXTrÐS{€ÛàµÐ#4`éPmËw‘É—€Š´túØ‘°7Ñ ãP’˜P‡*‰‡ús ñ ¶•"¥•)qQ7TÄõ § †à\Qp«Ô–¡dŽg~þVŽÿ@— ±OzÐE\Ö‹¹ùð R9P Øg•*3;pvqRWx6©Úsáð},¸ðw^à5•2†4@)”ÂgmQ‡”ÂgÑEš_‹PœÈ¨”Áx²WSY—TY•yô Ùÿ¥"¥`©ÖA€ þåâ @yH;ˆ‘§æy§!^%¦j<'˜¯vVù0 —Ý©‡¼˜cƒ]Ya_yžÆmcÒgR‘  ÷õ^0CÕâHŽ Qzzöð“7I/ Ù§‘vú—É%•R ¦yš3J‹©ÚZ€Y³d„ü E}0‚°mà[àÿ‰2y’rD/7Ù>×¹II¥Uª”U —uv«DÉàgC2\Øõ’r°Xhw(N0KÀ„R¤É"ªŽAÛPgÿL|ðÚÐ ¥QRk9¥ô— ¸wŒ‚Šc7áUY€M«ÿåwteæX[u—•9 +`ëRªàZÀs±wUê™äŒZ7äågSÑ¥5ꢅz{àىȘ›Ì@§ŽäU7A…µâ`[Oj,à‹àT0iv› AÌy”1|z¹AF68ÔAÖ ’vI:ÞI•s Á ^Ež;J_Ì0X ‹V \PµåS!Å–ö™r¥ê7Ùn³ú6þ@ô •Æx{±›°yä*Ì]ö1I—5à‘ "PU°¥Ò(x}cjú|üúH~Ajÿ*«µj¥-ÚJ¨';¥á ÉOA‹´ÿ–YÐ4€-0\»¤”­”8)e|‹²wÉ:+˲-[¥}ög ‘j`­µ£µeZ°À.ð°\p ëS—i~¯åožÆŸÝwª± µ‡®üˆ¥(Ù´‘žê_JµÛ`[X T ±SÐ[pˆˆ°V°y@Ó¸l‰Rþ–€pgvЧqk«ÞJ·.‹·Nû´Æ›V×0p]HŠ[n°S0N°%¡f—kÐ@ µ@ 7J¸NºøzàµOk·Ãº$JpÞg,õ° l  ÿ0J`[:VÀ%%€€^ÀˆÀÀŸÿ€ pX¨RcÅ´Á[·*« (û²²@Ék#¦F• ÐTÛ0LP{“No  nÀ/B¾;`¾G;¨s«¾ë»¹Ä‹°y4º½ùŸH­Ã@”åŽ Sp· K ¹ajƒ0`/6C'¬@tµ¾[ŸØ™¾Ÿkà ,¼O«·¨q' ër :к °a@ |óv /ÐÕç…ðo•KP ÌÀW*®8ܹ:<¼A4µ°ŠÐÀ Õ€%Ń.`p1p½ÅR–€  ŸP¬€DàokKPâ°ËÅ`ì²)ÿû­_ÜÅI‰€“ ‘.pÉ1° 10 2, Р ¬Ð ½äs×&­¿¤žÝzá˾rëÈžëÀˆŒe “@—ì ƒ0;Ðß ° À`.ÀÑò ì°¢à ɨ`þp¥J^Äe™·l˸ÌÈC¶&hDä ù ¯àF‚ ±åÆŒ/ £œé€’ @•!À€˜¿àÃð ÿ— ’ 8Î ÝÐýВȄڀ áøFð˜'°O°É ÀŸ@Ï0A ek u†dgÉë¯ßÆK‹¾³ÿ ÁœÛe{Ó%áõ=ð ]BFPÅà —¬p[àÀÂâ ” §’ “pÍì0–+²Ý†PÈ¢9ÖÞÓd­Èw‹)V¢#‰\[,¤P'‰€Rt@Ž` ³0[° ê,òw„À(ž–0 óžð. &²stMO5JÎy°LË7-Æ|k2 1pl¡5ì Ör5ÔÆ7˜À[à  0˜´´ÀÀì@'©°+ŠPÁÀ ŠpÁE±œb+ÍŸ”]Óî{Ù–]Ë£…:GðÅr¾ÅD^[°|ÐY P ÐæÖ ÿ° %  (U­HŸ°ûA¦|«¼ÜlÓ¹ìÞï ßüãÜ/ÀÌ圳ÊÛÀJq6Êëp“¤ðÝá-*äíK罯üðZÑà¶ŽlHÔ$^Ç]A•-ßó=«Ë£ FÐÙȶVŸ°Ÿ°ûâû@­÷0Ûµ}ÛæÜŸ°Û½ýÛ5>GŸMõ»ÒÜ™ýc-Ö>Ž`c7Øl­ß'«½â+ °aÛ.y ƒ†B€ÊVò/ð1 ¬P äprHÀ «à=á@°:N½Dz‡DáNßÝÜãc]Ök•ÓjËP‡µ‡2ÞÁŠ… äðÜ—ìCT ³0 Š0Ø1ÿ;`%pÉ+€7hÓà‡ôàawÀå™3ÍÜnŽÙ^,Á5\à fà-IÀÐF ‰0Á¢ ³PFð%P>À8PÂPe ãs>÷ Þ‡š¾éÊÍæ2]æ®ìñÍæ¬1ê:pA` = D¡(sH‰`% ‘sU¯ð>€Ñj¥Vª¦æØ¡ŽÜ‹ÜæïîÏíY H€ƒðÏ20ƒ°íþuHŸ`. ‘lÌ ÿàUå¥$Òí–4íîÎãoþã– ÍÖ¢ß@ꦞ¨ÞB@ð¹ðÔ0 jH³nF`á®+°ÇThÿw Ìv£:…AJìžáÆk?_šÈ¾ë€  °a‘-u¢¬8Yv·&pÉCÐÁð ’øÜÍØ8Àè·n:@³kaÚ"`«ƒéÑðZÎîîïþéE :Â(ý=VÂÌròà:%õ0Pà ¤$°Œ]6°øŒo=p§$lþ¤E!§(%Y!ÙònìÇÎìðîéÍ>ô‘# Àª@'HŸQb2»ò|•™éÀ1 5P ™ð3à]‹n7Àê;Àt\ÔO¤V~!ŽtîÅ=ïÉîùÍô¹÷žÀÌé%u¯úà HÐÿp¯Ž‹¥dHô6P>`6ˆÿü‡7ð iJäUö kp–OŸDNòÀP ó`jõñBïüpÿ˜ŽàA„ 4¸ÐáC !Nü‡Ê»éØyBõð“§E‚ xDMa4`>€=²´c‡%vܸ±Ã† 7¾YÛ1L ¿oâ ÇìO ˆù %0~ ‡ˆ2jAŠY±jÕ*‘+D¯_†»lY…gÑT[v'PìTò´î¡¾D H5µžB~¿ø}z$ÃG 6và¸ÙØÆ2;L4úç(¾¤©›¼yrB`>¢ü»umÚÓcS£^°mê×°['$ÿ«¯Ô§¸_-z’À1¡ªRª€ZƒS»õ€Ù±e«Û¿u¦r+6l;#/,)š¹ñÆ.w,S¶Þ@|âΛ&-Py´„úT­ªaR9T†³ÙêßÏ?³ÿØÖ P@ÿLhPp»¸ZP<è#OL û«6¬ðâÃ(‰ádxigj˜D•¢‰Ìbtøàd°tøc³òL3ÎjÇOy!¦€™§? ü¿ÅŠRJ'Ÿ„rÂ>Y§؇J„Jñ$¸ H@K^˜zì! oºéb j¨a#jP)š©†és*~ÖIä;KÀÑ¥ÿ;þXÏ5‚údJ´ =Q§RŒ8"š%™¼ÒÉ)¹ê´«*?õ4ÔƒºèÁœð“Šj0݈HD¶Ã}î9êêÖ²~Èó»}ôäÊj 8UÔ)% HÄV©)à ¡fSÖî½|•G\0á…UŽ`EœnÊib&Öqˆî{4UB1Ä‹(ˆlÇ2ÎW=tŽË7ÿü¯¹öHR¨=É$4s9„M}H ‚Dtaåºzëˆ##x…x’´‚ô€e`Aà©Ì£(áY)†>¨âØœÿ•°æµÎ©¯t#ü èAaHK!;×üþ"ŠDÁyá_*þ VƒjÊläøü#+ 4˜‚À‡Åæ=»Œ5pAâŸlDXBôa6éàb½øE0†QŒc$c½x ¤ÑÇ(#9øÒE @ ¿àb^ "B©H0ŒðÆt€BGxI ˜§˜apÑ+A:~! ´ÀŒ_4‡ÉE¦¤C@GÜà…-Øb’£$e)MyJT¦R•«dåYÆÇšÖ(gõøÅÒò‘I‰É¡©‡Ò^aŽ| cøÓÿô#øPMŠb=œ±‚$#jð‚-4ÿ¥N;xaˆF $àC8H—¾s†ðŠèL'Z6ó—t4î!C"\öA #F˜Œr1 h@ÞˆbàÊ 6y ¼`…*DT°š¢;Õ B›÷ËL )$TgÅB-’´,ï̈<ïºsÙÏ~ÙúÇRd`§#ôS‚,Å, Y‚)ÆtȨpÔ£bŠsH;ñ¾…s ¬Ó‡@Äq~ĤKM);UzšWj ¥' =xYK`¨"ªX€„“ %‡)½ŒàSRÒ”`ÄÄ%1 F4n ‚8• X0ª´ñ‡>pU!¸lßµ²ÿ?`&øØÑWÁºN²¶³¤&u'STò0Š *®lÍÖf~áž$ #rÀØkƒ’”@â ÉKØ=5˜šb2¤LDމ )B KÅt\•G^µ,ZÂzMæ6×¹þ© KÃÑ „´@:­\UR•¦Ô it‰ fK“= V X°-Â Ëøc…ЍA’bˆ…hnGȨštU‡Y+j6³œ½¬XØêVUÀU fMÚT,é#6=ãH´Ñ0ü X£V GµZ: [Qj£“éLjfQ c¹Â!Wåí|;`ÿ– Àp¿ò T­ŠAÕ‚>qÂh ,I)ñ5&˜FSŒÿâ/0B €Ê‡nU@*´ ßt3SImr`„z"é!þ 7ä«”Èejº3&PÛÌæ7ke7D"(tµ¢ÁO¨b3û UÂZñìÀIbP_§ÌÃ7;À¦pÛ‰~£›#|ø‘M`8ƒuÓj»¼f7ÿ7Ô¢†3¨³ò–¸°ƒ.:Ÿ,é ŒÓf38h­% Pˆ^¨"‹¸î?SØ‚@ DPvËÛ@`¦=r…¬·9¯8›g¤&pœ£ÛÕko–"ÁÈ?6Rçg…¥reSÜó’° `œ0‚3Ö“,â– Â!þÙpˆƒÎÔôäúéN/Q ÿœVUµMmÇXÆ\á¶@¾Í¨ÔŒÛÕæNºÕíƒbÔàL1 ¼-1ï?ÔûZfê} 5×ѨQÍŸˆÀoHj+¼l2Ÿ¹Á>T³CÕý³óWÌ:K¥Áú²~É<2Ñ„úpAÿË!‚lB ÀW©Wˆ•¤Lí™Ë½&ßЕ¤Í œæáµØÇNv†×Sx=_V ™±žg#エÉ>‘'.ô… l` `ˆB'"猫)H5 {ÒHÄÃòߊü¨Jmvm#<áØÆ9*r,yˆì™ãé®§"fadˆASÊñ­'ÁŠúBå=ƒ6°)xèC0@ÿ’JJ#ú ÉóÒ.Ay×kšfÛó›Ï¼æ“ï|‚¸:è™S;ð|µ©Pƒ&2 ‘‡?ÀÍXï‹5ˆÀœèEã¥ï—¥À%*!Ö0òÁŽªB\ù˧1ôoîÿ˜ã¼€aÔ:š“Ô ‹%š¿Ð >`˜†?Øs‹+‚Bø8ÈCø„t ‰ ’hؾÅP’¾Éý;;h»¼…+;þë?Dˆ4À@@+Y¢¥ >KB½œÀ | Ô@ô@”+“躉¯ÀyN`»çÀTÁNsAËÛ¿Ÿ{5K¨¾ëó YK£hè5È?f(*óC?õc¿ÿÆÛ £/HaØ@ƒy°g¨‡yˆȇüÀš‹Ak£ÂœÂæ[Q#j8µK¦ª —˜8¿q»ðÚ»-,¨‚ñÞ»«ß²¦8/8j0@ `8žp…€‡@Ü¿*4ÄA$DDLDtˆE|<í Žü{’Kk=¼3‚ ð„]rø-Ø-9Ø­[èr8¼È«®aø33ð‚/H’H¢C}„‡Y´B–D´£ÅZ´Å¬˜’÷+B±ÅpX…A@Wxµz ¬‘ò‡ºšû g@/0ƒaø/@ƒp&³„GxWÂBÄÅÿÔÅ]´È‹d¾, —ŠÇˆ A3ñ#@R@-jÐfH3ðˆyˆÄk9×Ú Y@ œ¤ ~†qB®{®r4GãÓÈCÌEŽDJ,ÂLAâëÂx‰“LI#ô9x¦˜ƒ7).ó½v ‡#0‘›ðƹ :0ƒ@7˜tÈKAvlGÌBu”K¢=‡péP+I@:Á;$I’óÈ@9Š,X†0¢1l¿Bð„µ ‚j´a0Å0²hPËsl`±°îBÇôÌÏŒKº4Ê>ÐÒ”ah ˆ 2 ÇÈ布8ˆ9˜ª`Чxˆ€!‚ÿ…z0dA–È€¹ÏŠm‡3+‹¥HX¹· ͺ´Ëé¤N[¬.ÔS`ñ¸ `Æp @ºG¨¤ÖbŠÖº!f@DH&Eð„v(²Ö Hqˆn° Ë„µ@‰%yÎÊÃÈŠLJ¥ÌHý¿c-‘¼ e 8°X#h—P­ã IÅ…!¸™s° ¤X†² (†‰ÐÃÈZ.±h<°¥êtKÒÍë¼ÂåNˆ ÕŠ†› ‡aØzœj´E8Nõ¤ ›û`["¸zp@@ƒ|pfˆ—‹©`"ü˜ËtüQÿ Ý¢VjS7}S1:Î^HMؾ› — ‚C¨/g@:†tØÐU0‚»P€°„a £tð…—è"—0£npƒ>è"=ÐUr•8R—`T8ýTP UQ #ÌQŠ4µ»ROè¸SÑC¦ º¡ÖÒ0ëK±ÉP˜ Ìt‡{€¬<à“h(Pˆp*ÂÍÄ”eP­Vk=Ðk¥6»:ÐpɉpGhÖK£`†o ¸‰øÞð„J-q؆ µÈKP…`TˆþôÏ; Efu~ ¿x}N¬ÃÖiÝÈe؆=JjÛÒÿ@»›(aQcð®ÅБ?Ç(K@] ¸hè8°  5 ­'H¤ åü”«4®'ƒ(S­)@¡Öˆ]ÇåQåÙ8ÛV :¡é€ xƒñ‰R†Yq`Œ"†›–"˜ƒ{¸‡@€1P„Rhu  u¹2ÕŠ¥ð‰tHÛ‚”q“X¸õÙ …XºuØä#¸‘PŽ×ìX0617Ëป‡Œ°‰“ËeÐ `¤ ²AXZЏý¤”¨Žòº0†3ÕN½´Î‡[¹[»­Û‚Ã[Prò*7ø° :h­› Š@µ#ã8jè \û¼ÿ0‘%\œŠh±Åã ìŒÐX-Ñ0Í4ýÙç…^¸Íé5”ÃyQKèzd]—X’¦]ÙPŪµ¨¸º”€ƒ@‡™ƒV IÛâ:ˆz0‚¸´$ »…˜‡a1¥àCÁ »†¨ÀKx\S5ÝÐ-]Ó]Ÿƒ–óð ýeŠW ø‹¥µ b½ÅÀ €ǰÝît‰b€,9¸Àg8„ÕŒ xÙ–s°YŠ> :ˆ˜lË2Ÿ¾‹ºa )ÞÕ:ÍR•^]à¢4âÌ< Ó$‹žÐ!ØÈ6ƒåòàÆÀ‘Δó]zP†WŒu€ÿFˆçä¦X²¿ –bˆŠË h(†yyˆE´;"ÖQÒ…àž] ÍÖêᥠëÌÎA`X†7::ß—¸‰ž Ú€œÊ\RÛUŘÕú]Ê%I; KâÃÆ[6Ö;Ó6æE ºLÉÀÎàdBv`¡Ý剸ÀÊ=Ÿ·?HËyМm¥%E–ó¥]ƒ.Mðáü`™  á â›%"ì·”à;ï\¹¾Š=î>êä²G¹å[ücAnç\æE¦´Q˜´ãÔÌdÈ"fcžfJ挛è¸f¦Úΰ6y‘²fú<ˆI‡Qc}ŠbHÿÜ2Y¶ä«PgÜ !F‰>f’ú£cÔåw®^ÐYjéTn‘ÖjäNn’f® ;^…¨;îíL`‚Ðíôäm‡xJ·Oà‡§n «Åmae¦(}ã$Iìy†<UÊÀž7®úÜå®oS=Õø†ï…P=5ã´þ>nÝ.²â5ì…ØÞèˆg—Þæk«Þ ‘C‚+g ñHÎøÈ³ ·¯Ø³ÏBÓù¦o?é%Pê.êƒè *m눜›‹þáî1ákìe RøQh-tÐ^¨Uÿ…¨j¶e¼Ê}®-D«ãæå—l8—sù N}‰ëB!ÕÊív 7n8ðض' gŠù¬'uPï !Îï:q@{‰É¸\6–ÎÇA>y.^ Ão%Or4“Vænî­fò‡(XÆPŒL¹s¨Vmr@¸Ðë¸Êíâ¥>»Ðv¹'N|E΋r­Æ@N»:ÍÑo^oFñ¡LboòM‡l¯†ÖêëàÈy k€âY–¶…¸òU -šâ¶1‰2¶„˜éž0˜g®©z`Vú:3 âÔÇ®ó%Æ&w'÷Põ|ö‡€ñ>JÑ# Ýv]3euØ‘póš O¨*w‰ÿ¹ É"Kßâe×2‰”ÐngG­+^‚“AcOíþ­xN‡X—ûøzçj§w„ðwÖòß…Éž8y^—AVx"`…y'U€ à [÷pµåTR下¿!ƒñ}w¼_O…Ðhâh‡Àè7OvB¤yfç÷¥õ…ˆv˜§ö%Nl7 mÏï³ÂQˆÙîW¯›aClïrÏB$tßùHL™§Oˆ6GûƒPÌóÞøi-û­çú”×c?™w¡$uK>õ@smô§Ïæ¦Lo‡uè6ûUÏTR„5zÝ4ÅDUW£½À»zlŽÃtÿv ¾{è[ö’Ÿs¿ÑÇWàÔ¸´ÿ§ÆsI|šT£š7jxªüü¥úQû« N¶–fOþõttÞivêµìˆh·»—;¡´z5¶ô¬ñÂ÷‘¢û$vòÅ„òƒ |„èû´Z󮿉 ^>d(”À‰`¹ §ÀÿÐ|ÇußP½`ÿ,H0Á„ÿ€íðAmØŽü Ò6¬^½aÀ~)ìèÑ#Â"G†i2aÉ“*SŠ„8oà¼Ã@ª< Là¿tÑ€ÕëXX4‚7?R»éµCîì)2Æ›6lÜd¸cžAÿE³q•$Á¢NR«çãèÍ8ŸŽdXµ¡Ó°<þœY³&Ë»Óñíë÷/àÀ‚.lÿØ0Ã^|{©=ì1°¾Ã|˜lÎǰ¾7 ÿ6ìWáÍ|'W>ìl˜³ˆžùØñk‡Ì¯§}<tº_˜/;Í:òcÂÀ|ø^Z²ܺ3oî|°Â¼ziN{’ZÃyXw$í(½:S õzYü¨q^½ÒL~/¸3Z½yå­t;/ZÄ~]µf­þcI]”0ôüs^z@±7Ò{ñÍW€iÄxlUhá…Þe¨¡JE$€ÄOTGÅ¥ÐOUÙEŸG$V5—AüPÍK2óÒ@ü´ö¡vøM5R ùÐÑ}ÎL45gÕ]Š7 s$?;sâ@íäbUT"ù"5VŽÿ$#y$’žuw¡—¦YÝš=4Ì™ŠHИ_Έã‚&ÝG ™5ùâQ+reÑQǰú\%+Ý¡† | 1Žå«$ýÚRb²–üL… ÔZ[ÖÒÕdf ^ЦºP†Y`Ëhº‚,‚ÿ˜àB*hƒ fpƒîªOdä2–ª… ›Ê‘N(@Àk…k¡‚˜@‹5ôbª>b=µXk9Ï/ÞÄf]M?65Êw ¢ï=²H²èшȯ‰YAJ1Þ˜?‘4H>ýÛâ]¼†HêÅ‘3¤!šD2º©”xœ2ŠEx·#.Q8™íl·¥Ñ;òÁDìñ:àé!ÿú–ÿnB¼y TÆSѦXÒ©O}±‘ôå/‰¢hvºÑ®ŒIhœe+9ºSåf8euj2*"3+WŒËaîC‡¤“ã´7Ê›t©B’‚Þ8_©¦Brí„Ø;ï²?mm€G3 ·¨Ñ ³UHjbç@ü©,6˜"Bà"ÏšœÌŠ tæ ϸƒ†¥£dú`] ŠQut¡›f ÚË 5”šY¬ÙH\’“œ]TeŠáFÏv„¢Œ‘ôèLqj°½tŽèQ#>³Ãîô¢ô:KqÙÔ"iHAŠ¢ZŠÄr!.;t¨‡§(U)çGö4ªBÎM\ £N™*ÿU¨*´©é”©˜j'ÎsÖ$I!\†viËŽXNuŘŸÈzS·vô©h5¬S=¢T‰e(B¹êa‘»6K#K­iZÕÌÍr¶­ˆÝ–KášÐ®Î%+묽ʓÓ^q­‘Eíka;X×ni‰¢Åì†úeÚ¿ÆaªÅoÑIØÂÒž™elT«gTË"·¨yìeÁå‘÷P6oÑÕq›ËÖírw¶²•ËWËê*¯ÒËU6²dŽJä×HAÓý,q¿›XùÆ×#zÕ솪I5¥(P«`ÿ¤3šâ¶¸õõ,|¥;\'¸CÍê^×칞øÀÝ/}\a gø$=D©‡OúÂçÿ=§Ä&>1ŠS¬â³¸Å.~ñ`.Ütˆæ12Ö p`,Ü çtÁíp}Ü*W¡¨5Q$…dYÈøE0“Ÿ<MÉ “”»‹€sÉ3*Yʽ…rrÃ,æ /kx 9/xè:Z0ùËn~3†Ù,g8'd†]—›Üà%çY¼{Ös”ýlB–Ëm&³qÿìe:[˜Ñön —Yhc×É‹Ž3¢iGsøÐ )dO§èKoÒsæ4Ÿ=]êUŸ9*²Ä³ªYèQ³°Ïµ>µ©3×ÇÁ×¹Öuª}=k[·6Ö¶¦j@ûØÀfv³ƒýlhG[ÚË&õ°«ídsÛÿÙÓ¦ö·µ{ímÿXÛä¶¶²Ó­îl#»Üæ÷º»íîpÃ{Ü‚&6`}ïw×›Ýô¾5¿no¼Øÿ6xÁóMë~û;á1Ó7ýíð^OœâWxÀ1žñ‡ã[ã·x¼å=×Ò9É×r”§\å²–øÊÁs™¿œå5‡ùÍiÞð–‹zã÷ùŽ;îñ½Ý6¹Îwžós£›ç=7zÒ‘Îô©SýäM_zÔq.õ}½ä GøÌ¹õ«+½ì[»Ó =v´‡íiW{Ú) ÷¶œî`ǺÛí~w³kýìuç{ßxÁûýï…zܳkøÁgðŒo<ä«nõÈçðdÿ¼äQãÍs¾óžÿ<èC/úѦèkŸ|æ÷~øŸwÝå–¿üêYOt¯]öo§4îß qÔWó½w<åûá¿ø©·½Þ÷ÅûžùÆ>ðƒï|éOÿø _¾ê›_}êg?úÐç>ò±ßýçoÿûàÿë­ýØ›~ö®gûÝÿ~í+_üè‡?í[ŸäÓ›¿ÿåÿ?ÖþÍŸ÷ñžÿ Žßù­ýÝß>üíÿ ` `V ù)à2`ÆŸýi` ràš ú`ú –` º ¦`þ nà Ú` ²`^àòà Ž &_¢ áê` Âÿ .a!Þžâ!6¡ aR¡ªà fá N`bávaV jáŠáÛÍš¡‚!¾!2!¶¡ÆaÊá:!–! êáòaVá&žÉqa N!Ba!Úá6búaîE!#>""Zá&â¢%>à *âîM"&r¢^â!jâ&fb–b*ª"(žâ²¢š¢+Ò!,âa(¾â,â #Þ".Ö¢-æ¢ v"*Æâ* £(Ž")ú"%ÊâŽ!2Šb$.b1c/6£3Fã'£6n#A‚7~#8†£8Ž#9–£9ž#:¦£:®#;¶£;¾#<Æ£<Îÿ#=Ö£=º£BÏèã¸ð£¬øã?– @ºÊ@¤@$B&d@ö£BÂJAŠÈCnHDJdCÎÉDfÈEbä>V$Dn$C~$H:$Gv¤G†¤AšäI.¤J®dJŠäHŠÈ8ðLLŽËLÊJMÚd¹Ü¤«èäNæ¤Oþä–¥P%Q¥Q%R&¥R.%S6¥S>%TFå?t€! „! äƒóÀ@`‚V U@'üC>À\å…ŒeYþCVne…t&T ZÎå?€%\êE>ø#\ŽÃeuäå@@H eFz„\ÄY ?â%Wê%_úå@¦`ÎT_zå]jed"ÿætB`"`:æWræG€æ”&¨¥Y€!tÈeXæ†@´&&ÂmVH>ÀjÀ?øå8Ä&oú¦!@>`ÂlfuœeðãsÂf: g'ÀnÖ„!€ælöå?¸æqF¦JŒ g7@Löå8kž„sò£_¦C`uZ§^dçvþƒzR&xšgM¬g€Æ¦}ª'{Þ…n’çm€ ¬§!Ôçu&D‚ÚgN€fæD~hÎeofا!hfPŒ låtvè?”¨šçw¦Ãp(‹ê¥uê£|f‰j¦ªhæçÄdovB~ @[ªDuúçzÎÿæwr%XÞÅ{¶f>ðÅYâ¨xžÄŽÄè#hé@é]ì&^J©y.iM€]@êç‡JiGé@˜'€^(A`z"i’ÆeäÃmj¨•ét”g€œ)U^ÈŸÀmÒiŽê…žj©[Öå@Œ¨^0*c €Uj&´§JøçrŽŠžé]èi:€¡šé‹>ª´0*lþi'„hab*ä°g©þÃl²¨§~êuRg¬BêG(TgAäƒ@YÒi„NGlg:èé?ôh… e›*ç@ø*xÀæ8P'±6«>2jˆæê”ž„¤§W²ª~Úå]˜'Z¦ƒ`B§æç§Ò¨¹:ª¬vÿ«I0*€:§¸²é§ºæ²Úå¬V »ª„œWæÃøæ¾>ª¼Æ),²fedö¦?–j¨^H` €…Š«®¦ˆgaÂé}Z*XÎåÄ‚¨îfZ*kŒÖ£êfH0*—ê…y¢¦¡"ëfö©»ÄòcÊi~š'žº,Ÿš„¬¶io"„˜,Êê…¢¬G(çLZ柪%l¦é8tÂsè†àik–h±êÅp†èmRª ˜i…„íq^mÖzl»>ª†"çp ÂÐN½ú¥žZ(…Âì”2«ugО„²¨œvBÜÎm¤©Î-Þ~­HôfšÒ'ƒÎmßgM À›hšnäÿ€GXnš„´þÃ8€#Ò*놨%y&x¤ngöj†Tg€~¥éVá2æ‡Î$첉]‚ãU&«aVÇ@ª+Îâk¤Îd”¶eî‚ ¹–(?ú.«ìå7–eò¦(ñª„!.8Æäô*Äõ~ãAü­T†¯øŽ/ù–¯ùž/ú¦¯ú®/û¶¯û¾/üƯüÎ/ýÖ¯ýÞ/þæ¯þî/ÿö¯ÿþ/ðZþn£ °0DÚZéÎ&°?0/𲲨ÜZe«’ic^&jJ讀fŠRêUV'_°©žf¥Äö*ÑB° ¯p…§VZ'púéŸz¥¨F®…þéYŽ*zç¨æ©¡Î0lBÀ:nÙÚÿfl¦¨&, /1so ×ðwîæŸF1BÌ0&¨«¨¦ƒœ^ªÁìpJ1râ­¨Z+zÂ&YZh§±;ñL¬ã2ðwrî]Öðˆ>ñÅš§ß¢ñ§m–myâé )å®1!§±l·)pêñ¥º¨oªYèqΥņênŠjŠfñŸnçŸe'Pk!‡22p–m _¥oòŸ&«‹êmš²¨ö.&ìU¾²o‚²(ï2ndæ¦ìâ« ´e”Æî]Þ®[úæ‡Æé‡.o BdÂnY¦4ó²5_³H„'6o37Ë &€w³839—³9Ÿ3:§³:¯3;·³;¿ÿ3<dz<Ï3=׳=ß3>ç³>ï3?÷³?ÿ3@´@4A´A4B'´B/4C7´C?4DG´DO4EW´E_4Fƒém4Gw´G4H‡´aI—´IŸ4J§´J¯4K·´K«ô:p£2c+>£"MmÍKï4O÷´O·tLÿ¢MWaNgã2 µNÿ´R/5S§tPï"5aQ×/VâP{DSgµVûôS5RSõLG5Qõ?lµYŸ5LË4M·âTâUcR£µ\ŸuWWµUã4Y‡µ5>`\ϵ_7u]ëõ[¯b[ëß`«µXcõ_/öRöZ#ö^÷ba{¡]û c_6WCÿöaCödG ^S5f‡öK;vb›âg»ug¯ác„h·öJ“vdK6X¯6TǶ.ú¢kçöIÃöf5jç5mWvê6qo§¶jÛöm·pkv_·h7p—vM#w2ZwM@wnK÷lS·sO·r âsk÷es÷oŸ7zSvsy·¶yöiÃ7xc·J´wtww÷vmë·W÷·¯÷/Ò·l§·zëµ€Óbxß5xó·`ør'¸R„O8…W¸…_8†g¸†o8‡w8…3ƒ7x~‡8s8Y{8Ч¸Š¯8Šƒ¸ƒKõ‚¿¸‚g‹×¸ßx‡»xŒ¸ŒWbw޹ãÿ¸Žó¸‘¹|Óø/9“ç8‰{7gïx~ÿ¸B4¹•_y…9ó•³õ‰c9˜7¹–'9™—¹goH˜§ùy—8”û6 v¹A¨9ß8›Ÿù–s9’WH÷ùŠß¹žçyrC8\£¹Ÿº“Ëy€Kyœ9¢?:†ú ?9¥Wº¢ÿ·/Bº¦[¸¤'#¥_:¦»9¡ᦗº„wú0†ú¨W÷|;º©C:ªóõž·ù›«úªÏù«kz¬¸™ãy¯OG®ëº¥·ú¬Ë¨ÿC°Ãú°O9£ëß±‹¸ {z|Óú­/z±·Ü³‹zµÛú²7:U# ¸‡»¸;¹—»¹Ÿ;º§»º¯;»·ÿ»»¿;¼Ç»¼Ï;½×»» AØ»¾ï;¿÷»¿ÿ;À¼Àü¹ãû@<Â'¼Â/<Ã7¼Ãû»ÁÿÃÃO<ÅW¼Å_<ÆÃ{Äg<Çw¼Ç<È÷ûƇ<É—¼ÉŸ<È<ʯ<Ë·¼ËC|A¼¼ÌÏ<Í×<¹«¼Íç¼Îï|Èã<Ïÿ<ÐýÂû¼Ð½Ñ=½=Ò/=Ó7ý¸+½ÓG½Ô=ÔO½Õ_½ÍW=Öo=×£¼Öw=؇=ǽؗ½Ù7<ÙŸ½Ú¯=ÀG<´ÿú¤O»¯;;YߣÝß=Þç½Þï=ß÷½ßÿ};DbêÅà×Dá>KRdK’äâ+¾E&¾FºäãKþä7þ…ÿ¾ŽBþåS>ãW¾ç;þçƒ~ç‹>éG¾åWæS©æ£>ç—þæ·þëŸ>ëÃþìËþêâdO OfÈî_Hïß¾îã~îÏÉïF?ò'?þf&WZ&øª¬fB&ÄT¥Z¢%Ûbghæ•V‡+„gn&lÔV%?¾e8¯é”º®~nÿ§Æi`Æd²ÆªJì¥íjeeæówj"DüÛ¥ôÄ? ÌG@|ÿ0 €I  V,8n€A ¤ûwp€!‹ÿ9ôxPã?Æ!üÀ! GÖ˜€€ãtZihA<Ç b€"БXþD8.€H¥&}ÿ'&£SñåШ˜X:亓À̘¾ªUêTL$ºUh'¹  óßD¨aʤ©Ôh˺y÷òôY—kÆq Ó}•™.1Ò³ÄJ`Ü¿„Ž+&þI9@ÃÐ8;ÐélÅ„: $UÛn€|éÒåc¹2î†ü«üraCám'™4_¥éVBôQ¢ug}Þö-¢Zå}ª4Ô{\:È6r- 8ìÚ­¾æJ,èõ‚j ¼­T7à|ª©Ð âê:•(‚Š%œâ¯"üü«l·Þº@C¬Š 7âÒÑé!¢î½@7µ$§Ph;ã‚‹MÃÿbT=€í¬rì7äb»->üVT/6$;ñEú†KŠ+'?s1ÍÃm%'5ôqij|ƒÒ0c<‹´²Òƒ¬“âFZ©2&=’‰"+%§q˜Ê‡ËÃbcª¾ÏJp¹è.»°):2¡ö­G°ðl+ȧRKÒ@ãŒ+t*%'²q.¬Œ¾L’,¹ -³QO >KŠÁÐT”Ô¦G!’èCL,J‚Øb•BâËIû„»4£s|‰Äcï·_… Ö½RÓÐ ·µ²ËÈÀÒLGˆ4Ýl!â@Q/ÆãÊS©ôÓ‘C¥èC4Y•"‹ÑxŸS©ë•hª,®jq­‰\’:‘'ì*âW Mùû«6Âj;8Ixª”[á^¼Ì¯£5 “´TŠª'åD¹œ&Æ-Džj# ¦ªÂí?•ve9I4¿r )?÷„ï!ÍœÅØ¢ugþ'è™6 c V­Íªj«2ª¨¸’y¾M#m Rº?¤ØêD´‰ºŽ¢½ ,Ÿ‚¥³6F5¬×P…œS8;⬖ôŽ 0S;´’Û‹mq:á pÜò‰«ä¤"€Ñ³Òq”ꈯ>«jµ?ªÛñþÎR[LÐV;]ð®éð´3Ç„¦®+ =íÑiþ' !ù,i^ƒ777¥¥¥ªªª···¹¹¹ÅÅÅÌÌÌÕÕÕÜÜÜãããëëëôôôþþþ†0µI«•6SÌëZƒ)Óf#©¥ÀºW‚ 7’ü@"§›DBb±uJ uPãÄ©Œ2‘Œ'Ôj¢w•…7!N²Ò;B¡ò`ƒ†y°pÁ 2 S > z $H&>S“ ˆ”‡4›!ù,k`ƒ777¥¥¥ªªª···¹¹¹ÅÅÅÌÌÌÕÕÕÛÛÛãããëëëôôôþþþ}°ÉI«eak•\'1I4 —¬HÑ'‚¬t9"/Œ†ƒÀSêòê†_Î(äeŠÆ#Oeî&T˜Ž²Àþ‰`pÝ›©QÖŠI"˜Æ d¦D00 i 3 w = 3 "(„"ƒˆz•!ù,naƒ777¥¥¥ªªª···»»»ÅÅÅÌÌÌÖÖÖÛÛÛãããëëëôôôýýýw°ÉI«daK•\›• E4’¬l’¹À r Òq3WõË¡‹ ÷Ó{Äâ.3LævHç ä( æ-°"Û;s„‚êj&À`u †Ä ÆÈN* q }5m ‡ ~4 ‚KA!ù,obƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÖÖÖÛÛÛãããëëëôôôþþþ€°ÉI«½Ø¦Í»ÿÓ0bv)ÒRš“4A£²í Ä3Í p˫̮çÃ/C_hJ*9$﹌VœT£”øQÛ[¢;8°e3ÿ ÅQâ’0À`a¥Ô  7 j  y (B*$Š‹4 ‡: Œ}:A!ù,veƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÖÖÖÛÛÛãããëëëôôôþþþy°ÉI«½³Æv®Š´x—4A3–f¤ëÇ î«’×\ÛqN@Ž¢ aCIÑ(´,™ÈÊ2`£,¤¿@‚:8ˆ+‘–òÚ Åqj(À`Ñ›°ƒ!1x1Ä  q !9#ƒ„,*€2 …u%!ù,{gƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÖÖÖÛÛÛãããëëëôôôýýýn°ÉI+kìVªäÒ“4AómØ”§…4Àj‚óÆr[ß8 Ú0\NÆ|žÑW\É(Ÿ[  "Jj`e„"3j$ëâ$j †Ä`ÅXLˆ„BaH7:5yz(&v(u{:Ž4!ù,{hƒ777¥¥¥ªªª···¸¸¸ÅÅÅÍÍÍÖÖÖÛÛÛãããëëëôôôþþþ°ÉIkª˜^ÉëÙÖ(ÒZÜ4&¶1°¶‡4€ÌžÍ{ç:ZφÎ@¾¢q7ôü€¹cº\ܜŀŽr ÊÚÁA@@t±«±Î€P\aÁ ^˜^‚ÁÈ M# t#‚€ „…‚ "€†-› !ù,}jƒ777¤¤¤©©©···¹¹¹ÅÅÅÌÌÌÕÕÕÜÜÜãããëëëôôôþþþ°ÉIgª8Ë«ûöfâÈ4ÌY‚Š´0k7A³ £45rš8Ïöó0‚ÂÚ tl“D#ò©,bšOj4ƒÍB—Wd`HYpƒÄxpæ0­Ñ ëdÖ h `W< q  c -2/)’9Ž#p“` «¬­®‘¬!ù,„oƒ777“““¥¥¥¨¨¨···ºººÄÄÄËËËÔÔÔÛÛÛâââìììôôôþþþ‰ðɹ¦½¸âm5çÞ—‰ ¹)ã˜"5«éOðÀ2 ظ8?€Ý-Æù…½ñÈ#^–Ì¡Rw 61ÐêÕ² -§.°ðƒ"Ì¥ÙÐB„‚áXØí ÚC0¨ !). ;l‚ .^ k*ƒ‘%  Ž!’I§XN!ù,‰uƒ777¥¥¥ªªª···¹¹¹ÅÅÅÌÌÌÕÕÕÜÜÜãããëëëôôôþþþ˜°¥F«½ë:·îÞ†)šÖhªdÇ4Ìëu µÈ<ͽMŒ €ç%ˆB0l Çh†X2‰8 °Ê¼ö²[k[¢ŠÇ_-ŒÛEûÂצe1åÀà èa<|M /@ y E‰  C tj P %071PZ5œ ›š Eµ1!ù,Œ~ƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÖÖÖÜÜÜãããëëëôôôþþþ°ÉI«½8ë­“ÿ`r$Ó0&Ù(Ò’nLÒËÅ @ÛƒäºÚëâyÄ`yRŠÌåÎ)F›ëuZ±‚”EWH|!~þhé ¡pâ‚Á 0X '8 : m  {+ˆ(>2 $ ‰= Ž0C!ù,‘„ƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÖÖÖÛÛÛãããëëëôôôþþþ{°ÉI«½8ëÍ»ÿLÄž"-äÆ$MРÜÚ.¬1ÈL¿é…ë;›/({”Ÿ±XCJ”Ë£mV eq%ÙÁA@@p“9×xg@(²†`Ð ‰Œ`0$4 g  u &>(#†‡ ƒ7 ˆy*=!ù,–Šƒ777ŸŸŸ¥¥¥ªªª···¹¹¹ÄÄÄËËËÖÖÖÜÜÜãããëëëôôôþþþ ÐÉI«uêê=3ÿ•Žâø•憦×j6NKî¸HÌ\M89 kÒs~¹§‘0Ía¬ ¨þ3Óif_Ôj7˜ÚŠÅÈ//|~’Aæã“Š`€u#[?}O jEz op G Ÿ ¡¡ ˜z‡J2L 7R µ1  ”½X!ù,¤‘ƒ777ŽŽŽŸŸŸ¥¥¥«««¶¶¶¹¹¹ÄÄÄÌÌÌÖÖÖÛÛÛãããëëëôôôþþþ…ðÉ)½¸æ­y¶Þä<ŽNŒ¤Œ¡cOÃrîÀ²WÚw'†Èõ‘ZkÛ sÏÞò¶W´,ÔÃ@"Ä{R½Ý‹ G; t ?|5  = { R ‰š#—+Z /!0˜|—²+!ù,­›ƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÖÖÖÜÜÜãããëëëôôôþþþƒ°ÉI«½8ëÍ;M`(Ž¢gšLäž"-ìÆ$MÐÀÜÜ6®1ˆï»…CŸ1h&‹”£³ÙƒJ¤Ó§›­V°!eñeáÁA@@£AÛzh@( º†`P J: < o  } .F0+Ž ‹? 2E!ù,²£)ƒ777¥¥¥ªªª···¹¹¹ÅÅÅÌÌÌÕÕÕÛÛÛãããëëëôôôþþþ•°ÉI«½8ëÍ»ÿ`(Ždižhª®lë¾#Ó0ò¨HK 2I4¹¯ø? ±Ôq’KæQ’¨Z¯ˆB”‰@X5P€XltbÂcrsƒNKÍt€IY€•ÅÄ|pvP?}L pC > Sg= E  ^  7O94^T§ žH ¢”;N!ù,¼¸7„777¥¥¥ªªª···¸¸¸íŠŠî“’ò«¬ó¯°ÅÅÅÌÌÌÖÖÖÜÜÜöÁÁùÚÚãããëëëôôôýóôþþþî %Žd)6fª¦èêªí+ñ,×¶‹›Mïÿ@_n¶òŒ¯"’¶\)›Ïe95V‡×\Ö¶%6a_Vø8&uoeó á˜p_ÃÁv=†„Wßà ~*wy)qs…<uig.’0A— "•_(a ¢¤M §¨£žF¬®¯ª²­¹µ±6³º¹©¼2¾¿»CÄÅÁ9į$˸ Í  н­¢×¯ Â+¦Õ¶3¦ ¨ÛC ›ÍHX@‰U‹}RFDX@ À‚{XFØã×NK J$B!ù,ËÛ8ƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÖÖÖÜÜÜãããëëëôôôþþþذµ$«½8§»¿Ô'jci…f‰¦âÊzîKÊ_LŸ7œwöÞç¿[6”_GV2µ45U»Y7¥V%ÏQ¶u­lkÝÍW×”Íå1ÏÄh0Úà’B²€¯G J Q'‹ò {}R ‚|vV†ˆƒŒX%‡‰‘‹ •˜„”xœŠŸG–£’ œŠ «Ž ®±h¬ {¹Š p¦!À ¥• ‚ ½²  Ì s^luoÞXåÛ& Ú¾,ÙàŸõ/o!ù,Ûÿ&ƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÖÖÖÛÛÛãããëëëôôôþþþްÉI«½8ëÍ»ÿ`(Ždižhª®lë¾°Æ4ÌŒ*Òb—LÒ ©×…$¢h îBJf ]®Ó§'нµn7 ¿q IY¤­ÄzpîíXo `D ? TD F y  ˆ 8P:5™š' –I ›Œ(#‚ ~* ƒB1=!ù,é"ƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÖÖÖÛÛÛãããëëëôôôþþþz°ÉI«½8ëÍ»ÿàÇ4̨)Òb^LÒе ˃Ôv¼N:^ÜŽÃ_y¼­–̤u’Œ¶eq­Àà ¸A¹g@(F´†`ð/p4‚ÁØ\  u (@*%„… , †D3? !ù,è, ƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÖÖÖÛÛÛãããëëëôôôþþþ|°ÉI«½8ëÍ»ÿ`(jLÔš"-èÅ$MаØÛ2m1ÈÏ­ Ï÷Ó {€d18T&s­¦s)‘N¡&$îGYdoD08ïPfþŠ’­!ÄÈ `0$8 ^  w *B,'†‡ ƒ. ˆF5A !ù,æ8%ƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÖÖÖÛÛÛãããëëëôôôþþþ‚°ÉI«½8ëÍ»ÿ`(Ždi’Lä›"-,Æ$MÐÀÙÜ6~1ˆï£…CŸ1h&‹*¦ó¹D:{±ãôJ”hyCÊÂË $€ÁA@@Œ£µÆzh@(Xº†`PK/”: < o  } .F0+Œ ‰? ŽJ9P !ù,æI%ƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÖÖÖÛÛÛãããëëëôôôþþþ„°ÉI«½8ëÍ»ÿ`(ŽdižèÆ4ÌÚ)ÒâjLÒ¬Ú®g DÐËÍ,Á!Ñw¤$‰Kãå -þœÂjô*¡j™Xe HY„{‰ñà Ì“$Ž]4 ÇšD0¸ \,6 = p  ~ 0H2- Œ@ ‘‚@G!ù,êZƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÖÖÖÛÛÛãããëëëôôôþþþ°ÉI«½8ëÍ»ÿ`(ZLÔž"-èÆ$MаÜÛ2­1ÈÏ­ Ï÷Ó {€d1H*“9¦Äù\’UkøQg Ñxkœ„‚ik1À`aœØ 8 k  y *B,'Š‹ ‡; Œ}.A!ù,ïcƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÖÖÖÛÛÛãããëëëôôôþþþ°ÉI«½8ëÍ»ÿ`(Ž Sšœ"-hÆ$MаÚÛ21ÈÏ­ Ï÷Ó {€d1(*“9¦ó¹¤L©ÑÉ4ð£,´È@‚;8ˆo³'3ÿ EËÖ b€ÁÂX‚  8 j  x *B, <0 Š †; ‹|.A!ù,ðn)ƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÖÖÖÛÛÛãããëëëôôôþþþ…°ÉI«½8ëÍ»ÿ`(ŽdižhÊ1 ÃnŠ´¼“4A3gvä» áûéh”aÑLP&²õŒJË(¦´j’îÏHY„ŸD083×p Å«× pl M= ? r  € 1I3. ŒB ‘M€Ò(¬—J]sò„2/U«ÔR ) n2ð"ìôÍÐ@B1½5`°8Rn 9 l  z +C-(‹Œ ˆ< ~/B!ù,õ¦&ƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÖÖÖÛÛÛãããëëëôôôþþþ€°ÉI«½8ëÍ»ÿ`(ŽdiŠLäš"-ìÅ$MÐÀØÜ6n1ˆï›…CŸ1h&‹Gg³‹JŸ땪bò†”EwHƒƒ€€mê¡¡Hé‚A ½ðé < b  { .F0+Š‹ ‡2 ŒJ9E !ù,õ¸ƒ777¥¥¥ªªª···¸¸¸ÅÅÅÌÌÌÖÖÖÛÛÛäääìììôôôþþþq°ÉI«½8ëÍ»ÿÓ0¢¦HKy1I4)Æ6À[ B×°:å;Þí§…>àÑhS)—ÈP}x”ŨH\¡¾Â<B!š5`°¸ÍCbPch'  r '?)$‚ƒ !ù,öÀ‚777×××ÚÚÚæææíííõõõþþþ#xºÜþ0ÊI«½8ëÍ9Æ7J!BÆp‡¥Àº!Ärk$!ùt,ýÍ €ÿÿÿ„©Ë];altair-4.1.0/paper/000077500000000000000000000000001364111050100140675ustar00rootroot00000000000000altair-4.1.0/paper/paper.bib000066400000000000000000000051741364111050100156630ustar00rootroot00000000000000@article{2011-d3, title = {D3: Data-Driven Documents}, author = {Bostock, Michael and Ogievetsky, Vadim and Heer, Jeffrey}, journal = {IEEE Trans. Visualization \& Comp. Graphics (Proc. InfoVis)}, year = {2011}, url = {http://idl.cs.washington.edu/papers/d3}, doi = {10.1109/TVCG.2011.185}, } @article{2017-vega-lite, title = {Vega-Lite: A Grammar of Interactive Graphics}, author = {Satyanarayan, Arvind and Moritz, Dominik and Wongsuphasawat, Kanit and Heer, Jeffrey}, journal = {IEEE Trans. Visualization \& Comp. Graphics (Proc. InfoVis)}, year = {2017}, url = {http://idl.cs.washington.edu/papers/vega-lite}, doi = {10.1109/TVCG.2016.2599030}, } @inproceedings{2017-voyager2, title = {Voyager 2: Augmenting Visual Analysis with Partial View Specifications}, author = {Wongsuphasawat, Kanit and Qu, Zening and Moritz, Dominik and Chang, Riley and Ouk, Felix and Anand, Anushka and Mackinlay, Jock and Howe, Bill and Heer, Jeffrey}, booktitle = {Proceedings of the 2017 {CHI Conference on Human Factors in Computing Systems}}, series = {CHI '17}, year = {2017}, isbn = {978-1-4503-4655-9}, location = {Denver, Colorado, USA}, pages = {2648--2659}, numpages = {12}, url = {http://idl.cs.washington.edu/papers/voyager2}, doi = {10.1145/3025453.3025768}, acmid = {3025768}, publisher = {ACM}, address = {New York, NY, USA}, } @article{2016-voyager, title = {Voyager: Exploratory Analysis via Faceted Browsing of Visualization Recommendations}, author = {Wongsuphasawat, Kanit and Moritz, Dominik and Anand, Anushka and Mackinlay, Jock and Howe, Bill and Heer, Jeffrey}, journal = {IEEE Trans. Visualization \& Comp. Graphics (Proc. InfoVis)}, year = {2016}, url = {http://idl.cs.washington.edu/papers/voyager}, doi = {10.1109/TVCG.2015.2467191}, } @article{2016-reactive-vega-architecture, title = {Reactive {Vega}: A Streaming Dataflow Architecture for Declarative Interactive Visualization}, author = {Satyanarayan, Arvind and Russell, Ryan and Hoffswell, Jane and Heer, Jeffrey}, journal = {IEEE Trans. Visualization \& Comp. Graphics (Proc. InfoVis)}, year = {2016}, url = {http://idl.cs.washington.edu/papers/reactive-vega-architecture}, doi = {10.1109/TVCG.2015.2467091}, } @book{1977-exploratory, title={Exploratory data analysis}, author={Tukey, John W}, volume={2}, year={1977}, publisher={Reading, Mass.}, doi = {10.1002/bimj.4710230408 }, } @book{2005-grammar, author = {Wilkinson, Leland}, title = {The Grammar of Graphics}, series = {Statistics and Computing}, year = {2005}, isbn = {0387245448}, publisher = {Springer-Verlag New York, Inc.}, address = {Secaucus, NJ, USA}, doi = {10.1007/0-387-28695-0}, } altair-4.1.0/paper/paper.md000066400000000000000000000115411364111050100155220ustar00rootroot00000000000000--- title: 'Altair: Interactive Statistical Visualizations for Python' tags: - Python - visualization - statistics - Jupyter authors: - name: Jacob VanderPlas orcid: 0000-0002-9623-3401 affiliation: 1 - name: Brian E. Granger orcid: 0000-0002-5223-6168 affiliation: 2 - name: Jeffrey Heer orcid: 0000-0002-6175-1655 affiliation: 1 - name: Dominik Moritz orcid: 0000-0002-3110-1053 affiliation: 1 - name: Kanit Wongsuphasawat orcid: 0000-0001-7231-279X affiliation: 1 - name: Arvind Satyanarayan orcid: 0000-0001-5564-635X affiliation: 3 - name: Eitan Lees orcid: 0000-0003-0988-6015 affiliation: 4 - name: Ilia Timofeev orcid: 0000-0003-1795-943X affiliation: 5 - name: Ben Welsh orcid: 0000-0002-5200-7269 affiliation: 6 - name: Scott Sievert orcid: 0000-0002-4275-3452 affiliation: 7 affiliations: - name: University of Washington index: 1 - name: California Polytechnic State University, San Luis Obispo index: 2 - name: MIT CSAIL index: 3 - name: Florida State University index: 4 - name: TTS Consulting index: 5 - name: Los Angeles Times Data Desk index: 6 - name: University of Wisconsin--Madison index: 7 date: 07 August 2018 bibliography: paper.bib --- # Summary Altair is a declarative statistical visualization library for Python. Statistical visualization is a constrained subset of data visualization focused on the creation of visualizations that are helpful in statistical modeling. The constrained model of statistical visualization is usually expressed in terms of a visualization grammar [@2005-grammar] that specifies how input data is transformed and mapped to visual properties (position, color, size, etc.). Altair is based on the Vega-Lite visualization grammar [@2017-vega-lite], which allows a wide range of statistical visualizations to be expressed using a small number of grammar primitives. Vega-Lite implements a view composition algebra in conjunction with a novel grammar of interactions that allow users to specify interactive charts in a few lines of code. Vega-Lite is declarative; visualizations are specified using JSON data that follows the [Vega-Lite JSON schema](https://github.com/vega/schema). As a Python library, Altair provides an API oriented towards scientists and data scientists doing exploratory data analysis [@1977-exploratory]. Altair's Python API emits Vega-Lite JSON data, which is then rendered in a user-interface such as the Jupyter Notebook, JupyterLab, or nteract using the [Vega-Lite JavaScript library](https://vega.github.io/vega-lite/). Vega-Lite JSON is compiled to a full Vega specification [@2016-reactive-vega-architecture], which is then parsed and executed using a reactive runtime that internally makes use of D3.js [@2011-d3]. The declarative nature of the Vega-Lite visualization grammar [@2005-grammar; @2017-vega-lite], and its encoding in a formal JSON schema, provide Altair with a number of benefits. First, much of the Altair Python code and tests are generated from the Vega-Lite JSON schema, ensuring strict conformance with the Vega-Lite specification. Second, the JSON data produced by Altair and consumed by Vega-Lite provides a natural serialization and file format for statistical visualizations. This is leveraged by JupyterLab, which provides built-in rendering of these files. Third, the JSON data provides a clean integration point for non-programming based visualization user-interfaces such as Voyager [@2016-voyager;@2017-voyager2]. In addition to [static documentation](https://altair-viz.github.io/), Altair includes a set of Jupyter Notebooks with examples and an interactive tutorial. These notebooks can be read by anyone with only a web-browser through [binder](https://mybinder.org/). -![Seattle Weather Interactive Visualization](seattle_weather_interactive.png) The example above is an interactive Altair visualization of the weather in Seattle. The plot on the *left* shows the initial state: a scatterplot showing the temperature and dominant weather type between January and December, and a bar chart showing the counts grouped by weather type. The plot in the *middle* shows a brush that the user has drawn to focus on the summers; which are dominantly sunny. In the last plot on the *right*, the user has clicked on the a bar to filter the scatterplot. These interactions are achieved through two selections: an interval selection on the scatterplot and a multi selection on the bar chart. The selections drive filters in the other plot. The code for this and other examples is in the [Altair gallery](https://altair-viz.github.io/gallery/). # Acknowledgements We thank the many contributors that created examples, wrote documentation, and reported bugs. You can find [an up-to-date list of contributors on GitHub](https://github.com/altair-viz/altair/graphs/contributors). # References altair-4.1.0/paper/seattle_weather_interactive.png000066400000000000000000005574141364111050100223720ustar00rootroot00000000000000‰PNG  IHDR’/øKsRGB®Îé pHYs  šœ iTXtXML:com.adobe.xmp 2 5 1 2 †Ò®$@IDATxì½|ÕÕþ?³]½Y’-Ù²ån0Æ`:^HhBw ÂJHÞ H„ä!„Þ ½CBuh¶q÷&Ù²%«·Õö2ÿgöÊ£ÑîJÚ•v׫Ýg>b8÷ÞsÛwÆZݳçž++Š"ñ"        H†ôGA$@$@$@$@$@$@$@$@$  ÁŽï ¤ìÒèap($@$@$@$@$@$@$@$@$@ƒß        H#4Ø¥ÑÃàPH€H€H€H€H€H€H€H€H€;¾$@$@$@$@$@$@$@$@$Fh°K£‡Á¡ v|H€H€Ò”Àé§Ÿ.‡®¹sçúýþŽòÙgŸýú׿ÞÜÜ9b#C)x½Þï|ç;?þøP £Î÷x<÷Þ{ï'Ÿ|Ö&þꫯ†e"yÿý÷oß¾]Ÿ¿aÆûî»oxD/¼ðÂk¯½¦¯yéÒ¥ûÛß0µ°|tñÜsÏi™7nDÚåv»µ" $@$@$@$@$@’ÃuÚi§ RsæÌñù|1ÔˆUå™gž9õÔS÷ìÙ3b…ŸýìgÐ|÷Ýw…&d\úäˆ ¥€…Í·¿ýíÇ{l(…QçcrÏ=÷|üñÇa-`⯼òJX&’XälÛ¶MŸ¿~ýú¿üå/Ã#zþùç±Óׂüá‡þõ¯ÅÔÂòÑlZ&KèB»\.—VDH€ö!ÈOh»ÝïxD#¢ÖO~ò$ÅoÅÛn» r]]݈ ÂüÍC9DhŠñ‹_è“#6¢WèííE#ÿ÷ÿ‡L§Ó ùꫯÖ+Œ]¾ð Å8Å]4ˆßöúÌööv­£_þò—(‚5MËÑkΜ9SËׄ+VèuV¯^-Šô™>ø ¦¿cÇÍ›7OËÑkB^¹r¥VDH€H€H€H€H`dƒ]ØŸÔHrÉã{Ã%SŒ ¨F$@a6oÞŒ›ßýîw"_›¾ò•¯hjpàr8ZRêëë5‚ø9ÃìZZZôõ²¾Èf³¹¨¨ ÂôvÒI'iÊQ-€°ÊASÓÊ`ömÐß´i“VQ/hßWé35ƒœ:u*’o¿ý6äÃ; ²Ñh„ _¼A˜ÈúKTANOO&ÿèG?‚Œo€¯eÂ'dÜà v ·TêGH™H€E€¾ £&Iß…Q£cE  v\2‰·„K&þk! TX³f ì;GuTd§øÒH3Aصk—ÐÁÞY-þàÈÔ’~ó›ßhÉÿûßz;ýQ4Ù£¨ˆ|T„|ÑEáŽä¯ýkØÚ ùæ›o†,.aÎC¦¾e Ø^-uvÂÃî¼óÎÓ2±qí¿ÿþZæâÅ‹E&rfÍš%ò‘#¶£bÓ®(wØË  Yß4e‹EkIÈË–-C#×^{­¾Jyy¹(…ÂÃ?¬/ÕqG¦f}ƒŒKd 26 ¹»»]àBR«"”á½ ó" ´%€ß]a}b|Xô]ˆÕH€H`(#ì¸dâ’i¨W‡ù$@$TúÒÉ'Ÿ¬æàà†"Øz„†hkEp€¼¼<Èblš’CyØ ŽŽŽ7ÞxòĉÃæ‹ò¿üòKÎ 8îÐ)((¶ÙB€‚@>ÿüó¡ÜÓ`–‚ ¬‘v(‚· \üTíPË<ò„o~ó›hv=Èz·µÊÊÊÿ÷ÿþŠ„,Ì`‡|íB`Ô=å”Sá€Eqijˆ¤fãÓò!ÚQ…šf?E2Ôj³7Üp’z‡G$à vB÷ &è;¥L$@iB€¾ âAÐw!M^HƒH Û ü½>Ô̵¿§!pÉÄ%ÓPï óI€H án½õV±‘S|]rÉ%èrNNNÈgëµ#Ž8I-Ê'"©ižnb0¢¢£ìàï~÷»¢A½¾6a»à‚ `q6/¨¡/ÜaÏ‚bƒB¾ë®»" ƒ0#žuÖYZË‘»3Ï<3l´0ÉA_´†€§qìt´F´± #üð‡?ÔëC>üðÃ…¾ðFÔêe°gÔÂÑЬ­­ER\ZEDh]ˆ-ºúî„û!<ø4e”j;X?‘Ä.3”.\¸2žµ¦IH€Ò„}è»&¯"‡A$F6Ø —LX5qÉ”ÿB8k t €Øpš1Hú;@X¾|¹È©ªªÂŰE¦£ìžzê)}Sz}ýÄ‘o0¨çªÃg ù®ºê*Üo¿ýv$/¿ürÈaòaÝ™ðq2# vZ(7M'¬)$á6(ú… aÄK˜üjjj4MTí#Ú׊" vÚá°<ð€Pƒã¡¨¥ à²Ë.9Q$tôÍ^yå•HbÏ¯Ö ’šÁNË„ÐÕÕ…¢Ù³gë3)“ @š¿Ùľ ô]H“×’Ã È1ýݯ±à’‰K&íe @$@É# ¶¸Š£TE/b±ÜîD&¶jÂÜYï2«tÂj!Õ`'ÎLÀþM¡ÖDƒ"©ÝE›hV2k2™Äxà@«îÍ7ß k:G}´Èúc1ØtÐAÐqÇDÈ$­­(ª Œkš­Mèèëêe”†ì0)¡ Yâ"{1áá¨/‚µEŽ>žÈA‘f°ÃÉ쥥¥bR}ôŠ£oŠ2 ¤ú.Ðw!}ÞFŽ„H « ¬¢N›K&mí>\2E}I˜I$@É €_¿¸`ÖÍKÈboæ×¾ö5$§OŸŽ¤ÈGïÂ`‡­©ßûÞ÷´Lä ÇžB¾å–[Ä¡®ˆÅ£?tBÔ…ßÄ´iÓ €–#§#Ž›@©(ÒœË4Má‚Õ©¸¸‚?Ê“Þzë-xº úbƒ-¢¶ýùχNDzص··C»îºëDElËB]­Ñ/VPȉŒa'Ôôwè‹a<òHì®EÑ7Þ(Á=Ì`wÅWèëBF`>MYa H"_‹Gvî¹ç"ûgõµ£ìDX(äüâ¿À—ßï×+S& 4$@ßú.¤ákÉ!‘ d0 v˜¹øKšK&ÁK¦ þÇÀ©‘ ¤Ô€Ã^Åï^Üÿô§?iÃ…Kä—••‰Lá(‡Lì‡}üñÇ!#ÝÓO?-4…LHH¾ýöÛzƒŠ„ EçœsŽÖK˜ oGX¦´pЄ½©¤¤Dè Žž¨+â¸!ç9è«‹M»° e°Cuͤ…Šˆø&Ô7‚œ¨»—^zI¨éï¢ú¡‡*2SOäˆ{˜ÁNX0õÕc4Ø¡5<&Q1ò äk;hŠ@ByçÎúñP& 4!@ßü–Öž}4H€H 5~Õ—Lb9;—LC½$Ì'    Ì# ô]è»yo8gD$ÎF6Ø¥óè96     Hú.Ðw!I¯›%  ÈÐÐ~ S         Ø· û¶{öN$@$@$@$@$@$@$@$@$ '@ƒže        ØÇh°Ûǀݓ €ž vz”I€H€H€H€H€H€H€H€H` Án?vO$@$@$@$@$@$@$@$@z4ØéiP&        }L€»}üØ= è Ð`§§A™H€H « œvÚi[¶lzè¡ŠŠŠ»îº+«‰pò$@$@$@$@$@û‚@šì¸dÚ/û$ ¬&ðÅ_¼ûî»Á’%K^~ùåÖÖÖO?ýôïÿ{VsáäI€H€H€H€H€RN  v\2¥ü5`‡$@$@Ò1Çsþùç˲ ‹/~ã7 ¼ôÒKW^y%é @ÊÐw!e¨Ù ¤3t4ØqÉ”Îo ÇF$@I ¬¬Ìn·kSëëëÓdEQ4™ $•}’Š—“ À8"`J·±Š%ÓE]$Æ%Sº= އH€2Àí·ßþì³ÏŽ8¯;ï¼3Lya9LféÓ§öÙg0‘4ŸÂGQWW—æƒÌ¤ááÅΤédð\Â|Ä—Ip÷6 W\qEOœS# #^;.™Â“$@™G€K¦4|¦yyy¯†®•+WÞrË-¿ýíoKJJ‚Á VG‡v˜óÏþsýàa¿KÁÓ„E#y½$µqU zIx555Úø5¡¡¡!j¾¦0v!]`éÓËßí„?÷¨O0½¤¦‹¨³KeæO~ò“W^y“E§>póÍ7ÿú׿NåÆE_ô]‰ƒ$ ÔH/ƒ—LI}ê©ùspŒ|ÇB€‰…’¦C\Š…Ô°qÉVà’)’ðÕW_-2/¿üòn¸aêÔ©+V¬(,,üç?ÿyúé§{<žÈ*Ì! ˆ‹Žñ©¯¯«J¶)Ów!Ûž8çKYH æ‚L¢š^;.™2éÝâ\H€Ò“—LÃ<—üã¢tÆŒˆÉ¯;øÙ £Ï" Èp‹Ãw¯¿þº8œñ=ðƒàmÈÿ׿þ%P` g~~þYg…_¡"çî»ïž7oÞSO=…$êŠÀ ø^D´ƒ/ìE £Ñ(~åÖÖÖâ+´¦¦¦êêê믿þ®»îÊ’X¢ië»Ôo4“Ú¸þŸg :JA˜Q zIAâѤ¦£ô’‚.RF,©sAãú•ûD_¾ éxè–L³fÍ‚ –L>ŸŸßf³yŸ[†5wï7ß|œ?ú裌'À ’ @² Œ/ß…45Ø…=$.™Â€0I$͸dÊæ§Ï¹“ À¾"ð‡?ü]777ã{›7o÷ÜsÏË/¿Œ¤øÆ‚ßïÇýË/¿|àðMÛíF2òºæškùÍo~w˜ê>ýôSÐÏÍÍ…pÇwàŽkÍš5 ,röÜé»=Ïš3%ˆ—>)²Çwa|ìâ}„Ô' &À%S?\NH€Ò–À÷¿ÿ}Œ ºË.» †¶{ï½Éo}ë[&L€ç8íBV¶ƒ:9ØÖŠdäUTT–‰¯£´–/_.Jíè»öª0I$ͲÊw»l~Õ9w qI€K¦qùØ8h È8Îq¸î»ï>1!áépÜqlj bãõzQtî¹ç®^½º±±Q¨áÜm«V­ɰû7ÞØÝÝýØcáK)xO<úè£a L’ d•ï v|çI€H`\à’i\>6šH€Æ3ÓN; ÃÇ Gy$¸ÚáûÚÖ­[—.]zØa‡UVV"ö´Åb¼xñb8â]zé¥bÆiaÑ¢E"vÿÍo~sÝu×]|ñÅ8ep˜$  È*ß…ô:%–ï @,°dB„o,™„²~É„{Ä’ a†P*–LÈÄ’éá‡F–LO<ñ–LØyÙ–Lø-VJbÉ„C'"Õ˜C$@$…ô‡Nè?DfΜ©O‚̲eË4>8›2ŽMÐt4aÊ”)šüÿ….­VUU•V¤eR   À:eÆ pÍÆ™Eˆæî <¬€L&“8Ôh(wïƒ>8’$ܽûÛßÂÝ»­­ _ =òÈ#84)R-e94Ø¥ 5;" „à’)a(Ù Àø!=¾ 4ØŸ·’#%       ,&=¾ Œa—ů9§N$@$@$@$@$@$@$@$~h°K¿g‘ d1ì²øásê$@$@$@$@$@$@$@$@éG€»ô{& @à¡Yüð9u    ˆ“@_ýK¾ž­¢’ÁR˜7õ¦¼ê8Û : Àh°‹I€H m pÉ”¶†# L%еæNLÍh-3Ö<]¾Þíö­Om ç~?S§Ìy‘ À>!@ƒÝ>ÁÎNI€H`¬¸d+AÖ' ˆ“€øè)Yøs}½¾º`¶óvo²ÏÕçS&  äÈßưKÞûÖI€H Y´%Sá¼Ërª¿š?ý<,ŸÌ…3îv,™’Õ+Û% ÈbŽúW0û0krðdÊèØñj$›o¼ñâ‹/îêêBѳÏ>ëóù 8Î×^{ ÂÝwß½|ùò‹.ºhÇŽHò"   `5„à p÷¶•‚EPÐÛ wïÞMÅX}¼¨Ñ`7^žÇI$@ý¸dâ«@$@$zÞžÍkIÔ~ fùAŸ]_:þüK/½ôÑG---Eþ<àõz!ôõõ=ùä“®»îºM›6=ôÐCµµµúŠ”I€H€H`Ùã»@ƒÝ0¯‹H€H  pÉ”ŽO…c" , `.˜>Ì,}=Ûô¥V«õ’K.immUEŸ¯—¿ûÝïZ,“‰QzôT(“ I «|h°ò=` ¤-.™ÒöÑp`$@$Á‚Þîaf‡£'ô¥+W®|æ™g®¼òJY–€V„ °a&<£Ñ¨•R   ad•ï vü ," 4%À%Sš>‹H€2—€ÁRˆÃ%¢ÎÏ×[|Sþ})ìtÕÕÕ/½ôÒâÅ‹±õ;d—-[…믿^¯F™H€H€â"=¾ 4ØÅõbP™H€ö=.™öý3àH€H ûäMý&3a#§ÞW÷ÏÈ̵k×Âf‡ .uûï¿ÿ=÷Üsâ‰'"yï½÷F*3‡H€H€b$=¾ 4ØÅøJPH€Ò…—Léò$8 È&¦¼jlz…“}ËcÚ¼ýŽÝZðo-Sp©ÃÖW\±¦:lŒErÁ‚Ï?ÿ;gÎè¿õÖ[F£ñì³Ï>÷Üs‘9b T }E@îúTt­øº$çv)wÆGRUhc ¬žñÖ¯_ßÑÑ!¦‰oÖçÍ›WXX˜ñ³NÍé»Îì%Í \zLí'Û;„µî¢#x²Mš?./‰ÒË`Ç%S5›N2gã;¢‡€»ÝÛµÑR2oŒ֔挱VÏx\2%öÃû¾ûªB³»víúÉO~‚³Þÿð‡?,X°àË/¿DæwÞÖc]]ÿ‘šaù‰M&µ—¤6®qHA/ ìbúôé ÚàõÂPùz1ÊñvQàkÍñ;D§½-{ÜÆ˜Ìmñö2ºI ß þ­ý©½…X¦–‚^RÐE,3EÈPËÉÉ)--u¹\kÖ¬ÉÍÍ=ä(!wÿþ÷¿Ÿzê©S¦L‰¥eêÐwï hà¾P׿˜Ršc6Òã[£B!뤗ÁNàç’)y¯a þLAà“‚^âíÂÔÛltö‰g×Û´+Ðeå9ÆÛK,mFꤠ—ty¥ —tù€F—Ã%Óè¸E­õÙgŸtÐA·†.„á‰'žš?ûÙÏ´h ?ÿùÏõÕa¿ƒeGŸ“ ïdòzIjãô’ð.jjj´ñkÌOQó5…± £ê¢Fl‰Eï¶šcbèz‰¥áA:±ô2Æw;áÏ}Ðö&RÐKjºØ;¡1ý_|ô{ì±úVÖ®]ÛÕÕÕÖÖV^^®Ïß°a~—^zé¥úLÊàïÂ0pX”…¦—çeá¬9åØ dƒïBzì¸dŠýí…fjþãß±Ì+]'2]l‰ÅJö?)M&‚a¤+®X ÒÉŒ‰`ƒf5Ú—L£%½Þ§Ÿ~úôÓO‹]±>ŸJƒž#Øê…½±QÝF¢7Ä\-¹ùÉÛVႯܵñ¶¡Ô\>b¹ñ)ÉY¯=rl‘'¨¯)ô[sj•ò¯i™²“ p˜x˜µ9pÀêÕ«7nÜf°{àŠ‹‹±y¶²²òŽ;îøüóÏáÅ Uð ö†n¸æškðÇÿ…^˜<‡šuzú.$꘨³NjãúSÐQ ºÀŒRÐK º&5¥ —t‘2b)›‹þŸg¼r–ø.¤—ÁŽK¦x_Sê'œ€}Ëc~g³¾rÓo‹·ñ’…ƒ¼o¢VïYŸ·{³ô˜ ¦K…çGÕ‰š)¬æ¢9ùµgEU`föà’)áÏúºë®[´h‘8nâã?Fûn·'Äz½Þ©S§îر#á=²AÐ}°Ö‰¹ùeeâÙúÒ±Ëjœ;o»¤¸q¤Šìï* ¼/Iß‹¥YÍwOrÕÇ¢OÌ&ÐÞÞn³Ù¢ÎNÊX;y<|Ï¡)àÜžU«VÁBWQQñúë¯ÿâ¿@¨;¬'L˜€-´0äálŸ+®¸‚;XÚú.à©%ï+ù¤6®±…‚ŽRÐE&M$5sIM/©yô0€Â,Æ~eïBzmÇ’ +%,™piK&|´#yå•W®X±bì–-À0ü®VXë„BïæG‡Ñ]âÜ\-Á€+¨î6sÇë1¶£ùîùz6ÇX…jL`ø%&Ž%“~úX2sÌ1bÉtüñÇ¿ð ³fÍB#ÐÁ’é–[nyÿý÷/ºè"}•,”W®\©„®£Ž: ÓÇÆX`D­uYø2¤~ÊÊÞ tj×AÕÇ3±ë$I‘¤Ð×´JP–ü£i_U­ÑôÄ:éKq놜vE˜vË~øáÈ„ÏòUW]u×]w=øàƒhêòËGv k*³“ð]Ђ0hîÞâ3îÞ™ýè9; Ø ã»€¯ÛáîÖ”æî|¸{ŸwÞy---BîÞ?þñ·mÛöä“O†ÕJ“dzì…K¦4y3²sН?n7¦¯¼ ‡ ø=°Ô jDpK¦à¨ºà’)áf6È%Ó8|h2 MŸ î’¿×l—Ô-«‰¾ÊþG2"jqSÌeÖ¯B;>”þ.·þk¸Îª¿=P*'n[FÀ¡næ5 Àûx˜QçåE8e6«ùà¨XíܹsáÂ…"‡w=ú.èiP& ¨²Êw!q{EeÉL_ Foï6“m‚ÁÛn)úŸ„=oêiÞ®u~w+Z6äTz ÔÍ­Ž†7½kMùS f~k¨‹öûßž ë/MÜ’)èësÔ¿hʯɩ:~¨®™Ÿžµd:á„Òs‚ dO›Üò†d› ›]@Î5Ú×Êžfeb‚£èãÜ) ê^W˜q¹dw“¾TO^1æK1ÈÓW‰E–Ÿ©)}u/åO?7–*ÔIØîŠ3a£ŽDäE-Îb(úÕ¯~õ»ßý. þô§?ýàƒàyU?›3á» Ÿ¾p÷ÖçP& Ñw'ÑGR s÷F”jÍÝñ"õÓ!‡»tx CZ8÷ôm{ÆR86;,QÜmŸû» fÇå'ö èãÜuÕÕa¯+ºCuÜý};õ¥ú6 –¡Šôjñʨ‡*ØpwrÉ/½}¨Ï%Ó>„Ï®I áä¾µj›ù³û-h÷ƳKx_éРšb.Á`|½ÛÓaHCŒæÍ›·fÍœ ‹S&ª¬[·.,GŸÜµkâÛ !n0â3 çÜsi®Õs¢L$@$ìñ] Á.¦‚JÙ@ÀݪI´”Î4ÈZ<»Œœ¾ß¹ó2ÚÊMÏ2fä43rR\2eäc夲–€RrŒìØ.õmEøPçÍL Y6)û"Æ‚b)‡åFöuaŽ9NÁLÙE¢ ®4"ŸvuuáLXœ2!šíééùâ‹/ Gž{bèBÑäÉ“TÂáôX‘# yZ  ž@Vù.Ð`7üËÀÒ,";åo÷Fo§ú±"«ÁV,%û¥`þiLBˆñGnÊXëpÏ™ẍúTH\2¥Ï³àHH`,äžU’s»Rù eÊ¥rïʤózw­®05KNlVýP);.–ÆÕFú6Jå'+– #êˇÔöVž?_™~¹ä¬—Ü»$k¥’7gÄŠ‰UPwàöm‚ÕÎFƒ]bÉ&¿5l –"„ô'ôiFZë´¢Ha¿ýö»à‚ ®½öZ ï%Y—9$@$@YN «|h°Ëò·ÓW ¸›?övm,˜uaÉ?s·|V8÷û»·}f¼=[¥†7ój¾ &4âéX“W{ž)·rDý ¯·oû Fo6ºz»7ùí;a>³”-±bbл§ý ƒ%ß\8#±-³µdà’)Ù„Ù> $›€Üú:>~Ћ¼ûq°”¢ƒ!çû¾Tüê Î’«Nvl*´œªºäîRïUl~9¦`s¡àqy¾]rW‘Rr„”[+ÚÙ÷ü¹û Sv™å¡ G—âLX8ÜÁWn­ÂGoµX…H€H€²Êw;¾ðÙNÀ¾õ)Ī…îu†K|Ûoê]æö«ë(XÓp"Ĉñã\MKÝ­ŸBß¾åÑ•¡Ö³^=AÂä¬w6–äVŸ`)Þgëë„1^ã‘—Lãñ©qÌ$0@ d­C(7us¨§M²–©Rpprˆ”}= ”Üé²³N¶oP †s çrHöµ v¼H`´°#)jHïѶÇz$@$@$+ìñ] Á.Öw‚z™J@XëD(·€³Ù˜;qðLB® Δò´«GzÁm¥µ\ ¨<Ô¥“œ}ž¶0Ø ¥É|‘—L#"¢ ¤)ªsl¡Ü"¬u’l°Jˆ17âбm¶ýXë 8¼µNUГʎ•YRÔs`G¼¿ìïQÌe#*RH€H€H€R@ K|h°KÁ»Ä.ÒšÕy»6ˆPnÖ:É`°H5žÝðWnÍ©Ž¯ÂZµá­uPÐË›rjÐ×')Aœ;|j©â÷»;M9#kRƒH€H ½ (eÇKy³e_ÞÐÖšsNM©[n[‚±ãDCã“Áê ‡™‡’[+Wž&y;”‚ðS;£ÖÂ[¹ocw»#§gµÜ±:²©@©úVTåþ̾ÍrgHCBì9^$@$@$@$2Þw»ôxÑ8Š}G oê–҂Í3ñ’òb‡}ûsXËHA_Ϻ{‹æÿx˜1·Î03×ïl±U:ŒšV„m³îöÕ=íNW˧Á]êÂÌ`).ÚïšB¤àéøÒÒDQ,»n#[` @z°U+¶êð!åÏ–:?¾uJÀ^‘V¬U~b¾”üyÞÎÉ¿7‚˜ß>|Ua­ë×ñvHúÙ Œ¥$@$@$@$4Ø%†#[×ÌÓ$ü ¾`Å34¼)ò‚~çàÂ()S~ ~¢ ‘e›pP°·.Øû‘(z»‡PìÏÖ¬uH\mÆœ°hGÃ×f) ŒŠ€µRò´ô×4Œª VÊ4›]}~1+«Yž5)¯ ǘi“ä|H€H€H`_0ìë° ˜˜ò¼0bÚ?S«Tß°dútsøYU×kwÆ÷|8zÈn²·NÝ` í<Õ Œìë@x-» NœÐôµ–5A+ ”ÊoH¦"5sÂ×à VkR `ß®z¶¯ñO:°ÖåX “J,ÅyFOY×з¦~WÍ—^zI?õçŸ^ŸŒ*oÛ¶­¡¡!j3I€H€H ÐÃ.ž2çìl•°´í<íZs§šð»ZM¶RÄþ Ë1‰'D ;¡‰Í­CuÖTÁ¬ {6þ#èéÌ›v¦l´†•ƘT‚þ § ³‹ŒÖc TKX2a0X2ç™\Þ@·#€%’ k‡sÁ’éœsÎÑf%Óù矯%£ X2Y,–šš8H£¶ÃL aÈ ÿ@i9Îoõ}O2—Dµ£ zE‹”¢ƒ‡iM_$RãÓÈAE}³zY¯)+U‹#3ãÈñì14¿¬xšÔ*¶©±÷GTMñÑsäœ wo§w;ºþ»¯¬`Ȱ¿·Þz«þÓgÉ’%#~úüç?ÿ)))á§Ï^Ìü? À Ùàî·¹a!&H ãó™ÕÙ¨¾Æh›5ZœÐÁÔs&c›xtŒ ‚¾ÞžõÊúfõòðMÍS´o__ƒ}Ëc¸£KáÌØû~T,Ý'¸dÚ'ØÙ) $‹€c ZVÌ%’ËahýWôƒ&à¡ë$Ù³GêY)Ål°“ÚÞãDZœ8vÉšÅíÊ-oH^±©Ö$½²}ƒþœ!*1; lnr`XaÖ:äÌ›œ·v§}K“3²è7Þøøão»í61Ÿ»îºëì³ÏÆ÷@Gurž|òÉ={öˆ¢³Î:kÙ²eú¤È÷_þò—'NüÑ~¤Ï¤L$@$µ²Äw»¬}Ã9ñ(¼ëk´•Kξ¾mÏD=hñã cΟêëÛéjþ(vƒ]ßöDã8‘'N †]”$3 3 8v£ƒÁ¬¼ž¶•ús6’Ù3ÛN0.™ ”Í‘À>'`„!À †»bä»40´Pü8ÕZïe,y;û7æÅ[;úÖ ÉÛr]÷«žé¦}1†LƒMHv¿Í¬ºxF^L-ÀÚÉëZLñvnºé¦µk×¾üòËÓ¦M+..F­n¸¡££ãg?ûÙ¹çž{Ùe—tÒI^¯ùS¦LùÁ~–Ôz‘eÙív755APq"‹VHH€H ëdï vY÷rsÂÃ0åOA) j¸¬¥Q5Eü8X뢖“i.¬EË¢q£¥pÍ$s«ü0ØÜÁ Ïd0,C¬ “Ô=›M.™Ç’-‘À># ö·*eÇIy³%S¬ø°iÔT”Šk£ ñãE®ýD”‹kªRr¸ìï‘\;±‘VÊQ÷¶çú·Ê oCˆkwêÖvCP‘­&eZ‰h/öK©ÿÄâ@‡p¬öµ;v,\¸PÌåŽ;îÐ&UQQyÒ¤Iï½÷^aèÒ'…Ú‹/¾[žËåÂöØÒÒè›i R  ÈxYå»@ƒ]ƿϜàÄþÖ¼šÓ,¥óaÃRŸc—!(˜Õ¿}#¬>âÇ!ŠœcÇ«°èŵG5§êø€»Ó×» iÍ…3Ьѱ®kÍóâÚº|kO (åZ N.TYذ‘,œ}Q¯×ÛµA6çc²æ¢™‘:Ì/¸d/OŠã$¨„µErLJJÞl%¡ÈfÄwóº9÷6ñ쨵”ÜZ©f4±”ò“ô æûÖ 77 #F›]›CµÖ¡_†\ž§Í®úý(_nïp§åZÜëbœãâÅ‹ámwüñÇ ý°$2±Öãñ žäûï¿?Æf©F$@$©²Êw»L}9¯˜hÑè ÿ‚ GIÀ‡ønNg_ïæG ç\µKñ\˹Q‹†ÏÌŸ~®^Ád_!åæ#ÈÑf·£Õk.§'yZE޾Áå¢ý¯Q‡ ã‚—Lãâ1q$#ÅïØgôÅX+•jÁ ö!ÊcÐ0„äTvξ҅€Õ,〣¨£ér¨ïmaî •Eeeecccuuõí·ßµ¼çV¯^½uëVQ–™_|ñÌ™3yä$¹%6*Ff’ @¶Èß…A«Ùö˜9_# øÔhÊâB”·½bý_]1á° «ÁåáŠ)žKЇÂ%Sг;H8¥ô+rçš íTɸ¶»´0: {lc»* ”n·kÔ!ÇV‰Z™F`Ö¤<GŽ3aqÊDØÜ6ív†å ÙÜÜl6›ý~ÿÛo¿ýÜsÏE*œwÞyÈ„w¼ÃI²ú$N™@V?l­:ˆˆ‡^$@$@YN {|h°ËòW=Û§Ÿ;ùçnõøçn'âáTÙ¼Éù3¾‰½´šÏÄKª§O×rÄDLµ3k™BE¹ÕÇ[Ë;rNôÃ"„޹hN~íYaÕ™Ì0\2eØåtÆ#¹ùÅþaÛ×J… q¾xrgBÖ:ô"7¿,yÛa­ƒlP<Š}µ¤3ØI=+o›tKJ6;ÅÛ¢žS1tä;µ5q¹p*‘K=bïÕo‰C²k™T°`oö ÿè¸ê0‘¡ÖtØ}[šœâ„>m–Cýq¢)P   „È*ßìòΰ‘}F wÓâoOÛ [åáSøÄŽÌÛµQXëÐ,‚Ü\-°ÖAVngË'zƒ«ù#¿«Y¸•`@6}ŽÝ8§b˜ÈwhM Õo¯úú f5¶¸„%²³ñ}ìöfú¿¦ãëÙ<¨€‰ %À%S†>XNküðÙƪ „Br v²âè.±Aîô-+p†0Ø ôH‰tÊ Ì0ÏyýAœ ‡»¢ÁqëtŠI€H€H ñ²Êw»Ä¿@l1•‚ÞÞî>)Ùo´n™”à wAýbL'L "À%Ó LÀ^ííí@q¯öf$åÿJÕùrãÓ’ß.ù»¥€'ÞO+I¥ìì`•ú6:òŽ«ÛÝ=yò䡯ªäÍ‘;–ŠR¹S«ÃáÎ×®H¡}¯‘Õd£"™Äý2äÉ’"5>%•ŸŒí‡†ö·‚E‡–xVÊ]3úwòÚj0É:Im#à1´<¹o½äíRÌd_»šo)WïQ/8÷íÙëlU!†ÌÎÎNlœLö#‹a T‰ƒ€Åd˜Xl‰£UI€H€H A²Çw!Ùæ=63 8v¾O±‚™ßJêØ ç]Ö³þ¾ ¯×ïjS°—G*Ž«;GÛRП7íØÁêéX˜pʺÍsçÚ¸ªoÐR¶À±k‰ÈA;T÷;š‚žV)´ïU¯Ù/Ë&Ùh’e£ÑŒP/A 5¯öWL%NŸ¥~Ï—0™íÞ½ú‡jD¹¥JÙqø‰ª)ÔN…è^¡ô®‘NiÏ?eÙŒ|¹éÉœ E²;e_‡$›%×Î~kÝij±=V(ÈAŸb0Ëž&éûìQ1—³ß6R?2§¥¥Åív#?é,²oæ ŒOYâ»@ƒÝø|=Ó~ÔÚM"*\’†Œ­£ÖòEž¶•saï–Ç f_lÊÕ«B¤{ÙÇk©ÓkÞTÿ¡)oʦM› úC)G[?¼š¯ã'R9z5$]MKÝ­ŸÂ‚Ù»ñÙhEN÷†¿%«§­62Ù`öõnÖ:L¡wË£BA zdƒÕ`߉¢°¡ ¿L9åÃ+è•£ÊömÏúûÔ…n²YÔÞ™I$@ã€C A äN—uŠ{³ÁN›iÐg—M%í¾)’ä®(ô·ÚÍG+MŒ`_ß?H˜í$·Rx ìÞiPðýRM¢ Å\"ûºdÇÕÌg›$¹wJê>Y³¤nõMú%¬uIï† dŒ÷]b'EÆ=HN(ƒ x:Öbvâ<_Ã(fôv£V›ºd’ªËdÜûúúFÑÎ0Uà+‡R Þsè®ÿô‰€zDÌd°ÖA0ÚÔ=GÞÎ/q7åOÅÞê-˜Š%“°Ö©ò"¬$`2™pˆ¡Õj=ýôÓì&\¼x1îaçf%žq3éa<Ô?‡¢ƒÑ&¬ujË…ÄѾ¡ßβñUÛ¶£n«] —››G;±¨†ñÔAš UgÀÐhr(Lª­J*Z„6`­Ã=Xr”Ú,°BŠ‹:I¾ “Ü›'   qI í<ì°d:á„>üðÃO<ñ7ÞT,–Î?ÿüçŸ> B—˜³oÐFÛ„€;ø&ùsÏ©<Úµç}o÷&te«84Ž )d 3Ø*PkrN}Gׄ¦n5 KIIIíÄ š[s*À uÓ®­º| ÙæÌùSpHEÀ݆dîä=í«„ùÌ`P·/™Ìùýö»:µŠ­üwÛ磮Ί$0® À¯ö‡?üá=÷܃YˆšC=ôjjjŽ=öØÿþ÷¿ãz‚Ù3øªª*‡Ãk~~È&•Ì™+88ÕZ-»wÃm-¬Ÿ=½²_‘§ÃòER™|±äÀ÷4A%o6¶šìë÷7ìl5Î(š0 ûCêt´ïèvz'+ˬŽ”òf†•Ž˜TrkåÊÓ°uWö´'œ‚îÛ9ݻוO˜*åN“:>MùJáAR¾ »_å®å’1W2H–2ÖºÜÚþ.ú6©xKŽFƒ#v—þº³X,0Ûåå%÷ب¸FEåá üå½­kvõÒ<óÇΘY‘ôqÉ¥$@$@$yÒË`Ç%SƼa…s¿U¥ Aß’=)[åaæÂZ_ïv[åa}mÝãÄ)fûO‰þGdÉ‚ë¼]$%h)×z#v³‚ôÃÌj«8ÌRŸHÌíS1¸dJUD®ÖºgŸ}vΜ9höóÏ?‡µî}ôQ¢:b;) R»¬Z–²°Imn3ŠsÊa¥ýɽ¦7Å×+9wàÛÈÊÀRE* Sno«ït!ð©¼S:bNÇû’¥D1‡wV%J^äÎøúGÄÚƒ%Îeª•rk´Pzrç•ÁN­kÿB½#æµbÀZ×µL¶‰¤öw¤‰ç U'—sG…¤ôÁ%bðYÛÆe©_ïUZçW·öºÖ6öÞ±dÓ¤"ÛmgÍ ¾‰Ç÷ñ±ëg&}²çYs¦$@$0"ô2ØqÉ4âG –’y)­1§?aÝ}º¹ÿ»_GÎ) +IÍôpwa_ªA–J]ïØäð@Û·®ÙÝéÆÞÔmE¹;_7Ø&˜rT§¼¸.¿«VET±ö0à@îsÑt-”žs÷[Â`wë2܃>‡1·J³Ö¹ßw·-G>œõŒsÊ"§Œ¢Ñ]ÚpŒ v£c˜úZ\2%œùM7Ýtß}÷ÁE+á-³AŠ€Œ3p/’ºWÊ}k%i]—Ë()¾¥Ñ.Ww*Š\MRü;¹wlm±ÄÚ“qò,4C!í$ûZ©¤ÿk0ÇÈîmAõ(LœÁN;¯qE@|ô<ø½Cô£¾û-ë{?ßÑyÈ´p£³^M//Y²„;=!Ów!’ sH€H`(Ùà»^;ñ$¸dêd~òøz·¢qÛÄcÜÍÁÕN’}K¼§Ç´B©É.UµyKsp Dü;wËÇèžqØ ‡¾aÇð;ÕBi‡M²ž¶âYäà[­Øþh°C³¼Æ.™ÄóZ»víw¾óuëÖ‰ä 7ÜpçwŽâQ~öÙgtЭ¡ »óÂZТ1D6^WŠ_V!Ñɤö’ÔÆ5)è%]LŸ>[¡µÁë…¡òõ:^iB@êw²khßâª×„l –{6J®¥Û¤©¸ë»°íN)·Wª’Åê­ßÕ=_éŽ>°°fõIk`F‘w™ä‚5Pj•ФP è¥Ìc0íB³uï|+\ ?ð´³ìÚ›i ÌѵP"ZÐw1”¬ŸK¤Œã8q[bEÑèžàèjEføœô’‚.†Ÿc,¥}_ ¹f­Cε_›ý›76Üÿa݃ƒ v¯¿þúgœßÌ¿ÿýïñ¬o¾ùæY³f}ÿûßÇ/Õ£ŽRc&._¾^ÌO?ýtWW×m·ÝË2[‡¾ ™ý|9; Èß…Äì¸dû›—š?ÔRÐK ºíXzñ¹­¾ ¶©W]]‡†º¼Ufçκ· ÐU0G’uQl ´ùŒ½Ê$xäùšìÇJ}q¯Ò †ýÍÎ÷Nu#IW_™h±x²¿ß°kïâßêì“ðƒ#)ŠŽÖ2 ¦ÍÝ{[pT`ˆCM',D\f¾ÁÛ,jiÝ…52|rÄ.†¯ci zIA1Nv5.™qÊÊÊÊÄ‘šF£K¾úúz¬ q-X°à‹/BÛú†8¸èÓO?ÅŠQìŠõù|(¼âŠ+î¾ûîk¯½öŽÐ%ÔþóŸëëÁ~ËŽ>'2ÞÉäõ’ÔÆ5IíÅëõ"ˆl0h=Ž]¢ÃÚùIË—»>‘¼mJå™a:"ÙëÁY%R‘ žm5Qt™5’¯VvÖ#Þ٨Oö䩦f³«ÔâP  T|àÓ¦I…¶oì«+“:ïl§Ä:릖:¤€ ¡rrò”Y—KÎí²âWòæèFy-üéS¡ÍV­¤Üm’»?S*N¯ÉÕéîÕ{VI®z©üçTì½ôsÙ›þì@w:°Ù.æ`R_-m¬)è%5]h3µ°ª¡»¼ ü+ ÑÚ/Oßk§.§·$w@áÉ'Ÿ¼ð áLœœ—lmm5 ®¹æšË.» A«ñ{ÕårýóŸÿ<þøãßÿýQ-“*Òw!“ž&çB$ Ùã»0Vƒ—L yÿRð‡Æ™Ô^Î=öºç{¤YS矚&Ã4¢Ÿˆs÷;ðG+œ}Q¤>–Ñí½Þ "U üí©¶7gzÀ=Û×½Y „'õ]ìhuɿГ:z»[&åûl•¿†jÝõö¦É%yß>lÊÞFüÿô€ëwó'ÞžMe…=’ßÙQ÷Vnn~Éa?ïoúmîöÕFk©¹@u¸Ø{Mw6Êî=Kóg~ÓRÅLànþØÛ½9ÆyóÀ¡{ú¹ìm'âÿÓ¯òvoQ‚^ké ×½è1u½j¹)è%5]Ä1ç!T¹d,ïÿô§?Á )àŒˆ?ÿùÏX † “¼îºë-Z$<é>þXu†}à¦L™‚ü#Ž8æ¼aê²h€µnÏÕ%Ùï÷wvv––ÆnÃÓ¨å=ÏK¾n40p8¨!²­B+Lu1_楨$L{k‡)ˆ0Irz'Í)¯Ðš»áuõ«šííî=½îóöm_'¬u¨(·¿£(ýaõÄൖµI×]@IDAT(ùó4¹_èZ&!†Á5†Üõ™ºWãÓR4á­ N'þ`ÜÁí3•Xˆ[7LƒkºŸ;(fÈ /¼ œé`¤ƒÝ»ï¾Vý¡‡ÂñÜ]tÑw¿ûݰ¢q”Ìßü”¼'’ÔÆõÃNAG)è3JA/)èB<šÔt”‚^RÐEʈ¥l.úž±ËYå»0Vƒ—L±¿X¬éw¶Ø·<Ž šœŸ8͹Õ_KÍd{7>ð¨®sÁ†ƒ";P‹©®¿Ž\0NœÖȲ­=b³N¯³øÈ9SµRaÔßÜÜ·»ËqýÉêáz±\W ¬uÐtî|M ‹Gujð¶ …µ‰vž¶å²É5†³ñ=ìŸE•žõ‹J#¬µ°¤)/,ŸÉô$À%Ö~Q ¼í„Å-jé0™+W® +ݵkWX“éFŽu,>ðÒêëëK™ÁNXë’JCXë†é6»aJËÛÕœâEJû»8ÝešŸƒÝ±1_#İ YëDä;DÁS,á!ecã€@»}¸¯º8'l žd…¡8T_„|ó›ß S¨¨dà +Mÿd–ø.`õ>Þ}½ñ.%uâ]MAé3‘÷7µ<µl×Õ'Ì\0e8;þðÿгШð(b,M±¤vÆcœé0jYå»`D,EX2E:8 ¢X2Ååà ºÃ’ mâ_Ç!K&$éàËãØW:ˆÈ†®Å¹¥žŽÐ×ì)аÖ%µ«½¡u†ì6»!Ë" <897)Oñ»$_ˆP.C‹a%q~…^[Xëù™" ž¾”r†õ’ Nd8›ïë_ÿzñ¸dB¬-ºÜƒ>yëV5%¯ì!PX¨zÀ{Q‘z¸\,ám—t¶Á®mÕËoLWD ¹‡˜ËŠºA[½<{`¢¸==žRÉáj­î•’©X6äúCÞvR@„„‰s'ú; 8$¿ûU½…G Gùèaë®Zêë‚áOn¥hâEÈ5Z­u*“̽JóÌ86êüÖîVƒ{ÌžXµ1°õ¡àUaüfÂwBk¿|°ÕdÁÝ;®©Á­ß9áã —æîýÇ?þÉW_}ÑãjÊ$<Ëë;`­Cû÷¼·íÓííÉëˆ-“@T#ú.„ÕŠÝÝûƒ>«»o“cõ°Ãè±dÚ¼y3>œ cÉtùå—oÙ²%±¡dö-#ö>"[Å¡®¦÷p–4s*Æ=è³c¥a°¨Ë§ä]¦ü©þ¾Ðùz¡>|} æüš±tÙBa®±ÇáQWMÕY aqñÀ2é«ó*cï1·úøÞMu8×Â`- úFç&)·@RAo¯Á2°‰ ÂâfÊEÈ<õ0ƒ†ws@2IMRƒd·«V’uÊÉ¿?cþç»ìyã¼ÊÜXï×Á®Û)˽kÕ8t†S°AöûS‰Ôø ìwJÕ·„š |¿•ÊÓ íï*W¯'§¡·B±VY¥ýgÕH…ª·”6`É:Qò4ã£Hò6ÉìÛë=ŽÁS5m\qìŒ;–l™°8e"lP~w¸ïK®1ì÷Gû`€_àaÕÇor¨º{ßgÊ‘ÇBà“mP;ãÀª×¿hZV×yäŒð]J±4B5Qû.Œ;wï±ì¸dõK–a±ÓÝòYwÙV¹¨gݽA¿êï`0åÍÿqòfZ0ó[¾ž-AŸË:á@l,b7¨¨µ…ZÃò6g=–L%†=]k¤ÎNõÃéKÓé~ïØ·µXMq9c×mñ‚ŸxZ—cûªÁ”gèÛ0¸á׳áoKqÑ~?IþÌo;w¼ ˜]NËŽ®RSA­Y™wмI°BS°)o²ß±[ ¸ý};Œ9“`°í𞩸d“…Û¤I“^yåñ”§M›†Ã"àƒ€æÇw\¦>zÎ+*˜ê::Ô_ÎÂZ§¢ê'&3wÚ‘;ÞÃ]Éï3ÈJÙ ñ6>¨d!íµ3Ú׿‹¶¼mî *Â$]èÇA…‡ÔŒê«)Ù,åNUzV¢)Ÿ¡Ìäo—`°Ãå·«wÌ¥Oõ;[…µɆ„T==R¡×6[ýtÙ«QêY&Ù¦J¾„vUŒê e_‡b.S‹xe"™ù“Šlë{q&,N™SÜÚb¿ó­Í#O}î¹ç4 8YBÈ¿úÕ¯ À• ÷믿^SÊò¥)¤­@ß…´}4Xò,>´fÝ«ë`­C“×[&HYå»0Vƒ—L‘/PÖæÀçKqÔaúÂZ§’ÇÄ\4;v¼†;öäÂû rÞ´oÄÛ£¾d!IÓE ØgZÚ8—7R öb±äûëÖ¯/;zÿýãíú²Ál*š%79h© x›Å&Ö ·[´†³& 3ànC¬:%dú¬ï„¯¢ê6â“‹å¢j]oÐÇݹçKáLŸc·$›„W£ßÕjÊßAa´ÙQˆ$À%˜À— FºH8d™ÉH£ú¹ öŠJ!9îŽô-X'IýÖ3]3²¦:Ø£áEèSlùV«®,>655rjè‚ÛxXHðŠRÙ×uý²™’Á*=û; ÙôD|ü©‚I²þR›Ûcaï ™íô¥”3ŒÀmgÍÿ|GçýÖ‰`¾Úì"­uZQf ô]ÈìçËÙ E ªØvÓû¯ÙÕ}òþ•VSh±4”*óI ѲÊwa¬;.™ýú±½Ñ€{ª‰½¢BŽ·} ¦üÉRgx£Õ,›=¯ø y%¹ñìEܘQ·SØ`´ .”Œ¡½±°Ö]óßÙhƒßÜüR×"Øëö^8L bävc4ľ¤Ð¥ïbo=þ?£pÉ„#}ôQ8øÕ¯~UJó§ËáeÿÊ]öES·£T‰*íµÖ©…ˆ=±›µ¯}Íi¥–JK§±Ze|çƒÿ‚åÆeÍÛ2©^uõ+ša»A]…‚â ʉHÈ-oHÞæP¶I=÷Ö¾A)è&t3ïäÐÌÈXô]ÈØGˉEèèó þòŒ(ILF¯ËçñË T·ƒeuÿøo½Öîž7¶áb¦µ@!ód‰ïÂX vxð\2eÞÛŸm3Öºþxõ/kÓ‡œ0~ýþíMÈD°Xî>ÙÖ~ÔÌøBB(:­MÄž‹ÜÍÚÖðéÉ…– s§7 X 2œÝ”` TQ-kˆL7¹dŠÔµ}UCW˜ÁNk†ªOF•û¶=pîF‘ÁhV^OÛJkù"$µðygh‘µ23I ÍÜsÏ=W_}õ%¡+lhˆ\þÆoœqÆaùL’@šÀŽZxÀåN•];ÂFX‘g®÷`­C~mYx…0å’Ö:¡ßÈwÎuË*‚¨̸#2ϧ:ÿ•çymf­<{$Å «¡"%SžèšwÈô]È€‡È)ÄBàÚçÖô¹Õ£²<óçõ{ ÄR1Fg–ïzwc ”ýAÅd¿Ü­F÷þëÃ(AÍlìvWí£0ÆÑPmüÈxß…±FˆÄ’ O+¦>øÀét¾üòËšƒ–L¯¿þúøyÖi¶!ðÌE3#AL,T¿êµ÷9Ç«%ÒZ'ºÃ’É´(Šº`K&“I]2!27 ® * Çúù:„¾CSÁ€O6ôO!zçÆ»ï¾¡¯N=õT¸× ÷7ñü£¢¢Â`0Ølcý÷2î€d瀛šš´n×.lùr8PÆ5²jHTÕŸ®ÏbÔj8&UT”|]#VØj«’òfK•ýµüÿ=ºª$Wýnõð©…]{Ö….¹óCÃÆŸ6\«v´ã^õ^wî†=/„õØßŽ{'ÜëäæW´ÒN«êÇkî!×þ«ã˜:WUžÕÖè)›SÔ£ÈÖ'vÌ}§unC¯¡½·çá=ßøê¬"1#Bn[‚d׎׶ìÚm¨Û….œ{+oû¼ù“…&òÖ¶ÍXÛs¸ËŸ/™Š¤üÙJÎT¡‰;NÅ5q¢¥fÓ¦M›7oF|dM ¤?ø.<üðÃ8 <''笳Îjnn~òÉ'ÓØ! ÄE@XëP¥Ãá‹«bŒÊÂZåm-½¸[ͪ™¢ÇÕß×ÅG©KÖÒ·xeõ¯À±\X2]sÍ5§œrÊ-·Ü²páBD!Á’é™gž¹ñÆÛÚÚþýï¥qÖ/z7=ŒCsMÊÙ¥EÛªmÉ~š"žµüÐÜê†×Ô—â˜TûæGS8÷û"rœ¾4LÆHD/¦ü©–Ò`Ss~©®1´þâÔy7¼ðE§Ãwì슆­ë×ÛÕcüMëëÛö\á¬áhL?àé4ZKÑ:Õw!Ú÷ön3ÙÊí[+˜ý=Qêpf®ó]ÈÇ~;¾8²ü5ìèµÍ.ìÞd¯x¼~ÞÉU…³¬õÇS=ßûÛ©“ô(ìÛÿé·×·zJ[ ¡…cíŸÛ‰Æqî­{Ïû’M‘»zça kš§úíÁÚœU¹6Ké|Í4™?óÛ«nC­²E¿Æ}éÒ¥Uþ7MF¹dÂä¢ý¯­ñNéF ®®«ú)S¦¼õÖ[ú±xàX,Áf§Ï¤œ‘ºººpv*¦ qvÁˆsloo:0 êNny©¿AûZ©p!Žî±ý~…=ýå=/ ³†®¬×Q¬U­9çÔÔÔèÕÿï«j²§§g×.W¾jzS Ë}kS¡l*Tü½8£V‰Ð¹]Ê¡¯.Yöº„{Û`LTÌe(õŠ´~C¡ñ¦#s¦$]+I7¼^ùÍFù-¹Z–¥«WYÚV÷7y³$—jMk“æI8æÈhƒÍnvÍåý ø2á0tÊA¯ctï\ÿù›’­F²Uo VÏŸT¿Yü),ïøºBoooaᘾ¥$øüÍ-õê¢WneáI5%G—hgœÞéî=N‡¶ sT—OõW˜ß•»¾Cýœ_U”¶ÃæÀH IÆj°ã’)If5ëj|Ö: F+“}¹$©÷siûCa~Ò,bCéÃ(ЇÍN(àô;p‡ßׇý®E‚­ðÝ76Î4Ôî’j=âXM¶Ê"¤ûÖ'ë_+ ¬“á„ÜŽkÛ*[ùÁzeÊiE Ë—L“'OÆÚO¤¾¾¡ë8â“i¬jiõ|9˜á ˆ§o6›…Ùnxå¸K}ý¿êÕŠê^Θ vq÷S%ôðÚ‹¥¡,¥¿Hý·€³ZÕÿé¯à€+„âÇq±ªÁn˜ëò¹n‡g{[ Ä˜œç¯ÈóI>¦/ãÛ+¼+µ¬"†0PchI› ¬í˜\–†ÖeÉ>&ð¯ûÔ?HòŠmå5ùŽnO[ƒý“·å—ä÷Yûxdû¢{ú.ì êìsÀREìKMR 9­ý.:ô±Oê77÷Ú̆{ßÛvÅWj×5õ~²½s>bÆaû€ »$$HÀÚ†K¦$?£to^QT¿£­\5Û…äŽX=½T»>)/¬ÖÜhmE­²Xº`MeÄZ#L1ã´ÅçT—‚á®+÷—:zd™-P˜Tè z–IJÀ©UV” ná¶7¬FµdÂÉ"©«;¿œ%“¢_²îm›ÿO\2i¢6tiI YB ´´Ôn· k]\¶Ú’’’)“ΓŸîW3Åãêe›,¹w£¢~ãçˆÝ¨€1‹UUMs±äïAŠ1_2äI–2Éí”dõRɛ֔RµXìKUósjÂJÃ’Øq«j™¤C'ôù£?hhõÎÈ-œ–ßÓ‰U±U‰O›Òå6ªçºV5VpÌÃ%’Éh\[;³nÏÀ' ^Y³.æååM˜0žØ‹ÏY«ÕË3Ò7E9eÄGÏiW-Ð÷¸üõz˜íölëž4³XŸŸ 2}²á)sŽ‚@’Lu^­ý_ž¾~„}ðï{žøÆÂjM“ Ùà»Hû—LÙù/'wòI8´A8Ùù ŠBnõñ#*λ¬gý}BÍ`ã¯@sÁtŸ½ÍE‰ü¾qv¶lÙ"Æc²•<]ˆ7g0Í[,qr(V·µ4|×OÑ~Wˆ ­ê kE Cݱ)EX2^éòduÉä›5©j´ûIQÅœ?U6¥ÛcV?½fWrWY‰%“$ –œüiN?hCÎaDÔÝ-ÅóàŽŽ{‡Õ¶t©;×ßhRú¬Ö²œªãtŠÓˆ—Liô08”}G@ÛÙŠ5óP£hiiq»Õ¤šòPšƒòyÚ¦ÑAù#%”ŠSGR²\îYUáZ*7 tÝ·þÐT8å„ùóû?Yi~4ß¶!›œH®«Üð6*è‹ìÛŸ—Ýyø®gþ¡_ÇÆ#Cã“JÀµ®UÚ±µk¾êŽorìªíÏRªLõï;¬uBg’éK%è‡'£ßÝŽ“. z (Ý=èëÖ:T×¼ÿF×k¥˜ÀðK& K&ý°dÂéÑGÅBäcÉTTTs±dBVJ]Ä’ w±d‚ –LÒóZ½zuyy9â^a^8ì(=ÉQí+ú8zy_g¸~ÕHyC^Š *ÂJc(P‚Ь`«!?ˆÆ RÐdð!΃ˆ”‡3.Ô|]\<¡†=Ä ¶¸k]EQä]Vý‚ŠT`N:(ŸZ0ÌðZêt‘LðM§ÕzÉ%—àÓD{+Ö¬Yƒêýë_aÈÃßÇ<ÂPâì‘Oø`qú'™UTˆ{ãârI'€cëñ—™öËöhDIÛ±cÌcì[Þõ aÛ­rKd·1¶Ö_¶0#ö†®IçâæšoË0œÆ ÝÒú¬äØÖ_ªûŸÜõ™Üü"tP w9¹Oo .¹ãC¹c¤ïu&|­_»ìJsì²ä¯ë*—ÊþG2õ‡YJ†&ïþøTR#å)~Ù±A ¸”ÒcvvZûTû>®žŽ]-;–Ëîü ¹~ýúPv”[gg',z}öNɳGòã 0Y©¾0Š³Ò˜€£g8Ûq~Yÿ‘Žb+W®|æ™g®¼òJü뉈ßÒHâæ¶mÛŽ<òH¡‰0”ˆ`xõÕWßvÛm0çÁ‡¥,wÚNð4F¡‘ ¤”@Vù.$Æ`Ç%SJßÐñÖ™·s«é=%Ðÿžl4u­¹½sõí}u/Œq*ØJÓöñU½[žc;úêˆþ†}¸"§`Î¥*ü!g7ùvoý»·kƒ^_È®Æwq -|ÖP o5wûjMÇÑð¦cÇkZ2ª7íL‘Ÿ7õ´ y˜Ò6µC6XKD~ (7ùö7š¬FDÊ úÜ«qØ¢®ÝißÙÖoClÞ½eËÿñõnÃj}ôQ¿Ÿ`dMMM0êuu´»îN¿£ÑZz@¤sÒ™—Lâé\vÙeÓ§O÷xÔ_/øf ÷aÞüt~ [ ôöövttÀ(ïËI“&¡}lă ÏápÀlËݨ{”·üRµ‹ùºåÎÕ˜n‰»”ê ZsÎÁfXŬ:ÃÚËós VWž©Wòî‘;Þ—}úÞäæW$ûZuê®GQªu~$;·ãÿêÀ[$Çö¨#ìïåÖj –̹@±Õà65 j4¶¶û`ÅRYZs”:¤Ò¯H93$ÛTɘ³¥ÙåöÉ].Cc¯úgäîúµ¸Ï,mž_ÑXS°²ìUkøãÓ‚Òô¢ÏPf/@¤<Éîô54¨f>^ã‚@n‡KDjëN5¿¬jÐÆm檫«_zé¥Å‹oÚ´)¬âÙgŸ —:‘¹dÉ|ûyÕªU•••à®YÛÃ*¦g’¾ éù\8* Œ$=¾ ‰1ØqÉ”‘ÿ 2)wÛ*Gÿ¿K6Z f_Œ6Í{;¿ôv­sì~{,;1[–^îí\ôtºv¿9–v"§Y´ÿUž‰— œ)§\-íø°¤Ð†%S¾©×çØåØùºß5È;þå1wÛçØ£ÚýåŸPŠ®Ýÿv= ÌÛ¹G:D¡èYŠçjØ}̵æÂ™øM k›ö¼s¾ìZhÊ›<}Áס™;ùkñw°©Ó³©Ñêëרºý*;žÜ6­Xá²eË´f5®%øNÉžMûLÞNƒ)ÇÓ¹ƒ×t(¤9.™´„åì/ZB~þ å¢¾ˆrV€ÁóÍÍU}Ö´0v‰# :;'ýò¶)þ>5ô—dÀG8óAq©¯Ë«îWÌ%ø>IÝgZ¼HMömPˆSÒ¼™ðé›d°ææ—`Ë9š‘]!gñ"÷ÿÏÞ›ÀÇu•wÿ÷Î>£‘Fûb-–e9Žã8qö}% I³HZ”²¦…Bá¥ÐZø¼o)ÿRÚR „¥P–PÖZH !¬NâØ±ã}—%YÖ.f_ïÿ{挎®F‹my$Ëö=ûêÜsŸ³ÜçÎ̽ÏïþžçÑJLØeщ<ÉŽº»M¼â èl‰Jƶ H?”æÀí¡ìV9KÈ[»‹PkojaU䄺¶õNÓ¸eË0; ÌÖÕ«WôÂ2X·nÜ…âv–ÉtJ~ ŠrRñ¾GRép§S×ijþq—…0™ÒÑ^ò<_TÝA9êéÐ$jœY 2‰!¸xžú+ÙM o›óÙ©¼ k‡ÖíÞòÊ:rí1`jLXbL7ür^·ø „Ój®†‹>N½4+’v¤É ©´V†ÙF ñ;wvƒÓØW²‹µ]l°L&uE eð‘&L6?Vík×®UG­Êé¬RRrú$`[V–‹¼–S‡DŽG3ºÝÏýàxF8Ú¾%í6wuV|²³d"Ò¥š夾%íìê©ÍYmèNmtƒ8Zqé ÈèzöÙ°VËËË—,YrÖYgQ—3eçˆÊèÒåÉŒ¸ûT—LÜÊC{þ›–¾ÌYlbØÉsì ŠëRîVG=ª[•E®Šz \/$;rª¥÷D¦ þ'~œ)ò "$È+;Ê`v÷ÝwŸ¸ôÒKeû#<òþ÷¿ŸúÃ?Œ‡¬l\ü[‹»°ø¯‘µBK–N œVÜGQ.&h&£Y&SQTzÊ âkº1ÒñËä¨ðƒðÔ^„olþÔt‡Í6‘Glçëp–¦3QA:˜çâª8 _W#Ú ¤¥Û=6W¹»ê\óœÀ§ƒaçðÖóˆçrVø¯3ËkÌŽ€\‡"9_ìv»Á]{qjlSxtÍ%Äé7W‹¯ž,û_ü÷ Ÿ6hœÍ®z,?(þb}S¦cØßÂ9œIj6`:8üKÍbV}1kÀl2‘˜O.“iÝÿ öÖ¿ÌÙÕ¦&“jÀdRue2a5©F*˜Lr“ÉܾØêÍÍÍÐv b¬_¿þÖ[o%XÒb[¡µž¥~ f&˜4Ì¥K—¹K¥R¬‡Ç•£eb†wÚ‚ë³Õ7knÁ2“Å([«Å» G¹QºZó¯o>Ú¿"ò«&—·!cT]?µ›ÞÿkÍYeT\ªÙ¼HêeçºK³¹Œ²sE¹Ãié1Í¿ZË&ötnKÚV7-ñhahtñCiWãƒCŽ'}5š»N¤ùVÛÝÝ V‚–Ðy<ÕJ %Jf¢j•TP·Ù w£Q}ÃJÝ>Ë:íZ‰ËІžm®6ºõÎ`¥aó”¸c-¶×µ×›ß§hOK ¹komoo móµ6Wei™@î ïqH#y|jFâÁË“À«j·*'\×¼mÅá½£„ô– ZÏÔ[:t:T,îÂép•­s´4`i`‘hî‹?ß ÝûâÛ—,iº7’_|ñ,toÌtï;¬ E¦)˜kav‹ØY&ÓÂ\­“q¸uö•Uñ¾Áì@µpêÄI6‹K©ŽOg£«RàJG,‰ÁͱÞgJÛî±ûD"YÜu—ÛÆ:ìî wÍ…îêIÚ¸Èl‰|çð5ZY6]Ò*¾%´÷'vo­¯ñzФ§î Ýî²ÙÝžºKLjlÇ·³ÉWõF&¾yÇúÑ„í‚öe˜L¾¥wf³žæ×¶v4Ø®¨»ÈQ²$vøúŒ¯vwíÚÅs$†åyç§ÚKKKÏð ÿ²I]@*#~îð·x—þh^†U/Š,“Iª‘wE£££Òù±(е9•4€c¦dØ‘–„ŸY3ÏîhNSY§…¶<é}ÿ«Õße¸ªé5^ÛÐ:ó.¸^PB½-zdááÌ‹©ý‚·-Z¼Gøæi°Wx—’Ñ»¾£ÅŠe„·'2ZƒÃÙâL§†eËõ¾_!¶cëÖVý bÆÆ‡½¶ÀìrkV#¨¹TGga@Ln7ì*X%3QyY½.ë$x (ʽbOj#`Ó¼UöýÉ+ôÔpí¥’¿6ò‚fã SPçþž¼{êßìÍl¤nÄ{Œ’TTfg¢ ªÒ" `"® ˳’ÉŒke±ümh/¿µ½œtää„-©pW7Y4‹»°X>Ö:, X8 4pZqŠØY&Óið½˜û)¦£‡%ÃŽøn@]žTøèKôÐïÂÍgl÷ƒDÁsø„ù¡BÂeƒs@ëd÷Xï³6Ýæ(mKnÚ’h^’»÷»iŸ?>Ùÿ3G©@î“Û•ÌèÖMæ;ü!™Ñjuço*Ô}ÀQ»*¼÷‡ˆ~®1ý(É #]˜L@“rÍj5’Ô!Óa“TVV²; „;ôûøÀ+ÈC²#Y„Ý[SW.¸uòtx^>»A˜LZj¸Æx>PY;ô¤M…"„ø#§#…ËV¾§4.ÂÛ¥ÃÙäjWå¥O*æE·= Ä¢½Lço{ u«, X&×âßøĺÅsQ¬•,* H´ž2¯CH@ ,ulË‹ìBÞðµéÑýFü°–ìŽm„™¥u]^³–)üñ„ˆXš_eÖecCsè™”áµ5W]±Í„g Éèd:֜܅ŽPå €w3y§Êä³R:ìB2ÆN..{fåÊ•úØfmÔ/Ål£Üe®R9´NŠÓ—ŠIàZÙ^°•ñ þ±<.\ÁQkw‘hÀSâ\º¦ð“°HÖ¶ð˰¸ ¯skÆÅ£±Xêc?ÛÜVãûÔ‰¨V±4°8}¸ "ÉñL&‡ãÇá”Ô@*¸›ó’‘Ýd¶c:ÍÄÐä§FÁ;¦AfÎÉ£6kd úfrëlváÏ«k†® L&¶Q—p):¸Ž­tbÅØÈfŽllH“Iº ‘ÄîÓ–ÄÐ&Ú¥*Àì¦Ê`2]vÙeç­¬ Ê¥XtÜY¢u²‹ì[ 0u4V‰ÍÇVfž*cµœp H“é´%8<ð€À”eT²ãMv¯¦µ€âj@Rê@ë–:t-,5Þ *7´?µ€x½Z'º”­Q§­è¹ü‡2qḊkjHn„e¦“³ÄÔ¹ûŽ®çLtIˆŸÜ‰â„¾I%ç–k)ƒtg2+^Ø$³âÍ+h]4åòÖ²¹î ÆÒ?7@½ßûæ–ʸÆ-Ò»T#1+Þ­þ3¤ ÛÞ¿Xÿ‚®¥Éî]R³fs_r(¸zEÓÖ=]åÜZ‡‡—x3].yWr™;ø\Yü¥Œ­´¤ó[^±8À¢žÖøÑ>Ôµ¿Íùlxw´Ì1ÂÂôL4ݯûÚD\<<‡žÑÒC%tVié½ç¬ÄhûÎB´DöjÜãÆq71ËØÝÓ#$v I‚ñ±;~"J ”ÌÎû-.ŠŠ*ˆo,íXç\ŽióWHó–(ŽÏ²ÅìZk–±ê–æOÝ{þtk¼È5Ð="’;5<‡ƒG¦u/òs±–w2jà”§{°³L¦“ñý`kÿª8÷ãñ¾—œå+Çvþ—œÈSEbèõh×c+ ¬þ€ÍY¦=u;Ë–A fR¸m&‡·’5N5*¿N9!Ûë3‰aþÙ]L2è*köKð;—Û_ÛzÑÆC±ÑLåMç®xiýRRì˹µöô´»Seåµ{Æê³ý¿õGÖeíeúd‡SÄ–>˜LðvnßÜjÿÃþç*sއÕTp§3pfIëÙøP¤ó7éx?ij¾út|0¹í+t¯¹ä 6w±ö’£ÛµlFw ÀŽ‚~âýë‰=gÄ‚âm|¸ž:%0¶û{¢ƒÀýž†kÜãQ•*|M7ƒx:Ë&â‘Kùi·œËŽ;ä¡Y|{§ík5Z˜ƒþó?ÿs½¬.§àjÏ ÿÐñBÐCZZÇ!|H‰"Ê0YH:.˜û몚êþ©•L håÝE"[ëÀãZý[ZG­£€ÖQJVÑý6#iؽÛlTä/úÈ‹T¥£h ùŠæ¿;ÌÎT¹“ÈÚK³¼"‹ì]sÖû9ÞÙÙ)к\Ἢªª»Ø‹„õÊä6Ð:yHK“Ýu¼žk’ Ä;w6;×ÓʺӆÝîiÑ"»lFBÄxüL‰­nÓ³Qhé:8]&¬w|Õhÿ”8SÇ‚R¶¦ðíä®(9Í ¡LF¡ufw Þcd¢(˜Ç¼«Ð:!NJæ YÀª[˜W XÜ…yU¯5øbÖ@ku Ë“hÝ’r{1/ÚZ›¥“GÅì,“éä¹â'h¥dW­¿"›SÓÇÈsZ…BëdÞb½Áç ï{¸ìÌ÷(I*k㟹…zAŠøàkBÒS£F­£´Nl“Âp¢K*¸Kx$iNœ}²™¨Ã9a›E»…e‚£(Ü4çèï]mïe—f'+r%Ð7–‹³<5bYÍ3ºóê+þ––mÛ¶ÖI²»‚bkš<ج‹o­“‡8S›+ ër+ RÒ4ÚE\¹”áÎvOi[jdK6‡XGš]ÚAëØs÷Th¤ˆM§ÆF6~¶ê²/r¦6‡¸Yš 9yÍ»Ô N¤@€ü ­“Ae÷Th? . †šiW¡u@`Q6ØLòV»¥ãÔì~ó›ß˜™3¿Øâ®»îÂÔþùçÕ÷Úk¯•#¿ï}ï{Ç;ÞažÅªŸ\0óæäÊAè¤,ˆ€t¥Ý”`w Dlö |`óþÚ…&“Ãß”Ü =Iq|mêJ\á ZWp—+EÙ˜)n7] Ð:5†b2QïÌpèqh ™èá\”"‘CÊ8ìž4A‘P•½ÄÈ$Aë¨;ÊÚÔE¬ØÜ1ƒìnÈs)³(a.ÃY}, L§K/½”Èô¤óÄO,[6—_90YÞ„÷|—Aý>|ûí·ÿõ_ÿõtÓZm'X\&˜q$‘t3ÃUàn o2„hÁëêêúúúh”þ’õõõ¼YaÚÙB»ãG¸¢¢¢ —Ú%DaâĉölBÏÆ G¹€®hÁ 8±—p¯Oá$‹,|ºÔˆŽë«î€˜fØëD¿æmÕ€Àrbb*¾ezÙ9ÚØëZÉòp¤]°ãrEÏÂÅ‹iŽÀw_éÝÑ]Uç½û܆þôõÑGì¶l¨î½þœ§€BÁÁšÊsb•5™]Úšƒ_÷¹t­òJq ›Ì°itåÐSË›:–»“£.›®Ù ±‡ˆGüVv¤­~ð›z²Ç ¦^ímÚà“Z¼“%ï HŸQs“Þ÷(76­á-rXóvddDfpfUnª„ês7Àž“a[‘Ÿ8 èõâËå ®ÂL—cÚä "}i!r^æeXuK  ‹»°J¶¦X̸ïê£òÅY̧`­ÍÒÀâÔ@q;ËdZœWw¾W>…‘€QAä8Hmøªâb9u¥í÷†öþ˜v™Š´tÅ;‚;¾•M —®¸¯Ohwβvï’ë¦v”-Ñh¤ãª³{ªðÙÄÍÖ<Sà׉¬ÍY’Ž [·»ðµù–¤¢‡]e+õ\⹆‚[—©é‰¬w•¯JgÏVk€ãf¤£xž~õé=›º‚ç6ÞvQkGêÍUÁ_xÝvûÊII2ö÷4-©Ìy$å¸le`öWuƒ_ø\¾æ›9|rU˜< œÉ”\³²aË–•Éð°Ëe³;²¤ª`©ñÑu»\áÈkÿ¤…8}þö?‰tüorlŸÃ]Xý¡lb´dÙ[Â{ÌÙ•®|Z¶ªtuuuww³Ëª€$d» Õ‡ó‘ÿŒw‡w—F¥êJ™¨Â»äjÙ¥`»«wleý„ç²<ЬÌ{KX1‹ãP 1kw>4ðéOÚ<,l)  á™ÛX‡!ûç.¢‰Pˆ&ùØcÝyçT,ãÿˆÚ[`œ X¨ âÆÅbv‰ø¨Øg¼-Ã*Xf`ˆ£9t^ 'Ùyó® Qg3ò¿‡úÐÓZd2¼ùÕ2HO‘ËP¡z Ì.¸Q x6Oþõ޳RìoŠb G@+¿X S1Ê/ÑøG‰tÊvùO¼Ü.°?MÛÑûÁ«‡>xEãçŸzãp4­m=xe[ù«+—jOhîƒZÿØ¥e“ƒ€Ùi5÷陈vèGZü ˜Ý#À.ÒêôõÎA§\j8¶Ç.6<—jñØÿ³p:Ë®» q=zn ‘c,j-÷É‘EbŠ(Œu‘þ‹t*˜QטLP^ î5ìrQ¤&·ö78Þj‰5 . \‹Y.‡ºÊS;NmÉ/Åúci`þ5`qæ_ÇÖ –, X85PÀÎ2™NÃÏÎ"øZ6½cããç7  <®´éŸ¥6¥ËJ—ÿqfˆªf†8X%BðÈ‚“ìxuš¿*ªš^òGòp¤ãWÉѲΰt/Æxï  xÄç–bøÌ&‡7QOí$ž§áZÙ.·ÞÆëù'êû÷ËúGžkq•­ ²¹+Iì½ÿ–Õûpz(’Ò¶m~êº{/n:\’z´Ú¾WëÓFbíæÓ³ÓV~àද'Çö20"»wïJ«Ê¬+w 8Œ`aß%`ßUÝ©èÙ% ׄîðùÛïE^ðþAsä]kï§‘‚NïëøHÙœNWù4d»Ú8p@2†h`e`Qjrcw ð(í\ð¡©9"¦*SIE%‚on§n…®+Pˆµ»`tc.<[׬Ys¬“‚eík_£×O~òÞCÒ=þøãúЇÞõ®w}ýë_ß¼yó9çœs¬cZòó¤Ð:F–N¬r sà3ZxRÄ©Í!ê*’/hÚJ1x­;Â, u¹¢§C†ÍO¥ Å\94bâ=ÊlE—øÂímóÈþŽá ­Ë•ç÷ ÀnèY-• 3gó‰@uOj57Ž÷Ëý%²žHbëT8bê!  µWÖSƒšÓ¹wì  G·Ë–L8†’Kª|ÂéêœÀþd;9\A<Ð: Q& N)7;ÓÝØ #©š ç@.ŠÜI!:PÄ Í!êœ#Ohš0ÈZ7ËD uò¨ “'¢hSr&S69rÄEÊ@xj|ð)°ª½ýÂ\h]®<µ£À.ÒõX6&ÂÌN.› øŸ‚ÐoÄæƒ^g#‘«ÍÅbætcH8I¹Ü{‚í$ôy‘ˆ}0µ¤Ö-L ¨s@{2Œ]n6‚ïMŠ‚ZG»žM¥ÓQ)`ÞB¯c wÆ xùÕh¯ êíl\™Þ¤½þõ×_¿ì²Ë̽f¯?ð{9^ØZñjÇÈwž?ðž+—Í.oµ40˜Jj˜Z'—v€ã¬:™âùg?û™lÈSà(»ÿüÏùêŒöƒûªe>*ó:˼®´QÄY€–+B¸¡.=ae]ÎxœÓµµµ‘ÉAå΄Ɉ?û ÇŠ¡\{mnW ôKÊ]µU26#.…­G|ŠH.Db±ÈLåÔª{&“NÄ¢_x|g4&p:ŽFc¿öìúSi*ëÀÝ53–Öíá±T8–_¼\Œ?å)Kgløºfâ$e gÅÍ‹w9‘dÂ`üûh,U:Œè"£y˜µ!¶UwvªeÐÒßCœ>þ‰B»7÷¥ ÎÝS”½ŽCÜ_ØrÉཥ|0â³;2™¥¡˜–Öc|³ŽéJá¼Ì×S^hÆ—þ¶Ç4‹™[Y€Y`й»Õëh4`qŽFK–ÌI­LÖøä/¶ÈSøösÞ¥U>õ ÿî<ûtË8¡Îý/®i»°µf~R_kkñ‹JÅì,“éø/êÂ<¨qùĬ§]z&a‹÷DSéàÀ˜æD£¹pÔ9ŒÏ”µ%ÆœŒœ<[²Zžˆû(æR2"z´¬R€03Ä[}V;Ó" ¦ÀHˆD#ŸúéK‘¨°9Ê®ºîì:BiÆT&•ÉŒYGd,Õ?ùô Ÿ#Ñ2ZQ)`‡3ö4\&“ò;‚ƒ©Ààð“¡…£QØe5¬P-#Ý0)rd â›GÃâtr%›IÉ5Ë]¹•$‚è³Ë\{Âd²£·ÌÖLfI0’5Q\–¦v4RP×cœû3ÛÅé—ëÙ÷˜F(ðèw`–˜âèÏ×’<¢¾ùÍo’ÞDŠ‘¿Åì~ľ°ê€”;íG?úÑ/}éKÈHüN ÿíßþ­¹øÈ޹e>ê|&ço–y\i£è³H¿Hé°LÈ3<(™O|œd™tZ×H^Zð[ÇUæ‚‚ôMõÙ—W_¾Zšê5*¼;¨æÆŸl— ·q ÆOü£zÏÏ´ô¨¸š}ô%Íq~6´àÌð­ð4½³Å^2.9ñNNO~ÈÞó—-ý¦óÚÙm ¦4Ÿ×õ‘«›®¯¶h°íèí.׳E°ëÁW¡ZÛýgºjÿhŠÝ€€Ó,0ªïçŽÐ¥Ýº¦t®²U¶x¬Þ–öúJËkÊs'k÷o'°EW×[j¢¿ðz}DÁkñŸ)§“z§vøç8ùvŸ½êƥɗš›ÍYh9‹õë× r#ãó8W¯Y«ikõþŒ7Þ[£Û‡Òµ¾\N‹ÖÖV!“C`¹a©¤—C)¨··ø’Ì×Tô–šÈ\Y€Yf óIYõùÓ€Å]˜?ÝZ#Ÿ@ <½£Ù/i«l­ôýôÕîG6ZÕ bã€ÓõŒÆ¿ðÄÎ/ý ¿ó§cùÆ3û¿mv§ã•_ sγŽs6ÜúŠe2ñ¬<“ÉÄã5ÏÆS—ŠÉT`DM•9þ–y}–š×ÁÕ¹}­¬D;ÜVÖAü8œ(™¢µ©:¸ýëLjö UkHŒlw–k6w’¬ †ævŠÇtsIÇú ž<”Lü¸l*d÷·éÜŠg¿vž2_…w§a”,»ËUžsSº†Åæ©Q¹è(ÂäŇ¼ WQzÊî®H ½fdbÎòÕåk>bs–š ëJWáHllûW¼NãÍ¡Š@IDAT¥Ìý|«€ê(Ÿ¹}uK¥ ÇÉW+Ê-4¼ÿç‰Þçp}rWSºâí9ÙI›éVŒÄš²u¸Êºü­ûâFÓÞ²òê3kG„'¯ÓXý—àåçí°´´¬¤åwÕ¹jÐtl ´ë;ÂÉ×á÷·Þ•‰ôø—ßS×Ͼ\ý48à5×Þ@ßО¦#ÝÝ‘†‘L«Ëa\¸v¥ÝU®;r‰Øt:>ìðÖÊ)p4Ã[VZSjR*Ÿl4CÂù}øzá&¬Ôe–)z}f95¦(ºæó€ÿôOÿÄ­áŸø„\äÅ_ü«_ýŠ|ǺæßýîwÿøÇW®ÌÿŒüô§?}÷»ßÓ:ã“zâÑG½ê*ñRP¬»OBfÚ=áß,~BåÚø´HL–ÄMMMjÁ*2˜¯Lo}ø¥l8þã:^š&»ôágåddt6vEè·ñÄZâ°ÈÉ@‰”qè´úon@¢ÑQj,y«¨˜ŠœâÕ-»3)Áƒ#¦éEçŠå¾¡Øò*qß)J™t"ã#îÈC"ò]®lݺuü vÖYgM½pT¸ž8¤¹j Ý)º8üÆ’{™¥4³ƒd^q¾R“yùøÁpàM+λcÿ®×JÊ—aD¢coU—ƒ°w³ç/Z€KZ€YN)rðÈ W.+NÍÓ¾bùä'?ùùÏ^>ðó°÷‡?üa%Ÿ42$èû�ъí@ƒ¯|å+“$vg*waZ›åhEGI÷þáX Ï™Êa§Ò½ï¹çžak×Ò@q5°½?öÃ×vÝaÓc©ì­¥Ë*ÜÿýÚ œei¹û¾KòæCqç]´£ýÝÂI–Ͻ±y¼jý=²”!dQKB4)FùÁ~P,“éÜsÏ}Ç;Þ!…É ¯¸â i2Ix¨ëµÆ(ަVF µi¡:¦ì{6oöôú\J‹Ó®]ØP«QQê|ÍÀRç¸M¹‚2¦Šªff®!ízŒ$ нQ#úM%vð5¿ÇRð/Š•µgÓÑÚk¾Üú*Ám_³¹Êgý¹Zƒ¹òØï^H¦pê¹Èa·ÝzÓš[.Ð 2-(¨Nöò·½…æ êðÝÆu(ø” 5mÝ® –ÍkÁÆËÖ^!Ç?ù7k!íŠò‰l%hÔ6'ž4õ¡Wî·{ˆG´¼Õ8ãŒ3´ÑW2±Þê’ÄȦ È&"ßTr¸vì9=e ½J¾ŠJwÍÎ’FåAŒØø¼Ñ»à°ÈÅÈíý·¬2ïZõ“Q§€ÉDÄzÒPbÀ|ùË_æ`Æ@°bw—ã†nØ´i“¹ãw¿û]ìI(BàsÓ<šU?1ïä¤o&u3q’ׄjyÄúÌvÓ¼T2²¢Ð:±ÃY¡§FlƒOeÉ š+Ôs‰ž v?ñãòhM„„›¡H´ŽƒÙ ÌmQŠˆÖÉ ¶‡Câý™ß 'lÔJ³R-PÞøýïïï'ÝŒ1㌴ž‰‘‚VO5—xÁ¦¥Ãs6ãºJ{g.öC~6P$Ï…!yUÓîÈ&‡ãñJsØAü8 ® áŽï WÍbý9É5ÀÃÏ,`ÏüyŠÞ•ŽSχhŽÊö‚Ñøè*ªæÔŽóÔrÊÓ½çSž×ÁÍW|&Z€)8£˜eêxüï.~·E)qjºå|*‡’û^90ÒZåûûÛÎÊ9æÍÔ‰Žyˆ£è0³üÛ½KˆèÇäÒœ)¦=³˜h^§`ðiÏËjœI…ü¦™äfiÇdúÜç>÷ÿðT(–ï¿x¬$?üá³ûûßÿž>«l%ƒƒõ·¿ýíl)×]wbóQà.<òÈ#gæ 7VèÞ¸oÏa"èÞ’»ð'¹Â’»À;TÔ¨Þ¤Îad«‹¥ã×ÈÔ7ÞqþWßvž¢,ÜwõrêsFëŽI'p|9w¥Š¸kê¹i@ÝŒ¦í®nF冂ÓÀ´bнa»Œ¼M+9çÆ"v˜I–É4ç pútt”4¨“M9¦¡LCÍSŽ’FUŸ½b–tÚÎÄðgwOÄð‘õ<©!ç­cwWÍ>ì‰:êqŠ‡Ô¡ TÈ:A—¨óƒ"]„fqJ…fƒœ¬¯åøqüs”4Ñ×Õÿ¶æbÏ©ÚH…s*Ü’YD T[TF*”k˜tØÚ9¡°L&©~ E<§0ä¨È2 ¢}B¯˜5ùBk€L°€½{÷öõõúÈxg¸Á®Z•g›ãÜâIî’ãþÔâ§X”º[åß©[£î *Ñ^}¡ît¢+Äd{HôJ¯O±Mô‚(l\¾5|Ý–þf-9¨m’ž¡ôS•‚ÁõÔÐ¥Õ/zÒº‘¤Â8zpcLj —Õ=ƒÓ<¶ þõþ¯¾ëS¶íÅ?1õ ¥;(ÆÖLhcN²¦Ä¨ô Ì®ÌcP§&‚_ž†[ªÓÂzÄŒ¾"&Jôñæ‡7C‚U'jpju·çãÙU^¹µ¿‘ÁÒ;ÄPÞ-p€YÊÎsêqsÁµ HlŽ ÑÑÑ!Ÿ*A…Æ/‡è:{‘Wœ×K\txy³ [GSÆå'—A€–äP wPÌ(ò%G_{íµ'žx´÷³Ÿý,Thà9™ÍùcûXÁìàPÈ“Pø0’SpAy!dÑ hÁíæá‡Mþַć\ʨ^`xЃƒWM¼õ—‡€ðhäc†ƒ­.b¾‚Å](¢>­¡³ð:òà!eK'¿ä­añs¦yò;Vås ´L¦cUÚi"½ 7ØÁ—þ6´ïgVó/ñ5Nÿ™Wæ×.[9ÁDÀ‹³¤õNlîÊÒŸÈI*ª´ý^Y™ºEyÚéK¨;ü[ñ{M‡ö£ÙigKó`Soë¶Èu¯õÔgc}ñþujpU)œhzW7¼âNг *ŒC½Í!\V_Ù#hzþ…v¿÷™÷ôþînþ±[ £v·w…ç@УZd¥¥ÆÛPá¢^Uê¤N¨NýŽÀ;0{$±¦Þðÿئ#‡pGÒÒ#Ìç Ô4\_QƒøšoÞØ]ÿTퟰë,[NÌAM·yk/s–­ OaôÀ?¥Ìž­ú“ë£#{™tíÚµÈMáÝïS~gËÇEtüêhºX2sÖ€e2¡:˜’yZ‡,ã>æsVªÕñTÐØ ¿œœ IEñµÄû•_Qˆ/d¥ Q€CK—œ'Á:illœxWd´¼OÅÜK $ͻƒ?2¾eZjÄH…ˆRG€)=)h5úî¿—’{k O‹Ç_Ï=noøLq¨ï—¢—)4žyLQ?ü 6kë»/)ý¹<”y5ŠQÏú@dÒ“›Þû?RF½¦eäk˜rÛ¦ÅìÒY-’Ìc‘†'à 5%Y¢×á Kè: 1%ÂÂ]–“œ%¿ n•T¥ -e†»Uó4i¡-¼4ËËTа[vâôù×y(O¢7çsîÙú·ØšÅ^] ”O]^/ TÐU³Ûr~ÌþpÅ!añS@á¢CªšÉr†¬æcÓÀ%—\B‡»ï¾ÛÜí¾ûîkhhl¥‘ÅyçGå_ÿõ_¿÷½ïQ•ÃÙ“á‹_ü"»æÇîO~"^. L8[˜eþdă^xÁÜ>µþàƒÒ¸lÙ2¶ÿþïÿ.$¨S{g‹Å]8NZÝ- X°4pL8­¸ n Ǥ£aL&nÉØK²÷U‹³] ¢Óp7‡"urâÒÝ2› —4ßÄ?© 3T§”ã*?ÓµVØ3ªÌ„¦)*Uï—»™ø þ­`O³‹tÃ/.d—£;ú*x_âuŒöíÜ:s¥w$´ûÁÙí/f/Y:[§ibÑ®gãþeš­ÙŽþXk­ÔdÛõ=Y‰÷½¨å™kZbp#J˜: 7‚Ѽ3𦡵Ëò9ÃÊ‘ ¾DeeeÀ™ô`M 8’Àä^Òà:+u»'1°ÞSw‰ÍQB»¯é¦ðèw^xe§ÏîνµKZ©¨€€ÔÍE*s ûuìÏr¯Vî:J¦¡Cš»¨: Ní5Ò±¾t}­÷õÄÈOýå2aˆ’±*EÔ€2™¤µ#GÆd¢¢L&ÙÈïóÏ.,L&¶˜Ll%¢!Ø*“ šÃ,&–˜ê5S¥Àd’Á°•É c¦ŽÇÚBeœ8Ö¾–ü)¬ù!穨ú<žov¥SæC(Èé§æÔ¼[|LËds¬„l2—=6ÿâg6äδbÝH¹ÙdÆ–%‹¸¹dSrO¼³/|E' åÆÄ—ðnÚT'Û!¸™Aµ¦‘_†ñQLÁ,hóÜ„ÆÐ#ší"¢)bóíG÷‡éŽNp)ó…få¬!«©xþ°r<³¶1ˆf£æùõ¯­ê<'TTTˆÐºSŠM’a§ÔjkkI{Â%&Îõ§¤b0ËCªU»K–ä÷ùv`ad@ Sùƒj1VÅÒ€¥K–Š«¸ XC&нå3€¤{ÃÈVtoBTó‰·>X’î G§~®U¼T¹*I÷^³f ËW¿úUµTFf 3Ý›wW^y%¦ÓC=Ý› rvÕEÒ½wíÚׇY¬i IN_kkë1ѽ ߯ªiŽ©"M&b7ÈòÜsÏSwKø”Õ@àìć8;aKÌÓùª°tbüÉFB,%l‰¯Ø¦2Âb12ÉàŽÿP“ÿh9bÁþÁdòºÅ·¦Àbb4Ù=kpDÙÓZLØlí s?Ó ZÇ[]"¾²jDÐ(Ч‘6²M7™2yÎæÊ¡&CÎ4ÉŒUï/xü"Î(=Ã2™Mº"3ˆYÍÇ©YL&¾w²|á _0;SóAÚ²E¤(™ZŽh2ÁaLâMíknY0“ Ø?û³?{ì±Ç¸5²0ó¬úi«h>êÏ3ÖBÄASiaùqΑòŒò+¥þϨê¥2<&p«e9WÍÔ¨–ž iOC…ƒª&KÙEò¯ÓY’¶@ëØ­+ô9‡å—ö´êZþ¡Îð¯6êß”o7ýqÚ'ú¶Uª[Õ„„Dë ÔÏ‘4ˆDátpˆòrêFc+ÑÜK0ç¬ÖÓcù£Ž2YÑÇ^§ÒP[‘o?º?¯n£ÞÉ(®GìÊs9÷JHyHrÅ)êpľ–À4À››ïÿûp0±: ºoKsà¯þ꯸X8Ü€ùû¿ÿûÏ|æ3×\sM 0áZ!ûâ:@&î·½ímCÉ],"ùÛþ†7¼¡««K¡uòÑèÅ_4÷â3pçw>óÌ3·ÝvíòÕ‘Y`þêÝ{þtkliÀÒ€¥i5 ¸ 棧ÝÛa>½9×¥É5ñ_þå_žzê)îÐsÊêxÊh tå{B»¾Ù3â#asÏ{¤m•–þ¥l}7¥Cû©¬®ÚmïNR+jFÙfClU™J…s–¶¥r}½õWe¢"ÕƒÏW–±—ÇÂÈi«› ×±8ë>F ¡/1¸@º»ú‚Ò3ÞI¥ x]ã°iaMIr•˜æÀþ¥G‰l—è‘1˜t[þËksø‰[g¤#šÍe$†uoòJÛñþWÙmmnèQùRÛ¼6ÜùH2jíÎüÃÃ’™5{OÜÍvïL¤#],ƆEgsš¯Èì}­£sÐ&Ó½÷Þ;»Éôä“O’bÏž=˜L0˜L9Dƒ¬`FL&—f1™þæoþ†.3™L—_~¹PšL¼;âŽ@㼚L Dgåd‡`.h˜jØ„j1VåÐùI¥o¦rŸœý¤xwz”’Œ05F‘q¦®÷ÿZ‹÷héÑÚ”Sï,1sâòp›gÉîx½G8~áö69‚ÄÆvåkøi®½ðDû¡i™9D”7nŽCOk‘} bÓ¨½޳~øa-Ù¯5¼ÙpŠ «+µ¹/èßÙ÷ÚÕ™j¹y[zëuxvƒO¯>ÿz½ï-ø²+›ö´\¬BÆ*]µ·æž~c&CñJœTf‰+–Ÿ ɯגit$¡íT<¨ £µ{ü×»ÞN w `4žU 6HŸ`8œ©)üà ñ†$!tøð»q†½ñÆ9*›ä¹âþûï'†÷ŸþéŸr/ûÑ~Ä åï|'^ÏïyÏ{°Êig~UÃÀµ×^Ë ?þ8¼<$ÍÎ_Ý¢{ÏŸn­‘- X°40‹fá.œtïâv–É4Ëgè”9ôãWºžÚ! Ž2ŽÃ[3Õt&mðŽ”Ç,>H^xáL2¡½?I‹¼ ÃîŒkdÌo\‚e€t? ÞýjÐÔ )Ñ.¦xÃmïaüදeS!|f‰òÆ.ÑÖ’£; 0;ÿò{ð±Ûù_ u¥+ßíð ÏÐËÆGïžQáuÇÚÆ;Îm b^”JŽîÄñV’ °@ ÁD z|ìuq"rý„áÃ)X™Lf´Ž.çb|CŽ%øä>¿¿oW¿0™Ô™ÊA6vUœN?üãëo¹7´û¿£½Ïè™TÛå7æ-È\P?z¡«Òö·R™©tg®ÑÆ3+bª]vÙef‡Õ+zèiEE‚bTÂ#ûúzòŽ~ÿøëí´È"Á2ê˜L2‰$h»­£RÒš¿(åÕ´NÖe<;ÕT'Ñ:Z~µéj/¨D:ò¶yä!sê:ŽvíÉ£R¾§GX†Ërñ’e»ÚŠ&2ØC‘djÝ¡(ö“¦J’–[7tøI†kËŒe“#›Ÿú"h‡ gÍT]¡LTªF.¨àö([@ e˜v˜}2ìfÓÐ:ÙÎjujS»X-EÔöVŠúPQ'«£“‰Ê­·æÉ,ØK²ÏĤÉ$C<°+M&`â°‹½D]ކÉD<{‰ 3b/QÁB€/¯”d BvÁdb—òÆ7¾‘–“‰v)vü[¬zFgpˆA0‹™B ÿ\Ö'DEü´L]¿\¾˜i"=`A|hõ‰ˆ¹Á²ùoñàº`½QâS‚ÃI÷Ì¢¤AÆóx–œë˜¶G '@¦õ ¦ý[0Ò~{þ+?ËäP²B³‰ˆuB Dg0rÏ–îÆ¬æšXḮhWéÄAU“W_˜’5í²§½Xh˜›W^£F¶*–æU’»€õøôÓO3‘¤{ÏëŒÖà ¯o<³#¨èvPqO E.²s8VÜ‘§Ž&': M"×0umVËé Ù¹ ¸A÷Æ6‘to "I÷ÆÓHÒ½ T݆8S$$ÝŒKÒ½aÕÈwH<¨@÷ƺ·y4c°§ {ÅUÒ½ÍGµ^ÀÎ2™ŽUï'|bŠRÄSã<ë0æ´æ´òY?oç ¹E¨øqÂdÒòÆL<9IA9¾ÑÈõžËf$"\kçVf:A5š˦5™¤U™M'ív&“ì2É[‰®Ê³eÄ:§-Mˆ¾tN.\ƒm"þ·,JWìæU:~Èüò»8­ŽM#“ˆªYFÔÇ#å™ÛÃáÐèèÈTK³ŒU·4P, ‰îß cÁý²X³Xãœ( ð{HjHù‹Äêëëi%×T‚àÏî®2ÈÁꦅÝW++串3ß=²ù_iñ»’­²ï?ÞµFV¢Ý¿[Uq`ÇÈJ9¾Ù*1¸Ù]}.bÑÎÇÓ¡‡?oeÉŽl©àQ)mSéh_ÓèÃk¼þ-±Õ4–ûfûm:Tí0Âç4…v休`ömÿª·áÚØá?d“4 ļ¤ñ&,Ïá¶(ñz0P)SMS4ŸÛŽÉ4Ö»}­oÌe·Δ|âMW©µ­¹ðÏ?ûD0i °xúœ3üq7‡¯îŧʺ®¼BèŠeÊÕoŸòÔT‚Û ¥ox¨.©—cIæìêÕâdeéŠ÷Ž$Îlòû=q YÙÿpðð†”­±. ¦ƒ!èw²þS˜L”bxR›L¿ýíoq—㣽X ±ÆY$—‘/ xu šFXÏcZN x¡ÒE~<l7mwóMaðN}ø9á7 fçnN§tWz„_X-9ˆ++1àTü¸/´Lê­~HKr{XS¶.Vû§*‚ 'Æ~NOöYñ{Í/ö¤ÎìÔÜTØ”Òzÿ‡#÷.Þê®Ð•Î Øm»L7:“šç€Mí:­â mäu#Òz~`¸4»?æ¨ó´RË¥Š€‰g†÷ïߟ_ÞXG‰K»`i7£Uš¦C~íÃ#]%Žp&›dg¤õ„ݽ#xvIf4Dlnî[·eÏn½Jœ¸£Dø­VuQr†ù¬¹ëÌò$ —œ-%`;àx8ù¾M…2”T^8ÖÆ.¸½x§ÕÜÜÌ.ÃÒwÚ0æ­º¥"j@r@ùì}úÓŸ†Ùaѽ‹¨ÞÅ0TB¾ Ï-e*-`1¬p׊ ÆÀõ~pLY_à˜Ù$о°Àk°¦³4°˜ k8úé-“éèuuÒIÁ-¼÷Ç,û/ÏÜëkj—×ÑŸE|`cìГÈí~°ôŒwMÛwvdd-Úý8ùÀìÀÎâi[6!¼b3ÑÞä¦Ä€Sñã¾½vÒðc;¾Mr i29ÛÿRzð!!ÃÆ1&ÿÒ‘îlT‹Rhù—åÙ¹£b“‰ „vÊ;Ï'ʽ ×¼Ó3ÁdÊ{“ZéëÝÚùMë¼7Æ­Ë&£Û¾â,i¶¹Ê2®¦ŠµoGÒ\pTd¤ ÈlI¾öÚkRL¬(±_]ÓyŽ@ ó ïç`ÏžRg4¥§0™²i[Üðlió¦ö„‡¡o„´hèÙç²—œu³P¦³4|àç¾æ[ÜUŒ1Q‚;¾Z‡†ÝÎ,Œ_y3+¼@`iI¾Øßë^`[†ÏiÍGÙ¿Ÿ#ÃÃCš­ËÊ¿ú¯åV‹e>1U³4P$ ¼ûÝïf$sº€S†¯Q$ ÄÃȰk¬àUñc2ÀŽ“ç‰ŸJ@¨™»Ù¤ÇD(Ã×®ØežJŒtXsLê®` RÁŽ…ÖɆDýŸ¹{¿O´NlKÎÔ31-1 ¹Å»¨™ŠïæákÓ£ûË’» Ïe3INm×Ç6ŠÛù[=†3ÀtžLçT1ZxgFŽ;‰Ù ENJÊÔJÌ­rj½½½"È`jl‰ç@µ«Ë Ë”f &›§¼¡Œ?£Ù]vAÙ¦Hejåh£D»É€äqsË`X¶2ý(÷AàÙ]zÈÊÏô”[W™Ï ëácvRoÖva4`qFÏ'p–Ë–Wÿ×órŠp×3ÓÔç66w9ºzIÙL2EiÿøÏüä/¶HÖ!õ¢ŒyLƒÔ” ‹I–|ÓÙãUëïi¡ÓŠ»PÀÎ2™NáoF¼_)óÔ_ï}>5¶ç˜»¾èN.20¤aêÍØÍ®@æƒTœ `—ÅXÒʲÉQ›[0¹f/æT° ­“]|«>Ùþï¼½—h»ò#„¸7˘©±}•§ã o xo˜E¸àP<§ ̈H‹'•ª=¶·@Fî^pÁ6lÀP¡€ÙaÆ@=‡dê êdçxõÕW1D±L°O`ˆèéia2U:;!$Fv8ÕÒ÷Ó%iÃîväM&©Ìü î.ì$÷‘úã@k½ë¬K¯e.‚J~"õ ¦ÞTåêJ#é÷DÆ[ŽR</ë@Á³ K l·¶–æCŸøÄ'ÞþöBÔ{>&²Æ\x Àªã…Œ$"C+Óˆlˆw§üíšCw9—QvŽëÔ£¹ßj{™–ÉèŽ@á»i—åY’OUa:Ê/¹$ýÉ FgT·Ûã u”YÑ:Žeç꣯€Ö áªkÄöE§"Ãn‡aGZ‰ÜDäãLïtÝycåvçγS" uª®2i€ÖäAºÐ®Y½JëÛ£Åsñét[uÀVÙpþë›^Ч]N[ "•)к\] (+\# Z8v¹5sé)ÔåK,*@u°í¦~–#@Éd™¢¤¤¤D6Z[K £‹»°0z>±³¨ü¼1Øi‡~DÔÒ&¿^Ztœ#uûBÙ¡„c•£÷?žMäê¦ÆÀôöôÔ6ð„–<,(s¡-ºÍmT^IõËÏuwçbüã“_¸½MN*·¼Ë¬Ò‰§³úÀÀH¼öü•ðíÊDäV8v¹m~£‡¶k#/0¸Þ÷¿Zý]†«½M I#Xž8»x–Axw$t±¦Ûê[5©Šš›1úÁ u®¦ÃÙæH4dËqå8ÔÝ—ìÖ\íÎï{½¾ÌðKº~+—åƒÓÉÔ"ÜkÚÚÚ$yXv%GhÊy¡q"!±9¶åååøÏr dÌgJ]ÅF䦆¢ ¬]KsЀÅ]˜ƒÒ¬.–, X°4pD ðôX„‚ÉÄSõ‡?üáxàÉ'ŸTÈB†¶†X Ðížú+æ€Öɵ۽5³£u„¨­C˜¨j‰¡×©¢{mü»ÎÈ®;7lúgZ˜5„÷þ·ÍᱟK½x9Öÿ:) ç2oiO mÂÇ“mª}tÛ×ìZriùÐꆑåË—ËÇúž‘ä@Ô¾<ÓõÙG·Ï’=ëg…©HW&9 -Úý[9ì?>ºý©}¤QÿøC›ÕD²qÀSRns–F™xJ;ÔÓ¿5$À)‚Z „‰÷éüµ‘ŽïÔÅDƒhll4§hË[ØPáè±Å÷íúÎÈ`Ÿ–MVëBW8z¯t廓ƒñ:Šõ>_ë:ÈBÑ fv‡öt ¾²;Ó³þ‹Ðý‚»¿—Ú”Ü0ðü_Æ:I…ö%ÃI {Íõ7CVtöá,À wìØAw˜}Ÿ£­s÷~LäååÝË–-ƒ«²&W Nм«b#réù˜YuKG¯ò¯Øñ©¦ËG>ò¶Dà:úî–äi¢€Ä‘1VzYª³æ¥u‰ *Çut¢B€9U2“ .Õ<{Eï@ ¢Õ‰óè^èu¸ Ĭ4[`Ï  zO[ŒÑZ6®9š ~_„¤˜Dëêüâåkרp&UEºŽ” ¬éјËç½G•˜¬äŽ Ä7±.8:i71 )øëâŸA¤!æv™bDTMºòe÷JUš!KâlK2¥2½‹‡ÆPvâÈ.Ñ:`;1é•|>î>¨H½õY“2bŠ ×ÒÜìh]%(/ºüÌ0žÕ\d ðáÿã?þc¶§äk¸ o{ÛÛx°nÝ:âÙQ/²ú¬áN? ÀXàä§Ÿûõö¾Ü9gMÿË;¿õÜx’¢9bu´4`i`²ŠØY&Ód­Z{Ók`ãÆÀ=/¼ð‚Lü§„TT5ZRÁݪ½ B€9Õ’Nä µt•øàkFõzžÃÛXŒ3±ÂÀù¼*Â1³Þ'¯Ã‘ì`$yekn^†M¦â!•lA _}H‘’øB 8?7§¶¶ÑOÔ…¾€›s÷ ÙΖ)Ø-!ܳ…ŠÍ-/÷¬“JA1rǼ2@n¼æ’‰éé1ÙOëÄÚË¡-\‚´&” ÀÜ‘g­te¤ö†ÏÃê:¼~|Ô-î Qþ)9©b@bX˜d¢ƒÑßïìÿàÅ+œc-tßÕ~yÿð‚-øXWhÉ[8I5P—ØiM&r¤J±–=‹2ñ!à*ƒìFÖæÊ[fùlbDwøt{a,s'oœ+y²‡E¾QÕp5-ˆªÌ”T؃6À`ÔÌHåMÍ€”ÖïðÖ² `¦Dÿz‚îQ‡”'Ñ+µhhmj.*x†r“契Óf¸¼Î†¥-•¾ŒtVeÁ®ìÞ”¼ŠWÿfÑŽ;Ìæèi±nv²†¶Ç÷Tšƒ_/q¹tG¥8/ë[p G‡¤ohm¹6߇»IËûmûÿͰ¹¢±÷žÆ¦Vuˆ kp¸ý¼4 »¯d—g¶\>¾Âòº(a®+·îÂ\)$ù@N¤HdÙ}ß¾}¼aâwÀœ.I^˪aêxb#ªq¬ŠÔ€ünRçrÌ¢,ÔŽÛçŸ~É“ôä.àÇ͇º÷G?úQèÞ–)t’^ÍŰlÅÀƒ‡’°0 K¦§yõµ0S[³XX ðÈwÏ=÷<ôÐC®¾äÿÃÔA€¤?;^}Ý KG!5ŽˆþÖÿrÐseuM©¹Œ`4£»RÁ]¡]ß•2([rÄéoÕmк’¥whÙ”«J V²Ô\ø÷{7><®ˆïâýü ?L¦ºŠÒŒûm§¯¾Ìûÿ½á‹r.''û!®W…}×’Bt×åç|,ÑÿJ6qV:JóϦï<£wUúÕá¸óê%PÕȯ:Q0±*á8x\vâb·Ÿu6Î¤Ê‡×æ¹J3™X3Åû íûY:t€AÓ™ì^ÿ©Ô ~¹¢Äíð_cWÅê%{»úúzºô›.\{·š] ¾|¿ÍîC†Í»rÕÙêÖàñ•'£ñê{*ëëöFzSéðذ#3PpGÆZ¯—ÖÁ?2lH˜=Dõæ½lä'R„‰õïöý4í¦7ôÊýŽÒ6 6•IPŠaDÁ4•ë|\±Õ8VEjà´5™ÞûÞ÷B•ý»¿û;ô6Ån}$Na ð›ÌËù»=Óiòeì€r”h~Ä ¶I¨ŽCâ‘Û `‡™­^-èqüñZF’—E]–²s“£FIçÒŸ–Íz&lè.™P¡îDˆ·lÚðO uHBU®n»·D²ó’œú/~ÛYåK¿åœªŸ¿>ô¿[ïöÃwÎÒîÕ†ûÌŒfÝiŒëäbܰZ½Ii®ª‰C¹´?¦Ì?†tË5œzj¤,ù²¦MÜ£E/W•1¹»hÌ¡uü%¥<½…mÒVáâá15¬y¯kjkݺ5œÕP JÅ®g"†£,œpg  É4´kÑ9WäxÁ†òõÐëšv—tJ•W„ËÁµ0¿æáŽ#½˜%ÄÍÌŽ‹Èýˆ7I’ÃÎÀ|0ä–ÑZÌ'IvŒ@1ÃI<OlDy.Ö È| DT(êi«‹»pÚ^úy:qÁ80TÇø ‰Ö GU~á34çÒ8®îsž×êhià(5pÒÑx–*BÁdúÜç>'-%Ëd*‚B÷Y˜TÒ‰2çA9íbc‡ž4·Kf–DëhÇPÁè)£^‘ÙÀÖák´{*ã¹v²c½c PZaËQÒd‹Üzj/ɺÀà\«øZ'Û³É l²L:Ì.ì0òÃR1&£u´`È­¸à`8Ù êMoz˜Ô˱ºÚRï;/–Ørá¤à1†¤½'åu›“Pz¾¦›ZG;qâήŒçÐ:-+ô6Âÿ”ñE¹òrÐ:é–k÷ˆð=ŽÑßËaÕvÚx­C&6“4™z9 ÇLlä«Ï¿ÖQÒ5je‚<9Z65FÎP:Éêh7U5‹\ƒ·¬1£ûSCëÉÈÑ;,FN¦µ¨QCæ>ê===Jž¾XG\5|‰MG¥"» ûJzï†üONÒZG…ÇÆî…Ö)#J±,ó#_lDµ<«¢L¦ÓSŸúÔ§ø¶B¤bË×íôT‚uÖ³k@B`Èpëa+‰uŠ^G Ðì#Ls”\¨¹bhöÜ ¤¦TÇ?Þïxê§vᎃs(l>p(É1GFzÅ‚ÖQ¯ÌEf˜Úñ¨Z¥³‹vA­c›Ñ \0”d»Ç ÑËž#.a®¬ƒ¿¹"Ñ·hÒv`´º#(HmǤ( r ÙÄ ‡2®Bš¹t€öZHèÇ®p›ä}«w¹…äa;ê¼'ž#i[ Ѳ0¨ýRÌÚQò+Z·øé sPÜ…ßþö·Ý{ª³ºL«û®^þáëÛクôEod¢¡pÜnQ&çàÖJ÷w]¾ôϯ^öÙ7M¢}Ö€–¦ÕÜY¦=jn<éßÅìPe2™?V}Z ÈgqILfvKk„ÈÄÎeŸÏM;޹ÑQ’÷ Â3V]6›â(™(øGÅáÏ[æ.@H gçŸ>Ïô¸fHûmI©ø.<øR'Ûšãx³4a4OM]ž£<ß|¤¤‰™w¹‰r0š³å'9Ë–IqØ‹T¶lÙòúë¯Ë ß‘¸¾{ °w°œvS¨E¹†dDäµÐ<…*’†¨œ’W8Ô¹| ­«)9º“]V%@¥/çMFåÒK/EÏçw[·ÆÞsmißg´¾ÔùG«*‡=7”–Šà ÆA÷L]ùñ=!¬G=lpŹÅË£ ¢è§iíÎYùúp ¾wS¼ï¾û¾ô¥/ѰE™*p²·¼×â.œì—pñ­ÿÜæò7ŒêY˜ÕÁ­ xó·’9Ìx劚‹–å)sènu±4pœà~Ä<ç8‹­û±¿Ržá xNRGàà€¨]«²85`d‚•fä}…d01ÑÊÎ|ïØÎÿrB^Ë]î «f¼²ú._Tpë ŃXdÎâñZâAÊAiùKz41²­¤ñ ÅÆG#H×ÑÀYPS+¥+ÞÜñ-"¯•®¸75Šk­-é!ˆÜ:â©ô-’HÅ3 Iðl/, 9ږͯ¦ÒÙvW¥+»?]n/«}ËvßU}rxxèã6ð&ó¼Û8”_ªaøšoTÁûˆ¦„ùõ“%cE`x`®”–-÷Ö_ )ÏYÖžÒˆ©7Q²xà&³¾\ºÀ‰VBµ¿mxãÿ£«n½+jwŒ„Û?Ÿ°¢S¼’%™Ñ ‹`”•5‚ù.‹Þý wUÖ¨Ev7V5h5gGÚÎ 6öü_ÍY¥ÛýºÃ_ž—´Þpé°~.·xTíryÝÙ`‚ûpâP÷þAïê+¹î€nz¼óP:½ÌoôkçŸK‹Á\êŠPb“”aêhã“@‘—ûˆ¼”âŠÆb÷95F–#H@–…rýÃDÛ4òËÀß»w¯"ûK1k{œ˜òÝ™~¼o~ó›8GÿŸÿóx™ÇÓàôB'y+Ü QL®è'ù)YË·4`iÀÒÀÉ£ù‚P½Á=š…›!¬£‘?!2Åì,“é„\¼ã™nTxÿC`O â*k/À×ÔÈF:>ºõ?ä.22¡n¡´8JóÜ.%LÅp”O;ph7xDëT(kHíZÃÂÛÔ<Ú´C™d=°JX/*0\Íÿ1¼ñ³º0™ìÏ<ýµt],ÅÌ”r‰ÖÁ°‹u=N¹°Tl†­Ê[×èIÞ|³°’ä‰hAÌ¢f)X›¿ýÞðÞG»Ç?)ßOŒRIU3›L‚q–;Óþñ`FŒMd6wþ岕9ÖF®>ºå?#[Y F]bxK[K‹«‘^7²é•L¬·ï¹8<µjºÓïL…Ï)×úÆ\`Æ0µ×çw¤0™léPÇöMýkîÄbÁ\Aá?ËË´açÅg7ä’ÔaZNsxãÞÜüâãA%©K¥±‹8h)M™ßdâðÜֱ˴}¥ì5<²×äh)»ž}ùÔÞ$©ï@V`s<¼®\¹’4Áð/ÈÍ÷ØcÉ 9…µ=~ œ¶&æúå—_Nb>tø½ï}ÀŽ»µØÿ'jþFŽ‘ü)2€sì3󤿤æ fȲر™„=‰ú©®¢‘CS(™#VÈ ‹Œák#Ū¨ÓÜ©ž©}%L ŽÆë“¡þa^Ǹì©Õ #/®E'ê~1µ£>ò¢y£êz%c| 4NF¦>¼vM‰EʈhXÆ4`üiáì®Ñúè† yyæ™g@(ª«ÙK8õýœ©q˜±–WoÝAÕå(+0ÑLJa;|VZ§U!ª[£¬Âœð(‰áBS6¬@ëÔÚSq52DýÐ(ò-&õåMX÷wÓÄ%wð¢6ugeÐZĵ‚x¦³8TpÊãÆ9ÕõX “‰{qØ:–|ü‹I­]‚Åt¼`ó^BÌ£DÔ¯ŒbV uÙ¬S¯ Öc±ãÿË€jƧ‹Š[fæ©ßYÎþ|Ñl‹!êví+ :æ˜W‚´\ÊÊUQÐ7}:qÙQ O²à@DÆ—Ö0¾´‚™ÛLLHhº h’~ô£ÅE øø„pÎ0ÉôÀ8{‡tß~f/×nÿ NE²]9#ýþªòs3)™8Ã{±Ñ:ïÿøÿ`‘ðç?ÿùž{î9ÊæM `—™Îü‘¤…)E MpýfΚ6Ò‡í¸'£M5 g(-`µ Ï“òagˆv'b*覣Um›¸T“¸–50"V6ýBšQœ™v·æ‰È$¹K‘"ñ­EÿN·*Yuyúô"“8ìC1°O«‚cdµ›E÷Ã4«ª ñH7g°‘Šôžò̦Ac’~ÛXJ-¯ì˜WÜÍ%R"“I çe[í+5Ñ`‰E9÷ÐÄÊZÃ$"NëâÁv«1*"PÒЯ«+ Èñ"b#,ŽF'ó~”ÞHc›¹ÍôÀzà¶Ûn£_hæÕµ×^ (L„ðÉOªŠ·™p*{€—*6‰MóOn›tÖ—´‡-P)Æð…7† e(Þ¦Š6j fo@ÞÆ¼0%RQ¡nZH€XÎ2’[vD¨ÕiÒ%…8A¶úË ø5·´*¨ †æß`Žjh{Œk~øECóo ]ëSz· þ}8qSuœKŽÇ7C"2oå]Bóïêÿ¼ªLø 5‘ŽZCü2"œÒÓίq¼¶Ø½ÁÐò`?Ûp«+áþͤ³Zq/Qs]³’¹ç÷“¥þK–\¯XSŽDó×fç¿q$Zßìö4V:ß–º8 MÀ,v\ˆ:þ óâà㓪ܤhÕ•»ãr¸„d%«ûA\&Kß§¦³r(¼\¸æ+)19÷[ê-¡äZ.šÁiÒVQêhI9 ‹Ì®)ø‹ÃØg¶Øl–diyµ<_w¬¤)Ë s0S‚À¸3Cød0Fl³aæ0O@¹ÕÐ7@=±‡•gd^‡BÀçF\€ž ­ ™³v¶¬ÚæLÈôÀõLÔ½3º Ô£6Ó/ïS¿#rÎì½/쟦.™˜â=0µÔúÅìqö¹&2i|X3¿ãŽ;î¿ÿ~-19=uâfŽŠ0Ò´dUñìþY"êS•βޫ5³MÌc¾£5ÏV´‚óFÉ µ½]*ÍÞÓQ~ P”¸]sx”óìùOhvb ùꫪude¥° ´¼doþÓÑæ fc{ôUUfv–¬É®ù¸Ð ¼fÏù;_ýcú*Ò‚eh2BöX>OðEkþbWÕ{„8Ôþf¸w·!³¸k"½{ÑŒú›,®ië®ûÎoó4ßxo¿; ±iz‹p!‡ájÂtµ¢ìUE¦PÑûz»ÍâÙÝ’³ð3ÁV+W"¸É“£-Э‹ ul²æÎ§g¤j¹òÞ}¿¢mÎÊ«l…UëŸß—g ZÚçäÖ÷zgQ×u×]·qãF$ Vr«}u£¢h ø”™ß‹ª²¶7ô‰¹åN³êÓ»?œÿ-éF±AΞûa2@Á\3Þ‹ZŸ½`ƒKJÉ%÷Ë£eϾ[4Å,×’5£8úzÔÓ`5Ùç%w&óÍ;º—-.‹)6kÎBy ma #‘ÞàÑÚs¶üű@=ŸŸ_ t?Ýaºhõº÷¹0·ÇZ³¬ñ Ç¡Öèü¤¹X´&e[#¤äîê˜ ÷Ùqž7gÁ¡C‡p~‡U,ÒB”Ãè[”ßà;˪N‰ýšù/ÓcévÉšÂÁhPX|,dÊŒº@F„%b05~ï¤ ÇŠN™ÆIí–ˆ¦•|£åŠ)«FÔB–É¡½¸C.µÔ Ã;Q£& |‡W®Æa`$­Š†ÞJêükůj£§^üû•‚uüoh{B‰v'U7%î7Ä}Isö¡¢¥¦w]§øjÕ‚x¦+nÙÛÙª\%‹@9‹cÛ]VôÒJ<`èæ5KõI— †£Ojë’¹«þ ÉÒ›%ù÷[ŽÖ…s¼ËbÇT­KQZ’Ê¢¹sçö—‹•`³Ä ­$Ën•øŒ¼ãJvý”©ÿã q’°à"¢?¨èaš½oµ³2{FMÎóðIK*ÎEy[RØŸ)™{ƒð’µ"qmȰ`#V!á\UàWö{ï€çˆøj3zº” Àdz& zX|D@À-¥Ø@bÎdö¤‡3׉êt˜¨{33êÞÕ«>ãï‚,õ³u¤WÕ _X‘;~†£ç‹'ê:|5¥ê—:2=é1÷ÀÄv‘iÌ0á­ƒ-`¸[¨c‹:,¸ÍÞ79O«QCå´Aë¸úÑr³föKB†nYš6Ì^°KÄüáŽMJÜ«˜,œÐ œI‘ÀÑ ÃvФU!¥ô×`ËK`F¤DzU=hªñîØyk Rf0Ú°ÒLƃQïp=ñ¼™Þu]¸«ÿ,4ÎvI²æ²¾/¹Š%¾=°ÙmseeeÓ]tò¾ upè;ð;­7—ñGâÀàž÷ I¼ÿµúÆx~Øe[lÙà «ÚmŠÂß%«VõËZT¡{÷>àž‡\:Cgj¤«0.õ‚BŠAÉ=´.›§£:³J¢fwÜúÊïU]¹HÊ4ܵ$›ÿƒ“£¢¿^ÍjC‹¸fÜÀŸÆ\ @0»|eßæÍ*>Û_—VgyKsÂÓ‹ÊÛÂÇçRÒQ$bÍË›°:)' kƒPí6÷,(jÊvº£žZúÁhÉÒjÉD2=0†àýƒì½ÿ~QÞä=oÞ ¿‹1ðÌ™´NAÓ&„í@&zæLƒ4r5T(-kT·©“Çñ—wô…ã>¥ ÒqÜhTÕ§ëfƒª-§Ë:–!ÿ{©Tá"Ýó‹Ú’U×Ïïj3ø½â„ÔOâñ¬“ŒÑBJTåÙ”Øà%U5@-H“´Û!"I“Káot—¿¦P™ké*Wh9¡žánQOÑM¢”à냊@¤~àFdîÆ—Z_Û´[)Ι8i%Žº%Ÿø×¢^G«äVé(¨ÅG¬:CéÑô@Fwa4½”¡9õ=°¤2÷†eOnkYZ™sÛJu já×þ¼Kêúþ-Kò]ƒ¸P85-ÉÔ’é©ÞØeD¦3v$£}´MÓýJ}Â[?.$é²'ÒjÇ§Ž¡fô3ä)ÂþVO0±©f¢ÇHgàqg4YTñé¸vÚ1Šcÿë{cIyWÞ²ãZrþÆîH_:*E6ö=¨Þ€ê!bfQ–Ò{¬âÿWµŽ…xj€ŽÝ ù¿ÑâFc”{ñ(="S¡Ú{gC&+8¦Z{JdX6Móeø*‚ÁÀ‘Î#ÈáF%êâå3r¥= ëK]tÑEœ)¤$ú/ÈEçwx ‡Ì²ù<ÛUŸmïßjÓ÷ƒžC&žéÑ÷ÀŸþô§o¼QOR(€¾ J ÕÕÕüvPÌ‘zn½õÖGy„i<.ÐG_ÍÙד|4vJÀYxb`»Q>÷ˆ§+¢½". ŶŒ—ÆE5 ?Ám5÷ö£8Š„¦°vàr2­Á·w_K3ÊâÔ÷ô…,ó+§Iɲ› ‡¥ÄùÎÆ’æ”]ªdä¬ÐšÔO™³ÜàápÕnn9×UŸ{$<7Ç·¥7ê닞m(»iF»WÅ_§ÒpÈÃÉ„®,ýÚ³ ›û––ûæ ”—4»µ/d²\UÇžÀX¦YCó”í=ᣉµór÷;-Üèñ‘N,àt uTjè~UÉ?þ &…Îç{¤ «4Œ¹„+Xôïe@7QÄãÄÏœ‘e20Çô€A.¦ÐäÒ~ÅòC›cV vÇgbnG?!õÌ3ñL ÓÝ…a:'“uz{à†¥eüâ6ZWSšUÛæ»çÑzý‰SÜ’Lu™˜ê=p|™;ž'ɈLã齉-kÉ™õ€'f›\åëBío¡€F<–sÂâx˜z1§&—¬ùóç $#”zwÖìÎÊ«]f[ÏŽÿÜÑ£uo¼ñ†èe°1>gÎ)2ܹuëAžKÕ­‹ùÛ»û¬çÍîÏuÏûûÞÿ®D½‰xÔìš.E¸bÆ«Å%ÂÙ¬hJo¤=ã‘È\SÏ«½‘D¦õ‡ ?´Pí@¬k)ˆímŸáo?{ÙœÏý~놺®YªH¢³âR}ñC')¹ ÿ?}Öøã›7oÖNº˜k>Ú×[³° .Ëç¬>øc (Í?çœv•¾R Õx¸×ì,Ñ'JWtwwŒ•œFŠ»¨„bñmÙ&UøqM¿VÑwKÊÕW_OD&ìÑ€ê$"†!J•ž/&ÕèÖéûA_]&žéÑ÷ÀwÞÉ[±|œ8`;Oo½õU ăç/ÌñªªªÐB_õµ×^}«ÎMJ< ê\4­GèXí=dB€­+' `ó(æ´z2å˜1•Á!è ˆ“E¸hÐÒ‡R´@ÄtÜG€]¦ P‰¢_,¦”YØšP_àŽêÿ9zýž¶œ?qAi_ßˌ {›Ï+MU…òrÊÔÐþÅ»CáÔT£Õ`¯Lz6Ï%ËnKR¼à)xíS¬E‰é'¼óqf£7ÚÕ¯UcŸa}gÏsûâýÔeŠîØTM£ºØ-Æo^3ãíFo"ë“ J\êçg@·75U¡–>q· ubÛ~èõ:%‘´×†ÞeMX±Éµ²ÞLyÎ¥ûÞ¹·°û¥Îú-å7|O\òYÑ0VhiœöÓ–t>p‚ØêÉ ãYlázF€F0ï1ÖžàO‹g"™˜¨Èè.LTOfø ß{[½›zúz{¯Ï žùGCÔ”æØ ÿD™ÜLdz`ø˜À.#2 ß˧27«ú&}uxŽÿc5VÌr÷œˆª™ø†=Áq8N,ØÞWû?bN«çÓ·ÿ7ø2#EŒCÌÒd3É¢ ½È„-§ž‰gÁ ®„ߺٮ-ƒÏh/6⃷÷©B߸"¤±Î¶µýFMÉ©y°û¦m]âŸ÷œ¦íÿ[¨¿[—2}3MÒª¾ƒŒt¼4Y-®`süç‰%)OîÙÅ©¸&GYþНÂJ bợU™õ%_ël}bklë×np)ÇÍB5â#‹é§\þÚþö\÷—N\SOLwʱ^™­{Ø[ŸÞÙÎÁ¹û×:MÎ .¸€ã, &U)¬úKùmwomyçü»HŒ6?Ù»ó^©HZ(qÌc;—¶x¹ÎÕµµµ{}Ó4Ã[¡¨ô}ï{4 "êÈÀÀ¯¬e…F®rè­>%ÏôÀzàK_úz šH?R,^Júâ8^­#…ë믿®ÏÊÄGìðAÄx)¥é@IY2Qg“·¯ ÉyѰ^hÚ¡Ò ïnÄVA h• 1*]8AcôåÝ:B[»c`WðО6‡t¡Þ£ }ê¾Q²ñ~ÃôOJ)%pÈlL&|XÅ*(˜ëÎWÅ´õQU¡ /xaõë™DÉeó£N–ôû“•×uÒhÞÈ_lïšž­X{Œ±xüküÚ•Ç7Ÿúkö¿Oäfßõ½ÍÌ]Y™U‘sªÄ—\yy¹4³£Ëë²Æô.é人:öù$kW«ÏªÄ¦ØíöíúaÞ²{DuŽ2à©xÓWÎ,Ò–Lì4"‚Ö¡ì*É8ê 4f4TÇJmèÓˆ3·£ì~P¢E =!ò¦,Ðí† Àa¡áh çŸÈ~ݺu¿úÕ¯†)5%²2º Sb˜¦z#ï{éÀöê4äø·¶ïÆÖuÂUçðþð§ö£ñUeFÝ.ØI÷ÜWUý~c¦¸”ü?ëŽo§4£LLœó=01€]Fd:3'Ò¡vVS›‰%[{N°[”k¾áð&éÙkÍ›Z'Yb/)q²­ã‡qîšIú˜¯‚Ö%cþý½s–ä¼Å¨¡ÖW’H8Šª´°²:Ï]à §þ=?´qÖ@’§vÛaî…êü¦öƒÝªuRç–ï.ÿg"„Hï~¼×E#½,@ㆨg¯bvaŠS?°'ž4æ? §â㡾ýÿ›=÷#©rÇœ›,»c%óLmÕÙ†·{Ѹò…‡¶ýè¶eB3ÊkcWź÷}÷ü’5³ ¦¨<•!%g*³fÍ’J›Z:²ì†¸9±„%5ÝŽ½ªdmiì1"2TÏ€;š{—(÷ÒK¾zn98îò7>íš~ÜnK¤… JqÌÖì$®]­ãœeFhZ®D„FÑlÞu$§¤|^‡ômiô™ÛÑôÀ¹,2}æ3Ÿù¾ 7{œh4ý6‹9åÇ{l`–¤|ï{ßKËTw,fü·“ZËd0ç…2¸0¢è”V ކš1Ú!Ó:J#†JId!h4#Z©YZŠøAÓ& üÑ £‚ò¢“sH¡q'§Âv º“$ ƒÅh‰%ã<›?èï>vú­=Þ’ñ™1“Ê7Î3Ç“±ˆZ\A‘-;Ú– UNœ“ˆÆÚ;ÃMÜh OUŒž€-aMP["®>l{oŸæ .E8Âå—Ûý]Á~òùÝçw+Óß/M×CLãrRU¤•x‹‹Rž…Dµ\uàX~˜@Ié[­ºÆŽèœ„zdx<åI#ð±w%£Ï4у¼ ¶ô+p­ö3bm¸‰HŠ´JKOk$4ÒÒ™T4Œ/&5ÊH›@xƒn Å6­–ñÜž‚*ÆÓ¼e5­Fz Œž£~ÔÓŒšµR8ëH;ãå_"#{vÝm¬3‘Iê ;­{Ïâ2_o竇£Àa+¦çUä"@MLØt¨û¿_UeDƒÍ±Þíß¿eéØX_6¯¸<Ǿ¿Ý¿¤Â=£p„ïÑØª˜Rÿôȶހúå ôsBZ˜a’é‰ì2"ÓøgÒd,Ô:–@Ôd1&¢ cK«'ߎå¢úÖ‚Ù{ÄÄA¥©à=Òﱩç– šFž)Øh>–ž :OdrŒ¼ÿÿ´*Òrå– sc\•jÔã“,Û£ñ /Ѝ’Òzèjo ‡g©ç¸™b,å¥[ID„9Ö, rˆL>¿Ï{¬1¦`ƒ9ÐgHÄøýNÆ ˜ƒÆ£RœáIÍá A­0û‚=­Ç ²j§®˜bêõ[ã®xÒ€¤¡¾¸Ûº=£yi×{_oëàX¾Txrs=E.Ë]kÅnJ£JœTé…ܳ æY¸Šô¢Šº „¢”*Zuu-þâÇ7ñOu¨'"“Œ~ÒYcK¡K8¸† Æ­ÁD;…J4h4™Ø1bóFS‘Couß;6ÅÀ­ê*[ùOfE{´Ÿ»8zÅ7”1¿½K¾D ¼”[wPBqW§¥| >^¢Å‰I,eù,ŠV`ii© wú"Â\KåìÒèÇ95UŒ¡aCýP­£øÕ0.ô°–’V Àãj@ÒÙyÿûß/ñ+¯¼òàÁƒ¼ÆÓŠL­ÛŒîÂÔ¯©ØÚWtÐìÏ^:kYUû…EŽÇ·´¼v ãçO›¨Çùå‡`å G–çl;ÜõJ­ZãɆmM½oÖwÖwøÖÕß°´_íúd™œzO0*hÕ~N¸ºâ©yŠL-ôËùÄgIÓ÷¦s¦Æ÷Äv‘i˜Ù0š¬IZ¨¡üf­ ¯°(^Y“3X-35­¨¼…WCéK.‰¦Ô¬\3ÞkÍÕ˜!Û.‚éÊ0O4Xƒó£jkIÆ-NÃQƒ!ÆbÍ.Ah1yLPòÏVüGXü)ù·:c¯Jùª¢Ü.ôÛ¯uÿäöóö4¸“†˜Ù¤”Í»ÁV¤oäÖˆ·'™ŒÍ.£Éis+3Ný²ª¡™Ù½­%Ü[Ënº5»\oï ñ^tQ}eî ÄbI#ªxøôºAš>DÒ®O ÙírZeæùÝm½ÓH*GâÙkç QHE»&Vgs{Ó¦MÈ6Ë–-Ãñv0îE(òÔ b3fÌÐ$4´Ü×?mGd2›¬sK²J–~‘©§/WQO¨hSœY¹‹?)ƳÒx$[d0à ±e¥Î©¯dIûåAÂ9·?+ôC¨Ñ·Z>b8p¿Édtf®;ï–ìHãÌDô»ŸP]ݹœê.\gDa¬Ó<ÔNxwISõ×SS…¾ÆqÆ3"vv€;œs2ΞDà?tè^oôSŸúÔ½÷Þ{×]w}7ÆÉÿ,>”Ü®uEAšöÍPdZúˆAúÀwXºQ„W ,:ÒAˆ‹›3(…'3Š7^²ê¹ýç*åå7þ·ÌÖݸ]ùiýåÙ‘»kÞVz6*öiâ¢2q 'ôê­S”º®àïPaåN~Àu]Ð4·fñǵêó–þcÔsC'šw=Ò½þ_B1‹wú=ÿùZíL‡w–±ÛjLš ±GÜd±Û¬ö,‡¹Æ½»gÛ›ñp·-š<Ú܃röœ™]ÂP<×û¹;p¨U1§,mƒÊ ÈBxÆV÷›½­s³læ{? š!?´©ùù=mwüæ4ÌNkj&"=™>ô¡1‹î¾ûn&’ôÉ—¿üå1LüàÀ RÜ×x@<ØÛ®^½úÍ7ßÏL‘ÓØ²Ñ  ƒ©#oE€®¥I,ãä‡ÃªŽ' 6D®¤7;pè²iá¶>3g”ßR¹ç]•ƒ¢î-‰‹ºtâ÷ÿ½AõÍ7«Ð^×™û£Wƒ¬5ôAëHôG޳¸eIu–Í´è˜RøÑÇâ!Aë¸ç¬U ³SoûöÆb=ɘ×çàÔ”;_­ÁW+d†ž7U´ŽŒªq¥ÿE­¦LPÀg9¢þf·;+͇f_ æšc~QQΓJ Ï*±>âN­;!ðý¯üúŒc§¡¨BJ:‰Ø­³Ú&…8cÇWbÊ Ä&;pBÏ4¿‡$2 ³ã)‡Qˆj¿œ} s@ú„Ãé½¢ˆ©©´8Pòô¶G_;x·þ–8Ñ–2ÌíâÅ‹ÿûß ï^n‡!žYg½îÒûÄî1ë‡uR™ŸâŠ&ïY®ès öÛ¾»qÑÞƒ /7FØä¾v圙å#Èzúhõ„mfC>ûEƒ…ÛרU£±GÕT–Ý:wö¬ÁOcÝ.ûîÿù.Ë˵OliÙ×£ä—NËu¦¿14“×cZD­…×õ“DX53œ3|Ð*„ùè¯Ýþ‡êâ וò«´¡%¶¡ålÓ` £Fß!£¡­ã)[ƒ|›ðcËJ(Îj->å4¾'°ËˆLƒÎ†L"ïèNeGà¢îÊêxs¥'‘‰Ó uzÊAã?xNÕÞJ.®|ý©ÝÀ@;} u$z‚ñ­M½~ÿR·ÃrɱÂüJ1¿ uÐòz”0Ô±0.êŠGz€±RªJ¨k{¸{»Z^€€‚ÉD„8 jÇ*œ°ÿ×®]‹–¦IpteeW&\ܶ;gšžW”+¥_ý£‰R®Cë$Ë’3ûà†û­)[e“Š~zÝžmŒ8]V Ç»‚k*ä›hô’U+¢ *ŠÁ“šx(KVÄ{°ïÀïäIq1. ¹‚Ç­X±‚ˆˆLˆl§K.v"&ÕõÆIûöMýKöÛί°Ó8œÞò'Ö:Ò<´Oo{ôµgD¦þð‡tÈ~ô#­[ÆØ}=4&ÑŽ­LKÏÜžù= o¹ò3èõM ‹G\"¨q×nÓžÎTw¹K³mê_$qš:F3 œuªÏÐ!KØiéžpB‹§G’‘ôí>îWâ¾dL…äöª‡»×#‘o”í´Æ;ÚK&´듊ÿhJSð.ÅߤF†­}ÑWëz6§œŠ®žî^5Ý=Ê“géÆ#-Í­õ›\œu”(4“íáŠlEõB«gõ¦àª‡ŸíX5=qó’B@QneÒ4¨Žs€å¹\åUÌ•"¤0š‡€á“Ï ·|q0o׆[Ó›b©E´öh§T$P†…‰ŸXÞÀSÈäÔ,sÅÉ#:Œ ¢§·mR;ý†ñ AkÏhÜiÄXO3pÞZâÔdt¦îØM¡–ƒ.ݼÓÐ0GoZ5cÍlõ-:ÊðÒ¾v(Á›ðÚÖ¤z:U÷þ²‡ëŒ',¤¾ñÞEC‚ £»*š~yã`IW.e¨ø™¯ñ=1€]Fdjœâô¾ƒ49Š)¶ñW<òr¨ý-ƒÉ™5ëfç Û(™»çßHdt+@u¡ŽH_=˜ÑâŽ(;Q4³¸ª¢þ&£-/°ëÍf—ÛYÙ¯¦UŠl}µÅ›èó÷亲Щ¾çšÌܹºD¬yýDÄãÖ¾úGœå—Yó¥¸Àáce¯ù‚w®U”ü«Rß’\Wÿä·šÔ-÷÷qåpv3Ô«w¼ ʲᄇ&ÅãøÅh;þíÁôW¯ŠÄû¥/Gù:ïÁßAŠqh΂Om{æe¾ó?hþ[OË&ï†oM_ó/‘ž]t4®é×¢Ÿ}œï`±ÃÝAÍ8y–Ìu5E—Ì)åɳH)öïÛ»õù¹y¡H²È`Šu„+ •~Ò’3w{üâÿy¨á’¹Á\XsÓ¡ÖõêHá¿ÅXé~3QrSqJ¹¸2'ùó›gv¢‰¤’†Öi<÷wñ_“cOßÃÐÌ`ö„øh_¸$ÛÆí׿UfÛL‡²>ü¹_î$‹}­ÿ~óÈu /É‹«òXm‡©æ˜Û;­–¡"lïØÔ”%So5zù+ͶÜý®iCÑÒÂZëßâö gF$a·8‹k×$™O>¿¿÷ù”ó^”î)/Ç× `£ƒ½'oWör@iApÝ`‚[Et ™W’'’îÝ»—\(IGšW"¬R% b «5LPZnÙ‡ÇAß ±«Å4Fl`e ½x<ÔÊžúˆ4I |¤vœ<ÒB Í<õMX#?(>è²-‡­1½:&-7»ZÊ’%KzívªG2º S}§JûPãe8sæI u<;<{¸z"¢VÖÇAåx-ȰC‰Œ¸>tô…‹²Õuþh‚?¬JEY“‹d¦%“Mˆ$rtJX] ¢Ž‘%%™ Ûü,;éÛ ¬è,cŢ޵„ØñUâGÝ™¯ñ=1€’™NûÔý),L#]ÛÇïÍWÿX¸ãí˜jש$÷ÿZoøyRO*c£}ûm0ZbÁvgNÑQéÚ†¢YþНÏÍßøt°õγÇ]‰òšÖÔö:²Í‰ÇÚV?Ö¦úŒÓЧªø_nýM´-—¬¾º‡#íçØ½~£azÞ†ì9«,Sw§çWºÿÿ.ìòEâÉDq¶ú6” i†s»§µW=h½¡é ”ç:¹ýêÜé˜Öv•æª{ˆL?xnßõ‹.²Æ6rË .û¢T4âõ×_O%”ëk;ø«Ès|ý†ãåPLTölþ+¹û»§Å—Ã]¶êâUˆ+BÏîܓۈ¿º¿=‰Þ–ó(Ó&‘ˆrÀnöÜ›ÿVPXj˜qçŽ;,¡î+Ê7ääæ›Œ1ƒ±%wÉ?ÍV”çŸ>B”2Õ†Þµ|Áò¼¬¬– _Ub˜Í*XÅî^ß‘È<”œË—÷„T-:wÄQD*ãõŠqnÿñòYœ2ADëRâ÷}ð<®§1ÈÁ¼Çµ6,Z´ ;µÄÓ9ÇE¦?þñ uÈŠ EHéïz×»Î& ðôN­1Ô>!òZÇÛƒ d4Œ’Ñ´‰Ü`Å/—w#€Ý¨~¾JÜJ˜£Is•Û˜×ÙÑ´/¯²VUOÉP+o¿¤s¦!PoðnÑ;%Ô ôâ\6+;DIs'"ZÉü!úܳÚývãí¦¾]­¾‹ªû µR# u$Xz›=l‹å<ÕuDh*sðšò… y ‰©$»°™GÆG4(ðºù—¤TåäÙ¶¾(Yz¤r`cÔ”pÇ¢âoØÞr]•‹.Ó“îåÛ¡¼gAþ3{º÷U»Ræ @*úÂâ¯M¿+.`œ6¯€«H§„¬Èõx¬dÚ€åAÆp3‘ –"r’CA@Š„”ëÂ<Ñ_“M©íÉiø_¦(ðåi¨ûdª¤‡Ñ³;™g-mFwá¬Ú3æÁ¶û¾û×}Յί\»à‡¯µ&6ôþüC'¬±‡o)H¶®Û«XAÔÊþéªy_z|'â)ß9æ—†øÿV»©®ÍåTWæzi‹ÛYéÞöW¨ýƒ_:¯D£ùí›»ô–¸ËYZÖè#¯íïøÍ›½œ“«ÝŽ'òV}ׯšUäúÒ{æÏçÍøÕ BS–3ZsxžsÅÒÝùÞ@T¼þ=ðZd+g $Τh= Fú]7>L²~Ðh†œáßê‚xüA™`Eï 2Ÿg†Ã˜{@¬GÇ\\ F½‘^£Ñ‰«‰x8ܱy< c¾&ŠÃŠk,ÔåšvQ4žm¤gw<â ÅŒÁ„cz®Ñlíò…•²„•*¬¹ó`:ú†Æ6Öw(íãA²Îb—±ÐÔ¡e)ȲêÑ:-ëß®š¶vŽºsµµ)e@¤e ­#'ÏÔÝÐå¹Aáƒ*„3 ²jÛ|=>uÓÉ”’?9ìb'$ƒ[ ZwëÊJ¾”üݶRÅ[z‚zHë„2º›x myeÇÌO®#Tl?‚‚˜†ÖAÕrÞwËŠ â;šÕ/7’,W³³Ô^Ø‘é—àÀŽäjóJô©Žô/Ghí>'H_Ä!@Ï®µ7G“$–.]*í| ZG ~^yÆåÙ’Ë•ÛÑè¨kô“5ÀÑoÑLFFÃSD&Q ýÙDó¥/}iÍš5b“rÇ£=÷ÜsgÓN­gÑC-cn9/^ .€¶Qº ª:Qé…pÃo&ýûp¨‚I÷ƒ9ÇiŽ;ŒÁ&oâP´¦$ÛZÛ¥¾*Ýö7;Ý‹I­ãšÌ»è8ÜpàE¨$ŠÑª¤ÈŽçˆå:T}º;ŸíþÍ;m{ÛýëëŽ[ Å®ö¸ò Ú‹æPdõ”d[ʲ­ÃJ‘‹fæºÔ—÷ïhк§÷¨âž‚Ö¿xV®†Ó¡"—Êú‚;ºÈªÊ鱸Ùâ9!\8]… Aë¸Þ¸XýÈ 2‹ƒ6=ˆvB™”ž¤ÕÞ 0—æ°†× ÓxNtÐq^ |¡8C– ¨M)ð˜@x6‡þq iµŸ–[ù)‰žÝii@¦Ò1ôº ÌC¦ôüãõë×C¦H¦†ê}­^.u.üÎ ]ö=£‘ô YZxuÕkg‘tèˆÿß«ærÕ”éàPY€@T½F¬·khç½U×…ú¥¾ú§]Â|ÃÁÎû^: fHÄ%ñd¯Ô®Gë(މèˆMM-¨³ÖAY×á‘!ÖÇtšZצŠ1Ðܸ\•ÎðúG“øµG„Á1°:§ŠðùFÁŸ;ôìБG›aÄÇGã[[HˆÆ7+#<õ'.:ÇZ¿ˆL/¿ü2+ D¦ÏþóˆLW]¥‚2™pê{Àœ5}ü•:J×ú£¾X°MIDÍÎ2[ÑŠñð´Ÿ<òÇ5ÀÄ`4yöü‚ˆÙ5òÛÇ^¼*îqaš 6ö&'VæEvµð´Š}“¤ŠH¯Š”9+¯Ð²x8ÄÃ]ò iYƒF8Õ¨Û½ùwû-&•?·ïž|§(­ˆËfÖ´”yƒ³Q“ÜÿJÒ[–cï 8óœ*hEñi…6L¦ØñçÖ5ÀÄ)'·¿Ó,‰ú¯Â Kù“/ʈÎGMÎR8ä:"üy¬éü®šâ-ÞG7«‚ëß­ªR|ŠÑdOÄC±@ ¶±RõÀ«6¯ØóGøAo…^–Qê%ãôŒFÛ¿^5}g«Ÿ½eYÐ/¯Ì6$TnÞ‡böÎá>½ù%NCËïâCÔRYS4ª½¢WS(¡ÏÁP $Òžçk»¯˜;‚F•j·ëÝŽ#Ôðј¡ë%%И´W(EWŠ&ýÃÅÏîë^\æZ9MÝ¡Á}Î"›`Ñ–e ¦1À挠(šañ ˜Ä`m¼™Y[‡ß#ÖŸì1˜3 4£O\Ðjá‡3f@C _ì7Ç09µÞ˜ìˆê 0åY‚FÒfª“_ÖhÌN'»mþƒö€¦»Q÷´2‰ãìLVá°rFÞ; =Ç<ñŒ…庚AðˆšR·ž—(+¬¬týãõ+FD²ê;Tá®<×´$ê ­ž”jï ©Y9öÂ,ûCï4Ÿ”Ç=iVû×oXT‘§¾ ë;|ß~F•õÈÒKIBR×7ëT Qºt”Ç£IÀ÷š)ɘ–“:ÊܶŸ¿¢n \–ïÝ2ÈúAr3W} Tô)gMüÈcÌO•™ÆÜuX;ÍH÷NƒÉáå¡»玘íÍ.Ûç.›;JÇgúÆØK/ô‰zêð17"ÈEÁp×ۣÁ¾è»²k>.¬‚-/†Ž¾ir–gͺÅ=÷#=;ŒšV2Œúq4cÎ>fîÜl[Ÿ=óV“³ß\g|Ý>¿ßÇA¥aÛšy5Y{âo·Lûûµ…Î*üÆco_S²yÁ4„œeú6Ó¡£o=Û”óôŸ}Š¢¾Ç¥ÌúpV¢ÙdËþÓÓKüÁM >ÔËåöû·,½ eÍÊí´|'àÝ0Ÿ„`ÞÖ8¾î‚jUWyõÌ‚¯Šè¯­)69½q°3ÛfÆßªg÷ÏÂ6SÒY}aš;bøÛî6hý‘H{ÐiÑù¨Úí[{ÚcÀp¨Lš³gdUßgšô/×ÎÿÓÖ–åÓs/RÖ~1Ò³§ïàŒ–¬Æ¦†Vo‘ªñ꫈=˜¬ní¾`®=1ár¥ìÖ—ï/‰7‡‹ ;êrßÚo:äp-,ªº=êk¶dUb3³{|o»/üØÆŽóìMVM^3Zz=ÿÖ‡Þs1(˜3'?à6l÷z.Ì-p¸ÎÜwëœ9sØ~ÁQÛ5¢r(3êÌÜ~q^•l!̋”FŒÚYù¤gøC Ž ˜Ö|+ ‚ µ!Œæ‘en¨b *l㨑D$g:ÐCQªâ–ÆpK;!ƒÀŽ‚Z;I‡CV×ïåÛv¥ÇÝp$øÁ3ÊîœÑß–;§ýW]Š¿‡4wr’÷·¶éÏ×õ«§=òÒÛó‹Uµë†#Á ÖRcyÝß©©Ó¯6[Cå6ò WåŒ~öÝêÖé:òA¢`^úÔdå‡ Í¿5´=¡X‹ÎÏ«Q…mÚÎpŒå×è)OEܽµ¾âà½JH•ˆ Á:%Ø(=V™kÓŸ§ÁÌdghÀ§´A\dqÅj•0øþì2@78 ïdͦ•)A"£% ]pãöСC ‰2¤¸èÙŠ9É:h$½A#A3õE5u}b&~&ô@FwáL…³¸ —Î+~ts3hϘí˜ù}¨îZ;§èo~n¿ç¡cѶ¦žeUøW$Ì,R¿D¢ö±5Ó)ûgö¢³FbE®Ï,›…ø]—ŸôÚìžG·K}zhfQ–ˆBdýì培ô¤Ù O®hTð˜Ò¥ŽZúdD4äæt5L-˧ç?ðÑüa2YçZLÌ>#2!óÆš¯æìN¡umž`{tæ}óé=ÿzýÂiù£~ôbqÏâOŸ2T<ܽ«w÷}Ɉ¡$Ðò·X°#oÙ=}û ¤zÁó5ÆüÍ“ÍdSßõ¸K39J¹•ƒS-/ˆ½­wÿÿfÏý§[®ÚTz Ÿ6–ÚB¯ ݹxѬŋúëÿû²§œÎ¬HO/³š;9ÉCdzzO‹Äúû§–TªÙžº®µk¯TdúÊ;zÃÐh¨‡(q–yµ;ù•UÅ4ýVئ]µs|$=gÑ?xvýÄ[û? e+ŽD¸g›ja1›òÜžVv²o ´íøª/¦"€áÞ½QÏé±…®»®˜«5Àš· àüoF}Míw[ÜýB Zr H>ûš•æÞý3gÆb-O8ãí¤Ìum*]õ¯›7odË/ÏÖžŸmÉšyó¾þ´t' ؼ'ñÏ,UE&Kvîïö„;½¿~zý#ÍY®$»pb;çZSOey 5¤zÜùéë7ožþ6?-=€oÁºº:ä|døo~ó›@«×^{íwÞyZ“©Tßò²•+ˆÃ;=·áã‚ÎPï%f‚ 0|Ah$Q $ÁÜEcKZ%<)KÀ—,Áò¸z"ñùúPÔ’³ Z¼Ñ ·*u šzTüèƒË‹¿¥]hàÀ[΢ –VPÐ:}bm‡ª@±¸¨¿–éy¶Æžp‹'\1Jw9F»Rv“Òú¸éPº;TuÇTH%OÊÿ(6ŠÑ1Üy|UÓ{tXMð5€T`SF“×/]Ç82šè<ʸc1‚ڠÛtt¹B^L²ÐÅ#"ð'_4™Œ)P ,k‡ÉÓXtôà ˜Ûè'Ò0¥Æ“ Ió8ûH˜ 8À÷h< 3e'µ2º “Ú½cf.GÃýŸu£gÆ\Ë)(h3rû²ÿy£¡ÄíÀ§Íÿ²Ùåλã♃V‡î/>¦.\?´º «šAiô‰Ðs\,¾çD€ºJsl›£bl„X„ê?_3ov±ªÐ=0€ ½¼ïh©Û1¿\ÕÔKó÷ì®¶ùeî1莠37=Z§U-˜ÝÖ&–2¶È÷oYòð;‡‹²ì7§ÜɈ¥D–ľX°±+ˆË£•ÓsU¨"êÓ;Žljè6 Tç_½¨_meD†‚s­Æ ØeD¦3vÆìès”*‘¥É7:•-½cìFÿhá®í '½MÉvŸ8;@ÙX Mõ‚g²pü«z8,>m –ª&«É8hÆ<ܵ“8¾çÈÂG«zF“1Çëñô²sÎq¢¤4v†ãJygûÔÅÕ¿Hy% ˆì̳.TKVÐ:È´°ûˆúö_YÑZÍ,rÖwF¬W+n4;€9a#håOKOµôɈ°¾ß¿¿pF/LÕý]°dU- ÐbµŠ*‚ â2n€jìmÈ+F[Ýë:Z->òüÃ¶Ê JáHb<ªéÃW¤årÊ;€X‰¸5={¶–›‰œ!=ðÕ¯Žp|ÍÒ멯 @Ñ^<©ö P ¬D³y´8xŠXüi¹À"clåM@IDAT j)¨% (Á4RL)¡¡:yσõˆ–‰4ž+Wn £FªQBÃN²4Û[èc&8!ü—ÛU0ŽpW…·ÂfTŒƒ%O}#èÂòŠ,È­3+ñ¾>/Ì“x{B ê§#Wfª‡BèS0kÝ{4ørSx]ê]ZGîhѺ£¤¥@Á5ØdRÌÙŠkfÒ<‚ùª¾ãŒ´‰Æ¢ð¡#ɈsÎä 9h- ïX†Fôàd”e˜H$KAâ|˜¨ˆX‘+6° =‰rV™~L]á ‰!µGU‚¨õ1¯X! ejÊçÃdá&x¢¼cL}‰MDðÔT4æf³¡Eï1ô9¿t®cf5Õ ftÎÀÔ6Ýïh¯ùä™ðtN«ù3—ö/A¯ŸŸ7ŒAëhóïÞj*uÛç•©8Ú0Aè1ßᬃ\Xe›'<¯Èñ‡O¯#Žû9Î[ÀƒÞ Ø™°Õ4‘VÑÕ‹F¿ws¼(~ôŽßLZŒs'Ì}.e5…á­Tôù?nÃ÷¿ÞúÉ)"€¡òpMÝ-¸*úÌ¥³ÎB“qÒú Ãx ô@ú‚xNÄÙ¼mYÑÝïÂÛXßµjæàóñ7<±iOO rµÖìÏý~ë0Klü„‹/¾xü|&Ã9+2†üèG?JëØ/|á i)™Û1÷Œ”ªäkxV¢´ÁÛLD2ÉÀ²Z–†J0™5ÐGK¤ FÉIׄ!¯ìR°µ@#ùµbBHk€óÂv¬ÁŽ’·¥éÀ\ˆ@CJ +® <ñ H íñš¬Òó½q{m{é9Ö«œöDYpŽ;'Qv‹VD"çUâÁøÈŽÎÛ‹ž1*å=Ag$a5›mTÑÐÐAEú"w^X¾»Õߎ­žÑ_ûÒò¬7·wT×uBYæFÑü䃣*éP%®1‡Úö@MʤWϡի*; dàØä¼øÕ†.=oºÛëRlÅI×[è!2|tÐàb¢Å C¦ÃáAÀOž&sƒRlæ1^jLÒ©,e‰ƒ)°`6¢çXYY ¦áF.HY°ØA)¯V™3ðœ;WUK¼£¸´Ûs9h¿JFQF]ñ®»îú¯ÿú/¾§œ5O¿ñ3¼í¶Û gžyFÆ}ŠvfFwaŠÜm6Kañ‘=bûoXVÇixÃv(ÇÁJ\¹½U×)€ž9¾ç´Rõé“ïVíu±·ÔŠ&›ym[U¬U7ÛBå´Ž”æžÀ~hNÜØ€Èù³—ë~úÁåvË n4ôíäÐöoÿæI±š?ÿ»åúÜLüìë ì2"ÓdO LD¥ ÷¼¿Q ¬]Ô£ÔÓ –hÒÄ¡?,4Q˜b©:˜mJƒ?-/…;Tß7½j˜ÖGÅö¢Þ%—Üß·ÿ·žîæÂêuö’5}us<«h/™ÌšýA9³sØØ¾±io"‚­¥ñ.Ëß6nå`ñ\óÊo]î²—¬–¹Æý 8Ÿñ†ÝÞdqÉ‚[=Škgêh¿éŽK”ßõFݾ`aA>¢‘ˆ"Ó¯ßl¼%÷φdywÀŠš­6'Ks,Ä<Ô%ôEþïUóp­ê F5'¬çWçÿ÷«õí>ÕuPVŒÉ¯Å]ÍŸ¾®“ïlî]|lãE+Ûœ²ºÒnF­cHã^¿ríìRc´¶ü~Qj`ÁPÇ–`Ëó‹Ý‘-M¹€¡%yÙuj÷"Û`Ñf>ú(ú’j©¤MÕ—´æ0.¹ä‹ÍÍ3cÿcMz|‡ 4?›mÍfª²L»©$×V’?ïOîr)æxž™ƒÛ› îñ9?¸u)Ž¥ö_.g™‰ ìøÜfD¦É›¯‘î]0GC m5ßÁ?ä,úÜhê¼Fä ~7T)œ;%û*?{ù èZkhÝP¥@vÒ;(³ç~¸£¾Þ^¢~?@븪¸Ù¥0 $ÇbŽt£UBÚªÊw„ÞXN k‰úb>PÓ3:%îxÞôé¢N¼¼*÷‹ûºê]o5aî.ˆ«¬¼¢Þ[•׳í¹-Í&Ud²F-î f)[èx¼Jì(>P÷˜·Þ7»QÝQØhºdîÈÞ6c<)œÜÊQàYß¿ÿïIõS}ÇŃC¼§ÈÕ‹l8Qz&3œI¤:RÈ"Â-†zõZ–R5õÊ‚Œ*ø’RœÉÃŒ(¤ì@5OÏ K ýSÓohåëS´¸ uÜΟ?ÿ»ßý.ßÖ¬Y#¹çŸ>+Õ‹.ºH#žrdÅŒî™9jiGà ÚÈï?§~h€?€ð×Â2(Ùd$þ×zu­+U¿ÓÐ=Lk[=ªš‚ÙdøÉíç¹ý?×wô ®ë-íü·Kd”×´Ð~øÔªâwöoÕœb´NÚŒÖá¡Nÿ êc‚$".òéN/½wÓÏß  "í^µ¨ô…=Ge¬ç”¸ì˜ubéµ¼*ÿÕýíœJÁI²Ã·YÐ:hn]1 ñÉsÎv,yã—Vÿ)çÛMЯ ôý9å4¾'°Ó?ÿT³zcÈOݘ´fìÂÌÃöÐVxž¿é¯JB•|TgvΑWÌÒ.v;ÑMIizE^<©îŸ’ñ¥±}•Áךç•„oY^*¹˜ÁŠõkÖìÛIùÓŸþ$é¡dþËœ—Ì:R¸üÿžÀ5(_GHb<ܳð3žÝ?ã6gÁ§Ó(kjjjkkA¾/š_Ù¹ïp–ÉÝÅ×êi(Ò¾ã>ÅÈ–3'wñ]íGêÊS |G?ýDèâ¬üJ³·*×JúRÄõžøx„é¾oìÉKXK´wFc ƒ’ð¶<Üý+{S޲Kí%¤?Å·þ†'mm›z¼Yîyw tr÷ý[–¾UßõÀk‡67öò§µmõÌü¡Î„Òhˆð’BœàFàv )–žXâ2èfW%Š‘J2Ƭ{瀊ʡTŒO¢Hdõá×ÿå@ﬡx¾{³Ùñª‚u*¶EkÂ^ÇùÓûM`ô6Ôž¾`Ns“§ÕÂ{Œ§ ¬zÁ€ô]!4’¢ÅÁï*SC²#˜ [8à/ 24êØ6àUÉt’êÔ5@2Y¿ãÙ`L]#}¤ºêUO^Cwxo|Í¥¹­IƒÙÐò;ÅQ™,ºFêÕ\Ή©±åw¹ŽˆÓÚ¾³ÃÚÍm‹:®(xʆžàüb—Ò³Q±W*–±l¿Iuã¼zßVüuÂÄÐúHrÚ'ºÇEŽ¿ÞM^LI/œáJ±Nß¾ø­°Ó™Z|øˆ6è²qeÄJ¸‘bŒX1FÌI!fµÆ¦º`Fúâ”ÕfL€ç˜oD g äÇœ„'é¢4§µSæ$óGÐ:X gŽ™<ÚÏa4_UŠŸ­Ÿ(Ç¥= `úú»žàÙgŸ½æšk8Ñ{åÊ•x†‰ä‚ÊX뉧Vœ‰1ðí4µá\nm©Ûv0¥­4Þ“Ý-TÍzXªÆ0e˜êÊRÇ…cº MCg?Ž6 ýø³¦çÚøèüñó3‡¯\;_öø¹Þ~Á´ånT¢·îy|K‹ðœBÕn;_@3 œÿrÝ‚û_«G}¡®£ïå}íÁhÌa1OËïWC9Ò«ŽìÌ"uKi”á@»j¦áw£,u6‘ñifNÖñt|»Y ¥}ßõ<å4¾Ç ØM"û{š€æL?º§,N34µ8Zb0ZÍÎ~(ãGõ€ÈðMÂA2‡«²0M4üÂЗD$‰W|^ó‚‡Í£wß/#ÞƒW[”«««{vÏö×57yZ-bWË¢–g²®ÚÐ\sÃòjÖ|Û)î[µ¸9»:{ÖûO KÝ GØñÓ²÷<óáO~~rô?•²/î8Ü»~.ä@©å*hוuÏ~áרªý‘êÙoøŠ8N´Î|éåEq0€ ¾ y§C)»@ž]÷dųìÝÛÚ¬]ÑÜ£ ×幪ÉçÁö>TŽƒ­/[r°ëK:â ‹ï„mÚNoMÚ¯FfŽAÉ} óƒÝþp«'„åu—/ÄvÊtfCÒé=vçî ׆T ü­™Î• ú ˆCšDDÃP«ûÃáל‘ÞÆÚ {BÉ÷["çæõ™¾÷½ï5ã~æHzZGß·‰n2ïtÖˆy- ›FMσ¤‘@)8œ5/xÄN L€™ Œ¢'þÒ-؇ €µíÝ»zíåF«ô^ðÀ4a¨þ” VuKÛ`ˆ«Amx›ˆ« ¦=~uÅl6Æí¶ä3e©ÞBµÒ4Þ}ªáw›r]\æÜÙ þ¡%ÉÔ ?VS¼ÖÚê/¼¡Æ<ßîÚÑžømë_/¯uÆš ¡–äéìïvÜÊUoðPúö*îEê“ xÐ;Y'z`vh¨1mèd>©ïȾ#%È0áOµg|Áì¸23ù$1RÌfd wš²¤~V€ÓñAa‚1%( %q™uÌR¸b×)A#_MeOÒ¹RS”‚dÁSƒó4‚s-ÂOrÐ_™¼14h^ß->øàücú_9zâöÛoç n_yå9ÐCOŸ‰gzà”õÀ?_3ÿžG·cׂœ‚¬á,~&¼I_¼f>ÊbvZ]•flä FCÑxIÊ•›Ô‹,€IŠ&ïp¦ÄÀöõF²ìF—u_+¸ƒAåÀ²g` 2 ÍÞV÷éµ0¿,û¯¬ÑnÏüˆ&7t8aoc½ª¦í«ëŸG}FÃñ³5¶«€Ýðè[YŽý`@U<üÄE3"ñSä–ç´@¤-è }`á:(`7å4¾ù=ëŸsÄøÙ$2ih݈O=ÙZGE¬\£í‰€Y4oûm̳çÈÆG9ºn”( K[g¢Ù¯$ÕsZÑ!ÐyÁ# ´–dÌp’Lâ›Ù¨'Çóµk×òc@eï‰'žèõ‡µ—þxE¨é)(­¹ó8éÕÒû²rÌ®QÜØ ýUÌ%ØMÍê bžN8¡ÞûúãþÐlȶ7{Øv(̲–ç:sûöµ&Ôýy³1áN$nk™ýž•ܶlxHjU`ÀOŠxâ#ÎÉÙ‰˜jÈc3'öùB»¢e·.q-1än9ùCÇ5ßšuÐnä×ÓØ…Rc.ýx®io¤gW¨c«½X}´ÕÃÉ:Ñ8£“ÙU`ÈE[m çáSd˜ª«ûå úæ2yfdÕ'c.¼*Æ‚íf‡j4Dul›Ã äÃa &K„QÆ—üV:î|Ú“eŠeEº¬Æ¸Ç¢t„•Ë‹üÞ`âÙÆX¹)6ÓÜsÛ{.—‚Ì7ägÖôL6IÑ®·,¯8Pãx¬’ÂÂÓr—Lëç4‚s-’™Îµêy@uŠf”é !B¬1d«FÀ®|( £ü1EaEó¸jÜ$®Áy´œßû íçû¬Æz >¯HÃä Ž#f‰âúÜAã¢CAëx~Àx[ÂÀެƒjK˜ø —•• ÊÄü”GNÐ:-®QVg¶ú•†>Ûjk¢]&¿SQuÇÓpjZñIä‡_2(ê¸,ÙýÊÕ§ßkK†‰QÒe\´Ù(hŒ²~.ɘB/³ˆù*1Ä2+àqr™rÜÂV()7Ðg)%° ‰Ì4õ§  ©j“DOyŽÄé7;l8Ò¾Ô²b´>þñßxã +¹=ô#òå/™_½zõ E¦JâÙ¤»0Uú|ÂÛ‰]Ë„ó%C=vÆÉ¡¯Ô¶c º©¡[°˜hæ¨È\¿Óü·Ým‹éãkJ/ZšþaÒ¤3ö³ÓlP´,‚bÄ3%€Q>¤’14-½¡_¿QßÞá;Nâg/ƒ¯·I­t2˜_8«àͺ®ÏýakyŽýâ9E‡:}¼T„_ïn¸VÆhD;ßo¾oÑÔŽî]TáÍ¡%“ñP§§¬0ùš l wɘEÊÔÒøžzÓ}ÐN?ã¡.ƒÉb´¨ºBã hŸ¡'LTA%ÛóòwmI’÷„œ],-Óš†ªt(/xxÄ3ššc18]Ò`TP 0»ºÉC~c˲ y†E0šÛúŠîüíæ¾[UC­ãš4¹•d§ž``>$‚ãXcªXhLxw£ûçä0Ö›–Wl<ÔÃû«Ó¹² '–è÷íKÑÈMRвTJqñ&qrVNxW»rÈk]抛§ÑçHzØg7ZOBßXã6±kדKžr Ç2G¼FÂMEHÂŒr‹?RdVN# 1¸âÖd=®eÃÞ8 8ȺÀòÒDfC_P¢ðé%Ö®NÅ:§å¢2k¯Çã$즤Ûè·š kçV–¥ŽâX1ù ÕŒ4´VS–#«¼,yøÐŽWQÄT”Qþ TÒ³.dD¦³fH‘ü/ÀöódJ RŠwõ8õ0á0Á¯ß2 ½´àƒ T™ C,×`¥Á”åçcͨ`…ÏO‚ôñŠ÷zÖüœù p+p ”i’?láƒG9^#ÑŠâe"( eaË Š7•À+ c%Í£"ly„´Uê"°€ãµFSyÏÙÐ`ºÕ*iû®Rךiu×Îvš­än°Ý`ˆÍH–ÞÜe¿ºRy¶á¨Nü=óó»QÎd¸xV.qÉ24ÝOdõùxü©z²V&ƒÜÞVü¢Âneý!ÄO} å4Ïœ@NH5ÆÑ¯Ú|ê[¢Õ(s˜%,ÚyŒ{N¨³q…LTÞ˜cL–Ì )+Zuäª2'åT8Š3²F–8Ó¸Mè­czË-³Tf4€_)ðÁ&W e¾1g˜¢0s])N)É•ÛsêJGÑ!ô'Ÿ~üÖÑuü ­ªO´.Õ:Š…%¿S~¤ißz`ªDÎ&Ý…©Òç§·ú“"hÉ¿^¿pZ¾cœMêDîyd‡0y«¾QÈj6Î+M*ß¿²’?ȆߌG- °Î`ÒøÇ·4OÀŽ–#!~åZÕÜgJ‡¿_[H&Ù#žPa¶£yœp<Á©VŸøõÛ…)I–”ÑØùþÛUÓ:QCiêA»eٴܪqO¿©Û±,êÔnL->Óž‚·¬EÓÒ¹rßÀîø "ù ^°bÅŠã©£‹·u”d×|lt…†¤­cÝÃÒ×¼,‰Ð­kÙð5[2D·;§bÑeo¿ý6qNÿÔ „Žäújõ7Y\Óh†8•;æï/†PO µ-ê­3˜ÔC<ñO—ˆzñˆÁhTõïLoÝÙsþNXi×åË—¿ùæ›,ªÞ  bçòÀª:.ñ–z÷‹Ù÷]~~¨c“5w~,±(§ò*Ïžÿ$wKs‘Òü«ù —–WŸÐŸHJ],¦1±¬JþÕÛµ?ßä¸ffäÂÕ‹-/U¹7ݰ®eÑéñ¤+7§tYqíowT!2ïz=r`ƒ×?Ï=ï‘¢÷;ýÏP…fÂyóŠŠ_Àîò%Ä%Kåúk>ûçß¼CÖü½9ï¹DDE Q äzº-§y†h—bQU-¬¹sOWK´z¥»œ—ÚŠ. 1!E91a&ṩõšRåy椣tíko¨ŠŸ„U«Vq…žÅ7ÊqsæÌá–<Å‘µÀˆ;¶nË5ÇIƒË”Œ¼fEu®Ÿm‰YâˆXË–-£ˆüú½À¡˜ÛˆdÈ`¢O!¨ÒRò¿&­I©s³ËˆLL€k¯½–Ùòä“OΞ=›Û©†’r‡"^¤Á@yXËeD` Yßð3”RüTùb6ȯ"üÎÓ;±r…€eqíqàÃM69i-X Ÿ=Á0mmÑ08È(«}òÈËGš!-¡I¼š¨—O•ð䔨‘®A¢s!¥*ºN6Éy|éÕºº5¹ {g\áÜ“é6ônŒÊ4¨î/{ºß9ÜçÄkŠÿüîª|çñ•FƒW»G¶wüþÈû>P]·Ðu8霩\"Í;Wšç=ô†½dŽb+>ͪeÖgÙ#€3`ޱ ¸8)|e˜N DZ›Ÿe2ð±€RK× ˆ™½ÿ?{ïŸ×Qåý?½«W[–%˽;n‰§’©„„à ,¡¼aÃ.Ù…ÿ²” „}aÙŸ¼„…]Z 8=qŠ[ì¸÷.Y²Õ{yz{¿WGß<Ͳ$[²­ûÑçjž¹gΔ{fæœß=3Ã;„åEC ýаœÆ+9¼VÈ0ˆ!È r‹œ»@~’"18 †)­ÊwäH1¸(*—L…#Èø¬è›´³¼øã CÕñÉÖ¬ÑÔÄYÈq²ñзÀs{ÿüÎjÿÍÕû¾~ëœÁƪç“´Ž=În[8¡­7¬ŠÄjÛ½œÜš@9œŸ u‡šµE—3JFßka89OÓÞeÕ[Úú4_Ï_7£±Û÷êæn_ØaÕ>#-˜”óà{4j0×ò)ùü †òb ÁM˜}˜Ä©¸Reá¼óø>¥_&ÔäŒ~^0&ÓÐ,q.“‹ø›Ï¨é’‰¶ D ß±Èõ.SÝ¢å7ȉ­µqãF¬&e½´‚Ö{OVx–£äò`ÛŽpP[Œî>`°xرNO\ ^Ã:GV;JL{Ìù±®•°vÀMÿñFβëøÓ"««AýÈwͳ¿šûv%vijž<í9xtÇQ-¸Àq,h ¶j¹cþ*÷ÉßlкÖÞÒ,±îŒÅ#œ Èé¥þú×âæJUµ§¶\¤ÍŒÌ/Ë~ô®ù…M —KÑðAéWkW¿ç#Skf;ëly³]å7½C5jÿ)^÷þW³*æXÜgìS3â…Vˆ³¯þuì@¬Œ÷F,¬ìaûÔOåUTlÚ´‰£ö¤›7oÆïTŽáRï}0wî\!ðåp¿¸+¯³/b ú¢qsÜ`î‰;攸 `#îèýÜArˆ `Ïà {»²²ãñs È@²UÇHÛ±c‡ ÛÒ_H8²µÆ¤'GF|,I,½‘å?|nã&Ó‚ žþy‰¯½öÚU«V‰—ÍðÛö¼à 8ýB@Á5δäô\pR>pGÎôLèø‚ÖÉSý£Ó†)Òii2ЋI¯` ÄgôHÜè$‰RSuóN¿6ÄYŒQ–Ú† ý¶MLûd%—:h‚Ÿ‡Zü®©[TæþÈâ’wžŸúÿÁ…Eü •#»òôTC Ìåç­øi0å¿cø•—\¥}øé‡ÆäŦ11 +¦*¼D¦ aƒÙ1¡(b…ó~ù,3Bghà'Ü€‰'_¡Qpž St(¡§ÓIñ$áHÝ™q¤j”Pn8“)5Jg{ŒTÖgʇ–ä"åT x¦LÆéÇ[àüjAë¾xÃô9µÏZâ»ÀyjáêªóÏÝG*U»9¿=§dùw^e»ïß½€G_~jg—/‚ÏÝO?ª)Éé.V×Êñ©É… dµÇ^:,is~]º\Æã‡ÓNGLXØ¥nÞD']VpÜDþ©UÏÃá|Ѧ-aÖæbúF}E`eÒgÞ”/ÐÉ-#:³>M˜Ï½cÖã{d»‹Üd2ô+ñœ Á–p¼û8>kæ3Û²Ùèä²ç1ê£|jVÂä3MVçʾ¨6i‹O‡| p‘\¿¹éÆBšƒÃÀîw‰kÖÕ8P`¶€å§˜La£¦Æã§Öäê˳§¾ç«OïY>%ïÓWM`¨ûÇØ? ^¢‹ý`ÌQuîÑ:Œ̘ÁTþŠ+®Àå±f±sÔ±­2ÒÉ)¬ÄÂÇÀØ¿¿x¾ÏøcŠÉqÙ¬òºúÆöÖž¸Áh³Z—@†ý ˆÉ$ê¾rU¸ä’KØ…[L Aa€ó¶oßg¡d fDÖÞƒ©×`hdè‡kK’N¯ F Ÿs@s‘›LÍÎE;ÿò—¿üò—¿,U?üð£>zÔ³G3¥y(°iÃ;†þ%xIèÅü¤¿#ó<’ÆDìq,ÂÏH|Ó@™¬QŠ!Ø=šž‹dÒOõfñ‘KOŸBùÛÍuµsB?•ç|þº^ZNʾu¬„-Ïwý]*a5~?Û-–ŠõÊ6‚?}£ZòzäæqGãᶺ¤ÌõЬ|OR1§ Œeï‘ì.r“É–?ß[÷¼ uHÙ¢uØ ,$TjŸh„¨h|^æ‘xŽ à¢DnݺU|ÓQò·V¥Æ|lÒm±f¯nšå}ãèUÓ‹æ–å˜í§œf-Ž£=äŸVv‡LP5¥²ºæ8É=®LØeöìOê¾' äeMÖ²c7=Ž( Vqß×6ùÛïŸ÷ßy1šhvî‹{ß>>ÁÙÃz¥Ã´ÆOvk3_ŸØªó¥}MOm=ùvMçeU]œ+ÆïúçM‰ÁŒÑLîÊ;¼ÇŸÑK¸ªÿzóÍ7‘FŒöãÇãûFZ¶ˆÆÉC2ðzìâ PØ?ïfΜɹd½k×.tz›Õ‚á„€ãƒmÐß3pð_„\päÁDÁhÁ›0Ï;lb¨O æ Oׯ_/%äŽU¦Â#À}U¬8²Ãv˜§R(*À:¶"Pæˆd4²L.Z“ ÙxðÁÿë¿þKÚ´—…xƒ?øÁF¶…Ï67éPÌjA_rŽBƒLUÈSÔ°I©&Bƒ<¨åŸÉ|ˆ¡»‰g+°`‚Häôð‚GÄ ó??y$l…•Ê]~r‡—Ñgù0ÀE¥„ôwÆE +@USF2⩬¬' =¼P`}}¤ð š¯/L¸TÚt  &€N2° 5Å‘ ˆ*صm’3fˆŽù–†cV“ÙÆÉpkêè-±ZšÃÎÇ®1´âW_5uÆ¢2Ï·_©ûåÛMß¿.bl2µ*6].žx-‘ÊŠ+(Ó7¢"]ˆƒãJn 7Ü ÙæŽ Kˆ ïš¼/Eh 'xx!{¤b¦`š£#†¼ñ~áÃ#bÈn¼h.rGé"G)†ÐÃJbøÉ…P[Ș » ‡”Jâ‡|Wh#€F–ßÂ-‘:r!¥zir^ã G¼.vß…oÐ1ɰ/¨g.›æÕ{¶¯\Í€òúBQ_H›zðÉå‘°>k½ïñ;Ot“ìaÇ#6­;ö­Ó×ñ óvÖnÝq¢kj‘û–/°ÚVud f–¼ ­¡‘ìx7ŒÉ$ Ú$ÎAédNÖZ²¦dM½GhXÞlÛe0YìùË…†sH³gým:>ijû’,²ÀäÀyG<P1BÀ>xH!Žü„^¹,\˜x¤‘»òvþ {gøîÚVÛõÐM3f–jËT;ßm2QÂÐÎÖœ™ž)ï'Iï±?Ê¡«íxô…ƒÄHBrAðµiù ô©»X‹þ|Ùêc]Ûά²«²¦Ý;@j0L™{Ý”–Pq)&«§à’¯þèÕ#†vÃJCí—|iïž=]n[s¯uAÌf_ûê “\±XØ[XŽY,V'»aT×Ü^d¶¶FÝšÉtdMhò-7Íw锂/?µëÇkŽþô6‡·î9ÈÔªØy_dQ²ï!•{3¯I ivô³-Jñ…çP½·±¹µ³7€ÕBǨÆ{…´(¦¬ÇxÆÙ¡E8q:ÀFR6l;z|ì–¸yû¾Ûßw¦RÍCÏ t×tùØAŒª]­µ¡¨9ã˜Kv¿2ìÛ7ໂY……ü‹ÉÄO.ñˆP[J. o) 1C[Õ.¬äÎ^2" g)Œ,¿%æå—_¦Ž4àcrïÓ3Ÿ³À©%±d‡e¾zõjÙÉîšk®ÑŸµ}Î 3œŒD€á€Œ¥ã£>"„t(™/ V™°L(è_à)¡žÃÑ£ 0 î@˜ B~R!ˆ¡_«ìëé%•º îÆOz:ÀàB2Š¡¯)l!V©˜e Ñ'„ \„€ª120D0ª€Üé[@æ´X1˜PNÀ.) ªžpgC,˜m÷çØ½ÝA·?Žg°v˜ìÑÆÎɶà{„?ð\Ü=#ûë­ã;¤Äì|áØÁf¯ÛfžY<(OçÓÖbìÈW¾ÜPT`b6žCJõnrxt ¸†j¸ZÿiÂ"êƒ%4¼G^–¢d—Y¶ÌVòe´ø)‚]@@BC˜ñ<%­ˆäE¤pÙ#»‘–n‚ðˆÈA^”!—†¢:”„@ðÊð`®1„2Õ É|œìÜ´ÀEî»pnùŒrÁãìW»l–­.˜®òõØ5ÃMÅŒH (ËÖÚúõ[u[Ñï»ÐÏTNÒ[R™ÏÇP€Ö°”•$R€oß9¯4Û¡ü—æÒ‘³âñû¨·À•3Šøõb\xP“æVµ‘ì.“IÁa)hÈ»ï=ük o±LÈI~Ú OÁg=‡~%‘Ñ@[¨ó›¦ÉÏ„;fT‰äM½òŠ&ª-åÁ§ Å=DýRTOü<Õa <ùÉ–¢yÿ•S~±®† ’¿´¨=ËÂ݇¨ô‚Ö¨—·»èBA¾Û޶{Ÿáéß´k÷•®Ë1wš ¦x,è_bô?Ï»°€ÉÅá”x °ÓSêiࣤ ®¬ü¡WaV#0é@ÆÀ+#(‚”É!‚^“a%-#Å#÷ î„’…ªõ¥0rP=Q€u˜€b(:&=”„z'D~Ü0°À:}»ZâöEßç¸áVÀò úyEõ ½Ú4¡!7ý_0.ðXµ"ùÚÛR&‘6sdú)Ëk€ð›/ÕrH…JuÛœ|ΖU?/†³ÕP,C}Õ …†É…w-/š×ªOÅÈ/B޼AÃ[ã)ïWÞ&ÈIãB‚XÂJp:ñJ2¤îçœ%õÅP ¤™ÑdCwñT¤‘|‡`- ™È§ä+É HXò‘vCþÉ‹§Ò tEމ@6. wï1ÑšÃ+D‡7ô•U»…ÇÚíÉvPfö²jšä„—Våo®îËwc¯8â²Ï\U•™aæ§ÿú0\{¸Åc7ß4·¤¥7øç$Ç9`×$C’„€þ)aÁìp°˜”çÌœïøÓó®jÛ}Ã<Þ伫òxi3†WR¶Úi2¡Æ¡®%×—-êTdº½áô4²ÃJ¢Èn\8†ÈÒý# ƒâ¡>b~4À'ååË—'“%ÄÚ!Á‰3—VØ%<ÕÿÜ×”Œ˜ó£{Ì›¡O«šf;­,8ýÙûCS·u£%ó8A/ÞêÎÖvÊÓ$êèÑ£²ÏÖ;"†`M¡ƒâ²„Ö«r™à¯.)·7uÇ:¼~«Åd3›Ì&­‘W®\ þé«»dbë‰.mÉ Gp‡Ã;&SjsT; ¶ÿ²[¢+%¤»á÷;ìTć–Nºaîé×O)ú i‘¹.ÑØ©æõLò¶VÓ)U,y}BÞ‘X)©˜FÒkì·?Ä’:c4†§O¤®­‡‡;â_šR_ší<Øì ÇLÖxÜe‹Áž ;ÓÞæÓ{ßûÞgžy†ŒÈ¼1hy£ÍÓÔ„*Ëa¹­¸³Þo±{½·¤;a+Ì0rǾš÷’‰|RÊìHެçÅ:âR••02ž"ŸêÑxàÜ·ˆ*¶ëþç’µ8‹Ilés_°¡å&G^’\`‚>Àg }ȨÇÿH9A)èkèÔ[j‘l+ˆT`´" #ÐÇAp£ÃŠxˆ)­°æ=….¯É!–¾Cgdï^Ráø¤’m™±Bb¨ŽLR¸C5UÁxËTH†Æz=©h (iIE Lhu>, X½Ž 0P•"-˜#4‰W + #/ùö@QÉä…òKñbö GÚýk¸'è±3E" Œ»­Îkz±uÞüüÍRu_ænS᱈!E¾½IäkGº­[>9‹mɶè[½¿cÉäl—5…¦¡ø\^R„Ã2’À»£Fœ4¥¾¼AŒ·Æk"Ì»†aÞ¯ž·À‹J"‘:$–A@d•ìxD˜»àhx×ÄðSf(ÂèW¬Õ2’È×P2E„3”’5bC³¶Wö5É.Û]7«xÙ°ÏëüÄ•On8þüžFþT9ÿížS¾ *R"Qm”+ôœ²§äÑÍ &>¿»TqÒ’H*IB`KMÇ–ã7ÏŸPY¨YãרlŸ½qô­cí›zíVÓÌís‘×çýÝ熅ÍšŽ—*] °»ÀL¦K/½”#/¥±D«Kh8߉—LŽüh°ý‰}…{:\wƒ·ëÆRÀ5tGV¶² ¶k÷$­­`Aù ¥PûÐÛô4¾ú×BmÛLö‚‰Sï®®Ö¾® Ÿ¡PêѺ@ÓÃëFk–gê½ê0 a² \ûb?ݲ{ýs¿ýP¾ÝZ¸´sçç¤ùT£rqMÿôú×ÿÌO£ÑÜë mؼwþ;Œëâ3¢f³£diå.êÜï­] vÄ"½FKVîü¿·˜Mhºõ¾ù­ö9Y;áÓ±<ö|ÃÒÂØž={D›ËÎØï M‡t_ì7´a‰Œ4¿‹x_:VÚÞÞ3§¼àÞÛ¯‚OçÎC>Ÿ]¼¥+j;þW£1Ïâ™| Ùï´Fºýv“Õˆ=GÖ‡¥¶Ïôrûü……‰&Ó"ë©©.l.Ip¹znw“ u+§‚ ±Kë¶ž¼|Z!¾ƒªq.È€˜Llý†9!¸€òKW_§Íl³í®œ ¯ÛëéŽpP¯æaǺ<Þ#Nvj)¦üÁ³ÀÑ  ï£šZÇõËí-9k±)tsoswÀiÖDQ³¢+®¹ûµþ´¥Ãi ²> z£Õnð{9i$ßêëˆäU8ù Ôˆì N µî „Mv Q0¸¼‰•Eëk)Ë.fƒ\"·áh™"6øZb·ÇñþoĪwÆÁyP!ƒ²Ê/ V¬«þKÚѽ.Z“‰ñØ4¹ñÇŽ5›\¶ 1غº¤ò!K™—Þ'˜zÊŒ “ |¤H1 '”‡>Å÷!Á8¨éÈtjP9½[“ž7½dxbÀD:ÉNJ ^ư ò"lÁnè¤âø&aj`Á%È#w:µ‘‰ÒÒDÔZj* ô²ˆXfIR °Î D_$(‰ä)Se£0LF<‚9ÉUÙ¤Ý@ý¤wÓñ)RÀ:dÈá “/ Yr–#àwÃãõ·|fÅD­œÑø?=_SeïÍuX²KæËˆZÇ#Ê&S!ájXÕ÷oP²/«ÈþÉú†'65¼peqÏ#ÚÝÒšVìþêûf-‹+¦ò÷‹uÕ{ë{Š<¶ÙsîZ|¸M6ÔcéSBŽ…nÍ¢ñ÷ŸA‘ðHý¬níûîóåçöº.z7=E6ÙÐ7û È8‰‚ÖQÃ).0“ Ó"Ãz:µŒôÉ…‡" mÙ>Úðn_8;À¼,˜¤\‰©ih6üTª¼zÔ{ô÷Á¶­Ñö4`YÄU3êtN!c;9½H°ƒŸñÿʞùI³ó]+ḲúøÑ·†>—Íh7Çm“ý'_6Y— ¦Âæm{¬Ù ÓpÇ@“ƆñßG˜:ÞZÞŸÁ°Wªñ·€Ö‘ÙYœ%&k–¿qÝŽzÍ%­¾¹=Ïßý@‘ÛÒÐÒžk vúÎ~'8Ê l ¶ÂO4fb°—N¬ÿ§üü‚ºoU°§1úž_±®¼m×9`Âc¯}Åë u˜—eØÓ³"âœÉ@åÉ  +£|£¸í5ÍNCÔðDóݤm¾Æ^ŸÿíŽÉæN ˜8u°)‘òR0A|óç'‰W£ä53‹˜±~øÊaŽO"þ¾®¼òJZ{@Ð:ÔëÓú8ÐK¦f¦.½Âˆ% Fv æ –†Bëh^¬#±©H"(dyý«[‚^CöU9ÇãŸ?4ñ`hbÜä4š,¼”u6UÌXámÞŠ9ýÆré}o3ÚG‰ýXOÄ{O•ynEÌn}MoiyÜi6j;º-ðº$O"p:¬tŠÊÑ:²zËß{áÀ‘͘÷5‡š ÁŽGû¼1™1<°ˆZÕµ%!6€aÑ9Z÷‹Ùd@d´Z~´òó{˜0bh†± jè+Cz.1|ô1E&4 ¡Ç `¡' ã0DBZ )¶¢! c² &ÔE Ñz™%)ÈEÐr‡@qÓa× #=‘Qz(£eT3³S~òˆYI² †€T„&ÔBhðcœ!!ŽNÔˆ€¬F|¨"òØëuÇÚ_Y]-”ÜsÍ¡ ÙN¦Q‰a²Ÿ"yò,/yZ«žìð”È õ.-){FÃ&-ÒŒ`¸H‚Œx Dæ'h4ÄœKP0y§´?ïøL¦$ýgQæ yûDJa”_˜ˆ™¼úL€õN ’—P0AÏùI^\‚¦ÉÓ wPoéƒT„“)i¹Ka¨µFn‰D2…u["Ñ‚dÈâl?’š²e„jp:. OERŽKŒØìÂqçw®ZµŠä´íý÷ßÿÊ+¯Pkö4à˜ï³]æ³Çÿó]dCÉ÷Î%¹Ÿ»fÚ “œK2Ö¨þ|m5êœdúñË+Ï(÷Ê×ñvmlùìÕvSrrÌ ‰T¹p¨+áG®<ãýR^?Øü?›O°‘î{É¥‹¬°¾o;=Ͷh–ÎÓ ô‘ aAëVN/ZP–%Ç•>¼j×÷îÖ9¡$$ÿ9ìhê (fbkdæúÿýUûò·­®Óm³T¹;}áNoh_Cw®Ãx¬£ëÚÇ^ý¡k3süÓŸ¯=¶¥¦SÑãÄ7³ÌÿÏ·bCz•fT( ÅÜ™SP)SNC£ZÀaeŽ]<¬‹ ­"ùÓ1Ÿxg›¶bî¶…š^^Ý”4”KÔG¶ôé#}µ‚Ö™LšûCaž»^×ä§¶}^¨ “Å‹Ã=Çô„ ÔÉq»-&‹1±ôÀj$’‰iQè©o=© É®|DÚúÓˆÇ4 Gv»Cße]*_¬n\¹ ³Êf1õÄìÇ£yÔg+v’d¶@IDATqDoÆ:ÂÂA¹¤ó _â²Ä‡h•K—O[{‚‹/÷ãmt’|¼Ä°z…Àûßÿ~ÂlùüÄ«jêcÈã´ŽŸÙÆ[6ÈѺü-\¬¾dÎÄTy¸Ë¬œ’àBФQ—iœ+Vàö8øªaóÖx³œŽúÁ~³°œ;Oei#ê'FüySÙ§(Ëu,)oͲj04W4nBÑ;ª¡©µ;^é7–àß*OÃQ@_Ë1ïÜP|Æ‚DÉ7$ 2…U¦³ÈWÉÓÈEpgò¥0"T’…bˆç)ÉõÕ‘¾@¤t(½Ä¦ËèìÅÓôJÞ¦*°Ê‹J–ï‚*R×_=Õ|ê©§^ýõx€È'žx‚A€^üä“O&Ÿ_?Ñx “¯ó«gTÚ}õݲ:£í¾²j×¥=7ĬQ}äfís>'º~ÿîltFùòŸOûü-­< úÎçÛ•AŒ&Iø­º¾3ÊëíšvÐ:’°‹Q]‡¶Ó&Ó‡?üaå=B ªÉ7¾ñ‡zèL¹ ½ÅSšÃÌh_Õ4}ËžƒS-¡+J4ÄgS;©¶¬ý?›º+<чª>ª8Š–ÆB=‘@ËŽªpW¾ßЀÆ/Ä*géJ/§@ø›Ø Ïâšà(I_Ñ`Œ-Q_i#YË Ø»=/°¦¶3+µeG÷uîÜÁ^uF“6úSY¡ñTÞÖ¹ëßBûøi²jH%ÌsMY-Çm¦H(f~î¥W1W|F[u4ÿý“œ†P;&40 €ŽlýŽ‚ŽV*¶ ¨x'Úˆ×wÐëÇÅ×lŒë7P`›&4ÂŽŽvÒâp'6³”‡0}’0Ç!1Çüëó޵jHeøÜÕU®`.ö|âa'Z#^’6ùþÿ¯Õ@ÌåÃÞ{"™óØŒA–¸†P6°]¬œ×¸HN¯ÄrNà#1 ª ñüä`K‘¡ÌÓPhÕô˜˜gÉÑî– eåe¹þöúù9ž~ÔÒ‹6.åÙú0÷ ¶Âç7í D¢í^ G«rmÚnH†h$ÌR)ê‚</ËW,®wž$þ' ^bEMéë3’Vl°›¦ØŸ<ªÑ¿±ýà´b›0&[˜‚ê³NÌàìÿÎl21Q!üÊmDGL&­vo¼Éôûßÿ“IkÐ~låüòqÀA[ ZN‰Uu”ꨟƒ0—A¬ÎóÁ³òé§Ÿ¾õÖ[ÏáìQ‚@¡ˆ€C°X[bxÑOª…ß'. ‘²Hô_Ñc€®Ðl„ ”°e¬æŽÆCrh¸lr&#fdâ!Ð&@¤Â†×ÐGè§¼&PU LŽ2#Éû" ,y´èI²ÃS@ jÁç8€ªÐ=ÉVèa»P’S~è P´‰ rPŠZÒ&GÙàÀ%¤1™ª¤Ý(ƒ¼}Æ7øH˜ŽOOÏÐÍÿ÷eÇ;?ÝЀöüäÛM@x ’´?¹pÁA¬|ø’¢ßíhÅ)9Y éë_¯ôÑ%%B<~O×¼J$ 1ý°†,1Ý3Å‹ (¼VÄi‘`^àó: äŠä r\¸à±„™—=¯W/$PÂ<…³„% }˜ï:ˆ«*ERÅH@A) …¤ÃŠ„ÐéàÉ]j$üES2ÝH©lº®¡YúrÊ!×4þg>óŽ\g†ºçž{„àÆodXcH×ÓŸGae°œGefQ×mƒŽ «w5¨­Ü†ÉsÄ“óI^t¼ç¬g(8—¬µºfFÑî“ÝÇÚÑcÏàÚtLÛ-A®ý Ý“ßKÞ‰Ëô_N«€"¸É\ñc-š ú£XOÊsœì žQî*ùx`0-€Õ™ˆÊ²ÊüUÛNîì_Œœ!-h f“ñŽ…e_»y6{:}é»Þ8ÒÊdá²ZüamIÄð/%öç©>~øÙ8TJx¢1¢-(æL1|úB{Ô«aê)}ìc(ù8+üÇü?Q ?ô¡¡7bS0Aë)ÇBx¸€ÝEe2eM»7ÔuH뽋æõ<ûŠ?)pÛü]-k×¶àwÃ…†š…Ä :„Õ[)ß4: Ã:á¬íõšµôöó²dUîîZltÙ¬¶œÞ~×½]DGéf÷¤P×A³=ßQ| †c9­ÙYì*»NO`/\lyÛš3½³ñÔ7J‹9Úp|gƒ¡Àmî©pÉÏž ‡ú‚FcÉu%ù9¶Üµ­_xf™;wÁá=óao=9Z³*Ê›¾—å¶—ØÍGZܾhV8_(¥`sŠ~¿¶HP9ÔeTRÚølãÆè¦J©síWiÌ©±Ð¦cщƖ?£¨Åœ9_“oku™Ü>㤺Œç~2~mé{ô…ƒ˜L?~í(m`GãsI³cãé N99—ÖÎvX½!m°ûôðNw’Œ.ì;6 ~vÊêVÞpÔYb *vuL/[²yâÂòœ]'ºÿX}I¹µÜ` ]¶hVsc°­»¨ÄìcŒüÒÓúÑÅ|@bÈõ»Øq¡0p’‰¹3âènm)2Y£ÖàÒ‚’C}¶\›!Çg+’`´Ø  GÄøJY.o"e~?yýè{s^[Pàu:mysŃ£; )úæ¿* ŒÁQ[ª6n2‰ù‡MËБùuò)#ã•’í_|‘·Ï®»îº dsL„LoÀ¡1 ßöF2©)¸åžC`  N0£+Y3]šŒ¦’8 š”>è1è($dІÁ2˜ÅˆÀ"´B%ÒkE¤mI #ÛY*‚„¯Msñ冓1(c>u7‘¼(1”DŠÁ€C-„ƒ¨\â¿Æ·ZJ8ðŽàÀ”Kàqº$4J‘-ÃÉNR6(…›à;´›”\ŽéA‚-ˆ^1µ›š˜TŒ>Z§~‚Ä}ÿ¶yl±*@!©í/…æ’IY5ÁMµ=ìÈ)1ÿxÃd•|<¡˜€¸ ­¼>Þ#ïZÞ¦zJû hKw®E€Ûx.b„L0bÔd¡oJÂH”èGÂ’\ž"Û0$’ŒKÔ3b‘}!Uyž´€BRx r¤—2À±”ÂÐòSz7©’Ë)FºézJÓK¦ùô§?MÙµk#Œª#º"#Ûù Ø1!!ˆ“ô}Uë¥HÅ&0f}¤ð÷.›¼õx'h?ÑñS£t4ì1·æ@sOoï~[Î¥#³ñì[ÇJد9rùÔ‚×i¾±‹Ë´éxð×MóJw×|¸zfZƒt QYôêav¾‚â,Ûw?° ±Ä/šœKŽG[½s&èÑ u<Gë2·Û0ŸÒ¼@¢/îmbµò/7TÃí²©š{~vœB€E¯Ü|jÄo?»ŸH«Å8ob.KÁþº«‘¸¶×vĵï;†î@Ød4乆‹äp†2¹p !a¹íO»Áì8ÂeÌ®M/YãåÛ丒Q»»ï¾û¾ûîûõ¯}óÍ7ë[ßúú×¿Ž®ˆÀôÊ`®4}kŒnx¸¯y,›L¨ï _@Ÿ[¼x1êÔ0› EiS¸ ÇÎi§(úX&™xr`,‘‘Ú`+e¦›ªÛ££Ù¿®ùG[4’_m¬½Ã¥™…“-qËÔÐç`ŽÜ ÌÉòUÅ ÔŒ?õSKµó{Üñ µïÊ]ðzð»~ÊS€?/_2u÷¦½°¥<»Ãå*Ž…{ZYÖX{_wWu6;û4£bÛ±Þ3s„h 1=ɽ¤|Þ‘6K¡wO—?ÖåYúѲÉ×ÎɧÍñOÁ¢AÐG)3 ʬfE§A`P²ÅŒ¡1ytuþÀNsœ‡ÀOјé0WÝ|??eû0\Rñ3åZ§âûqÏ«8v@ì=”õ9s樧89÷pKß›‡Zñ%–øÇ>xš‰MŸüb³*™Kµ@¨co°c¯½`¾-g¦i‚bª¶>dóÄÏ\rÛ‹áîžNöö¶ÙÌŽšcA­'º1tÂþ¨Õ]Ûáýú_öÜR¬á×–ˆÏh`éµ)·cQ§9h4„M×MEMKò ó,ø Ä›æ.[II¬7'Ù`\Ɔ§ßaO™2E2]`q|u®¥§(+×[û¬Éâ±dU,[¶ ±Aü°è^xá…“&üW¬¼2™ƒôît_l’éÏR̸ɤ^ÖïÎÚÑ7\ ˜×]w„‡yÿýâ¿ÈDþƒüa9rd0<R”LL˜ô ƒ*rU¬A.ìyFHì[ cp(Æ:5<ŠTÐ Èô™A8eF˜ÊÀðª ÄåƒSè™+y2"‹t®4ÉÌ3h9<’a™¦ ;^¹ðî=”K?ÉNئ¬õâ)æ=5… ¨#Ý–H~ª–§j`dA-ˆ‡†úr%Mp¹‰GäCõš¤°"29¡>ß:µ™ìÓÓHø ùk÷…Ý …I;…'ÓÇ$´¯UÀ8â„JDBO&â$rÅ s ¯˜$èåÀ‘Vˆ/Z¤bÂz†„å‘D¢WðÝž$@F!D%aLH®ÿIø‰RJ7D8K’#‡jkTº!1ˆ.ü¹ TPGümõ Ï}˜2ó"ÒåKÉS>zöÙgqXþMÿE³£Hÿö·¿J <¾p§Lu^D^T¾ òFØ=í«ï›õ쮆ªâ,ñÚ›zqoãªmšÅä D9˜•ŽöÞy§¶ÍÏsœŠS&0=ðÀ' rÇwáŒÊ0³4û_µ¶óæy¥³æé¦×ß_¯ÙSƒ;n\‡šzà™ÉU3ŠýVèP)Kd_ q´.C‹È£oÜ6—w„cÂð¾Ë*~÷ö A눩n=å¾ÃOÞ þøS =øÙ±â积i眑x<Çií â*£}_zópÚÖØUÛ¬ `Yˆjò‚ªæD`—¡Ìø¦{Ц( Mñ6L)èel<æv”® 4­g·;ZÃ]¾mÕi7ùƒ±¾@Ôã8õE—£0 sMºÞçíŽÄöãUV˜ïè·ôXÔ @R”6LJ4cjE8£}"×}$W…ÄŠT€}Ä £­ªUi8b€ñÑÂÊ"U©|¹ŠxÀ—„§úŸŒüµö9jÖy†»Zèù\´a\;½ÇŸ‘ê·‡ÍëR?£oÙúPä*ر/×Yó[…Áèò›ö†&ßãDÂ&Äc‚)ÔîŽø‚ì¥j3šbq£/nwCœZ;‚Q»Íd°Ý–5NúÌw®˜±~û¾¶>m»n‘ $-³©¬/^®YûiËE]"¾F;@äð¥—^/lîmÞ¼Úv¯5@çëÄBSDž´Œìz†ç>BL<#üå'5R 1ª^òTÑ(VÝKZôÿAC¯—ÕôBzM´ ‘’\1QˆIB-(64°Â4 Ø+Ø gimê•ÀA  îp€§ü¤`”YM¼„a„¡J"îxòÓç× ÿù?îå>1ˬ¤èSÒ¢ýԃ瓒ù #ÇB.Œ« =(Cá•xóZy)¼;y5ˆ\‹ÐŠ\Ñ=(…­H5“Tr%B£”²0¨+ä Žüú®‘’89Rò%-LÈZ¼ £g‰xSxʬš(U—A3T¾äÉÌÏM s.m˜./5%ÜvÛmTÞÊ ¾‰š·zõj¡Ù¾};*býyôs,û.œ½fAøûRùƒÏTк¿¿~úÉúúU|ü<ï;*‹ò?›ëZzœ­ùÅeªó¾&æ:nÏR©, 2}ì¥ÃÉÞR …£‰%–üñ´8)fü爷͎?«Ž.ŸZø‘KËáfÊý{w-(ðØä%žèð—ç;1pŽ´ôøÃ1Ð:¶ï`ÂcÃþ¦ãEi7{ãÇ;¼>Mçüʪݧ}ãe¸2#¼$”•¹8Œâ£ÌSR2`÷‹_ü‚£õ1½2)³³êå—_.UCÞaÓöQ¬QrÖÃì„ãX3™øX'S<È]QàÀ¿’[a1¯½öZÄÀ®¨òb,¡uÁQP4OÉN”Ežr¥ä_é mðú75Fæ»:Yþç6ÄY»ÙÜÍñ™Z×E1ݳy3š ZÚ*ë³U/CÀîë«ë.ê 9{#Î=;Ÿ;ä÷\Zî¹}ΩU$À̪e Ïó&™0 è¾j9~MÑX¤ÇZf‰tãgÛä N-‡–†vÍÉûËv™Â-ÞÍ册F‹7b v·yì†_Ü §ÀH?—Ô$¥6ƒ^»§É÷û];8\]™WiiÇ/.ñ˜€§j^)…þ'Ùù៽ɽ<צ$Äéî6nšÇƒç“†Á ¢Ï»\ÌÞ½–^Í#4æ¨8é-ïéj7Æ´ö?дjúìŧêŸg÷m¹ ¹¦ú|-b`cäpy¬ñ™‘†]­Yå&m6ºÔ³ÕmémöMsÐs0MjmSý}' -A“ÑnëÿÞȇ$R"Q–&Å—æ…Ö¼µ£Ød÷{̆!´áŽîòùžc5Õ{ƒÎ,³ÓåÕÀb.NäÀ›•®líËæôômë%Ëö­·Þ¢? ‚Ÿ(èòtTîã&“4ûw¿û]NPáAÆd¼áÔ‡“á¿0+š±wéÒ¥Âðá‡Ös¿Ó»2RÉ —àD‰YκrT.Üxƒd7„J@%E‘1= ó!­‚¹@–ŒÉ¨È‰÷ j¢‹=L0<í·Alf’ DE¦àü„'1 ݸ`ΞKÖ Ú0ç' µƒ §B e\J&M˜C­aN«JÉùEQá,Å€/uù¤„=O£ñ7¦?á)wÖ Jyhm¤eþ%Ì¥ŸßùI^dÁW^ ˜;3‘žaòâ]@#ñÔŽT´<‰¡`Ü•ÃÐ0¨u|ÄÂ@7AC:'µÐ×Nnlz_ÈÖÙä‹ôM…¶X¶µwo»{ïºF䈯¹uï“eá&Ÿ}–µøJä[s ±«b‡Õ–Åöý¶ìÙF«Ëî EìSkŸ€g¼òSáÎ=ÿ>wéÝ—n FÕßµ¿õ%CÌëÎ*áÔ‹VÃB{¸ÛipÐìb2)«‰w!}©¼ ÖWó´»â6[Þ»¨’ ÎÀkŽÜ®Q`ScÌk äºl®þMÊ…U@‰Ò©Wñþ‰ò/þa¬ÜvË÷ï]$­1Ì{BÃä–.ùù˜KçΧ .OΜÏ=Þîk²ºKù0Þ\·; òE‚3 Ô‡Žø”ol|ó…ˆÁÙw¤«FMOáþ³ŠC¾¡Ñh+°tØ-¾{ÐaÚÝͶ__Ø9)°¯Õ†c]a; ÇYï3mk·ZÃ¥Žw \Ý¥Y“\ •%U¶Üªt-œ.Þ^wcCó&_,첂- NO¾ì\ÆY¹r%èÃÑu;¹{ü^<û‚9y-}º!#;z9¶"KìÓ1ÏO™ ùT@F)Gê¥ 3òl(€N`C†nyÄÌÅ\ƒÍ¯\À$ÀÐS {Ô©4ˆ"Bl]aÈ# °X/%y*w`nú#<™Â ÒÌb,»P*ÿÁ™L»5n ÷ξúÛ­k×BŒA‹QŠå#ŸŽ}"W­ZEù{{ºwnyeR®ÉP»: Û òH]â ,ßy"Ñøå®ÙoðÜ4Ùè?ÙÍùè(ÐzlN¥Ò8>B’ë#Ó…ÿ¸õäËûšÔÓÁ'TI.ê@\Ó~Œf§É–½ÿk„±í±¢Q§ÉÈv 1Žá¸7i¢ýG͹~Ÿá3JÜ"8tõðŽl†®R©=ݬ¸fâÖ"“6 D£¡ö¸óš+ßÿÆë/Y»Ê,1Ûͱޠ…S&êü–éî@wÈ´­Çseq$Ï|r’½¦(¿˜Å¹æ™fg‘dzÚ;ˆ 3ÐÔP -n „LvKÜào ˜4×9÷áðÍך‹ÍYEÖ>‹1â²iK–,f—v†ÁÀ¶•˜(šT ÆM&ÞÈ×¾ö5v1Ç&ÌPÌ8ÉpZÄ â”Ȳ:ï“#?%YºHìR*‚‘8z r%p‘¨ˆ=… s=¿Ø´L*ž0Þjð„ƒÞz§ÌüÔǨ$ús ‘L1Â\ ÉS) ùr‰Z#ha@1º µ Åàs¸É&pq§l <äa.)L?{¿”ÂH<Ø+%á'¥â@Œê›ÂDîó¢™zø =o2Þ0ŸÊ…§„)4 €d'wÉJ*ÂEäiÑ:}òÓ†Õ&wŠ’˜/\UV–“zŸAE6@ª ðjªË Bå)²Ä‹†™HBˆ‰D0xõ¢Í DKYEc!ÁPf@XÁ‡$†|¸ø)¹Ð™Ñà;CòePæÜé"QªG ž;²Ç#²SU#w„™,dö”’#À°M—©Êë(êó©*³dJ&±8å YŒ)ß…Ì ²ëD×¶ÚÎÇÚ9'aIEÞÂòwáYéÒ¢;V!O—6]üßÝýË Çw·ÆA ørÿÉ+*«ª¿x%¤Ý\Ýþ‹u5½´üÚY:O‚wiK M·fvµÆ ­^^.$g£ïÎ\Ï´¡8=oÍñå»Ð1|ö™³'äü{z/„„\¾_Uõè 8þ‚ÂŒ”i“EB5Gðç¹Éèä2„,>uµûw[N<{T[0àzq¸]Ú¦Þó=Úîu &iÝan÷wuûÃÞpìÅcþÿ»µÍŠ[ͦâ,ûĂܻç]–õ½š‚œ®@8v"œ•pà‰ª‹ÛÕÃ3éÌe€yf‚3zšîC5s%|˜•’¹Ý~ûíïyÏ{|ðÁüãl€Ã<ÎüþÈ#0³j'™~ÔcF°S&VÍšfICÿh›öæò9ôÊ) 'çqöo6Õkõ~õéÝ7iÚvzž! ï¦7ä0š ù.Me”‹·‹µ kjôÖ;?±y”«Ñ;)ÞõŸ½ºÐô\ù‘¾{Ôg÷‰2'ß'ñ/@§DÔPò”VgBµ3˜Ãq“ËbË\b¡nöþ·åÏóÊ.þnwÛŒ¹YnôÑ+*<jûNÖ¬Ÿ‰’ÑÁ—fC¸Ëir  RYJŽ[wu­0™­£©½§À*^Ö/Ü<²x*¼ÝGµEŽ**í[^ýËAÿôMÑüGŠp÷ÐtV#ÊlAÿ!¡¬ýF…¥ä¢¹¢Æ¡e²i äô×°ìœà16ÎÎ>’Øéåd§Æßj66ÆrøûüUËÐô4à ë·x>Ä|ýÖ9ý³úpX_i#>íãÉQ °i¤£ÆdŒ³žš‘Émÿô—½sŒõ³Üû Ü9í1S‘³­«g‚5{Éë4À´´Ðmíìý‚hNÐzçãžÛpåÏšæþN šwÌ7'jɳÄBqC|_Ÿsª;ä6Ç&­¸Ën)1V³¢HöÈ ÷K ØýaëÉWtà,™^™Õ*žÿšdŽâá6ŸÕa¶æÛé÷>Lý_ä»ý»öB\è –zz++&¯ßÝis˜&O/Þ=8 ‚Ì`ü“ü\ã&|ÿý÷ãíÈÈÀÃÂX&`@ÕsÐø)³sš$aðGZ„^!‰paë‚€)0&#“ÐT”ÀŒ€Èxã)fâeÔ•$jècXñ\€r2A óð„9¸Î/„Á¹à)Ù©„Г#<ÏM&&ª&ã<8‚pfò’²1óSâ!£ï;3ÀA"Éæ ˜LvÿÐÀ–1„»°å)ÃS艡l‚°Þ·o H- €ŒKÂæbN'@³ð4¥ÒF¤I¥ÖR*rTÕ‘Àºwë¾}óYãÿ77jñÿûÚúq?»A¶°(Ha¼_Þ,‚0„Ób ox^%0äm)ï]Äi'žu.|SD& ãë­›HÂ÷HIHZÄL/ÐÃq¢  h‘È3w.ôÉ™D„ùRNy 7äá¤Àt%´±| VHâ…›‚D[õÂÿð‡]x(À.‘zp¿7m;ÐØsÍÌbvî\Š3£’Óó8z‚å¤\þW¹³»FÊàÑ7Ž¿d®¾ðCOi+“äšW–-ÇV¼1þÿܵÀ{æ”L+ÉúÝÛµ}Èm 'r4âÏÞ8Fö\;õù=v¬ÝøÕ÷ógöþy»¦&Õµû˜QBÑøeUˆ°Ýà‹ËÊÖ›÷ï®›þØK‡ÀC;á)†3°þà³8Ç”œcɌɌ¬¦cUìSš+åŒùÌ3Ï snÚ´‰Y•¹•$LÄìŒÖ:×ÃR¼‘ìÆ”É$«xI ›ÉΦÔY}ˆ&Èb[_¨ÓbM¸è[)Õú<‡·+”Ûæu”x¼Ñ@›Ù1ð MžzÓ]b0ƈOwÅcGÁ‚¢žêê6àrSoØ•S6•JÑØ6l؀ء ¡Éɘ@Ǻó»cŽåÖ:‹QÓD;wÿÈÓ 6?çEXت`";ÇjˆŒÕµ‘ìܼ šËÞŒ™Wn7Æý¾1ä—͹cjéMþl‹õîí^b6F-ÆhqnØïª¨méZ³î­+Š ñX8ؾ«ÅgŽÄmó²›]6{O_î"kãöº˜ÑdžŸåŒ„¼yÖ¨Õbú¯ßýqB±¶¬˜ò ¨–¢1£¹¢b’5'Ý 0ß=ÑÒXÓaèˆ9â9—Ÿ|á¹Î,e³hf'ßpÏöIÕ ¹(ìæ'],:Á_9´¯¡÷[ÏîW"‘dügB X܈Ùt àwòf9„÷’K.yiõoº|ì·w™ÍÛB¿y2»¥ÀÒäõú#±Ò†¾üˆ!â‰à9gÁ}»Ú;µŽS9ûêΛT.¸½÷ØSÀÉá°!7G:CqÜë¬3ÜåqÛ`¶.˜Kï®5ÌiÛÏI)¤u” | a[®ö¶f°ìüâÇ6vÙáBS°3îŽâWŽ©fêßœc¼&Î^rõ\ûžoúN˜Â¡pÔY×úÝ_A&ßx!þÇ;—mÙä÷†œJá±åEù8ò Õx:pò )? ޝq“‰ÇÊÅ-nùòå 8ç¸ý²c”·bLÿù€ÁŽÞ °u™­äÛ ïV  å'PÖ>&1£+BN$üv‰‚XAf÷¬kP 8ÀPŠÄ[à6JH˜Âulo(y %¹ÃÒ„S*`> žC=MX4y£7Eâ mtøì|·UÛÉrÑß}4 -îz*ö}Ö÷u… ÙÄ?n/ËqvÎ^ùñû³k²Ùoò„¼åŽjNãt›l&[^Á¤+CÍkÿvòŽ …»ºŠv žo¹±ÌRWálŸåö8M!oǑ©Ké-¨¤è¬b2ñ¥–ZÎ[°,7纣/>ã Ö¬ÛsÍ5zs讟þÃWðÝ@š ×ßiÅîiÅÙw/)“˜‘ºão+¾"ò-Qxþà 3¿õì¾Úvÿ¾†nFÆ‘ÊèÂæÓÙÕ‹äZŒ8Åa±„<é‹GCXÞ1£¶¿û¾©ù93ègÕ­iër½T³ Ùh±–X;óM‡úN¼2qÊ 6›£·«yÊÜë ´,â v†|­­œ•\9ùæ†ãlUì »íÆ˜Õ ,³ç/ðu4&ÐGü¡¬†øe“'V:Š—‘\Žo÷Öðó‹Åkj^esƦ)Y*«ÙQý‹w|‡›M;üù;w7Äã&yò&‹)Ø×Ò ,êAÉgØ÷Ì.!`²ºýÑ©û»‚“fÏgi1™­ã)Ý“û¹.Z“ g:ŽÔ¿FK±Ïõ‘ç,Ì‹`Üc¬˜¨±ö¢§P†™â1ÚAµ2R¬zX¡…HíÐE¸˜ô  ¼” ­ã*Ž 0„?Ü(¡,¾£ l˜%(C:å'kRQ;Foa"Š|€9¸sIIOACàÌ#y/„¥‘µÄÀŠÀtƒ„ú×GXÐ@RæAia&i8S Jñ¬§ dAQIB±á =#† }Dè07îÐSMرoôêiº@O òíWì7hî˜WpÅ”AM ­Î+§äüagëÖ½ã€]º¦NˆçuƒÌ R*¼G$Jz1¢xHOä'r%IÄ›ðê;$PAAåÎOÑm#$ä.h‚àÉŽâ \$‘’ˆjD!e~¢Â\›0CIÎ!õé—~-œéd‡À“\ª– Ù9~‘S¾ )Û$ÙqÌŽ?1Ëy:âŠwÊb¤Œ|þ`—«¡!åSù髪>÷ßÛA눹gÙd¯,«Ìg¿#Q-«Ìkìð¶Ód³sÿöº®éEîÙ58ž“:­»´*þÄì_½UËÖ=·þǺÒl­?Êñ²bqD>ü.­ÌÏP¼y$hÝg¯®Ry‰<»»áÖG$‹q&Ò ðâ硦¾O<¹ÅÜÿÑŽó@þùö¹éZiyUÁºÃ­’Œtí>ÙYšãäØ#-½^*ÃÔBÝYZ™Ç!阨ø„ * \ÇÛ5sÜþþ÷;±w°z¾w÷ÂGþ´»¥7ô/«÷©„ʃaDd[±=ætfd>ýÊþ¶’Sÿq­‘*`7ÖL&ŒÌÔ&€¹E‹ñ Qß½ÐÚùô¯‡ŠhA¡!€øÎ»ui†6EBažqÝ~»Ù7›b½ ÀjèúíêÔžÇX  uÚ2B[OÜfއ'åØ,}]0ìü#8ªÎT£ QCåÃl¿’jÈö¸Pæ"Ç7ñ±Ù3å.kÎ4ƒÅå?ùr™»¾12édïÇO²±òÇ—V¬œ`aˆø[|†â@Ôè0Ç ÞF³C뫱iF|ëÝæ…oÖ¾E²&¼5#˜´)°7û§ÇNîw#;\»)6ÃSÿr[6»*°Ià5O·xgâêà±¶,š7õàQ Ðeé6`¨ª”ˆ6Ç"r¸ ƒ‘nÞ‹yW¬X¡ÚgnYηî˜÷õw»‡nšqÚ³¥IÛå Yçέ@Å6]@¡uBðžY%lŸ±áhû8`—®ÅâkC¬7l+ËéÍ2ìéˆLêéÑs@/ˆô„ƒ#ÚBŒz}Té›!…€DªGúÉi˜‹‹UçEH„¿ä(a}©‘ôÔ?J^}Ô_»ëZÍ3{Û9Jâk×g‚\S²jèÑð¦)ù§‡S&¿#T$×ÍQt•Ÿ8Nâ>I¤¼ei~J@àfèãäFCãBiDx€w™/¸.’ˆprg^@¤EäÔèn ¤C±¡âÛ-‘¤þê8Ò( == J¦08<¤ŽÒ’/•"žn¥¤Z˜Š+½@ “\øñ˜±Ö¼Ê1⻲e^Ü«-O6¿‰YàéhväÞÄXŸ›\<}]ð'b•ÌKûš•ç¦óGËwÛX-Ûç¹’öÃËÒzÙ虋¿¡Äܾ¨ìö…¾úô~ªs.›ZÈwàtlÝÃF¾þ³¶xO}×ü²\ª¹äúŒ’ÃøOÈ<ÎïþoÞÀ4áh îã—ŸñÌ’Ì\óçÖyÕŒb…ÖñSà/;Æ;}S 7Ì–‚°VûìÕš{‚wÎt9N¸0~*¬€N™Ç¢IÙv§"Q &å5÷ø›{´ï¾¡HŒSb9Uù–*ë¥óOïõöõ¿ìiìÖÞ<ËøôÙÉŽ‡¬ÏsYß;¯ô»X@ñ~øÊ= IH¨³afIÑåP ÐëÆl9‡\°ávcÓdçzûí·1'Ôñêè[ u6«•ƒ?p|öbßÛ·lß ÄÙ§¿9t)0‚Ï VÅJr_\ó;àÃ>hàüùóÿÌ®‰QßÀ—ÝÞ6om¶; þ¸åã‹ccÀ–씺)º™ j€ ˆ‘æŠå:M]8ëØõ¶ŸàE†Œyè£%|šÏ‚ uÌ6íû¿ÕY<©ƒÅF‘;k=áÖÎH¾7VÀ£¦Èvu÷ÃÈh`}H ¢íÑÈzÝÉå3Ûš¢áÆHl¢É`¹´@Ûp,‹‡5_Պኗãó»K‰*ˆÍ˜+&œ(ÊòTÌ6˜«kB®ãŒæ¹?ìn?¶N3bÕÅQ³/íkúþÝ UÌ 'ú=„9xdôãdqK^Àhèî;™å1Ù§çÒ&ݶ¥“f\½qãFl})þõæcžhõŒ"ƒ;k ÷éÉÜ•·;#7„»„lþ'¶[œÆH•¹ƒÙ´®/nšXRˆ=#I(N®P Ý–-[ăæ†nèÜùÖºcyFxºïŽ»>)4 $¬Û•0c§èaÝY/K¡‘UŒ|‹Í±þHk¬/T¥+˜C?V>Õª.ºçãÁÑlŸÿüçdÿÜsÏI!XŽtï½÷&x=Jùð£ÁtibdôfÜÊÄM•3FrŒö ‹XóoR‰"‚å=Èv>ÌáŒñT+ùä)‘”ºà54<‡ü3zƒÂVb±YFJôhéÔT„rR/A܈dîc=©ÔHhX6ÎOÊ GFè8T¶¤¥äô8DBÆLG€xù.J+Qj-l™ï à¢ÀÄO‘¸S~r4„ÊÀWêvÃORq—ƒ'””JÍþ<ÂÅ—ÚÂ.§õËKg—h_&Žw~º¡¡Ó=ÚæŸV¨ù\d¸Ø·Ž•°Š`]5߯ ËM?H×€°555¼JdF¹Cò•ˆœ$H‰¨ ŒÛˆ2€ i$ ÝÇv$±äBÂ{Ä’$Ð/ê B…C@–W‹à©¾€˜!{”VHp‡ QG†ékð¤H¯KŸ¹¥Ä£‹Â¢² š~}åGñƒÛø5ö[`¬ù.ŒýK.¡øþ€ È*‡d‰aå,PZº§ÏY ÝÕøÖ±VÀ»Ï]3u™éåé¶hs‡¬·EKT¹è÷üºqnñú£­lÑRQ0’C7å|ü¾%Ÿý¶ã ×§¯š’rµ¯<ÕßÔÏ 9Žo½?5¤hPt ß2?…*®hÆ#Òrˆ u0ùêÅ|x4aª>Ç…åyòSPར­_.pÛk;¼ ¹²´V¦}ªäðë[­Kib³=`âUÛNΞ㹢§$‹ªªÓt´äLG=&ƒ<êeN5„eÈ`ÌšLìg„-‡µƒÒƒŠ_’m7:óÞ8¹÷a 3ê±tyƒ·.›‘®šè¢ö{Ò]Å!ªÞ %š»üx“¶76Ê$:Ùå—_ŽYü¥À]öw!zæÙ3îëÞ÷“X¸Õ¬z¢­}ÝÙæÈñhñƒWîßýV{Go¯Oóqà³ê‹/¾HØ0TÄ ÒñåÏæÝj2[œÛ¾‡zvïg^4ãÓ°æõ7Œ£71;³úãµ›Ñl7ÙòËbkú:Bžü*[Þì`×B‡–ÔwZóòB |°5½ÍqŸ¿i¿ëcÄGioï%‡z:¿öÔäfÎÇÁ(d Ç<•ÎàÆž¾©–®·Û/›áac&k[d¢BONòL©˜UìÜôÖzò•nC‹ùƒ{ÆL•ÂíQlÔw7ú8IçÁë¦-è?يÕXÔÌìË0k‚æÄžábß:VÂ*ÙØnó¢Ju1@Ã_{íµÎX…ÑrÉŠÅ•V¶$¡³ºˆœF”çd?ÿÛLò·ô¿9ï­ŸW/wGßZ¤)"Óf^›²õL§½`Á²òy†Ÿ¬z…ÓQÜFÜOÂV›¹ªH³X0œ@@«¹èb#xíí­F£ÇÂsç~*zäiˆï¸ûóܱ|(@=DƒÍƒ°¯víÚuûÂ…¨b³-Í Åëîóýþ©§Ù#¯+bÞ´¯æ+ÿë}ªÈ°`%*f<0FZ€aØK_˜)SN³šFO|VÃ`\d¡†1S€Ð!ÆâÄ#ÆsÁ¡ÒáЄ»ÀalG· àáBÁ#~Ê^Š’@ò¥Ö„‚€Ð)˜™ Á(Isgê$[Úb€tDòˆ" pÆOçøIa@:ˆá)œUlj wZb:#½¶DC÷äN¾¬0Ùq ò‘´ž”„0¹7A&liR8P<&}Ðs§M $‰ÐS¤á‹ÇŸ÷h¦Î{gç ZG¸2ßñÀʉ?YßðäÛÍß¹¹’˜”'Kp&lÿ)'Y [ÛÜT«½Y§Õä¶¥UR²º˜#Ä^°3%¨¼ké €Î\žÈ ò óä‡KÐ·Ì 8mÚ4’Ó,æäˆ!“ècð-9–2P*Èpš#Ùƒ¿€q$á¢SðMž$Dæ‡I&¥‘´R$¡×wœÌE•§È9|%ˆ¼ô sV´ }YÐ3ÃhvVK2ºÌǦïÂè¶Ér—•zEYšÁð/à6…¸ ’[i¶Že½-I€KdÑ+¶yùñšC]¾Žo<мóU)ŽØ, » 2·D2¸èá’ÄÇI¿ƒmçA}tcw@ }dB˜M‡¶ÕvÕ´õxòÿÙ`{÷@8 d6¡ÿ,øŸö­‡˜_¬Ó>íd¾ÔƒF½bÖ‡M-Òìútá%3üŸÍuD~l…f¦¥¼€‰ß;o®µ ›¹#Z¬(7úÞåÁ’Ãxä9kávcÙdâƒ'M‰Íƒ«Ýÿ^æz|ŸáÕýMøš*Xç˜×v¢W|3x ZÒ$o%oÑÃ@ߘúèjxs ¬ˆÝ‚{ˆ^{oøpƒ¶DˆkÅÌ´ŸFsæ> 4W®];Íç+´nñT0£nV|¸‡½œ×ªmÓƒ>‡šˆJÇVˆØ?Lõ¿295wƒˆ¹”ÓW ¸¬Ñ°s&zâî&¿!bÔ½½[¶éO5§<´xÞðy»Œ1£¯·Õ•U”7ÿ6îjé á§}€`n0¼h(2øCá¶Î«Ö{o›Sâú]Æ>àÇØΛ”ë\šœ`îË·…nËo Ç4'»žPÎúÞü9ّɱx^nÎîŠx}]oÖ…?^úÜ´¼¬ƒ-¹»7ŸœìÜßå› 1L«ùÙMS¯û¾T|È÷ÿÙTKÚ;— ZG˜3›¹yÖwŸ?øïkŽþ,ýAW2üõŸ2±•°ÇÚ¼oÒ¬/—ÍÌÆ±C.ÏÅ–Ž€Øã#@Åý±\¤Ae54v1X;?4> H@IDATš¦M0ÌRÿVsë}O8ü¿½~w§/d³xÜ6‹5ûôÊw߀‰ÅÒéöo»A‰ƒ-]±)Àmtð?c&õ¶4ÄÝk$;»Rºy}x®ÜÙßC)Æ=”/E0¨è°;vìXfoD†»{½ñhk¿§ãÙh5òÌá^ƒå_ŸÞôµ».ü›¥ïS`EÏ)j+"yö³ÉÄ;•CÎ^ó“³øÇÑk°iøÜ’À1NˆÑÿ”äÈ­>RÂâ捻Ð:Hù€”œPx'g¶Ò’ô)ÁPÀqî›îFÉéïLC<SàgM(<-#@$‰É‚~vÀæÂ™Ãà ddD׃ ”bxò¶ä(@wœ©”ò¢´ÐÀ;¬`"å‡dD8†œ¡$E –ò+øSà oÄ´×MÓÜŠÕU‘§9Ý‹§"“߸±â_^®å” ö­“§ÙË?ÝV“Næ0C ðMH *$Sß &ÀKg: RÆ;EðqËðZõ| $ˆb‰€!„å)Ÿ‚ð‰#ŒÀ#u<%Œèr'/Aë„’;"Å ¤ù'ÌEZˆI ˜ÐÝ@…Fq€Œ©ý)RÜô”òÜþp–‚z¤£Tî´-8’*p³Œt…†ÎoÌú.$T ,0ßo9yï²IúGÄð“§úÈsf‡¸×öjŸpÀ8p ~ÖÇÛ¼•…î7µd;­—LðW:-Û‡ß7[á#Bì¶›Yi´öHë ÿçÉ.öüf×b€½Nvzå06%ó8,øå)þj9¹©ka¿KŠ$p¨©g0{þè“dÿËšz|d鮱ʿ­üóžïÜ9?]ÂU…v¬½}B·YÞƒ€Ò1O׳¢âçk«Y”º°<§Û<º8˹¹ÿè6ÐO—Pâ1ZýVíÚà ‘€kƒ_´ÞÜ kÃYþœ!#ÊJyEƒk*> üd•ú¯w÷Q õh<0Š-08Æ7™dKi,“¹ Ør2ápZÿ¾9™L& hR~6Äß û_ÿ=S¡u$ †cv0€Ó]—]vx[ã9M(ˆ|¼g9Œ¥Y¥(y(jŸ ì ,"Ð ˜•4ãçÙ¶¹Ó,]aëÞÿÇÞ™À×}T÷þ÷E÷j_-Ù–dy·eÇ[â%vöÐ4@ ¤ ¼´^R ¤ÐB¡PZ %ôñ ¤´¥@ d!±'±ã}ßW-–díÒÕÕÝ×÷ýß#On®dY±%/É>ÍæÌ™åžYÎïf&2Ù–Wò¹S¸^Ö÷w%s¶÷™[‚–úÀÈ èœ&ÆvØI˜LÆ VfŒC}½Ý}¿ôxQrÙñÖ\ú™èí¡ÐuîÍ!ÇE≓ û{±$»@$þî•‹~»íx™¡:æ¹ÛúYxšnŸ•÷Ü)£ƒ³à r]µ…¶Î†œVûÜòÞ£.8bÒ’;7/r®MZϱˆÄ2kש¾IùÎQîMßߦ&¼ûÍ›êkKtÎçT™¾{ïŽŸà– Ž€Ç]´ÿüþ ²ø>ï¨g}}=ÂFÇW[ÎE·I™ ê-ÁøŽØüá`çšÿh]Çùt%¥SךsÞt€Â(†2Sã:Ñ•0øâ…Ø¢#ôh:©P¨î¼óΞ~4‘4»s,Ŷº¼Æ]Þ¢}ó ÉîÊÓ9(áÓC!¹…†B¢S=гò´$Ç E´ü’üÍlóöE9‘d^U±o îݰaƒTŠäØ,ÀψNå¥bÑèP,UÈÄyÞá*?%ñÄ5ïùqFJeÒ!¹ÌÀIÌ à_ê÷"êœ4¨ô¨Á‚ /Œô„V Ú¼ŠÀC©<ÃS¥‡€þ%é¥õ ”¾@8ýNrä)è5¥O±I(8PNœDñJ¨8_¼+xUJˆ¥eÀ)ðÀ„„ACv‚_ðÄA °…÷½0ŽŠC#¤•?õú–<»OõC¿ ê¬–CÜãFw´nN…{ûICè·ûÿáìøo“ìëĵÀ8v—§Ê÷yÿDÎaæSƒ‹uÏÍs¦ß<§\ šÄ–¸­ÔœuU!ÉYù±ÑF}Íø1ØŒÍÅá â|ø xüÎü¡-ßcAëàÆÂ…“õ:ŽŸÒ/eŒ9fg¤¬Õ«ƒÝx¼áxq±®Ûä„rŽv‡:„b¹¡¤µÔè;ØïúÕ3k‹tÀÏà2DçE+ìѦÊÅ.ëñÎÁï<{ä…v–š9¶X•#JjaC¬dUÇ2+Ï]YhÐJÏ5 Ä ÉNOjòs98÷.‘tÛÌ|òº~Véã[›|I[…M?,&Ô¯›mi öÌÏí;m·š[ú%NcEá)¢Íœ¨¯ôžöäöú¸·Í—tŸ¹žU¯Ø0÷·OàÓŸ >Û”Æç@£Ù¹û‰ërßÒ×*n^‡-ó·Lð{­¬+æðN•cÖ3öX¹r%¶B,RYšc€¾AZ +…ÙYÏ2⬺‰¿±s†R¬V£Ô€~кiÅݱb¬ùÈ‹ŒÐ|Ê -m›¾â6Ú …‘°9h4…µÜÆ^,óÎp“V\ˆÁîÝ_|©Æ- %æp@¿Ân”#HvçÎx¢¦m'þ8{hÝúW¡)6úúXžéº¢dÏ(wõÕW¯… u *ìÁ—XÚ=£ˆ.`÷W™0lTjððŸf¢C ¥sQh±¢É‹Õ ¯ S„ò <‰¹2ƒ,¥ódˆA@†ÓÑ„A–±ŒcBJ‰•’ º3O;üóbÜÇ!nHµä« zýV¨Ù0!/¢Ô”‡Ÿv¦›ƒU+Ú¸4>Å“2PTJB ¼‚NRw9ÕN˜^…|ts©€80½Œb"d°Å=¯€ïU´¢çSHò’úˆ_R‘St©MM•Ž9¼M$wž¬ ­ÓçµPˆ*À!ã—â%“ÝÏ Þÿ?‡f—æHÜ?¿Ò‚¿ºp´Ï~BÌ“ a³wªÖ8oÂÆÏŠ iG2…ÏÙ~µô\D60RòOï£CA[‘j„EØ1º¤Èªˆ1Ù!–Âb¶Ÿ„ÀMõG A>ÉNdcÁŸ$3 ¬^lÀñ ÄtR^ÕA“äBy$S©‚2â´ŽJ;°eÌŽ%«ì/‘$ãþ”ñjÄ>Â7f@ 0b,%Ù±cÇÒ¥K¥ ¹VuíÚµTmÍš5>ú踗ób2ä7b꿘9ž_^÷.­Ñpðócx S=¹«í¹ýºE…8¹}|„WYÛŸìös,—X6 Msê~Ì¡gÿZG$×2pâêÏž–~¶Ê²hì ÿì#˾›:SL”Ñ(åddÙHB±]HÏ÷G¯ê²ÁÑC;šú!ûÐÕSΞ¹~±ÀžSýn‡…“ÅÎF†CÔ ³2§Ðj»#jæˆÉ)¹›ã¿Á_Ý2Cù³žñjdòîE•Ü÷Šêª,.Ësߴ̯¼2øpZ!ÜÍ’>ü•óî‘óã]>ŒR·5êr%·44X¾¹¡¯#uÙÅðT—[ó/s1³­*¨|ºS!W´çB»K«2jñ ôO÷ÃBëˆrG÷'c ÐÄL& •;æo<þsˆ]uc¹OÔ ¢í¨@@.–MO<ýl8àskI-`«#ø§«¡½´vQmY&Èr?¬{úý˜q²ô&{qî¬?Åc³hV-i7z"¦ªã‘a=ÊbÎ5x¢FO2/?ÚÄû¾ñ_µ´®0Ç2¥Äµ·OÝm-9ÆP #¸éÿzlÅœŸÝ:‹ÖW—œêõé—›¡YŸCѾx,З;l>ù«pã¾YZci®­¬ö–Tn#<^;ÆÑ˜ú¹bZFã½þ(ÓIÆ/%ÉVM/~rÛÀ»¾ÿš2›‡ °Ø1ÞÁü½v„ßà-. 3 Z^ƒtÌîlü¤ÇÕ_t¹ÜJþ¾ÜÐØDgÑlQžûú‚yöœ…åMcU®mfÛáÃh5´¸Ù·³+áuµöxeÖdŸgî¬2&¶¶øÛÚR4Xâ<ýŠÙ˜,5³¥N7hÊ”)ˆŽOœT y´Î×øTtà(}cÚ´ûY¸¿Õ»h„ÕØŸY•éÎÄèfJæ9"J8¿º½ J„ 0#Éè®H¯L@L%鿯(ÞH£ü”D1Ëdh¹ ¿x¢¾P‚[A‰Š«5ቺ+ü Nਞjþ‚ƒ”(Š'¸˜À’¢‚2”á`ô<8p1bqªpð¤gA Là€é "L(=—âIÿ¥ä|…b.VL !Š„‚@ ¾I I8夲øjª««ÉˆX•’±‚p²¦e¤¹g£`Hƒb" 3žš¨Tò»dÐÈë»çþr§¾Uädo°¶ÈÁNÿŸ8–›:ÎüÏWŽ`5"“lิC:|À…‘L~»Q~5•Ð 3$ADEþ‘OAë £—1ì3kˆ¼!«ÈÒˆp"EÈ'½ž„H&â¤Fh@àl†‘CXQ<(Iˆ=`cc#ᢠƒ‹à!¥Àmˆ·lPuJE7¡`ˆ4¬ÀàØOZUMÒR ©Å£óâ‘a'…¤VÅ8?}m”á—™‘ròmÄp=”Êô‘G‘6¡îW:`Ç/rš{«¦V¬®^Â)Ã*Ïü ±ô·ä?tzàg›š—ß·x2VEo)íØ‰¾åÔ`(²zzÉÜJÝhhóÉ^AëørÏÙ=„?9­æâÔz|Ô'„ë)ÿÿýß;9ɇWÌß®ŸË­µ*jO]™›X¾ha¥í²ê¶ s&¢a”Ôã =¹«bl †ª¢7Y6•¸tŒ´ŽçÌ²Ì š@å¸aàÀé!c=9;mR*VyÐwÖ“—'Ôá 5÷ø¯®ÕïÄÖñ”CÓR#?Лöµx¶öùóÊÜ7ι;BF.ÊÛ=ó…uúè}1ÝŸÜ·ç”§×ÙÖÔ·hê9¶„7÷ê+.l-y²5°ÃÜÙÔÇAa}újóŠp¬eFfÎeö”É §–vWDEF)ä…v£ÌÙ£ä:.Q|‚PhÝ]ÿ¾KØrÊ'çwá·äNsÕ¾/êñùi,ÐÎë®]»äUUQ¼§M›&há`jÀLŠÔ‘UK~x¶²ï€pVoÞÁ>“AV`úB¬£«gÖŒ:n[-Ô:Êòg¦3Á/hò29†GŠé?Ì´’¯Ð,.WáÔÁA¯Ó¡“ŒœAÜå™Ì¦«JMÍ}Z^2Üë‹ìÎåï‘Û— &Ay XíÅbÕùGmæÜO}¹Éz_nOë¼\×-+ë>õ“µÝ1»`š“çdcðY."/w›ûþ0oÙ”=4íŠ6óí(6Sî–SžÕ†F³–¸wºñÙc}e>Ÿ›fšºò ÁÉy¹¤b-HÜw^8²Ìµ·./4)?ŸqÿO ÑâjÂUº§Ý³pÊ»"ýGmÅ F}8Ñý׿S„+„.Ý 2ƒþý‹«~úêQ·̪Èë÷‡ßÿ£M\’MÈo›Aœ}ÐÀš þ|ágµÍ^éM£ç(4yñC‘˜¾ NKÉ?· ZGÚöÖ†ÒŠ©hû,#Ž#AýžVtsÀ'T”AOW›¿´5^×+™kif†E‚98•(úú‡oxø±ß9Ñ=ºÍ Ypùò导ò : ½K#I#g¸>¶­™ÅØÜúÏo?:Ã2˜-VŽÇÒ¸ˆ=jóæÍ uØ,»€Á±¶ªšX¡Úèˆ% h]c¯»?h×Z_Œéç1D°7–؉pY•i"ZuŒÎ} ØœZl«´çíQ'^Á»0Ò¯[#Ò‹¤”Î_ûü­3Ø[óÓ¨ŠpþÏ×~@B–ÕlkìŸ7)Ûq¡Á¨MкªûÑ€[cßM³ËjK† ¥Ó3?{=±³L?º²ÕƘ] Åâ5ÅN) …Rlë`Î^«¹“ôN1ŒtúBÉÿøÈRÅùîŕݾ€ÝMsÊ0ÜSážÆ¿ ukf–#1ÊI¥TÓ‰¹+ï‘W´¼tT®ÎûɆÆÝ¿ˆ5m:Íè~ÎWGN™½œ[@uÀ¹“r?só Š*"ê´™ì~¹íÔ-sõÑ0â–>}Þá(*1Yå¶@þnÿ· nK‚C¿ð®‰ÒbÆ«UѶ˜š™U•œ™k˜:™eº%/Öœ(k£\&Q Ø]ÂjÈàû—]*DÁ_d Z´D×Àm:yOfvêæ £¾0ZTÕµß;Ê6?$:‰2:qèì0ò%ÆhÐհሊ‹)ùÕAÇX]±Hbżȵ’Ð&ôú´LÀ“XYK ç£B’qýÈK€GèÚ8‡ÓµÏŸoißË5³Vs Kr­„Á­±ÿÊI}G:C«ÿçÒÕÞÞo_/[ø$øB÷¤^ƒ)Ä겆‡¬P‘{V~”ŸÚMr™4×òéÔz­†(ô·öé©XòäŒ0Êð¯/žÑó›œÁ“þpbãÀÊO.+bg+s‰*Ù)§ÎòÇ„Jì•$Šs1÷¶|ú»o.ìï -´Ä»ºYÊˆîÆºü­í‰p<Ñç YÍÖïÞ{UMñY?”È!8.- øû}écáÉIp[·nõ˜ê]ñQ]tù?ãICÒ`Õ |> V€ôHia»»ÏWdò[Œ¾X‘‚J,–p|ŠÙûðc¿'‰Ë ÙŒ‰Ýñ±14?õÒë\(QfÓM™(¤7Mj:TW£ßp«Í™R¼û”G.!‘Ź ÿÀÙtT#4(4ô4*‹vÄ Àn> CÒÒSx¢µ{{&0ËXTÕ¨¸ïàÑfVðl°‚ó¨tQ'äÂ]Veºð6¼@hÔ8˜ *óD°è¤#0¢ÊìÀ“p±ð°\`ÌD?GœX[ Ð"Z,#ˆB:dí?“ˆô&È”BK83Ÿš`‚dBÉD”ŒHN1ðà8 2$zÂ)€ n€¬e+át%˜ aÈ+OJBˆ?Ø ¶d «Jˆl‹NN#PeÈ(?”$çI,…^#ãIeaHyç5Å^“)•S RE-`Ë« ð$©±Á GÖŠ'µì?%ÌXŸIS 1È <¨Ç:X4…@~YñbO÷Ë=]l°ß‚LŒ~8q6d‚Z€_PÖ0ȃ’ðô¼è"JdùžN#~ù ƒ º„ ·" H”"Æ/]±aÆ#"D8P$APé_È92ÅC¦œDs‘d2Mi¤Ïrò)5‚±‡'4ÔG*Vª” lþ.}ì¤Ï²<Ã+Âaî =°2,R=\FqÒò_ÿú׿÷½ïI wË–-=ö˜¼²}~þüùôÙ×1¶€ÔLgñcçÓH’;âNtù ¼˜Ÿ±1á‘ãá‚Ñ”™À‹~v2Î*Ùt²C¶û–MaC„l-dã'€þ`DÏ¥ µ‰Oñ°[ô¹8M¤¾ÆªàLØ=ÐJ™o~ÿöûp!ìöÔ&Ö¥Õrœp#ª˜º"_W[òœúÂ@BÞÌòÜo‚žT ‘e¹v;LíFLùé•å;Û›ØÃÈ{AS_e}ÿ’*ûFL’ |Û·€6GæQÓ·Àî•£:ZÍ‘v§=ES %Òá/ßÃë⩺q¨80è!þÚÂÚÚ‘!‘3´—þ?‹a 1­S%c’ŽhxÓÏ–^‡+¬ǫï„Ä2N//¶flz­Í7öD^ë˜;¹°Ù’BëÌ9UŽÊ!@óg]Å/ÇrŸ ¿"k) $¢Ø£êÈ›ìï9´å@Ϫœm[‡Êck­¦X~Ai~ýgt,¹jjjX9‘=|ZyáÞh™¹óhŽæ|P”–)3íë;¶î(¨\lÄîÆhq™œ•l—ƒEÉzçž=ZóëVëšYÎÍ ü¡%l44z+÷ùÊý Ç‚’hŽÝúËf}Ⱦùªr‹ÑpúH»ÓŸYQÂÚŽ9˜™ø×;ZŸÙÛÎǜԫù6cÞ{ßÎ&§¡õy§m2k¸¦C[›°q(ʱøã¦ÖˆÕb<Ó¾¤nñµeË—³˜«Õë¤ù‹¨}óú[^-õb±A8aíÈ¢—¹¿ÀÌ¡u ä$â~‹EÿØËºïÕ+ë*¸tõ¿Üb¦]3Åð¯7‰Ÿf,0•XAVl(oòú©§S©ÉÖfýCšîVM2£[¢ËkÆΘ¾óE뭨Έʾ^´àÛ¾ …Hµ¨Ö \“2ìoô…ô•Öò™CÇyœ¡yÓÐoÿ(dHˆÙ{ÂdHØÜå­º~žþ•~°ååÞA£~Ÿ²%a2&ŒÉN»9´.ö¡;«Bô‹£m}MÐÀéÂñ$‰;F‡•û%â]q—Ájôvh1]½·¢w¸ŽDúêàuÕK§Þ¸©¡wJaÎ]‹* €’{Éš:L*eÊÚ˱ uTANiÜÓ5Ó¯i@– ,fw á´Ã¦M› ÇX€„ÔQwÀ.«2ÑÂâø±Ðuϼéÿ›ô׋àg˜b°â§Ç¡3£Éãð¥ À¨›nˆ¨D?%Ú8ª5ƒ-IàCZ©ÜÐÏù>$W5•õ²Ê #vpƒ|AI*Æ‘&,å' bá I( ~4hûèü8² !KBO¿& ~ÈYàL.Š*È9Q’5Ì™U!æ•NCêCzá*´ŽêS:šÔ†°‚€b0õðJ!áC ~I%³¹€Í1ƒÐ88˜P1qR…A0Tk g˜ vCÕÈ]v„ŒÒ‹Éˆ&%•´ágs÷-Ì<êûl”Ùð‰k~,~Y¶R"ü@zF$r"! wt±ôØá~½¹h‚X†}häAI‚!ÂL¬H2=Y•©S° r1²-}¶ˆ«H $Q¹#·$'-!ô5¤bºOè¥3’AªCò%PI:r=Sá$ÁÁSz–¤R™^¸‡’À„æ• ŽÈ|SÚ*=V &£Çï¯cñtOï˜}Ž¥¾òôÈjKœZ‡öý{Jð~üÚIlÍÆÂäBhVÏ(åjÉ>Ÿ½äðBâ¶ë”‡?,×ี¡?<,Ÿ²pJ¾¶òTŽ›ð¸!—ݯ Ý:ˆÉ1Ùk÷w±Ñ}‚*áÙ<€t×>ŒˆÖ‘<¿áH«æO8}ÁdÄßm±9eµŠVóîRCÔ`έ[’õ$¼:Ð.‹9<Á¶—Ý9ö“måcÄ” ȲR %Ђx¥^ðI&í¡¨)aÊ%ƒVs¤¢8ÑÖggAÆaÖÁ¼z2Xár¨Ä'ÿóulJ˜7Ô7¶Ö«ÇÕZMð€ _vÿäÅϼø²'Í«Y@*øèz6Àú?]UÃ3ë.m Ì™3ådß¾}ô …&H‘z¼AëxÝ×4X_9Vf”a‹zOä;µEÀ½Qm9à2$eÈƒÅæ²éjXW¢¢Å_~2VÄ÷Ôä‚Càପ¢3P †©]0[] ÊálÝúÜÀŠâã]Ô’S˜ìÇÙD¯r &—̵-«ÖF=žÁ¶ÁøXWR䢜XÌXÏ HqàÀ4yQ~­#I]^Cc¸}Oèÿhqª¨$5 ¥…öÁ ×^H~Þ.«2©¦»êª«ð?ôÐC»"¸æ{~bLÉ‹Wù¹®ùª!êýðbÈ(rB¬,à#z8 àuxB"¸ ÑØÙP½$¡×0È   ˆñ0h CâH¥„PH†zaŬã!‰¬„|7™S(Ø ™Å˜:©5;ø¤¾$' e*ð‹@ÙâG+0V@&UÆ7by…ORÁpqxzÊ ÚYby¦ÿô‰ðšô¦¿”J¥J÷@@,-¦0¾ôجÿ²m¤….]¤¨JxxM—„ôŠ uH&!#r'”<á&l3z®@iB¯ø+âLrú|¬‰Flv ÐCžC@ DžAëR ­dzEHH‡ÅI„I­ßèt¬f¥CI.°å[²tü´ ÌÉ(£"ª¨çç¡qHHEF™Á‡Šœš>üuïÞ½pÃ1| ͆Œ¥Ä´êK·Íùöþ!ô“T?üТû~¼ùW;Z–L-<ç‘ócÉeà³²\+_衹ynùœIC_gGI2z[m /x`y5P gɱ‚ôýÄÞ>ô½‹&Bv†½ZÒòiE‘Äqo8"ó/Ý6[`ÑMÊrmãk†¶²®Û…—t Z7¿Ü9Šíˆ%”@eÜ$Û>¼kqå(Íò‹í-½ƒ¡;TNMÛ Ç r?&X ¯…ŽÕÂéó_iUõ¡C‡Ìýþš0 3Œ»¶ \7³T‹ö{¿Z›{"·˜rê\B>~¢~°´$cÁã[jçÎm÷êßEVa)6œì‹æzÓaÜ”Ÿ<ĵw=ºö¢W­)©Eâ¦XÕ‹}¿Æîþh&‰Ò‹§;Ð:žœaÁÆà•uÀ(cýèq)'Z–Zkž ~ã?\Ä^œë\¾àÃßH“õ]-€ÚÀ·ñ ´ŽrÉtRÀXúKZ™;Â=µŸ$'ìóÜ[ G¾ gf¹Žî!‚L©l8娸DÒˆbÖ†>$r?¬"Ïhé|KÇt§oNÌ‹'jA¤ú™ßï}× t‡ÞÃÿÓÜÍe1¦CýsK’椧ÏëïáëJK¯òKLâT;A Çâ|•-¶yER¤›ë:•.ìºsÙ¢+—¬+]¥²gVt ð¢qeTD’Ÿ÷“‡´Y•‰F¸îºë¸ÙƒÍVçݘ˜Ešeü¾(ƨÇô^Öh¡È•Rk17c¶"S’é€@$9ŒØ Ñø „§~GȈŸE‡G^E‘ À,#B"àL ”ŒÜð„@ž¤%/UJE7†rN™å(.$?Õáˆu$ZSxèIE”nRq¾ë i)Q’_5ñB*bñ@Oá¥`pÃÂ+@&”„ËkzƒÐ†X•æOÓI*žÒà¤UVHéÉG$Pi³ž+±è\j4 ùð* rŒŸ"{†t^ñ3ÚKÏb^CÈ%-;*ð@€ ãðÐkO$™péeBI”pzžLÜl†‡^ yAÃ+eà+i‘O~8ÌW$È‚XNl¤Ç‘#d¬ •“ 9¤bº_¨5ޱ:„˜\¤.xÆÑÑ,ä•nÄšÎpŸ×tð1=¿TO}}½ògÐ\‰¯ßvAv¡ÖWžY‘¤ZMNŽ?íÁNS{xý Î úص5ל¹Et"û²ÏÀK^˜ío@©Ñ·¥œìéÓO|Ó4Î’;ÞåÛÛ2°·ÅóOï2 ²/¿{ö—žÜ×5áºX áFÅ?ü‰ÒHq´s°Â4X?kÌ3²n»ð¡«'†XÌ¥Û.d¤þJ9¹uwKC‡ƒß¹pÒ(h¤ýÀÒÉÙdCÞ-p¶ý×ë¦à9„M¬dÇvr®:áäîšb ª‡žè¬+Õ•¬b—õ[w×§3$¹p p[‹ï›v¨ØúªÜOߨ7\nN@•ÑKÅz2ƒàŠ;¢a|»K®2qnݾÖõ»‚Å‹þºBKGÈj0ÿÛrÁ¿¼x쯟اdÍŠ9uîܹ²À€‹O¬ì…ae4,÷†Nð‹.œfÝÝ1Ók3'}6[Q¼ô:C¡%zûÐöÍ7ýèh¼³ƒú¼ß´jªy#k¬¨!Ïç÷¹Ð«QŸRwÂ&í¦Ò5¬½­î`²#9ÿšüõ6N'ˆ¿Ú;oãÓŸÏï|¤qž5Ô^b×Ú;»Nv šÝæfgîö†Km-²$6ì‹VîQ&€M½yÓ ¶…œøÛoµ˜ï¸·Þ`r:­9¡ˆ¾ZÂJBlŽž~úiVE¿Ùr¬ÈµiQ»;¿<×ÖÔÔÔ—[êææMc¾1n»§åõÙ]”Å_a´ñï»ÃÍ«5Öî:I”Ìd4að‡Ù¥«…,U[ür{˺CpÂéäêØcþ¾Åo4™ôꮬÒ*臰[DñÏz®¸(ͳžìÐ1Ü¢Ú7-(%Pnõr7æ¾¾¡=ÿu_]KÐUëŒæXb­í‰ÈP`è­Bß¶i-(G$fòG,.#ÊRÂaÁBÎbꉂإc±cIÍèÆíFpÃd•3Ùi*¹çŽëàƒ~uÒ;Õ¨u£6—e°cÀÒ¹uÙ9É`vöø"[}…?ýÓ%;¶`(šÇá`\ fxCI3Gx/^¼…><Ê»9ÐøK¸Ñ L&@¤š€îjÏžY&Úd2JàG—U™¤1}ôQ~treË#ãØÎgcÅ‹ H,£«(ùL ˜"Šú*ƒ¾ =*º YÌA¢™3%Ž»f¾bXª2ånJ„þäC4sI )´ÀO ×Ì8ŒŸŒ®„C áB +^É É‡’†BŸ§Åˆ•‰O@¾ZAÀ”AE¨ Éè™´?IHN¬þÝÈL°ERfˆ¥¦ñ*%¯„ƒø1£†‰’ &(ôÔ‹(îCp¦$49‚DPlº’t")áxp¤þ´h~¢à+šBÕ]hxyˆ9~h3"LF**ë¹[`¸ ¤×‚þÈ+R§d ñC„Ä!¥‰tXI…ÀÓwTw •ÐÓ !HÏ‹(B ÇXᆴ ½ ŽìèAÒq^èI‹À“„WüÈ9iÙу±„8Lu4„ ^²¢£H$Á‘V³› I¦LpŒ8¾NÉrš|y•Ñ,½AR%zG<.¾íÂ@@ÿæÁuª}ðÒq΃浂 ÌnŸhè<²¡qF™ûl† *íÅ÷üíSÚ†¦QÀÿÑÕNlô2Š‘cÕkNç ÇNvùz|aìãØñÍ»ê=èáöz#[©äÜ®Œäé¯Ü`Ë_Cƒn:A.ÝvaR¾Ø”ŒÒmÆ’/VŠn¨8–Œ²4—U |ችÜsB‘šz}n›¹È5t΃B0Σ´tRq'ò×ß3ÿç[Nm<®M¡ïˆ Ý( ¿ùì¡ý§úÙ<ÈÀ_ØÙíkõ~ò±Ý÷•2£”aŒQ̤ÃMF2Ò2¥f„0™Jó&+Rü—ù oŒò5yK¯—Jeâ°€C§õVƱ™¡Nkç ‚–Áx8i?ªéPQÆéœ?…®B8‡Ý ’…zlÄ÷ù¡ÅM.OÕ¹¹~.°§Í{;”­^më“/C· D¶%ýË&»ÐÌ%-˾РüÄ2 M= ¹éÉ»=<¡qÓLpì¡3:+Ž7uXb¶ùKoý‡umQÍøàmß_¿~}0\ZŽí5³opu¶ïM¾ÆÒeO$cV·¥¨øOn™\èóôÍÈOKú®ÿêZ¦Þ‚²°Èï_ÛÌ®[ÎÏ"—­¥Í|;02ŸªV¬X¡¾¬._¾üåW7èötȧAëõ¦M®èéh}(,¼=dìvÙú§¸O»“1“³ß8æœú†ÝÏÎÙ4åÚo¢@>÷Üs±È€É·Y’¡˜…¦†3ËYš©Êé[_Aëð÷b¡A/ßÊ* rØâ*±êÉ%r'!¬#‡Ÿ1œN€êÈvK•6ë¹[@]7báÿí¥£„ÿÙÔ—7óM§fåVpТÑÖ™ÌW h¢×hÉ—+ÉÃ婨*¶toŽ…úµDÌa6¥®gŒŠ$½R(ïžÊÔ¢m –…’–b£¯Ê4¸zª~0R ¦ÓÊ4‹V:yjbà0Ö¢vCCÀ1{O´¢¾<ë‹9´ªXb ŽDcQú5[àéæˆ%b¿ëP»Û­8S C¡;à§;‹?ªËæÍ›ñ¤#‰¼Ž—˪LÒ’ùÈGð€Å(8f¼Zxt>°€¦AÃ`ˆFÁà×çw®’´è±Àa8<¢ü#‹B °¯bÎÆ‚?ˆ|4Ñ´ÑÒEoW« ø’´‡€I¾ðaÁA1$!$É€ ¡„ ¶S&/ &K¢@Pûù$8=Š [ÉB˜„|yRY*E¾ kb‚G a.ô8ºŒäBGF`m$ÀáÒzÌÂôt2’Z =E"až¥F¶4/O Lá…?%¤<ä N8$2 <#D’Ë@„>®B@÷”?ëy[¶Â†!Ò¿Db¥P_^¥Ç¥ ØÄHš#lÒÁék| FÎé²é)E¤!FæÁµI(}“'O¦H/±$nc®¡_G øÉ†ô²#•'<‰•„àÚpfè€å¤@É´…2r!¯‰“dò¥š #¸t ¡ÝÔ·“ôðw‚ÿâÛ.ÔOÖýÀ«®T? à£?ÛÁæ«Ù„†/F7l•Òú«_ïM7\8¿ßâÿürÏ oðÑÚÚóK><GúZÇîW®vÝÕà|G+s 厦¾%Õ…lø•{œãF0’Ø9¹Ëj ÿüúºŸl8YUóeCsîð\†‡|ù…–gႃ g+!ç´]8[Âlø;¼þê×{<\kéó{ƒ1þ1# É]V?|ÍÔÿÞÒÓ¸ã?¢ +6–}TêH ðD cˡٜ:©¬½×›ZÛ­ } €>Ça&¤ªf¡ïTk<â0Ïí W±%béÒ¥ð÷ꫯƓ†˜¾óÈ®H$L²¦îÁöû—ºýQ‹É<£L×І1´|:ªBÂtG^òÑ[ïÒc³þ·_ 09™{Ës¯·Ä݆ȼ|O8–¬²û;ƒ¾¨Íiéräé[™èMJlšÛzûúPfÐFˆBuä¾¶nÝ:䥾*ozQÍÑvï²ÚšžC›Q*èѨ:ôPú5c7=7êï¬-´—¯ ulÜÕsXÓ–-˜äD}Ȧ/ÓƒJŠ‹OµµÓ‘H%ÂYSSÃ0‚šD¾ÊÜxËаråJÊÉè²Ê€¾rÁaš7A¿]Ve¢a„¹z˜o0ÔÈ£°•mn,ü!C,ÑÏÓÏåDlG&yʪñÀ/X’¬L•‘R$népüNaE*r‘'O^eÀ‡²Ç›b©ÛšÁGEI ƒ6áb1Éy¥l2ÓIm”ž$'y ²†bhá g*‚£H$gÓ+á†TäBQéhª t4’H‘àC¾”“@(Aú@Ûù`&S Q„ÃP L!Yi Éš\€8a>HrY‡‘J L§®Jì(d!Oá“2ƴ驲þ+¨|ÉA~déYø DÀè• õ"òD,Åô•„8$2êË/…䓾CïàK0Òˆ¬r!Y@)=‚@^!€ØÉ{4ä–.@8Éá =â‡üã(¢Ž“²Á?…dޒŹóJ^|±€ƒX›ÙDË0í@”–2P/šBæergºKb»ÀÙRݾÐ?¿xôZ>B­ý¡?¿~ú7Ÿ;ÄOP™¯[èä§.-½À_„õ<P?†/ìÏ›ó/¶µV!¯ìJþ|¿ÿ{kB.?zµAã/å@ô0âˆÞl#ÆG‡Ú½\/&¥âØ8ì†8¶OˆGJ¡ǺCe»Ðá‹úû=v‹©¦(ç;ïÓNÞÑ‹—}Ƕ€ u"üÅî˜ÃbÐàõ“íââãÑ›eÍÌþÎFœM_{r§>eˆS›^Ïdþ—‹eo›¥PîoþhÖ·ž?²áÄåرäoELUyÔ «B†{˜Â$ð2?¢á LgxÆr U¦§>¹êÛß~½ÏéÕl¯ÌL+§•< 7K"VB KÄrÂ;ZQ}ÿ?9‹-¥z±Ì‚‹¼tÝŒõûÑÞVÒúú»spcm÷x»¥Ài¯·êŠJ¢ýð+®9Ù1µ«a¯f“Á•8¬ZKÀddÛPÒè²[rÍÚ ?šç¸†íNÑê`WüðÓ»lîxÌÐúÉ­Œå¦T&(0XÀzÂɃ§Ù:dìJ8WT )Qñ믿P¹§¥·¥åD¤–"·¿aHñÃÆ>,qTœ'ÅÞ¸q#~bITeqwêªižÍtë|Ϊœô½uÇyût(|H¢! ¦QYÏÛ©¦:NõõùÃ3 ’§=Ú³§«çxç–pßËѵµzþõ7‹`È“ž‹ÚC Ðy]´:¥…¾FxwŸ§7fÓö6ä›ÂS*JçåÇo;ûPÏB _wJq.]&hhså´ÅZw3hió+¯ÓÚ[Nù.^‘pÄoÏ©þ@ko®Q·ÂгPœð£_ÖA jõ6Æ‚ËNZ¿¥΢JýDË0%y‡«L¿ûÝïu™•™¶ió‹ï0i!S~wžjüÇO‘4 ¥I`F@r NŸzÒK+0dü¦ ­"¨à!áWüèùtQï‘aˆ™e( (”äÅÆRù:Å+ƒ*=½V”–²Iô 8 ð‹ªO~RNì†àCȈ2À‡´¨åÀj¤â¤&ðJ™I Ä, ˜€ˆ¥cRZh ÀIE(<i7ˆáC¨ˆônRIeág’ó*É!¦•s„ž„8¸‘5儉˜öÐ#@ôHÂrNc:àCª?ý‡cý'þìóíÚXn²Û“ *ñæqE¢ð †J/ÀÆ ±ÄAƒ P¥šù$ŠW’ðDüI<„#Ó `ä™.†üË„1ŽX²|Y‰q«ô&™ãXŒAC¦!Ð!“ ÃIè°…ŒW2ºhã!ÕQŸ ¤$ïØç%±]øÁ¯úã‡7tyÚYãÞƒP,þì¾6¶Ãò+üýóä·˜Zä ŠÜØzÙþ:SòÙ³æ• œâï°¥/è´šþâúi˜aއ^‘ËúÀòü¾°ÞsƒQ×èð9œë‹Oî[<µ0ýžQj*°È(çµþHg¯/ä°šúƒ1l¦§Ž ûâ“ûÉîüfS½CZ€¾IMé§R_¤œý]žk§SŒý<»á-vãì2þ@“O{W×Ê5²ÃÉÒC¶§®pYRù¦áB€¶Ø§S^~fj° `¦EU$YòzÑfC•õDxư»ä*ÓÍsÊÐÚ=!öZtUµj)t®¥3ÏúÃzæ•wçºkòÊͥ׳VS4é®z`ùŽ®ÂO΄e˵Éθ?ŠuZ¼8…bˆy«¢£§:÷÷Æ.o²¤Ï;x{qŸYKÄûêçÌÜs¬™“%JÝvTzY¢iÚò«çέ¶nÚ¶¯£yߨÔ³š½•á Q»O…\@IDAT3[ ênÝ~B×^|½­sª&×”®(/°½øüK®„«9þC¯{yA Ü‘´™ ó+óöžê­²v[´XÒ`O­¶ø )94Ï¥À|¯¼òÊ 7Ü`œ ´¼p¸µÀj.³¡U%â-ZéÖvž …£‰kæN&»ö¸ë„·¤Åïhϸ-ï%‡i ìg=ºß»Òh  >aÐÁ+kG¬i%,AH¨4ÏÓm­óË Vû²rÃÇo™MóÓŸý|(É·ž?ü7¤‡ŒâPh%V¡Ò÷²˜Ý(ö6ˆúÊsoüî+h]±¬ðTw8ç@Þ í¦õ=p ×f6Ä\óÑ4Da@ÞD]¡÷aÙŠŠ‚ê‚~‚r±lg¯Íiò€gT9›âÁ‘pn$¡5¶éq}­×ë1bQÍê%=­÷,2o8FÇàh¼òÊéñ vÞ§[L÷,´ $BÑ`LGêѦž[û27NpW¬Ýja@˜ãÜñþ®|·uÕª›¸“2¤œÀf_ûQü¸¥¥Z°ôÃò…Ÿó¿ŠœÀÇ;YezàP’ÕÇ Z™ajÛ:µhûd-à@­Øv¡‡ƒ=¡«3• ±xpxH*@X7¼Ì50„c¬Ôˆ¢x€3Â…-2»áè0$Œk€’ŠƒÇ‘… ×0ƒ£›LÀ?ôáñð„9Ìã@% ¦ßQXasÇ I‡mzr)³”žÂ–'eæ)M„>L©$¤äø™¡è¼’±8ØÂ'¦v¤ÅACˆ¼ò2@Cé\pcMF•éžä(xÊí™4» 9›¬„¨ô®*lÏFŸ {´‹îƒRÄ ™Äƒü#cH~A{ED¼E$JYÞA1²‡G‰¬JOñ Û"Ò0§—ѻɎ'I(€ˆ|¤0Ð@L.’#DáèÈ"ù$äS«W:)|˜á#Å¡¦üd:T¦ì¿‹Ø—ÊváXüþm¢¢L}±x²?)qÛÿ=Íâ ´ŽØ‰Cë¶5ôºl²-÷­¶7›^'¥,±—IÊÀFWáðÕ;榳âкÿÙÚr Íó½µG±?«ÆÀ5d“lŽÍ„ÑÀtð7::† lÓíìÒsáÓns¯Z‰ ó½ôð1úN.xýDÄå.Ëm §üùuußþÖ‘c·]cFY²·Y Hß”~JÕèÂv‹qRž:„ÍÈoµÊŸÿõžþÔ[Ð:Œì”Uݯv´¾x°ãúY¥ºzÊÙxr›åóÚ76ygÙ2é„Ü…ÂsÎ$÷ÙR]ÂpæDfCVª¸ôbð­K!éáW¢|»K¨2a2J»ß»dò´b;K”O?~€ka áx;̤§™z*M\‡EcoÍ©žiyVÃak²E«øÂˆ¿KL˜¼¡º  r¶Ý·Þ¸iÓ&ô t3¾½£c ío‡>b%tºÝÛê‡ fc¢# ÅŽp{r$˜´·õ¬½PN Üz o~îæÙE¦í…ó¾®`¾I NwÌ5÷Ú­œfâ´üaNé’C]e,ÈPÒòrôÍ€aÌ·}`ÍÊ¥íûbúÙúdÓé -ÍÛœgö ÌòÅLh^uŧ»“fÝÉZ¥Ï¯þbjÎIv÷VXÚ}QWY^U`±ØÔÁ¶XÇ©Dáž=¡ÿ;/ñÄþþ¹fCÔ›¯%xW”ØzAý‘|—K·ÝÀ‘#U`íHãà¡e¡¾Æt_ë¦yNÏg>øît•éÿÞ¿ˆYêDבjD'ðŸBë ‘¾7"q6ðmÓàé5E.Ö[Ûú¦p½ƒÝŒlÖ7[óS8dj²­ƒXD[Bl4ÌBÅæŽu2’ ê"ZíLÁbGZB$^ÇËQ`XQ~Žñâ™åsYµ€H8ç' “ô)äaCäè\t+:5~)°!~ä3cTG U¥Dz!À‘ɤ BH/℈JGC¢$Çt-‚®A/#&¶| ¢TxDì)0±p†¿d*æ,ƨdpfuJ,=[!Ë>/Z \*Û,_ûø5¿ùúÖc^÷÷Õ«Z³ÐRþóö€‚ýlú°öWœi,¦À¯^_¸È¥+;øóÐís8„î¶žzïU“VÏ(1_Lç~¸þäWž> _‘Ôº<N¸ÿÄêÚ‰é>±ºæ¡§xƒQÐ:9‡‹ÓxúaT ¹ç*‡Åˆ-iüùÎÝÖsHˆú“¿&YP) _–kûÆ{çò£WOrŸ¦DQ斟ΚáÏ Ç»A-AKç&>~Ãt¾tÛìÿÚ|êµc]c±]Î0òÎiÀ„göµ/ûÆ:¬J‚QîJžS[ñ­—€àïèÅ qK›H¯dSk%«g0ô©uT½uý‘.þΆnß¾ Àî哃ï>ƒ§££ýàå“p¸£~ÒX pñiX9“)"s%ó/³'kË‹_Œ‰Ëq|»K¥2}æñ=B#ƒ[7®{-i+pZ?\ãxýT¨!^ZG«åc u(ÏaO·?ææ>.>vŽÒš²Dcx"€Å„hòdIÄ‚‰'VxêXq¬„>û«½|Ba{l$am ç뉇MeùNŸ×ãtó¡†ûÔÅ…VS|QUw7™°M®+Ñòùq¾é°KD9„@™¬eWN$³*ŽŸÞ‡â“ã´sZÓÑïó›šJ­&‡9Zç<´Û»œ›h­V—ð'".W•hD,þrŒm u½±êR[k¾ÛˆkÜ>¦v°Ý×›Ì)ÈË zBØœÓ cå_X–·}÷^-žôF‹8¬®¬¬€Z³:dÑI­}0DŒ†`‹­ÕQM>M_SæZuÅìüü‡'dÅÉÒ“ÝO¬ 'Ȇ\é-ÐÐ¥Û¶|ý=ó~½£•…ÌwùØRÍjyE™^£‡HeÈ Ú0š¸6™<æ[4-gRÖât[22´»L†dÔh¶;§öWÞxÌŽY A;p‡tK[zt‰ ¯;”ðkÖŽxns\ûË›¦sõY@¯ùEãZœVÚÀÅ‚úþY³£ÌYyCÃɎ؉Ã>£®Åq)ÁÌ™3u¢¬›È`¸“O™I&oÐ%F²&ÙÃ1Z"¥¬xâG©FP™P(›ÄÊ$’ÉèÌ;˜² %< F ŒÃÃ0(b/ú9œ±qðÂ%QÐÈ“QòTfj`(7cÈÚV‚%$!e#€†T‚UQAزܡüã­“‚QAR‘DžQM²&!m"u'P<Ò&Rª#MAˆÌq”JüÌ)䂟'Å€ „ŽpÖ^„È:ŒX É7'fFÐL1”)zbÏÏÁŸŠPM8+ÒÔCŠÍzÞ-€€Ñéè,*I?½È¹‚Å ”úBI÷DÈå©C E !G¬ô)¤—Xž8ÕS„âŒU 9ªÁ†t iž’|(Œ|פ0J ‘®Jéãä12L]fz:„@˜dŸ¡.•í‡t¿v¬› þøÅOî>ýܾÓ\ VžkÃ<'Î^iGÅw;ü¯S†VbЉèÿÓJr8cŽUÇÌMÊw’éÏ65m<®›ºWµDî]Z¥’([ó\SËYuþÔE–„ÿë} UìpÏ5µEë>»†p9”ÏÇþ³­ÐiS ƒpÃÓ¦‡|õ¦*Ô™Tò<;½ajAZAëÄÚˆí<;¸9­fj‘n»¸Åv!½Yÿ;­¸çA®­c3l®Ý|´Ëg1 ÖºR÷ïö´­ª+ãEÏ/ÑN·,̱¹í–Ãí^®¤°“+b9àûÓ7Nÿöó‡wùAáé×Û|œ‹,~ôò!ðôôX€ì‰3ÔMÏè¼ý| KÿvÞ|.ÄC ‘ ,K –éîŽ%ùw^8bŽuß—ÿÄå\rjkéðÇÀïæ—˜JÌA_X_¾ô&|éìáàD•}£¡uÈeÓ@œ±¾¹Û+ö;Ü+šXáô¡T…’æŸþæ’}Ç€ŽyaÍâRÉ„ãžkçÆ5#fÞsM-Ék×®•ƒrÌ®©œÂÀ¬Öîíkêt†&L¶D<¥õ, K‘ϱV"mìæÃ*YòR´åD»m€)Ýw^8v´cpGO~›ßm1œ&š<Ò¥›‘›eü¨¸P\;š¦™,u%Þ’’ÒóVBÀµ•ímV“Ö“pQBBjKt;Û2£÷…íGúb¶¨†ÞeaW•­®®¦еx½õÖ[Aë dɆ,<¢Lâ±Ft+Ùþð9æHhÎæX¥"iŽç-c]›Ÿõ^ñ-ðž«*Ë,]ëvï3jñb—nÒâ°šÙÚÀjOV·Í¯J"ÏâAáa+“:ø¬Ø%ÌIÍ0õ c:<3mMUÖŽ[ßêÜun—n¼ z±³Åþ›#“õ,,ÑnŸþÕ@MxÊ“.Ÿ:Ò(VdM¬q÷'®|ðAnÿHw——âÌ0‹^4‚lðuš³8ÑðÖP˜E{™b(C„ö¤Xáav@ßFÓ†!ô2×`q#š9[óq e–‘„Üp€)ä ™ò ºŒÀò¤‚pA€Jæk ƒ…iy¥ä‚ô©µŽ $'#¸ ЇR‘DØJ 'Ã8ò„RªCi% h íii1i žRRPª $G;H½ÒÛJr!„òàdb…ÆôA4ª.é2üb¬bH©$JÒfe_ßf-@·’…+â‡b¿ÉÂFd’šÒsAô¤Ê‚V#ÌH5Äœà!è!ªt¡”~”ð—pâèdA7GÔ郊9dÉž¤Eþå¬F!ãI*J‡ô™K )å?|è×"öð©äᡨ4£ÞÓ%Ÿˆ¼®žØ.ð1;Ý]„b³Xúú3‡ä*UüÅ9æ/¿{6ù‚‚ìöZ7zE¾xÛìÏÞ¬žì D>}C¿¸,ÿ«Çtø`D‡I HÙ÷ï]Èó·NÖMíÆà°(D“Z{°#}cCúÒ½‰D4 ÙKp Ϫ;—¾‰nÌ/ÀˆÐVËÙIcN•%̶€jb—í«wÌ•›VœóÐís¹\¥8ÇöûO­Z1­šMúQÝcqS{WçWéÇ+_?ë MgO‹‡ÕÓ‹y>xÞOGáÉ-Ÿ¹vHƒǾÚóC±%yöy-0¦Áñœy 2q²{:‹ô׉ðcC÷ᢗc(R÷5Õ¶£›w}mûòj‚•†@·M—³¶xö787[á©Åq›{£bµP7~Îp|bøŽ]nsئEÚºj&•p³ë!TΫb Mz o(¹¹Ïrë¤È*WÏËžBì«ö¿×Ôv4È3„?8Å¿ Üþ®¯=yd¯0'¢þW ?h7ZòУú –ülû‹f-Ö©^hi?ÞÞ»ü®/„º¶÷þÏ®@,ä6µ4j¶ª5)hŒžöwû-ss"_ò•¾Iÿ•º§©(ÇÂóøÅ-Þ£wVKìíÍÁHÎéð¢Y•yáP«¨£}ñH̸¶§Â}ʽ¢ÜÓœ˜ûwï)bòœB¼¾Êgé÷'ó¯þèªra¦|ø±ßãÙ­¸}j²ÐDSbY $G­•‚¤ZŒ…£øÖÿ‘XPýêrE5dyË>ù7‚ÎâÃX#–<ˆ)"ùB•Îù,‰²ÁW| äµ>üÇø˜±×ÌXöÉmmšÍlÂ$–{ˆ¨öáw-ª”JbñŠú±iÓ&VŸ¾øÂºWsòK­ÑÞ#þ«£“QƒÕœ 4æÚMƒmÑò|ƒ®&Ø»lñÓ¥±W=†™¡„»k°0¦™Úâ·×7µz,¹9h>Š9ò¸†ÆŽø ^ ‚ü+¤kG–ܺDtÐU³Ú’§Ouâå«‚a}'E¾#jŒïÓâû&O[ºã¤™k Ó7zŸI1žÿéì` ”6)ÐŒÚ3˜þ¶ô?û쳪^?þø'>ñ õ:Ažtíš,ø°ºÊP‰ÂÌ+J52#X;ÊÄòK ®Çk†`—¯#ðAKW³'[ÑÛ,€ÿ°C\® Ai‡ý\Œ¼È‚(˜ –äà†’ôLpHa®¢œê ~Ò’n$‘aŸ±šR‰õ·Dñ*œá Ä”(ŠD¾äBûÔEUœÙPù…³`%´ HH˜®ˆñ@É'4h$vÞò»Ð’[A|mJO8¢Û%©Ž1"M6ðmÖ áÈ Ý±Dòù¸¢v (Ì.½Ê3=EúOÄ›¯˜ô5QEXáè ts8#<…˜p’𠚆p099b"G7!äÓq cOg$' ?± , éH/e@þp ¼8ŠÈEÁå¬-i"BèzìAÁØŒR¼·ñSFÚ‹YAù´IŽ]Y½á7zÎè2ߺ{>Êö«G»‘¨Óª‡ŒLftŠQÝ?Ý<ÇŠäÚ­ª ÿö²þå³Lç¶£lÃù¨$ßxï¼²Ü7v® s9Þ>=ÕßýîäÇ®­åŠï®=zè´þ5ôX§n¯0ŠãBB,‰¬f#ðFCé”Õ lG8 NžÜ±« –N<¿”¹©G‡í².Ûç׿Ý}º"ÏÎÆ„ßï= rW”cýÌã{…ÕÍsÓìQ¹_SS´·e@6ŠU¯ª+ÞÓ2ððú“Ÿ¿u»Ñ \=cH‘_±Ó|¶A`Dúlà„¶Àøv_ebWv®Ék³°A‚K}¾Ï·“<ÆÕ;ï_V'ßÙ@Ú±ã%2‡{´z»D´Ž$X,óüƇo@uojë4jú2Ž5K%ý¬Ìˆí‰è3ßSí:haÛ`o.ìŸ;IÕ­Ó§°{(Ás;wí>Ð6à2„¬†x©ãdÔrm­qW›ÆqKŸ£%RõÞ¹ù×Nn‹káèSO=å°Äf¹ÝáxÄfˆÏtî} TíÔã,<«ÃRc´´„#Û÷ö—Uëy}û} °)Ú²«ãåÎZ·9箩{̆pDsÔåë”ö·MFNÑ;2SÈc†ÿ>î̱Þóÿ6×—Z¿¶@¯î=9Í ï?OLdy~rµ>=Ó¬8YŠ¡ŠÂ3t äÀ²\#Éýw޼牌 û"wDrº}QŽ´$7Ê©–BÀÃ4:< 2*Ïð|Óc³þ+ºü§žc·ÍžkárdƒÇwâËç}Jj4â Þ‚XúôÅP,°¹ L ’nÉVœ«Û(!ýìýpú±o¹kë«¢¡¾–r—§+­–(‡0Z rì§:£FKNÆfU$ 3XT8Àº<TüX¤.^¼ùDÚ²e YÏ™¿Ô’÷& Ú^¾2î^صã%««²Ð´NªÀyvÜ3#þ‰{fU¦Œ¶½÷Þ{ï»ï>@Ÿ QW­ZÅØÂù§?ýé¿øÅϧœÊ‹o¢W«Ð%åGTd?)4œ‡:-ú¼R§¥ò æ¡¥£´ 0é¨p8àµi$JXˆ!¥ò)…XÄ2^aB.¤‚?Ìb`xH ñ[ò‚œ„@&žáN²–ëÑ…9¨”$ÇOe±~üâ>ä…‡’ඃÃ(ü%G~8æ^Á5z˜Qvþ¦‡€k°½‘R©)‰Ø±Ë”4O ¬à›ô\²þqo~2d D¼•Ž{.Ã"‡ žÒméA¸á4é!B€`Ðï(³ô#„‘†Üd±$8 Õ¡ò„˜$ð¡j* …æ+þŒWR˜ÈzÒòdå‰`«^3"âOǧ/Ë  xN´‡ŠÓ×2z Kný—v¸ÀAx¢Ë?Aü/²íGJEdÉ´AÓþöö9XÛÝö¯ä`Aë„üŽ¿Wª5¶4ô*´Ž@ «áô \ìFâf6î‘ h]C÷`m‰¾•A2ÅóÇ +uÓ¹êB®€(qÛOÕíìÒ]:(öåßP¹s¡T¼*z6; Z~Á¹Z\¯yÓw_ý»fqS`%ÄìÏ`wþp#×ëñúÂÁNŠg·˜þàUË“,~üÚI—ÍúÁ«õí\sÁÕ´ûµ3ì*â±{ÄXOÑîW:àr󜱢-*aÖóŽj¤ñÑ'»}_~÷B“шÄ.œœu*Ý–vb{k,­)ü¯5ÐC±‡8Þ鳚 []Gò…S†z"ýH¸½IÕØÙf)/m œc™r…»8*§„zã¹\B °&…lóèj ®Êe?)ë´¯Òª|v¡ÕÚïÏœ7RIxnˆÆ“ïyx#7B®rÙ ‘Å“¬·ÐFXPnëÎaÇ«¦é¬R×G†¢f}b`9%Ê ?#±Ä®ö kÏÁ¤ÝaÅ’¶<“gW³¥=dèöx_ó´'ˆŸ§¨døûäJA® Ì@ $9#@Ô§ ís’à‰}fU&i߇zˆÁJü{÷ê+㣱ü?ûÙÏ>ûÙÏ‚þñóÏ?ÿÛßþ–Áð®»îb¯“²ÝË@8úP´kž’Ÿýœ¹C´Vž„0ƒ¨2 Z„ ±Ì, {D‰1š` )PÑÑðùžA4 G˜ÝxŶE¬)ɺ ÆkòJ.8ˆ!¼'å‡U=_ 7Ä8ä˜@rÁ/ܤ„*ðЇ,è8ì(—:2e€w“±ø) p˜Ø¯‘•JÏEq Óòä‚¶OÙ¨/»\©Qº-Ä#:*Oö*Ò\Ô˜Oá##Ò¤ ¥‡GeC&®~qøóDÆÞê¯vÞCN„Ñ%_Ìå`…pò:bx½™G°‘O°i<ȧô&¤™çIEpDÁ G*邵ÆM*™€ ”«—9ˆ’PÒ’ È ¯”{p‘OüäHFñÄ2VHàŒµ¥‚^¦8Ž££¡)$;…‡³¥¦8ÆéÑ×]w„|ìc»ÿþû©*íÀ*•A|Ž^dÛ…u‡;i¢¥À&i+Œ¼DÙá•“ÔÔSlÓ8ÕŽÀ18IËóÉ]­<°bS™ŠÏ?½pXOŽðþÚï‚Ö¸ÔÏàŠ—qj>©þö©í!u&0Çö änÓ‰žuÅä"&Bì®­.Êybg룯7ZLFávï’ªÿå>z|ûÞQ˜ca®õ¶{ ´nRž=wxC»Oõƒ€î}õ†²Z¡Ð´O¬žvÆ«qíØˆQçô|ïÞØCÑ&ùæè»#9hâ·k¤Üˆ§ø“a–àÕ²éMª,xz,†±Ã[ Iþ÷õ'vò,­.üÔ u³*R¦E)šÛ`ÖíZ9­Xú×ð´Wn´Ì°LÕJq»rk”^òñì.¾ÊÄxM5¢qC"©ëHÏ=õÓpØ»®«îcSû¼A ʱfO} ++ªøêÕ_¨×¾Í4ö¯§þø‘3µ»£Çü1»;¯üS¿m]X‘³÷´÷ô€®5t;¾qsYNrè‚WÔ¿ùóçoݺuM^ÿѾîA§}Ž;äLF}1c[̾¹Ñɾî—ê»ÄÉëHÇ`k¼ð=Ëên˜UÆk<˜ìòD¢I£îû#šÅ˜¼&ÏÏ•M~ÝXÏkÎn0·Î>˜ošYn;ѱýWïûÒ' ßö5jÞ„-ש}|¡óÅC±cß™%ÎhCË ÅNÉOÌ­Õ,Øá«[r~½ï•Ž2ýîKÌ¿ŸØqÊÖçïî˜Ã&öµ‡:þú‰=ŸÛs㯠·äqÇÂ/¥ËJ|;vìX²d _Œ1£`uøbsôéÛ–T\󯔦’dx*òô“_×n?Ôqä;m+ëŠJÝ:Â2v‡QCÖ®aìÍu¥SZ æX‹&£¨±äÖ¸§ˆ%¢> x£uhjI¯#ã/š?—œ±`¿Ûn`¿ao?ÛáuC$:;6Jš¡4ój±ž^ºœ63š0ö´ƒ‘)#ÚŠâ"·%ÙˆÚÛ[šë¿ë*]Ùˆ:^ß¡kY@y,Á° ðµD©@L€ƒ¢ŸˆéÙE<ÇbÓÎI×Ñ}à€*+ú#sïóø›µ[éßÿD¸¬Ê¤Z•}ÇXGªWBAšTÈØ=ïz×»®½öÚ;ï¼S’ÜsÏ= †øŸ|òI~bØ‚$`†ž‰Ÿß‚' 6OÑ¥ Á¡"$èá`I¨¯BI j9bƪB%A¶EÞð@æ/U€ PJÿ‡ %!œŒ@©x…X4ydFP°q0—âAƒÓ tfÏpò„9¬P°1#•À¹~Ë$å¡ã5 @xÂ\ŠD85ÂQl¢g…DI(6U OÑÐPBaeZG,¦y´¤•¡Ò”$rúá£;² º7:“lìÅl¤ˆáôŠŽF`Àäç¾8é¼ÎD¶)Àˆëº›Ï)6eæ£ê2t.‘|džÞM¯¤/йÐIÙ²-U#V0]±G¼åi¤(øàfÏÖAG¶wH'GéÅpÿ¬Y³d8´NRñ¤$<'ÂqlGDëTv˜A@½Š‡F¾ãŽ;>÷¹Ï©pFÚ–a¢ÅTøÛÀslæTänmè;Ñí¿~ÖPƒ}á7ûÄ—®GrGˆ hÐ|ûîúá-ÌÑÀqå D?÷ë½.›™K*KÝCß8Ó‰+rmÇCºM7î«O0¥V_òšþTh]yž­c@—UNÍÿî‹G8>?êX¾Ó²þHçñ®Av­îhî—ý¤Ü’q½&u¾6 ¡0¬+ûÿì|ŵÿ÷ö®ÞeK¶l¹wƒ1½^hI€RH^ò€„üSÈ $磊G ©„B -ô\±q·e˲­Þû½º½þ¿«c–I–;}V³³gÎÌγ3ç7gΨYØ]+l'ç8Øb…9‰Ø²MÎqÚ-†sg‚!Î.tö…¢˜M°– ðH,Çe¥8«-ËUßíÝûÊSµß×¥@¥¬Q^qð/¶ MžðÑÙ.Œ²©ì©ÐZà¿NW­ê´ C x÷‡ ­cHMqÍ 2<çÔÚäƒÀn\T&†œ›SNs­§Å}¡H³Ñ$u9)ÎAëzó\¾ªv_Iš9³ð©{wªçá©”Oj¸§ÂW÷ÌÖZ{"ŽS,Ýù6{œñ‰Éùû{â;¼i =þ[^Vͧñ'®þœ•]W.µ³(Êi®ù–ø…>O ´Ð1¶ÕåÁÍ gÎT;k^©¹qÛK›±=¶¦}?“ª·Œ[°ì¬Jx…½yIwXGÞYú)¶ÈÚ>ÃÁ k‚©TŸ>wùËW&mÍ(dóÆ…–)SV¥±}EiáÆ–îpzû´ôö9®=ú¨ú¶ÝË£Šù„œƒ%Æ}¬êþݳhÞŒ¥ E¯ìmåX× ØcO˱ÖôDTuÞ€±œšc‡¼ˆ¾Ç•[®Fwk\ð1F>ìhüøÈìf§d[Ï.Sýâ¥BªÞµœ“/åO#óTÝó7s«7g¤ÏúO-]‹ XjCª~±ü¹ŸzyÝæ¨ÎMèŠí*<ÁÔŸOsÞ‚¡ú'Uh;l¶Œ´©+¦”~áÁ=eÑz¿MÅ8Úãö-±ôu•×¾n·dGöiˆ0²#"ú À½hJúšüø:ÒûÞŸ¿òÏ„òh_MïÛ;aU]eÁ‚\ßR™´VM6jÐ.‚¡ :³–A‹P&Ѻ5ŽO:d\ùàsE G©æJmœÑ%\…wûû'ª) ºO…'W‰ðˆÀGX+T"ŒDxÊD“y À†E2øË± ‚²P"äB4(…¸TUÌ‹Qò%‘×ðh@HaЃ‰ìP¨”Nåû«|X»²P‚mT•A눤I—”ä+ï‚= ®qã5A1€ð(w„€]2ÃTüƒÒt :­tE¦×DèǾòˆ§*ˆØÙ?¨0rM=E²èÛH5—õ|„G$BÆÛ²IççV^ D©ä‘$"kp†ž¥TÑK®‰V7¾R0,CXd'>ô|p43áäìcçÏá¹!³H.+É6Ø,³’ü‚ »òúœÚ)¿þðló§ÇØváä©9]_ fwά¼žØÞDMʶ ^†‹ž»>µHk4Á캼‡»º–.‘ØV’åèõ÷¶{BíŠ ±MÍU—ÿÅD‰²›ÏŸyÉï×óõç@X|Û¢±2(ŽBo]5Kh¤ô&uKü ð™ÒÞ—Í#½Òã ßòÄv­’åùÝ-üqÌ×·ÏŸù­Gwvû"F ™p+H³æºÌ}‡«ý¿φ?.º¤h¾vÖ4P†X®©jýÑ3#ìðª$ûÙ‹AŸTi˜k²íB¶ÓºdRFaºmúÔ£T ŒU øÃÑ^T;G%™íÝ¿ [K=/J·ìkõînìמ]œqÙÛÃ5šPDÖzLYýM®6SJ&–S¦¨Ö ^}P§äºš-¦ žX襵o&*øÎ´¬ëNPy–ôrïÓL6kÜ–4³’kWw©à…âWâÁp¾±ß†—DŽ«Y‰Û|››ˆ§µz³ö¾ô¯¼âéè²T²%K–h¹Æ<’R™’›ôî»ïÆÈ=P”äþóŸÉOÇ6~Ûm· `(j¹€nÔЊ8ª5úð ÇâFº¨îðJ·hàä‚^´YRä)‰’ÍœòB@"E[15…I×ò!Eri܈.œ…˜Òa%(°Pr…!O÷ïßψâÒ…§FF"Ùå‰`ˆÈ¦Ô™…tnÁ5ÈEÍA%¨6d$¡ñ‘ôä=§€¤k®¾9åà¼R@êëë$Êí‘Ò‡$>ºÄcP÷Rèø1àÊÎ7a¡3 ˆ3ò¦ýï.=VJ<7ú¤V%èé«È2K"ý™î*b%м$B  ôÒe%@â¼;T2j€)ó™ÏÜyç¸/ Îœ3&.=O>ùä‘°=ni޽í‡6⸠¿uÛûÎïo—„’èñGL†@Aº 8ìúû·ýþê…Z‹ᑈÎ2@«g'4ÌùѪîzãО&žéÖìÔ@1ž.œyÖ]Cw Ûiá,×lFƒ¹_åÁù.ðN*ËÖÊJFÄîßTá6è&l­ëö"3 Ó®ZZŠG#¸[^lxðËeÿwù<ƒùé¥ÿf(È£<ýáÌ)̰Þúøn¹=±, ³¡ÛŸn3ËÞXy²;…/øÕjÎüÍ+U_9kšVÄ :4o_J;1Ã:B»¤”íÂí™J|ÿZ€®ó"üµÞ.·-î u’Å]ëðúÍ’ðqR@ÌO(N{W‰xÿêÔœe! ›w,Ü0aœ"Ø}80»±ìh£ñR™ÊûŸ.}FEG¸Üšd áI{w§Ñ¢S¦Úuþ`ÌhT'RÌêÚz‚ÑxW[³Òg4u‰x0x fñ_uñû۽ᆎD$-˲²Ú#¿}O ú— =Ö„%Hè”î€ÎnJ 3Ùu‘W·ìkhWÙö¶7µW÷rü+›‚‚ñw¶T0#QÊÂŒP}lAÁgàeÎHcÈØÒÑe5êx;}~ŸË©ê<ÔS&mZŸ &Œñ€ç•W^a¿Ý®%Ö3vwwE œ*jà‹¥uDŠ:澸ùT¿×ÓÇ m"¢Kì>XŸï…-4?jËÖ&߉%΋gfv¡”1à ·o¨äQzÁáõ+­8Ô*Ù bðEȾ­ÚwÃß»|~u^8òùßÈ)µr"r J9E¼§†=ŠVÒ²ƒw}ÿ;M=Õ‡í$âO¢ÑEüÑX4ìíåx],néßÄ'Õ0*No¨ËP&fÔïö”G#ѳ3{íf}ƒýªÊtÁ$ƒ©+§ª¹Ö¬ôBÙ­]þ€¾úïëNtt+ )ü]yç?>w"Ä¢§ gMgcZ¼¯‡-·ªÅt ôLµíT£oyå#]ù éQrú‡^eÂGC$¿òXv‰|Æg|éÒ¥RÄÍ7ÿ›3ð;~tÌmxÊ "àq4jTt®<ÅVZ :VÿD½Ÿt· [±XáÇbqqª%L|œ5J-#ÌI„-þã æ“&M¢° @ˆ¡†ÐðT( KÇHA ¤¶P3"Pà% ™Z¡··‹ý0¤òäb´ûSÇ>lÔûkHDZRÃHÁô&Ù¦-0»Òâ#_Eâ@Ù´Œ£ X­†€\C¦¾8Ã1(‚²Ž‡RèÔ„ ÷?þñÙ³gcéO— “ðq“«µÉ0‘±úݥש¿Q ÛT…[o$¡»<ùKFÞć ó"ˆ ¢Á»@Ï#ⲤDœöLj•‘5¤qbòŠ¥*­!Ú̉ðç)²#Èèóðéwæ šk ÖŸäøcÊ" q¬F%ù^Ápø ¡ŠBöðÃKäøoÊÌV>#$ò±JÞ¡<<Ûãöé±·]ÀmVQú·Û­®Ð• ™¶%kª:AÇÕ %™ÕÐnjëtîkvìÐØyÊ =W|àrqä´3‡øÕôŸ|º¹¦çµ ßsÔd±ž;ë—ø‹rÌ+À.ðàßÂÄ ó‡´3MÀ‘‘˪ Åâ6½’aW—p˜-+˾´ß´'”r‡¿€$Z=ªN$‰‘h$±Ç§š¬âºŽk¶C²µn5ØíjR·A þº¡¼Í,LÇ8ã¡·GØ Ï6õ4ÕcÞZçV±/T´xÝŠIR(輸`kàiÓó<ðêÊö­u=Hb˜,Yîî®ZÛM®ž1-üñ•±ƒ¡v0Z§Uƒ)Ú3Òç³CÀôUFÆï}ï{œ-÷…/|µÆëSO=õž{îÑ8'‘±ìÆ]er95=‘:¿©Ì>1OßéÏÌ0Å9é•w$Fuáð«¥Ó`Ö/œU®ú\(»¡{ëtzo}Ó¤¢´7û‹óìæzÒuû––f®œ”©ÿÙ¿zÕð/NX180ª†Í½!åõfËÄD"ÃûùúŽâ Î`UæNŸò÷Ç_Ð…ƒõ~C_wÅÄR›ÉÀÁèNÕ 9‰@†9Ô·ìXfØ|«ŠB½1¥Ñî‡ØÎHÜaw;(6LXñæ€.…Ð7Ùi+vܳŒÑl›ÁÞÕŤ°dBY[moÜا;Í¡o‹EAš¡×ÚeËxmÏ„éèµx¯pFŸ;«ìäé±l¬kñöá3bOgbÏÚîúÞ°]g\ÔdlŽ«#q³ž½²hÒÜœÁ}¥Ç± “C…±ÎaWÓ ¦2e¬¦ÎC2×A)Ç ^çCSÊØ¼HÙ9ë™fà`1ùw/^~˜Æ5ýs_¶åþýñN]Ðk3Æ&äAƉ®\™¹Þ¼vñr‹/ÓÔùXýä皟 ¤ÙLÕñ¬y†N6žvÖ*Èb%ÿYã½çÙ½ú"{zKµûž‹ÉÙ.˜l´¥Ùb•}¹æOÖvûä ø ;·O\^þú¦j·•ßÙþ2˜Ì”üðäe—P`[¬ü4eÍ@b"X¸x¹À´)£Z)óúЫLk×®?>¦ ÷ÃQ<}ë­·°¯DÉ\µjÕÜ3™º4¿)Z1c?–¨è€\ e(¥,ÃȶSR¸…Œ©jˆ§M›†·PÑíÉ(k6ÑmÈN€^Ê"=ܘ0Ãàg,€'¥ã J!£txÒ7 '‘‚H‡¡ôaAÜH‘ @Ã#n\¤#N¢ä’yŒTO€ éKòJÊ‚­˜ q Á¦<²S ¡”ˆ T ˆž0äEŽØñRФ°J…q ðCcoõ»ßýŽS_p#nE§äîX¾5½î]‹K¦aV ¤Nå#cžO‡§«Ã yù"ÎDâdÁÇý¥8èçVD°6d„G¤P(n B#v¬àãÈs åS€r (hœ¹åÅŽ "c@åÜŒá ì¨ÑÜtÓMwÜq·òî8 ½òÊ+ïºë.R^ýu¾oå72.¶ .”÷+sñX´¢¡‹…y_0~× Û{ú¼ž`tkEU¦í°®··¶M?¡¾Îêêwœ?ÐÚÁ€{ì7wUæ9Í»‚,ØÃ¤4Ãò¶á‚º 8®ÿz«&ÃfÜ]ÝXjözüê@¯kÛ_«®ñON³Ëô†x5IS§lû¡h¨KìoîN¨gì)-ÝZn“³p+ÁŠ9Ìz6™¿0ÄJ$ŠÉY–ýíT^‰E4Îí½±ï<ôf_(vBíÌ©8;ÂzT Y\2÷ ŽSòûî~½’ô¢™&ó»fѲœRËr‘cPÊ1(B^üØt J9E n1I÷v6U÷ªs? žžž}ÍÝ?~ÆsñÌŒ-¬pèÿ3rm'æD]M€Ùç–èΜù?/7Bÿç—¶‰Œˆ¼ ‡ç¶ûžÛ^+ ‡™ÿX¬¢"2ê©FŒ¡ŒDŒ‰;<€=öØcL﵌|½eìf<ýÐvã®2(]q×ü#dçXœÁΰ.UŒV»9ðÓî:P];ÛhîVœ u‰h°wϯuK^†2ý´¯¼úÌ=±X4ÝèõvlŸ6ÅÙsUö«'¤gôìxãSk–gë|sÓñ„ÒÐ;­±Ï\zÁ›ëöm®ÏËwf郧™º‚Ëÿ\~â£kvÂ>os:݆vÓ¢½²l¢£ØÊR¼1‰ñÓºJe‚bVBúF—>2ѯXª¢9v]èâ €Šª‡à›ÝÙåSõ.6¢ÛÍêøZšmÛÛUàòJ³ª^„žEÅѿū”ðßW혚Ÿµ<û^â,åN?ïÿŸlÂ×Þ¶ºž ê.?§UåãG¶Ö÷ê”Ä~ÛÌ2Wn‰+Œ¹Ûýkš‡ìÈB“b»Ž­¬¸Æ %R-ð~·À‘ ºär“i®½ä|vÙ¨ÆD ÇúvSÅëKc-ZºgCSŽ/–=Ï™x5©õêædë®Ë6ÇÒ «Î7_×—~¶wïÝáÎ/•%ú–`©ºØÒ3X²ÌÌãÒ½1å¼¥366é=Õu}V“ 〉Õ]®7g6'2-žŠmµ&³Ý–5£!mè÷üà‚²mÛ6Ùæx!ªTÄ£îÜüÆ#g®ú\ò‹Œ2žR™¤Ÿxâ ŽÊecjÙÑ÷ìÙ#· P|uŸ|òI´b`È5€D'grX+z&]‚ìô bw&L¤{€yÒ ÙÁàd'À‚W”| , 8m&2e!/‰TbÒ¹% E [FTzíà–yŒT†8 °šØ ÁSªÁ®=©<¹%‘ »}Õ(…¸ äâH¤\0 rI‰4À® –4 Oì‚ä«Ú^ãáË,¹©ø1kú'H纀Ùq¼]š.D?Ôºè1«ÉÈ BRèöÐ -¦pH)t]í£Á+€Î‹H 1p›ö”MTåeùzÀJ¸bΉ@iÙ‘>¹RP2Rø2.Oè¹"\ò-¢†l7Ñ#}ô¯Áð€´‰V)‘O›^úÓŸrôÊŸ^ù;ßùŸˆ“N:iôµwãh»€]Û?îú „/’0Œ3Š2þ¾½›XÒݹE5%“u÷îµÝ»éìÅ3åà>­Å®\n|{ãÝÛ½ß>ú½¯í=Ô9aBG@ˆá¿^#w±xlAI¶'©ñè~»Ù_!8~çæNÌXà¼å’Å›ª»þ¼¶¦¢=ˆe_cÔ‰ Æ>¸uû„%û©ÊMáH ‡nd‹íª·ð¤Û…Û¯éLÈFšnH¶c•x J9EHk›‚ŽA)Ç ˆ![Œíäb¦Ê©²³¦åj}Œƒ•ww&8¡{¤¢·`ɲ¨4‡/À.z¹ÇzÛóûuw#& ˆdž5úýËÕÍ%7?¶›ÓZÕadP+q„j„”ÃÉ|xyÄ8(cb2%Ê##õ%—\rÙe—±/‡ 6Í Á9çœÃ„Éôã‚MUP™ðV3Éy«L çLM˜Ò%“ ˆÿå3K Òloõ:{"€rºÂì «.ŽçìÞ¸é û·1¸[Q¨Î®| Ïkywo|„øôBÛåâ C0ûø„¹N³Áªv÷¥®ÌÄ«ODÇ¡«?yjÛg”cÝ®Ï9uN©ÃlÌ·3óèk®FW Æ.G™Å¤?7Ï;Yi³GXŠ)±0^ír&œèÍ›˜¾ê¼sKŠòór²Ošh¿f²ÿòI1„‡«µ‚ÖQnmCŽòÝU³¾»jöÂ’Œ¾„MW0Y새g™»”X[ânK›>qÞµ?8mÞron¦µ`BÉÔ9Jã£"NxýX[žËÖí l÷Q»X\µ‡‡óÒ‹&¯¸bªÑ¬*>¯=BÀÙ_ ­;BÛ¤’‹ž)Æ^Ó3µøm Çš÷U·õ2 ,¶4ç9ƒiVŨ¿d‚×7Ï-´ú"*^@ˆ…Ý=ûþnŒ÷7è ìU¡¸:£uc‚)Ȇ£éAƒNñ†¢(Q·ã¶ÆÜÞ zZ™A õ†Ò½‡;`µ„D˜…–"{”JÒÚNè°Xt|¦Ÿpl.â/i^èL|²xÇd• kð¨Ê„! c6ŸP- Ó&GñH;4öHyé„€ €e¢«C†žŒ¦Š>O Š4) ^TOi|¤³ê‰â-ª8·˜Ñ‰B%?¢ö” ‡XÍsPÑð¹Âœ«ÌH¤ AæWØ SAvœ‘¦F\¹eˆ„V%"òˆ7".Xd@'0ç-x/ªMÞ”v¡'.Лl¥þÔPÉ.Õã–@›à)D†DæG©ëG¹èßøÆ7vïÞM7£ÒCD|ŽÏf¡Ã# Ôe‰ ŸSOs‰ˆhð^„äW c2™,Â9ò•‰\ÙÊ ‘5"-#åŠxŠHÒV|( ä]„Q>2È×&¹GÇW¥Ë:Á‘˜ üðˆº%üõ¯eýƒŒ|Ç0¯ã_€k®¹æ[ßúƒQ2å4.¶ 4ŽÆêEÄÜû¹çžã3¾nݺÁlådƒ\—%/Íòµ³§OËwâßzQiæçVLaÿ)ôOílá|<É8­#ñ äÑÏžß¿¿U5 €æ¶~wr—þa=h q õ…cõݾ æMʱãxÎi1ˆ±ý–DT¦Þ hª‡:è%”ëþ±å¼;Ö°ÿîó{ ÜÍbЧÛLåy®9Eé8ÏÛ|ËYR(Wvç}âU=!€;°Á–« u®~³Òÿû_»úŸqY6%çæó¦Ëƒ<—ùΫ¿ã•\Óíª`Ry ªÚ<8Ú Çâ´R²‹=É8ä•÷úæ¹Ó¾tjÙBC”JLµÀ([€.Ê߂ҌǶ6ÝøÀvöØ—¿°§¶¿úÄü²\G»'ˆžÄ|‘”üÇœäâ Ä¤tyƒÛ½x´¼nIßþ~ùñy <•œ“3Žo\fªïZ‡#‘гl|饗2Œ²äÀÂ×[¦¯95K(ë¤æ@IDAT·è„lßë³4a²·«ÒGe^(R×T |€ZÈV2§8mYf ­Ã^ßí© CÛŠulÄaô,Ñ׬ȎەɊ! ›6ç%‚øØBb›†ÁbH4ùL6vå°è„ò³n×Á†`¼!ê:}þl§Úu‹_¶Ýë²Õ˜b•Þ%äGrQ„05B•Â=?ªºyÔ,ž°ÍaÔ‡‚*ºáÊ.«¶EeÖ‘ÒÄóH*H"³>Ú¢ûQa6Qò PBlª¢î»ï>^áHMñ¾¦c4G‡¡ùʼn%ƒ ƒôg2"üp|ö¡êÂé¨+_cÒ…Œˆhzü²ŒhTGº~,ø`,Ã-pt\ ÍæZð'N%Ù÷Š2Aôy„³Ç';ôTÎò$B‹‹7xR:Ã.¨Ü FFÄï V<¢à“wA: Äó—°åÊ#6ÆøíĘö(ù¶} 0âë_ÿúÏþs<„ÐèØ|`5”ê¸j¦pt`êF=©" ÜÆÒ5B¡ £TyáEx;ˆÑâ¹%]Þ)“\òÝFRÈ‹X!JÐÓ’põ ¡äŠ´ÒÉ7DøÀ1Gù¶ðJñÙ'ŒI‚øóA€Û‘@@,é(hÈ…‚óÏ—Ó×el÷êŽÉ 5“q7÷þÖ¹3î}³îÕ}mè:¥ÙN–ü±£Y\š òõì®&f,<² ù‚¨úuþúÕƒ¾pÔe1žò¶‘Nso 7Y:)“ÅËŠfOu§ïOknøö™bÎsë…3ôì>a¸§©—ˆÝbŒ¶kó„j:}øù‘§€t˜ï=¾½ ñ¤¬«O,!=‹޼ }ñ¤Ì-µ=`‚8k …â´ƒb¹½õ‰Ý­îÝløä’‰âW®<ß•Ì÷À >u÷›Ø¢öø"}Áž€*VˆÃ37ªxñ¯3BÊYªÆ·¾ÿt:‘ÔaMUÇK-”|îìN”戜ìÌI/É’"ÄÚT«œ`‚4ô¨úÎüÐÕxHÂ)å¹|X»¿|ûùøüg*Ë€û®e˪ղ{ï½WRX&Ädaîܹ<ð€¤0Žs;€~Üoǰw• `W£:E°›ó÷÷™¦ØÃ‚µ›(õëìSØé–`é -š[[ÑÊX°ƒ}j¶‚™Ëkë;¼}¤¯ïÁ‹á¾¦e7LY—môÞ¼&'°?×»vr Çäͳz¥ŸmÏÀdôÏ×,þíju››?a¹xå¼µU]†Œ‚ކ=Íþ]=Æ3 ¹iÖ`Ö4G£ûÊùÅÎ+\³FÕI¨$ £¶¦þP4Ç…>oºûÚð‘ ’!ðáÓßüêÚ’ûÖt=¸ù° :)Çñð–F( ¿½jA°âçûÛÜ›ÜÓ¿÷”µ¹'x¢£`šµ673gÖü«!‡Õÿ>µqÝÝÔë084ÊjÄ~0Q æw<ýÐáu6E§ÚPêÓ§OÏÏÏï/!uIµÀ£~üÜ~sG]ºMž…f?Î/>ï¢Go­34»®·³ÈÚ˜oi0ØÙ¸¤è¢­z>ì¡x(n½»óÊÎhÎW‹zu‰¦¾°¹%˜ï‰åܽáÉ=¹ÿ½o|¸‚½$ÍQ‘ïÚºu«Noš\dÏÔ³×Ï~ üÙÜØ½áŒxBuíÒ‚æ<¦„ft$ÁìP½ª›£ ñ,ƒ1⾺§ùSÒ®}ã¦T&­ o¼ñF¬6®¾ZýôãÀWQªé¨Ó(ÏtºX飨 ^ IÞ˜:ŒB.>W´q8  Ó…ÐÿYË¡-èZ¢Û³?mœr¡©­­%"Š:Wp:QÝE‘¦>bnC2‰ v¨úÉ0™†ÙQ !c–%’`ƒk’°â•IA-‡ |°±'#ð%éI;3ÖðRT›ú°RE;°:*/ žH"laž å “lذÌo2àCuJî¥ÇOãˆP ˜Ôñ¼è™á@D’®N±É•Îd!5z;YDÌ¡g%VðD¸åãs^9ÙG 7ð’G|mà/¥“ z®ÒJ”H„"DÞ‰‹\ËÓÑ\å[Á—‘ˆE_ ù iÔ Q~(#ãn»2õzU;:9sþP$ö¯m 7œQÎË2‹ÉPšå@ÇÁ–íHÿÌ®f>ŒéÜÁèïWàïŽOÌïô…p ´¹®'Ýj4t˜&à-çª?¿)~{4´žÙ3'o0Úê`1à°¢äT×–”ù‡19×âH =ש®t‚Öq•"pò³¯EE$øBѯþs‡Ä1ºg}í“;š0’;ab¿9ƒ¢|ï¢Ù«+ÛØÔÐÞæíìë˜SœÎåF0˸bÎaš·Y¦þ§ZàÃÐëtZwýéSægÔvy1˜E$·Õ^|%ŽU,¨Üà·Åú•Ä6º§Puôت²{8¼y¨sgƒ:Ý-ÈPÅóø £#ìd°PmÆYÒáÀÞXŒìX#|úé§…×F mèÇývl»qT™ØfL#Úœé} ¿K>©È´µ­ /«··ÇK×ìŽ[––¯\¶d@C;Ë.ÓRVœñ?zfo-ÇOê"F½U pñµ?Y_ÓÞÊu¿sáÜ{7Ö]•ö8ª;†o?›[óíÝgßùÆ!Á§ùô?·Cûð~ÅBP§/øƒ³òí!ÕmÆŒôÓóC&&¦þ2w<[Sú;[Qž«U¶âwÿ×§Ôÿlk¤KÉžÕŸn³>ûû]÷ö¯Ž>ðS@ë ŸžŸŠT~sg1Θtá½­J—r·à ýìþ÷â9Àƒˆs^Þùs ªš»tùmV›%Ø1…2Š&.9¿ŒsD&yØ1‰<û¨Ö8©Hª´Àîf÷B“ÂÎô‚x_U›Fa:ÿµrR;‡yÅÎ*ƒ>ˆÙtŠÑiì ÆlM‘"õD¤Zã ”_7lJ®c]]'ƒÓg–O~ps]]kïe÷q{¨/µš 8pÁ£òŸÙ{V¦ºÊT¶ð“R:V²»ve¸ûÞö4Ü€C¡ô´ «UuÃ¥é*ØMD"9vsߌL¾Tê0iiý«RöCa5škJe’ÖcµSv”RMMÉø=š–×òŠÂ¬m…Ye¼ŒÄdû5-Ëàˆ0¡þ|~y*LÐÀ‰óFL)$ ³ QÝ…žD"BF^ÑÌÑÆÉÎ#T}‚à‰ÔDS×…WØ’-e@„âHUœ,R–F¯5»–"Ôx‚ „ÀsT†ŒTFÐF¡e”×Ã`GŒ0IÝ~[€~¾qãÆÛo¿Øó¦ÔÀvtHúùqÕHŸˆ'(u“8WýœÞ§UbM`I”<ÈŽ|Æ!&®É#”¤ƒ«ÆA‹¥¢é!|ôä!ß!¦¾ RÕ!¹ilßk„šãŒá% È˧r$~nÇÝvAT v ¸ý*ÎËž8þ¤å§å§}bÉijg­CÕoó„{ýa»É`Ðë3æ_øÚ¿nÂ¥þÁ٧İ8hÈv¨¾çÐbn>¦¶‡ŽCc¥h°BvÈFbªÙ8ƒn½p‡Wæ§™|É Éà¿î߆ö´·Å=«ÎÆî<íÔÚËwxƒvgÍÊßRÛÅá{7<°]òR Aë0Áã4[qr‡7¡Oþi#H„‰vFüŒù'OÍýß­Å7z:^â¸H¯ÛÔàåÔZ¬ü„>uMµÀ‡£þ¶¡Ž~&ðì®–%™x–D–þø•VwPÄS¶µ"¼ï^;¸­¾×Šˆà|ûü$FbX*¸Ù<ÛÙzð­9sFò‚iùª_ ã'°wElÀÚóà걺<`â £0SS†NÆ2Yüæð+†r«bƒ™Œ{ÊØvã¨2‰¡£ÅîÄÚÅhÔŸj~tV6 ;ú)'¤lyiÓ?;’&Æ2¾ãtt"›kº1œÆ'Q¯gpR{³.†G†)¹®·j)Ša &ˆ¢NÜjÒûÒ§[B{ì¡Ù¯D' žˆþ&럒K®  ”Û­;tøö¢– ëç÷ëøï¬ùÛ¾…ó#Ö?¤¼ø˜7¦ïü‰°a«ë®QZ¶uÕ%çhY]¶lšfv;vì#Díi*’jã¹€,6öØÏµE õ}|;pšuWVš}Vqޝ³Í7…bªnƒ_H=ÔLÞ¨²EµÉÅó C2²RqFœ%)ÙÍÏ¢n4gÀÃvp €ŒðM§¸x,Þ^Û3©<ûºƒ–@N<ׯ³.‚DlCô½o¢,±e=W'²cR*-‰Ò(í)xÖXµíHø`\™à¶’Å/NMøøƒUñ à ‹¼’‘`Ç•Môj˜ÔÔÔÐÍ„·hÜjvÐt?ô¤£«£!3ÿP5’þ}µÌN †¹(ö$R[ÌÙH'QŠÀp@õ`.3€ê1€4šQ%rËÛq•8h5ñ#Ù@1¾°&$4 Ù ¬ñ4¥hoq*|d[€ÞÎvÄÌNÎ~‘N®uæã¡e˜ÔiR‰@Q[j%袧 £VU:¤OCÙDÞ‹×d"É-šy!†[„‚ ›˜ÍBLaÑ$]ã/laE ‘¼|U‘S)}lq4Š  ¾còá¢A¨›¶X¥Uì£GÛ­‘ñ<•aÏÚTÝ]˜n]°“}¬N‹ñÖU³Î˜Á6‚áÂ;ÔM<¬îc‹7£ -ÛaÚÙØÛ· Dâ'—œðì®fÌÜp<Ÿf5~ñÔ©?±ò¯ë«“7–âˆìèP8À:iJö§Nš,ŠÉ݃p1¬Þ@ëšzü‹\‹3íìØÕP6˜€Ä)§ªUe»+[‹^ªhE;ûê™Sg°˜à©4tò ë9³ ¨Ë´›—LÊÚp¨ë÷¯¼þô©j~ÖGún:õÄA§\zù ;kWL²¤®©ø€¶†´RóÚ.?ûÁÙÎíiXÝîï@ÁOhƬÂ4´›ûÞ¬­ãiu‡ºÄ‹ØþìùJŽ×Ë´›ððxÕ‰“~¿º „ }¿r„¬‰ÃçwRâø^™ai JÅ0Tç:Øg£¡ŒÚZåñd'«–r\EưG• ÿì‡êmoJׇNt¾ÚîW;hÙ„)J¨#hÇZ-ùLÉÁMÿõkªðÃN³šY2#R::CX@“;ð©¿lâLˆÍSlf}cOàžjÕMã¿íÜÓÑ" ë¼á`$þVCG^Zé´`«6-C‰bædŒu™-étæp8.eœÀ·£‹ „ƒýž:§^é=ø ¥¼ñ|¹)M±ØLg}n&·{ž¯ÜZÙñPomß²‹·Ôt©‹·Eéªy*6á\Oš2ôz«R ¥ÐÌ1=‡„䨷ÅØn×®]tY¸¥BªŽÿ˜^àzu_ #͵*¹¦ˆ(KÿÚÕ9ߤdYu-]a{\oÑ»-z.çxv…ÿ´ò”ÞpX‹Haš(>S°Ÿ½ûÚ¢2]{Ïfæ¦}Á_§úʨ=lEÔœò+0€2„ýÆh$Ê`¦ÓÇcÄãhÔù¯¥HQqE‹±åJ1Ì.±{­ ç\2† ›R™üñ1lÏ£`%Ÿ}¾ðôVü`R__Ï7Ã1¬Ì†äÉ ‰¶Ï#ÈXãš‚-@gxøá‡éÉø—ÌÒ6~Ò™“ÖÀŽ Á¤2ˆ øHÇÞ½{E©-A'Â-b‚øðFÈ)B!ÀâmÇ+B %LàÌ•ŒìGEx³ãŸøp•Ö ·Ò,D(¬Ÿê!¡À]±½¾›½í6“©—Ͱbš71Ë! DÌÆ@cëÇ D„È‘,´BÇ%Â0ǸI`•1¹XP1ê%Ïœ“Ÿ~°âcػʄ:ñ1Ã˱ Û®Äs§]–5ñT~†ž¿PÑ@ó¶"õvp`UGN< Gâk:èµktütîKJ±²»7÷ÞúyßUgíßËýª{é9ÕÜWÜ.˜šçÐÖydØßæé ¨gÓâʱ>)°Û™1'›6uRºçñ@ÀïñlîˆNÍ,^8¡÷Ï·ÏS\åŸ › €ùÿP1“³ÑÓ4¥UñHÐ:"7Ÿ?ãºvoŸüUSÌê^–Þ?d>qÃbÎ<â¯,×5ûΤ¥[¶í©´…Œ'Î> 8í–91€ÖZJ*’jã¼n]5?Ä,ì.,1$:ë0Œþ˃ÿšo2›Z‚½¶ýºògfz¼¢-X·L¬öfl æ;}:cìŠy“ Ò­KËT0E¼¥üú“óåeÙÃþù©Juz¤Ãªˆ§3tÍž½}ûvvŽC ˜Ê$ÃW8”°›;uV%¨8ã (I7—Œ˜;3¶¹qó¦üYŸ¿éþ7½Qc†ýÜïLyZÇf©ÎÇc%%«jœ5Vᣩ2ñÖ WóçÏçì¼ä–ì×1’Þß8Ð`.Ð.ÀYù-85[C ˆðMk2ѺE“gªi3ê4u&Èlƒ®…ŽM Þ$¢ä—Ý©“'O–—‘í®/,ˆð¾/õÌZ`m´wÀ¶Nâ_8¥LK>rÿ¦ú×*ÛÙÊ Y‹;PžgjèöÕã/Ê‚æWÞý&šÝb,L35õo|p”s'¼c æ/E`Èv6»øGƒ‹¾î”²7«»3í6áôc‹²×u0åà|ð‘Èq,©¢p¿S›vÓ¬&6Ï>ºUµò»ñÌòÁµ”›ÛEüS'•h)©Hª>-0£ ]³Eàøfy)A9­#åïëØËžwÖn€áÖÞ€jÁÙ¿oﻫf ¬åÓ7žÂ DÁ„Ò/ß·qs¢Po^Çé´Õ}Ó ÒŽøí¨îôæ8­+§å]³ì}”8F4;<,3V—Ö4eÑš™§ì†ù ÿʣ쎕‰ÚÚZM&cZZ±Òõ¦ÒØ¥M»Æ³ÿžH_µ­ßºcFSæ1X“ɾéÇÀÉûÝ:кp4ZÇÀÃg~fgG´+ÝÂA þV8[Œ±Î¯ÌìS”ÊSWýT~u캉0>q>0°Ñ;ÉOË?,'áºûz”PXQo³ Þ8`±›2ff¦¸HnH´NëOÍU*p6uÑ;þ&ð´zÝ)“ÿ¶¾Îï ½ÑôœÃç+T–ÍŸ–qȈꬡÓÜÙ©®ÖI@"ZÇœò]wƒ‰C*=ÕG×8:]]ÙQ˜n9múûçœ9PeQiÆÖºÞ§ŬºüŦ&“’püf#Æ­ìiUÚ"S·yJÒ-J‰3cºS™oK,Yrú_­ƒ‹EÝÞ(#q,äðlj{IÒ¢êR-j  h˜Àv$2Ä|Ý],¬séâ ‡eFú¸b„u˲ßtÇ-‡Ú½óƒÏ‡®­ƒ>=VÓåç8Õr<•ÞòW%J…l  ºƒ—70cà‹JD@.^H´îd…Y4j®ˆÑ«Ñ®¡”QøIäQ²G9Ò¡ÑR ††tr–AÜI@{©€Ä!x ½–(¶?s†…€šHýR©*àæ{ZÞ!#R7pŠ!Ÿ2Ó"ªÊÉ|k˜qjH©Äk ;=ö§|þóŸg¶É-=œ.G‡“WKXa,øžÜøÊú ÂŽ¤3L0½¤ 7j(UÕd_{¤Õ\¤Xp4ÙXJ.MÒEj FàÔN B„‡Œ3q+‚/­zZz*ò>µÀ¸Û. Î°m[è/®œ2Âw¼ýÅÊý­ê~»­u=N‹aÍvŽé"ež½¤ã€srÝås2ØÕÃà“å0ýßåó¤1}hõê»ý¨OÙN3:¿µ©ÚS0»l§I—8ñ€tÙ¨ô‹—Tƒ-<ò¥åhdl‰øÌòI˜iéÉ ů7ö çLÎz¯SÍd>©xªŽÏ`;¼TìçW–MAßææÑöþÓ'p¸ÿçk–üú•=þps¯ã!7»àkg¿cУI(yÿþ¹¥¿xiÿS;›ÙQ+F¬C¾¾†ôñ=ÙÕØ³á`§p¤dEΧVÏ èòÃAä Éê(™”¢£_0VÊz6L[ê˜RÃã0Ëh»ãð•¤Jür»wG¼¹ŠN_ߥ©œ®@HÞj2ª›,Øà‹ïâ ‡?isÇœ† ´Ý¬ggœyz]I–ks핽`q‡ÏŽP‡4ÜØ%âªéÞ`\qòræp¾½Ï1°ùu9úX;V¥o¶©ë·«Ó¦ø‡­y4fJ¯?òGvj÷ר8öôÃ;¾ûÄž·ºéIÂ2‡ã;×.&þÈÖÆÚN/Îõ.]¨zc&Ȭ‘™î4r2ÓGfœ´õ8<ÒxÈš§?è- î‡å-p¬ð‰ÅΞ]0ò—úòiS!þÍ+U»š<ÛuS—;Ú²uê*+Álˆ³Õ°>–>Ϻ·D´«ø£tYUAó7¾llYñL2XsõfuñÖ¨¨°óƒµöîڹÈq-hÝ¢—oýç{ …@+0C4èÁ„’f޵†¦é ]F³:&½¶¿;Þ)¹N³%ÌzµÊ+ƨ´QyŒø=Ôf>°LЊñ[ÊXC ìÀ¼Ð™ù®nàó EºfˆV%ðœ(Õd„y DDŸ—jñ«=­Š`j`èöP¢ÃC XIYQÄĆ*iY † 3Ì`’Ñ:è™ô@FUá)5!‘¿À%DxSJ‘ãb¹%ºd’ÄâXêF í ZGq4Ž RTȑнœS·úà£ý‹_ü‚þ…/|™‰˜Ž fÇ,¶4 ²I—f–M?§7޼Uáð!#8â€4Á ‘G(ˆ#•¼)ànH5׆!éäôv‘)Tûz‘tå"„Z‘"RÈ+òB.h¸Ê»‘ÒY6à+A¢§‰ü`”rS×Ñ´Àqb»À+¼WKAëÐÏÅpA=_BÑáÊŠ=C""ñeeÙÁHto¿»¿mí\XªÚhú<î}D!o÷¨‚1}À¶pÃÁ5Á­ÑÖtxÏ›Sxz¿O½‰ýn¶·üþVÏôu68 ‹MËwrð¥8ËG÷¹`.Ó0åª'&"~½±žºMµÀñÓødd½~I†iï©VÁ,¨Y2˜‡ß\¹@ø¬= ºL½áô){û'H¢d´nw£›ÄY…Í¿~Îô}-X,½{øæ¹Ón±ê…Ý-l¹e_<äɚϘHß[5]‚Ö‘ø»­¿,©ð»Ü漏±r$”PšÑvÇÊQœúhw}{¢É_hh{‘YÝ0é½É…vÄ̆=¬Ó² Êî6~­-[¶ÈoFg­ë‡{±©y¬çüÏÚ^ ã¨[§{º¥pqf?luÝmû­†¸3æuLúšöKv^bÝÎÝá\ ^ZmzìÆ'dâÙ!©Ã“³õm÷z0Ù—kItGÒ3Í¡3&ú;”PÒ÷4¹5ƒUa8@Àî«n;_±}†ÍV·»EAµ&G˜O0e‘vòÛ›ª´§‚֡αJævb:¶¦Ñ¤"©x?Zàoj±qcjxõ‰{1œ->´¥qùÔ<ʼ¸xÄó™ ëbYÍÖ‚“mEçzÝõ; DŒ™¶PÖüO?ýÈÎ^_O©3/WʹÌ{Úzæäg &¦DXh’Ó™ Ë)‰X°ˆ%åu !¾à§—•Þ½¶Ôâ ×Úôh{‰)ÚóÔúʳN›÷|‹2%š°ó ,G›¶))˜Ù¨äÛu±çª,èK öÚ¼Ú²¿8CõüB°¬Hê:ú¸ä’K8‘ý–[nš*j3šêèÙŽœJ5J8#z;Ý]š¼¨ÓŒ8|lÙÇ-¾äE©F‡‡\”y&i,¾!¦«0TÁU&È…¢Î{ v&µâ <I# /¯ %WÐ.øc%$@¡ÐÃCº:&E,&%ãk”Emi7™ë€¾\C*#ð6ì”H'@‰ u”ËÁv`A/vyRâ€+8 è!œ0.óæÔAŠâk“ÔíG¶èð‚Ù]wÝu,˜Ó·ºŸÈÔQ7 ðy5Y@ ©é¨ï©ïáHD`q&~Ì3µ* ö'BgN^^^NDhDº™w‘ŽŒS4d2 ù,ðˆ X6âÆw¡&ÂS­ˆÃSrAgÊ6mšL€1$ bòVw­ž©Hª¬ý»M±<`›Ñys ÊóÓ~õr¥AÏ1ºÛ.[xÝß7W¶õYŒºÏž<é䩪=õ|¾b.‡•ß¿'+7>°½¦Ó›—†Ÿ!›pùRgÑ\‘}çÌ®š•ÌGÀR­8ÿóšj Ã/ž8£Ÿlr–T<Õ”xjg‹ÞB…1AõRF†yè×TuhgCsÚäI. Žcz’áÑVþCöð³? }ðmSoð¹ÝÍe9Ž3g¾³2ÁÙål?ޝY>%›s`oŸõ÷×þslñþ_žç E~:—’JIn÷ 'gw• ÈIŸ¸0;ü´7Œ x]_o·ZCCtf~wÑ’Ï=ñÄÜyæ™2•Á¶zŒ»¯]yÓC;¼Á(¿qÎ4>ôìoýÎ㹜yœã4/* Tyýg美^DPãã–L\ É»‡»÷øêŸýõ)J«¿yÊåçû,Sw5ô¢Ø;­€˜ð×å”þc[¬¯cÁ……mµ×Ë›†e §ß}N1&Ew¼r YÚÉA{:ð8̹á/Bû§CqƒbïQvù‚p^{ó‘Pì¥íYékÑo<¼J,`/žWôÛÕ‡8öe[]ÏÂÒÃ0„T2ùŠ‹:œ%¡h 섌™"º³afx[QQ±`Á‚d©xªƼÖõ/øüñÓ‹„ó‚‰ßºâW/W ˜¥ _®»âΰç 4±úÞX°ÛYvÙ¬•_Ѳ¸¬ÆÙŽMņfƒI_S±¥Ö¿;Yññe…œ)&4LOYU>Ðî.ÏKç^±r¶­}ÿ“•­÷Õ.ç; pù-ïžœãZmAÖ( àâÔ¤ë9­nÂsÀ•r¥hðí hàÕ ó"Dø)eŒ–ôLR·µ ÒÿéEýñþêW¿* <=ŠGүƤeèÒðyO}O„N@7Ä_»äÊ€ßɱ$"YÔ;YéäBàúyM$Wxò”ú&"z"ƒ2­ÁÄU2ÂJäZ8s¥\i"ª!B ‰¤qR½a uᙺu ?¶ G÷ aÝ>õk\œnóEb=Áí^ÎÒ E"ø·:ÿ×kx”ï²^=/=­Sû=Ùá̇^H86=¨ŽƒÉ{röü¾mã ?uüjõü²߽vPuò3hçì7Ù+:ÈPm0DÀ·t“²mÖG" «LÛV”çΟöÇ5Õ‘X·_1ï›ooNúùKU7U>À‚Œ©jD ZwRYÖ²)Ùooªíô–‘w}‘•Órù’ììYYWóãg÷iøÃëûÛ“)OÎþÓÚ\Lâh29x(ÛßÚG}pwÙ‚âßj ™l3׸‘×ò|Þë8‚VÎôca/­<âi ã«òÏ+Á£T¦Æ°;T¦¸ÎÜ™JB§Â¹ê6ÕXÁ'´—Ož$‘ØÓêö÷»ÎV˜â˜ F½,˰+VóËÍs/¯Î2X³²²{Ò®è<ðŒ3Ö všÒÕåÓPÏ>®Ö‚­ëBÝ™SfÑÅáH\æô—çÚ«+÷Î3E»3̇|»âv½Õ©-½xעġ²#`²Ø¯\ZÂÀv°Ý‡nçWƒKgpG—·%öè"A½ŽÚJ¶3s7´´hï›”ãxö)Ór_®hmñ°û鈀ó6fopxóÍ7O:é$­Ì䈣zÖáˆX™¶JºF–ФZà´€ìÐL¦GRbÔ¯î1¤ws8^,ìŽô#wÉo¿(÷úx4nÂJÕ®óM4·}ç‚Zåo¯ZðÍû_„«k/u»u¦È•™]"¦œÍPÄ0#sÐóK:Ýé5­>k"b5EM¦hn®ü¢ÃÏÑœ‡)Öä³ÚŒ‰ES³˜¾{êäµ Í‚µà¢I™8unñ–*:UâRa¬Zà®»îºãŽ;PeAëXlÀÝÁXq!Q×¹2Ä rD—hd >hã‚Ê ÕóˆÕò JJJ¤\Âb<¹å©<\ÃjF@.âšÆShPïA4ä))¢ís哎¶À'|äJ¹D8 üQìÑö ”H.yð8†Œt¸¥ÃÃ\Û:,æÄ­¯ŒÉlÄ…†ÔÌBÊ‚'|xA~>xR©v YÐzµ[z>=ÞuÑE|òÉÒEI¡cÐaH§ÒŸ!{׎7ò¦,ì=õ=éÆT†Rè̃ H!@ðE„‰³ *Y’k5iÒ$ìpy;ø\6·"ÚÜBOõàC"‚É-mBºH«pƒiᆰ“K¾B2ýÊÔõ}jq·]8Š÷b†sýýÛX•,Ér|ûü’3úwª2ç±™Œ‹K³Â±¸¸±g#êU'–œ9AÝ|= ÀÃ[ÅOÖæê.X¡’h4°Â˜À ñ¯šeó¢7=´ýÙ¯œ¢iï%Aë4ý¬xÕGpC·•ç3ËK¹½óS‹„ƒ uøQÉq˜ÀC$3OÅS-p<·Z<Õ–>»(]z¸vëè+`8³'}Su—»¬IœæÍ³¡äs,¡­ 6Eýäù}X0°½½/È©}?zvï­΂ÉOŸÛw¨Ã7bú g”Wwx¿úÏí½Èôü´Å“2Ù„ÄÞùò<õZ±IzhW×é–ØÑ·ÏqÎal»qW™˜‹ Q•܈.¢S" +™5 ƒ¬dòÇ6m:Õ^«êÌÚË?ÚÙý­[ž·ÚMi6ãÔ\×]oÛû8-ÆXÔÚÝÝ¥tß•¡g§R–Á~xŸŽ½øtOeu°u|ˆ‹\ɽћSé÷_2=ÿ­MM~ÃöcoDɰ..ð‡êŸ{¹é“ï nBrÏ8¡Ð¾¯[9ïŽ7ðFGz—/D/Eb¸ÖzÁçg¦Ç}¾'˜Ÿf]t~i#7-íH5þ ~ýê¡-(9/Íú75,™¿Ä±­ÃÀ!€­(ΕÅ:|Å#;¦¿2GüpoÜ8©”㡘ØQ >÷#¯Œ±_$AëÈb´æ Þm Á¤Ü¬°§›DF[ñ„Ò ­¹‡=³j¥Ü~õÙëž{5Çè.0ÔØÔ-8Næ,3m¨~¹5m¥Åcð§™ÑÐ :“Õe­÷ùÖ°zØ’N—çˆöE”í5mÙæ„A‰Û•Pu§/½¡g}¿!aIæ‡Äõ©ÖnÇCä—¿üå׿þujrÊ)§¬]»EW3Qy_«öÄÎMŠÀF ‹O(å2 ¡E£K3$Ɉ ls`$b" *7¶3(Û8ÓÛ4¸‘ŽvÍçWöèqÅô†r¼4Èæàz eà\ wd¤P±Î¯„yÚO:^ºÐð)ˆÑá©!Wx’…€ë˜@À-OÉE…©¯@¡^@ÐõçSÁÉ•:(Wyz¤«˜ ñ”AY£‘§DŠ£=…­øò×hR‘N ÐÉAµèt]ÄŠ¥Ä .¸ ¨¨Hº.„¦ã¸ (j4<Áˆá€Ä!>È…tÅ÷Ú÷èÕ`dHÂB…‘zdA˜Îg¸ˆ$"&ȯÀtK#@Tye Ñ& ì|(D˜‰!}Ù¼;•”ž íÂK õçJ)BÀUä§È,ÂEëQ´”.R×÷£ŽÛ…£x¯ß_½p@.M'½¶Ó7)ç°rq$ïošWûÊ6ßšªvN¢tZ7œ>ujž:× Ñ3±o0~pñv5ɶ;¶»²4[Óé›ü6s­oi|©¼+´[ ³ÑŽöào8¡”fö+ñä{M§ŸGlÂÅ÷1)v“T$Õ¬à$V*¼0Iýa·)®ßÁß“_ïáßÑ¥¡¼í²ÃÎìäV°õãÏ*ë{¢ooh`Á€ûÈ.oÀƒ\ÉûßÌ$'Eä§Ùø“ ;âyô¥~ŸãgÍ̃ùþuÚ™ #o ³y–!(ÇKeŠG¼¾šÇ¨Ð²e˘—üss}»ß­ø:ºóJÕÍëÖ©€Ó2f0»víbêÃÌæP¥jJ¦›/¼þæ1¿}tµl¿1àWu~7¡«Icóìë¯ÇãîÝN“7×Þë,Zar©k;ƒ5'ã„ÿjßlJ/ÿχjIÑNMºúO›¹ãoÔw—ççž4'û­õ5:%va^¯ÕdÄuk;çEbslhYê†Ó@Óê`Ç[ŸÈÓ_ºK½­îè+Ëu½µºƒìóÖëÊgdNÓévÖvÝ÷,Ï6?¾öd|oá·ŽÈž¦^ÌM‰ŒÄ\¶C̦W®h"Ì ™îÞ½›Ù$·xÙ?ü8õ/Õï[ €;ãT‰ccØNQ,μ§9q5ع=h5§O ÷îïÝy»1mŠsò¥0!=Ðø’sòe±H_<ØaJ›Âé¦W£¾F×´k5‚ù3G<‡JÓ+Ó\.’Ñ—už¿NÝ 1ìX~vWË^ƒî }æå…áüD¬¦§,=¾l¿¯ËåŠaŽç´«›³Ü~\ZÆÂ1](¦$ôæ¾pܤDÙ±>ÓRWféryJV¾§WK¿k ÒqBŸw(«ªªð¶ö®YÆ„€ÅáÌ„¾-š³(ÒhÎÀ^èðÀ ìEÙF3˜ Ý›\XrÅA`ä«7QÑÉ(0Ÿ–Î'7pÉÕæQ2T!h5a¤#Àn3gΤžbbC*I€€ý¶ÔYŒã¸õHŽ"Pï© )Tì€[MÑù¹…€7‚'Ã+ ©*Ù1J®Û0qÐ *£Ñð^ =ÜÒD’˜Z+Ò磡§1Eùò—¿üÚk¯ýîw¿£Û¿øâ‹x¨üØÇ>¶wï^:]”^G—C²è¥["AG×Pô4X²‰TÂ$y¿öÈy‚*B ð'ò‹¤€AëHgjJ\ëÕloçEHûà-4^‡x%”øÅ#]ð5XIœÖ@*ID^¨°Vg˜ˆóÑ ‘8È A[@x¡¡2d‡U*¼-0î¶ Ú«±M'­ÿ(--å]#w¾~ðŸo5°[ ômjžK” rihÝ»r-]Èð5ô³ç+Ù‚Ç-ÇËbvÇØ/Ý¿•x¦CÝ{.)£u2éÒÊjéUGβÀâ<Šýß‹•çõ1A"hWкX<ñ?OíÁÀBË•Š¤Zàל2ߺÕûÛO˜¨jô”#®gü»“¸þ'£º ÚˆÌê}móK2s]‡÷m$s„@dÙŒ9ìê*æx|X0|í¡ì= GcEï0Iþq^úãW°lï ä8­œŸyýéS^Ü£.Ù.0Ðr"¹©øà›Üx©LîŠßË+y«3ä_´³3Ñê6µ÷© þ[z”»Îw¡ cœxâ‰(ÌDOð»Ãìš½ô3gCöúÚ &%27+:Û¡ÌK”>é ËhÁYã²;)Ž>s#F»Å2¹øÄäÔéM8¹ïOQ@ÙK[Ùä ¨NôõiV3&å;ÜÛ¾{ÎÏn3ºÕØþ>s$.w„•hìÆl¸ýœh麘çûs×ýÏî uÜr¢Ê²²†ÌM Ò­*xç²àú¡²ÕÓ®…Âñ.ß|d8bk»|àßûì2Ž$0!ÆÜ#yãîí¤c ˜3¥w$NÑ|ˆ[Ûoœ’¶yT† ]$·#¼ZsT¼›ƒ#Ä™]È]qp”^ZGº·æ1GÉ…Ö ç·¾ª¿Gýê€ÑõÖ­J£˜3gúªž39':J/øæU¤ ¾£Á]qN.;ä/~Æ=cÒ¶Pþ䮀®)jŒ÷t¥fG4‹ÚõõñŒr«—³:·†'L+ÈŒµÊ0'Vdy Cn£ÁxèàA“ɪèÞqØ,õI]GÓ÷Üsf„¡¯Ž†ÛóÊ"‡XŒ2š&Œ:6ˆÀ*‘¨ñ0£†bƒ*á ØqêLò¢Z“ˆBŽî­Aâ‘P Ñü݃ÐW*C‚ðIã@Gí‡4EpK剀ôáÛ”tà?L~Èj@:Y¤†`(PRR)¤ƒŒDìžÄ›Û‘Z†0€žºQax H1àiêöCßô@0¦ÓN;í§?ý)(3ViO>ù$½‹ÎùÔSOwÞyl£±¢“ÐôCú9}›þ9šÆJ#Ðýà#‚9nÉy%Ov4ÉS¦^²é[êަ`œ… s¡æè!-À-é|CÄbW¾’t"H«|"¤ eå°#EÐp¾EâÐ'W2Û/Û…ä·øïíêè £D°“îÉëWdõ£cÉCÆ¿ùÈŽ7ª:åjùÞæ^o ³2Ë€Ä{ú·Ú‘(¹^ÞÛ†ç_ô©9ÅŸ\:söÊqŒ¬I¯»|Q ÌqH‡ùDÉNëíý ¹dê7«YoÒò\–ÒlǦšno(væ/^?}z^²ã”Šf7“ë»ÿ~HÅ€J¦nS-pܶgÂrÊÄž&"¼ $‹³#€¹©-†;c^gxoµ'R¼µ¢jÞŒr£A÷fu",ðÈÕ'–\<¿øGÏThµ2 ò¹Xðð7D²“Èq´ìD<‘M‘kΕŒçM?ŒKj|R‘á[`Tsõ¸¨Lâ»Ê`Íe ³³mßêÕ¨]nQ×ísû#=¶â3æK%Ñ4ØÊ#Z‡gO‹ŽýjýKúÞP´#ÀÙŽ ‹)Òä Ò5s>^8²·ÅM\Öü™G¢Þ¤¥½²©ïV­:K³ov«ì?ù˜1òÌò¿n:€%é­ï¾jºµ­=moSwŽÎ0Æ1S‰NI4;["ÁXÖ ŸïÞò»>zѼÂï®RíÚ¾òàv†Ìf·—“þP4Çe-ΰ÷ú#ÝþðãןŒ|)4?ÍòãKæ"ZeFaRH@Œ¾Dû /15ð(u›j÷¯>·b2ìøæd"úö„sI¸áh’­ë84gÍáS,G§šŽ¾—f(&—FàšrE8׿*+c€ ÛaºíòyÈWm§ ×.+¹î[IŸäVѺ˜^ Ø MÑìž qjŸv=­=a§%‘—µ©ÑV §OÏ} ±Îi ÍеùÆ’¢<Г֦êÌ )ÀŽV³¶jÕ*¶ù G¾Õ|äÇŒûiÆhÜBƒ> ®ëxDÍ… O©'Š=·Ô8[v°¢öS+ÒÁ¤P*h´ÆàkÿK«@L*|[@¤CÐ:ÎSf®ÅA«ìpc´7îÙ³géÒ¥@`ªåXÿÖri%2Fßbt¿Ñ39âk ¬˜GñÁxNæTr`4"Œ|1¥dÉ(ò…Š|!¶ÌÍ@ëxS2’‹L¨3$—¹F|H.O‘w®`wù B+±¶‘§IGÿ¦)Gjñ²]ÐêƒSÐ:´˜N¯ºzÞk6ßr–öt˜HOÿQ‹J³îüÂn©lQñ¯+Z9er˜\ÉXvåVÃøz«!/ÍÒî aYàðÜWW¾^Ùþ·uøÂc»k«Û_ט–çd+³¾åo;˹é–Lûaƒ8¤©ºUU›ðbþÄŒõ‡TD@Cëp‰u Ý‡ÒÇÎ%Œ†ÀþJ³ßÙ3›\½T<ÕÇ >H",[©°&PãRùL›´N­ÆÚ®WÌw7yˆcB„?»S§å€+bj÷“çöÂêð÷þ±Mê7äÔi¹8÷Fâ_\Yö§5ÕÙKŽËtò”DþHûëÉ• C¶ÀØvã¢2‰ïªXP5}²aâ?UsÈvÓÛ½˜Osyòº 4L\²3]‰°Ûjö†Bé:‘Yàjê Øt8ÙNlí1¶y»-̽(û´g¤÷;nP­o˜ qŒp‘H(ÉR‡“º.Uÿ{]u]GÃÅ9~³fžèëëë;ü™ú`†>ÖëôlñÖh"d é_ßf™Öº·ávLþvûòêt*“ÖCî¥Y®G¶ÖuùMýÏ.;1ðéD]f}yo;ž ¥P†°£@ë(bÈT'ûª†|šJLµÀûÚøgþñˆÞ`ŽÇÔ©*a€£IRäÀèBSzš¡Ýl¶¸úL»¢y¢ìϤ^XâÚ勈|MËŠomìýâ}Js®Ûh›ÐãUâà-Nkš+¢÷$L“ϘÚðT}š£Ö›H4w÷9õ K<òíG6Ÿ™é¶Å•}Ý–l}dß¡.μôä=‡«§—ŠŒ¦8qâÙgŸÕ8Œ‰¯q&ÂîN™p Q£3¾ EsE[ž1cÆ€Œ¬… 3ƒ‚ñ”èñÉEøŒ«(á 7¢¨óTÜc« £fà ž"Q45á>\Qû¹ÅæŽ[*C WJ€kxNŠæy© €O¹%ÎUP p@P*Cv^ÀŽFI˜ !PI‰¤®©8º ¯®X±âšk®§;xð ¥HÐ9眳yóf6¹ÓùùncõO'”KÇ>º‚Þ¿\È,"ƒ¨ò.lÔR2D gÁ<’]®DØúŠH Zø½$× ™’ò‹l HÇ[#éÒ$Š[Ö±‹ž”%8»H=ð$èJù8$—’Šy Œ‹íBò[<½ g; ÞtP§÷£!DâÔX–ëH¦G×໾– ½/ìi)˵»a ö·xFØ fË:ª±µ¾ØŽ©Ô% ŠØ „Òþüî:§ÓlÄ`¢¹·÷7«h€úžë°Ó+’ mJ|{ W¿ Þys /_TLÊ—ïÛÆõ7W.`øüÚC;7ì¼réD¡L]S-ðAl:lc·ÔvŸ6=ïý°­;Š6 œNÞºj") W-ðåûU·tÞÞ»ˆTw¨P A>8oT©à 8 bÎîõ4«±Ó¬ïòaf´drÊ*¨¿¥Þãel»ñR™ð]uÛCãÊ`“{zBñÊk®,Ål¾åðö7­AüM«ͯE­sÊbnOá†Ç>Ñ·(sW´(èïlóÄZýú@"bèŽgX;=¡¯>´ƒŒ¸¥»ûÚ•,“2S<’…d€ƒ¸ßºìÎõbd6èt{±š˜žoûËòu몳ªÜŽ4 ,ŤWVåzƒñ´°/p÷ùu®G§ÌÍ>°½kâóîiq¥÷¢ï¯þ4Û§ô†½M^WœÁ–åoê0µlOrtË—N-““ΩÀøbðZ §"©Ç`?¬Âæ s–Ù–g-:ÝÒoO—6ý³ìµä-eû¦M›¨ªNÈuŠ7Ñ‹xÃæ)ŠÕZ”‚äÊËJ)¦¾í¾„3²Çæ§© Š~Õ§8¢ías©Q¿Ð†£¿Y}ð+gNN¼v[»úBÞ¨a¦ñЙŽ½9·¤é{w„ÊNLw[lލÂÔ9Ø%·ôhãìBºþú믾úêo¼qË–-¢¦Ž–éÈò p@ç>„`dšš-ˆ˜d‡‰Bƒ*N®–zƒKáô t{ˆÉˆò€!cS!(¡ÖD ªcu ¶ZA@ @`s<‚¹l “\èùìà“ØæP apeR)©8Š·ºøâ‹Åf“ˆ=¶œË—/ÇæŽ¾t°=üŽ[ú6Ý’N{¥ƒ,ÈÒ¤íøF R®lWç€^–—’tÐy9žbpÝÀìøD€ÁÉGÜM>2²~L¢àéЂªË§Ѧˆ°H1A ¦µ²KwpY©”±jq±] òì¹ùÁÓåŠòôÎfL],&}(âÁpÁbÔ¿+ZGö>ƒi —‚ã¹û7Õ×txÑ>8ÛqiY6n@¦¤½§ö‘ʰýÍŽFcì^bZ¦2x|{óêýhûÙN [êØTÛåU>U5Rq»übC[=A´bñ¤Ã*=– ð"¢æ`3ˆe¨¢v³‹\x,aO’Z€¢ ¿ËOhR×T ç-€ä°7ß ‹f­bÁ€¿®½ë© Ñx\v£SÃk–•úB1ìé^«l;}F>gÈn«ïýóÚœWòôË÷oå)þ+ÿ¸¦š¿jq¿iÿwô(òý{Q™6lذhÑ"& „þ>Þ–ÁOüœ¢ ̹O)Ïåºäío}rÁ¡Ž·@ëHÑÕåY‹©çñ—µÕz.Õ^hË+4šl£Ãb8sza–Ó°ã°àL xêaNf5 Îùâ¤ài®ªÍˆÄ‹2m 0YvóƒW¨Z\0a·è•:¿¾%hd3ó­ÉÅùE>·ÞgÐ[¢a‹íþ–ÓgÎu©†Üì\º·»ç®ÎN\+'”DY®“ýÞâxr€kÆ3z¼ü ¨Oê6ÕÙЛœñ¨_Ð:ÁxWp2hq± BÄc@)jÑÕ@IDAT—¯¢uŠÒØÔ4ÂuÇÊÐ:xÎËõ»L1¦°³‹Ò\6Cþ)ÍÖþŒL»¹P¯:Ëÿͦš?¶yⱸ/nØá±å[½VCÜdˆ§[<3[}lÂ/˜m2Û1­PJêv”-Àºûî»s‡¶nÝÊЃ¾šlp7Jæ#É.5a$ô€tXÄPOˆÑÃÑ¥qÚÅMž+¯r!Aà³wå‰nO^ôsò¢œK}ƒ¤Sn^^ª>”8£ÛK„ZiY`EMä\Z®ð×p‡w­LŠ Õïµè rÀXàtÐtQú*׳Ï>[;žå±ÇãLÐ:(‘Ž÷ZĸӋ¼ƒ•¨ŒÝðb%ÊWB«?q- ftX¼þöÎL®ªnãÛ{ÍfS6…dI$!$@ !H5A¢¨4é ¨| ¨€¨ÀPʇ¢ "M:R“é¤÷ìf7Ûëì÷›œx¸ÎÎÎÎì”òÞgŸ»çž{î)¿[æþßû?çÊhs¤ndbL$%#á±×dh³R äŒï‚9ˬ9S!/Âk†¨u&ïŒ4Ô:Ž ØÒÿ¾v†×ôÎÈEܳÌ!«Ñÿ”À¼µ»vÖµtì™’~p ÆJwâ5l$ÿÏS‹écDnTƒ1YKr3þøÝƒy›BÂ{éÓ-ë+ë+j›p;xüÂÃtÜþW~e$æÛÿZy×ë«Èv`a]”~õâR„B6s3ÓЫ[Óÿ­;ÈœQ¼^®?þ{ k&(³sk”eoⵈ€„Àu'îorÛZÝÀ‹£{X‡Ž¤Ò¼Œo2_"nvzr·~m‚Ûïõ¯mDµ7“Õ,XWÉÿÁšJÔ:vÝòõIF€™dM†ZûO 4‚]¯›LŒ6E›ù¨jØëªàA¿a#Yºç;mU{û”Q¥¯ÝtÌÑûõ›8´Ï© jjm_¹£æ£õ˶Õ8±}äɯÑ!û”ðˆw«¢œ r§d¸{¥'ó‘)9+5©­#¹¦#‹P&`-(Iw¥º\Íiu®äƺ¤75Ö'upÝ”m:{䧤¹o)‘F ÈcMþšÁín =‚V,$ÆbíÛƒ)5Ëý™—Ù¨¿ØøîþÌÂWh¦`kij̪ßF&ÓGúá±#S’’S“;ø.ͬgO\}b¿Üõûå\šéž7½¶)£Á•›Ÿì~4¡ƒ¸³Ð:/¿ü2ã@áB–˜¦ØHG}tè²÷•“±·1‰ñsÁ„6F8Ü8†f:¢VÄS%Æ72‚jF¾¡‘Qa#UÓÎZÚÛh|Ý1Ž9äl.×®jƒçùs¸±Ï £n8ÍEr Cº²’ƒY0w»L€L¨‹i'A˜>°f ¬®JW¼ô˜—º¹YŒZ‡{Ïdü7¹ø'OžJÔ® ôŠïÂÖÝîW :ÖcʊгŒãæŒ?Ía&’Ýyæø_m,£îd¤¹%?|¾}Ø—}Kﻺ۬L_Ô]õÍtÂ]_YÇØsø=ðisî>hˆÛã¡0‡E¼E%3*7}W‰9a쀳'»ïËc=uXþÓ—L!°ew“ —mÝã=|tè±7° ]àÖÓ$ÀØü¬Yþ÷›añ÷ËSÇš­E@BK`D¿øîÚÓfŽ”œ–Ÿ;úêæOïNnX•’]–3ä„â’²û7^÷JÕI®Å»«øóÞyæm¨À7;F?åÇwëÖTV^ÒêJfxsñy…{÷¬ñæ­nh¡·öÀ¢ìKž­þúÀ>™É;ÒSæ1æHR[vnŽÞ¨yÌ1›þ•œÔ1fwñêäöÕ­Ie…î«ü¾{ÐûÏ|Aà©ÖZŒ¦eaØ{SÜSoöZ®"E@ ?ê¼Ú §¼W “&MbjFûZ·nV"ÂVñàðšžÈìÓ¯:ôowÍKÎJOkmËd^³ùëêí›”êê(ËjINIݸ­‚Lúô©>#»½º¼6%«#;µ}éÒ¥ÛK/JÚùÀ€´u[ûW5—ŒN­lªiBAÑH«]ÑîY<ö¼1MYÏ™3W;cá÷,·€ŽÂT&=~pœY¤,pœ\ºèŽŠ‘l”D.6v‘ÒÈpô_ca«;ÜÊj˜ú8¡µY›ŸMÜBY(ù]] ¥JnEqXõø-Ƙ'sPP7"é ÇÚ {Ob.ZbXÃlÉÜdš…¢ÙËñÐTÒV̤ÑZ‚$ÀAˆËÜ,\]te0w 71èÚô„¥ëÆ'Ÿ|B Ïm¤.¬¹,MÊ +ªÃ©ï»ƒŸ0%’˜†£Kð]„~pûó‘ 韣XˆáÖ¦ùÜ• @äfá^&Cn|¼sÉH@zÖTÀwYÚ<ã»pÏ=÷8ݽgΜ|Î>rXèöŒcž:Ö­mõMmŒejçmðq ÙÅÐT ÖUUÔ530óTÞóæ*¬jžÿd3®1&MÞ§˜n³ÂtÇqæ_[ÞÒÞÑ7/ƒiñl~mE=_19– ôXãÑÍÚ£›-B!‘ﮫ]ö·E8.ç¤õÉÍdVÙa%yÌà‡:0 Ð`¢ƒ†‘!á~ùÝÜ;¤Ñ""Œi³½ô¯ ™Tbù¶ZFcÿ«µ|kͯ­4 Öãê,ÆUö•;x¼»ÚýöˤÏ6ü$Á®M¦K½ð‡%I-µkF—ä§eÀ)ú»‡C Fêb,†ï”<=¨jËú§ll>¸=½Kê!-í“úöŸT‘´ÿÆÙ|ºé€ö–ÇEfxñ{ƒèV”“þÔ%ǘ6éƒíjMkhÈÜõEmaNêè!]úȘŸ+¦s}à;ß÷ÖêO6îþçÖ äspÿÔýó–®ß^YßvÏß^Ø{nr³û·e¼ßÜ£³R>j(ž6ý;e%¥ìšyÙ8÷zÏx«fØ{DÉm»›M%)bïáú'"à –]Ú•TgRá»1}úô÷Þ{M<Ý0fðzèv(®‰‡}ë/‡1«Lã¼l®nX–áJÞ[>ª=%+)#'w}MGËöÚÛ¸ZÒ:RÚÒ÷Œ„ÂÒ¯½cWÚiXÝ’‘69oçàœ6üG¨€£¾ Kà?ø1€=ðÀÏ<óŒ3&Üac ;ÍuÔ:lf”c<Fó²ÕÀðÆ´æ d/—W—"{‰gíC†è¶‡¬õ 1c‘ÞÈpd‹üúfë€B‡G=)™v/šcÒcös,14“!í|(†ÎÃÉŠž°ÜFÉâ@®[n .p;Ðѽ‰õígŒ71ùe]ÈD‚¶GñdÈúÀÁ¾Æ)2‡k-"Z׿ޯYi©txǃ±ûùÂ%–R÷ɹâo‹Ð(˜'ÓC©@ÅÃçŽ{ÜÜæ$¾bÆHù.zj‚ì¢ÄdºûH÷³¾xüI¶ý¨uEi»÷_[™D7Õú£Ò5ÍE‡ ÷¯ZAÝÜö$WvÉè¤êåwOß’\6Óø“o®v_v¨~6ÀҞG¼Ý´?Š\ŽD:Gl=ºê¯¯¼kS7yìЂêÆM©Y¥GîZ›·ó…¤’óì^\ñæÇŒ Vö]î6™Æ .üðÙ5“¿VîL¦°ˆ€ŸÌ˜Ðø7aó j¡ÄŸcéÎýø“GŸïÛgíþõ…µ©yÉíIÉU®¢æÖÜäæ6ºy¤¸ ‹‹¦MŸ‚áôïW?®¨ 3lÝ7ÓKS›²Z“òû L¦8üž–-[†ŽãO‰JÓ-×_gÆn“…;f3œ³,dÔ·®ô5®:ìgá@ÂæX#@p× Òö¶3Og} '>ƒŸNWB°UëÝ苇êa„c½hîNãµE·œvàOžù̪uÖôxùÓLz,‘÷¿¨ôG°#=‡3îö¢Õ3Fõ[¶­öÕ%ÛþÓi7í³O0FYÛÊàwÃß[ —÷)0nH‘g”!̱-ÕM¤g¼àìŒÂf¯5µlbD@ÂMßXnpëÁPY×Âð—xÅÒCö¨ýûñœáV%G5†öÉþñqûY·;õ^÷àãçf°‚]”˜LU™ÅÙnÏ»0ÙëÎÝ-xirwEò\šÓ¥´¯h©^ÎŽ”Œ"†H0)ìuuù¶šûßZýÕË| ·jÕ*32|ÉÈ‘ny®ób¿±¯ø@zôAå `g“µÖ|A¸½i'ëô/¯¸î[šÚž»ÿ³œÁîáðX*7×½tï§Æ ÏÄh-"ß#u•Õî¥|cÀ†ºf×Ð}kÖV ¨©ËkNNÏHosÊÂC`pæ²àØ_]_·63%;«#¯&9¿2iKYJ[æŽun'p4ce™M­CB`êÔ©?úѾöµ¯…$7?31ÝNIŒæa„ã­†°…âFO4 f+œ‘ãÅ–Hìj$ 錌i¸ÆïâÉ8?P~n›÷«ÖI˜ ÉŠ°×…ΰ¦.ÚœSn£Î NG)Õ°ùàÀÈ^’ß=gЉuå³)àê2:µ•êL&lr}"jsG0©ÚÝfÑ©¹¡ðñärõ!g÷ ½{ˆ¹­h#­sÞ¡¶Vtzå.æ‡Ã¨u¬¹—Adî}«¡óp€ñËs‰C ŒŠÔN$²úõ±TCèuß…+¾2rö‚¤?;ÉÙ.£Öýlæ¿ziÙÆ]î¯þ^—ÒüLl lïü¬4†ýÙYë6¦ÌÈà&ýaå}>Z³ ®Ì?ÉwêÈRþ8vÌ Âo<˜ ×Û (DAwÌY¾|›ÛeryŸ ŽÜë‚0´(£Ü¡Ö™Øö¼ýÅüuU¸óT¹?r%‘ÕoÏÜ;RI£µˆ@$ †sž‡cï¬ÃöAš7j‰yàx­Ig·;¯Ééƒ@°‚ͺWL¦ºµÏ.ÜȨ½•k+ 6ŒØû1hOn:u,BïÛµ‡~¥àÝò¼úƒû7|Vs.Ôéýê_ñ;~–RÒ³:\-Ed—}yŽåfÔ†'j7Î]±ƒÉ^ó2Ý‚ßÄòüw—¸ÇM8|”[8ã½Çªulf°}…ø,¼r¥»G7/ Œ¢e {6Ó öÍ0µqÛ»®ÌÁÙeGÓyù×CKñþÛïÐ#'õc/jëUów˜ÍÎé#"(îJÁÂÁ1_{‡Ú|j–þ¡©bÁÀ´¶Çw}eqCû1ý×7»mjÈ+Hsa ì_jÙº¦jwö†ª¬äÌö¤üŽšüa.×Ö¼´–¼‚Æy¥YÒ66¶¥ H*¿Ùæ¬@ |þùç‹uûí·Ïš5Ëx´áq†cNóôó@¬k¤.c›C0¶¾“Ö„vfhçF­CÔ3R…3"ö6Ž0\ŠÄ³iò!g›¡é׆Ša#dãC°3j"µ©3é9ÖŠîÆÒmÇÒ˜ôÔA¼6ÆYy…E œ7‘ópî.3.¶Í›7óâÄ-ƒ')Ú1—=»º:Ê™CL„QçM=¹åi#aÍmÎô4œÆ{Žæé öÉÀ#ˆ…4¤$@~Γ'‘,&à‘¿)]ë D‰ï‚G+p\ ÛjG¼×MÛMýŽ«nŸ³|æe£Ë 6îrKeû ȯ۹׳Ûk]Eš íÞ¿¿ û¸hú¾MOÚÝØJÙ~{êæÏQJ#"V (™–š2ª_žߦ°V Ñ2ßÛ§ÇÍÆdⵃaÊ”)˜L¼F°˜iòzœ§Ÿ2uãÊ5[èŠfÓ{Øi|ÉùŬ¯O™ùÛÓÿÁ­°¨YÆ&?Wœ›ÁE†ZW°ÿù¹ÃN±‡›¾ð¾^WÑÀlG„ÉŸÏá…MF­#fÅŠ¬ÇŽëÎpìXCÀëbÔ:¼ðÌ«ÕgŸ}f“e ˜BÝZ‹µ1^Vž3¾uk»ò´ˆ€O×W“ ^ fô£ßٜۛ*š+²™]4ò¾Ÿ5Ž™³½<'muNJmJrJ~n6Ï“¸jk}sÎ6ŒËíÄ`"aj såt$vT¥%»?q'·l¯Z<Û¤×:xHQ·Þz+>hW\qÖ¬Óû,øÌ»Êë×ÃWÛ¸«Ä6ÞØÌfùÌÆ›€ÙKï6Zd<¬)î‘’Mãa俟Ù=±s¹3÷ãl…ï”Ú+=&À›$—·«Ž{aÀ€\ÆD²«ÇÙFÛæ~ôq#“ÀÛ\½zGýó‹·üòÅÏ¿ýà‡¦#j¿ü. ê6ÃààX'µ.xŒÊABE€YžÉêá÷Öýí£ ¯.ÙŠ›‡÷\’1(ÙÅßµO}ª¢3Ÿ/Õ®`Úß+&Š[Kû^ÿì”d÷Èt|Tì¶ínϳ¸Úö8Xÿg“ÿõ{¦1:zTé·†ÞàâlÔ:Çþÿ âÊÁ¶Yÿ׎.6xÓ2R¦6¨‹T~E·í™ʯ¤J$"à“€‘Z|ÜÈ<(\{ä•äÔñey7ž2æÀÁ}Ñô§ËZÖ«ÉfßÔÐÚ‘Ô‘’êâ‰ÔÚ±÷éÊtÏ©©M.×^&9Éíé %xÌrüñÇc‘²0ýî[o½õÐCa&Ÿ³Í‘‹ ƒ'>IÇãºBØôxõáãftNìàì'k ÒÀ>§Ï)åv52•!~ $cMØÄ˜L:¯Í^Üjp g/îuüaºsb¯1Vã#Ðp,¦t¯‡(R‚'€,…8…NÇÂeÌMALðÙFUŒÍG}p¯3Ï1ÂýÓyPЧ•x|oéÆÁÍHb>çx”¦E$3")í=kÂdnÒðáEÔ„µ!^ô]ðÝ Ló7ºl¯£´ïôfïƒÜŽ ƒŠ³ñZ0Yø0…üÉPiD@âŒÀ & u?(Þ\¾ƒYkLë.œ¶¯G3o}Å=ø ³hÚ1(MŒÖ¶K,&Ó/ùË×^{Í”zàb21Hp@•ð˜·4óùñ¿øÅ5×\c§fö1 ý“ î.«©¹ÃYw~ƒ±‰m à€ ¬{KzÞPo¹{&/çªB-Þ7ïØ1ný¸ó‚ÝŨ"|ð_}±[Hà´Ä:§ç ‰n³ÖmJõÕ-Õ;êíç)Ew>ÖÄ4Õ·fåº[jºÄ¶Ï1bvQNÚÿ™P©«c/"àƒÀ¨Q£Ð2ðÌÂ4¢Iyy¹3= ž6íÍ»Új×޹4»asnÎ'I99E£ŽÛ\ñ‘3eniJGZkVRÛ©Û“’ÝŠTåŽêÚ–¢Ò”¤ìŽäÔäWÆÀüQç9R¸g.¼ðÂåË—ŸwÞyp€Éqåî¸ãŽÿøÇ=ËÐã(žØO?ýôI'äo6QèŒUŒà‹~Çç"~ª:§¤£®QÊŒ»œ§9Že/Ýf1È‘'œv;W‘ù¡á§!ÏxÒ'×ו´g÷b®÷s>­‘¿Q¨í”‘Ôœ# xÔß rçæpÕA0Éh>µòÝ" µ)þàºå™Ìbõ&ÿ¡”ÜA܃LFŒ±zõjnRüˆÍwóSEÄCœ›—MîM³6-€Æ&7)›x‹æ‘Bæ>¼ùbZtVÕø.\~ùå·ÝvÛ}÷Ýwï0¡ ³Ñw&ïsã Kpm“Z&ÈÊVbšÀeGØTÕøîꊺ¦ÖCö)?´M£ª¾ÙǬž1"•V°ë]“)§dÿƒÚ,ø<©¾±977 ›ÄkoÜÖº u«ÿM:ŸÚuWpùeúÕKK7W5½¿3l“%·U¥/Ô¹¼?!رËQˆ±);è ËK§1{öÛo¿÷_S_ãv\ü¯&1ýæ^<$;ß-Éy,£&\ñáÖ7ùrŠí­­ïïÜkªU7´¡Üé×Ôš6E ôiåÝ[hÓêy…MÿNªø ­øì´ÜA6“¾‡Í®øðÚö–];?øaFûfgrçäT·û~4÷oûo$곪 ©É¸C¤t$¹ýéè0›Ü–ÑÒÑR•¾ë]SV·1zØ!}ZÒ²KmÎ Cõá‡öÈ!T‚Ý«¯¾Êsûë_ÿúé§Ÿþøã;KÁ æ¼Cû!Ì«teÔ:ŽõSÛ™ÈY #áA?”ÂB¡xÉ!zÚLÛÑZÓV¿¹hì•é…nÙn„ o½ùj]CÓg}úä6µ7WŒ9ḑóW¸:Z’;0™’P¯=3³_AFRMÕkŸgrdê£4Ý0“Nt›¬Ç ˜#õ‡?üáÍ7ߌ×Þ¸qã>ýÔ=áÏìÙžãbEóÅ…]ÆAÆ£8 lã5Ýë;`Š 3£¾ù>Ðc¯© ’»Ì&™;³õ8Än½€M>s,ú©ªøS„-«gÁïõ† ¼V£«x¯‰{"¨X4”Bï„àÏZð9øsš"PŠ×ÛéÖÖ9°ʹ‹¹+ÙdM Sʰ6{íÚ¤!žÌŽ{$Ð*½ë»ªVØ|~ÿ­ ³_Y¶jGýÁû]r”/w{HäÆü1å¢ôÉI3SÓF¾&*QD +(éü1 µ™ÖfGmÓOŸYBâú†ú7Ö/¾ó›ã»:Pñ‚ì¢ÇdjíÚdÊl¨³Í®Z³Wù²1~èìÔðŸ|œ™W;?31ÉÌ;YmSU[K3[åÊmXåœÞÇëà'~9NVÍœ ò©ßµmMcE{KcS›kéÊÕy~}óQD@Mð‘8EPzJ‰@‘iHdJ‰\]ÝæÉíµîÛ?#)¥/<7V¦tì\ÓÚÔž‘“ZVœ´®Öm4­©Èou5×®X‘’ÝŠƒ]GÙ¥t¤7g¸:ò]MiÉmímüD%%I°a ,>ú¨©%.{v4†k¯u»i³ÿ2<ïðvÁõÌŒaÇWº‘:‡5Ä„¦ï*Ÿµð‘Á+Í÷à &çÎk¦92®p8Ú9^;'ó'Æz…SlxjÎOÏðáÃMþÝæ€“Ž×Ò¸ùxuÍëœÏûɪóÞÄ„¼ˆ¡C=Í žˆ\^ãCÒ“IŠˆLCü,%È #äçÝë© S)ö~dNz¼šÛ‡‰ÛÎÖ„þF˜3ã«ØxÆÙµkÒ¹q¦#ž›:£ßÙdDr¿sÃ:…?»Wè-ß…T¾s&מ¸w ‰Î»¢*Æt0B¼{äýõì¢êÔ¨2"` ØI¨g¿²‚Hº0ÎY¼®¶©û¹Úl +Ø…› o“ÉôQýܤ̂atOÃÙíµkwÖ|P™óÁ]×1îã7šª*séÅV8 }Ú¬‘=¨ö†êòü·g\z~y^p~œËrÜbåªö¾ƒ ]mµ›ÝÕ™1klÉà/U9wTË9Órž\°éþ5ìOÍÈÎÍH·¿_- Ó§³š(‚â"PJŠˆLC"SJL㲃K~øáÛª‡å¥¸ñŒâ±¹û”°Ëî–w™™šMF ›ó0.½{—ÑS'MÚç“/*ò+Ò]®lc8eegÒMÉåâ/ M$'©hë’ ‡–º‡hÕ8qŒ×†O }c9ä:[¡ µ‹]ÖðÆë óØ8lål½Z¸$øÀÓÍcÛçQ@7ÉÅ §† bpÔÐOµŽ²8ŠÖÙáóBU«@[¡ô"ìCƒ'ÃÊ•+¹³¸¡ˆ¤·;#Í9x¡¬i¯=„§¿5¨uÈÇÆÅ•®ë|0àÖÞóÓãžÆåŽd<=ˆç6g‰hÑÙ„(ñ]àM,Ü|ÂZD@™ïùü¹÷ã½3ì€ ò'ÃÎi"P…F ”aèE¦ ”""F,ämÙRéÑk@j}êž~Lõi&0-ÒÚhì|›L{û¬Í™=ýèci¤uæKKK{ÇŒýû™–/^8¡®µ!½À½U»«ñí¿­šþ-¿.s¸Y·M/N§³¹Ñõué»[jZöPZ<0wÍâŠöìÝ~ªudrü˜¼ŠÙ9Y4€«€JÀªuùí+6üûEf¸)žò+¾´T-IË)Í,=ÔfX8æ26¿¦:ó5/}wó ]sHš»s>½&Ñ2°ŽðZÂpÊK­V¼©²mø¶Žò–†ºýò’‡ì7 ­Þä£u”à<¢»á“‚½nÝ:µ5ƒCáƒÍ0sXÑV°3.-FØÂØÆ–ö‘OdvÙñì(Ž ÛÙ'ü,íXüL¬d" ^ ˜É[æpšÃ·Ž4¼×1‹Ž™VUÝ)Øyä`ž'|¨««ãÇÜÑ|±æñÂØšäÌÒèt,¼B3ÔÝÚµkMò°ó +›¾}L+®Á8«Þøü’Ú¦öé£ú…|X7¬÷ ýa}4óÜœ]äö›»×¹9¹‡•÷ñ³nä£Î]íŠ@R"P„a™‚"PJŠˆ±p´åÇ>øïµÿ¼žÞøI­ëêÒ9>Ú;ÿM¦9Ÿ»Çõà‘}Üè7¿¸ôom°‚Ýîî†ÌqÛuU{'¹ëŒ#b1£§–Ù²ÊÇ÷]³Æí.çÿrÂØüùŸ^)E@:0ûèÀ8qâÄï¾Æ0AØ3Ûßù¾™V¢aó\§`çq¸yž|6wÓ†¥»VÎÛqÀî¹é ç$Œ¨ÊM ûåÖ÷-ʘ^9q䙯¿ó±ÉaK]Æyîyä«Í¨!€-m†ië¶FÆuÍÀØ-+%€òk&‹ €¬Æ3ÄÄøÇt}E›ÃUÖôOG¡cÎh~×íÈ™lÉÍ~$4ÿk¢”á&àÛwÁYºu\0½‡\³s–Õ»aœlc^üý#õbÕ»'D¥‹@÷&—— ,̾oîªQŹלâÙs¥ûã8E´ vþ›L¦/t^fú>%îù³´ˆ€ˆ€oFgÁÚépµaÞ ÖjÒ¤g¥7Õµ®š¿™a”»ÝŽp³bÎh>LíÞ–V›†EdkëÞ!Ã]íÌ£ùa|Ÿ–ØÛ‹‡ Nvf1×€m†=×lG6Œg†£ÂçÅÌêh“õ Àt8rb´Ûîr=ÈD‡ˆ€ô #±q 3d¡ÑÔèÙŠ·íoî£VÜûÜøŒI~¿ÌŒÏÆíŽÜ{Ñìø93Îzö+ù۰̵+ øé»p×ë+©ü‡ >hHÑÏþ¹Í.Ž;ZªFQx­ªJ"à›*Íìo„•ä;™özp‹å»ÇøxcÙvóÉåaŶ]é™î ð­3}Ù\}²¬ÞÝÜê² z`Ü ºÔ}øá‡=ÎAŠ€ô3°7‹þýîûNT}­pÔyþÔgÁKë–¼½ùƒgV×T4u¸\¿²Þv•åðAƒ¥æ Z·«ÀÕá~Ʀ¦2›…{IIMœÿå´¡&Rë8 `U3ìgç€ñŒ%o[‡ ͆LÌ,«6²gÜjÌ’ÜzV%" ~&Ìá(kÈm %Igsfñš3»ˆçÞ7º²Ÿ‡'ˆ7j‰ñø&LoAs¬×låŒï}ÎÀ€P4d`AÖ€‚¬(o‘ª'" "à?øìhógdZ¾oiîÅÓ÷µŽ»`Œ ·÷Ëé;±k{ÒÂ5µ6²gœ&0õ93lþüù=ËDG‰€ô"CÝ;JÝæ´“ŠÇ_×6肬þ‡38¦ùóZ1Óvûºš¹»ágä¤O=sdZºûYZ_½×“Õ&%-;½`Ä絇}Vsø¢E‹ŠsSgL=äðQüË+Ô˜ÄB6f6Þs1ñ¬¹*Øe|ëè³æ‘, M¼ùH­ÎšÑ:V‰E@¢ûp°úZ·ã¦ŠFÁážÈ|fŠj3(ž9œ4LWm³â¡$ß:K#Žìéú»7WÇ…aêoÇ'[MH$ÑÞ%6 sQ”“Þ•ƒ´±±Éí£•Õíí®ÔF÷h‡Ûªšïõ| ¨ “˜ùþL˜0kÜùªÔƒ¬tˆˆ@¯ÀÚ™6mš-ÚŸîH$æy²scí’¹›3sÒ&;´dP^Ù~Å>¯DÅcHJ“Ùnܸюö=~üx;-N„"À§+®9'¦è,ömÛ¶á;ñ>§ïAÎ:DD Ê Õ1V=aùfŒ­Qÿlgk¾gn}²<"п 놓ÇÜôÂç´vú¨ÒïLvûcjˆuq%Øùs2vÌßîê»g»M»^_o…<ŽõH3vìX¤:âm×4ÚˆK¥Cò˜Zöñ+뿾±¡¦µŽfõ¥S›t‡töˆŒKj”WÌ=Âì« SUZZJÂŒ*…“ Nv iÇ”»Õ«W³—ÞmDb~{ÍÇk$SC’›8Xs¶z¥¤Hˆc<[íx’˜L„qòíª½/ˆ3jŽ%€ MÇ7¦†À¢&Œ`Ç…ι‰ýLf¢0ÓD²«ÛÅŒ^‡ Y!óI°ë–˜ˆ@¼@îïÖÁ–³|-`ŠX ðÀáó@¼ÒP»D@D@D . ¸JËeã2·ÂÈIn)­¡Ö=-cëžé“R3R+jÝï+mí¬“ÚÜvTËžuc‹¿óÆ6m£2ŠöwgPç–µˆ€$&œ‚Œ‘“úùVëš*µµ6¹’³“’ÓÒ:ÚÝCi‰W%%%4 µÎL4a¦qD›3ãL™y'L÷4f,Åni`u£ëÑ–”FøÓèuÝBSˆ~ˆhæiŽªÒkÿ;ò7EàŽŽR”§ˆ€ˆ€ˆ@˜Ä­‡ÝA3Ó%vÕü황ƒáãš‘ž”Ôܰ»µ_afu}Cfúžñ>RÜ’eÖž rºÄÒwµÖu¸Zr[¿î¹–êåîcûM²{ˆQí [S²ÜÃ…cÉê;¡qÓk)dÞšR˜ÕçËy«ÃQœòì]8³Ð¿uݺu(ttƒE’Ã!k³™®²Þ0›q¬cè:48âIà»ÎÛ·oǟΤ¡',½n»õ¬ñ¡öŠ€Dõë×›j?ÜpT‰1[ðÌÅÕçßÁƒ‡£å)" " "&q+Ø¥¦§L›5êÝ%»F¸þ@¸±%5/¿ßöªÑµ ÃWÿeYRfª+'=½ª©Ï¸ÒÑû5µ´§§¥öÉë†FíO´Õ®5g¢`Ôy­5_dõŸ¦£lE@"F jñlSVJÖ‘IIåá(·xüµÙ;>ªÞµ½¹µhø_ÎK޲”g¯@•£³*Â5A¶C•cܨM›6™¾iHxEEEFqóÇ·ŽL¬ZG˜œYz½ª€ˆ@œTýï߃BñÆea»«CD@D@D@z‘@7U/Ö,ø¢SsÓŠúç¤V¸}èšZÛ:jÚ¹ÌýËòºÄ6·§4·ïwèú²±·0Ç/V­ãÔìRþ‚¯¤rè]í;mÒªç&%a7CÈêwØ€~I 2™B‹5*s3]=ª&ß Ú'à|P˜Žó DÍð à—PåqL¬lf¤¹¥:åèﺞÓ"" †@JFEÑ‘Vhà ˆ@ `{÷íÛwÇŽxÐ0Œ]WR{ékƃ÷]ÚL×¹AƒùN©½" ±B€ýâwíÚÅsÀ8äzÔ×Z?p=Ô¦ˆ€ˆ€ˆ@|ð"iÅGÃhEZjò~e9•Eߦ‘EÙÉ…c/÷Ú´ú¦vמù'¼îuFÒ©Íl޾į°ˆ@ìHNÍÌ|<õOÍ*míóÕÎ iÕÄ2¡(¦;Ì/1|øpÖèqt†Å&÷8nëÖ­6l`z ]^7ÑìXœ.9^“)RD †0)÷5£^v®3¯´ƒÜuN ¸'Ïvœ¼’üô’1å»—ösµTï^rOf餜A3œ'õƒ{-¥!}3—t?OŸÕ윙(,"Ó2ûŽç&Ttê¯j‡·Ó½Ó§¸·*o½fñW[ çØUÕÕÕšAÂ’Q@D;wºÇj`:¦„&\Zª1Xt]ˆ€ˆ€ˆ@"ˆg;{>QëL¸yç|I ¡Ù="¸Y6V4ÿ'¨ÿ" "à&P·öŸ¬3ŠÜýèMØ«EzD€)bqµ«««ãh9Êõ¡D!@'YšŠZÇÚ„¥åj§ˆ€ˆ€ˆ€ƒ@BvŽö&-~}#óNlXêîäu;gb…E@™@j–Û%ª¥z9kNdj{ÐÙÍU__Ã]ee%Þvf;v¡Ü9ÓØÄ ˆ€Ä=-[¶ÐãÕk§W&’føKàdG8îQ¨" " " ^ Äy—XÓfú²™~mï¿wbRR‘ŸÍÝäjïv` ƒÜ­ÜÒ•ž<¡üËç½’R¤ˆ@\X°`ñb˜6mšG³No«ÛÔV¿)½p$a½Ú Ç1Jý^1¼éúʸuŒgÇÀU oÇâOJ#"Pð[[[M»p¿íÜÀtŽTŒˆ€ˆ€ˆ@BHÁŽ3Šf·jþޤ¤mý‡Œ<¤ÿ»O®úüÍv rwø(Í ™P×¼+_`O£Öµ|ùòŒŒŒ/÷í åü¶GŒ6E P.—‹C˜}¢óhVJ/"::¾œïÌvMS+D@D@D@BE ºÄ¶·¹’:’ÒÒS ûe‡ ŸòˆiFI1MpÎÓRå£@MMMcc#N4ˆÂXæ’í¢í©>"yyyy¶ÐþýûÛ°" " " "` $Ї þbáŽëkù[ôÚÆ¢Ù¥CÕÖ^ ˆ@‚ ÏÑÊ•+MãÇ·¦Ó,± ÊEÍ3@UVVVSS¹"ØáYC$ÃØ 2$tå('#àuüJèûŒnɼÒô™5Ï ¯)c¬µª®ˆ€ˆ€ˆ@àE°{éÞOÓwH^Ŧ:üìkÚò'õÿ`ÅîÔ”¤CGªKlàŽŽx!Ðyè:Zƨ—-5«S3úä 9¾½qG[Ýz"éY/V;"M`ذa¹sçN¼íš››Qëðª*..ŽtUTžˆ@´@­ãù@íÚÚÚø’]éÙd²š’’’h­µê%" " ".‰"Ø~'_y_]¿egcuuKFvZ»+iÝŽÆaê$® LùŠ@ì@­k«w+tí-»š¶¾•”š™œì~T6lœƒ~{íQ£†æ7uÁÃ.==ßç VQSGUDD 7 ØœÏÙ›5SÙ" " " '@cØY¶é™©I©nï†ìLwó]_ûk“( "Ð\ím¦ý®öäÿ îj«Oh(j|ð­ÃG¦®®Žžn©©©fvHº¼‘¥ˆ7 fG÷yÓ*žƽŽÍÒÒÒxkªÚ#" " "àÄò°[ðÒºô¬ÔMË«ê²r3›Ý3÷•÷×~\)J" C oĬºUµÔ®¥Å)_v™7ü´„a ††ŒƒOÑÍÍLFŒN‡“‚óNää䄬 e$"PëL÷ù¸h!" " ",Dìf^6Ža춯«X]USFVÚ®××ç—dÜWØ{ éxˆ3éyC‹'ü4Î¥æô"4;F‘ß²e =aM5˜’˜…1ª4–|/ž-" " " " ÑL ºÄ¢ÙzÊð¦ºÖÜ¢,F¯ã¬ÔV6®œ·ÍÌGÍ'Iuˆ<ú£y晬ƒIõ¬;vì ƒÇ4‘nàÀ&Ÿ7ö,C%" " " " "ßb@° ¡É4ïùµYyé̸5ã» ßùÍýÌÙ}õKâû4«u" " ˜4i]YŸxâ Ö^§ö?7fƒ5‰‘êŒlG—Xã[Çhª¦·¬ÿ¹)¥ˆ@ܨ­­EÍÇ7î[ªŠ€ˆ€ˆ€ø í‚]M¦eïm3 ê²óÝý’ úf&ÐÞêÚ¶f·LÚ%"€š+>©^ò»ö†­ Øv5yÁ‚C‡…ëwß}7 õõîéJð­óȤ¤¤„³×c—6E@–À®= jþÖ­[¥Ù%ìeàlx}œÙ*," "ý¢]° ¡É´y…ÛÇᨳGyœ•ƒ¾2„˜Í+ª=âµ)"È6¿Þ°éÕŽ¶Æš•ikØžÈ(Ôö ´··“ƒñ­sfeæ`x;g¤Â"  N€é¤!`žMMM NCÍ¡ï‚`Š€ˆ€ÄD™t‚ÓÜØÊ:·0Óã$ Ø·ð“76îÜXë¯MD&Ð\ùÍÏ(Ú¿¥zy[݆´œþ‰L#ÁÛŽwƒ!0{ölkÖ¬ñˆé¼‰ £à­^½š)b{òÚÚÚ˜4¶ÛLlò±•qfLØfL&ÝRBXDyyù† ¼6ª«x¯‰{"¨X4”RVVüY >NSJ±E˜'ƒé,O¸¢¢ÂŸ*M¼¡ïB¼"R»D@D Ž Ä’`g­”ž™Li-5mŸÎ_‘W²wž>s^·¯jä­¨tßlûªÔÕùÞ›ÀÕ’ìªïH+î*YÏâ»-½gÙzR"PŠ@)("2 ‰L)qƒË6$5¹<­aACÃVÕ•$Õu¯ËRKܸð ïºë®«®ºêÖ=‹i×µ×^ël ?F(;ίáÝ»w3!,»<æ„et<³ëß¿VV–×M$×$¥ØL:çããØnw™Ì»Md‚”ò"L‡h†#ry÷HÌfŠ zÑSŠ?wž!?ï^ËŠ@)E òã{[XXèµ>=‹¤ˆž¨£D@D@D@z‹@´ v!4™Ú'æ1'ìÆyÍ3/û¯^±Ë^ù”~c'•÷’çã4˜w©¦mï5nÛ;˜Qñøÿ²Ü|Ûí.µnÓ÷,AJ‰@´=¥D ˆÈ4$2¥Ä ®ÿnHy{ã­5_dõŸÜ³;ÎëQá5^‘ÑFà2dÈÕW_=yòä>ø ˜êauÁ…';\fXZ[[ øVël¹&³‰_^ç¶6¥" ±N)Ÿ%Ö[¡ú‡œ@¾ AÖ'¬/0aÍÜÙð"hQJ‰@æÔD¦ ”""F,bmqÞž {%í‚]M¦‘“ú!ØAá¥{?MÏJknhmªk­ÛÕL¸|B©oµÎ²³j1®Öš”ô»K8#š]Ê_œ5JÍñŸ³4úŸØwJ|ëÈÍc~ L¯ææfßzÝ+µÎ+EŠ€ˆ@ü¡ïB0p°Þƒô‡õQzX3w–‚"P-Š@)(œšÈR"PDĈ…µ-dî¼+î–@´ v4 „&s¾ú‡%[Wýׄ°©iIU[ÝãûºH­ ”˜Ò‹€ˆ@ÂÈÎÎÆ«ß:\êpëfÙ±c4˜ràÀÝbAòÃAdt¡í6±ˆ€ˆ€Äú.ĵBD@Š@ v¡=Ê v·4Õ·–”åQ4pdá¼ç×RÄ»O®žzƈnË¢lÕb÷ ãù#fu›X D@D@DÀÀ½Žù%œ Fƒc°*?y ççQJ&" "ÓBè»ÓTyH@ 'Øm^Q•™“vÚ5íÉÆíŽN²»w4Øß]ç» íˆotne@:<ïÒÓÿk6¤ønµZ'" " " " "Ð-”nS$B‚Ü‚LšYW寛C"0QE@D@ÂMµŽ"¤Ö…›³ò˜#pv^ÏP}{Øï¼bMÈå"E@D@BCÀ9Á«QëÊ× cÇ(xÉ. nJ," " " " 1G A»†š–œ‚½òá@O›Æ.-xþ¾gz¬Ò‹€ˆ€$ ²²²-[¶lÞ¼¹…ùaáЯ_??i0=…IÙÔÔÄ䌈ççJ&" " " " "sN°;êÛû¿õ×ås]Þwp^Ÿ²¼ªmõ;7ÔrÚ=e¸Ÿ'¯fÅ#&e[íZWk]JzžŸ*™ˆ€ˆ@ ß뀶m󠆮b8“™é“ÁŸ¥££Ã&s†m¤" " " " " qC á»Ü¢ŒÃOÛ÷ƒg¾¨ØTÇŸ9‘Äô˜ëïIu¹‡Ú»8Ãÿ‰ÓèLmŽ™^Qëp¯#ŒŸ]ç4>bðÑ3]bIÃl>Rj—ˆ€ˆ€ˆ€ˆ€ˆ@¬HÄ7~´9f†­Ü\·kKCŸ²œ’A¹Èpé˹OÉ,Šõ+@õˆ$==b“êlõÐûlX8&ˆ‚9ètJuö:(­ + " " " " " " " " !$¼”•ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@$Ø P‡‹€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@( H° %Må%" " " " " " " " A`$@." " " " " " " " ¡$ Á.”4•—ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€I@‚]u¸ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€„’€»PÒT^" " " " " " " " "$ vAÔá" " " " " " " " "JìBISy‰€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@$Ø P‡‹€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@( H° %Må%" " " " " " " " A`$@." " " " " " " " ¡$ Á.”4•—ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€I@‚]u¸ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€„’€»PÒT^" " " " " " " " "$´ ×á" " "—Ž:ê(Ó® .¸àì³ÏŽË6ªQ" " " " " ÑI ;™LÑyé¨V" "ǶnÝzòÉ'ÿèG?Šã6ªi" " " " " QK Ú;™LQ{é¨b" "Ç^yå•SO=Õår¥¤hìˆ8>Ïjšˆ€D;ù.DûRýD@D l¢]°“ɶS¯ŒE@D@º$ðꫯ^~ùåçœsÎý÷ßÿÉ'ŸŒ7®Ë¤ÚÊÊÊ:7ËkdçdÁÄD ªO¥C[ÇŠ@ôïBôŸ#ÕPD@ÂG Ú;™Lá;÷ÊYD@DÀƒ@rr21O<ñ„Ùuß}÷I ›³gÏöHß9Æ#6E@D œqÆÑP Õ!Pò]”˜Ò‹€ˆ@<ˆRÁN&S<]dj‹ˆ€% “É¢ˆÎ€æ¨ÛUW]u×]whoo·U½öÚkm˜jGŒso¨Âa-%¬™[(%EDæŒÇMC„Ë^ÿþ"sÞý©‰ÒDù.DÛQ}D@D ’¢T°“ÉŽ‹ ¯ƒ(2(%ED¦!‘)%npE¦!ḻ•gÈ ìÞ½{Ê”)·Ür SO¼óÎ;!Ï_Š€ˆ€ˆ@W׬î@IDATä»ÐÅ‹€Ä4ù.zú¢T°³ÍÉdQ( " "1úÓŸ***æÏŸ_]]m §ˆ­‚D@D@œ@@¾ `Ö/šaÍÜ 'E ZR"P„95‘)(¥D ˆˆ‹X[œ·§Â]ˆöÉï0™ž{î¹úúzL¦#<²«f(^D@D@BK oß¾'žx¢ÔºÐRUn" " þ0¾ 8z÷éÓGîÞþsSJˆÑîaec2ÅnµBD@D nD`;X…µ”°fnOtJ‰@á>WÜ4D¸ìõïO 2çÝŸš(M´»w´ÕGD@"I »nqDæ-'¬¥„5s 0¥D šR"PDd™RâWdboID@D@D@DÀ7ù.øæ£½" "Ç’í qÜH5MD@D@D@D@D@D@D@D@b…@´a+UO„%ð׿þõª«® ¨ù›6m:üðÿùÍo:ºûî»wíÚåŒéA˜A÷222ìÏ>ûl@Ãð]sÍ5pÀÂ… m¦NêÜŒ@ø§?ý©GµÙüàƒ*úÜsÏø`«ÐÝ|óÍ'N (gª}ë­·~øá‡ýúõ3Þwß}¹¹¹LcP>½•¸sýo¿ýöI“&¡9öV•(·¸¸¸©©‰«”þÿøÇ?ÌEâg}8ŠëjåÊ•v\ÿµ}ûöË.»ìÉ'Ÿô3‡Ð&Û°aÃÚµk{g´5¤MÐ!" " " 1A ®»—ÉÔ-4™L&ŸL¦n¯™€Èd —G9<Ñ žž>aªÊãâ·¿ý-þnøï¼ôÒK¶òøI]yå•lÉ#55åâ ƒ²i‚ üùÏ~àLN}‡jPëO>ù„½Ð_N?ýt[Ù´iÓØ|ðÁ¯»î:'œpÂüùóm‚H~ö³Ÿ}ãß0%þâ¿°‚r䨱c©Ü¹±0ªÊ§¯€JììQ ^Ø4Áö®…î´ÂÃ[¿«Ê{Ä?ôÐC|iã Ê_RRâÜŒd˜oK´Å,]]áï½÷žÇ§Mî/¾€üñÎ/[!éHѳ¶ÿ§îÿüjš‰W¿ò®hš¹Òû&Ÿ‚L&ßg= ½2™™L]?Ý&–ÉÔ-"%ˆ!ÙÙÙÛ¶mÃfX¼x±©öG}„€-á|=ÂÎÁ—Í$0Oú¥/$=ãŒ3.½ôR²zâ‰'xñ5y¾ýöÛo¼ñRR_|±‰¤îÓO?ݹP<¹L¨KçˆAÚ²e‹)hß}÷5¯¼¼ó¿dÉbŸ°7??߸%¾õÖ[cÆŒ1é9t½4ag[p[3‘Q¾îªþxönÍkkkÌë>ØNe6oÞüòË/sQ9/r:b£ë­X±‚o~¶ÂÎËÞD"óõÖÕE¸é®¿þzs§˜úp3¢ÓquÁ1qöìÙ¦5 ±Ú1)£­!¦òZ‹@ ¬sçš…/ÿsàá|ÅW°Æõá[ßúrãðíaݺuþg”çœsÎ/ùËY³fùŸggòØòÂv¶4 =²™Ýò«_ýª³žþ„_yå•þóŸ|Ê2½8„W—#<2øCü)Ýk~§x!1· =!¼J‡|A´o,&~¯ù)œ3gN8:Rx­g·‘ÿ¹×;ø^P÷‹Î~å½{¿wÛÒ8KŸ‚L¦^¦2™ L§É'“)„˜L¦ÂTV½N!Ì ïekröÙg›pee¥äÕ‡×&³‰fmãCÈËË#7l[éÓ§óÔ‚’eKgÓk¡¼—––zÝÉÈ[n¹…7uœ°¬ªXTTd¾u˜šðf»"ÕsÌ1¶n´Ë¶1JÚbëæ0j£GdÔÖŸëŠ}ØrfΜùÌ3ÏàUWQQA…Yl+öÙgÂ\i‹-²‘ÎËÞFönàW¿úÕý÷ßÏ{Ž©^füGì+”;"ñ–eýõ¯ÝøšdQØS1­E x‡z(Yngë5räÈÁƒã|XѱWqŠãñû÷¿ÿÀСC÷»ß_žåÀƒÈùK±ÿþûóó‡OµÍ0¦ºõ(*/l8PgCƒï K—.ÅÛý?øyÇ`Ì"'¨(ôÈ>ÿüóË‚_ SÏ›nºÉö30ãTÐÿ€²œrÊ)N4dß_|‘£ø}1éÐ[#'P ^¢î¹çãNÎ&§ÀH‡kÖ¬¡ò\TüLð]ÿýñãǛƚõ¸qãÌQ¸ró­+´)œõ üÔSO=öØcØØØH+î¤ÈV›rDòöesîìWÞ»÷»­X‚âS°“ÉÚËW&<£Êä“ÉÄ‘ÉÚÛ\¹õ€Ns ‘Æ<xiCz£ç¦Ç•i_òœùózjß>]Vi‚ cAÝyçÎLxååaŽÔÂK?¯bÎ]üÌôõµs!‰¡[.ór ªØÎ¼+¦555¦ˆ¯|å+÷Þ{/.¼ÜÛB\ðŠ2›´Åcr›,’æ\Fzýõ×­¶hë…õ7u³­ÈÉÉÁ>ÁÃ=‹&°üë_ÿ²M €æ4`œ—½3Yï†QÒ‘'<ê@[L ÷£::oäèlˆG´)þÀ–›Ú,¤çi‰3ŽÌÜÖ=aŽ>ìøh;ogü†úöíë,‚(½å0ûÅ_ðC@ePèìÀ”Œç€Z„ó/b„©'¿ÔöÛ³æÎOòQî…Í*óŽÁ¯¹mBzdsý˜¯†ø&3F‡­ª3@d’±¼öÚk¬í®ºº:6ñ\i½uiQ~×xæÛ*ÙŽÿT¿SO=•á}|Ãv­ ÍܹsmG .°O?ý¥•V˜@6“^ðîÊ«Ï~Í™HŠÛœ~îÈ‹4Íù´³_y/Þï½-òpuë &£º0œ‡ÉD»ø2­s¾iÙörû1<ÙYgEL$M&¾0<úè£øúr‡ÛÊx DÉij’—Z>•˜zb2Ü`(7ºdÞxãüžv®R´ÕßÔì8  ¯^½úÇ?þ1çéÖŠ[ /6\ð¿ùÍoŒ3Ë AƒºŽ=öXë^Áá4Ÿ/ìaΠuµèÜðÇP®ùW_}•ré?ÎÅö·¿ý Sßx1Â#uþ¿ÿû?g­¢³!Î*,~@ÌröãûãÿˆzÂ5ï<ܳñN—(Ù[3fðhű—7^n^󵯨wø Ùªz´ËÖ–_™hð(·õé@¤3‘ξù6í²¦M”´…_”)sF°MØ´µ5ú_3«Fy¤ïÅM^0PÍDI^«µÞ9Þùí6JNJçJƒZg}ë8eȬ¼Ùš”ö¢bÓÙ¯ù(2¼8±¾0Bï[FªÀd2Ïe":ê(ØñÔfÌ`|kM3‰q¶½†÷N^@1™l<ïмqÚÍžlA0™ÈÄÄ`,ñþGm1íð&µñÎR0™†/¼ßÛx>80pŒÝŒLà'?ù n ”Åo±3èý÷ßç|eÍ÷êÆ.žh¶Õ¶z˜ßýîwÌo¡ätð8°›‘ €Á“‰ry/g¼Lìm¼ýù$Æ£ ^ëOK$kî,‹+–j32ÂwÜA…1™LÍ‹ºj6ùH§:øp_8硱{1™l¼GÃm|XÔÍæÏ;–©&Ó@G*lrL&“€]˜L6±Œ’†xTL›‰C­™ç¹m/Ã7ß|Ól"UØx¯¼ó“Øë®0E"&ò­ˆÌ7nÜØU|Yå´«½ÑÏÏúªU«¨ €0Ïðèãó[çºñÑØ¤ì¼«Wb°„ñ±EƒšY2ìfç@´ÕßÔï>:2À¶³ÂHÏ hbÌ“œqˆ°œiLiŒ÷´ÎñQƒç&Ö—?5Œò†D OU#š ðÁÃ9†Uåã_kL¹… Ø—C§3Ã)˜½|ÂiÈ„±óMÀ™ÞÆD `+i+0jÔ(kÊ™½Î4¦J6æê«¯f NÙ‹ ],™ ÀTÀ¶†8s1d¿à •÷Øä•q$¾­[sªaÂø|àÞÈ&¯ÆNÁ;ÛTE½Õ„YãóežÀ ¶@mïÌÓFF €%‚Î` â7Â\ð¶>t˜EÑ»à‚ œ?èüüYË×yƒ„Dd°• (`+ÌQü‚Ó1™€G$š ·ƒÉö¤“N²ù³¹Ùtâ ÛÄ „œÀ©W!Ï=bÊdŠj[L&‹¢W2™ v™L½rù©PˆÈ+|{‹žú¨&zƒ×5 1A ³`Gµ¹ÑßQîøbm6ùzŠxçñõ—®¦¤ÄUíõë×ÛöFþöLJàòË/·ÀýùçŸG°C%áûŸ®éëgbÓ˜€W÷ˆ^ìL%™»%Ë|‚B!e”'†«ÃUÍ·`Uîx[ãÃaiã’üÃþN£¸cãyÍ…d;Ì‚W.NÁ÷mçq)ÀYÄÌÙe²Šü¥e›pØa‡QIzE\tÑETÃøIоzLTb*Æ|Œ¾g!Àƒã ²)NÜ6¾w;jÈÂàzÔÙ8Í¡Äá$„Ló)—]t€Å/‡]¶Úˆ—“„H$Ã_úÐr´ˆ@ ðÙ„A‚pvèq:0´œò¡ÍY¹‰€ˆ@ôÀøðÃçÕ?zª”à5ÁËÀN×›à(Ô|ˆEh%˜ôÎ>€t©1ƒÄy4ÁŽ>‘Ѱ‰æµ|ùòwß}娫! ¨'Nñ dW4ÔÙÔت"y3©mãoÐaËî%ÀEÈ”²QÞáŸAÆé£ÿŸ­9þwv¦$ÀÈ•Œtû§3Rá`È Q„L¦h;Í2™¢íŒ¨>" " " " á&`»p—¢üƒ!€cþŒÌ°ÄÜ LV:V⛀»ø>¿jˆ€ˆ€ˆ€ˆ€ˆ€$ ºUF³¯Y¢œ†îÚÉœõÙÙÙf ôîÒj¿$. v‰{îÕr($ NÈQxRT%Ä% Á.qϽZ." " " " " " " "…Ò¢°Nª’ˆ€ˆ€ˆ€Ä%;ƒ*CnO›6íÞ{ï%—-U£D@D@D@D@‚! 1ì‚¡§cc˜€L¦>yªºˆ€Ä,#Ï•––ÖÕÕ566ÒŽ¶¶¶ÔÔÔÎ ûì³ÕÕÕ.¼ðBÖ7nd*½qãÆÍ›7M-" " " |ÌÂË¥—^ªCÁÀÔ±">ìÂÇV9Ç™L1p’TEˆkï½÷íËÍÍ]¼xñ©§žzõÕWŸtÒIÖç.##å!¯¢¢¢¾¾þ°Ã[´hQ\óPãD@D@ÂN@¾ aG¬D $Ø…‚¢òˆ 2™ââ4ª" "“ø€„07kÖ,jÿÎ;ïœ|òÉEEE„ï¹çžÓN;À† –-[Fà¸ãŽc­ED@D@‚$ ß… êp7 vá&¬ücŒ€L¦;aª®ˆ€Ä8ÌÌLZЯ_?†_¸òÊ+;·fÁ‚DfíYHSYYÙ9bD@D@D ò]†žŽ0Ð,±a«lc€5™¨úÁܹÖdb—L¦Î|#" "™3g’þÅ_œ3g—ËÅ ‹G&${üñÇÙK<#Üx$Цˆ€ˆ€„„¾ L‹ôþûïãß»7¿P¸{3 ›3fÌ ܽYc7áîÍhà!)T™ˆ€tE@‚]WdŸ@d2%ÐÉVSE@D XUîüóÏ?æ˜cjjj¨TZZšÑìÌì±GqÄ“O>IJÆG°³‡`MEA T¸" ß…¸:jL¼`/gRíèkÿÈdê?$" "¯3ñá4‡ÿÂܹsÍ$“ãO<±k×.£åqSRÔÕÕM:5°ò”ZD@D@|ï‚O<Ú)½IÀýÙ¶7ËWÙ"eÕš˜' Á.æO¡ " " " " " " " "ORâ©1j‹ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€Ä: v±~U¸" Á.®N§#" " " " " " " "ë$ØÅúTýE@D@D@D@D@D@D@D@⊀»¸:jŒˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@¬`ëgPõˆ+ìâêtª1" " " " " " " " ±N@‚]¬ŸAÕ_D@D@D@D@D@D@D@D ®H°‹«Ó©Æˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€Ä: v±~U¸" Á.®N§#" " " " " " " "ë$ØÅúTýE@D@D@D@D@D@D@D@âŠ@Z\µFH˜={ögœ©ÒTŽˆ€E ¼¼<¨ãu°ˆ€ˆ€ˆ@d ă`'“)²×ŒJŠ€L¦ ðEÙÁŸìÈíYŽß7/+µgÇöà¨5kÖÄÊ…§ªöàüúsˆÀúC)Ð4±E5ÐÖ)½ˆ€ˆ€ˆ@ïˆÁ‚=6™¼Òÿúäþ^㊌Îw8ÕÊÿ“(Vbå?ÿSr]ùŸX)E@D@D@DÀ7ù.øæ£½" QE V>!G ´8좄¦ª!" " " " " ‘$ÐÐÐÂâÆŽ|núòí?C±+ÿ øŸ2j¯+ÿ› ”Фº D@D@D@D@D@D@D@D@D ŠH°‹¢“¡ªˆ€ˆ€„ÀÛo¿ÝÒÒâÌðñÇwnz û“ÆëŠPˆ„`'“)TgKùˆ€ˆ€øOà‘Gñè%ô /t{ø¬Y³ºM£" " " " " "V‘ìd2…õ*s·Þzë?þñ¹xñâ 6ÜyçlN:•õ펥ó¦9ŠõgŸ}öï|ç½÷Þ³1 ˆ€ˆ€ˆ@ ä»(1¥0Â+ØÉdÒu&" "aÉÉÉ_ýêW§M›Æç"ŠþàƒÆŒc†Ð¾ôÒK‰Á‡Žeܸq7ÝtSçMbX^}õÕË/¿üÑG½çž{n¼ñÆ=qZ‰€ˆ€ˆ@Àä»02 " "°‡@g‰Ådúä“OJKKÏ:ë,\0™þçþç™gž¡\L¦K.¹{‰ðçŸ~úé§_sÍ5›æa2ÝrË-|˜bï¿þõ/YM‹Ö" " ^ ´µµxàˆqì9s¦Iså•W{ì±6ýàÁƒI6dÈŽŽ"=6M²O<±ªªªººúþûï/..Ö¯¥§€ˆ€ˆ€Ÿð]>|¸IŒ»wŸ>}ž~ú髯¾Úº{Û|0…pþvnÚ0îÞ·ÝvÛÅ_ú(;;ÛìòØ4‘“&M*++ÃaÛ¶mÇsÌgœA¼~}:ÃTŒˆ€ˆ@gò]èÌD1" " —`V“)ÐF*½ˆ€ˆ@â˜;w.~ ,×_½×VïÚµë°Ã3»èë±iâçÍ›7hР-[¶Œ=𡼿£HðJ@¾ ^±(RD@D á쨄L¦€Î„‹€ˆ€„„ÀQGe§3¹1dªÍÖÄ;÷²««ÍÍ›7Ûÿ ÈwÁVJ)" "Ð0 v2™º‚®x8& ß…8>¹jšˆ€D†@»È4@¥ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@TïBTUFD@b‘@J,VZux% Á.^ϬÚ%" " " " " " " "“$ØÅäiS¥E@D@D@D@D@D@D@D@╀ư‹×3«v‰€ˆ€„@V†¾{…² $'‚L¦¼vÕdèu'N,íõ:¨" " " " " ñG N;™LñwiªE" "à$°xñb—Ë5qâDg¤Â" " " ééé‚ " "âD°‹¿£‰€ˆ€8 <üðÿÿýï;::œ‘½~üñÇ{½~V`Þ¼y^SžuÖY^ã)" "+F+UU=E@D@ü''‚]tšL]YGþŸžp¤T­ü§êd%›ÖnJ)á 0kÖ¬‡zh̘1ßüæ7ÓÒÜ?^?ýéOÃQò^''‚]¯sTD@D@ÂJàW¿úUCCÃÒ¥Ko¸áS»°Wæ" " ±B`É’%QXUÕÊÿ“ý¬ÆŽës”RD T$Ø…Š¤ò#—^z)Œ¹+kˆ&)ÑTÕED@D@º$ÀvÉÉÉ)))wß}÷Ûo¿Ýeº@v0‘Å/~ñ‹@ŽPZ;hìd2…ýT«ˆeŒUzå•WfggÓd»£Ž:*$­8pàÌ™3C’•2PˆÁN&S¨Î¨ò¸$ð“Ÿüäˆ#ލ®®¦u(w¬çÌ™dK.\¸cÇŽE‹‘OKKËùçŸíµ×Ú<é„{ÓM7ñ=éµ×^³‘ ˆ€ˆ€ˆ@È Èw!äH•¡ˆ€Ä¨ÃΚL‡v&Ó%—\Ò·oßÙ³g¾˜L ,øùÏþúë¯wÜqq]M”@ÿþý²f,//·áž&NœÈ_|1k|÷ÚÛÛ·lÙ‚û^GGs\0ôßÿþ÷Áƒ>\¿>=#¬£D@D@ü!€ïÂóÏ?ïOJ¥HQ!ØÉdJœ N-ž˜;wnNNNff&‡£©±9rdϲê|Ôm·Ýf&Ÿ-++3½nùJ„lGÊ 6LŸ>½ó!ŠïBH0*ˆ?Q!ØY¬2™, D@D@œÐÑPÐn¾ùæùóç3êÜE]äÜdxõêÕgœq†É$55Õ™nwvÓº~ÛD@D@D Hò] x%]‚L¦x½ÎÔ.ž@]]Ý´iÓ¦L™BVo¾ùæŒ3‚ÏÓäÀP çž{îâŋ٤Ö¥¥¥•••%%%§Ÿ~º-Å9‘Òï,D@D@‚' ß…à*ˆ' vC† Ù´i“é(r2™BŽTŠ€ˆ@|xæ™gœÚ á/Ñ„ ÐMO[†±#s&£ Ë-ýa8ÏÌqÕ ¨% ß…¨=5ª˜ˆ€ô €»—_~yܸqtòè4’ÚËd Fe"" ñG€)\™wbëÖ­FV U­êwïžÅf‹8¸jÕ*6Ÿ~úé“O>ÙÆ+ " "Èä»Èg_mH ´¼ë®»ŽCÒÒÒ0™Ìh^Ó;M&Â,L–DJc2577/[¶L&“WtŠD ðµ¯}íˆ#Žàw'2½ï¾û²²²(îúë¯ÿÁ~™BUŠˆ€ˆ@”Àw:‡7 a…­ï¿>ÖÝ{òäÉL¸Ä ü*…°,e%" "ýö°;á„ ±†“ ÁnÔ¨QË—/X¹*HD@D J\vÙeŸþ9•yûí·qî>òÈ#MÅÞzë­ðÕo¾¦¦¦ð寜E@D@b‘€õ]°•ÇÏÀ†{°™ÈÝ»Ç u ˆ€Ä€»+®¸ K–,A>;î¸ã  E&SXñ*sˆ~ .üðÃM=].²]ô×Y5ˆKò]ˆËÓªF‰€ˆ@tX°£¦Gë;ï¼ó§?ýi}}}t¶Mµˆ|ðA´BMˆò]ˆƒ“¨&ˆ€ˆ@¬x »3Ï<“¶1}ë /¼°¡¡ÁŒ°+ V=E@D@b‘ÀE]tùå—ÛšóÑÈL acàèÀÄ&úÓŸþ”››U„ˆ€ˆ@bØÃŽ‘VÏ>ûìÂÂBxegg³ž7oc'&>µZD@D Œg71¸-®¼¼Ü†{+`~{«tÿËmkkc¶(ÿÓ+¥ˆ€ˆ€WÖwq{ð]¸êª«ð](++óšX‘" " " €_ß™,ï7¿ùyï?þøã)û”SN ¦!96 M¦è´ŽT+ÿ¯·èdåý•Râ‰Ît?ûÙÏÒÓÓo¸áÓ.Ôº””€ÄCÎäÔSO yžáÈpÍš5Ñ o†£iÊSD@"I@¾ ‘¤­²D@D Á ,Øýú׿ž?þ#<¸×^{íÿø‡L&¯×PtZGª•דå52:Yy­ª"E î Œ1âñÇûfª" " QN :}ø mÜ¢óË·jåÿu¬ü¯¿RŠ@|X°£ÙètñÑxµBD@D VTVVöíÛ×YÛŽŽçf¯„‡]÷R¯”ë£Ðu·Îô±W»D@D@‚!¾ £F ¦Qá86:¿|«VþŸëèdåý•Râƒ@O;°«©©±í—ÉdQt ,ë ¡¯•ìÃh8¯ªƒÄ7ë®»®  ÍîCaä 'Ÿ|2¾Û«Ö‰€ˆ€D'ù.DçyQ­D@D þ,Ø}ôѨuhv%%%ñ‡C-ˆNO=õÔyç‡l7räH~†xàæææÌÌÌ謭j%" "¯ä»à÷™ ½—€ßEûHúZÉwÁní†@À#v¯_¿þûßÿ~uuõÿY‚)^ÇŠ€ˆ€ˆ€?N;í´»îº+++«¶¶öâ‹/niiyë­·ü9PiD@D@D T¬ï3ù˜%T9+ð °`·hÑ¢‡~˜±„<2Ò¦ˆ€ˆ€„ÀC=tÒI'¡ÓqƸ×%''›™ÊC^¢f·9Re(" qC@¾ qs*Õˆ~v‡~8RQQQ{{;£6K˜)“)L`•­ˆ€Ä(^x¡´´ô¾ûîcìT—˦VPJ˜rV¶" " ±N@¾ ±~Uˆ!vwÜqfLç%L­¥ 0å¬lE@D@b‘@ZZŠúõëw÷Ýw><˜&Ü{ï½~Á°f´³Ï>Û">uêT"Ÿ~úiÖ7Þxãí·ßN@‹ˆ€ˆ@‚ïB‚_j¾ˆ€Dž@‚Ý”)SèŽôÙgŸ-[¶Œ€Y~ùË_nÛ¶­Çõ–ÉÔct:PD@ŠÀùçŸ÷K/½D«gΜ¹nݺݻw÷˜?^ÅÅÅ—^zéŠ+í{ì±O?ýô{ßûÉšÁVÁ9鍊nêqA:PD@D >Èw!>ΣZ!" 1D ÁŽV 2ä׿þ5v–ÁƒÏŸ?‡7X&SÑé@H(ýë_™òè˜cŽ¡Õ#FŒ`=gΜ`0ÑĉGõæ›o®]»vãÆˆwÎ /^Ì&=pŸ{î9g¼Â" "  H@¾ xÒÕdè]i¿iÓ&“¾®®Î пÿ€2ñHŒÉTPP@d·&ÓÁ|à 7x®MD 0kÖ¬?þñGqýÍo~ÃúÔSO ¦áæ§çÁ¼ùæ›ÿûßßyçcÎ é{Ë&¥ìxy³gÏv&PXD@D ¡à¯PUUÅïÂï~÷;΀ª›7oÒwág?ûÙo¼Á£K.¹k?>>PýùÏÆÝ›ܽÏ;ï<<Ê ãî-S(Ðë1oó2ÓšZÚÛ:Ü?è®ô" "лìøYÂ\IOOÿáªzËd Iå#" qLàOúýaÏ=÷\Úxýõ×cºdffß^:½2ÔÝcùuã7Îw†×^{­3ô;' …E@D î Èw!æNqjJÊØyY©Éאַt%¥$'Ö½,æÚ« ‹€ÄÀ;¹Â—ŸSN9Å€¨®®~çw‚‡"“)x†ÊAD@☲ڎ;BÞÀ… öéÓ‡l—/_Ž›CÈóW†" " qC@¾ 1w*S’“†¦]ô•1÷¿þùS‹¶¸R3¤ÙÅÜIT…E ‘ ,ØáãpÍ5ׄ™L¦#U†" "O®»îº—_~™áâ}Ë-·dddÓºíÛ·›Ãé÷jëZ[[‰4›fv “Æ fLq:VD@D >Èw!ÆÎ£Ûu¾cŸ¾yetjJÒ?lv¥eJ³‹±“¨êŠ@X°ûíoË}ú_|1ée%ß•ù²‡%_a*ID@DÀð]hРÁü1iÒ$ù.ø Ã*ž>dË– Ë]bKP~ð|Ú´iÈõF=2ÓÈw ½£°±ÙM™2å‹/¾¸páB† °Ù]¼x‘tï()MD@R3Dì>þøc~ÂØ6lØ€ñ®K—.©ŸÚ." " " " "JÈw!Ä:šQ-Aî† öùçŸGGGc³;uê”lv!ÖËjŽø—@¢ vcƌᇠ÷ºòåËŸ>}zðàÁþm¼4 Èw!@P>ʆÍnß¾}Øì>ûì3LuéÓ§Ç}ãé>j…TI‰6Ø-Z´ˆ²Zµj}ùå—¬>ÁO[HrQ£D@D@B›À÷ßß´iS&˜fN:Õ#GŽD˜6íÏeŸþyshNi/" "Ê Èw!$olsû÷ïÇåÃ?Ä`‡{ kPÈf’}­F‰€¿$Ú`7gÎfø?üðÃÇÇÏŽ-ðó„kÙ²åæÍ›¹dõêÕ Åé£7bĈxààÁƒd°c¤ØBà5*§ˆ€ˆ€Ä&Àƒ†UáfΜ¹sçNc›{óÍ7M¶§Ÿ~(Ô7Þx#;2 :4v JH…ä»Jž3gÎfÍš=wucLÚµk׌3ž?ž@íéÒ¥“Ÿ](õµÚ">%hƒîu„YňöÃ?$ªÍ=zôÈŸ??žÆ 4àÂeË–(P€ñRÉ’%ëÔ©CJžL:c§={ö ð[Ê^›ˆ€ˆ€\'´iÓ®[·nÁ‚/¼ðB‹-â,mýúõ¤7»^œ”(" "ÚÈwÁï=Ž»IXXKÁÒsçÎ-Z´cÇŽ}¯nýû÷oÛ¶-a É“={vòDEE]ºtÉïM–þ" þ%hƒˆ°²mß¾½S§NÇ|n??yƒ â½{÷^“'O&±]»vK—.%ó\åÊ•æÏŸOcǎʼnûÝš5kðqX¹r¥uµ3—k/" " I#;wnž_<_ø„Þ¯_¿8 á3é¼µ_¾|Ùdxå·8¯R¢ˆ€ˆ@;—gzÙ²ey˜7oÞœ†°&,ãP–RDÞ¶mÛÏ?ÿ¼e˼RØÖ®]»{÷n"¶Ë`çë—ò"àwéÛf­òe)±W‘ôèÑÌ*zê©§°ÓýöÛo¤˜±-Š`F&p¿ž‘‘‘o½õÖâÅ‹úé'¦&ýþû︠› üÈÚ«$ˆ€ˆ€ˆ@b áæ›oæ3ŸÓ ,8jÔ¨7Ra§(jÀ€γz9iHÔ@ß…¹sçÒR|xv,s`q²#D ák·nÝ:kÖ,æÌâ^Ç$Yš0Þv.ꬪE@Dr÷Õm " " " " " "‚°Öa€cC‚2±F<ÛM7ÝÄâ,rˆ“]­ZµL†O>ùdóæÍY³fÅÉîÂ… !BMð!ì|ØiRYD@D@D@D@D@D A&B:Aë\Kü¥ˆˆ¦»âaÇþüùó ÀÉ®hÑ¢”ÁlÙùóçc­cæ,;l| ¬“" " š ʪCD@D@D@D@D@D ˜ŒÝåà *”3gN ƒÝ‰'HÇÃŽíÔ©S,ߺukœïÈÀJ™2eÒ¬Ø`ö”ꈓ€ vqbQ¢ˆ€ˆ€\›@ºL¹®É9¢/]È.£¹¶ RõÚŒ’”C`“„íùˆê5Z¢Ó"¢Xï•Y®Xßðªc3Ö:ÚŠé̊Ŋ׫W/–7ÄÏŽµ)XŒ‚™³áááD² Q$j–ˆ€Ÿ„ˆÁ.kŽ0?Q—®" " !A wÍw|ÑŽ;w¸:åÇûÚJÕê#M °>¢šÍW™"à}ìXn=­©ÎèÌ!;<ìØJ•*…3w,Iqüøñ|ùò±B6>ï·NŠ€„<1ØuqwÈw•(" "à5¯¼òŠ×T’>" "'Ä™®Ä !C†hE 5!†©ÎÖ4\ꢢ¢ðªcì‘#G°Ó±tlŽ9˜0‹ žÍ)AD@Ü" _"·È«^ßðËâTMö»ÍGTi»´•ªÉ~¯š %ŠU™!pë­·zD©ókÅž;wŽ%)0êaªËž=;¦:Y?}Ô‰RUBž@ˆì,láµ®Êrà vxM©¤Uà]"V!É*_ýi·K9E@D@D@D@B•¶9V™ÀÏŽáN¦ºPíhµKüK D vþíi." " " " " I&°iÓ¦$_›rúB«+W®@ ¾i³)'Fɾ`Cg·Å*pò±Y•-[6ðË•Ó d°óB/H pÝTÔÖª2¿Hc¾*øMíÿÑ—X'ܱú’t " qp}J,K õÉbqñSšˆ€ˆ€ˆ€·0jÔ¨‘·t’6" ž$ງ†B‰½/Ò&öåH92Ø¥[•," " " " " " " " ‰&à¾Áîûï¿oÚ´é”)SŒîS§N5ÂÈ‘#¦MûsIÇçŸÞšSÚ‹€ˆ€ˆ€DEE5nܸaÆ—.]ò‚>Njÿµõë×Ϥ?úè£UªT9|ø°3›ërDD„ÕaòäÉyòäq>ñ=¥³SÕ¿èÖ¶xû÷ï_ªT©µk×Úæ¸%ÜÿýaaaÏ>û¬Q•J–,Ù¥K«è ,h^±l¢+BûöíY–±mÛ¶¦vKÁ¤Ä¾%\Ñ“JQ5kÖ¬={ö´ ĸ9¿úê« pØ )-4kÖ,GŽ£F2y™^J£Pù" " "’\6ؽçqÊ–-ÛÒ«›ÏßtÓM#FŒX¹r%1Ðþì³ÏŠ/~ôèQ£Ï¼yó¾üòËC‡ñ%ïÝwß%Ñ;:/Z´¨FVUt‹÷î»ïÆt»eË–ªU«ºk½ >|ø¹sçfÏžýÎ;ï\¾|•¶mÛ†Áî–[nAó¿xß¾}˜–6oÞl໲ÇÒ}ï½÷FGGc³kݺ5:,[¶ÌÜ´ì9Œ}K¸¢'•>ðÀ-Z´8sæÌŽ;^xáRbÜœû÷ïÇ–ÇÈmÚ´ ‚ž¹sç~õÕW?Žû›o¾¡FÏÒ  _W!ß_wŸ”%àò¢|çgäÀP§Aƒ¦•*UZ³f 2KöðBIÕ±cÇ)RùÎ;ïŒóõHÑ[D…‹@(Т¡Ô›^hKùòå7lØ€&ÅŠ[¿~=F/h…|åZ¼xqÇŽíúwéÒ¥3†$›7oî…å@Õüùó›õ¯ wêÔ)0mÚ´Xš¼£ó‘#G.^¼hU×¼´ <~úé'§“ iQÐö3f¼páÕaœ2dHýúõ¹9ñ¹#Å(iUݳgw‚yé šzΊ¬ªÜؾñW½ùæ›÷îÝkóľ%ì© ;wž8q"•òʺqãFÜ*cÜœãÇÿý÷såÊEK8E•´* 8cbÅŠ=K/E9ø½p|î¹ç8ƒ®P¡]{(´bÅŠ'N<ñÄùòåãŸ:v“µèDl&Jˆ“€ˆ‹—]ö°ãó oi¼,òÞc'•Äàe|xûáÝÝœâ±äÜbäסˆ€ˆ€À’%Kð«21ÄÂL„J¬bþüùŒç»uëÆã•I…811)ÒªŠm1ÀrR4ƒO6[ÅéÓ§­Ì»§tÆãT5^«6w‚»xµzÕªUûôÓO™§iïR§žÈø‚ssŒô U©.gΜÿþ÷¿ðû×ϴ¥K—æ0Æ-4ÅbWd¬uü7a[á}5ö͉!ÏXëb_›B)F%^'Mš„µŽZ}zôèÁ‹E¦L™víÚe"­pˆ×w¨W»D@D@BƒAͦOŸnÚBÈ-ëÂæ…Ö1ðsªAˆ½_~ùŤ|ñÅ­ZµržõˆŒ›•q¥ÿã?îºë./ë¯ xÛµkçL ²Y³fM¦—b­£ê&Mš|þùçqê0kÖ,wUÅ ”Û3“±Öá h¾ÚZmcÜ6=ø‚5ñ_¿}ûöØ7'Ö«Y®(Ì\Ζ-[ó1F.–È`Å &ýaþ6.E±o Wô¤RìžõêÕ{òÉ';tè@˜BRbüCa»ÇBŠòü—ýúë¯AÐ+g×®]™ïÌ]·iÓ&þß=K/4ü[¾ Üíæ¿¯Xb|XÄÆ¿’æ" " ÉEÀåE'’¥¼ƒ>rÇêd)J…ˆ€„6-:ÚýëJë¶nÝá©ù°†>V .ÄñâIa‘‚‚±0«+ ¬“GÓ¦MmfÏê/l™)‰o UÞ;ÖX}û²Q‰4X“Ä®÷å=ÑdîܹDd3;£XŒ[Â-m±t³ŽÖd㺈±oÎ «Êâ¿l¬´k{Ö³ôÜêµTR/C!/¬#”Jh«™"àkZtÂwÝ'ƒïºL ‹€$€ vIg§+E@D@D@¼G@;ïõ‰4ÁΣ¿Z.ǰ‹_1ÔH@»ÔØëj³ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€g È`çÙ®‘b" " " " " " " " ©‘€û«Ä& õt™r%K9ÉXHô¥ Òý7Îw2{EI«ÀŠ•XN@9E@D@D@D@D@D@D  „ˆÁ.wÍw’J²µsçÎE‹&KQÉXˆ´ ¦X‰Uà”SD@D@D@Ü"!C·ªŽ¯^V£NŸÞs#Mi_ÅN«ØLâK«øÈ(ýú xîg4iMbu¤¤]¨«D@D È äUˆ€ˆ€ˆ@¸õÖ[½Ö:¾|õ¤ï‚´ ðVQŠlb8+åL,1ØypŒ QZx;ŠU€ È&V!À*ð&(§ˆ@Š(S¦ åÿüóϦ{õêÕ¥K—ÄVZ«V­'N¬_¿>±&¿F+W®ŒŽŽ¶yŒ¶æð¶Ûn>|8{{6… *´jÕjàÀÉX¦ŠHQò]HQ¼*\D  xÐH’Œ­Kö¢BÄ`—ì\T ˆ€ˆ€ˆ@hؼy3 ;vl=8}ÇŽ)á*²aÆjÕª9«–,"àqësà÷ŒX‰UàÏéÙû*ð&('´J¬nTJ€K={öŒÑøFmÙ²…Ä3f #,^¼¸Y³fÈ"##ûöíKJ‹-/_¾l¯8qb¾|ù† bSš6mš5kÖÞ½{›ŠÂ28~üø|ÐæAؿٲeúwïÎ!Ƹ>úáìÙ³ÎlÈh{èСÇc³ãÐ:ÁÕ«W/W®\/¿ü²ÍŸ`öìÙï½÷^““ôAƒ…‡‡—,YÒ4ô9}útëÖ­ÍU=öXÞ¼yW­Ze ¡½… Ζ-›³d{V‚ˆ€ˆ€ˆ€ˆ@ŠÁ.Eñªpïhذ!ÊÝwß}NçÎ{ìØ1R~ÿýwd„={öÌœ9³bÅŠÑÆŒ“&M"LoܸÑRcÜùóç‡ öÌ3Ïp yfÍšõÐC½þúëùóç'…¢¦L™Ò­[7²qh6Lf û쳘IÇî†õ°nݺóæÍK›öÏ7=ls/½ôÒý÷ßOæÒ¥KïÚµ‹Dô!ç§Ÿ~Š\®\9t+R¤H•*U84[ñâÅëÔ©Ó¾}{J5jÔ_Éú+" " " " ¡0%ÖƒNàt´ üþ+± œ@à9u_ÎJ9E 5Àã¬T©R—.]º&cÅÃæ…qíã?®Y³æ7ß|c¯2f8Î2 …9­¤oß¾½P¡BLb%Åd‹ŠŠ².o&¥~ýú»wïf]Œàñ”¼nÝ:,ƒ&Ýc%¤|sˆµŽlË—/ç3"éØì˜'Ë!^xøÄa7üᇰّ‚m§NŠLÎJ•*‘¹]»v&L@`VoõêÕMsL&Ãwß}÷Æo¼ýöÛäÑ&" " " "Lò° &mÕ%" " "à-,Ý€¥ŒÙ¬±ÕŠÏŠg<æ2eÊû’%JH8öÌ?e¢ë«¯¾j­lxÏŸdíÚµ6ÅéÝf}ØûØúôéƒ ›&92à‘GEÌfµU®\™t\lJ0)FfR­°â½kRòäÉÓ¿ÿmÛ¶ÝsÏ=;iÒ$›S‚ˆ€§è eàÝ!Vb8Àsê¾ò;«Àõ~Nì‚Ï\5Š€ˆ€ˆ€xˆÀÁƒÍrØÂŒZ8¸!|øá‡‰Õ¯º 2ÜqÇ\ȹ#þõ•3Te:ãÙ :Ôy*ÙDÊc]Zb×?*B[[ÑäÉ“¹œ°tÖ„çŒCWµjUS¸sJ¯ñ d¹[sŠ©²?þøãUóà éܹsú蔈€ˆ€ˆ€ˆ@²ƒsL7nL$šø>†';¸ò‰›P56‘Ò̯±ŸÍøÌNh›!oí9räp~Q÷‚V½zõÊ’%‹ ²c xA+£‰sÜâ­jÿµõë×Ï;¬œDX%¢,Ùa­ë¬þâôß¿ÁgÅ/¾-ć2UïÝ»—Áp«V­Ì!{FÎøªŒ9Ò¦HðßX ªÄ tX©œÁæìÙøò³qÖ,çZ¾|yÖZ%…0p‹-Šï*³¾ÄÕKÓ%kãËéLgA Y­‚ù³¬kÁ㞘ßM:52c—2^Q8`jቮìÛsÏ=Gid (“Ž%S#)ùÁ1b„3¿d'`¾ú}&» BðÛÂløüóÏMՌ՗-[†œ1cF´Â†ˆÀáš5kn¾ùæà¨Ç»ø]wÝE]ÌÊa‚à­Þzë-×C>ã Û#Z¡qÁéD#{šÝèã­»2JDŸ£Gš»Ú ¬ Ú¡&êS+Ló , RŒò_}õ‚¹‘Ž?nþõ… é„{çw´‰€xŸÀo¿ývêÔ©ÄêÉâÎKøÀOíܹsÎÄ8eâè±"-/ qž½fâ¾}û¦M›æ¼œ_i"Öñ£í¼–Ÿ#Þ œ)N™å/0,:Sq¤ä3gÎÄHסˆ€§ðOÊ{cƒ Ì€(øº1Ìae[/›‰6`½t€£®ÍaôèÑ7Þx£™ê¼ Õ“O>IƒæÍ›[^ÐÊ(c^\½ÃŠÀ¬f3ãGó+‹|'+S¦ Žíaõ§ÿþ ¾Vüò$„¾©šuºñѲeKsÈž¨ÄóÅfbS$N࿊À/ðfÎÈÈH£XÑ¢EYj-ÈJþç?ÿyâ‰'¬ÁÎÚ}˜œÂÏ n56*ÙS)­!Þ=|*wVj«vQ«þóŸF%FÆ„á­P‰=]»vµÊXÁEV;vì`?û$@I/h5hР_~ùÅt¢Ù{A+«Q¨‚¯î-æ ÷œ•+WòÂÊ«˜S ­†øªXY‚ˆ€ˆ€ˆ€$ ÞÇä»à$)ß'@dù.BI¾ ±)Éw!6“äMùsôÈO¼¯7>höÙgãǧüÖôìÙ“I(An³™|úÀP¯“#lݺe.\¸€zyóæuž šzÌæ“;Õ½£Á}ì+…G´ÂYŒn²ÊXÁÅ7n+>þøãï^Ý:vìè­î¼óNóñ _ÜóÏ?ÿ¼´2ÿM8§|ÿý÷f)Æ kEuèÀW\¼i,Uºti3–öfšý™µŠí@‰€ˆ€ˆ€„<æà›µnŠ+FtËlÙ²³É¼í 6ŒÙ31†BøùþôÓO ‚Њy¨´!†„¯½öšY ÈTj«vQ+Vzá…à€G$gÏö‚VèCôUÍDg7¹Èjç΄e0# TòˆVxŸ´oßžY5F%he•É•+— ÈÌû _Z¬1ü¯5kÖlàÀ ¹mX_ÞÂáçˆ) FI‚làb–Pˆag¼Lk™‚¿e -B£ŒS½ Tj«à——ÿÕ‡~kMDpW+`ö">‰èæ­ (À|%§2Vv‘U·nݰò`†ÆÞÚ©S'«‚‹ZíÚµ‹0F8‘ñž#8º‹Z8¼k]Yq'¯^€ ƒóÿ0ðNe$‹€ˆ€ˆ€ˆ@²`´|÷Ýw›b+Uª„,Ù«H¸@¾P2I0v”ÁzHÀ«^ì<)”B8c­Ãw¥®µ¸¨•±Öá»Àô ¬uÑ 5˜à9a§>Fv‘Õüùó™CÍ€YFɪç¢VóæÍkÛ¶- pÃã¸`UBpQ+£¾ Ø7*G+\M3 Zºt)LÎÿwã±ÄÔ:«•ub°)®I  v5jÔ`Ωi*7ŠÓæ}Íö§h†/¾ø‚ÐMš4a¶lŠV»pæxš Æ½Ù™ÁE­¬‘ŽçºS%dµ"Šs‰/ŽfousQ«Þ½{[5b.jU³fÍ?þø#†>æÐE­P€O»xÿÅV,8Z™ïØ,¨Âü çÿ;n›¨”3gNó) tüWÆVR)" " " "dÎ…æj’‹JÞ Ýýš+ß…{S¾ ‚"›|b³’ïBl&Éœ‚™36Ì·x`0ã+Í¡jÃŽ¸˜Õ«WÿàƒÌÂjèCŸ± \¹råæÌ™õ˜L G»Q©´báÚ"EŠði¢páÂ|ðˆV¶Gè&#{Kûñø\¾|9nÆ&„§´‚”ðÙÄ,…qÓ;=øÈ#`¬·]LVØàˆÝÀ×$ s|FF¾2 ƒv àð×_å+ÿû<Ï0áY%%ˆ€ˆ€ˆ€ˆÀõ ®ŒL9xo]I(Á9²oÔ|~楑Hóo¾ù¦)ÓžJB‰º„˜Ëf!2{•­ÚE­¬hed›â¢Vá1Ê XÝ\Ôê©§žŠÑw^`ÅdB]żӃèÃô5|bã0=hû…êòäɳzõj»¦Š9ÅÉ,ŠÅt]ç"0V[ ‘E'h$+¬:t(áÖí,ó´W­Z嬷^çòmÎSA“½ ŸÚðQgo[í­¬2Vð‚VL;ŷٹƟ´¶'‚µyŠ•UÆ ÁdÅ×¶ýë_gÏžµµ³úDTT”=D +‡’E@D@D@D ¹Èw!Iù.ÄÈ¡µ¼óËw|ŠÉw!>2q¦Ëw!N,¡‘ ‹Nðã¢MD@D@D@D@D@R'"IEDDx$–7Q«X Ì ä믿®_¿>Ó\ì/hE€ã 4hз#ƒÂ ZÅî/hÅÇï… ‚å=Å ¿Q,Â,7ç)­btb0{p÷îÝß~û-î‡aaaF \—"##3gÎlµš9s&Óì¡„À È`8+å'àæWŽoœ*¿ÁÎo=&}E@D@D@D@D@D@D@D@Bš€ v!ݽjœˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ßÈ`ç·“¾" " " " " " " " !M@»î^5ND@D@D@D@D@D@D@DÀod°ó[…¢¾e®n¶e½ûî»ö0p¡V­Z*T< 9kÔ¨‘!CgN£­Ù·hÑbë֭γÉ(Ó–—_~9 TQ" " " " " " " ¾ ƒ/º)Ä•Ü|u;v¬i'GGŽIB›7mÚ´aÆ$\ß%Ç_±bE·nÝœŒ¶‡>tèÐôéÓK•*µsçNg†ä’iËÞ½{“«4•#" " " " "à5ÆÀj%߃B¾ ö–š È`—š{ßCmOŸ>}Ïž=c(Ô¨Q£-[¶8cÆ d„Å‹7kÖlÇŽ‘‘‘}ûö%7äË—/Ûk'Nœ˜/_¾!C†Ø”¦M›fÍšµwïÞ&…¢zôè1~üø|ÐæAؿٲeúwïÎ!†¹>úáìÙ³ÎlÈh‹µ›Ý•+W88p ÉP¯^½\¹r9Ýâºté’={ö{ï½×ä$Û AƒÂÃÃK–,išF úœ>}ºuëÖ¦Ç{,oÞ¼«V­2‡ìioáÂ…³eËæ,Ùž• " " " " "àSÆ@¾ 1ºO¾ 1€è0uÁ.uö»çZݰaCtºï¾ûœšÍ;÷رc¤üþûïÈ{öì™9sfÅŠ1¢3&Mš4/^ܸq#4{!ƸóçÏ6ì™gž!‘<³fÍz衇^ýõüùó“BQS¦LÁoŽlö*Lf û쳘IÇî†õ°nݺóæÍK›öÏÿ5ls/½ôÒý÷ßOæÒ¥KïÚµ‹Dô!ç§Ÿ~Š\®\9t+R¤H•*U84[ñâÅëÔ©Ó¾}{J5jÔ_Éú+" " " " "à{ò]ï‚ïob5 …àø£MÜ%À½%Ëxœa€ã¹¨¨„€E áµ×^CFxÿý÷`Îb\C ÌœI¼é¦›œg‘MiÛ·oÇ67`Às–½¸ÖnÆ@fûõëg2ôêÕ+vÎ?/vlXë¸jÙ²e¤;wŽŠlQ¤àÇÙ5kÖ`@D Åèläܹs¡k×®F®^½º•±*ú(Ór‰Ó}ûí·#3Ké¯\þ%ó¢I!v‡ŒƒL:j4oÞœö¤äÉ“™©NìÙHaÖBÛ¶mÚ à“a.4ú ã3Azåʕٳ12:tè`‚9’m"zü¿_’ù¯Ð^Ü"pÛm·EDDð ‰­À¥K—b'’b<æ2eÊûl‰%°Ó™væ‘@ž"&'Þs1.Y»v­Mqz·ÙD§ÀS*::š¦åâè÷ÜsÏýðÃ<[‘yÞàÈfJ°O ™Tk±â½ý¾dRxÔõïߟ‡Ó=÷ÜC .{:u²™%ˆ€ˆ€ˆ€ˆ€ˆ€ø¾ „ÆŽoÔãl™ÄpƒÄÇ\³fÍo¾ùÆf0Sˆ8ûÊ+¯`ø#1Q¡B…p Åd‹ŠŠÂÞa/A¨_¿>ûÝ»w³gDÆœž[o½•’×­[Ç`Ç™—;ØÁwlË—/')P¤3߈0ßAßæ<1PÂ󀿡óÔ©S‘ÉY©R%ò ·k×n„ D$ÇwÁ4ÇTa2|÷Ýwo¼ñÆÛo¿Mm"ªü9MO›x„Þdf¹ ûá!n~øab5äÉÄê®wÜqòñ‡ wÄ¿³Ï3AÕY¦3žÝСC§M¤¼õë×›Ïb<>©mmE“'Oær>jÙ§š3]ÕªUMáÎ)½æÉzâÄ sŠ©²?þø£ù†@!;wN@ðd÷]€€õ] H÷«¯¾jÇ#×ï»`Æ&}úôÁˆ†MÍú.P‘¸mEÖwaðàÁ¦G’æ»°mÛ6|(vÒ¤I¾ëY),×C@»ë¡§k“™ë5Mј±HÇO³3ØÜ5«$?Ùàʾ|ùòÕªU#…0p‹-Šïr³¾ÄÕKÓφ}/¿IgA V«àëZàN |#2þwÔÈW/RLÈë0©+" " " " " " " "Úd° íþUëD@D@D@D@D@D@D@D@|F@;Ÿu˜Ôm2Ø…vÿªu" " " " " " " " ># ƒÏ:Lꊀˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€„6ìB»Õ:ŸÁÎg&uE@D@D@D@D@D@D@D@B›ÀÿñÒúNý+5ãIEND®B`‚altair-4.1.0/pyproject.toml000066400000000000000000000005521364111050100156760ustar00rootroot00000000000000[tool.black] line-length = 88 target-version = ['py36', 'py37', 'py38'] include = '\.pyi?$' exclude = ''' /( \.eggs | \.git | \.mypy_cache | build | dist | doc | altair/examples | altair/vega/v\d*/schema | altair/vegalite/v\d*/schema )/ ''' [build-system] requires = ["setuptools >= 40.6.0", "wheel"] build-backend = "setuptools.build_meta" altair-4.1.0/requirements.txt000066400000000000000000000000671364111050100162470ustar00rootroot00000000000000entrypoints jinja2 jsonschema numpy pandas>=0.18 toolz altair-4.1.0/requirements_dev.txt000066400000000000000000000001131364111050100170750ustar00rootroot00000000000000black docutils ipython flake8 pytest sphinx m2r vega_datasets recommonmark altair-4.1.0/setup.cfg000066400000000000000000000004011364111050100145740ustar00rootroot00000000000000[flake8] max-line-length = 88 ignore = E203, E266, E501, W503 max-complexity = 18 select = B,C,E,F,W,T4,B9 exclude = .git, build, __pycache__, altair/examples altair/vega*/v?/schema [metadata] description-file = README.md license_file = LICENSE altair-4.1.0/setup.py000066400000000000000000000052431364111050100144760ustar00rootroot00000000000000import io import os import re try: from setuptools import setup except ImportError: from distutils.core import setup # ============================================================================== # Utilities # ============================================================================== def read(path, encoding="utf-8"): path = os.path.join(os.path.dirname(__file__), path) with io.open(path, encoding=encoding) as fp: return fp.read() def get_install_requirements(path): content = read(path) return [req for req in content.split("\n") if req != "" and not req.startswith("#")] def version(path): """Obtain the package version from a python file e.g. pkg/__init__.py See . """ version_file = read(path) version_match = re.search( r"""^__version__ = ['"]([^'"]*)['"]""", version_file, re.M ) if version_match: return version_match.group(1) raise RuntimeError("Unable to find version string.") HERE = os.path.abspath(os.path.dirname(__file__)) # From https://github.com/jupyterlab/jupyterlab/blob/master/setupbase.py, BSD licensed def find_packages(top=HERE): """ Find all of the packages. """ packages = [] for d, dirs, _ in os.walk(top, followlinks=True): if os.path.exists(os.path.join(d, "__init__.py")): packages.append(os.path.relpath(d, top).replace(os.path.sep, ".")) elif d != top: # Do not look for packages in subfolders if current is not a package dirs[:] = [] return packages setup( name="altair", version=version("altair/__init__.py"), description="Altair: A declarative statistical visualization library for Python.", long_description=read("README.md"), long_description_content_type="text/markdown", author="Brian E. Granger / Jake VanderPlas", author_email="jakevdp@gmail.com", url="http://altair-viz.github.io", download_url="http://github.com/altair-viz/altair/", license="BSD 3-clause", packages=find_packages(), include_package_data=True, install_requires=get_install_requirements("requirements.txt"), python_requires=">=3.6", extras_require={"dev": get_install_requirements("requirements_dev.txt")}, classifiers=[ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", ], ) altair-4.1.0/tools/000077500000000000000000000000001364111050100141205ustar00rootroot00000000000000altair-4.1.0/tools/generate_api_docs.py000066400000000000000000000054551364111050100201360ustar00rootroot00000000000000""" This script fills the contents of doc/user_guide/API.rst based on the updated Altair schema. """ from os.path import abspath, dirname, join import sys import types # Import Altair from head ROOT_DIR = abspath(join(dirname(__file__), "..")) sys.path.insert(0, ROOT_DIR) import altair as alt # noqa: E402 API_FILENAME = join(ROOT_DIR, "doc", "user_guide", "API.rst") API_TEMPLATE = """\ .. _API: API Reference ============= This is the class and function reference of Altair, and the following content is generated automatically from the code documentation strings. Please refer to the `full user guide `_ for further details, as this low-level documentation may not be enough to give full guidelines on their use. Top-Level Objects ----------------- .. currentmodule:: altair .. autosummary:: :toctree: generated/toplevel/ :nosignatures: {toplevel_charts} Encoding Channels ----------------- .. currentmodule:: altair .. autosummary:: :toctree: generated/channels/ :nosignatures: {encoding_wrappers} API Functions ------------- .. currentmodule:: altair .. autosummary:: :toctree: generated/api/ :nosignatures: {api_functions} Low-Level Schema Wrappers ------------------------- .. currentmodule:: altair .. autosummary:: :toctree: generated/core/ :nosignatures: {lowlevel_wrappers} """ def iter_objects( mod, ignore_private=True, restrict_to_type=None, restrict_to_subclass=None ): for name in dir(mod): obj = getattr(mod, name) if ignore_private: if name.startswith("_"): continue if restrict_to_type is not None: if not isinstance(obj, restrict_to_type): continue if restrict_to_subclass is not None: if not (isinstance(obj, type) and issubclass(obj, restrict_to_subclass)): continue yield name def toplevel_charts(): return sorted(iter_objects(alt.api, restrict_to_subclass=alt.TopLevelMixin)) def encoding_wrappers(): return sorted(iter_objects(alt.channels, restrict_to_subclass=alt.SchemaBase)) def api_functions(): return sorted(iter_objects(alt.api, restrict_to_type=types.FunctionType)) def lowlevel_wrappers(): return sorted(iter_objects(alt.schema.core, restrict_to_subclass=alt.SchemaBase)) def write_api_file(): print("Updating API docs\n ->{}".format(API_FILENAME)) sep = "\n " with open(API_FILENAME, "w") as f: f.write( API_TEMPLATE.format( toplevel_charts=sep.join(toplevel_charts()), api_functions=sep.join(api_functions()), encoding_wrappers=sep.join(encoding_wrappers()), lowlevel_wrappers=sep.join(lowlevel_wrappers()), ) ) if __name__ == "__main__": write_api_file() altair-4.1.0/tools/generate_schema_wrapper.py000066400000000000000000000530121364111050100213450ustar00rootroot00000000000000"""Generate a schema wrapper from a schema""" import argparse import copy import os import sys import json import re from os.path import abspath, join, dirname import textwrap from urllib import request import m2r # import schemapi from here sys.path.insert(0, abspath(dirname(__file__))) from schemapi import codegen # noqa: E402 from schemapi.codegen import CodeSnippet # noqa: E402 from schemapi.utils import ( get_valid_identifier, SchemaInfo, indent_arglist, resolve_references, ) # noqa: E402 import generate_api_docs # noqa: E402 # Map of version name to github branch name. SCHEMA_VERSION = { "vega": {"v5": "v5.10.0"}, "vega-lite": {"v3": "v3.4.0", "v4": "v4.8.1"}, } reLink = re.compile(r"(?<=\[)([^\]]+)(?=\]\([^\)]+\))", re.M) reSpecial = re.compile(r"[*_]{2,3}|`", re.M) class SchemaGenerator(codegen.SchemaGenerator): schema_class_template = textwrap.dedent( ''' class {classname}({basename}): """{docstring}""" _schema = {schema!r} {init_code} ''' ) def _process_description(self, description): description = "".join( [ reSpecial.sub("", d) if i % 2 else d for i, d in enumerate(reLink.split(description)) ] ) # remove formatting from links description = m2r.convert(description) description = description.replace(m2r.prolog, "") description = description.replace(":raw-html-m2r:", ":raw-html:") description = description.replace(r"\ ,", ",") description = description.replace(r"\ ", " ") # turn explicit references into anonymous references description = description.replace(">`_", ">`__") description += "\n" return description.strip() def schema_class(*args, **kwargs): return SchemaGenerator(*args, **kwargs).schema_class() SCHEMA_URL_TEMPLATE = "https://vega.github.io/schema/" "{library}/{version}.json" BASE_SCHEMA = """ class {basename}(SchemaBase): _rootschema = load_schema() @classmethod def _default_wrapper_classes(cls): return _subclasses({basename}) """ LOAD_SCHEMA = ''' import pkgutil import json def load_schema(): """Load the json schema associated with this module's functions""" return json.loads(pkgutil.get_data(__name__, '{schemafile}').decode('utf-8')) ''' CHANNEL_MIXINS = """ class FieldChannelMixin(object): def to_dict(self, validate=True, ignore=(), context=None): context = context or {} shorthand = self._get('shorthand') field = self._get('field') if shorthand is not Undefined and field is not Undefined: raise ValueError("{} specifies both shorthand={} and field={}. " "".format(self.__class__.__name__, shorthand, field)) if isinstance(shorthand, (tuple, list)): # If given a list of shorthands, then transform it to a list of classes kwds = self._kwds.copy() kwds.pop('shorthand') return [self.__class__(sh, **kwds).to_dict(validate=validate, ignore=ignore, context=context) for sh in shorthand] if shorthand is Undefined: parsed = {} elif isinstance(shorthand, str): parsed = parse_shorthand(shorthand, data=context.get('data', None)) type_required = 'type' in self._kwds type_in_shorthand = 'type' in parsed type_defined_explicitly = self._get('type') is not Undefined if not type_required: # Secondary field names don't require a type argument in VegaLite 3+. # We still parse it out of the shorthand, but drop it here. parsed.pop('type', None) elif not (type_in_shorthand or type_defined_explicitly): if isinstance(context.get('data', None), pd.DataFrame): raise ValueError("{} encoding field is specified without a type; " "the type cannot be inferred because it does not " "match any column in the data.".format(shorthand)) else: raise ValueError("{} encoding field is specified without a type; " "the type cannot be automatically inferred because " "the data is not specified as a pandas.DataFrame." "".format(shorthand)) else: # Shorthand is not a string; we pass the definition to field, # and do not do any parsing. parsed = {'field': shorthand} # Set shorthand to Undefined, because it's not part of the base schema. self.shorthand = Undefined self._kwds.update({k: v for k, v in parsed.items() if self._get(k) is Undefined}) return super(FieldChannelMixin, self).to_dict( validate=validate, ignore=ignore, context=context ) class ValueChannelMixin(object): def to_dict(self, validate=True, ignore=(), context=None): context = context or {} condition = getattr(self, 'condition', Undefined) copy = self # don't copy unless we need to if condition is not Undefined: if isinstance(condition, core.SchemaBase): pass elif 'field' in condition and 'type' not in condition: kwds = parse_shorthand(condition['field'], context.get('data', None)) copy = self.copy(deep=['condition']) copy.condition.update(kwds) return super(ValueChannelMixin, copy).to_dict(validate=validate, ignore=ignore, context=context) """ class FieldSchemaGenerator(SchemaGenerator): schema_class_template = textwrap.dedent( ''' class {classname}(FieldChannelMixin, core.{basename}): """{docstring}""" _class_is_valid_at_instantiation = False _encoding_name = "{encodingname}" {init_code} ''' ) class ValueSchemaGenerator(SchemaGenerator): schema_class_template = textwrap.dedent( ''' class {classname}(ValueChannelMixin, core.{basename}): """{docstring}""" _class_is_valid_at_instantiation = False _encoding_name = "{encodingname}" {init_code} ''' ) HEADER = """\ # The contents of this file are automatically written by # tools/generate_schema_wrapper.py. Do not modify directly. """ def schema_url(library, version): version = SCHEMA_VERSION[library][version] return SCHEMA_URL_TEMPLATE.format(library=library, version=version) def download_schemafile(library, version, schemapath, skip_download=False): url = schema_url(library, version) if not os.path.exists(schemapath): os.makedirs(schemapath) filename = os.path.join(schemapath, "{library}-schema.json".format(library=library)) if not skip_download: request.urlretrieve(url, filename) elif not os.path.exists(filename): raise ValueError("Cannot skip download: {} does not exist".format(filename)) return filename def copy_schemapi_util(): """ Copy the schemapi utility and its test file into altair/utils/ """ # copy the schemapi utility file source_path = abspath(join(dirname(__file__), "schemapi", "schemapi.py")) destination_path = abspath( join(dirname(__file__), "..", "altair", "utils", "schemapi.py") ) print("Copying\n {}\n -> {}".format(source_path, destination_path)) with open(source_path, "r", encoding="utf8") as source: with open(destination_path, "w", encoding="utf8") as dest: dest.write(HEADER) dest.writelines(source.readlines()) # Copy the schemapi test file source_path = abspath( join(dirname(__file__), "schemapi", "tests", "test_schemapi.py") ) destination_path = abspath( join(dirname(__file__), "..", "altair", "utils", "tests", "test_schemapi.py") ) print("Copying\n {}\n -> {}".format(source_path, destination_path)) with open(source_path, "r", encoding="utf8") as source: with open(destination_path, "w", encoding="utf8") as dest: dest.write(HEADER) dest.writelines(source.readlines()) def toposort(graph): """Topological sort of a directed acyclic graph. Parameters ---------- graph : dict of lists Mapping of node labels to list of child node labels. This is assumed to represent a graph with no cycles. Returns ------- order : list topological order of input graph. """ stack = [] visited = {} def visit(nodes): for node in sorted(nodes, reverse=True): if not visited.get(node): visited[node] = True visit(graph.get(node, [])) stack.insert(0, node) visit(graph) return stack def generate_vegalite_schema_wrapper(schema_file): """Generate a schema wrapper at the given path.""" # TODO: generate simple tests for each wrapper basename = "VegaLiteSchema" with open(schema_file, encoding="utf8") as f: rootschema = json.load(f) definitions = {} for name in rootschema["definitions"]: defschema = {"$ref": "#/definitions/" + name} defschema_repr = {"$ref": "#/definitions/" + name} name = get_valid_identifier(name) definitions[name] = SchemaGenerator( name, schema=defschema, schemarepr=defschema_repr, rootschema=rootschema, basename=basename, rootschemarepr=CodeSnippet("{}._rootschema".format(basename)), ) graph = {} for name, schema in definitions.items(): graph[name] = [] for child in schema.subclasses(): child = get_valid_identifier(child) graph[name].append(child) child = definitions[child] if child.basename == basename: child.basename = [name] else: child.basename.append(name) contents = [ HEADER, "from altair.utils.schemapi import SchemaBase, Undefined, _subclasses", LOAD_SCHEMA.format(schemafile="vega-lite-schema.json"), ] contents.append(BASE_SCHEMA.format(basename=basename)) contents.append( schema_class( "Root", schema=rootschema, basename=basename, schemarepr=CodeSnippet("{}._rootschema".format(basename)), ) ) for name in toposort(graph): contents.append(definitions[name].schema_class()) contents.append("") # end with newline return "\n".join(contents) def generate_vega_schema_wrapper(schema_file): """Generate a schema wrapper at the given path.""" # TODO: generate simple tests for each wrapper basename = "VegaSchema" with open(schema_file, encoding="utf8") as f: rootschema = json.load(f) contents = [ HEADER, "from altair.utils.schemapi import SchemaBase, Undefined, _subclasses", LOAD_SCHEMA.format(schemafile="vega-schema.json"), ] contents.append(BASE_SCHEMA.format(basename=basename)) contents.append( schema_class( "Root", schema=rootschema, basename=basename, schemarepr=CodeSnippet("{}._rootschema".format(basename)), ) ) for deflist in ["defs", "refs"]: for name in rootschema[deflist]: defschema = {"$ref": "#/{}/{}".format(deflist, name)} defschema_repr = {"$ref": "#/{}/{}".format(deflist, name)} contents.append( schema_class( get_valid_identifier(name), schema=defschema, schemarepr=defschema_repr, rootschema=rootschema, basename=basename, rootschemarepr=CodeSnippet("Root._schema"), ) ) contents.append("") # end with newline return "\n".join(contents) def generate_vegalite_channel_wrappers(schemafile, version, imports=None): # TODO: generate __all__ for top of file with open(schemafile, encoding="utf8") as f: schema = json.load(f) if imports is None: imports = [ "from . import core", "import pandas as pd", "from altair.utils.schemapi import Undefined", "from altair.utils import parse_shorthand", ] contents = [HEADER] contents.extend(imports) contents.append("") contents.append(CHANNEL_MIXINS) if version == "v2": encoding_def = "EncodingWithFacet" else: encoding_def = "FacetedEncoding" encoding = SchemaInfo(schema["definitions"][encoding_def], rootschema=schema) for prop, propschema in encoding.properties.items(): if propschema.is_reference(): definitions = [propschema.ref] elif propschema.is_anyOf(): definitions = [s.ref for s in propschema.anyOf if s.is_reference()] else: raise ValueError("either $ref or anyOf expected") for definition in definitions: defschema = {"$ref": definition} basename = definition.split("/")[-1] classname = prop[0].upper() + prop[1:] if "Value" in basename: Generator = ValueSchemaGenerator classname += "Value" nodefault = ["value"] else: Generator = FieldSchemaGenerator nodefault = [] defschema = copy.deepcopy(resolve_references(defschema, schema)) # For Encoding field definitions, we patch the schema by adding the # shorthand property. defschema["properties"]["shorthand"] = { "type": "string", "description": "shorthand for field, aggregate, and type", } defschema["required"] = ["shorthand"] gen = Generator( classname=classname, basename=basename, schema=defschema, rootschema=schema, encodingname=prop, nodefault=nodefault, ) contents.append(gen.schema_class()) return "\n".join(contents) MARK_METHOD = ''' def mark_{mark}({def_arglist}): """Set the chart's mark to '{mark}' For information on additional arguments, see :class:`{mark_def}` """ kwds = dict({dict_arglist}) copy = self.copy(deep=False) if any(val is not Undefined for val in kwds.values()): copy.mark = core.{mark_def}(type="{mark}", **kwds) else: copy.mark = "{mark}" return copy ''' def generate_vegalite_mark_mixin(schemafile, markdefs): with open(schemafile, encoding="utf8") as f: schema = json.load(f) imports = ["from altair.utils.schemapi import Undefined", "from . import core"] code = [ "class MarkMethodMixin(object):", ' """A mixin class that defines mark methods"""', ] for mark_enum, mark_def in markdefs.items(): marks = schema["definitions"][mark_enum]["enum"] info = SchemaInfo({"$ref": "#/definitions/" + mark_def}, rootschema=schema) # adapted from SchemaInfo.init_code nonkeyword, required, kwds, invalid_kwds, additional = codegen._get_args(info) required -= {"type"} kwds -= {"type"} def_args = ["self"] + [ "{}=Undefined".format(p) for p in (sorted(required) + sorted(kwds)) ] dict_args = ["{0}={0}".format(p) for p in (sorted(required) + sorted(kwds))] if additional or invalid_kwds: def_args.append("**kwds") dict_args.append("**kwds") for mark in marks: # TODO: only include args relevant to given type? mark_method = MARK_METHOD.format( mark=mark, mark_def=mark_def, def_arglist=indent_arglist(def_args, indent_level=10 + len(mark)), dict_arglist=indent_arglist(dict_args, indent_level=16), ) code.append("\n ".join(mark_method.splitlines())) return imports, "\n".join(code) CONFIG_METHOD = """ @use_signature(core.{classname}) def {method}(self, *args, **kwargs): copy = self.copy(deep=False) copy.config = core.{classname}(*args, **kwargs) return copy """ CONFIG_PROP_METHOD = """ @use_signature(core.{classname}) def configure_{prop}(self, *args, **kwargs): copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() copy.config["{prop}"] = core.{classname}(*args, **kwargs) return copy """ def generate_vegalite_config_mixin(schemafile): imports = ["from . import core", "from altair.utils import use_signature"] code = [ "class ConfigMethodMixin(object):", ' """A mixin class that defines config methods"""', ] with open(schemafile, encoding="utf8") as f: schema = json.load(f) info = SchemaInfo({"$ref": "#/definitions/Config"}, rootschema=schema) # configure() method method = CONFIG_METHOD.format(classname="Config", method="configure") code.append("\n ".join(method.splitlines())) # configure_prop() methods for prop, prop_info in info.properties.items(): classname = prop_info.refname if classname and classname.endswith("Config"): method = CONFIG_PROP_METHOD.format(classname=classname, prop=prop) code.append("\n ".join(method.splitlines())) return imports, "\n".join(code) def vegalite_main(skip_download=False): library = "vega-lite" for version in SCHEMA_VERSION[library]: path = abspath(join(dirname(__file__), "..", "altair", "vegalite", version)) schemapath = os.path.join(path, "schema") schemafile = download_schemafile( library=library, version=version, schemapath=schemapath, skip_download=skip_download, ) # Generate __init__.py file outfile = join(schemapath, "__init__.py") print("Writing {}".format(outfile)) with open(outfile, "w", encoding="utf8") as f: f.write("# flake8: noqa\n") f.write("from .core import *\nfrom .channels import *\n") f.write( "SCHEMA_VERSION = {!r}\n" "".format(SCHEMA_VERSION[library][version]) ) f.write("SCHEMA_URL = {!r}\n" "".format(schema_url(library, version))) # Generate the core schema wrappers outfile = join(schemapath, "core.py") print("Generating\n {}\n ->{}".format(schemafile, outfile)) file_contents = generate_vegalite_schema_wrapper(schemafile) with open(outfile, "w", encoding="utf8") as f: f.write(file_contents) # Generate the channel wrappers outfile = join(schemapath, "channels.py") print("Generating\n {}\n ->{}".format(schemafile, outfile)) code = generate_vegalite_channel_wrappers(schemafile, version=version) with open(outfile, "w", encoding="utf8") as f: f.write(code) # generate the mark mixin if version == "v2": markdefs = {"Mark": "MarkDef"} else: markdefs = { k: k + "Def" for k in ["Mark", "BoxPlot", "ErrorBar", "ErrorBand"] } outfile = join(schemapath, "mixins.py") print("Generating\n {}\n ->{}".format(schemafile, outfile)) mark_imports, mark_mixin = generate_vegalite_mark_mixin(schemafile, markdefs) config_imports, config_mixin = generate_vegalite_config_mixin(schemafile) imports = sorted(set(mark_imports + config_imports)) with open(outfile, "w", encoding="utf8") as f: f.write(HEADER) f.write("\n".join(imports)) f.write("\n\n\n") f.write(mark_mixin) f.write("\n\n\n") f.write(config_mixin) def vega_main(skip_download=False): library = "vega" for version in SCHEMA_VERSION[library]: path = abspath(join(dirname(__file__), "..", "altair", "vega", version)) schemapath = os.path.join(path, "schema") schemafile = download_schemafile( library=library, version=version, schemapath=schemapath, skip_download=skip_download, ) # Generate __init__.py file outfile = join(schemapath, "__init__.py") print("Writing {}".format(outfile)) with open(outfile, "w", encoding="utf8") as f: f.write("# flake8: noqa\n") f.write("from .core import *\n\n") f.write( "SCHEMA_VERSION = {!r}\n" "".format(SCHEMA_VERSION[library][version]) ) f.write("SCHEMA_URL = {!r}\n" "".format(schema_url(library, version))) # Generate the core schema wrappers outfile = join(schemapath, "core.py") print("Generating\n {}\n ->{}".format(schemafile, outfile)) file_contents = generate_vega_schema_wrapper(schemafile) with open(outfile, "w", encoding="utf8") as f: f.write(file_contents) def main(): parser = argparse.ArgumentParser( prog="generate_schema_wrapper.py", description="Generate the Altair package." ) parser.add_argument( "--skip-download", action="store_true", help="skip downloading schema files" ) args = parser.parse_args() copy_schemapi_util() vegalite_main(args.skip_download) vega_main(args.skip_download) generate_api_docs.write_api_file() if __name__ == "__main__": main() altair-4.1.0/tools/schemapi/000077500000000000000000000000001364111050100157115ustar00rootroot00000000000000altair-4.1.0/tools/schemapi/__init__.py000066400000000000000000000003671364111050100200300ustar00rootroot00000000000000""" schemapi: tools for generating Python APIs from JSON schemas """ from .schemapi import SchemaBase, Undefined from .decorator import schemaclass from .utils import SchemaInfo __all__ = ("SchemaBase", "Undefined", "schemaclass", "SchemaInfo") altair-4.1.0/tools/schemapi/codegen.py000066400000000000000000000171271364111050100176770ustar00rootroot00000000000000"""Code generation utilities""" from .utils import SchemaInfo, is_valid_identifier, indent_docstring, indent_arglist import textwrap import re class CodeSnippet(object): """Object whose repr() is a string of code""" def __init__(self, code): self.code = code def __repr__(self): return self.code def _get_args(info): """Return the list of args & kwds for building the __init__ function""" # TODO: - set additional properties correctly # - handle patternProperties etc. required = set() kwds = set() invalid_kwds = set() # TODO: specialize for anyOf/oneOf? if info.is_allOf(): # recursively call function on all children arginfo = [_get_args(child) for child in info.allOf] nonkeyword = all(args[0] for args in arginfo) required = set.union(set(), *(args[1] for args in arginfo)) kwds = set.union(set(), *(args[2] for args in arginfo)) kwds -= required invalid_kwds = set.union(set(), *(args[3] for args in arginfo)) additional = all(args[4] for args in arginfo) elif info.is_empty() or info.is_compound(): nonkeyword = True additional = True elif info.is_value(): nonkeyword = True additional = False elif info.is_object(): invalid_kwds = {p for p in info.required if not is_valid_identifier(p)} | { p for p in info.properties if not is_valid_identifier(p) } required = {p for p in info.required if is_valid_identifier(p)} kwds = {p for p in info.properties if is_valid_identifier(p)} kwds -= required nonkeyword = False additional = True # additional = info.additionalProperties or info.patternProperties else: raise ValueError("Schema object not understood") return (nonkeyword, required, kwds, invalid_kwds, additional) class SchemaGenerator(object): """Class that defines methods for generating code from schemas Parameters ---------- classname : string The name of the class to generate schema : dict The dictionary defining the schema class rootschema : dict (optional) The root schema for the class basename : string or tuple (default: "SchemaBase") The name(s) of the base class(es) to use in the class definition schemarepr : CodeSnippet or object, optional An object whose repr will be used in the place of the explicit schema. This can be useful, for example, when the generated code should reference a predefined schema object. The user must ensure that the schema within the evaluated code is identical to the schema used to generate the code. rootschemarepr : CodeSnippet or object, optional An object whose repr will be used in the place of the explicit root schema. **kwargs : dict Additional keywords for derived classes. """ schema_class_template = textwrap.dedent( ''' class {classname}({basename}): """{docstring}""" _schema = {schema!r} _rootschema = {rootschema!r} {init_code} ''' ) init_template = textwrap.dedent( """ def __init__({arglist}): super({classname}, self).__init__({super_arglist}) """ ).lstrip() def _process_description(self, description): return description def __init__( self, classname, schema, rootschema=None, basename="SchemaBase", schemarepr=None, rootschemarepr=None, nodefault=(), **kwargs, ): self.classname = classname self.schema = schema self.rootschema = rootschema self.basename = basename self.schemarepr = schemarepr self.rootschemarepr = rootschemarepr self.nodefault = nodefault self.kwargs = kwargs def subclasses(self): """Return a list of subclass names, if any.""" info = SchemaInfo(self.schema, self.rootschema) return [child.refname for child in info.anyOf if child.is_reference()] def schema_class(self): """Generate code for a schema class""" rootschema = self.rootschema if self.rootschema is not None else self.schema schemarepr = self.schemarepr if self.schemarepr is not None else self.schema rootschemarepr = self.rootschemarepr if rootschemarepr is None: if rootschema is self.schema: rootschemarepr = CodeSnippet("_schema") else: rootschemarepr = rootschema if isinstance(self.basename, str): basename = self.basename else: basename = ", ".join(self.basename) return self.schema_class_template.format( classname=self.classname, basename=basename, schema=schemarepr, rootschema=rootschemarepr, docstring=self.docstring(indent=4), init_code=self.init_code(indent=4), **self.kwargs, ) def docstring(self, indent=0): # TODO: add a general description at the top, derived from the schema. # for example, a non-object definition should list valid type, enum # values, etc. # TODO: use _get_args here for more information on allOf objects info = SchemaInfo(self.schema, self.rootschema) doc = ["{} schema wrapper".format(self.classname), "", info.medium_description] if info.description: doc += self._process_description( # remove condition description re.sub(r"\n\{\n(\n|.)*\n\}", "", info.description) ).splitlines() if info.properties: nonkeyword, required, kwds, invalid_kwds, additional = _get_args(info) doc += ["", "Attributes", "----------", ""] for prop in sorted(required) + sorted(kwds) + sorted(invalid_kwds): propinfo = info.properties[prop] doc += [ "{} : {}".format(prop, propinfo.short_description), " {}".format(self._process_description(propinfo.description)), ] if len(doc) > 1: doc += [""] return indent_docstring(doc, indent_level=indent, width=100, lstrip=True) def init_code(self, indent=0): """Return code suitablde for the __init__ function of a Schema class""" info = SchemaInfo(self.schema, rootschema=self.rootschema) nonkeyword, required, kwds, invalid_kwds, additional = _get_args(info) nodefault = set(self.nodefault) required -= nodefault kwds -= nodefault args = ["self"] super_args = [] if nodefault: args.extend(sorted(nodefault)) elif nonkeyword: args.append("*args") super_args.append("*args") args.extend("{}=Undefined".format(p) for p in sorted(required) + sorted(kwds)) super_args.extend( "{0}={0}".format(p) for p in sorted(nodefault) + sorted(required) + sorted(kwds) ) if additional: args.append("**kwds") super_args.append("**kwds") arg_indent_level = 9 + indent super_arg_indent_level = 23 + len(self.classname) + indent initfunc = self.init_template.format( classname=self.classname, arglist=indent_arglist(args, indent_level=arg_indent_level), super_arglist=indent_arglist( super_args, indent_level=super_arg_indent_level ), ) if indent: initfunc = ("\n" + indent * " ").join(initfunc.splitlines()) return initfunc altair-4.1.0/tools/schemapi/decorator.py000066400000000000000000000035131364111050100202470ustar00rootroot00000000000000import warnings from . import codegen, SchemaBase, Undefined def schemaclass(*args, init_func=True, docstring=True, property_map=True): """A decorator to add boilerplate to a schema class This will read the _json_schema attribute of a SchemaBase class, and add one or all of three attributes/methods, based on the schema: - An __init__ function - a __doc__ docstring In all cases, if the attribute/method is explicitly defined in the class it will not be overwritten. A simple invocation adds all three attributes/methods: @schemaclass class MySchema(SchemaBase): __schema = {...} Optionally, you can invoke schemaclass with arguments to turn off some of the added behaviors: @schemaclass(init_func=True, docstring=False) class MySchema(SchemaBase): __schema = {...} """ def _decorator(cls, init_func=init_func, docstring=docstring): if not (isinstance(cls, type) and issubclass(cls, SchemaBase)): warnings.warn("class is not an instance of SchemaBase.") name = cls.__name__ gen = codegen.SchemaGenerator( name, schema=cls._schema, rootschema=cls._rootschema ) if init_func and "__init__" not in cls.__dict__: init_code = gen.init_code() globals_ = {name: cls, "Undefined": Undefined} locals_ = {} exec(init_code, globals_, locals_) setattr(cls, "__init__", locals_["__init__"]) if docstring and not cls.__doc__: setattr(cls, "__doc__", gen.docstring()) return cls if len(args) == 0: return _decorator elif len(args) == 1: return _decorator(args[0]) else: raise ValueError( "optional arguments to schemaclass must be " "passed by keyword" ) altair-4.1.0/tools/schemapi/jsonschema-draft04.json000066400000000000000000000104051364111050100222000ustar00rootroot00000000000000{ "id": "http://json-schema.org/draft-04/schema#", "$schema": "http://json-schema.org/draft-04/schema#", "description": "Core schema meta-schema", "definitions": { "schemaArray": { "type": "array", "minItems": 1, "items": { "$ref": "#" } }, "positiveInteger": { "type": "integer", "minimum": 0 }, "positiveIntegerDefault0": { "allOf": [ { "$ref": "#/definitions/positiveInteger" }, { "default": 0 } ] }, "simpleTypes": { "enum": [ "array", "boolean", "integer", "null", "number", "object", "string" ] }, "stringArray": { "type": "array", "items": { "type": "string" }, "minItems": 1, "uniqueItems": true } }, "type": "object", "properties": { "id": { "type": "string" }, "$schema": { "type": "string" }, "title": { "type": "string" }, "description": { "type": "string" }, "default": {}, "multipleOf": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "maximum": { "type": "number" }, "exclusiveMaximum": { "type": "boolean", "default": false }, "minimum": { "type": "number" }, "exclusiveMinimum": { "type": "boolean", "default": false }, "maxLength": { "$ref": "#/definitions/positiveInteger" }, "minLength": { "$ref": "#/definitions/positiveIntegerDefault0" }, "pattern": { "type": "string", "format": "regex" }, "additionalItems": { "anyOf": [ { "type": "boolean" }, { "$ref": "#" } ], "default": {} }, "items": { "anyOf": [ { "$ref": "#" }, { "$ref": "#/definitions/schemaArray" } ], "default": {} }, "maxItems": { "$ref": "#/definitions/positiveInteger" }, "minItems": { "$ref": "#/definitions/positiveIntegerDefault0" }, "uniqueItems": { "type": "boolean", "default": false }, "maxProperties": { "$ref": "#/definitions/positiveInteger" }, "minProperties": { "$ref": "#/definitions/positiveIntegerDefault0" }, "required": { "$ref": "#/definitions/stringArray" }, "additionalProperties": { "anyOf": [ { "type": "boolean" }, { "$ref": "#" } ], "default": {} }, "definitions": { "type": "object", "additionalProperties": { "$ref": "#" }, "default": {} }, "properties": { "type": "object", "additionalProperties": { "$ref": "#" }, "default": {} }, "patternProperties": { "type": "object", "additionalProperties": { "$ref": "#" }, "default": {} }, "dependencies": { "type": "object", "additionalProperties": { "anyOf": [ { "$ref": "#" }, { "$ref": "#/definitions/stringArray" } ] } }, "enum": { "type": "array", "minItems": 1, "uniqueItems": true }, "type": { "anyOf": [ { "$ref": "#/definitions/simpleTypes" }, { "type": "array", "items": { "$ref": "#/definitions/simpleTypes" }, "minItems": 1, "uniqueItems": true } ] }, "format": { "type": "string" }, "allOf": { "$ref": "#/definitions/schemaArray" }, "anyOf": { "$ref": "#/definitions/schemaArray" }, "oneOf": { "$ref": "#/definitions/schemaArray" }, "not": { "$ref": "#" } }, "dependencies": { "exclusiveMaximum": [ "maximum" ], "exclusiveMinimum": [ "minimum" ] }, "default": {} } altair-4.1.0/tools/schemapi/schemapi.py000066400000000000000000000464671364111050100200750ustar00rootroot00000000000000import collections import contextlib import inspect import json import jsonschema import numpy as np import pandas as pd # If DEBUG_MODE is True, then schema objects are converted to dict and # validated at creation time. This slows things down, particularly for # larger specs, but leads to much more useful tracebacks for the user. # Individual schema classes can override this by setting the # class-level _class_is_valid_at_instantiation attribute to False DEBUG_MODE = True def enable_debug_mode(): global DEBUG_MODE DEBUG_MODE = True def disable_debug_mode(): global DEBUG_MODE DEBUG_MODE = True @contextlib.contextmanager def debug_mode(arg): global DEBUG_MODE original = DEBUG_MODE DEBUG_MODE = arg try: yield finally: DEBUG_MODE = original def _subclasses(cls): """Breadth-first sequence of all classes which inherit from cls.""" seen = set() current_set = {cls} while current_set: seen |= current_set current_set = set.union(*(set(cls.__subclasses__()) for cls in current_set)) for cls in current_set - seen: yield cls def _todict(obj, validate, context): """Convert an object to a dict representation.""" if isinstance(obj, SchemaBase): return obj.to_dict(validate=validate, context=context) elif isinstance(obj, (list, tuple, np.ndarray)): return [_todict(v, validate, context) for v in obj] elif isinstance(obj, dict): return { k: _todict(v, validate, context) for k, v in obj.items() if v is not Undefined } elif hasattr(obj, "to_dict"): return obj.to_dict() elif isinstance(obj, np.number): return float(obj) elif isinstance(obj, (pd.Timestamp, np.datetime64)): return pd.Timestamp(obj).isoformat() else: return obj def _resolve_references(schema, root=None): """Resolve schema references.""" resolver = jsonschema.RefResolver.from_schema(root or schema) while "$ref" in schema: with resolver.resolving(schema["$ref"]) as resolved: schema = resolved return schema class SchemaValidationError(jsonschema.ValidationError): """A wrapper for jsonschema.ValidationError with friendlier traceback""" def __init__(self, obj, err): super(SchemaValidationError, self).__init__(**self._get_contents(err)) self.obj = obj @staticmethod def _get_contents(err): """Get a dictionary with the contents of a ValidationError""" try: # works in jsonschema 2.3 or later contents = err._contents() except AttributeError: try: # works in Python >=3.4 spec = inspect.getfullargspec(err.__init__) except AttributeError: # works in Python <3.4 spec = inspect.getargspec(err.__init__) contents = {key: getattr(err, key) for key in spec.args[1:]} return contents def __str__(self): cls = self.obj.__class__ schema_path = ["{}.{}".format(cls.__module__, cls.__name__)] schema_path.extend(self.schema_path) schema_path = "->".join( str(val) for val in schema_path[:-1] if val not in ("properties", "additionalProperties", "patternProperties") ) return """Invalid specification {}, validating {!r} {} """.format( schema_path, self.validator, self.message ) class UndefinedType(object): """A singleton object for marking undefined attributes""" __instance = None def __new__(cls, *args, **kwargs): if not isinstance(cls.__instance, cls): cls.__instance = object.__new__(cls, *args, **kwargs) return cls.__instance def __repr__(self): return "Undefined" Undefined = UndefinedType() class SchemaBase(object): """Base class for schema wrappers. Each derived class should set the _schema class attribute (and optionally the _rootschema class attribute) which is used for validation. """ _schema = None _rootschema = None _class_is_valid_at_instantiation = True def __init__(self, *args, **kwds): # Two valid options for initialization, which should be handled by # derived classes: # - a single arg with no kwds, for, e.g. {'type': 'string'} # - zero args with zero or more kwds for {'type': 'object'} if self._schema is None: raise ValueError( "Cannot instantiate object of type {}: " "_schema class attribute is not defined." "".format(self.__class__) ) if kwds: assert len(args) == 0 else: assert len(args) in [0, 1] # use object.__setattr__ because we override setattr below. object.__setattr__(self, "_args", args) object.__setattr__(self, "_kwds", kwds) if DEBUG_MODE and self._class_is_valid_at_instantiation: self.to_dict(validate=True) def copy(self, deep=True, ignore=()): """Return a copy of the object Parameters ---------- deep : boolean or list, optional If True (default) then return a deep copy of all dict, list, and SchemaBase objects within the object structure. If False, then only copy the top object. If a list or iterable, then only copy the listed attributes. ignore : list, optional A list of keys for which the contents should not be copied, but only stored by reference. """ def _shallow_copy(obj): if isinstance(obj, SchemaBase): return obj.copy(deep=False) elif isinstance(obj, list): return obj[:] elif isinstance(obj, dict): return obj.copy() else: return obj def _deep_copy(obj, ignore=()): if isinstance(obj, SchemaBase): args = tuple(_deep_copy(arg) for arg in obj._args) kwds = { k: (_deep_copy(v, ignore=ignore) if k not in ignore else v) for k, v in obj._kwds.items() } with debug_mode(False): return obj.__class__(*args, **kwds) elif isinstance(obj, list): return [_deep_copy(v, ignore=ignore) for v in obj] elif isinstance(obj, dict): return { k: (_deep_copy(v, ignore=ignore) if k not in ignore else v) for k, v in obj.items() } else: return obj try: deep = list(deep) except TypeError: deep_is_list = False else: deep_is_list = True if deep and not deep_is_list: return _deep_copy(self, ignore=ignore) with debug_mode(False): copy = self.__class__(*self._args, **self._kwds) if deep_is_list: for attr in deep: copy[attr] = _shallow_copy(copy._get(attr)) return copy def _get(self, attr, default=Undefined): """Get an attribute, returning default if not present.""" attr = self._kwds.get(attr, Undefined) if attr is Undefined: attr = default return attr def __getattr__(self, attr): # reminder: getattr is called after the normal lookups if attr == "_kwds": raise AttributeError() if attr in self._kwds: return self._kwds[attr] else: try: _getattr = super(SchemaBase, self).__getattr__ except AttributeError: _getattr = super(SchemaBase, self).__getattribute__ return _getattr(attr) def __setattr__(self, item, val): self._kwds[item] = val def __getitem__(self, item): return self._kwds[item] def __setitem__(self, item, val): self._kwds[item] = val def __repr__(self): if self._kwds: args = ( "{}: {!r}".format(key, val) for key, val in sorted(self._kwds.items()) if val is not Undefined ) args = "\n" + ",\n".join(args) return "{0}({{{1}\n}})".format( self.__class__.__name__, args.replace("\n", "\n ") ) else: return "{}({!r})".format(self.__class__.__name__, self._args[0]) def __eq__(self, other): return ( type(self) is type(other) and self._args == other._args and self._kwds == other._kwds ) def to_dict(self, validate=True, ignore=None, context=None): """Return a dictionary representation of the object Parameters ---------- validate : boolean or string If True (default), then validate the output dictionary against the schema. If "deep" then recursively validate all objects in the spec. This takes much more time, but it results in friendlier tracebacks for large objects. ignore : list A list of keys to ignore. This will *not* passed to child to_dict function calls. context : dict (optional) A context dictionary that will be passed to all child to_dict function calls Returns ------- dct : dictionary The dictionary representation of this object Raises ------ jsonschema.ValidationError : if validate=True and the dict does not conform to the schema """ if context is None: context = {} if ignore is None: ignore = [] sub_validate = "deep" if validate == "deep" else False if self._args and not self._kwds: result = _todict(self._args[0], validate=sub_validate, context=context) elif not self._args: result = _todict( {k: v for k, v in self._kwds.items() if k not in ignore}, validate=sub_validate, context=context, ) else: raise ValueError( "{} instance has both a value and properties : " "cannot serialize to dict".format(self.__class__) ) if validate: try: self.validate(result) except jsonschema.ValidationError as err: raise SchemaValidationError(self, err) return result def to_json( self, validate=True, ignore=[], context={}, indent=2, sort_keys=True, **kwargs ): """Emit the JSON representation for this object as a string. Parameters ---------- validate : boolean or string If True (default), then validate the output dictionary against the schema. If "deep" then recursively validate all objects in the spec. This takes much more time, but it results in friendlier tracebacks for large objects. ignore : list A list of keys to ignore. This will *not* passed to child to_dict function calls. context : dict (optional) A context dictionary that will be passed to all child to_dict function calls indent : integer, default 2 the number of spaces of indentation to use sort_keys : boolean, default True if True, sort keys in the output **kwargs Additional keyword arguments are passed to ``json.dumps()`` Returns ------- spec : string The JSON specification of the chart object. """ dct = self.to_dict(validate=validate, ignore=ignore, context=context) return json.dumps(dct, indent=indent, sort_keys=sort_keys, **kwargs) @classmethod def _default_wrapper_classes(cls): """Return the set of classes used within cls.from_dict()""" return _subclasses(SchemaBase) @classmethod def from_dict(cls, dct, validate=True, _wrapper_classes=None): """Construct class from a dictionary representation Parameters ---------- dct : dictionary The dict from which to construct the class validate : boolean If True (default), then validate the input against the schema. _wrapper_classes : list (optional) The set of SchemaBase classes to use when constructing wrappers of the dict inputs. If not specified, the result of cls._default_wrapper_classes will be used. Returns ------- obj : Schema object The wrapped schema Raises ------ jsonschema.ValidationError : if validate=True and dct does not conform to the schema """ if validate: cls.validate(dct) if _wrapper_classes is None: _wrapper_classes = cls._default_wrapper_classes() converter = _FromDict(_wrapper_classes) return converter.from_dict(dct, cls) @classmethod def from_json(cls, json_string, validate=True, **kwargs): """Instantiate the object from a valid JSON string Parameters ---------- json_string : string The string containing a valid JSON chart specification. validate : boolean If True (default), then validate the input against the schema. **kwargs : Additional keyword arguments are passed to json.loads Returns ------- chart : Chart object The altair Chart object built from the specification. """ dct = json.loads(json_string, **kwargs) return cls.from_dict(dct, validate=validate) @classmethod def validate(cls, instance, schema=None): """ Validate the instance against the class schema in the context of the rootschema. """ if schema is None: schema = cls._schema resolver = jsonschema.RefResolver.from_schema(cls._rootschema or cls._schema) return jsonschema.validate(instance, schema, resolver=resolver) @classmethod def resolve_references(cls, schema=None): """Resolve references in the context of this object's schema or root schema.""" return _resolve_references( schema=(schema or cls._schema), root=(cls._rootschema or cls._schema or schema), ) @classmethod def validate_property(cls, name, value, schema=None): """ Validate a property against property schema in the context of the rootschema """ value = _todict(value, validate=False, context={}) props = cls.resolve_references(schema or cls._schema).get("properties", {}) resolver = jsonschema.RefResolver.from_schema(cls._rootschema or cls._schema) return jsonschema.validate(value, props.get(name, {}), resolver=resolver) def __dir__(self): return list(self._kwds.keys()) class _FromDict(object): """Class used to construct SchemaBase class hierarchies from a dict The primary purpose of using this class is to be able to build a hash table that maps schemas to their wrapper classes. The candidate classes are specified in the ``class_list`` argument to the constructor. """ _hash_exclude_keys = ("definitions", "title", "description", "$schema", "id") def __init__(self, class_list): # Create a mapping of a schema hash to a list of matching classes # This lets us quickly determine the correct class to construct self.class_dict = collections.defaultdict(list) for cls in class_list: if cls._schema is not None: self.class_dict[self.hash_schema(cls._schema)].append(cls) @classmethod def hash_schema(cls, schema, use_json=True): """ Compute a python hash for a nested dictionary which properly handles dicts, lists, sets, and tuples. At the top level, the function excludes from the hashed schema all keys listed in `exclude_keys`. This implements two methods: one based on conversion to JSON, and one based on recursive conversions of unhashable to hashable types; the former seems to be slightly faster in several benchmarks. """ if cls._hash_exclude_keys and isinstance(schema, dict): schema = { key: val for key, val in schema.items() if key not in cls._hash_exclude_keys } if use_json: s = json.dumps(schema, sort_keys=True) return hash(s) else: def _freeze(val): if isinstance(val, dict): return frozenset((k, _freeze(v)) for k, v in val.items()) elif isinstance(val, set): return frozenset(map(_freeze, val)) elif isinstance(val, list) or isinstance(val, tuple): return tuple(map(_freeze, val)) else: return val return hash(_freeze(schema)) def from_dict(self, dct, cls=None, schema=None, rootschema=None): """Construct an object from a dict representation""" if (schema is None) == (cls is None): raise ValueError("Must provide either cls or schema, but not both.") if schema is None: schema = schema or cls._schema rootschema = rootschema or cls._rootschema rootschema = rootschema or schema def _passthrough(*args, **kwds): return args[0] if args else kwds if isinstance(dct, SchemaBase): return dct if cls is None: # If there are multiple matches, we use the first one in the dict. # Our class dict is constructed breadth-first from top to bottom, # so the first class that matches is the most general match. matches = self.class_dict[self.hash_schema(schema)] cls = matches[0] if matches else _passthrough schema = _resolve_references(schema, rootschema) if "anyOf" in schema or "oneOf" in schema: schemas = schema.get("anyOf", []) + schema.get("oneOf", []) for possible_schema in schemas: resolver = jsonschema.RefResolver.from_schema(rootschema) try: jsonschema.validate(dct, possible_schema, resolver=resolver) except jsonschema.ValidationError: continue else: return self.from_dict( dct, schema=possible_schema, rootschema=rootschema, ) if isinstance(dct, dict): # TODO: handle schemas for additionalProperties/patternProperties props = schema.get("properties", {}) kwds = {} for key, val in dct.items(): if key in props: val = self.from_dict(val, schema=props[key], rootschema=rootschema) kwds[key] = val return cls(**kwds) elif isinstance(dct, list): item_schema = schema.get("items", {}) dct = [ self.from_dict(val, schema=item_schema, rootschema=rootschema) for val in dct ] return cls(dct) else: return cls(dct) altair-4.1.0/tools/schemapi/tests/000077500000000000000000000000001364111050100170535ustar00rootroot00000000000000altair-4.1.0/tools/schemapi/tests/__init__.py000066400000000000000000000000001364111050100211520ustar00rootroot00000000000000altair-4.1.0/tools/schemapi/tests/test_decorator.py000066400000000000000000000041751364111050100224550ustar00rootroot00000000000000import inspect from .. import SchemaBase, Undefined, schemaclass @schemaclass class MySchema(SchemaBase): _schema = { "definitions": { "StringMapping": { "type": "object", "additionalProperties": {"type": "string"}, }, "StringArray": {"type": "array", "items": {"type": "string"}}, }, "properties": { "a": {"$ref": "#/definitions/StringMapping"}, "a2": {"type": "object", "additionalProperties": {"type": "number"}}, "b": {"$ref": "#/definitions/StringArray"}, "b2": {"type": "array", "items": {"type": "number"}}, "c": {"type": ["string", "number"]}, "d": { "anyOf": [ {"$ref": "#/definitions/StringMapping"}, {"$ref": "#/definitions/StringArray"}, ] }, }, "required": ["a", "b"], } @schemaclass class StringArray(SchemaBase): _schema = MySchema._schema["definitions"]["StringArray"] _rootschema = MySchema._schema def test_myschema_decorator(): myschema = MySchema({"foo": "bar"}, ["foo", "bar"]) assert myschema.to_dict() == {"a": {"foo": "bar"}, "b": ["foo", "bar"]} myschema = MySchema.from_dict({"a": {"foo": "bar"}, "b": ["foo", "bar"]}) assert myschema.to_dict() == {"a": {"foo": "bar"}, "b": ["foo", "bar"]} assert MySchema.__doc__.startswith("MySchema schema wrapper") argspec = inspect.getfullargspec(MySchema.__init__) assert argspec.args == ["self", "a", "b", "a2", "b2", "c", "d"] assert argspec.defaults == 6 * (Undefined,) assert argspec.varargs is None assert argspec.varkw == "kwds" def test_stringarray_decorator(): arr = StringArray(["a", "b", "c"]) assert arr.to_dict() == ["a", "b", "c"] arr = StringArray.from_dict(["a", "b", "c"]) assert arr.to_dict() == ["a", "b", "c"] assert arr.__doc__.startswith("StringArray schema wrapper") argspec = inspect.getfullargspec(StringArray.__init__) assert argspec.args == ["self"] assert argspec.varargs == "args" assert argspec.varkw is None altair-4.1.0/tools/schemapi/tests/test_schemapi.py000066400000000000000000000220641364111050100222610ustar00rootroot00000000000000import copy import io import json import jsonschema import pickle import pytest import numpy as np from ..schemapi import ( UndefinedType, SchemaBase, Undefined, _FromDict, SchemaValidationError, ) # Make tests inherit from _TestSchema, so that when we test from_dict it won't # try to use SchemaBase objects defined elsewhere as wrappers. class _TestSchema(SchemaBase): @classmethod def _default_wrapper_classes(cls): return _TestSchema.__subclasses__() class MySchema(_TestSchema): _schema = { "definitions": { "StringMapping": { "type": "object", "additionalProperties": {"type": "string"}, }, "StringArray": {"type": "array", "items": {"type": "string"}}, }, "properties": { "a": {"$ref": "#/definitions/StringMapping"}, "a2": {"type": "object", "additionalProperties": {"type": "number"}}, "b": {"$ref": "#/definitions/StringArray"}, "b2": {"type": "array", "items": {"type": "number"}}, "c": {"type": ["string", "number"]}, "d": { "anyOf": [ {"$ref": "#/definitions/StringMapping"}, {"$ref": "#/definitions/StringArray"}, ] }, "e": {"items": [{"type": "string"}, {"type": "string"}]}, }, } class StringMapping(_TestSchema): _schema = {"$ref": "#/definitions/StringMapping"} _rootschema = MySchema._schema class StringArray(_TestSchema): _schema = {"$ref": "#/definitions/StringArray"} _rootschema = MySchema._schema class Derived(_TestSchema): _schema = { "definitions": { "Foo": {"type": "object", "properties": {"d": {"type": "string"}}}, "Bar": {"type": "string", "enum": ["A", "B"]}, }, "type": "object", "additionalProperties": False, "properties": { "a": {"type": "integer"}, "b": {"type": "string"}, "c": {"$ref": "#/definitions/Foo"}, }, } class Foo(_TestSchema): _schema = {"$ref": "#/definitions/Foo"} _rootschema = Derived._schema class Bar(_TestSchema): _schema = {"$ref": "#/definitions/Bar"} _rootschema = Derived._schema class SimpleUnion(_TestSchema): _schema = {"anyOf": [{"type": "integer"}, {"type": "string"}]} class DefinitionUnion(_TestSchema): _schema = {"anyOf": [{"$ref": "#/definitions/Foo"}, {"$ref": "#/definitions/Bar"}]} _rootschema = Derived._schema class SimpleArray(_TestSchema): _schema = { "type": "array", "items": {"anyOf": [{"type": "integer"}, {"type": "string"}]}, } class InvalidProperties(_TestSchema): _schema = { "type": "object", "properties": {"for": {}, "as": {}, "vega-lite": {}, "$schema": {}}, } def test_construct_multifaceted_schema(): dct = { "a": {"foo": "bar"}, "a2": {"foo": 42}, "b": ["a", "b", "c"], "b2": [1, 2, 3], "c": 42, "d": ["x", "y", "z"], "e": ["a", "b"], } myschema = MySchema.from_dict(dct) assert myschema.to_dict() == dct myschema2 = MySchema(**dct) assert myschema2.to_dict() == dct assert isinstance(myschema.a, StringMapping) assert isinstance(myschema.a2, dict) assert isinstance(myschema.b, StringArray) assert isinstance(myschema.b2, list) assert isinstance(myschema.d, StringArray) def test_schema_cases(): assert Derived(a=4, b="yo").to_dict() == {"a": 4, "b": "yo"} assert Derived(a=4, c={"d": "hey"}).to_dict() == {"a": 4, "c": {"d": "hey"}} assert Derived(a=4, b="5", c=Foo(d="val")).to_dict() == { "a": 4, "b": "5", "c": {"d": "val"}, } assert Foo(d="hello", f=4).to_dict() == {"d": "hello", "f": 4} assert Derived().to_dict() == {} assert Foo().to_dict() == {} with pytest.raises(jsonschema.ValidationError): # a needs to be an integer Derived(a="yo").to_dict() with pytest.raises(jsonschema.ValidationError): # Foo.d needs to be a string Derived(c=Foo(4)).to_dict() with pytest.raises(jsonschema.ValidationError): # no additional properties allowed Derived(foo="bar").to_dict() def test_round_trip(): D = {"a": 4, "b": "yo"} assert Derived.from_dict(D).to_dict() == D D = {"a": 4, "c": {"d": "hey"}} assert Derived.from_dict(D).to_dict() == D D = {"a": 4, "b": "5", "c": {"d": "val"}} assert Derived.from_dict(D).to_dict() == D D = {"d": "hello", "f": 4} assert Foo.from_dict(D).to_dict() == D def test_from_dict(): D = {"a": 4, "b": "5", "c": {"d": "val"}} obj = Derived.from_dict(D) assert obj.a == 4 assert obj.b == "5" assert isinstance(obj.c, Foo) def test_simple_type(): assert SimpleUnion(4).to_dict() == 4 def test_simple_array(): assert SimpleArray([4, 5, "six"]).to_dict() == [4, 5, "six"] assert SimpleArray.from_dict(list("abc")).to_dict() == list("abc") def test_definition_union(): obj = DefinitionUnion.from_dict("A") assert isinstance(obj, Bar) assert obj.to_dict() == "A" obj = DefinitionUnion.from_dict("B") assert isinstance(obj, Bar) assert obj.to_dict() == "B" obj = DefinitionUnion.from_dict({"d": "yo"}) assert isinstance(obj, Foo) assert obj.to_dict() == {"d": "yo"} def test_invalid_properties(): dct = {"for": 2, "as": 3, "vega-lite": 4, "$schema": 5} invalid = InvalidProperties.from_dict(dct) assert invalid["for"] == 2 assert invalid["as"] == 3 assert invalid["vega-lite"] == 4 assert invalid["$schema"] == 5 assert invalid.to_dict() == dct def test_undefined_singleton(): assert Undefined is UndefinedType() @pytest.fixture def dct(): return { "a": {"foo": "bar"}, "a2": {"foo": 42}, "b": ["a", "b", "c"], "b2": [1, 2, 3], "c": 42, "d": ["x", "y", "z"], } def test_copy_method(dct): myschema = MySchema.from_dict(dct) # Make sure copy is deep copy = myschema.copy(deep=True) copy["a"]["foo"] = "new value" copy["b"] = ["A", "B", "C"] copy["c"] = 164 assert myschema.to_dict() == dct # If we ignore a value, changing the copy changes the original copy = myschema.copy(deep=True, ignore=["a"]) copy["a"]["foo"] = "new value" copy["b"] = ["A", "B", "C"] copy["c"] = 164 mydct = myschema.to_dict() assert mydct["a"]["foo"] == "new value" assert mydct["b"][0] == dct["b"][0] assert mydct["c"] == dct["c"] # If copy is not deep, then changing copy below top level changes original copy = myschema.copy(deep=False) copy["a"]["foo"] = "baz" copy["b"] = ["A", "B", "C"] copy["c"] = 164 mydct = myschema.to_dict() assert mydct["a"]["foo"] == "baz" assert mydct["b"] == dct["b"] assert mydct["c"] == dct["c"] def test_copy_module(dct): myschema = MySchema.from_dict(dct) cp = copy.deepcopy(myschema) cp["a"]["foo"] = "new value" cp["b"] = ["A", "B", "C"] cp["c"] = 164 assert myschema.to_dict() == dct def test_attribute_error(): m = MySchema() with pytest.raises(AttributeError) as err: m.invalid_attribute assert str(err.value) == ( "'MySchema' object has no attribute " "'invalid_attribute'" ) def test_to_from_json(dct): json_str = MySchema.from_dict(dct).to_json() new_dct = MySchema.from_json(json_str).to_dict() assert new_dct == dct def test_to_from_pickle(dct): myschema = MySchema.from_dict(dct) output = io.BytesIO() pickle.dump(myschema, output) output.seek(0) myschema_new = pickle.load(output) assert myschema_new.to_dict() == dct def test_class_with_no_schema(): class BadSchema(SchemaBase): pass with pytest.raises(ValueError) as err: BadSchema(4) assert str(err.value).startswith("Cannot instantiate object") @pytest.mark.parametrize("use_json", [True, False]) def test_hash_schema(use_json): classes = _TestSchema._default_wrapper_classes() for cls in classes: hsh1 = _FromDict.hash_schema(cls._schema, use_json=use_json) hsh2 = _FromDict.hash_schema(cls._schema, use_json=use_json) assert hsh1 == hsh2 assert hash(hsh1) == hash(hsh2) def test_schema_validation_error(): try: MySchema(a={"foo": 4}) the_err = None except jsonschema.ValidationError as err: the_err = err assert isinstance(the_err, SchemaValidationError) message = str(the_err) assert message.startswith("Invalid specification") assert "test_schemapi.MySchema->a" in message assert "validating {!r}".format(the_err.validator) in message assert the_err.message in message def test_serialize_numpy_types(): m = MySchema( a={"date": np.datetime64("2019-01-01")}, a2={"int64": np.int64(1), "float64": np.float64(2)}, b2=np.arange(4), ) out = m.to_json() dct = json.loads(out) assert dct == { "a": {"date": "2019-01-01T00:00:00"}, "a2": {"int64": 1, "float64": 2}, "b2": [0, 1, 2, 3], } altair-4.1.0/tools/schemapi/tests/test_utils.py000066400000000000000000000027641364111050100216350ustar00rootroot00000000000000import pytest from ..utils import get_valid_identifier, SchemaInfo from ..schemapi import _FromDict @pytest.fixture def refschema(): return { "$ref": "#/definitions/Foo", "definitions": { "Foo": {"$ref": "#/definitions/Bar"}, "Bar": {"$ref": "#/definitions/Baz"}, "Baz": {"type": "string"}, }, } def test_get_valid_identifier(): assert get_valid_identifier("$schema") == "schema" assert get_valid_identifier("$ref") == "ref" assert get_valid_identifier("foo-bar") == "foobar" assert get_valid_identifier("$as") == "as_" assert get_valid_identifier("for") == "for_" assert get_valid_identifier("--") == "_" @pytest.mark.parametrize("use_json", [True, False]) def test_hash_schema(refschema, use_json): copy = refschema.copy() copy["description"] = "A schema" copy["title"] = "Schema to test" assert _FromDict.hash_schema(refschema) == _FromDict.hash_schema(copy) @pytest.mark.parametrize( "schema, expected", [ ({}, "Any"), ({"type": "number"}, "float"), ({"enum": ["A", "B", "C"]}, "enum('A', 'B', 'C')"), ({"type": "array"}, "List(Any)"), ({"type": "object"}, "Mapping(required=[])"), ( {"type": "string", "not": {"enum": ["A", "B", "C"]}}, "not enum('A', 'B', 'C')", ), ], ) def test_medium_description(schema, expected): description = SchemaInfo(schema).medium_description assert description == expected altair-4.1.0/tools/schemapi/utils.py000066400000000000000000000325551364111050100174350ustar00rootroot00000000000000"""Utilities for working with schemas""" import json import keyword import pkgutil import re import textwrap import urllib import jsonschema EXCLUDE_KEYS = ("definitions", "title", "description", "$schema", "id") def load_metaschema(): schema = pkgutil.get_data("schemapi", "jsonschema-draft04.json") schema = schema.decode() return json.loads(schema) def resolve_references(schema, root=None): """Resolve References within a JSON schema""" resolver = jsonschema.RefResolver.from_schema(root or schema) while "$ref" in schema: with resolver.resolving(schema["$ref"]) as resolved: schema = resolved return schema def get_valid_identifier( prop, replacement_character="", allow_unicode=False, url_decode=True ): """Given a string property, generate a valid Python identifier Parameters ---------- prop: string Name of property to decode. replacement_character: string, default '' The character to replace invalid characters with. allow_unicode: boolean, default False If True, then allow Python 3-style unicode identifiers. url_decode: boolean, default True If True, decode URL characters in identifier names. Examples -------- >>> get_valid_identifier('my-var') 'myvar' >>> get_valid_identifier('if') 'if_' >>> get_valid_identifier('$schema', '_') '_schema' >>> get_valid_identifier('$*#$') '_' >>> get_valid_identifier("Name%3Cstring%3E") 'Namestring' """ # Decode URL characters. if url_decode: prop = urllib.parse.unquote(prop) # First substitute-out all non-valid characters. flags = re.UNICODE if allow_unicode else re.ASCII valid = re.sub(r"\W", replacement_character, prop, flags=flags) # If nothing is left, use just an underscore if not valid: valid = "_" # first character must be a non-digit. Prefix with an underscore # if needed if re.match(r"^[\d\W]", valid): valid = "_" + valid # if the result is a reserved keyword, then add an underscore at the end if keyword.iskeyword(valid): valid += "_" return valid def is_valid_identifier(var, allow_unicode=False): """Return true if var contains a valid Python identifier Parameters ---------- val : string identifier to check allow_unicode : bool (default: False) if True, then allow Python 3 style unicode identifiers. """ flags = re.UNICODE if allow_unicode else re.ASCII is_valid = re.match(r"^[^\d\W]\w*\Z", var, flags) return is_valid and not keyword.iskeyword(var) class SchemaProperties(object): """A wrapper for properties within a schema""" def __init__(self, properties, schema, rootschema=None): self._properties = properties self._schema = schema self._rootschema = rootschema or schema def __bool__(self): return bool(self._properties) def __dir__(self): return list(self._properties.keys()) def __getattr__(self, attr): try: return self[attr] except KeyError: return super(SchemaProperties, self).__getattr__(attr) def __getitem__(self, attr): dct = self._properties[attr] if "definitions" in self._schema and "definitions" not in dct: dct = dict(definitions=self._schema["definitions"], **dct) return SchemaInfo(dct, self._rootschema) def __iter__(self): return iter(self._properties) def items(self): return ((key, self[key]) for key in self) def keys(self): return self._properties.keys() def values(self): return (self[key] for key in self) class SchemaInfo(object): """A wrapper for inspecting a JSON schema""" def __init__(self, schema, rootschema=None, validate=False): if hasattr(schema, "_schema"): if hasattr(schema, "_rootschema"): schema, rootschema = schema._schema, schema._rootschema else: schema, rootschema = schema._schema, schema._schema elif not rootschema: rootschema = schema if validate: metaschema = load_metaschema() jsonschema.validate(schema, metaschema) jsonschema.validate(rootschema, metaschema) self.raw_schema = schema self.rootschema = rootschema self.schema = resolve_references(schema, rootschema) def child(self, schema): return self.__class__(schema, rootschema=self.rootschema) def __repr__(self): keys = [] for key in sorted(self.schema.keys()): val = self.schema[key] rval = repr(val).replace("\n", "") if len(rval) > 30: rval = rval[:30] + "..." if key == "definitions": rval = "{...}" elif key == "properties": rval = "{\n " + "\n ".join(sorted(map(repr, val))) + "\n }" keys.append('"{}": {}'.format(key, rval)) return "SchemaInfo({\n " + "\n ".join(keys) + "\n})" @property def title(self): if self.is_reference(): return get_valid_identifier(self.refname) else: return "" @property def short_description(self): if self.title: # use RST syntax for generated sphinx docs return ":class:`{}`".format(self.title) else: return self.medium_description @property def medium_description(self): _simple_types = { "string": "string", "number": "float", "integer": "integer", "object": "mapping", "boolean": "boolean", "array": "list", "null": "None", } if self.is_list(): return "[{0}]".format( ", ".join(self.child(s).short_description for s in self.schema) ) elif self.is_empty(): return "Any" elif self.is_enum(): return "enum({})".format(", ".join(map(repr, self.enum))) elif self.is_anyOf(): return "anyOf({})".format( ", ".join(s.short_description for s in self.anyOf) ) elif self.is_oneOf(): return "oneOf({})".format( ", ".join(s.short_description for s in self.oneOf) ) elif self.is_allOf(): return "allOf({})".format( ", ".join(s.short_description for s in self.allOf) ) elif self.is_not(): return "not {}".format(self.not_.short_description) elif isinstance(self.type, list): options = [] subschema = SchemaInfo(dict(**self.schema)) for typ_ in self.type: subschema.schema["type"] = typ_ options.append(subschema.short_description) return "anyOf({})".format(", ".join(options)) elif self.is_object(): return "Mapping(required=[{}])".format(", ".join(self.required)) elif self.is_array(): return "List({})".format(self.child(self.items).short_description) elif self.type in _simple_types: return _simple_types[self.type] elif not self.type: import warnings warnings.warn("no short_description for schema\n{}" "".format(self.schema)) return "any" @property def long_description(self): # TODO return "Long description including arguments and their types" @property def properties(self): return SchemaProperties( self.schema.get("properties", {}), self.schema, self.rootschema ) @property def definitions(self): return SchemaProperties( self.schema.get("definitions", {}), self.schema, self.rootschema ) @property def required(self): return self.schema.get("required", []) @property def patternProperties(self): return self.schema.get("patternProperties", {}) @property def additionalProperties(self): return self.schema.get("additionalProperties", True) @property def type(self): return self.schema.get("type", None) @property def anyOf(self): return [self.child(s) for s in self.schema.get("anyOf", [])] @property def oneOf(self): return [self.child(s) for s in self.schema.get("oneOf", [])] @property def allOf(self): return [self.child(s) for s in self.schema.get("allOf", [])] @property def not_(self): return self.child(self.schema.get("not", {})) @property def items(self): return self.schema.get("items", {}) @property def enum(self): return self.schema.get("enum", []) @property def refname(self): return self.raw_schema.get("$ref", "#/").split("/")[-1] @property def ref(self): return self.raw_schema.get("$ref", None) @property def description(self): return self.raw_schema.get("description", self.schema.get("description", "")) def is_list(self): return isinstance(self.schema, list) def is_reference(self): return "$ref" in self.raw_schema def is_enum(self): return "enum" in self.schema def is_empty(self): return not (set(self.schema.keys()) - set(EXCLUDE_KEYS)) def is_compound(self): return any(key in self.schema for key in ["anyOf", "allOf", "oneOf"]) def is_anyOf(self): return "anyOf" in self.schema def is_allOf(self): return "allOf" in self.schema def is_oneOf(self): return "oneOf" in self.schema def is_not(self): return "not" in self.schema def is_object(self): if self.type == "object": return True elif self.type is not None: return False elif ( self.properties or self.required or self.patternProperties or self.additionalProperties ): return True else: raise ValueError("Unclear whether schema.is_object() is True") def is_value(self): return not self.is_object() def is_array(self): return self.type == "array" def schema_type(self): if self.is_empty(): return "empty" elif self.is_compound(): for key in ["anyOf", "oneOf", "allOf"]: if key in self.schema: return key elif self.is_object(): return "object" elif self.is_array(): return "array" elif self.is_value(): return "value" else: raise ValueError("Unknown type with keys {}".format(self.schema)) def property_name_map(self): """ Return a mapping of schema property names to valid Python attribute names Only properties which are not valid Python identifiers will be included in the dictionary. """ pairs = [(prop, get_valid_identifier(prop)) for prop in self.properties] return {prop: val for prop, val in pairs if prop != val} def indent_arglist(args, indent_level, width=100, lstrip=True): """Indent an argument list for use in generated code""" wrapper = textwrap.TextWrapper( width=width, initial_indent=indent_level * " ", subsequent_indent=indent_level * " ", break_long_words=False, ) wrapped = "\n".join(wrapper.wrap(", ".join(args))) if lstrip: wrapped = wrapped.lstrip() return wrapped def indent_docstring(lines, indent_level, width=100, lstrip=True): """Indent a docstring for use in generated code""" final_lines = [] for i, line in enumerate(lines): stripped = line.lstrip() if stripped: leading_space = len(line) - len(stripped) indent = indent_level + leading_space wrapper = textwrap.TextWrapper( width=width - indent, initial_indent=indent * " ", subsequent_indent=indent * " ", break_long_words=False, break_on_hyphens=False, drop_whitespace=True, ) list_wrapper = textwrap.TextWrapper( width=width - indent, initial_indent=indent * " " + "* ", subsequent_indent=indent * " " + " ", break_long_words=False, break_on_hyphens=False, drop_whitespace=True, ) for line in stripped.split("\n"): if line == "": final_lines.append("") elif line.startswith("* "): final_lines.extend(list_wrapper.wrap(line[2:])) else: final_lines.extend(wrapper.wrap(line.lstrip())) # If this is the last line, put in an indent elif i + 1 == len(lines): final_lines.append(indent_level * " ") # If it's not the last line, this is a blank line that should not indent. else: final_lines.append("") # Remove any trailing whitespaces on the right side stripped_lines = [] for i, line in enumerate(final_lines): if i + 1 == len(final_lines): stripped_lines.append(line) else: stripped_lines.append(line.rstrip()) # Join it all together wrapped = "\n".join(stripped_lines) if lstrip: wrapped = wrapped.lstrip() return wrapped