From d6b62f2485de3c058103e96f1002e721844f40c4 Mon Sep 17 00:00:00 2001 From: CJ Grady Date: Wed, 3 Apr 2019 16:44:25 -0500 Subject: [PATCH] First commit of sphinx docs and some community tools --- CODE_OF_CONDUCT.md | 76 + CONTRIBUTING.md | 64 + README.md | 32 +- _sphinx_config/Makefile | 20 + _sphinx_config/conf.py | 177 + _sphinx_config/index.rst | 26 + _sphinx_config/pages/contributing.rst | 7 + _sphinx_config/pages/installation.rst | 9 + _sphinx_config/source/lm_client.apis.rst | 174 + _sphinx_config/source/lm_client.client.rst | 22 + _sphinx_config/source/lm_client.common.rst | 38 + _sphinx_config/source/lm_client.rst | 19 + _sphinx_config/source/modules.rst | 7 + docs/index.html | 1 + docs/sphinx/.buildinfo | 4 + docs/sphinx/.doctrees/environment.pickle | Bin 0 -> 1915023 bytes docs/sphinx/.doctrees/index.doctree | Bin 0 -> 5911 bytes .../.doctrees/pages/contributing.doctree | Bin 0 -> 3843 bytes .../.doctrees/pages/installation.doctree | Bin 0 -> 3110 bytes .../.doctrees/source/lm_client.apis.doctree | Bin 0 -> 383735 bytes .../.doctrees/source/lm_client.client.doctree | Bin 0 -> 34213 bytes .../.doctrees/source/lm_client.common.doctree | Bin 0 -> 172997 bytes .../sphinx/.doctrees/source/lm_client.doctree | Bin 0 -> 3850 bytes docs/sphinx/.doctrees/source/modules.doctree | Bin 0 -> 2829 bytes docs/sphinx/.nojekyll | 0 docs/sphinx/_modules/index.html | 109 + docs/sphinx/_modules/lm_client/apis/auth.html | 125 + .../lm_client/apis/biotaphy_points.html | 107 + .../_modules/lm_client/apis/env_layer.html | 164 + .../_modules/lm_client/apis/gbif_parser.html | 107 + .../_modules/lm_client/apis/global_pam.html | 149 + .../_modules/lm_client/apis/gridset.html | 194 + docs/sphinx/_modules/lm_client/apis/hint.html | 109 + .../sphinx/_modules/lm_client/apis/layer.html | 156 + .../_modules/lm_client/apis/occurrence.html | 204 + docs/sphinx/_modules/lm_client/apis/ogc.html | 117 + .../_modules/lm_client/apis/open_tree.html | 107 + .../_modules/lm_client/apis/raw_solr.html | 109 + .../_modules/lm_client/apis/scenario.html | 152 + .../lm_client/apis/scenario_package.html | 131 + .../_modules/lm_client/apis/sdm_project.html | 168 + .../_modules/lm_client/apis/shapegrid.html | 247 + .../_modules/lm_client/apis/snippet.html | 133 + .../_modules/lm_client/apis/taxonomy.html | 116 + docs/sphinx/_modules/lm_client/apis/tree.html | 199 + .../_modules/lm_client/apis/upload.html | 127 + .../_modules/lm_client/client/client.html | 307 + .../lm_client/common/api_service.html | 274 + .../_modules/lm_client/common/constants.html | 198 + .../_modules/lm_client/common/exceptions.html | 162 + docs/sphinx/_sources/index.rst.txt | 26 + .../_sources/pages/contributing.rst.txt | 7 + .../_sources/pages/installation.rst.txt | 9 + .../_sources/source/lm_client.apis.rst.txt | 174 + .../_sources/source/lm_client.client.rst.txt | 22 + .../_sources/source/lm_client.common.rst.txt | 38 + docs/sphinx/_sources/source/lm_client.rst.txt | 19 + docs/sphinx/_sources/source/modules.rst.txt | 7 + docs/sphinx/_static/ajax-loader.gif | Bin 0 -> 673 bytes docs/sphinx/_static/basic.css | 648 + docs/sphinx/_static/classic.css | 261 + docs/sphinx/_static/comment-bright.png | Bin 0 -> 756 bytes docs/sphinx/_static/comment-close.png | Bin 0 -> 829 bytes docs/sphinx/_static/comment.png | Bin 0 -> 641 bytes docs/sphinx/_static/doctools.js | 311 + docs/sphinx/_static/down-pressed.png | Bin 0 -> 222 bytes docs/sphinx/_static/down.png | Bin 0 -> 202 bytes docs/sphinx/_static/file.png | Bin 0 -> 286 bytes docs/sphinx/_static/jquery.js | 10253 ++++++++++++++++ docs/sphinx/_static/minus.png | Bin 0 -> 90 bytes docs/sphinx/_static/plus.png | Bin 0 -> 90 bytes docs/sphinx/_static/pygments.css | 69 + docs/sphinx/_static/searchtools.js | 761 ++ docs/sphinx/_static/sidebar.js | 159 + docs/sphinx/_static/underscore.js | 1548 +++ docs/sphinx/_static/up-pressed.png | Bin 0 -> 214 bytes docs/sphinx/_static/up.png | Bin 0 -> 203 bytes docs/sphinx/_static/websupport.js | 808 ++ docs/sphinx/genindex.html | 763 ++ docs/sphinx/index.html | 114 + docs/sphinx/objects.inv | Bin 0 -> 2160 bytes docs/sphinx/pages/contributing.html | 101 + docs/sphinx/pages/installation.html | 102 + docs/sphinx/py-modindex.html | 240 + docs/sphinx/search.html | 104 + docs/sphinx/searchindex.js | 1 + docs/sphinx/source/lm_client.apis.html | 1130 ++ docs/sphinx/source/lm_client.client.html | 238 + docs/sphinx/source/lm_client.common.html | 755 ++ docs/sphinx/source/lm_client.html | 136 + docs/sphinx/source/modules.html | 137 + 91 files changed, 23586 insertions(+), 2 deletions(-) create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 _sphinx_config/Makefile create mode 100644 _sphinx_config/conf.py create mode 100644 _sphinx_config/index.rst create mode 100644 _sphinx_config/pages/contributing.rst create mode 100644 _sphinx_config/pages/installation.rst create mode 100644 _sphinx_config/source/lm_client.apis.rst create mode 100644 _sphinx_config/source/lm_client.client.rst create mode 100644 _sphinx_config/source/lm_client.common.rst create mode 100644 _sphinx_config/source/lm_client.rst create mode 100644 _sphinx_config/source/modules.rst create mode 100644 docs/index.html create mode 100644 docs/sphinx/.buildinfo create mode 100644 docs/sphinx/.doctrees/environment.pickle create mode 100644 docs/sphinx/.doctrees/index.doctree create mode 100644 docs/sphinx/.doctrees/pages/contributing.doctree create mode 100644 docs/sphinx/.doctrees/pages/installation.doctree create mode 100644 docs/sphinx/.doctrees/source/lm_client.apis.doctree create mode 100644 docs/sphinx/.doctrees/source/lm_client.client.doctree create mode 100644 docs/sphinx/.doctrees/source/lm_client.common.doctree create mode 100644 docs/sphinx/.doctrees/source/lm_client.doctree create mode 100644 docs/sphinx/.doctrees/source/modules.doctree create mode 100644 docs/sphinx/.nojekyll create mode 100644 docs/sphinx/_modules/index.html create mode 100644 docs/sphinx/_modules/lm_client/apis/auth.html create mode 100644 docs/sphinx/_modules/lm_client/apis/biotaphy_points.html create mode 100644 docs/sphinx/_modules/lm_client/apis/env_layer.html create mode 100644 docs/sphinx/_modules/lm_client/apis/gbif_parser.html create mode 100644 docs/sphinx/_modules/lm_client/apis/global_pam.html create mode 100644 docs/sphinx/_modules/lm_client/apis/gridset.html create mode 100644 docs/sphinx/_modules/lm_client/apis/hint.html create mode 100644 docs/sphinx/_modules/lm_client/apis/layer.html create mode 100644 docs/sphinx/_modules/lm_client/apis/occurrence.html create mode 100644 docs/sphinx/_modules/lm_client/apis/ogc.html create mode 100644 docs/sphinx/_modules/lm_client/apis/open_tree.html create mode 100644 docs/sphinx/_modules/lm_client/apis/raw_solr.html create mode 100644 docs/sphinx/_modules/lm_client/apis/scenario.html create mode 100644 docs/sphinx/_modules/lm_client/apis/scenario_package.html create mode 100644 docs/sphinx/_modules/lm_client/apis/sdm_project.html create mode 100644 docs/sphinx/_modules/lm_client/apis/shapegrid.html create mode 100644 docs/sphinx/_modules/lm_client/apis/snippet.html create mode 100644 docs/sphinx/_modules/lm_client/apis/taxonomy.html create mode 100644 docs/sphinx/_modules/lm_client/apis/tree.html create mode 100644 docs/sphinx/_modules/lm_client/apis/upload.html create mode 100644 docs/sphinx/_modules/lm_client/client/client.html create mode 100644 docs/sphinx/_modules/lm_client/common/api_service.html create mode 100644 docs/sphinx/_modules/lm_client/common/constants.html create mode 100644 docs/sphinx/_modules/lm_client/common/exceptions.html create mode 100644 docs/sphinx/_sources/index.rst.txt create mode 100644 docs/sphinx/_sources/pages/contributing.rst.txt create mode 100644 docs/sphinx/_sources/pages/installation.rst.txt create mode 100644 docs/sphinx/_sources/source/lm_client.apis.rst.txt create mode 100644 docs/sphinx/_sources/source/lm_client.client.rst.txt create mode 100644 docs/sphinx/_sources/source/lm_client.common.rst.txt create mode 100644 docs/sphinx/_sources/source/lm_client.rst.txt create mode 100644 docs/sphinx/_sources/source/modules.rst.txt create mode 100644 docs/sphinx/_static/ajax-loader.gif create mode 100644 docs/sphinx/_static/basic.css create mode 100644 docs/sphinx/_static/classic.css create mode 100644 docs/sphinx/_static/comment-bright.png create mode 100644 docs/sphinx/_static/comment-close.png create mode 100644 docs/sphinx/_static/comment.png create mode 100644 docs/sphinx/_static/doctools.js create mode 100644 docs/sphinx/_static/down-pressed.png create mode 100644 docs/sphinx/_static/down.png create mode 100644 docs/sphinx/_static/file.png create mode 100644 docs/sphinx/_static/jquery.js create mode 100644 docs/sphinx/_static/minus.png create mode 100644 docs/sphinx/_static/plus.png create mode 100644 docs/sphinx/_static/pygments.css create mode 100644 docs/sphinx/_static/searchtools.js create mode 100644 docs/sphinx/_static/sidebar.js create mode 100644 docs/sphinx/_static/underscore.js create mode 100644 docs/sphinx/_static/up-pressed.png create mode 100644 docs/sphinx/_static/up.png create mode 100644 docs/sphinx/_static/websupport.js create mode 100644 docs/sphinx/genindex.html create mode 100644 docs/sphinx/index.html create mode 100644 docs/sphinx/objects.inv create mode 100644 docs/sphinx/pages/contributing.html create mode 100644 docs/sphinx/pages/installation.html create mode 100644 docs/sphinx/py-modindex.html create mode 100644 docs/sphinx/search.html create mode 100644 docs/sphinx/searchindex.js create mode 100644 docs/sphinx/source/lm_client.apis.html create mode 100644 docs/sphinx/source/lm_client.client.html create mode 100644 docs/sphinx/source/lm_client.common.html create mode 100644 docs/sphinx/source/lm_client.html create mode 100644 docs/sphinx/source/modules.html diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..f0262b9 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at cjgrady@ku.edu. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..62a100b --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,64 @@ +## How to contribute to the Lifemapper Client Library + +#### You found a bug + +* Check that it hasn't already be reported by searching our GitHub issues [Issues](https://github.com/lifemapper/lm_client/issues). + +* If you're unable to find an open issue addressing the problem, [open a new one](https://github.com/lifemapper/lm_client/issues/new?assignees=cjgrady&template=bug_report.md). Be sure to include a **title and clear description**, as much relevant information as possible, and a **code sample** or an **executable test case** demonstrating the expected behavior that is not occurring. + + +#### You wrote a patch for a bug + +* Open a new GitHub pull request with the patch. + +* Ensure the pull request description clearly describes the problem and solution. Include the relevant issue number if applicable. + +* Before submitting, check that your patch follows our coding and testing conventions + + +#### You want to add new functinoality + +* [Submit a new GitHub issue](https://github.com/lifemapper/lm_client/issues/new?assignees=&template=feature_request.md) and suggest your analysis. We want to make sure that it fits before you spend time coding it. + +* Write your code and tests following our coding and testing conventions. + +* Submit a pull request + + +#### Coding conventions + +* We Use [PEP8](https://www.python.org/dev/peps/pep-0008/) + +* Doc strings should follow [Google Style Guidelines](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html) + +* We use [pytest](https://docs.pytest.org/en/latest/) style tests + +* Use pytest with coverage and pep8 to determine if test code is adequate. At this time, we support Python 2.7 and multiple versions of Python 3. + +``` +$ py.test tests/ --pep8 lm_client -v --cov lm_client --cov-report term-missing + +$ py.test-3 tests/ --pep8 lm_client -v --cov lm_client --cov-report term-missing +``` + +#### You want to update documentation + +* Update the documentation in a new branch + +* If you update in-line documentation, make sure to rebuild the API doc RST files + +``` +$ sphinx-apidoc -o ./_sphinx_config/source ./lm_client/ +``` + +* If you edit any RST docs (or update API docs), rebuild the html pages + +``` +$ sphinx-build -b html ./_sphinx_config/ ./docs/sphinx/ +``` + +* Open and submit a new pull request for your updates + +Thanks! + +Lifemapper Team diff --git a/README.md b/README.md index 8f7f97f..f2bb8ec 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,30 @@ -lm_client -========= +# Lifemapper Client Library + +![Latest release](https://img.shields.io/github/release/lifemapper/lm_client.svg) +[![Build Status](https://travis-ci.org/lifemapper/lm_client.svg?branch=master)](https://travis-ci.org/lifemapper/lm_client) +[![Coverage Status](https://coveralls.io/repos/github/lifemapper/lm_client/badge.svg?branch=master)](https://coveralls.io/github/lifemapper/lm_client?branch=master) +![License Badge](https://img.shields.io/github/license/lifemapper/lm_client.svg) + +The Lifemapper Client Library is an pen source project designed to provide +access to Lifemapper web services. + +![Lifemapper](https://biotaphy.github.io/analyses/sphinx/_images/lm_logo.png) + + +## Install + +Installation help can be found at https://lifemapper.github.io/lm_client/sphinx/pages/installation.html + +## Getting help + +A this time, the easiest way to get help is to [file a bug report](https://github.com/lifemapper/lm_client/issues/new?labels=&template=bug_report.md&title=). + +## Contributing + +Did you find a bug? Do you have an idea for an analysis? Do you want to write +some documentation? Head over to [our contributing page](CONTRIBUTING.md) +for more information about how you can help out. + +## License + +The BiotaPhy analyses repository is released under the [GPL 3.0 License](LICENSE). diff --git a/_sphinx_config/Makefile b/_sphinx_config/Makefile new file mode 100644 index 0000000..4803dc9 --- /dev/null +++ b/_sphinx_config/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = LifemapperClientLibrary +SOURCEDIR = . +BUILDDIR = ../docs/sphinx + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/_sphinx_config/conf.py b/_sphinx_config/conf.py new file mode 100644 index 0000000..764ff7a --- /dev/null +++ b/_sphinx_config/conf.py @@ -0,0 +1,177 @@ +# -*- coding: utf-8 -*- +# +# Lifemapper Client Library documentation build configuration file, created by +# sphinx-quickstart on Wed Apr 3 16:15:12 2019. +# +# 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. + +# 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. +# +import os +import sys + +# -- 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.doctest', + 'sphinx.ext.intersphinx', + 'sphinx.ext.todo', + 'sphinx.ext.coverage', + 'sphinx.ext.viewcode', + 'sphinx.ext.githubpages', + 'sphinx.ext.napoleon'] + +# 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 master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'Lifemapper Client Library' +copyright = u'2019, Lifemapper Team' +author = u'Lifemapper Team' + +# 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 = u'1.0.0' +# The full version, including alpha/beta/rc tags. +release = u'1.0.0' + +# 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 + +# 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 name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# 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 = 'classic' + +# 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 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'] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# This is required for the alabaster theme +# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars +html_sidebars = { + '**': [ + 'relations.html', # needs 'show_related': True theme option to display + 'searchbox.html', + ] +} + + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'LifemapperClientLibrarydoc' + + +# -- 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, 'LifemapperClientLibrary.tex', u'Lifemapper Client Library Documentation', + u'Lifemapper Team', 'manual'), +] + + +# -- 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, 'lifemapperclientlibrary', u'Lifemapper Client Library Documentation', + [author], 1) +] + + +# -- 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, 'LifemapperClientLibrary', u'Lifemapper Client Library Documentation', + author, 'LifemapperClientLibrary', 'One line description of project.', + 'Miscellaneous'), +] + + + + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'https://docs.python.org/': None} diff --git a/_sphinx_config/index.rst b/_sphinx_config/index.rst new file mode 100644 index 0000000..1118280 --- /dev/null +++ b/_sphinx_config/index.rst @@ -0,0 +1,26 @@ +.. Lifemapper Client Library documentation master file, created by + sphinx-quickstart on Wed Apr 3 16:15:12 2019. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to Lifemapper Client Library's documentation! +===================================================== + +The Lifemapper Client Library repository contains a python client for accessing +Lifemapper web services. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + pages/installation + pages/contributing + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/_sphinx_config/pages/contributing.rst b/_sphinx_config/pages/contributing.rst new file mode 100644 index 0000000..73f96f4 --- /dev/null +++ b/_sphinx_config/pages/contributing.rst @@ -0,0 +1,7 @@ +Contributing +============ + +If you have found or patched a bug, have a feature request, or want to add some +additional documentation, head over to our +`Github Contributing Page `_ +for more information on how to help out. \ No newline at end of file diff --git a/_sphinx_config/pages/installation.rst b/_sphinx_config/pages/installation.rst new file mode 100644 index 0000000..f0b8dff --- /dev/null +++ b/_sphinx_config/pages/installation.rst @@ -0,0 +1,9 @@ +============ +Installation +============ + +The repository can be installed locally by downloading or cloning the code from +GitHub and running:: + + $ python setup.py install + diff --git a/_sphinx_config/source/lm_client.apis.rst b/_sphinx_config/source/lm_client.apis.rst new file mode 100644 index 0000000..31abb4d --- /dev/null +++ b/_sphinx_config/source/lm_client.apis.rst @@ -0,0 +1,174 @@ +lm\_client\.apis package +======================== + +Submodules +---------- + +lm\_client\.apis\.auth module +----------------------------- + +.. automodule:: lm_client.apis.auth + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.biotaphy\_points module +----------------------------------------- + +.. automodule:: lm_client.apis.biotaphy_points + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.env\_layer module +----------------------------------- + +.. automodule:: lm_client.apis.env_layer + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.gbif\_parser module +------------------------------------- + +.. automodule:: lm_client.apis.gbif_parser + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.global\_pam module +------------------------------------ + +.. automodule:: lm_client.apis.global_pam + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.gridset module +-------------------------------- + +.. automodule:: lm_client.apis.gridset + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.hint module +----------------------------- + +.. automodule:: lm_client.apis.hint + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.layer module +------------------------------ + +.. automodule:: lm_client.apis.layer + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.occurrence module +----------------------------------- + +.. automodule:: lm_client.apis.occurrence + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.ogc module +---------------------------- + +.. automodule:: lm_client.apis.ogc + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.open\_tree module +----------------------------------- + +.. automodule:: lm_client.apis.open_tree + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.raw\_solr module +---------------------------------- + +.. automodule:: lm_client.apis.raw_solr + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.scenario module +--------------------------------- + +.. automodule:: lm_client.apis.scenario + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.scenario\_package module +------------------------------------------ + +.. automodule:: lm_client.apis.scenario_package + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.sdm\_project module +------------------------------------- + +.. automodule:: lm_client.apis.sdm_project + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.shapegrid module +---------------------------------- + +.. automodule:: lm_client.apis.shapegrid + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.snippet module +-------------------------------- + +.. automodule:: lm_client.apis.snippet + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.taxonomy module +--------------------------------- + +.. automodule:: lm_client.apis.taxonomy + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.tree module +----------------------------- + +.. automodule:: lm_client.apis.tree + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.upload module +------------------------------- + +.. automodule:: lm_client.apis.upload + :members: + :undoc-members: + :show-inheritance: + + +Module contents +--------------- + +.. automodule:: lm_client.apis + :members: + :undoc-members: + :show-inheritance: diff --git a/_sphinx_config/source/lm_client.client.rst b/_sphinx_config/source/lm_client.client.rst new file mode 100644 index 0000000..9a9799a --- /dev/null +++ b/_sphinx_config/source/lm_client.client.rst @@ -0,0 +1,22 @@ +lm\_client\.client package +========================== + +Submodules +---------- + +lm\_client\.client\.client module +--------------------------------- + +.. automodule:: lm_client.client.client + :members: + :undoc-members: + :show-inheritance: + + +Module contents +--------------- + +.. automodule:: lm_client.client + :members: + :undoc-members: + :show-inheritance: diff --git a/_sphinx_config/source/lm_client.common.rst b/_sphinx_config/source/lm_client.common.rst new file mode 100644 index 0000000..5bcc660 --- /dev/null +++ b/_sphinx_config/source/lm_client.common.rst @@ -0,0 +1,38 @@ +lm\_client\.common package +========================== + +Submodules +---------- + +lm\_client\.common\.api\_service module +--------------------------------------- + +.. automodule:: lm_client.common.api_service + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.common\.constants module +------------------------------------ + +.. automodule:: lm_client.common.constants + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.common\.exceptions module +------------------------------------- + +.. automodule:: lm_client.common.exceptions + :members: + :undoc-members: + :show-inheritance: + + +Module contents +--------------- + +.. automodule:: lm_client.common + :members: + :undoc-members: + :show-inheritance: diff --git a/_sphinx_config/source/lm_client.rst b/_sphinx_config/source/lm_client.rst new file mode 100644 index 0000000..58e65a4 --- /dev/null +++ b/_sphinx_config/source/lm_client.rst @@ -0,0 +1,19 @@ +lm\_client package +================== + +Subpackages +----------- + +.. toctree:: + + lm_client.apis + lm_client.client + lm_client.common + +Module contents +--------------- + +.. automodule:: lm_client + :members: + :undoc-members: + :show-inheritance: diff --git a/_sphinx_config/source/modules.rst b/_sphinx_config/source/modules.rst new file mode 100644 index 0000000..288346c --- /dev/null +++ b/_sphinx_config/source/modules.rst @@ -0,0 +1,7 @@ +lm_client +========= + +.. toctree:: + :maxdepth: 4 + + lm_client diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..69e122f --- /dev/null +++ b/docs/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/sphinx/.buildinfo b/docs/sphinx/.buildinfo new file mode 100644 index 0000000..051e96a --- /dev/null +++ b/docs/sphinx/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: fc33d1b4aaf2fcbfcae672b423643ce6 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/sphinx/.doctrees/environment.pickle b/docs/sphinx/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..a2a2dc04d108d9c0c1c98e1c1f77871c425f02ab GIT binary patch literal 1915023 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

Q22R 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 z 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�I?k_a_zVFu>=X5mhbOtq#RAVCRH{H{FAX=jmB{4|1}g1=fbudE_- zbGWmEt!GY4Sq0?eBaia^JG-;RuxM!f0pgTo4(fK;S`8d{T#3;DS-1;X(S4Awnj}>T zs&It~M#5bky=wQtU?Iwr_35&gj7j2YWc{1n-e^qpdf0;!qI;RDRt7d2?QXu_;(1`&LYXQHIPk!BWkN7RdxC&)WN9$da#o6GEao+D7bq)m$|GL1|Ml6sg#Do7rl z<5W1;YOTOGioc{`eD@}av~%EO3Xg1VcQopC4lS%i=qTBtN64gO6fX1o5Hq#2v(^%V z!1*obJJ@=5c3xhQ=}^jFNj*#nKs*kMOcErJ*1V*9y|2TrSMw~Yu(Tm1ohzd!r42+8-T(>3w@QCI zSja|32_jz?$hvnm+eNOl-42i=XZNLTCL+mmbrFGB2Wr~K33Fr?amq9J zU)bY7tIe3fLW&Qysh45U6py44#81cbau33V=We)_KKw*(g&2ecmA|^1-a$|kj!;!3b zlcw68z5Wckj4WZm^#HlDPvuT=oVqQp3a4qFXaQ=`vzy5UmCqPhl3WeXA_N;phfe6qfZG13~JiY{=3B+@BUva~Qz zB3$N()SEK%@=AuPQM6_ZzIXuf(v|zl@wxCohg5Inj*>-_<3T=`TTLr*XC(NY%hC|HzKSnd|%L0h`r188d**{;-1j+PnYuo+N*1QTRX>U46zCOp)UsM+bHu=3#g zNsrbDl_O2v;-R(9gEh2?v8f~5eA6VsL1*1&rQ1U|$ip0mdRvi6N)|)!4xB^po z+ZzGbN9$}=z98?Sry(}T2 z7UD_6QPSfyYQ0c*N??34E~yum9J}gibg&R5N1setIKmDh3=&z82Uo=T-YYJ{=`3JN zWFd4M2abvLhtpaCihmuH8aJ6R6bM+-X>#9LSaD!Ab($1bAa*0nPJKjBaM1(PLA|XF zDpZ&KI5-l5qg35btqt<>%8GTHM-yV>TxBB%1#vlW z)gIx}cvijknS-q!xW2fe(ls>}MZ)i^#tnkoktPh29WS~=MUg?;5;$STbUw!%e!Z5^ z!ivt-l0HjIj3ah@6%G*57dq8Nd$N(*omn_eM(i(ok_lm7;e;c@33UBFn3q!?TzmV| zPt67t7A)3o51Wjuz6yGaSVAp@D;;XRD$v3TEfcH=lPX9Ku5uw#@_Ia+B+`Ybj#d)s zg-19h^%kOu1f@fFK=N{Xqr566mK+B}ItsE$#{)7w_d^S*0K=mkmwMwNFRx5kmH8{F zn;qRQgL)BY$}I}^Pk>>w1S5qjH)N$CCC-61#HQ!^%gd{FdBdX}t$J&=k_@HB$o$f4 zp|>-1R~QM5I#|Lkmz;p0okXH`;e$@cNMAvw1GM^yChe(Sc#NZZQd&I(hLKXnwg z2;|fX2hv%l&zu9;yzhmIf$Sv(U=G>BNKEo3nt9o6hBt!XJ6MQb|x8%6cpA$13 zLAZ@0=yexQba?efP+nfKE(BKoO1h{;i}hlXNDL$XfS2It9(pT3<-}}o7-q<3L6)aL zlujTxTgdm}NseK)Szjuv>^P5I;h3mt7TdN02K5QUwD!E<52_n}$Jg zhVg7-$h3{Hez`g^JjVguk6*cNAO zMBs?dW{|<`Xn39j;XE%)S2(Eq4h>}@4eOP}V*7V6k%m_}oZ;J_ z;tb=}#NZ&&{mk$hhcf&iQGtf@TH>&Ua6JcZVameaIiTTNC`vS>*Aa<5j)$+7!rwcb z;d`9OGnCg8h4t3zFwcE>gM%5q-c+FBywPy51>O&x@TN_}QGtf@X5z4~Vbh=&-r`V( z?`sri7;hy8TSoQq+Z@R7EhF*_?XY4;XpyBI|;tb<`#GnR^W>hb{ z-{B0eK~1D#eSlaTrSxjS?f;JsY4}m90uASb#9_~#U1IK)4>_3Od$!0kln)bytwY~% z_=p1;zI78OrC0!p^m{6u#gfhVNWUOD6w|kl7b)$(35xJ&KFozl3*>3|}UiR3^NI z)4dF?`>!|x`@w5{Q?%H=fR0(=y;~wh_XAIhTOuO@iRIcVT&2tTnEGcRNd&dzM#1uY zTDR!KR~?0mD=FCW3S%EKWC81dP5y|=w`%zs@wpqj)a@*2>F{+2eW((;_$ZB*IvLv_un1(!J1!Rr)wIBq5p?{eiK2h z?U_E-bglXDJ;z{^>OaLW0{=+@^a3M>0P_mn(yE@m?>J1>tc9LrL0Mlp6*wgw^#k(Y z1ki(XpcQ`T(5p35p&m9?jw0W_{zpWmbqkfbRlobk4!LgKZ;VWg(l`Hv=QJoGi2!{J##1;2#J`so({)HoO z=_V2=CIdnllm8|Y>b*|4b7d=ZwIY7$cuZ{~j}*vQ{0~`N4UO|H#$fF$ z1GCfte{J}Pr*4Jm8JZR0e;s~ZyJUktC=eq8VW0mS!gKEcMY|nn9yuKoe(MMv-o#cY zAsLU~k%t(%%$P6-1^j=GLftypSP4i{20$40?+tq%>W6k!xC%CZX(jm>HW#VFOpb%@V3F&)4Q2-dvrkl1x5got6^em!DS z2T)H-gpJGy*LMsyQwNlgjK?YDK}%o`L6frO8BTQ^>bAhfN+8ED^cxUeT7YT*i^Cf_ z?7CC(#@KD@fMRWUBl~U~Fr|+v zz?(Y!>TkCdP@c7E(26i3;LB6(cQX>85x|Rtr)|&i<_^AYvv2VE#29gVkhdTK*KxQAm>*B7>d;w!L5ax5csPZFYMussL!zdhfE@o|QuQSAULmi~2mVgX|e zMvQ@Y>%;&FqyHZn6fnkM3mGuZtEk86PM2F_;Y>%Q?w~9r4O|Hpe;!dFqjDCh@C;|O zzd%nA{DFnLMhEFuN9iH>bsZhG(dslu94Qb>Lv|avajvABDxB?Tj91dAWg}3oRm3?2 zqjoycrk|bh0_Qr!ODYjhu3G{H-wG7NzZdau00fB%<6QZE*py<222Y z6YlGvH*cDzc!RwkVc7+7mIJp`A$B@k=zurLFwX%DdW_KQeWArv+t{Gcz~r#Q5!fuB zu;Gj-j`0{L57s<;?{s@U>~#2>RP!=Pw{w@wF2b_2p*h4Y6?Qw^&77kR#6J2WqRT?m zwuizV2frKK*4MeF?CO}r20B5|8$+zDgjgS;wTSR~T88&`=yg>NJG0t+11BL_50#LN z%*7-_qoB9gp3l@VzSohcUKJGDcLNfFP;!m$BRH#nX?7Y%7om#6{vok9T9+-&jwphC z_yJ;5*XlAA)i;k5k_R39X6o7$$XHxL7N>xPS!=pNJmhH99RnM*fPs`&hm)kh9*{dq zdSPlve0H(w?eYS|s^G9yL8)-K)KRFb{z_5?4hH*0$>KRe7F??rHlz5)E^{&^rlHF=I;*ezmH8_Nwz=&iClGwy@7$x*&qI1?^S=<%UgYnaG@O69J2D4s)V7;wNa4P#e zNJF*kiX%{M@^0MUa`7egdIiy0@yuVL6(1aM-7nv$*@;l9_8zg>>5%v`--ON_dfnyS z2K6owUO{lDnJlMh+yE4Bsk}F zYGGtec$5R)qVY3n}x?Y>`iL+0>Qu^PjH!K!-DGCKXuSM!EAklu7<7+3neZ4 zXGEl?oA2W+O-uFc6C7yWalVnBRg99R{d3}2vD?^=uPU1&>x&yA;0vyZL%W8>qN@I9RLELdT z&16I2IgY?Zp!kQV9hE&o*@pYq#O3Hi(22Tw|xp@9R7wJsO-h|P^Z%K z9D_|#_JUCIC_SIx?0ZYi<(av-fPaBQ-y|bbAxf+G7ZRRx%?a%Fv*UypIqZw^$MqY% z_JD`{67Y)&Eaz(4bGS(DB@T705_Mx$f1FaSf&Z3RI==L9kB;z{I?TEbgN;Twc1Yz^ zQfZ98j2vjo^|hK`?!c?(w%XO)FIDm@2+E$_JdOl-3j9h3yh%M<5K7>$A~=V(&1*8T zzS_apRqGolHJj1WiS;!kz_~1L+=bUV>`j`>qIm0Ve@9sE2g4b-6kg{rt95AYcBX6t z{Cfg&D8WEI-3>_V2JC51H6UY*!;Y(HN4f)xDbC>Uz={M*C^C#;cZ0XO0DpX%O3dK z9p+}P)XGrCzB z@}Nx%-2`(VQ7hrSjzeALx3OK5V;K5B7&;8f*|zMLzR#iW0=GY;FXoaB^Zka|?M%a* z=+4iF4>-&}c!#*#!M!sh5N)9UNKhJ3>V{YI?Sl@sZbfgT0~MoWzbKMxWn9}sV?=1eS(0T(iv3E z^Dv)un02k0jYm{OunPVZk#7KG-4QALVxM*l>INs)(JKzixO|3OXx4=$uH;f<_Op&g z-6g|D4K5HROZJ}(9YK+BiOORAa}K@UFxSr;wD}~WOD?L<6O~$B3)wjPf&;EQyVS3J zXWe~~JjANSU9ob9JdK|(IU05K%|=#jf?HM0Q)py=U< zlG6KUlDMg~hMvymhM-N!;j4~H-66376|?cVIcQi`D_fq4V55p}tvMp_EyB~dkyvqfZnE%g2VS=W))|U9idFT$5ufd?J{wtDe#a50I~Q#9 z_1yI;d2GLH;JPU!=c4}If!D42jr6bX3Z)05{)6b$gc^ctGvW6ffz68n(g0jHAO0s< zP!BQ?**qTM`;NqBnmvp~HX!Q;Kd`#se2#-UniDkq(9x*77TusH5Cpj@6vQa}h!k#! ziqOtbhzLJ+Eb6vMA!4B3(H>F!$cX%eL~aBkNh05AnMlJ=9h2&jvGFQ2K^PGPc*=hhn07Gcgr)FH2YMm? z@Q19kDAYdje~3iACz;*U^!t^=+bq>15GB*^*M^R97%$ig|Lf5IP}8pvZQuMGLq#eX zivswqL#?|*P-n6!V2r`<$bge=yMruHxTKO-X#Jm~P2d!fWF;x5J zDyNmt<8QKkL!`2Ob5#IJX4+1(6Rzgachu_ToJHs^9H`kK*1q?T2qg=>7LNYnh{4qz zT-}kp(fm5E@(uSI#H9(h!o(BdnhteO8$U{_1yJN%bx{ktT4l|qqj4)Oc*CPYY9&)TmY`W_^0-HB`$bq7CyWkX}(}fb_ zIZt)a_pjOZ8&$uGw{N}yQAM>RX4DNGblsM(qumBrQ8yw7&YSJdJQ^ii4L5cKs$Dr| zFjNk1lWiY<69a|1)dQzDb)a>vwmM&JAclT3qSILN$Gm&t=8i`7bZXyT=TJ+`bC#!l zy#-0olD9kq(6~rucuPlMZ)L|b0+p3-X$Azq>fly{zXgQnhLm^`pnPxypUG}-?TFOf zL)mzS%Mrz^05znD#_Tp^MwKYr4eId`C;n|6qq?4jI$gwJ8JF9U3kPWO_i%g1V>1V6 zf@2)+Kn~*F)jiyXgP*AEA+@Ka<@-HkjrT_ba! zP1mP84x2e$7cf>6cP9f**Yr-P6Y?I8z~)WY#3;ES?@4r8i1Yw4J=GZwyY75lm_q}N z(kR|OdW5j-f|3#}hGmaB=*{ec3662tLJr(+O=5=fllhKH-9^C$wUC4k`J?$HLs#%Z ztD~L~(NQsb$5uzDuEO4cPL3rStDL}N8wojkT2jfJ?YPt(9UE{d{#@#x=a2@CsyTR) z#YK3o!>^v#3$4A8K?#78A%8C-Q!^Z2q%&Nw&vV#yZL5v7lYo@)?@j!h10PFy&CHG^ zYf(#KyW{cz{B(W)NKp@kh=Bt&K^xF3?qij*(uKCve17LUB6T}N9c!Y1u~B;g(E8#s zU0L1UIx*Xl+la$`@%oYBexxF^EidJq>n@K@u6DBKiCrOt3mwf1E9=YbL6ftXEiavB z54lhyH3r$2-5LUyo9(5U?upS|CotI~{mM83aTkG(3^Y3&ezmn>_$E;B?P0BSBQj1R zw~b#mI=j?Hyu|2ulhHPlt+j?K30`GCa^;Tpac%W<}GC?Ao z+VWn4#=pPAt(S#9@7{5wCK3(pVxsXH$FwmHwU)bCYbS2B?{+#ZWR9K-dmVvlH(RYH zUyEX-_K_6ljvawH(hs&*T3Y@49gBKO!s2hdI!C7e#o5k;^lrCXv{KsM)E_b()BvGY+)g z1vsTi!pk(^Spth@M3#f2SZ_@n&<~w+m_usDvQ$HD5tWlfyx^H?u{XL827hy*b+8$F z@x$jGiE2yEhE7SSv~%gr8W>}>Kvryoah;{GpK%ChB;zn%bX@9nH{bGuL>qpa__qYU zb<3UIWp$EGwy%^ff4SpO&ss2Xr7rJf8;PSNaTAa*ouek2c8Vp3UvG2BBniGfBw`JE znb6eNa>?oFuH_ZDtUC^}p1xKI0+-AriC0{sDtbzYA!S4ugtQuzfxGe@tM?GcS z;}UYVg=@Cw^y?q(h&%|THttyiqM zJcTrF0~)Ef;Be(qE34Te=DcoL*s^U)Zi<>eFgi@u$Tj3=5Sb>)1d|vjHI{SKG&hwv$9Q`e7HS$*+$}TNP>0}M@X-EVsvusvR&3! z!t)$~@mim6qVkdFc&Q1^Y0&E(7uXKL2)&Sm z(ly6qh6~J>wJ*NNv8ZQbSOb(=BN1!RFD5kI!7wm-7zHiy(7nWA)-$G}2!Tw+8P?w# zR&TM7o0_9T>ZLBu{iUpp6jz)lu(BE*>t{$~3$G`fpWTjj;MY1P4@5bt%4%iiB?}|}asZrB{5w*l zX-caLdB$STew`yzZ#iAE+;U+C_4kC5Efr+qnav{7>m5?PG1OBL+OHFFhV=$w$%2bs zqA)7fS~Qm4=nyZgRnaRdND$+{6QPFtCgRdEnCOk|ltjthu&V9*W(PZ73)YXUHF6F4 zEkx#25%-afG&|WLY?~?gTOIfiu0d>Em1G+5+XyVpngv|;5}Wny4zOmkst9e?M4Vy0 zgIKKItT}^l;m+#le*SlVb0NIb0oEJHxg3GapG>OZzKghA-yZI?>8F?q%}x(F$fLvJ z-445+4)aYrP_{964;kD#b{X5voak_a9?6W0Z zp|{eU6|eD!9lP;b>;~F#saym92*Ih6=XK+;MH6b8XNgwBM;-KqwV72{)fA4hdQ?qKWr>aEMHXM0ezfq#PFbij4ZX8feX+*<2XQCvRL#F+d~Q9gIS zU{oFM^pHms`Egrw2jr9*k0yWG!PQfXkS1{JNHz4&5S^hu(F1w7BmaPfqqELu9r(^# z-#Wmx`Tux(>%cgUZ2NzinR&g8nczY;3$`UYcGjR+PO{0uWF(EGi6xCvGqSBLy=8jK zZ<(3jGBfk;TV`fvrr$ZY`ZV0>nJFvz{{D!q?pXJHy1KgH)~#F4u=GEtr!O~IyE-fF z{oU>^WQGo(cL1j(0hFy-F_dqV%nRcS#JCbNc3e#l;*jS%h5=5F<@L6Um?bgP&R8}32km19l(izpyHK2Ueh!W zK94wGbvUDA7uA4Q>>5+$PMwn2zD72>(ssf1u(ld0zV0YC=1MDBl-f6_R$i!fWfs2a zl+#+H`u4Z_u7&U|BG566Qek{eKKJ;xlTK?Te4pv8O7%NbWy8OHsf+o}%EA<5@M39y z*9oV!5MFrDu(ZEN?ebdbp6+C;-`cXoV}Cg|4&QeKX=Aq`rCzlyh#wGwJrHM{cG*)m1 zrTH6bmWQ2_dv|Zky_mmssuM{iUi$%-?MnQ26z2wgI=B&2TQqvVcfx5NLtot9taSfC zU4DA%BC$-cfU`}P^U={Coqk%&BXgDR*V`7vp9sNq6BXAEoMhMvvy1Ed+8Dm}*b0X~ zJC3wLk}MjBE^5pRp09cPE(U zn8-}Thb@_t)<5)gJMDxDJ>5T@*v6i&VpEF$q9WU{m6bT3+Ouc>RD8sLJJrqjSK~Vs z*|BHTMQ&8G|Di0~kIY+9j@!7>=?%z~5$K|9SK=3^I9~$KhHNc0c5+cH^KM?k zNpDV)&J3CIpi${wlDeGeL_Y&cJ@avFMH(oyEV24s$`Pc!gTkai6qnJ9QdSVorHRA! zpxkFvxU0ft97WnI$SoN}epT3&_GPKfzPvKq*s)*V;N_frTBBMqW(bu#xp`4so)oMI zsx5I1f{PsC3XULcOfN$wu8YE|gs(_p)&#cvaWn@9$KlmhA3@FdGuDJFIfS&qbNBZ8Ot%&0c5+W}SX=FfYdPt( z&&>DV19qi+Z7Oq$ei~MB)T>^{X>M$aUa}~)>*_hrYKQJ*=b$A{jYWJtr@67`9Iz|p z>rE!u+H2NDjd`KmkSI3;N+ld=x2<3z(Ho{0S?-@$ zFq<6InfT4|A6Uhh<|2h zRjRk5D*mf_1gv3M?eciv?#d+gNM@T5Z|zX-k@R{iqd0rfl{-VkM0gt#-q;gPu3_60 z*6rKVWe3`A9pC8}1YfO`=#C;CTgEJw+yYV>4r602W67e_j;0!iJK5?o8?t?Eq-M&3 z7mjhlX;r1N^#tq7&Z@+ZmH44{>i{+cH?UK!jWAzZw!+HaaZWrfv$c#_z0gI~vH*@J z0Ozh-Ti9}vdoE6Jx*MC_RcuP}c2uOltkNuQrQ;CC^2Da$_D(*{Usf?V*z#5+L~{qy za3;NV9mg`N8@{8{Ph0Kv%|qFw^iHJSZJ~$H)kkz=1jZDUzkdeG<7@Pny|6Y}>xdJ3Fv6znW|qjV{cf+|y*r$4+UxaIsccfRJ1NTr%1Vor?YfKNr#SI6PeR4sU<+4P5X;@k!U;}g z28lgit6`U8NGtfE6G+;W>TasC$|*9Ta5Lm<2VsxXPg@mLjDl}%M<|JEFR54^5QV$u z*Q=%+O_Ej-STq4kRrrM`6ysi{i3sT^MH& zVdkrjujF1%Hm#}jb)#%jdiSOt z8;Z_qYi=%Z_=7EW%dOsl)0r|b%HPMy?@D?Hg++S<#pQs2V48$s2c<2gQT}WvpEk&m z4HMUe8I)X$a(vl1kkS%X?A*O&>VyUZ?7Axm9h-5wX)jyG;zQS37Qie4_$_LYD+@i` zGMnxC33Co1ZB!t0hM)^?TM%tRu*Sh9jZ|#eTGqT1P8;WCCQP?%PFf4pqO-BQ2vj&5 z7oF%N{^j^qShh@67hGM+4NJa5dA7ndsz_IOpqbENt;g`IaE?PrtLkNYhEcvz5fI7& zqOdE}>nR0qge3=&wtOs0mA76pE9qrQ^Mz-bHQF|lSaF(ZFT5sEhnbUBms&T1R?S=} zuD)zL+@4*7H$AL6fO}@|X>`0wja_^Gn)_8f5uQszR!KDxC^6eU65F2Os3w!BWXn)= zQ86s}p5!a5F{kazvO@Kpd|F>zv1JUEJF+f@H8PZgC~U)?GCmx12x;!=+R9kAEAc}V z=QpYG7;isZk#%xBcgQ@aqVSW?v6Rn5uB7n;QQa)o|NuO zC4PzJD9dm^C$_Q9zHCx@_op7qy01D&Dbx~=C9z;1t>Ktm%%!KYCtoUU8+=HEBT2osxW1^*N zYc}+l51}p>6R-*u+mnYny|iZ5*Cd&f&cmp)2|D`h_H@e|9ZNBZ4|n=|@k`^oSednl z)x|IkK|O*{oNsB|i7h3{!|_OmF`0zni($~Pv>!$7OTws<2|d~gp12{w%$iglLlu5c zdz`L`!+{TXSDEmSuo3`HQUxBkK)fZ896I9uWX4w%c4QW2)e6hnw z@2F|k-oZExLA``fY&<9Oy&GF*Y_nG^k(WA@v_8z2NWF0}yo?OiNEJiV2`m+~t2t0! z?oiT7r8FG1f+<}OYKZ6+B(lJ$xCF)>%4eXiWVQ2^j$|{+k6*#)>8fA7s2Y{@t0>JE zqL`Y=?(BZ79c@P{Wgc1dYNwsno5`3Jfi9|+1@IaIaOk#*6Dzf~s);EBChGs|#M2%; zGi2I>My2~&>auU>A`c^H26OF$jlI*;TljOVjIVR@Y28%Wo-vefR0M?bdZO?hXkJ>) zzZKr#IMUk5ag)-jh*;jJVkv#mj2tfY-fwa^Y2T>qS&`@hiD0V6h4E%$u+PeJWZ}dz zCKG;(lTMo)%LbE(>u0kkwYN&`WTpSNEQxP(Y8&ezD>kM0b}F*=m3uP_jLlo+cR2O5 z+E=z`MP0s85fI8diDJ=PrF6$x3mU(JcR7+Y&#(sYMxhIi=F7GP@oqxg4COIf-dR-% zZ7QYT4)1Y9XJ#cix<#zmHmu5>VQON0FBv(8liNM|@MFzWNNol%%*@R+w$9C*x`qUzA9A9%PZFgCd(@IC$$XeH zYy`^{Hd{!57cqRqDWsHD27vH;lVegj?eq;Fb1-Sk+1{uD`I}WG zfqk4{*8!O3i8ez=V#L-8W_3b+D+3vfFC;reVo%pw7szJ`!nwq3A0hL-#+Inab$)cqShF$A8J7MRs89Fiwv~gO z&|N8>`-@IF?YVtB>l>2b@0&z!ND|+m1mBwVaoqBtT(aME zN*jA?-mG-LMP2$v_fE%;ViY3+_2<-KzTYqnY3(fZ8=L#5q{`&)5^J$`K+)eu^&kc zK0x}{?or%rcrL%M^8rTsH%GjIsQL?1<~ zwI-XE{M>;g4@bS#*g%X{6WuRJcNx&d3_g|$=$8&8?PQ-)3ZTN4WPU{%Kl0d*_`fc; zU}rAxUpv{fURQ&S*kqOV|5mLFjvpjJ6>=M40^3-G0A$PxbNbknA1 zdd$i*d)tEe6CqgF4z&*Az!!VmKRem9DS#O;&BBya{z4UwtIDb1^G(rzb$V$%RZSYE zDWX5>ap zEx)R?Cl{w86F60(_~r6NSjHusbmD3h_Zyh(5W9NfOH%(P&@a!#vkc{ykdo=(xqOc= zG+fHDoSyyO=-Eu!vLTgk43QGvrHPmI`9+GKifbq~f0uD+X^}z|hm)~Y?hNXP>$2ox zMOiv;xz*Tp*6uA4<8lrotl zmBg&i{dXD2RX=Ofm^oT4<@%k!;auck04GedLxT0F1Ps{AdTYGTJ3O_*reoV0F5EjrqiOK*RR^HO|bw|07I<7SyLL0!nE zL~lb;u3D6fVY(gQ7_OW`ds~OFJE>mD=s-aaDhTK(0$l^v5wpMA!akpq+x;p0Er(IV zfow|xkud|&Mb)wZjwS$|7Nziu={(vazK~-aMA}56WH1&;ZnfbA#BwZIlrgoMWGFVi z$2pL+jHzSt3z=yl98ZLsqc|#Kifp8kjipLQ6owNV(OF6Fr()a+r*dbgoG5Qc%E92l zS!^D};z|$gnH}tVdk2^J-i9?72=c572S+P6#rs|Z$b`sgR8eHDSd1ptFHhl2qQL-qtyQn1S zttw*J@XopmjG~;&8~boq$B-5zBfC}zxD?Wc*KFpnx_&2YnMMRF!dMr(IN2Wm=l)?g zmF=a^Ah!zAD7Mxc%Pkyk$P-4w9>zUaH4mu+3z9{9M@A0Db2512pCgwIZjWgrxMk|+WMhXK>Hj`TKicoAS{Fz z7Ns{$Jx=&oe7)lThy6}5t!`EoolR+;2GeWz!2bCQ&EAPGFr1DX_YY@K(Rz-l_1#u? zCfoCYF<)hG?&v3n@V)f@v)b=;R@Lu zx&dcgw>m4~K2CDj#6Z_9OCztXDI|xxJ zbV}Bw)utB1BBs`xr%gD&?jV0iZ%b!PGF z#nTkVq|~WC%yHoyC$iy(IZhG>C=qMjek87IXHT=_gho%{sy`aH*m z6(_Ud=Q&mqT}osx2j@CxkF)A@l3osey?C05+?bTkr4mP~Q|r-T9B|B5h*di{z0t#k zSbWv0?M+IxM^#Rprq-vKp&c1k)c*FJ=;nkPIMDt&qmo^tEIqsYtoH1j*gLr`9CUgq z-|s-nBx@2nM4{N$Bf2|#eTSV=N;O$%uM}@DHzk>M%3Q;qhkMo#tN>*uJ)6N3DeWIn|AJ*||lj-Jfdoot1jf=JZmxA0FT&Q)=qaZq!Ul z^MTZiMH~xt3o?g^gWd5D2b&Un6a_iJo?737=(~1MJNIa(nNnp3+PR8J zNj|2K%yzPd?MtnNUifb(nev!}m8N1-nvbn&F0~J5FY$3sGvzU7?X<^i;~)p`l*~;^ z^6`|6t$~`JO!Em&b2Ey6+#qH?YrTrfQ#C5pCl(J{ZEK(8L{lDgpslT#l;o2snT>H< zt34#E3;*N9Qa+8@_`AgePQ)9Mc?xCXtRee9%}GX2V=4vr$Wxu-=qY;ki40LJ*_HUy zC>~pYCVT?3aOJMdhNnBxl*gk>?r&6%}% zL<@$uIGNE=@3HfWzgh@owxsgb((`nBY60Kogp!^Izh21f%8g0s?No|0kZJ3UHMwnW z@3fcZ!aJO1O3&<^9Cdaj|4z!YIC)G+A8San;ayHK<*QzpRj%pm%g)V7=-m{GEj_9b zM#^mI-{Yh<+S2D1rS@K`@zd_CoV(Tu>*0M)Ddp7-JXB^(BJZaN+ubJHPQ*++ zA3$71P!*9WX?&0xj2^%+Swq${kVOP(xej&1TrYgcN$$kI9XA@T8*tQG7sZE35gj`0 zf3|ReC;P@f;`CGe&Fs?RB2nHCII|M|D1~FKL06the#}Xxlya|K`U-PXlKD7g*nDAd ziYZYKDUMEB1MbNdsq*s<+>6VoG-y!w8)_ z9KPr{?v+#;c_{Qj1h$xYD~|+0L4JvlTx7>7Ws6+#oWkFYwH54ZIS{_=phnjp6^<+! ziY`iKCH)mjv+^$YI#izQw3fOH4X&|-?o#-w6Cd4QNj$S<+O>A2{xzyMpw7xuji$n# zc%!i`1|8s3$E6*ul{w6)!`B_wy^~(lm>{cBiUR%yfv*j^)8Lj>- zGRfefm%9hs%~{@SE@n04`wnUWR)%+^g3_mq)1ErB>#-L|*N5tfq#L{@6VLY(Pv(OtetMgrC zr09nqJF2t>sG1#Q(5&QtLirm)Ugc~pC{oHd*4nfU~>|{ zs#!Ai_+!PWg#SQczICR1!!!s-3~k-Hw{eKsVCwO8!rjXQ=8N z!f2Oqh;O#+f(OTfWoRSds^3~_F1HrKpB>0lQYpx8d<)}5g!LC--+2W@mjMI{|Ci6;)ty= z*85|12#uBYq2@ftY5#Nprz90XVb36nORH^#d4c?kAlHNGe3KzpdJwnO>jtYJ{4xC7 zv7~*TH9HtMJ&p7jXz_l|q(GUKcTgn3?aC zDJ&XFaXBC$n9CA|!>fpm5EY)@hA$TJDcMi)d%v6mIz0)B)P${8Zo@nfCiv9aL zrw*QgLw?{3JHX@a+5x53M7MVZ2e&T?uCQxZ#pMtgfnAYcR+TZom}~U-Cl_)XnBU{o zUCF_uecEOv&M4xK&aA|*O!3>{`TQ2p!cW0&c_p@cs8X{Bo18uM;A_Nty^4cdN-8O@ zW##2>CIRR%uFA)_4a7OKx5UD6Vit!KD}9YQkt-vc-|v|YS99<)N$_65;QdV$Ss$;j zPFBcQCo;#LSw2IY^8>$Tb7pmBeZ`_d!ZjRUS|e7S2_b2sw<~~a5`c|ZX=@dXC^rO)7sj=TaRXpfW@OphZ(=4l*W?g3T*tATk@U7wCS(Iz zLc1=}ZUvp#?qr=@V;fWcWoIbji?Cr~a}l5@vFka?`y^3T?OVB3Z;g-??DYwIW0m6~ z)=BNz;i$lm@Dw%Cn7}2=);Qe2QKmI;W{=hkFuxiqBeENkj84(H&ip+4C#_QL&Ri;3 zWtlzDv|~QQrVXLVvXSXxgpAN`L^L|KDn8487pWn`jU7qagjJ}>HLDW7357Z5 z(;UTGjKh6wvp5`X>Xg%(d|8TR;AT58E9sk2njIm&b4Io|_N*-}?dN8jc;k#Hws7kkYNNMk;Y|@a*H@t>` z?m!?m4c%2_BtSiG#9h=G4_;Gq&1S!M+z?Z4)qwJ=dJQq1NG3QYDkl)&uz;o=N6^H1 z1f5ye-4s@25 z!d8cpR{cizOhv|ws+i~|NN3LNk{fk(t+&{W+j+yJgBra(L#=A`o?7XY9jPV50@y|X zwqvcZ5StC<`pz1T_F*K$-|i^VJTtjT1Ie#y1VnQ(X|4mBEJ1j4ViI3og9EH4R;0|E zy2G)gP4{ZDkJlI%$4+u+S8*JYEuFK5G2SUo{BB?!|1}L;*EO5cygM~*Xvy8Y=of9# zj~~ihduDAR>~hj+eTk~)sI|UaLnyn6vI&pozxY$v+HfeZuJxNM-9s%@j6Du2ZNBTx z*0wHQOK^J$cR9eBho=!Z@?H&74kT@XfAGchGJ{e(m1=Z=sQucF)@H5~iWY32Q$890 zczl(Rxk?M>Z3|+W5bUJNeI2{D<<8-DP(RA)GhAQ2FdOzernEtJ*}8F+Z;X%==4r&F zuSS!+$!vbN!bS5XWHSk;JFv8mSN04_7X!wHaRxCMQHPp=RnpcHJXL|ofy&DtCnde5 zYW*nLlh&Ek;zwIuw#FBQx$OGkaF&xzYrcoChs&_^?@9el)JNX0l{ut&!x>!h2P}_< zWq9}&u|nKCKHSTZq|K6ZvsU!^)esR;-8+%$xNx8U_f+{F>n5of2(%@!FJfY zyA;lLAZcH*TGu`;SrOIPR;je8&%iFW4sdocdzlT{cxX{}VxR_`J-kDC>t-BUD>E@V zqfA-E$jUc3KOe0s=vhK8LOe|)U*1IJhe%VKI* z*a$SS0?-Z3cC_hElxR26xmuDG{{0j?&Jl^a9jv(!0lPzlqbWt%Z`3F*-VIVpgg~zbjx}VK)m(V;f zh5vF8Y2TVG8iX!t%nRi~Lh`;5_%h)l9F|2m= zna{*>N+XqrV@(^*<|d6Yzp4=s&0|S({E!mGyXnl1DA30_$j${?pkvha1drzvTp7yr zcST>MqI{p=_|g{tt4@sptI~ZUb?MFNTe3LD+s8z2@ToN6&B5&TNlrhlr7rB*TP!Y} zd4W8cAeAl~Z40~`%V=5t#}S<0E<3j@@uyIn%W9lS&Gs;Z!ag}J?6#KBqT?R-+Tgds zQyocKC}n2V3Sx|ch@Ph6DDCdk28gFSh_slDYK0gyE9GZUc@xTl13Ye;)EQmb-ob3R zg`l-(I*v47wai*+=wg_Lpq@pja_m9wHqX<(=G$eS?Xc2vqN>9jHFsq1JfJ7U=MWM9 z6(@V{M?=1^jZ8R*f0{#zXQpv&&*?<^=Q_;O@vGzeb!^;>$A((*QFw?4;X}_HF~iF82$N;pFl*jl6?tfs~rKn z+r8ONC%n`NpTCYEvnt(}Q5XN!#*xQ}!sdLNjzC*L3@>*uX^RhWXqN@4+q3^n$d!g6eQa651nn&jZzGM|fK}l!?v+$nRqIw()mz)x1C_fr2@3S>1icc(N;^>F+4S#lM0ZUh8nOemaxVQl zsd*I4&EY+)_2DsV%rX>@0X&Tf2Fck^ET8t__UxKX`+DJB4rsJTJhy!`QlO)6jO%In z-4sQY(YsYfvx{ph2jGt2pKKSydmPeTlFBHWiQl2KD9QIyl8FHFF#%R?FeG@N6C7P> z#}5h2szl#UQTte8qKea*J!Ct(;_v~dn--{2lcb`sDb){Bb$o5Wz_!U`9nDxG;X{t- zg0BruQM?}}FQ;(%;BJRLFb>;$S^nl;_=qFilT7zvQQ6=omxM+W% zz1|BSb1Z4TV98fmviLaJ7R1L1VX@FHG1hHH-3bTT3J%W zpCvKh7d*H0vNzzCv%j%43Wqfk7df=;N$*S6tiW{PObg+2MBoBObsui~@aozMB2Yi? z0MeEZWXk|_5jXf|h9&<6%5x}~d;X@^muI?5`_0YBk9h?dro$Hn#1=gzXOhs^dya&{NZ0)L9qF*GR&K7*jGhJTNtD+})x9rn76LeL?V2 zH+rVIp=CQ*?`ST#n(gd1b%v$kLjkXvaX}j{}AU z@B;$e6h)*d_F}e|w-UsEs1+<|<%f>u$Y%61ZCojOg8UI7={c|FADCf=svkR~&G={I zos7ei574M|e^M?SI*K#TFc*NbAA4KZ_qP`Iu(|%JBbiPjVL8xrUMS;q1otz-vFc=V z|15uzZG4P5j2zGCH3e1b8c%|^EP`K@_g_z(!)+i8mVCR_0h^`KxU-{_J!&CzXcm z*c;PDZd9^=k!&TxV~Ghf|GFVr*)dsNSl9@SO7?G*EcVbVggEA@X!-DSzbfD&y+_@`4(n+?xG!po? zgGgI@kxj$UMXi8v{zDwDy@YndqL3R4p}V%)3m1a(t{mWhVq&d}9f-3gwF|?jHI-TG zzS_b@MPwr7pNpNjIb^!Jh|^7Lp(^(5=__~23Szk^S@87vhy(4?z#;-V*zHK;ilYO= z#T;0ggObf3S13|f5eh+ZUYwj9ba17REyENOx7u3@mvBs@n@!lEOUy zqt%(8ZP*{6TW-Oj5_;iMPI@!`;rKS%te9?{Q7K=V%IwP&z;y?Krc_w z8)t&Z1jECyEqWO(L6OtPf||n>9Osd&-9^LpHsjLWC?&yNk#JnQi(m$r$tY&+vi5EJ5+iO4Um>O8SUldCwMv@cGEj71k&&NVCnNcgH0-UQ*w-VIx3 zvakb$>@z-QZ6#dIVWf2rX4V+S35e+GBw|PH61U>WGen|=YdDO}_?P1wfoifMw2WCc z*l1MJ*Q7Lky4A@Rnjqf5j`?scr@lQ&efX5CFfE2_li@Nj8}~+9D&p%n)jOrB4xCNg zv!uLIx-OM&1XJ?279Q^`_ptox;d%}r&6^{;_WE@(R7668ca-P{uZpCp0kFf z;&!-!!?^&qAm+w}aYJIzfdZEwR&3y@MHZX&DgKNPqSIsVY87&mgGn1bWLB+c#wdvB zMkG3l1v7F9&-~6kgzvVwcrz1j?D$4IcyilE;O%yb;=KuZ*_r3BK3f^E)sdSzti%C# zW};f9N_HiFGm2McR0w>)jOyl2c64JpelgFiO7s>KU{2bOUINp z%sYa)rxO(Jt%%FCV}3Jto)u!6hf>GX6b1ZO|AV9E~zLLEL;v`JThT%pG0nU zLPgS8x`@M_9oOi-ujqu}%tWYIuY--n(dSXME7`kHmX6T8GjGgei~Kq>3Ski2*v^ZS zdr@ z6TeeuPl8)0$oPf0s)iXqR_-w0vBN*NI?c^Vn$eP})) zneyy{{g?uQw+9-nSstX;4m%u0+Io~XX*B+3Sw~PiRVGOJv#)iibZQM|3*B&vqq$qs zTPvm28?-6qyHlB6i+aOsp|RJPUhko2+>tG5#$0y097x(gbHKEf%fQ_lK~e4|C98V$ z*;rurIZSk7KV@;@bP*!?4IH0niVlQ5j`i%MLURH}>h6sY74Kg1GW`q|?^jT%Y=vOT z0c{=$G@{Wi8I|Cv6y#EjmH=%zak0JB4f~ErR?VL5SOMrFH!9g_%HluY>%;xiR?X4g z5$sEa|B$V2Swds62%E!#O1+t?5$g68okpUW}2He zH*J9V)d(Tcok2Pd!s8y)#&$blh<*aN6%Yf$M0q?WlVx3A;7D_!Wk%zxv`wzV1jKVD zc{u#mNL6EB5X~S<>GZI}m(?Yl>5xC~$+fRh0@g#>v4{d%w+{=Nay(w?g zfc(vhkg)D8EDh*vt68!CzS+Y^w-oNNU_mQ7 zR4hxd-416v&UqLZKOGlm$+VTAB=vXc{|`uuyQKoPk`*#^V~I@dK4BNL|UYbj9FReA}%h-vH&^+;L6a5 z$uB1%jD9`G!K6(stA-7!daE+^&9sDffOu>wG2DuW%(v%C@O4<)91e`J-7$cPY)eDZbOyM*M^EimOgFZLPt6-z2N% zq;@XVtVfzzZY->=y6D-v#Jr-C1J+G!hp%C*azl3gf>~qZhjFXRrkWv(okOXh)OgVu>w-T=iBU)mz*A zT7d)w`WS+;L4~uADK)bYoUJ&B2dx*1nt4wC+rgzR<5w*jT=iB(L_m)v5dDPJiZyd! zVGacr9_LU-yTH|g4zIA8U8z5w>UANHwq-#_eugJFinIy&$ckGL5Y7{c!?#nr)E{q# zCpnn3`M}sfg7^usyABX`J{XQp->(~;P`KWClST8));iQcL%2utymT%O^27Idg!WpZ*@9=*C1JPp;cR9ScY7gmR(PF* zN}E8{_DFU11@n5sutP$_!UgFpW()ITR8-X3W_W`GNpr4N)7K3%E{Zpjf?;-ks-K6D zaXCqGYrVy_{u~DN;Y|*04i?6LMqa~SpT9X$SlDkScBR?r#Koazc#A_jzs-&eOZu&p z=6ll{FAiE-YR&NAuD3aYlhX<(tCO)%vI}op5N{_0pTFFbwU<}>>){4=YQUv#lFcEo&LsJ7>#&c4g3r!7uY3|awH?o=d1^KQ~`VR;qjw{V=%f* z5Bo=);^rj9Y7^;=O7){u1MdU04Si;8~L)u7CMi*mLN!E|+ZoQPq zK29?H=Tg({L?Uc#UCuJpG4+%()P2Gs-Xp1)ij;KraTJ%#P&ZUeke?(ZhpX%t5A zB(^V+jZPv(0$7v;9Q8|09Ni3`>z5r-+H6g3hf(nng@|CjBAD|!s}>h{R%exK91JG! zAn-7J)xo3%v&fp2j4qsMA$*Mpd{=7fw&wvpaa_Oc@NC zK`a~9#jFik;-2YtebTny2Q?sjmz_b{?MTSi%n%pH|+XiD|WPDJeZ`T;+ zeA}_4l}v8diYC7rA|k5qkc#1AXfZ6s$SS%)OLx6@w=MKc<51@o7ogEEhwnPFd*T?xJhEUbpR=YnBggW-;t%wrev>Dn+A*v;|Ii`qrMu) zfd;AH!P49h9m43TiF!KOG6Y@30FlhF|93eGxDsM{c$zVc1^Y}9 zXwVCPbkIi@j<_1S{qAfxJA&!Rq(%NGl2_)J;V>2`n&Hn5?flL!qgl!Rg|eEr!|UEX z&}lQkeKIEAuY{a)rZ}^NNf`F$qDyLZR(j#Dj&3RGZI{{JfKwT+CI138r=fFi zhl@D8dndiT0o#T+aJNoToEIf0+pVM~4>O>-4tKtVi#gzS60jGEMd||0Y8%^JS>P8Z zI4AfRFxwnwe=FD=$2MJG!r`S&@MS7i!5X^~za+((9;I+9A$969>VIdpIoFxb&d6(K z=_@bgXwpVR)lV}?NqmAppTt@{csg0 zoVFr4B!NCHO7W^xWZdOoU8tP@F}Z&-BMw({EX}0XEc>JD-w;jFUY)ephaNv)%*h(l zS%!3-`Wz4{+6~umglSO`vT3hL7qtSyxh8SAhN(ea-T*dMx_ur=#OVKPIhr&Fft*Ur zu@%48Q6eI`Hi__`^G5GREELw87qjk`eWl#d*Ku@bCcVwV|7@jIT+$sqTuqqQCFWJ2 zq;N&TH4qojoeS4U1n?w{!q$Lv&ivL1Hw;~b! zivtF1c)APAu5IQ`GY4q6wPU+i(%Ts@ZLewIZjGQQZ$nCsDl>;JUv0qr+Wha~wvKA_ zj98An8sBimthA3(36&?}i>mHZtje+|4G-$u@L4zee{qf@^Cwm(G60yvQX<|u)4aV!3#4=IK( z+{tODbvgqc%iN$OPog9o68U&HYa$!P0GDGo4kK44k;^RH*@2{OiPC6S)~z=9n?odp zdKaQ{bP3-f52XMRhX!kmNNZpZGYhI8?&|pV;upqGy2>Vvt$f342aylWgHoKJ;-#TzyO|q{a1>5D zskDi$a}D5>!al7@XB&0so~SJTO`s=fw0a0e=?}nDb9$7+KnY~JRMGP42jD{ zw&oP4R3og5<(Y+Mq5V`uw4!8O^ZE(sdr}a^?R8teotfWt+G-CmJYb&j_ z#+K8NN(U!wVlcBZkF0W7G~DO((|W0B&eVrl7Q!?U@ZXrILwbp0B8#x!A&nmPZ6x-v z5EJETq%_x29+!vD9iyt#9n3}==fbaPHl=w6HBUgvpl9Reyex!j;^dw5<4jFtneTSQ zsZ1kwhIoM(7GZM5GA(C~>A=wVo~tTlFR*$mO7cy0q6TN8_lpkfVjgJxgvn*9OvzH#;jh2)Sd2uZB5?nHGpRGS_(7zG&K{IR-Q~ zdCr<9&YfdGsR2V}qoZ}c0UtlkbfEZ_AKnDnPG=N4m zb_gR1I=Cx)n_rf{rnEOzI5q3_^YNhOwzRI(%nhF85cT2;tv zL}owAF9TJo-PSR7oHgiYJFzz$bfD?0bqd|UcI?5H*;6`$-_ z!RaENh=pmGWY;OniR&!R$?7q;&DxCp*yhn==Q-sxpI&t?UuRhA_oey`pGhzrC)?nDIh5Wy6C^7oZf@rH*wm>o$aQdqN!Qe0My3*upf;83Yp$6dxQZH{=? z8`IsjFpEH~CG4=W&=D(D_=gd`6&~*B(wf0S#^{R6G*w|gg4kSKKy|~CTfko3#{3#j z80$5*+u!idXamC|9qGN3%CW|>A=ljZilTfJDV@iL4bh_=(E0b+z^X(aLs9nqK9~y~ zn#;BM-;QInvqEzkZ#T9_E=X)ZOn8qa9y>7p+VGRBY$EtL$Cu{#EE_hq@(rfGor;O# zGM@yM1owEt-4t*`#xmIj?6v4FG-f*3Q@SlvNuc9S8NMesZlaM88sleZ$8yMr~oLoG!5 zJ>LPGjDI?QDpnXXhT^hpTL>>8!nLis{%l&evpSG9XnYG7v_XecI_6oAGVhk=6Vh+Vc!|+N6HM(MG zw2<42I7;Z0FGFV5#qla~a7r%l?o78I-QA6S{F$TCtOLgur{;VcX|Thq9a`Ehof?Ts znWadJ`!(cdSmV-p%dN()vvzN>VE5H_8|if%U7F+03>nX$NvXb;s(!mk+-LSWCpvnJ zskc?F!sSgYW>vbcr!HOQnuhK!<$U9Gib>_d8yrHK7e^-T(RER0UodYZ3RAYsN_GY57DUFfusQUP4yIc6f^eN*f@^n!)J8 zoFRp2A-t6c{ICzT4z?R-;E%Y^jR80Ku3F1Tl;a@MIzF>!1Vb&0;q7E#$ERV8&4`)K zmdB9Hg?BiBw4sTHNkhWYsv1IhCs7#XubRc&P+U`v>A&9PNYY$HvQ??F6~mH$H|06| z$(zNzA&ik97J#$u+%;@deve~Gi~r0G8%%yRR7Pa)B^kpmeBuDBC%xVwZr*;MLrPl& zlSL!ah4K=V%nRlHMA-xsycY8moxJC?{aM73MM5oQ|08_B@uXE8nKd3=4AT(Q2MIN_ zm4TI_mHCjPx*%JbvXIa|OtkXnWjQqq|HnrhPug44=QSjwW^P^-A0-9bx;#M$f56T| zM1QU!x-xvsVWbUjb8Ggt@~f(CF?^g1TtADOB;%j`t_7`yPdNR}_;=$Q|7gR+Ym7?x zlN82(X0WtdHg1zW1=0LG>kL7AIFg$?X?x*QjwWrTD$d38&A5i;?hTa`>!-;|H+B6| zJUfL2M4>K*&p5<1XJ}#7=!(noI(#l7sLv9L%V(7?B6EPm-wglfc+&hCs>h?ciHeSp zK1ZZYKpHdc?S;=fu(W1KW@E)3va5;17fj!Kg8BlXt_Y|+2n=y(efSi==om)(SH?$y zMYEFq5@p#t_;}&CnjCWof7v0VwKK99i@{}MFPRt0SBSzTjbWp(@Kwi=HtsB&GnVp= z@^DfhUn20kptH4I$(+5-6rLFfcuf%|v15&uNpg>rm20UosaLxA5+bNq4=7Xnsc;`g3Zg@+-5jwZeqDzjs7C@C$6}MhC}@^b_R9 zMe+xdWFa}086kU+xG{F6za#UL_6~HAPALm?4S#fGX<>T|p<(g`Nmx<&n^^6_CbfE9 zLH~)+bRok_s^bCw?2tC%LN3fn=`U2`i{fVMEn6qJ-?|j$vWS@hnwh^k?X;N|OQDMu%k(9w8;df02-lH=h@?BaB!E!@H;3eYUaT z-wrRW@lKC&j50#|57BJwpUqKrp!J``&kd&aYsSdl3!yHQBl;7^{+UI4tC|nhm>0^0 zp<+`qLN0PgkwDKa3C$06&%^FaCHAF;I7bVqEcz0S*h`Ssr-7ee7 zILO3UX}*PMiEuH8nAT`H4Fh%e%Kh-5uBb0g>Pvx|t;{)H99VG)2XsgL&++Yhb;&@+ zq;g5BY=R-yYo@E*w$$bk5NsLpj5B*Mnhck6>S>c`nYD7z#V`#)U7An~^N_P)AELj^ z!^m7zOrg29+_sP~wp*8RVE0NY7P%cTE~!ZYH%d^Hmn9`<1n%`JI)oF7$d}R_d@NQItpC#MN20hyj zuVVBQuHu-}`qAXpzfM!oS0yw4mE~!nCRy@L7j|{h3(6cgS2JA4L8X0|6@$iAxsx9cK?%`Zmo(+|w%t485ii{(#@k-cfuy;CYS-H; zh9!S}%5zzMfyqm-X*FQ9yaHc53gHG$d-N!|@R+s_V+&@FX)ChX)u3(3-;nZr7k*M` z2srT^+o?A>jGg%Bn6nFQbfPK1lIj#25ylK8Kq-(3zySDJ8?y#SzE~{T4*0S3x0|Xn|&! zR$%XHd*yWOS`W8$d}#p(HICm&Z(0nuBExZDV8>RTUb~qz94_6!ZuyKwZ2rV~_Q-T_ zYe&~fDm^b`rRZ;tSJwmFh7WLgC>L9wk-ID0*0J3siLE+1u2_`bQPks-P7!W1%Tyns z;S}$-0Yzt1nnzQUYZn-=V~pF_o@f7`U2M-DXs)4U(irI&hmqDGWQOfsj298tvES8odIjh%Z?(7+qNQyl7U^cc3(T(&{QWy}03y zPC2cj4qaKNP05}}*;_+ala&!cdF(Ur&%&J?&Ro))sS&U;sk!e15i?;ipG0PMwrYd$ zcjmq-l3Yd~&z&7=+QdzENBhK_mgw$6x?6xQ4&Ji8-`TeEIG=3xY~v4iW}(x&t7E)p zQgK$STR~Rt4A&Fq-N;F|Q{j{5^KxCaheK@+b>b~5*SVwzY>Q(HIXK++ z%Tcxrrj;*bjqfpS;Z_Hf_Cm|1t*pv7xb#)0CBO*+mX{KC#X~pp2%RwLpwdc7iv|Xy z3vXKx+X%sin;Y_CDvPZ<_cmhW#&)Nl764n>+UHD4_GHSkRYEG^eXT=T7U8J6!>QgG z|7`rgx|EaH8IrMq-i4YlXMLzra?<#zr#rDvWGUDv?<-wq^m?v%JPNNtHbF| zH*Jt2OZND>D4CV?8Ith00=RNjUad$QyVV%YzJ_6YP$?$1Gs$)|*kV5j zV_a9vlId%Cb9ZZ{g;TC<`kVcWaF&BT02|}mv04?wt^Gd}5vN99{P!e3o4sK%#Y_xh(|Yj`m%GoMwwr^$mLu`T=ymyhwXCaZ(Xze{&R=~h@SU$cOK6C**2QOxo{uH zmbMvqv^RgGqBxu6+yqV>d4!Zl2nn6g4@`cvj2Eyt*IMtL5YBdpX%nv8Y^;;AJw!xQ zEmCoO?RWK}_GvdM>V|$qF&+#vj<1DZA73H8fMNQZ!&L=5OJIh!`AiIP;@S*zj&Afy zWZ~As%&>*6?O45t1?VzJWafp@CWcLin57+qhPdf-9*44pc}I{o+)@=Ay6cm+CBH!V z^w-85TVc^*{Xc(gR26WCz*oX+D{at?9r8I2D{XK%WOHt%Pd-3R21}G9IngRC(0x0@ z4C{UPb(Wld+PY)eq}7-54X>d>SSAqN!5U3ZBY{h6S#CrN`&n@~`|!`le_S${g|fJ? zpFtTBbxFj@VDDU}U^|}ukiK=!YO#80rPa&~hgF9+Ix<2{yR2JD>0*qO5YHtdhcV~D z8bdbB``(CQY{B8A4P(rbvDDaQ0#haFPd*Cn$?q>IXMx1=GcbwVLlWkkYp9`}j~T1-0L3+FkwGx5vgzqKOGc*M(- zko)xJRW)JWmzWk#lZ7B^)u!LI1#0ZQSPJ)ZWTQJVeP&t*iZ61wd7<2&D7V2w(?PX5 zt7H<>gZZzphX=W@cC?pP!vh@J*-3>~RWQKnt&ySvejtI_7F46kmk;8D4FBc8(&m%H zL(0vnlpjQ8t~FO24RjiX2Rq%g8D*`Xf%c^M5Gt~s^p^XpZ2G2m@1OGPVh?rNY4t=F z?KSA4#=KA-Mil&4`(=^285_hNhS>|41%&nRa0hl4e)|IXv})x9`UrwDif*L;jQ(Y; zJw4JPrgddy%T|8n8w0MoC?&i{5szcn>b8uN+kN!V3^jVRLrRN-u34SSwq@j&MerCB z&{tT_l^0XvS-UtF{@Wp>#%>gu_N-Kf*%!!T3BsY!%z4K(ww`sI`gJVOGbEcMwD35G zl2#ftXb8hC3*zyFU|4#VxWi`zd4dB-i%!Ul#g8jy2XTg_|3vE3NtJKrLRY?o(1a&B z;n7}_p>r5#Rqs}sNvQr$_#a1-HXPNjXTzI;xu};B*;7cyT7fo% z%aZ$X7zd9T;F$+Kq%>Z`MER+XXb1lJ_?9Iz7+=az*x7M&O z_I!ty7Um&qR#LjijyRWTA-sSHoRSQ4)Sb}^I0pEI4kT@gl-o3t{K~lkO+h>_5>ICp z<;DJ^v2*I+344%hqZrAWsM;3A%Sgcv|L`1=q0M0aiaek=?+$-qCm7Bp2`_gLX;mdNXT>qhv>0AN2JVT= zdd36M#gz@iUg`8l_jQ`;)O4~Hv(kPQwK-#0M1sl2j@?@(co556XMq`wUhSmQya#5< z9=yh;bYCOgV*Lp(2n*^=xbnXn(yd#A%56&bwbVTp&#SP7Y%fC0e2(}&BrB7@iM?jF zC*k;Gjt#GKR0}M%vD>?xPW)iQ66;z>))xKiNzZmI_YuJ}f+3-0dE&y&8ysU=WtBC9 z)5S#9v=H7%1pGIoTjEL{oYY*pLBbElNA$y+98_At9eF=cqb=$;lllZuD>NkY*J)iz zuRI&PU~I+Hg~FO0EfwD49w2Rn$xFqyV06%5t-c=Ot$YZ!nDS%DGh*?qtJt?1-sVWt z27j_=gt{0oE{wMmgA;E=Z?lbR?9WcF#texo>bw`;;Xu+R-m+*Qx~MTPly?$^tI7l8 z;nq9?Qj04rTvZU!yGcZsk)QTf_JJd3dT4j~o#1fBUU-kAOB*Pa6|BI@ zH#pNCAt~JV61OtL>R`zUGpzSHq|v?3_!(9-E7|u`_A>FkH87KzL!#{uIK?~Re~)io ztMQ|FVVOB8eUM6=%W1A)X|J+;CUH}9?z{hxBe-W0fhH*l`BSQTLi{ih%bztI|CZJX z3Bclcui+z(?0kII1IC5%QDU%f(OO9s%7hktm&KTW%t55}EwW}cR2R;)5I#->ZicA3 zFD=PQ_dxiB14xT+9qz!)>`MKURKF3_Gk?+a+VXNMtnWm4Ee_q~8H0@}Y>lG-?o*B= z(QDu9u-mti7^@+wPm}7_pz>dLCFD)xoHiPkUigf|OIyP)3)HqJ!xaVlS;BJ8nmyk3 zHcrF~a8Gbl5Yv!{|8sC@b-BieS7TfppCboj67yBZ&S7NQI*hqK0!rriV-ur=EcNo| z9nl&1#qljq*|Zf``Nl9U0e*pi9Cqg}C>9Y@;h^pPqT?C;p^a~Q3)7PS66Lu%pUcx9 zveZ5d^)Ea1(O$*z>bYf!e}&>)cIE)7yyX>dB;WEHzUna2{H!u*FGLsG?pn4ln6D9r zO-{a?$Ef=AFqXEE`mZ~R(S@POS8mHN@~g6C>3@Uz9KjS*=)q}uvpXNY=}6LoUJ9#* zQe4)G2cgW%H^3KJCd~Z zfSRV=8J7M}sLy)2vbH>fj?SVT_+Ic9&skgGmg=86gtXp8_N*XuLC0{#xG;W3jLQPU z@+LOo@b%|T_$2)Q@tsJuGM4N~>lf5wPiDi+MVymsKX7i16FsmEYOaZ=#!gA@-3-5U z5NVk;bJOQf!6 zAj|Yz_^o3}+h|-iY{gT)QLiMp-w|#T;N;1u1hnGIm7^s5-l3&sP^dL)jJ5x#Bq+i^ zkdVv4{4MReDs8e_TRE`OJ+uOsEKd9Wqk~La4lY|Zw(^Z3Qo{Qa@i^mB#cs zvIZ|TFflSuAxFF6&yFiC4}Naapz^C40nz-0H2f0t#k&cu+vTyT$LartzdEY4FHyff zY+Z0rNOXTA-OWhnHaFNl2do#Ps2a#77I!X%zdO9N2xPNu1(u{DwttXq6WE3=RG_=r z*Is}R;GYgFZIF|jHMIQ7t%gWMRR1E?%|Yd3Y*)LeVp|xtx(|s?mYDCPHMbuA?by;L zRo=KE`kVEN0{ss`85)XRwwyms?VUQlv4W#c!-X&}EQjf*g@$HkjKrIi=7nMT9yI6N z*E()>(iRA|U@1+WQ}%V4vz#kzh;%s@jqXJpVIL;P_liz5zSgSG{0KqxTo>hYakxKl zvNfjq2g1c1?r5)mIKM$+W>w0UrgBR1I=FuOligWl8NvYbG7f1rsSa(# z``#<-3i`5y=37HjS#x(!t)JCd-A>21?W0>=50`UU#T?5*iyz_>6jPYe#Vx;-pX z_7`_`4z!W0V;+eC@U=C=6&%Cnq*8)0ldm@_?JH87;{^HdvelDbjOyo>6Q&P|@#0r< zAZcFI0n3IpaMyMbRP@AnWtES@VRy&m8p^eF6^E5Jlb120(M8p=0Io`aTcD7XpCT`$ za=tN+!g|;%fwL{H=7`b;RJrxBDMkw^Azqz`_-~-g%XV4COsM%DCw>j#8jdn8a>w^@ zvHaW_c*9i%d`$wgkFIxI(6xkc9VD!=AckJJmV-_6zr$ z40@h+Z z~Zh9n%NnDYoR{C3oe^+bJq=i#;+qR5OLHRPz3+`K4` zA_d2p`S({F@CoNx8>wyEO@uxnyM4p4jrPLirjH=lvnnXsqe;tk$C0ijeplfbhnVJ7 zDBHF7SiUjf!=jMTjwRX^fQB`^-7TCX*NCYJj&mG$#6KC|p}~mBSB**QcxrJ?YG!Vx zu@(Q#faCyTNwF*b1gCeGBt053!9j}>y&XmI-{?Ub`ldBZZdVR=0=j_PJD4+*VA98J z6*Yn0fuP)9qq!dE05OTi9Uaf+Bp%tZ0@6ipRI(>hmQk#=s{@@m%+EUW>)}ogA1C96gBU~kM#;P|?nVq755yzmr{n4Mb6tyNK@2-aRGS@1+JvW)R0fC9*H{+B z7DBMy8s>4E#0j4<;lWnNlICvA?OKuKSI)1OtB7lYTsHt$jN72&GbX%gth5g`k;r^u z#rz7B4k|5(qcCbz#bup_khT$t>lAa{**+p`8++IK$TKs+TynsRd*{1$FKl;MX=NqD z2BnMPDgry1V03QOc)%Byx--~nxx?|KO4kJr_=KJWc%8_`XL=BI$b`N}8g)J1N;kRrUm;y}<6uT@EX4fG0z-l*$_!&8mcV zQ<&?(m5*S04O`OT17dm%c!2geg0zT<+@c}mSNzDT_QkT7EStchAs*cuMRM@$)JiS~ zPdT8p-6~vx&9;vqIr%BKET-y`I znEtTeabA$?{ZT?VrxC~MdnIX^4Mk6P6lp`UO7~LaEGv&W&!8y#_i`ddBnDl!NhJqs z)vEa5(m zYzDtSzP0uWR$~6<2w5RFiA?`trCpm~#^0D89HY!FOUqp)W;)x^rnzKuOE^445{~fx9(=qMRiq$1lZjr}$|V=Vg_KRdbGU zI_ZrU<_xa5EPkr$2(3*two#Qi%<=)I>YjHfX^n*p8Hg@yW@J_+yg=bi5YAtJJ}|ZP z#JcK*MTe0#JIc)tsZ~`GQFTbg2^&8$C9H^@UvCw84w2=Mj)ZeIgjBX^ROK53B0@Sq zBsvj_?9Q`YteP!3hP2h|YQ$94q!gE_$XyNGkAnRv_9ucL!itl;b5>BJPw0wP?17y@ z33e&S?_>Dz6|eI!`&*x2}0qT)Q4obsOQeT(4c6`CNZu?Gpi=Fv?IM1o4#qP+7`n@$iS&WHkfWsOd?4k0&<&k$T{&)2e1|YaQx7-W{h4j zEA59-n@xTe$G&rA7Q4#e4{a??wt3H%G!apP$@#+_Nm`qd8McBLFCwl-kc&;c-d;=` zh4s~Nu-(LH3VXRic%&mr3x-uC8M4)_PDxmgB9<)-b>?RqwpAN`?s;tY=CL#F@Ms5= z_Oga-`OeKs{V`N$+pj{gU4UG2=8{r#9=le%NXqoz4kGPa9#bl{QUZG{!T1$rLGW2# zqG`)`gw%)OaSkcXi(3;??=6eq@g$(5K! z%HQ{(ZBaah6pSvCziGrd4>rPos$*(puXyxOx5m2h)!g@oJd}MnPa`eAc17a zPj_%>wOYoENEcPhDz0Y`fURKtfV|bmYV=}wro$K=%%KW> zuG<1{FFfBVr+E?whWdp?iN1iMY}ynHI=$r{+YZmR?F3YwlaXJ97dnQt9$I#-Lh53u zh_GHntWCfIfsMC$>NMu4D?Oz0vQyJK$UT8XXW_+;Ds6>IW{pZ0!!!i-5<*=XQ1B)q zjx%&t!%Lm|iTJpTIz9b7~9(70Ku*6SUx>D zKdTU4Q3N)=&S9ig6K~o|!QZUY6Xfd&$!by`Fxp$gL8^#M4R3IGX_iN_^t7s zdto;=O5^zD6((m{}8<_(xkj8*rUtJ~M$=$qk=hcVub( zrHtlveYk>vzCj@RLlBXU1%Ax!RvOq4Fvq#~Hyy;C@z2IL7^M(*XHc5oqUM!gti1KQ zg^TcQrPO+Z z^JUfAm0HW6-ag!(U9)5z;inGj-Xq^uZuYefiB{g4q@~X|M*#HW>><$qOeT}${D$DUnKpGE(+!s z`?VuUoDk%84WaywC~O=x zeXE8T$H2SaJD#+V81bZpGFMJ!`-6%{^=o&wxi}^+4S#evX+v!ptJK`8WfjVw2*93^ zTlkRIH#<1E2iIr#vlCD28B6E+ID^vs3pMHVgNv_^g!HSN!#1|XT~{0!oZbp2ui^X+ z&KbjB9YvbQ-b}~VHbF#Wex-40F z^oXRaEc^=t!1e|Hf4seQfLq7){$1uYO_}R7wwXKOkdq!inm90Y71_WqOTTQ1)iS4pvE8YzF zix=A%|FVgmiJ#|@-Jv;$#C`}&xt!xm+es5&gUod4#h5H6!poB|n;ez){&ujbFI>U# zq*blbQ^^0mgLHNA(bg_y4N=|n2Xh{v$_<+dFuG9~r`bdL``3ELB9BPIu zJN*mWU>2r@a4-=V(N^tuJ6(%cxQf$Hn<3WsywRj|51}p}b{09baj^xrcZ18*;i^t` zJ$`L`AEr{T2|+3umG0H3O9vAd%G%hV$$yzY4Bh==n>j59;p$F5&A}8+S*;&$TNu|M z1|3X!f2QPF42b5UlXQi9J>qgQ)n4v2 zHsC+_c!##ma(xGOY+4z?gkgAl61)KgxyYopJsxGv-Wb_2TW~(!&-KOEX5Lt5ou+sQa+T*+)}}a4*1n^XhWRk-`J_9 zRm^G(fU_yh!}M(xM~=W+Bw%5_;eFvIPB+cvAxrjkbx|@a>6=oT?P0bIi!Kwg{SK2I z+{`Jj$FEIq4{O$QOGc%8bLz4K%znMo-DAI%EhXQ=NvCyyHPThPQokkDITg-V-185^ zem`_D7+DIpatx;=ef``}EO~f)>F#Rew{!bqxiwkJtE%y>GZ%J;Q6IN)9BFx9r@nN# zfIto>2qy?y2hNsl2Il|k?C2xJ8@rw9vD6B2r@sUBrO!a?hNE0cDyi^Jf`;%%{5t)<-U zm~0Kg(GD$b)iXD3g_vK_^cW%09YZ?44;Vt7XaUFFPUZ>WIv8V>j|#VSP-(uH(x7ad zWl`LY6xRm@+(>K(8rVc-KjW%NlY0yX;r0&W6#T*TR!JtUXmn9$UodwdOycBk$@Wc$ zJ36xeSChXeC(t_yl%tD5YhMFD`Or`e@4jtoHU~rxyK(2n?6nPdcA#mQC1gJ{ZY8OE zQ#D0L#VMT ztri7t!yfHyo#7kAros(_9bTQ zv4=)y6$goLbtL;=b84(gc^j2)mp%Kq1uceL#eF}R`3&;-lUS*m7}_y+IR8)B?$~x^ zmL~6EVLg+U6;k;I7k84x^%YK4;c4|m3npB$pK*X`bxD>CP8TJ!l0J>n9DbB{7jsT- z8#k~?02A`C!y%*vp_eThM)`)55Y8-dI0cLo);J#L7TBE*Ai4$!~_8iL6HI%PR)h>LsdOe&()9!|Q zIF!kL^xWuvEO$vtgy)j*C=l99-bN_PV)tIH(Ae0WZ(%p|2D>p6J?fa`^!h`jDp~69 z#n}Y+bg*e5flkMsqq{dC9B7*B(M%fNB;z7! zk%TqBwjmg{7I;_IPa(?zY_AE7q*S7xSSv*zy$){ z9Ds3fP`l`gmZn(5+~pAOkyLP1>xNmqWy6te$ODDYEjDerpg~ZpGU4-nJye`!C<;I1vml%g;-wQ|XsjH>uGxoE0L&rNn zCl>ZOoHLV3!*!!ZOr``A*H$LWXxD}QMD|9 zdlP^?Xy#(JttGat*W#Gi0OCcrl$PN>4kpbdCf~KplzaztP-19YFDJtLl8_HjgccBo z9jHsqLBHQ?q8h_NHo(E=;eHnia8mqTotyygPe7~aS(;n~h|^8GW3>l|KaVd94{%_K z6+N>TEBZL&!gwGtIMFG2otBpdo$w$hejI*h`b$2>-$aX2d@vQ+xR=L72#23TmWO@p zJHtbq^eIWwWpno3%QwpQ1@cgWaBvexdvymq@O+9vH=c&^Fh_M(5>>^vVO8#+0V$re~w=g^KaO=)9>2jet$FJjln6C6mImwiy!GM3VHVOs=G zBmq5yTpUrRmW} zyJ{n-L1T0F33>e6-9-*5Uf~GR=JAC^qbM#%1O)R+!r;HrWj%Bftp%j!E0*?lcVl{< z@G1wF)~1at;Thw|-SN6&el?lt+Zy@X?K?N^K~&+^{(`72h0tppZxeqzeaJpyy`HyT zQ>?EgDJZKf_;v8$5(JIEsx) z6tZOiy1>Yt5u%95gkj0Qk@DP)SDt(1{@xgy#*_8l&lMNn@h6gwjA zDBscF+t}SjQm3~#j5HUX%ou_$WK*JVr6}D;#k#bm+QmEnHm5rIAxxjUgv_v{-!AEj z5953sAQIl;q}Ky*`WqrU_Jws}ju9G_>^mvTu`VWftQlv|-6h0@6KJP>;v1Rm+QNCF3;p4uC1Y#mkneGjt)y}) zWMb{yPgP;Rm)PvPV>XdS_5+@Q6{OnjaiQUTjxTZQV#!eAU~{Z(QM{iNoO#3DRNfKz z0VjROq@pQ>z?Fx0zd@Sx;`;d}s5+TlY^Z+(*97(YyARJtFgE??40rQWxz6T(Lh zNLF@6-xL~^>_;ifkwN|73}ckxTKJd)NShOSiw5Fv#^IUC2dcsNHBQ<7&*`UC_L>N^QQM;U6e&1f&(=dQ z3GJYhXfK6fzuR95pLPh7n{3UAGh6riJhw zA~2egzMb*gt(I|yW42Q&eAhwE5~1 z6M5Vh`{DbJHEk@XGOHBeI1NGlfKZ14YD(O}T)(pxe(1RFo>Yca%SKndH4@}NF#-OF zfLzwe9W&g4Z#`Jk0?@*b9aUOCCUeH4iy3EI5I-TrIzT9gcMPtCy9Hr)OtcUeCiks{ zpE{T`l8VTgH70j&L`rNwBOAAW@UJolYvbgd+qPzhiDxmP81~U2@pH$Qx~g25Hn{_42W{P8kaS7S@o1@bq7 zAo)kWJTjZF;#I>a0#5%9asSKT9oQWHe0oQ$<&yfijp?!?{s)OUFRCo)uu@<_K4z`^ zrvprzAqsHPdQMqJK>rd@%;s214~gwLn6M(d)W022+IVVGc1W2P#D56E_pbWJ^J=Zv zMq<1FI)t?MZv0!HTNc6pNI(Z`m0%Is3_HkLak1M}1I5#JDUH|9>`MLOFdru@d3)Q2 zBOIRHOE}^6K%8D%$F;T5s8laWRSUzz;1cn7yD^wp?KXIR%6unW$|R12F@J(#NWGsG9?G<$vQ_{FO@(X^%TXvQ?XMM)k) z$%7!7uRnCphg0XOPH+9hLZ9x`p;1X*jgsuLG{MuHuHEYOd&uyz6t3>%6C?Vv`Dc9Q z*~N%)VO)b4^mdH)oE)EpYdVIsNo#VqNe!V~izqh(%7l3&Q&b|;H~cW2aBYWn&cvr9 zheXx56;kz9W!_rS6Xtb@$zfWtfRU|}&{K;9nis5v>pHYklF$l+hE-g8`$D-MQCNq{ zOM5uDxjTmtO2wgbSLbwqT7*kh2S>$Yfl{+rNI){>0r*o^ul3!IOq`8Ke4kZ&`ul}I1aWQOS z7C5GqP~NN?JCybK)#(Ef7>f|KMx}iiwK)(`3nRDN;C$?kyopmz8+*x=$?KwQSK>FN zIICtp05<0ieJVXfU@&LJ%^X2mji?&{d((orIUyK7SAE0FL6&pap4VX_xm!4z^YCZW zpF}jwfp=?o%+ZJAYuTP2E1v11;=Cm}xx`gT!Lh?mE#>Z++1)sF>Q)Xgtxd@-8d82` zvEvo{V!1V0=sFzZsiI>C$JZ}4@&ChZ98=n;#95AHVTmK5Y=3j^f-9?u@Ng0y4MMaB z3=_q^S8S|k#4}-;!D42^Y`mp$CxCk~EW6==7m}WGRmga&w^Fo)e+2P4Cn^F;=`BGO zvc>8n9buX$rY@kgWL4TnQTtG6*VoM^X3I*^f3)LB3lG}=_o1XI%40~$*VZq^-VKu( zW|k-o32*B#(`ukMY>(96990wG?FeX(Fw4=Looj=kTf4gyZts}V-c*g5CY)*$?Tg|L zq+kdMqPzAm8}Ny%2=K<6fQPuc(j2sLR2|aa+|kjbxs1%F70X2HV!0Dp)`4X-K?;VR z?Ef(bwV!u(IB5axHS5!*3@KF!F&#@LuA^yrcXk{0J;4`-IElMBinO;(hOAt4QCOAm zaTMm><=Rlgz#a#ai{l+aTB?}Bq(Kyyn~P}4OhGtzRXG&#BF&v!XR)KS9o9RD^`M^K z>($4L$f$HrkZv`efeyKFqSH+)e;Kl`u8SBYL8}tpKw*y1V{5bv!*bNWljD!p3br(K z!bS&>Rt+l#jiPd=A|aYhq+#c-8CDFe*pcB3n_c9X-|TQsOL`7!GO#mqa+=+isfg$# zm5;3k^X18wnE8svkKtqolr}hX3(d8rMX`kx93es#&vGdq_JbJ7Vgh_O2XP@Lz#60G z#)WYTF}N&JEXrUx3%wvCFSj~?v_bMXKVfcH+S{nj7Q7mGaYCoH0&iI(+l3RhJBqDI zl|weIn(87(b~pjyoJt%9vE^P64!@dV#_3OfS*N=}%&J6BqbPk$iYnp%#qMzgKkjh4 zY1vb%&dSc5Z8$K4lANU^Jkw+SZ$vP+8+X^(_OU_O>0r)IdI(7lxEeX3o=#NyL?*2z zS&8*m1JaC~;V9F*nT7GJWi6kPS6#O%w1jvj5&0hPg}WIKpWe&X(&7bO#_e+lZ8O~6 zQKh}dvS&=X7%?u4vxvcnf?`;0(?ax+oNTuChO-?-+5&6c$hvA+1m}=|E)X?nX#T8W zLsC{$r-g722awjL%9<5}E}Us0oJ$0*bH?@1Y-Ys$&)JM9Yf|z&QulO7X+E@yb>phs z8LubKCOOTqysNu}{4TTjG2h@|I-KW-5*^FYPGs>mrP`vZ1+ZOkbmPRckLH&72BL&_ zhdC#DEQ)aYFlY{DOpzbT_9WP*;E}LJ&y@v9gwaiMaHk>Yn~Ri4@TCoM9S4*)`%2y* zSEniHE}=R5@&o^FZ-5*(Ji`OaTK%wyw`$&Drj4S;&n-qJM72OF>n8HGyhWU~yt1nm zb~%X2-IM&l<2vcgs&p5rYwi#vn?w{M&bGoo8}LRoS_8aa!yT=~L3gkNabEkvy&Oqe zJW1}9vAUFBjn@&|ZnAOspx{F6ir-guZp|;X76xI-QEg4C+_Gs591h) z;^;K)py@g3J0(e1A5CseI(_Nzz=gOqW#uB!$*oD}eCn|8<=ZG7sy_MaKsm}f8bZ1+k=PlHYZkW*Fg`{1iHdzchm{uLlN&aw{K~byg^bAV zPqLe4RYIu>m_HNsuNQZ_H<$u4OW64U2bUI5#xaO&8(;axSTP|!kcf;SE!vn(v5m3D zBm3M~?6DsU4|0U9?7L0Q(^Qz=zve4b73zb98jnR{00bt$+w6>_&G7;`ZZe-{c!)zy zE6j@NSO?AiWHAvwl!RAAnXo^?AYss6TnrC$AZg>q(f%#7C#{E5i!P)54AI#&biGUQ z)KE55i=FTYr=8Yx<`%60@~ct%VtJ%kvSVv@AiI12#MR-j-#ZD8#udx%_9(}a=3}lo z2&c}vNFGg+@@`#Cg5caZ>d5dI$B;I?(}c>3Ll+gpl7B4a`N9{oWrlTPmCmN#SrDo9 zB0NU^aSkUfWW2C#K*i+*DFHs7fRk4{(Y)lscr?M0F; z`_{Us7?%7qDbKis!c&8{Mo|IJa_Z~xi_>dnotLICD&=QWnQzGWRVw@uh7<6~IZ_2IqYtktV@2iW7VadOg@@xf=JDo*7bLz}74LgeTWllM5$6sc~ zguO{=zMPt)8$$Nj5t*-WvXdtoa;l6E%{Hr2ekGNy1t_0!Y|dhw7yc?IowhKlwXjK% z`k8_-UQLW!qR^`owDN?|CYC+!7@D)G&ubi8TKvfV_nT-Tm{xj-aCK>m`n9C4ObxNO z5L3g~Ikd@7Z2HvDtV;Ct6y;PRewDbS8pCT4&}K&m#Pv*`%^BX{P|m|2PH)3&OOpvu15KMU%CfQPVuFm&-b^&Ur$4*Qu7ux8;c_HkX@ENy-nL)jdetY6axfyFlla>y&Z<)#%#JQA@sWggIGEFu zs!n0ro=I^zy74N$S)H!%-bp<6y;>rj#hkrJ@HD@)I@lH7<*3peyRsPfYQptpaJpNg zBc^wgiJehp2P@LvcR5@O?{PF~osn!Agf3>dHCBct|6a;BvVvE5oxN^wZ)7`Gl}ZZV zCSOc?pW{mNAec)7;~U2C8C&_rbX7sWpU`}c))DlpM-rharB5b&z!9d+nRAPVmtP@w zI*QSbJj(2g<%49Q-;)Ug>@+|Aa{<f(4Cxre)yHfus)!7cC)8!Vt(Ac04YuNnSX{`;8*8d70b1Z4^m;O9f zoBV3Lj@Ujp8R{|qzU~dl_N#M?MEI;DNb?`(R>!`DB@Hos zj!YH*@iI1r!m)^dn${KULd+y~{UY4t^A0O5b|Uu}n_*+C-m23Q-WQ0+5va9!?WIMG z_pr;q;zZ`20!zTSgrV(H_@bjsJCdSo-x$j`CJGAmOGG_XPZt@g&Sci1Vn49OM8xbY zUv`LRWnXZzC)u9wV*hY9BmH)NDZbU&-SKMT`wICECSM4xwMP6GQ=jlvN0Sys6#qU} zwW>i0eocb;XpZMVV=(u1CwSt-uRnb-7tKoc8VX#R{hYob1N18U)**1ZHKmVVi~FP z$xUa^Wx9~)zC*ghE2Y+^ACtqW#)b|0M8-^vaSq|T4)ffJnA1uyK~cQlBQHnndF2Yo z_RNEZ_n?M--(j6J5o>x4E7=yn4+vnvOywaAJcRw2BRc$WzZmoc^D&D(!TgFnS7BQW zKT;u7yH7ORSc3^ab^w!KGXae6J)>D^|AgA?%#=F;8-}?im>swAe)}P-xoV0$nY}}B_H%2oINllQy zBP84TaUp-%C=Ag*{Sbcd5Ytv_E2fRHa)*<`*=)jyz_}$HUrI3%{(*!H70cVs*kqyM z{G-E}JaeAjaLTZx|3qoJRORetz!Xkk;t3St&rUq8!IC8_23?fQO8PI9X3f zr0P^PYf#l&l{U+igmy)uu{mIqiC92vox>NK3H^O*J8`G6r?rHjz;GqUb+;t0Xfqbl zB=dqfh%m)saA$D=8QQPxqz`;C*z8H`U~2K@k*_{`*O6|)o&R8)8L#3fCeIQz${w+8 zWifKMPEnkPkdr=-e5A98g-VQbuIh*;zdh5(Ink_SuSQw?H(ER=T5td=iCV+KuKwy$ zXR|G$T-`x+lj_Mxfz%h%BxP}5gWPn>XI;@ujA~$TLzZ;(nhr5-hfYn;Hey-~*CNAp zz#zxgEZ)YIU0km~UYjm@=5TEXu`Q{b|;awfYI~rUVm>7Yqs59xW0o*d)1tEt3mGGI7N}( zfTYaXHKFk|57!bVvpwYd#d6jS9cwklw()mxj&gG{F>+#3;>k9Nd$g0TCr&VfyC z9@Jn>be+Jgv=5~=J6E(taORc{l0(rfV{;&W+}IJMjoL~Etz1giGj>v4E+Ce}R1Oy` zu2`ts*^4XYAhm^vn>dQJS&>W`f-cH-C4N(i(^borZRGz19nUt})3uMt>Wv#Q=W)21 zBiV+(nm$P~yM{4UK}n~9-YX;J{-rLa0^G1)}za!0qLT~yijgQl!I7L z5K%o0t=@ony~3@W_;E=^QC**^Sd`wasdpHx9Xy^6r@KrmMHO37x~uFT!Yk`8xtOxy4m)0@QH=IFEY z3gWpFd040Nmvy+i!5uPt7Q1^JNTS!{e6X4AZwYsHTxl-NvTZ{v-xw<<#AAtAov-e+ znJaVsY;2)&^}<~o*M*#~diz2-jwpP3a7ol1(u#(kaa_kcnl#5%)uxqG^%iDB@hsRV zBdEI)ifQ(Iw}Z80_9^Qf&8DQfBxA;*i;dZ){%BbMClCPt*(h(jM$-;6IC8&_JxeH=KMx z;xuO8y56e9w@{pKvf@Th##+xtWae$~Y!O?<4|j6_Tav!L3>t(kMy(6v6oRm)s(9^g zF9+eSKKjwH)sdtP(+i8nQe46*)x1I+Md98qG(P&L<~flbvC-DxT+jF{UP)-7Re3B46Q^T5DH zwmQGVfu)65l}#E|`G(gJ&@6%2hG;mj?PRTZ?Q|6D@mtfoaM>{eUF1e3dpc#UODr}q z*~|_@_~q_0Hjxd&8BRa#MbhS_SOR0M3*=0K(5qDVdb7S0BsL0V$539PNW{op(-9=U ztXdbwSt<{={T~p`_TtJemdDu+B&{19x9`7XSrF$Cg72{&+epF)Za%z+!$^CNWwKH& z>g)^VT*7dpM6u5dpXS3oo&24XYGvIHGn$iHQ)-w@t~BhQ0pml?J0Lat`}j>O=A_o5 z8rvwHsEXwU?K-!F517p(nF@25%{hRyjcl@O47wOABCNIwp;F}S&~XeGs>s_?>r(Bu zD1^O(1$ZoxKnQ{Vhz5WUmBHj^&YrZzMXR&QB3b5QK)K92rgl;_kd&2+F7`)P@C$@z zv(do-)#9J*pJr1r1!0#1Oq);V=8Q1Ea>hlmNQygT-#j7IpZ1!xMQ;TB{NY{>@?J@$ zXv@*rV=~V24RgiT?=PGC@ z__3lU#$_^c*qLp6-?)g3PYYNt?zVTsp%QuyYI1B!J_jEx;$s|n)*F_7pZW(uA4?5( z&;$-t#Ib%WPF9s+a(D)8SP4{YN$GqlacH@>h1_0e;vZ}gX?3`p(z3DPI6OQAr#m@@ zQD4_An(_qO;uw&F0dtx#aV{CRscq>Yx?4kO9y+Qtm%Z#~#*I(+rfQ0I zm9)oz)(r(2oxP(Qvu+i`)_9$7z1icq7hz}mNXsc1x4W03u5YlH-+*f*8fEW_OE?Hj zv=>G6@%APQ5ZmX#=aRrj1Pp!T?pRq7uaTJXTG^l}{z2xGzrdlT?Y#A)rLsxM-kY-Q zy;1cTR^2#h`{@{7n*$tO_MoxU%l=QekAq0-y=B*mMHgd5gmqtH>3tbZcttOjQcN>` z6|45)ehzOw>GAR1i1rhc#?(j)`u>Do2ifYTzsynF-PdjFOt%L()-)$)Vb%(>xa8Kt zQ59i5kXTl;TzCt1e1-=(lJ!ZYHX*nLMkV~&dOJ%E4 zeyEhQe&`IkPdDKKtfIMp*a0cmWQZwSmGZ->T%Lkje53_kKEmmy74_J;2J+gqcT4t> zl%*RhTNy=n+FfeQ*uMyT*c%?@#M34^6>C=MDt8L|;&?PUxUV>SP&}ZiVW%`b#sMTY zVX@|zv^Ocu$5ImkdU@=C+YW?Ar)iG0=A1eBnl>4Foa0IJcPgeJX=hNau&5tTYEB7x zDB9fOu!*gS3z)Y*!Eq&))38&DVyc>y;uERJu~6CHAM@xoIaMq2BTSt?i5vQ;TRmC6kDP_W5t9vxs^A5#uv z0)o`|gT)0T5DrgsG-*Sz$#rFlrdXd&R)#YdIl%{eTPtlw=RCto zz6F%?bu6xhWh+;R^*9~N^gOb(+nHT$GqNH)%kiWwN9E@2vE^4+~tZ<-8?;Dsy-hL=ZY0{Y*~G0acc z6p3`yVPUZsUgS8^+{A@Zdp^Zw@u|=d(u;}2=!<+4-wDc{%<^akkcSx^C`CL4h7s#s# z!s%6vdcjC&vAx!qi9h1xlbK$b5aKlsC@nywV%L}|cj}bH_FA%yZqvz5C3&60Nef8R z&Kx7rMck$n?MnRh6sHTy9S=LVVlQ8KgOg7i08|fLfDa@)bT+dp@i*$5H{(Ky4W;v- z*Ec!ov~Mm`_RV#{A-e2J{LK{SYLQQBzJhg5o_dATkl*4E(t>}-Co?Zhi{h=MV6$B5 za7U7fhqpPBwDDkW)Jh}2VxK-DA)>dF=tdyQM`c4iz~yW)9{Ury-HMK}cQ~Z97e%8n zIE%*|P&1+=vUifK(%jWXT)l<%i*Q9$9d}p(^hEZ8}vC;BY>io0N+hO2H$J4 zh$Tv!a=yp0q)jGd#W-}4nUv&vDY*`kbfEBb<4rN0FI|`?4B?QU!&KW&+kBs6NbA^T z));g#PD4=dCscKr4Gs2E_<%z=@HHQrliCNV#;7){S}x5`*0!T(vTQ#eas+8HNV#Dv zh5V|N?WZauvJaDNB$kF@wc#TUWIgz&4`&oUV;s7$SQ;9Y>_;ifmaVq#?qdxOA9MQK zlJv_4jiG!ae>+S;FdrujJ&0Nvi$#U4>E-x(#;ms&7Mn~5A3ovO(&jI@eMHY3mS4!- zJWfoQpA=@{h|Fp^zn0!A`;0d$^!v!w<1qgpIXcT2nY5rkMQDy{>W`i+51&8nVADLE zxm|nM`BmkB+med7K0_{cYKoAiB~?NhH6~ruD+uUw z1ma>~{nO=Rl^dHU!F}FwrL8~|w!3M^HaJOa4og$A4pj&QS&PG?Z)rF&40M(Z1}sb|*c{I7r@~AoMZ%qW=o%E%c_8)E43V zbA3jrV^kNu>Oj*xu;qqsq~$By7s%HL!U<$`c>sPJTVmW17acL23fZ0Tbq97EuM$JezsuSr=&VBaFxQCSg8 z2}8gFKI2*xfbea{ndVY1#~T=H`No(4gsQO6ze98`dL|`Ev6E}VcO7#p>EU|;i`c2y9K{p_^Ao~wB+5|a*&c$_@N5VC8Gh;*(vqQ7Vw)=lCHXT- za$NyyG`7zUyTt7$mpgy%MAKa6vSjr}7bUZj{spDiK{}r_VP{fl2MYU;co5bv9Y@-v zNM_^fR@(hkry;0c5sKZq3sZ?HQGV?}*5ena&j-fFzEo18{D#V0yU<{1W42*osTY3h zbkqDhGGqmyi^8hD^6w~2_n+R>EEo#C9^;|tMEJea-;W6y5(AETJx62&^albl7}aMp zVU5U#GJkYTX)ei{E#H+a`7$q-KdEro0CMKeSvp$Al_dmjZ(t6}@Mi~-wlX1mdFxth zTo`{*k>qKpu>7c0RIRxI8hxw~{MC`94Vq*!zOP7cMGx&vjeWuVjWFdEL2cT=OCB>o zW=qGbD_jEVgugqkv~EbPJDQN1ypmHi#rhAj(%DmFTHq|U8UE>*Cbw+~nHJ2fWdB9k zQiMUaj>HTlF@@~EoqXB^Vf;c;ZdnBXApsZFD*nXTRc!fW5*a!d2jRbtBCW#Y7OlqQ zS2S6*FP8t2g)elzBA9z(mu81$;>Yb6(7jxxKuC6oG+1vH>|(CWi<~HIFZY5-#O%cj7OncT%!# z#i)ykLc+T=@hl)Z>#)?t*pWGCoWf-sQCi5TdaU?h$JiFcWeGtiOL^FpkFxT;paH=> zmvb~}G6^EtPTDXG4Nn1b}-x6eYrG7=Kvv(h^24s=O ziM=gk0747E={ypfBgfp896{RS$?V0l7-w4)2a%$_1wdxfy*SDjdBww(9mqw~0u%zG zIhZt@PUj<@A?7+-Ji$rxSp-zKKOe5*n9|&w>bs_{pH#%ecL@3TM&*3)z{FfLT&O^g zdR0f2R#G|Dgj6$8KqOZq34Mgz8{9@baJir?Oe|)OzWM?2WJawDO%@Q(HONDMO=aB{ zo*fKgj=`bMHXUxxcahz{8B>>D(~;c+e>}Z4te7{x%AE;1PJLS-$RInT$t zu7ka25^Uk|veGOr6C?$EJpywTTw`Y&i(?Yii)&}scVuZ}Dj72_T~sX#;06TXqH7GU z>}Sg(v*_S?ur@m61tjZ--{ppmBrSTXuxc#DC9BSeh@fsnC^`*_ty_3jh!ff!);Wyh zk{(svhPlk5G!K<#5fHaHh?(7P>@?G+s^h}!GON-(jJj-&#*_^wh|H6869p zD*sGFNH--Cr|tO!BP<754Un)lM76Hi!y8Rq19U! z!L3Qa(U1n08mn4HXPgv|1VWA>Z8|S|2BC`)Ni(M~>X z04-A{uZtLa741s=7>auj@tKPqv;#Z~+0vBU)*);I>-0fJc?Mw^xIBCn>w{6`qv%zhfRfp8H)dn22v(%i&!DUldv^d8qKmeDj}LXk%q%?=L^P@M_b!MX4gAA zmW@d)WBtLoVG$flf}6rGl*D%&`ECZjI69t| z#ycGE0MAJ(uc~pYa@AX#=;~L#HTKU~X5tBq!n`Xn+3)zIe~j@#X1}oBaiv8N%9;`B zLiq$U(?U3b2%}9{3>*$8I{gdXghjg&-#~G7H=`b}Y;-^;MuTUnGvIflBl`a#Y$lTy z^d>@ctcQ|~(}hO<2~A#n%vk)~>`2qbdbz0>KUiGmpGq1+I*Ca1VhrKxYz$UcZ10Qh z$;NLl+nI8MaIynR8$g)J*b7WBE|M)IDSHUw(5?Y@LK{JM@DSY1QKW?dsF@tIWaCwY za|&@d2Z>|Q#_Ue4^u|MawmOcx;# zC8Dym_&`cQDkby6IF%U30E2_A2s=6mpXJ#fh}z)3GYkutG!&n4h;wPhvxeP7tzoRY z2Oul-(}>P@tUlFKbS16~!VX87_Kp=str&~Taylt#2x(SGxd%W0usX!ZWtk!0NH@RJ zA#G18xZIWztv~1u;uA-{rLE^HHE2S!aRqVbsr^zKH(?E2`AK3obVI^C)h z6=$2A94n%_Uw~v#m}oLBU^jHpx#RIw-_Nu;N7cbrXISc8s&lqqofI<|%nq2Jclv3w zeHpW&(1lJUik1bips&AzMsL=~$K%W}ldJ=TzbrY@gK- z{-ljKu^_BCvb1qyZqTsuD~3f>%!}lFl5qH1ael?z3+((ta2RQAv#iC+u5ccnT347B z!hi_uA8HQPh(|^Z4~U^A%Bp;@hM5+_DjB$>r_`sj-Sb!3(rI3WmS?Gnqb+dQ2NF;% z_QM{>bSD0I`jkTEtz2|5O-qn_32E!sZp_fLKwHFKw6LXrp94z^r!tTa|CJadD)sh`SOjDd0{-97_5$Zp*61<_M2GU>MjJdW8Ho9 zH$K7vrL7OkZhSXgLo^~HtVa@yK4jJ~yq0xGm18?q44oK+M>({#H>GUb@X9ybG3AAr z5FbrM4mpb@Y>c>iIFSz%>ZL(=jAP;g$n^K6ZXLU9R_c#c0p(q`od|EozoS*}VrLCk zPOw>_&++%;98B7%Q7;VDi(%`-WsMT|Bj{8S2aSB2$k=*%?`?Gvzv3^8-P@HD4;JbrI_ zZLTJ3sG5}Q(<#ddE*=;%RAr9S4R$dT4|7NQjMnNBLVus(D9%Wts2En=m?9;*XOhnP zL+!;lIXgArS&k*`N!0J}$ZSgV*%W1$sNX)ZHMh1D_xnG`$)*iXWXQg~E()s>elCSs z{ncu3%o=PQq=hU#3*mWAJ+1o7nyKr;nHIwHiEuCwR12}Er;D>6!wa1Bos*vZNDa)) zN$!P|E02+d#f>DZbG?2*();itr+p#D$aVGw^J2pA4V)jYu&vy@bEdg->ujU7iXKC@&cUt?9uFQxL0piI9!V=rb;xcjDk-0p@|cP>k0uAlHSN3lKWDafi}=wgh7 zkX}wC4$=#3cvIly!kKPiExf{kq^&;I7e~pi)L%(;){9Ci1QbNOwbGhH7Uba~4kLY) zgGj3vGHIou3rn@&>b5OR%)X4F1!vwp zoSi(_439jw8N9*q%;FEHcVjZ0SKnzmf_o$3MiIlOx$ zJ+`WKE3fLUv4R49J3+M)Ro%T@4nMt-cD$0YM%EVhufZr zt58du)@4CwRyy}`C8Me_D&hB2_%ImE z)>*TC=?sm-nd-5ZZerru!5VY;fCEW;Su)Gx_Pxf9@U?=1{2(DM&iQ#JdSQd*7A8`ber{>c`oTFLEew4EG zPa}gD+hfKpHaheVH?qWgA9MO?!-lfCSYgK47s$s2qFRIEs-8Ok2?vt4h^eYFDJ(G_ zYcG;dl7z?jjT>2P8Ej|TBZre#Gjf|&DEXBeyO@G_K1Cjm?%*SVXQvggV7Cto9@)i8 zSYr;MPdl8n(#cK6XC#|70;2g0X*lc3Q^~R$;HVpuVMc6z)`29hp04&2cO={KN7KhonOQ54X%b@k0-5NTthzxs zEXZ7JP0R%B7>zGFsI=!a#wSuEAfzu5iB3uHO<(Evm!e~9M|S{6MT2p_;mZyytsVBZ zt*Bq{qMR1{33|HbA=U;V{iJrmfhsx1`IwB{=uaWT}Fmf->ps_f> z=`e6pe%-+&`ui)H(JL0E_YLZCeygSsyEux?leSC~_XK{^5loIo)(9hS5zT6R=cXu$ z>{}$ObW+$M&7+sU?MN~_B)ilQvLwi=7$a6b((jEt6>_k{G&mseUEDE zU<|IfF^=F?TzmVzBS@Qwl+4CfcZ!U-en2jUfL3PVyShs&;fD@nJ$`F?QOJ%_=ps9j zbZJGhKcX!C;)J% zH^UIDZo71tOV&?>pE}62Wvkqv!R1$&a3C@OXPSgYG%u2$k%SZLnB5oqQ5&0(8#ilt zf9@F47VipE22orVmL>lS%G*$Pu+*5H-HL$~t2Kt@EhL+?#g|>kMi_qSK(-`3G2b(d zu`ZZj5r#cwb#kkTG$yCmRlH{1_pcpK+T=9a-JbxllBOtsLrTt_aBl9FQ#tE`*Dc0S z4Z?37S6aJYI)T?)lxsHzFmrKaq`I){2*nzPm;TUc5g$ptLtB zw-t*=-n{%aEKC0{)R+4X-d&dv6&u8|HK6$}%IB{Rro$fM*et&nIlieyBMU2?B;v2a;>(s>e5At!be$O0u{t+ZMtliLegeTch#Kt6T?Q zDw$>nDHtqBf=5}0OF5XdrZ+Qt_XG(sYwNl^0PcF z7jG3yK*6IG5lzPdx3&+JSd;*^!F#L71krGap@v1f>-Se=0<|y$cxMO+5T}XKNg3Xgmni5Ba;TBi#q#)Ig~JTALQNP$(pTm zU^2+|5`-H&oU|$>qlTl4ZM6ylI*dRJ6{t3}Tj9=t>m}RIxZLloVtw%@4k|5#qA;92 zGVVf0!`dhvY+KP0+D(bZ)~Fch&0>fe6U(*Q*kXaOj+;5AwAQGwXiUZBh=5>jP8fF3 z8sil^TZ>~Q(KH}j4()olg~K`*e>r{NqA}&Py|guo;=Cm}IhLy~{BQ)01}w+%p)*z-!QOWT&Q*(TtfCSboE62L@mYpDI+!$Hfm>lTFn4c? zu(Dh3u~VcIRZn!P2eL?6HYl|XRHOg2 zSfM~(z8(%K>4uF5q&d1kA%oJ~L{0WVH4#lV$q1_}!?4+@r?vVrX>X-2(Dx`NE4MG0 zlL*5%L8F@!=1@-9`eh4XTX7UhmY)ExCW0_gRs@9ro9*P(%JLU zMK)Gwm|@9pqx_ZeRZ5}pD||$drFh6 z3uTrlj4@Enwopooj^F9@_hYSm{0Swwc>$bG0Jh=Py{;I8aHH!Pjv>tzHh!aPG%M{h zsm&p6%(~go4~+bovzwhLvlNw6_oR81Gefa$v*Va*Y>VP7QgColErD*pDs(v8>8A}Y z#utEDmGU`M=7bT`4-UZ_+gF#CY~qIOAQl+P3I9CeYHbnX9*$)v{&IRVD%(~Vx|k>= zymN`iGzNZ58~2CD#B9y-p7eVkWqeC&XCY@#K915N2JBZV_#)%9n-Hd<{PSoJQwAhiJ z(@$G1tJt+tsNAVj5?h~a93)nI9W>C*y~qH);&?XTH>bDt$@7WO%`w0BhsMy89A?tfHH zsB1*!SlQ1xDqEm0aBOLFP?&ZCW3Xlg>#;NXUm(-?0~tYMTCeA!u=d^+CpzWWv)G6E=^kG_a`}>sBth| zTBx3l8QS9=oO?Q4+(R$O0~~VNLSn_bRfNhNu1?qMiSvQv?Mr`>(ZA4D{VR(o`No!JNwDvWrDhTMI1hOTb%It^l zKY};Wu!M&>l(g~i_=#0vS_}^-Lmm$fZ&%zUh!r8YZDZvLk8l)e!!%WMq%G_X&8iiR zUa?UfAw7~vbd3~#MNVJBqa4QZ_?79sZFTffH7UhMQ;`qC;9O8VwPj-wbDrwiD1X6F2=l&Jm?`G|qHfd7*ac(+u&uI#hRr$i?6VDk za<^7eq)#U4Ek_^Y2Apx#MLG~YN^~kav)BA74mNE@p71QkYl`-%q~-fxPBO;XsGSmx zs*ijWPjh%_4Px1#6=V5ERY5RMCk%%%dArWRS+*f>Fzm1JGCafKq(utkCS#q)E@DhD zhS)SZA|RS)l4jK9gtJ#L^naFvxUeoKvnu6hQ!gBGCJ3HE~jw|gg8J{%StV;UjlxAM9d}SCJ+WU-h zeua~r{A{Kt2gvM7_>~mq8&c#RwFnwiW5yd>U-&AAkT!CwOF-&Pi{jO!ps%golUa7r z!8aXVL%s+)*D7?YJrRCDBm^8x59Va59HteOs5 z3wRS4x2c%W%v<*k$C9=~CDstxEma!bs*w`hI|;`}RD?#Jh#-(f)R-6?_b!K&){_?2 z45zrP7#GC53BmB|ED?l;9qhrn?arG1PcyU5IArCwuP03Rg) zeP#L`Hc?29yo~jzVIQe^8pyna@dKjjx{G_TRrO;IDs5UOs1;eQa81z^>&MB8|MCWZ z%yhTgv+s^EF{0X#vp9UhF)t)NJ~j2ZiZPGet$i>0;R~_2j@t4yZ)v|4S9OWBh#f11Z zB37I!mR=l=Zfv2$KS&^m@BDQ~c3Kiy?o2V0##X&mRT0uRh;%R%a2gcc+i0+|&3xZ< z6q6&E#!lFrS;>BjvWz-Wuy}tB$&;7?%8xC|~R1vJEge?WG%j>=-V*iz~M+ zjGqvLKJDrNzcQNVD7MYL9|*trsY6Pe4p)s^;Z$#p(-Y>;h_Xk0|`w@uW?3 z$2TFlWoiG0+MMVPmSbXZrVzo-$6lwI%>u)39Yfj}TK23obTMLF7{4P1SIU&yokI;A z{($ae4*louLHNC+NNdMNa=d%H0{8;~*p{pL%$8135L_Dze{}L`O~>SBl!m4MC+f4~ z&sQ@>PaBJScAIbqhCe%;w2r@Q+n!7LhC6Gl5EJ5Gh{)Ehx~Ud8=dU6iMd%|<=U*LH zTG+G<8j~*Kmff;-f&7giTyT%O?)%u3vxz(SXW>h150RgN1&j3je|Ipa;!mc(%!Scd zbu**&8bbO9kq+bI!={KX19lq-^N62{Wce{#G5phUrG@eqmgA$7`SC)6`xoJ=yI1J^ zZOx%x|J$+LC8>-?cdy8xH2*`*qcdZr#8w;Qc^xt7RJLaXZ+U+&_M5?D*AFAm%0^OKinW44QA zxSqvab^G(-G6zJd{U?10y~Ic>mX2MBPgXGi1`iR!CML8%8n{+ zW?Pue8i1N42PG9@9ZW2Cb+PNbkgpImgmhO0ZGw4uE>Yz5_Sj;aap z8U(cAwGYM1H#uF?aV1U&qdmi^4p}i`l5J63ixf9PF}ZaTOGk?M7bFz36guJBjwS7> zjaw=4=7n<|;&8u&nrMsJZ7MsfU46S^lA|R9-5vAPaGHy3t{D7As+g6M`@t9_>b5v;q13lRKE_afkC=Vqi zUxG@l%M#1L%eYTrsW*0jX>%(9PO5pMVuCx2aJK>+n-{ zGi^zx5ZJ%Si;A|eZ%S-V2~~Z!Mt>WQRm$F%LAaU2Oq&wQVCCf)wJwmG6NDXs8}V1> z8T5JecZXXzptR@f3>%lbS0g6ATdJTmb;$U5r{6$gK%- z5DJPbN&~Fb<1Bi#)3YgMmID`^b9nxo80EUM>_e$^}9-bxO&qN@n6~j~N0b)FksG%X$*(3#iSQT_vh5!CXD4BPfEFk6-PZA?b;`NviF{=t(cO-8 z<=Uf)jW;IT-oadm+EX$s={r!`MsB0KF1gdLAHp3SK%!$bvuA~&{ha_%?u}?%7XSg<^Y;0KIH zo0jvzj`6sQ!%K_#9>``aG+osxi03%+a6Fgij%ducdhIp3PvP5aZ05yD@pHTtj(2R6 zX9&67F*zxwsEPBgz+&W%c;M)wpGq}fbAY;{Cwg_N5d zeQHiXG}}nS?hn}xRvPvXy>(5Fw8C}=ao40`F(U?0V^g}PQkSoIwZ%}-DO(1FE4P-z zjAJ-Ai6L5LNIPH8!xe36R8tg1cp3>=lRN12EFnk!K||UdjxBLGEqg|j8_hpt*2OVP z4pw6q(Nr!fgc~7vD(rMTGf8D7yYZ1_Y1gx`sZkMOolY!PW1p-6L*O>zh#R}P&;ATY zG@C}mAuFcgv|}6Qn3`*nj-bvY6qh)w&v+BRqP_}K-ehS9c?@Vd`On!&bXD6mRcef! zAkQM?RUoB>Xsl=0nsGSW@f@4PGqM0JdlEc{f}D`$yG?NPKr`IKsjZ)=Ha2ppVpNjn zQu1IJETRgz02jhNooHH>Py|f}7)ywQjt3@sP7v)6A z{057IO+AiGJDV|hpL5!2u1;CBilvJh^FnD8g>^n}{4KI=8(fNrBE`BE26kBf#NwxA zP3$QteSbn z4QvvcVV9GiJlUK6K18#UU8F3-Pf8vgq=rLeK^H-d{gt(FFQ=c@Am;Yd{*>ez+ABy}pvSj6Z!=jyJ63miq-qHfuwJ>K#SuOXm& zt30$g65aO*=2ByB1`Wl5wWA&~nL#G(`6V}pYlc_=&my^U^rS088lhHyVe zlJ;ciQ-d)pj_k8DEdBdapH5?hIGwmUKi@?@>>V*ef>W=f!UG&YT5LusV5-il)E`K7 zhDXrxVLL)=5>B7g9df-ZJjjux`3{m(OlLAedoa=H-z#DRicc0LFb@w^c!+~at0{#g zdql-$@hO)O&_fBtno?{MWZnzxQi*l;VU8qiUA-_C-yJ)YjMJR5Z6Q3I2#n$>?NpgZ z7SFgV=@AYft&^zPuacXT?jxzoP6AFroU{@v3eP7fAG-oSK^D~fCajVmrP$ zDQaSTG#PIL#=HTq?I$ud^$m}4sFS_dx#|7r8>)h$eJp9&(Z@wBME%Bu;*WDYY0t3Q z(N|4M@$pn-4-_X$@n0PBvuwW}p5TPjhE~yvJ*--@5`QAa`R=I8+IBKVzxGV?-tK2f-?EEmKsWvz;%3v^gn z{6)i(%Dli)-7~4mj2O3PH*&XDQlu|bp}EjAmRY-H2VxJxiyU6sLj1U}v$APnyqFk# z<@3St==KW626Pr%_qg`I=g_k*|3p?_a zVd=k|`iyv&=aY%C;Ecr?TCZ@@cS))~Bd*Wfpd?>ONmk=lh=Z8M31Pv~w9Lfpy!8FR zeV&bk!>b&}8A%+uaeF5D)kG-~zM6zbKt@T?`g8qZHs0F7&zn(cGT6Yg*#^j+#CVC< zIMl@?)EX6ouDL%+UG%RdJ)JiL`fG+tgTL5s50}F09AVl-CbMKzHCCnkdX-z@TUbV( zIt034VJ|u}SaPEdjW;-|^ODM~P%*ILGD%d>ZzMFAy()dqVAtvpQ_x;KEoz~Q4JvPP zkZH|BO2;!QCb%~f?%IIMve<02ma4&N5mwuWa7w+!QKhw_HA!(sOpD>IWME7M<^~)U zU@YA@fl1G*N0G&n!pZeGp!aPK>YSwKS+Z{rv~)dLPo!@rDIF}M3(?@l@ZJ`?-{IiW z94uv%867`>;DogK#sJL>vZiL6lg^wyX^Yzml?}>1;E2-( zUs5qtT_j2h`GZ8}>U4EgREw=PP>SdFg%3H%X3{f{cK3HBpN>3K1yO#OlzcTb@E{k* zN80-P5yzG`7akdYIJ1)fDCOCx<=%u^M}?)6ZmwXL_%M9T0Zn$ONK+qr2Rdw_?-r9t>V z2az^Xl`VtNMa8h>KSg;~YfU2+{9E26X_?W&rya@+{%ZPMS#}LY7h^?)^%-Ju%WK{6 zV-tIw0oIO6!yZ=1cpiHAtmAAaaTY>GT3i;xp2@mG{~Xcj+^tzR#*zd$xojOi?^#qlL_&=*swl>4}KF?`tp zqz$5FXtb)ERSAEE!sQtmD~zQ>2w!!&2RI|k4NCHBl(ZQchjmKZ-ie#GF`{dCEpD-y zb#3A6jw7wxNEr!_)fDPCggT*fE62=!)1h{fUa@$v*2|spdX~U{$%aCf#O8h4j z=cq0ZowP8`RirYWp9gXHsgqAzpUbToL4H-WEry?w;Z|Vq;fc$w9^b72_9*n)+u}vz z44!-xe(tbZNe|2m7@fa4URA)qAn+BS7}t#Kc#2;-pgSi4)h$8MoRoe=CH$8=wxaW@ z!Hf8Ndh}GbE{;EuwHMfR(52u**`` zfd67gRipCLrhu|+w7QreBeaV{?e6P<<`>VG7x$sv$kL$#HeAASrM&=Uv&L4w!9{wn zBd|*nj4en03i0LKVW(!m5fV?7*|FLSmvUTbF6P{-LFHHV8e+OMnYh}MkBa!A0mn3= zqAue&HsJTBSGe4gapYHpU1?vI+UsDmyf%)Q&+-s;eyO!E2$yppX$2y)#-WRC==kb1 z1a)~r-4Iap^pz5dxPn7U+mkAzhNKH^RIDlp=!yj5o5qqaO=S5%J zv88n$H7lo+bwqa^(($QfBh||JySCfpx(+BUU2@r6EU&msJ7QlT*CWW~0m8iq@l3Ys zJLNkiJ*Mj0lUtL{4fKVxG2To}5zY6SL3Vg)Z|G#xRzGWoj3cJSa3eBg^AJB++O)6R zUS;A?#G2p$*09deq%~^$F*tNFSu!U*NTzTG`rBXAv;(uj>^m1mkOjW42BP!S0wfMUs z_N2BKwAt$}FvRcnjxepEkws(DMU8o(+<_>ZGuY$ag|V)EXd;MW7}Lcz_wMTUkUSYR z`i>4MZ6K3dHm3Y)ypGuJL^e*aFcr7}%i9bwTw7kovt4Xs$Di$ z2^hkOPCKn}k|`6{McJ;zH&C422697Ld~f4aTj|bXd)b>}y`KRbVWT5CE$R8>b`2%J z8mA(zP2^%AV_x}+3Y|yzh0P8rZFhQZa$J4R1w?ZaX*hGKxPol)ZFqr=G){ITX*tny zb4HS1Xv?JH1D!3+hfv&JaIKLLOV?*k~EG8wlSA-XisAuO$gosJ~2PuGqLLrKsP+v#LuIAj|Sq_KtTb1k@#_jK*! zO2B#m=E*$XRR>UnGaTXRNwwJQ8(p%J7|$eQd3dJSJS@=KF13BwrgnEnbs>glHRgqK z7E#z?(gVkos#{J)BD_`y-pKw@;cUlnd{W7jy>H&6bkCtK2NwARgb{j3SweR~C9w?F zjJh$q%sm`UGl`}uU=OT%Ym%mL&&`Xe68?^Ewbfn<_jF)sefxyi_h?t*O^UM#npDw{ zGlKs+oab25)+f>`bEYA#R?Z~{@&dCZtr^gtXQ>Zle!Py@+GJ~> z%xo5b8mXV$j+G@5%R)q$k!2ZGqRmNB$6-!R?jhGlX8iDy@z`!!(UBz zlH_)a0-U5Gu0?XO9jlv?hI=`bv=>ySj6@gZsjkF#Q#`()#ZH<*AM^LtaZrT|mCA?+gaZ#+^g}}k!iK|$Oq$kDvIX#D%7HV2pPxM`k2n)DR z;6nhMhevi6_uzC9L`beUw8^pg`IPwx48>cpfOJ^)G)D|e`g}_BQ5L&?N}rbO#FGB} zkXw!5_IEHllOAPZ&rpiX(xQz(`bgFqe^oQ6ec6p z1O?%&5{K_xYjM8auzxsou=5-TVUNRDpHw(z#R%$*N_j7p4}!tMiMp%1FYI%Y$0bQt z{WKMe(p#e*9YrNKNSNo7=B-8RPRt;&M87Zvb*3CwYCP1^8)1Mqn6T)3YDOdI#gqM_*mZMCwJ z%e+wTPZUOA7inbeP>KgQ^|WZ!x~#M`C$$IWU%cW!Vu0uJV4>NXZ!Il^2RZ4qaK`c8 zsfu-xJeVXL7b$pk!iMm6Xzg8MRu$}2d5D8c8yD4x*aND$@Are3#Krzlvg5y;y%h61 zgGs~Qe&}plh-a}jSFtXEG;{H8c$mXqfR*WE5n)aV`kkyT`iGOAs~0?BY_@0KWt{gk zklXYT4l!-UUOBgH)T+cENpZe;wf>we*5Xl)AkEEPwrCHxd?R->MG4_NnmE;kwYYr$ z7>AJN$Qjpyn@wpxmYVBO1o`aGEqP&CEe4}L&OxMkwQ{quhK~tGm58VwPpTS+|4uuC zfYqam#r^OEhm_W*Pjrx06~yyI@~}^@t_#EAj;M(6B!`jaKp(#_9L-Am$<$^g)m%g~ zo;Xvnu>SBAhmh7i$f7+PUDTKt%2SDAyFaqDKN|L9m1NLs^}^E}Mq0p!CJ~0A3ujsg zPbb3RC=DA7WV^H(8dY;>rJZ+-@hIFz&v0PpWfl@vUos7Y+b>ZeKaeedr z6QG{uSldagh4I9BhFq!A74EZ%%l$>=7Hf96hS?e;M4sd5(v||swyY$}H*(`bcrFnR z0YYbPxv|h&Z7lEuy$0cVPW~=Qg~LCOwaXinkvSH8JqRYYFX@Dwt~W;}s00nfv2aj%YoKaQZ;cr{bE8!}QFkq+dSx4O3io?UgLz*hHsgr*iejGmGWz;e0wOP?F%bygjoknQpVGZwb z6lsot%%T;*1nVMsFG&so2}eaO1`juz{D@L`pVLok%Btgl5v$UDKXrZZ17=0tIcytg zz+;XBE}B@IWwZ)527bV?Tm-=nW5tB{K_asE<4Ci-?*_|q<$X6Fa%^dnG8t8SIzd4| zA0`lEzbE+IaMp!Y;g2||v@W@7*wCuCD*nApOL!k89{a`ojWSm>eD z`n+RXpTt&eLyHMoG%D3EP?ghctBWqA*7D5rFdpRk>UUPTO7%s@lD6WQ8!xK;R4EaD ziG=K9)e~=x=PKheeA&^Y^)51GFuEwLO86@hE~gLA;^@BWgwuSB(NHXd5L#=EY#)Hd z=1KNzlx5ISg4-lE7UAoTCT)*S*}gHAZ;WvcMM0r{gQ#>kR@--Nbj2Im#DPxXn+`8+ zY#MFuZ$3TfiSApZv$1IlJ1yXd+1UzPdh>m3kmP0fw!@k{K+`La#BOHHN=z43%L4cg z0k}g)$^7D?EYs7qcQ+A`AJ)Qm4+vr;pWmouL41!8>j1&9ob~`wY-sqn8=$qcDMtBV zpk&cL-*+f!F8j=^6~{CQG5vr{9D}$;kmNF*v_YFQY;^8k zjhOg;L_Q8eT;s5a+7o{4fYSWdvScK>$l4s5mGn<2&BtX;CT673w{>RVAh@x&wTL~@ z9Dj7ePaVg8w8V@33Er(yDY5;GY>a1cC7GrAY{bI~Ir3i~gr7USv+#H02OoO7oaMUb zR;MPyUy#ru0mBkZ!WW3VOoJh&M!S1RTdc~p8ZTo7`=tXt@1g>oAS&Kpk@s>C?BJ+Z zCbtj2b~JZPqN(=vGA5PZP=(J;b&8(SB6HbF3+tN*DPo}JLinu%NNcP!%ZFo}P?N!I zf}R+EC&p@5Qkg1X0gJz$# z+Yz>simW_ZG{EwW>8gVM525K%%_saA0bs8GUk5dLXg__fZ&oGxKZ>riuL-wIc80;p zJGX7kwm8LMZgXWZT#imX9({)fyDC4j(W;H8$PD-`VZS(qg|f**SVkN)~wvXVBp?jykRF@&fT)y2HF{Q&gI& zfGGx`L50gp>)_bi1d8Ja3zP4wl}k| zXoXQ+jtL0n2*U6y$eo(4Wh9&1m`A8JT{$^sS{B1K$v`)nZjohUahA=?U^Cgk)2z z`Rn|jDr?aMa9l0S*^^j1X=G8}u@i;X@lo&Oy}EXw zyM**_w{j$DUtPm`bZ%Dax2F1~sE!5++lHBh{WeZ<^3q|^e|8Qc;lPktSF&BUg-yxb zmU3`yB9(v0XyM#jw)?Wj%Iq&vG?L{P8Apa?TOD> z%z;jOA0E7gZBOl9_o6(3=N%kmT3;(`2B!;WS_pR}0>`AQ2%zMl71)`FpXTf*HjB$^ zVY8!1o6{8rjib2q_Jwi^QRuZVq6(O6E>7UH#CCMPa5ri=)iI@w4GYWhgIc9Km7a=5 zA;E1S95>yRw!CqlY1ryOZi|1@JUY}&rFPF7?MZJN_1JS}3k|Jp`%#~<#h9t|wmZ$V zRFIja;}{@cjq)zpmi}qfXVuhbX=gT2nx98b0*s1JcMNG&Q`TaY$V@uZLO6p69CPve zDo2u`5|ks!?&L`R0g+@?1p(ceK%5`gq6{Xi?crj#8+JJTv$MC!5yfmCf1XmT#2p z3*;<iQBPII)0$^f}>kXD!#^1Lb9;n7YTnQh{g(^{Rx)}hQ&*cE$v&1Cam1XZA!L7 z**gCknq8jjlw~Seb_8i-sHDnO5fau4vFLitw%uocp)TjkZP6 zCB+Ruk^8b+BW$O!e95-4hE>Tn)%9><`7m7Ikj|c1hjOD04)RG-BHTwp_6jH&{`=N0 zcq%M>1%7Iq4)wGD6M7CVtyhp;D==L&iU@0!Sgcix<$ZaW>@0UzGCvAzg}y_&%f#|h zA5pPsT$MXsMN9)ST^|bU+p4R7*+h>{fSL7$UU%_~rLgAM(%fLOJ$cEmMo*L%l9Ge@ zY6^VJZc$#rF->0gS9vvOzc;H=9#Z*=P_CpuT^KBFgpt$TjDIzK3@JPIigaN)RcTbR z>y)K4Xgpq&ar*n6bec0rwoF3`_n196bs5T!)7^oV0!4GG!pTDBG3zLn+SwQMDU`pcot487yOw zb+LmKQcK}sjv}p4RI%4&GuECgMPjXzxE@X}wuW-PAa*Bi>3W1iNgIO7j1lNUHYNH< zin3$&!^O4100D#i151m&jd^>p@F+);wxPq@jzn&rQ!6OUM-%f(z{He$FZx!5GLH7P z!b)$j5FX>0(mG}tG8SDFRwevc3R@S|MlTXtvvZh+(&HT-=VTMRsAwirt(uhPBR+HIVX+Ivs&MkzlMW&0{`pyc^;p=7#(yIl6O_ z=qk1iuX1Ngc^q3(6XTP~SP9#Ve$b~ln8~%ISlwvKsc2Ru`c#V2JMWLA#H@g^Y}{=0 zGzXA2tdKz~2wmvF%fh-qo=y;UKK`F_D~Cn+J;Pz7&D>A^;MpXgOIl6*tmRB8$MMXgu@C>@K+Vy|MinLlP za|WUdZ(9&AB193Gu?l|+7A{*w{EB6=RpPoAJD>&7Pj6{s491~s70iP3Gg+~|gsgN+ zQnD2H90Q(tCZ#Pnq2;x8*zBy5VR)&dPV=id5i3o1Z;G(EUq)_LIn6wjrK)`NW_Y=y zOdAi&q~YnJ&c0w?K^Qhm5VtYJaBq8G2b;qVE_GKBB@|xiIMSBNWGxm`y=fu5iU{S^ z!a3}ffe&klu~2xmlTWMjYK*w+rn*{KvMv4Bs0i@1ocV4agjHk(!MG-dorTvrhP0MB zvt}jGU|9sOBLN*9#jzn+#%?k3-s_!qTH}}7G4=e4nObO7x^JNFE%XItF*FUEK`hZ6 zUdkHU#m@Yo-`fapbZlu+2=>u5#p@)C>k;0>M_~PB6e<48;sfJfg9F3xW(S!TGE#|2 ztuZV4w@{vqw)#|a3Lwo7b}a(@*m#ssc}P1(Z~T^ETp)dCVAP9{$sDY|dW$ zyMxiJ+hz_GiNwZ;BkvU4b}YCap&j+J*fzt3T&73Y+SKCUCA z_Y-LokQU1h{oU;Y7}^v*eZ1`O0SA^go~@X*va8&w5fa%4Np>BOArl*-Sw~FP#%S1L znSnXl_MR?dyH|{n3N;aa zl!V8P6V~k`LpIih9&`0Ag^xMb#mvIw@56D`u};<%^~Xug`G2wUIu?+H?|FVWSP#g_ z@(D*fc|}gMnZmY#7MByG1o%k;UI~ENvCmt(Z8QVe+J>DppK>&tlgh5<{OFQV>3*8J zTt~TxzNxKnEh~dstJ3}qwKqXKKSm}$IEJYivO{X{4TjG; zjI>WMH)|;QRfCAAK1ZrJ*(^>A*)l->Qw%mUFV--8-VvRd^iImrIuQyx-J{QGh=|gv zhJe06AhrqR-(HIQMlCPF{QPPcv#0(Fg66*HxYBBF+42}ygOu>TM7+vdoP&2KFXT9| z*kC};mmS;R^%fgMMD-O?v0hh#lv%qOf*QW+P}1skLyWSlO8aZn=6JK@y0*rJsWWg~ z)-ZhC$)`=2WX|4@F0yU1L)jL@H&g(A9dk6mq3Ge8j^H1#Kx&31|1HT^qb0IK55l*d zeBwe$%=>E3Uu#$D-=R7u92X1+{nnjk&)nq_^L+QP^v#;7H`tZ__w@9|J}+#3>m1;s z9zN3VAC`JKgJi8;ssDiLSHjaPNfLW;tjey3e)yr2PK!UQ`stPyxZ<2yl<1Er${tqX z;CtXBJiFan?{K#uoa*hc(TaN|I?Kpq<2cgBd$MisKo=8*g!g0Oaox`MNQ;BDjqnpk zvl;)8V~@$Bljd%YMy32yDl^ov94f$N@}D`;v{%s-DFBO7{5cibgXL{R9$Agy@rd~Z zPzitGZL6hbVB?YX zUO*(jCkdzfMDv%K8*hk>TVz+wM0Kq#TlABc6!D)$99`k^vTx%TAXhtkb$(J<9-7BS zEE`(+@FvaO9P{ zfA|B|&@h!ov-39xk>;n(ZCT0WS7pm8fd8ZZCg_hkJ?xC*v}VqJvWQC_v%N9j!Fovu z7dxpMYo6xyE6m2aKSf1Y{{*oZI1&dj+4zOYAo_!Fafg!T0L^R|M|C_D%}V>9seJ^B zq#6jl+!-zI4gYdj(z0aQx`^@BW>(VwN@)gUm8Tf~K*aWt^O$f6M{*W^t@&HezT4x= zhK;6tqh3jH|3)}-iMnHCF!jz4`u%rDmG;$W4bO;lfwtNf3rpsOa!H~bfd{U>#~4L( zDTk0YTWPKxW>w0Urt(doJmz+!pMN((@ac(_(-Xl#_?p9I98p>$H>O~vGj_LGSIn0s zGspL($&Ce7XK@ALa*i);K}^;ROBZwPP&O@u%M;;Bd|~hjAk!f7ruBMR)YBE5`eyvI z=@mIMWa8sSrF%u{GC-i*>Bi8P=+e#tY_8-O5*xQtWL_+V(v5KyK^;M;YXi#1OS#af zaAil8=AQ6Yjm+P4QbM~5(M|-K9I~0CcQ;OXz&Iewcemb0WE5T_GH&6Fh0dBq0UhaJ z&xe)iuTeS%sf%P$VIM_o_M%yiI)sfZ4Gy&W2!P;ue@8pCv{7?&a>UH8)UQf)HjMcZ zWwRT|U(rJZ8N%s?-IYFEx>s`yX%mRtVyx#It0Ox~ZQQseGCU5<>DZj3ut+5Yk>q<0mh>QolCUna8VotPTb<-Q^7= zYV2|Zx`u>M^IWj9@PM$%A*FSv4QK64QWE5K2zfm~YUsIr9X>`Haz0h)GX|1zNTEXd}&c0xdCk%%pc>q0EQFmKhPzyn>v+E1I z5l(P8X`Y7MsPW`iwGtvakwhFDj^m?tV8`pt97@{QP}Uks#!L(0BqFe{khg4S<{*oC zyl?IR(tPi-WdORU7?%7kD9;K4mjt5uZ9nD=bI&3EZgmx$-}MC%VBU)2a!o5){Jl~2ax9ftnR$7Sd`wasmE;+*%mgO;)K%y(CDq(59o-n zTdxytz*-t9#{SHn%&Fj!Sii~EZeMf53^@^+z*->(FQF*hIy*2*L^d`QPTcT`DYNt>QuAjVX z&l~SOZMZo)OPs{zv)B$lhclLUbvjEJ$)4(fE=U4WU!M!v+Zek$RbEf9g-<}wUAA(6 zcDHk&wZ%?G+Ufukx6ur{^nS$#BmP|2lMI(8I)hM00IIUu zjNYb=V;k<|IMQBT!&-B+Dcw6$_fjkjB$)^?gT@Xgm$tA`ZB`3&Qrbx+F5?utMJ@P^ zGeQpAb~)9w745>96?bu2wk?D+iNKm#9nfuKU#O8}3?^TUF8MIypzeWRp5D+@%^O(t zRT5Od2;y`**U!K{p{#DHNo*!=R2abQF+-HY*6JJ zPC__s;xJ%ifbB!;OI>&t_qXu#yj@@(xxc&Efy1$HA)H~sfu+rK%eD=ye4|lJh>Jwz zJgRd1`f?ZN?d|Jqge8Zx8UJ#6^Im@hyNpV@LuroMi)?(hUBQma3CoA2T$hrsFe>F0 zDsy*N^w7{*Q~bnjqc~y{-r$v(rEsq!NptcQ2JNL3m&H$BNqAl2vD%CcbnTnh2)om_ z6L7)>jxVhX9Y?_g;d`VJ?}E0-Iz(#o&K%!_0|5-wqtqsiFmVVQo-5lmjD zZ}dx!TbB5R6z9Tlb!?@997|&X0kLSlH$reQ=i}F=f9TQhq4)&LqT(EqlLKF5$K2oA z*57~XdY4C?WFxsSa%^dHXftN7sot#A*QtI2)HO}YPG7Ur7S2MBc}!#J%?%7}oyVbL zVSWvj>A+Ih@3_*22u{Wb-My*OVn0Ck!s(kicw0Oqg)Sgw^TEDq?!OHO9cT(WY2A}r9Pn11Fqk8n=D6wB_EV#$LugF>OKx3tuD)wy#QV4^d6X%^nEGKo}>E3Z{x4% zvtPx&Rz$NOM0woL!Q3tBWmIjK>V%dA8sr3de?l^VuRMavk0htt@&S%3ZI)CvXH?}I zW%~koAVIk7Y0F#g*s2&7@*qc&mX{&7XBhbvLg(N}L`~$5Y@CKEjt7&2?Vo~)7r0G- zzTMwAfPdQw4{;D_u_6ms_Am4DVg!I`_y!iZ%ze)t@cbd(4Ucn(i!d;~ z-gyZl^*1N!3i|Pc)_e&^RV}pm2PZs?8xBu!beogtD)Xf=qmq6ir8!?Je0Xy)IUORT z!;_ryU8yhAB*pr4vU2dR@QLVh+8HT@^iwNg= z#Nqc`B-3V|@BR|PwT9vOjwEdbdwifA6ATxIrTzk{UjgcHm2wHoj(Hr8dc*KSr+kN` zSCE;pNB1VB`66m^pi>>CukOd^%cM;&cFJkb+&n&)Vd=j_&s>x^Vs(}}2g6I9^5&#x zZYu3)RH`qdDi>+S-N@ zjM;nEMb)wZUPS=b@9Nt|Ob_4ntDXGhhgW~q{H~)}X}^ZrmxOklD8web)dRni>U7X?+_kodxidp?TQMa{oR|(b5Fv~- z$>!UgMZ|KOQL*7&jw@}BT9vUct$J&^ve4g6bT)xS5LFi&afTN#v0r$P!%OS#sx4BT zVX42D>YS0%0l0{hZ81SX<{xZN?P;$zsxuQ9b;A1`OWMFEGi+rvT|`{(Cl}{Xe*Z`G zxqQH(q!o*78H+Bov83W|`5@)_k;{>GYI|WLcaN>FamYBoA1B!|g6%^NW;cFs`bRFy z2BV7!GAfx56OC`oIfTzNAM{p4%r4^Cvv|nuM;uw&YN0c1fbL$6nD{4EO4X+`fFA#{`Mz(py_PuGpO8BA!Nvq;D`(P?&rTryp9}n#~ zpvq3Pwmmq=E^)fKT6XKQG=vIYc35e(tX9Pes`mdh>x=&@pwq^1-n8-hn{|4E{2C!kaj08PIn@Hk;TZb5BT5TptjR=G*p%uwsLCj)ShO+4 zS!)~nrx{CkhM5gLX*ja_AbjUYl@z||XwqT}D)vh+GeJ?T-y&;W1RG8(?aW&$;Put; zZHJe(P^1Rl$aJwai)1U?7tD7Eb7K_T#Em3qFiSfdzw6M>!LLtmbaR2J+g2)S0{tFA z=~Az}ftoiQldxeSn@Q%s?@-TALaj(7z2vf}h<`w0Mr;*R3yarb`WsH>EZ@Tq9bnp^ zqHcaMW?LLTA_ph(d47x9YtLDV@9_yWYIX5faGTmF>T!-H)mk^ zRa|w-jf>*vq^Ja;o{r3a*v!cj3Xyy?{K7$`Ipj6AHwIl`VZLly2)`u4%}@}SO*Wnr zxvjsn1rw0=Y)n~qdfc%Ve&y)e6Kk8iWyuFe)~gEq*952EyqxwSo`h++ebI#c#_=UC zvX)ZwW!0<5)mIS^%5RB6PsCc6Yrb=xRU~4^0u&M|Vv4jBe&;w6_xhMIBdE74`QJ-k zy@uupSZ(^;bfTySb483|lhW~wr1FP$7Gw?raP`VTUOdjIG)W(Jf&THHAbcV zZ`7t2EatF58x9{vi?Ke@y=gsYh_R62-yO*0!H(Lsie-CGl{@uX;=3gI=xP}ZTX1}B z!(?QGJE3^=;H4Z+T6KXTgBUj`%}Z00Aw`uaglxKqq1EjAB6s?R%Q*eC9R#^iqsXuP zPHU48(Pc%%Cbao%k8n9hG?!FUoYD9xO%xK><;B&o|92T}ADt#wa9nBQf`kpgnSgk% zNFGijs(G?7#c%ifmR|{baj)cH(!xJw(Mm@b`7y_Zd7&IZ6fUe6i_GZL8G?Idr@uMr zB~|_X-l$ZsLRET>t@}iF0^~w$&Gy@C!@UE{61qM3_~-5a4a1R+BW*)N*|3#G`9{5x z;Ep2PiGWie%qa_~A2|BT0%CRy25XuBfvam4j5dED21XGo{pv)&0np=Q-LJZ0j*U%7 z%WVwY=53;V4M)6`RNB$_p)9?6Vewv*yzCGa32Wi@MY^bKIleR>`&cAw)vCm=O>wp% zwJutWk=IxIVUr_BYx>I;$v8U-dt|lpz^Cz zs;8xvg+zBf(sAUe#iI#(+M}207)Q8}L|9|qSZnV4J?$nd-s_Wh6D0laI7Y$;ZNu}P1Uxl$)-SPv6%eIAZ zBO)*ayn39%PIR73c(I)!QlZuDBeitb7DpG`2x1?G8#}bLK#fAg(27eQ;V?~8$TuM} zgCMw#9xocPBRo{{rjF?LN$;-O!&WRx?>Or5W31wG*05t>(WgE9HIKNib<87L4kN9D zElk%GOudruj#qK0-NbAhRrv(RajT@_7;7%gn50gm)WrP)vshwLZ^$#VvFQQleca5k zr1>Fzzh@=mZ|0q0t+K#RA~-*^ENN%<7naobbI(AyxdYsqR9Kl6ac`mD66Jziyw_6Vp^5(ttrf1 znDP^3&dh9EA6ueu8wZf)uaZFn(8aiQf!vlL92-|hLEGrBEdtQuNwBwbKxs4Gs$s*b z-m23Q-tCD;_v)DIk2cu$hC4W_G!MD#8ILY$ixOTUlXcbY2u(ObEMGcF$`NB zUDVkZ%sGT%t*#C_k(L;7&v$bSiQ~!Uqn~J1%I8v<@55RFEH=c`FYwFr zZTPN{74Gg%KCL^=%pKQ3l^&VRqS2{Q5zak`b7kPavF=qx$K4*z35` zCdI{jaIYm@S@>PzbM8@1uY>k%t<&K#ouhDpV@#YE*XQji85Y7mBHRK9lh$Zw`7U#3 z!q(1WPmwV_hnLnpC9l~w3JZUg_?+dIyN}$ZyNslS$Tj2`({d1&4cdz?->51GWjdV^0TsQpkLlE|o!ghC>DliH(;QD7O1*<3NV&jyZbx#BO>N-1BV3;4q(+`!KMuqxV#|cDfdpX~L0mm+&Caz(Sj|Rr{vaoxHkirGn7TJ9%?DGH zpH=xFNvjw0Sd5}0@*z%p8~*Y1x*W~LcThS?vTRuh4W>vbcA>zYj^)_@|BZAK^gKmYt#*gYXt5`AACIr{Rwo z;3>a$HV@9Bc$AahmG)8!lkv?I*E4kEBLY8{5YMB@!=0Ozg!u4%t=evp$2gF*p`vUV zg)X@8Nbj;4mi%KWZ$U0~%ja>26P5wz@&3Z&98207TzQCPJmnktn5&{BxW^NYAJ5`S zx3#_7=`GD-uO?zb=pC>R_X!RuZ8A!8v63{{6~Ge-a1;QvJ`w z*`+8xSu+M*IMYISG7)?TMea+1M~V}Qr#OtX>RNsgV{gVu2)5LvUg%KL=Dl(RaxtT{@Br`6n1WbdM3$4mBG>8O@<~s->kimt zKY_5wj_p8tu>H2)?1d3LmQJEeiM!*N zc@^XNPM96xAFPI#x@TBUdIrf%%X2nKTI??)`;{SE9MJ*Jz8#!43@>+lo0ItJ&gdwN zO8FI3<~S*D`;h*_+CPL*;c!(PjfcMYm5v~73L%sBa&<9NV_z_@A`IJiKY>INuJCHd zkk-D-k}>E)^HP|V^lK=6Wk_dz6P6@-q$R(k!M^a?!_v-7nRK05X}^xzw}LjSRGeW9 zF^5Bmu?}Zbj?ANg(C{;`{1w(QA071N%6q-zON;eQcI8dd)NwK=@Ad`Mu&Vi{Oa_PL&dliY~@a)oG9N!%F95?91J>@=FN`fc4;i5rISHigGeh6jSot305!%1@LmF34gjk-A~kH-K_E;A_dchc=0&Lv)2b$=_zNhE8;b_fT9}(=6;q`Aj*mF)8ykQ&pvmT zubl%}do};%*wR|I+@ulZS1Nc+t|TCu&yXgo9;JPj<`Dd>V>smM;S5UibJV1ZCmV>B zJq>%iaL|6<38xKlE7syG8TVw+zBs->j$^v(xTS8=ZM!e2W;Y%vlTsIwxE2vmG5+#OCqu z*iDIPBy(kd+cBM)^wMbB$|OZYVBaAa2i_Xq#7HZ+<>|Nx-*qHu&aTYXTKk`Q`P#{V)tabNKg!>FFItRoot;dh2j`^q4>AV~#oQu}H<71ix_1X^tKFlZ;ju zGuhe~%u4!~l2%iY4Um}YDg4Swr>#e;Ay{5#uH34lwPalcza~K|dl7oW^i(ir!@XcG z9LA1&7=Gj6(n4RnWgB^pyc!DO!9iJ#I<+okN@4UT8f`rp8}cW>@0B zr#PGMBDEREko4WI4Tj+lPCacXUzgOZWL4UKq&D|P#Pt91&zREhPfj;&7I#AEf5+k<-Hf1EU%jOpLCteLnjoM|Eag$OM3%GhHIs%eXdr2MY~ znA}Y3jpw$EAirYsE6dXVtMsd$QY=W*-5LJo^wVlwX3NxT?MnUss7~JxwBY1v`EC>o z9$1zR7rR9@2T)o^o!K;siS|YFPmrmedk_#ph0gNgPJeP!nb299S;_u0WiO3Fh`vmm zOd=mMw(fM=Ivat@b8W;Eoi?mYh=Y`+&kh`gmp<` zRmX6dQ|D3+WAYa=y>7IlT?t>B!fY4IAyA|BH4LXOKv zV?#LF$8eDcgSxxMkS_X^&Y0PM@~+MZn~~AN#(PY<+gpe8 z>uL_|>?E|pwt*Fw6Ql%qbpl=rGUyOnSp@er9K~&tD5_meVNOcdq|#Mjs&ur$8U5t} zV&oQj`@*%HXqqovw&ELUpJtIxgKe_-C}WdskH_F zVO&4L&*2y+pH>HG#frh1lic+w$7w=!S{palRsy)D&aiLb0QbY{^sl(8YpB&*hk>Gp zyCENrL#Y^MA9o&b5NmnVX9j~_3x3;qo3(~x9e&#SgSTuC;BVH*3GqfmWFMMuuCLv> zf1n-u;l_?|a!6rr@DO(EQ$}PrA=#BdR-T)UP#JBl_oj{|ZKl~UH zJCfko4!dx32bR{4=EjXHznUl|!dsA#0iO9F(v2Irgu%hj$qp^e=bc-fG&Id5gmgb5*_HV1DSkDGR|e!U9$c~DcW?-4HLPOLI4XB45~8^yX>J4>-vwbkT+tCb zu;GURBk{oSu-U<#kKdmD%DjE!^EVqsg?kEd+0fUoYtCbfP#?~nQyt>DNr=(rp)6`< zdZODxI@YUdOvhHf|Gi->8;m)&+8gKolW{e`+hLOWpklBCutj zI~^8?3>t_o#;ptF&IDl_uCmL+!e=elg%+f6EFN|b#Cu_fBU{ApPyfco6e{m5L08N> z$$aBXb1dVtrI+nv9UAN8OU&=XQ#QjchkSk#G9RiWV8HI)mcd|O*Tzmr*;5r2@0sLf zCdTLGnxT)md=GqV(=Uy<=ew4c2mZCG)wV4&Y)Y9{Y_$4zW)hJ6LQv zG3<6IcTYm8n76X2+?gOK(pi#nD5^C(TfRrvO}|AKbN4Xk$kH5bTDY5(D5az#oU@3- z*-Jh&8*?AG`x_SS7tVHIdyG7aj}bC@MipR*R)ZptQ(y!rbr3#93panH9j~y1)pJe zVSR+%Uog4@fwmZ@-^~%GRXiD=JQ}PM6z93*ta#T0wr4Wk)!iM@mh$LPK3yvvm;HvFz zR&=^>d*37>q(vgp?X?PzOw0a=%RNgDA#Ih-3`G5^J?V9*$M3EtTg0sTaO4KV9&SAhdmUPu8>DQ{xXL#w0z&B$ zh2cWzWwLd@;wQe(p5=?pHqu|cohtEOBa8^%y59!b6F`K7Y&?vD3D`X{5B+8(?_+FvpWNNE$P3 zU}JY{1V#C9QeGXD#X<%~FxlFO5(hlO!KDq83X4WnT#g9{=8=TqcU1LhZsVt?4I4~C zg9CC97l7O)k8)sXrB=0WaMfFlf&zUsLFp@2&$))#v31gC?zBUc;sS*2x9(e-s_++9WF6#}b#WNWV;9Y~2r!b9`wZMDr4TVOkWAC&hI@k;9w>%*J=b@*tKFRF7uz%2uB%#J&|B^rK68;@L|!z@gxV8<{qlpG_J}Wd<%uA z3@T!JGMP9e*H{bNz*g+bFrSKF7mF9NQumT}#(Wrqfz?GHcWrODuzifbSP;bP_%n!%Xhh^C|^X%@(@bZ z8$B?R1q{NA9a~zDp^v5Z%gIa&;Uz@i;N*fK+#PqCJ#*LAcywbcv=5+^>=?(FI*ils z@29shX3-cX*cQjj$ieW><&h1Yx6jSAP+pwszTBzbF-bkMWBOw@rTPl0a$Z@kOqNQ$ zd{Fu;9YEUd0ht`Dtlqw0UPYJ_2xEhNyT*Ln2k>S` zm-czfoK+iLc-w+_3n3=>^a*ZVW*fJ6Gc-sLF%j-Zb*6$l3c*veSURH^+4EhIgx&pq@39{EV{(o;bRUi ztz9c@8eMT&S=WiT1@v(O*_g(4<>iA=!zUb1+J5<@AwyY5P@g0eKbzWJFv!flKYYp& zC3?V0d6BJ*8U=*%X`);XDEYU80U17>|8n}1J?GOu9kVLY&rp=J#LA|%?Ch+0G~#GH zKkER}W{J&P;wsh!@;QPqn8*jQR!-|hi;6)fldKNI=N;C$_~q$im$G?#FXbBynr+e( z=obje0iE`P!E=*s-29>=x?K{{*nY6wpd`OUNq))%&JsGdPM_PkBa5=a2!h+#zwG2^ zlH|)atw72*#zchl6(X7MxKz*c-DBAV>8lPXt!*iPCVP`3q9lTX+0Z$*QEkL1{K?72gBf!7OBt$!o$l9YX56DS1q?ms7gqL`3v05y551 z6?O~RT4Lgl7B`9YmwKJ$QTVnaN?Xt`n>3*E4X+`f?+}RVv+^>=%!3yUkWKEp4kK+) zA}3~J;z8P${P!r&DWK$I@*cRUkXR25$@d*XT1g0DQtTflgHb~$KOhQSyGVe&~{ld*E8I+J}+XK8B}r3LpUonzrA4k&Gnplo%l?$*c%>!-wG z^Q+n1PI&g{EXkr6 z%}MW<)Uyr`yKCZBwC=Fo>#whdUpc|VhIK5@ZN;i|e@$J+npGFOW7_R(%M_!5bkzHA z986lIY+*cpHLJ|t#Ls{W>rGlh{4EjL_UFO1++$^#NR|d$a8OHseQg+i=fKh`MsCu$ z@~avF(fpn?Y-Xz)Z~6nQGyK6Zq`fH_%8I6Zyg02&_>UAG3$Ko${PUysa9{Y7lfMfn zr;pWAn%I(xaQ;l3>HEbn%qr~{`yWTxP9o$w7*oSfju0;I7ptg>_%9?LcT&b-R1e8= z9NgdQq?BRl|CRde1;$(#SrfOmu^9g5AkwA*6CD_Zb&>oZNm?Lb$)Yzzc*J<>aztG7 z6c_mP^0Nmoc5*cY{T@lLFF9fPxT1jn3Bs1+hQ5OC5XoVY&g$Zh=C(;RBnj(X>jEo3d{_zbYA)`oB`$910t&c6MlMdzL27#tL+DwV7MT zVWbURhO%iG`Bj~Qc>Ya1E;RV8-8&e2jP-sCLH>8gljcxxHe(wcdh8gog!8Scj;Jn4 zs;lrFW!`Lgo-IFNxRj$wd`X$D_>SrfOa9W7zbWJuDB|Ke5lX;w1QC^Z2Gd~0tpDLM zj_TZ``YH*d(nX4%U@uEpI$tW)?jj`8YvI_H)%DS0xSS(PYjkpZvB1h-OWC?OE>8}Q zsLHWyi)}PNS8(!w-|{?7O7n_(c1=pKf|i9|;h>BTrjOxDPCV^PQl~k7X3Lm@SdJhI zM|g2M6=!ELFZ`7qLs|ipre$L$C3+Q#@>iS(o4I{T{KHMxRi0A6$VU#fvtLbTjBVd4U$5=K2bT5Q~d0XxNkfTP_re!a0ADe z7H=Vw#-)oo`+~V4VK|TL_hZb-u3ZQ^!RAXeW5+s#w0WEi8Gxio^YOZw<@mEk|(p!+odZ1_O%F~wg6+gwZjQcGi@MQShA-s zE_1^YKat{>$sTlgpuM)pA<500YT63N_{2sArFIh4YGXl`xXlW|t~YneX?|i2!tH5w zp%HmIvn_~Q5Q2d-6PJWy%>Ky^=Pdl%^rot8*pSLM#ulGUNpQDR32C5h#|}k*z8#1h zZsm~DN=W7mM;G31nmGl>hklD{qGkAeLDPJe%E zTYvwl>u|*4JI$Oxv6o)Q5kDM3-p;|Kb+cyL3L`~CWVa_7(<4TYIldIM)wYq+<>SVu zi->?bIJ9$;YEQ+sAy)2iHKT`TIaPgy`ChI0$;+us3y-V9E)UfgK)I|t@% zRRd=&z;(FU!7e4iYMihZZ5r;O35)v_a&s7=+L=!=(L8VKb+|Edc2D5_538%Ld9T<%Op`j zZzJ?AA&4hGw4(wT;|MR;b_d@}g0HHnv=0YB4{{nGgu|BlfJd$v4a4aUHtmx;^hifj z6WJLgV>nbP(6`^iS9d2zbNi&CYX}{tMJe8yiYMh|fff--t46EsJ`TPKaR+>Vv@^S8 z@DLg#B*x~Na0ojb)gXyVWmHkJ_gedZwnU@`20h14J_o%6J58lk(>4wCqGW5Rrw|?eE1wH0A&eGY%tdEF4?yIC;u`)?ZcoqPdG`6mqf% z2T@=aK07xzMxPABZby?AY_l#Yzt!#F|Gp)Kh)I5qY=(O?jfJTO5hpE<(xTbqZ8S+ z!qJ7svtuH{I)_+v0#rOIi-Wa|a5smsng0s=bcPf2P2_gQ+%z;Q*>fq&d8|O~(?2+B zVMXiiPB(2HD?^pXFRV)V9u($mLZ4Ok5qCzsF~B+V=Q;Vb{VSO{Q*SaYhIum3qp;Rp z+=ry6Gxk?#AtTq&G6|w3SqkSnj+nMvcAWL_-o#`54Y4kr!R`{1-T+MHrag40s8vkpAW*T|w_7 zG)FCN*^OC#wwgcrl=abGMcxx^9?*j@fAbSg3_Zu*O=5RShVJgAsOt$<`2-xVAmWSR zGo{?^ONb%vJI1u}ifkF2F6Q#2@Gva-0p&N>7vKzB_ej#ev~wlw>5lf!gzg})I9uy$ zHWg{(XM8g_7Knb9HAlMtA6c4*graA=kk4kVxj#y0e@t%_f@4l>y`niQTzo>+Q+hJf zVi=O4emKgIsF4Fmd%YTg#?K}jh8Dw77?%7x<=KYm#4Dy3!9ujH`|o$+X)7(VWa7Fg znU(YbO4|l07qwqxXOBbjgAU{Dq>AHPi&z$urG&OYH15UV)V(QIWNT-+4RdngU*ss$ zrh&=pcU3ik-jkqLCFoM%I@t`;uwyocP!TSCtYal4+{tl9aAFYnn5+;5e{eah*oRg&7;c9uGAk%bOm#nJL5mXqZ~=v z8!Owj_f@{ZWr{H&p*@;t#{iA>o`I40JBy9XtGwl9okLtjc#NaFTT*?J>B%vd<8oqr zEE$i4l%iX+{PY-LA+B&39_Oegw}pCpGG^tai>hS-Je~l2e|(bWEGqDBhbK6ev=#Bf z?ja^ofutaxNJ#csS+y*mZ@w@XjRvdXNe(V8(4=C|N~>}w=I4(JVtF!IE(;cXT!^vE z+W7Dkr=R9T9bb&hElTgH)Z<*W91nKkdUq6_<|Na?p)xb}u->FJpH9sapjmjpRl`-|$PCBEm7k9*~_N2?^I<=6gP$CNhyDO)R-ls7Mo=Mkggmf$+T ze0aW7pX>{nJ_aB*Pt2l)5g$^a{<&;fZL6mQdbz7O10AEBvPA2&2 zlydQBoA~JY_j&ijiyh|q*{@G=o>m2nG+k7@FCj1ei<(95+_`nTMr&*v7(p9e>Il;o zC}h&mbWvwtFfStv-!AGRT60WHN3D36^$;IxOxW8R?p+@tA80?k+(D&vYBi=++owv3 z^A+U01q;p1FzcOEOx505n#E{!ZSMeQxxdnZr!9DTtyrpu1E9xv6(8eBJcgUMx0mLb z<}AG0ai)!6WX$+I(yac;+J>ha<#GSU+wp@#!F|PeEEHS38Sl)ia-w`2De3;MZBerT7fkw*B^spIc-x;x+|qwK)`iT#Kd2#Z zkQMXW$!tqS@al1VGqWB#_Te3Xzjl7OzP#K$7~bI+)0%R9$JLLz#=cB@osX^<(aQFG73DptiyYpewsfdw=}kD8O=)iy_CK#q&bh8 ziX^Y9LTIm=Y!Ot zGfK6`DkBo~ab+WX$VsMoH)N_>5$VRx>`MH@6hD#=SqZ&ZZSU)t{70O8ny)=GR%%fc z(;>ss|0wmjSROsft=Tzl>%-))6F%mo@0e8BnVsyxxudaUQ>q`Q>J4G9n7e18ZOnMl zD*qhqeZsLUC9xFN56v@R5GE|(PZF4+O-tOEkM43QI@-gh99UW*RcoZPDa}t)latLn ze!Mt02}$r`wj3v)=CiFDv{zNVW#=Vj8p8PuaoA2Ms6Tc|*sy9F8?q&bR%aECgU>pw zwBB&cu#t`39g`E`=Sav=iy|-Qu-+dcSnB{*{le!RS6cg};7*GYwQL#&)}$hwFA&Gp zlC;=WnzLkkf$adDFFLASc!cS#nr14-qKophr6eJwFA<5|jMyznRF6&1QuwmNNbBZQ zIO7}eO17o{73%Xd$`@sj!}kDY<6m{!le@U-v+-zFvR|Vtza(X8!UiH+wq9CaU7JUI zCnn)vcLZr$FJ;hPf-c6b3*;LF;monTn<-E7gCh#DFulBiq1p;Vy1(g=()P z(WE87ZxN7Ao0y{_{)vNIml3;Si6Ou3n9};AXeWL(A+$GIV}=Fr9RkQ(%+W~J7i8H- zaz8f)Bj0r>Gr*qy*=YP>FuG_I5!UyJ#f>o5RwJ$%gZ}V+2aq=Ts%iV9J!$=bT3l}N zlfuwm!pQiCPBrZf$d)~}E;QRT!;=3Iarha*>5O-(toX7rvC#8qqIE1wI z9=$Jk1(1Nu3Pn}JD+uMcL}8=?e3%zu;RD&II0Rq758-zXVsgJIA4j!`88<8C-&2|0 z5hl7>;yB`rkcojdmseSBh`Kv%`I6hfRzfWt#nu@HYpN zHbs$HD+XOOX$b272sJSpluK5M28D~AN!-K5Zdr{@U&K>QA4eRTpSwm^(EkK^OMtC* zVs?E2BT42h!9X$|T9RGkI6zFym%_yzaXX1vO%sgO9ECDfRlNU9-sYtvxShtAj{d~~ zpPvLAdlNee`T}e_wyNOnW$RUSqT>Bm^3ubBZ@a}5SX@SK*^hvDBH&OMTFat&k3uUzKjT1D|*lDu3a#c_8#+i>yo zv@{$#btwmQt0bV(*?A>n(z-OYnE6)KUHdX^TkjsKqjhhOu%f;aW(q6%VrFmkU zX{%Z8Uag!MuSmw5fH8)?WxHZ6@-15($nyF#IW(njy_VBF97jXRp0ut_ExN`0SSHR?mT}Tw*yN4jU7Q+AyjA7b%v#W6ROj(kS7;yV+8}p zcrA628H)#G+|&`IwWqb2MV)Ce97hHYc}vF^4^b32n7HM{)0&dfkPeHZ7`67X21a{Q zJf4d5gH^m|vs_0+bQ#XEmNRV_PH+TiElO_Js$qUbvvn%sI+0xbGV`6%jH70zBYF*N zL($C~PulCK+bHc#3*sa}#F5D=W_HL=&? zsBS?j_B7_w&O!}Nb{uKdqxyA}>`CjE)Z!2)y2WD4kCz}{+pU~zTBjO~+0)kBmHe$K zPe)R}hAr#vfU5NQD$`=Q#J^m#0@6nKwdROw$tN?Fo4lbjsP~<3R{kLqgWmdT|BOENZJz2-($-dM+Wc|bqS!(T`emvWQT3aZ1|BcwM?ppgxE{DAWvj#5 zi(j8!gQCD8HalbD;@(DX4*IwlSKUN&*PT0dqq)Xx2=v>qHagna-5Cyg$Tk(WJM=WK zoirxzrkS8C>eEQg7EM!%o!KJ)dY{Yb;dF*mR?8k-MFKTF2UuqOPzj`B}=J2zh;1Sxk^pFUcQe?!*~9 zUiaWm^jz3{9_AcbTGQio?B)2IHaY2Q6Lj=tR>XyW7V)nRd{r||Yfz2hAnqb9a3`GY zK+}3OS*+CJ8uLQgLllO1BfNUCb^6XzwkZ0ONz2NqbJCpDX2!(5K`EX?#T!6zgfVn$ zxW2|MQA{(~4TC(ccQfr-SlHqQSV>e-^#$K9n<4BVc-MONx5C7U>NoCM6 z;4^{uuoLd?=+d0TW5$hi?5>Shy`)I*K~nP_c9$1hZT^AcV((~O?0F9Cl%!%aGX`Tn zd8^W%r?yQt;Z36)P8!EgjEfjr3mDFK@@amD)!dvh6qi-&!e|r297$Oxs4k0x4lL;N zdtW#_kj!AjXtXYnMS`$XTv}Ldt@PJhEBqlk?v@-t+WtxYzKM@plxT;d$7HWHKk=O_ ze%b1jh4*Af*oI|?ao42!zz;1qZ9J7b4Pqi(A>oZ66i05EJAO+xZ`2vPF#~DljNj`p z)7GLY_6@UgXOf~=yJV#&AwLykb_4F(-W*eCTZ&?A6YVWw(^a^@F{XJEa=XTtUp1+S zYahATTvqmMu;5)5Qg$0Sezxb}(k77=;}Otr2&t75_jq<=c0cTQplM;zvT9|jiv|fH z9Uv0@LmWv~w!pwZ78_dR+zkgE*j&;Jmu&;nMZOEBPDpqg#Je6u#+?z_HUv5+Ff+yi zOSs6v%_hO+mW?jIqTP7DTiotY=!or}WTV%?Ee~&D#^3F8Gx-dlgFLJUF#zrl!@V5h z`DuvN^N1p7_1*+g@!p%f^`0Y)+Rj?r(nJ2Ra34qbkMSH80;0JuX*h6--DF%8Z=D`} z9`Vfka6iYA_8C+RT3J=@R3t=mf6{O?nLEp^+2L>&W9&B43O~THq3);4s2@yf&cgHc zy3s`pFlvqBS!EA#fN2hh+?ZkIR~6GDcqj=N!Na|Ba2_DVF>>|}!^50%S_Y4*Kfh{H ziVvqEJL?OEgMRByvuEzw*0*4Z7AMVF-F<|UPjh>kMSJK8w#D&Ca*Qw6W0eYfJeI?w z96_1`q{+k$v1A#8zFnF3-|Ej*VkZhOFb_tP9j+M2(z0~m!aIDUvn zd}qdm@pNLuy$%?{WgSN8IQQt6#2jL=7oOpG(kci!WZ0O>H|muH_e{cV!i$OtJkdP1 zil6wkA>GD&SVy4Gvm9F5jJ7alV8vzeQ&~k=&nA{-l|Y;X+(jrgtgvw7*?%~U&0wG2 zP*r=47;jVqI99*%hvGbc}5b1v1*NQ4EaygJ_ZD94sM6MXD%Omtawld+qkVC_ zgd7~YFV^M8;^G97gM^nln6%+?$z(*CAR(TYk%vv+$e;CYf!)|q6JG9M(wr5AJ!2^@ zv!mo?ULda^2m_v~IRu6nb6_Rvm5yQZca?7;is=Xppw6tcUq$W8G9->!?JRZoV;S<* zPI>ZdVfq)HTbB51D1JO1e98(C3Zk<96JG1cmSJOh1Lsw&aQsblQCwr!yw^(${dGj& z#CN8nfV~3}{{wE%VR*e`P21+0n~iU9iioJ*Kq@+4^JC#E$I$f#SW`t?%dYB;4l8Xr zsIY5X#by2zI>(ZXz}`eKy1bh9H?V`l5xUq5+S@=&zKCGME=Jxl;_l6kb+XG#pFl2U zsQH!KSTRXh^lu?OXSJ*>ad0wz%=c-Xk)51w6$q)F-s+&!9LUMJo1L6c-$qoq!m802 zr(jCeU0CN>0o~=<+yfo{(?On#hfM#FCP!h^=!x>}q&$iRI-X*hXQhXCIIhV}kKXu{ z1ke%A&+E?nV+d%=O;o0JbI-OlHg~T)koGznl7O`f$F7)u`5)YaF{} z;~BVZxn2^t7!7#}hc+3#$AP8ovdC2oEx$_B6!Uw@%rO}K1dGGg8Q8IH=b5#8@*Tj{ z#HmXsyw72#wR)N1SbkGQ#Pxo1ab{T@5Q&d4JD$2fu#^lOT71AUotgAb3!{crT-Ip_ z>4QWvkCH$BJf@uckV8qU-?c#rTQh~2%uWCw7QnbKcp1yE;Uf+p&83wav!ckaI1o2C zGfj)&qa@(SVg-Fe>ookqAu&#r>Ff(1bLwesEi+`w<0hs0ajIShsusnHK_$FdtKkz) zFD(Y6Iw2|>l-eh$b`;dAA3F!tac${SPB`s7H#Z}>Wf6Ru1au-)2@tV8SYOv`xlle793FZx>W zvg{1^&pWuZm6zPIf#p|~mbIcIwl9#4qyBPI$VH4kyM1)bUvw~c#6O(gF^?rjM0;$3 zo3tt6FHx9_7Go0=i@6&PuxIScPCji)SQxazC@!;!Pi|i*Um*%Nd=K+I(+EA|EFRmW zv3r`Es9RWw!pRdc{h@iNzv|%5ODda^M65%HASvFjkymc|;TrOm#1jv`?ugRbvugW7 zH+^AJir=6jqsqxF|5eFdMaPFl=Z)GcF`eo+9ZTAfu58|lr+j0QoV?NLv!jEg3_8mH$u( zh~|5wVF#4&#pZDG`%e92d!y41t}AWZi94}jN;*HF4yStBhi!??_`PRq%9usPRL0?l zPCRWUqWyIZS<@Qj1o$HYvO-jk7wF+T4FBzj(t_$_$lir6;-Lk!D&Zefm}4(&Ks?n_ zUv-wwIFr3Z45|Bx6W@$~I=yLyv8Y>XRN6nK_E9ic3=^|M%UbOP#Ak+|Iq@`SdST5N zipz>|LHwK$Y~WQjW=CjwSNGr?P|VI_G~F*8N80#YbpmY_48{U!77@=c$+HPO`GB!V zgvg)fIS0oiXEFTBQKh-|t7ff)s<$j1Vns=4za|>nj&hPU^gs((J;v#+F*$hnjl)Wu zIP5b=Uu!hl7fWiAhJb!cAb!^Q6Xb(yEa}0AyaQdL<;)7db5v<=?%Zy*oSIa`^?Pz1 z1FpuQS3IpC)~-J|w7cRLr+;D<(}q{MQy%A)#6 zWi+~|7?%8>DbJ6tX2lJ2K6u=Q;eQ-MS}^al^}NiwK>k7y#%GoHpCF@N+yOmF}QAAjmB-YWuQnR*Wu)Mif(CIDG6LYi!NNeXaV^-?*hNXX1>K_69a_S@tSHNiVYEFDJ{$2BTr~+?D zoRk@r@YN~IW-(vtEU%#AV}vgaIV>+ifaow`--4Up1+S>zd@^<|4H4VU3%? z?1ZdY+s)6N#WPznw6F!!ex&K660u-Wn{6nDEM$K#~hN1uBvI^)mw*%p@+IQ zABwe14YE4$L8GfrJpEeqf}0>IRP`ZeouiUf{juV20g`Awxn}IduMfB>Sbyx_pW(c})riE}k5$IKsZ)iIr zJK)UZ)Dy8C9b4%RCpeDXN$*H5sCZyo)df{2Bc>C{bTTCJ9Z|I@f{7Tg#09tUeAdkI zsE%Q{nWLQ?a+Hf4%C@TpX+6P7e1c7Q0?dw=yDPEX*IDWwwf0 zd(D+QH9{i01RakIos_If`j(Vt<1{wZMbC!h*Wp%9 zJ#8#sShIpCF0*lTG%ko+6M}Chcdj{i+AOxAG0%OtjiX7M;N@lwCckPB5!G!;#gzzD zi59jn*vL2B&Jo-W|6ux%t~!P;8zKIlI76me2>2PdBP$$N{j398LTSef74 zkx1r}D-EsrfiHCy)>nF1*yx4Ljwr2qG!3t-##J<@kb~~8yj7@edg58@7W&^^w8rOD z2RGSiky}56HfKyz%v;FJiTSXHUAsuPjPM79R&RAgoAEE2Yfs~JsA5!-+bCH~`7XjY z)(hL6;NegC%$~GPqZVC9(IcqLYx0rKn+FnEmWG%Dp6(FNpZLsbzvOC6&+S$g73Ue` zydngPcO`nN`D1=2(c(1laIqYU^j|1o;w`S zLQ*-YKZlpQCad{$SrP9fG2Q>mBb!HK?St1& zu9Q;ae9)36?q0{1m(W7au6@WfU|W1=97~!jCAaK5fhHZX-Gywmb3b~!Mq#(Z`A5wC z%(4Jx1%NG8%lJN8Tk$tnBALJfxnJfE3qZ!KICN39EP%5FP#roWLzA7O63#v>02wm? zUBp4TEDK-{0k|fE0b2cO3t8F@ZuTp$D5R~)$f}X(V(hSmC?TYCh;$5)sx9C)4(*F( z(8dgC1MlXz&Pn=ws-}&udaGVdi02ZKpLBW0WK33w4mjN1F{O3gWm`s6zL6Uj!aaz< znM~x)Qn|ObATuPYaNer6}$KjbT>O zE0pFqxIQ2TqxnJD>j=_(IFo~7XjlwgGO+j+?TFDT^0?rP2>MOK1x|i5{$=yHQe&*K zaL0;KN$;aHr--E<9Ft^ZEI}uB$>h?9rxV2b8t-okoWNXVma-V5{4j=C)J2Hz_b`z|NWSu0n-w`8G!+yuGIq5Ane@8Sb=>sZ+!pDvGn{BfQ@Ngn7ARKf6 zX|2qI-EC48??cI3j32#c2Fo3s z$Fx_&!yIK=XOIoLv($+xDfe?l5k8!RN25f`@tk|QOX#bZs}?QLBOKbDld4+ToRwYq zM%lhV9!U`P1x0%~7uPf|7+~YiqZ~!rQd40oGUUsfCDQ_UGy$#&fNbOCS=R8PkBu!b zT$z?S^f3-3tvG5nbJp7z&0|S(eb9{6Idehh`CqdS;Bk&Bt^SPJuCL{FisF1cIoXKY z_q?|~YS|CWk~p#inW#ZJv-1fKGRK{Pb3)!WJ-T==K2UHs&3&19K2P8 zKJt83`dTbQR3|*i;iXM4W!>m>F-1y#fW{L^`gnox^-4-N+OSrcgAu}JI<*@d` z!1Ru|R>C-I|4&SiHzqFfXOod3|1zFQ6n#yJow8)o+!NBQKY?<(yqN` z+roGSF&I1G2iL<3v0dtw4j^sWMyBjt=t6^b+LidLD1HTqmt!Qc(=>!vJK?k)olWb) zG%3y3P?OG}N*d#^%0r)D>r~U$^km2$R~IvOhz6}n_;nOM5yFR*;@NiGzTR;yz{>O{ zyU;PR;xZw#G-U<;27>d$wE+x#j+pEh``MNPW_jU_jxa5-A~Sd#8llPi*-S({Zz4~* z%Bu6VBl6ztNdAs0Ted6lw@{p;Tu#nWt=y&u#1Lk&Kr!Ott&S$`%@wxc*5O$areklh z_+ObF=kwqJ25{W%!}fK zq~L17*c5kmW4L3mB1chYwL1zQa!BVU71fw!!y3Cgt|!J1laT{S{SLUeX9;IEEMZRx zHd%&`II^@=VcDwyjTsllM~OklOEC$ZpW88u!)ylFyBI#^5Yl>p`Z;LHuGBwHb-pN< zrT5G=9$vK-XAdr-jfJin~{*Cc;mWkUqS+aq#M3$PJ#W47vZ5 zqf2vdl&!{!Jt&SJ)Ns2bBdkvoi=N^*Kh8FGl(rRTA*26wSX33GhE=&UCL^lPkcy*; z^5P&@m27$NvyLTgMA)!AD65kG9HonhJ3Ht#eBLP@e#D*GlhzlgMc+~$$Hef}9mq(C z@0S?^c{$vU=SG%fCMf)(<49YO%&o^dixa>`u-lrfCB`q2kx_4TL)GnwC*E%B3D(@q zlNsOGmmOwWOIQdPXK`5!jqCM<`W2#1k11utn8&fRdWWw%-pS*u!-**!(-ia9$jouT zV2BW~fMFEeLft+_`r+%2Dy`DNjuqdSJt=;JigZvf2c&bg)A+V$KehNV%rE0Dj>0#c zdRo*~VbdUr%Nhv*eTzUGtaaD0&lW2+$f7s1|KwfR?>7kh6cL97E4vU5AwBVa>)K#*_W*3`_re)Mp=GUjE=DV?U2&wRCRZ zcL<4#%#-qQR0M?b1EFYmz;9CHpg6z!p+iYqWtF{bDI%-Jx;v&Ko*$9tXcUbm!j^;w z!)_i7!~-kBe;*c(rood^{ghOM^JC&Lu%?2;WG*rJUHFNkIkZXnB$`4*Fh3=XTZ*Sk zx)v zooPMuFUdgnRov8EIydB3PJ1){(R7DR)qUuVO7+)Nr3a$uwb~1dSWaFKi=C`Prx$8| zm2q(4Hx4CjzFF9gP1q_=w`A<_1StXjmVlQ6prveNi!ltpa}>8Zi~=dlN$K}gIvS?* z1!PP8I74@_gE8q+_=D3;>ss_dPFU&BCB*VavT%SU7X4jHd#ePG&dwXS z_s*R=a<&uM+tS-{Z>x--e=2=8PmXwA6dwxUl<_affW^nTH<^(~(z=VaemXm=N9 zw@Ov&1@~{I%N9~A5O{%wPb+Du_&-ow9DNgVuQtZtL`ZU*2{mmx?!QXx)iC-hs3`D% z5D4eEvlLEZOpeG=jD-ef#nokZ&>8s*cboY@EZ=B+$N`i78iMZ!zr=KFi`ZRSao1Fw z`!o1cI5J%eOfZz#<^5{xH#s|Pac-}zSobZ-r`PJ2a8Sy1AO$ON;h>_d39^K^>nbg_ zv6Q0uc26JUDaZg$5!ZtVjHP(}&182;c0AXIVVB4`6Wl1XO#;2HE#<6N*S(+auCH`m zAiv&!ohrFs$3RA%2SX<;h4g0SnfA)MJ49)*^^&rSngK_)8-T4QZ0sfcvt)uqQK@>T zHNPw;MQ^CoESOp*f}fZH_pgqm{4?|SoSie|)P5sqM-P|LyMVZID{i%vqA7w(({-sb!&adRc8_a=Ul(Jp9SM+GeDZvpzd3w`3CmmVpF znOt(3-Q7}&YxZodgkv8LmR2xR|E-`Oi^Se$W49y|Af(b*lwuO0KKQMbKHDNeEZ=~9 z$N`i7HlV+)(5tF2QVc}mIx@Yw+bRXN2{VE75|XD-awY+%ibJ8|I8jl)r^c*X*_fAk z!5yX)+03;R+PIUKXQkA`Ar&(Lk8g-aQlDO#USAHG`9~;mwlHNO?>vu6@*_cxM49vu zY&ZgYlw!5*9u>Wu5H9tYiEFq2^Vwn&}^+a% zq32l9QyLbM^&lk9)MbCx9j`>~lwa#_Rb+v^uIvX%d??36ad&{YvK(}=?@<^^TpEA> z*9l6Pt+klJ;zjX+=`48$3c4c%VZ0{sa74f-yW$MjWI=FuQbKI~Cjs+HlBXOr72FvL z4#oQtvmaTB5`$k`-6cPW`B%dS?k-A%?Z8Ze7v517I(3`~9obid9xuOCi=_`@d%Btu za{#ZVoPmNiLJ)EydT*#<0gcY6yQ|XHJ7!N?Lg9yZmcMXWZQ^A(srGJAi`<*AnUy{H zwA7go2cJ$-@{DU`|d znkj>)n7cy^=Ax2&En~N0AvkxcQe+Dd6WG5rK1jdf?U{;&!cK!Qzr&foFwCcwBSXtgbS26bl}hZHpsFVY6`cV^I6$2y+J=^udD_1=hqTKxl^$CUD$BJkf>X&^P=YBj zy;alyV;b!DP#SExjwzULl=Lx+O$ld1f_KxCQxy|(?r^u9LJp_r?x{4`+M)8uMh=`J z?gbGiNIO(5yK=my)2#1aZtq>L%fIQkO-hx`Nl)N?!z51w`88gXQRM)eiV-qK;u#$TJKcWS3O!xN=E9N3q+spHkE?qAPZeBMC*F3sE=#nJ)wqHVJnq zAvSM;NL~gXLVb~3nX3^{BY`BpuPP;|W#8A0?iY9Uc5Q&=*B%4+;liENK1hD(uFl8> z?l8y4l?2=QuLLOcJ{fertU~f}f=?~yLCf)?CB$&j!Wfx#6TTa(zDy`t7sg-hoVjtM zoJ#7{R@PS+Bxu=o^BYgzNUJIf?v-UfKy8e2Hj12t$o@Wms0!|;l*IqfK7U}P)SZwD zlM68foC%ggX)XMT1IA*(%e*3g6=o2m?NUBU66IC$eNjN$t}yx#o0+o zcWcc16AN=vs!>wyl_XpE2zXvbB`_si2nmQFr}=+1N#J)EDc%FxYZgHAT@1bwvu+A^ zL?W!TEY6*5HeRCmuLiSDQBcvPP=vKH^!|2xcdLnesM8y-ah_Px{O}hYcbO7qOOjI9 znbFpVk1Fd>iP=eVeXeRQ%UmQyP zA@@*`ySyB>5l2U58*x@D(#wusD6u`K6xxg$;`t`yLjjyJ<{<-%>+JMWZGO31o5v5! z50FqYfj*#jcV**zwX4@1;EYHq|95Cs3gC0{(HraM? zL5|vtNGM10T;#a2-1*`bl@6PGn+5e+vL6&#C~66!awjHdnk^hDT~;c38(94hF9ulB zwn3Yw*~~QLQc=HI;Z_vyCTTFtTD?t({M-@JY*J9NUI|uAu_}&}y?zA&8}XndWa^xf zVw++WwtpAuvvNMF>_8>#-n{WCcGmiuTUDBDy8_j=r$;4o7tDyG>GH7gULh%PvA#UR zTYcbWyFE(J`2IW85%0*$Y`zcm=H1rpM_-~#^Bia2yhT|LY zeEnpIgNBzTw|perNC&>sU!ToC@AZJkcDHZ8Jl)byETh;c#u-D$cRChRP~S^_5`JRRuHc4HMESFvY!aq z7^?X0h(@eP2f&|O#zuzrh$SQmK{(4TgVjH}Cn>?UxU5D`n%h80sZWN~4I-5RY#K@J};zsK2_ z!A&LZS&H6fdPFGy^~+$%{cLb!HZ9g>4LeBBQS>$&y1Fo{Mw=~H0wrkBB#2w7;k}gLlKh1r zN6RFeo?GM9UcOaiZkOFunbJ`j zSi7(XmKt+@X{|TgbM75V)74?mRgqEMJE0CkQr7ayN@U>wtz_% z-M32igC2C0`BBJ3{}fd#HUB?{@&xW#ZCE69D4WuTT%LJRDaeCmko`bZsD_bDaAHdYAb74RXXqy$`&e;VZ2 zGRc;F>b7PV-Dec>JxwiNRq+Xsi=g%C#MwA|Jcf-LCCJY9bye^K;_vQD zO3;O-SI{G>-;0epzYLw|jtLI+)LOIdD@u~>@ab{u$f1tB!9ug zw&W*qE9JwlDIqrNOQU8+XeAY;eI3#;RFcq#kG;sQ<~Nj<-ea_~<7iwGe-p$Tk~WzM zM~34@7HabOOYmS~eM)M2U%d)KnC$=NAc=G~8!7Nf;c zxRX$F?}$mxAA=LKd)O$G99QpU z5F2g;yfmEGD*VHa`-4(pv&xDNVhTy#KZ2KOXZfC*D{i_~((2`oaQ7#r#J1M3TlVg% zWrWoEXXw0Ce^GKa$-k&x`ug`0fRggBphO2L6joST#mOo$QKWRk|0xBw zIVFYk!z6u-r5iE~l=C;p!D{Qn8|q$)6;wX?yOLsyEGBSXN%G`>2$x;}oGShS6`1E^ zAtbr;!&gKKMFQPFl?2;7pDn6Xic9u?f&IAnjv$yA)0OGt zAc^l}uPwEC_cRdgS0o2IYP*K8`W(f=sViU0VnN25LngpAmAWxg%t3oSxlby{sPKAFh@DQRMM(|Vl||V@qb+}ZC91cdOlzQ!ZKYsI ze=z9rW|9M>SSxBWF)q486tmH6?JhUE!73_ZlJ*9mJyvLwA{s)uhOHVghosg#23dT9W`)ROP6mp|Tr68H}@hr&?Nft@(x3j=Ql^V>8YOR?=OGOaV8609Yic zZ{-rR-`!Nv+dR7}_bLS@`^~_vBUEzNSJT~GG23jRst6Sz$$1NK!fH>#n5(;M$iDZb zErSChZd83$QoTjUEtL@4D9vK~w~+myl8h2>1&NsNxeJRM_eP|!4G!4AMMv3GcWb50 zc4mT*UKJn8@G0gt5CiW!vB??|j*x`By1T7X(7Su|x624j>O(<|aa%pbiPsm(#~!A% z*kVRG;6Ae{si^L7s6$7}f#fFO5O`n1vgM9Y0xy)`te#ksnKiqT^bwe0qsAkl5r+TX z&b%Dhor^n(G4GjYZs9u1pp_duj#46bnnWhxa88p4*@BSq6Eds|OcZ!D1QrA2l1(qE z9d3h?V>2{+On(8F~d2bJ1tT)`zm1MYS>{4RSNXk(jugH6kXm--FecU`S`R@S!4Z`mo4{=>5Wc^P! zZzUuFgFs>f?gXX8Ht$B*ifp_pGOD{H)L}#iXFwfr8<)GHXVzsuS6t-fx)fo)lago) z=qPMIrqyR5xTyK4^3G5hg9sCiy_sEMT;hEfCCavNW`YO>Nb;Tt-qJFi`MV;-=pJ{i zwrtC9}Mg-$6aLyA8hBztjkqj|l6{NTz6;R21cQD^hzLP9X-W#foW$&tqY4c&-a;GXKlcu&vkiC}VshWq{PJ=e= zp5qr|;&=`F{E4TA^{Xzn4mxsk&YiCGU1ZXiMfVc3AM~K3%rhVpqmI$FI4Iy&u8KIW ztdc0Wr9I;-ceyi_(uPT?Ch%(Yht;eUd=>=bolEk5Rk>&w9KQG6Ln)myDNT{R#`LjJ zmzqQrcQ(Wo&5cmJ#obe>Ibd@m;FA1aAU{mLAroL@E^TwIIn$Lrg2wW?+oUAeCIkZd z=HNpSok9j61XcjfzRpVVK>t5HgtXqxN`!4r$epMyqLO?NQ`rg-;^)Q6LOEU`gkT9y3EtxC;B@~iz#_8fS4BmQ(* zKRT-129<~+(MCcVS!yGpOH0VYH6%JMj>UGR@e-59-gZ(iLaH2w%9@bnW0FH~De0<) z(dVZr#F!-kXVsmf^v;;{=1F{`=0EDkOWEf__MyVrlEWXU>pzJ~zu5E;!)|3!3Uj#~ zN}(;lPCT!T4+U__7=aAGr7cNzIBN;7UM@jxExJ)fe-Bdw6;4?ufTSD)WyaZQ!XM$z z?YJVfjrbC0CyPqv^T2$Re2rueZVC0aM)1GJ>S|*~ZYhwT-GmZhGXV0SzWMVXX&%a& zgsj6w7H15EV$YS|IdtKmZlJf-Y}6iiI{rEEC#(U{pI&Jixu zl^BpaU#YU~d8FW>ljhdvDlSUg1&Pf0&Tk=RZ*-I)pKN$vpj6gPJ((5_8#R z^+FVFO74f6ooLIUF$ue3BQ%L9ARxS|#Lk&sc!9(>ZQ;|N)KuPuatugrR{0}|weB+3 z47W$=v$^bq^0N4l#U=S(kR$q%Z1k31@gTeBlEGD%dn4t#*EJ>SqMl8b09WiF&tUAy zTamJEFk}2rSvo3Rhf*XCWve*N!jX;DDcn^`mu+3m!ujUPevrkdkb6T2*3}TyF3qT! z2}P9MeUv2Ic2gGEOUizrsy{|1in}kwVXaX0l?J9|TuGvrc)qQf0m&`mAOLh-a(g6= zr6C_9G$1wp?x%EjdcI;>ZHm)NSD)>h4t}fq<6B|Qly8fS1K7L+s7o-k){;^T;xtHs zhR#CW&mna=)U-G)pScI9Z(*~~GaRu$>;oqiKM;!Hdtp`S)TEr*ip)N83(ng5lzbwF zy4(fyAf?adhzCS3tp_-TJQzX_5h3#aYcqah+dV|_%A;YC&u2ZPaAbNYm|%OaNx?RG zL6TD^FG0q&KceLxrbulQS;X?+wiK7_4+lHq9wMxZut)f#>qUfof=4I?He)X0c?Ff& zRPjitz-v!(b%Gfrt9hrfw6eD~D-qL2DIK=gUR^#u3r-=ArjTeJVbn;WUY`s!-CnCT zXJzesj1pqAu}ciDGIT0=ER z#kdc)2Ut((DN4KT<)=)(Wz$D9F~vU>;$i3}n+%2P5MUqpi{{+ZlvtbBOyn@5usTRJ z4W&ID(iosBA4pQ9C=RBu&+!Z;&}Q83*HBW_6#YzyMnohH+@wEAHk*_blcQhHQaVTE z7y1wR6v#Ja`k4Mi2FiIh7UGYCGa@t;)u=Y~6_kAy&|Hlq{PglZVa^^&V`L z_*}M_l$qL78(QA8xho}5Wf_%ezPnNn<-*+K=$Y{puVH?H z5@Z_-33A`Wsz5_&FN8GM8kv(hnH<*_DKWN405{nEw5~!N&UZ%udD!<%++~whYYvn)6?N#L% zDfQ)$3TutARfbdLU*l>@8GNr$+H5_XcwQAB3gDFSO31)_)Rn1L+U>>KIR1x1Ad>Lo zUZv#N(zP_Mm!&@}kWt>NA#a1olLa0oR&CqpPQOnY)}KyoIsS!vjZ$apWrX#r_)x_` zQLlw4%nDWUUICIwcQ`rwI;G3DYF->oIqV_&tcI?yXRV1HU2X>%4ALVmtDd z-P@E9+m3NS@vWi&N%(dUo+N}~@nk}=lVU$gI(;@8%fghBk{}a;T)Xbxp)}14O#i7f zPvo`bKeBLB{yQNby*)YF8xHgOgRjk*MJd@mTc2NSPfMwscPY8H-ktz^rO8tz4VAqc z%6xBc&CS#r_@4}lWl51(UT!XS+HVBa8+sU7IO@OYYPu`%6T z^j9mn_bDCcnRKMEUQGH}&O%x5hb*jlrAH-D?B9Jr>9HNt&Ek1Q*$A5t1NncAefo)19D`(f}NDS(NMocO-su=3EAUFobJQ4(zKK!WMpAbBcd zpq`IH&talRSHr{0kZ39LjX$Qu*n%Vk4DX{M^?+~^E7sae(JAEP5W*lyKKTIiP{}SI@j^9ukZNbNc$!koWl*QkJm)gGx z?dUv70G|8sOARNR5gqp}CD3-_v@H6rkSXEYkbu-jCZqVw7T96#JBoXg{Hy-mhd91% z_>h2-_Pe0Hvj7HPT#_Ggn8&-~@t{qpCs3b5)ly_=Nx18KN|0@bEXUwgS$RsBRo@t)gcPix2irakaT z_-7CzPQ%0^xx@uq{q8S{&vrDEDB&y1=?d&mM@Uls6_jus8&YT!g)z^UO7JrONq9)g zDYj;OWq7G#qy*Ud0WdvzPjE{48>DOyDKf=X)Ifn@Ft_6VuGARgXIWS;s~-`S{R7Il zL6~K`3=HQSPRJz9H`}CiD64*E(CC94=2~}MS zs%{|!NeK_hZs|&n%N|)AuC0XhPU-Dm#3O|!{dGWJo~Mzgz!@7BpIKe$N1xJ zA-!KD-2e*7YzGveNqz&6qaUTkf+P;O+z~&d>29d#jV6DtZbb<$xo^ZT-dPG)(N2!Y zRkY28#kRY#V%{VQ`wu1Jgdwg$NqZB}BKtTW3Z8A^*qXbkVzve9tAoJ-mfSZ3_esKy zU~3a8n^LDJ{xr0Pdyynjs1~ifCO@dRmlxOF&6P6S;7N&mtE7)sUP`|Oq+|7BUy^)7 zNn4)?ky;o4?v_fSZNXr7l_ax@H24e$)!YhdtSf&=$Go*t_y2e0_ncIF8>ofzqwU*R z6*^SZ@wu{M(%7wQrmGS zC?%JfTAc6^+xG%~){l}}?+C4!dZar_S{Sb3uFZ9Epubbw>i_g->yzct-APGpn534V zd$}c_m$6dqouL+i%QOeKP_qOD<(cn$7bW&;IOsju?z$P~7H7C9@kB^GTqKsHhsohj zY!pgAP`YgSI7IX<$A?Vz8R02qBczl&4yFBY^SV#)zN->vvwhg{_M}& zs?a7N$$58hBL7ClNJS*5BQbEXVLR?rrQ&?~wf-}94w%ES4;9s&26ef!%}In)G|4f6 z)0HG!bR_`^eVifG6V<|!PqLQa_4r;m=G!^3Q=reNTmfS~rmD{Am*y5~7AF1d% z0h}rZpaQvyl`}vzG+Wr!-K-SZVyy|ZSCl;IsU|~2b%RiMb5ZAA$l$iZkeyjwb6b>_ zd&xiRKh^_~7gEF|?GR`&sAXnAM(`fl#SMkhBs&;(^j5`fTeq@kUP1N)8Bsp@I1`}U z1{nw)?QKp^%k5LLlPo71y|s*kypp4|TwiYPb=#F1+epfQdNG;j5)wAeFf^sLElZE( zVt;G3iyTCEj*@1x>G2v_u-|LTexOd~reu_OE+pdZu9+sS&lTk0{p9ZHlf!bLPM zhz~wLAcdxc5lDb_&&{IPXGazD8S+p1_u0Z$Q9vWv7|8ADeN zcVFlqwoai*zZ3LWow)-y5;xzFS?{xy-1$m`ZK5Zh|N49=fK$dU$Ux-=hSGROd`J!{ zt?p>IS7IUp29(bTs3Xt7U7)nhntBQ?hnV9K-cU@Mw-HnKh0uLhG@m5QwN^qfLk@Xk zCPeN7tQ?s;`6KdRW2;`Il+T-#Ynsry`^Zi47eoBv!W-gCAvLJBJ@~+NDVB|x+a*e; z&F07ash8Bjepuu#`LbR90b zlAv93{69VXu%Hy#=G3y_T@jo@S`dO=9i8V2)689=6xepM2<4lE56qthF3ES3ydKKK z)=TlCGtiI~y$>hQ8#Q%Y=6k_6N1NS+e! zKf^#h>(B$=pS7%T_?fkWnkblcm6Brf=?E95O&;#xr<#On?hQ3Q^{`#r+?|_i%89nP z{khU??soT4S~iLB{$5MwE`SnHa^Dx+*i-ehzq+U{)`*hhfRaTiJvbaEyPuL{^Ia1B zFs@;XTG*)b{?G~EMQpZA;TxZj_W&ix);VsS4eh^UWssCOBFOVJRBOZ=A*#`pw?Mv>~7Yi_#-OTJVNo?)_g*F0er~f zlKhb%M_fS$SG=&p*OPpdqCFk@`WExajL-}ixgHHJqzElFm)dUKUu#vbH?New_ZUSt zV4}-!QWj9j`&jTYoKcxw4qKxpr5k1IxV`Egrv%wtJ;X}_!M-J#=eQ~R@kw(rw^lCO z@-~@!f>O81)LiAR3_(fzM9^X<5MO4ty;Nf&ye$9m$Ij;Usm46Ev_>c0lav-)-Za5| z2jxR=CJKBq1j15`r!sigbLIr&QfmCT7+%}Ay&hf#CaCZZ3G6cn9omeTL=C4Ny#i^dBWbQG^ z%=2*5+f_X4Hg7E?%|z4YWs9VE;WQQZrn4z^~jy@MN+ z+I!)wOgHD(*W8Pg9-GrtQpiUElmErw$MWqh5Lp2yLm}Xh@$(YJZgT)4)QJ`6sIm-{ z@lwcu*&AG`(o8pOV`i%eDQ&jgm^{9JUHOlOu+A{KE>B6ZFNav)qhbUX7kfy)*J@h~ z^h_L93fD?*&nuKpo0rKp6#p>5hMr|0q{>%9CGrIF-;ZAn6FkZTETeYctCYse<=6V# zO92=Mx*Dq|pL8N$T1lgpky7WYp%X@|&RmhA43ai@Rnxsjsk5zzg!6Lvz^oWzQ^ac_ z0`82I&swSZ{~=)o871y@ir$vW;W0dS5t6L02kQo~s(89|CZD5-Dprdv2_C&cX|N?M zY1kmA4;RI~5#nGXs9L(%ZyXmNes9~&j?B9n#>h&1c5hNT8}j@8JCb7XGSz3jSgH8U zQ0%i%n~Td$U#>Ua2#PY-8 zPC@QnN{MZN6E3GjV^hStAp(9uh$jZyrG|++E=Mu4j%<*&ocef=l4P@WbKqWA?vqM7 zs(de09wRDM?~m4(k6}tG%tCwCy-x|W%?JwDOH`i~xv1{_PzR%UMUH%q%YWE+N3og@ zC@pf3%rNSK;sq!;(tQwgIm17g;2%B8&dMLUm}C|%H_tg`;O9M>pVpBO~ePfJQ11_z6%KmHO+-c z(^d&I#p~g}r^s!4#1Y4H7cj~CeXt^3vd2LU zH>IM$A41?Agr>@HgXP$oK?+7lvHy{hc(F-h4&AHFeUdR06(4o}7&ghp%ri7nD0?a{Q@J{N`vHb4O6t!*A2a0bA1xLD{gAU`F84$Z#v*JP2BGsy@@pvB zAWFgx0O}cTY3`A%!^KIzJs=i}5Bjv-Ztetq`JX|4xR57ndGy02@iIy9`-{?G>!w8X8u&0$gr}6hLJDRt7A$3r zQVAxZf4cuuGK@VURy+;;L6tv^(3J2uNPwf4t`_OF9pNzFR#6f!3rQCW_je`ja>1xJ z75c78CQ^$22Snc`5{gyj@9+!7n-L&Wn>13ZfBVqD7WYr3xNcI6??ejUpxF=laZ>QV zAovK+mn7rYwofIu?}VxV|5gIWi~>{0C@}p%b5PKKAP9lpWH(WU%&G)RWk>P9N=9#= zEp?OSgi&Kjc1Rba*D`$tHe&1IhDBtO{}1E{sp`ONdG2;_p$?Mc$Jt6d)27DJ3}Ixd z&~Fb~O1_4$dp|d6FWEAf7Xxhpx472bHI=&Ip6dFySq_~dt_2Z2*Vm4_wi05SxRMps zw@>n<*Vp6-_jRBI5nbFI+MKVAuWvth=)&5dcXqF&8mjfyS}|EV*w2Zp5-OtMM@IBW`u(TC!<j-(2~R%mVmD4#gKKjxy}3cURnD zO67r$vH(l&!@+)+xcZItFg{fo|jqd78G z1`)L#18uo&&+WcsN+)L8b=l}OH?l>i3 zlc`ZMiLxc2}j>y6Ac zWzXb<{gRVK^op_{WSkLDP|h782YYp5e@N_gWl@UIxjQL(aTyF#Wqvl#;F0Uj;MyQq zJqFgyqSStHcToat8L@d--varMazofNQQC=+b}*YkD&fq!n$mE_{x$;8$g>eVh9DpgIBD)Wi_YG!_c)9?k5ixK*9Jh?p>v)!aVV-Glx;tHI z-IpPgJrUlQiQ3M9Hl#){RxXpA{OHb9LTuxv5P1)1Bs&Xa*k;TRXfFF$ccjWfW69k^ zv0rL>WdU_xvIrAKDm)tsj}SKOo1`T?_qHTX;j5bXd)e=)x79lPZB`nv)-^7NuqfZ{{ z*etJ(G?tP7?b8{>lC5(mX{*xP-Uq#kDWhBc&0vsJp@H9H8{3&~@?>)6a|-o>vCZjI z#8z6fZoATbu}L@md|42_sIJDtVal?B!0VSOaNmznQeq*M!BFE}GZimuh3vu+)5|Jrl1R~(6@ZGWM$KZmLdDsm7HAQerE<5fHtO9^e#mDTL&V zj>XPGYYv+N=fq!NYqch}le=6gu-RS_?!-`dHcb0f6x7my7MRAF z9fzgevu;``kVix3tk`W3K=RFi56zwo-|gbd`-&g4igJ^Qk~sM}fuN*qg7#1W+}qgG ztnHHjNy+lYtWe7(Fk+0$lr*R4ZEKpx^W2rl)G!YXXzKKYi{xZ1x&=jSb12IW%m9vT zEwEL)A@xw@N_zVhivItX8r+26gVj9N=Slz+Oy^SiCd>s*#gE{-2Sf!M3mNnG#o2reUj*c$fDva4r~v1 z1l8siyPXBMs?=Q~zu14VEkJvTg-=Tesj>@|y-LT(>4fH*+oR;!PL3vFTrVqmQbAqM zKs|e*=Xm+@`RK$Drcs6{GUe9Xni6KSUGv~xUH+pgKFVB&Ow3+*M=}Sr!~>Pk^VGOF zNUYU|y-s(P(r3$D%%XaA*$+x+DC^#kg(=)07pd19etWa-?xR%nPDM+@6y+yI5?s>W z7qoX2TG&^(Gc0y>I^*o>(jc*_g1etmba`yc&Y2rG$`SNVZDn1~MJ?CbZhqs*8yO_k z_`YrQhtc~kl2Y#dAs6%;dso#g#o2 zFQE(Z(vg7V9;7tYO)XYH_u>klmUB|;gQ3-1=d(^;MJ;y|nyfi+A|ImU*=*uICp6{) zICVS}I*_iD$v;3=AEG?&VM>5)yO&75S@1Gdv4U1&@XTEM#Gdj1lhf z7?%(ORZ;_%8f$V}YgcwqAEOl6q8&MC-y*qBD#)ntu}}yrpwO=|S8^=*!eft9@-8&J zs{(HMDAH`y_ju@ov6foaAvE*^rRFS?nljVchy!dx~PWxfGdmWH~tUJr#UR$>^~Ri3G>$ zK~gj5X-dqj=_Tk@$2W=oP%TAyV#6_y4lwGui0K^u+}l{( z?Vh7F?aNfNFB?=Kqps&d*Ab$N=Sgz6R;@PXWv8Lzo~M-AJfJM3e|gytlIo+8gMyw9 zLD`c-G&nFNFE!@f3zQaHJ{ipyuY(T?ni5_J2?tA?AW@+!J=eJxDN@_cWj=tJppoar z;6ZFo3`E(CTCGV%Blr?B0m)JrccovVn2kw%5ixw-YIsU{DWvp`4TN;~mnlX6KVk!( ziQ--kaVJPS&1A2XnP}{l_b2zh#O4y4Ne+sHguYiOiI>PP_xC5hAYl3|NX1~@OI3Yik#2nn!(WksaW&HVAkS{9Ye?*?-|_U#iY-=j!vhH9CC4mh&C7i_S-XfMj2_t>3$cs z{!!Jkiue$Br!Im3)OWVI%rgb!*LEG^0sw-_CD_X(xz zLeo1l=L+W8DD;yMipe&gjern|FL(bbCCWD0S7#&;nEamxKO)LL!);0GFtulDlgqN7 zve1@%8}XW39Z4|lxX&mdwuo{T)xWvy2PHI=^;yWemB`{n;Qm5!@5rvorM90_Vr;EK zEH8u)IbhO%o~@FzEOT}&x^l;TK?$*0XgO4`Cih8^hq}H9T~!fL)~r#IjKeF0Si|Tl z3Ad`EHP8W5U!Pk`Z#=;yQSZt{nzFozDf<?EQU5sjy|!2OKY<07=sCf)oyY zYLiZRQ`hG`NT*$GExPY1dYgTbB6(& z(H|&Ty}kMbv!cXM4<_pSA@pq&eZ5vvx#+{&X4&QRM@s2sg3;duGB2kkl$88qNJebx zijHjMoijN$3QrbhE}U5T^CwE0%?9#l{$f;^imaj~K+xk@O02hL?PT z-EWi>+r*cJ^kT9fXbuYcEd;@>(5u-@x|1(og`4^~yewL1ffvH zOY%>{XYQc0^A&4s;ir_q_nq{yA0MS&Luf;7K{*P83Ot)-m6&D0k`A^=7uO{VbFLxb zo{qbwQfb?uP^m!i;Mf!Mw6Q z9Mp6jXo5EwoRP8{?4%g>N_Vv$|H@rgiMv#Oxxa0ghxZEeA7$^%%QI5y^&l12Y$3H` z!ke(m^DwuWx-r|HkdygHFm=~giswy=3oKrA;nUvS)P69uBNr$+59oMq&mE%V_1+6f zGwrI1P9?}BzX8bMM9;QlOw6=b*4+&i=l(d+2^x8B1fC;=hbG1@C;i%ofBnIYsOlzAg&tmbb)!?hr0$OPJUdO;Hn^!$c)9#?{~lg|FYhlE zq*Qw|sAWZfmh2m0Yy9R)&{-xy`H%;;#v>lNZUHXXUTLS4eHzK1zop{q?dKSJq=zN# ztw0MKETL^l@fis=we|@2trd6gRkuHP2AcwI0|D?crRT7Eh3`SG7P{zdl?Iy~m^lw$ zhD!EB!G5H$bCgW3%JRMx*U@C9KTK(`MJG8-d}J&Tod#>#ezZd$&76DYS(J6}}%N>a%K2syz~F(R0&d2VtZfr8M0uexu$w z!ugS+Fv)o|IQ^zJtFosqUYIvFDDvK2m(Ejp#dn2G5y$Y0OBw!99;hbXv=sP1R&n=^ zs;9%IkglzONqjpH`!X^T8y4xcxPip0eUDT8y%#ZlckV{{UciSuG6mco0+6to44cHE zOjnrj9*$R9Y@0zGI^`=&*}-SeMtygHzPpOP)ND-)d%`f;iqNRc!OL=9v?XhIvp&<1 z#E6bNLCI~H`fN%Q8;>QfZLE}iN65xxtOHX+tL+tcCne1mY$KEx#s~UAz$N*eL5`gw zeXDnvhVP=-d-rMfDPnncKJdD54@~+KL64w60*kd_#FJ3ddrwoecG{97F8++%!shS) zbu}f%Xp;lkD=~0T*GA}q9hD2j$2zp))6ICR_O42hEy$ffdQr&}BK?YhYVHO#2yzz; z99%U!FImF0o_x0SNlMnG@|#zi@l?i0ohMUg%wNU7otF4%Z5s|mNPdM|N8v$O$0$g5 ziqdIYUrX|2d-G7;-JuToS;6bk$*EXeal+S~s$^YaYQE@7#mY36d)P=weWyVm9F+Vl z?45+Pciorn(hg{8S?oJGArUvzD-I-ZzqAXb9Ht@fF=6?ngZ4q=1n=< zRWM%NX2owyQjT!G6{?`AVGtT%^XN59Je8KL_doRqXxi?!;s5;`3cpHcj^V2&GNg3NoNpfManh6{Ma@&<8n;D}Ce5>dW zt63>{7=qz8`>1g7Hu5-bKuBnX+T%@@uDK~D1BDOgKg!4_n2O2KK zric-t=w5I=Q89C-SbUNfF)E+j*NuVNPvqn4n|E%lZ><3nyr@%4^x1wMIk-I>*{%tI-qMitC@R zxO)4X)m#}&GVTH+4CL|k^BXSn59-6C!&B}8#oW7}RWp}hQ^AE$fGJ2?cJq$0!E@_V z+b85ofk}6fBEN_Hqkf%9Hk;!8qXzjFVFn!=u}Vw_fNjQEZkMDkg+$ zXWnIkMyg9eg%sY1pSV z9rcMZH>X&7&;OxG%U}}kIrqhGF2ut=Qu!l(n?@Pwq*u<7e zys~A*+uOFTeq|{nIosew`lWp1ouk8pV_Sym=Zwi0pWHbyF}7`BYG~4}DE8jzEP=hS zN>!m#$dwS1PCC0LhNlKL?-+7Uk?-%MLqPI%z?TjVOoChFyRIs_{T&<;k8EAAg((iN zb}(yx>`|1P4BfbFJZ3@3yBEA+)$mim*u==dlv`7by^~0)yVF(=N3L~ng*R9q85-F< zG*O=%zG%o@rPwS@s@JFt9_j84I(UVdo;y5Q-#)x;d)j&3eH3|budrX=E#OnkeIW*h zwul+rJ|L|;d9J&k;y&H*V)Yj%7>Vu=B82#bXkut;=fr4z>%fl5A@=}9W@+W=c01OL z^ma!Uk9-dVAFTS6Z***Gcw~IX(8!Q%+HG+UQpCL-&d|c`;J5{M6DCij&O=kfgP|dI ztmGe#4!MUYW=l6-mJ+@h+b07@wugc(9WudBa1YxLuF^s3-41d+99&59ktSG`DpjLH zLo(reBlZ!BP#z7oK+cZLBa-ux;M5b}7WXK{XX-yb2Ano0rkF7CZ6VvE!4@VySpo8< z@?#XGWmQwFse&ZyW5F5?tAWjv?s1A~e{2!KA^hV3A8nDHqdO;M6g)vO?2j!Hph)sW zkYGDj`UY2KnSYXX**!^7S_WSAvYdscgeOBn+Et?U;GUw0_qVG=JhD9%Y}fZ+7#&I6 z;|-!Z_E>$%{{J5Rf?V1?ku^AxA$ix&DPgBvL>$)6AM z!wcgB=6X6tUZ6CbBmcgiM^(^}9ez1@N_kCIhXS)eE3xemR(9K+D^fuTW%` z_($1b@|G%DUI~_HZ|oeEu#WU;xFWAoWR`hP+jAK_(!CmVp*isa2SzW@DVD$^BYz$CYeiXzSqUlzW{bw0z6bCJlIGdOeu(M%>iI&LQ^(MQ56sO6^v_k?oCO zOI_(`lwef6N%2{XjLGJp+W#-J}g0Hv8hxc`F1!-K&Iin49c1~@*+o_YG z=-bTdOQ9+6?ZOb}i5(J+M-V0WXYWwdmKTnAerosS@W}U0@P!w?MG`FQlg-s( zoRxl;qO-hkpHrE53t2d_y*vGOgRGXw5IA%q7U=e?R!cO7B|)t=n-QP_!0nrlfg2 z7@0l@reKO@x>(qU7)0LehZO07_TChl5bH#WY^h!Own3iu52>OX8BTvxCEK}9|!+ovUHBGZ;h7) z)<>IrcS%kA^SX^il(TT3P$DeG4JW4b+gHI;$tP1KlGD+I=DGv`hWrE~(dL~~L+(@i zp`_RxRq#~uX($O1A9lkn{`8|vq^D2Han0sjchP-DY1yxcPc=Tpd=_FtU}Q30Tvy-P zi1X_3)X<3goD#C#UygHy%lp(4xyJKD?haZr3gF{N4tFwUiu;kGlgGXTx3iwj15k)0{V_<76trYl zHS{yt&S^UgAepV@>;6RXj~V!rt1~h(;xH-WprW5b(Q#gph=2sF=JMlm8*3^uk&#Oh zf-3H3O4#}PDXc#g_5B?B!l1`5C3m&?Qeo2df1wmvCc3hwDg&p6UqZtzd>c*q!{>4) za8YXA*5xF*`;`)48GHH3u7FA2U#H)Fa=lZZKzi}6hFcz6@x`&+ZxnU!M9W}F=elVb zD#?Ef^5A`YD|)2q=9}mnvhbedey6B689G9VHJt+`^Y6iYsBdm@0wu>LS?b}Mc@yFf zir!*ZtI4MVnj-!P5l49uaTEwmpSsOisX!^D4H zAL!s9q@>P9clj?$j%7G>tJXjTP8olNj9`6u`^0w&IX{c}0_7n(?*EhuOL9ty;Zp#n zg136BFgwjO68_)YE?z(Qt^y?Gbnhd*3eKmv zB)=ZWgY|`X??Y0Pt$DfGx8ts_s4Z<>)v2<;QQ@{-%AlMUZdE`j?1POOTMQ-sTDrfKnmee-_b?}P^k#iejfj3s17QZ;3 zYny_R=_X*x?|}t7bY%13q`RqNJfQBC;*$JkAP*a~-gw!$0_WDjYH~=&4Wmz3iJSJ`Z3?>KKR$Zz8_9QHevlW0eBSo2Xhi zq{ji1jJE@0++ZDAYpuHD6xT_Hp`BZm#g%O(!HC-fKG>6(NoQo!WJby{N&WMNTy>AB z*16*qqa}MEzZvh}!Dy?(=C`~9WP|~q_*`3>i++3R1VwLImpU;3oOW^zOXfR*IfT~Y zu7kV)xqKlS^mkI^mf5CaHzSKn_B(?;n75&cVw>MZ(OLqTrA;32NOvOW@=GIJofu=O zDN@UKtsF-wF3C57Jebv^-KA-{S!t>bug%?6@mdzEWsi`)-W(zs@0Nbu_-+SgXC>S= z;?E(Sq-ZVus^ZmVV99+lxWm9oBIRfkJjld_O&fQLQebh^dc?{VJeAxXO2XLUM2b^< z4XF?1PE`slft<=$PE-<~2I3G-37s2zWE0JmMG4i*?Aeyf%uiSRmSv>0pBJDh;tYs5 z(k~<7a*+C@R3unz`UhX`!28T+Dj_3=S+(e9^`;(mVJbKC=r%r zq%@A7Vv_c3&}R1jIl10bQCeKu62mmYk?me7n|Pfv@kMiglVY=&!5z5`Bk^vsXe1i| zS(sPkGSE7%X7Lrq-DbsRnOBzl{iP{k4v~z5U<^A2-pD@}7iVu#Y?hsZl9mJ(d4|Aq zRMrFv)`=fHFuh|aaI2!;Ut2Uz52Ym3v<;f>P%)muqUi${jNiNMO5CoiX=IgfQR6T) z248ceDOYXIVx!)jql8$xx?C(Lzn<+5gd^9v;0jCXpcJ%69)$Gwcud;uP@I+}btb^1 zq(xkkkANJ>Vs%MLo~d`bOKwy#+C1u9c1;3CnlaGC5f(0uuZPr@aYZJNecen68ROdd z^y`geAxU{2DARAY+?;n4ifq5XnShaI5;RBq-psX8qOKt zvXp|7c0y8U?3hq2omURNy7QF;%UbOxLSIKDZSNc^S$Bc8Xc@+De}SU5bmPizkHsnA zlKeuD2SZ_aS?*t0o@vH$%TyS5ky2psLG<9Qz^00ep(6Oa!%HYqgc)|EG2faA#-+PN zX|M$ML-nJy@k^1Z;8G|E;kjtf4lj?xS`z!xU8dMAuYbARN={M9TnBT78yJ=Y=Pp+Q zEU%!{R?E1U5t}j^kP&*}u4ZGml!Nd&O=FwS!D;7dCBV`P_Xe2s1r%{fK9iEGt(7rx z@n;peB{p0%5R1TMZ-O0rTcO9)r8YlG97?u_{C^ffhB>8RtmhQ8(B8Y+-Y7P{Y-Ddef)Tmo7^jk(((;UqQ}G|-<9AC6Ku{M7h?&N{;E_A z%I~jPCfJ@HIgzQL0|jB4D=hbnCax+G!-n>*TtGHY!TV1#6ktzc8$V1iSM3i!Y6hpwNO0G<9^nRqi9VIW0g4zL=xT? zgyD6UhX~yL6t!hWD=shP;8bycs0ijo>=|&B!;kI(N`S?@sOWDgDw!V$<}lMlhk7Kq z=nqn?rWP-E(E}nG9}LD2W{KYwlX%#4e2605WEkNUUo`vgOgionir+G;^jJ(X&{Xh9Co}j2L9X*(a=~vdEX((N%U_0!E@IgDARXIM5>(rO5yN;R0E))>hq96se_w^Lday16Sjc z|Eb^)2iLaA)e-5IxOHmrnn@3ar)J>>(aKx_B0Z&UZU77hJWv6DI$~qrQnaQ z4o>9^bhd;omzODK%NQ;>m_t1By}ac6A}qYv?%;gRD-`Pie%}qS?i@{Z4`vgQXz8Z|d#LdU9q#!x&V_kKxQPdXOqjvy{(A4l+Xb5qC$rf61Ls&1| z>lCj%_I04ktd10te6LUWVk>WHIrj#|XW3_{XkvjQ*BikVdT^4;fYWX6O^VL4Y1kt@ z0+{4{GdRQ27r&pJF~cq1?k$Q`9{aXw#dnO5xQPt@@}w% z_nLe^IngEep}t3PS(d*Z-_C=Q^}Q);>`k&x_%?l?VwK1J?M)GqobOLL{Q=5>&iU=u z?6~yc4=7Gca&zg#9|6huK`@5CL$fM5*Z(2KX>mg;Z7QOY_`@I$)8-XL& zC&3jnF+*it1UuZP6q&_}sF)6cN48IcEjRy$?(N)X6rnsG*oaBina_eVgh-RTr7co) zGE}FK0+><->T`r|zGsGn4m%$n0v$?+?T614ftd@zS59`nxdA|zY z;3&j-I^({%uPJKFJW|osGqB|TddeLRGKhaN(^!=eC>ciX8;aZVwUPRrIha~RCG|H! zoym~m;`A*=YMDq%@_N+5^lh-ky$~PIJipc48|qp3dBuH4(OSB72pjDYq|^zPcx&6O zD|CM6?`BlQER3i#*j(;=N`=K{uT1dBK~uu_AtCq;g)od?YTOT$2Fv=9AK>M{RPaM6 z2s2)4mkc;LeLNudGD`1jJNF}{!4jU=LA)w(>i98q!53B*+GrsW zK@Omue3D;QP`Bh)ihYM+k*#d<5(3KkHROb4KE$IWTrYX}5-|UbQXr3gm-+H&6d}p^ zTX2RZXA^|Yk>BkHW#yOlkfi*5O6g11VEe+SLH|KfTGr5F8gvemoPPvoh@~dMR`(~x zXK|>?P}d|++P%@WdiBxSY^Pe;;&GlHgsh;iHqs}PtjXukDeR4 z0hi2wOPS>o4Z-~aR;xF=BluUlVU5z;=Oz!UAihj~CV9R1neR!zsKTsA%aq#&> zz4xg9t8`dez0})_fF%4M2!nU){b`J0dejHWxXqr9mVerJvMTYYGmvDxh9Fnj2-5b$ zTii7j_tjt{cwj2H78LL(gG3eAR;Sv#^SeRURuU|$#f(J%1#6F_CZ!fz49RN(O1TcC zWZVLIL*uSJhqS2cDhZb0ZhpD+jz)?|&g+5msO$&`%US6D^6z6J`t_B7aYGmA(fvzF zsOey63a=y|aGt;=bGX9N9irq|LWLDEfS59wU{l2npd!4DsDeRhcSFT4kA25O1v@dx zdLyugWi4cG;b82I72jzFzOt;XOy0^(z!PFhvVS-*C*gFt-feeX@=WA}pu4GJ++<+X zo01xoU-4$34n|Sjf`&J+++A@uSFDzKreaq+LXz_q;0#@=n5Y?&|8A+sEpA!S^R7Ur zj$1)Th-k@d9*Y#XTPteI($=??{c2zS>n7#(ihay5GZ_~m za!}Fjp$LX(+R>2;bG%X@k9}ugaZ;&a=q@I6tg8TSTQZjH}dB$1eV-)26tHT{4C}(f9|3vEh}Ehj0i09 zoCuyUNuXhe)|xYN(d%4m&D9i{#iY&~S9w4(ZUkdkbiDNyV%t&`u(jHf3%IY6Vn=sX z)RuWTPhEjb4R?cvkT#fkvp$Io3A*kiCBS4}`!h6|#V0*elK_+dWblV*XyR7vT<%C& zp5`n*aHl8%mKnOjx5(m>|L))qc1~OxWPf;NeGs*##LhWYv0I$?Uh6{^oDxohgkWNa zBNv;+h3+giIt%K=w9;~}VStyOy(q`0oHHONjP=ZA3!^(nh9-sw-I+>+<#iN-L`7VZ zp9S*J9ch%v94C1PF)DozMQ`bj?eg4sOr8la`OgM_Sg^ypU?q%uDq_nVP}=wrkc9UF zVF*FvEbbYwP{>;lJ#ci=XE6==WbP5@Okgy37LlEKSkj;wRVyP5fcova_gCGq4 zlMmpfk!iO@aawkJD#C&(DtU)e-XvltLtmo(ZtH&V_6XGlRPt^EZwOn7^IQ*?WuNc1 zD^7XrYb})7D;Z2O4ukP%!DAJc3r2RJbmK&GEWgS(Jk+#U=T9AP-$F1P4Qae?qZZ_A^UEgSp`TB*I7q!h?w-|0oQy~ZT%#VKvFpihm-rA$K;?h-|7 znZXN#OQVwbQV<85F)>h+F~53MM^O+AN8&$ILiDCw>QT{LNZ z(RQCu0O#L1MQbsm^NxHb^9_jP?0_>gZul4e@=~efhq+-@vC3oLxuJ|TgGt^lc!T3Y zLnPT7jrGCZ9z}0)Tnei|6*`6Ng^;ik$LRx!lss!9A4yoUmohnL~*r!IbIO zLu)fle_Mht2i53Gox=wyYD+R*StAso$^T&RhgBtiz#(j2JwyqxSVYCms}f}LKQ#UR z9I&B3_|nS{Q}hSq@1(dSe>liv5XDCr>(X6A#7KN_nfE1<_Xs7y63MIBaVdaP$0MO5 zgsPFd63*m5N)cNOriM;~@ld3BG-$&59cR37(9u0cQCY@&Vb?CZ9hkAw9t+YK9>>i! zX^i@Diq$f+<33|03OrNOei<{Q2TI<-6%T0$(r z8;b)gD@{3M@ifJKhGAMSF%<(Ext^YK`SU~3hku6RvY4ehog#xrwr7GZyxyc*$u1|! z(Bc6+OHo?l%ssQ_A~3n14Q>@=pBiJ3{W*$#zoyHiXD7HMe=f*_$rzj;xg&FTcg3&V z?sO5IR~v+E&fnR#5YAG=PSXPizbLuk8FPTDn)7OWqN}= zuD21AoUaCF=w)JWAg>R3AU=E(qHwQK)E4h!rbmWg9-cB@3mIWQIUIKJ@o;}VQ7l5` zUZ;dux_jw4ngTRMydENgaY93IQi{N=x;H3lOY;|&>l`F0-w4Xk%?4v3R`EalwXAPa zq^8-dstRiaCGDF*8&hrkHHG7{Z|mNo7%dB9X}}d|qY|I5z z^1d6qxd=*#p7^Ww-lLf1vG44dx3OYWCdDN0d%+uAHeagH(ekce%I7AG5PTU6+v1Oa6!c)rl4qa;|u24xLW22Ks1g@!N@#1P&@6V+d16z_9Ng2fxCh~i~& z$^Ln;N86CMoBIZkwdD(n+OkL9yE+dX4l;ic%yIgWY(~UY#Z3E>;xtV^ej_D)gZ)G9L%Y8*roo49mC3{)GBF|UB6C69wBP}Uei?Qmp`DlHK1@jPlrb(bOfo6((7~4b~8j2sVkI zF5Gt%qovc7nj{{MWZzB6WS+z|WO5?7>At7P`+=gjWb0JXml06Q51}P&tQ1!4)BMgBj>`T>sj*}w_FuRYe2V!o#DrNY z32Y2cP7P1(7;-;R5-iqXL4rml@lQb$+1xngKf;KDxaknsT!u?5+S~_c|Wb-k=k?zl+3qvEGfb+p6_ZP)x*$~k2 z+AJXX{+fQh_}9a@(ooJgD?&>!se&*dlJRd~EQD#d3=IyC4D4`!SF{$xtnez6d1q=Y z;*$IyAP;kaOw-uXa{p9}mbsvl&1Q>0r1%#o!mKJ|in%CZN&UCtvUp@+pjIZLpz2{qjWn&OsnuEbSO$DC2$N5f$gi0< zgMzST`t8(-ru@ESh}>K;Ti!v*erkl{_q_$!xRH!Jh~#=DbMPbgc*R7 zbJAHOJTt9r-n12;RXkxlgWUH1O7}! ze5(9?zmC??ZhX#}J_|Hq^(^G{`CP$!C`!u&o?kjjarrgR27ib=`HnTvLBFoAx_c_# z{oH&Y9{KJCzR-=tZ;o{#_PR}q?d*g4H!R9Rpwed=$jl&;ZvcGZ`{9nZbaQ31Vzhj} zX+cQYa(Lt$1YejG*s3&G zhR%{t%}&2~6*zTl%d~+MUG^$ugVN{qY*+l2HYiJu@b(bCUIZrhaLS!IRTDNS&r#f# zgZ%OOO}7)@mpR9zVI#691w4CU8D#thGoyplI)$27lSr9aR@Rk zHrM3Vp~3j0yF^i2R^pielg^z*Tz=cV+N_I zGM?P!iqZBptBYbrToN}x9J-Qp?|9@N`-{_x*W$e8Y^xj`>1IF|Uul|RI^J%HVCQBP zr|G-)$TE$%ByWN|#0+CrL>Q`biq`T{b=WQoNWOXS<>#gltO%)k3ySuD=B5lV>06)= z!GK_G)a7`S%-E7#dxfI51m}7laPqJu-VNd-4#J9*Op0lIa?;;`G3geS28*v&97@#$ zRI>y%p&5K`zt7_ir}>tZ1k3DIbW{~8dE4NPrYFpb+=nl#QSdgc!Mhg zN!BaD8V&linxJ!v(Bc>7%>it-$b2O6q&?*7fGbQ|$ps)`M6D`1%ZSR;uFh4BmLL1KvQuA6CMze&nux-~_+?V$cEe3_Y3f=vbMP!KGx zY*ni;oMDc{vnN+6DI*3cJu6#j1`4`21RX5s!41bkaUaEfih(<~P)M&rMhhwK3yRRI zcv?{Y7H0+Tr}a95wq%wv-D!5|GU5?MgF8|ER3?X-jX_vetPklIrbi!2WXOIUFe87;Z(>0ye> z5?`qPVuDD*hl4Oof67;=cb=l z-}$OVh5H0>uSbH3Kn5#byDO!Zdm{bIWKoMHSj``G{B%Hch5aP3x$F1^ZfaU6fObz- zSW8@vg%y=Hm;N}~?Zqv~u&plu9Esh$4$SiH#49mz!xj3FgH!G;+9gkWMVOin6 z1>9qgKs*sv_wYaXKU%Bkk_;#LaXxDpo|J^>q!JVH6Rq;vbEvci(|E_7}QVX@#-uz+K3>0sSzyHukif!wDR z+mi0h1Swioz@Gt_Q?9%0W7mWPVXjDg2_MpKG8OHL|R{*zqOU!5=x1BBVRq z4$@v^Wr5`*k4h4HRRMnmV0JBjj7_9qzpA*F!6T<($BM%I8kp?AWx%A-a_GK32C#6T zgrWey0pQU`pc99w8x7>@Hs5b5xW$?1Tw#&8*zqmc!7m%rXMav4&7KGAYwp_$ZyCEX zv*(1MAio17H}J5ThjxK*eGOadzN^U7M;N+S{yi>AT5R|pY&e-@qgqq6iFn^~vi8$` zUzsy!FsG=$(N``eiFH4KbsRlOYvdry{ZN@=iPsC;BWnuuM}S`W2tIyzVL-{pA0HBI zWEumf4?|O6KLLyoCvzCwrw(4Q)%B{P-wtSLR={R}*A<_H>)^`$Kh*h%Gnu80<& zf`B2O2`EKj{sK&Ppvc&xe@7Q}|58Ee=cWUQ?%G;ZxW59I-)-pqvs?@IYX!ADsfMN$ zh4>o~uR@PN_keZhyQ?(6`mJJF#$*+MMq+~b9WeYtIolcgarb-0vviEy3~H~ou8?ExKVVyN8E9^gkee4nNQ<4kfifNow>;D>#HTbi# zVLSbW%_g&%n5$S{jQIl<*e{6q z-Ca=;Ekk<27D4C998Adt+?Le z5c{OuRTX=ift}}malnAx#*PuC5HQ_~8-lD-ss^HR9)|JUh)5usdvR zKzCNq>eD`VO@+5SKh*(HW)^Guaafh3Ef!o07NkNPK0wP|Td@x##9>7tUI#>WvC0`! z&-QD^*HvhXcN^{IgR+=#J($4ZkFSQK^9z>xA&-B31-C>Y`FZ^0k-tK|0mxUSX3Qbk z!s6b&?uLqZJ3}ka4e+2Qpc?_i({Q|gdar!*@sSF4X9J8nrP?Z!loaAoAaYNVL~1;) zxT6)FaWnsN0xd0OoCGtj=FRXcHvanF8!PNNh8K{tP?NmA_hfKVV^?BJ{Y?~)evUhK z#j5gzHw8I(&Nf$K(lmmqWpAdaw>MBz*&cG&zJ+@^!QC7<{;p9jFL|@A4-jsl(3W<- zlwFI%%uQ>H9k+xX$N3M7_O+wu@2Jqtz}-q&Vu=njEv!IXOu02o;V*#1!F)a^{ zZppVH5iuVRnJGa5-UdJp27S_;&T7N`bEvtTP)N&gnUgt>6@_^!m^bq8n}ZU+36UaT z>d*cX&C?XwGFs|sbFQ*ja5^mDU=)c>8cUnKwf%03;#%?&sb-!K6Vw?%o#-DnOgq$; zEsCJ1SJ2sCXDWJ&{?cL0Obak#*IBSDBrfQVYATPXx3IH!VSjy<&d@ts*<$ggd811^ zBQ5-Mz~?k(ViVzz_S@W6u`NwKo#jgl3h{OzhWLRiOZ^?z?)HjDKR12vBTG}0r>Ncm zP;P1D11Sim;^5^~cSpsvOtcEZV9}Jvyc38V2_pXEtUae>+?^HH5-RN_k=Ti7Nuk~a z)DSBm%h10#$}b>YK1IjjZdGtgA}X&<`7B0OUo0uX5>5oAr+(?9)7+#or)K! zfY?)pJ>1aKi7_{&EU0&|M+bpW=cX;}ls}(VKucJj?pX;nVQm8|~N()Dkgfg`9gMiztpAx*f_CORFpJFBx&MV<+t3 z-Y;3z+0w3Vd8X9r?kLsfDsGpu!V@i4;w*w7f@w5-=j4D-INWM!KUyf_d%@rU(xsqk*9 zF*ixaXzx*6i@T%3&)%B&9!j9&XDlhuc|iGbsiu`iIiA+?62`(9SPFP!Xhu@7ePFNd zU60?2;^)$Cui{yzD>)lcyqJ*ofy8sO@IAx)jh?kct9fp}f?DQg1>ZESEEX)n0&c=m z-%#tX>|5LKE>LJo&|FyGz?uTR5KwMRh+X|jGOG^NTy9BGEz{uikfIcYxeO);Y2rFC z?Ostl%fMOaDo9Xp1K{|*M*DC4i0xJtajT)5j@W?XMTL41sQhA)m&On#x5YVyrJtL6 zhivXpsS0-pF0#^8bU-s~KfPa5z_SfN^(BLpP}V`=94*i8Xo&-h9lY$}4k(~y=qsM( zrL@I@i(!EzjQp7s-HJcS;hA^}eyDVDAMi zyI<)tbp3i*TDrI5TAsMD<3zH8z7NoxtV~9K?fnDii?)35cVA_KWu`MS_)E!)DffdZ zoXCh~xC{M*?*58y@f?LSS`rlA1Hj{tjRaS;=M8m$4^&Kxcg&>Bl8OR-5TNX? zTRv@07CaIZ;v+yzhwr6fjSALRPN$VjEZ9C$ku5%~@R`%vV#K3h1jiim)=NV=q2;#7 z2V*YzXk~*X8#%&;gtVCO7?^O1A1;tyqF{&8SD4e~SABA5c6t5WpPl|@1s$E@p*zC+v_F1j->G}nX?s5XL)?&*vasI*_KD;KqFQYZ zhW!YH>AL@k=<}`0l$ODBp~9yXh50Tp(=#p(!`-_T($d=sn?7p_^gV!v z<(z1Fk6J*vw@!D-yjOuOt~>AZS2EJVe;@d~ZXNcURSx#&Q7Xd)B(!S!er1GZ21MnT zlov>J1pm9MwZ)1LzzQBfe0~=TjMYwM)_qX1Em`}V6tCzB??d3RYmJWi3kzxP!wPxm zE=NlW^&_B$S_lsGXdAV2A5}ohGY;~1hCokf9|JAZoXhPq-NzO1aGNt}3iK0z@{0`x zNYvNDnDt48-D>bW74s%`iX+^e#(1ras))n|?0Otvfl(SZs zd;6mE20p9sqsJ4zi=(hmHmNKId@eQskpkbo9gpnp^U45A4@R_5c>8v&Ehc;cCa@oo z55TFV>2}!K;l8M>u#6jpUqOkB8DD}K>`21gE~Ih3tl;!>(@93IC*|x2s|xiipz>mL zaH9M_+*)gNG1!v(sxrXx^aWltBQAD)4R&zv^I;GEpTCoyy!h7@-;y29&Ox-SkiP*k zcL5IFxB?we!K(}Q-NtkAy&db;<+F1_HOZu^MRE7P!m`&vZSV>1Y>3QqDC4YO$?-kqf*!%j4ePlVJg8l>0yey%6 z1aE%%qk>z)ifpUT)fOB61RHoCzZv3zrX;F+5OCf63hOc zYQ?>s;hX2oOIS@EI={$WQxPqFMn||xQ>fQUKI1Y< zp0Q%!uC0i+XIvh*jo35bkeZ+;wCjMzF=kYy#%|%d3TPSXM^veKQK4QhrgE~zpA$qE z^|V}GJ8QMn`a7D@jzY*Z6 z;nwfNF`z=E2l)RX76imTamy-s%T`Im@cPs8_#UCAGjXY*bYYY4s zz*A{Sd?k0RB3ruDCSP8N$AQSJciu7kjn(dW1+GV2OtFyCl zrzooBs}?+FN?0EDHsEuA_M52rStk_L(w~bK#)Wh$Na+Gt3gtt6{AmhEKR0beg}peE z74+#qr%DcRWz81Fw6vfRUXmn*cLsRr!0ycWnEf*q_pk!HSXba@0iK?B!%OX4TrKF1_2uTx>>(A`$SEzNn<8OkCo?AyicsH~{d=u|tj zwdVGUZE;kY2iK|sz5~D~`Ozx1jzBMn?nUI)1n%JOj>?XPp{BGRr-n|rsQW)s-Y?BIa2@tXg{9=GuQ-(F%>`_oJN6z|6AE#0kP8`HW7LT58T?NWwLjyKk**mvxxrY0znhI(0ALPg9ao5{ zbRIz5n*DNRxTBI+EnG`Mw^|%0&4=P%lob_n8|35tBhH2GuPaD;`kX0}{507g(#>og zWkb_oL!L7m1reL(U=w#QY+j+12~IU{tl~_5w?i3XaVe=1@{FWlcLJL`@k;Fr-lYt% z_|?pC8eW6U?2-U6XE)5@uAW@ILec2?%7jDjbV^Z}cLkHj&CoSMoO-u0h$Eev5bq8m ze`~g>yEYtl7x-BIdnl^KrKO!qMpL+5a8sc%O+4H^70@!*DR@kh6IKr_UT&A~UK&bV z8sSD-z{Ltn8(h{#3xCMo_OnT<&ugC5s786n*ByLDyoN94-^rq$=br&f7*#<`n zhn#rZK}skWg2MZ3Xhz>{4p!Zgf}Cl9Q0N#lf{-AVf#4QQ31CVH?^x_#jL`uZk;Q%M zgY}_XQA~?poCkAq?C`uzf(Pw4X@KaW>- zSYpncRk~PFm`?zczetYT!ymaPDz;_x-_-R%S!{R`Y~Tr$TwDt zd%YrAK|cj(c6*%YMMQ|)W1v4((Je`DUEz=?Ec~Z|f241VQQ^UKZ@A_U@$;8cK3!R0 zsWKf=fRGXwE1m%>cqWO_Kb)oaOhvZLB=g39mJ`;qz)Hn8_5MCO`hnt`XDi@g#5bZT z)aQVT_=W}oTnFR^3+}lJXQ?Js8$@C?0X+{OZct$$qs67fqTurt)Y72HrT6C(Gn+hN z;lBXh7+XN~By>3gw3@wK8FJ`3!Hp8a;+b+G56QV1~+-bgHv_`sr*n&Xv4Y z*ykq>}5nKY* z3GA;A)@T;L)L-sXY1e{#qrzLVas@p zu-^hUx?vpSQ<4f*bZ;Glo2?Sivci2ExSSv4G!ji07WeI6b8lBzi?2<0z?7cw-XYJK zxM#_~4);z4+-i8gQkE7^)#Zp1PN@p@U7&{KHuY_?%%9X>^3|B{R$$A3ol|R))D-S} z;-~c|`{9-F`uBSk)Dj9S=aN(gAAltY z%K2}0yL)NdQMXG+-qHUb`eXY)sO%WMm^HFOu@EBWds9SVQBz` z=RUEfKtBQ~ugQmr8H#ond>zb371olBDV&vws(?QRuvAx5Fx&yK;&28$_8VSX-t)I@E>T(enexz8)?SglH{3it~E^CC5m zig@0ociv` z0hRj}O^eogVfpT>ifD1^IWbzSD7>$M$N4p^Ud?y6uM93;@fET-=jH2)OFuUaOt6rZ z*-n*`75Fy*m#SO9xkTB0Q&BCRB$vv1g8LS5{BFCbty}Q^)O}mgELr^23ET-WL45}( zb{J86?=+^W+o~P+UBx@RUKCUX{5^nqB;qkVN*jJ(VJ%H4H!2WCLH+_IAGBOHCVU*mZCbXY`#xFGl@6 zm^%bXVg3wEPLm|wDDMTr67$a$nSO5CGt*C+CoA+{fF2e+acnW4xy|(1-r|b;rNSTj z96E!CuJC^aKDQ~KbdA%p?$?TJX~#Lq)>u)PzX9_&dX3Eu&rGjx;g4o}!wcPS72guy z=J4~?#g^Z}7Ue&v^3nT`-zx(S&wm6}0sjGDbS#?Garo`GT)96gsAY#Mhs`qNr3Hoe zC-AtTh3Jkd!FXw5wl`1rMEqHSExGlA;4ZB!7W@SkaDG3U;E@j~t*i{_Bmt^M8@j(L z8!VrE#Pl((E_VD4c5sFuRMXG~je(n5JV0TO`@1rMes0>`3s$xhvcmoc*zDj?h)f1n z4$k{f=bvM6^VXQtvcmlrxF`887p5?35t>R=!eaNol_8hzVt2$5%l-q)!mR#$youD_ zYh{bY`DLTAj@A|S|G?(XkJm=tp1ww(DwO4>?*=sFwqkqtMXy!v)UG!Nq;rkgdSZ&jw< z6&2Dl%H-Do2StHh39yW3Z#PTjio3Fc9A6NJQIq-ycU?Z@tzKEpZpEId(8Mp9b`Uq*H-p)4R508dl;Ew@pWJ^kId!X z>TsQQeUJiG=KI^S}q#X$0~w*idzYDQP1x(P)($IzbD;4YW83g=XC)Z~$#E;)HTO;HbX@|ac^ zJ5Glkyiy>ucE6R`l%(0rXsL4a#4loW3WSI~Cg%7ci zGmLMq$dF1`y)QH)F=nDHTVDraDkc9ZYMrT;LtqN<23HFje9Q!8agjNFWIC_HS1_F?hbG?n6 z<9{X z>&g`Rx#@cu(c?u|*bT5bFb!V?83Y_F>zayeS@|vaBBCkO^FZackQ&0-1lLkz`nl;d z7rcI!XI-JULFY+t*gL%|?8WXVuw^keZ!dPx6W|}I@X|f zC<81FFK-?cM$ZC_*tHXOahRMKjhd}$y;H&+#=Dd?mY`KWPkG7L@X)1E_gh1@Xp5X=e?)GSxN+kIEyA8>?1J&^#I~jLwA}^ z%U<&D*XM3{{R(UG;Uh*5XbN)?%=n0)CY_J7<}Oe?%M>iH zts+O{6@_*oXmC}l8~8YryxUF$P0kyfoqt zDyk)kQuJjr>SDzPtYD8J&3I>vy0^PT(JiA*VLSGcg1i@y=s9t91f`f3-Mtm@aLO$p zD7^cC7ccbV$emEedS6AfIOC!>9Loy#e&F&4mL&x)lcy*cd%xWM72Xn76%vf z7CZnJ98Yh$xlwZax>WkNh>Y>}{>H@vw?Kcij_n{r_dsQcrKP2+0Y|BeF%N<6oWiy04r864}T&8X4UleFCQP-TPVqikXWD~kaSg8@8nG}_$* z!KUiX%~ZKNf+A62J_1bkYbby& zt!y9<;~uGyma!_oq&g@H?@{2L=o_9a?4h8(MtfMfE5Oxx6CSNhXc(TlaCI-AAx1q0 zMy0=eX*fGsZgc6Cd#p0$u)cg!Sqyj_4B%9vA6@Vg%Pk`pQiHI-p8`1VLi9uG z2IZ&^qW7Vsjm>dSRW?{k>5F`RI|m@PJPo#RY9o}rcLs4`zk9kegMMz>+xO&`( z{tVFLpnSSdr7rH7ifQTYMUUO9{EGPF|#ocOn$wdz=qQZP0m?2q;Bgc>|eZJzIZQ$h`IF?A3z5tX^ zm*KZ6wEFv~CZO-!3l+=qF?06|h@w2$i-1f|Y$%#qa4#MMSU503QGhQ2@I-o5QC7@f zzSVPmBx6hMaM3jMWN%3{1(!7b6jUI@frJgFzR zw*ZG>sZSRhhikswTNTSPyIxK;uY{VA-UbpoPI|rAuSvn7-=6$-g|kFj{9fZ{OG^s# z9WfIleYin|-l%)0V$#n|+wnY09H5i>VsKhl!0!T>C-I>jhhXR3ifc*IjA+EHD%AIY z%DpG*y5uzcUflPN0WR*iK~=!-1DJiYfJ^P}RH;*P?^oQdh8JDP4Wfem0I;FQ_EuME znFdK4Y>5iP(+3sYQXE?7pHtFe!iQi2w`%TQ(Y?kWR%}Z+klSHJQIH=2lG_$dS10>> z2d+=)lMCHP712@)kXj>4$qDXb!11?D9AvVWY9Zan70~jC>CzgdD9lg9%#i1tU8ma( zR+l#1Cl%9@Yb?leil$IM1u9Pvq!sfroxiQdeOi$%<4<8rP6!MBGx0;C87IoO-Deg0 z&|kDt6z1o^{Oj?>itBE@0Ce#{%|u6?xV$I_ACW;IEPk*i4Y;{vNCe z$&aX_i-yy7hiVG8x$i4GECc1p8B`=K2K->;>)=M}eyGg26ki7u#F`($8lL2YZbGjM z=}%M{xgRStEc3~9{2TSYgsiZC0yanZew)rxZ;giVW%pA>wG7|s(KIP1w4Z@?5;d!M zF7J0Y0!f3=;&N}PGw@S-_j6@H)6f_T2e<-=nDq;o#SU1;+R`wYS@@+g#?m4SjY&z1 z3BQ5~>8gNEZ*hrcxs;jvwZdDPKp{So74&a_4%6HNy(Oyupz6P2pAw_Avs;lZu0P!j z{Fs-J6zcCl<>4kIK*N9Jem@4YAom$0h4}|C!&z(octpwtuDL%do~5Y|@=sSJIbr=N zW`$EHXg`Jfvtn7CyV}was|o5aK!q5bAB&Rel)!O+RW!@kH8P=2q5}OJpy@utVI(Ga zG;MKzSMbB?Gbw2?;U6%8Kj-9NAlEwlQ*kYYNqgw8$Ft~IOi2F%i9NJ0x((T}FtPi$ zB3fQ^PSI^jRLK7UnZIo~3MMQ>{#QXQtu{5kO34ZCf55SW##SNRg4La>)H)@+=i_I)6jb2#VNs8GaMP! z^mEg9o!_*5HEAR)^lQX)av^Gin!Bc=Te5O$jL51A`dUD9yytHe>sE*K0($P+3TpCU z(UoMe?@Wpc^EzOrmY8uUsJpI0T0U*TxC=d@T@SRQ>5DZt@M*nsi4I^5ci~)Lp)Iq@ z{12QbFP7W@mL%2y>69pULq#5Q4UnXSawAZ96hwBHl5bcVIZ|;fUNLVj7fTB7DDc8q zDDM~DdA3pS%($Z!mwt}fb^M!+goS<#=p1&)Or2&mi7oiYDg!KGN8x-uB`qc#2NO7H z5jC*1|2SURU@24@(Y#XPV#Nutf;*Kzj%bmpwcpfYV}Hi)x7I(D+>-Y)0-uT zHFtqE=`0`0oBh@ww^dnT`38l)J(3l4324r_%dS^A!t&C<-)B6j;1)L%ZLZnBw!C!m z{6yl6`B+)_W$-Ug&3g$u#itZ*bnHKJ9}e^cQUQchnPEYt)nBG_2xw=On^wrJhOSny zt`dm~cN@6;a=WccXRcN6wyNcsa$~kxYE|5fLetMpgJK+cPs3(Bv&s<`d^N^L`?~y{ zJ=loVcIPU*<=c+f-4!bfe>?a*gm88eVY}a0R#RxpnyH%0rWFM_3uNj`)3`R|BWvmk zdKh0i5*2O(+<3NyZ5`yonu=%{DT`)XEGfM6z$^4$VWq02@Ry?hO0QJ4VGa8)gepUy z-ryPM4%bmuSYA6Kl}sWI^PM0nuVD^g{@j!%l{3Kkz=a)(Yw?>ovn?en&csd(KH>g+#k4$UJ~M2`NZo*RSCDx=$=h}KZl=2_s3n`8 zv-ih~$wS^9sH4aSHa9}a&4NE2r+Z<4qf0AL>$I6!VJ$8zJ&i3;78|;-Ayab!zco2G zJxzzV+*4U#ndU6}a*e|J%2-{j=)nq}?nRT1@=|X&ob@NYxjo7VQzBv1%p)N#Hq65Y z4h+LuT@~jE?x*69g`rze7FarU`a@(zh1>_3o1ElwP$s`uAuWBYFoTmQmfr^)=a_N4 zSeK&l#l4Gk+tGdn936~=o2N)29-C8o@_38j-PAX8iZ-!)0LMoExH3THx-9VXOkn6P zP*&`uzq#24uc9$z6P8$bAuQxMZxlC#i|?0|HKw4vf6;n>CAGsp{7IKpg}V&yiT=$< zmV<*}ebuE~QD!s@FQqUh&S!{G0~p1baVkA5?WJ85GzeYjR+R~sj9O};EvY83ivZ)c zNc%1mH!nCvvn(y8{B253a6{lyb9@TWeRf;oPW6y`dZ!LOkCr#3^m1Bz=& z(-yY&l(g_K2A>D+Fc+Z1&fP)9wY=YgSpdliYXhth|5tE1K&wB$PFJxV==)u?l5*Bs~tYlwckQ3=e|RGg_6>)Nc29 zg|ZAvg?++H3i1g+@*wYz{V5H7dci$W5iRdA=fIyJC$uMl#)~QPfb6u&v{|#++t+tb zR$R--Q23;2Z8730FoNgooPSQ9D*RN%w~Pw~!+-Xu!l!}EO%{VtST}sSLRw~&lqyba z9gD@}8J_`CBG!=1HU-;sD*H1P@vvfzl(g`lrJvLvk^OAN9rsBgCZy-YPZ~CRB|qnL z717e1=0|KKOK6J$&w~M+kP2Z{INF$Y97R{NJYU&i8CVOVtgO0N@&Z`G)5o2Tc3k!S zy&&#|ifvh)&0DQYXbSN~AjY{M%-|^b_hJRK3~Kp#85R`UOF%n5IZN_o%v7P>_w71t zrf@G+{H7s-$P1-|i^_$FO)rB@?6Skxr^|TAA-I<-BP_v0!53#mA-)2{FfHTaRv*T= zS1O?8ty4Zd?@n|tD7;sJ$L=y2^7=vr_i6>Tw5`1Og@f}{@xyDtzqZ^5#AN?RWNb+HNQuH72$U);OqUaw4`pPPoN1>ZRIY8Dp$8)7~MvX}H% zDEvuyAooVaw+vPkam0~Mo~pp#1o)MGZ|m-;w&_yBH!GZF;-6DJ&1!;q3oslKL@5_} z8U0n-Z{^;qu$G+Ph}D{uxLENvSizG5iI;gP*u7oREiJq-R%T6sz5`J99f*JYB~Ht$ zYa8yJifPHeVaYW9uqi#^y$d|{9HBY$0S)g~IE&{fXvV3d8Que4C@`qjeSyJy$3W#5 z7_gu`+WUaw#9ee$(9~dk4;|X{eucC+;+!3lm`SptFh2lh>UHu>R3B8p!+4!uP~*`KBNSp~PuC<~&6ASukxfr&3F)ezk-9hyg*c0aF>qh}o> zOB|H6puYe#hYaj#yOo1$iF1{{s4SqLn~v87MLj8D;eQEyJUX4!$hoC(Bhr@@*y0jW znI$DCz^?$vu~{^DVix3Yn)s@MTCzMN#!b-`_SeAX6=*ywZ;+t>2nC^E9|Mi&ExdYw zbp`zmpxJ3ekL`Q$Hx<|7G)6o!G==%C^y3bbaoD%Vz@|R0G?#43;5)$b7Y;ob3G}cU z`d!7f#D4{yI98Ph{vL_1@46DT=GBeclV|O@@6(^$$Nd0M|Mr)M2j<<{L~VPwK3OYo zcRy6-j2>y17WcTG+c-6-_>w85D5m^~gnd(^F^F!ynrK(Ib*bQgw$$G4eypHdNA_uf z1|bj4iVF89!o8SoZW*kvEKIcPQ?%1+cfIU>s<@+z4}=>Dd2;kCk`?mLKt@twKW*fo zzdW&Lsdr(2%btm5rPXfKIbZ#AWy0u98)AYedJE)7j=Y%i3z&k@()A~HR9cgbcE$Zt zkDvBPReIkN(jFJ;n>6r?JeyaI9hdH z9(H>NXk&2?vEpwPcXTEF$Tym&FUI^1#$YLihVwP5_gR}*=b&18 zQ*0kM67(-R`jwFvOa1^$@Nw4$7xq^s+MQC%{ZWz6!CNalSXEvE3wUg-C73?}gJ5zv zT$-4nt%~(#-Thf{Mt@}CK*3WIQiAylFvxl?EDk3yDEUbd{vUZg_gBRmJvaytQl6Km zDd4{Wj5rHLio*$Z&!~ZLe^*eOPh=T>nMzTR{{RxHx503tva4He)TgW4+&>l0_D)H{ zvyxK6`4>2tWsakXYR;1CnTzQ*ml86cGKVTuNaBz8Pf({!TQkXo^Ke$TA zq*0F;(2rfSwQi-=YP7oN&egYfOVgc7t2@;wcPq8ZY^C0D|5aw~C$-HR@9G9q{970s zE|2j)d1c%Y=>K>9!4*eP(N=PU@aSp1yfPNyw%|Ld=n3vJBP5u#AsUr>vmsily0lqw+s73ESM_Np{0!%oWOc<{3 zS#<*{mmf}0UZK>fbnBI!-Day%uC&|TZLP*!(_K-SGiPcF31x3l;&%~Ath*AdLs&|! zyg>oVd2`evtEHN|va)1!;!IvlqOT;?gmx9sIR5T-n$xw?wsv=>w4>79R(4laz|pQQ zF5n_J$)2FOp*012HDEDfka;^RyQrvn%3WRIY~euS`GSxzt^o!XGN{+D3??eI>SU>0 zcGpyx(TNUujjZ9nWlBz9*8&W_n>r89TbYR+;DT1#enO<0K`LyFFjcz6DqsP-S*sM zxmIe^15uDo`XQ5REg08`*sFrrfz?lkB%bm{(P>Ow7wINc4E6}C`26)5D$ z3jRjG<5N&H?)v*CwpVs{cQ$sOeP;LUGwGk*k%~^v-S8=bnEw*_!ooia{6u4)EKSX} zx4EMgcHG9!asoR>9u{Nb#Qf4CrDi5(I-O>_+ibKt?pQ?~{lTTlC&l~|C;uQ;7bA{? z5r_tPXlqkbn{mf0vTel5431t*Kqmln0$SGkN^gClG&fakbf>E|YUTBEV~UQ}>Q2`h zrH(sM!E2^(%&OekMgzp4lVA`s;(mnaRCaaTjTQO~6FT8L8(ruK;baidnowy%w_5kQ z6g};CH&GPZ+l{JKQeuL-DNsieDzxtz^c?RuD(!Bo(df9FDXJ|X$mu#6X|dtvumREO zkPc^}m95e=E@a!~ZlTDd6K>Lug9v}ol%Vi#2_9x{ln_|O(rLND`2ac&re0~4I*pdQ zm15iakO+FX{K%?{A-9Gh=tF**TW^$F+uH6FMIIes@~}V5n>Mqaux zZbH$<^-wG)uu}yVf6>-d+nuIhqaSVb2PHkBoetV5^coF8f4$M2t;{xByWJLL%w0*~ z(w}5RJTdkR7<(MC5(7%5J~xYYSHYm&r5@OJXDaJ#NsOFchyI+^7i-RfHHdcE2iH5@ z#`H8!^f+7bZGA7}$s<7lo&(@b!nYds4o>Xvtt?Q|W@0a`5>wu%O9x2z9pwk9vXbsu zR#w=)5t>0#+V@8Nhj~0P@^&y1({egEXKkY0txmTp+uZGyF-G?b33f&aF(KVSNc`ri z^(oAM@2E(&sYd4Ivznmp1e6MqXmZoq-Q7{D%~jl;74)z|q=c~W?*cx&{F1+Oh@9?J z1ubo>;@VnT5b-ZIEhxN_@WOycs3`Loqz;A!Igo-;x&!x7_H|AD|>y$ zVCbgCA||4Pw4M+vARbFO7(3Ocdp{tdPer+c{M?82MSIwktXm>rKV`3 zmuBQ0CRDiJ$7v3z3UwA#Oj#2H0pCJbSJ=_Zx`Hk6{i$2%8eoRdm9}y$EIQXzutN@A zSx27gJP;6OQ1fkdYExa`99>IMZ0YDk7l^fl)E1I75E|C$3crpb9Y#PyasrzJ3@dnH zovGYu)w-0h+yQsJLm`dLgqOj%iSR!sRfW70PYO-^%Hv*mUv=-6&E2nuhvJZYRe z?E1smyL2b=`3h=#()^5Mq$=dQf{bXGK077Ds}0H#ySpjk=#mcU3yFp!Nd7uD#pc zQ`u*WSF*kmVgl*`Q0y19e05uZZ$or=y;_3 zh(rZ@A+QOj)|qL{wJS}xq?oo3n-dELLE$ZfCkYiSmvcq5N;TQ*G4UnlkMFW>GI6E|0N}$2giELzZ}P5}H4wU~zSA;QV6m0cGdtiar@} zau$2D+G57VFyr!MMtwl11|3vD+YqN>XDEsM2INBw)-KP`mzb_jH{2zPbI37RtRi?611}E5aeKodqFbJOB(h5%?O~RWqckJlz8o#5TuD zd8;5Lmtr-Vcm&AU*rYQ}RO;8Ib#AI7SzDx>)+3b>wiRtH>idNL z!!$`=$)jKxqMAz(Pn=Kdu-(=ig|V}hE(KI=_~u6|o9L&Zb9y~*NTIUW@EEZn%u@YY zfS($6XQ@F{>lOD{WrNM{=FEDt+G54yU%c)hX&Q|HfkWPt8-e0Yt^waS0RHMvVzGFtelFGt= z4fyDz;j7caN2fG3)oNAFbFWo!TYXaY>nAh?`#NBKvc|7GQEP8DEA=V&dWAH;WVMhb zazc9pXh+gRCWrX)96cnpGn(DE+#415Fe?cX(qhA#xh@=GaK0x61;i2hg3Ww%mu60k%0y+=PHj(Y3fmId^Q0VSHu1si* zeC?7{N`36j7-HBbU>M#$`QdoKQ@ydXM7#e#sqC<=3P(!5bw|Ij;fZyH{VA|-L~JRU zr5bMfk7i1>X)5sFS$CgSeA^HpY922?l(d-e8JHlU1$L?Uz@mGG`>aA6M?Lzw9*b|0 zkQ3bJ@^M?-=Pym%7QuZXA9uR@;-!f@U2tCl4kZSX$!}FqVcMk{%;{pcvjU^KN$<6u?cnZz`T`qQt)Mz`l@wXi#-(0~1{LU1f)D zm`=QgNJ=>011DY{pkpTKKmfHo@O?$KrKvJ;NS?Ns@dKEF#A%|Eq}`cn%yrxk72Ve5 z5<2?bv#yYT1Ts&!-Qvo=3F@5-i~APWhVI7-Y|GeET`FW4%Kscm3iBsmhL789QEhi~ zTdV1Qs(6R|aU&_={0tln47@)bUj#Ygq5HW)*&@rtE_Wp;z+V7}=~sxETbT7xdHydI z&o&v!h9f~waK8f1`=_4UOJ{gZR6=>Y`?UfZ{Zo)(|D-ep`Wrwovz>Pvt7{XeV{XvG zUu$=><9<69mW4btt0~yu0gE=ni6JV`+&R;6zgIxpd_*NNQ0+-#Liz(p7y)HqkkmoF z*=f5!Dx$4sGLrI78T|^G0|*QKPoSd-vHvJjd+lID>Yo+Y)`T)nNc05v7vM1BrgxOn zURc^qg&d$iVfC*Hz8!yI)2+oK>7QAC@Q(Ggz8Ld27!#7gwDsBVfcU#YA98{*2npjK zU?AOBSz20L9WD;tKNZ0?S5S+wq9&Ms0TV{?Mt8DWFH!yZzZL0_M{!XS%6~vX0wyv4 zt2JnQOq7lIuR_w#5npcf73q+hNDvan<%Gf6pk{5Z?Jlnvwv25iodhkxTmcxQ zC@DT^Hrmx)RD?6NgQi!l3gyn+6&2Cu!V|GhR#V7V0y*VNYxV8!$_hBPFC{S{T?Hi6 zCGeY|{SN2N(Z<@VDwM5lWZq_w6WGj3J*i~jPek1y8fA5cMjU4`6AmTf*B;BR{w|D@5cAS%@BftqTZsARdmB97fSNlZvL z00|wCHrml0AqZQsnnyu5tx)fBH&jUaX?e&sNB)Yic2H(fw0hz0Uh0nUI#u#V|9&+V0ugLSOvCq ztDqv!pHvj$aUh}vgc|QEK2nPgx@>jerjA!!BXZ0ak1oNSb|

d;pL+(eNNc}f^b3FoHZz^6s48g(jA!ltB~DVD8~W#?$L&dQ2{yg86aG3cE#@9BpTIw@~nN=|A7xp++=3SL1n$f=X|H$`15YR}{T%UfN5{ZvX))qd7y-Yz zzP`9Hf%ZfPAW#kF9NnN;ai=N%){%VaKVHgz*gR1opAIt8?}+@PYJxfoC@HwhJ!lBA)X<%+ z;I<60?KB}z5QENvLFn6g4z#_yO(!L}+bUz|r{N2z9EEb9EG<^t4pv}66D2H-4wf2k zub^j`pvf8*uOoyzfROmc)i$*-cSi*o_ZxdPLEQ-`jLEq0l#Y`cEG^D&Otfb^O$5a5 z&WdT1%(k@Sh9p>S?)7t;pR zR1V#=;-6<~*dpvdz5Iw`qYOn}!8RC%Xraqfgozq0Z+DQ6n^9)iX6GW~&5$3WDbOmQ z2!rEOHRtMB)IL`+ZC^V7oKCMO#O)xeFWqo8g*%Kd9Zk7rLAn_|Tk***rKx6lw!7_| zEoXGka&={cu}ICI>f&FrjUz9jaY*K!;hO(n%sWHOI}hfeIflbvY5&~PU~Nb_fR-|3 z^h|{kbbZ&S3l2}k`LJ~BML(=~Yh3}i0Y(~!Ly_rn_sr9`Y;he$wfTP?*aS6U&4C49 zmtOTh?JPPPZifQeDoI4hHwgK`wFFQV@J@iS1{WQ_xlFx%qEz4Qb}26XGz{Ts9ZygH z5lIVtH{i)GI9;A;x$_lw+%5<)A>9=u1Ph!_qj=!fjo>fg4SHS zd{d(Y1pm-&rTnq}Lg|Jzgj+^R|`Ghi~MUtosN1^Rf*7aD}o>6jRf4ttsF~0E{<@Le(iQIAnVzVSwsdAf(LZJ4wS~T@K)(R9K{u*p9P~464wW7RY^7W7u>Uz zSvE(e%B0eof_x5;{*(A!YqVDp>#***if9|dbu<~&g!MdOacHs4pF-bq&sQv4Tg!we zK~7*V0PI#d4M2{f^f}Gd-n>*zQG)Y@%97rt_xX#dV(^P#FdV>qj}op6JvXt?+vxW8 z>~ZeJ$}U^(CDQTjG5RH{!hH$2Xmmq5Reb_m2dVIowllv}L2aMKi*UD0$qDUcpuwrb z1^6n%mn)8KTA3Q9p(B7-01!iZRACf|Z2wDp0Uea&fQkS+8cIkHZbvh>UwaN-x@j$`pSxQ_i zc^xeAgJ?KApAXdUhO_SnmSM`%j*kw&^AY9KZc;1vAbA!t{1+dFkXZ zNezO+dk=V_QkypN)8R5@_g=-arI->QHV6shePAH_*QGFN&-y-E=6JtC*oFfYgG6!y z`T#%}^g@QCR>p-MHL5OkA5=hF(36uXi8Y1#A$dGnboa;NRNRLZ%{B@p7VTL_2p<6f znGt%&^ls?_C@fijR6%UX{`6;JDdBt!oTG`8@;DvJ`^0;IKdz|s)8O|CoK8wwtoQ`1 zz*h{15zzVFQg{DJ1-E_0pu+gWBqZBLHp#P^@ByDyH%g%U%vn!^1OxFLXR(k^d0G-SqoS@8}zfD0#CMZWD-D_AOZEb9B5Vu{WGwTL4)udude zkmD6aQHVbP@dSL$)Fr6A=WD9E4FiMUR`x?>LEY2>MAi3U`H|dKmOzL}KY~ecUWqDE zyoBBE$I6D$Z(($Cs8c*B;6(CL*8F1ym5el z5~H)4!u=Jv81=nhn49iaXJ_YlkN&R}b@Z2&d5-cgNkw7)MxK?&e3}-lF7-CTc>h~P zwdKH5nFI<@lahk{9k4#ehj%5z!r4y0S43M-oPAD~6WSj@3u#$8)pZ7EK-By}Y=0b! zmuSE#IpO^YJY*A8nwoawBr@TDR&1NcNJ#qjl=zKIcnTr*`~~)8Ch~NESgV75=I*b` z68dTAQqk1i+Y$W=)gvq|7W@qs;El-f8MHHSwp6R0U+M0gq2w4}-uZWBhphrtB)u8( zBTrw9`3H=_gpUt8qLP9O+&>lCwhWm$GznUQ`4=!~b?KdTXKZo*Rxn$?D&AUmMs&c+ zf51e+S!$iU<5$Z6tEgM)KifPPpELjCm2xjC&-y=b(ZY1HVz3Ic-4S%oL~;YIE#X?2 zq+nHnUxvh`w1)0q!imP0RXp45GtsYEM+lb#;beNe;u6dn9Rgcwbx%LrU0$(`v7n{S zGlGa=SAb!O>3)gMI-!uEN}KzysLZepR5_nJ))eZMKt;}(rt774xmtBsRxsN_Vq&)M zWkmlf&_{%unEukOA+&(lZJ+P1s#vxNHz(G^3^>Hp!~}H>ppX=bSMIK3Zs zmYy6dmSOetx(a4{tVDNA$qDaz;2~k)4;St&tzCli=&!F>wlAelDh^^ox&cU7ozSBk zS6|*xAx9rfAkkT*l{iZ5>jKHhAo8*4P_euMU0v+0ghXj@>IO^-y1^2kR4nMs7< z1}JPO<~h&N3QmK7VMHlNgr%g#ieq2};>7Ua^w`*w=#Eun+X*7s#}0aeI}W&;5iSu` zO;+g67Mx^2@e1AUU2XVzKi^G!yfR~#=>;UjbqF^CCN`b`8{zV!SK=qkR4(IAROZ;? zioCZXk^(&mP)v!)jV4d!!%1B3#tLg&go%{=JBWVqseI5C_Q_ylwBcxLbXtwu zW5S-hR+;X!XR6a3cPj<6t)^uBeET=^iQ^E7_%TcdBTh!k}%H z?sTPu4W`{jyy{EZbYm3Fae7 zVcrhRQ;2EkukE=uHu=-S_wAKEcO`*Kzhg!`G4>8HR*GF{`TKyoqcX%c(M$PE=m_9W z0Qiv7-&D{lk)PV>?yMlTHK>fQWHmwE1*q6F(|esQwYJka<69MNOwSw%3a|v=QTR}) zRQ8^UHfDG}i9M;%wgMN?^BqWja1uKqE@qTr1}1kDNyzo(sP&ztWYCnGQWn@^36b&^ z$Pc=>Jkk|-1#qlipta+Ofn75l8jj*42BsC?7Sf8E=gSWzEhcP(3FzcuMv7VJ)Xqk0 z%FQUYt&;~CkJggHtb&PtLsP0|w^^NX=PH(M!k(Csc^T2)4t;c+;Bh$NR8tJwtS`rD zrBY3^VEKN-C+n2y+MwPZx`Vr}aJH!s)k{Zbe1?A(MR~dgh*1Sxy;1H^@l#XLY%yr! z1vY3Lfs#|7!#D&RSQ(Oi7up7u!X!kMW%6ww&|VgbQ7{-l_Yc7lZdzPdPnAss3z=K;$aquZsR zwyAqi^VkAqv0yhWKxPy*l{EFAXwo(DO&koc;Ha{~oj;xdL5wZPRTcy83Ik3e1K^jE z_sYiw)Pv>j3bM3!Q?}S5N3H8^(tntNiFtR2dA{B;K2e!#6zI?y`b@L|iZ<9P!)EDm zHgAk0=GmGc)^uSFV#?4Zrf6N2Zl%1Z;@dn~wllDtzgNKoaypX?;da6=s(s7 zh_5J~Ee6Uts5_Dr=0F}Wu^dPBWvdEkOYsz}#nqyF%`OsJXh3xyRh^=Z{W`szJlYVj zc-BHSNl2coDb|>?7FH9~I#5SbE6vtN&U8A>?p&+p4k)lKhAv18`}#6^O`q zjztx&bPMD`g|)>GnOT|_6VL`g$w*}`|bjro+> zdn=@^^JgAT$qM{F>BkJS!TTzv?S<;cWHBM#52Sc0YR4ocH}0=Ewv0{Y*`Otu2LOXf zX0*s6hgww2756{|wCyH|qNEwk(@K+uNzCjnaVjT|%6dY39B6QGGEOzx&9ZyEg4u?SY$K(EJep-e zJwYA}?Zn^fUG*D+70cH96W=e^64H}Ex+1qoRD(QOAx@)zwfXcRfglmleu_K=eMTe> zN-G=fHRqnH5Vp?~G^AO?dO~{|Xdz_Zh5BPEcWu__{#y5R1++yHiDyd53GW%;AtivY zu|dh+cDoi`v;0hjG{$Dh+Fm6o*k=KY)MRFoJY3&P2k_GZ%d-{SmYNhj|Ays9Gy@lL zG2=Nf19SCg6@c~v(e4>K(!p;Ic&@TxEB&XNx1-F`LP}KF&jULVf6vwZ;XTh+NZV)5 z_C%Hw*b4wdRWpC)Zn@f=!8TPK_1dCYcV)Ul_g+#fd!fRgYkK0;oP+KQERq*2Vw|E8dOVGuDRDM z)FFo>tRsXsfPkK=*Hy3}o7f!S-l({B{GG$O)@F}iU``;!q&LB&36eLYb?9c~O06(hO%@(%MkhfOgWm#!G3TJsZ@N2&dVcp-Wz3l-V-mw>5E91Qz(_RndV`Jw za&K3ZahthU6Vy9^3d<3+gxnyn-E!|#q(feg5GA3!3lz*@;LIgm94m})AqG!YHxt~@@+Xqef zyjV*}p8*MZmigg<37nN*q4|HkK1Vl?RLkzO3TVr9K*~Q~o~D352XGj9r@Q{^eO}QH zdE{jsA$$RZ{4EVQ>BfCg;cOLOBepa^Rp4I&9AV*bV|mYj*6lWEi4N2+E2`1;vWkDJ zN>PYk0Wl1cJ41u{s)8NzAQ^;&@ij1fcktCUAsJaKwP)Pd70NcZ%;W$Qk^=n(plG7e zq%Jw7`{r2O%#`USnQh)SQoe`g6OaA2ePL%h5HL|eQZm!d@71r>#os37yUiG`3v1I71rut6KCh86$Sb$KobESoiL8` z%73kR;|6prC$QfDh6aiR1nuZu!xwPBRV-Tokji0*mVkZ-5I$l0Ec)qMqtSA|S3KLI zl_>d^BR}|vdoL^KKL8!(LG4Oqd$&B-a(`6FLk{6YNhp5;1#N}mpy-kfx;L=9cftKx z!E9-TL_nnkh4~jS(NseEzB%m=K>Dk~jrP5=%_wIHfc1p-H_$LZrmm5pt7d!aOKa}$ z3Tg|+Q&Rpzrv4;|iv|A>3lcf0*#?!OHR?3v{8L%5l}z2-+2tmtB2gj#3uL@$f8OqH zI?%syex>gIt&p~*tMuW$A||N+097=%ZA?#NZ>RgO0@F{!v#L3ln%f3#vEzTR1Fj(q zD8Am(9YNnUxk1Wwwlz9czg@vyRxxevA(ckRkrn*q zfIp6&GjxD9-OWy3sX1Aq;~b_-G%;O=qbW4zs)k~d-?VtEo3TJ!ik&b`Z=oik} zPUc8&4ekwyn<>Sk#ig=4MX_xwG?A8PN57=V56be~w*mjA#OJ9EZI@l6FTdPd>FuNJ ziR)e5#f@}yezgAsH=*q5nZACmwznV9o#riLB+}BDUKM`xmX_ zdO&xkLfInCpu*3WRutk{Acp!!zYk(ttuaaWmYl7Cw!W5#qZ4AnItQ#oWhpiy&(Rg# zIMVaBif0?`v%^?IQ?R!K))=8tbyJPjr0I~r#&()Y-(FdDPx>^MeuS2WirII7*@%q7 z6cE?zRojhD)7?>7Wm|5@Nu@-R!n_lhJ|U)#?WS$U?#^RjQ?u-9;v{gA6zpAq#hA}i zqv%)$t{&g2xHdnWnPsI_1ziFfz9my%M|*zOhHg^9ZH`#Pe9w~~QRSXj76ZyKAkit1 z^zAgTCxEW_Rq$~;MM6`s6=3}g(@$z^lP%O`PAi~o5g_}jy_%r50d*3+;=&mcT_-%G zacAge6u(J->(c6P0ui&SFzeJ&X2pkW&`vAL`_ypUN6Ve7jJ(ICXkP`F$3`fG%n_$2ogsxEiClo__kx0d%WS^r@XQ;gjWWASzi zeOTOcX;W&cwL7^T^n7Lbyy-I?YN98@731#;<1xoU$M(0$wP<9eIn|WAo3hNd2$XUV zDM3Nr9Y_Qca<@9_py_y59KYu7p`f-&yeRqaCqELhg6_)G#uYfTbma>jfadP0z_zE& zDd`Dg;3LLVj|h6!6)SJzkO*Vg@IYHqKBZ>9fibC(!|{I|}E3U?p4$uz;P1}%#0S47*0 zqrDZK>p)^cS_BF085YGk68t*LU7&#U)9{E{rIWLNbe0%!Aq=VSIRzTG1wl+mLy+(R<3t0^><4tF>b@bRSytVeg3?bzD~i?7cutOg zro_dFbr^wAyoaLT#leL9Z{oBGI*6MbwL759xvR;Xpm&>up0`Ul^1q3H&pfg4Vps@Q zDhr=Dzn(T-G-=_pLKh}0t8A@2XX@*3%!qV_z5zO#Lx^Ch9F(A!D5x#`$%e3AO;Gm| zly^MHN@8>Ny%lQgmY3L^eIJmJR6^z{c_Z$970lLoQ~9feoIKe51Q*^RGBW-=%KIyv zZS>8)MiCU?0|2}wJ)a>qYwxaiC<1w)GG!P2?ac?JLk-9nCT2beW`_8^(JfQjtK%N5 z>^S83JqQWoAz&ok85ZZ=LltG*Mg=h;Jq)C)mEhvKjTP;7h@Y((-Z&bQCCOLQpcB!-elE30gC(MZZW z&*)bx78d$rK*xJFH2yg{{g5I;oUb7T8;@1yEtp=~p>~8USj>MM%uhDhopbG$d%Uu0 z+y)CVAw2=4BkA!lc~Lugadl(EJyB7OV++aouT-Qf20RG{AOMifaQNSeJydmcVRyKA zN#8wL@oguML~0oRqaSH$G2tmN0de{zi>tUiX5#!Rtu@k(?=%y9s-oMntRm#!fc%J6 z1^hICuS8%z#<=gEu4p#LmpKGEssMfl00?YS;qh#>jWy41Ik`dSnF>9NPqOJ=!-7CL zk01~IEZF2rEaJn#aLWlF9~^EJfA(0`B-|gjy<&n`^Bh=%C?IjnqEGHTS6N_NTFO~c z$61h26yozh#DEuO#qIMZ-SZX97Q$zz!lWgb7XV|-=DlqRrPi`26 z<*e|KgKKw@Ih^WDxmPRmE+D}2oba10<(@Mv;6#1Rb8Xx ztwm>7Qe5y>Wz)H)R;jXSh4Ny}+h7eo3rz-SGdIrG=NZ!572Y=YPE0A1YC?MlXvpTp z=@MT_;`1=?R76|E9xM6J5dVyX1^zC9Co>#Wb>OFJ?^bYI6jqeq2&zJU56CCull$wM zN^?_G_3b|m9hX7}Us0rlI)1tcimv&3ud>9}7FjvOBrCo3iIEU7?0qoIyX&1h(gk*R71tyZufD8!5FzYCL7WOJ;8kfIIL)~yP)%daO|@`=IE1S5z`JM zp(n&ofryV49ifu1+#gl?BjVgL45`&M2BQlYbVa6+gYl1+-DWb7CI*$?Eler z)`4*y*BURR5NK0M8)~C8g%q@j?O;)|z*a4aR*LNuwyV`j+IXc^W>>bAGBYzXGcz+Y zGrcl1zwbM9&xNyhSF>{Z$9wfvr0;j`+<`M^&delQO8Oj0Hv=g(pNJf`o%nux2KNri zMxcq(U8Z)r&l>|S#vg9}EmP7_w=j?6lq<;iD0D=reP5t`slnP`b3C}$ebJb*<-uAN zmG~tR`I&vinkuq;bYC{OutdL9(aZTHlv2)D$Vtrr#>aLRhbG-u4JfSfx7Q~xr?9UP z#$x0iFHC>-&EjY@9^>%!E#Wdd#Zq#L`v!3`?~4zabKf+iFjo#^Cr_1=dK3K{C)O$F zTjX%mSgT{p5Yr_`CuZqQyKfuX0Dfunni|UpFMf(dmHHi0+0#Ww{f`foWW4yUVTMJw zBM~8H1(o+b@=gXX&rjPuHav_p#qS$-*jUxwNAuEZ#Sdr&ziDONHIW?7Q+s}BsA1nU z5|B4e#FXNse-ScSW=f{Q?=n3Td=U!5oKOvKCkrBMz*yD|30}pO@|7U<&A;_p>VwwL?)qR}}849NUE(;6{e9lfnJMpu$Fx)LoZ}mXdx+(ydW`0h3=n zNcLC8jQ#lYfEKz@J&ZIh-yww4)X-nk&{We!map6``x|4-mYZ%QsJ!2jm+~1#2XQ{0 z`<oJ;T`iTpAqW*<7Wa_1uR%C#o1N58 z6nCM*VQ=C!4IkAbpu}T2F(H16A_gk1Rvb+$ID{c2?yoYP*jbv|L~D4KJ)rJ1o{2 zakb=lS`y8-F;U~%3EkW47<8DYlfO31bxY5KErMPH#E$!NKpR#2zpAp5ow&;`Xa^uZ#eEL zbtf8Lm{Zs0_QZk;Jc+c8;H=MeY4Q;Faov1156rxVTyKz#1v#rNQxt_*dC?iOU z!+oKn?o`7K3sz?)DY?RG!i{MHBjx-P_CPo$wOHqles%}KijXp#uEjLDV!qg0W9 zR!WWaR%sr`*jJrTQn`gOBP<9Qi;E%gQ&*H)cuQKy7Vh0&oS(s!Q+Ri08dJhrc$*U) z3o7td1fE7<`kdEj@R*yFwGs(6-`W_k2Y<7S;lKM$H8YFJoY^*UWxnMA1i8`50pCY7)vxs0I2?Hf}T=9mBv$w=ZjkJ-F zGPaSyMjVe=9HSV1R$QwvjsccOt>4aI!#bHrM4(wg z<=vjV$U9@N%zPI3Zy4g;9SkxoIFQrRCz?vVBdLkEgnKe3aOyFxJGzr$hP`H+w-gI1 z@XiFXDd>=^cbGZ%BrZuArhk= z4u{4ufs_GWsH!)AtCaQ(Ys+t7&Vlzc|?wjEpp1*MHb^|%;Q-=gDf3# zh;o$XH(FKkw09e9*t|QF6_g{Z_%Y%oA1TRk)RgbL7;>QZn+Qn-O07_u)b2fG^HWA; zG%_>j#tk!U+|4Oui0L~{ki*V^zOg?QaCW?Sa9e4cn>4tvhMDoPGlGho>V(|xrmtA! zc12#)3Aw|~T(QV_5u`{YbMxcT8?lWsoEFIJTQ_T{Vbv#=lFAc5rG)i`=Sb&xmN`C@ z+Zih@cd>zoWkP0@#DL6CyteZ9k{`G?fJctaV2x-Nu7J-4a{G*h3wV<&-Wg~ItNHtB zJ|{xnWuF|`D}l{Rj9Fp5T$|e;$tmovgh@AJC%QY_-3&2osK~Uz%se-)o_8lSs-AQL zc5}oY-ajcZD0dHo4eM8PMyQOezHq7I3vYM#G~^?F;kXMZ6B_Rt+B?G>NH=e2tg)Nd zv&`V=mGsprq{tEoXFGGupqcXr87vr7U~ih8G^GTUSS68DMw!v(@2iv(C>MI>C0dvDZD+>e+b$bp!b&6Gx22$#MvXiUXVIu9tE{ELiRlSPMwmG9` zqN&saq#gz8tXr?Tx&eh%Djb7`N%m?hIuD&nD!)Q`xRzTs_X}l&6$k%gJy7`m3yG! zg)MNkIa1V8%!7zI+P`AC-ePd?!G^-nR8Mc^b(HWB68ODPh|{GhEMANc?spG0kn?(l z#8S$67&&J_CLoM9JGcvJB}FVw;2^_?8&mEPWJ<3gv@}vpegsYC5D|3|Qu%O+@!Yhm zT|Ckl7B)V$cNJM#g+Ge$(*f_iw*Z%U4(=^o;2v!ZnG7nSpq&K~LXCP1jbegQm9N0p*ZUvYYZy}8J6R4cju^ekE3<;{xyO%$E65e=6bv_CM@2m zQZl6ILt0niPavE=vTx6_C)J;M`9uQ_bN<`9g+x)2Pa=|Ce(Gxs@12@K3dh(kOgo3i zFrYoz(D4}1U3B;cR$VQ53N2wz3{PFdhB(d!_XgwSWxu_!BAl2FYWhtoWA@ ze-q%_dX@39*;yWwJx)k>={1RnCIuxay^hBgrNvZ~{IF)OOrR}sq&EOujY&dJD(d$nPP z1;$fv=-pQlQ`T$9V!X&Neb1KWkVpJl0}3lj+i{7Oa$ZLcU8i*rPfn3N`zqXy{QR-asQ#i*v)+K__dFZ#4L@p1R$0Q$Yp3i9lA>=!Cs!&*hs9 zE^H)M*2^jEZ3@$hGa;LF-fm!F^Sbt`BWlWe z2U*udG5Wz6DN64&n6The+gLt0tB7|IaVii|A0!c7WPi&l>Li?5IX~jv1{+pQb9|>< zd9~#|v?VoTp5U1u?!AT`RD8Gjb`mIPIo+5bGUBlg9a2If-__HjAW|2`SyFE)I7b6YCebg8bHexs1Psy;#YQe{70gKyjN8C9# zHjc}?+{Xiz@^Sc-90imEf>0c(f|kWdz~W_-H%08Q3ZdB;G|DL z&h4iSZHs-v)U+Z#Lj;RaZluN6=2WWaK5IDLz3eV`+^VATK1UuaP9|c95$$lPxm?9z z)Soxxz!_`)&F6`(^1ncSymo}lB?f-JXqaK8nsPeeGKrE>zC;TBYA)ZkrN-j?chuA` z8)#q)fuJ89J1VOYU!f8Fw8;_1Orid&;fA%4oa2jA`O{w`imN8b%^!4MH-rNIL+2); zj!tTKV4TwM4eHXPV*G5Ou~OhEH}N(e_e}!|>*Z8Sicudj!dimgBK}0+Ifa6qh4keM z$mwmmZyO83V#_M$`}YpoYQ%SF1V3Z6hYBad436(|-!EDAsw4G6A9xO)h${A{#73nz;eKXFJ(u2u>i#^X zJMMmQq`L9uieFNfU&XtoC`6xm{VPKV`zmezt?KD({F*p6T9#sR$hO=_wt-uBo9;IT zJQ4J9vU2i?vOh`)YRYeEO7x|Q?so>;^OuVEEdHLlbV%T^B?-h6NW+}j@BUygVFPHa zBrg^}G3D9o>O1|BY>7AfV-@HG`Mo4q$aH@)@UU=I&It_}S!Ms3Y%cu-ET_y(?!l2K zh~Q}=(qD{e^Fd#|*CiE;Rnz}U(jng}ZWHN9iOqSDENOyOe)$_>- zPOG94uMA;vTm47C$!ZgW?ka{BHZ-?=MiEocRSA+kQyXhIp<|SHFyPkUSvC0rv#z|~o}zTRE)NC{p? z2}hG4izIN(qjcFZIdA?L0}31IGO2%QJp~?1AO}_{wAqmftkB}l7eRnXN&H7h8R}H?e|SnOj*|_i`@#py#L@lL}rJ(fq{kf*E#h^ z

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 literal 0 HcmV?d00001 diff --git a/docs/sphinx/.doctrees/index.doctree b/docs/sphinx/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..06a299df760a7c898c45c1f7579b2476243b19dd GIT binary patch literal 5911 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 literal 0 HcmV?d00001 diff --git a/docs/sphinx/.doctrees/pages/installation.doctree b/docs/sphinx/.doctrees/pages/installation.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d5a4652f16f5cf2edae246fc1e784ec1af3d1137 GIT binary patch literal 3110 zcmcgu>3<_f5p}$=Eop79_dc?lXh{~lBx?m&AQ%E9Kn@Jz+6v1t46T`#dg7VssqP+I z0tT``g3W#3_kF{k$m@~hl}+GdKJ5M^tGoKutE%_vh50DfQR$M@Zsa8xkTCt3@8OK}h(kW3o-PhXX+Q|@a8OJMI z_t28ZlEju*D?XtXY55S4HA{_1C25S{d@|ruN7J)1^7vYO8rhwx_$;zBVs`@L9L>=p z@B$g1SM#(u`TK?2Pax%v(wXc;&ku}^%hb0+DP4*XoM_{usp;E1NSC12Y*hG3JT@~hRn0xhpuKgtUVm&z8e zgO%$Qzjj@ntE>F%Y?U8Y=hYc?L0wdrXraEqk0`*sv99h9)B}NP2kL5|9t=u_SJmXL zjiXQ9l0$S?=fC4W`r;jaUB$1*mcXV^|B|*-qAoPlt3*C)#5h*_sxpm z=yAs=)h#94Mi$y8PMc9X5_!8P+mm|8xSi?<%{yxMM(tSd=BXBOk`LP2w4+q#{-Z;L z2ourn8=bYDPTVtPuPySpZOYsq*xa09qj>;@-{cv2^UE=^FlFR1)wvzLG9dXa;B>R% zw|Zh;p*Igz?&ix@E=`;?A`N?}!*+|`hUz_D@!LJfiy-Eqb}@2F=WQ!pS!@)eY2{`p zUpW+m-{EP0Cx&^LrJJ@8(3B^rQ5b2Z*^&IDZ%nl3xKGC&+L+ekU8u+ZeU{%17T;6x zQvgVF0P%R8mBj!44|Loak=wpDnKb-#msSpRs~*&6Dt?w4_&6TW_g1_`Yj%|NbQ(@i zT7F-^@28W8RIk3>4fq3e=E(7|{^^4Oe~6k<;%e2j{NaE<;*+A~sl3(_a0_aBfbgym zQ^3!8ScNvI27k0mjU=8Z?QJOS$}ASk9}D>7v@(5c4B!(Lf0EXcJWdRBHH1hHq_Z3Z z{3&Xncn*VNIh;`&OjGV;9=DzoX$iaGPiqzx_txpul#0+R9Dr|IjsW8{LTeMlQ3~9X zd6Ym1W00JRd{9DXp}DbSN%N5WJ~fePBz*`T?7@6w;h{=MdW3tbORE-ATi{aWZO(Fn zP)C&3adeRqsluE0l zbiBJyS9Ix$(*3WPLs%l{iyV&t2{q5lEFAjI=g**4C*m?I!h>G3{8^9-^GWi)o*ere zj;-zr<24j-8!0lbx^&hTs-L7a(V>$W@H)w##|+Ej#6iBC3NpzKCh%^Xz{@>XU*4x< zGT-4ByOX>ME6W&pWGTPo=^MgdWSF3zO)gT)U%{MtPOu2o?l{SKZ=a5j_lVGUHSYta zZ>yQM{3@O}LOg$s7E0H@@fd%dT9fO(2fu;aNj_U5{w6i+lQ(QK;BV21Fix!KfyxOl z-|kWqlMONKCqw=Y1nWwq;GGeGk7+~_UMWH}=XP1}clR+yq8IKau~YoLEi7?|JB`0j z3v}x#fcpV0O?S8-s*7|2^Y7sAe!M`U;~(u&b0Bl5J&c%t4DfY}+$HTNX#RRA!tqq_ zPxolqH^afy{fyevsoUM%g&TNlsHZNLI~^Rg9sao&)ZB?-sFHz7@z3!uumS0Oz`vx+ zhY33}C%;l7TJ>5N-X-bRG@r!$8=%$L7qJ>mYWdrJx^Fy*GL^M{fF!4|1&$ZA-=W_p zwAbBi`S$^xtNR+uhcxwWEOTF-nE$Xx$FX~2*2dre=tZ}t=Ri9D)Gd2-_Ne%ex8Xl; z&8e#u|3$5-GZvjUyMB+I=C2k1O}~u9`zCrg literal 0 HcmV?d00001 diff --git a/docs/sphinx/.doctrees/source/lm_client.apis.doctree b/docs/sphinx/.doctrees/source/lm_client.apis.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4607b00105e2b80f805af2e3f7f53c12ba66dae0 GIT binary patch literal 383735 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 z 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 Ul`lKJa*d&r@ABJ$-Cu{Quwg{cO_JUG>ycPd!!j z?doH?uAe%TEf3YI`C?^5shrJK5_~wCD^(NDA?t2%rn=6wPOGDo8O>G4$8r^Cy6ep7 zOdUIA%9P@0dZ?I(2T&kj> zD$czArfXTTGh?|C%4ePV6RD${G@(2)A3s-WQ)O{6-T zw93wxs?Oqx)ba@VhiPRCz z73HjMe!S&Md(vw7tZBY$QD$$tQZACScA{o203IsUd=;E4m(tnXaK$;)b&}Rx87=A2 zT&038P;m|$a1OWTDkfBsy+$Cz5&c#on;R-qhI2bd_FD_lh~?pOxmqe$bLmPoLsjRf z?T1)18I$Op&a+(S=uW#0e>1JM#nJT&kb%HsUZ>rTzYZ(mL)bbyfxlV!n~lFY_?wHr zdDc9YXT2HEUG{wZEx_MG{4K)YV*D+!mWK+}UG*4yDgKt>Z#n)};BO`VR^e|o{?_1c zt-ZEpwGY|(Vist0jva8;2hR}|^hWq1;cUPuqT6+j!zls|_Z-$^O|jbGSrEtRwWnHb zUi`+?x#%3-c6l_{JyaN>Om@6`Bwy_|Cz9@TWej6=UmEor&X07feD!oa7O7HoHd!;P znGtrlbG$XvGsro?N@S{4$`976XwDN|=cG=nJzE=Nxr%f0fHiZdn5k5-zj?rFAH?t_ z?hL04Skt)OP91PgvyaJGGnD-41I`)tl1$B-Ud)$r&X(;{q0BoyI$Q0jHhgntXV5w5 zXT@B?ISZ~i+jY+Aw0lx3Wl&t{oiDHS>S54xuH9>Q+Z*jo_VLyX$?j~kVf=ZW_Q?bG z<^lVZ0sGVe`}BdD4I6B)w*H2^K*gW}4MhQko%h3Y+Xyjj*nXX1AvFSDl(P_#s|{*9L`LyEUR5oZ&Pd=OvnPipt5k4`q9tVNg!4MY8F^@wA-TZgsf@Ov%oRxGpco$yU`3Ih>cI4n;4DIa6-d zb$clWh4V7|mW&x0&daTNne1q}l;<<~dM?AcjcLuGp2j`dS{7*-oc0RWd8K`eePe}B zfUi-GsNJ!R_PiZQ+qL zSSuED)pRjmLCe1h?eJ#Td5g}rAH3u~JIg2Kyp`>E8%Dm0bl#pi1SWO`D4|YIulTH{|=A?|9IYSBO+pz6BuJheS+pOuF>U@tq`u$E^xZrvZr*P-N z{Z?DHJc=`s^Mlk>G{o3=V4zqt%Yy~J734gWngIc^*7+eO#!x8n58FTV8Rq<`Q=_!O zvUDYn*?YA{;OUQH<0G!~6WAy{$LEgDb;zo!hd(kc@%?b zF4w4Trt>p))??h9&d=@D8LQ2ksXZP%+f#0gYNh;;oGX5jS_Zp~ZGqX#FVVZ6aGhTb z8ZPq;^4F}seHf^dv%rDWEU54~#d*@2q5S?7F12P1=lO!@H~alw|80!dGbLQJ%7tvg z`5oN;wCnty-QK2~G6`=#f^owhm?s{nXL0_(F8CwPKl?_Dn=81a%sGFu+Q%rz6O^3u z=RjZa8}t_pvU(xTUs3VDxz68JxAb3UJS_t(y3cSA!j)XY`3FpY#&!P5rbpe?(Qfut zX11z~(%}4yYx3_-`%m^{M*jy!Po|!x;9PR^4RiAt=~3y~b^0J!Oz z#W^s&53`;GErJLvSd74>CDyh;uN+M3Cecl~} z-U2&~%R7w2zEnGg{uRm>19Ujz&^eAk;L?%Us&aY@Tr#=@8n;c^L`RvJ+5WbnXQ_BO zHHKPIda`%>DnUm>6t(I^;LPXG4?V z233KZmmA?^&Sl0~eJ&tTdoxs`&5+nH1IfEwIRz1N5>Q_EjWKVoL8r2E0Yls<^9C@T z2FZeq)OOq|kk+KrIro#eWF6nE#vh%*F;9Rk+vjtS--5&72rFW0PnlwZwjvQ-=1c@G zorNtrV?pYV+MX@PYLuPB`_^;@5uJ*eF$9Ij;$VYY>66jGd&~e0u`mEo!r4MlwAEPSL!sh;8y?5gRMKyPo5=@ z;*zSgWUZ3RCadM-XyzKeNLBY0DCg92m1<=J?SQ8LKjUC0m+Xy$i=;l2jDw3=xbJ_V zzPq3Z&fkr|B}u0jU;;Q|N#vvpeZU=B}LW6!0G9IHD4Ts0a*1f0Z1*&DT!cs5N# zB6{ioWjSqG#(vy>!aozHoELu}H6NzS@ywhDt zc;U7GQ-=#))S91OOq_>~ML~6Y} z;7bmdDakd#9n$=eTooh@3eaL~sBx7#Lsg}Wuub}QJk?kr$k^QIn4PKQD+$_zWEi{` zflK>DS&y`B&|q$qaY+vr)?47}GE1-JurD>2sn<|lx(+F5nP($#$;DPPl?zr(ZP!N8 zb0iLm_|9eWvFmSZ(NpwXC_rh~BXH>kY*AXOmzA~dbw75vo`QOG9`8N_-6(}TPZbge zpPM8(7Ctviay4}ZObk5oZJ9$Wg+tGW#t07Gf@qf}q_|iP?U&>hIP?N!0Eam6bLfSl zhdFdB_FQ_A9QVk35P@3Ki;;#7&i2(ixFG2zk_$+BDW|OrBk5&c{DIUexX+KIKp{Rl z&DL~!IWlWH-G+UaUV$ys$+L(}Hx?N>y;6jt>11@jinI1bR`+%!p@Y5}flIFuWkFD} zH9=6lR^(r2fpnAPX1jp%??Z&h>KtMqCM$z~tr7?9K9N2XxzjLtD9^Wai95jQh z1STsqj%z`ARFc_~$rt73dNxzd;6X|aZ!RQzH;2IitE5f~5j0;z$L$~2uSfJp6?5#L(>1~onJ?D+D5F_pFk=lC;>=;JcJ2+G~ z9pW5A?}Q9m^9}?qy$f3nH#SD#Rxn5#WD3P1?SIRYbf+@u-D1*vlu4-!mmNpI|E;1M zu5Q?iL15k`HoaHb6bH=rNpdVO-!IA4)XAukc^jo=RIU+JegL{6Q29YbyYwL`C>E6; zmgE*tc{eful^pm{`4Q2>sJsVzE`3yvdt|<6>PH_#EXD|1Rv#k*$$Lc}ko-8OtqDW& z6JGp*)DpPN4@slmhsOnaXnhjdG#)>NeV0CsE#uL%h0Qg#7(9MPgrf0ibl=BW`vO(` zEFv+K?nmI#=R{2qjBG~`jGq_z2aJ5cNd}Bx5Q#8Lj8R{NfPnE!qVda0V`@8`)^$#4 z&jtL_U^7U>oNiB^$|Zhr6W6lxwp7DZjx9EhQ=t2b6c#pao^Fk=vVaEN*Kpv{*Cmg7 zMiXTqBkmiKdV338MMm5=IqXXO|HUhpfpJHh_rh8U)dUQqm7pNpT>0NRneg^g~ImrcQyKzSlilM$ueB z(ZkRdfubKF+NB>$QL!j`M3P%T(NB;8DB{46qMwQ$M$x0#bLnSt+#`3beKn-V5Dyr! zZS{UEF#5UV0E`~zw7Fpz{lbesAa{NJF!B}P!_iVb0Dgb?oH-=$w+%Q*6^VUvwD z21maZp=cZ#-3K_Ux;gK&f}TV)y8lxMT>6bD3Id5O2?FW2BL6!hA8?cb($gXl9`nYm z-$Ouv^as)SN2M`E=x<%y@P2VW9zyJtSB#s&QYDumyh&IZNyw$9ya>VfpZK-#BtOu= zObyqdc)@i~K8plzYNnESg2ojy9#-7?lh_ol!(!cRe`W#At-s*FrN2rZZ-N$E52n}O zBDMDx*dI)NB~cG=_%`=2?G{-rGWw^;HYWl1VE zDdhfVB{ooyeHNtP6g*XS=@4wSQ#v74Z(_N5HdT^iDL74%tEtUQLGz+>%Me^45S$KW z5fGe#XqVcgq*w^fl;jp5*p3WYm(x~+892|2KOhf58W?CC=tJNtJ(lJppGM#U?7OrOTSlN~3>$2WF$i2FLeU5` zx)*a+_41~#l1mVa!Lt;BOUp!0kbrDRkbuiYeua?_xXBQ3rAUP7VXRsO0U_XO(YQuw zOzjc^im!HN_!lk*zq4j8Q!}M3zuk>rEmZlcRaG{*bL)k24a$}q4=Tj1l|sWtuF%bL zC<|!BC2`==VUnjuCfr@yA`E4^9UiF|PxlbdbUT8>zSJUAHbMm*iDb0RQ3zam7Pfi} zvk3vP@y(@4CTGn!hmKa|bxL{bRC%e>S#j(ftr@)ykm9NbA=M=X9-|73o2nfv$+3`H zFUeJzQhL8xX_-)qgisrxDS}Ylh<52XDJGUsJ(Ao4p?Z-4gyO(YsEwkB3AG7(c+M!t z>N%rVJ30Yzz!Te5@6Up#6Ga+$I*HR3h4FN<7k@yyUIU)g&wYGsO6ozd8JRSjPQkuQ zr((-&@+@IfjU|Rnr-@KBn~d($Ijefks;hSfqR{!bAaH4`C<%gztq6kYOp!m!$Ojx` zz;w1qgvY!w=^O|Mn9dcA+my!Cg#sq!rKYfiCx1dAl_f#BVy23zm;c5;+iV=CkaV6D z7dCILZjJL)IHK;lt!Fr5t;;tB^bv|9?ZRAF%#x{G_qzNeU8%oJ&PQgJ~`~WG>k3N z$1{VCG-eq3jEGP)eT;6Kv#JM;Qn5Ua(a{SCT)IXy1kuAL1kqCz`B5VuaE(DvNhHE! z+t^cvfS_kgG&)LS%4YQJQg_qOgPWSdkGa0!D?fcNKDjrKXW+Sgc-5NOBzN+0g~&gJ z;CB>q#Mgpc9pg|%B@#=*mLH*8slo!9N>v=VRFgbCax);tdM4AJNY%Xsb^()VFNb|H z-HLPp?SlXsZ5)A1*J7*b#AXEObn)bL`Y(M(*C`X8Ehf0igw#b`R_y%gzbvYOW$dCL z%bp`PJXhHe$Fl1sIhJKNNOCoGJZhkBakl!_#B71tjnESTv*#h&rJJOXSeV@`$t}R_ z`N#m6ao~s9Eux2EHi12t_RDdPyhkN zIQ`QpQSHOoIz3Qcj4T>wFTuV`FU6K|=Gnn!8aoWmUM51(I5WCm&RP3>Rl5xl7#goY z;Lh)4Y*rZPF|2MFJ2GtvJ;L@8UPmi==$Sg+GnR0*l$CS^~wrUtZd)q-ewmlScQ zDk2Uo@0R3Pw7f@>)h(s^S0P%SEG2|5cR^VMU*3yom)<8O#q#C-lH3AcK7b713kQC_ zd{Fc-Up|CAmp&}V>XuTyf^;{c0U0)}-eUzaACU}z%srfz2t($hUVQkLQeD4~G#hkJ z{}}RV(%g%Emp+aylg2ZK4K~IY(tJXMqDfOLm6l1hKuGlq>)6mYS8T|yuKor|l@6Up$pNb?9^(dz;2qWreUi<-h zE6P6)f?^+=HtGTJ7&2%!{T%x)J&rB2$+Ln@G*%ck{X&GI*<^J8lC$=iYCVBN^uJ#r zaOu~gAP6P4APA)cBLAe34>-m^=_!#2k9A|tZy+F0`mJdEozj@PQlK<4)B=r?JGPx= zZXe;@@`Uf#>--~jzM|u+IQ)WLZg_JQj1Lu=o|e+X*7oRz`8^A0GW`JuF8xvRsQ3H2 zb~ISbNcvNxN<2|SJR|AP9I9WcHe{y1AOQ{YR|I$*h^=N37aL$ve={s<$v^aWRs27s z_-9n{a+B|1TxzM9hDjB>B*>_LO8Ng%<;OAV-;x~5sQ*Z^dTpw#KbqAtsb&eOrT_;K zq&fuA_~jk8x|JFqC(4`d(22B{*$Xm{+sB`0#5}M!k<(C+Wd48`(6q=3w8Yx!5wbJX_dYV~e5IJQ0ef zmeD<*v#Qsoj19B^kr*Ni5xBHS)CAeZb_ChASmc)&`GAuQyOxSXmq!#BXN=S8TO$p2F2iDKKo{3A#mAv4FE4 zdy>a{bxIfFGm@FLHd1eIfvd^PI+R28>Qq<*C6S6&ISc`w^kJ)q1RD?l*Qrf`E8Z`3 zgevSvDeNd!n7o#BP)x-uZGaNjIS8d^Nohx`(&C`hDao-=S|`cX6u&&CKN8k5lhz88 zx}Yk8Nyi}CrDLU>*xA#1Np68j8;}7^;=s?OZqdU`Iu3g-^~iCL{2WbJk9rXaB(Y)j zo-9b(DB?iUCQe%$M$++K`~mqyf`1C7wfl&4n(qH6AeSc6iP(4PBy5>To+)gsF~tz+ zWD$xclF_}Hv#Ou1Y7^)b#G&h-iom7QL`x7zY(@}Br;Gd#v+=_`{>5J7&2To|I8agPY$-Kt zcB z;sZ=NvpFUm#5Z)IDzaaS+@XqW>cTFG?ligE{TFsz{UD!qN|_g_GUNDku_VXxX_q7` zKI!jcw#=u6!l&I(6~QM9(Joyg<;3#oQb}%sPbp*opE&UI=`zv7e7YQaE?ptVich+F zbR{CeCpN6!r-e@gA`U)X#c2z}d`f%qVLoZ?K0a;LBjIY~(tOHb-=#rpnNOZ6Y^*WG z@M%bdqWNTWXF03llQw~Jh{G@#M&QzjXbJL(%?R?z7Wur954gzisUQ;Jk#B6e1_HvT zqG%jd8dF<@Pu|x|n*x-sk-6UE2Xkzuah76HNlFM?v_-c-nFTb9#&F=0BYC_T(yp*o z3?quvi)Vv~XBbsDR5PTo2C5y-L9#yne+V;SR0a#h-2o1i~t+cImG3TvJNl@Y9YE}~t! zUdoGQ%?*;=0&8wW2C#+$KWm;RdYCmgVb7(T$d1ZkX4wfJV}5ap2PHBu|h0 z)UzwzNG8+kBh~j7xVB8DH*naOT7e!DtBBqRA+*t(5a971wi-}uP5@B+6g(bKlemZ8 zqDpzIl=3!JihPM67F3gHYXBBkHVCY@OEK?I#l!*Yost|2tUDxG{qDv0MeLSYwOm;B zE@+Ej)t!iT>D^LPEUVrl$t|$zE@S|!IPkOTy`qO%^*-#m^nN*3zkBi3kUoHTV2W+4 z_h-S>2PFqE^&w7M9>&y%z4-9&UVH`k2(?`ggu9VZ6Y3+_cj+E%nNXfJY_hS&5bC2M z6iq0j`(vC{{qDtQ1>K8ibo`GaaOo4GCC;Zkzf*%v0fFSg^$nhjK9bB*5=mF}04!j_${8{=~< zpsDnE9Jus=!!UrvbA)xaUHV~|7NkV3wx3W?*;wgm`Yxhf`koXNOQG*eatjoC5E(!r4*V4Qf#_ihJ%l}%ekjN4j<%^EJ&af| zh%Kx4USZIWL>>(KF{jNBGw2a7K72>psP_?Qr|$GWK{idGpJLyoN3mrBdA6{*#uh`M zpNUX3fsF3QIIFs&ZET>QBNCncaRe^?LevEL!*&Gu^GlI`!pH}lWcc$dkqD1+W7Mx9 zApAKX8lO}eQ+!LLYnNV$qbdBDI+>eCe2K<}8hZ8D!x`wa_d^86MDF8xmO zct0|UvWvmxVDruZWQJjKISbB9d`aEBLqiJt={BYZ)B zR_gyE>i??L%c3Z;lbSwqN_ItQRv!p5x6u@lmscmRs<;Xz4-*poIfJT8a8I*(>P1`1-61+EtZ z<{S>yP3Eu$Iv1&EhHVJ&@C;i`7&ah4n1kG84m*O*SK9kT`*x-MAUB!AS{fL`wF)xk z0#SdVQXj{deo2mH%nnIbzdYmB!CL0aD&fmcsEOdqMTmCkVksk*FS{hU1-|S?2JnRg zKVK}-!+f~}doEon$Lg17Ts7jQEWj2vs@_M1EtiQX*m60itqQZ{3NJqV%QM#O z*RNp#&5|Mx@X1ff<9)v}U=4Gm6sZ%>%Mi~TDRZd4U)h+O#*hNHI|%U13tP<)E;zst zUV(CwSxRH&siHJjMRQGQmW34KrznjY8rZ=#39@64sNSno$FXCdB*(I2T#~D)6Hqs` z5N6Btm?QMK7K$S1aUG&vdbX4jOAl9)TcF2tkOB1Iz)z3oiXNuN_1MD~LgiSkxu7aX zHzErBV6*D|Quy&a5e7eQ;eQF1=dv^hiU7En}j*CQ@r}fosM@c`b+P`CqVR^g5)W8D5XTr8i)! znZkt!m~xQ&Dp9U@qf-ASQU7M8{vh{NBGfd{g=^)bi&|}mKZJ`#2U7m~`k)K*(T7l)xB3x% zSW1q?{N0jVm4~9i)~GMS#|!AhG?_5|BhVr(rI$&NK7)Re;q{oTSyjrED)_NEmQSI3 zAlq-vF^jk28~zpgC?Z|@7`9eBBILVdbgx8yoFnH~#zzOs#k9^J!a32eFU=b1d@^*zjE3x-u%bd1m>vd>(1rYiiqOtO< zsf$^(mOd}p9>6yE+3m`B1z?$3W4*ISV;3gj{6BdD>?;)n&YR_lYn!faX9AjDEIsO)|(1VB_ zpdVms&C!jgn)M;X;Ta02%!kc+;${6*B`Wl=Wcv{(wtHWKs?d*d==)kazFN!+b!QWo zWQut2GeM6ay-YvB)}^1athG>g!Zfd5%WkUBqey|Bi%?#fvRL1k*JHt|=J?1l{S0a7 z@Wo7Nq=q$)v9vCh!g&ml*3?{ye$G1`=u|^FSq%4a98X|bD4LUhdK#W=^H zV3fZyTA^P`?3`+O$Y;tEtZ)X>X`Ft=`?G17(<`}jjf(VZj#_P3t7DbT-QCr48OzS+ zbJgJuWg6+`rGdKX0E=|s3lMnkH8VO!PvW>AYNV0U(mm-Z#9=YsMU_!rdbx&Gm@DaG zc_>pvg@2>u;RU`oDMO2XD{%=sQ^eAN+`;L0tYL;V$E%ZC6quf7IeS~bwHm#lOlkPA zEQ=1QLmMCRDq{Ed5VPj9!z##V!?YqCNPpny8QI)mZG`^FnymS`(ZL+|rg2zi=W(qH&s4li(As*R@iF~{hyh(m+V%hpE6uoAt8w+j6Y z@n~!;aFj0%mp$RXE8)4kCJS!X!WznDM(H0SyM&vX=QP|rY0v^y!BBVxiCEYxH@5z$ z<2GgKpM1CgpXb1$*q~Jn-WD(Zi&f9C+SGc@^lwoq{RACC})(pc!JTwJs$W2&lP}Na`*Lv5(deH3HLm;%@nuc%O(p2pBdlet6M*%Rhi1@Y4{XLj!Kzgg{DjVLiQd$z$Qy8dtR9#I%lbMkFcI3R!V9U;kn#l z4Ph!YQ)1@@T8!EeZOy1vhu5D(9lW3LRB<;?C{6j2zmaJci*-nr^;rFmX7lm9bT(h% z&zF0PUeg@O+W`n+UA5u-KAOv7Q>-;ZHdc`xLd}%(QA<8Cq%j1psg2P*NMW%ZEHj$k zo6lm^jroWGspmHKWLm)5W>~w=h20Bzf2Oz2IW5AGy~&yfozG#d2wcR`KrYMjxje2kL5w6l4I+WrnBg zPF=&9r{=S?mUrf2#P~bMp@`gXtx|Bv6>|bS__b|vex!m$`)_JV@^IJLbnm5NX zT;#1S9LEW_U{%)n1%9etkXbMm)up4M9k=kM40VyLCXWSghQ}-G(mF}Ti5-`yUD%iG zyxtgAWv*b>Hlbz?Jdv(X&+LVT%emA=g-vYE;=)xNEG^u`k;@8K^A|z8)Z{s1vnj`j zDaY1Lk+re0_OmTUtoIqQ0sD65pcX7I$V*Hs3JETHW#LvXb5-FI_T6f%fVie0-x{A= zcoYdWYaxHX5nZGvEvjaS-D1>nT;B1RvB4QVbvxJt-op2K_EfVv^vSzIy$~Isjo8YX bbXa|!HsJtY*2C7mWq?lL@Wu?v-SB?^CgUVH literal 0 HcmV?d00001 diff --git a/docs/sphinx/.doctrees/source/lm_client.common.doctree b/docs/sphinx/.doctrees/source/lm_client.common.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ee28fc9f7329d0aaf198c7a93e85e059994d29c2 GIT binary patch literal 172997 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 literal 0 HcmV?d00001 diff --git a/docs/sphinx/.nojekyll b/docs/sphinx/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/sphinx/_modules/index.html b/docs/sphinx/_modules/index.html new file mode 100644 index 0000000..cd396af --- /dev/null +++ b/docs/sphinx/_modules/index.html @@ -0,0 +1,109 @@ + + + + + + + Overview: module code — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + +

+ + + + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/auth.html b/docs/sphinx/_modules/lm_client/apis/auth.html new file mode 100644 index 0000000..138658c --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/auth.html @@ -0,0 +1,125 @@ + + + + + + + lm_client.apis.auth — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.auth

+"""Module containing authentication service calls
+"""
+try:
+    import http.cookiejar as cookie_jar
+    from urllib.parse import urlparse
+except:
+    import cookielib as cookie_jar
+    from urlparse import urlparse
+import json
+
+from lm_client.common.api_service import ApiService
+
+
+# .............................................................................
+
[docs]class AuthApiService(ApiService): + """ + """ + # ........................... +
[docs] def login(self, user_id, passwd): + """ + """ + policy_server = urlparse(self.api_client.server).netloc + policy = cookie_jar.DefaultCookiePolicy( + allowed_domains=(policy_server,)) + self.cookie_jar = cookie_jar.LWPCookieJar(policy=policy) + opener = urllib2.build_opener( + urllib2.HTTPCookieProcessor(self.cookie_jar)) + urllib2.install_opener(opener) + + response = self.api_client.post( + 'api/v2/login', user_id=user_id, pword=passwd) + return response
+ + # ........................... +
[docs] def logout(self): + + response = self.api_client.get('api/v2/logout') + return response
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/biotaphy_points.html b/docs/sphinx/_modules/lm_client/apis/biotaphy_points.html new file mode 100644 index 0000000..bca55f7 --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/biotaphy_points.html @@ -0,0 +1,107 @@ + + + + + + + lm_client.apis.biotaphy_points — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.biotaphy_points

+"""
+"""
+import json
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class BiotaPhyPointsApiService(RestService): + """ + """ + end_point = 'api/v2/biotaphypoints' + + # ........................... +
[docs] def post(self, taxon_ids): + """ + """ + return RestService.post( + self, self.end_point, body=json.dumps(taxon_ids), + headers={'Content-Type': 'application/json'})
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/env_layer.html b/docs/sphinx/_modules/lm_client/apis/env_layer.html new file mode 100644 index 0000000..70ef314 --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/env_layer.html @@ -0,0 +1,164 @@ + + + + + + + lm_client.apis.env_layer — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.env_layer

+"""
+"""
+
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class EnvLayerApiService(RestService): + """ + """ + end_point = 'api/v2/envlayer' + + # ........................... +
[docs] def count(self, after_time=None, alt_pred_code=None, before_time=None, + date_code=None, epsg_code=None, env_code=None, env_type_id=None, + gcm_code=None, scenario_id=None): + """Counts + + Args: + """ + return RestService.count( + self, '{}/count'.format(self.end_point), after_time=after_time, + alt_pred_code=alt_pred_code, before_time=before_time, + date_code=date_code, epsg_code=epsg_code, env_code=env_code, + env_type_id=env_type_id, gcm_code=gcm_code, + scenario_id=scenario_id)
+ + # ........................... +
[docs] def delete(self, env_layer_id): + """Attempts to delete + + Args: + """ + return RestService.delete( + self, '{}/{}'.format(self.end_point, env_layer_id))
+ + # ........................... +
[docs] def get(self, env_layer_id, interface=None): + """Attempts to get + + Args: + """ + return RestService.get( + self, '{}/{}'.format(self.end_point, env_layer_id), + interface=interface)
+ + # ........................... +
[docs] def list(self, after_time=None, alt_pred_code=None, + before_time=None, date_code=None, epsg_code=None, env_code=None, + env_type_id=None, gcm_code=None, scenario_id=None, limit=None, + offset=None): + """Gets a list + + Args: + """ + return RestService.list( + self, self.end_point, after_time=after_time, + alt_pred_code=alt_pred_code, before_time=before_time, + date_code=date_code, epsg_code=epsg_code, env_code=env_code, + env_type_id=env_type_id, gcm_code=gcm_code, + scenario_id=scenario_id, limit=limit, offset=offset)
+ + # ........................... +
[docs] def post(self, layer_content, layer_type, epsg_code, layer_name, + env_layer_type_id=None, additional_metadata=None, val_units=None, + env_code=None, gcm_code=None, alt_pred_code=None, date_code=None): + """ + """ + return RestService.post( + self, self.end_point, body=layer_content, + headers={'Content-Type': 'application/json'}, + layer_type=layer_type, epsg_code=epsg_code, layer_name=layer_name, + env_layer_type_id=env_layer_type_id, + additional_metadata=additional_metadata, val_units=val_units, + env_code=env_code, gcm_code=gcm_code, alt_pred_code=alt_pred_code, + date_code=date_code)
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/gbif_parser.html b/docs/sphinx/_modules/lm_client/apis/gbif_parser.html new file mode 100644 index 0000000..019945a --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/gbif_parser.html @@ -0,0 +1,107 @@ + + + + + + + lm_client.apis.gbif_parser — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.gbif_parser

+"""
+"""
+import json
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class GbifNameParserApiService(RestService): + """ + """ + end_point = 'api/v2/gbifparser' + + # ........................... +
[docs] def post(self, names_list): + """ + """ + return RestService.post( + self, self.end_point, body=json.dumps(names_list), + headers={'Content-Type': 'application/json'})
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/global_pam.html b/docs/sphinx/_modules/lm_client/apis/global_pam.html new file mode 100644 index 0000000..e3188b4 --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/global_pam.html @@ -0,0 +1,149 @@ + + + + + + + lm_client.apis.global_pam — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.global_pam

+"""
+"""
+
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class GlobalPamApiService(RestService): + """ + """ + end_point = 'api/v2/globalpam' + + # ........................... +
[docs] def get_facets(self): + """Attempts to get + + Args: + """ + return RestService.get(self, '{}/gridset'.format(self.end_point))
+ + # ........................... +
[docs] def list_matches(self, algorithm_code=None, bbox=None, + display_name=None, gridset_id=None, + model_scenario_code=None, point_max=None, point_min=None, + prj_scen_code=None, squid=None, taxon_kingdom=None, + taxon_phylum=None, taxon_class=None, taxon_order=None, + taxon_family=None, taxon_genus=None, taxon_species=None): + """Gets a list + + Args: + """ + return RestService.list( + self, self.end_point, algorithm_code=algorithm_code, bbox=bbox, + display_name=display_name, gridset_id=gridset_id, + model_scenario_code=model_scenario_code, point_max=point_max, + point_min=point_min, prj_scen_code=prj_scen_code, squid=squid, + taxon_kingdom=taxon_kingdom, taxon_phylum=taxon_phylum, + taxon_class=taxon_class, taxon_order=taxon_order, + taxon_family=taxon_family, taxon_genus=taxon_genus, + taxon_species=taxon_species)
+ + # ........................... +
[docs] def post_subset(self, archive_name, gridset_id, algorithm_code=None, + bbox=None, display_name=None, model_scenario_code=None, + point_max=None, point_min=None, prj_scen_code=None, + squid=None, taxon_kingdom=None, taxon_phylum=None, + taxon_class=None, taxon_order=None, taxon_family=None, + taxon_genus=None, taxon_species=None): + """ + """ + return RestService.post( + self, self.end_point, headers={'Content-Type': 'application/json'}, + archive_name=archive_name, gridset_id=gridset_id, + algorithm_code=algorithm_code, bbox=bbox, + display_name=display_name, model_scenario_code=model_scenario_code, + point_max=point_max, point_min=point_min, + prj_scen_code=prj_scen_code, squid=squid, + taxon_kingdom=taxon_kingdom, taxon_phylum=taxon_phylum, + taxon_class=taxon_class, taxon_order=taxon_order, + taxon_family=taxon_family, taxon_genus=taxon_genus, + taxon_species=taxon_species)
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/gridset.html b/docs/sphinx/_modules/lm_client/apis/gridset.html new file mode 100644 index 0000000..d8298dd --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/gridset.html @@ -0,0 +1,194 @@ + + + + + + + lm_client.apis.gridset — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.gridset

+"""
+"""
+
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class GridsetApiService(RestService): + """ + """ + end_point = 'api/v2/gridset' + + # ........................... +
[docs] def count(self, after_time=None, before_time=None, epsg_code=None, + meta_string=None, shapegrid_id=None): + """Counts + + Args: + """ + return RestService.count( + self, '{}/count'.format(self.end_point), after_time=after_time, + meta_string=meta_string, shapegrid_id=shapegrid_id, + before_time=before_time, epsg_code=epsg_code)
+ + # ........................... +
[docs] def delete(self, gridset_id): + """Attempts to delete a gridset + + Args: + """ + return RestService.delete( + self, '{}/{}'.format(self.end_point, gridset_id))
+ + # ........................... +
[docs] def delete_tree(self, gridset_id): + """Attempts to delete a gridset's tree + + Args: + """ + return RestService.delete( + self, '{}/{}/tree'.format(self.end_point, gridset_id))
+ + # ........................... +
[docs] def get(self, gridset_id, interface=None): + """Attempts to get + + Args: + """ + return RestService.get( + self, '{}/{}'.format(self.end_point, gridset_id), + interface=interface)
+ + # ........................... +
[docs] def get_hypotheses(self, gridset_id, interface=None): + """Attempts to get + + Args: + """ + return RestService.get( + self, '{}/{}/biogeo'.format(self.end_point, gridset_id), + interface=interface)
+ + # ........................... +
[docs] def get_tree(self, gridset_id, interface=None): + """Attempts to get + + Args: + """ + return RestService.get( + self, '{}/{}/tree'.format(self.end_point, gridset_id), + interface=interface)
+ + # ........................... +
[docs] def list(self, after_time=None, before_time=None, epsg_code=None, + limit=None, meta_string=None, offset=None, shapegrid_id=None): + """Gets a list + + Args: + """ + return RestService.list( + self, self.end_point, after_time=after_time, + before_time=before_time, epsg_code=epsg_code, limit=limit, + meta_string=meta_string, offset=offset, shapegrid_id=shapegrid_id)
+ + # ........................... +
[docs] def post(self, boom_post_json): + """ + """ + return RestService.post( + self, self.end_point, body=boom_post_json, + headers={'Content-Type': 'application/json'})
+ + # ........................... +
[docs] def post_analyses(self, gridset_id, do_calc=None, do_mcpa=None, + num_permutations=None): + return RestService.post( + self, '{}/{}/analysis'.format(self.end_point, gridset_id), + do_calc=do_calc, do_mcpa=do_mcpa, + num_permutations=num_permutations)
+ + # ........................... +
[docs] def post_tree(self, gridset_id, tree_id=None, tree_content=None, + tree_schema=None): + return RestService.post( + self, '{}/{}/tree'.format(self.end_point, gridset_id), + body=tree_content, tree_schema=tree_schema, tree_id=tree_id)
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/hint.html b/docs/sphinx/_modules/lm_client/apis/hint.html new file mode 100644 index 0000000..f89491a --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/hint.html @@ -0,0 +1,109 @@ + + + + + + + lm_client.apis.hint — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.hint

+"""
+"""
+
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class SpeciesHintApiService(RestService): + """ + """ + end_point = 'api/v2/hint' + + # ........................... +
[docs] def list(self, search_string, limit=None): + """Gets a list + + Args: + """ + return RestService.list( + self, '{}/{}'.format(self.end_point, search_string), + limit=limit)
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/layer.html b/docs/sphinx/_modules/lm_client/apis/layer.html new file mode 100644 index 0000000..ee9ba0b --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/layer.html @@ -0,0 +1,156 @@ + + + + + + + lm_client.apis.layer — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.layer

+"""
+"""
+
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class LayerApiService(RestService): + """ + """ + end_point = 'api/v2/layer' + + # ........................... +
[docs] def count(self, after_time=None, before_time=None, epsg_code=None, + squid=None): + """Counts + + Args: + """ + return RestService.count( + self, '{}/count'.format(self.end_point), after_time=after_time, + before_time=before_time, epsg_code=epsg_code, squid=squid)
+ + # ........................... +
[docs] def delete(self, layer_id): + """Attempts to delete + + Args: + """ + return RestService.delete( + self, '{}/{}'.format(self.end_point, layer_id))
+ + # ........................... +
[docs] def get(self, layer_id, interface=None): + """Attempts to get + + Args: + """ + return RestService.get( + self, '{}/{}'.format(self.end_point, layer_id), + interface=interface)
+ + # ........................... +
[docs] def list(self, after_time=None, before_time=None, epsg_code=None, + limit=None, offset=None, squid=None): + """Gets a list + + Args: + """ + return RestService.list( + self, self.end_point, after_time=after_time, + before_time=before_time, epsg_code=epsg_code, squid=squid, + limit=limit, offset=offset)
+ + # ........................... +
[docs] def post(self, layer_content, layer_type, epsg_code, layer_name, + env_layer_type_id=None, additional_metadata=None, val_units=None, + env_code=None, gcm_code=None, alt_pred_code=None, date_code=None): + """ + """ + return RestService.post( + self, self.end_point, body=layer_content, + headers={'Content-Type': 'application/json'}, + layer_type=layer_type, epsg_code=epsg_code, layer_name=layer_name, + env_layer_type_id=env_layer_type_id, + additional_metadata=additional_metadata, val_units=val_units, + env_code=env_code, gcm_code=gcm_code, alt_pred_code=alt_pred_code, + date_code=date_code)
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/occurrence.html b/docs/sphinx/_modules/lm_client/apis/occurrence.html new file mode 100644 index 0000000..76957b0 --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/occurrence.html @@ -0,0 +1,204 @@ + + + + + + + lm_client.apis.occurrence — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.occurrence

+"""Module containing functions for using the Occurrence service
+"""
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class OccurrenceApiService(RestService): + """ + """ + end_point = 'api/v2/occurrence/' + + # ........................... +
[docs] def count(self, after_status=None, after_time=None, before_status=None, + before_time=None, display_name=None, epsg_code=None, + gridset_id=None, minimum_number_of_points=None, squid=None, + status=None, user=None): + """Counts the number of occurrence sets matching the provided criteria. + + Args: + after_status (:obj:`int`, optional): Only return occurrence sets + that have a status value greater than this number. + after_time (:obj:`str`, optional): Only return occurrence sets + modified after this time (in ISO-8601 format). + before_status (:obj:`int`, optional): Only return occurrence sets + that have a status value less than this number. + before_time (:obj:`str`, optional): Only return occurrence sets + modified before this time (in ISO-8601 format). + display_name (:obj:`str`, optional): Only return occurrence sets + that have this display name. + epsg_code (:obj:`int`, optional): Only return occurrence sets that + have this EPSG code. + gridset_id (:obj:`int`, optional): Only return occurrence sets that + are part of the gridset with this ID. + minimum_number_of_points (:obj:`int`, optional): Only return + occurrence sets that have at least this many points. + squid (:obj:`str`, optional): Only return occurrence sets that have + this squid (hash value for species identifier). + status (:obj:`int`, optional): Only return occurrence sets that + have this status. + user (:obj:`str`, optional): If 'public', return public occurrence + sets. If 'anon', return anonymous occurrence sets. If None, + return the user's occurrence sets. + """ + return RestService.count( + self, '{}/count'.format(self.end_point), + after_status=after_status, after_time=after_time, + before_status=before_status, before_time=before_time, + display_name=display_name, epsg_code=epsg_code, + gridset_id=gridset_id, + minimum_number_of_points=minimum_number_of_points, squid=squid, + status=status, user=user)
+ + # ........................... +
[docs] def delete(self, occurrence_id): + """Attempts to delete the occurrence set specified by occurrence_id. + """ + return RestService.delete( + self, '{}/{}'.format(self.end_point, occurrence_id))
+ + # ........................... +
[docs] def get(self, occurrence_id, interface=None): + """Attempts to retrieve the occurrence set specified by the ID. + + Args: + occurrence_id (int): The ID number of the occurrence set to + retrieve. + interface (:obj:`str`, optional): If provided, request the response + in this interface. + """ + return RestService.get( + self, '{}{}'.format(self.end_point, occurrence_id), + interface=interface)
+ + # ........................... +
[docs] def list(self, after_status=None, after_time=None, before_status=None, + before_time=None, display_name=None, epsg_code=None, + gridset_id=None, limit=None, minimum_number_of_points=None, + offset=None, squid=None, status=None, user=None): + """Lists occurrence sets matching the provided criteria. + + Args: + after_status (:obj:`int`, optional): Only return occurrence sets + that have a status value greater than this number. + after_time (:obj:`str`, optional): Only return occurrence sets + modified after this time (in ISO-8601 format). + before_status (:obj:`int`, optional): Only return occurrence sets + that have a status value less than this number. + before_time (:obj:`str`, optional): Only return occurrence sets + modified before this time (in ISO-8601 format). + display_name (:obj:`str`, optional): Only return occurrence sets + that have this display name. + epsg_code (:obj:`int`, optional): Only return occurrence sets that + have this EPSG code. + gridset_id (:obj:`int`, optional): Only return occurrence sets that + are part of the gridset with this ID. + limit (:obj:`int`, optional): Only return this number of occurrence + sets. + minimum_number_of_points (:obj:`int`, optional): Only return + occurrence sets that have at least this many points. + offset (:obj:`int`, optional): Offset the occurrence sets returned + by this number. + squid (:obj:`str`, optional): Only return occurrence sets that have + this squid (hash value for species identifier). + status (:obj:`int`, optional): Only return occurrence sets that + have this status. + user (:obj:`str`, optional): If 'public', return public occurrence + sets. If 'anon', return anonymous occurrence sets. If None, + return the user's occurrence sets. + """ + return RestService.list( + self, self.end_point, after_status=after_status, + after_time=after_time, before_status=before_status, + before_time=before_time, display_name=display_name, + epsg_code=epsg_code, gridset_id=gridset_id, limit=limit, + minimum_number_of_points=minimum_number_of_points, offset=offset, + squid=squid, status=status, user=user)
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/ogc.html b/docs/sphinx/_modules/lm_client/apis/ogc.html new file mode 100644 index 0000000..f8fbdb1 --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/ogc.html @@ -0,0 +1,117 @@ + + + + + + + lm_client.apis.ogc — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.ogc

+"""
+"""
+
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class OgcApiService(RestService): + """ + """ + end_point = 'api/v2/ogc' + + # ........................... +
[docs] def get(self, map_name, bbox=None, bgcolor=None, color=None, coverage=None, + crs=None, exceptions=None, height=None, layer=None, layers=None, + point=None, request=None, format=None, service=None, sld=None, + sld_body=None, srs=None, styles=None, time=None, transparent=None, + version=None, width=None): + """Attempts to get + + Args: + """ + return RestService.get( + self, self.end_point, map_name=map_name, bbox=bbox, + bgcolor=bgcolor, color=color, coverage=coverage, crs=crs, + exceptions=exceptions, height=height, layer=layer, layers=layers, + point=point, request=request, format=format, service=service, + sld=sld, sld_body=sld_body, srs=srs, styles=styles, time=time, + transparent=transparent, version=version, width=width)
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/open_tree.html b/docs/sphinx/_modules/lm_client/apis/open_tree.html new file mode 100644 index 0000000..a655c98 --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/open_tree.html @@ -0,0 +1,107 @@ + + + + + + + lm_client.apis.open_tree — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.open_tree

+"""
+"""
+import json
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class OpenTreeApiService(RestService): + """ + """ + end_point = 'api/v2/opentree' + + # ........................... +
[docs] def post(self, taxon_ids): + """ + """ + return RestService.post( + self, self.end_point, body=json.dumps(taxon_ids), + headers={'Content-Type': 'application/json'})
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/raw_solr.html b/docs/sphinx/_modules/lm_client/apis/raw_solr.html new file mode 100644 index 0000000..f418f2f --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/raw_solr.html @@ -0,0 +1,109 @@ + + + + + + + lm_client.apis.raw_solr — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.raw_solr

+"""
+"""
+
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class SolrRawApiService(RestService): + """ + """ + end_point = 'api/v2/rawsolr' + + # ........................... +
[docs] def post(self, collection, query_string): + """ + """ + return RestService.post( + self, self.end_point, + body=json.dumps( + {'collection': collection, 'query_string': query_string}), + headers={'Content-Type': 'application/json'})
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/scenario.html b/docs/sphinx/_modules/lm_client/apis/scenario.html new file mode 100644 index 0000000..44231e6 --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/scenario.html @@ -0,0 +1,152 @@ + + + + + + + lm_client.apis.scenario — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.scenario

+"""
+"""
+
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class ScenarioApiService(RestService): + """ + """ + end_point = 'api/v2/scenario' + + # ........................... +
[docs] def count(self, after_time=None, alt_pred_code=None, before_time=None, + date_code=None, epsg_code=None, gcm_code=None): + """Counts + + Args: + """ + return RestService.count( + self, '{}/count'.format(self.end_point), after_time=after_time, + alt_pred_code=alt_pred_code, before_time=before_time, + date_code=date_code, epsg_code=epsg_code, gcm_code=gcm_code)
+ + # ........................... +
[docs] def delete(self, scenario_id): + """Attempts to delete + + Args: + """ + return RestService.delete( + self, '{}/{}'.format(self.end_point, scenario_id))
+ + # ........................... +
[docs] def get(self, scenario_id, interface=None): + """Attempts to get + + Args: + """ + return RestService.get( + self, '{}/{}'.format(self.end_point, scenario_id), + interface=interface)
+ + # ........................... +
[docs] def list(self, after_time=None, alt_pred_code=None, before_time=None, + date_code=None, epsg_code=None, gcm_code=None, limit=None, + offset=None): + """Gets a list + + Args: + """ + return RestService.list( + self, self.end_point, after_time=after_time, + alt_pred_code=alt_pred_code, before_time=before_time, + date_code=date_code, epsg_code=epsg_code, gcm_code=gcm_code, + limit=limit, offset=offset)
+ + # ........................... +
[docs] def post(self, scenario_json): + """ + """ + return RestService.post( + self, self.end_point, body=scenario_json, + headers={'Content-Type': 'application/json'})
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/scenario_package.html b/docs/sphinx/_modules/lm_client/apis/scenario_package.html new file mode 100644 index 0000000..126a3fc --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/scenario_package.html @@ -0,0 +1,131 @@ + + + + + + + lm_client.apis.scenario_package — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.scenario_package

+"""
+"""
+
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class ScenarioPackageApiService(RestService): + """ + """ + end_point = 'api/v2/scenpackage' + + # ........................... +
[docs] def count(self, after_time=None, before_time=None, scenario_id=None): + """Counts + + Args: + """ + return RestService.count( + self, '{}/count'.format(self.end_point), after_time=after_time, + before_time=before_time, scenario_id=scenario_id)
+ + # ........................... +
[docs] def get(self, scenario_package_id, interface=None): + """Attempts to get + + Args: + """ + return RestService.get( + self, '{}/{}'.format(self.end_point, scenario_package_id), + interface=interface)
+ + # ........................... +
[docs] def list(self, after_time=None, before_time=None, limit=None, offset=None, + scenario_id=None): + """Gets a list + + Args: + """ + return RestService.list( + self, self.end_point, after_time=after_time, + scenario_id=scenario_id, before_time=before_time, limit=limit, + offset=offset)
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/sdm_project.html b/docs/sphinx/_modules/lm_client/apis/sdm_project.html new file mode 100644 index 0000000..5d42bb3 --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/sdm_project.html @@ -0,0 +1,168 @@ + + + + + + + lm_client.apis.sdm_project — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.sdm_project

+"""
+"""
+
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class SdmProjectApiService(RestService): + """ + """ + end_point = 'api/v2/sdmproject' + + # ........................... +
[docs] def count(self, after_status=None, after_time=None, + algorithm_code=None, before_status=None, before_time=None, + display_name=None, epsg_code=None, model_scenario_code=None, + occurrence_set_id=None, projection_scenario_code=None, + scenario_id=None, status=None, gridset_id=None): + """Counts + + Args: + """ + return RestService.count( + self, '{}/count'.format(self.end_point), after_status=after_status, + after_time=after_time, algorithm_code=algorithm_code, + before_status=before_status, before_time=before_time, + display_name=display_name, epsg_code=epsg_code, + model_scenario_code=model_scenario_code, + occurrence_set_id=occurrence_set_id, + projection_scenario_code=projection_scenario_code, + scenario_id=scenario_id, status=status, gridset_id=gridset_id)
+ + # ........................... +
[docs] def delete(self, sdmproject_id): + """Attempts to delete + + Args: + """ + return RestService.delete( + self, '{}/{}'.format(self.end_point, _id))
+ + # ........................... +
[docs] def get(self, sdmproject_id, interface=None): + """Attempts to get + + Args: + """ + return RestService.get( + self, '{}/{}'.format(self.end_point, sdmproject_id), + interface=interface)
+ + # ........................... +
[docs] def list(self, after_status=None, after_time=None, algorithm_code=None, + before_status=None, before_time=None, display_name=None, + epsg_code=None, limit=None, model_scenario_code=None, + occurrence_set_id=None, offset=None, + projection_scenario_code=None, scenario_id=None, status=None, + gridset_id=None): + """Gets a list + + Args: + """ + return RestService.list( + self, self.end_point, after_time=after_time, + scenario_id=scenario_id, before_time=before_time, limit=limit, + offset=offset, after_status=after_status, + algorithm_code=algorithm_code, before_status=before_status, + display_name=display_name, epsg_code=epsg_code, + model_scenario_code=model_scenario_code, status=status, + occurrence_set_id=occurrence_set_id, + projection_scenario_code=projection_scenario_code, + gridset_id=gridset_id)
+ + # ........................... +
[docs] def post(self, boom_post_json): + """ + """ + return RestService.post( + self, self.end_point, body=boom_post_json, + headers={'Content-Type': 'application/json'})
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/shapegrid.html b/docs/sphinx/_modules/lm_client/apis/shapegrid.html new file mode 100644 index 0000000..bcfe00f --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/shapegrid.html @@ -0,0 +1,247 @@ + + + + + + + lm_client.apis.shapegrid — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.shapegrid

+"""This module interacts with the shapegrid end-point
+
+Shapegrids are vector layers where each feature represents a site.  These are
+the same sites that are used for Presence Absence Matrices, PAMs, as well as
+encoded climate data and biogeographic hypotheses.  Lifemapper generated
+shapegrids are regularly spaced rectangular or hexagonal cells that form a
+grid.  The grid generally covers an area specified by a bounding box, but may
+also have some cells removed in a "cutout" operation so that the remaining
+cells cover the desired area of interest.
+"""
+
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class ShapegridApiService(RestService): + """This class is responsible for interactions with shapegrid end-point + """ + end_point = 'api/v2/shapegrid' + + # ........................... +
[docs] def count(self, after_time=None, before_time=None, cell_sides=None, + cell_size=None, epsg_code=None): + """Counts shapegrids matching the provided criteria + + Args: + after_time (:obj:`str`, optional): Count shapegrids modified after + this time (in ISO-8601 format). + before_time (:obj:`str`, optional): Count shapegrids modified + before this time (in ISO-8601 format). + cell_sides (:obj:`int`, optional): Count shapegrids that have cells + with the specified number of sides + (4 - rectangles, 6 - hexagons). + cell_size (:obj:`float`, optional): Count shapegrids with the + specified cell size (resolution). + epsg_code (:obj:`int`, optional): Count shapegrids that were + created using the specified spatial projection represented by + the EPSG code. + + Returns: + int - The number of shapegrids matching the provided criteria. + """ + return RestService.count( + self, '{}/count'.format(self.end_point), after_time=after_time, + before_time=before_time, cell_sides=cell_sides, + cell_size=cell_size, epsg_code=epsg_code)
+ + # ........................... +
[docs] def delete(self, shapegrid_id): + """Attempts to delete a shapegrid + + Args: + shapegrid_id (int): The database identifier of the shapegrid to + attempt to delete. + + Raises: + ForbiddenError: Thrown if the client user does not have permission + to delete the requested shapegrid. + NotFoundError: Thrown if the requested shapegrid is not found. + """ + return RestService.delete( + self, '{}/{}'.format(self.end_point, shapegrid_id))
+ + # ........................... +
[docs] def get(self, shapegrid_id, interface=None): + """Attempts to get a shapegrid + + Args: + shapegrid_id (int): The database identifier of the shapegrid to + attempt to retrieve. + interface (:obj:`str`, optional): The requested interface, or + format, for the shapegrid to be returned as. Valid options + are: EML, JSON (default), GeoJSON, and SHAPEFILE. + + Returns: + dict: If the interface is set to JSON or GEO_JSON, returns a + dictionary + bytes: If the interface is set to SHAPEFILE, the zipped shapefile + is returned. + + Raises: + ForbiddenError: Thrown if the client user does not have permission + to access the requested shapegrid. + NotFoundError: Thrown if the requested shapegrid is not found. + """ + return RestService.get( + self, '{}/{}'.format(self.end_point, shapegrid_id), + interface=interface)
+ + # ........................... +
[docs] def list(self, after_time=None, before_time=None, cell_sides=None, + cell_size=None, epsg_code=None, limit=None, offset=None): + """Gets a list of shapegrids matching the provided criteria + + Args: + after_time (:obj:`str`, optional): Return shapegrids modified after + this time (in ISO-8601 format). + before_time (:obj:`str`, optional): Return shapegrids modified + before this time (in ISO-8601 format). + cell_sides (:obj:`int`, optional): Return shapegrids that have + cells with the specified number of sides + (4 - rectangles, 6 - hexagons). + cell_size (:obj:`float`, optional): Return shapegrids with the + specified cell size (resolution). + epsg_code (:obj:`int`, optional): Return shapegrids that were + created using the specified spatial projection represented by + the EPSG code. + limit (:obj:`int`, optional): Return this number of shapegrids. + offset (:obj:`int`, optional): Offset the shapegrids returned by + this number. Use along with limit to implement paging. + + Return: + list of shapegrid metadata - Returns a list of shapegrids matching + the provided criteria. + """ + return RestService.list( + self, self.end_point, after_time=after_time, + before_time=before_time, cell_sides=cell_sides, + cell_size=cell_size, epsg_code=epsg_code, limit=limit, + offset=offset)
+ + # ........................... +
[docs] def post(self, name, epsg_code, cell_sides, cell_size, map_units, bbox, + cutout=None): + """Posts a new shapegrid to the server. + + Args: + name (str): A name for this shapegrid. + epsg_code (int): An EPSG code representing the map projection to + use when defining this shapegrid. + cell_sides (int): The number of sides each cell in the shapegrid + should have. Use 4 for rectangular cells and 6 for hexagonal + cells. + cell_size (float): The size of each side of each cell in the + shapegrid (in map_units). + map_units (str): The units for the cell_sizes of the map. Examples + are: + dd - decimal degrees + m - meters + ft - feet + bbox (tuple): Bounding box tuple for this shapegrid in the form + (minimum x, maximum x, minimum y, maximum y). + cutout (:obj:`str`, optional): An area of the shapegrid to "cut + out", meaning to remove cells that fall within that area. This + should be specified as Well-Known Text. + + Returns: + dict - A JSON dictionary of metadata about the newly posted + shapegrid. + + Raises: + BadRequestError: Raised if the post data required is invalid. + ConflictError: Raised if the post data already exists on the + server. + """ + return RestService.post( + self, self.end_point, headers={'Content-Type': 'application/json'}, + name=name, epsg_code=epsg_code, cell_sides=cell_sides, + cell_size=cell_size, map_units=map_units, bbox=bbox, cutout=cutout)
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/snippet.html b/docs/sphinx/_modules/lm_client/apis/snippet.html new file mode 100644 index 0000000..731187c --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/snippet.html @@ -0,0 +1,133 @@ + + + + + + + lm_client.apis.snippet — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.snippet

+"""Module containing functions for using the snippet service end-point
+"""
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class SnippetApiService(RestService): + """This class is used for working with the snippet service end-point + """ + end_point = 'api/v2/snippet/' + + # ........................... +
[docs] def list(self, after_time=None, agent=None, before_time=None, + catalog_number=None, collection=None, ident1=None, ident2=None, + operation=None, provider=None, url=None, who=None, why=None): + """Lists snippets matching the provided criteria. + + Args: + after_time (:obj:`str`, optional): Only return snippets modified + after this time (in ISO-8601 format). + agent (:obj:`str`, optional): Return snippets initiated by this + agent. + before_time (:obj:`str`, optional): Only return snippets modified + before this time (in ISO-8601 format). + catalog_number (:obj:`str`, optional): List snippets for occurrence + records with this catalog number. + collection (:obj:`str`, optional): List snippets for this + collection. + ident1 (:obj:`str`, optional): List snippets with this primary + object identifier. + ident2 (:obj:`str`, optional): List snippets with this secondary + object identifier. + operation (:obj:`str`, optional): List snippets for this operation. + provider (:obj:`str`, optional): List snippets for this occurrence + point provider. + url (:obj:`str`, optional): List snippets related to this URL. + who (:obj:`str`, optional): List snippets created by this entity. + why (:obj:`str`, optional): List snippets that were created for + this reason. + """ + return RestService.list( + self, self.end_point, after_time=after_time, agent=agent, + before_time=before_time, catalog_number=catalog_number, + collection=collection, ident1=ident1, ident2=ident2, + operation=operation, provider=provider, url=url, who=who, why=why)
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/taxonomy.html b/docs/sphinx/_modules/lm_client/apis/taxonomy.html new file mode 100644 index 0000000..be6883c --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/taxonomy.html @@ -0,0 +1,116 @@ + + + + + + + lm_client.apis.taxonomy — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.taxonomy

+"""This module contains functions for getting taxonomy hints
+"""
+
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class TaxonomyApiService(RestService): + """ + """ + end_point = 'api/v2/taxonomy' + + # ........................... +
[docs] def list(self, canonical_name=None, limit=None, scientific_name=None, + squid=None, taxon_class=None, taxon_family=None, taxon_genus=None, + taxon_key=None, taxon_kingdom=None, taxon_order=None, + taxon_phylum=None, user=None): + """Gets a list + + Args: + """ + return RestService.list( + self, self.end_point, canonical_name=canonical_name, limit=limit, + scientific_name=scientific_name, squid=squid, + taxon_class=taxon_class, taxon_family=taxon_family, + taxon_genus=taxon_genus, taxon_key=taxon_key, + taxon_kingdom=taxon_kingdom, taxon_order=taxon_order, + taxon_phylum=taxon_phylum, user=user)
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/tree.html b/docs/sphinx/_modules/lm_client/apis/tree.html new file mode 100644 index 0000000..a2bb8c3 --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/tree.html @@ -0,0 +1,199 @@ + + + + + + + lm_client.apis.tree — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.tree

+"""Module containing functions for using the tree service endpoint
+"""
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class TreeApiService(RestService): + """This class is used for working with the tree service end-point + """ + end_point = 'api/v2/tree/' + + # ........................... +
[docs] def count(self, after_time=None, before_time=None, has_branch_lengths=None, + is_binary=None, is_ultrametric=None, meta_string=None, name=None, + user=None): + """Counts the number of trees matching the provided criteria. + + Args: + after_time (:obj:`str`, optional): Only trees modified after this + time (in ISO-8601 format). + before_time (:obj:`str`, optional): Only return trees modified + before this time (in ISO-8601 format). + has_branch_lengths (:obj:`bool`, optional): Return trees that have + or do not have branch lengths. + is_binary (:obj:`bool`, optional): Return trees that are or are not + binary. + is_ultrametric (:obj:`bool`, optional): Return trees that are or + are not ultrametric. + meta_string (:obj:`str`, optional): Return trees with this metadata + string attached to them. + name (:obj:`str`, optional): Return trees that have this name. + user (:obj:`str`, optional): If 'public', return public trees. If + 'anon', return anonymous trees. If None, return the user's + trees. + """ + return RestService.count( + self, '{}/count'.format(self.end_point), after_time=after_time, + before_time=before_time, has_branch_lengths=has_branch_lengths, + is_binary=is_binary, is_ultrametric=is_ultrametric, + meta_string=meta_string, name=name, user=user)
+ + # ........................... +
[docs] def delete(self, tree_id): + """Attempts to delete the tree specified by tree_id. + """ + return RestService.delete( + self, '{}/{}'.format(self.end_point, tree_id))
+ + # ........................... +
[docs] def get(self, tree_id, interface=None): + """Attempts to retrieve the tree specified by the ID. + + Args: + tree (int): The ID number of the tree to retrieve. + interface (:obj:`str`, optional): If provided, request the response + in this interface. + """ + return RestService.get( + self, '{}{}'.format(self.end_point, tree_id), interface=interface)
+ + # ........................... +
[docs] def list(self, after_time=None, before_time=None, has_branch_lengths=None, + is_binary=None, is_ultrametric=None, limit=None, meta_string=None, + name=None, offset=None, user=None): + """Lists occurrence sets matching the provided criteria. + + Args: + after_time (:obj:`str`, optional): Only trees modified after this + time (in ISO-8601 format). + before_time (:obj:`str`, optional): Only return trees modified + before this time (in ISO-8601 format). + has_branch_lengths (:obj:`bool`, optional): Return trees that have + or do not have branch lengths. + is_binary (:obj:`bool`, optional): Return trees that are or are not + binary. + is_ultrametric (:obj:`bool`, optional): Return trees that are or + are not ultrametric. + limit (:obj:`int`, optional): Return up to this number of trees. + meta_string (:obj:`str`, optional): Return trees with this metadata + string attached to them. + name (:obj:`str`, optional): Return trees that have this name. + offset (:obj:`int`, optional): Offset the list of returned trees by + this number. + user (:obj:`str`, optional): If 'public', return public trees. If + 'anon', return anonymous trees. If None, return the user's + trees. + """ + return RestService.list( + self, self.end_point, after_time=after_time, + before_time=before_time, has_branch_lengths=has_branch_lengths, + is_binary=is_binary, is_ultrametric=is_ultrametric, + limit=limit, meta_string=meta_string, name=name, offset=offset, + user=user)
+ + # ........................... +
[docs] def post(self, filename_or_flo, name, schema): + """Attempt to POST a new tree to the service end-point + + Args: + filename_or_flo (str or file-like object): A filename or file-like + object containing the tree data. + name (str): A name for this new tree. + schema (str): The tree schema (newick, nexus, nexml). + """ + try: + body = filename_or_flo.read() + except: # Try opening the file + with open(filename_or_flo) as in_file: + body = in_file.read() + return RestService.post( + self, self.end_point, body=body, name=name, schema=schema)
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/apis/upload.html b/docs/sphinx/_modules/lm_client/apis/upload.html new file mode 100644 index 0000000..01520e6 --- /dev/null +++ b/docs/sphinx/_modules/lm_client/apis/upload.html @@ -0,0 +1,127 @@ + + + + + + + lm_client.apis.upload — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.apis.upload

+"""Module containing functions for uploading data services
+"""
+import os
+
+from lm_client.common.api_service import RestService
+
+
+# .............................................................................
+
[docs]class UploadApiService(RestService): + """ + """ + end_point = 'api/v2/upload' + + # ........................... +
[docs] def biogeographic_hypotheses(self, filename, package_name): + if os.path.exists(filename): + return RestService.post( + self, self.end_point, + files={ + 'file': ( + filename, open(filename, 'rb'), 'application/zip')}, + file_name=package_name, upload_type='biogeo')
+ + # ........................... +
[docs] def occurrence(self, filename, metadata, data_name): + if os.path.exists(filename): + return RestService.post( + self, self.end_point, + files={ + 'file': (filename, open(filename, 'rb'), 'text/csv')}, + file_name=data_name, upload_type='occurrence', + metadata=metadata)
+ + # ........................... +
[docs] def tree(self, filename, tree_name): + if os.path.exists(filename): + return RestService.post( + self, self.end_point, + files={'file': (filename, open(filename, 'rb'))}, + file_name=tree_name, upload_type='tree')
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/client/client.html b/docs/sphinx/_modules/lm_client/client/client.html new file mode 100644 index 0000000..01a9c33 --- /dev/null +++ b/docs/sphinx/_modules/lm_client/client/client.html @@ -0,0 +1,307 @@ + + + + + + + lm_client.client.client — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.client.client

+"""Module containing the Lifemapper web service client
+
+Todo:
+    * Singleton?
+    * Save session?
+    * Acceptable versions?
+"""
+import requests
+
+from lm_client.apis.auth import AuthApiService
+from lm_client.apis.biotaphy_points import BiotaPhyPointsApiService
+from lm_client.apis.env_layer import EnvLayerApiService
+from lm_client.apis.gbif_parser import GbifNameParserApiService
+from lm_client.apis.global_pam import GlobalPamApiService
+from lm_client.apis.gridset import GridsetApiService
+from lm_client.apis.hint import SpeciesHintApiService
+from lm_client.apis.layer import LayerApiService
+from lm_client.apis.occurrence import OccurrenceApiService
+from lm_client.apis.ogc import OgcApiService
+from lm_client.apis.open_tree import OpenTreeApiService
+from lm_client.apis.raw_solr import SolrRawApiService
+from lm_client.apis.scenario import ScenarioApiService
+from lm_client.apis.scenario_package import ScenarioPackageApiService
+from lm_client.apis.sdm_project import SdmProjectApiService
+from lm_client.apis.shapegrid import ShapegridApiService
+from lm_client.apis.snippet import SnippetApiService
+from lm_client.apis.taxonomy import TaxonomyApiService
+from lm_client.apis.upload import UploadApiService
+from lm_client.apis.tree import TreeApiService
+from lm_client.common.constants import HTTPMethod
+
+
+# .............................................................................
+class _Client(object):
+    """Base client class for communicating with a server.
+
+    Attributes:
+        __version__ (str): The version of this client.
+        UA_STRING (str): The User-Agent string this client sends to a server.
+        server (str): The base URL for a desired server.
+    """
+    __version__ = '4.0.0'
+    UA_STRING = ' '.join([
+        'lm_client/{}'.format(__version__),
+        '(Lifemapper Python Client Library;',
+        'http://lifemapper.org; lifemapper@ku.edu)'])
+    client_headers = {'User-Agent': UA_STRING}
+
+    # ...........................
+    def __init__(self, server):
+        """Constructor.
+
+        Args:
+            server (str): The base URL for a desired server to use.
+        """
+        self.server = server
+
+    # ...........................
+    def _get_headers(self, request_headers):
+        """Merges request headers with client default headers.
+
+        Args:
+            request_headers (:obj:`dict` or :obj:`None`): A dictionary of
+                headers to be sent to the specific request.
+
+        Returns:
+            dict - A merged dictionary of request headers.
+        """
+        if request_headers is None:
+            request_headers = {}
+        for header_name in self.client_headers.keys():
+            # Don't override existing headers
+            if header_name not in request_headers.keys():
+                request_headers[header_name] = self.client_headers[header_name]
+        return request_headers
+
+    # ...........................
+    def _make_url(self, relative_url):
+        """Assembles the full (base) URL for a request.
+
+        Args:
+            relative_url (str): The relative URL from the server root.
+
+        Returns:
+            str - A URL string
+        """
+        return '{}/{}'.format(self.server, relative_url)
+
+    # ...........................
+    def delete(self, relative_url, headers=None, **query_parameters):
+        """Sends a HTTP DELETE request to a URL.
+
+        Args:
+            relative_url (str): The relative URL from the server root.
+            headers (:obj:`dict`, optional): Any headers to be sent to the
+                request.
+            **query_params (dict): A dictionary of query parameters to be sent
+                with the request.
+
+        Returns:
+            requests.models.Response - The response object generated from the
+                request.
+        """
+        return requests.delete(
+            self._make_url(relative_url), headers=self._get_headers(headers),
+            params=dict(query_parameters))
+
+    # ...........................
+    def get(self, relative_url, headers=None, **query_parameters):
+        """Sends a HTTP GET request to a URL.
+
+        Args:
+            relative_url (str): The relative URL from the server root.
+            headers (:obj:`dict`, optional): Any headers to be sent to the
+                request.
+            **query_params (dict): A dictionary of query parameters to be sent
+                with the request.
+
+        Returns:
+            requests.models.Response - The response object generated from the
+                request.
+        """
+        return requests.get(
+            self._make_url(relative_url), params=dict(query_parameters),
+            headers=self._get_headers(headers))
+
+    # ...........................
+    def post(self, relative_url, files=None, headers=None, **query_parameters):
+        """Sends an HTTP POST request to a URL.
+
+        Args:
+            relative_url (str): The relative URL from the server root.
+            files (:obj:`dict`, optional): Keys should be file query parameter
+                names and values should be tuples of (file name, content,
+                content-type (optional)).
+            headers (:obj:`dict`, optional): Any headers to be sent to the
+                request.
+            **query_params (dict): A dictionary of query parameters to be sent
+                with the request.
+
+        Returns:
+            requests.models.Response - The response object generated from the
+                request.
+        """
+        if files is not None:
+            return requests.post(
+                self._make_url(relative_url),
+                headers=self._get_headers(headers), params=query_parameters,
+                files=files)
+        else:
+            return requests.post(
+                self._make_url(relative_url),
+                headers=self._get_headers(headers), data=query_parameters)
+
+
+# .............................................................................
+
[docs]class LmApiClient(object): + """A Lifemapper API Client object used to make service requests. + + Attributes: + auth (AuthApiService): Service end-point for authentication requests. + biotaphy_points (BiotaPhyPointsApiService): Service end-point for + querying the available data counts from iDigBio for a group of + species. + env_layer (EnvLayerApiService): Service end-point for environmental + layer requests. + gbif_parser (GbifNameParserApiService): Service end-point for searching + for accepted taxon names for provided species names. + global_pam (GlobalPamApiService): Service end-point for querying and + subsetting global PAMs. + gridset (GridsetApiService): Service end-point for making gridset + related requests. + hint (SpeciesHintApiService): Service end-point for searching for + species with existing data on the server. + layer (LayerApiService): Service end-point for making layer requests. + occurrence (OccurrenceApiService): Service end-point for making + occurrence set related requests. + ogc (OgcApiService): Service end-point for making OGC requests to + Lifemapper mapping services. + open_tree (OpenTreeApiService): Service end-point for making requests + to OpenTree APIs. + raw_solr (SolrRawApiService): Service end-point for making raw Solr + requests to the server. + scenario (ScenarioApiService): Service end-point for scenario requests. + scenario_package (ScenarioPackageApiService): Service end-point for + scenario package requests. + sdm_project (SdmProjectApiService): Service end-point for SDM + projection requests. + shapegrid (ShapegridApiService): Service end-point for shapegrid + requests. + snippet (SnippetApiService): Service end-point for snippet listings. + taxonomy (TaxonomyApiService): Service end-point for taxonomy searches. + tree (TreeApiService): Service end-point for tree requests. + upload (UploadApiService): Service end-point for large file uploads. + """ + def __init__(self): + """Constructor + """ + self._client = _Client('http://svc.lifemapper.org') + + self.auth = AuthApiService(self._client) + self.biotaphy_points = BiotaPhyPointsApiService(self._client) + self.env_layer = EnvLayerApiService(self._client) + self.gbif_parser = GbifNameParserApiService(self._client) + self.global_pam = GlobalPamApiService(self._client) + self.gridset = GridsetApiService(self._client) + self.hint = SpeciesHintApiService(self._client) + self.layer = LayerApiService(self._client) + self.occurrence = OccurrenceApiService(self._client) + self.ogc = OgcApiService(self._client) + self.open_tree = OpenTreeApiService(self._client) + self.raw_solr = SolrRawApiService(self._client) + self.scenario = ScenarioApiService(self._client) + self.scenario_package = ScenarioPackageApiService(self._client) + self.sdm_project = SdmProjectApiService(self._client) + self.shapegrid = ShapegridApiService(self._client) + self.snippet = SnippetApiService(self._client) + self.taxonomy = TaxonomyApiService(self._client) + self.tree = TreeApiService(self._client) + self.upload = UploadApiService(self._client)
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/common/api_service.html b/docs/sphinx/_modules/lm_client/common/api_service.html new file mode 100644 index 0000000..a9ebd4c --- /dev/null +++ b/docs/sphinx/_modules/lm_client/common/api_service.html @@ -0,0 +1,274 @@ + + + + + + + lm_client.common.api_service — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.common.api_service

+"""Module containing base class for API service calls
+"""
+import json
+
+from lm_client.common.constants import INTERFACES
+from lm_client.common.exceptions import raise_http_exception
+
+
+# .............................................................................
+
[docs]def format_object(response, interface): + """Formats an object based on the interface provided + + Args: + response (requests.models.Response): A response object returned from a + request. + interface (str): An interface string that should be matched against + those in the INTERFACES constants class. + Raises: + Exception - If the interface is unknown, an Exception is raised. + + Returns: + dict - If the interface is a JSON interface, the response is encoded as + a JSON dictionary object. + str - If the interface is a text interface, the response is returned as + text. + bytes - If the interface is a binary interface, the response is + returned as bytes. + """ + if interface is None or interface.lower() in INTERFACES.json_interfaces(): + return response.json() + elif interface.lower() in INTERFACES.text_interfaces(): + return response.text + elif interface.lower() in INTERFACES.binary_interfaces(): + return response.content + else: + raise Exception('Unknown interface: {}'.format(interface))
+ + +# ............................................................................. +
[docs]class ApiService(object): + """Base class for API calls + + Attributes: + api_client (_Client): A client object used to make requests to a + server. + """ + # ........................... + def __init__(self, api_client): + """Constructor + + Args: + api_client (_Client): A client object to be used to make requests + to a server. + """ + self.api_client = api_client
+ + +# ............................................................................. +
[docs]class RestService(ApiService): + """Base class for RESTful API calls + """ + # ........................... +
[docs] def count(self, count_url, headers=None, **query_params): + """Counts the number of objects matching the provided parameters. + + Args: + count_url (str): A relative URL for counting objects. + headers (:obj:`dict`, optional): Any headers to be sent to the + request. + **query_params (dict): A dictionary of query parameters to be used + as criteria for counting. + + Returns: + int - The number of objects matching the specified criteria + """ + response = self.api_client.get( + count_url, headers=headers, **query_params) + raise_http_exception(response) + return format_object(response, INTERFACES.JSON)['count']
+ + # ........................... +
[docs] def delete(self, obj_url, headers=None, **query_params): + """Sends a delete request to the specified URL + + Args: + obj_url (str): A relative URL for the object in question. + headers (:obj:`dict`, optional): Any headers to be sent to the + request. + **query_params (dict): A dictionary of query parameters to be sent + along with the request. + + Raises: + ForbiddenError - Raised if the user does not have permission to + delete the specified object. + NotFoundError - Raised if the object was not found. + """ + response = self.api_client.delete( + obj_url, headers=headers, **query_params) + + raise_http_exception(response)
+ + # ........................... +
[docs] def get(self, obj_url, interface=INTERFACES.JSON, headers=None, + **query_params): + """Gets the object in the format specified by 'interface'. + + Args: + obj_url (str): The relative URL to the object. + raw (:obj:`bool`, optional): If True, return the raw response + file-like object from the request. If False, attempt to + process the response. + interface (:obj:`INTERFACES`, optional): The interface format to + request for the object. + headers (:obj:`dict`, optional): Any headers to be sent to the + request. + **query_params (dict): A dictionary of query parameters that may + be used in object retrieval. + + Returns: + dict - If the interface is a JSON interface, the response is + encoded as a JSON dictionary object. + str - If the interface is a text interface, the response is + returned as text. + bytes - If the interface is a binary interface, the response is + returned as bytes. + + Raises: + ForbiddenError - Raised if the user does not have permission to + access the specified object. + NotFoundError - Raised if the requested object was not found. + """ + if interface is not None: + obj_url = '{}/{}'.format(obj_url, interface) + response = self.api_client.get( + obj_url, headers=headers, **query_params) + raise_http_exception(response) + return format_object(response, interface)
+ + # ........................... +
[docs] def list(self, list_url, headers=None, **query_params): + """Lists the number of objects matching the provided parameters. + + Args: + list_url (str): A relative URL for listing objects. + headers (:obj:`dict`, optional): Any headers to be sent to the + request. + **query_params (dict): A dictionary of query parameters to be used + as criteria for listing. + + Returns: + List of JSON dictionaries - The list of matching objects is + returned as a list of dictionaries. + """ + response = self.api_client.get( + list_url, headers=headers, **query_params) + raise_http_exception(response) + return format_object(response, INTERFACES.JSON)
+ + # ........................... +
[docs] def post(self, post_url, files=None, headers=None, + **query_params): + """Submits a POST request to the server. + + Args: + post_url (str): A relative URL where the POST request will be made. + files (:obj:`dict`, optional): A dictionary with file query + parameter name keys and tuple values with (file name, open + file-like object or string, and optionally a mime-type for the + file). + headers (:obj:`dict`, optional): Any headers to be sent to the + request. + **query_params (dict): A dictionary of query parameters to be sent + with the POST request. + + Returns: + dict - A JSON dictionary returned from the POST request + + Raises: + BadRequestError - Raised if the parameters provided do not match + the parameters required. + ConflictError - Raised if the POST cannot complete because an + object already exists with those values. + """ + response = self.api_client.post( + post_url, files=files, headers=headers, **query_params) + raise_http_exception(response) + return format_object(response, INTERFACES.JSON)
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/common/constants.html b/docs/sphinx/_modules/lm_client/common/constants.html new file mode 100644 index 0000000..2447cd4 --- /dev/null +++ b/docs/sphinx/_modules/lm_client/common/constants.html @@ -0,0 +1,198 @@ + + + + + + + lm_client.common.constants — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.common.constants

+"""Module containing constants for the Lifemapper API Client
+"""
+
+
+# .............................................................................
+
[docs]class HTTPMethod(object): + """Class containing constants for supported HTTP methods + """ + DELETE = 'DELETE' + GET = 'GET' + POST = 'POST' + PUT = 'PUT'
+ + +# ............................................................................. +
[docs]class HttpStatus: + """Constants class for HTTP 1.1 Status Codes + + Note: + * HTTP 1.1 Status Codes as defined by + http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html + """ + # Informational 1xx + CONTINUE = 100 + SWITCHING_PROTOCOLS = 101 + + # Successful 2xx + OK = 200 + CREATED = 201 + ACCEPTED = 202 + NON_AUTHORITATIVE_INFORMATION = 203 + NO_CONTENT = 204 + RESET_CONTENT = 205 + PARTIAL_CONTENT = 206 + + # Redirectional 3xx + MULTIPLE_CHOICES = 300 + MOVED_PERMANENTLY = 301 + FOUND = 302 + SEE_OTHER = 303 + NOT_MODIFIED = 204 + USE_PROXY = 305 + TEMPORARY_REDIRECT = 307 + + # Client Error 4xx + BAD_REQUEST = 400 + UNAUTHORIZED = 401 + FORBIDDEN = 403 + NOT_FOUND = 404 + METHOD_NOT_ALLOWED = 405 + NOT_ACCEPTABLE = 406 + PROXY_AUTHENTICATION_REQUIRED = 407 + REQUEST_TIMEOUT = 408 + CONFLICT = 409 + GONE = 410 + LENGTH_REQUIRED = 411 + PRECONDITION_FAILED = 412 + REQUEST_ENTITY_TOO_LARGE = 413 + REQUEST_URI_TOO_LONG = 414 + UNSUPPORTED_MEDIA_TYPE = 415 + REQUEST_RANGE_NOT_SATISFIABLE = 416 + EXPECTATION_FAILED = 417 + + # Server Error 5xx + INTERNAL_SERVER_ERROR = 500 + NOT_IMPLEMENTED = 501 + BAD_GATEWAY = 502 + SERVICE_UNAVAILABLE = 503 + GATEWAY_TIMEOUT = 504 + HTTP_VERSION_NOT_SUPPORTED = 505
+ + +# ............................................................................. +
[docs]class INTERFACES(object): + """Class containing constants for available service format interfaces + """ + CSV = 'csv' + EML = 'eml' + GEO_JSON = 'geojson' + GTIFF = 'gtiff' + JSON = 'json' + KML = 'kml' + NEWICK = 'newick' + NEXUS = 'nexus' + PACKAGE = 'package' + PROGRESS = 'progress' + SHAPEFILE = 'shape' + + # ........................... +
[docs] @staticmethod + def binary_interfaces(): + """Returns a list of interfaces that have binary content + """ + return [INTERFACES.GTIFF, INTERFACES.PACKAGE, INTERFACES.SHAPEFILE]
+ + # ........................... +
[docs] @staticmethod + def json_interfaces(): + """Returns a list of interfaces that can be processed as JSON + """ + return [INTERFACES.GEO_JSON, INTERFACES.JSON, INTERFACES.PROGRESS]
+ + # ........................... +
[docs] @staticmethod + def text_interfaces(): + """Returns a list of interfaces that are text + """ + return [ + INTERFACES.CSV, INTERFACES.EML, INTERFACES.GEO_JSON, + INTERFACES.JSON, INTERFACES.KML, INTERFACES.NEWICK, + INTERFACES.NEXUS, INTERFACES.PROGRESS]
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_modules/lm_client/common/exceptions.html b/docs/sphinx/_modules/lm_client/common/exceptions.html new file mode 100644 index 0000000..fb281da --- /dev/null +++ b/docs/sphinx/_modules/lm_client/common/exceptions.html @@ -0,0 +1,162 @@ + + + + + + + lm_client.common.exceptions — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for lm_client.common.exceptions

+"""This module contains exceptions that the client may throw
+"""
+from lm_client.common.constants import HttpStatus
+
+
+# .............................................................................
+
[docs]class HttpError(Exception): + """Base class for HTTP Errors + """ + code = None + url = None + + # ........................... + def __init__(self, url): + err_msg = 'HTTP Error: {} ({}) for {}'.format( + self.code, self.message, url) + super(Exception, self).__init__(err_msg) + self.url = url
+ + +# ............................................................................. +
[docs]class BadRequestError(HttpError): + """Exception thrown when there is a problem with the request provided + """ + code = HttpStatus.BAD_REQUEST + message = 'Bad Request'
+ + +# ............................................................................. +
[docs]class ConflictError(HttpError): + """Exception thrown when there is a conflict posting data + + Note: + * This often occurs if a file with the same name already exists + """ + code = HttpStatus.CONFLICT + message = 'Conflict'
+ + +# ............................................................................. +
[docs]class ForbiddenError(HttpError): + """Exception thrown when the user does not have access to an object + """ + code = HttpStatus.FORBIDDEN + message = 'Forbidden'
+ + +# ............................................................................. +
[docs]class NotAcceptableError(HttpError): + """Exception thrown when cannot format in desired interface + """ + code = HttpStatus.NOT_ACCEPTABLE + message = 'No acceptable format available'
+ + +# ............................................................................. +
[docs]class NotFoundError(HttpError): + """Exception thrown when the requested object was not found + """ + code = HttpStatus.NOT_FOUND + message = 'Not found'
+ + +# ............................................................................. +
[docs]def raise_http_exception(response): + """Look at the status_code of the response and throw the proper exception + """ + if response.status_code == HttpStatus.BAD_REQUEST: + raise BadRequestError(response.url) + elif response.status_code == HttpStatus.FORBIDDEN: + raise ForbiddenError(response.url) + elif response.status_code == HttpStatus.NOT_ACCEPTABLE: + raise NotAcceptableError(response.url) + elif response.status_code == HttpStatus.NOT_FOUND: + raise NotFoundError(response.url)
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/_sources/index.rst.txt b/docs/sphinx/_sources/index.rst.txt new file mode 100644 index 0000000..1118280 --- /dev/null +++ b/docs/sphinx/_sources/index.rst.txt @@ -0,0 +1,26 @@ +.. Lifemapper Client Library documentation master file, created by + sphinx-quickstart on Wed Apr 3 16:15:12 2019. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to Lifemapper Client Library's documentation! +===================================================== + +The Lifemapper Client Library repository contains a python client for accessing +Lifemapper web services. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + pages/installation + pages/contributing + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/sphinx/_sources/pages/contributing.rst.txt b/docs/sphinx/_sources/pages/contributing.rst.txt new file mode 100644 index 0000000..73f96f4 --- /dev/null +++ b/docs/sphinx/_sources/pages/contributing.rst.txt @@ -0,0 +1,7 @@ +Contributing +============ + +If you have found or patched a bug, have a feature request, or want to add some +additional documentation, head over to our +`Github Contributing Page `_ +for more information on how to help out. \ No newline at end of file diff --git a/docs/sphinx/_sources/pages/installation.rst.txt b/docs/sphinx/_sources/pages/installation.rst.txt new file mode 100644 index 0000000..f0b8dff --- /dev/null +++ b/docs/sphinx/_sources/pages/installation.rst.txt @@ -0,0 +1,9 @@ +============ +Installation +============ + +The repository can be installed locally by downloading or cloning the code from +GitHub and running:: + + $ python setup.py install + diff --git a/docs/sphinx/_sources/source/lm_client.apis.rst.txt b/docs/sphinx/_sources/source/lm_client.apis.rst.txt new file mode 100644 index 0000000..31abb4d --- /dev/null +++ b/docs/sphinx/_sources/source/lm_client.apis.rst.txt @@ -0,0 +1,174 @@ +lm\_client\.apis package +======================== + +Submodules +---------- + +lm\_client\.apis\.auth module +----------------------------- + +.. automodule:: lm_client.apis.auth + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.biotaphy\_points module +----------------------------------------- + +.. automodule:: lm_client.apis.biotaphy_points + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.env\_layer module +----------------------------------- + +.. automodule:: lm_client.apis.env_layer + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.gbif\_parser module +------------------------------------- + +.. automodule:: lm_client.apis.gbif_parser + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.global\_pam module +------------------------------------ + +.. automodule:: lm_client.apis.global_pam + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.gridset module +-------------------------------- + +.. automodule:: lm_client.apis.gridset + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.hint module +----------------------------- + +.. automodule:: lm_client.apis.hint + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.layer module +------------------------------ + +.. automodule:: lm_client.apis.layer + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.occurrence module +----------------------------------- + +.. automodule:: lm_client.apis.occurrence + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.ogc module +---------------------------- + +.. automodule:: lm_client.apis.ogc + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.open\_tree module +----------------------------------- + +.. automodule:: lm_client.apis.open_tree + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.raw\_solr module +---------------------------------- + +.. automodule:: lm_client.apis.raw_solr + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.scenario module +--------------------------------- + +.. automodule:: lm_client.apis.scenario + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.scenario\_package module +------------------------------------------ + +.. automodule:: lm_client.apis.scenario_package + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.sdm\_project module +------------------------------------- + +.. automodule:: lm_client.apis.sdm_project + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.shapegrid module +---------------------------------- + +.. automodule:: lm_client.apis.shapegrid + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.snippet module +-------------------------------- + +.. automodule:: lm_client.apis.snippet + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.taxonomy module +--------------------------------- + +.. automodule:: lm_client.apis.taxonomy + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.tree module +----------------------------- + +.. automodule:: lm_client.apis.tree + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.apis\.upload module +------------------------------- + +.. automodule:: lm_client.apis.upload + :members: + :undoc-members: + :show-inheritance: + + +Module contents +--------------- + +.. automodule:: lm_client.apis + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/sphinx/_sources/source/lm_client.client.rst.txt b/docs/sphinx/_sources/source/lm_client.client.rst.txt new file mode 100644 index 0000000..9a9799a --- /dev/null +++ b/docs/sphinx/_sources/source/lm_client.client.rst.txt @@ -0,0 +1,22 @@ +lm\_client\.client package +========================== + +Submodules +---------- + +lm\_client\.client\.client module +--------------------------------- + +.. automodule:: lm_client.client.client + :members: + :undoc-members: + :show-inheritance: + + +Module contents +--------------- + +.. automodule:: lm_client.client + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/sphinx/_sources/source/lm_client.common.rst.txt b/docs/sphinx/_sources/source/lm_client.common.rst.txt new file mode 100644 index 0000000..5bcc660 --- /dev/null +++ b/docs/sphinx/_sources/source/lm_client.common.rst.txt @@ -0,0 +1,38 @@ +lm\_client\.common package +========================== + +Submodules +---------- + +lm\_client\.common\.api\_service module +--------------------------------------- + +.. automodule:: lm_client.common.api_service + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.common\.constants module +------------------------------------ + +.. automodule:: lm_client.common.constants + :members: + :undoc-members: + :show-inheritance: + +lm\_client\.common\.exceptions module +------------------------------------- + +.. automodule:: lm_client.common.exceptions + :members: + :undoc-members: + :show-inheritance: + + +Module contents +--------------- + +.. automodule:: lm_client.common + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/sphinx/_sources/source/lm_client.rst.txt b/docs/sphinx/_sources/source/lm_client.rst.txt new file mode 100644 index 0000000..58e65a4 --- /dev/null +++ b/docs/sphinx/_sources/source/lm_client.rst.txt @@ -0,0 +1,19 @@ +lm\_client package +================== + +Subpackages +----------- + +.. toctree:: + + lm_client.apis + lm_client.client + lm_client.common + +Module contents +--------------- + +.. automodule:: lm_client + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/sphinx/_sources/source/modules.rst.txt b/docs/sphinx/_sources/source/modules.rst.txt new file mode 100644 index 0000000..288346c --- /dev/null +++ b/docs/sphinx/_sources/source/modules.rst.txt @@ -0,0 +1,7 @@ +lm_client +========= + +.. toctree:: + :maxdepth: 4 + + lm_client diff --git a/docs/sphinx/_static/ajax-loader.gif b/docs/sphinx/_static/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..61faf8cab23993bd3e1560bff0668bd628642330 GIT binary patch literal 673 zcmZ?wbhEHb6krfw_{6~Q|Nno%(3)e{?)x>&1u}A`t?OF7Z|1gRivOgXi&7IyQd1Pl zGfOfQ60;I3a`F>X^fL3(@);C=vM_KlFfb_o=k{|A33hf2a5d61U}gjg=>Rd%XaNQW zW@Cw{|b%Y*pl8F?4B9 zlo4Fz*0kZGJabY|>}Okf0}CCg{u4`zEPY^pV?j2@h+|igy0+Kz6p;@SpM4s6)XEMg z#3Y4GX>Hjlml5ftdH$4x0JGdn8~MX(U~_^d!Hi)=HU{V%g+mi8#UGbE-*ao8f#h+S z2a0-5+vc7MU$e-NhmBjLIC1v|)9+Im8x1yacJ7{^tLX(ZhYi^rpmXm0`@ku9b53aN zEXH@Y3JaztblgpxbJt{AtE1ad1Ca>{v$rwwvK(>{m~Gf_=-Ro7Fk{#;i~+{{>QtvI yb2P8Zac~?~=sRA>$6{!(^3;ZP0TPFR(G_-UDU(8Jl0?(IXu$~#4A!880|o%~Al1tN literal 0 HcmV?d00001 diff --git a/docs/sphinx/_static/basic.css b/docs/sphinx/_static/basic.css new file mode 100644 index 0000000..607b5f5 --- /dev/null +++ b/docs/sphinx/_static/basic.css @@ -0,0 +1,648 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox input[type="text"] { + width: 170px; +} + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/sphinx/_static/classic.css b/docs/sphinx/_static/classic.css new file mode 100644 index 0000000..6cfbfb9 --- /dev/null +++ b/docs/sphinx/_static/classic.css @@ -0,0 +1,261 @@ +/* + * classic.css_t + * ~~~~~~~~~~~~~ + * + * Sphinx stylesheet -- classic theme. + * + * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: sans-serif; + font-size: 100%; + background-color: #11303d; + color: #000; + margin: 0; + padding: 0; +} + +div.document { + background-color: #1c4e63; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 230px; +} + +div.body { + background-color: #ffffff; + color: #000000; + padding: 0 20px 30px 20px; +} + +div.footer { + color: #ffffff; + width: 100%; + padding: 9px 0 9px 0; + text-align: center; + font-size: 75%; +} + +div.footer a { + color: #ffffff; + text-decoration: underline; +} + +div.related { + background-color: #133f52; + line-height: 30px; + color: #ffffff; +} + +div.related a { + color: #ffffff; +} + +div.sphinxsidebar { +} + +div.sphinxsidebar h3 { + font-family: 'Trebuchet MS', sans-serif; + color: #ffffff; + font-size: 1.4em; + font-weight: normal; + margin: 0; + padding: 0; +} + +div.sphinxsidebar h3 a { + color: #ffffff; +} + +div.sphinxsidebar h4 { + font-family: 'Trebuchet MS', sans-serif; + color: #ffffff; + font-size: 1.3em; + font-weight: normal; + margin: 5px 0 0 0; + padding: 0; +} + +div.sphinxsidebar p { + color: #ffffff; +} + +div.sphinxsidebar p.topless { + margin: 5px 10px 10px 10px; +} + +div.sphinxsidebar ul { + margin: 10px; + padding: 0; + color: #ffffff; +} + +div.sphinxsidebar a { + color: #98dbcc; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + + + +/* -- hyperlink styles ------------------------------------------------------ */ + +a { + color: #355f7c; + text-decoration: none; +} + +a:visited { + color: #355f7c; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + + + +/* -- body styles ----------------------------------------------------------- */ + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: 'Trebuchet MS', sans-serif; + background-color: #f2f2f2; + font-weight: normal; + color: #20435c; + border-bottom: 1px solid #ccc; + margin: 20px -20px 10px -20px; + padding: 3px 0 3px 10px; +} + +div.body h1 { margin-top: 0; font-size: 200%; } +div.body h2 { font-size: 160%; } +div.body h3 { font-size: 140%; } +div.body h4 { font-size: 120%; } +div.body h5 { font-size: 110%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #c60f0f; + font-size: 0.8em; + padding: 0 4px 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + background-color: #c60f0f; + color: white; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + text-align: justify; + line-height: 130%; +} + +div.admonition p.admonition-title + p { + display: inline; +} + +div.admonition p { + margin-bottom: 5px; +} + +div.admonition pre { + margin-bottom: 5px; +} + +div.admonition ul, div.admonition ol { + margin-bottom: 5px; +} + +div.note { + background-color: #eee; + border: 1px solid #ccc; +} + +div.seealso { + background-color: #ffc; + border: 1px solid #ff6; +} + +div.topic { + background-color: #eee; +} + +div.warning { + background-color: #ffe4e4; + border: 1px solid #f66; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre { + padding: 5px; + background-color: #eeffcc; + color: #333333; + line-height: 120%; + border: 1px solid #ac9; + border-left: none; + border-right: none; +} + +code { + background-color: #ecf0f3; + padding: 0 1px 0 1px; + font-size: 0.95em; +} + +th { + background-color: #ede; +} + +.warning code { + background: #efc2c2; +} + +.note code { + background: #d6d6d6; +} + +.viewcode-back { + font-family: sans-serif; +} + +div.viewcode-block:target { + background-color: #f4debf; + border-top: 1px solid #ac9; + border-bottom: 1px solid #ac9; +} + +div.code-block-caption { + color: #efefef; + background-color: #1c4e63; +} \ No newline at end of file diff --git a/docs/sphinx/_static/comment-bright.png b/docs/sphinx/_static/comment-bright.png new file mode 100644 index 0000000000000000000000000000000000000000..15e27edb12ac25701ac0ac21b97b52bb4e45415e GIT binary patch literal 756 zcmVgfIX78 z$8Pzv({A~p%??+>KickCb#0FM1rYN=mBmQ&Nwp<#JXUhU;{|)}%&s>suq6lXw*~s{ zvHx}3C%<;wE5CH!BR{p5@ml9ws}y)=QN-kL2?#`S5d*6j zk`h<}j1>tD$b?4D^N9w}-k)bxXxFg>+#kme^xx#qg6FI-%iv2U{0h(Y)cs%5a|m%Pn_K3X_bDJ>EH#(Fb73Z zfUt2Q3B>N+ot3qb*DqbTZpFIn4a!#_R-}{?-~Hs=xSS6p&$sZ-k1zDdtqU`Y@`#qL z&zv-~)Q#JCU(dI)Hf;$CEnK=6CK50}q7~wdbI->?E07bJ0R;!GSQTs5Am`#;*WHjvHRvY?&$Lm-vq1a_BzocI^ULXV!lbMd%|^B#fY;XX)n<&R^L z=84u1e_3ziq;Hz-*k5~zwY3*oDKt0;bM@M@@89;@m*4RFgvvM_4;5LB!@OB@^WbVT zjl{t;a8_>od-~P4 m{5|DvB&z#xT;*OnJqG}gk~_7HcNkCr0000W zanA~u9RIXo;n7c96&U)YLgs-FGlx~*_c{Jgvesu1E5(8YEf&5wF=YFPcRe@1=MJmi zag(L*xc2r0(slpcN!vC5CUju;vHJkHc*&70_n2OZsK%O~A=!+YIw z7zLLl7~Z+~RgWOQ=MI6$#0pvpu$Q43 zP@36QAmu6!_9NPM?o<1_!+stoVRRZbW9#SPe!n;#A_6m8f}|xN1;H{`0RoXQ2LM47 zt(g;iZ6|pCb@h2xk&(}S3=EVBUO0e90m2Lp5CB<(SPIaB;n4))3JB87Or#XPOPcum z?<^(g+m9}VNn4Y&B`g8h{t_$+RB1%HKRY6fjtd-<7&EsU;vs0GM(Lmbhi%Gwcfs0FTF}T zL{_M6Go&E0Eg8FuB*(Yn+Z*RVTBE@10eIOb3El^MhO`GabDll(V0&FlJi2k^;q8af zkENdk2}x2)_KVp`5OAwXZM;dG0?M-S)xE1IKDi6BY@5%Or?#aZ9$gcX)dPZ&wA1a< z$rFXHPn|TBf`e?>Are8sKtKrKcjF$i^lp!zkL?C|y^vlHr1HXeVJd;1I~g&Ob-q)& z(fn7s-KI}G{wnKzg_U5G(V%bX6uk zIa+<@>rdmZYd!9Y=C0cuchrbIjuRB_Wq{-RXlic?flu1*_ux}x%(HDH&nT`k^xCeC ziHi1!ChH*sQ6|UqJpTTzX$aw8e(UfcS^f;6yBWd+(1-70zU(rtxtqR%j z-lsH|CKQJXqD{+F7V0OTv8@{~(wp(`oIP^ZykMWgR>&|RsklFMCnOo&Bd{le} zV5F6424Qzl;o2G%oVvmHgRDP9!=rK8fy^!yV8y*4p=??uIRrrr0?>O!(z*g5AvL2!4z0{sq%vhG*Po}`a<6%kTK5TNhtC8}rXNu&h^QH4A&Sk~Autm*s~45(H7+0bi^MraaRVzr05hQ3iK?j` zR#U@^i0WhkIHTg29u~|ypU?sXCQEQgXfObPW;+0YAF;|5XyaMAEM0sQ@4-xCZe=0e z7r$ofiAxn@O5#RodD8rh5D@nKQ;?lcf@tg4o+Wp44aMl~c47azN_(im0N)7OqdPBC zGw;353_o$DqGRDhuhU$Eaj!@m000000NkvXXu0mjfjZ7Z_ literal 0 HcmV?d00001 diff --git a/docs/sphinx/_static/doctools.js b/docs/sphinx/_static/doctools.js new file mode 100644 index 0000000..0c15c00 --- /dev/null +++ b/docs/sphinx/_static/doctools.js @@ -0,0 +1,311 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var bbox = span.getBBox(); + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + var parentOfText = node.parentNode.parentNode; + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keyup(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); \ No newline at end of file diff --git a/docs/sphinx/_static/down-pressed.png b/docs/sphinx/_static/down-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..5756c8cad8854722893dc70b9eb4bb0400343a39 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`OFdm2Ln;`PZ^+1>KjR?B@S0W7 z%OS_REiHONoJ6{+Ks@6k3590|7k9F+ddB6!zw3#&!aw#S`x}3V3&=A(a#84O-&F7T z^k3tZB;&iR9siw0|F|E|DAL<8r-F4!1H-;1{e*~yAKZN5f0|Ei6yUmR#Is)EM(Po_ zi`qJR6|P<~+)N+kSDgL7AjdIC_!O7Q?eGb+L+qOjm{~LLinM4NHn7U%HcK%uoMYO5 VJ~8zD2B3o(JYD@<);T3K0RV0%P>BEl literal 0 HcmV?d00001 diff --git a/docs/sphinx/_static/down.png b/docs/sphinx/_static/down.png new file mode 100644 index 0000000000000000000000000000000000000000..1b3bdad2ceffae91cee61b32f3295f9bbe646e48 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6CVIL!hEy=F?b*7pIY7kW{q%Rg zx!yQ<9v8bmJwa`TQk7YSw}WVQ()mRdQ;TC;* literal 0 HcmV?d00001 diff --git a/docs/sphinx/_static/file.png b/docs/sphinx/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/docs/sphinx/_static/jquery.js b/docs/sphinx/_static/jquery.js new file mode 100644 index 0000000..ba171ca --- /dev/null +++ b/docs/sphinx/_static/jquery.js @@ -0,0 +1,10253 @@ +/*! + * jQuery JavaScript Library v3.2.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2017-09-03T00:14Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. + + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + + + + function DOMEval( code, doc ) { + doc = doc || document; + + var script = doc.createElement( "script" ); + + script.text = code; + doc.head.appendChild( script ).parentNode.removeChild( script ); + } +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.2.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Simple selector that can be filtered directly, removing non-Elements + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + // Complex selector, compare the two sets, removing non-Elements + qualifier = jQuery.filter( qualifier, elements ); + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; + } ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( jQuery.isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ jQuery.camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ jQuery.camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( jQuery.camelCase ); + } else { + key = jQuery.camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: jQuery.isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( ">tbody", elem )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rmargin = ( /^margin/ ); + +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + div.style.cssText = + "box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; + + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + jQuery.extend( support, { + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + computeStyleTests(); + return pixelMarginRightVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. +function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i, + val = 0; + + // If we already have the right measurement, avoid augmentation + if ( extra === ( isBorderBox ? "border" : "content" ) ) { + i = 4; + + // Otherwise initialize for horizontal or vertical properties + } else { + i = name === "width" ? 1 : 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with computed style + var valueIsBorderBox, + styles = getStyles( elem ), + val = curCSS( elem, name, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Fall back to offsetWidth/Height when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + if ( val === "auto" ) { + val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ]; + } + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + } ) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ); + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ name ] = value; + value = jQuery.css( elem, name ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = jQuery.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 13 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnothtmlwhite ) || []; + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, isFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +} ); + +jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +} ); + + + + +support.focusin = "onfocusin" in window; + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = jQuery.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = jQuery.isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 13 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available, append data to url + if ( s.data ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( jQuery.isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + +
+
+
+
+ + +

Index

+ +
+ A + | B + | C + | D + | E + | F + | G + | H + | I + | J + | K + | L + | M + | N + | O + | P + | R + | S + | T + | U + +
+

A

+ + + +
+ +

B

+ + + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

F

+ + + +
+ +

G

+ + + +
+ +

H

+ + + +
+ +

I

+ + + +
+ +

J

+ + + +
+ +

K

+ + +
+ +

L

+ + + +
+ +

M

+ + + +
+ +

N

+ + + +
+ +

O

+ + + +
+ +

P

+ + + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

U

+ + + +
+ + + +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/index.html b/docs/sphinx/index.html new file mode 100644 index 0000000..f680373 --- /dev/null +++ b/docs/sphinx/index.html @@ -0,0 +1,114 @@ + + + + + + + Welcome to Lifemapper Client Library’s documentation! — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + + +
+
+
+
+ +
+

Welcome to Lifemapper Client Library’s documentation!

+

The Lifemapper Client Library repository contains a python client for accessing +Lifemapper web services.

+
+

Contents:

+ +
+
+
+

Indices and tables

+ +
+ + +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/objects.inv b/docs/sphinx/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..6406b6ae1ceb2a2feb249bb6b1cb225373b045df GIT binary patch literal 2160 zcmV-$2#@z8AX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkRX=Y_@ zVQ_F|av(!&X=QG7AWUgua$$0L3L_v^WpZMd? zav*PJAarPHb0B7EY-J#6b0A}HZE$jBb8}^6Aa!$TZf78RY-wUH3V7PRoXvWpHWY^U zxeE7bx1(vd-4R=M=wP6LlbLSx$XKyyF`|H{<6Uo~x7RDF0NY>(gJYf3O^kuOpE&w- z^n;Rk%fdJkNijZh6N5 zfbdwV7unY+6eTo_d7h7c>SNvpBe7gZNmWi!Y~%`xDR+eibQ#Hlr<*-X zWt0>Em2m+ikL7oFvv;en5V5^gfrw;P-&1PwqR67GOG?&tlKH{f*DVEyvGW7rJxz{O_Ts6rjkPZ zRD_YppVTo#X1dOVYK1)tnsx)4bku`Lu-Qf@PCL(cQ?+w^Hx{VoyWx7dx0?xJBmz8# zkYTvXGLh6?(z9s8BF^a$!mI;eZQBmkAh}o^H3x_i==*Jk0jzB4j@9?1J&+x`q&j1t^ma>1bMW2oGn-ZoY0>-SAYD%U%F>Kca|#JOc50A6DP!y>xw- z_u`=}-YcT%?_Rd9xqIQd&Q78t)q0B7k=Y?7GY@jU@*d z7}OlHs6HS}c?DSRbz2L$&Um_sLYP;u*Q9`~bq#;<+5oof_rJ!xWxwp;wplb5vC91< z;}iF)x!Twpd8ci)#LxML41xW?J$OmO)*=8_!e6wW;oV~dvL)-(#tIhM& z1COs?L&0;~Z)w2k?N=1w@b)S_8oa%33NLcLYzEJ7uTsF%o0%dwyFFimhhy2j8Ts9d zmfNjN20HiZp1#h#zCjH}Sl$d7L4oAP;b;*0yBj?`QF|BqRc2dWFu6P?{Sx2EYPyP93b=KxU4O<)JdSv1jV}Wi{JQ!2E^lIv$>_Ogo^SZCK2w zp3-I1^BfOJ%cAxyc&c)U>7hN*oCZ(Mqzay4SC@%%$Gku&EtbSb2B8umaPy zC>uXH=9v0OGPZJ@u~4z|%reb9Q)b#K7tE`agQlq}sp=PvM~fngU?!cCZ_ZT(&6Nu% zrpnxzm{Su`f|XsQdI}@~=MxgxHN3!7Nes96u1A%?#KiA|UC;UarD~1pY0Pom>m%pQ z!_bbEih=4v9fw(lH>1dMo?*{u-PNhb^rt3bCOB&14iAnh3(u^h=-4wfDW3+&uJ@vPbuV)gqkW-xv-?HN<;D{#h+h1Hh^bgo8ihWAA^+KFnjXj2*$ zw7Sdw4J|J$?9&*O&DGNwEcoJLRnfwytV({6{A!FlH4Z~3h-rO8BxC;>r>um|EhO@c zI_wu8c2w8K2j+B~RkC$xCm^u-*1LW6%^_(*Km7=JQghX8H5=gd?OhE;g~$#Ch^ zw6Kc5j1r#hS(FqaEB{|fwP>hrE22P`Lj>ibi zRA$R)wGs(@Y|hc}!MWgLM5i2+!3X9o=qYpogj%Ta; zMrL{V(A>6?VR=*Qju#Otuox9`WJRxH%hOb3qr(lPr}0 literal 0 HcmV?d00001 diff --git a/docs/sphinx/pages/contributing.html b/docs/sphinx/pages/contributing.html new file mode 100644 index 0000000..77d1ca7 --- /dev/null +++ b/docs/sphinx/pages/contributing.html @@ -0,0 +1,101 @@ + + + + + + + Contributing — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + + +
+
+
+
+ +
+

Contributing

+

If you have found or patched a bug, have a feature request, or want to add some +additional documentation, head over to our +Github Contributing Page +for more information on how to help out.

+
+ + +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/pages/installation.html b/docs/sphinx/pages/installation.html new file mode 100644 index 0000000..955029a --- /dev/null +++ b/docs/sphinx/pages/installation.html @@ -0,0 +1,102 @@ + + + + + + + Installation — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + + +
+
+
+
+ +
+

Installation

+

The repository can be installed locally by downloading or cloning the code from +GitHub and running:

+
$ python setup.py install
+
+
+
+ + +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/py-modindex.html b/docs/sphinx/py-modindex.html new file mode 100644 index 0000000..88c5b86 --- /dev/null +++ b/docs/sphinx/py-modindex.html @@ -0,0 +1,240 @@ + + + + + + + Python Module Index — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + + + + +
+
+
+
+ + +

Python Module Index

+ +
+ l +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ l
+ lm_client +
    + lm_client.apis +
    + lm_client.apis.auth +
    + lm_client.apis.biotaphy_points +
    + lm_client.apis.env_layer +
    + lm_client.apis.gbif_parser +
    + lm_client.apis.global_pam +
    + lm_client.apis.gridset +
    + lm_client.apis.hint +
    + lm_client.apis.layer +
    + lm_client.apis.occurrence +
    + lm_client.apis.ogc +
    + lm_client.apis.open_tree +
    + lm_client.apis.raw_solr +
    + lm_client.apis.scenario +
    + lm_client.apis.scenario_package +
    + lm_client.apis.sdm_project +
    + lm_client.apis.shapegrid +
    + lm_client.apis.snippet +
    + lm_client.apis.taxonomy +
    + lm_client.apis.tree +
    + lm_client.apis.upload +
    + lm_client.client +
    + lm_client.client.client +
    + lm_client.common +
    + lm_client.common.api_service +
    + lm_client.common.constants +
    + lm_client.common.exceptions +
+ + +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/search.html b/docs/sphinx/search.html new file mode 100644 index 0000000..96ca946 --- /dev/null +++ b/docs/sphinx/search.html @@ -0,0 +1,104 @@ + + + + + + + Search — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Search

+
+ +

+ Please activate JavaScript to enable the search + functionality. +

+
+

+ From here you can search these documents. Enter your search + words into the box below and click "search". Note that the search + function will automatically search for all of the words. Pages + containing fewer words won't appear in the result list. +

+
+ + + +
+ +
+ +
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/searchindex.js b/docs/sphinx/searchindex.js new file mode 100644 index 0000000..f9ba0df --- /dev/null +++ b/docs/sphinx/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["index","pages/contributing","pages/installation","source/lm_client","source/lm_client.apis","source/lm_client.client","source/lm_client.common","source/modules"],envversion:52,filenames:["index.rst","pages/contributing.rst","pages/installation.rst","source/lm_client.rst","source/lm_client.apis.rst","source/lm_client.client.rst","source/lm_client.common.rst","source/modules.rst"],objects:{"":{lm_client:[3,0,0,"-"]},"lm_client.apis":{auth:[4,0,0,"-"],biotaphy_points:[4,0,0,"-"],env_layer:[4,0,0,"-"],gbif_parser:[4,0,0,"-"],global_pam:[4,0,0,"-"],gridset:[4,0,0,"-"],hint:[4,0,0,"-"],layer:[4,0,0,"-"],occurrence:[4,0,0,"-"],ogc:[4,0,0,"-"],open_tree:[4,0,0,"-"],raw_solr:[4,0,0,"-"],scenario:[4,0,0,"-"],scenario_package:[4,0,0,"-"],sdm_project:[4,0,0,"-"],shapegrid:[4,0,0,"-"],snippet:[4,0,0,"-"],taxonomy:[4,0,0,"-"],tree:[4,0,0,"-"],upload:[4,0,0,"-"]},"lm_client.apis.auth":{AuthApiService:[4,1,1,""]},"lm_client.apis.auth.AuthApiService":{login:[4,2,1,""],logout:[4,2,1,""]},"lm_client.apis.biotaphy_points":{BiotaPhyPointsApiService:[4,1,1,""]},"lm_client.apis.biotaphy_points.BiotaPhyPointsApiService":{end_point:[4,3,1,""],post:[4,2,1,""]},"lm_client.apis.env_layer":{EnvLayerApiService:[4,1,1,""]},"lm_client.apis.env_layer.EnvLayerApiService":{"delete":[4,2,1,""],count:[4,2,1,""],end_point:[4,3,1,""],get:[4,2,1,""],list:[4,2,1,""],post:[4,2,1,""]},"lm_client.apis.gbif_parser":{GbifNameParserApiService:[4,1,1,""]},"lm_client.apis.gbif_parser.GbifNameParserApiService":{end_point:[4,3,1,""],post:[4,2,1,""]},"lm_client.apis.global_pam":{GlobalPamApiService:[4,1,1,""]},"lm_client.apis.global_pam.GlobalPamApiService":{end_point:[4,3,1,""],get_facets:[4,2,1,""],list_matches:[4,2,1,""],post_subset:[4,2,1,""]},"lm_client.apis.gridset":{GridsetApiService:[4,1,1,""]},"lm_client.apis.gridset.GridsetApiService":{"delete":[4,2,1,""],count:[4,2,1,""],delete_tree:[4,2,1,""],end_point:[4,3,1,""],get:[4,2,1,""],get_hypotheses:[4,2,1,""],get_tree:[4,2,1,""],list:[4,2,1,""],post:[4,2,1,""],post_analyses:[4,2,1,""],post_tree:[4,2,1,""]},"lm_client.apis.hint":{SpeciesHintApiService:[4,1,1,""]},"lm_client.apis.hint.SpeciesHintApiService":{end_point:[4,3,1,""],list:[4,2,1,""]},"lm_client.apis.layer":{LayerApiService:[4,1,1,""]},"lm_client.apis.layer.LayerApiService":{"delete":[4,2,1,""],count:[4,2,1,""],end_point:[4,3,1,""],get:[4,2,1,""],list:[4,2,1,""],post:[4,2,1,""]},"lm_client.apis.occurrence":{OccurrenceApiService:[4,1,1,""]},"lm_client.apis.occurrence.OccurrenceApiService":{"delete":[4,2,1,""],count:[4,2,1,""],end_point:[4,3,1,""],get:[4,2,1,""],list:[4,2,1,""]},"lm_client.apis.ogc":{OgcApiService:[4,1,1,""]},"lm_client.apis.ogc.OgcApiService":{end_point:[4,3,1,""],get:[4,2,1,""]},"lm_client.apis.open_tree":{OpenTreeApiService:[4,1,1,""]},"lm_client.apis.open_tree.OpenTreeApiService":{end_point:[4,3,1,""],post:[4,2,1,""]},"lm_client.apis.raw_solr":{SolrRawApiService:[4,1,1,""]},"lm_client.apis.raw_solr.SolrRawApiService":{end_point:[4,3,1,""],post:[4,2,1,""]},"lm_client.apis.scenario":{ScenarioApiService:[4,1,1,""]},"lm_client.apis.scenario.ScenarioApiService":{"delete":[4,2,1,""],count:[4,2,1,""],end_point:[4,3,1,""],get:[4,2,1,""],list:[4,2,1,""],post:[4,2,1,""]},"lm_client.apis.scenario_package":{ScenarioPackageApiService:[4,1,1,""]},"lm_client.apis.scenario_package.ScenarioPackageApiService":{count:[4,2,1,""],end_point:[4,3,1,""],get:[4,2,1,""],list:[4,2,1,""]},"lm_client.apis.sdm_project":{SdmProjectApiService:[4,1,1,""]},"lm_client.apis.sdm_project.SdmProjectApiService":{"delete":[4,2,1,""],count:[4,2,1,""],end_point:[4,3,1,""],get:[4,2,1,""],list:[4,2,1,""],post:[4,2,1,""]},"lm_client.apis.shapegrid":{ShapegridApiService:[4,1,1,""]},"lm_client.apis.shapegrid.ShapegridApiService":{"delete":[4,2,1,""],count:[4,2,1,""],end_point:[4,3,1,""],get:[4,2,1,""],list:[4,2,1,""],post:[4,2,1,""]},"lm_client.apis.snippet":{SnippetApiService:[4,1,1,""]},"lm_client.apis.snippet.SnippetApiService":{end_point:[4,3,1,""],list:[4,2,1,""]},"lm_client.apis.taxonomy":{TaxonomyApiService:[4,1,1,""]},"lm_client.apis.taxonomy.TaxonomyApiService":{end_point:[4,3,1,""],list:[4,2,1,""]},"lm_client.apis.tree":{TreeApiService:[4,1,1,""]},"lm_client.apis.tree.TreeApiService":{"delete":[4,2,1,""],count:[4,2,1,""],end_point:[4,3,1,""],get:[4,2,1,""],list:[4,2,1,""],post:[4,2,1,""]},"lm_client.apis.upload":{UploadApiService:[4,1,1,""]},"lm_client.apis.upload.UploadApiService":{biogeographic_hypotheses:[4,2,1,""],end_point:[4,3,1,""],occurrence:[4,2,1,""],tree:[4,2,1,""]},"lm_client.client":{client:[5,0,0,"-"]},"lm_client.client.client":{LmApiClient:[5,1,1,""]},"lm_client.client.client.LmApiClient":{auth:[5,3,1,""],biotaphy_points:[5,3,1,""],env_layer:[5,3,1,""],gbif_parser:[5,3,1,""],global_pam:[5,3,1,""],gridset:[5,3,1,""],hint:[5,3,1,""],layer:[5,3,1,""],occurrence:[5,3,1,""],ogc:[5,3,1,""],open_tree:[5,3,1,""],raw_solr:[5,3,1,""],scenario:[5,3,1,""],scenario_package:[5,3,1,""],sdm_project:[5,3,1,""],shapegrid:[5,3,1,""],snippet:[5,3,1,""],taxonomy:[5,3,1,""],tree:[5,3,1,""],upload:[5,3,1,""]},"lm_client.common":{api_service:[6,0,0,"-"],constants:[6,0,0,"-"],exceptions:[6,0,0,"-"]},"lm_client.common.api_service":{ApiService:[6,1,1,""],RestService:[6,1,1,""],format_object:[6,4,1,""]},"lm_client.common.api_service.ApiService":{api_client:[6,3,1,""]},"lm_client.common.api_service.RestService":{"delete":[6,2,1,""],count:[6,2,1,""],get:[6,2,1,""],list:[6,2,1,""],post:[6,2,1,""]},"lm_client.common.constants":{HTTPMethod:[6,1,1,""],HttpStatus:[6,1,1,""],INTERFACES:[6,1,1,""]},"lm_client.common.constants.HTTPMethod":{DELETE:[6,3,1,""],GET:[6,3,1,""],POST:[6,3,1,""],PUT:[6,3,1,""]},"lm_client.common.constants.HttpStatus":{ACCEPTED:[6,3,1,""],BAD_GATEWAY:[6,3,1,""],BAD_REQUEST:[6,3,1,""],CONFLICT:[6,3,1,""],CONTINUE:[6,3,1,""],CREATED:[6,3,1,""],EXPECTATION_FAILED:[6,3,1,""],FORBIDDEN:[6,3,1,""],FOUND:[6,3,1,""],GATEWAY_TIMEOUT:[6,3,1,""],GONE:[6,3,1,""],HTTP_VERSION_NOT_SUPPORTED:[6,3,1,""],INTERNAL_SERVER_ERROR:[6,3,1,""],LENGTH_REQUIRED:[6,3,1,""],METHOD_NOT_ALLOWED:[6,3,1,""],MOVED_PERMANENTLY:[6,3,1,""],MULTIPLE_CHOICES:[6,3,1,""],NON_AUTHORITATIVE_INFORMATION:[6,3,1,""],NOT_ACCEPTABLE:[6,3,1,""],NOT_FOUND:[6,3,1,""],NOT_IMPLEMENTED:[6,3,1,""],NOT_MODIFIED:[6,3,1,""],NO_CONTENT:[6,3,1,""],OK:[6,3,1,""],PARTIAL_CONTENT:[6,3,1,""],PRECONDITION_FAILED:[6,3,1,""],PROXY_AUTHENTICATION_REQUIRED:[6,3,1,""],REQUEST_ENTITY_TOO_LARGE:[6,3,1,""],REQUEST_RANGE_NOT_SATISFIABLE:[6,3,1,""],REQUEST_TIMEOUT:[6,3,1,""],REQUEST_URI_TOO_LONG:[6,3,1,""],RESET_CONTENT:[6,3,1,""],SEE_OTHER:[6,3,1,""],SERVICE_UNAVAILABLE:[6,3,1,""],SWITCHING_PROTOCOLS:[6,3,1,""],TEMPORARY_REDIRECT:[6,3,1,""],UNAUTHORIZED:[6,3,1,""],UNSUPPORTED_MEDIA_TYPE:[6,3,1,""],USE_PROXY:[6,3,1,""]},"lm_client.common.constants.INTERFACES":{CSV:[6,3,1,""],EML:[6,3,1,""],GEO_JSON:[6,3,1,""],GTIFF:[6,3,1,""],JSON:[6,3,1,""],KML:[6,3,1,""],NEWICK:[6,3,1,""],NEXUS:[6,3,1,""],PACKAGE:[6,3,1,""],PROGRESS:[6,3,1,""],SHAPEFILE:[6,3,1,""],binary_interfaces:[6,5,1,""],json_interfaces:[6,5,1,""],text_interfaces:[6,5,1,""]},"lm_client.common.exceptions":{BadRequestError:[6,6,1,""],ConflictError:[6,6,1,""],ForbiddenError:[6,6,1,""],HttpError:[6,6,1,""],NotAcceptableError:[6,6,1,""],NotFoundError:[6,6,1,""],raise_http_exception:[6,4,1,""]},"lm_client.common.exceptions.BadRequestError":{code:[6,3,1,""],message:[6,3,1,""]},"lm_client.common.exceptions.ConflictError":{code:[6,3,1,""],message:[6,3,1,""]},"lm_client.common.exceptions.ForbiddenError":{code:[6,3,1,""],message:[6,3,1,""]},"lm_client.common.exceptions.HttpError":{code:[6,3,1,""],url:[6,3,1,""]},"lm_client.common.exceptions.NotAcceptableError":{code:[6,3,1,""],message:[6,3,1,""]},"lm_client.common.exceptions.NotFoundError":{code:[6,3,1,""],message:[6,3,1,""]},lm_client:{apis:[4,0,0,"-"],client:[5,0,0,"-"],common:[6,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"],"4":["py","function","Python function"],"5":["py","staticmethod","Python static method"],"6":["py","exception","Python exception"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute","4":"py:function","5":"py:staticmethod","6":"py:exception"},terms:{"byte":[4,6],"class":[4,5,6],"default":4,"float":4,"function":4,"int":[4,6],"new":4,"public":4,"return":[4,6],"static":6,"throw":6,"true":6,Not:6,The:[0,2,4,6],These:4,Use:4,_client:6,about:4,absenc:4,accept:[5,6],access:[0,4,6],add:1,addit:1,additional_metadata:4,after:4,after_statu:4,after_tim:4,against:6,agent:4,algorithm_cod:4,along:[4,6],alreadi:[4,6],also:4,alt_pred_cod:4,ani:6,anon:4,anonym:4,api:[3,5,6,7],api_cli:[4,6],api_servic:[3,4,7],apiservic:[4,6],archive_nam:4,area:4,arg:4,attach:4,attempt:[4,6],auth:[3,5,7],authapiservic:[4,5],authent:[4,5],avail:[5,6],bad:6,bad_gatewai:6,bad_request:6,badrequesterror:[4,6],base:[4,5,6],bbox:4,becaus:6,befor:4,before_statu:4,before_tim:4,bgcolor:4,binari:[4,6],binary_interfac:6,biogeograph:4,biogeographic_hypothes:4,biotaphy_point:[3,5,7],biotaphypoint:4,biotaphypointsapiservic:[4,5],bool:[4,6],boom_post_json:4,bound:4,box:4,branch:4,bug:1,call:[4,6],can:[2,6],cannot:6,canonical_nam:4,catalog:4,catalog_numb:4,cell:4,cell_sid:4,cell_siz:4,client:[3,4,6,7],climat:4,clone:2,code:[2,4,6],collect:4,color:4,common:[3,4,7],complet:6,conflict:6,conflicterror:[4,6],constant:[3,7],contain:[0,4,5,6],content:[0,7],continu:6,contribut:0,count:[4,5,6],count_url:6,cover:4,coverag:4,creat:[4,6],criteria:[4,6],crs:4,csv:6,cut:4,cutout:4,data:[4,5,6],data_nam:4,databas:4,date_cod:4,decim:4,defin:[4,6],degre:4,delet:[4,6],delete_tre:4,desir:[4,6],dict:[4,6],dictionari:[4,6],displai:4,display_nam:4,do_calc:4,do_mcpa:4,document:1,doe:[4,6],download:2,each:4,eml:[4,6],encod:[4,6],end:[4,5],end_point:4,endpoint:4,entiti:4,env_cod:4,env_lay:[3,5,7],env_layer_id:4,env_layer_type_id:4,env_type_id:4,environment:5,envlay:4,envlayerapiservic:[4,5],epsg:4,epsg_cod:4,error:6,exampl:4,except:[3,4,7],exist:[4,5,6],expectation_fail:6,fall:4,fals:6,featur:[1,4],feet:4,file:[4,5,6],filenam:4,filename_or_flo:4,forbidden:6,forbiddenerror:[4,6],form:4,format:[4,6],format_object:6,found:[1,4,6],from:[2,5,6],gateway_timeout:6,gbif_pars:[3,5,7],gbifnameparserapiservic:[4,5],gbifpars:4,gcm_code:4,gener:4,geo_json:[4,6],geojson:[4,6],get:[4,6],get_facet:4,get_hypothes:4,get_tre:4,github:[1,2],global:5,global_pam:[3,5,7],globalpam:4,globalpamapiservic:[4,5],gone:6,greater:4,grid:4,gridset:[3,5,7],gridset_id:4,gridsetapiservic:[4,5],group:5,gtiff:6,has_branch_length:4,hash:4,have:[1,4,6],head:1,header:6,height:4,help:1,hexagon:4,hint:[3,5,7],how:1,html:6,http:6,http_version_not_support:6,httperror:6,httpmethod:6,httpstatu:6,hypothes:4,ident1:4,ident2:4,identifi:4,idigbio:5,implement:4,index:0,inform:1,initi:4,instal:0,interact:4,interest:4,interfac:[4,6],internal_server_error:6,invalid:4,is_binari:4,is_ultrametr:4,iso:4,json:[4,6],json_interfac:6,kei:6,kml:6,known:4,larg:5,layer:[3,5,7],layer_cont:4,layer_id:4,layer_nam:4,layer_typ:4,layerapiservic:[4,5],least:4,length:4,length_requir:6,less:4,lifemapp:[4,5,6],like:[4,6],limit:4,list:[4,5,6],list_match:4,list_url:6,lmapicli:5,local:2,login:4,logout:4,look:6,made:6,mai:[4,6],make:[5,6],mani:4,map:[4,5],map_nam:4,map_unit:4,match:[4,6],matric:4,maximum:4,mean:4,messag:6,meta_str:4,metadata:4,meter:4,method:6,method_not_allow:6,mime:6,minimum:4,minimum_number_of_point:4,model:6,model_scenario_cod:4,modifi:4,modul:[0,7],more:1,moved_perman:6,multiple_choic:6,name:[4,5,6],names_list:4,newick:[4,6],newli:4,nexml:4,nexu:[4,6],no_cont:6,non_authoritative_inform:6,none:[4,6],not_accept:6,not_found:6,not_impl:6,not_modifi:6,notacceptableerror:6,notfounderror:[4,6],num_permut:4,number:[4,6],obj_url:6,object:[4,5,6],occur:6,occurr:[3,5,7],occurrence_id:4,occurrence_set_id:4,occurrenceapiservic:[4,5],offset:4,often:6,ogc:[3,5,7],ogcapiservic:[4,5],onli:4,open:6,open_tre:[3,5,7],opentre:[4,5],opentreeapiservic:[4,5],oper:4,option:[4,6],org:6,our:1,out:[1,4],over:1,packag:7,package_nam:4,page:[0,1,4],pam:[4,5],paramet:[4,6],part:4,partial_cont:6,passwd:4,patch:1,permiss:[4,6],point:[4,5],point_max:4,point_min:4,post:[4,6],post_analys:4,post_subset:4,post_tre:4,post_url:6,precondition_fail:6,presenc:4,primari:4,prj_scen_cod:4,problem:6,process:6,progress:6,project:[4,5],projection_scenario_cod:4,proper:6,protocol:6,provid:[4,5,6],proxy_authentication_requir:6,put:6,python:[0,2],queri:[5,6],query_param:6,query_str:4,question:6,rais:[4,6],raise_http_except:6,raw:[5,6],raw_solr:[3,5,7],rawsolr:4,reason:4,record:4,rectangl:4,rectangular:4,regularli:4,rel:6,relat:[4,5],remain:4,remov:4,repositori:[0,2],repres:4,request:[1,4,5,6],request_entity_too_larg:6,request_range_not_satisfi:6,request_timeout:6,request_uri_too_long:6,requir:[4,6],reset_cont:6,resolut:4,respons:[4,6],rest:6,restservic:[4,6],retriev:[4,6],rfc2616:6,run:2,same:[4,6],scenario:[3,5,7],scenario_id:4,scenario_json:4,scenario_packag:[3,5,7],scenario_package_id:4,scenarioapiservic:[4,5],scenariopackageapiservic:[4,5],scenpackag:4,schema:4,scientific_nam:4,sdm:5,sdm_project:[3,5,7],sdmproject:4,sdmproject_id:4,sdmprojectapiservic:[4,5],search:[0,5],search_str:4,sec10:6,secondari:4,see_oth:6,send:6,sent:6,server:[4,5,6],servic:[0,4,5,6],service_unavail:6,set:[4,5],setup:2,shape:6,shapefil:[4,6],shapegrid:[3,5,7],shapegrid_id:4,shapegridapiservic:[4,5],should:[4,6],side:4,site:4,size:4,sld:4,sld_bodi:4,snippet:[3,5,7],snippetapiservic:[4,5],solr:5,solrrawapiservic:[4,5],some:[1,4],sourc:[4,5,6],space:4,spatial:4,speci:[4,5],specieshintapiservic:[4,5],specifi:[4,6],squid:4,srs:4,statu:[4,6],status_cod:6,str:[4,6],string:[4,6],style:4,submit:6,submodul:[3,7],subpackag:7,subset:5,support:6,switching_protocol:6,taxon:5,taxon_class:4,taxon_famili:4,taxon_genu:4,taxon_id:4,taxon_kei:4,taxon_kingdom:4,taxon_ord:4,taxon_phylum:4,taxon_speci:4,taxonomi:[3,5,7],taxonomyapiservic:[4,5],temporary_redirect:6,text:[4,6],text_interfac:6,than:4,them:4,thi:[4,6],those:6,thrown:[4,6],time:4,transpar:4,tree:[3,5,7],tree_cont:4,tree_id:4,tree_nam:4,tree_schema:4,treeapiservic:[4,5],tupl:[4,6],type:[4,6],ultrametr:4,unauthor:6,unit:4,unknown:6,unsupported_media_typ:6,upload:[3,5,7],uploadapiservic:[4,5],url:[4,6],use:4,use_proxi:6,used:[4,5,6],user:[4,6],user_id:4,using:4,val_unit:4,valid:4,valu:[4,6],vector:4,version:4,want:1,web:[0,5],well:4,were:4,when:[4,6],where:[4,6],who:4,why:4,width:4,within:4,work:4,www:6,you:1,zip:4},titles:["Welcome to Lifemapper Client Library\u2019s documentation!","Contributing","Installation","lm_client package","lm_client.apis package","lm_client.client package","lm_client.common package","lm_client"],titleterms:{api:4,api_servic:6,auth:4,biotaphy_point:4,client:[0,5],common:6,constant:6,content:[3,4,5,6],contribut:1,document:0,env_lay:4,except:6,gbif_pars:4,global_pam:4,gridset:4,hint:4,indic:0,instal:2,layer:4,librari:0,lifemapp:0,lm_client:[3,4,5,6,7],modul:[3,4,5,6],occurr:4,ogc:4,open_tre:4,packag:[3,4,5,6],raw_solr:4,scenario:4,scenario_packag:4,sdm_project:4,shapegrid:4,snippet:4,submodul:[4,5,6],subpackag:3,tabl:0,taxonomi:4,tree:4,upload:4,welcom:0}}) \ No newline at end of file diff --git a/docs/sphinx/source/lm_client.apis.html b/docs/sphinx/source/lm_client.apis.html new file mode 100644 index 0000000..2bd3639 --- /dev/null +++ b/docs/sphinx/source/lm_client.apis.html @@ -0,0 +1,1130 @@ + + + + + + + lm_client.apis package — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +
+

lm_client.apis package

+
+

Submodules

+
+
+

lm_client.apis.auth module

+

Module containing authentication service calls

+
+
+class lm_client.apis.auth.AuthApiService(api_client)[source]
+

Bases: lm_client.common.api_service.ApiService

+
+
+login(user_id, passwd)[source]
+
+ +
+
+logout()[source]
+
+ +
+ +
+
+

lm_client.apis.biotaphy_points module

+
+
+class lm_client.apis.biotaphy_points.BiotaPhyPointsApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+
+
+end_point = 'api/v2/biotaphypoints'
+
+ +
+
+post(taxon_ids)[source]
+
+ +
+ +
+
+

lm_client.apis.env_layer module

+
+
+class lm_client.apis.env_layer.EnvLayerApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+
+
+count(after_time=None, alt_pred_code=None, before_time=None, date_code=None, epsg_code=None, env_code=None, env_type_id=None, gcm_code=None, scenario_id=None)[source]
+

Counts

+

Args:

+
+ +
+
+delete(env_layer_id)[source]
+

Attempts to delete

+

Args:

+
+ +
+
+end_point = 'api/v2/envlayer'
+
+ +
+
+get(env_layer_id, interface=None)[source]
+

Attempts to get

+

Args:

+
+ +
+
+list(after_time=None, alt_pred_code=None, before_time=None, date_code=None, epsg_code=None, env_code=None, env_type_id=None, gcm_code=None, scenario_id=None, limit=None, offset=None)[source]
+

Gets a list

+

Args:

+
+ +
+
+post(layer_content, layer_type, epsg_code, layer_name, env_layer_type_id=None, additional_metadata=None, val_units=None, env_code=None, gcm_code=None, alt_pred_code=None, date_code=None)[source]
+
+ +
+ +
+
+

lm_client.apis.gbif_parser module

+
+
+class lm_client.apis.gbif_parser.GbifNameParserApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+
+
+end_point = 'api/v2/gbifparser'
+
+ +
+
+post(names_list)[source]
+
+ +
+ +
+
+

lm_client.apis.global_pam module

+
+
+class lm_client.apis.global_pam.GlobalPamApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+
+
+end_point = 'api/v2/globalpam'
+
+ +
+
+get_facets()[source]
+

Attempts to get

+

Args:

+
+ +
+
+list_matches(algorithm_code=None, bbox=None, display_name=None, gridset_id=None, model_scenario_code=None, point_max=None, point_min=None, prj_scen_code=None, squid=None, taxon_kingdom=None, taxon_phylum=None, taxon_class=None, taxon_order=None, taxon_family=None, taxon_genus=None, taxon_species=None)[source]
+

Gets a list

+

Args:

+
+ +
+
+post_subset(archive_name, gridset_id, algorithm_code=None, bbox=None, display_name=None, model_scenario_code=None, point_max=None, point_min=None, prj_scen_code=None, squid=None, taxon_kingdom=None, taxon_phylum=None, taxon_class=None, taxon_order=None, taxon_family=None, taxon_genus=None, taxon_species=None)[source]
+
+ +
+ +
+
+

lm_client.apis.gridset module

+
+
+class lm_client.apis.gridset.GridsetApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+
+
+count(after_time=None, before_time=None, epsg_code=None, meta_string=None, shapegrid_id=None)[source]
+

Counts

+

Args:

+
+ +
+
+delete(gridset_id)[source]
+

Attempts to delete a gridset

+

Args:

+
+ +
+
+delete_tree(gridset_id)[source]
+

Attempts to delete a gridset’s tree

+

Args:

+
+ +
+
+end_point = 'api/v2/gridset'
+
+ +
+
+get(gridset_id, interface=None)[source]
+

Attempts to get

+

Args:

+
+ +
+
+get_hypotheses(gridset_id, interface=None)[source]
+

Attempts to get

+

Args:

+
+ +
+
+get_tree(gridset_id, interface=None)[source]
+

Attempts to get

+

Args:

+
+ +
+
+list(after_time=None, before_time=None, epsg_code=None, limit=None, meta_string=None, offset=None, shapegrid_id=None)[source]
+

Gets a list

+

Args:

+
+ +
+
+post(boom_post_json)[source]
+
+ +
+
+post_analyses(gridset_id, do_calc=None, do_mcpa=None, num_permutations=None)[source]
+
+ +
+
+post_tree(gridset_id, tree_id=None, tree_content=None, tree_schema=None)[source]
+
+ +
+ +
+
+

lm_client.apis.hint module

+
+
+class lm_client.apis.hint.SpeciesHintApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+
+
+end_point = 'api/v2/hint'
+
+ +
+
+list(search_string, limit=None)[source]
+

Gets a list

+

Args:

+
+ +
+ +
+
+

lm_client.apis.layer module

+
+
+class lm_client.apis.layer.LayerApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+
+
+count(after_time=None, before_time=None, epsg_code=None, squid=None)[source]
+

Counts

+

Args:

+
+ +
+
+delete(layer_id)[source]
+

Attempts to delete

+

Args:

+
+ +
+
+end_point = 'api/v2/layer'
+
+ +
+
+get(layer_id, interface=None)[source]
+

Attempts to get

+

Args:

+
+ +
+
+list(after_time=None, before_time=None, epsg_code=None, limit=None, offset=None, squid=None)[source]
+

Gets a list

+

Args:

+
+ +
+
+post(layer_content, layer_type, epsg_code, layer_name, env_layer_type_id=None, additional_metadata=None, val_units=None, env_code=None, gcm_code=None, alt_pred_code=None, date_code=None)[source]
+
+ +
+ +
+
+

lm_client.apis.occurrence module

+

Module containing functions for using the Occurrence service

+
+
+class lm_client.apis.occurrence.OccurrenceApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+
+
+count(after_status=None, after_time=None, before_status=None, before_time=None, display_name=None, epsg_code=None, gridset_id=None, minimum_number_of_points=None, squid=None, status=None, user=None)[source]
+

Counts the number of occurrence sets matching the provided criteria.

+ +++ + + + +
Parameters:
    +
  • after_status (int, optional) – Only return occurrence sets +that have a status value greater than this number.
  • +
  • after_time (str, optional) – Only return occurrence sets +modified after this time (in ISO-8601 format).
  • +
  • before_status (int, optional) – Only return occurrence sets +that have a status value less than this number.
  • +
  • before_time (str, optional) – Only return occurrence sets +modified before this time (in ISO-8601 format).
  • +
  • display_name (str, optional) – Only return occurrence sets +that have this display name.
  • +
  • epsg_code (int, optional) – Only return occurrence sets that +have this EPSG code.
  • +
  • gridset_id (int, optional) – Only return occurrence sets that +are part of the gridset with this ID.
  • +
  • minimum_number_of_points (int, optional) – Only return +occurrence sets that have at least this many points.
  • +
  • squid (str, optional) – Only return occurrence sets that have +this squid (hash value for species identifier).
  • +
  • status (int, optional) – Only return occurrence sets that +have this status.
  • +
  • user (str, optional) – If ‘public’, return public occurrence +sets. If ‘anon’, return anonymous occurrence sets. If None, +return the user’s occurrence sets.
  • +
+
+
+ +
+
+delete(occurrence_id)[source]
+

Attempts to delete the occurrence set specified by occurrence_id.

+
+ +
+
+end_point = 'api/v2/occurrence/'
+
+ +
+
+get(occurrence_id, interface=None)[source]
+

Attempts to retrieve the occurrence set specified by the ID.

+ +++ + + + +
Parameters:
    +
  • occurrence_id (int) – The ID number of the occurrence set to +retrieve.
  • +
  • interface (str, optional) – If provided, request the response +in this interface.
  • +
+
+
+ +
+
+list(after_status=None, after_time=None, before_status=None, before_time=None, display_name=None, epsg_code=None, gridset_id=None, limit=None, minimum_number_of_points=None, offset=None, squid=None, status=None, user=None)[source]
+

Lists occurrence sets matching the provided criteria.

+ +++ + + + +
Parameters:
    +
  • after_status (int, optional) – Only return occurrence sets +that have a status value greater than this number.
  • +
  • after_time (str, optional) – Only return occurrence sets +modified after this time (in ISO-8601 format).
  • +
  • before_status (int, optional) – Only return occurrence sets +that have a status value less than this number.
  • +
  • before_time (str, optional) – Only return occurrence sets +modified before this time (in ISO-8601 format).
  • +
  • display_name (str, optional) – Only return occurrence sets +that have this display name.
  • +
  • epsg_code (int, optional) – Only return occurrence sets that +have this EPSG code.
  • +
  • gridset_id (int, optional) – Only return occurrence sets that +are part of the gridset with this ID.
  • +
  • limit (int, optional) – Only return this number of occurrence +sets.
  • +
  • minimum_number_of_points (int, optional) – Only return +occurrence sets that have at least this many points.
  • +
  • offset (int, optional) – Offset the occurrence sets returned +by this number.
  • +
  • squid (str, optional) – Only return occurrence sets that have +this squid (hash value for species identifier).
  • +
  • status (int, optional) – Only return occurrence sets that +have this status.
  • +
  • user (str, optional) – If ‘public’, return public occurrence +sets. If ‘anon’, return anonymous occurrence sets. If None, +return the user’s occurrence sets.
  • +
+
+
+ +
+ +
+
+

lm_client.apis.ogc module

+
+
+class lm_client.apis.ogc.OgcApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+
+
+end_point = 'api/v2/ogc'
+
+ +
+
+get(map_name, bbox=None, bgcolor=None, color=None, coverage=None, crs=None, exceptions=None, height=None, layer=None, layers=None, point=None, request=None, format=None, service=None, sld=None, sld_body=None, srs=None, styles=None, time=None, transparent=None, version=None, width=None)[source]
+

Attempts to get

+

Args:

+
+ +
+ +
+
+

lm_client.apis.open_tree module

+
+
+class lm_client.apis.open_tree.OpenTreeApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+
+
+end_point = 'api/v2/opentree'
+
+ +
+
+post(taxon_ids)[source]
+
+ +
+ +
+
+

lm_client.apis.raw_solr module

+
+
+class lm_client.apis.raw_solr.SolrRawApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+
+
+end_point = 'api/v2/rawsolr'
+
+ +
+
+post(collection, query_string)[source]
+
+ +
+ +
+
+

lm_client.apis.scenario module

+
+
+class lm_client.apis.scenario.ScenarioApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+
+
+count(after_time=None, alt_pred_code=None, before_time=None, date_code=None, epsg_code=None, gcm_code=None)[source]
+

Counts

+

Args:

+
+ +
+
+delete(scenario_id)[source]
+

Attempts to delete

+

Args:

+
+ +
+
+end_point = 'api/v2/scenario'
+
+ +
+
+get(scenario_id, interface=None)[source]
+

Attempts to get

+

Args:

+
+ +
+
+list(after_time=None, alt_pred_code=None, before_time=None, date_code=None, epsg_code=None, gcm_code=None, limit=None, offset=None)[source]
+

Gets a list

+

Args:

+
+ +
+
+post(scenario_json)[source]
+
+ +
+ +
+
+

lm_client.apis.scenario_package module

+
+
+class lm_client.apis.scenario_package.ScenarioPackageApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+
+
+count(after_time=None, before_time=None, scenario_id=None)[source]
+

Counts

+

Args:

+
+ +
+
+end_point = 'api/v2/scenpackage'
+
+ +
+
+get(scenario_package_id, interface=None)[source]
+

Attempts to get

+

Args:

+
+ +
+
+list(after_time=None, before_time=None, limit=None, offset=None, scenario_id=None)[source]
+

Gets a list

+

Args:

+
+ +
+ +
+
+

lm_client.apis.sdm_project module

+
+
+class lm_client.apis.sdm_project.SdmProjectApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+
+
+count(after_status=None, after_time=None, algorithm_code=None, before_status=None, before_time=None, display_name=None, epsg_code=None, model_scenario_code=None, occurrence_set_id=None, projection_scenario_code=None, scenario_id=None, status=None, gridset_id=None)[source]
+

Counts

+

Args:

+
+ +
+
+delete(sdmproject_id)[source]
+

Attempts to delete

+

Args:

+
+ +
+
+end_point = 'api/v2/sdmproject'
+
+ +
+
+get(sdmproject_id, interface=None)[source]
+

Attempts to get

+

Args:

+
+ +
+
+list(after_status=None, after_time=None, algorithm_code=None, before_status=None, before_time=None, display_name=None, epsg_code=None, limit=None, model_scenario_code=None, occurrence_set_id=None, offset=None, projection_scenario_code=None, scenario_id=None, status=None, gridset_id=None)[source]
+

Gets a list

+

Args:

+
+ +
+
+post(boom_post_json)[source]
+
+ +
+ +
+
+

lm_client.apis.shapegrid module

+

This module interacts with the shapegrid end-point

+

Shapegrids are vector layers where each feature represents a site. These are +the same sites that are used for Presence Absence Matrices, PAMs, as well as +encoded climate data and biogeographic hypotheses. Lifemapper generated +shapegrids are regularly spaced rectangular or hexagonal cells that form a +grid. The grid generally covers an area specified by a bounding box, but may +also have some cells removed in a “cutout” operation so that the remaining +cells cover the desired area of interest.

+
+
+class lm_client.apis.shapegrid.ShapegridApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+

This class is responsible for interactions with shapegrid end-point

+
+
+count(after_time=None, before_time=None, cell_sides=None, cell_size=None, epsg_code=None)[source]
+

Counts shapegrids matching the provided criteria

+ +++ + + + + + +
Parameters:
    +
  • after_time (str, optional) – Count shapegrids modified after +this time (in ISO-8601 format).
  • +
  • before_time (str, optional) – Count shapegrids modified +before this time (in ISO-8601 format).
  • +
  • cell_sides (int, optional) – Count shapegrids that have cells +with the specified number of sides +(4 - rectangles, 6 - hexagons).
  • +
  • cell_size (float, optional) – Count shapegrids with the +specified cell size (resolution).
  • +
  • epsg_code (int, optional) – Count shapegrids that were +created using the specified spatial projection represented by +the EPSG code.
  • +
+
Returns:

int - The number of shapegrids matching the provided criteria.

+
+
+ +
+
+delete(shapegrid_id)[source]
+

Attempts to delete a shapegrid

+ +++ + + + + + +
Parameters:

shapegrid_id (int) – The database identifier of the shapegrid to +attempt to delete.

+
Raises:
    +
  • ForbiddenError – Thrown if the client user does not have permission +to delete the requested shapegrid.
  • +
  • NotFoundError – Thrown if the requested shapegrid is not found.
  • +
+
+
+ +
+
+end_point = 'api/v2/shapegrid'
+
+ +
+
+get(shapegrid_id, interface=None)[source]
+

Attempts to get a shapegrid

+ +++ + + + + + + + + + +
Parameters:
    +
  • shapegrid_id (int) – The database identifier of the shapegrid to +attempt to retrieve.
  • +
  • interface (str, optional) – The requested interface, or +format, for the shapegrid to be returned as. Valid options +are: EML, JSON (default), GeoJSON, and SHAPEFILE.
  • +
+
Returns:

+
If the interface is set to JSON or GEO_JSON, returns a
+

dictionary

+
+
bytes: If the interface is set to SHAPEFILE, the zipped shapefile
+

is returned.

+
+
+

+
Return type:

dict

+
Raises:
    +
  • ForbiddenError – Thrown if the client user does not have permission +to access the requested shapegrid.
  • +
  • NotFoundError – Thrown if the requested shapegrid is not found.
  • +
+
+
+ +
+
+list(after_time=None, before_time=None, cell_sides=None, cell_size=None, epsg_code=None, limit=None, offset=None)[source]
+

Gets a list of shapegrids matching the provided criteria

+ +++ + + + + + +
Parameters:
    +
  • after_time (str, optional) – Return shapegrids modified after +this time (in ISO-8601 format).
  • +
  • before_time (str, optional) – Return shapegrids modified +before this time (in ISO-8601 format).
  • +
  • cell_sides (int, optional) – Return shapegrids that have +cells with the specified number of sides +(4 - rectangles, 6 - hexagons).
  • +
  • cell_size (float, optional) – Return shapegrids with the +specified cell size (resolution).
  • +
  • epsg_code (int, optional) – Return shapegrids that were +created using the specified spatial projection represented by +the EPSG code.
  • +
  • limit (int, optional) – Return this number of shapegrids.
  • +
  • offset (int, optional) – Offset the shapegrids returned by +this number. Use along with limit to implement paging.
  • +
+
Returns:

+
list of shapegrid metadata - Returns a list of shapegrids matching
+

the provided criteria.

+
+
+

+
+
+ +
+
+post(name, epsg_code, cell_sides, cell_size, map_units, bbox, cutout=None)[source]
+

Posts a new shapegrid to the server.

+ +++ + + + + + + + +
Parameters:
    +
  • name (str) – A name for this shapegrid.
  • +
  • epsg_code (int) – An EPSG code representing the map projection to +use when defining this shapegrid.
  • +
  • cell_sides (int) – The number of sides each cell in the shapegrid +should have. Use 4 for rectangular cells and 6 for hexagonal +cells.
  • +
  • cell_size (float) – The size of each side of each cell in the +shapegrid (in map_units).
  • +
  • map_units (str) –

    The units for the cell_sizes of the map. Examples +are:

    +
    +
    dd - decimal degrees +m - meters +ft - feet
    +
  • +
  • bbox (tuple) – Bounding box tuple for this shapegrid in the form +(minimum x, maximum x, minimum y, maximum y).
  • +
  • cutout (str, optional) – An area of the shapegrid to “cut +out”, meaning to remove cells that fall within that area. This +should be specified as Well-Known Text.
  • +
+
Returns:

+
dict - A JSON dictionary of metadata about the newly posted
+

shapegrid.

+
+
+

+
Raises:
    +
  • BadRequestError – Raised if the post data required is invalid.
  • +
  • ConflictError – Raised if the post data already exists on the +server.
  • +
+
+
+ +
+ +
+
+

lm_client.apis.snippet module

+

Module containing functions for using the snippet service end-point

+
+
+class lm_client.apis.snippet.SnippetApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+

This class is used for working with the snippet service end-point

+
+
+end_point = 'api/v2/snippet/'
+
+ +
+
+list(after_time=None, agent=None, before_time=None, catalog_number=None, collection=None, ident1=None, ident2=None, operation=None, provider=None, url=None, who=None, why=None)[source]
+

Lists snippets matching the provided criteria.

+ +++ + + + +
Parameters:
    +
  • after_time (str, optional) – Only return snippets modified +after this time (in ISO-8601 format).
  • +
  • agent (str, optional) – Return snippets initiated by this +agent.
  • +
  • before_time (str, optional) – Only return snippets modified +before this time (in ISO-8601 format).
  • +
  • catalog_number (str, optional) – List snippets for occurrence +records with this catalog number.
  • +
  • collection (str, optional) – List snippets for this +collection.
  • +
  • ident1 (str, optional) – List snippets with this primary +object identifier.
  • +
  • ident2 (str, optional) – List snippets with this secondary +object identifier.
  • +
  • operation (str, optional) – List snippets for this operation.
  • +
  • provider (str, optional) – List snippets for this occurrence +point provider.
  • +
  • url (str, optional) – List snippets related to this URL.
  • +
  • who (str, optional) – List snippets created by this entity.
  • +
  • why (str, optional) – List snippets that were created for +this reason.
  • +
+
+
+ +
+ +
+
+

lm_client.apis.taxonomy module

+

This module contains functions for getting taxonomy hints

+
+
+class lm_client.apis.taxonomy.TaxonomyApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+
+
+end_point = 'api/v2/taxonomy'
+
+ +
+
+list(canonical_name=None, limit=None, scientific_name=None, squid=None, taxon_class=None, taxon_family=None, taxon_genus=None, taxon_key=None, taxon_kingdom=None, taxon_order=None, taxon_phylum=None, user=None)[source]
+

Gets a list

+

Args:

+
+ +
+ +
+
+

lm_client.apis.tree module

+

Module containing functions for using the tree service endpoint

+
+
+class lm_client.apis.tree.TreeApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+

This class is used for working with the tree service end-point

+
+
+count(after_time=None, before_time=None, has_branch_lengths=None, is_binary=None, is_ultrametric=None, meta_string=None, name=None, user=None)[source]
+

Counts the number of trees matching the provided criteria.

+ +++ + + + +
Parameters:
    +
  • after_time (str, optional) – Only trees modified after this +time (in ISO-8601 format).
  • +
  • before_time (str, optional) – Only return trees modified +before this time (in ISO-8601 format).
  • +
  • has_branch_lengths (bool, optional) – Return trees that have +or do not have branch lengths.
  • +
  • is_binary (bool, optional) – Return trees that are or are not +binary.
  • +
  • is_ultrametric (bool, optional) – Return trees that are or +are not ultrametric.
  • +
  • meta_string (str, optional) – Return trees with this metadata +string attached to them.
  • +
  • name (str, optional) – Return trees that have this name.
  • +
  • user (str, optional) – If ‘public’, return public trees. If +‘anon’, return anonymous trees. If None, return the user’s +trees.
  • +
+
+
+ +
+
+delete(tree_id)[source]
+

Attempts to delete the tree specified by tree_id.

+
+ +
+
+end_point = 'api/v2/tree/'
+
+ +
+
+get(tree_id, interface=None)[source]
+

Attempts to retrieve the tree specified by the ID.

+ +++ + + + +
Parameters:
    +
  • tree (int) – The ID number of the tree to retrieve.
  • +
  • interface (str, optional) – If provided, request the response +in this interface.
  • +
+
+
+ +
+
+list(after_time=None, before_time=None, has_branch_lengths=None, is_binary=None, is_ultrametric=None, limit=None, meta_string=None, name=None, offset=None, user=None)[source]
+

Lists occurrence sets matching the provided criteria.

+ +++ + + + +
Parameters:
    +
  • after_time (str, optional) – Only trees modified after this +time (in ISO-8601 format).
  • +
  • before_time (str, optional) – Only return trees modified +before this time (in ISO-8601 format).
  • +
  • has_branch_lengths (bool, optional) – Return trees that have +or do not have branch lengths.
  • +
  • is_binary (bool, optional) – Return trees that are or are not +binary.
  • +
  • is_ultrametric (bool, optional) – Return trees that are or +are not ultrametric.
  • +
  • limit (int, optional) – Return up to this number of trees.
  • +
  • meta_string (str, optional) – Return trees with this metadata +string attached to them.
  • +
  • name (str, optional) – Return trees that have this name.
  • +
  • offset (int, optional) – Offset the list of returned trees by +this number.
  • +
  • user (str, optional) – If ‘public’, return public trees. If +‘anon’, return anonymous trees. If None, return the user’s +trees.
  • +
+
+
+ +
+
+post(filename_or_flo, name, schema)[source]
+

Attempt to POST a new tree to the service end-point

+ +++ + + + +
Parameters:
    +
  • filename_or_flo (str or file-like object) – A filename or file-like +object containing the tree data.
  • +
  • name (str) – A name for this new tree.
  • +
  • schema (str) – The tree schema (newick, nexus, nexml).
  • +
+
+
+ +
+ +
+
+

lm_client.apis.upload module

+

Module containing functions for uploading data services

+
+
+class lm_client.apis.upload.UploadApiService(api_client)[source]
+

Bases: lm_client.common.api_service.RestService

+
+
+biogeographic_hypotheses(filename, package_name)[source]
+
+ +
+
+end_point = 'api/v2/upload'
+
+ +
+
+occurrence(filename, metadata, data_name)[source]
+
+ +
+
+tree(filename, tree_name)[source]
+
+ +
+ +
+
+

Module contents

+
+
+ + +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/source/lm_client.client.html b/docs/sphinx/source/lm_client.client.html new file mode 100644 index 0000000..3d44a54 --- /dev/null +++ b/docs/sphinx/source/lm_client.client.html @@ -0,0 +1,238 @@ + + + + + + + lm_client.client package — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +
+

lm_client.client package

+
+

Submodules

+
+
+

lm_client.client.client module

+

Module containing the Lifemapper web service client

+
+
+class lm_client.client.client.LmApiClient[source]
+

Bases: object

+

A Lifemapper API Client object used to make service requests.

+
+
+auth
+

AuthApiService – Service end-point for authentication requests.

+
+ +
+
+biotaphy_points
+

BiotaPhyPointsApiService – Service end-point for +querying the available data counts from iDigBio for a group of +species.

+
+ +
+
+env_layer
+

EnvLayerApiService – Service end-point for environmental +layer requests.

+
+ +
+
+gbif_parser
+

GbifNameParserApiService – Service end-point for searching +for accepted taxon names for provided species names.

+
+ +
+
+global_pam
+

GlobalPamApiService – Service end-point for querying and +subsetting global PAMs.

+
+ +
+
+gridset
+

GridsetApiService – Service end-point for making gridset +related requests.

+
+ +
+
+hint
+

SpeciesHintApiService – Service end-point for searching for +species with existing data on the server.

+
+ +
+
+layer
+

LayerApiService – Service end-point for making layer requests.

+
+ +
+
+occurrence
+

OccurrenceApiService – Service end-point for making +occurrence set related requests.

+
+ +
+
+ogc
+

OgcApiService – Service end-point for making OGC requests to +Lifemapper mapping services.

+
+ +
+
+open_tree
+

OpenTreeApiService – Service end-point for making requests +to OpenTree APIs.

+
+ +
+
+raw_solr
+

SolrRawApiService – Service end-point for making raw Solr +requests to the server.

+
+ +
+
+scenario
+

ScenarioApiService – Service end-point for scenario requests.

+
+ +
+
+scenario_package
+

ScenarioPackageApiService – Service end-point for +scenario package requests.

+
+ +
+
+sdm_project
+

SdmProjectApiService – Service end-point for SDM +projection requests.

+
+ +
+
+shapegrid
+

ShapegridApiService – Service end-point for shapegrid +requests.

+
+ +
+
+snippet
+

SnippetApiService – Service end-point for snippet listings.

+
+ +
+
+taxonomy
+

TaxonomyApiService – Service end-point for taxonomy searches.

+
+ +
+
+tree
+

TreeApiService – Service end-point for tree requests.

+
+ +
+
+upload
+

UploadApiService – Service end-point for large file uploads.

+
+ +
+ +
+
+

Module contents

+
+
+ + +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/source/lm_client.common.html b/docs/sphinx/source/lm_client.common.html new file mode 100644 index 0000000..623517c --- /dev/null +++ b/docs/sphinx/source/lm_client.common.html @@ -0,0 +1,755 @@ + + + + + + + lm_client.common package — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ +
+

lm_client.common package

+
+

Submodules

+
+
+

lm_client.common.api_service module

+

Module containing base class for API service calls

+
+
+class lm_client.common.api_service.ApiService(api_client)[source]
+

Bases: object

+

Base class for API calls

+
+
+api_client
+

_Client – A client object used to make requests to a +server.

+
+ +
+ +
+
+class lm_client.common.api_service.RestService(api_client)[source]
+

Bases: lm_client.common.api_service.ApiService

+

Base class for RESTful API calls

+
+
+count(count_url, headers=None, **query_params)[source]
+

Counts the number of objects matching the provided parameters.

+ +++ + + + + + +
Parameters:
    +
  • count_url (str) – A relative URL for counting objects.
  • +
  • headers (dict, optional) – Any headers to be sent to the +request.
  • +
  • **query_params (dict) – A dictionary of query parameters to be used +as criteria for counting.
  • +
+
Returns:

int - The number of objects matching the specified criteria

+
+
+ +
+
+delete(obj_url, headers=None, **query_params)[source]
+

Sends a delete request to the specified URL

+ +++ + + + + + +
Parameters:
    +
  • obj_url (str) – A relative URL for the object in question.
  • +
  • headers (dict, optional) – Any headers to be sent to the +request.
  • +
  • **query_params (dict) – A dictionary of query parameters to be sent +along with the request.
  • +
+
Raises:
    +
  • ForbiddenError - Raised if the user does not have permission to – delete the specified object.
  • +
  • NotFoundError - Raised if the object was not found.
  • +
+
+
+ +
+
+get(obj_url, interface='json', headers=None, **query_params)[source]
+

Gets the object in the format specified by ‘interface’.

+ +++ + + + + + + + +
Parameters:
    +
  • obj_url (str) – The relative URL to the object.
  • +
  • raw (bool, optional) – If True, return the raw response +file-like object from the request. If False, attempt to +process the response.
  • +
  • interface (INTERFACES, optional) – The interface format to +request for the object.
  • +
  • headers (dict, optional) – Any headers to be sent to the +request.
  • +
  • **query_params (dict) – A dictionary of query parameters that may +be used in object retrieval.
  • +
+
Returns:

+
dict - If the interface is a JSON interface, the response is
+

encoded as a JSON dictionary object.

+
+
str - If the interface is a text interface, the response is
+

returned as text.

+
+
bytes - If the interface is a binary interface, the response is
+

returned as bytes.

+
+
+

+
Raises:
    +
  • ForbiddenError - Raised if the user does not have permission to – access the specified object.
  • +
  • NotFoundError - Raised if the requested object was not found.
  • +
+
+
+ +
+
+list(list_url, headers=None, **query_params)[source]
+

Lists the number of objects matching the provided parameters.

+ +++ + + + + + +
Parameters:
    +
  • list_url (str) – A relative URL for listing objects.
  • +
  • headers (dict, optional) – Any headers to be sent to the +request.
  • +
  • **query_params (dict) – A dictionary of query parameters to be used +as criteria for listing.
  • +
+
Returns:

+
List of JSON dictionaries - The list of matching objects is
+

returned as a list of dictionaries.

+
+
+

+
+
+ +
+
+post(post_url, files=None, headers=None, **query_params)[source]
+

Submits a POST request to the server.

+ +++ + + + + + + + +
Parameters:
    +
  • post_url (str) – A relative URL where the POST request will be made.
  • +
  • files (dict, optional) – A dictionary with file query +parameter name keys and tuple values with (file name, open +file-like object or string, and optionally a mime-type for the +file).
  • +
  • headers (dict, optional) – Any headers to be sent to the +request.
  • +
  • **query_params (dict) – A dictionary of query parameters to be sent +with the POST request.
  • +
+
Returns:

dict - A JSON dictionary returned from the POST request

+
Raises:
    +
  • BadRequestError - Raised if the parameters provided do not match – the parameters required.
  • +
  • ConflictError - Raised if the POST cannot complete because an – object already exists with those values.
  • +
+
+
+ +
+ +
+
+lm_client.common.api_service.format_object(response, interface)[source]
+

Formats an object based on the interface provided

+ +++ + + + + + + + +
Parameters:
    +
  • response (requests.models.Response) – A response object returned from a +request.
  • +
  • interface (str) – An interface string that should be matched against +those in the INTERFACES constants class.
  • +
+
Raises:

Exception - If the interface is unknown, an Exception is raised.

+
Returns:

+
dict - If the interface is a JSON interface, the response is encoded as
+

a JSON dictionary object.

+
+
str - If the interface is a text interface, the response is returned as
+

text.

+
+
bytes - If the interface is a binary interface, the response is
+

returned as bytes.

+
+
+

+
+
+ +
+
+

lm_client.common.constants module

+

Module containing constants for the Lifemapper API Client

+
+
+class lm_client.common.constants.HTTPMethod[source]
+

Bases: object

+

Class containing constants for supported HTTP methods

+
+
+DELETE = 'DELETE'
+
+ +
+
+GET = 'GET'
+
+ +
+
+POST = 'POST'
+
+ +
+
+PUT = 'PUT'
+
+ +
+ +
+
+class lm_client.common.constants.HttpStatus[source]
+

Constants class for HTTP 1.1 Status Codes

+
+

Note

+ +
+
+
+ACCEPTED = 202
+
+ +
+
+BAD_GATEWAY = 502
+
+ +
+
+BAD_REQUEST = 400
+
+ +
+
+CONFLICT = 409
+
+ +
+
+CONTINUE = 100
+
+ +
+
+CREATED = 201
+
+ +
+
+EXPECTATION_FAILED = 417
+
+ +
+
+FORBIDDEN = 403
+
+ +
+
+FOUND = 302
+
+ +
+
+GATEWAY_TIMEOUT = 504
+
+ +
+
+GONE = 410
+
+ +
+
+HTTP_VERSION_NOT_SUPPORTED = 505
+
+ +
+
+INTERNAL_SERVER_ERROR = 500
+
+ +
+
+LENGTH_REQUIRED = 411
+
+ +
+
+METHOD_NOT_ALLOWED = 405
+
+ +
+
+MOVED_PERMANENTLY = 301
+
+ +
+
+MULTIPLE_CHOICES = 300
+
+ +
+
+NON_AUTHORITATIVE_INFORMATION = 203
+
+ +
+
+NOT_ACCEPTABLE = 406
+
+ +
+
+NOT_FOUND = 404
+
+ +
+
+NOT_IMPLEMENTED = 501
+
+ +
+
+NOT_MODIFIED = 204
+
+ +
+
+NO_CONTENT = 204
+
+ +
+
+OK = 200
+
+ +
+
+PARTIAL_CONTENT = 206
+
+ +
+
+PRECONDITION_FAILED = 412
+
+ +
+
+PROXY_AUTHENTICATION_REQUIRED = 407
+
+ +
+
+REQUEST_ENTITY_TOO_LARGE = 413
+
+ +
+
+REQUEST_RANGE_NOT_SATISFIABLE = 416
+
+ +
+
+REQUEST_TIMEOUT = 408
+
+ +
+
+REQUEST_URI_TOO_LONG = 414
+
+ +
+
+RESET_CONTENT = 205
+
+ +
+
+SEE_OTHER = 303
+
+ +
+
+SERVICE_UNAVAILABLE = 503
+
+ +
+
+SWITCHING_PROTOCOLS = 101
+
+ +
+
+TEMPORARY_REDIRECT = 307
+
+ +
+
+UNAUTHORIZED = 401
+
+ +
+
+UNSUPPORTED_MEDIA_TYPE = 415
+
+ +
+
+USE_PROXY = 305
+
+ +
+ +
+
+class lm_client.common.constants.INTERFACES[source]
+

Bases: object

+

Class containing constants for available service format interfaces

+
+
+CSV = 'csv'
+
+ +
+
+EML = 'eml'
+
+ +
+
+GEO_JSON = 'geojson'
+
+ +
+
+GTIFF = 'gtiff'
+
+ +
+
+JSON = 'json'
+
+ +
+
+KML = 'kml'
+
+ +
+
+NEWICK = 'newick'
+
+ +
+
+NEXUS = 'nexus'
+
+ +
+
+PACKAGE = 'package'
+
+ +
+
+PROGRESS = 'progress'
+
+ +
+
+SHAPEFILE = 'shape'
+
+ +
+
+static binary_interfaces()[source]
+

Returns a list of interfaces that have binary content

+
+ +
+
+static json_interfaces()[source]
+

Returns a list of interfaces that can be processed as JSON

+
+ +
+
+static text_interfaces()[source]
+

Returns a list of interfaces that are text

+
+ +
+ +
+
+

lm_client.common.exceptions module

+

This module contains exceptions that the client may throw

+
+
+exception lm_client.common.exceptions.BadRequestError(url)[source]
+

Bases: lm_client.common.exceptions.HttpError

+

Exception thrown when there is a problem with the request provided

+
+
+code = 400
+
+ +
+
+message = 'Bad Request'
+
+ +
+ +
+
+exception lm_client.common.exceptions.ConflictError(url)[source]
+

Bases: lm_client.common.exceptions.HttpError

+

Exception thrown when there is a conflict posting data

+
+

Note

+
    +
  • This often occurs if a file with the same name already exists
  • +
+
+
+
+code = 409
+
+ +
+
+message = 'Conflict'
+
+ +
+ +
+
+exception lm_client.common.exceptions.ForbiddenError(url)[source]
+

Bases: lm_client.common.exceptions.HttpError

+

Exception thrown when the user does not have access to an object

+
+
+code = 403
+
+ +
+
+message = 'Forbidden'
+
+ +
+ +
+
+exception lm_client.common.exceptions.HttpError(url)[source]
+

Bases: exceptions.Exception

+

Base class for HTTP Errors

+
+
+code = None
+
+ +
+
+url = None
+
+ +
+ +
+
+exception lm_client.common.exceptions.NotAcceptableError(url)[source]
+

Bases: lm_client.common.exceptions.HttpError

+

Exception thrown when cannot format in desired interface

+
+
+code = 406
+
+ +
+
+message = 'No acceptable format available'
+
+ +
+ +
+
+exception lm_client.common.exceptions.NotFoundError(url)[source]
+

Bases: lm_client.common.exceptions.HttpError

+

Exception thrown when the requested object was not found

+
+
+code = 404
+
+ +
+
+message = 'Not found'
+
+ +
+ +
+
+lm_client.common.exceptions.raise_http_exception(response)[source]
+

Look at the status_code of the response and throw the proper exception

+
+ +
+
+

Module contents

+
+
+ + +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/sphinx/source/lm_client.html b/docs/sphinx/source/lm_client.html new file mode 100644 index 0000000..c156d77 --- /dev/null +++ b/docs/sphinx/source/lm_client.html @@ -0,0 +1,136 @@ + + + + + + + lm_client package — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/sphinx/source/modules.html b/docs/sphinx/source/modules.html new file mode 100644 index 0000000..4bf4769 --- /dev/null +++ b/docs/sphinx/source/modules.html @@ -0,0 +1,137 @@ + + + + + + + lm_client — Lifemapper Client Library 1.0.0 documentation + + + + + + + + + + + + + + + + + \ No newline at end of file