From 3d2e775855ce33cd99e6e95b761bcc813d271eb7 Mon Sep 17 00:00:00 2001 From: Terry Zhuo Date: Sat, 3 Oct 2020 04:59:42 +1000 Subject: [PATCH] doc: update the sphinx docs (#224) * doc: update Readthedoc * doc: update Readthedoc * doc: update Readthedoc --- docs/_build/doctrees/environment.pickle | Bin 0 -> 1644602 bytes docs/_build/doctrees/index.doctree | Bin 0 -> 79711 bytes docs/_build/html/.buildinfo | 4 + docs/_build/html/_sources/index.rst.txt | 198 + docs/_build/html/_static/basic.css | 855 ++ docs/_build/html/_static/doctools.js | 315 + .../html/_static/documentation_options.js | 12 + docs/_build/html/_static/file.png | Bin 0 -> 286 bytes docs/_build/html/_static/jquery-3.5.1.js | 10872 ++++++++++++++++ docs/_build/html/_static/jquery.js | 2 + docs/_build/html/_static/language_data.js | 297 + docs/_build/html/_static/minus.png | Bin 0 -> 90 bytes docs/_build/html/_static/plus.png | Bin 0 -> 90 bytes docs/_build/html/_static/pygments.css | 69 + docs/_build/html/_static/searchtools.js | 514 + docs/_build/html/_static/solar.css | 344 + docs/_build/html/_static/solarized-dark.css | 84 + docs/_build/html/_static/subtle_dots.png | Bin 0 -> 1025 bytes docs/_build/html/_static/underscore-1.3.1.js | 999 ++ docs/_build/html/_static/underscore.js | 31 + docs/_build/html/index.html | 656 + docs/_build/html/objects.inv | 6 + docs/_build/html/py-modindex.html | 104 + docs/_build/html/search.html | 88 + docs/_build/html/searchindex.js | 1 + docs/index.rst | 14 +- googletrans/constants.py | 135 +- 27 files changed, 15531 insertions(+), 69 deletions(-) create mode 100644 docs/_build/doctrees/environment.pickle create mode 100644 docs/_build/doctrees/index.doctree create mode 100644 docs/_build/html/.buildinfo create mode 100644 docs/_build/html/_sources/index.rst.txt create mode 100644 docs/_build/html/_static/basic.css create mode 100644 docs/_build/html/_static/doctools.js create mode 100644 docs/_build/html/_static/documentation_options.js create mode 100644 docs/_build/html/_static/file.png create mode 100644 docs/_build/html/_static/jquery-3.5.1.js create mode 100644 docs/_build/html/_static/jquery.js create mode 100644 docs/_build/html/_static/language_data.js create mode 100644 docs/_build/html/_static/minus.png create mode 100644 docs/_build/html/_static/plus.png create mode 100644 docs/_build/html/_static/pygments.css create mode 100644 docs/_build/html/_static/searchtools.js create mode 100644 docs/_build/html/_static/solar.css create mode 100644 docs/_build/html/_static/solarized-dark.css create mode 100644 docs/_build/html/_static/subtle_dots.png create mode 100644 docs/_build/html/_static/underscore-1.3.1.js create mode 100644 docs/_build/html/_static/underscore.js create mode 100644 docs/_build/html/index.html create mode 100644 docs/_build/html/objects.inv create mode 100644 docs/_build/html/py-modindex.html create mode 100644 docs/_build/html/search.html create mode 100644 docs/_build/html/searchindex.js diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..7f50a336979426c8ec6561e01a35398c0bac7133 GIT binary patch literal 1644602 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

&=2lA*N4e|k3(ImfxhJ>i~ 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

XCIOpo9hg4Y8lzsNsR9G;0SnNui6 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ɀSFV}b1@$aun3E>1WU0TE3gWyu@>vF0UNOy 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 Ock4T2;EbNlviu)C`Si5_ literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..29dc258c37114fb55ff80350f9a36025f864076d GIT binary patch literal 79711 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 VJ51i@%A`Xu9%zq|X$i)j{||DpLazV- literal 0 HcmV?d00001 diff --git a/docs/_build/html/.buildinfo b/docs/_build/html/.buildinfo new file mode 100644 index 0000000..70bba16 --- /dev/null +++ b/docs/_build/html/.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: fead46355d4b0b52081e4868f4b42e72 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_build/html/_sources/index.rst.txt b/docs/_build/html/_sources/index.rst.txt new file mode 100644 index 0000000..20efeda --- /dev/null +++ b/docs/_build/html/_sources/index.rst.txt @@ -0,0 +1,198 @@ +=============================================================== +Googletrans: Free and Unlimited Google translate API for Python +=============================================================== + +.. image:: https://img.shields.io/github/license/mashape/apistatus.svg + :target: http://opensource.org/licenses/MIT +.. image:: https://travis-ci.org/ssut/py-googletrans.svg?branch=master + :target: https://travis-ci.org/ssut/py-googletrans +.. image:: https://readthedocs.org/projects/py-googletrans/badge/?version=latest + :target: https://readthedocs.org/projects/py-googletrans/?badge=latest +.. image:: https://badge.fury.io/py/googletrans.svg + :target: http://badge.fury.io/py/googletrans +.. image:: https://coveralls.io/repos/github/ssut/py-googletrans/badge.svg + :target: https://coveralls.io/github/ssut/py-googletrans +.. image:: https://codeclimate.com/github/ssut/py-googletrans/badges/gpa.svg + :target: https://codeclimate.com/github/ssut/py-googletrans + +Googletrans is a **free** and **unlimited** python library that +implemented Google Translate API. This uses the `Google Translate Ajax +API `__ to make calls to such methods as +detect and translate. + +-------- +Features +-------- + +- Fast and reliable - it uses the same servers that + translate.google.com uses +- Auto language detection +- Bulk translations +- Customizable service URL +- Connection pooling (the advantage of using requests.Session) +- HTTP/2 support + +~~~~~~~~~~~~~~~~~~~~~ +Note on library usage +~~~~~~~~~~~~~~~~~~~~~ + +- The maximum character limit on a single text is 15k. + +- Due to limitations of the web version of google translate, this API + does not guarantee that the library would work properly at all times. + (so please use this library if you don't care about stability.) + +- If you want to use a stable API, I highly recommend you to use + `Google's official translate + API `__. + +- If you get HTTP 5xx error or errors like #6, it's probably because + Google has banned your client IP address. + +---------- +Quickstart +---------- + +You can install it from PyPI_: + +.. sourcecode:: bash + + $ pip install googletrans + +.. _PyPI: https://pypi.python.org/pypi/googletrans + +~~~~~~~~~~~~~~ +HTTP/2 support +~~~~~~~~~~~~~~ + +This is a great deal for everyone! (up to 2x times faster in my test) If +you want to get googletrans faster you should install +`hyper `__ package. Googletrans will +automatically detect if hyper is installed and if so, it will be used +for http networking. + +~~~~~~~~~~~ +Basic Usage +~~~~~~~~~~~ + +If source language is not given, google translate attempts to detect the +source language. + +.. code-block:: python + + >>> from googletrans import Translator + >>> translator = Translator() + >>> translator.translate('안녕하세요.') + # + + >>> translator.translate('안녕하세요.', dest='ja') + # + + >>> translator.translate('veritas lux mea', src='la') + # + +~~~~~~~~~~~~~~~~~~~~~ +Customize service URL +~~~~~~~~~~~~~~~~~~~~~ + +You can use another google translate domain for translation. If multiple +URLs are provided it then randomly chooses a domain. + +.. code:: python + + >>> from googletrans import Translator + >>> translator = Translator(service_urls=[ + 'translate.google.com', + 'translate.google.co.kr', + ]) + +~~~~~~~~~~~~~~~~~~~~~ +Advanced Usage (Bulk) +~~~~~~~~~~~~~~~~~~~~~ + +Array can be used to translate a batch of strings in a single method +call and a single HTTP session. The exact same method shown above work +for arrays as well. + +.. code:: python + + >>> translations = translator.translate(['The quick brown fox', 'jumps over', 'the lazy dog'], dest='ko') + >>> for translation in translations: + ... print(translation.origin, ' -> ', translation.text) + # The quick brown fox -> 빠른 갈색 여우 + # jumps over -> 이상 점프 + # the lazy dog -> 게으른 개 + +~~~~~~~~~~~~~~~~~~ +Language detection +~~~~~~~~~~~~~~~~~~ + +The detect method, as its name implies, identifies the language used in +a given sentence. + +.. code:: python + + >>> translator.detect('이 문장은 한글로 쓰여졌습니다.') + # + >>> translator.detect('この文章は日本語で書かれました。') + # + >>> translator.detect('This sentence is written in English.') + # + >>> translator.detect('Tiu frazo estas skribita en Esperanto.') + # + +--------- +API Guide +--------- + + +====================== +googletrans.Translator +====================== + +.. autoclass:: googletrans.Translator + :members: + +================== +googletrans.models +================== + +.. automodule:: googletrans.models + :members: + +================== +googletrans.gtoken +================== + +.. hint:: + + This is for internal use only to generate a valid token to access + translate.google.com ajax API. + +.. automodule:: googletrans.gtoken + :members: + +===================== +googletrans.LANGUAGES +===================== + +.. hint:: + + iso639-1 language codes for + `supported languages `_ + for translation. Some language codes also include a country code, like zh-CN or zh-TW. + +.. literalinclude:: ../googletrans/constants.py + :language: python + :lines: 70-182 + :linenos: + +================================ +googletrans.DEFAULT_SERVICE_URLS +================================ + +.. hint:: + + `DEFAULT_SERVICE_URLS `_ is the list of current available Google Translation service urls. + + For using these service urls, please check `Customize service URL`_. \ No newline at end of file diff --git a/docs/_build/html/_static/basic.css b/docs/_build/html/_static/basic.css new file mode 100644 index 0000000..24bc73e --- /dev/null +++ b/docs/_build/html/_static/basic.css @@ -0,0 +1,855 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- 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 form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +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 { + min-width: 450px; + max-width: 800px; +} + +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; +} + +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + +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; +} + +img.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 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; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + 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; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- 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; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + + +/* -- 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; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +dl.footnote > dt, +dl.citation > dt { + float: left; + margin-right: 0.5em; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +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; +} + +.classifier:before { + font-style: normal; + margin: 0.5em; + content: ":"; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; +} + +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 { + margin: 1em 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: absolute; + 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/_build/html/_static/doctools.js b/docs/_build/html/_static/doctools.js new file mode 100644 index 0000000..daccd20 --- /dev/null +++ b/docs/_build/html/_static/doctools.js @@ -0,0 +1,315 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2020 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) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + 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 rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + 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); + 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(); + if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { + this.initOnKeyListeners(); + } + }, + + /** + * 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).keydown(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' + && !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) { + 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(); +}); diff --git a/docs/_build/html/_static/documentation_options.js b/docs/_build/html/_static/documentation_options.js new file mode 100644 index 0000000..8d2a467 --- /dev/null +++ b/docs/_build/html/_static/documentation_options.js @@ -0,0 +1,12 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '3.0.0', + LANGUAGE: 'None', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false +}; \ No newline at end of file diff --git a/docs/_build/html/_static/file.png b/docs/_build/html/_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/_build/html/_static/jquery-3.5.1.js b/docs/_build/html/_static/jquery-3.5.1.js new file mode 100644 index 0000000..5093733 --- /dev/null +++ b/docs/_build/html/_static/jquery-3.5.1.js @@ -0,0 +1,10872 @@ +/*! + * jQuery JavaScript Library v3.5.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: 2020-05-04T22:49Z + */ +( 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. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +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 = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( 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; +} +/* 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.5.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 ); + }; + +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 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + 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" && !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 ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // 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() {}, + + 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 ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + 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; + }, + + // 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 flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // 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 = toType( obj ); + + if ( isFunction( obj ) || 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.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +( 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(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = 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]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // 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 + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + 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" ) + }, + + rhtml = /HTML$/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-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + 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(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { 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 + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.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 ) { + 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 && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // 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 ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } 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 && + inDisabledFieldset( 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 ) { + var namespace = elem.namespaceURI, + docElem = ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * 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 + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + 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 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + 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 ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* 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 ) { + + var input; + + // 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( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // 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( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + 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" ); + } + + // Support: Opera 10 - 11 only + // 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 + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + 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 + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + 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 ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + 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 + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ 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 ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + 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 += ""; + + /* eslint-disable max-len */ + + 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; + /* eslint-enable max-len */ + + }; + }, + + "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 || 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 ) { + // eslint-disable-next-line no-unused-expressions + 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 > length ? + 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 ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + 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; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + 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 ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( 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; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +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 ( 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 ( 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 ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + 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 ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( 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 && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && 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 = 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 && 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 ( 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, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + 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, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].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" || + 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 ( toType( 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 ( !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; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +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[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ 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 ][ 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( camelCase ); + } else { + key = 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 = 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 documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +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. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + 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 = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + 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 = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( 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; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // 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, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +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, attached, 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 ( toType( 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; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +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 ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + 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 = Object.create( null ); + } + 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 ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ 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() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + 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: 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 + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( 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; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +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 || Date.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, + code: 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 ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// 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 + + // Support: IE <=10 - 11, Edge 12 - 13 only + // 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( elem ).children( "tbody" )[ 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 ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle 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 = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + 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 && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, 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 && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( 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 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 ); + }; + +var swap = function( elem, options, callback ) { + 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.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( 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; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + 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; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, 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"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +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 === "" && !isAttached( 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.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.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 cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( 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 potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +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" + }; + +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 boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "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, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": 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: {}, + + // 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 = 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) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + 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 = 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, dimension ) { + jQuery.cssHooks[ dimension ] = { + 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, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + 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 ( prefix !== "margin" ) { + 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 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + 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 = Date.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 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + 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 = 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 ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( 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 ( 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 || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !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 ( 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 ) { + 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 = Date.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://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + 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 ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + 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, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( 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 ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + 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, valueIsFunction, + 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; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + 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 + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = 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 && !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() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ 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 && isFunction( elem[ type ] ) && !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; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + 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 ); + } + } +} ); + + +// 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() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || 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.document || 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 = { guid: Date.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 && toType( 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 = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // 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 ( 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() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // 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 - 15 + // 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 and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + 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.guid++ ) + + 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 ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // 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 ( 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.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + 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, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( 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 ( 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 htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? 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.ontimeout = + 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 = xhr.ontimeout = 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 or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + +
+
+
+
+ +
+

Googletrans: Free and Unlimited Google translate API for Python

+https://img.shields.io/github/license/mashape/apistatus.svg +https://travis-ci.org/ssut/py-googletrans.svg?branch=master +https://readthedocs.org/projects/py-googletrans/badge/?version=latest +https://badge.fury.io/py/googletrans.svg +https://coveralls.io/repos/github/ssut/py-googletrans/badge.svg +https://codeclimate.com/github/ssut/py-googletrans/badges/gpa.svg +

Googletrans is a free and unlimited python library that +implemented Google Translate API. This uses the Google Translate Ajax +API to make calls to such methods as +detect and translate.

+
+

Features

+
    +
  • Fast and reliable - it uses the same servers that +translate.google.com uses

  • +
  • Auto language detection

  • +
  • Bulk translations

  • +
  • Customizable service URL

  • +
  • Connection pooling (the advantage of using requests.Session)

  • +
  • HTTP/2 support

  • +
+
+

Note on library usage

+
    +
  • The maximum character limit on a single text is 15k.

  • +
  • Due to limitations of the web version of google translate, this API +does not guarantee that the library would work properly at all times. +(so please use this library if you don’t care about stability.)

  • +
  • If you want to use a stable API, I highly recommend you to use +Google’s official translate +API.

  • +
  • If you get HTTP 5xx error or errors like #6, it’s probably because +Google has banned your client IP address.

  • +
+
+
+
+

Quickstart

+

You can install it from PyPI:

+
$ pip install googletrans
+
+
+
+

HTTP/2 support

+

This is a great deal for everyone! (up to 2x times faster in my test) If +you want to get googletrans faster you should install +hyper package. Googletrans will +automatically detect if hyper is installed and if so, it will be used +for http networking.

+
+
+

Basic Usage

+

If source language is not given, google translate attempts to detect the +source language.

+
>>> from googletrans import Translator
+>>> translator = Translator()
+>>> translator.translate('안녕하세요.')
+# <Translated src=ko dest=en text=Good evening. pronunciation=Good evening.>
+
+>>> translator.translate('안녕하세요.', dest='ja')
+# <Translated src=ko dest=ja text=こんにちは。 pronunciation=Kon'nichiwa.>
+
+>>> translator.translate('veritas lux mea', src='la')
+# <Translated src=la dest=en text=The truth is my light pronunciation=The truth is my light>
+
+
+
+
+

Customize service URL

+

You can use another google translate domain for translation. If multiple +URLs are provided it then randomly chooses a domain.

+
>>> from googletrans import Translator
+>>> translator = Translator(service_urls=[
+      'translate.google.com',
+      'translate.google.co.kr',
+    ])
+
+
+
+
+

Advanced Usage (Bulk)

+

Array can be used to translate a batch of strings in a single method +call and a single HTTP session. The exact same method shown above work +for arrays as well.

+
>>> translations = translator.translate(['The quick brown fox', 'jumps over', 'the lazy dog'], dest='ko')
+>>> for translation in translations:
+...    print(translation.origin, ' -> ', translation.text)
+# The quick brown fox  ->  빠른 갈색 여우
+# jumps over  ->  이상 점프
+# the lazy dog  ->  게으른 개
+
+
+
+
+

Language detection

+

The detect method, as its name implies, identifies the language used in +a given sentence.

+
>>> translator.detect('이 문장은 한글로 쓰여졌습니다.')
+# <Detected lang=ko confidence=0.27041003>
+>>> translator.detect('この文章は日本語で書かれました。')
+# <Detected lang=ja confidence=0.64889508>
+>>> translator.detect('This sentence is written in English.')
+# <Detected lang=en confidence=0.22348526>
+>>> translator.detect('Tiu frazo estas skribita en Esperanto.')
+# <Detected lang=eo confidence=0.10538048>
+
+
+
+
+
+

API Guide

+
+
+
+

googletrans.Translator

+
+
+class googletrans.Translator(service_urls=None, user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64)', raise_exception=False, proxies: Dict[str, httpcore._sync.base.SyncHTTPTransport] = None, timeout: httpx._config.Timeout = None, http2=True)
+

Google Translate ajax API implementation class

+

You have to create an instance of Translator to use this API

+
+
Parameters
+
    +
  • service_urls (a sequence of strings) – google translate url list. URLs will be used randomly. +For example ['translate.google.com', 'translate.google.co.kr']

  • +
  • user_agent (str) – the User-Agent header to send when making requests.

  • +
  • proxies (dictionary) – proxies configuration. +Dictionary mapping protocol or protocol and host to the URL of the proxy +For example {'http': 'foo.bar:3128', 'http://host.name': 'foo.bar:4012'}

  • +
  • timeout (number or a double of numbers) – Definition of timeout for httpx library. +Will be used for every request.

  • +
  • proxies – proxies configuration. +Dictionary mapping protocol or protocol and host to the URL of the proxy +For example {'http': 'foo.bar:3128', 'http://host.name': 'foo.bar:4012'}

  • +
  • raise_exception (boolean) – if True then raise exception if smth will go wrong

  • +
+
+
+
+
+translate(text, dest='en', src='auto', **kwargs)
+

Translate text from source language to destination language

+
+
Parameters
+
    +
  • text (UTF-8 str; unicode; string sequence (list, tuple, iterator, generator)) – The source text(s) to be translated. Batch translation is supported via sequence input.

  • +
  • dest – The language to translate the source text into. +The value should be one of the language codes listed in googletrans.LANGUAGES +or one of the language names listed in googletrans.LANGCODES.

  • +
  • deststr; unicode

  • +
  • src – The language of the source text. +The value should be one of the language codes listed in googletrans.LANGUAGES +or one of the language names listed in googletrans.LANGCODES. +If a language is not specified, +the system will attempt to identify the source language automatically.

  • +
  • srcstr; unicode

  • +
+
+
Return type
+

Translated

+
+
Return type
+

list (when a list is passed)

+
+
+
+
Basic usage:
>>> from googletrans import Translator
+>>> translator = Translator()
+>>> translator.translate('안녕하세요.')
+<Translated src=ko dest=en text=Good evening. pronunciation=Good evening.>
+>>> translator.translate('안녕하세요.', dest='ja')
+<Translated src=ko dest=ja text=こんにちは。 pronunciation=Kon'nichiwa.>
+>>> translator.translate('veritas lux mea', src='la')
+<Translated src=la dest=en text=The truth is my light pronunciation=The truth is my light>
+
+
+
+
Advanced usage:
>>> translations = translator.translate(['The quick brown fox', 'jumps over', 'the lazy dog'], dest='ko')
+>>> for translation in translations:
+...    print(translation.origin, ' -> ', translation.text)
+The quick brown fox  ->  빠른 갈색 여우
+jumps over  ->  이상 점프
+the lazy dog  ->  게으른 개
+
+
+
+
+
+ +
+
+detect(text, **kwargs)
+

Detect language of the input text

+
+
Parameters
+

text (UTF-8 str; unicode; string sequence (list, tuple, iterator, generator)) – The source text(s) whose language you want to identify. +Batch detection is supported via sequence input.

+
+
Return type
+

Detected

+
+
Return type
+

list (when a list is passed)

+
+
+
+
Basic usage:
>>> from googletrans import Translator
+>>> translator = Translator()
+>>> translator.detect('이 문장은 한글로 쓰여졌습니다.')
+<Detected lang=ko confidence=0.27041003>
+>>> translator.detect('この文章は日本語で書かれました。')
+<Detected lang=ja confidence=0.64889508>
+>>> translator.detect('This sentence is written in English.')
+<Detected lang=en confidence=0.22348526>
+>>> translator.detect('Tiu frazo estas skribita en Esperanto.')
+<Detected lang=eo confidence=0.10538048>
+
+
+
+
Advanced usage:
>>> langs = translator.detect(['한국어', '日本語', 'English', 'le français'])
+>>> for lang in langs:
+...    print(lang.lang, lang.confidence)
+ko 1
+ja 0.92929292
+en 0.96954316
+fr 0.043500196
+
+
+
+
+
+ +
+ +
+
+

googletrans.models

+
+
+class googletrans.models.Translated(src, dest, origin, text, pronunciation, extra_data=None, **kwargs)
+

Translate result object

+
+
Parameters
+
    +
  • src – source language (default: auto)

  • +
  • dest – destination language (default: en)

  • +
  • origin – original text

  • +
  • text – translated text

  • +
  • pronunciation – pronunciation

  • +
+
+
+
+ +
+
+class googletrans.models.Detected(lang, confidence, **kwargs)
+

Language detection result object

+
+
Parameters
+
    +
  • lang – detected language

  • +
  • confidence – the confidence of detection result (0.00 to 1.00)

  • +
+
+
+
+ +
+
+

googletrans.gtoken

+
+

Hint

+

This is for internal use only to generate a valid token to access +translate.google.com ajax API.

+
+
+
+class googletrans.gtoken.TokenAcquirer(client: httpx._client.Client, tkk='0', host='translate.google.com')
+

Google Translate API token generator

+

translate.google.com uses a token to authorize the requests. If you are +not Google, you do have this token and will have to pay for use. +This class is the result of reverse engineering on the obfuscated and +minified code used by Google to generate such token.

+

The token is based on a seed which is updated once per hour and on the +text that will be translated. +Both are combined - by some strange math - in order to generate a final +token (e.g. 744915.856682) which is used by the API to validate the +request.

+

This operation will cause an additional request to get an initial +token from translate.google.com.

+
+
Example usage:
>>> from googletrans.gtoken import TokenAcquirer
+>>> acquirer = TokenAcquirer()
+>>> text = 'test'
+>>> tk = acquirer.do(text)
+>>> tk
+950629.577246
+
+
+
+
+
+ +
+
+

googletrans.LANGUAGES

+
+

Hint

+

iso639-1 language codes for +supported languages +for translation. Some language codes also include a country code, like zh-CN or zh-TW.

+
+
  1
+  2
+  3
+  4
+  5
+  6
+  7
+  8
+  9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+ 24
+ 25
+ 26
+ 27
+ 28
+ 29
+ 30
+ 31
+ 32
+ 33
+ 34
+ 35
+ 36
+ 37
+ 38
+ 39
+ 40
+ 41
+ 42
+ 43
+ 44
+ 45
+ 46
+ 47
+ 48
+ 49
+ 50
+ 51
+ 52
+ 53
+ 54
+ 55
+ 56
+ 57
+ 58
+ 59
+ 60
+ 61
+ 62
+ 63
+ 64
+ 65
+ 66
+ 67
+ 68
+ 69
+ 70
+ 71
+ 72
+ 73
+ 74
+ 75
+ 76
+ 77
+ 78
+ 79
+ 80
+ 81
+ 82
+ 83
+ 84
+ 85
+ 86
+ 87
+ 88
+ 89
+ 90
+ 91
+ 92
+ 93
+ 94
+ 95
+ 96
+ 97
+ 98
+ 99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
                        
+SPECIAL_CASES = {
+    'ee': 'et',
+}
+
+LANGUAGES = {
+    'af': 'afrikaans',
+    'sq': 'albanian',
+    'am': 'amharic',
+    'ar': 'arabic',
+    'hy': 'armenian',
+    'az': 'azerbaijani',
+    'eu': 'basque',
+    'be': 'belarusian',
+    'bn': 'bengali',
+    'bs': 'bosnian',
+    'bg': 'bulgarian',
+    'ca': 'catalan',
+    'ceb': 'cebuano',
+    'ny': 'chichewa',
+    'zh-cn': 'chinese (simplified)',
+    'zh-tw': 'chinese (traditional)',
+    'co': 'corsican',
+    'hr': 'croatian',
+    'cs': 'czech',
+    'da': 'danish',
+    'nl': 'dutch',
+    'en': 'english',
+    'eo': 'esperanto',
+    'et': 'estonian',
+    'tl': 'filipino',
+    'fi': 'finnish',
+    'fr': 'french',
+    'fy': 'frisian',
+    'gl': 'galician',
+    'ka': 'georgian',
+    'de': 'german',
+    'el': 'greek',
+    'gu': 'gujarati',
+    'ht': 'haitian creole',
+    'ha': 'hausa',
+    'haw': 'hawaiian',
+    'iw': 'hebrew',
+    'he': 'hebrew',
+    'hi': 'hindi',
+    'hmn': 'hmong',
+    'hu': 'hungarian',
+    'is': 'icelandic',
+    'ig': 'igbo',
+    'id': 'indonesian',
+    'ga': 'irish',
+    'it': 'italian',
+    'ja': 'japanese',
+    'jw': 'javanese',
+    'kn': 'kannada',
+    'kk': 'kazakh',
+    'km': 'khmer',
+    'ko': 'korean',
+    'ku': 'kurdish (kurmanji)',
+    'ky': 'kyrgyz',
+    'lo': 'lao',
+    'la': 'latin',
+    'lv': 'latvian',
+    'lt': 'lithuanian',
+    'lb': 'luxembourgish',
+    'mk': 'macedonian',
+    'mg': 'malagasy',
+    'ms': 'malay',
+    'ml': 'malayalam',
+    'mt': 'maltese',
+    'mi': 'maori',
+    'mr': 'marathi',
+    'mn': 'mongolian',
+    'my': 'myanmar (burmese)',
+    'ne': 'nepali',
+    'no': 'norwegian',
+    'or': 'odia',
+    'ps': 'pashto',
+    'fa': 'persian',
+    'pl': 'polish',
+    'pt': 'portuguese',
+    'pa': 'punjabi',
+    'ro': 'romanian',
+    'ru': 'russian',
+    'sm': 'samoan',
+    'gd': 'scots gaelic',
+    'sr': 'serbian',
+    'st': 'sesotho',
+    'sn': 'shona',
+    'sd': 'sindhi',
+    'si': 'sinhala',
+    'sk': 'slovak',
+    'sl': 'slovenian',
+    'so': 'somali',
+    'es': 'spanish',
+    'su': 'sundanese',
+    'sw': 'swahili',
+    'sv': 'swedish',
+    'tg': 'tajik',
+    'ta': 'tamil',
+    'te': 'telugu',
+    'th': 'thai',
+    'tr': 'turkish',
+    'uk': 'ukrainian',
+    'ur': 'urdu',
+    'ug': 'uyghur',
+    'uz': 'uzbek',
+    'vi': 'vietnamese',
+    'cy': 'welsh',
+    'xh': 'xhosa',
+    'yi': 'yiddish',
+    'yo': 'yoruba',
+    'zu': 'zulu',
+
+
+
+
+

googletrans.DEFAULT_SERVICE_URLS

+
+

Hint

+

DEFAULT_SERVICE_URLS is the list of current available Google Translation service urls.

+

For using these service urls, please check Customize service URL.

+
+
+ + +
+
+
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv new file mode 100644 index 0000000..f268c28 --- /dev/null +++ b/docs/_build/html/objects.inv @@ -0,0 +1,6 @@ +# Sphinx inventory version 2 +# Project: Googletrans +# Version: 3.0.0 +# The remainder of this file is compressed using zlib. +xڕj0 y +zYFl SVyѺbe.GQ$!± ` xQ wph8srjB\:_GugBx%W.Cϝ9ۈk9܈H=SA{tЏHl+HPnua1l0Y4SL + + + + + + Python Module Index — Googletrans 3.0.0 documentation + + + + + + + + + + + + + + + + +
+
+
+
+ + +

Python Module Index

+ +
+ g +
+ + + + + + + + + + + + + +
 
+ g
+ googletrans +
    + googletrans.gtoken +
    + googletrans.models +
+ + +
+
+
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/docs/_build/html/search.html b/docs/_build/html/search.html new file mode 100644 index 0000000..e9a6433 --- /dev/null +++ b/docs/_build/html/search.html @@ -0,0 +1,88 @@ + + + + + + + Search — Googletrans 3.0.0 documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Search

+
+ +

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

+
+

+ Searching for multiple words only shows matches that contain + all words. +

+
+ + + +
+ +
+ +
+ +
+
+
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js new file mode 100644 index 0000000..36283db --- /dev/null +++ b/docs/_build/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["index.rst"],objects:{"googletrans.Translator":{detect:[0,1,1,""],translate:[0,1,1,""]},"googletrans.gtoken":{TokenAcquirer:[0,0,1,""]},"googletrans.models":{Detected:[0,0,1,""],Translated:[0,0,1,""]},googletrans:{Translator:[0,0,1,""],gtoken:[0,2,0,"-"],models:[0,2,0,"-"]}},objnames:{"0":["py","class","Python class"],"1":["py","method","Python method"],"2":["py","module","Python module"]},objtypes:{"0":"py:class","1":"py:method","2":"py:module"},terms:{"043500196":0,"10538048":0,"15k":0,"22348526":0,"27041003":0,"3128":0,"4012":0,"577246":0,"5xx":0,"64889508":0,"744915":0,"856682":0,"92929292":0,"950629":0,"96954316":0,"\u3053\u306e\u6587\u7ae0\u306f\u65e5\u672c\u8a9e\u3067\u66f8\u304b\u308c\u307e\u3057\u305f":0,"\u3053\u3093\u306b\u3061\u306f":0,"\u65e5\u672c\u8a9e":0,"\uac08\uc0c9":0,"\uac1c":0,"\uac8c\uc73c\ub978":0,"\ubb38\uc7a5\uc740":0,"\ube60\ub978":0,"\uc4f0\uc5ec\uc84c\uc2b5\ub2c8\ub2e4":0,"\uc548\ub155\ud558\uc138\uc694":0,"\uc5ec\uc6b0":0,"\uc774":0,"\uc774\uc0c1":0,"\uc810\ud504":0,"\ud55c\uad6d\uc5b4":0,"\ud55c\uae00\ub85c":0,"boolean":0,"class":0,"default":0,"final":0,"fran\u00e7ai":0,"import":0,"return":0,"true":0,For:0,The:0,Will:0,_client:0,_config:0,_sync:0,about:0,abov:0,access:0,acquir:0,addit:0,address:0,advantag:0,afrikaan:0,agent:0,ajax:0,albanian:0,all:0,also:0,amhar:0,anoth:0,arab:0,armenian:0,arrai:0,attempt:0,author:0,auto:0,automat:0,avail:0,azerbaijani:0,ban:0,bar:0,base:0,basqu:0,batch:0,becaus:0,belarusian:0,bengali:0,bosnian:0,both:0,brown:0,bulgarian:0,burmes:0,call:0,can:0,care:0,cat:[],catalan:0,caus:0,ceb:0,cebuano:0,charact:0,check:0,chichewa:0,chines:0,choos:0,client:0,code:0,com:0,combin:0,confid:0,configur:0,connect:0,const_valu:[],constant:[],corsican:0,countri:0,creat:0,creol:0,croatian:0,current:0,customiz:0,czech:0,danish:0,deal:0,default_raise_except:[],definit:0,dest:0,destin:0,dict:0,dictionari:0,doe:0,dog:0,domain:0,don:0,doubl:0,due:0,dummy_data:[],dutch:0,engin:0,english:0,error:0,esperanto:0,esta:0,estonian:0,even:0,everi:0,everyon:0,exact:0,exampl:0,except:0,extra_data:0,fals:0,fast:0,faster:0,filipino:0,finnish:0,foo:0,fox:0,frazo:0,french:0,frisian:0,from:0,gaelic:0,galician:0,gener:0,georgian:0,german:0,get:0,given:0,good:0,great:0,greek:0,guarante:0,gujarati:0,haitian:0,has:0,hausa:0,have:0,haw:0,hawaiian:0,header:0,hebrew:0,highli:0,hindi:0,hmn:0,hmong:0,host:0,hour:0,http2:0,httpcore:0,httpx:0,hungarian:0,hyper:0,iceland:0,identifi:0,igbo:0,implement:0,impli:0,includ:0,indonesian:0,initi:0,input:0,instal:0,instanc:0,intern:0,irish:0,iso639:0,italian:0,item:[],iter:0,its:0,japanes:0,javanes:0,jump:0,kannada:0,kazakh:0,khmer:0,kon:0,korean:0,kurdish:0,kurmanji:0,kwarg:0,kyrgyz:0,lang:0,langcod:0,lao:0,latin:0,latvian:0,lazi:0,light:0,like:0,limit:0,line:[],lineno:[],list:0,lithuanian:0,lux:0,luxembourgish:0,macedonian:0,make:0,malagasi:0,malai:0,malayalam:0,maltes:0,maori:0,map:0,marathi:0,math:0,maximum:0,mea:0,method:0,minifi:0,mongolian:0,mozilla:0,multipl:0,myanmar:0,name:0,nepali:0,network:0,nichiwa:0,none:0,norwegian:0,number:0,obfusc:0,object:0,odia:0,offici:0,onc:0,one:0,onli:0,oper:0,order:0,origin:0,over:0,packag:0,pai:0,paramet:0,pashto:0,pass:0,per:0,persian:0,pip:0,pleas:0,polish:0,pool:0,portugues:0,print:0,probabl:0,pronunci:0,properli:0,protocol:0,provid:0,proxi:0,punjabi:0,pypi:0,quick:0,rais:0,raise_except:0,randomli:0,recommend:0,reliabl:0,request:0,result:0,revers:0,romanian:0,russian:0,same:0,samoan:0,scot:0,seed:0,send:0,sentenc:0,sequenc:0,serbian:0,server:0,service_url:0,sesotho:0,session:0,shona:0,should:0,shown:0,simplifi:0,sindhi:0,singl:0,sinhala:0,skribita:0,slovak:0,slovenian:0,smth:0,somali:0,some:0,sourc:0,spanish:0,special_cas:0,specifi:0,src:0,stabil:0,stabl:0,str:0,strang:0,string:0,sundanes:0,swahili:0,swedish:0,synchttptransport:0,system:0,tajik:0,tamil:0,telugu:0,test:0,text:0,thai:0,thi:0,time:0,timeout:0,tiu:0,tkk:0,token:0,tokenacquir:0,tradit:0,truth:0,tupl:0,turkish:0,type:0,ukrainian:0,unicod:0,updat:0,urdu:0,use:0,used:0,user:0,user_ag:0,uses:0,using:0,utf:0,uyghur:0,uzbek:0,valid:0,valu:0,verita:0,version:0,via:0,vietnames:0,want:0,web:0,well:0,welsh:0,when:0,which:0,whose:0,win64:0,window:0,work:0,would:0,written:0,wrong:0,x64:0,xhosa:0,yiddish:0,yoruba:0,you:0,your:0,zulu:0},titles:["Googletrans: Free and Unlimited Google translate API for Python"],titleterms:{advanc:0,api:0,basic:0,bulk:0,custom:0,default_service_url:0,detect:0,featur:0,free:0,googl:0,googletran:0,gtoken:0,guid:0,http:0,languag:0,librari:0,model:0,note:0,python:0,quickstart:0,servic:0,special_cas:[],support:0,translat:0,unlimit:0,url:0,usag:0}}) \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst index 42ffe04..20efeda 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -184,5 +184,15 @@ googletrans.LANGUAGES .. literalinclude:: ../googletrans/constants.py :language: python - :lines: 7- - :linenos: \ No newline at end of file + :lines: 70-182 + :linenos: + +================================ +googletrans.DEFAULT_SERVICE_URLS +================================ + +.. hint:: + + `DEFAULT_SERVICE_URLS `_ is the list of current available Google Translation service urls. + + For using these service urls, please check `Customize service URL`_. \ No newline at end of file diff --git a/googletrans/constants.py b/googletrans/constants.py index f249fc0..3063b19 100644 --- a/googletrans/constants.py +++ b/googletrans/constants.py @@ -1,72 +1,73 @@ DEFAULT_USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)' -DEFAULT_SERVICE_URLS = ('translate.google.ac','translate.google.ad','translate.google.ae', - 'translate.google.al','translate.google.am','translate.google.as', - 'translate.google.at','translate.google.az','translate.google.ba', - 'translate.google.be','translate.google.bf','translate.google.bg', - 'translate.google.bi','translate.google.bj','translate.google.bs', - 'translate.google.bt','translate.google.by','translate.google.ca', - 'translate.google.cat','translate.google.cc','translate.google.cd', - 'translate.google.cf','translate.google.cg','translate.google.ch', - 'translate.google.ci','translate.google.cl','translate.google.cm', - 'translate.google.cn','translate.google.co.ao','translate.google.co.bw', - 'translate.google.co.ck','translate.google.co.cr','translate.google.co.id', - 'translate.google.co.il','translate.google.co.in','translate.google.co.jp', - 'translate.google.co.ke','translate.google.co.kr','translate.google.co.ls', - 'translate.google.co.ma','translate.google.co.mz','translate.google.co.nz', - 'translate.google.co.th','translate.google.co.tz','translate.google.co.ug', - 'translate.google.co.uk','translate.google.co.uz','translate.google.co.ve', - 'translate.google.co.vi','translate.google.co.za','translate.google.co.zm', - 'translate.google.co.zw','translate.google.com.af', - 'translate.google.com.ag','translate.google.com.ai','translate.google.com.ar', - 'translate.google.com.au','translate.google.com.bd','translate.google.com.bh', - 'translate.google.com.bn','translate.google.com.bo','translate.google.com.br', - 'translate.google.com.bz','translate.google.com.co','translate.google.com.cu', - 'translate.google.com.cy','translate.google.com.do','translate.google.com.ec', - 'translate.google.com.eg','translate.google.com.et','translate.google.com.fj', - 'translate.google.com.gh','translate.google.com.gi','translate.google.com.gt', - 'translate.google.com.hk','translate.google.com.jm','translate.google.com.kh', - 'translate.google.com.kw','translate.google.com.lb', - 'translate.google.com.ly','translate.google.com.mm','translate.google.com.mt', - 'translate.google.com.mx','translate.google.com.my','translate.google.com.na', - 'translate.google.com.ng','translate.google.com.ni','translate.google.com.np', - 'translate.google.com.om','translate.google.com.pa','translate.google.com.pe', - 'translate.google.com.pg','translate.google.com.ph','translate.google.com.pk', - 'translate.google.com.pr','translate.google.com.py','translate.google.com.qa', - 'translate.google.com.sa','translate.google.com.sb','translate.google.com.sg', - 'translate.google.com.sl','translate.google.com.sv','translate.google.com.tj', - 'translate.google.com.tr','translate.google.com.tw','translate.google.com.ua', - 'translate.google.com.uy','translate.google.com.vc','translate.google.com.vn', - 'translate.google.com','translate.google.cv', - 'translate.google.cz','translate.google.de','translate.google.dj', - 'translate.google.dk','translate.google.dm','translate.google.dz', - 'translate.google.ee','translate.google.es','translate.google.eu', - 'translate.google.fi','translate.google.fm','translate.google.fr', - 'translate.google.ga','translate.google.ge','translate.google.gf', - 'translate.google.gg','translate.google.gl','translate.google.gm', - 'translate.google.gp','translate.google.gr','translate.google.gy', - 'translate.google.hn','translate.google.hr','translate.google.ht', - 'translate.google.hu','translate.google.ie','translate.google.im', - 'translate.google.io','translate.google.iq','translate.google.is', - 'translate.google.it','translate.google.je','translate.google.jo', - 'translate.google.kg','translate.google.ki','translate.google.kz', - 'translate.google.la','translate.google.li','translate.google.lk', - 'translate.google.lt','translate.google.lu','translate.google.lv', - 'translate.google.md','translate.google.me','translate.google.mg', - 'translate.google.mk','translate.google.ml','translate.google.mn', - 'translate.google.ms','translate.google.mu','translate.google.mv', - 'translate.google.mw','translate.google.ne','translate.google.nf', - 'translate.google.nl','translate.google.no','translate.google.nr', - 'translate.google.nu','translate.google.pl','translate.google.pn', - 'translate.google.ps','translate.google.pt','translate.google.ro', - 'translate.google.rs','translate.google.ru','translate.google.rw', - 'translate.google.sc','translate.google.se','translate.google.sh', - 'translate.google.si','translate.google.sk','translate.google.sm', - 'translate.google.sn','translate.google.so','translate.google.sr', - 'translate.google.st','translate.google.td','translate.google.tg', - 'translate.google.tk','translate.google.tl','translate.google.tm', - 'translate.google.tn','translate.google.to','translate.google.tt', - 'translate.google.us','translate.google.vg','translate.google.vu','translate.google.ws') +DEFAULT_SERVICE_URLS = ('translate.google.ac', 'translate.google.ad', 'translate.google.ae', + 'translate.google.al', 'translate.google.am', 'translate.google.as', + 'translate.google.at', 'translate.google.az', 'translate.google.ba', + 'translate.google.be', 'translate.google.bf', 'translate.google.bg', + 'translate.google.bi', 'translate.google.bj', 'translate.google.bs', + 'translate.google.bt', 'translate.google.by', 'translate.google.ca', + 'translate.google.cat', 'translate.google.cc', 'translate.google.cd', + 'translate.google.cf', 'translate.google.cg', 'translate.google.ch', + 'translate.google.ci', 'translate.google.cl', 'translate.google.cm', + 'translate.google.cn', 'translate.google.co.ao', 'translate.google.co.bw', + 'translate.google.co.ck', 'translate.google.co.cr', 'translate.google.co.id', + 'translate.google.co.il', 'translate.google.co.in', 'translate.google.co.jp', + 'translate.google.co.ke', 'translate.google.co.kr', 'translate.google.co.ls', + 'translate.google.co.ma', 'translate.google.co.mz', 'translate.google.co.nz', + 'translate.google.co.th', 'translate.google.co.tz', 'translate.google.co.ug', + 'translate.google.co.uk', 'translate.google.co.uz', 'translate.google.co.ve', + 'translate.google.co.vi', 'translate.google.co.za', 'translate.google.co.zm', + 'translate.google.co.zw', 'translate.google.com.af', 'translate.google.com.ag', + 'translate.google.com.ai', 'translate.google.com.ar', 'translate.google.com.au', + 'translate.google.com.bd', 'translate.google.com.bh', 'translate.google.com.bn', + 'translate.google.com.bo', 'translate.google.com.br', 'translate.google.com.bz', + 'translate.google.com.co', 'translate.google.com.cu', 'translate.google.com.cy', + 'translate.google.com.do', 'translate.google.com.ec', 'translate.google.com.eg', + 'translate.google.com.et', 'translate.google.com.fj', 'translate.google.com.gh', + 'translate.google.com.gi', 'translate.google.com.gt', 'translate.google.com.hk', + 'translate.google.com.jm', 'translate.google.com.kh', 'translate.google.com.kw', + 'translate.google.com.lb', 'translate.google.com.ly', 'translate.google.com.mm', + 'translate.google.com.mt', 'translate.google.com.mx', 'translate.google.com.my', + 'translate.google.com.na', 'translate.google.com.ng', 'translate.google.com.ni', + 'translate.google.com.np', 'translate.google.com.om', 'translate.google.com.pa', + 'translate.google.com.pe', 'translate.google.com.pg', 'translate.google.com.ph', + 'translate.google.com.pk', 'translate.google.com.pr', 'translate.google.com.py', + 'translate.google.com.qa', 'translate.google.com.sa', 'translate.google.com.sb', + 'translate.google.com.sg', 'translate.google.com.sl', 'translate.google.com.sv', + 'translate.google.com.tj', 'translate.google.com.tr', 'translate.google.com.tw', + 'translate.google.com.ua', 'translate.google.com.uy', 'translate.google.com.vc', + 'translate.google.com.vn', 'translate.google.com', 'translate.google.cv', + 'translate.google.cz', 'translate.google.de', 'translate.google.dj', + 'translate.google.dk', 'translate.google.dm', 'translate.google.dz', + 'translate.google.ee', 'translate.google.es', 'translate.google.eu', + 'translate.google.fi', 'translate.google.fm', 'translate.google.fr', + 'translate.google.ga', 'translate.google.ge', 'translate.google.gf', + 'translate.google.gg', 'translate.google.gl', 'translate.google.gm', + 'translate.google.gp', 'translate.google.gr', 'translate.google.gy', + 'translate.google.hn', 'translate.google.hr', 'translate.google.ht', + 'translate.google.hu', 'translate.google.ie', 'translate.google.im', + 'translate.google.io', 'translate.google.iq', 'translate.google.is', + 'translate.google.it', 'translate.google.je', 'translate.google.jo', + 'translate.google.kg', 'translate.google.ki', 'translate.google.kz', + 'translate.google.la', 'translate.google.li', 'translate.google.lk', + 'translate.google.lt', 'translate.google.lu', 'translate.google.lv', + 'translate.google.md', 'translate.google.me', 'translate.google.mg', + 'translate.google.mk', 'translate.google.ml', 'translate.google.mn', + 'translate.google.ms', 'translate.google.mu', 'translate.google.mv', + 'translate.google.mw', 'translate.google.ne', 'translate.google.nf', + 'translate.google.nl', 'translate.google.no', 'translate.google.nr', + 'translate.google.nu', 'translate.google.pl', 'translate.google.pn', + 'translate.google.ps', 'translate.google.pt', 'translate.google.ro', + 'translate.google.rs', 'translate.google.ru', 'translate.google.rw', + 'translate.google.sc', 'translate.google.se', 'translate.google.sh', + 'translate.google.si', 'translate.google.sk', 'translate.google.sm', + 'translate.google.sn', 'translate.google.so', 'translate.google.sr', + 'translate.google.st', 'translate.google.td', 'translate.google.tg', + 'translate.google.tk', 'translate.google.tl', 'translate.google.tm', + 'translate.google.tn', 'translate.google.to', 'translate.google.tt', + 'translate.google.us', 'translate.google.vg', 'translate.google.vu', + 'translate.google.ws') + SPECIAL_CASES = { 'ee': 'et', }