diff --git a/doc/_static/ajax-loader.gif b/doc/_static/ajax-loader.gif
new file mode 100644
index 0000000000..61faf8cab2
Binary files /dev/null and b/doc/_static/ajax-loader.gif differ
diff --git a/doc/_static/basic.css b/doc/_static/basic.css
new file mode 100644
index 0000000000..9fa77d886d
--- /dev/null
+++ b/doc/_static/basic.css
@@ -0,0 +1,599 @@
+/*
+ * basic.css
+ * ~~~~~~~~~
+ *
+ * Sphinx stylesheet -- basic theme.
+ *
+ * :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+ clear: both;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+ width: 100%;
+ font-size: 90%;
+}
+
+div.related h3 {
+ display: none;
+}
+
+div.related ul {
+ margin: 0;
+ padding: 0 0 0 10px;
+ list-style: none;
+}
+
+div.related li {
+ display: inline;
+}
+
+div.related li.right {
+ float: right;
+ margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+ padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+ float: left;
+ width: 230px;
+ margin-left: -100%;
+ font-size: 90%;
+}
+
+div.sphinxsidebar ul {
+ list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+ margin-left: 20px;
+ list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+ margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+ border: 1px solid #98dbcc;
+ font-family: sans-serif;
+ font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+ width: 170px;
+}
+
+div.sphinxsidebar #searchbox input[type="submit"] {
+ width: 30px;
+}
+
+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%;
+}
+
+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 dl, table.indextable dd {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+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;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+a.headerlink {
+ visibility: hidden;
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink,
+caption:hover > a.headerlink,
+p.caption:hover > a.headerlink,
+div.code-block-caption:hover > a.headerlink {
+ visibility: visible;
+}
+
+div.body p.caption {
+ text-align: inherit;
+}
+
+div.body td {
+ text-align: left;
+}
+
+.field-list ul {
+ padding-left: 1em;
+}
+
+.first {
+ margin-top: 0 !important;
+}
+
+p.rubric {
+ margin-top: 30px;
+ font-weight: bold;
+}
+
+img.align-left, .figure.align-left, object.align-left {
+ clear: left;
+ float: left;
+ margin-right: 1em;
+}
+
+img.align-right, .figure.align-right, object.align-right {
+ clear: right;
+ float: right;
+ margin-left: 1em;
+}
+
+img.align-center, .figure.align-center, object.align-center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.align-left {
+ text-align: left;
+}
+
+.align-center {
+ text-align: center;
+}
+
+.align-right {
+ text-align: right;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar {
+ margin: 0 0 0.5em 1em;
+ border: 1px solid #ddb;
+ padding: 7px 7px 0 7px;
+ background-color: #ffe;
+ width: 40%;
+ float: right;
+}
+
+p.sidebar-title {
+ font-weight: bold;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+div.topic {
+ border: 1px solid #ccc;
+ padding: 7px 7px 0 7px;
+ margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+ font-size: 1.1em;
+ font-weight: bold;
+ margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ padding: 7px;
+}
+
+div.admonition dt {
+ font-weight: bold;
+}
+
+div.admonition dl {
+ margin-bottom: 0;
+}
+
+p.admonition-title {
+ margin: 0px 10px 5px 0px;
+ font-weight: bold;
+}
+
+div.body p.centered {
+ text-align: center;
+ margin-top: 25px;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+ border: 0;
+ border-collapse: collapse;
+}
+
+table 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.field-list td, table.field-list th {
+ border: 0 !important;
+}
+
+table.footnote td, table.footnote th {
+ border: 0 !important;
+}
+
+th {
+ text-align: left;
+ padding-right: 5px;
+}
+
+table.citation {
+ border-left: solid 1px gray;
+ margin-left: 1px;
+}
+
+table.citation td {
+ border-bottom: none;
+}
+
+/* -- figures --------------------------------------------------------------- */
+
+div.figure {
+ margin: 0.5em;
+ padding: 0.5em;
+}
+
+div.figure p.caption {
+ padding: 0.3em;
+}
+
+div.figure p.caption span.caption-number {
+ font-style: italic;
+}
+
+div.figure p.caption span.caption-text {
+}
+
+
+/* -- other body styles ----------------------------------------------------- */
+
+ol.arabic {
+ list-style: decimal;
+}
+
+ol.loweralpha {
+ list-style: lower-alpha;
+}
+
+ol.upperalpha {
+ list-style: upper-alpha;
+}
+
+ol.lowerroman {
+ list-style: lower-roman;
+}
+
+ol.upperroman {
+ list-style: upper-roman;
+}
+
+dl {
+ margin-bottom: 15px;
+}
+
+dd p {
+ margin-top: 0px;
+}
+
+dd ul, dd table {
+ margin-bottom: 10px;
+}
+
+dd {
+ margin-top: 3px;
+ margin-bottom: 10px;
+ margin-left: 30px;
+}
+
+dt:target, .highlighted {
+ background-color: #fbe54e;
+}
+
+dl.glossary dt {
+ font-weight: bold;
+ font-size: 1.1em;
+}
+
+.field-list ul {
+ margin: 0;
+ padding-left: 1em;
+}
+
+.field-list p {
+ margin: 0;
+}
+
+.optional {
+ font-size: 1.3em;
+}
+
+.sig-paren {
+ font-size: larger;
+}
+
+.versionmodified {
+ font-style: italic;
+}
+
+.system-message {
+ background-color: #fda;
+ padding: 5px;
+ border: 3px solid red;
+}
+
+.footnote:target {
+ background-color: #ffa;
+}
+
+.line-block {
+ display: block;
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+
+.line-block .line-block {
+ margin-top: 0;
+ margin-bottom: 0;
+ margin-left: 1.5em;
+}
+
+.guilabel, .menuselection {
+ font-family: sans-serif;
+}
+
+.accelerator {
+ text-decoration: underline;
+}
+
+.classifier {
+ font-style: oblique;
+}
+
+abbr, acronym {
+ border-bottom: dotted 1px;
+ cursor: help;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+ overflow: auto;
+ overflow-y: hidden; /* fixes display issues on Chrome browsers */
+}
+
+td.linenos pre {
+ padding: 5px 0px;
+ border: 0;
+ background-color: transparent;
+ color: #aaa;
+}
+
+table.highlighttable {
+ margin-left: 0.5em;
+}
+
+table.highlighttable td {
+ padding: 0 0.5em 0 0.5em;
+}
+
+div.code-block-caption {
+ padding: 2px 5px;
+ font-size: small;
+}
+
+div.code-block-caption code {
+ background-color: transparent;
+}
+
+div.code-block-caption + div > div.highlight > pre {
+ margin-top: 0;
+}
+
+div.code-block-caption span.caption-number {
+ padding: 0.1em 0.3em;
+ font-style: italic;
+}
+
+div.code-block-caption span.caption-text {
+}
+
+div.literal-block-wrapper {
+ padding: 1em 1em 0;
+}
+
+div.literal-block-wrapper div.highlight {
+ margin: 0;
+}
+
+code.descname {
+ background-color: transparent;
+ font-weight: bold;
+ font-size: 1.2em;
+}
+
+code.descclassname {
+ background-color: transparent;
+}
+
+code.xref, a code {
+ background-color: transparent;
+ font-weight: bold;
+}
+
+h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
+ background-color: transparent;
+}
+
+.viewcode-link {
+ float: right;
+}
+
+.viewcode-back {
+ float: right;
+ font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+ margin: -1px -10px;
+ padding: 0 10px;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+ vertical-align: middle;
+}
+
+div.body div.math p {
+ text-align: center;
+}
+
+span.eqno {
+ float: right;
+}
+
+/* -- 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/doc/_static/comment-bright.png b/doc/_static/comment-bright.png
new file mode 100644
index 0000000000..551517b8c8
Binary files /dev/null and b/doc/_static/comment-bright.png differ
diff --git a/doc/_static/comment-close.png b/doc/_static/comment-close.png
new file mode 100644
index 0000000000..09b54be46d
Binary files /dev/null and b/doc/_static/comment-close.png differ
diff --git a/doc/_static/comment.png b/doc/_static/comment.png
new file mode 100644
index 0000000000..92feb52b88
Binary files /dev/null and b/doc/_static/comment.png differ
diff --git a/doc/_static/css/badge_only.css b/doc/_static/css/badge_only.css
new file mode 100644
index 0000000000..51d180e4e2
--- /dev/null
+++ b/doc/_static/css/badge_only.css
@@ -0,0 +1,226 @@
+@charset "UTF-8";
+.fa:before {
+ -webkit-font-smoothing: antialiased;
+}
+
+.clearfix {
+ *zoom: 1;
+}
+.clearfix:before, .clearfix:after {
+ display: table;
+ content: "";
+}
+.clearfix:after {
+ clear: both;
+}
+
+@font-face {
+ font-family: FontAwesome;
+ font-weight: normal;
+ font-style: normal;
+ src: url("../font/fontawesome_webfont.eot");
+ src: url("../font/fontawesome_webfont.eot?#iefix") format("embedded-opentype"), url("../font/fontawesome_webfont.woff") format("woff"), url("../font/fontawesome_webfont.ttf") format("truetype"), url("../font/fontawesome_webfont.svg#FontAwesome") format("svg");
+}
+.fa:before {
+ display: inline-block;
+ font-family: FontAwesome;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1;
+ text-decoration: inherit;
+}
+
+a .fa {
+ display: inline-block;
+ text-decoration: inherit;
+}
+
+li .fa {
+ display: inline-block;
+}
+li .fa-large:before,
+li .fa-large:before {
+ /* 1.5 increased font size for fa-large * 1.25 width */
+ width: 1.875em;
+}
+
+ul.fas {
+ list-style-type: none;
+ margin-left: 2em;
+ text-indent: -0.8em;
+}
+ul.fas li .fa {
+ width: 0.8em;
+}
+ul.fas li .fa-large:before,
+ul.fas li .fa-large:before {
+ /* 1.5 increased font size for fa-large * 1.25 width */
+ vertical-align: baseline;
+}
+
+.fa-book:before {
+ content: "";
+}
+
+.icon-book:before {
+ content: "";
+}
+
+.fa-caret-down:before {
+ content: "";
+}
+
+.icon-caret-down:before {
+ content: "";
+}
+
+.fa-caret-up:before {
+ content: "";
+}
+
+.icon-caret-up:before {
+ content: "";
+}
+
+.fa-caret-left:before {
+ content: "";
+}
+
+.icon-caret-left:before {
+ content: "";
+}
+
+.fa-caret-right:before {
+ content: "";
+}
+
+.icon-caret-right:before {
+ content: "";
+}
+
+.rst-versions {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ width: 300px;
+ color: #fcfcfc;
+ background: #1f1d1d;
+ border-top: solid 10px #343131;
+ font-family: "Lato", "proxima-nova", "Helvetica Neue", Arial, sans-serif;
+ z-index: 400;
+}
+.rst-versions a {
+ color: #2980B9;
+ text-decoration: none;
+}
+.rst-versions .rst-badge-small {
+ display: none;
+}
+.rst-versions .rst-current-version {
+ padding: 12px;
+ background-color: #272525;
+ display: block;
+ text-align: right;
+ font-size: 90%;
+ cursor: pointer;
+ color: #27AE60;
+ *zoom: 1;
+}
+.rst-versions .rst-current-version:before, .rst-versions .rst-current-version:after {
+ display: table;
+ content: "";
+}
+.rst-versions .rst-current-version:after {
+ clear: both;
+}
+.rst-versions .rst-current-version .fa {
+ color: #fcfcfc;
+}
+.rst-versions .rst-current-version .fa-book {
+ float: left;
+}
+.rst-versions .rst-current-version .icon-book {
+ float: left;
+}
+.rst-versions .rst-current-version.rst-out-of-date {
+ background-color: #E74C3C;
+ color: #fff;
+}
+.rst-versions .rst-current-version.rst-active-old-version {
+ background-color: #F1C40F;
+ color: #000;
+}
+.rst-versions.shift-up .rst-other-versions {
+ display: block;
+}
+.rst-versions .rst-other-versions {
+ font-size: 90%;
+ padding: 12px;
+ color: gray;
+ display: none;
+}
+.rst-versions .rst-other-versions hr {
+ display: block;
+ height: 1px;
+ border: 0;
+ margin: 20px 0;
+ padding: 0;
+ border-top: solid 1px #413d3d;
+}
+.rst-versions .rst-other-versions dd {
+ display: inline-block;
+ margin: 0;
+}
+.rst-versions .rst-other-versions dd a {
+ display: inline-block;
+ padding: 6px;
+ color: #fcfcfc;
+}
+.rst-versions.rst-badge {
+ width: auto;
+ bottom: 20px;
+ right: 20px;
+ left: auto;
+ border: none;
+ max-width: 300px;
+}
+.rst-versions.rst-badge .icon-book {
+ float: none;
+}
+.rst-versions.rst-badge .fa-book {
+ float: none;
+}
+.rst-versions.rst-badge.shift-up .rst-current-version {
+ text-align: right;
+}
+.rst-versions.rst-badge.shift-up .rst-current-version .fa-book {
+ float: left;
+}
+.rst-versions.rst-badge.shift-up .rst-current-version .icon-book {
+ float: left;
+}
+.rst-versions.rst-badge .rst-current-version {
+ width: auto;
+ height: 30px;
+ line-height: 30px;
+ padding: 0 6px;
+ display: block;
+ text-align: center;
+}
+
+@media screen and (max-width: 768px) {
+ .rst-versions {
+ width: 85%;
+ display: none;
+ }
+ .rst-versions.shift {
+ display: block;
+ }
+
+ img {
+ width: 100%;
+ height: auto;
+ }
+}
+
+/*# sourceMappingURL=badge_only.css.map */
diff --git a/doc/_static/css/badge_only.css.map b/doc/_static/css/badge_only.css.map
new file mode 100644
index 0000000000..aeb56ddb04
--- /dev/null
+++ b/doc/_static/css/badge_only.css.map
@@ -0,0 +1,7 @@
+{
+"version": 3,
+"mappings": "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",
+"sources": ["../../../bower_components/wyrm/sass/wyrm_core/_mixin.sass","../../../bower_components/bourbon/dist/css3/_font-face.scss","../../../sass/_theme_badge_fa.sass","../../../sass/_theme_badge.sass","../../../bower_components/wyrm/sass/wyrm_core/_wy_variables.sass","../../../sass/_theme_variables.sass","../../../bower_components/neat/app/assets/stylesheets/grid/_media.scss"],
+"names": [],
+"file": "badge_only.css"
+}
diff --git a/doc/_static/css/theme.css b/doc/_static/css/theme.css
new file mode 100644
index 0000000000..909adec4ea
--- /dev/null
+++ b/doc/_static/css/theme.css
@@ -0,0 +1,5096 @@
+@charset "UTF-8";
+* {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+article, aside, details, figcaption, figure, footer, header, hgroup, nav, section {
+ display: block;
+}
+
+audio, canvas, video {
+ display: inline-block;
+ *display: inline;
+ *zoom: 1;
+}
+
+audio:not([controls]) {
+ display: none;
+}
+
+[hidden] {
+ display: none;
+}
+
+* {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+html {
+ font-size: 100%;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+
+body {
+ margin: 0;
+}
+
+a:hover, a:active {
+ outline: 0;
+}
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+b, strong {
+ font-weight: bold;
+}
+
+blockquote {
+ margin: 0;
+}
+
+dfn {
+ font-style: italic;
+}
+
+ins {
+ background: #ff9;
+ color: #000;
+ text-decoration: none;
+}
+
+mark {
+ background: #ff0;
+ color: #000;
+ font-style: italic;
+ font-weight: bold;
+}
+
+pre, code, .rst-content tt, .rst-content code, kbd, samp {
+ font-family: monospace, serif;
+ _font-family: "courier new", monospace;
+ font-size: 1em;
+}
+
+pre {
+ white-space: pre;
+}
+
+q {
+ quotes: none;
+}
+
+q:before, q:after {
+ content: "";
+ content: none;
+}
+
+small {
+ font-size: 85%;
+}
+
+sub, sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+ul, ol, dl {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ list-style-image: none;
+}
+
+li {
+ list-style: none;
+}
+
+dd {
+ margin: 0;
+}
+
+img {
+ border: 0;
+ -ms-interpolation-mode: bicubic;
+ vertical-align: middle;
+ max-width: 100%;
+}
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+figure {
+ margin: 0;
+}
+
+form {
+ margin: 0;
+}
+
+fieldset {
+ border: 0;
+ margin: 0;
+ padding: 0;
+}
+
+label {
+ cursor: pointer;
+}
+
+legend {
+ border: 0;
+ *margin-left: -7px;
+ padding: 0;
+ white-space: normal;
+}
+
+button, input, select, textarea {
+ font-size: 100%;
+ margin: 0;
+ vertical-align: baseline;
+ *vertical-align: middle;
+}
+
+button, input {
+ line-height: normal;
+}
+
+button, input[type="button"], input[type="reset"], input[type="submit"] {
+ cursor: pointer;
+ -webkit-appearance: button;
+ *overflow: visible;
+}
+
+button[disabled], input[disabled] {
+ cursor: default;
+}
+
+input[type="checkbox"], input[type="radio"] {
+ box-sizing: border-box;
+ padding: 0;
+ *width: 13px;
+ *height: 13px;
+}
+
+input[type="search"] {
+ -webkit-appearance: textfield;
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button {
+ -webkit-appearance: none;
+}
+
+button::-moz-focus-inner, input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+textarea {
+ overflow: auto;
+ vertical-align: top;
+ resize: vertical;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td {
+ vertical-align: top;
+}
+
+.chromeframe {
+ margin: 0.2em 0;
+ background: #ccc;
+ color: black;
+ padding: 0.2em 0;
+}
+
+.ir {
+ display: block;
+ border: 0;
+ text-indent: -999em;
+ overflow: hidden;
+ background-color: transparent;
+ background-repeat: no-repeat;
+ text-align: left;
+ direction: ltr;
+ *line-height: 0;
+}
+
+.ir br {
+ display: none;
+}
+
+.hidden {
+ display: none !important;
+ visibility: hidden;
+}
+
+.visuallyhidden {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+
+.visuallyhidden.focusable:active, .visuallyhidden.focusable:focus {
+ clip: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ position: static;
+ width: auto;
+}
+
+.invisible {
+ visibility: hidden;
+}
+
+.relative {
+ position: relative;
+}
+
+big, small {
+ font-size: 100%;
+}
+
+@media print {
+ html, body, section {
+ background: none !important;
+ }
+
+ * {
+ box-shadow: none !important;
+ text-shadow: none !important;
+ filter: none !important;
+ -ms-filter: none !important;
+ }
+
+ a, a:visited {
+ text-decoration: underline;
+ }
+
+ .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after {
+ content: "";
+ }
+
+ pre, blockquote {
+ page-break-inside: avoid;
+ }
+
+ thead {
+ display: table-header-group;
+ }
+
+ tr, img {
+ page-break-inside: avoid;
+ }
+
+ img {
+ max-width: 100% !important;
+ }
+
+ @page {
+ margin: 0.5cm;
+ }
+ p, h2, .rst-content .toctree-wrapper p.caption, h3 {
+ orphans: 3;
+ widows: 3;
+ }
+
+ h2, .rst-content .toctree-wrapper p.caption, h3 {
+ page-break-after: avoid;
+ }
+}
+.fa:before, .wy-menu-vertical li span.toctree-expand:before, .wy-menu-vertical li.on a span.toctree-expand:before, .wy-menu-vertical li.current > a span.toctree-expand:before, .rst-content .admonition-title:before, .rst-content h1 .headerlink:before, .rst-content h2 .headerlink:before, .rst-content h3 .headerlink:before, .rst-content h4 .headerlink:before, .rst-content h5 .headerlink:before, .rst-content h6 .headerlink:before, .rst-content dl dt .headerlink:before, .rst-content p.caption .headerlink:before, .rst-content tt.download span:first-child:before, .rst-content code.download span:first-child:before, .icon:before, .wy-dropdown .caret:before, .wy-inline-validate.wy-inline-validate-success .wy-input-context:before, .wy-inline-validate.wy-inline-validate-danger .wy-input-context:before, .wy-inline-validate.wy-inline-validate-warning .wy-input-context:before, .wy-inline-validate.wy-inline-validate-info .wy-input-context:before, .wy-alert, .rst-content .note, .rst-content .attention, .rst-content .caution, .rst-content .danger, .rst-content .error, .rst-content .hint, .rst-content .important, .rst-content .tip, .rst-content .warning, .rst-content .seealso, .rst-content .admonition-todo, .btn, input[type="text"], input[type="password"], input[type="email"], input[type="url"], input[type="date"], input[type="month"], input[type="time"], input[type="datetime"], input[type="datetime-local"], input[type="week"], input[type="number"], input[type="search"], input[type="tel"], input[type="color"], select, textarea, .wy-menu-vertical li.on a, .wy-menu-vertical li.current > a, .wy-side-nav-search > a, .wy-side-nav-search .wy-dropdown > a, .wy-nav-top a {
+ -webkit-font-smoothing: antialiased;
+}
+
+.clearfix {
+ *zoom: 1;
+}
+.clearfix:before, .clearfix:after {
+ display: table;
+ content: "";
+}
+.clearfix:after {
+ clear: both;
+}
+
+/*!
+ * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+/* FONT PATH
+ * -------------------------- */
+@font-face {
+ font-family: 'FontAwesome';
+ src: url("../fonts/fontawesome-webfont.eot?v=4.2.0");
+ src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff?v=4.2.0") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.2.0") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular") format("svg");
+ font-weight: normal;
+ font-style: normal;
+}
+.fa, .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li.on a span.toctree-expand, .wy-menu-vertical li.current > a span.toctree-expand, .rst-content .admonition-title, .rst-content h1 .headerlink, .rst-content h2 .headerlink, .rst-content h3 .headerlink, .rst-content h4 .headerlink, .rst-content h5 .headerlink, .rst-content h6 .headerlink, .rst-content dl dt .headerlink, .rst-content p.caption .headerlink, .rst-content tt.download span:first-child, .rst-content code.download span:first-child, .icon {
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+/* makes the font 33% larger relative to the icon container */
+.fa-lg {
+ font-size: 1.33333em;
+ line-height: 0.75em;
+ vertical-align: -15%;
+}
+
+.fa-2x {
+ font-size: 2em;
+}
+
+.fa-3x {
+ font-size: 3em;
+}
+
+.fa-4x {
+ font-size: 4em;
+}
+
+.fa-5x {
+ font-size: 5em;
+}
+
+.fa-fw {
+ width: 1.28571em;
+ text-align: center;
+}
+
+.fa-ul {
+ padding-left: 0;
+ margin-left: 2.14286em;
+ list-style-type: none;
+}
+.fa-ul > li {
+ position: relative;
+}
+
+.fa-li {
+ position: absolute;
+ left: -2.14286em;
+ width: 2.14286em;
+ top: 0.14286em;
+ text-align: center;
+}
+.fa-li.fa-lg {
+ left: -1.85714em;
+}
+
+.fa-border {
+ padding: .2em .25em .15em;
+ border: solid 0.08em #eee;
+ border-radius: .1em;
+}
+
+.pull-right {
+ float: right;
+}
+
+.pull-left {
+ float: left;
+}
+
+.fa.pull-left, .wy-menu-vertical li span.pull-left.toctree-expand, .wy-menu-vertical li.on a span.pull-left.toctree-expand, .wy-menu-vertical li.current > a span.pull-left.toctree-expand, .rst-content .pull-left.admonition-title, .rst-content h1 .pull-left.headerlink, .rst-content h2 .pull-left.headerlink, .rst-content h3 .pull-left.headerlink, .rst-content h4 .pull-left.headerlink, .rst-content h5 .pull-left.headerlink, .rst-content h6 .pull-left.headerlink, .rst-content dl dt .pull-left.headerlink, .rst-content p.caption .pull-left.headerlink, .rst-content tt.download span.pull-left:first-child, .rst-content code.download span.pull-left:first-child, .pull-left.icon {
+ margin-right: .3em;
+}
+.fa.pull-right, .wy-menu-vertical li span.pull-right.toctree-expand, .wy-menu-vertical li.on a span.pull-right.toctree-expand, .wy-menu-vertical li.current > a span.pull-right.toctree-expand, .rst-content .pull-right.admonition-title, .rst-content h1 .pull-right.headerlink, .rst-content h2 .pull-right.headerlink, .rst-content h3 .pull-right.headerlink, .rst-content h4 .pull-right.headerlink, .rst-content h5 .pull-right.headerlink, .rst-content h6 .pull-right.headerlink, .rst-content dl dt .pull-right.headerlink, .rst-content p.caption .pull-right.headerlink, .rst-content tt.download span.pull-right:first-child, .rst-content code.download span.pull-right:first-child, .pull-right.icon {
+ margin-left: .3em;
+}
+
+.fa-spin {
+ -webkit-animation: fa-spin 2s infinite linear;
+ animation: fa-spin 2s infinite linear;
+}
+
+@-webkit-keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+@keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+.fa-rotate-90 {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg);
+}
+
+.fa-rotate-180 {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
+ -webkit-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ transform: rotate(180deg);
+}
+
+.fa-rotate-270 {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
+ -webkit-transform: rotate(270deg);
+ -ms-transform: rotate(270deg);
+ transform: rotate(270deg);
+}
+
+.fa-flip-horizontal {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0);
+ -webkit-transform: scale(-1, 1);
+ -ms-transform: scale(-1, 1);
+ transform: scale(-1, 1);
+}
+
+.fa-flip-vertical {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
+ -webkit-transform: scale(1, -1);
+ -ms-transform: scale(1, -1);
+ transform: scale(1, -1);
+}
+
+:root .fa-rotate-90,
+:root .fa-rotate-180,
+:root .fa-rotate-270,
+:root .fa-flip-horizontal,
+:root .fa-flip-vertical {
+ filter: none;
+}
+
+.fa-stack {
+ position: relative;
+ display: inline-block;
+ width: 2em;
+ height: 2em;
+ line-height: 2em;
+ vertical-align: middle;
+}
+
+.fa-stack-1x, .fa-stack-2x {
+ position: absolute;
+ left: 0;
+ width: 100%;
+ text-align: center;
+}
+
+.fa-stack-1x {
+ line-height: inherit;
+}
+
+.fa-stack-2x {
+ font-size: 2em;
+}
+
+.fa-inverse {
+ color: #fff;
+}
+
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+ readers do not read off random characters that represent icons */
+.fa-glass:before {
+ content: "";
+}
+
+.fa-music:before {
+ content: "";
+}
+
+.fa-search:before, .icon-search:before {
+ content: "";
+}
+
+.fa-envelope-o:before {
+ content: "";
+}
+
+.fa-heart:before {
+ content: "";
+}
+
+.fa-star:before {
+ content: "";
+}
+
+.fa-star-o:before {
+ content: "";
+}
+
+.fa-user:before {
+ content: "";
+}
+
+.fa-film:before {
+ content: "";
+}
+
+.fa-th-large:before {
+ content: "";
+}
+
+.fa-th:before {
+ content: "";
+}
+
+.fa-th-list:before {
+ content: "";
+}
+
+.fa-check:before {
+ content: "";
+}
+
+.fa-remove:before,
+.fa-close:before,
+.fa-times:before {
+ content: "";
+}
+
+.fa-search-plus:before {
+ content: "";
+}
+
+.fa-search-minus:before {
+ content: "";
+}
+
+.fa-power-off:before {
+ content: "";
+}
+
+.fa-signal:before {
+ content: "";
+}
+
+.fa-gear:before,
+.fa-cog:before {
+ content: "";
+}
+
+.fa-trash-o:before {
+ content: "";
+}
+
+.fa-home:before, .icon-home:before {
+ content: "";
+}
+
+.fa-file-o:before {
+ content: "";
+}
+
+.fa-clock-o:before {
+ content: "";
+}
+
+.fa-road:before {
+ content: "";
+}
+
+.fa-download:before, .rst-content tt.download span:first-child:before, .rst-content code.download span:first-child:before {
+ content: "";
+}
+
+.fa-arrow-circle-o-down:before {
+ content: "";
+}
+
+.fa-arrow-circle-o-up:before {
+ content: "";
+}
+
+.fa-inbox:before {
+ content: "";
+}
+
+.fa-play-circle-o:before {
+ content: "";
+}
+
+.fa-rotate-right:before,
+.fa-repeat:before {
+ content: "";
+}
+
+.fa-refresh:before {
+ content: "";
+}
+
+.fa-list-alt:before {
+ content: "";
+}
+
+.fa-lock:before {
+ content: "";
+}
+
+.fa-flag:before {
+ content: "";
+}
+
+.fa-headphones:before {
+ content: "";
+}
+
+.fa-volume-off:before {
+ content: "";
+}
+
+.fa-volume-down:before {
+ content: "";
+}
+
+.fa-volume-up:before {
+ content: "";
+}
+
+.fa-qrcode:before {
+ content: "";
+}
+
+.fa-barcode:before {
+ content: "";
+}
+
+.fa-tag:before {
+ content: "";
+}
+
+.fa-tags:before {
+ content: "";
+}
+
+.fa-book:before, .icon-book:before {
+ content: "";
+}
+
+.fa-bookmark:before {
+ content: "";
+}
+
+.fa-print:before {
+ content: "";
+}
+
+.fa-camera:before {
+ content: "";
+}
+
+.fa-font:before {
+ content: "";
+}
+
+.fa-bold:before {
+ content: "";
+}
+
+.fa-italic:before {
+ content: "";
+}
+
+.fa-text-height:before {
+ content: "";
+}
+
+.fa-text-width:before {
+ content: "";
+}
+
+.fa-align-left:before {
+ content: "";
+}
+
+.fa-align-center:before {
+ content: "";
+}
+
+.fa-align-right:before {
+ content: "";
+}
+
+.fa-align-justify:before {
+ content: "";
+}
+
+.fa-list:before {
+ content: "";
+}
+
+.fa-dedent:before,
+.fa-outdent:before {
+ content: "";
+}
+
+.fa-indent:before {
+ content: "";
+}
+
+.fa-video-camera:before {
+ content: "";
+}
+
+.fa-photo:before,
+.fa-image:before,
+.fa-picture-o:before {
+ content: "";
+}
+
+.fa-pencil:before {
+ content: "";
+}
+
+.fa-map-marker:before {
+ content: "";
+}
+
+.fa-adjust:before {
+ content: "";
+}
+
+.fa-tint:before {
+ content: "";
+}
+
+.fa-edit:before,
+.fa-pencil-square-o:before {
+ content: "";
+}
+
+.fa-share-square-o:before {
+ content: "";
+}
+
+.fa-check-square-o:before {
+ content: "";
+}
+
+.fa-arrows:before {
+ content: "";
+}
+
+.fa-step-backward:before {
+ content: "";
+}
+
+.fa-fast-backward:before {
+ content: "";
+}
+
+.fa-backward:before {
+ content: "";
+}
+
+.fa-play:before {
+ content: "";
+}
+
+.fa-pause:before {
+ content: "";
+}
+
+.fa-stop:before {
+ content: "";
+}
+
+.fa-forward:before {
+ content: "";
+}
+
+.fa-fast-forward:before {
+ content: "";
+}
+
+.fa-step-forward:before {
+ content: "";
+}
+
+.fa-eject:before {
+ content: "";
+}
+
+.fa-chevron-left:before {
+ content: "";
+}
+
+.fa-chevron-right:before {
+ content: "";
+}
+
+.fa-plus-circle:before {
+ content: "";
+}
+
+.fa-minus-circle:before {
+ content: "";
+}
+
+.fa-times-circle:before, .wy-inline-validate.wy-inline-validate-danger .wy-input-context:before {
+ content: "";
+}
+
+.fa-check-circle:before, .wy-inline-validate.wy-inline-validate-success .wy-input-context:before {
+ content: "";
+}
+
+.fa-question-circle:before {
+ content: "";
+}
+
+.fa-info-circle:before {
+ content: "";
+}
+
+.fa-crosshairs:before {
+ content: "";
+}
+
+.fa-times-circle-o:before {
+ content: "";
+}
+
+.fa-check-circle-o:before {
+ content: "";
+}
+
+.fa-ban:before {
+ content: "";
+}
+
+.fa-arrow-left:before {
+ content: "";
+}
+
+.fa-arrow-right:before {
+ content: "";
+}
+
+.fa-arrow-up:before {
+ content: "";
+}
+
+.fa-arrow-down:before {
+ content: "";
+}
+
+.fa-mail-forward:before,
+.fa-share:before {
+ content: "";
+}
+
+.fa-expand:before {
+ content: "";
+}
+
+.fa-compress:before {
+ content: "";
+}
+
+.fa-plus:before {
+ content: "";
+}
+
+.fa-minus:before {
+ content: "";
+}
+
+.fa-asterisk:before {
+ content: "";
+}
+
+.fa-exclamation-circle:before, .wy-inline-validate.wy-inline-validate-warning .wy-input-context:before, .wy-inline-validate.wy-inline-validate-info .wy-input-context:before, .rst-content .admonition-title:before {
+ content: "";
+}
+
+.fa-gift:before {
+ content: "";
+}
+
+.fa-leaf:before {
+ content: "";
+}
+
+.fa-fire:before, .icon-fire:before {
+ content: "";
+}
+
+.fa-eye:before {
+ content: "";
+}
+
+.fa-eye-slash:before {
+ content: "";
+}
+
+.fa-warning:before,
+.fa-exclamation-triangle:before {
+ content: "";
+}
+
+.fa-plane:before {
+ content: "";
+}
+
+.fa-calendar:before {
+ content: "";
+}
+
+.fa-random:before {
+ content: "";
+}
+
+.fa-comment:before {
+ content: "";
+}
+
+.fa-magnet:before {
+ content: "";
+}
+
+.fa-chevron-up:before {
+ content: "";
+}
+
+.fa-chevron-down:before {
+ content: "";
+}
+
+.fa-retweet:before {
+ content: "";
+}
+
+.fa-shopping-cart:before {
+ content: "";
+}
+
+.fa-folder:before {
+ content: "";
+}
+
+.fa-folder-open:before {
+ content: "";
+}
+
+.fa-arrows-v:before {
+ content: "";
+}
+
+.fa-arrows-h:before {
+ content: "";
+}
+
+.fa-bar-chart-o:before,
+.fa-bar-chart:before {
+ content: "";
+}
+
+.fa-twitter-square:before {
+ content: "";
+}
+
+.fa-facebook-square:before {
+ content: "";
+}
+
+.fa-camera-retro:before {
+ content: "";
+}
+
+.fa-key:before {
+ content: "";
+}
+
+.fa-gears:before,
+.fa-cogs:before {
+ content: "";
+}
+
+.fa-comments:before {
+ content: "";
+}
+
+.fa-thumbs-o-up:before {
+ content: "";
+}
+
+.fa-thumbs-o-down:before {
+ content: "";
+}
+
+.fa-star-half:before {
+ content: "";
+}
+
+.fa-heart-o:before {
+ content: "";
+}
+
+.fa-sign-out:before {
+ content: "";
+}
+
+.fa-linkedin-square:before {
+ content: "";
+}
+
+.fa-thumb-tack:before {
+ content: "";
+}
+
+.fa-external-link:before {
+ content: "";
+}
+
+.fa-sign-in:before {
+ content: "";
+}
+
+.fa-trophy:before {
+ content: "";
+}
+
+.fa-github-square:before {
+ content: "";
+}
+
+.fa-upload:before {
+ content: "";
+}
+
+.fa-lemon-o:before {
+ content: "";
+}
+
+.fa-phone:before {
+ content: "";
+}
+
+.fa-square-o:before {
+ content: "";
+}
+
+.fa-bookmark-o:before {
+ content: "";
+}
+
+.fa-phone-square:before {
+ content: "";
+}
+
+.fa-twitter:before {
+ content: "";
+}
+
+.fa-facebook:before {
+ content: "";
+}
+
+.fa-github:before, .icon-github:before {
+ content: "";
+}
+
+.fa-unlock:before {
+ content: "";
+}
+
+.fa-credit-card:before {
+ content: "";
+}
+
+.fa-rss:before {
+ content: "";
+}
+
+.fa-hdd-o:before {
+ content: "";
+}
+
+.fa-bullhorn:before {
+ content: "";
+}
+
+.fa-bell:before {
+ content: "";
+}
+
+.fa-certificate:before {
+ content: "";
+}
+
+.fa-hand-o-right:before {
+ content: "";
+}
+
+.fa-hand-o-left:before {
+ content: "";
+}
+
+.fa-hand-o-up:before {
+ content: "";
+}
+
+.fa-hand-o-down:before {
+ content: "";
+}
+
+.fa-arrow-circle-left:before, .icon-circle-arrow-left:before {
+ content: "";
+}
+
+.fa-arrow-circle-right:before, .icon-circle-arrow-right:before {
+ content: "";
+}
+
+.fa-arrow-circle-up:before {
+ content: "";
+}
+
+.fa-arrow-circle-down:before {
+ content: "";
+}
+
+.fa-globe:before {
+ content: "";
+}
+
+.fa-wrench:before {
+ content: "";
+}
+
+.fa-tasks:before {
+ content: "";
+}
+
+.fa-filter:before {
+ content: "";
+}
+
+.fa-briefcase:before {
+ content: "";
+}
+
+.fa-arrows-alt:before {
+ content: "";
+}
+
+.fa-group:before,
+.fa-users:before {
+ content: "";
+}
+
+.fa-chain:before,
+.fa-link:before,
+.icon-link:before {
+ content: "";
+}
+
+.fa-cloud:before {
+ content: "";
+}
+
+.fa-flask:before {
+ content: "";
+}
+
+.fa-cut:before,
+.fa-scissors:before {
+ content: "";
+}
+
+.fa-copy:before,
+.fa-files-o:before {
+ content: "";
+}
+
+.fa-paperclip:before {
+ content: "";
+}
+
+.fa-save:before,
+.fa-floppy-o:before {
+ content: "";
+}
+
+.fa-square:before {
+ content: "";
+}
+
+.fa-navicon:before,
+.fa-reorder:before,
+.fa-bars:before {
+ content: "";
+}
+
+.fa-list-ul:before {
+ content: "";
+}
+
+.fa-list-ol:before {
+ content: "";
+}
+
+.fa-strikethrough:before {
+ content: "";
+}
+
+.fa-underline:before {
+ content: "";
+}
+
+.fa-table:before {
+ content: "";
+}
+
+.fa-magic:before {
+ content: "";
+}
+
+.fa-truck:before {
+ content: "";
+}
+
+.fa-pinterest:before {
+ content: "";
+}
+
+.fa-pinterest-square:before {
+ content: "";
+}
+
+.fa-google-plus-square:before {
+ content: "";
+}
+
+.fa-google-plus:before {
+ content: "";
+}
+
+.fa-money:before {
+ content: "";
+}
+
+.fa-caret-down:before, .wy-dropdown .caret:before, .icon-caret-down:before {
+ content: "";
+}
+
+.fa-caret-up:before {
+ content: "";
+}
+
+.fa-caret-left:before {
+ content: "";
+}
+
+.fa-caret-right:before {
+ content: "";
+}
+
+.fa-columns:before {
+ content: "";
+}
+
+.fa-unsorted:before,
+.fa-sort:before {
+ content: "";
+}
+
+.fa-sort-down:before,
+.fa-sort-desc:before {
+ content: "";
+}
+
+.fa-sort-up:before,
+.fa-sort-asc:before {
+ content: "";
+}
+
+.fa-envelope:before {
+ content: "";
+}
+
+.fa-linkedin:before {
+ content: "";
+}
+
+.fa-rotate-left:before,
+.fa-undo:before {
+ content: "";
+}
+
+.fa-legal:before,
+.fa-gavel:before {
+ content: "";
+}
+
+.fa-dashboard:before,
+.fa-tachometer:before {
+ content: "";
+}
+
+.fa-comment-o:before {
+ content: "";
+}
+
+.fa-comments-o:before {
+ content: "";
+}
+
+.fa-flash:before,
+.fa-bolt:before {
+ content: "";
+}
+
+.fa-sitemap:before {
+ content: "";
+}
+
+.fa-umbrella:before {
+ content: "";
+}
+
+.fa-paste:before,
+.fa-clipboard:before {
+ content: "";
+}
+
+.fa-lightbulb-o:before {
+ content: "";
+}
+
+.fa-exchange:before {
+ content: "";
+}
+
+.fa-cloud-download:before {
+ content: "";
+}
+
+.fa-cloud-upload:before {
+ content: "";
+}
+
+.fa-user-md:before {
+ content: "";
+}
+
+.fa-stethoscope:before {
+ content: "";
+}
+
+.fa-suitcase:before {
+ content: "";
+}
+
+.fa-bell-o:before {
+ content: "";
+}
+
+.fa-coffee:before {
+ content: "";
+}
+
+.fa-cutlery:before {
+ content: "";
+}
+
+.fa-file-text-o:before {
+ content: "";
+}
+
+.fa-building-o:before {
+ content: "";
+}
+
+.fa-hospital-o:before {
+ content: "";
+}
+
+.fa-ambulance:before {
+ content: "";
+}
+
+.fa-medkit:before {
+ content: "";
+}
+
+.fa-fighter-jet:before {
+ content: "";
+}
+
+.fa-beer:before {
+ content: "";
+}
+
+.fa-h-square:before {
+ content: "";
+}
+
+.fa-plus-square:before {
+ content: "";
+}
+
+.fa-angle-double-left:before {
+ content: "";
+}
+
+.fa-angle-double-right:before {
+ content: "";
+}
+
+.fa-angle-double-up:before {
+ content: "";
+}
+
+.fa-angle-double-down:before {
+ content: "";
+}
+
+.fa-angle-left:before {
+ content: "";
+}
+
+.fa-angle-right:before {
+ content: "";
+}
+
+.fa-angle-up:before {
+ content: "";
+}
+
+.fa-angle-down:before {
+ content: "";
+}
+
+.fa-desktop:before {
+ content: "";
+}
+
+.fa-laptop:before {
+ content: "";
+}
+
+.fa-tablet:before {
+ content: "";
+}
+
+.fa-mobile-phone:before,
+.fa-mobile:before {
+ content: "";
+}
+
+.fa-circle-o:before {
+ content: "";
+}
+
+.fa-quote-left:before {
+ content: "";
+}
+
+.fa-quote-right:before {
+ content: "";
+}
+
+.fa-spinner:before {
+ content: "";
+}
+
+.fa-circle:before {
+ content: "";
+}
+
+.fa-mail-reply:before,
+.fa-reply:before {
+ content: "";
+}
+
+.fa-github-alt:before {
+ content: "";
+}
+
+.fa-folder-o:before {
+ content: "";
+}
+
+.fa-folder-open-o:before {
+ content: "";
+}
+
+.fa-smile-o:before {
+ content: "";
+}
+
+.fa-frown-o:before {
+ content: "";
+}
+
+.fa-meh-o:before {
+ content: "";
+}
+
+.fa-gamepad:before {
+ content: "";
+}
+
+.fa-keyboard-o:before {
+ content: "";
+}
+
+.fa-flag-o:before {
+ content: "";
+}
+
+.fa-flag-checkered:before {
+ content: "";
+}
+
+.fa-terminal:before {
+ content: "";
+}
+
+.fa-code:before {
+ content: "";
+}
+
+.fa-mail-reply-all:before,
+.fa-reply-all:before {
+ content: "";
+}
+
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+ content: "";
+}
+
+.fa-location-arrow:before {
+ content: "";
+}
+
+.fa-crop:before {
+ content: "";
+}
+
+.fa-code-fork:before {
+ content: "";
+}
+
+.fa-unlink:before,
+.fa-chain-broken:before {
+ content: "";
+}
+
+.fa-question:before {
+ content: "";
+}
+
+.fa-info:before {
+ content: "";
+}
+
+.fa-exclamation:before {
+ content: "";
+}
+
+.fa-superscript:before {
+ content: "";
+}
+
+.fa-subscript:before {
+ content: "";
+}
+
+.fa-eraser:before {
+ content: "";
+}
+
+.fa-puzzle-piece:before {
+ content: "";
+}
+
+.fa-microphone:before {
+ content: "";
+}
+
+.fa-microphone-slash:before {
+ content: "";
+}
+
+.fa-shield:before {
+ content: "";
+}
+
+.fa-calendar-o:before {
+ content: "";
+}
+
+.fa-fire-extinguisher:before {
+ content: "";
+}
+
+.fa-rocket:before {
+ content: "";
+}
+
+.fa-maxcdn:before {
+ content: "";
+}
+
+.fa-chevron-circle-left:before {
+ content: "";
+}
+
+.fa-chevron-circle-right:before {
+ content: "";
+}
+
+.fa-chevron-circle-up:before {
+ content: "";
+}
+
+.fa-chevron-circle-down:before {
+ content: "";
+}
+
+.fa-html5:before {
+ content: "";
+}
+
+.fa-css3:before {
+ content: "";
+}
+
+.fa-anchor:before {
+ content: "";
+}
+
+.fa-unlock-alt:before {
+ content: "";
+}
+
+.fa-bullseye:before {
+ content: "";
+}
+
+.fa-ellipsis-h:before {
+ content: "";
+}
+
+.fa-ellipsis-v:before {
+ content: "";
+}
+
+.fa-rss-square:before {
+ content: "";
+}
+
+.fa-play-circle:before {
+ content: "";
+}
+
+.fa-ticket:before {
+ content: "";
+}
+
+.fa-minus-square:before {
+ content: "";
+}
+
+.fa-minus-square-o:before, .wy-menu-vertical li.on a span.toctree-expand:before, .wy-menu-vertical li.current > a span.toctree-expand:before {
+ content: "";
+}
+
+.fa-level-up:before {
+ content: "";
+}
+
+.fa-level-down:before {
+ content: "";
+}
+
+.fa-check-square:before {
+ content: "";
+}
+
+.fa-pencil-square:before {
+ content: "";
+}
+
+.fa-external-link-square:before {
+ content: "";
+}
+
+.fa-share-square:before {
+ content: "";
+}
+
+.fa-compass:before {
+ content: "";
+}
+
+.fa-toggle-down:before,
+.fa-caret-square-o-down:before {
+ content: "";
+}
+
+.fa-toggle-up:before,
+.fa-caret-square-o-up:before {
+ content: "";
+}
+
+.fa-toggle-right:before,
+.fa-caret-square-o-right:before {
+ content: "";
+}
+
+.fa-euro:before,
+.fa-eur:before {
+ content: "";
+}
+
+.fa-gbp:before {
+ content: "";
+}
+
+.fa-dollar:before,
+.fa-usd:before {
+ content: "";
+}
+
+.fa-rupee:before,
+.fa-inr:before {
+ content: "";
+}
+
+.fa-cny:before,
+.fa-rmb:before,
+.fa-yen:before,
+.fa-jpy:before {
+ content: "";
+}
+
+.fa-ruble:before,
+.fa-rouble:before,
+.fa-rub:before {
+ content: "";
+}
+
+.fa-won:before,
+.fa-krw:before {
+ content: "";
+}
+
+.fa-bitcoin:before,
+.fa-btc:before {
+ content: "";
+}
+
+.fa-file:before {
+ content: "";
+}
+
+.fa-file-text:before {
+ content: "";
+}
+
+.fa-sort-alpha-asc:before {
+ content: "";
+}
+
+.fa-sort-alpha-desc:before {
+ content: "";
+}
+
+.fa-sort-amount-asc:before {
+ content: "";
+}
+
+.fa-sort-amount-desc:before {
+ content: "";
+}
+
+.fa-sort-numeric-asc:before {
+ content: "";
+}
+
+.fa-sort-numeric-desc:before {
+ content: "";
+}
+
+.fa-thumbs-up:before {
+ content: "";
+}
+
+.fa-thumbs-down:before {
+ content: "";
+}
+
+.fa-youtube-square:before {
+ content: "";
+}
+
+.fa-youtube:before {
+ content: "";
+}
+
+.fa-xing:before {
+ content: "";
+}
+
+.fa-xing-square:before {
+ content: "";
+}
+
+.fa-youtube-play:before {
+ content: "";
+}
+
+.fa-dropbox:before {
+ content: "";
+}
+
+.fa-stack-overflow:before {
+ content: "";
+}
+
+.fa-instagram:before {
+ content: "";
+}
+
+.fa-flickr:before {
+ content: "";
+}
+
+.fa-adn:before {
+ content: "";
+}
+
+.fa-bitbucket:before, .icon-bitbucket:before {
+ content: "";
+}
+
+.fa-bitbucket-square:before {
+ content: "";
+}
+
+.fa-tumblr:before {
+ content: "";
+}
+
+.fa-tumblr-square:before {
+ content: "";
+}
+
+.fa-long-arrow-down:before {
+ content: "";
+}
+
+.fa-long-arrow-up:before {
+ content: "";
+}
+
+.fa-long-arrow-left:before {
+ content: "";
+}
+
+.fa-long-arrow-right:before {
+ content: "";
+}
+
+.fa-apple:before {
+ content: "";
+}
+
+.fa-windows:before {
+ content: "";
+}
+
+.fa-android:before {
+ content: "";
+}
+
+.fa-linux:before {
+ content: "";
+}
+
+.fa-dribbble:before {
+ content: "";
+}
+
+.fa-skype:before {
+ content: "";
+}
+
+.fa-foursquare:before {
+ content: "";
+}
+
+.fa-trello:before {
+ content: "";
+}
+
+.fa-female:before {
+ content: "";
+}
+
+.fa-male:before {
+ content: "";
+}
+
+.fa-gittip:before {
+ content: "";
+}
+
+.fa-sun-o:before {
+ content: "";
+}
+
+.fa-moon-o:before {
+ content: "";
+}
+
+.fa-archive:before {
+ content: "";
+}
+
+.fa-bug:before {
+ content: "";
+}
+
+.fa-vk:before {
+ content: "";
+}
+
+.fa-weibo:before {
+ content: "";
+}
+
+.fa-renren:before {
+ content: "";
+}
+
+.fa-pagelines:before {
+ content: "";
+}
+
+.fa-stack-exchange:before {
+ content: "";
+}
+
+.fa-arrow-circle-o-right:before {
+ content: "";
+}
+
+.fa-arrow-circle-o-left:before {
+ content: "";
+}
+
+.fa-toggle-left:before,
+.fa-caret-square-o-left:before {
+ content: "";
+}
+
+.fa-dot-circle-o:before {
+ content: "";
+}
+
+.fa-wheelchair:before {
+ content: "";
+}
+
+.fa-vimeo-square:before {
+ content: "";
+}
+
+.fa-turkish-lira:before,
+.fa-try:before {
+ content: "";
+}
+
+.fa-plus-square-o:before, .wy-menu-vertical li span.toctree-expand:before {
+ content: "";
+}
+
+.fa-space-shuttle:before {
+ content: "";
+}
+
+.fa-slack:before {
+ content: "";
+}
+
+.fa-envelope-square:before {
+ content: "";
+}
+
+.fa-wordpress:before {
+ content: "";
+}
+
+.fa-openid:before {
+ content: "";
+}
+
+.fa-institution:before,
+.fa-bank:before,
+.fa-university:before {
+ content: "";
+}
+
+.fa-mortar-board:before,
+.fa-graduation-cap:before {
+ content: "";
+}
+
+.fa-yahoo:before {
+ content: "";
+}
+
+.fa-google:before {
+ content: "";
+}
+
+.fa-reddit:before {
+ content: "";
+}
+
+.fa-reddit-square:before {
+ content: "";
+}
+
+.fa-stumbleupon-circle:before {
+ content: "";
+}
+
+.fa-stumbleupon:before {
+ content: "";
+}
+
+.fa-delicious:before {
+ content: "";
+}
+
+.fa-digg:before {
+ content: "";
+}
+
+.fa-pied-piper:before {
+ content: "";
+}
+
+.fa-pied-piper-alt:before {
+ content: "";
+}
+
+.fa-drupal:before {
+ content: "";
+}
+
+.fa-joomla:before {
+ content: "";
+}
+
+.fa-language:before {
+ content: "";
+}
+
+.fa-fax:before {
+ content: "";
+}
+
+.fa-building:before {
+ content: "";
+}
+
+.fa-child:before {
+ content: "";
+}
+
+.fa-paw:before {
+ content: "";
+}
+
+.fa-spoon:before {
+ content: "";
+}
+
+.fa-cube:before {
+ content: "";
+}
+
+.fa-cubes:before {
+ content: "";
+}
+
+.fa-behance:before {
+ content: "";
+}
+
+.fa-behance-square:before {
+ content: "";
+}
+
+.fa-steam:before {
+ content: "";
+}
+
+.fa-steam-square:before {
+ content: "";
+}
+
+.fa-recycle:before {
+ content: "";
+}
+
+.fa-automobile:before,
+.fa-car:before {
+ content: "";
+}
+
+.fa-cab:before,
+.fa-taxi:before {
+ content: "";
+}
+
+.fa-tree:before {
+ content: "";
+}
+
+.fa-spotify:before {
+ content: "";
+}
+
+.fa-deviantart:before {
+ content: "";
+}
+
+.fa-soundcloud:before {
+ content: "";
+}
+
+.fa-database:before {
+ content: "";
+}
+
+.fa-file-pdf-o:before {
+ content: "";
+}
+
+.fa-file-word-o:before {
+ content: "";
+}
+
+.fa-file-excel-o:before {
+ content: "";
+}
+
+.fa-file-powerpoint-o:before {
+ content: "";
+}
+
+.fa-file-photo-o:before,
+.fa-file-picture-o:before,
+.fa-file-image-o:before {
+ content: "";
+}
+
+.fa-file-zip-o:before,
+.fa-file-archive-o:before {
+ content: "";
+}
+
+.fa-file-sound-o:before,
+.fa-file-audio-o:before {
+ content: "";
+}
+
+.fa-file-movie-o:before,
+.fa-file-video-o:before {
+ content: "";
+}
+
+.fa-file-code-o:before {
+ content: "";
+}
+
+.fa-vine:before {
+ content: "";
+}
+
+.fa-codepen:before {
+ content: "";
+}
+
+.fa-jsfiddle:before {
+ content: "";
+}
+
+.fa-life-bouy:before,
+.fa-life-buoy:before,
+.fa-life-saver:before,
+.fa-support:before,
+.fa-life-ring:before {
+ content: "";
+}
+
+.fa-circle-o-notch:before {
+ content: "";
+}
+
+.fa-ra:before,
+.fa-rebel:before {
+ content: "";
+}
+
+.fa-ge:before,
+.fa-empire:before {
+ content: "";
+}
+
+.fa-git-square:before {
+ content: "";
+}
+
+.fa-git:before {
+ content: "";
+}
+
+.fa-hacker-news:before {
+ content: "";
+}
+
+.fa-tencent-weibo:before {
+ content: "";
+}
+
+.fa-qq:before {
+ content: "";
+}
+
+.fa-wechat:before,
+.fa-weixin:before {
+ content: "";
+}
+
+.fa-send:before,
+.fa-paper-plane:before {
+ content: "";
+}
+
+.fa-send-o:before,
+.fa-paper-plane-o:before {
+ content: "";
+}
+
+.fa-history:before {
+ content: "";
+}
+
+.fa-circle-thin:before {
+ content: "";
+}
+
+.fa-header:before {
+ content: "";
+}
+
+.fa-paragraph:before {
+ content: "";
+}
+
+.fa-sliders:before {
+ content: "";
+}
+
+.fa-share-alt:before {
+ content: "";
+}
+
+.fa-share-alt-square:before {
+ content: "";
+}
+
+.fa-bomb:before {
+ content: "";
+}
+
+.fa-soccer-ball-o:before,
+.fa-futbol-o:before {
+ content: "";
+}
+
+.fa-tty:before {
+ content: "";
+}
+
+.fa-binoculars:before {
+ content: "";
+}
+
+.fa-plug:before {
+ content: "";
+}
+
+.fa-slideshare:before {
+ content: "";
+}
+
+.fa-twitch:before {
+ content: "";
+}
+
+.fa-yelp:before {
+ content: "";
+}
+
+.fa-newspaper-o:before {
+ content: "";
+}
+
+.fa-wifi:before {
+ content: "";
+}
+
+.fa-calculator:before {
+ content: "";
+}
+
+.fa-paypal:before {
+ content: "";
+}
+
+.fa-google-wallet:before {
+ content: "";
+}
+
+.fa-cc-visa:before {
+ content: "";
+}
+
+.fa-cc-mastercard:before {
+ content: "";
+}
+
+.fa-cc-discover:before {
+ content: "";
+}
+
+.fa-cc-amex:before {
+ content: "";
+}
+
+.fa-cc-paypal:before {
+ content: "";
+}
+
+.fa-cc-stripe:before {
+ content: "";
+}
+
+.fa-bell-slash:before {
+ content: "";
+}
+
+.fa-bell-slash-o:before {
+ content: "";
+}
+
+.fa-trash:before {
+ content: "";
+}
+
+.fa-copyright:before {
+ content: "";
+}
+
+.fa-at:before {
+ content: "";
+}
+
+.fa-eyedropper:before {
+ content: "";
+}
+
+.fa-paint-brush:before {
+ content: "";
+}
+
+.fa-birthday-cake:before {
+ content: "";
+}
+
+.fa-area-chart:before {
+ content: "";
+}
+
+.fa-pie-chart:before {
+ content: "";
+}
+
+.fa-line-chart:before {
+ content: "";
+}
+
+.fa-lastfm:before {
+ content: "";
+}
+
+.fa-lastfm-square:before {
+ content: "";
+}
+
+.fa-toggle-off:before {
+ content: "";
+}
+
+.fa-toggle-on:before {
+ content: "";
+}
+
+.fa-bicycle:before {
+ content: "";
+}
+
+.fa-bus:before {
+ content: "";
+}
+
+.fa-ioxhost:before {
+ content: "";
+}
+
+.fa-angellist:before {
+ content: "";
+}
+
+.fa-cc:before {
+ content: "";
+}
+
+.fa-shekel:before,
+.fa-sheqel:before,
+.fa-ils:before {
+ content: "";
+}
+
+.fa-meanpath:before {
+ content: "";
+}
+
+.fa, .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li.on a span.toctree-expand, .wy-menu-vertical li.current > a span.toctree-expand, .rst-content .admonition-title, .rst-content h1 .headerlink, .rst-content h2 .headerlink, .rst-content h3 .headerlink, .rst-content h4 .headerlink, .rst-content h5 .headerlink, .rst-content h6 .headerlink, .rst-content dl dt .headerlink, .rst-content p.caption .headerlink, .rst-content tt.download span:first-child, .rst-content code.download span:first-child, .icon, .wy-dropdown .caret, .wy-inline-validate.wy-inline-validate-success .wy-input-context, .wy-inline-validate.wy-inline-validate-danger .wy-input-context, .wy-inline-validate.wy-inline-validate-warning .wy-input-context, .wy-inline-validate.wy-inline-validate-info .wy-input-context {
+ font-family: inherit;
+}
+.fa:before, .wy-menu-vertical li span.toctree-expand:before, .wy-menu-vertical li.on a span.toctree-expand:before, .wy-menu-vertical li.current > a span.toctree-expand:before, .rst-content .admonition-title:before, .rst-content h1 .headerlink:before, .rst-content h2 .headerlink:before, .rst-content h3 .headerlink:before, .rst-content h4 .headerlink:before, .rst-content h5 .headerlink:before, .rst-content h6 .headerlink:before, .rst-content dl dt .headerlink:before, .rst-content p.caption .headerlink:before, .rst-content tt.download span:first-child:before, .rst-content code.download span:first-child:before, .icon:before, .wy-dropdown .caret:before, .wy-inline-validate.wy-inline-validate-success .wy-input-context:before, .wy-inline-validate.wy-inline-validate-danger .wy-input-context:before, .wy-inline-validate.wy-inline-validate-warning .wy-input-context:before, .wy-inline-validate.wy-inline-validate-info .wy-input-context:before {
+ font-family: "FontAwesome";
+ display: inline-block;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1;
+ text-decoration: inherit;
+}
+
+a .fa, a .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li a span.toctree-expand, .wy-menu-vertical li.on a span.toctree-expand, .wy-menu-vertical li.current > a span.toctree-expand, a .rst-content .admonition-title, .rst-content a .admonition-title, a .rst-content h1 .headerlink, .rst-content h1 a .headerlink, a .rst-content h2 .headerlink, .rst-content h2 a .headerlink, a .rst-content h3 .headerlink, .rst-content h3 a .headerlink, a .rst-content h4 .headerlink, .rst-content h4 a .headerlink, a .rst-content h5 .headerlink, .rst-content h5 a .headerlink, a .rst-content h6 .headerlink, .rst-content h6 a .headerlink, a .rst-content dl dt .headerlink, .rst-content dl dt a .headerlink, a .rst-content p.caption .headerlink, .rst-content p.caption a .headerlink, a .rst-content tt.download span:first-child, .rst-content tt.download a span:first-child, a .rst-content code.download span:first-child, .rst-content code.download a span:first-child, a .icon {
+ display: inline-block;
+ text-decoration: inherit;
+}
+
+.btn .fa, .btn .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li .btn span.toctree-expand, .btn .wy-menu-vertical li.on a span.toctree-expand, .wy-menu-vertical li.on a .btn span.toctree-expand, .btn .wy-menu-vertical li.current > a span.toctree-expand, .wy-menu-vertical li.current > a .btn span.toctree-expand, .btn .rst-content .admonition-title, .rst-content .btn .admonition-title, .btn .rst-content h1 .headerlink, .rst-content h1 .btn .headerlink, .btn .rst-content h2 .headerlink, .rst-content h2 .btn .headerlink, .btn .rst-content h3 .headerlink, .rst-content h3 .btn .headerlink, .btn .rst-content h4 .headerlink, .rst-content h4 .btn .headerlink, .btn .rst-content h5 .headerlink, .rst-content h5 .btn .headerlink, .btn .rst-content h6 .headerlink, .rst-content h6 .btn .headerlink, .btn .rst-content dl dt .headerlink, .rst-content dl dt .btn .headerlink, .btn .rst-content p.caption .headerlink, .rst-content p.caption .btn .headerlink, .btn .rst-content tt.download span:first-child, .rst-content tt.download .btn span:first-child, .btn .rst-content code.download span:first-child, .rst-content code.download .btn span:first-child, .btn .icon, .nav .fa, .nav .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li .nav span.toctree-expand, .nav .wy-menu-vertical li.on a span.toctree-expand, .wy-menu-vertical li.on a .nav span.toctree-expand, .nav .wy-menu-vertical li.current > a span.toctree-expand, .wy-menu-vertical li.current > a .nav span.toctree-expand, .nav .rst-content .admonition-title, .rst-content .nav .admonition-title, .nav .rst-content h1 .headerlink, .rst-content h1 .nav .headerlink, .nav .rst-content h2 .headerlink, .rst-content h2 .nav .headerlink, .nav .rst-content h3 .headerlink, .rst-content h3 .nav .headerlink, .nav .rst-content h4 .headerlink, .rst-content h4 .nav .headerlink, .nav .rst-content h5 .headerlink, .rst-content h5 .nav .headerlink, .nav .rst-content h6 .headerlink, .rst-content h6 .nav .headerlink, .nav .rst-content dl dt .headerlink, .rst-content dl dt .nav .headerlink, .nav .rst-content p.caption .headerlink, .rst-content p.caption .nav .headerlink, .nav .rst-content tt.download span:first-child, .rst-content tt.download .nav span:first-child, .nav .rst-content code.download span:first-child, .rst-content code.download .nav span:first-child, .nav .icon {
+ display: inline;
+}
+.btn .fa.fa-large, .btn .wy-menu-vertical li span.fa-large.toctree-expand, .wy-menu-vertical li .btn span.fa-large.toctree-expand, .btn .rst-content .fa-large.admonition-title, .rst-content .btn .fa-large.admonition-title, .btn .rst-content h1 .fa-large.headerlink, .rst-content h1 .btn .fa-large.headerlink, .btn .rst-content h2 .fa-large.headerlink, .rst-content h2 .btn .fa-large.headerlink, .btn .rst-content h3 .fa-large.headerlink, .rst-content h3 .btn .fa-large.headerlink, .btn .rst-content h4 .fa-large.headerlink, .rst-content h4 .btn .fa-large.headerlink, .btn .rst-content h5 .fa-large.headerlink, .rst-content h5 .btn .fa-large.headerlink, .btn .rst-content h6 .fa-large.headerlink, .rst-content h6 .btn .fa-large.headerlink, .btn .rst-content dl dt .fa-large.headerlink, .rst-content dl dt .btn .fa-large.headerlink, .btn .rst-content p.caption .fa-large.headerlink, .rst-content p.caption .btn .fa-large.headerlink, .btn .rst-content tt.download span.fa-large:first-child, .rst-content tt.download .btn span.fa-large:first-child, .btn .rst-content code.download span.fa-large:first-child, .rst-content code.download .btn span.fa-large:first-child, .btn .fa-large.icon, .nav .fa.fa-large, .nav .wy-menu-vertical li span.fa-large.toctree-expand, .wy-menu-vertical li .nav span.fa-large.toctree-expand, .nav .rst-content .fa-large.admonition-title, .rst-content .nav .fa-large.admonition-title, .nav .rst-content h1 .fa-large.headerlink, .rst-content h1 .nav .fa-large.headerlink, .nav .rst-content h2 .fa-large.headerlink, .rst-content h2 .nav .fa-large.headerlink, .nav .rst-content h3 .fa-large.headerlink, .rst-content h3 .nav .fa-large.headerlink, .nav .rst-content h4 .fa-large.headerlink, .rst-content h4 .nav .fa-large.headerlink, .nav .rst-content h5 .fa-large.headerlink, .rst-content h5 .nav .fa-large.headerlink, .nav .rst-content h6 .fa-large.headerlink, .rst-content h6 .nav .fa-large.headerlink, .nav .rst-content dl dt .fa-large.headerlink, .rst-content dl dt .nav .fa-large.headerlink, .nav .rst-content p.caption .fa-large.headerlink, .rst-content p.caption .nav .fa-large.headerlink, .nav .rst-content tt.download span.fa-large:first-child, .rst-content tt.download .nav span.fa-large:first-child, .nav .rst-content code.download span.fa-large:first-child, .rst-content code.download .nav span.fa-large:first-child, .nav .fa-large.icon {
+ line-height: 0.9em;
+}
+.btn .fa.fa-spin, .btn .wy-menu-vertical li span.fa-spin.toctree-expand, .wy-menu-vertical li .btn span.fa-spin.toctree-expand, .btn .rst-content .fa-spin.admonition-title, .rst-content .btn .fa-spin.admonition-title, .btn .rst-content h1 .fa-spin.headerlink, .rst-content h1 .btn .fa-spin.headerlink, .btn .rst-content h2 .fa-spin.headerlink, .rst-content h2 .btn .fa-spin.headerlink, .btn .rst-content h3 .fa-spin.headerlink, .rst-content h3 .btn .fa-spin.headerlink, .btn .rst-content h4 .fa-spin.headerlink, .rst-content h4 .btn .fa-spin.headerlink, .btn .rst-content h5 .fa-spin.headerlink, .rst-content h5 .btn .fa-spin.headerlink, .btn .rst-content h6 .fa-spin.headerlink, .rst-content h6 .btn .fa-spin.headerlink, .btn .rst-content dl dt .fa-spin.headerlink, .rst-content dl dt .btn .fa-spin.headerlink, .btn .rst-content p.caption .fa-spin.headerlink, .rst-content p.caption .btn .fa-spin.headerlink, .btn .rst-content tt.download span.fa-spin:first-child, .rst-content tt.download .btn span.fa-spin:first-child, .btn .rst-content code.download span.fa-spin:first-child, .rst-content code.download .btn span.fa-spin:first-child, .btn .fa-spin.icon, .nav .fa.fa-spin, .nav .wy-menu-vertical li span.fa-spin.toctree-expand, .wy-menu-vertical li .nav span.fa-spin.toctree-expand, .nav .rst-content .fa-spin.admonition-title, .rst-content .nav .fa-spin.admonition-title, .nav .rst-content h1 .fa-spin.headerlink, .rst-content h1 .nav .fa-spin.headerlink, .nav .rst-content h2 .fa-spin.headerlink, .rst-content h2 .nav .fa-spin.headerlink, .nav .rst-content h3 .fa-spin.headerlink, .rst-content h3 .nav .fa-spin.headerlink, .nav .rst-content h4 .fa-spin.headerlink, .rst-content h4 .nav .fa-spin.headerlink, .nav .rst-content h5 .fa-spin.headerlink, .rst-content h5 .nav .fa-spin.headerlink, .nav .rst-content h6 .fa-spin.headerlink, .rst-content h6 .nav .fa-spin.headerlink, .nav .rst-content dl dt .fa-spin.headerlink, .rst-content dl dt .nav .fa-spin.headerlink, .nav .rst-content p.caption .fa-spin.headerlink, .rst-content p.caption .nav .fa-spin.headerlink, .nav .rst-content tt.download span.fa-spin:first-child, .rst-content tt.download .nav span.fa-spin:first-child, .nav .rst-content code.download span.fa-spin:first-child, .rst-content code.download .nav span.fa-spin:first-child, .nav .fa-spin.icon {
+ display: inline-block;
+}
+
+.btn.fa:before, .wy-menu-vertical li span.btn.toctree-expand:before, .rst-content .btn.admonition-title:before, .rst-content h1 .btn.headerlink:before, .rst-content h2 .btn.headerlink:before, .rst-content h3 .btn.headerlink:before, .rst-content h4 .btn.headerlink:before, .rst-content h5 .btn.headerlink:before, .rst-content h6 .btn.headerlink:before, .rst-content dl dt .btn.headerlink:before, .rst-content p.caption .btn.headerlink:before, .rst-content tt.download span.btn:first-child:before, .rst-content code.download span.btn:first-child:before, .btn.icon:before {
+ opacity: 0.5;
+ -webkit-transition: opacity 0.05s ease-in;
+ -moz-transition: opacity 0.05s ease-in;
+ transition: opacity 0.05s ease-in;
+}
+
+.btn.fa:hover:before, .wy-menu-vertical li span.btn.toctree-expand:hover:before, .rst-content .btn.admonition-title:hover:before, .rst-content h1 .btn.headerlink:hover:before, .rst-content h2 .btn.headerlink:hover:before, .rst-content h3 .btn.headerlink:hover:before, .rst-content h4 .btn.headerlink:hover:before, .rst-content h5 .btn.headerlink:hover:before, .rst-content h6 .btn.headerlink:hover:before, .rst-content dl dt .btn.headerlink:hover:before, .rst-content p.caption .btn.headerlink:hover:before, .rst-content tt.download span.btn:first-child:hover:before, .rst-content code.download span.btn:first-child:hover:before, .btn.icon:hover:before {
+ opacity: 1;
+}
+
+.btn-mini .fa:before, .btn-mini .wy-menu-vertical li span.toctree-expand:before, .wy-menu-vertical li .btn-mini span.toctree-expand:before, .btn-mini .rst-content .admonition-title:before, .rst-content .btn-mini .admonition-title:before, .btn-mini .rst-content h1 .headerlink:before, .rst-content h1 .btn-mini .headerlink:before, .btn-mini .rst-content h2 .headerlink:before, .rst-content h2 .btn-mini .headerlink:before, .btn-mini .rst-content h3 .headerlink:before, .rst-content h3 .btn-mini .headerlink:before, .btn-mini .rst-content h4 .headerlink:before, .rst-content h4 .btn-mini .headerlink:before, .btn-mini .rst-content h5 .headerlink:before, .rst-content h5 .btn-mini .headerlink:before, .btn-mini .rst-content h6 .headerlink:before, .rst-content h6 .btn-mini .headerlink:before, .btn-mini .rst-content dl dt .headerlink:before, .rst-content dl dt .btn-mini .headerlink:before, .btn-mini .rst-content p.caption .headerlink:before, .rst-content p.caption .btn-mini .headerlink:before, .btn-mini .rst-content tt.download span:first-child:before, .rst-content tt.download .btn-mini span:first-child:before, .btn-mini .rst-content code.download span:first-child:before, .rst-content code.download .btn-mini span:first-child:before, .btn-mini .icon:before {
+ font-size: 14px;
+ vertical-align: -15%;
+}
+
+.wy-alert, .rst-content .note, .rst-content .attention, .rst-content .caution, .rst-content .danger, .rst-content .error, .rst-content .hint, .rst-content .important, .rst-content .tip, .rst-content .warning, .rst-content .seealso, .rst-content .admonition-todo {
+ padding: 12px;
+ line-height: 24px;
+ margin-bottom: 24px;
+ background: #e7f2fa;
+}
+
+.wy-alert-title, .rst-content .admonition-title {
+ color: #fff;
+ font-weight: bold;
+ display: block;
+ color: #fff;
+ background: #6ab0de;
+ margin: -12px;
+ padding: 6px 12px;
+ margin-bottom: 12px;
+}
+
+.wy-alert.wy-alert-danger, .rst-content .wy-alert-danger.note, .rst-content .wy-alert-danger.attention, .rst-content .wy-alert-danger.caution, .rst-content .danger, .rst-content .error, .rst-content .wy-alert-danger.hint, .rst-content .wy-alert-danger.important, .rst-content .wy-alert-danger.tip, .rst-content .wy-alert-danger.warning, .rst-content .wy-alert-danger.seealso, .rst-content .wy-alert-danger.admonition-todo {
+ background: #fdf3f2;
+}
+.wy-alert.wy-alert-danger .wy-alert-title, .rst-content .wy-alert-danger.note .wy-alert-title, .rst-content .wy-alert-danger.attention .wy-alert-title, .rst-content .wy-alert-danger.caution .wy-alert-title, .rst-content .danger .wy-alert-title, .rst-content .error .wy-alert-title, .rst-content .wy-alert-danger.hint .wy-alert-title, .rst-content .wy-alert-danger.important .wy-alert-title, .rst-content .wy-alert-danger.tip .wy-alert-title, .rst-content .wy-alert-danger.warning .wy-alert-title, .rst-content .wy-alert-danger.seealso .wy-alert-title, .rst-content .wy-alert-danger.admonition-todo .wy-alert-title, .wy-alert.wy-alert-danger .rst-content .admonition-title, .rst-content .wy-alert.wy-alert-danger .admonition-title, .rst-content .wy-alert-danger.note .admonition-title, .rst-content .wy-alert-danger.attention .admonition-title, .rst-content .wy-alert-danger.caution .admonition-title, .rst-content .danger .admonition-title, .rst-content .error .admonition-title, .rst-content .wy-alert-danger.hint .admonition-title, .rst-content .wy-alert-danger.important .admonition-title, .rst-content .wy-alert-danger.tip .admonition-title, .rst-content .wy-alert-danger.warning .admonition-title, .rst-content .wy-alert-danger.seealso .admonition-title, .rst-content .wy-alert-danger.admonition-todo .admonition-title {
+ background: #f29f97;
+}
+
+.wy-alert.wy-alert-warning, .rst-content .wy-alert-warning.note, .rst-content .attention, .rst-content .caution, .rst-content .wy-alert-warning.danger, .rst-content .wy-alert-warning.error, .rst-content .wy-alert-warning.hint, .rst-content .wy-alert-warning.important, .rst-content .wy-alert-warning.tip, .rst-content .warning, .rst-content .wy-alert-warning.seealso, .rst-content .admonition-todo {
+ background: #ffedcc;
+}
+.wy-alert.wy-alert-warning .wy-alert-title, .rst-content .wy-alert-warning.note .wy-alert-title, .rst-content .attention .wy-alert-title, .rst-content .caution .wy-alert-title, .rst-content .wy-alert-warning.danger .wy-alert-title, .rst-content .wy-alert-warning.error .wy-alert-title, .rst-content .wy-alert-warning.hint .wy-alert-title, .rst-content .wy-alert-warning.important .wy-alert-title, .rst-content .wy-alert-warning.tip .wy-alert-title, .rst-content .warning .wy-alert-title, .rst-content .wy-alert-warning.seealso .wy-alert-title, .rst-content .admonition-todo .wy-alert-title, .wy-alert.wy-alert-warning .rst-content .admonition-title, .rst-content .wy-alert.wy-alert-warning .admonition-title, .rst-content .wy-alert-warning.note .admonition-title, .rst-content .attention .admonition-title, .rst-content .caution .admonition-title, .rst-content .wy-alert-warning.danger .admonition-title, .rst-content .wy-alert-warning.error .admonition-title, .rst-content .wy-alert-warning.hint .admonition-title, .rst-content .wy-alert-warning.important .admonition-title, .rst-content .wy-alert-warning.tip .admonition-title, .rst-content .warning .admonition-title, .rst-content .wy-alert-warning.seealso .admonition-title, .rst-content .admonition-todo .admonition-title {
+ background: #f0b37e;
+}
+
+.wy-alert.wy-alert-info, .rst-content .note, .rst-content .wy-alert-info.attention, .rst-content .wy-alert-info.caution, .rst-content .wy-alert-info.danger, .rst-content .wy-alert-info.error, .rst-content .wy-alert-info.hint, .rst-content .wy-alert-info.important, .rst-content .wy-alert-info.tip, .rst-content .wy-alert-info.warning, .rst-content .seealso, .rst-content .wy-alert-info.admonition-todo {
+ background: #e7f2fa;
+}
+.wy-alert.wy-alert-info .wy-alert-title, .rst-content .note .wy-alert-title, .rst-content .wy-alert-info.attention .wy-alert-title, .rst-content .wy-alert-info.caution .wy-alert-title, .rst-content .wy-alert-info.danger .wy-alert-title, .rst-content .wy-alert-info.error .wy-alert-title, .rst-content .wy-alert-info.hint .wy-alert-title, .rst-content .wy-alert-info.important .wy-alert-title, .rst-content .wy-alert-info.tip .wy-alert-title, .rst-content .wy-alert-info.warning .wy-alert-title, .rst-content .seealso .wy-alert-title, .rst-content .wy-alert-info.admonition-todo .wy-alert-title, .wy-alert.wy-alert-info .rst-content .admonition-title, .rst-content .wy-alert.wy-alert-info .admonition-title, .rst-content .note .admonition-title, .rst-content .wy-alert-info.attention .admonition-title, .rst-content .wy-alert-info.caution .admonition-title, .rst-content .wy-alert-info.danger .admonition-title, .rst-content .wy-alert-info.error .admonition-title, .rst-content .wy-alert-info.hint .admonition-title, .rst-content .wy-alert-info.important .admonition-title, .rst-content .wy-alert-info.tip .admonition-title, .rst-content .wy-alert-info.warning .admonition-title, .rst-content .seealso .admonition-title, .rst-content .wy-alert-info.admonition-todo .admonition-title {
+ background: #6ab0de;
+}
+
+.wy-alert.wy-alert-success, .rst-content .wy-alert-success.note, .rst-content .wy-alert-success.attention, .rst-content .wy-alert-success.caution, .rst-content .wy-alert-success.danger, .rst-content .wy-alert-success.error, .rst-content .hint, .rst-content .important, .rst-content .tip, .rst-content .wy-alert-success.warning, .rst-content .wy-alert-success.seealso, .rst-content .wy-alert-success.admonition-todo {
+ background: #dbfaf4;
+}
+.wy-alert.wy-alert-success .wy-alert-title, .rst-content .wy-alert-success.note .wy-alert-title, .rst-content .wy-alert-success.attention .wy-alert-title, .rst-content .wy-alert-success.caution .wy-alert-title, .rst-content .wy-alert-success.danger .wy-alert-title, .rst-content .wy-alert-success.error .wy-alert-title, .rst-content .hint .wy-alert-title, .rst-content .important .wy-alert-title, .rst-content .tip .wy-alert-title, .rst-content .wy-alert-success.warning .wy-alert-title, .rst-content .wy-alert-success.seealso .wy-alert-title, .rst-content .wy-alert-success.admonition-todo .wy-alert-title, .wy-alert.wy-alert-success .rst-content .admonition-title, .rst-content .wy-alert.wy-alert-success .admonition-title, .rst-content .wy-alert-success.note .admonition-title, .rst-content .wy-alert-success.attention .admonition-title, .rst-content .wy-alert-success.caution .admonition-title, .rst-content .wy-alert-success.danger .admonition-title, .rst-content .wy-alert-success.error .admonition-title, .rst-content .hint .admonition-title, .rst-content .important .admonition-title, .rst-content .tip .admonition-title, .rst-content .wy-alert-success.warning .admonition-title, .rst-content .wy-alert-success.seealso .admonition-title, .rst-content .wy-alert-success.admonition-todo .admonition-title {
+ background: #1abc9c;
+}
+
+.wy-alert.wy-alert-neutral, .rst-content .wy-alert-neutral.note, .rst-content .wy-alert-neutral.attention, .rst-content .wy-alert-neutral.caution, .rst-content .wy-alert-neutral.danger, .rst-content .wy-alert-neutral.error, .rst-content .wy-alert-neutral.hint, .rst-content .wy-alert-neutral.important, .rst-content .wy-alert-neutral.tip, .rst-content .wy-alert-neutral.warning, .rst-content .wy-alert-neutral.seealso, .rst-content .wy-alert-neutral.admonition-todo {
+ background: #f3f6f6;
+}
+.wy-alert.wy-alert-neutral .wy-alert-title, .rst-content .wy-alert-neutral.note .wy-alert-title, .rst-content .wy-alert-neutral.attention .wy-alert-title, .rst-content .wy-alert-neutral.caution .wy-alert-title, .rst-content .wy-alert-neutral.danger .wy-alert-title, .rst-content .wy-alert-neutral.error .wy-alert-title, .rst-content .wy-alert-neutral.hint .wy-alert-title, .rst-content .wy-alert-neutral.important .wy-alert-title, .rst-content .wy-alert-neutral.tip .wy-alert-title, .rst-content .wy-alert-neutral.warning .wy-alert-title, .rst-content .wy-alert-neutral.seealso .wy-alert-title, .rst-content .wy-alert-neutral.admonition-todo .wy-alert-title, .wy-alert.wy-alert-neutral .rst-content .admonition-title, .rst-content .wy-alert.wy-alert-neutral .admonition-title, .rst-content .wy-alert-neutral.note .admonition-title, .rst-content .wy-alert-neutral.attention .admonition-title, .rst-content .wy-alert-neutral.caution .admonition-title, .rst-content .wy-alert-neutral.danger .admonition-title, .rst-content .wy-alert-neutral.error .admonition-title, .rst-content .wy-alert-neutral.hint .admonition-title, .rst-content .wy-alert-neutral.important .admonition-title, .rst-content .wy-alert-neutral.tip .admonition-title, .rst-content .wy-alert-neutral.warning .admonition-title, .rst-content .wy-alert-neutral.seealso .admonition-title, .rst-content .wy-alert-neutral.admonition-todo .admonition-title {
+ color: #404040;
+ background: #e1e4e5;
+}
+.wy-alert.wy-alert-neutral a, .rst-content .wy-alert-neutral.note a, .rst-content .wy-alert-neutral.attention a, .rst-content .wy-alert-neutral.caution a, .rst-content .wy-alert-neutral.danger a, .rst-content .wy-alert-neutral.error a, .rst-content .wy-alert-neutral.hint a, .rst-content .wy-alert-neutral.important a, .rst-content .wy-alert-neutral.tip a, .rst-content .wy-alert-neutral.warning a, .rst-content .wy-alert-neutral.seealso a, .rst-content .wy-alert-neutral.admonition-todo a {
+ color: #2980B9;
+}
+
+.wy-alert p:last-child, .rst-content .note p:last-child, .rst-content .attention p:last-child, .rst-content .caution p:last-child, .rst-content .danger p:last-child, .rst-content .error p:last-child, .rst-content .hint p:last-child, .rst-content .important p:last-child, .rst-content .tip p:last-child, .rst-content .warning p:last-child, .rst-content .seealso p:last-child, .rst-content .admonition-todo p:last-child {
+ margin-bottom: 0;
+}
+
+.wy-tray-container {
+ position: fixed;
+ bottom: 0px;
+ left: 0;
+ z-index: 600;
+}
+.wy-tray-container li {
+ display: block;
+ width: 300px;
+ background: transparent;
+ color: #fff;
+ text-align: center;
+ box-shadow: 0 5px 5px 0 rgba(0, 0, 0, 0.1);
+ padding: 0 24px;
+ min-width: 20%;
+ opacity: 0;
+ height: 0;
+ line-height: 56px;
+ overflow: hidden;
+ -webkit-transition: all 0.3s ease-in;
+ -moz-transition: all 0.3s ease-in;
+ transition: all 0.3s ease-in;
+}
+.wy-tray-container li.wy-tray-item-success {
+ background: #27AE60;
+}
+.wy-tray-container li.wy-tray-item-info {
+ background: #2980B9;
+}
+.wy-tray-container li.wy-tray-item-warning {
+ background: #E67E22;
+}
+.wy-tray-container li.wy-tray-item-danger {
+ background: #E74C3C;
+}
+.wy-tray-container li.on {
+ opacity: 1;
+ height: 56px;
+}
+
+@media screen and (max-width: 768px) {
+ .wy-tray-container {
+ bottom: auto;
+ top: 0;
+ width: 100%;
+ }
+ .wy-tray-container li {
+ width: 100%;
+ }
+}
+button {
+ font-size: 100%;
+ margin: 0;
+ vertical-align: baseline;
+ *vertical-align: middle;
+ cursor: pointer;
+ line-height: normal;
+ -webkit-appearance: button;
+ *overflow: visible;
+}
+
+button::-moz-focus-inner, input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+button[disabled] {
+ cursor: default;
+}
+
+.btn {
+ /* Structure */
+ display: inline-block;
+ border-radius: 2px;
+ line-height: normal;
+ white-space: nowrap;
+ text-align: center;
+ cursor: pointer;
+ font-size: 100%;
+ padding: 6px 12px 8px 12px;
+ color: #fff;
+ border: 1px solid rgba(0, 0, 0, 0.1);
+ background-color: #27AE60;
+ text-decoration: none;
+ font-weight: normal;
+ font-family: "Lato", "proxima-nova", "Helvetica Neue", Arial, sans-serif;
+ box-shadow: 0px 1px 2px -1px rgba(255, 255, 255, 0.5) inset, 0px -2px 0px 0px rgba(0, 0, 0, 0.1) inset;
+ outline-none: false;
+ vertical-align: middle;
+ *display: inline;
+ zoom: 1;
+ -webkit-user-drag: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-transition: all 0.1s linear;
+ -moz-transition: all 0.1s linear;
+ transition: all 0.1s linear;
+}
+
+.btn-hover {
+ background: #2e8ece;
+ color: #fff;
+}
+
+.btn:hover {
+ background: #2cc36b;
+ color: #fff;
+}
+.btn:focus {
+ background: #2cc36b;
+ outline: 0;
+}
+.btn:active {
+ box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.05) inset, 0px 2px 0px 0px rgba(0, 0, 0, 0.1) inset;
+ padding: 8px 12px 6px 12px;
+}
+.btn:visited {
+ color: #fff;
+}
+.btn:disabled {
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ filter: alpha(opacity=40);
+ opacity: 0.4;
+ cursor: not-allowed;
+ box-shadow: none;
+}
+
+.btn-disabled {
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ filter: alpha(opacity=40);
+ opacity: 0.4;
+ cursor: not-allowed;
+ box-shadow: none;
+}
+.btn-disabled:hover, .btn-disabled:focus, .btn-disabled:active {
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ filter: alpha(opacity=40);
+ opacity: 0.4;
+ cursor: not-allowed;
+ box-shadow: none;
+}
+
+.btn::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+
+.btn-small {
+ font-size: 80%;
+}
+
+.btn-info {
+ background-color: #2980B9 !important;
+}
+.btn-info:hover {
+ background-color: #2e8ece !important;
+}
+
+.btn-neutral {
+ background-color: #f3f6f6 !important;
+ color: #404040 !important;
+}
+.btn-neutral:hover {
+ background-color: #e5ebeb !important;
+ color: #404040;
+}
+.btn-neutral:visited {
+ color: #404040 !important;
+}
+
+.btn-success {
+ background-color: #27AE60 !important;
+}
+.btn-success:hover {
+ background-color: #229955 !important;
+}
+
+.btn-danger {
+ background-color: #E74C3C !important;
+}
+.btn-danger:hover {
+ background-color: #ea6153 !important;
+}
+
+.btn-warning {
+ background-color: #E67E22 !important;
+}
+.btn-warning:hover {
+ background-color: #e98b39 !important;
+}
+
+.btn-invert {
+ background-color: #222;
+}
+.btn-invert:hover {
+ background-color: #2f2f2f !important;
+}
+
+.btn-link {
+ background-color: transparent !important;
+ color: #2980B9;
+ box-shadow: none;
+ border-color: transparent !important;
+}
+.btn-link:hover {
+ background-color: transparent !important;
+ color: #409ad5 !important;
+ box-shadow: none;
+}
+.btn-link:active {
+ background-color: transparent !important;
+ color: #409ad5 !important;
+ box-shadow: none;
+}
+.btn-link:visited {
+ color: #9B59B6;
+}
+
+.wy-btn-group .btn, .wy-control .btn {
+ vertical-align: middle;
+}
+
+.wy-btn-group {
+ margin-bottom: 24px;
+ *zoom: 1;
+}
+.wy-btn-group:before, .wy-btn-group:after {
+ display: table;
+ content: "";
+}
+.wy-btn-group:after {
+ clear: both;
+}
+
+.wy-dropdown {
+ position: relative;
+ display: inline-block;
+}
+
+.wy-dropdown-active .wy-dropdown-menu {
+ display: block;
+}
+
+.wy-dropdown-menu {
+ position: absolute;
+ left: 0;
+ display: none;
+ float: left;
+ top: 100%;
+ min-width: 100%;
+ background: #fcfcfc;
+ z-index: 100;
+ border: solid 1px #cfd7dd;
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1);
+ padding: 12px;
+}
+.wy-dropdown-menu > dd > a {
+ display: block;
+ clear: both;
+ color: #404040;
+ white-space: nowrap;
+ font-size: 90%;
+ padding: 0 12px;
+ cursor: pointer;
+}
+.wy-dropdown-menu > dd > a:hover {
+ background: #2980B9;
+ color: #fff;
+}
+.wy-dropdown-menu > dd.divider {
+ border-top: solid 1px #cfd7dd;
+ margin: 6px 0;
+}
+.wy-dropdown-menu > dd.search {
+ padding-bottom: 12px;
+}
+.wy-dropdown-menu > dd.search input[type="search"] {
+ width: 100%;
+}
+.wy-dropdown-menu > dd.call-to-action {
+ background: #e3e3e3;
+ text-transform: uppercase;
+ font-weight: 500;
+ font-size: 80%;
+}
+.wy-dropdown-menu > dd.call-to-action:hover {
+ background: #e3e3e3;
+}
+.wy-dropdown-menu > dd.call-to-action .btn {
+ color: #fff;
+}
+
+.wy-dropdown.wy-dropdown-up .wy-dropdown-menu {
+ bottom: 100%;
+ top: auto;
+ left: auto;
+ right: 0;
+}
+
+.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu {
+ background: #fcfcfc;
+ margin-top: 2px;
+}
+.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a {
+ padding: 6px 12px;
+}
+.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover {
+ background: #2980B9;
+ color: #fff;
+}
+
+.wy-dropdown.wy-dropdown-left .wy-dropdown-menu {
+ right: 0;
+ left: auto;
+ text-align: right;
+}
+
+.wy-dropdown-arrow:before {
+ content: " ";
+ border-bottom: 5px solid whitesmoke;
+ border-left: 5px solid transparent;
+ border-right: 5px solid transparent;
+ position: absolute;
+ display: block;
+ top: -4px;
+ left: 50%;
+ margin-left: -3px;
+}
+.wy-dropdown-arrow.wy-dropdown-arrow-left:before {
+ left: 11px;
+}
+
+.wy-form-stacked select {
+ display: block;
+}
+
+.wy-form-aligned input, .wy-form-aligned textarea, .wy-form-aligned select, .wy-form-aligned .wy-help-inline, .wy-form-aligned label {
+ display: inline-block;
+ *display: inline;
+ *zoom: 1;
+ vertical-align: middle;
+}
+
+.wy-form-aligned .wy-control-group > label {
+ display: inline-block;
+ vertical-align: middle;
+ width: 10em;
+ margin: 6px 12px 0 0;
+ float: left;
+}
+.wy-form-aligned .wy-control {
+ float: left;
+}
+.wy-form-aligned .wy-control label {
+ display: block;
+}
+.wy-form-aligned .wy-control select {
+ margin-top: 6px;
+}
+
+fieldset {
+ border: 0;
+ margin: 0;
+ padding: 0;
+}
+
+legend {
+ display: block;
+ width: 100%;
+ border: 0;
+ padding: 0;
+ white-space: normal;
+ margin-bottom: 24px;
+ font-size: 150%;
+ *margin-left: -7px;
+}
+
+label {
+ display: block;
+ margin: 0 0 0.3125em 0;
+ color: #333;
+ font-size: 90%;
+}
+
+input, select, textarea {
+ font-size: 100%;
+ margin: 0;
+ vertical-align: baseline;
+ *vertical-align: middle;
+}
+
+.wy-control-group {
+ margin-bottom: 24px;
+ *zoom: 1;
+ max-width: 68em;
+ margin-left: auto;
+ margin-right: auto;
+ *zoom: 1;
+}
+.wy-control-group:before, .wy-control-group:after {
+ display: table;
+ content: "";
+}
+.wy-control-group:after {
+ clear: both;
+}
+.wy-control-group:before, .wy-control-group:after {
+ display: table;
+ content: "";
+}
+.wy-control-group:after {
+ clear: both;
+}
+
+.wy-control-group.wy-control-group-required > label:after {
+ content: " *";
+ color: #E74C3C;
+}
+
+.wy-control-group .wy-form-full, .wy-control-group .wy-form-halves, .wy-control-group .wy-form-thirds {
+ padding-bottom: 12px;
+}
+.wy-control-group .wy-form-full select, .wy-control-group .wy-form-halves select, .wy-control-group .wy-form-thirds select {
+ width: 100%;
+}
+.wy-control-group .wy-form-full input[type="text"], .wy-control-group .wy-form-full input[type="password"], .wy-control-group .wy-form-full input[type="email"], .wy-control-group .wy-form-full input[type="url"], .wy-control-group .wy-form-full input[type="date"], .wy-control-group .wy-form-full input[type="month"], .wy-control-group .wy-form-full input[type="time"], .wy-control-group .wy-form-full input[type="datetime"], .wy-control-group .wy-form-full input[type="datetime-local"], .wy-control-group .wy-form-full input[type="week"], .wy-control-group .wy-form-full input[type="number"], .wy-control-group .wy-form-full input[type="search"], .wy-control-group .wy-form-full input[type="tel"], .wy-control-group .wy-form-full input[type="color"], .wy-control-group .wy-form-halves input[type="text"], .wy-control-group .wy-form-halves input[type="password"], .wy-control-group .wy-form-halves input[type="email"], .wy-control-group .wy-form-halves input[type="url"], .wy-control-group .wy-form-halves input[type="date"], .wy-control-group .wy-form-halves input[type="month"], .wy-control-group .wy-form-halves input[type="time"], .wy-control-group .wy-form-halves input[type="datetime"], .wy-control-group .wy-form-halves input[type="datetime-local"], .wy-control-group .wy-form-halves input[type="week"], .wy-control-group .wy-form-halves input[type="number"], .wy-control-group .wy-form-halves input[type="search"], .wy-control-group .wy-form-halves input[type="tel"], .wy-control-group .wy-form-halves input[type="color"], .wy-control-group .wy-form-thirds input[type="text"], .wy-control-group .wy-form-thirds input[type="password"], .wy-control-group .wy-form-thirds input[type="email"], .wy-control-group .wy-form-thirds input[type="url"], .wy-control-group .wy-form-thirds input[type="date"], .wy-control-group .wy-form-thirds input[type="month"], .wy-control-group .wy-form-thirds input[type="time"], .wy-control-group .wy-form-thirds input[type="datetime"], .wy-control-group .wy-form-thirds input[type="datetime-local"], .wy-control-group .wy-form-thirds input[type="week"], .wy-control-group .wy-form-thirds input[type="number"], .wy-control-group .wy-form-thirds input[type="search"], .wy-control-group .wy-form-thirds input[type="tel"], .wy-control-group .wy-form-thirds input[type="color"] {
+ width: 100%;
+}
+
+.wy-control-group .wy-form-full {
+ float: left;
+ display: block;
+ margin-right: 2.35765%;
+ width: 100%;
+ margin-right: 0;
+}
+.wy-control-group .wy-form-full:last-child {
+ margin-right: 0;
+}
+
+.wy-control-group .wy-form-halves {
+ float: left;
+ display: block;
+ margin-right: 2.35765%;
+ width: 48.82117%;
+}
+.wy-control-group .wy-form-halves:last-child {
+ margin-right: 0;
+}
+.wy-control-group .wy-form-halves:nth-of-type(2n) {
+ margin-right: 0;
+}
+.wy-control-group .wy-form-halves:nth-of-type(2n+1) {
+ clear: left;
+}
+
+.wy-control-group .wy-form-thirds {
+ float: left;
+ display: block;
+ margin-right: 2.35765%;
+ width: 31.76157%;
+}
+.wy-control-group .wy-form-thirds:last-child {
+ margin-right: 0;
+}
+.wy-control-group .wy-form-thirds:nth-of-type(3n) {
+ margin-right: 0;
+}
+.wy-control-group .wy-form-thirds:nth-of-type(3n+1) {
+ clear: left;
+}
+
+.wy-control-group.wy-control-group-no-input .wy-control {
+ margin: 6px 0 0 0;
+ font-size: 90%;
+}
+
+.wy-control-no-input {
+ display: inline-block;
+ margin: 6px 0 0 0;
+ font-size: 90%;
+}
+
+.wy-control-group.fluid-input input[type="text"], .wy-control-group.fluid-input input[type="password"], .wy-control-group.fluid-input input[type="email"], .wy-control-group.fluid-input input[type="url"], .wy-control-group.fluid-input input[type="date"], .wy-control-group.fluid-input input[type="month"], .wy-control-group.fluid-input input[type="time"], .wy-control-group.fluid-input input[type="datetime"], .wy-control-group.fluid-input input[type="datetime-local"], .wy-control-group.fluid-input input[type="week"], .wy-control-group.fluid-input input[type="number"], .wy-control-group.fluid-input input[type="search"], .wy-control-group.fluid-input input[type="tel"], .wy-control-group.fluid-input input[type="color"] {
+ width: 100%;
+}
+
+.wy-form-message-inline {
+ display: inline-block;
+ padding-left: 0.3em;
+ color: #666;
+ vertical-align: middle;
+ font-size: 90%;
+}
+
+.wy-form-message {
+ display: block;
+ color: #999;
+ font-size: 70%;
+ margin-top: 0.3125em;
+ font-style: italic;
+}
+.wy-form-message p {
+ font-size: inherit;
+ font-style: italic;
+ margin-bottom: 6px;
+}
+.wy-form-message p:last-child {
+ margin-bottom: 0;
+}
+
+input {
+ line-height: normal;
+}
+
+input[type="button"], input[type="reset"], input[type="submit"] {
+ -webkit-appearance: button;
+ cursor: pointer;
+ font-family: "Lato", "proxima-nova", "Helvetica Neue", Arial, sans-serif;
+ *overflow: visible;
+}
+input[type="text"], input[type="password"], input[type="email"], input[type="url"], input[type="date"], input[type="month"], input[type="time"], input[type="datetime"], input[type="datetime-local"], input[type="week"], input[type="number"], input[type="search"], input[type="tel"], input[type="color"] {
+ -webkit-appearance: none;
+ padding: 6px;
+ display: inline-block;
+ border: 1px solid #ccc;
+ font-size: 80%;
+ font-family: "Lato", "proxima-nova", "Helvetica Neue", Arial, sans-serif;
+ box-shadow: inset 0 1px 3px #ddd;
+ border-radius: 0;
+ -webkit-transition: border 0.3s linear;
+ -moz-transition: border 0.3s linear;
+ transition: border 0.3s linear;
+}
+input[type="datetime-local"] {
+ padding: 0.34375em 0.625em;
+}
+input[disabled] {
+ cursor: default;
+}
+input[type="checkbox"], input[type="radio"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0;
+ margin-right: 0.3125em;
+ *height: 13px;
+ *width: 13px;
+}
+input[type="search"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+input[type="text"]:focus, input[type="password"]:focus, input[type="email"]:focus, input[type="url"]:focus, input[type="date"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="week"]:focus, input[type="number"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="color"]:focus {
+ outline: 0;
+ outline: thin dotted \9;
+ border-color: #333;
+}
+input.no-focus:focus {
+ border-color: #ccc !important;
+}
+input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus {
+ outline: thin dotted #333;
+ outline: 1px auto #129FEA;
+}
+input[type="text"][disabled], input[type="password"][disabled], input[type="email"][disabled], input[type="url"][disabled], input[type="date"][disabled], input[type="month"][disabled], input[type="time"][disabled], input[type="datetime"][disabled], input[type="datetime-local"][disabled], input[type="week"][disabled], input[type="number"][disabled], input[type="search"][disabled], input[type="tel"][disabled], input[type="color"][disabled] {
+ cursor: not-allowed;
+ background-color: #fafafa;
+}
+
+input:focus:invalid, textarea:focus:invalid, select:focus:invalid {
+ color: #E74C3C;
+ border: 1px solid #E74C3C;
+}
+
+input:focus:invalid:focus, textarea:focus:invalid:focus, select:focus:invalid:focus {
+ border-color: #E74C3C;
+}
+
+input[type="file"]:focus:invalid:focus, input[type="radio"]:focus:invalid:focus, input[type="checkbox"]:focus:invalid:focus {
+ outline-color: #E74C3C;
+}
+
+input.wy-input-large {
+ padding: 12px;
+ font-size: 100%;
+}
+
+textarea {
+ overflow: auto;
+ vertical-align: top;
+ width: 100%;
+ font-family: "Lato", "proxima-nova", "Helvetica Neue", Arial, sans-serif;
+}
+
+select, textarea {
+ padding: 0.5em 0.625em;
+ display: inline-block;
+ border: 1px solid #ccc;
+ font-size: 80%;
+ box-shadow: inset 0 1px 3px #ddd;
+ -webkit-transition: border 0.3s linear;
+ -moz-transition: border 0.3s linear;
+ transition: border 0.3s linear;
+}
+
+select {
+ border: 1px solid #ccc;
+ background-color: #fff;
+}
+select[multiple] {
+ height: auto;
+}
+
+select:focus, textarea:focus {
+ outline: 0;
+}
+
+select[disabled], textarea[disabled], input[readonly], select[readonly], textarea[readonly] {
+ cursor: not-allowed;
+ background-color: #fafafa;
+}
+
+input[type="radio"][disabled], input[type="checkbox"][disabled] {
+ cursor: not-allowed;
+}
+
+.wy-checkbox, .wy-radio {
+ margin: 6px 0;
+ color: #404040;
+ display: block;
+}
+.wy-checkbox input, .wy-radio input {
+ vertical-align: baseline;
+}
+
+.wy-form-message-inline {
+ display: inline-block;
+ *display: inline;
+ *zoom: 1;
+ vertical-align: middle;
+}
+
+.wy-input-prefix, .wy-input-suffix {
+ white-space: nowrap;
+ padding: 6px;
+}
+.wy-input-prefix .wy-input-context, .wy-input-suffix .wy-input-context {
+ line-height: 27px;
+ padding: 0 8px;
+ display: inline-block;
+ font-size: 80%;
+ background-color: #f3f6f6;
+ border: solid 1px #ccc;
+ color: #999;
+}
+
+.wy-input-suffix .wy-input-context {
+ border-left: 0;
+}
+
+.wy-input-prefix .wy-input-context {
+ border-right: 0;
+}
+
+.wy-switch {
+ width: 36px;
+ height: 12px;
+ margin: 12px 0;
+ position: relative;
+ border-radius: 4px;
+ background: #ccc;
+ cursor: pointer;
+ -webkit-transition: all 0.2s ease-in-out;
+ -moz-transition: all 0.2s ease-in-out;
+ transition: all 0.2s ease-in-out;
+}
+.wy-switch:before {
+ position: absolute;
+ content: "";
+ display: block;
+ width: 18px;
+ height: 18px;
+ border-radius: 4px;
+ background: #999;
+ left: -3px;
+ top: -3px;
+ -webkit-transition: all 0.2s ease-in-out;
+ -moz-transition: all 0.2s ease-in-out;
+ transition: all 0.2s ease-in-out;
+}
+.wy-switch:after {
+ content: "false";
+ position: absolute;
+ left: 48px;
+ display: block;
+ font-size: 12px;
+ color: #ccc;
+}
+
+.wy-switch.active {
+ background: #1e8449;
+}
+.wy-switch.active:before {
+ left: 24px;
+ background: #27AE60;
+}
+.wy-switch.active:after {
+ content: "true";
+}
+
+.wy-switch.disabled, .wy-switch.active.disabled {
+ cursor: not-allowed;
+}
+
+.wy-control-group.wy-control-group-error .wy-form-message, .wy-control-group.wy-control-group-error > label {
+ color: #E74C3C;
+}
+.wy-control-group.wy-control-group-error input[type="text"], .wy-control-group.wy-control-group-error input[type="password"], .wy-control-group.wy-control-group-error input[type="email"], .wy-control-group.wy-control-group-error input[type="url"], .wy-control-group.wy-control-group-error input[type="date"], .wy-control-group.wy-control-group-error input[type="month"], .wy-control-group.wy-control-group-error input[type="time"], .wy-control-group.wy-control-group-error input[type="datetime"], .wy-control-group.wy-control-group-error input[type="datetime-local"], .wy-control-group.wy-control-group-error input[type="week"], .wy-control-group.wy-control-group-error input[type="number"], .wy-control-group.wy-control-group-error input[type="search"], .wy-control-group.wy-control-group-error input[type="tel"], .wy-control-group.wy-control-group-error input[type="color"] {
+ border: solid 1px #E74C3C;
+}
+.wy-control-group.wy-control-group-error textarea {
+ border: solid 1px #E74C3C;
+}
+
+.wy-inline-validate {
+ white-space: nowrap;
+}
+.wy-inline-validate .wy-input-context {
+ padding: 0.5em 0.625em;
+ display: inline-block;
+ font-size: 80%;
+}
+
+.wy-inline-validate.wy-inline-validate-success .wy-input-context {
+ color: #27AE60;
+}
+
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context {
+ color: #E74C3C;
+}
+
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context {
+ color: #E67E22;
+}
+
+.wy-inline-validate.wy-inline-validate-info .wy-input-context {
+ color: #2980B9;
+}
+
+.rotate-90 {
+ -webkit-transform: rotate(90deg);
+ -moz-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ -o-transform: rotate(90deg);
+ transform: rotate(90deg);
+}
+
+.rotate-180 {
+ -webkit-transform: rotate(180deg);
+ -moz-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ -o-transform: rotate(180deg);
+ transform: rotate(180deg);
+}
+
+.rotate-270 {
+ -webkit-transform: rotate(270deg);
+ -moz-transform: rotate(270deg);
+ -ms-transform: rotate(270deg);
+ -o-transform: rotate(270deg);
+ transform: rotate(270deg);
+}
+
+.mirror {
+ -webkit-transform: scaleX(-1);
+ -moz-transform: scaleX(-1);
+ -ms-transform: scaleX(-1);
+ -o-transform: scaleX(-1);
+ transform: scaleX(-1);
+}
+.mirror.rotate-90 {
+ -webkit-transform: scaleX(-1) rotate(90deg);
+ -moz-transform: scaleX(-1) rotate(90deg);
+ -ms-transform: scaleX(-1) rotate(90deg);
+ -o-transform: scaleX(-1) rotate(90deg);
+ transform: scaleX(-1) rotate(90deg);
+}
+.mirror.rotate-180 {
+ -webkit-transform: scaleX(-1) rotate(180deg);
+ -moz-transform: scaleX(-1) rotate(180deg);
+ -ms-transform: scaleX(-1) rotate(180deg);
+ -o-transform: scaleX(-1) rotate(180deg);
+ transform: scaleX(-1) rotate(180deg);
+}
+.mirror.rotate-270 {
+ -webkit-transform: scaleX(-1) rotate(270deg);
+ -moz-transform: scaleX(-1) rotate(270deg);
+ -ms-transform: scaleX(-1) rotate(270deg);
+ -o-transform: scaleX(-1) rotate(270deg);
+ transform: scaleX(-1) rotate(270deg);
+}
+
+@media only screen and (max-width: 480px) {
+ .wy-form button[type="submit"] {
+ margin: 0.7em 0 0;
+ }
+ .wy-form input[type="text"], .wy-form input[type="password"], .wy-form input[type="email"], .wy-form input[type="url"], .wy-form input[type="date"], .wy-form input[type="month"], .wy-form input[type="time"], .wy-form input[type="datetime"], .wy-form input[type="datetime-local"], .wy-form input[type="week"], .wy-form input[type="number"], .wy-form input[type="search"], .wy-form input[type="tel"], .wy-form input[type="color"] {
+ margin-bottom: 0.3em;
+ display: block;
+ }
+ .wy-form label {
+ margin-bottom: 0.3em;
+ display: block;
+ }
+
+ .wy-form input[type="password"], .wy-form input[type="email"], .wy-form input[type="url"], .wy-form input[type="date"], .wy-form input[type="month"], .wy-form input[type="time"], .wy-form input[type="datetime"], .wy-form input[type="datetime-local"], .wy-form input[type="week"], .wy-form input[type="number"], .wy-form input[type="search"], .wy-form input[type="tel"], .wy-form input[type="color"] {
+ margin-bottom: 0;
+ }
+
+ .wy-form-aligned .wy-control-group label {
+ margin-bottom: 0.3em;
+ text-align: left;
+ display: block;
+ width: 100%;
+ }
+ .wy-form-aligned .wy-control {
+ margin: 1.5em 0 0 0;
+ }
+
+ .wy-form .wy-help-inline, .wy-form-message-inline, .wy-form-message {
+ display: block;
+ font-size: 80%;
+ padding: 6px 0;
+ }
+}
+@media screen and (max-width: 768px) {
+ .tablet-hide {
+ display: none;
+ }
+}
+
+@media screen and (max-width: 480px) {
+ .mobile-hide {
+ display: none;
+ }
+}
+
+.float-left {
+ float: left;
+}
+
+.float-right {
+ float: right;
+}
+
+.full-width {
+ width: 100%;
+}
+
+.wy-table, .rst-content table.docutils, .rst-content table.field-list {
+ border-collapse: collapse;
+ border-spacing: 0;
+ empty-cells: show;
+ margin-bottom: 24px;
+}
+.wy-table caption, .rst-content table.docutils caption, .rst-content table.field-list caption {
+ color: #000;
+ font: italic 85%/1 arial, sans-serif;
+ padding: 1em 0;
+ text-align: center;
+}
+.wy-table td, .rst-content table.docutils td, .rst-content table.field-list td, .wy-table th, .rst-content table.docutils th, .rst-content table.field-list th {
+ font-size: 90%;
+ margin: 0;
+ overflow: visible;
+ padding: 8px 16px;
+}
+.wy-table td:first-child, .rst-content table.docutils td:first-child, .rst-content table.field-list td:first-child, .wy-table th:first-child, .rst-content table.docutils th:first-child, .rst-content table.field-list th:first-child {
+ border-left-width: 0;
+}
+.wy-table thead, .rst-content table.docutils thead, .rst-content table.field-list thead {
+ color: #000;
+ text-align: left;
+ vertical-align: bottom;
+ white-space: nowrap;
+}
+.wy-table thead th, .rst-content table.docutils thead th, .rst-content table.field-list thead th {
+ font-weight: bold;
+ border-bottom: solid 2px #e1e4e5;
+}
+.wy-table td, .rst-content table.docutils td, .rst-content table.field-list td {
+ background-color: transparent;
+ vertical-align: middle;
+}
+
+.wy-table td p, .rst-content table.docutils td p, .rst-content table.field-list td p {
+ line-height: 18px;
+}
+.wy-table td p:last-child, .rst-content table.docutils td p:last-child, .rst-content table.field-list td p:last-child {
+ margin-bottom: 0;
+}
+
+.wy-table .wy-table-cell-min, .rst-content table.docutils .wy-table-cell-min, .rst-content table.field-list .wy-table-cell-min {
+ width: 1%;
+ padding-right: 0;
+}
+.wy-table .wy-table-cell-min input[type=checkbox], .rst-content table.docutils .wy-table-cell-min input[type=checkbox], .rst-content table.field-list .wy-table-cell-min input[type=checkbox], .wy-table .wy-table-cell-min input[type=checkbox], .rst-content table.docutils .wy-table-cell-min input[type=checkbox], .rst-content table.field-list .wy-table-cell-min input[type=checkbox] {
+ margin: 0;
+}
+
+.wy-table-secondary {
+ color: gray;
+ font-size: 90%;
+}
+
+.wy-table-tertiary {
+ color: gray;
+ font-size: 80%;
+}
+
+.wy-table-odd td, .wy-table-striped tr:nth-child(2n-1) td, .rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td {
+ background-color: #f3f6f6;
+}
+
+.wy-table-backed {
+ background-color: #f3f6f6;
+}
+
+/* BORDERED TABLES */
+.wy-table-bordered-all, .rst-content table.docutils {
+ border: 1px solid #e1e4e5;
+}
+.wy-table-bordered-all td, .rst-content table.docutils td {
+ border-bottom: 1px solid #e1e4e5;
+ border-left: 1px solid #e1e4e5;
+}
+.wy-table-bordered-all tbody > tr:last-child td, .rst-content table.docutils tbody > tr:last-child td {
+ border-bottom-width: 0;
+}
+
+.wy-table-bordered {
+ border: 1px solid #e1e4e5;
+}
+
+.wy-table-bordered-rows td {
+ border-bottom: 1px solid #e1e4e5;
+}
+.wy-table-bordered-rows tbody > tr:last-child td {
+ border-bottom-width: 0;
+}
+
+.wy-table-horizontal tbody > tr:last-child td {
+ border-bottom-width: 0;
+}
+.wy-table-horizontal td, .wy-table-horizontal th {
+ border-width: 0 0 1px 0;
+ border-bottom: 1px solid #e1e4e5;
+}
+.wy-table-horizontal tbody > tr:last-child td {
+ border-bottom-width: 0;
+}
+
+/* RESPONSIVE TABLES */
+.wy-table-responsive {
+ margin-bottom: 24px;
+ max-width: 100%;
+ overflow: auto;
+}
+.wy-table-responsive table {
+ margin-bottom: 0 !important;
+}
+.wy-table-responsive table td, .wy-table-responsive table th {
+ white-space: nowrap;
+}
+
+a {
+ color: #2980B9;
+ text-decoration: none;
+ cursor: pointer;
+}
+a:hover {
+ color: #3091d1;
+}
+a:visited {
+ color: #9B59B6;
+}
+
+html {
+ height: 100%;
+ overflow-x: hidden;
+}
+
+body {
+ font-family: "Lato", "proxima-nova", "Helvetica Neue", Arial, sans-serif;
+ font-weight: normal;
+ color: #404040;
+ min-height: 100%;
+ overflow-x: hidden;
+ background: #edf0f2;
+}
+
+.wy-text-left {
+ text-align: left;
+}
+
+.wy-text-center {
+ text-align: center;
+}
+
+.wy-text-right {
+ text-align: right;
+}
+
+.wy-text-large {
+ font-size: 120%;
+}
+
+.wy-text-normal {
+ font-size: 100%;
+}
+
+.wy-text-small, small {
+ font-size: 80%;
+}
+
+.wy-text-strike {
+ text-decoration: line-through;
+}
+
+.wy-text-warning {
+ color: #E67E22 !important;
+}
+
+a.wy-text-warning:hover {
+ color: #eb9950 !important;
+}
+
+.wy-text-info {
+ color: #2980B9 !important;
+}
+
+a.wy-text-info:hover {
+ color: #409ad5 !important;
+}
+
+.wy-text-success {
+ color: #27AE60 !important;
+}
+
+a.wy-text-success:hover {
+ color: #36d278 !important;
+}
+
+.wy-text-danger {
+ color: #E74C3C !important;
+}
+
+a.wy-text-danger:hover {
+ color: #ed7669 !important;
+}
+
+.wy-text-neutral {
+ color: #404040 !important;
+}
+
+a.wy-text-neutral:hover {
+ color: #595959 !important;
+}
+
+h1, h2, .rst-content .toctree-wrapper p.caption, h3, h4, h5, h6, legend {
+ margin-top: 0;
+ font-weight: 700;
+ font-family: "Roboto Slab", "ff-tisa-web-pro", "Georgia", Arial, sans-serif;
+}
+
+p {
+ line-height: 24px;
+ margin: 0;
+ font-size: 16px;
+ margin-bottom: 24px;
+}
+
+h1 {
+ font-size: 175%;
+}
+
+h2, .rst-content .toctree-wrapper p.caption {
+ font-size: 150%;
+}
+
+h3 {
+ font-size: 125%;
+}
+
+h4 {
+ font-size: 115%;
+}
+
+h5 {
+ font-size: 110%;
+}
+
+h6 {
+ font-size: 100%;
+}
+
+hr {
+ display: block;
+ height: 1px;
+ border: 0;
+ border-top: 1px solid #e1e4e5;
+ margin: 24px 0;
+ padding: 0;
+}
+
+code, .rst-content tt, .rst-content code {
+ white-space: nowrap;
+ max-width: 100%;
+ background: #fff;
+ border: solid 1px #e1e4e5;
+ font-size: 75%;
+ padding: 0 5px;
+ font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace;
+ color: #E74C3C;
+ overflow-x: auto;
+}
+code.code-large, .rst-content tt.code-large {
+ font-size: 90%;
+}
+
+.wy-plain-list-disc, .rst-content .section ul, .rst-content .toctree-wrapper ul, article ul {
+ list-style: disc;
+ line-height: 24px;
+ margin-bottom: 24px;
+}
+.wy-plain-list-disc li, .rst-content .section ul li, .rst-content .toctree-wrapper ul li, article ul li {
+ list-style: disc;
+ margin-left: 24px;
+}
+.wy-plain-list-disc li p:last-child, .rst-content .section ul li p:last-child, .rst-content .toctree-wrapper ul li p:last-child, article ul li p:last-child {
+ margin-bottom: 0;
+}
+.wy-plain-list-disc li ul, .rst-content .section ul li ul, .rst-content .toctree-wrapper ul li ul, article ul li ul {
+ margin-bottom: 0;
+}
+.wy-plain-list-disc li li, .rst-content .section ul li li, .rst-content .toctree-wrapper ul li li, article ul li li {
+ list-style: circle;
+}
+.wy-plain-list-disc li li li, .rst-content .section ul li li li, .rst-content .toctree-wrapper ul li li li, article ul li li li {
+ list-style: square;
+}
+.wy-plain-list-disc li ol li, .rst-content .section ul li ol li, .rst-content .toctree-wrapper ul li ol li, article ul li ol li {
+ list-style: decimal;
+}
+
+.wy-plain-list-decimal, .rst-content .section ol, .rst-content ol.arabic, article ol {
+ list-style: decimal;
+ line-height: 24px;
+ margin-bottom: 24px;
+}
+.wy-plain-list-decimal li, .rst-content .section ol li, .rst-content ol.arabic li, article ol li {
+ list-style: decimal;
+ margin-left: 24px;
+}
+.wy-plain-list-decimal li p:last-child, .rst-content .section ol li p:last-child, .rst-content ol.arabic li p:last-child, article ol li p:last-child {
+ margin-bottom: 0;
+}
+.wy-plain-list-decimal li ul, .rst-content .section ol li ul, .rst-content ol.arabic li ul, article ol li ul {
+ margin-bottom: 0;
+}
+.wy-plain-list-decimal li ul li, .rst-content .section ol li ul li, .rst-content ol.arabic li ul li, article ol li ul li {
+ list-style: disc;
+}
+
+.codeblock-example {
+ border: 1px solid #e1e4e5;
+ border-bottom: none;
+ padding: 24px;
+ padding-top: 48px;
+ font-weight: 500;
+ background: #fff;
+ position: relative;
+}
+.codeblock-example:after {
+ content: "Example";
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ background: #9B59B6;
+ color: white;
+ padding: 6px 12px;
+}
+.codeblock-example.prettyprint-example-only {
+ border: 1px solid #e1e4e5;
+ margin-bottom: 24px;
+}
+
+.codeblock, pre.literal-block, .rst-content .literal-block, .rst-content pre.literal-block, div[class^='highlight'] {
+ border: 1px solid #e1e4e5;
+ padding: 0px;
+ overflow-x: auto;
+ background: #fff;
+ margin: 1px 0 24px 0;
+}
+.codeblock div[class^='highlight'], pre.literal-block div[class^='highlight'], .rst-content .literal-block div[class^='highlight'], div[class^='highlight'] div[class^='highlight'] {
+ border: none;
+ background: none;
+ margin: 0;
+}
+
+div[class^='highlight'] td.code {
+ width: 100%;
+}
+
+.linenodiv pre {
+ border-right: solid 1px #e6e9ea;
+ margin: 0;
+ padding: 12px 12px;
+ font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace;
+ font-size: 12px;
+ line-height: 1.5;
+ color: #d9d9d9;
+}
+
+div[class^='highlight'] pre {
+ white-space: pre;
+ margin: 0;
+ padding: 12px 12px;
+ font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace;
+ font-size: 12px;
+ line-height: 1.5;
+ display: block;
+ overflow: auto;
+ color: #404040;
+}
+
+@media print {
+ .codeblock, pre.literal-block, .rst-content .literal-block, .rst-content pre.literal-block, div[class^='highlight'], div[class^='highlight'] pre {
+ white-space: pre-wrap;
+ }
+}
+.hll {
+ background-color: #ffffcc;
+ margin: 0 -12px;
+ padding: 0 12px;
+ display: block;
+}
+
+.c {
+ color: #999988;
+ font-style: italic;
+}
+
+.err {
+ color: #a61717;
+ background-color: #e3d2d2;
+}
+
+.k {
+ font-weight: bold;
+}
+
+.o {
+ font-weight: bold;
+}
+
+.cm {
+ color: #999988;
+ font-style: italic;
+}
+
+.cp {
+ color: #999999;
+ font-weight: bold;
+}
+
+.c1 {
+ color: #999988;
+ font-style: italic;
+}
+
+.cs {
+ color: #999999;
+ font-weight: bold;
+ font-style: italic;
+}
+
+.gd {
+ color: #000000;
+ background-color: #ffdddd;
+}
+
+.gd .x {
+ color: #000000;
+ background-color: #ffaaaa;
+}
+
+.ge {
+ font-style: italic;
+}
+
+.gr {
+ color: #aa0000;
+}
+
+.gh {
+ color: #999999;
+}
+
+.gi {
+ color: #000000;
+ background-color: #ddffdd;
+}
+
+.gi .x {
+ color: #000000;
+ background-color: #aaffaa;
+}
+
+.go {
+ color: #888888;
+}
+
+.gp {
+ color: #555555;
+}
+
+.gs {
+ font-weight: bold;
+}
+
+.gu {
+ color: #800080;
+ font-weight: bold;
+}
+
+.gt {
+ color: #aa0000;
+}
+
+.kc {
+ font-weight: bold;
+}
+
+.kd {
+ font-weight: bold;
+}
+
+.kn {
+ font-weight: bold;
+}
+
+.kp {
+ font-weight: bold;
+}
+
+.kr {
+ font-weight: bold;
+}
+
+.kt {
+ color: #445588;
+ font-weight: bold;
+}
+
+.m {
+ color: #009999;
+}
+
+.s {
+ color: #dd1144;
+}
+
+.n {
+ color: #333333;
+}
+
+.na {
+ color: teal;
+}
+
+.nb {
+ color: #0086b3;
+}
+
+.nc {
+ color: #445588;
+ font-weight: bold;
+}
+
+.no {
+ color: teal;
+}
+
+.ni {
+ color: purple;
+}
+
+.ne {
+ color: #990000;
+ font-weight: bold;
+}
+
+.nf {
+ color: #990000;
+ font-weight: bold;
+}
+
+.nn {
+ color: #555555;
+}
+
+.nt {
+ color: navy;
+}
+
+.nv {
+ color: teal;
+}
+
+.ow {
+ font-weight: bold;
+}
+
+.w {
+ color: #bbbbbb;
+}
+
+.mf {
+ color: #009999;
+}
+
+.mh {
+ color: #009999;
+}
+
+.mi {
+ color: #009999;
+}
+
+.mo {
+ color: #009999;
+}
+
+.sb {
+ color: #dd1144;
+}
+
+.sc {
+ color: #dd1144;
+}
+
+.sd {
+ color: #dd1144;
+}
+
+.s2 {
+ color: #dd1144;
+}
+
+.se {
+ color: #dd1144;
+}
+
+.sh {
+ color: #dd1144;
+}
+
+.si {
+ color: #dd1144;
+}
+
+.sx {
+ color: #dd1144;
+}
+
+.sr {
+ color: #009926;
+}
+
+.s1 {
+ color: #dd1144;
+}
+
+.ss {
+ color: #990073;
+}
+
+.bp {
+ color: #999999;
+}
+
+.vc {
+ color: teal;
+}
+
+.vg {
+ color: teal;
+}
+
+.vi {
+ color: teal;
+}
+
+.il {
+ color: #009999;
+}
+
+.gc {
+ color: #999;
+ background-color: #EAF2F5;
+}
+
+.wy-breadcrumbs li {
+ display: inline-block;
+}
+.wy-breadcrumbs li.wy-breadcrumbs-aside {
+ float: right;
+}
+.wy-breadcrumbs li a {
+ display: inline-block;
+ padding: 5px;
+}
+.wy-breadcrumbs li a:first-child {
+ padding-left: 0;
+}
+.wy-breadcrumbs li code, .wy-breadcrumbs li .rst-content tt, .rst-content .wy-breadcrumbs li tt {
+ padding: 5px;
+ border: none;
+ background: none;
+}
+.wy-breadcrumbs li code.literal, .wy-breadcrumbs li .rst-content tt.literal, .rst-content .wy-breadcrumbs li tt.literal {
+ color: #404040;
+}
+
+.wy-breadcrumbs-extra {
+ margin-bottom: 0;
+ color: #b3b3b3;
+ font-size: 80%;
+ display: inline-block;
+}
+
+@media screen and (max-width: 480px) {
+ .wy-breadcrumbs-extra {
+ display: none;
+ }
+
+ .wy-breadcrumbs li.wy-breadcrumbs-aside {
+ display: none;
+ }
+}
+@media print {
+ .wy-breadcrumbs li.wy-breadcrumbs-aside {
+ display: none;
+ }
+}
+.wy-affix {
+ position: fixed;
+ top: 1.618em;
+}
+
+.wy-menu a:hover {
+ text-decoration: none;
+}
+
+.wy-menu-horiz {
+ *zoom: 1;
+}
+.wy-menu-horiz:before, .wy-menu-horiz:after {
+ display: table;
+ content: "";
+}
+.wy-menu-horiz:after {
+ clear: both;
+}
+.wy-menu-horiz ul, .wy-menu-horiz li {
+ display: inline-block;
+}
+.wy-menu-horiz li:hover {
+ background: rgba(255, 255, 255, 0.1);
+}
+.wy-menu-horiz li.divide-left {
+ border-left: solid 1px #404040;
+}
+.wy-menu-horiz li.divide-right {
+ border-right: solid 1px #404040;
+}
+.wy-menu-horiz a {
+ height: 32px;
+ display: inline-block;
+ line-height: 32px;
+ padding: 0 16px;
+}
+
+.wy-menu-vertical header, .wy-menu-vertical p.caption {
+ height: 32px;
+ display: inline-block;
+ line-height: 32px;
+ padding: 0 1.618em;
+ margin-bottom: 0;
+ display: block;
+ font-weight: bold;
+ text-transform: uppercase;
+ font-size: 80%;
+ color: #555;
+ white-space: nowrap;
+}
+.wy-menu-vertical ul {
+ margin-bottom: 0;
+}
+.wy-menu-vertical li.divide-top {
+ border-top: solid 1px #404040;
+}
+.wy-menu-vertical li.divide-bottom {
+ border-bottom: solid 1px #404040;
+}
+.wy-menu-vertical li.current {
+ background: #e3e3e3;
+}
+.wy-menu-vertical li.current a {
+ color: gray;
+ border-right: solid 1px #c9c9c9;
+ padding: 0.4045em 2.427em;
+}
+.wy-menu-vertical li.current a:hover {
+ background: #d6d6d6;
+}
+.wy-menu-vertical li code, .wy-menu-vertical li .rst-content tt, .rst-content .wy-menu-vertical li tt {
+ border: none;
+ background: inherit;
+ color: inherit;
+ padding-left: 0;
+ padding-right: 0;
+}
+.wy-menu-vertical li span.toctree-expand {
+ display: block;
+ float: left;
+ margin-left: -1.2em;
+ font-size: 0.8em;
+ line-height: 1.6em;
+ color: #4d4d4d;
+}
+.wy-menu-vertical li.on a, .wy-menu-vertical li.current > a {
+ color: #404040;
+ padding: 0.4045em 1.618em;
+ font-weight: bold;
+ position: relative;
+ background: #fcfcfc;
+ border: none;
+ border-bottom: solid 1px #c9c9c9;
+ border-top: solid 1px #c9c9c9;
+ padding-left: 1.618em -4px;
+}
+.wy-menu-vertical li.on a:hover, .wy-menu-vertical li.current > a:hover {
+ background: #fcfcfc;
+}
+.wy-menu-vertical li.on a:hover span.toctree-expand, .wy-menu-vertical li.current > a:hover span.toctree-expand {
+ color: gray;
+}
+.wy-menu-vertical li.on a span.toctree-expand, .wy-menu-vertical li.current > a span.toctree-expand {
+ display: block;
+ font-size: 0.8em;
+ line-height: 1.6em;
+ color: #333333;
+}
+.wy-menu-vertical li.toctree-l1.current li.toctree-l2 > ul, .wy-menu-vertical li.toctree-l2.current li.toctree-l3 > ul {
+ display: none;
+}
+.wy-menu-vertical li.toctree-l1.current li.toctree-l2.current > ul, .wy-menu-vertical li.toctree-l2.current li.toctree-l3.current > ul {
+ display: block;
+}
+.wy-menu-vertical li.toctree-l2.current > a {
+ background: #c9c9c9;
+ padding: 0.4045em 2.427em;
+}
+.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a {
+ display: block;
+ background: #c9c9c9;
+ padding: 0.4045em 4.045em;
+}
+.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand {
+ color: gray;
+}
+.wy-menu-vertical li.toctree-l2 span.toctree-expand {
+ color: #a3a3a3;
+}
+.wy-menu-vertical li.toctree-l3 {
+ font-size: 0.9em;
+}
+.wy-menu-vertical li.toctree-l3.current > a {
+ background: #bdbdbd;
+ padding: 0.4045em 4.045em;
+}
+.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a {
+ display: block;
+ background: #bdbdbd;
+ padding: 0.4045em 5.663em;
+ border-top: none;
+ border-bottom: none;
+}
+.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand {
+ color: gray;
+}
+.wy-menu-vertical li.toctree-l3 span.toctree-expand {
+ color: #969696;
+}
+.wy-menu-vertical li.toctree-l4 {
+ font-size: 0.9em;
+}
+.wy-menu-vertical li.current ul {
+ display: block;
+}
+.wy-menu-vertical li ul {
+ margin-bottom: 0;
+ display: none;
+}
+.wy-menu-vertical .local-toc li ul {
+ display: block;
+}
+.wy-menu-vertical li ul li a {
+ margin-bottom: 0;
+ color: #b3b3b3;
+ font-weight: normal;
+}
+.wy-menu-vertical a {
+ display: inline-block;
+ line-height: 18px;
+ padding: 0.4045em 1.618em;
+ display: block;
+ position: relative;
+ font-size: 90%;
+ color: #b3b3b3;
+}
+.wy-menu-vertical a:hover {
+ background-color: #4e4a4a;
+ cursor: pointer;
+}
+.wy-menu-vertical a:hover span.toctree-expand {
+ color: #b3b3b3;
+}
+.wy-menu-vertical a:active {
+ background-color: #2980B9;
+ cursor: pointer;
+ color: #fff;
+}
+.wy-menu-vertical a:active span.toctree-expand {
+ color: #fff;
+}
+
+.wy-side-nav-search {
+ z-index: 200;
+ background-color: #2980B9;
+ text-align: center;
+ padding: 0.809em;
+ display: block;
+ color: #fcfcfc;
+ margin-bottom: 0.809em;
+}
+.wy-side-nav-search input[type=text] {
+ width: 100%;
+ border-radius: 50px;
+ padding: 6px 12px;
+ border-color: #2472a4;
+}
+.wy-side-nav-search img {
+ display: block;
+ margin: auto auto 0.809em auto;
+ height: 45px;
+ width: 45px;
+ background-color: #2980B9;
+ padding: 5px;
+ border-radius: 100%;
+}
+.wy-side-nav-search > a, .wy-side-nav-search .wy-dropdown > a {
+ color: #fcfcfc;
+ font-size: 100%;
+ font-weight: bold;
+ display: inline-block;
+ padding: 4px 6px;
+ margin-bottom: 0.809em;
+}
+.wy-side-nav-search > a:hover, .wy-side-nav-search .wy-dropdown > a:hover {
+ background: rgba(255, 255, 255, 0.1);
+}
+.wy-side-nav-search > a img.logo, .wy-side-nav-search .wy-dropdown > a img.logo {
+ display: block;
+ margin: 0 auto;
+ height: auto;
+ width: auto;
+ border-radius: 0;
+ max-width: 100%;
+ background: transparent;
+}
+.wy-side-nav-search > a.icon img.logo, .wy-side-nav-search .wy-dropdown > a.icon img.logo {
+ margin-top: 0.85em;
+}
+.wy-side-nav-search > div.version {
+ margin-top: -0.4045em;
+ margin-bottom: 0.809em;
+ font-weight: normal;
+ color: rgba(255, 255, 255, 0.3);
+}
+
+.wy-nav .wy-menu-vertical header {
+ color: #2980B9;
+}
+.wy-nav .wy-menu-vertical a {
+ color: #b3b3b3;
+}
+.wy-nav .wy-menu-vertical a:hover {
+ background-color: #2980B9;
+ color: #fff;
+}
+
+[data-menu-wrap] {
+ -webkit-transition: all 0.2s ease-in;
+ -moz-transition: all 0.2s ease-in;
+ transition: all 0.2s ease-in;
+ position: absolute;
+ opacity: 1;
+ width: 100%;
+ opacity: 0;
+}
+[data-menu-wrap].move-center {
+ left: 0;
+ right: auto;
+ opacity: 1;
+}
+[data-menu-wrap].move-left {
+ right: auto;
+ left: -100%;
+ opacity: 0;
+}
+[data-menu-wrap].move-right {
+ right: -100%;
+ left: auto;
+ opacity: 0;
+}
+
+.wy-body-for-nav {
+ background: left repeat-y #fcfcfc;
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxOERBMTRGRDBFMUUxMUUzODUwMkJCOThDMEVFNURFMCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxOERBMTRGRTBFMUUxMUUzODUwMkJCOThDMEVFNURFMCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjE4REExNEZCMEUxRTExRTM4NTAyQkI5OEMwRUU1REUwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE4REExNEZDMEUxRTExRTM4NTAyQkI5OEMwRUU1REUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+EwrlwAAAAA5JREFUeNpiMDU0BAgwAAE2AJgB9BnaAAAAAElFTkSuQmCC);
+ background-size: 300px 1px;
+}
+
+.wy-grid-for-nav {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+}
+
+.wy-nav-side {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ padding-bottom: 2em;
+ width: 300px;
+ overflow-x: hidden;
+ overflow-y: scroll;
+ min-height: 100%;
+ background: #343131;
+ z-index: 200;
+}
+
+.wy-nav-top {
+ display: none;
+ background: #2980B9;
+ color: #fff;
+ padding: 0.4045em 0.809em;
+ position: relative;
+ line-height: 50px;
+ text-align: center;
+ font-size: 100%;
+ *zoom: 1;
+}
+.wy-nav-top:before, .wy-nav-top:after {
+ display: table;
+ content: "";
+}
+.wy-nav-top:after {
+ clear: both;
+}
+.wy-nav-top a {
+ color: #fff;
+ font-weight: bold;
+}
+.wy-nav-top img {
+ margin-right: 12px;
+ height: 45px;
+ width: 45px;
+ background-color: #2980B9;
+ padding: 5px;
+ border-radius: 100%;
+}
+.wy-nav-top i {
+ font-size: 30px;
+ float: left;
+ cursor: pointer;
+}
+
+.wy-nav-content-wrap {
+ margin-left: 300px;
+ background: #fcfcfc;
+ min-height: 100%;
+}
+
+.wy-nav-content {
+ padding: 1.618em 3.236em;
+ height: 100%;
+ margin: auto;
+}
+
+.wy-body-mask {
+ position: fixed;
+ width: 100%;
+ height: 100%;
+ background: rgba(0, 0, 0, 0.2);
+ display: none;
+ z-index: 499;
+}
+.wy-body-mask.on {
+ display: block;
+}
+
+footer {
+ color: #999;
+}
+footer p {
+ margin-bottom: 12px;
+}
+footer span.commit code, footer span.commit .rst-content tt, .rst-content footer span.commit tt {
+ padding: 0px;
+ font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace;
+ font-size: 1em;
+ background: none;
+ border: none;
+ color: #999;
+}
+
+.rst-footer-buttons {
+ *zoom: 1;
+}
+.rst-footer-buttons:before, .rst-footer-buttons:after {
+ display: table;
+ content: "";
+}
+.rst-footer-buttons:after {
+ clear: both;
+}
+
+#search-results .search li {
+ margin-bottom: 24px;
+ border-bottom: solid 1px #e1e4e5;
+ padding-bottom: 24px;
+}
+#search-results .search li:first-child {
+ border-top: solid 1px #e1e4e5;
+ padding-top: 24px;
+}
+#search-results .search li a {
+ font-size: 120%;
+ margin-bottom: 12px;
+ display: inline-block;
+}
+#search-results .context {
+ color: gray;
+ font-size: 90%;
+}
+
+@media screen and (max-width: 768px) {
+ .wy-body-for-nav {
+ background: #fcfcfc;
+ }
+
+ .wy-nav-top {
+ display: block;
+ }
+
+ .wy-nav-side {
+ left: -300px;
+ }
+ .wy-nav-side.shift {
+ width: 85%;
+ left: 0;
+ }
+
+ .wy-nav-content-wrap {
+ margin-left: 0;
+ }
+ .wy-nav-content-wrap .wy-nav-content {
+ padding: 1.618em;
+ }
+ .wy-nav-content-wrap.shift {
+ position: fixed;
+ min-width: 100%;
+ left: 85%;
+ top: 0;
+ height: 100%;
+ overflow: hidden;
+ }
+}
+@media screen and (min-width: 1400px) {
+ .wy-nav-content-wrap {
+ background: rgba(0, 0, 0, 0.05);
+ }
+
+ .wy-nav-content {
+ margin: 0;
+ background: #fcfcfc;
+ }
+}
+@media print {
+ .rst-versions, footer, .wy-nav-side {
+ display: none;
+ }
+
+ .wy-nav-content-wrap {
+ margin-left: 0;
+ }
+}
+.rst-versions {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ width: 300px;
+ color: #fcfcfc;
+ background: #1f1d1d;
+ border-top: solid 10px #343131;
+ font-family: "Lato", "proxima-nova", "Helvetica Neue", Arial, sans-serif;
+ z-index: 400;
+}
+.rst-versions a {
+ color: #2980B9;
+ text-decoration: none;
+}
+.rst-versions .rst-badge-small {
+ display: none;
+}
+.rst-versions .rst-current-version {
+ padding: 12px;
+ background-color: #272525;
+ display: block;
+ text-align: right;
+ font-size: 90%;
+ cursor: pointer;
+ color: #27AE60;
+ *zoom: 1;
+}
+.rst-versions .rst-current-version:before, .rst-versions .rst-current-version:after {
+ display: table;
+ content: "";
+}
+.rst-versions .rst-current-version:after {
+ clear: both;
+}
+.rst-versions .rst-current-version .fa, .rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand, .rst-versions .rst-current-version .rst-content .admonition-title, .rst-content .rst-versions .rst-current-version .admonition-title, .rst-versions .rst-current-version .rst-content h1 .headerlink, .rst-content h1 .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content h2 .headerlink, .rst-content h2 .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content h3 .headerlink, .rst-content h3 .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content h4 .headerlink, .rst-content h4 .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content h5 .headerlink, .rst-content h5 .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content h6 .headerlink, .rst-content h6 .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content dl dt .headerlink, .rst-content dl dt .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content p.caption .headerlink, .rst-content p.caption .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content tt.download span:first-child, .rst-content tt.download .rst-versions .rst-current-version span:first-child, .rst-versions .rst-current-version .rst-content code.download span:first-child, .rst-content code.download .rst-versions .rst-current-version span:first-child, .rst-versions .rst-current-version .icon {
+ color: #fcfcfc;
+}
+.rst-versions .rst-current-version .fa-book, .rst-versions .rst-current-version .icon-book {
+ float: left;
+}
+.rst-versions .rst-current-version .icon-book {
+ float: left;
+}
+.rst-versions .rst-current-version.rst-out-of-date {
+ background-color: #E74C3C;
+ color: #fff;
+}
+.rst-versions .rst-current-version.rst-active-old-version {
+ background-color: #F1C40F;
+ color: #000;
+}
+.rst-versions.shift-up .rst-other-versions {
+ display: block;
+}
+.rst-versions .rst-other-versions {
+ font-size: 90%;
+ padding: 12px;
+ color: gray;
+ display: none;
+}
+.rst-versions .rst-other-versions hr {
+ display: block;
+ height: 1px;
+ border: 0;
+ margin: 20px 0;
+ padding: 0;
+ border-top: solid 1px #413d3d;
+}
+.rst-versions .rst-other-versions dd {
+ display: inline-block;
+ margin: 0;
+}
+.rst-versions .rst-other-versions dd a {
+ display: inline-block;
+ padding: 6px;
+ color: #fcfcfc;
+}
+.rst-versions.rst-badge {
+ width: auto;
+ bottom: 20px;
+ right: 20px;
+ left: auto;
+ border: none;
+ max-width: 300px;
+}
+.rst-versions.rst-badge .icon-book {
+ float: none;
+}
+.rst-versions.rst-badge .fa-book, .rst-versions.rst-badge .icon-book {
+ float: none;
+}
+.rst-versions.rst-badge.shift-up .rst-current-version {
+ text-align: right;
+}
+.rst-versions.rst-badge.shift-up .rst-current-version .fa-book, .rst-versions.rst-badge.shift-up .rst-current-version .icon-book {
+ float: left;
+}
+.rst-versions.rst-badge.shift-up .rst-current-version .icon-book {
+ float: left;
+}
+.rst-versions.rst-badge .rst-current-version {
+ width: auto;
+ height: 30px;
+ line-height: 30px;
+ padding: 0 6px;
+ display: block;
+ text-align: center;
+}
+
+@media screen and (max-width: 768px) {
+ .rst-versions {
+ width: 85%;
+ display: none;
+ }
+ .rst-versions.shift {
+ display: block;
+ }
+
+ img {
+ width: 100%;
+ height: auto;
+ }
+}
+.rst-content img {
+ max-width: 100%;
+ height: auto !important;
+}
+.rst-content div.figure {
+ margin-bottom: 24px;
+}
+.rst-content div.figure p.caption {
+ font-style: italic;
+}
+.rst-content div.figure.align-center {
+ text-align: center;
+}
+.rst-content .section > img, .rst-content .section > a > img {
+ margin-bottom: 24px;
+}
+.rst-content blockquote {
+ margin-left: 24px;
+ line-height: 24px;
+ margin-bottom: 24px;
+}
+.rst-content .note .last, .rst-content .attention .last, .rst-content .caution .last, .rst-content .danger .last, .rst-content .error .last, .rst-content .hint .last, .rst-content .important .last, .rst-content .tip .last, .rst-content .warning .last, .rst-content .seealso .last, .rst-content .admonition-todo .last {
+ margin-bottom: 0;
+}
+.rst-content .admonition-title:before {
+ margin-right: 4px;
+}
+.rst-content .admonition table {
+ border-color: rgba(0, 0, 0, 0.1);
+}
+.rst-content .admonition table td, .rst-content .admonition table th {
+ background: transparent !important;
+ border-color: rgba(0, 0, 0, 0.1) !important;
+}
+.rst-content .section ol.loweralpha, .rst-content .section ol.loweralpha li {
+ list-style: lower-alpha;
+}
+.rst-content .section ol.upperalpha, .rst-content .section ol.upperalpha li {
+ list-style: upper-alpha;
+}
+.rst-content .section ol p, .rst-content .section ul p {
+ margin-bottom: 12px;
+}
+.rst-content .line-block {
+ margin-left: 24px;
+}
+.rst-content .topic-title {
+ font-weight: bold;
+ margin-bottom: 12px;
+}
+.rst-content .toc-backref {
+ color: #404040;
+}
+.rst-content .align-right {
+ float: right;
+ margin: 0px 0px 24px 24px;
+}
+.rst-content .align-left {
+ float: left;
+ margin: 0px 24px 24px 0px;
+}
+.rst-content .align-center {
+ margin: auto;
+ display: block;
+}
+.rst-content h1 .headerlink, .rst-content h2 .headerlink, .rst-content .toctree-wrapper p.caption .headerlink, .rst-content h3 .headerlink, .rst-content h4 .headerlink, .rst-content h5 .headerlink, .rst-content h6 .headerlink, .rst-content dl dt .headerlink, .rst-content p.caption .headerlink {
+ display: none;
+ visibility: hidden;
+ font-size: 14px;
+}
+.rst-content h1 .headerlink:after, .rst-content h2 .headerlink:after, .rst-content .toctree-wrapper p.caption .headerlink:after, .rst-content h3 .headerlink:after, .rst-content h4 .headerlink:after, .rst-content h5 .headerlink:after, .rst-content h6 .headerlink:after, .rst-content dl dt .headerlink:after, .rst-content p.caption .headerlink:after {
+ visibility: visible;
+ content: "";
+ font-family: FontAwesome;
+ display: inline-block;
+}
+.rst-content h1:hover .headerlink, .rst-content h2:hover .headerlink, .rst-content .toctree-wrapper p.caption:hover .headerlink, .rst-content h3:hover .headerlink, .rst-content h4:hover .headerlink, .rst-content h5:hover .headerlink, .rst-content h6:hover .headerlink, .rst-content dl dt:hover .headerlink, .rst-content p.caption:hover .headerlink {
+ display: inline-block;
+}
+.rst-content .sidebar {
+ float: right;
+ width: 40%;
+ display: block;
+ margin: 0 0 24px 24px;
+ padding: 24px;
+ background: #f3f6f6;
+ border: solid 1px #e1e4e5;
+}
+.rst-content .sidebar p, .rst-content .sidebar ul, .rst-content .sidebar dl {
+ font-size: 90%;
+}
+.rst-content .sidebar .last {
+ margin-bottom: 0;
+}
+.rst-content .sidebar .sidebar-title {
+ display: block;
+ font-family: "Roboto Slab", "ff-tisa-web-pro", "Georgia", Arial, sans-serif;
+ font-weight: bold;
+ background: #e1e4e5;
+ padding: 6px 12px;
+ margin: -24px;
+ margin-bottom: 24px;
+ font-size: 100%;
+}
+.rst-content .highlighted {
+ background: #F1C40F;
+ display: inline-block;
+ font-weight: bold;
+ padding: 0 6px;
+}
+.rst-content .footnote-reference, .rst-content .citation-reference {
+ vertical-align: super;
+ font-size: 90%;
+}
+.rst-content table.docutils.citation, .rst-content table.docutils.footnote {
+ background: none;
+ border: none;
+ color: #999;
+}
+.rst-content table.docutils.citation td, .rst-content table.docutils.citation tr, .rst-content table.docutils.footnote td, .rst-content table.docutils.footnote tr {
+ border: none;
+ background-color: transparent !important;
+ white-space: normal;
+}
+.rst-content table.docutils.citation td.label, .rst-content table.docutils.footnote td.label {
+ padding-left: 0;
+ padding-right: 0;
+ vertical-align: top;
+}
+.rst-content table.docutils.citation tt, .rst-content table.docutils.citation code, .rst-content table.docutils.footnote tt, .rst-content table.docutils.footnote code {
+ color: #555;
+}
+.rst-content table.field-list {
+ border: none;
+}
+.rst-content table.field-list td {
+ border: none;
+ padding-top: 5px;
+}
+.rst-content table.field-list td > strong {
+ display: inline-block;
+ margin-top: 3px;
+}
+.rst-content table.field-list .field-name {
+ padding-right: 10px;
+ text-align: left;
+ white-space: nowrap;
+}
+.rst-content table.field-list .field-body {
+ text-align: left;
+ padding-left: 0;
+}
+.rst-content tt, .rst-content tt, .rst-content code {
+ color: #000;
+}
+.rst-content tt big, .rst-content tt em, .rst-content tt big, .rst-content code big, .rst-content tt em, .rst-content code em {
+ font-size: 100% !important;
+ line-height: normal;
+}
+.rst-content tt.literal, .rst-content tt.literal, .rst-content code.literal {
+ color: #E74C3C;
+}
+.rst-content tt.xref, a .rst-content tt, .rst-content tt.xref, .rst-content code.xref, a .rst-content tt, a .rst-content code {
+ font-weight: bold;
+ color: #404040;
+}
+.rst-content a tt, .rst-content a tt, .rst-content a code {
+ color: #2980B9;
+}
+.rst-content dl {
+ margin-bottom: 24px;
+}
+.rst-content dl dt {
+ font-weight: bold;
+}
+.rst-content dl p, .rst-content dl table, .rst-content dl ul, .rst-content dl ol {
+ margin-bottom: 12px !important;
+}
+.rst-content dl dd {
+ margin: 0 0 12px 24px;
+}
+.rst-content dl:not(.docutils) {
+ margin-bottom: 24px;
+}
+.rst-content dl:not(.docutils) dt {
+ display: inline-block;
+ margin: 6px 0;
+ font-size: 90%;
+ line-height: normal;
+ background: #e7f2fa;
+ color: #2980B9;
+ border-top: solid 3px #6ab0de;
+ padding: 6px;
+ position: relative;
+}
+.rst-content dl:not(.docutils) dt:before {
+ color: #6ab0de;
+}
+.rst-content dl:not(.docutils) dt .headerlink {
+ color: #404040;
+ font-size: 100% !important;
+}
+.rst-content dl:not(.docutils) dl dt {
+ margin-bottom: 6px;
+ border: none;
+ border-left: solid 3px #cccccc;
+ background: #f0f0f0;
+ color: gray;
+}
+.rst-content dl:not(.docutils) dl dt .headerlink {
+ color: #404040;
+ font-size: 100% !important;
+}
+.rst-content dl:not(.docutils) dt:first-child {
+ margin-top: 0;
+}
+.rst-content dl:not(.docutils) tt, .rst-content dl:not(.docutils) tt, .rst-content dl:not(.docutils) code {
+ font-weight: bold;
+}
+.rst-content dl:not(.docutils) tt.descname, .rst-content dl:not(.docutils) tt.descclassname, .rst-content dl:not(.docutils) tt.descname, .rst-content dl:not(.docutils) code.descname, .rst-content dl:not(.docutils) tt.descclassname, .rst-content dl:not(.docutils) code.descclassname {
+ background-color: transparent;
+ border: none;
+ padding: 0;
+ font-size: 100% !important;
+}
+.rst-content dl:not(.docutils) tt.descname, .rst-content dl:not(.docutils) tt.descname, .rst-content dl:not(.docutils) code.descname {
+ font-weight: bold;
+}
+.rst-content dl:not(.docutils) .optional {
+ display: inline-block;
+ padding: 0 4px;
+ color: #000;
+ font-weight: bold;
+}
+.rst-content dl:not(.docutils) .property {
+ display: inline-block;
+ padding-right: 8px;
+}
+.rst-content .viewcode-link, .rst-content .viewcode-back {
+ display: inline-block;
+ color: #27AE60;
+ font-size: 80%;
+ padding-left: 24px;
+}
+.rst-content .viewcode-back {
+ display: block;
+ float: right;
+}
+.rst-content p.rubric {
+ margin-bottom: 12px;
+ font-weight: bold;
+}
+.rst-content tt.download, .rst-content code.download {
+ background: inherit;
+ padding: inherit;
+ font-family: inherit;
+ font-size: inherit;
+ color: inherit;
+ border: inherit;
+ white-space: inherit;
+}
+.rst-content tt.download span:first-child:before, .rst-content code.download span:first-child:before {
+ margin-right: 4px;
+}
+
+@media screen and (max-width: 480px) {
+ .rst-content .sidebar {
+ width: 100%;
+ }
+}
+span[id*='MathJax-Span'] {
+ color: #404040;
+}
+
+.math {
+ text-align: center;
+}
+
+@font-face {
+ font-family: "Inconsolata";
+ font-style: normal;
+ font-weight: 400;
+ src: local("Inconsolata"), url(../fonts/Inconsolata.ttf) format("truetype");
+}
+@font-face {
+ font-family: "Inconsolata";
+ font-style: normal;
+ font-weight: 700;
+ src: local("Inconsolata Bold"), local("Inconsolata-Bold"), url(../fonts/Inconsolata-Bold.ttf) format("truetype");
+}
+@font-face {
+ font-family: "Lato";
+ font-style: normal;
+ font-weight: 400;
+ src: local("Lato Regular"), local("Lato-Regular"), url(../fonts/Lato-Regular.ttf) format("truetype");
+}
+@font-face {
+ font-family: "Lato";
+ font-style: normal;
+ font-weight: 700;
+ src: local("Lato Bold"), local("Lato-Bold"), url(../fonts/Lato-Bold.ttf) format("truetype");
+}
+@font-face {
+ font-family: "Roboto Slab";
+ font-style: normal;
+ font-weight: 400;
+ src: local("Roboto Slab Regular"), local("RobotoSlab-Regular"), url(../fonts/RobotoSlab-Regular.ttf) format("truetype");
+}
+@font-face {
+ font-family: "Roboto Slab";
+ font-style: normal;
+ font-weight: 700;
+ src: local("Roboto Slab Bold"), local("RobotoSlab-Bold"), url(../fonts/RobotoSlab-Bold.ttf) format("truetype");
+}
+
+/*# sourceMappingURL=theme.css.map */
diff --git a/doc/_static/css/theme.css.map b/doc/_static/css/theme.css.map
new file mode 100644
index 0000000000..7e94d02442
--- /dev/null
+++ b/doc/_static/css/theme.css.map
@@ -0,0 +1,7 @@
+{
+"version": 3,
+"mappings": "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",
+"sources": ["../../../bower_components/neat/app/assets/stylesheets/grid/_grid.scss","../../../bower_components/bourbon/dist/addons/_prefixer.scss","../../../bower_components/wyrm/sass/wyrm_core/_reset.sass","../../../bower_components/wyrm/sass/wyrm_core/_mixin.sass","../../../bower_components/font-awesome/scss/_path.scss","../../../bower_components/font-awesome/scss/_core.scss","../../../bower_components/font-awesome/scss/_larger.scss","../../../bower_components/font-awesome/scss/_fixed-width.scss","../../../bower_components/font-awesome/scss/_list.scss","../../../bower_components/font-awesome/scss/_variables.scss","../../../bower_components/font-awesome/scss/_bordered-pulled.scss","../../../bower_components/font-awesome/scss/_spinning.scss","../../../bower_components/font-awesome/scss/_rotated-flipped.scss","../../../bower_components/font-awesome/scss/_mixins.scss","../../../bower_components/font-awesome/scss/_stacked.scss","../../../bower_components/font-awesome/scss/_icons.scss","../../../bower_components/wyrm/sass/wyrm_core/_font_icon_defaults.sass","../../../bower_components/wyrm/sass/wyrm_core/_wy_variables.sass","../../../bower_components/wyrm/sass/wyrm_core/_alert.sass","../../../sass/_theme_variables.sass","../../../bower_components/neat/app/assets/stylesheets/grid/_media.scss","../../../bower_components/wyrm/sass/wyrm_core/_button.sass","../../../bower_components/wyrm/sass/wyrm_core/_dropdown.sass","../../../bower_components/wyrm/sass/wyrm_core/_form.sass","../../../bower_components/neat/app/assets/stylesheets/grid/_outer-container.scss","../../../bower_components/neat/app/assets/stylesheets/settings/_grid.scss","../../../bower_components/neat/app/assets/stylesheets/grid/_span-columns.scss","../../../bower_components/wyrm/sass/wyrm_core/_neat_extra.sass","../../../bower_components/wyrm/sass/wyrm_core/_generic.sass","../../../bower_components/wyrm/sass/wyrm_core/_table.sass","../../../bower_components/wyrm/sass/wyrm_core/_type.sass","../../../bower_components/wyrm/sass/wyrm_addons/pygments/_pygments.sass","../../../bower_components/wyrm/sass/wyrm_addons/pygments/_pygments_light.sass","../../../sass/_theme_breadcrumbs.sass","../../../sass/_theme_layout.sass","../../../bower_components/neat/app/assets/stylesheets/grid/_private.scss","../../../sass/_theme_badge.sass","../../../sass/_theme_rst.sass","../../../sass/_theme_mathjax.sass","../../../sass/_theme_font_local.sass"],
+"names": [],
+"file": "theme.css"
+}
diff --git a/doc/_static/doctools.js b/doc/_static/doctools.js
new file mode 100644
index 0000000000..c7bfe760aa
--- /dev/null
+++ b/doc/_static/doctools.js
@@ -0,0 +1,263 @@
+/*
+ * doctools.js
+ * ~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilities for all documentation.
+ *
+ * :copyright: Copyright 2007-2015 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) {
+ if (node.nodeType == 3) {
+ var val = node.nodeValue;
+ var pos = val.toLowerCase().indexOf(text);
+ if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
+ var 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);
+ }
+ }
+ else if (!jQuery(node).is("button, select, textarea")) {
+ jQuery.each(node.childNodes, function() {
+ highlight(this);
+ });
+ }
+ }
+ return this.each(function() {
+ highlight(this);
+ });
+};
+
+/*
+ * backward compatibility for jQuery.browser
+ * This will be supported until firefox bug is fixed.
+ */
+if (!jQuery.browser) {
+ jQuery.uaMatch = function(ua) {
+ ua = ua.toLowerCase();
+
+ var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
+ /(webkit)[ \/]([\w.]+)/.exec(ua) ||
+ /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
+ /(msie) ([\w.]+)/.exec(ua) ||
+ ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
+ [];
+
+ return {
+ browser: match[ 1 ] || "",
+ version: match[ 2 ] || "0"
+ };
+ };
+ jQuery.browser = {};
+ jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
+}
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+var Documentation = {
+
+ init : function() {
+ this.fixFirefoxAnchorBug();
+ this.highlightSearchWords();
+ this.initIndexTable();
+ },
+
+ /**
+ * i18n support
+ */
+ TRANSLATIONS : {},
+ PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; },
+ LOCALE : 'unknown',
+
+ // gettext and ngettext don't access this so that the functions
+ // can safely bound to a different name (_ = Documentation.gettext)
+ gettext : function(string) {
+ var translated = Documentation.TRANSLATIONS[string];
+ if (typeof translated == 'undefined')
+ return string;
+ return (typeof translated == 'string') ? translated : translated[0];
+ },
+
+ ngettext : function(singular, plural, n) {
+ var translated = Documentation.TRANSLATIONS[singular];
+ if (typeof translated == 'undefined')
+ return (n == 1) ? singular : plural;
+ return translated[Documentation.PLURALEXPR(n)];
+ },
+
+ addTranslations : function(catalog) {
+ for (var key in catalog.messages)
+ this.TRANSLATIONS[key] = catalog.messages[key];
+ this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
+ this.LOCALE = catalog.locale;
+ },
+
+ /**
+ * add context elements like header anchor links
+ */
+ addContextElements : function() {
+ $('div[id] > :header:first').each(function() {
+ $('').
+ attr('href', '#' + this.id).
+ attr('title', _('Permalink to this headline')).
+ appendTo(this);
+ });
+ $('dt[id]').each(function() {
+ $('').
+ 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)
+ 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);
+ $('
' + _('Hide Search Matches') + '
')
+ .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);
+ }
+};
+
+// quick alias for translations
+_ = Documentation.gettext;
+
+$(document).ready(function() {
+ Documentation.init();
+});
diff --git a/doc/_static/down-pressed.png b/doc/_static/down-pressed.png
new file mode 100644
index 0000000000..7c30d004b7
Binary files /dev/null and b/doc/_static/down-pressed.png differ
diff --git a/doc/_static/down.png b/doc/_static/down.png
new file mode 100644
index 0000000000..f48098a43b
Binary files /dev/null and b/doc/_static/down.png differ
diff --git a/doc/_static/file.png b/doc/_static/file.png
new file mode 100644
index 0000000000..254c60bfbe
Binary files /dev/null and b/doc/_static/file.png differ
diff --git a/doc/_static/fonts/FontAwesome.otf b/doc/_static/fonts/FontAwesome.otf
new file mode 100644
index 0000000000..8b0f54e47e
Binary files /dev/null and b/doc/_static/fonts/FontAwesome.otf differ
diff --git a/doc/_static/fonts/Inconsolata-Bold.ttf b/doc/_static/fonts/Inconsolata-Bold.ttf
new file mode 100644
index 0000000000..360a232dd0
Binary files /dev/null and b/doc/_static/fonts/Inconsolata-Bold.ttf differ
diff --git a/doc/_static/fonts/Inconsolata.ttf b/doc/_static/fonts/Inconsolata.ttf
new file mode 100644
index 0000000000..4b8a36d249
Binary files /dev/null and b/doc/_static/fonts/Inconsolata.ttf differ
diff --git a/doc/_static/fonts/Lato-Bold.ttf b/doc/_static/fonts/Lato-Bold.ttf
new file mode 100644
index 0000000000..e8b9bf6a20
Binary files /dev/null and b/doc/_static/fonts/Lato-Bold.ttf differ
diff --git a/doc/_static/fonts/Lato-Regular.ttf b/doc/_static/fonts/Lato-Regular.ttf
new file mode 100644
index 0000000000..7608bc3e0f
Binary files /dev/null and b/doc/_static/fonts/Lato-Regular.ttf differ
diff --git a/doc/_static/fonts/RobotoSlab-Bold.ttf b/doc/_static/fonts/RobotoSlab-Bold.ttf
new file mode 100644
index 0000000000..e6ed0de530
Binary files /dev/null and b/doc/_static/fonts/RobotoSlab-Bold.ttf differ
diff --git a/doc/_static/fonts/RobotoSlab-Regular.ttf b/doc/_static/fonts/RobotoSlab-Regular.ttf
new file mode 100644
index 0000000000..141d6c08c8
Binary files /dev/null and b/doc/_static/fonts/RobotoSlab-Regular.ttf differ
diff --git a/doc/_static/fonts/fontawesome-webfont.eot b/doc/_static/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000000..7c79c6a6bc
Binary files /dev/null and b/doc/_static/fonts/fontawesome-webfont.eot differ
diff --git a/doc/_static/fonts/fontawesome-webfont.svg b/doc/_static/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000000..45fdf33830
--- /dev/null
+++ b/doc/_static/fonts/fontawesome-webfont.svg
@@ -0,0 +1,414 @@
+
+
+
\ No newline at end of file
diff --git a/doc/_static/fonts/fontawesome-webfont.ttf b/doc/_static/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000000..e89738de5e
Binary files /dev/null and b/doc/_static/fonts/fontawesome-webfont.ttf differ
diff --git a/doc/_static/fonts/fontawesome-webfont.woff b/doc/_static/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000000..8c1748aab7
Binary files /dev/null and b/doc/_static/fonts/fontawesome-webfont.woff differ
diff --git a/doc/_static/jquery-1.11.1.js b/doc/_static/jquery-1.11.1.js
new file mode 100644
index 0000000000..d4b67f7e6c
--- /dev/null
+++ b/doc/_static/jquery-1.11.1.js
@@ -0,0 +1,10308 @@
+/*!
+ * jQuery JavaScript Library v1.11.1
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2014-05-01T17:42Z
+ */
+
+(function( global, factory ) {
+
+ 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 inherently posses a window with a document
+ // (such as Node.js), expose a jQuery-making 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 ) {
+
+// Can't do this because several apps including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+// Support: Firefox 18+
+//
+
+var deletedIds = [];
+
+var slice = deletedIds.slice;
+
+var concat = deletedIds.concat;
+
+var push = deletedIds.push;
+
+var indexOf = deletedIds.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var support = {};
+
+
+
+var
+ version = "1.11.1",
+
+ // Define a local copy of jQuery
+ jQuery = function( selector, context ) {
+ // The jQuery object is actually just the init constructor 'enhanced'
+ // Need init if jQuery is called (just allow error to be thrown if not included)
+ return new jQuery.fn.init( selector, context );
+ },
+
+ // Support: Android<4.1, IE<9
+ // Make sure we trim BOM and NBSP
+ rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+ // Matches dashed string for camelizing
+ rmsPrefix = /^-ms-/,
+ rdashAlpha = /-([\da-z])/gi,
+
+ // Used by jQuery.camelCase as callback to replace()
+ fcamelCase = function( all, letter ) {
+ return letter.toUpperCase();
+ };
+
+jQuery.fn = jQuery.prototype = {
+ // The current version of jQuery being used
+ jquery: version,
+
+ constructor: jQuery,
+
+ // Start with an empty selector
+ selector: "",
+
+ // 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 num != null ?
+
+ // Return just the one element from the set
+ ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
+
+ // Return all the elements in a clean array
+ slice.call( this );
+ },
+
+ // 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;
+ ret.context = this.context;
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function( callback, args ) {
+ return jQuery.each( this, callback, args );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map(this, function( elem, i ) {
+ return callback.call( elem, i, elem );
+ }));
+ },
+
+ slice: function() {
+ return this.pushStack( slice.apply( this, arguments ) );
+ },
+
+ first: function() {
+ return this.eq( 0 );
+ },
+
+ last: function() {
+ return this.eq( -1 );
+ },
+
+ eq: function( i ) {
+ var len = this.length,
+ j = +i + ( i < 0 ? len : 0 );
+ return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
+ },
+
+ end: function() {
+ return this.prevObject || this.constructor(null);
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: push,
+ sort: deletedIds.sort,
+ splice: deletedIds.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+ var src, copyIsArray, copy, name, options, clone,
+ target = arguments[0] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+
+ // skip the boolean and the target
+ target = arguments[ i ] || {};
+ i++;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+ target = {};
+ }
+
+ // extend jQuery itself if only one argument is passed
+ if ( i === length ) {
+ target = this;
+ i--;
+ }
+
+ for ( ; i < length; i++ ) {
+ // Only deal with non-null/undefined values
+ if ( (options = arguments[ i ]) != null ) {
+ // Extend the base object
+ for ( name in options ) {
+ src = target[ name ];
+ copy = options[ name ];
+
+ // Prevent never-ending loop
+ if ( target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+ if ( copyIsArray ) {
+ copyIsArray = false;
+ clone = src && jQuery.isArray(src) ? src : [];
+
+ } else {
+ clone = src && jQuery.isPlainObject(src) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+jQuery.extend({
+ // Unique for each copy of jQuery on the page
+ expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+ // Assume jQuery is ready without the ready module
+ isReady: true,
+
+ error: function( msg ) {
+ throw new Error( msg );
+ },
+
+ noop: function() {},
+
+ // See test/unit/core.js for details concerning isFunction.
+ // Since version 1.3, DOM methods and functions like alert
+ // aren't supported. They return false on IE (#2968).
+ isFunction: function( obj ) {
+ return jQuery.type(obj) === "function";
+ },
+
+ isArray: Array.isArray || function( obj ) {
+ return jQuery.type(obj) === "array";
+ },
+
+ isWindow: function( obj ) {
+ /* jshint eqeqeq: false */
+ return obj != null && obj == obj.window;
+ },
+
+ isNumeric: function( obj ) {
+ // parseFloat NaNs numeric-cast false positives (null|true|false|"")
+ // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+ // subtraction forces infinities to NaN
+ return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;
+ },
+
+ isEmptyObject: function( obj ) {
+ var name;
+ for ( name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ isPlainObject: function( obj ) {
+ var key;
+
+ // Must be an Object.
+ // Because of IE, we also have to check the presence of the constructor property.
+ // Make sure that DOM nodes and window objects don't pass through, as well
+ if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+ return false;
+ }
+
+ try {
+ // Not own constructor property must be Object
+ if ( obj.constructor &&
+ !hasOwn.call(obj, "constructor") &&
+ !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+ return false;
+ }
+ } catch ( e ) {
+ // IE8,9 Will throw exceptions on certain host objects #9897
+ return false;
+ }
+
+ // Support: IE<9
+ // Handle iteration over inherited properties before own properties.
+ if ( support.ownLast ) {
+ for ( key in obj ) {
+ return hasOwn.call( obj, key );
+ }
+ }
+
+ // Own properties are enumerated firstly, so to speed up,
+ // if last one is own, then all properties are own.
+ for ( key in obj ) {}
+
+ return key === undefined || hasOwn.call( obj, key );
+ },
+
+ type: function( obj ) {
+ if ( obj == null ) {
+ return obj + "";
+ }
+ return typeof obj === "object" || typeof obj === "function" ?
+ class2type[ toString.call(obj) ] || "object" :
+ typeof obj;
+ },
+
+ // Evaluates a script in a global context
+ // Workarounds based on findings by Jim Driscoll
+ // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+ globalEval: function( data ) {
+ if ( data && jQuery.trim( data ) ) {
+ // We use execScript on Internet Explorer
+ // We use an anonymous function so that context is window
+ // rather than jQuery in Firefox
+ ( window.execScript || function( data ) {
+ window[ "eval" ].call( window, data );
+ } )( data );
+ }
+ },
+
+ // Convert dashed to camelCase; used by the css and data modules
+ // Microsoft forgot to hump their vendor prefix (#9572)
+ camelCase: function( string ) {
+ return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+ },
+
+ nodeName: function( elem, name ) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+ },
+
+ // args is for internal usage only
+ each: function( obj, callback, args ) {
+ var value,
+ i = 0,
+ length = obj.length,
+ isArray = isArraylike( obj );
+
+ if ( args ) {
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback.apply( obj[ i ], args );
+
+ if ( value === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( i in obj ) {
+ value = callback.apply( obj[ i ], args );
+
+ if ( value === false ) {
+ break;
+ }
+ }
+ }
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback.call( obj[ i ], i, obj[ i ] );
+
+ if ( value === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( i in obj ) {
+ value = callback.call( obj[ i ], i, obj[ i ] );
+
+ if ( value === false ) {
+ break;
+ }
+ }
+ }
+ }
+
+ return obj;
+ },
+
+ // Support: Android<4.1, IE<9
+ trim: function( text ) {
+ return text == null ?
+ "" :
+ ( text + "" ).replace( rtrim, "" );
+ },
+
+ // results is for internal usage only
+ makeArray: function( arr, results ) {
+ var ret = results || [];
+
+ if ( arr != null ) {
+ if ( isArraylike( Object(arr) ) ) {
+ jQuery.merge( ret,
+ typeof arr === "string" ?
+ [ arr ] : arr
+ );
+ } else {
+ push.call( ret, arr );
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, arr, i ) {
+ var len;
+
+ if ( arr ) {
+ if ( indexOf ) {
+ return indexOf.call( arr, elem, i );
+ }
+
+ len = arr.length;
+ i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+ for ( ; i < len; i++ ) {
+ // Skip accessing in sparse arrays
+ if ( i in arr && arr[ i ] === elem ) {
+ return i;
+ }
+ }
+ }
+
+ return -1;
+ },
+
+ merge: function( first, second ) {
+ var len = +second.length,
+ j = 0,
+ i = first.length;
+
+ while ( j < len ) {
+ first[ i++ ] = second[ j++ ];
+ }
+
+ // Support: IE<9
+ // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
+ if ( len !== len ) {
+ while ( second[j] !== undefined ) {
+ 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 value,
+ i = 0,
+ length = elems.length,
+ isArray = isArraylike( elems ),
+ ret = [];
+
+ // Go through the array, translating each of the items to their new values
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret.push( value );
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for ( i in elems ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret.push( value );
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return concat.apply( [], ret );
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // Bind a function to a context, optionally partially applying any
+ // arguments.
+ proxy: function( fn, context ) {
+ var args, proxy, tmp;
+
+ if ( typeof context === "string" ) {
+ tmp = fn[ context ];
+ context = fn;
+ fn = tmp;
+ }
+
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if ( !jQuery.isFunction( fn ) ) {
+ return undefined;
+ }
+
+ // Simulated bind
+ args = slice.call( arguments, 2 );
+ proxy = function() {
+ return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+ };
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+ return proxy;
+ },
+
+ now: function() {
+ return +( new Date() );
+ },
+
+ // jQuery.support is not used in Core but other projects attach their
+ // properties to it so it needs to exist.
+ support: support
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+function isArraylike( obj ) {
+ var length = obj.length,
+ type = jQuery.type( obj );
+
+ if ( type === "function" || jQuery.isWindow( obj ) ) {
+ return false;
+ }
+
+ if ( obj.nodeType === 1 && length ) {
+ return true;
+ }
+
+ return type === "array" || length === 0 ||
+ typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v1.10.19
+ * http://sizzlejs.com/
+ *
+ * Copyright 2013 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2014-04-18
+ */
+(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" + -(new Date()),
+ preferredDoc = window.document,
+ dirruns = 0,
+ done = 0,
+ classCache = createCache(),
+ tokenCache = createCache(),
+ compilerCache = createCache(),
+ sortOrder = function( a, b ) {
+ if ( a === b ) {
+ hasDuplicate = true;
+ }
+ return 0;
+ },
+
+ // General-purpose constants
+ strundefined = typeof undefined,
+ MAX_NEGATIVE = 1 << 31,
+
+ // Instance methods
+ hasOwn = ({}).hasOwnProperty,
+ arr = [],
+ pop = arr.pop,
+ push_native = arr.push,
+ push = arr.push,
+ slice = arr.slice,
+ // Use a stripped-down indexOf if we can't use a native one
+ indexOf = arr.indexOf || function( elem ) {
+ var i = 0,
+ len = this.length;
+ for ( ; i < len; i++ ) {
+ if ( this[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
+
+ // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+ whitespace = "[\\x20\\t\\r\\n\\f]",
+ // http://www.w3.org/TR/css3-syntax/#characters
+ characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+ // Loosely modeled on CSS identifier characters
+ // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+ // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+ identifier = characterEncoding.replace( "w", "w#" ),
+
+ // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+ attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
+ // Operator (capture 2)
+ "*([*^$|!~]?=)" + whitespace +
+ // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+ "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+ "*\\]",
+
+ pseudos = ":(" + characterEncoding + ")(?:\\((" +
+ // 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
+ rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+ rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+ rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+ rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+ rpseudo = new RegExp( pseudos ),
+ ridentifier = new RegExp( "^" + identifier + "$" ),
+
+ matchExpr = {
+ "ID": new RegExp( "^#(" + characterEncoding + ")" ),
+ "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+ "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+ "ATTR": new RegExp( "^" + attributes ),
+ "PSEUDO": new RegExp( "^" + pseudos ),
+ "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+ "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+ "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+ "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+ // For use in libraries implementing .is()
+ // We use this for POS matching in `select`
+ "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+ whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+ },
+
+ rinputs = /^(?:input|select|textarea|button)$/i,
+ rheader = /^h\d$/i,
+
+ rnative = /^[^{]+\{\s*\[native \w/,
+
+ // Easily-parseable/retrievable ID or TAG or CLASS selectors
+ rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+ rsibling = /[+~]/,
+ rescape = /'|\\/g,
+
+ // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+ runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+ funescape = function( _, escaped, escapedWhitespace ) {
+ var high = "0x" + escaped - 0x10000;
+ // NaN means non-codepoint
+ // Support: Firefox<24
+ // Workaround erroneous numeric interpretation of +"0x"
+ return high !== high || escapedWhitespace ?
+ escaped :
+ high < 0 ?
+ // BMP codepoint
+ String.fromCharCode( high + 0x10000 ) :
+ // Supplemental Plane codepoint (surrogate pair)
+ String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+ };
+
+// Optimize for push.apply( _, NodeList )
+try {
+ push.apply(
+ (arr = slice.call( preferredDoc.childNodes )),
+ preferredDoc.childNodes
+ );
+ // Support: Android<4.0
+ // Detect silently failing push.apply
+ arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+ push = { apply: arr.length ?
+
+ // Leverage slice if possible
+ function( target, els ) {
+ push_native.apply( target, slice.call(els) );
+ } :
+
+ // Support: IE<9
+ // Otherwise append directly
+ function( target, els ) {
+ var j = target.length,
+ i = 0;
+ // Can't trust NodeList.length
+ while ( (target[j++] = els[i++]) ) {}
+ target.length = j - 1;
+ }
+ };
+}
+
+function Sizzle( selector, context, results, seed ) {
+ var match, elem, m, nodeType,
+ // QSA vars
+ i, groups, old, nid, newContext, newSelector;
+
+ if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+ setDocument( context );
+ }
+
+ context = context || document;
+ results = results || [];
+
+ if ( !selector || typeof selector !== "string" ) {
+ return results;
+ }
+
+ if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
+ return [];
+ }
+
+ if ( documentIsHTML && !seed ) {
+
+ // Shortcuts
+ if ( (match = rquickExpr.exec( selector )) ) {
+ // Speed-up: Sizzle("#ID")
+ if ( (m = match[1]) ) {
+ if ( nodeType === 9 ) {
+ elem = context.getElementById( m );
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document (jQuery #6963)
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE, Opera, and Webkit return items
+ // by name instead of ID
+ if ( elem.id === m ) {
+ results.push( elem );
+ return results;
+ }
+ } else {
+ return results;
+ }
+ } else {
+ // Context is not a document
+ if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+ contains( context, elem ) && elem.id === m ) {
+ results.push( elem );
+ return results;
+ }
+ }
+
+ // Speed-up: Sizzle("TAG")
+ } else if ( match[2] ) {
+ push.apply( results, context.getElementsByTagName( selector ) );
+ return results;
+
+ // Speed-up: Sizzle(".CLASS")
+ } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
+ push.apply( results, context.getElementsByClassName( m ) );
+ return results;
+ }
+ }
+
+ // QSA path
+ if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+ nid = old = expando;
+ newContext = context;
+ newSelector = nodeType === 9 && selector;
+
+ // qSA works strangely on Element-rooted queries
+ // We can work around this by specifying an extra ID on the root
+ // and working up from there (Thanks to Andrew Dupont for the technique)
+ // IE 8 doesn't work on object elements
+ if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+ groups = tokenize( selector );
+
+ if ( (old = context.getAttribute("id")) ) {
+ nid = old.replace( rescape, "\\$&" );
+ } else {
+ context.setAttribute( "id", nid );
+ }
+ nid = "[id='" + nid + "'] ";
+
+ i = groups.length;
+ while ( i-- ) {
+ groups[i] = nid + toSelector( groups[i] );
+ }
+ newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
+ newSelector = groups.join(",");
+ }
+
+ if ( newSelector ) {
+ try {
+ push.apply( results,
+ newContext.querySelectorAll( newSelector )
+ );
+ return results;
+ } catch(qsaError) {
+ } finally {
+ if ( !old ) {
+ 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 div and expects a boolean result
+ */
+function assert( fn ) {
+ var div = document.createElement("div");
+
+ try {
+ return !!fn( div );
+ } catch (e) {
+ return false;
+ } finally {
+ // Remove from its parent by default
+ if ( div.parentNode ) {
+ div.parentNode.removeChild( div );
+ }
+ // release memory in IE
+ div = 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 = attrs.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 &&
+ ( ~b.sourceIndex || MAX_NEGATIVE ) -
+ ( ~a.sourceIndex || MAX_NEGATIVE );
+
+ // 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 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 !== strundefined && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+ // documentElement is verified for cases where it doesn't yet exist
+ // (such as loading iframes in IE - #4833)
+ var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+ var hasCompare,
+ doc = node ? node.ownerDocument || node : preferredDoc,
+ parent = doc.defaultView;
+
+ // If no document and documentElement is available, return
+ if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+ return document;
+ }
+
+ // Set our document
+ document = doc;
+ docElem = doc.documentElement;
+
+ // Support tests
+ documentIsHTML = !isXML( doc );
+
+ // Support: IE>8
+ // If iframe document is assigned to "document" variable and if iframe has been reloaded,
+ // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
+ // IE6-8 do not support the defaultView property so parent will be undefined
+ if ( parent && parent !== parent.top ) {
+ // IE11 does not have attachEvent, so all must suffer
+ if ( parent.addEventListener ) {
+ parent.addEventListener( "unload", function() {
+ setDocument();
+ }, false );
+ } else if ( parent.attachEvent ) {
+ parent.attachEvent( "onunload", function() {
+ setDocument();
+ });
+ }
+ }
+
+ /* Attributes
+ ---------------------------------------------------------------------- */
+
+ // Support: IE<8
+ // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
+ support.attributes = assert(function( div ) {
+ div.className = "i";
+ return !div.getAttribute("className");
+ });
+
+ /* getElement(s)By*
+ ---------------------------------------------------------------------- */
+
+ // Check if getElementsByTagName("*") returns only elements
+ support.getElementsByTagName = assert(function( div ) {
+ div.appendChild( doc.createComment("") );
+ return !div.getElementsByTagName("*").length;
+ });
+
+ // Check if getElementsByClassName can be trusted
+ support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {
+ div.innerHTML = "";
+
+ // Support: Safari<4
+ // Catch class over-caching
+ div.firstChild.className = "i";
+ // Support: Opera<10
+ // Catch gEBCN failure to find non-leading classes
+ return div.getElementsByClassName("i").length === 2;
+ });
+
+ // Support: IE<10
+ // Check if getElementById returns elements by name
+ // The broken getElementById methods don't pick up programatically-set names,
+ // so use a roundabout getElementsByName test
+ support.getById = assert(function( div ) {
+ docElem.appendChild( div ).id = expando;
+ return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
+ });
+
+ // ID find and filter
+ if ( support.getById ) {
+ Expr.find["ID"] = function( id, context ) {
+ if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
+ var m = context.getElementById( id );
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ return m && m.parentNode ? [ m ] : [];
+ }
+ };
+ Expr.filter["ID"] = function( id ) {
+ var attrId = id.replace( runescape, funescape );
+ return function( elem ) {
+ return elem.getAttribute("id") === attrId;
+ };
+ };
+ } else {
+ // Support: IE6/7
+ // getElementById is not reliable as a find shortcut
+ delete Expr.find["ID"];
+
+ Expr.filter["ID"] = function( id ) {
+ var attrId = id.replace( runescape, funescape );
+ return function( elem ) {
+ var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+ return node && node.value === attrId;
+ };
+ };
+ }
+
+ // Tag
+ Expr.find["TAG"] = support.getElementsByTagName ?
+ function( tag, context ) {
+ if ( typeof context.getElementsByTagName !== strundefined ) {
+ return context.getElementsByTagName( tag );
+ }
+ } :
+ function( tag, context ) {
+ var elem,
+ tmp = [],
+ i = 0,
+ 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 !== strundefined && 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 http://bugs.jquery.com/ticket/13378
+ rbuggyQSA = [];
+
+ if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
+ // Build QSA regex
+ // Regex strategy adopted from Diego Perini
+ assert(function( div ) {
+ // 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
+ // http://bugs.jquery.com/ticket/12359
+ div.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
+ // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+ if ( div.querySelectorAll("[msallowclip^='']").length ) {
+ rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+ }
+
+ // Support: IE8
+ // Boolean attributes and "value" are not treated correctly
+ if ( !div.querySelectorAll("[selected]").length ) {
+ rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+ }
+
+ // 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 ( !div.querySelectorAll(":checked").length ) {
+ rbuggyQSA.push(":checked");
+ }
+ });
+
+ assert(function( div ) {
+ // Support: Windows 8 Native Apps
+ // The type and name attributes are restricted during .innerHTML assignment
+ var input = doc.createElement("input");
+ input.setAttribute( "type", "hidden" );
+ div.appendChild( input ).setAttribute( "name", "D" );
+
+ // Support: IE8
+ // Enforce case-sensitivity of name attribute
+ if ( div.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 ( !div.querySelectorAll(":enabled").length ) {
+ rbuggyQSA.push( ":enabled", ":disabled" );
+ }
+
+ // Opera 10-11 does not throw on post-comma invalid pseudos
+ div.querySelectorAll("*,:x");
+ rbuggyQSA.push(",.*:");
+ });
+ }
+
+ if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+ docElem.webkitMatchesSelector ||
+ docElem.mozMatchesSelector ||
+ docElem.oMatchesSelector ||
+ docElem.msMatchesSelector) )) ) {
+
+ assert(function( div ) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9)
+ support.disconnectedMatch = matches.call( div, "div" );
+
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call( div, "[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 does not implement inclusive descendent
+ // As in, an element does not contain itself
+ contains = hasCompare || rnative.test( docElem.contains ) ?
+ function( a, b ) {
+ var adown = a.nodeType === 9 ? a.documentElement : a,
+ bup = b && b.parentNode;
+ return a === bup || !!( bup && bup.nodeType === 1 && (
+ adown.contains ?
+ adown.contains( bup ) :
+ a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+ ));
+ } :
+ function( a, b ) {
+ if ( b ) {
+ while ( (b = b.parentNode) ) {
+ if ( b === a ) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ /* Sorting
+ ---------------------------------------------------------------------- */
+
+ // Document order sorting
+ sortOrder = hasCompare ?
+ function( a, b ) {
+
+ // Flag for duplicate removal
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ // Sort on method existence if only one input has compareDocumentPosition
+ var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+ if ( compare ) {
+ return compare;
+ }
+
+ // Calculate position if both inputs belong to the same document
+ compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+ a.compareDocumentPosition( b ) :
+
+ // Otherwise we know they are disconnected
+ 1;
+
+ // Disconnected nodes
+ if ( compare & 1 ||
+ (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+ // Choose the first element that is related to our preferred document
+ if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+ return -1;
+ }
+ if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+ return 1;
+ }
+
+ // Maintain original order
+ return sortInput ?
+ ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
+ 0;
+ }
+
+ return compare & 4 ? -1 : 1;
+ } :
+ function( a, b ) {
+ // Exit early if the nodes are identical
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ var cur,
+ i = 0,
+ aup = a.parentNode,
+ bup = b.parentNode,
+ ap = [ a ],
+ bp = [ b ];
+
+ // Parentless nodes are either documents or disconnected
+ if ( !aup || !bup ) {
+ return a === doc ? -1 :
+ b === doc ? 1 :
+ aup ? -1 :
+ bup ? 1 :
+ sortInput ?
+ ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
+ 0;
+
+ // If the nodes are siblings, we can do a quick check
+ } else if ( aup === bup ) {
+ return siblingCheck( a, b );
+ }
+
+ // Otherwise we need full lists of their ancestors for comparison
+ cur = a;
+ while ( (cur = cur.parentNode) ) {
+ ap.unshift( cur );
+ }
+ cur = b;
+ while ( (cur = cur.parentNode) ) {
+ bp.unshift( cur );
+ }
+
+ // Walk down the tree looking for a discrepancy
+ while ( ap[i] === bp[i] ) {
+ i++;
+ }
+
+ return i ?
+ // Do a sibling check if the nodes have a common ancestor
+ siblingCheck( ap[i], bp[i] ) :
+
+ // Otherwise nodes in our document sort first
+ ap[i] === preferredDoc ? -1 :
+ bp[i] === preferredDoc ? 1 :
+ 0;
+ };
+
+ return doc;
+};
+
+Sizzle.matches = function( expr, elements ) {
+ return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+ // Set document vars if needed
+ if ( ( elem.ownerDocument || elem ) !== document ) {
+ setDocument( elem );
+ }
+
+ // Make sure that attribute selectors are quoted
+ expr = expr.replace( rattributeQuotes, "='$1']" );
+
+ if ( support.matchesSelector && documentIsHTML &&
+ ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+ ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
+
+ try {
+ var ret = matches.call( elem, expr );
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if ( ret || support.disconnectedMatch ||
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9
+ elem.document && elem.document.nodeType !== 11 ) {
+ return ret;
+ }
+ } catch(e) {}
+ }
+
+ return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+ // Set document vars if needed
+ if ( ( context.ownerDocument || context ) !== document ) {
+ setDocument( context );
+ }
+ return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+ // Set document vars if needed
+ if ( ( elem.ownerDocument || elem ) !== document ) {
+ setDocument( elem );
+ }
+
+ var fn = Expr.attrHandle[ name.toLowerCase() ],
+ // Don't get fooled by Object.prototype properties (jQuery #13807)
+ val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+ fn( elem, name, !documentIsHTML ) :
+ undefined;
+
+ return val !== undefined ?
+ val :
+ support.attributes || !documentIsHTML ?
+ elem.getAttribute( name ) :
+ (val = elem.getAttributeNode(name)) && val.specified ?
+ val.value :
+ null;
+};
+
+Sizzle.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 !== strundefined && elem.getAttribute("class") || "" );
+ });
+ },
+
+ "ATTR": function( name, operator, check ) {
+ return function( elem ) {
+ var result = Sizzle.attr( elem, name );
+
+ if ( result == null ) {
+ return operator === "!=";
+ }
+ if ( !operator ) {
+ return true;
+ }
+
+ result += "";
+
+ return operator === "=" ? result === check :
+ operator === "!=" ? result !== check :
+ operator === "^=" ? check && result.indexOf( check ) === 0 :
+ operator === "*=" ? check && result.indexOf( check ) > -1 :
+ operator === "$=" ? check && result.slice( -check.length ) === check :
+ operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+ operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+ false;
+ };
+ },
+
+ "CHILD": function( type, what, argument, first, last ) {
+ var simple = type.slice( 0, 3 ) !== "nth",
+ forward = type.slice( -4 ) !== "last",
+ ofType = what === "of-type";
+
+ return first === 1 && last === 0 ?
+
+ // Shortcut for :nth-*(n)
+ function( elem ) {
+ return !!elem.parentNode;
+ } :
+
+ function( elem, context, xml ) {
+ var cache, outerCache, node, diff, nodeIndex, start,
+ dir = simple !== forward ? "nextSibling" : "previousSibling",
+ parent = elem.parentNode,
+ name = ofType && elem.nodeName.toLowerCase(),
+ useCache = !xml && !ofType;
+
+ 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
+ outerCache = parent[ expando ] || (parent[ expando ] = {});
+ cache = outerCache[ type ] || [];
+ nodeIndex = cache[0] === dirruns && cache[1];
+ diff = cache[0] === dirruns && 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 ) {
+ outerCache[ type ] = [ dirruns, nodeIndex, diff ];
+ break;
+ }
+ }
+
+ // Use previously-cached element index if available
+ } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
+ diff = cache[1];
+
+ // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+ } else {
+ // 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 ) {
+ (node[ expando ] || (node[ expando ] = {}))[ 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.call( 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 );
+ return !results.pop();
+ };
+ }),
+
+ "has": markFunction(function( selector ) {
+ return function( elem ) {
+ return Sizzle( selector, elem ).length > 0;
+ };
+ }),
+
+ "contains": markFunction(function( text ) {
+ return function( elem ) {
+ return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+ };
+ }),
+
+ // "Whether an element is represented by a :lang() selector
+ // is based solely on the element's language value
+ // being equal to the identifier C,
+ // or beginning with the identifier C immediately followed by "-".
+ // The matching of C against the element's language value is performed case-insensitively.
+ // The identifier C does not have to be a valid language name."
+ // http://www.w3.org/TR/selectors/#lang-pseudo
+ "lang": markFunction( function( lang ) {
+ // lang value must be a valid identifier
+ if ( !ridentifier.test(lang || "") ) {
+ Sizzle.error( "unsupported lang: " + lang );
+ }
+ lang = lang.replace( runescape, funescape ).toLowerCase();
+ return function( elem ) {
+ var elemLang;
+ do {
+ if ( (elemLang = documentIsHTML ?
+ elem.lang :
+ elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+ elemLang = elemLang.toLowerCase();
+ return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+ }
+ } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+ return false;
+ };
+ }),
+
+ // Miscellaneous
+ "target": function( elem ) {
+ var hash = window.location && window.location.hash;
+ return hash && hash.slice( 1 ) === elem.id;
+ },
+
+ "root": function( elem ) {
+ return elem === docElem;
+ },
+
+ "focus": function( elem ) {
+ return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+ },
+
+ // Boolean properties
+ "enabled": function( elem ) {
+ return elem.disabled === false;
+ },
+
+ "disabled": function( elem ) {
+ return elem.disabled === true;
+ },
+
+ "checked": function( elem ) {
+ // In CSS3, :checked should return both checked and selected elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ var nodeName = elem.nodeName.toLowerCase();
+ return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+ },
+
+ "selected": function( elem ) {
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ if ( elem.parentNode ) {
+ elem.parentNode.selectedIndex;
+ }
+
+ return elem.selected === true;
+ },
+
+ // Contents
+ "empty": function( elem ) {
+ // http://www.w3.org/TR/selectors/#empty-pseudo
+ // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+ // but not by others (comment: 8; processing instruction: 7; etc.)
+ // nodeType < 6 works because attributes (2) do not appear as children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+ if ( elem.nodeType < 6 ) {
+ return false;
+ }
+ }
+ return true;
+ },
+
+ "parent": function( elem ) {
+ return !Expr.pseudos["empty"]( elem );
+ },
+
+ // Element/input types
+ "header": function( elem ) {
+ return rheader.test( elem.nodeName );
+ },
+
+ "input": function( elem ) {
+ return rinputs.test( elem.nodeName );
+ },
+
+ "button": function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === "button" || name === "button";
+ },
+
+ "text": function( elem ) {
+ var attr;
+ return elem.nodeName.toLowerCase() === "input" &&
+ elem.type === "text" &&
+
+ // Support: IE<8
+ // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+ ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+ },
+
+ // Position-in-collection
+ "first": createPositionalPseudo(function() {
+ return [ 0 ];
+ }),
+
+ "last": createPositionalPseudo(function( matchIndexes, length ) {
+ return [ length - 1 ];
+ }),
+
+ "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ return [ argument < 0 ? argument + length : argument ];
+ }),
+
+ "even": createPositionalPseudo(function( matchIndexes, length ) {
+ var i = 0;
+ for ( ; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "odd": createPositionalPseudo(function( matchIndexes, length ) {
+ var i = 1;
+ for ( ; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ var i = argument < 0 ? argument + length : argument;
+ for ( ; --i >= 0; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ var i = argument < 0 ? argument + length : argument;
+ for ( ; ++i < length; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ })
+ }
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+ Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+ Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+ var matched, match, tokens, type,
+ soFar, groups, preFilters,
+ cached = tokenCache[ selector + " " ];
+
+ if ( cached ) {
+ return parseOnly ? 0 : cached.slice( 0 );
+ }
+
+ soFar = selector;
+ groups = [];
+ preFilters = Expr.preFilter;
+
+ while ( soFar ) {
+
+ // Comma and first run
+ if ( !matched || (match = rcomma.exec( soFar )) ) {
+ if ( match ) {
+ // Don't consume trailing commas as valid
+ soFar = soFar.slice( match[0].length ) || soFar;
+ }
+ groups.push( (tokens = []) );
+ }
+
+ matched = false;
+
+ // Combinators
+ if ( (match = rcombinators.exec( soFar )) ) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ // Cast descendant combinators to space
+ type: match[0].replace( rtrim, " " )
+ });
+ soFar = soFar.slice( matched.length );
+ }
+
+ // Filters
+ for ( type in Expr.filter ) {
+ if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+ (match = preFilters[ type ]( match ))) ) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ type: type,
+ matches: match
+ });
+ soFar = soFar.slice( matched.length );
+ }
+ }
+
+ if ( !matched ) {
+ break;
+ }
+ }
+
+ // Return the length of the invalid excess
+ // if we're just parsing
+ // Otherwise, throw an error or return tokens
+ return parseOnly ?
+ soFar.length :
+ soFar ?
+ Sizzle.error( selector ) :
+ // Cache the tokens
+ tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+ var i = 0,
+ len = tokens.length,
+ selector = "";
+ for ( ; i < len; i++ ) {
+ selector += tokens[i].value;
+ }
+ return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+ var dir = combinator.dir,
+ checkNonElements = base && dir === "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 );
+ }
+ }
+ } :
+
+ // Check against all ancestor/preceding elements
+ function( elem, context, xml ) {
+ var oldCache, outerCache,
+ newCache = [ dirruns, doneName ];
+
+ // We can't set arbitrary data on XML nodes, so they don't benefit from dir 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 ] = {});
+ if ( (oldCache = outerCache[ dir ]) &&
+ 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
+ outerCache[ dir ] = newCache;
+
+ // A match means we're done; a fail means we have to keep checking
+ if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ };
+}
+
+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.call( 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.call( checkContext, elem ) > -1;
+ }, implicitRelative, true ),
+ matchers = [ function( elem, context, xml ) {
+ return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+ (checkContext = context).nodeType ?
+ matchContext( elem, context, xml ) :
+ matchAnyContext( elem, context, xml ) );
+ } ];
+
+ for ( ; i < len; i++ ) {
+ if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+ matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+ } else {
+ matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+ // Return special upon seeing a positional matcher
+ if ( matcher[ expando ] ) {
+ // Find the next relative operator (if any) for proper handling
+ j = ++i;
+ for ( ; j < len; j++ ) {
+ if ( Expr.relative[ tokens[j].type ] ) {
+ break;
+ }
+ }
+ return setMatcher(
+ i > 1 && elementMatcher( matchers ),
+ i > 1 && toSelector(
+ // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+ tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+ ).replace( rtrim, "$1" ),
+ matcher,
+ i < j && matcherFromTokens( tokens.slice( i, j ) ),
+ j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+ j < len && toSelector( tokens )
+ );
+ }
+ matchers.push( matcher );
+ }
+ }
+
+ return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+ var bySet = setMatchers.length > 0,
+ byElement = elementMatchers.length > 0,
+ superMatcher = function( seed, context, xml, results, outermost ) {
+ var elem, j, matcher,
+ matchedCount = 0,
+ i = "0",
+ unmatched = seed && [],
+ setMatched = [],
+ contextBackup = outermostContext,
+ // We must always have either seed elements or outermost context
+ elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+ // Use integer dirruns iff this is the outermost matcher
+ dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+ len = elems.length;
+
+ if ( outermost ) {
+ outermostContext = context !== document && context;
+ }
+
+ // Add elements passing elementMatchers directly to results
+ // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
+ // 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;
+ while ( (matcher = elementMatchers[j++]) ) {
+ if ( matcher( elem, context, 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 );
+ }
+ }
+ }
+
+ // Apply set filters to unmatched elements
+ matchedCount += i;
+ 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 no seed and only one group
+ if ( match.length === 1 ) {
+
+ // Take a shortcut and set the context if the root selector is an ID
+ tokens = match[0] = match[0].slice( 0 );
+ if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+ support.getById && 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,
+ 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
+// 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( div1 ) {
+ // Should return 1, but returns 4 (following)
+ return div1.compareDocumentPosition( document.createElement("div") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( div ) {
+ div.innerHTML = "";
+ return div.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( div ) {
+ div.innerHTML = "";
+ div.firstChild.setAttribute( "value", "" );
+ return div.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( div ) {
+ return div.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;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
+
+
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+ if ( jQuery.isFunction( qualifier ) ) {
+ return jQuery.grep( elements, function( elem, i ) {
+ /* jshint -W018 */
+ return !!qualifier.call( elem, i, elem ) !== not;
+ });
+
+ }
+
+ if ( qualifier.nodeType ) {
+ return jQuery.grep( elements, function( elem ) {
+ return ( elem === qualifier ) !== not;
+ });
+
+ }
+
+ if ( typeof qualifier === "string" ) {
+ if ( risSimple.test( qualifier ) ) {
+ return jQuery.filter( qualifier, elements, not );
+ }
+
+ qualifier = jQuery.filter( qualifier, elements );
+ }
+
+ return jQuery.grep( elements, function( elem ) {
+ return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
+ });
+}
+
+jQuery.filter = function( expr, elems, not ) {
+ var elem = elems[ 0 ];
+
+ if ( not ) {
+ expr = ":not(" + expr + ")";
+ }
+
+ return elems.length === 1 && elem.nodeType === 1 ?
+ jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
+ jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+ return elem.nodeType === 1;
+ }));
+};
+
+jQuery.fn.extend({
+ find: function( selector ) {
+ var i,
+ ret = [],
+ self = this,
+ len = self.length;
+
+ 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;
+ }
+ }
+ }) );
+ }
+
+ for ( i = 0; i < len; i++ ) {
+ jQuery.find( selector, self[ i ], ret );
+ }
+
+ // Needed because $( selector, context ) becomes $( context ).find( selector )
+ ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+ ret.selector = this.selector ? this.selector + " " + selector : selector;
+ return 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,
+
+ // Use the correct document accordingly with window argument (sandbox)
+ document = window.document,
+
+ // 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 <)
+ rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+ init = jQuery.fn.init = function( selector, context ) {
+ var match, elem;
+
+ // HANDLE: $(""), $(null), $(undefined), $(false)
+ if ( !selector ) {
+ return this;
+ }
+
+ // Handle HTML strings
+ if ( typeof selector === "string" ) {
+ if ( selector.charAt(0) === "<" && selector.charAt( 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;
+
+ // scripts is true for back-compat
+ // Intentionally let the error be thrown if parseHTML is not present
+ jQuery.merge( this, jQuery.parseHTML(
+ match[1],
+ context && context.nodeType ? context.ownerDocument || context : document,
+ true
+ ) );
+
+ // HANDLE: $(html, props)
+ if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+ for ( match in context ) {
+ // Properties of context are called as methods if possible
+ if ( jQuery.isFunction( this[ match ] ) ) {
+ this[ match ]( context[ match ] );
+
+ // ...and otherwise set as attributes
+ } else {
+ this.attr( match, context[ match ] );
+ }
+ }
+ }
+
+ return this;
+
+ // HANDLE: $(#id)
+ } else {
+ elem = document.getElementById( match[2] );
+
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id !== match[2] ) {
+ return rootjQuery.find( selector );
+ }
+
+ // Otherwise, we inject the element directly into the jQuery object
+ this.length = 1;
+ this[0] = elem;
+ }
+
+ this.context = document;
+ this.selector = selector;
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return ( context || rootjQuery ).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.context = this[0] = selector;
+ this.length = 1;
+ return this;
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) ) {
+ return typeof rootjQuery.ready !== "undefined" ?
+ rootjQuery.ready( selector ) :
+ // Execute immediately if ready is not present
+ selector( jQuery );
+ }
+
+ if ( selector.selector !== undefined ) {
+ this.selector = selector.selector;
+ this.context = selector.context;
+ }
+
+ 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.extend({
+ dir: function( elem, dir, until ) {
+ var matched = [],
+ cur = elem[ dir ];
+
+ while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+ if ( cur.nodeType === 1 ) {
+ matched.push( cur );
+ }
+ cur = cur[dir];
+ }
+ return matched;
+ },
+
+ sibling: function( n, elem ) {
+ var r = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ r.push( n );
+ }
+ }
+
+ return r;
+ }
+});
+
+jQuery.fn.extend({
+ has: function( target ) {
+ var i,
+ targets = jQuery( target, this ),
+ len = targets.length;
+
+ return this.filter(function() {
+ for ( i = 0; i < len; i++ ) {
+ if ( jQuery.contains( this, targets[i] ) ) {
+ return true;
+ }
+ }
+ });
+ },
+
+ closest: function( selectors, context ) {
+ var cur,
+ i = 0,
+ l = this.length,
+ matched = [],
+ pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+ jQuery( selectors, context || this.context ) :
+ 0;
+
+ for ( ; i < l; i++ ) {
+ for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
+ // Always skip document fragments
+ if ( cur.nodeType < 11 && (pos ?
+ pos.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.unique( matched ) : matched );
+ },
+
+ // Determine the position of an element within
+ // the matched set of elements
+ 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 jQuery.inArray( this[0], jQuery( elem ) );
+ }
+
+ // Locate the position of the desired element
+ return jQuery.inArray(
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[0] : elem, this );
+ },
+
+ add: function( selector, context ) {
+ return this.pushStack(
+ jQuery.unique(
+ 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 ) {
+ do {
+ cur = cur[ dir ];
+ } while ( cur && 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 jQuery.dir( elem, "parentNode" );
+ },
+ parentsUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "parentNode", until );
+ },
+ next: function( elem ) {
+ return sibling( elem, "nextSibling" );
+ },
+ prev: function( elem ) {
+ return sibling( elem, "previousSibling" );
+ },
+ nextAll: function( elem ) {
+ return jQuery.dir( elem, "nextSibling" );
+ },
+ prevAll: function( elem ) {
+ return jQuery.dir( elem, "previousSibling" );
+ },
+ nextUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "nextSibling", until );
+ },
+ prevUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "previousSibling", until );
+ },
+ siblings: function( elem ) {
+ return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+ },
+ children: function( elem ) {
+ return jQuery.sibling( elem.firstChild );
+ },
+ contents: function( elem ) {
+ return jQuery.nodeName( elem, "iframe" ) ?
+ elem.contentDocument || elem.contentWindow.document :
+ jQuery.merge( [], elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var ret = jQuery.map( this, fn, until );
+
+ if ( name.slice( -5 ) !== "Until" ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ ret = jQuery.filter( selector, ret );
+ }
+
+ if ( this.length > 1 ) {
+ // Remove duplicates
+ if ( !guaranteedUnique[ name ] ) {
+ ret = jQuery.unique( ret );
+ }
+
+ // Reverse order for parents* and prev-derivatives
+ if ( rparentsprev.test( name ) ) {
+ ret = ret.reverse();
+ }
+ }
+
+ return this.pushStack( ret );
+ };
+});
+var rnotwhite = (/\S+/g);
+
+
+
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+ var object = optionsCache[ options ] = {};
+ jQuery.each( options.match( rnotwhite ) || [], 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" ?
+ ( optionsCache[ options ] || 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,
+ // End of the loop when firing
+ firingLength,
+ // Index of currently firing callback (modified by remove if needed)
+ firingIndex,
+ // First callback to fire (used internally by add and fireWith)
+ firingStart,
+ // Actual callback list
+ list = [],
+ // Stack of fire calls for repeatable lists
+ stack = !options.once && [],
+ // Fire callbacks
+ fire = function( data ) {
+ memory = options.memory && data;
+ fired = true;
+ firingIndex = firingStart || 0;
+ firingStart = 0;
+ firingLength = list.length;
+ firing = true;
+ for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+ if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+ memory = false; // To prevent further calls using add
+ break;
+ }
+ }
+ firing = false;
+ if ( list ) {
+ if ( stack ) {
+ if ( stack.length ) {
+ fire( stack.shift() );
+ }
+ } else if ( memory ) {
+ list = [];
+ } else {
+ self.disable();
+ }
+ }
+ },
+ // Actual Callbacks object
+ self = {
+ // Add a callback or a collection of callbacks to the list
+ add: function() {
+ if ( list ) {
+ // First, we save the current length
+ var start = list.length;
+ (function add( args ) {
+ jQuery.each( args, function( _, arg ) {
+ var type = jQuery.type( arg );
+ if ( type === "function" ) {
+ if ( !options.unique || !self.has( arg ) ) {
+ list.push( arg );
+ }
+ } else if ( arg && arg.length && type !== "string" ) {
+ // Inspect recursively
+ add( arg );
+ }
+ });
+ })( arguments );
+ // Do we need to add the callbacks to the
+ // current firing batch?
+ if ( firing ) {
+ firingLength = list.length;
+ // With memory, if we're not firing then
+ // we should call right away
+ } else if ( memory ) {
+ firingStart = start;
+ fire( memory );
+ }
+ }
+ return this;
+ },
+ // Remove a callback from the list
+ remove: function() {
+ if ( list ) {
+ jQuery.each( arguments, function( _, arg ) {
+ var index;
+ while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+ list.splice( index, 1 );
+ // Handle firing indexes
+ if ( firing ) {
+ if ( index <= firingLength ) {
+ firingLength--;
+ }
+ 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 && list.length );
+ },
+ // Remove all callbacks from the list
+ empty: function() {
+ list = [];
+ firingLength = 0;
+ return this;
+ },
+ // Have the list do nothing anymore
+ disable: function() {
+ list = stack = memory = undefined;
+ return this;
+ },
+ // Is it disabled?
+ disabled: function() {
+ return !list;
+ },
+ // Lock the list in its current state
+ lock: function() {
+ stack = undefined;
+ if ( !memory ) {
+ self.disable();
+ }
+ return this;
+ },
+ // Is it locked?
+ locked: function() {
+ return !stack;
+ },
+ // Call all callbacks with the given context and arguments
+ fireWith: function( context, args ) {
+ if ( list && ( !fired || stack ) ) {
+ args = args || [];
+ args = [ context, args.slice ? args.slice() : args ];
+ if ( firing ) {
+ stack.push( args );
+ } else {
+ fire( args );
+ }
+ }
+ 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;
+};
+
+
+jQuery.extend({
+
+ Deferred: function( func ) {
+ var tuples = [
+ // action, add listener, listener list, final state
+ [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+ [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+ [ "notify", "progress", jQuery.Callbacks("memory") ]
+ ],
+ state = "pending",
+ promise = {
+ state: function() {
+ return state;
+ },
+ always: function() {
+ deferred.done( arguments ).fail( arguments );
+ return this;
+ },
+ then: function( /* fnDone, fnFail, fnProgress */ ) {
+ var fns = arguments;
+ return jQuery.Deferred(function( newDefer ) {
+ jQuery.each( tuples, function( i, tuple ) {
+ var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+ // deferred[ done | fail | progress ] for forwarding actions to newDefer
+ deferred[ tuple[1] ](function() {
+ var returned = fn && fn.apply( this, arguments );
+ if ( returned && jQuery.isFunction( returned.promise ) ) {
+ returned.promise()
+ .done( newDefer.resolve )
+ .fail( newDefer.reject )
+ .progress( newDefer.notify );
+ } else {
+ newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
+ }
+ });
+ });
+ fns = null;
+ }).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 = {};
+
+ // Keep pipe for back-compat
+ promise.pipe = promise.then;
+
+ // Add list-specific methods
+ jQuery.each( tuples, function( i, tuple ) {
+ var list = tuple[ 2 ],
+ stateString = tuple[ 3 ];
+
+ // promise[ done | fail | progress ] = list.add
+ promise[ tuple[1] ] = list.add;
+
+ // Handle state
+ if ( stateString ) {
+ list.add(function() {
+ // state = [ resolved | rejected ]
+ state = stateString;
+
+ // [ reject_list | resolve_list ].disable; progress_list.lock
+ }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+ }
+
+ // deferred[ resolve | reject | notify ]
+ deferred[ tuple[0] ] = function() {
+ deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
+ return this;
+ };
+ 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( subordinate /* , ..., subordinateN */ ) {
+ var i = 0,
+ resolveValues = slice.call( arguments ),
+ length = resolveValues.length,
+
+ // the count of uncompleted subordinates
+ remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+ // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+ deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+ // Update function for both resolve and progress values
+ updateFunc = function( i, contexts, values ) {
+ return function( value ) {
+ contexts[ i ] = this;
+ values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+ if ( values === progressValues ) {
+ deferred.notifyWith( contexts, values );
+
+ } else if ( !(--remaining) ) {
+ deferred.resolveWith( contexts, values );
+ }
+ };
+ },
+
+ progressValues, progressContexts, resolveContexts;
+
+ // add listeners to Deferred subordinates; treat others as resolved
+ if ( length > 1 ) {
+ progressValues = new Array( length );
+ progressContexts = new Array( length );
+ resolveContexts = new Array( length );
+ for ( ; i < length; i++ ) {
+ if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+ resolveValues[ i ].promise()
+ .done( updateFunc( i, resolveContexts, resolveValues ) )
+ .fail( deferred.reject )
+ .progress( updateFunc( i, progressContexts, progressValues ) );
+ } else {
+ --remaining;
+ }
+ }
+ }
+
+ // if we're not waiting on anything, resolve the master
+ if ( !remaining ) {
+ deferred.resolveWith( resolveContexts, resolveValues );
+ }
+
+ return deferred.promise();
+ }
+});
+
+
+// The deferred used on DOM ready
+var readyList;
+
+jQuery.fn.ready = function( fn ) {
+ // Add the callback
+ jQuery.ready.promise().done( fn );
+
+ 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,
+
+ // Hold (or release) the ready event
+ holdReady: function( hold ) {
+ if ( hold ) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready( true );
+ }
+ },
+
+ // 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;
+ }
+
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( !document.body ) {
+ return setTimeout( jQuery.ready );
+ }
+
+ // 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 ] );
+
+ // Trigger any bound ready events
+ if ( jQuery.fn.triggerHandler ) {
+ jQuery( document ).triggerHandler( "ready" );
+ jQuery( document ).off( "ready" );
+ }
+ }
+});
+
+/**
+ * Clean-up method for dom ready events
+ */
+function detach() {
+ if ( document.addEventListener ) {
+ document.removeEventListener( "DOMContentLoaded", completed, false );
+ window.removeEventListener( "load", completed, false );
+
+ } else {
+ document.detachEvent( "onreadystatechange", completed );
+ window.detachEvent( "onload", completed );
+ }
+}
+
+/**
+ * The ready event handler and self cleanup method
+ */
+function completed() {
+ // readyState === "complete" is good enough for us to call the dom ready in oldIE
+ if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
+ detach();
+ jQuery.ready();
+ }
+}
+
+jQuery.ready.promise = function( obj ) {
+ if ( !readyList ) {
+
+ readyList = jQuery.Deferred();
+
+ // Catch cases where $(document).ready() is called after the browser event has already occurred.
+ // we once tried to use readyState "interactive" here, but it caused issues like the one
+ // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+ if ( document.readyState === "complete" ) {
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ setTimeout( jQuery.ready );
+
+ // Standards-based browsers support DOMContentLoaded
+ } else if ( document.addEventListener ) {
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", completed, false );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", completed, false );
+
+ // If IE event model is used
+ } else {
+ // Ensure firing before onload, maybe late but safe also for iframes
+ document.attachEvent( "onreadystatechange", completed );
+
+ // A fallback to window.onload, that will always work
+ window.attachEvent( "onload", completed );
+
+ // If IE and not a frame
+ // continually check to see if the document is ready
+ var top = false;
+
+ try {
+ top = window.frameElement == null && document.documentElement;
+ } catch(e) {}
+
+ if ( top && top.doScroll ) {
+ (function doScrollCheck() {
+ if ( !jQuery.isReady ) {
+
+ try {
+ // Use the trick by Diego Perini
+ // http://javascript.nwbox.com/IEContentLoaded/
+ top.doScroll("left");
+ } catch(e) {
+ return setTimeout( doScrollCheck, 50 );
+ }
+
+ // detach all dom ready events
+ detach();
+
+ // and execute any waiting functions
+ jQuery.ready();
+ }
+ })();
+ }
+ }
+ }
+ return readyList.promise( obj );
+};
+
+
+var strundefined = typeof undefined;
+
+
+
+// Support: IE<9
+// Iteration over object's inherited properties before its own
+var i;
+for ( i in jQuery( support ) ) {
+ break;
+}
+support.ownLast = i !== "0";
+
+// Note: most support tests are defined in their respective modules.
+// false until the test is run
+support.inlineBlockNeedsLayout = false;
+
+// Execute ASAP in case we need to set body.style.zoom
+jQuery(function() {
+ // Minified: var a,b,c,d
+ var val, div, body, container;
+
+ body = document.getElementsByTagName( "body" )[ 0 ];
+ if ( !body || !body.style ) {
+ // Return for frameset docs that don't have a body
+ return;
+ }
+
+ // Setup
+ div = document.createElement( "div" );
+ container = document.createElement( "div" );
+ container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
+ body.appendChild( container ).appendChild( div );
+
+ if ( typeof div.style.zoom !== strundefined ) {
+ // Support: IE<8
+ // Check if natively block-level elements act like inline-block
+ // elements when setting their display to 'inline' and giving
+ // them layout
+ div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
+
+ support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
+ if ( val ) {
+ // Prevent IE 6 from affecting layout for positioned elements #11048
+ // Prevent IE from shrinking the body in IE 7 mode #12869
+ // Support: IE<8
+ body.style.zoom = 1;
+ }
+ }
+
+ body.removeChild( container );
+});
+
+
+
+
+(function() {
+ var div = document.createElement( "div" );
+
+ // Execute the test only if not already executed in another module.
+ if (support.deleteExpando == null) {
+ // Support: IE<9
+ support.deleteExpando = true;
+ try {
+ delete div.test;
+ } catch( e ) {
+ support.deleteExpando = false;
+ }
+ }
+
+ // Null elements to avoid leaks in IE.
+ div = null;
+})();
+
+
+/**
+ * Determines whether an object can have data
+ */
+jQuery.acceptData = function( elem ) {
+ var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ],
+ nodeType = +elem.nodeType || 1;
+
+ // Do not set data on non-element DOM nodes because it will not be cleared (#8335).
+ return nodeType !== 1 && nodeType !== 9 ?
+ false :
+
+ // Nodes accept data unless otherwise specified; rejection can be conditional
+ !noData || noData !== true && elem.getAttribute("classid") === noData;
+};
+
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+ rmultiDash = /([A-Z])/g;
+
+function dataAttr( elem, key, data ) {
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if ( data === undefined && elem.nodeType === 1 ) {
+
+ var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+ data = elem.getAttribute( name );
+
+ if ( typeof data === "string" ) {
+ try {
+ data = data === "true" ? true :
+ data === "false" ? false :
+ data === "null" ? null :
+ // Only convert to a number if it doesn't change the string
+ +data + "" === data ? +data :
+ rbrace.test( data ) ? jQuery.parseJSON( data ) :
+ data;
+ } catch( e ) {}
+
+ // Make sure we set the data so it isn't changed later
+ jQuery.data( elem, key, data );
+
+ } else {
+ data = undefined;
+ }
+ }
+
+ return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+ var name;
+ for ( name in obj ) {
+
+ // if the public data object is empty, the private is still empty
+ if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+ continue;
+ }
+ if ( name !== "toJSON" ) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
+ if ( !jQuery.acceptData( elem ) ) {
+ return;
+ }
+
+ var ret, thisCache,
+ internalKey = jQuery.expando,
+
+ // We have to handle DOM nodes and JS objects differently because IE6-7
+ // can't GC object references properly across the DOM-JS boundary
+ isNode = elem.nodeType,
+
+ // Only DOM nodes need the global jQuery cache; JS object data is
+ // attached directly to the object so GC can occur automatically
+ cache = isNode ? jQuery.cache : elem,
+
+ // Only defining an ID for JS objects if its cache already exists allows
+ // the code to shortcut on the same path as a DOM node with no cache
+ id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+
+ // Avoid doing any more work than we need to when trying to get data on an
+ // object that has no data at all
+ if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {
+ return;
+ }
+
+ if ( !id ) {
+ // Only DOM nodes need a new unique ID for each element since their data
+ // ends up in the global cache
+ if ( isNode ) {
+ id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;
+ } else {
+ id = internalKey;
+ }
+ }
+
+ if ( !cache[ id ] ) {
+ // Avoid exposing jQuery metadata on plain JS objects when the object
+ // is serialized using JSON.stringify
+ cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
+ }
+
+ // An object can be passed to jQuery.data instead of a key/value pair; this gets
+ // shallow copied over onto the existing cache
+ if ( typeof name === "object" || typeof name === "function" ) {
+ if ( pvt ) {
+ cache[ id ] = jQuery.extend( cache[ id ], name );
+ } else {
+ cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+ }
+ }
+
+ thisCache = cache[ id ];
+
+ // jQuery data() is stored in a separate object inside the object's internal data
+ // cache in order to avoid key collisions between internal data and user-defined
+ // data.
+ if ( !pvt ) {
+ if ( !thisCache.data ) {
+ thisCache.data = {};
+ }
+
+ thisCache = thisCache.data;
+ }
+
+ if ( data !== undefined ) {
+ thisCache[ jQuery.camelCase( name ) ] = data;
+ }
+
+ // Check for both converted-to-camel and non-converted data property names
+ // If a data property was specified
+ if ( typeof name === "string" ) {
+
+ // First Try to find as-is property data
+ ret = thisCache[ name ];
+
+ // Test for null|undefined property data
+ if ( ret == null ) {
+
+ // Try to find the camelCased property
+ ret = thisCache[ jQuery.camelCase( name ) ];
+ }
+ } else {
+ ret = thisCache;
+ }
+
+ return ret;
+}
+
+function internalRemoveData( elem, name, pvt ) {
+ if ( !jQuery.acceptData( elem ) ) {
+ return;
+ }
+
+ var thisCache, i,
+ isNode = elem.nodeType,
+
+ // See jQuery.data for more information
+ cache = isNode ? jQuery.cache : elem,
+ id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+ // If there is already no cache entry for this object, there is no
+ // purpose in continuing
+ if ( !cache[ id ] ) {
+ return;
+ }
+
+ if ( name ) {
+
+ thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+ if ( thisCache ) {
+
+ // Support array or space separated string names for data keys
+ if ( !jQuery.isArray( name ) ) {
+
+ // try the string as a key before any manipulation
+ if ( name in thisCache ) {
+ name = [ name ];
+ } else {
+
+ // split the camel cased version by spaces unless a key with the spaces exists
+ name = jQuery.camelCase( name );
+ if ( name in thisCache ) {
+ name = [ name ];
+ } else {
+ name = name.split(" ");
+ }
+ }
+ } else {
+ // If "name" is an array of keys...
+ // When data is initially created, via ("key", "val") signature,
+ // keys will be converted to camelCase.
+ // Since there is no way to tell _how_ a key was added, remove
+ // both plain key and camelCase key. #12786
+ // This will only penalize the array argument path.
+ name = name.concat( jQuery.map( name, jQuery.camelCase ) );
+ }
+
+ i = name.length;
+ while ( i-- ) {
+ delete thisCache[ name[i] ];
+ }
+
+ // If there is no data left in the cache, we want to continue
+ // and let the cache object itself get destroyed
+ if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {
+ return;
+ }
+ }
+ }
+
+ // See jQuery.data for more information
+ if ( !pvt ) {
+ delete cache[ id ].data;
+
+ // Don't destroy the parent cache unless the internal data object
+ // had been the only thing left in it
+ if ( !isEmptyDataObject( cache[ id ] ) ) {
+ return;
+ }
+ }
+
+ // Destroy the cache
+ if ( isNode ) {
+ jQuery.cleanData( [ elem ], true );
+
+ // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+ /* jshint eqeqeq: false */
+ } else if ( support.deleteExpando || cache != cache.window ) {
+ /* jshint eqeqeq: true */
+ delete cache[ id ];
+
+ // When all else fails, null
+ } else {
+ cache[ id ] = null;
+ }
+}
+
+jQuery.extend({
+ cache: {},
+
+ // The following elements (space-suffixed to avoid Object.prototype collisions)
+ // throw uncatchable exceptions if you attempt to set expando properties
+ noData: {
+ "applet ": true,
+ "embed ": true,
+ // ...but Flash objects (which have this classid) *can* handle expandos
+ "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
+ },
+
+ hasData: function( elem ) {
+ elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+ return !!elem && !isEmptyDataObject( elem );
+ },
+
+ data: function( elem, name, data ) {
+ return internalData( elem, name, data );
+ },
+
+ removeData: function( elem, name ) {
+ return internalRemoveData( elem, name );
+ },
+
+ // For internal use only.
+ _data: function( elem, name, data ) {
+ return internalData( elem, name, data, true );
+ },
+
+ _removeData: function( elem, name ) {
+ return internalRemoveData( elem, name, true );
+ }
+});
+
+jQuery.fn.extend({
+ data: function( key, value ) {
+ var i, name, data,
+ elem = this[0],
+ attrs = elem && elem.attributes;
+
+ // Special expections of .data basically thwart jQuery.access,
+ // so implement the relevant behavior ourselves
+
+ // Gets all values
+ if ( key === undefined ) {
+ if ( this.length ) {
+ data = jQuery.data( elem );
+
+ if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+ i = attrs.length;
+ while ( i-- ) {
+
+ // Support: IE11+
+ // The attrs elements can be null (#14894)
+ if ( attrs[ i ] ) {
+ name = attrs[ i ].name;
+ if ( name.indexOf( "data-" ) === 0 ) {
+ name = jQuery.camelCase( name.slice(5) );
+ dataAttr( elem, name, data[ name ] );
+ }
+ }
+ }
+ jQuery._data( elem, "parsedAttrs", true );
+ }
+ }
+
+ return data;
+ }
+
+ // Sets multiple values
+ if ( typeof key === "object" ) {
+ return this.each(function() {
+ jQuery.data( this, key );
+ });
+ }
+
+ return arguments.length > 1 ?
+
+ // Sets one value
+ this.each(function() {
+ jQuery.data( this, key, value );
+ }) :
+
+ // Gets one value
+ // Try to fetch any internally stored data first
+ elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;
+ },
+
+ removeData: function( key ) {
+ return this.each(function() {
+ jQuery.removeData( this, key );
+ });
+ }
+});
+
+
+jQuery.extend({
+ queue: function( elem, type, data ) {
+ var queue;
+
+ if ( elem ) {
+ type = ( type || "fx" ) + "queue";
+ queue = jQuery._data( elem, type );
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( data ) {
+ if ( !queue || jQuery.isArray(data) ) {
+ queue = jQuery._data( 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 intended for public consumption - generates a queueHooks object, or returns the current one
+ _queueHooks: function( elem, type ) {
+ var key = type + "queueHooks";
+ return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+ empty: jQuery.Callbacks("once memory").add(function() {
+ jQuery._removeData( elem, type + "queue" );
+ jQuery._removeData( elem, 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 = jQuery._data( 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 cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var isHidden = function( elem, el ) {
+ // isHidden might be called from jQuery#filter function;
+ // in that case, element will be second argument
+ elem = el || elem;
+ return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+ };
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+ var i = 0,
+ length = elems.length,
+ bulk = key == null;
+
+ // Sets many values
+ if ( jQuery.type( key ) === "object" ) {
+ chainable = true;
+ for ( i in key ) {
+ jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
+ }
+
+ // Sets one value
+ } else if ( value !== undefined ) {
+ chainable = true;
+
+ if ( !jQuery.isFunction( value ) ) {
+ raw = true;
+ }
+
+ if ( bulk ) {
+ // Bulk operations run against the entire set
+ if ( raw ) {
+ fn.call( elems, value );
+ fn = null;
+
+ // ...except when executing function values
+ } else {
+ bulk = fn;
+ fn = function( elem, key, value ) {
+ return bulk.call( jQuery( elem ), value );
+ };
+ }
+ }
+
+ if ( fn ) {
+ for ( ; i < length; i++ ) {
+ fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
+ }
+ }
+ }
+
+ return chainable ?
+ elems :
+
+ // Gets
+ bulk ?
+ fn.call( elems ) :
+ length ? fn( elems[0], key ) : emptyGet;
+};
+var rcheckableType = (/^(?:checkbox|radio)$/i);
+
+
+
+(function() {
+ // Minified: var a,b,c
+ var input = document.createElement( "input" ),
+ div = document.createElement( "div" ),
+ fragment = document.createDocumentFragment();
+
+ // Setup
+ div.innerHTML = " a";
+
+ // IE strips leading whitespace when .innerHTML is used
+ support.leadingWhitespace = div.firstChild.nodeType === 3;
+
+ // Make sure that tbody elements aren't automatically inserted
+ // IE will insert them into empty tables
+ support.tbody = !div.getElementsByTagName( "tbody" ).length;
+
+ // Make sure that link elements get serialized correctly by innerHTML
+ // This requires a wrapper element in IE
+ support.htmlSerialize = !!div.getElementsByTagName( "link" ).length;
+
+ // Makes sure cloning an html5 element does not cause problems
+ // Where outerHTML is undefined, this still works
+ support.html5Clone =
+ document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav>";
+
+ // Check if a disconnected checkbox will retain its checked
+ // value of true after appended to the DOM (IE6/7)
+ input.type = "checkbox";
+ input.checked = true;
+ fragment.appendChild( input );
+ support.appendChecked = input.checked;
+
+ // Make sure textarea (and checkbox) defaultValue is properly cloned
+ // Support: IE6-IE11+
+ div.innerHTML = "";
+ support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+
+ // #11217 - WebKit loses check when the name is after the checked attribute
+ fragment.appendChild( div );
+ div.innerHTML = "";
+
+ // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
+ // old WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+ // Support: IE<9
+ // Opera does not clone events (and typeof div.attachEvent === undefined).
+ // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
+ support.noCloneEvent = true;
+ if ( div.attachEvent ) {
+ div.attachEvent( "onclick", function() {
+ support.noCloneEvent = false;
+ });
+
+ div.cloneNode( true ).click();
+ }
+
+ // Execute the test only if not already executed in another module.
+ if (support.deleteExpando == null) {
+ // Support: IE<9
+ support.deleteExpando = true;
+ try {
+ delete div.test;
+ } catch( e ) {
+ support.deleteExpando = false;
+ }
+ }
+})();
+
+
+(function() {
+ var i, eventName,
+ div = document.createElement( "div" );
+
+ // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event)
+ for ( i in { submit: true, change: true, focusin: true }) {
+ eventName = "on" + i;
+
+ if ( !(support[ i + "Bubbles" ] = eventName in window) ) {
+ // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
+ div.setAttribute( eventName, "t" );
+ support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false;
+ }
+ }
+
+ // Null elements to avoid leaks in IE.
+ div = null;
+})();
+
+
+var rformElems = /^(?:input|select|textarea)$/i,
+ rkeyEvent = /^key/,
+ rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
+ rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+ rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+
+function returnTrue() {
+ return true;
+}
+
+function returnFalse() {
+ return false;
+}
+
+function safeActiveElement() {
+ try {
+ return document.activeElement;
+ } catch ( err ) { }
+}
+
+/*
+ * 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 tmp, events, t, handleObjIn,
+ special, eventHandle, handleObj,
+ handlers, type, namespaces, origType,
+ elemData = jQuery._data( elem );
+
+ // Don't attach events to noData or text/comment nodes (but allow plain objects)
+ if ( !elemData ) {
+ return;
+ }
+
+ // Caller can pass in an object of custom data in lieu of the handler
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ selector = handleObjIn.selector;
+ }
+
+ // Make sure that the handler has a unique ID, used to find/remove it later
+ if ( !handler.guid ) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure and main handler, if this is the first
+ if ( !(events = elemData.events) ) {
+ events = elemData.events = {};
+ }
+ if ( !(eventHandle = elemData.handle) ) {
+ eventHandle = elemData.handle = function( e ) {
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?
+ jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+ undefined;
+ };
+ // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+ eventHandle.elem = elem;
+ }
+
+ // Handle multiple events separated by a space
+ types = ( types || "" ).match( rnotwhite ) || [ "" ];
+ 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/attachEvent if the special events handler returns false
+ if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+ // Bind the global event handler to the element
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle, false );
+
+ } else if ( elem.attachEvent ) {
+ elem.attachEvent( "on" + 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;
+ }
+
+ // Nullify elem to prevent memory leaks in IE
+ elem = null;
+ },
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, selector, mappedTypes ) {
+ var j, handleObj, tmp,
+ origCount, t, events,
+ special, handlers, type,
+ namespaces, origType,
+ elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+
+ if ( !elemData || !(events = elemData.events) ) {
+ return;
+ }
+
+ // Once for each type.namespace in types; type may be omitted
+ types = ( types || "" ).match( rnotwhite ) || [ "" ];
+ 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 the expando if it's no longer used
+ if ( jQuery.isEmptyObject( events ) ) {
+ delete elemData.handle;
+
+ // removeData also checks for emptiness and clears the expando if empty
+ // so use it instead of delete
+ jQuery._removeData( elem, "events" );
+ }
+ },
+
+ trigger: function( event, data, elem, onlyHandlers ) {
+ var handle, ontype, cur,
+ bubbleType, special, tmp, i,
+ eventPath = [ elem || document ],
+ type = hasOwn.call( event, "type" ) ? event.type : event,
+ namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
+
+ cur = tmp = elem = elem || document;
+
+ // Don't do events on text and comment nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
+
+ // focus/blur morphs to focusin/out; ensure we're not firing them right now
+ if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+ return;
+ }
+
+ if ( type.indexOf(".") >= 0 ) {
+ // 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.namespace_re = event.namespace ?
+ new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
+ null;
+
+ // Clean up the event in case it is being reused
+ event.result = undefined;
+ if ( !event.target ) {
+ event.target = elem;
+ }
+
+ // Clone any incoming data and prepend the event, creating the handler arg list
+ data = data == null ?
+ [ event ] :
+ jQuery.makeArray( data, [ event ] );
+
+ // Allow special events to draw outside the lines
+ special = jQuery.event.special[ type ] || {};
+ if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+ return;
+ }
+
+ // Determine event propagation path in advance, per W3C events spec (#9951)
+ // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+ if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+ bubbleType = special.delegateType || type;
+ if ( !rfocusMorph.test( bubbleType + type ) ) {
+ cur = cur.parentNode;
+ }
+ for ( ; cur; cur = cur.parentNode ) {
+ eventPath.push( cur );
+ tmp = cur;
+ }
+
+ // Only add window if we got to document (e.g., not plain obj or detached DOM)
+ if ( tmp === (elem.ownerDocument || document) ) {
+ eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+ }
+ }
+
+ // Fire handlers on the event path
+ i = 0;
+ while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
+
+ event.type = i > 1 ?
+ bubbleType :
+ special.bindType || type;
+
+ // jQuery handler
+ handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+ if ( handle ) {
+ handle.apply( cur, data );
+ }
+
+ // Native handler
+ handle = ontype && cur[ ontype ];
+ if ( handle && handle.apply && jQuery.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) &&
+ jQuery.acceptData( elem ) ) {
+
+ // Call a native DOM method on the target with the same name name as the event.
+ // Can't use an .isFunction() check here because IE6/7 fails that test.
+ // Don't do default actions on window, that's where global variables be (#6170)
+ if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
+
+ // Don't re-trigger an onFOO event when we call its FOO() method
+ tmp = elem[ ontype ];
+
+ if ( tmp ) {
+ elem[ ontype ] = null;
+ }
+
+ // Prevent re-triggering of the same event, since we already bubbled it above
+ jQuery.event.triggered = type;
+ try {
+ elem[ type ]();
+ } catch ( e ) {
+ // IE<9 dies on focus/blur to hidden element (#1486,#12518)
+ // only reproducible on winXP IE8 native, not IE9 in IE8 mode
+ }
+ jQuery.event.triggered = undefined;
+
+ if ( tmp ) {
+ elem[ ontype ] = tmp;
+ }
+ }
+ }
+ }
+
+ return event.result;
+ },
+
+ dispatch: function( event ) {
+
+ // Make a writable jQuery.Event from the native event object
+ event = jQuery.event.fix( event );
+
+ var i, ret, handleObj, matched, j,
+ handlerQueue = [],
+ args = slice.call( arguments ),
+ handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
+ special = jQuery.event.special[ event.type ] || {};
+
+ // Use the fix-ed jQuery.Event rather than the (read-only) native event
+ args[0] = event;
+ event.delegateTarget = this;
+
+ // Call the preDispatch hook for the mapped type, and let it bail if desired
+ if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+ return;
+ }
+
+ // Determine handlers
+ handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+ // Run delegates first; they may want to stop propagation beneath us
+ i = 0;
+ while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
+ event.currentTarget = matched.elem;
+
+ j = 0;
+ while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
+
+ // Triggered event must either 1) have no namespace, or
+ // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+ if ( !event.namespace_re || event.namespace_re.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 sel, handleObj, matches, i,
+ handlerQueue = [],
+ delegateCount = handlers.delegateCount,
+ cur = event.target;
+
+ // Find delegate handlers
+ // Black-hole SVG