diff --git a/CONDUCT.html b/CONDUCT.html index 755d10d5..bf13273d 100644 --- a/CONDUCT.html +++ b/CONDUCT.html @@ -1,28 +1,25 @@ + + - + - + Contributor Code of Conduct — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -256,7 +253,7 @@
-

Contributor Code of Conduct

+

Contributor Code of Conduct

As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.

We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, or religion.

Examples of unacceptable behaviour by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.

diff --git a/CONTRIBUTING.html b/CONTRIBUTING.html index d019b860..cc43267d 100644 --- a/CONTRIBUTING.html +++ b/CONTRIBUTING.html @@ -1,28 +1,25 @@ + + - + - + Contributing — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -255,7 +252,7 @@
-

Contributing

+

Contributing

starterkit-lessons is an open source project, and we welcome contributions of all kinds:

  • New lessons;

  • @@ -266,7 +263,7 @@

    Contributingthese licenses. You also agree to abide by our contributor code of conduct.

    -

    Getting Started

    +

    Getting Started

    1. We use the fork and pull model to manage changes. More information about forking a repository and making a Pull Request.

    2. @@ -278,7 +275,7 @@

      Getting Started -

      Dependencies

      +

      Dependencies

      To build the lessons locally, install the following:

      1. starterkit-ci

      2. diff --git a/LICENSE.html b/LICENSE.html index 2cc4f3db..f294087f 100644 --- a/LICENSE.html +++ b/LICENSE.html @@ -1,28 +1,25 @@ + + - + - + Instructional Material — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -255,7 +252,7 @@
        -

        Instructional Material

        +

        Instructional Material

        All instructional material is made available under the Creative Commons Attribution license. The following is a human-readable summary of (and not a substitute for) the full legal text of the CC BY 4.0 @@ -289,7 +286,7 @@

        Instructional Material

        -

        Software

        +

        Software

        Except where otherwise noted, the example programs and other software provided by Software Carpentry are made available under the OSI-approved MIT license.

        diff --git a/_sources/first-analysis-steps/files-from-grid.md.txt b/_sources/first-analysis-steps/files-from-grid.md.txt index f1966870..6582d5c6 100644 --- a/_sources/first-analysis-steps/files-from-grid.md.txt +++ b/_sources/first-analysis-steps/files-from-grid.md.txt @@ -47,7 +47,7 @@ Lots of people downloading the same file at the same time can be very slow. As a workaround, the file is also available on EOS, and can be downloaded to your current directory with the following command: ```bash -$ xrdcp root://eosuser.cern.ch//eos/user/l/lhcbsk/data-sets/00070793_00000001_7.AllStreams.dst . +$ xrdcp root://eoslhcb.cern.ch//eos/lhcb/wg/dpa/wp7/Run2SK/files-from-grid/00070793_00000001_7.AllStreams.dst . ``` {% endcallout %} diff --git a/_sources/second-analysis-steps/rerun-stripping.md.txt b/_sources/second-analysis-steps/rerun-stripping.md.txt index 8eb0d743..ffad8752 100644 --- a/_sources/second-analysis-steps/rerun-stripping.md.txt +++ b/_sources/second-analysis-steps/rerun-stripping.md.txt @@ -27,7 +27,7 @@ Take a look at the file and try to find out what has changed compared to the [mi Lots of people downloading the same file at the same time can be very slow. The file in the minimal DaVinci example can be copied using this command: ```bash -$ xrdcp root://eosuser.cern.ch//eos/user/l/lhcbsk/impactkit/00070793_00000001_7.AllStreams.dst . +$ xrdcp root://eoslhcb.cern.ch//eos/lhcb/wg/dpa/wp7/Run2SK/files-from-grid/00070793_00000001_7.AllStreams.dst . ``` {% endcallout %} diff --git a/_sources/second-analysis-steps/simulation-gencuts.md.txt b/_sources/second-analysis-steps/simulation-gencuts.md.txt index 7af0afc1..4159c4fe 100644 --- a/_sources/second-analysis-steps/simulation-gencuts.md.txt +++ b/_sources/second-analysis-steps/simulation-gencuts.md.txt @@ -61,7 +61,7 @@ The second option is usually easier and in the example used so far only requires Generation().SignalPlain.CutTool = "" ``` which must be included after `27163003.py` is sourced (e.g. in `Gauss-Job.py`). You can convince yourself that this alters the observed -distributions and leads to a generator level cut efficiency of 100%. A large sample can be found on EOS: `root://eosuser.cern.ch//eos/user/l/lhcbsk/sim-lesson-2019/Gauss-27175000-modified-50000ev-20190515.xgen` (includes additional resonance added above). +distributions and leads to a generator level cut efficiency of 100%. A large sample can be found on EOS: `root://eoslhcb.cern.ch//eos/lhcb/wg/dpa/wp7/Run2SK/simulation/Gauss-27175000-modified-50000ev-20241216.xgen` (includes additional resonance added above). Have a look at the pseudorapidity distribution of the head particle. This illustrates another default behavior of the generation of signal decays in Gauss: The generated events' z-axis if inverted if the selected signal particle's momentum along that axis is negative. @@ -96,7 +96,7 @@ tightCut.Cuts = { '[mu+]cc': 'inAcc' } ``` -You can again check that this works and a larger sample of 10,000 events can be found `root://eosuser.cern.ch//eos/user/l/lhcbsk/sim-lesson/GaussTightCut-27163003-10000ev.xgen` +You can again check that this works and a larger sample of 10,000 events can be found `root://eoslhcb.cern.ch//eos/lhcb/wg/dpa/wp7/Run2SK/simulation/GaussTightCut-27175000-10000ev-20241216.xgen` . You might also notice a slight slow-down in the rate at which events are produced: by default, an event failing the generator cut (which is applied after Pythia and EvtGen are done) triggers a reset of diff --git a/_sources/second-analysis-steps/simulation-running-gauss.md.txt b/_sources/second-analysis-steps/simulation-running-gauss.md.txt index 08feb714..d373e00c 100644 --- a/_sources/second-analysis-steps/simulation-running-gauss.md.txt +++ b/_sources/second-analysis-steps/simulation-running-gauss.md.txt @@ -87,7 +87,7 @@ See if you can generate a generator level only sample for event type `27175000` ## Make an nTuple The `.xgen` file can be processed into something more usable (copied together from [here](https://gitlab.cern.ch/lhcb-datapkg/Gen/DecFiles/blob/master/CONTRIBUTING.md#)). -A larger input file containing 50,000 generated events for event-type can be found on EOS: `root://eosuser.cern.ch//eos/user/l/lhcbsk/sim-lesson-2019/Gauss-27175000-50000ev-20190515.xgen`. +A larger input file containing 50,000 generated events for event-type can be found on EOS: `root://eoslhcb.cern.ch//eos/lhcb/wg/dpa/wp7/Run2SK/simulation/Gauss-27175000-50000ev-20241216.xgen`. ```python """Configure the variables below with: decay: Decay you want to inspect, using 'newer' LoKi decay descriptor syntax, diff --git a/_static/_sphinx_javascript_frameworks_compat.js b/_static/_sphinx_javascript_frameworks_compat.js index 8549469d..81415803 100644 --- a/_static/_sphinx_javascript_frameworks_compat.js +++ b/_static/_sphinx_javascript_frameworks_compat.js @@ -1,20 +1,9 @@ -/* - * _sphinx_javascript_frameworks_compat.js - * ~~~~~~~~~~ - * - * Compatability shim for jQuery and underscores.js. - * - * WILL BE REMOVED IN Sphinx 6.0 - * xref RemovedInSphinx60Warning +/* Compatability shim for jQuery and underscores.js. * + * Copyright Sphinx contributors + * Released under the two clause BSD licence */ -/** - * select a different prefix for underscore - */ -$u = _.noConflict(); - - /** * small helper function to urldecode strings * diff --git a/_static/basic.css b/_static/basic.css index 4e9a9f1f..7ebbd6d0 100644 --- a/_static/basic.css +++ b/_static/basic.css @@ -1,12 +1,5 @@ /* - * basic.css - * ~~~~~~~~~ - * * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * */ /* -- main layout ----------------------------------------------------------- */ @@ -115,15 +108,11 @@ img { /* -- search page ----------------------------------------------------------- */ ul.search { - margin: 10px 0 0 20px; - padding: 0; + margin-top: 10px; } ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; + padding: 5px 0; } ul.search li a { @@ -237,6 +226,10 @@ a.headerlink { visibility: hidden; } +a:visited { + color: #551A8B; +} + h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, @@ -324,6 +317,7 @@ aside.sidebar { p.sidebar-title { font-weight: bold; } + nav.contents, aside.topic, div.admonition, div.topic, blockquote { @@ -331,6 +325,7 @@ div.admonition, div.topic, blockquote { } /* -- topics ---------------------------------------------------------------- */ + nav.contents, aside.topic, div.topic { @@ -606,6 +601,7 @@ ol.simple p, ul.simple p { margin-bottom: 0; } + aside.footnote > span, div.citation > span { float: left; @@ -667,6 +663,16 @@ dd { margin-left: 30px; } +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + dl > dd:last-child, dl > dd:last-child > :last-child { margin-bottom: 0; @@ -735,6 +741,14 @@ abbr, acronym { cursor: help; } +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + /* -- code displays --------------------------------------------------------- */ pre { diff --git a/_static/css/badge_only.css b/_static/css/badge_only.css index c718cee4..88ba55b9 100644 --- a/_static/css/badge_only.css +++ b/_static/css/badge_only.css @@ -1 +1 @@ -.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;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}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.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{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #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;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.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>.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}} \ No newline at end of file +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;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}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.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{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #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-other-versions .rtd-current-item{font-weight:700}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.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>.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}}#flyout-search-form{padding:6px} \ No newline at end of file diff --git a/_static/css/theme.css b/_static/css/theme.css index 19a446a0..0f14f106 100644 --- a/_static/css/theme.css +++ b/_static/css/theme.css @@ -1,4 +1,4 @@ html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){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:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{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,form{margin:0}label{cursor:pointer}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=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.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{body,html,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^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink: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 p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.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 p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{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}.fa-lg{font-size:1.33333em;line-height:.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:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.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 p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.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 p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{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}.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-close:before,.fa-remove: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-cog:before,.fa-gear: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 code.download span:first-child:before,.rst-content tt.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-repeat:before,.fa-rotate-right: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-image:before,.fa-photo: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,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context: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-exclamation-triangle:before,.fa-warning: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-cogs:before,.fa-gears: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-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.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-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder: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,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste: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-chain-broken:before,.fa-unlink: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.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.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-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won: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,.fa-gratipay: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-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.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-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board: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-pp: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-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-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-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-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-futbol-o:before,.fa-soccer-ball-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-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.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 p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink: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 p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink: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 p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink: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 p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.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.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.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,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.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 .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.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.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition 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.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition 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 .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;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,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .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{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);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 .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.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:#295!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:active,.btn-link:hover{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:after,.wy-btn-group:before{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:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(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:1px solid #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 #f5f5f5;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 .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{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{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;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;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{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 input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.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=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.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=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.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=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;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,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){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,.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,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.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=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-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 .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],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=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]: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:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][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:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.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=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.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=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .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:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{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%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.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]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all 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 td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.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%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;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}.rst-content .toctree-wrapper>p.caption,h1,h2,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;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{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}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.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 .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.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 .2s ease-in;-moz-transition:all .2s ease-in;transition:all .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:#fcfcfc}.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:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.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;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@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-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.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:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;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:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.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{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #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;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.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>.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}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.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,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.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 p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.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}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{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:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@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:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.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 p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{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}.fa-lg{font-size:1.33333em;line-height:.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:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.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 p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.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 p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{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}.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-close:before,.fa-remove: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-cog:before,.fa-gear: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 code.download span:first-child:before,.rst-content tt.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-repeat:before,.fa-rotate-right: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-image:before,.fa-photo: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,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context: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-exclamation-triangle:before,.fa-warning: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-cogs:before,.fa-gears: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-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.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-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder: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,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste: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-chain-broken:before,.fa-unlink: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.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.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-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won: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,.fa-gratipay: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-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.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-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board: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-pp: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-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-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-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-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-futbol-o:before,.fa-soccer-ball-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-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.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 p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink: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 p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink: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 p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink: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 p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.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.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.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,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.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 .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.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.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition 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.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition 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 .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;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,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .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{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);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 .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.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:#295!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:active,.btn-link:hover{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:after,.wy-btn-group:before{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:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(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:1px solid #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 #f5f5f5;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 .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{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{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;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;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{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 input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.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=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.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=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.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=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;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,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){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,.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,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.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=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-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 .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],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=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]: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:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][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:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.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=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.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=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .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:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{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%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.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]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all 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 td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.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%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;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}.rst-content .toctree-wrapper>p.caption,h1,h2,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;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{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}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.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 .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search .wy-dropdown>aactive,.wy-side-nav-search .wy-dropdown>afocus,.wy-side-nav-search>a:hover,.wy-side-nav-search>aactive,.wy-side-nav-search>afocus{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon,.wy-side-nav-search>a.icon{display:block}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.switch-menus{position:relative;display:block;margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-side-nav-search>div.switch-menus>div.language-switch,.wy-side-nav-search>div.switch-menus>div.version-switch{display:inline-block;padding:.2em}.wy-side-nav-search>div.switch-menus>div.language-switch select,.wy-side-nav-search>div.switch-menus>div.version-switch select{display:inline-block;margin-right:-2rem;padding-right:2rem;max-width:240px;text-align-last:center;background:none;border:none;border-radius:0;box-shadow:none;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-size:1em;font-weight:400;color:hsla(0,0%,100%,.3);cursor:pointer;appearance:none;-webkit-appearance:none;-moz-appearance:none}.wy-side-nav-search>div.switch-menus>div.language-switch select:active,.wy-side-nav-search>div.switch-menus>div.language-switch select:focus,.wy-side-nav-search>div.switch-menus>div.language-switch select:hover,.wy-side-nav-search>div.switch-menus>div.version-switch select:active,.wy-side-nav-search>div.switch-menus>div.version-switch select:focus,.wy-side-nav-search>div.switch-menus>div.version-switch select:hover{background:hsla(0,0%,100%,.1);color:hsla(0,0%,100%,.5)}.wy-side-nav-search>div.switch-menus>div.language-switch select option,.wy-side-nav-search>div.switch-menus>div.version-switch select option{color:#000}.wy-side-nav-search>div.switch-menus>div.language-switch:has(>select):after,.wy-side-nav-search>div.switch-menus>div.version-switch:has(>select):after{display:inline-block;width:1.5em;height:100%;padding:.1em;content:"\f0d7";font-size:1em;line-height:1.2em;font-family:FontAwesome;text-align:center;pointer-events:none;box-sizing:border-box}.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 .2s ease-in;-moz-transition:all .2s ease-in;transition:all .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:#fcfcfc}.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:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.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;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@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-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.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:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;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:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.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{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #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-other-versions .rtd-current-item{font-weight:700}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.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>.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}}#flyout-search-form{padding:6px}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.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,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.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 p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.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}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{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:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@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:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/_static/doctools.js b/_static/doctools.js index 527b876c..0398ebb9 100644 --- a/_static/doctools.js +++ b/_static/doctools.js @@ -1,12 +1,5 @@ /* - * doctools.js - * ~~~~~~~~~~~ - * * Base JavaScript utilities for all Sphinx HTML documentation. - * - * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * */ "use strict"; diff --git a/_static/documentation_options.js b/_static/documentation_options.js index b57ae3b8..7e4c114f 100644 --- a/_static/documentation_options.js +++ b/_static/documentation_options.js @@ -1,5 +1,4 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), +const DOCUMENTATION_OPTIONS = { VERSION: '', LANGUAGE: 'en', COLLAPSE_INDEX: false, diff --git a/_static/fonts/Lato/lato-bold.eot b/_static/fonts/Lato/lato-bold.eot new file mode 100644 index 00000000..3361183a Binary files /dev/null and b/_static/fonts/Lato/lato-bold.eot differ diff --git a/_static/fonts/Lato/lato-bold.ttf b/_static/fonts/Lato/lato-bold.ttf new file mode 100644 index 00000000..29f691d5 Binary files /dev/null and b/_static/fonts/Lato/lato-bold.ttf differ diff --git a/_static/fonts/Lato/lato-bold.woff b/_static/fonts/Lato/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/_static/fonts/Lato/lato-bold.woff differ diff --git a/_static/fonts/Lato/lato-bold.woff2 b/_static/fonts/Lato/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/_static/fonts/Lato/lato-bold.woff2 differ diff --git a/_static/fonts/Lato/lato-bolditalic.eot b/_static/fonts/Lato/lato-bolditalic.eot new file mode 100644 index 00000000..3d415493 Binary files /dev/null and b/_static/fonts/Lato/lato-bolditalic.eot differ diff --git a/_static/fonts/Lato/lato-bolditalic.ttf b/_static/fonts/Lato/lato-bolditalic.ttf new file mode 100644 index 00000000..f402040b Binary files /dev/null and b/_static/fonts/Lato/lato-bolditalic.ttf differ diff --git a/_static/fonts/Lato/lato-bolditalic.woff b/_static/fonts/Lato/lato-bolditalic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/_static/fonts/Lato/lato-bolditalic.woff differ diff --git a/_static/fonts/Lato/lato-bolditalic.woff2 b/_static/fonts/Lato/lato-bolditalic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/_static/fonts/Lato/lato-bolditalic.woff2 differ diff --git a/_static/fonts/Lato/lato-italic.eot b/_static/fonts/Lato/lato-italic.eot new file mode 100644 index 00000000..3f826421 Binary files /dev/null and b/_static/fonts/Lato/lato-italic.eot differ diff --git a/_static/fonts/Lato/lato-italic.ttf b/_static/fonts/Lato/lato-italic.ttf new file mode 100644 index 00000000..b4bfc9b2 Binary files /dev/null and b/_static/fonts/Lato/lato-italic.ttf differ diff --git a/_static/fonts/Lato/lato-italic.woff b/_static/fonts/Lato/lato-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/_static/fonts/Lato/lato-italic.woff differ diff --git a/_static/fonts/Lato/lato-italic.woff2 b/_static/fonts/Lato/lato-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/_static/fonts/Lato/lato-italic.woff2 differ diff --git a/_static/fonts/Lato/lato-regular.eot b/_static/fonts/Lato/lato-regular.eot new file mode 100644 index 00000000..11e3f2a5 Binary files /dev/null and b/_static/fonts/Lato/lato-regular.eot differ diff --git a/_static/fonts/Lato/lato-regular.ttf b/_static/fonts/Lato/lato-regular.ttf new file mode 100644 index 00000000..74decd9e Binary files /dev/null and b/_static/fonts/Lato/lato-regular.ttf differ diff --git a/_static/fonts/Lato/lato-regular.woff b/_static/fonts/Lato/lato-regular.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/_static/fonts/Lato/lato-regular.woff differ diff --git a/_static/fonts/Lato/lato-regular.woff2 b/_static/fonts/Lato/lato-regular.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/_static/fonts/Lato/lato-regular.woff2 differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot new file mode 100644 index 00000000..79dc8efe Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf new file mode 100644 index 00000000..df5d1df2 Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot new file mode 100644 index 00000000..2f7ca78a Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf new file mode 100644 index 00000000..eb52a790 Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 differ diff --git a/_static/jquery-3.6.0.js b/_static/jquery-3.6.0.js deleted file mode 100644 index fc6c299b..00000000 --- a/_static/jquery-3.6.0.js +++ /dev/null @@ -1,10881 +0,0 @@ -/*! - * jQuery JavaScript Library v3.6.0 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2021-03-02T17:08Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 - // Plus for old WebKit, typeof returns "function" for HTML collections - // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) - return typeof obj === "function" && typeof obj.nodeType !== "number" && - typeof obj.item !== "function"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.6.0", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return flat( ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), - function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); - } ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.6 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2021-02-16 - */ -( function( window ) { -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ( {} ).hasOwnProperty, - arr = [], - pop = arr.pop, - pushNative = arr.push, - push = arr.push, - slice = arr.slice, - - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[ i ] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + - "ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] - // or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + - whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + - "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - return nonHex ? - - // Strip the backslash prefix from a non-hex escape sequence - nonHex : - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + - ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), - preferredDoc.childNodes - ); - - // Support: Android<4.0 - // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - pushNative.apply( target, slice.call( els ) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - - // Can't trust NodeList.length - while ( ( target[ j++ ] = els[ i++ ] ) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - setDocument( context ); - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { - - // ID selector - if ( ( m = match[ 1 ] ) ) { - - // Document context - if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[ 2 ] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && - - // Support: IE 8 only - // Exclude object elements - ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - if ( newContext !== context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); - } - newSelector = groups.join( "," ); - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return ( cache[ key + " " ] = value ); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement( "fieldset" ); - - try { - return !!fn( el ); - } catch ( e ) { - return false; - } finally { - - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split( "|" ), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[ i ] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( ( cur = cur.nextSibling ) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return ( name === "input" || name === "button" ) && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { - argument = +argument; - return markFunction( function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); - } - } - } ); - } ); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem && elem.namespaceURI, - docElem = elem && ( elem.ownerDocument || elem ).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, - // Safari 4 - 5 only, Opera <=11.6 - 12.x only - // IE/Edge & older browsers don't support the :scope pseudo-class. - // Support: Safari 6.0 only - // Safari 6.0 supports :scope but it's an alias of :root there. - support.scope = assert( function( el ) { - docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); - return typeof el.querySelectorAll !== "undefined" && - !el.querySelectorAll( ":scope fieldset div" ).length; - } ); - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert( function( el ) { - el.className = "i"; - return !el.getAttribute( "className" ); - } ); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert( function( el ) { - el.appendChild( document.createComment( "" ) ); - return !el.getElementsByTagName( "*" ).length; - } ); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - } ); - - // ID filter and find - if ( support.getById ) { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute( "id" ) === attrId; - }; - }; - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find[ "TAG" ] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Firefox <=3.6 - 5 only - // Old Firefox doesn't throw on a badly-escaped identifier. - el.querySelectorAll( "\\\f" ); - rbuggyQSA.push( "[\\r\\n\\f]" ); - } ); - - assert( function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll( "[name=d]" ).length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: Opera 10 - 11 only - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll( "*,:x" ); - rbuggyQSA.push( ",.*:" ); - } ); - } - - if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector ) ) ) ) { - - assert( function( el ) { - - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - } ); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); - } : - function( a, b ) { - if ( b ) { - while ( ( b = b.parentNode ) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { - - // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a == document || a.ownerDocument == preferredDoc && - contains( preferredDoc, a ) ) { - return -1; - } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b == document || b.ownerDocument == preferredDoc && - contains( preferredDoc, b ) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - return a == document ? -1 : - b == document ? 1 : - /* eslint-enable eqeqeq */ - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( ( cur = cur.parentNode ) ) { - ap.unshift( cur ); - } - cur = b; - while ( ( cur = cur.parentNode ) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[ i ] === bp[ i ] ) { - i++; - } - - return i ? - - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[ i ], bp[ i ] ) : - - // Otherwise nodes in our document sort first - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - ap[ i ] == preferredDoc ? -1 : - bp[ i ] == preferredDoc ? 1 : - /* eslint-enable eqeqeq */ - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - setDocument( elem ); - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || - match[ 5 ] || "" ).replace( runescape, funescape ); - - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - - // nth-* requires argument - if ( !match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - - // other types prohibit arguments - } else if ( match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[ 6 ] && match[ 2 ]; - - if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - - // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { - - // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { - return true; - } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - ( pattern = new RegExp( "(^|" + whitespace + - ")" + className + "(" + whitespace + "|$)" ) ) && classCache( - className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - /* eslint-disable max-len */ - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - /* eslint-enable max-len */ - - }; - }, - - "CHILD": function( type, what, _argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, _context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( ( node = node[ dir ] ) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( ( node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - - // Use previously-cached element index if available - if ( useCache ) { - - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); - } - } ) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - - // Potentially complex pseudos - "not": markFunction( function( selector ) { - - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); - } - } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; - matcher( input, null, xml, results ); - - // Don't keep the element (issue #299) - input[ 0 ] = null; - return !results.pop(); - }; - } ), - - "has": markFunction( function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - } ), - - "contains": markFunction( function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - } ), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( ( elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); - return false; - }; - } ), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && - ( !document.hasFocus || document.hasFocus() ) && - !!( elem.type || elem.href || ~elem.tabIndex ); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return ( nodeName === "input" && !!elem.checked ) || - ( nodeName === "option" && !!elem.selected ); - }, - - "selected": function( elem ) { - - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos[ "empty" ]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo( function() { - return [ 0 ]; - } ), - - "last": createPositionalPseudo( function( _matchIndexes, length ) { - return [ length - 1 ]; - } ), - - "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - } ), - - "even": createPositionalPseudo( function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "odd": createPositionalPseudo( function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ) - } -}; - -Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { - if ( match ) { - - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; - } - groups.push( ( tokens = [] ) ); - } - - matched = false; - - // Combinators - if ( ( match = rcombinators.exec( soFar ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrim, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[ i ].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || - ( outerCache[ elem.uniqueID ] = {} ); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( ( oldCache = uniqueCache[ key ] ) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); - } else { - - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[ 0 ]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[ i ], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( - selector || "*", - context.nodeType ? [ context ] : context, - [] - ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - - // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); - } - } - postFinder( null, ( matcherOut = [] ), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { - - seed[ temp ] = !( results[ temp ] = elem ); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - } ); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - ( checkContext = context ).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens - .slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), - - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), - len = elems.length; - - if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( - selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) - ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - - context = ( Expr.find[ "ID" ]( token.matches[ 0 ] - .replace( runescape, funescape ), context ) || [] )[ 0 ]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[ i ]; - - // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { - break; - } - if ( ( find = Expr.find[ type ] ) ) { - - // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || - context - ) ) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert( function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute( "href" ) === "#"; -} ) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - } ); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert( function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -} ) ) { - addHandle( "value", function( elem, _name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - } ); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert( function( el ) { - return el.getAttribute( "disabled" ) == null; -} ) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; - } - } ); -} - -return Sizzle; - -} )( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -} -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, _i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, _i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, _i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( elem.contentDocument != null && - - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { - - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the primary Deferred - primary = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - primary.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( primary.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return primary.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); - } - - return primary.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, _key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
        " ], - col: [ 2, "", "
        " ], - tr: [ 2, "", "
        " ], - td: [ 3, "", "
        " ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - - // Support: Chrome 86+ - // In Chrome, if an element having a focusout handler is blurred by - // clicking outside of it, it invokes the handler synchronously. If - // that handler calls `.remove()` on the element, the data is cleared, - // leaving `result` undefined. We need to guard against this. - return result && result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - which: true -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - // Suppress native focus or blur as it's already being fired - // in leverageNative. - _default: function() { - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - // - // Support: Firefox 70+ - // Only Firefox includes border widths - // in computed dimensions. (gh-4529) - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; - tr.style.cssText = "border:1px solid"; - - // Support: Chrome 86+ - // Height set through cssText does not get applied. - // Computed height then comes back as 0. - tr.style.height = "1px"; - trChild.style.height = "9px"; - - // Support: Android 8 Chrome 86+ - // In our bodyBackground.html iframe, - // display for all div elements is set to "inline", - // which causes a problem only in Android 8 Chrome 86. - // Ensuring the div is display: block - // gets around this issue. - trChild.style.display = "block"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + - parseInt( trStyle.borderTopWidth, 10 ) + - parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml, parserErrorElem; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) {} - - parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; - if ( !xml || parserErrorElem ) { - jQuery.error( "Invalid XML: " + ( - parserErrorElem ? - jQuery.map( parserErrorElem.childNodes, function( el ) { - return el.textContent; - } ).join( "\n" ) : - data - ) ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ).filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ).map( function( _i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - -originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Use a noop converter for missing script but not if jsonp - if ( !isSuccess && - jQuery.inArray( "script", s.dataTypes ) > -1 && - jQuery.inArray( "json", s.dataTypes ) < 0 ) { - s.converters[ "text script" ] = function() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - - - - - - + + + + + + + + + @@ -255,7 +254,7 @@
        -

        First Analysis Steps

        +

        First Analysis Steps

        This is the LHCb Starterkit, a series of lessons for getting analysts working confidently with LHCb data and software. The lessons are best approached one after the other, as most lessons build on the knowledge gained from the previous ones.

        If you have any problems or questions, you can send an email to lhcb-starterkit@cern.ch.

        diff --git a/first-analysis-steps/add-tupletools.html b/first-analysis-steps/add-tupletools.html index 2890928f..2e32de3f 100644 --- a/first-analysis-steps/add-tupletools.html +++ b/first-analysis-steps/add-tupletools.html @@ -1,30 +1,27 @@ + + - + - + TupleTools and branches — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - - - + + + + + + + + + @@ -258,7 +255,7 @@
        -

        TupleTools and branches

        +

        TupleTools and branches

        Learning Objectives

        @@ -335,7 +332,7 @@

        TupleTools and branches

        Note that TupleToolPropertime requires there to be a PV in the event, otherwise it throws an error. You should add a PV checker before your tupling algorithm

        -
        from Configurables import CheckPV
        +
        from Configurables import CheckPV
         DaVinci().UserAlgorithms += [CheckPV(), dtt]
         
        diff --git a/first-analysis-steps/analysis-productions.html b/first-analysis-steps/analysis-productions.html index d7ee8d98..1c207912 100644 --- a/first-analysis-steps/analysis-productions.html +++ b/first-analysis-steps/analysis-productions.html @@ -1,30 +1,27 @@ + + - + - + Analysis Productions — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - - - + + + + + + + + + @@ -258,7 +255,7 @@
        -

        Analysis Productions

        +

        Analysis Productions

        Learning Objectives

        @@ -279,7 +276,7 @@

        Analysis Productions

        It is the goal of Analysis Productions to centralise and automate much of the process of making ntuples, and to keep a record of how datasets were produced. In Run 3, this is the preferred way to create ntuples for your analysis.

        -

        Monitoring productions

        +

        Monitoring productions

        Before we get into the how-to, let’s first take a look at the end result of a real production. Open the Analysis Productions webpage, and navigate to Productions. You should see a new menu appear, showing a list of productions. Using the search bar on the right you can search for any production of interest, try b02dkpi for example. This should return one result and clicking on it should show you a table of jobs belonging to the production.

        Each row in the table corresponds to a job belonging to this production, and displays:

        -

        Creating your own production

        +

        Creating your own production

        For practice, we will now go through the steps of creating a simple production. For details about more advanced usage, see the Analysis Productions documentation.

        Start by creating a folder to work in, and into it clone the Analysis Productions repository.

        git clone ssh://git@gitlab.cern.ch:7999/lhcb-datapkg/AnalysisProductions.git
        @@ -369,7 +366,7 @@ 

        Creating your own productionREADME.md, and add some pertinent information. If you’re not sure what to add, try looking at some existing productions to get an idea.

        -

        Testing your production locally

        +

        Testing your production locally

        Now we’ve got both of the files we need, we should test the production to make sure it works as expected. All of this will be done using the lb-ap command. Navigate up one level to the base directory of the repository (AnalysisProductions), and run lb-ap, which should display the following:

        Usage: lb-ap [OPTIONS] COMMAND [ARGS]...
         
        @@ -422,7 +419,7 @@ 

        Testing your production locally -

        Creating a merge request

        +

        Creating a merge request

        Now that we’ve tested all of our changes and are sure that everything’s working as intended, we can prepare to submit them to the main repository by creating a merge request. Start by commiting the changes:

        git add dv_basic.py
         git add info.yaml
        @@ -444,7 +441,7 @@ 

        Creating a merge requesthere). After a few minutes, these should have completed - all being well, you’ve now successfully prepared your first production!

        -

        Analysis Productions Data

        +

        Analysis Productions Data

        We have created a standalone Python package, APD, which can be used to help you access your Analysis Productions output. At the bottom of a job output page you can find an example of how to do this. For this starterkit example we could do

        diff --git a/first-analysis-steps/analysisflow.html b/first-analysis-steps/analysisflow.html index 6829a845..581c5329 100644 --- a/first-analysis-steps/analysisflow.html +++ b/first-analysis-steps/analysisflow.html @@ -1,28 +1,25 @@ + + - + - + The analysis flow and analysis preservation — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -256,7 +253,7 @@
        -

        The analysis flow and analysis preservation

        +

        The analysis flow and analysis preservation

        Learning Objectives

        @@ -282,7 +279,7 @@

        The analysis flow and analysis preservation -

        Getting data files

        +

        Getting data files

        After preselecting data either in the Stripping, Sprucing or triggering step, users can produce ROOT files containing ntuples, running the DaVinci application. An ntuple is a (often complex) data structure typically stored within a (ROOT) file, which contains information about events or candidates in the data sample, such as the candidate mass or trigger decision flags. For data samples the available information is solely that coming from the reconstruction, but for simulation samples you can request both the reconstructed values of observables/variables and the generator-level (truth) values.

        @@ -297,7 +294,7 @@

        Getting data filesGanga and via Analysis Productions.

        -

        Useful high energy physics analysis tools

        +

        Useful high energy physics analysis tools

        After getting the ntuples a user usually develops new analysis code or expands an existing code, that their collaborators use. Analysis code is usually based on the popular high-energy physics software tools or on the more general data analysis tools, like numpy or pandas.

        @@ -327,7 +324,7 @@

        Useful high energy physics analysis toolsWork Package 4 of the Data Processing & Analysis project (DPA).

        -

        Analysis Preservation

        +

        Analysis Preservation

        When the samples are ready one can proceed with developing the necessary macros and scripts to perform the analysis steps, such as applying additional selections, fitting distributions, computing efficiencies and acceptances, etc. Starting from the ntuples a typical analysis will consist of the following steps:

          diff --git a/first-analysis-steps/asking-questions.html b/first-analysis-steps/asking-questions.html index 9a8e53df..be2a1946 100644 --- a/first-analysis-steps/asking-questions.html +++ b/first-analysis-steps/asking-questions.html @@ -1,28 +1,25 @@ + + - + - + Asking good questions — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -256,7 +253,7 @@
          -

          Asking good questions

          +

          Asking good questions

          Learning Objectives

          diff --git a/first-analysis-steps/bookkeeping.html b/first-analysis-steps/bookkeeping.html index e642508c..6a6e6848 100644 --- a/first-analysis-steps/bookkeeping.html +++ b/first-analysis-steps/bookkeeping.html @@ -1,30 +1,27 @@ + + - + - + Finding data in the Bookkeeping — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - - - + + + + + + + + + @@ -258,7 +255,7 @@
          -

          Finding data in the Bookkeeping

          +

          Finding data in the Bookkeeping

          Knowing how data flows through the various Gaudi applications is crucial for knowing where to look for your data.

          Data are catalogued in ‘the bookkeeping’, and are initially sorted in broad diff --git a/first-analysis-steps/contributing-lesson.html b/first-analysis-steps/contributing-lesson.html index b1b2ae81..845a6955 100644 --- a/first-analysis-steps/contributing-lesson.html +++ b/first-analysis-steps/contributing-lesson.html @@ -1,28 +1,25 @@ + + - + - + Contribute to this lesson — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -256,7 +253,7 @@

          -

          Contribute to this lesson

          +

          Contribute to this lesson

          Learning Objectives

          diff --git a/first-analysis-steps/dataflow-run3.html b/first-analysis-steps/dataflow-run3.html index 72fac3c5..c62d10a1 100644 --- a/first-analysis-steps/dataflow-run3.html +++ b/first-analysis-steps/dataflow-run3.html @@ -1,30 +1,27 @@ + + - + - + LHCb data flow in Run 3 — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - - - + + + + + + + + + @@ -258,7 +255,7 @@
          -

          LHCb data flow in Run 3

          +

          LHCb data flow in Run 3

          Learning Objectives

          @@ -271,7 +268,7 @@

          LHCb data flow in Run 3

          -

          LHCb upgrade

          +

          LHCb upgrade

          In Run 1 & 2 LHCb proved itself not only to be a high-precision heavy flavour physics experiment, but also extended the core physics programme to many different areas such as electroweak physics and fixed-target experiments. This incredible precision led to over 500 papers including breakthroughs such as the first discovery of \(` C\!P `\)-violation in charm and the first observation of the decay \(` B_s^0\to \mu^+\mu^- `\) among many others.

          @@ -282,13 +279,13 @@

          LHCb upgrade\(` 40\,\mathrm{MHz} `\), as well as the photodetectors of the RICH1 detector.

          -

          Upgrade of the LHCb trigger system

          +

          Upgrade of the LHCb trigger system

          The trigger layout for Run 3 will look like this:

          "Data processing chain for Run 3"

          The LHCb trigger system will be fully redesigned by removing the L0 hardware trigger and moving to a fully-software based trigger. The hardware trigger has a rate limit of 1 MHz, which would be a limitation with the increase in luminosity. Such a low rate could be only achieved by having tight hardware trigger thresholds on \(` p_\mathrm{T} `\) and \(` E_\mathrm{T} `\) which is inefficient especially for fully hadronic decay modes. The removal of this bottleneck means that the full detector readout as well as running the HLT1 needs to be enabled at the average non-empty bunch crossing rate in LHCb of \(` 30\,\mathrm{MHz} `\), a not so trivial computing challenge!

          As we saw already at the Run 1 and Run 2 dataflow lecture, the software trigger is implemented in two steps: the HLT1 which performs partial event reconstruction and simple trigger decisions to reduce the data rate, and HLT2, which performs the more computationally expensive full reconstruction and complete trigger selection. One of the most important tasks of building the events is track reconstruction, which is an inherently parallelizable process. For this purpose, HLT1 in Run 3 is implemented as part of the Allen project and run on GPUs.

          -

          The HLT architecture

          +

          The HLT architecture

          Data from the various subdetectors are received in the central Data Acquisition (DAQ) system of LHCb by custom Field Programmable Gate Array (FPGA) cards, called PCIe40. A set of servers, the Event Builder (EB), then pieces together fragments of raw data information from the subdetectors to form events and group them into packets. The event packets are then passed to an Event Filtering Farm (EFF) for further processing, and events passing the selection end up in storage. The existing HLT architecture of LHCb is well suited for the requirements of GPUs and can be easily adapted to host them in the Event Builder. HLT1 will reduce the data rate by a factor of 30, and implementing it already at the EB level will greatly minimize the size of the network needed for the following steps.

          Having the HLT1 run on GPUs imposes some different requirements on the code development. The Allen framework is based on the CUDA GPU programming platform. Developers should keep in mind that HLT1 algorithms should be implemented in a way that maximizes parallelizability and is thread-safe, i.e. memory should be accessed in a secure way from parallel processes. Documentation on how to develop reconstruction algorithms and selection lines for HLT1 can be found in the readme’s of the Allen project.

          The raw data of events selected by HLT1 is passed on to the buffer system and stored there. The buffering of events enables to run the real-time alignment and calibration before events are entering HLT2. This is crucial because in this way calibration and alignment constants obtained can be used in the full event reconstruction performed in HLT2. For the determination of these constants, HLT1 selects dedicated calibration samples. @@ -297,7 +294,7 @@

          The HLT architectureFor details and tutorials on how to develop HLT2 line selections as well as how to check their efficiencies and data rates follow the Moore documentation.

          -

          Selective persistency

          +

          Selective persistency

          Besides the events that are processed by the Turbo stream, there are cases for persisting extra information of the raw data. For some decay modes, it cannot be avoided to save the full raw data, whereas for others few extra information is needed. In case of persisting the full raw and reconstructed data of the event HLT2 line can be run by setting the flag persistreco=True. When full event information is not required objects can be persisted selectively by defining extra_outputs, which can be among the following:

          • extra reconstructed tracks

          • @@ -307,12 +304,12 @@

            Selective persistency

          -

          Offline data processing

          +

          Offline data processing

          Events that have passed HLT2 and have been saved to tape are further processed offline by running through the Sprucing application. After passing the Sprucing events are saved on disk. For events from the Turbo stream, the default model is to run through the Sprucing only in a passthrough sprucing selection, whereas others can undergo a tighter selection by running through a sprucing line. This is necessary because the total bandwidth for events that can be saved on disk is only 3.6GB/s, whereas for saving data from HLT2 to tape 10GB/s are available. Data that is saved to disk will be provided in streams dedicated to specific physics applications.

          HLT2 and sprucing selections share the same code base, so that selection lines can be interchanged among the two flexibly.

          https://lhcbproject.web.cern.ch/lhcbproject/Publications/f/p/Directory_LHCb-FIGURE-2020-016/hidef_DPA_dataflow.png

          -

          Changes to DaVinci

          +

          Changes to DaVinci

          As in Run 2, the DaVinci application is used to produce tuples for offline user analysis from the different physics streams. DaVinci itself is being redesigned to address the following issues:

          -
          from LoKiCore.functions import dump1
          +
          from LoKiCore.functions import dump1
           debug_p_components_sum = dump1(p_components_sum)
           debug_p_components_sum(candidate)
           
          @@ -639,7 +636,7 @@

          Fun with LoKi Functors
        1. monitor which prints the input the functor string and returns the calculated functor value,

        2. -
          from LoKiCore.functions import monitor
          +
          from LoKiCore.functions import monitor
           monitor_p_components_sum = monitor(p_components_sum)
           monitor_p_components_sum(candidate)
           
          diff --git a/first-analysis-steps/minimal-dv-job.html b/first-analysis-steps/minimal-dv-job.html index 5fed7205..95042dca 100644 --- a/first-analysis-steps/minimal-dv-job.html +++ b/first-analysis-steps/minimal-dv-job.html @@ -1,28 +1,25 @@ + + - + - + Running a minimal DaVinci job locally — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -256,7 +253,7 @@
          -

          Running a minimal DaVinci job locally

          +

          Running a minimal DaVinci job locally

          Looping event-by-event over a file and inspecting interesting quantities with LoKi functors is great for exploration: to check that the file contains the candidates you need, that @@ -296,8 +293,8 @@

          Running a minimal DaVinci job locallyDecayTreeTuple object, which we’ll create inside a file we will call ntuple_options.py:

          -
          from Configurables import DecayTreeTuple
          -from DecayTreeTuple.Configuration import *
          +
          from Configurables import DecayTreeTuple
          +from DecayTreeTuple.Configuration import *
           
           # Stream and stripping line we want to use
           stream = 'AllStreams'
          @@ -343,7 +340,7 @@ 

          Running a minimal DaVinci job locallyDaVinci object, but we will only set the ones that are necessary for us.

          -
          from Configurables import DaVinci
          +
          from Configurables import DaVinci
           
           # Configure DaVinci
           DaVinci().UserAlgorithms += [dtt]
          @@ -413,7 +410,7 @@ 

          Running a minimal DaVinci job locallyEventPreFilters method offered by DaVinci: this feature can save a lot of processing time and collaboration’s computing resources when running over millions of events. To require events to pass a specific stripping line requirement, one should add these lines to the options file:

          -
          from PhysConf.Filters import LoKi_Filters
          +
          from PhysConf.Filters import LoKi_Filters
           fltrs = LoKi_Filters (
               STRIP_Code = "HLT_PASS_RE('StrippingD2hhPromptDst2D2KKLineDecision')"
           )
          @@ -427,7 +424,7 @@ 

          Running a minimal DaVinci job locallydownloaded locally, we define that as our input data.

          -
          from GaudiConf import IOHelper
          +
          from GaudiConf import IOHelper
           
           # Use the local input data
           IOHelper().inputFiles([
          diff --git a/first-analysis-steps/physics-at-lhcb.html b/first-analysis-steps/physics-at-lhcb.html
          index c0fc8d1d..c8eee2aa 100644
          --- a/first-analysis-steps/physics-at-lhcb.html
          +++ b/first-analysis-steps/physics-at-lhcb.html
          @@ -1,30 +1,27 @@
          +
          +
           
          -
          +
           
          -  
          +  
           
             
             Physics at LHCb — LHCb Starterkit Lessons  documentation
          -      
          -      
          -      
          -      
          +      
          +      
          +      
          +      
           
             
          -  
          -  
          -        
          -        
          -        
          -        
          -        
          -        
          -        
          -        
          -        
          -        
          +      
          +      
          +      
          +      
          +      
          +      
          +      
          +      
          +      
               
               
               
          @@ -258,7 +255,7 @@
                      
          -

          Physics at LHCb

          +

          Physics at LHCb

          Learning Objectives

          @@ -298,7 +295,7 @@

          Physics at LHCb -

          The reconstruction

          +

          The reconstruction

          The properties of particles produced in collisions are known to Nature, but we must reconstruct those properties based on the readout of the detector. The process of inferring all properties is called reconstruction. For a given @@ -322,7 +319,7 @@

          The reconstruction -

          Building decay candidates

          +

          Building decay candidates

          All objects created by the reconstruction contain contributions from detector effects, such as resolution. In addition, not all created objects may correspond to real particles; we could for example create ‘ghost’ tracks, @@ -372,7 +369,7 @@

          Building decay candidates -

          Building more complex decays

          +

          Building more complex decays

          With a set of \(` J/\psi `\) candidates, we could build more complex decay chains such as \(` B_{s}^{0} \to J/\psi\phi(1020) `\). The \(` J/\psi `\) and the \(` \phi `\) meson can decay in various ways, diff --git a/first-analysis-steps/prerequisites.html b/first-analysis-steps/prerequisites.html index fce4904c..2cbb1498 100644 --- a/first-analysis-steps/prerequisites.html +++ b/first-analysis-steps/prerequisites.html @@ -1,28 +1,25 @@ + + - + - + Pre-workshop checklist — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -256,7 +253,7 @@

          -

          Pre-workshop checklist

          +

          Pre-workshop checklist

          Learning Objectives

          diff --git a/first-analysis-steps/run-2-data-flow.html b/first-analysis-steps/run-2-data-flow.html index cc7f47bb..37be1201 100644 --- a/first-analysis-steps/run-2-data-flow.html +++ b/first-analysis-steps/run-2-data-flow.html @@ -1,28 +1,25 @@ + + - + - + Changes to the data flow in Run 2 — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -256,7 +253,7 @@
          -

          Changes to the data flow in Run 2

          +

          Changes to the data flow in Run 2

          Learning Objectives

          diff --git a/first-analysis-steps/split-jobs.html b/first-analysis-steps/split-jobs.html index d25fd348..25478cc0 100644 --- a/first-analysis-steps/split-jobs.html +++ b/first-analysis-steps/split-jobs.html @@ -1,28 +1,25 @@ + + - + - + Splitting a job into subjobs — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -256,7 +253,7 @@
          -

          Splitting a job into subjobs

          +

          Splitting a job into subjobs

          Learning Objectives

          diff --git a/genindex.html b/genindex.html index 04f061b7..8e5a3f1a 100644 --- a/genindex.html +++ b/genindex.html @@ -1,27 +1,24 @@ + + - + Index — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + diff --git a/index.html b/index.html index 8fe675e9..a309c901 100644 --- a/index.html +++ b/index.html @@ -1,28 +1,27 @@ + + - + - + The LHCb Starterkit lessons — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + + + @@ -254,7 +253,7 @@
          -

          The LHCb Starterkit lessons Build Status

          +

          The LHCb Starterkit lessons Build Status

          These are the lessons taught during the LHCb Starterkit. If you’d like to join the next workshop, visit the website to find out when that will how and how to sign up.

          If you’d just like to learn about how to use the LHCb software, read on!

          diff --git a/search.html b/search.html index b4318269..73be09ad 100644 --- a/search.html +++ b/search.html @@ -1,28 +1,25 @@ + + - + Search — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + diff --git a/searchindex.js b/searchindex.js index 615592e8..464e0ed7 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["CONDUCT", "CONTRIBUTING", "LICENSE", "first-analysis-steps/README", "first-analysis-steps/add-tupletools", "first-analysis-steps/analysis-productions", "first-analysis-steps/analysisflow", "first-analysis-steps/asking-questions", "first-analysis-steps/bookkeeping", "first-analysis-steps/contributing-lesson", "first-analysis-steps/dataflow", "first-analysis-steps/dataflow-run3", "first-analysis-steps/davinci", "first-analysis-steps/davinci-grid", "first-analysis-steps/decay-tree-fitter", "first-analysis-steps/ecgd", "first-analysis-steps/eos-storage", "first-analysis-steps/files-from-grid", "first-analysis-steps/ganga-data", "first-analysis-steps/interactive-dst", "first-analysis-steps/introduction-to-course", "first-analysis-steps/lhcb-dev", "first-analysis-steps/loki-functors", "first-analysis-steps/minimal-dv-job", "first-analysis-steps/physics-at-lhcb", "first-analysis-steps/prerequisites", "first-analysis-steps/run-2-data-flow", "first-analysis-steps/split-jobs", "index", "second-analysis-steps/README", "second-analysis-steps/advanced-dirac", "second-analysis-steps/building-decays", "second-analysis-steps/building-decays-part0", "second-analysis-steps/building-decays-part1", "second-analysis-steps/building-decays-part2", "second-analysis-steps/filter-in-trees", "second-analysis-steps/fixing-errors", "second-analysis-steps/ganga-scripting", "second-analysis-steps/hlt-intro", "second-analysis-steps/lb-git", "second-analysis-steps/managing-files-with-ganga", "second-analysis-steps/rerun-stripping", "second-analysis-steps/simulation", "second-analysis-steps/simulation-advanced-dkfiles", "second-analysis-steps/simulation-dkfiles", "second-analysis-steps/simulation-fastsim", "second-analysis-steps/simulation-gencuts", "second-analysis-steps/simulation-intro", "second-analysis-steps/simulation-running-gauss", "second-analysis-steps/switch-mass-hypo", "second-analysis-steps/tistos-diy", "self-guided-lessons/README", "self-guided-lessons/htcondor", "self-guided-lessons/htcondor-first-job", "self-guided-lessons/htcondor-more-options", "self-guided-lessons/htcondor-queue", "self-guided-lessons/local-grid-proxy"], "filenames": ["CONDUCT.md", "CONTRIBUTING.md", "LICENSE.md", "first-analysis-steps/README.md", "first-analysis-steps/add-tupletools.md", "first-analysis-steps/analysis-productions.md", "first-analysis-steps/analysisflow.md", "first-analysis-steps/asking-questions.md", "first-analysis-steps/bookkeeping.md", "first-analysis-steps/contributing-lesson.md", "first-analysis-steps/dataflow.md", "first-analysis-steps/dataflow-run3.md", "first-analysis-steps/davinci.md", "first-analysis-steps/davinci-grid.md", "first-analysis-steps/decay-tree-fitter.md", "first-analysis-steps/ecgd.md", "first-analysis-steps/eos-storage.md", "first-analysis-steps/files-from-grid.md", "first-analysis-steps/ganga-data.md", "first-analysis-steps/interactive-dst.md", "first-analysis-steps/introduction-to-course.md", "first-analysis-steps/lhcb-dev.md", "first-analysis-steps/loki-functors.md", "first-analysis-steps/minimal-dv-job.md", "first-analysis-steps/physics-at-lhcb.md", "first-analysis-steps/prerequisites.md", "first-analysis-steps/run-2-data-flow.md", "first-analysis-steps/split-jobs.md", "index.md", "second-analysis-steps/README.md", "second-analysis-steps/advanced-dirac.md", "second-analysis-steps/building-decays.md", "second-analysis-steps/building-decays-part0.md", "second-analysis-steps/building-decays-part1.md", "second-analysis-steps/building-decays-part2.md", "second-analysis-steps/filter-in-trees.md", "second-analysis-steps/fixing-errors.md", "second-analysis-steps/ganga-scripting.md", "second-analysis-steps/hlt-intro.md", "second-analysis-steps/lb-git.md", "second-analysis-steps/managing-files-with-ganga.md", "second-analysis-steps/rerun-stripping.md", "second-analysis-steps/simulation.md", "second-analysis-steps/simulation-advanced-dkfiles.md", "second-analysis-steps/simulation-dkfiles.md", "second-analysis-steps/simulation-fastsim.md", "second-analysis-steps/simulation-gencuts.md", "second-analysis-steps/simulation-intro.md", "second-analysis-steps/simulation-running-gauss.md", "second-analysis-steps/switch-mass-hypo.md", "second-analysis-steps/tistos-diy.md", "self-guided-lessons/README.md", "self-guided-lessons/htcondor.md", "self-guided-lessons/htcondor-first-job.md", "self-guided-lessons/htcondor-more-options.md", "self-guided-lessons/htcondor-queue.md", "self-guided-lessons/local-grid-proxy.md"], "titles": ["Contributor Code of Conduct", "Contributing", "Instructional Material", "First Analysis Steps", "TupleTools and branches", "Analysis Productions", "The analysis flow and analysis preservation", "Asking good questions", "Finding data in the Bookkeeping", "Contribute to this lesson", "The LHCb data flow", "LHCb data flow in Run 3", "An introduction to LHCb Software", "Running DaVinci on the grid", "How do I use DecayTreeFitter?", "Early career, gender and diversity", "Storing large files on EOS", "Downloading a file from the grid", "More Ganga", "Interactively exploring a DST", "Goals of the course", "Developing LHCb Software", "Fun with LoKi Functors", "Running a minimal DaVinci job locally", "Physics at LHCb", "Pre-workshop checklist", "Changes to the data flow in Run 2", "Splitting a job into subjobs", "The LHCb Starterkit lessons ", "Second Analysis Steps", "Advanced Dirac", "Building your own decay", "The Selection Framework", "A Historical Approach", "Modern Selection Framework", "Reuse particles from a decay tree", "What to do when something fails", "Scripting Ganga", "HLT intro", "Using git to develop LHCb software", "Managing files in Ganga", "Run a different stripping line on simulated data", "The simulation framework", "Advanced: Modifying the decay", "Controlling the decay: DecFiles", "Why fast simulation is crucial", "Modifying the decay", "What is Gauss?", "Which option files to use and how to run Gauss", "Replace a mass hypothesis", "TisTos DIY", "Self guided lessons", "Batch submission using HTCondor", "Submitting a simple job", "More submit file options", "Using the queue command", "Creating a grid proxy without LbScripts"], "terms": {"As": [0, 4, 5, 6, 8, 9, 11, 13, 14, 17, 18, 19, 22, 23, 24, 26, 30, 31, 32, 34, 40, 46, 49, 52, 53, 55], "maintain": [0, 21], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56], "project": [0, 1, 6, 10, 11, 12, 19, 21, 25, 38, 39, 42], "we": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 49, 50, 53, 55], "pledg": 0, "respect": [0, 11, 14, 21, 22, 24, 33, 46, 50, 54, 55], "all": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 44, 45, 46, 47, 48, 49, 50, 53, 54, 55], "peopl": [0, 5, 7, 9, 15, 17, 20, 38, 41], "who": [0, 5, 7, 15, 20, 21], "contribut": [0, 6, 7, 20, 21, 24, 28, 43], "through": [0, 5, 8, 10, 11, 12, 18, 19, 20, 21, 23, 24, 30, 32, 33, 36, 38, 47, 49, 54], "report": [0, 1, 6, 7, 9, 19, 22, 41, 50], "issu": [0, 1, 5, 7, 9, 11, 20, 21, 25, 26, 29, 30, 34, 38, 40, 41, 51, 54, 55], "post": [0, 7, 9, 48], "featur": [0, 11, 18, 21, 23, 27, 30, 32, 38, 39, 41, 50, 54], "request": [0, 1, 6, 9, 12, 14, 20, 21, 23, 38, 39, 45, 48, 52, 56], "updat": [0, 4, 5, 21, 39, 41, 54, 56], "document": [0, 2, 4, 5, 6, 8, 9, 11, 12, 15, 21, 22, 28, 30, 37, 44, 52, 53, 54, 55], "submit": [0, 1, 5, 6, 9, 13, 20, 23, 27, 28, 30, 37, 40, 51, 52, 55], "pull": [0, 1, 9, 20, 56], "patch": [0, 10, 21], "other": [0, 2, 3, 5, 6, 7, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 32, 33, 34, 37, 39, 43, 44, 45, 46, 47, 50, 51, 53, 54], "activ": [0, 5, 7, 27, 30, 40], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 49, 50, 51, 52, 53, 54, 55], "commit": [0, 1, 5, 6, 9, 21, 39], "make": [0, 1, 4, 5, 7, 8, 9, 12, 14, 17, 19, 20, 21, 22, 23, 24, 25, 27, 28, 30, 32, 33, 34, 36, 37, 38, 39, 40, 42, 46, 47, 49, 50, 52, 53, 54, 56], "particip": [0, 25, 51], "harass": 0, "free": [0, 2, 6, 7, 34, 36, 37, 45, 46], "experi": [0, 7, 8, 11, 12, 16, 24, 52], "everyon": [0, 9, 29, 52], "regardless": [0, 54], "level": [0, 4, 5, 6, 9, 10, 11, 18, 19, 21, 23, 24, 26, 32, 37, 38, 42, 47, 48, 50], "gender": [0, 28], "ident": [0, 13, 25, 26, 38], "express": [0, 2, 22, 24, 31], "sexual": [0, 15], "orient": [0, 15], "disabl": [0, 15, 54], "person": [0, 2, 9, 15, 18, 56], "appear": [0, 5, 23, 25, 39, 53, 54], "bodi": [0, 22, 28, 31, 34, 42, 54], "size": [0, 4, 6, 11, 13, 19, 50, 55], "race": 0, "ethnic": [0, 15], "ag": 0, "religion": 0, "exampl": [0, 2, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 18, 19, 21, 22, 23, 24, 27, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 43, 44, 46, 48, 49, 50, 54, 55], "unaccept": 0, "behaviour": [0, 22, 37, 54, 55], "includ": [0, 2, 3, 4, 6, 7, 11, 12, 13, 15, 19, 24, 26, 30, 31, 33, 34, 42, 43, 46, 52, 53, 54], "us": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 45, 46, 47, 49, 50, 51, 53, 54, 56], "languag": [0, 9], "imageri": 0, "derogatori": 0, "comment": [0, 1, 9, 13, 37, 44], "attack": 0, "troll": 0, "public": [0, 2, 50], "privat": [0, 7, 16, 48], "insult": 0, "unprofession": 0, "have": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56], "right": [0, 2, 5, 8, 9, 12, 13, 21, 23, 41, 43, 48, 49], "respons": [0, 10, 26, 32, 42, 44, 46], "remov": [0, 5, 11, 12, 18, 19, 22, 23, 38, 40, 41, 42, 43, 45, 47, 50, 53, 55], "edit": [0, 1, 5, 9, 21, 48], "reject": [0, 8], "wiki": 0, "align": [0, 11], "do": [0, 2, 4, 5, 6, 7, 9, 10, 12, 13, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 30, 32, 33, 34, 35, 37, 38, 40, 42, 43, 45, 49, 53, 54, 55], "follow": [0, 1, 2, 4, 5, 6, 7, 9, 10, 11, 12, 13, 16, 17, 19, 20, 21, 22, 23, 24, 25, 30, 33, 34, 38, 42, 45, 47, 48, 50, 52, 53, 54, 56], "mai": [0, 1, 2, 4, 5, 7, 12, 13, 16, 17, 18, 22, 23, 24, 25, 29, 33, 39, 42, 47, 52, 53, 54, 55], "from": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 43, 44, 46, 48, 49, 50, 52, 53, 54, 55, 56], "team": [0, 6, 54], "instanc": [0, 4, 14, 21, 22, 35, 37, 39, 40, 41, 50], "abus": 0, "otherwis": [0, 2, 4, 5, 21, 30, 54], "open": [0, 1, 4, 5, 6, 8, 9, 13, 14, 16, 19, 20, 22, 25, 29, 30, 33, 37, 39, 48, 50, 51, 54, 55, 56], "an": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 45, 46, 47, 49, 50, 51, 53, 54, 55, 56], "contact": [0, 5], "one": [0, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 30, 32, 33, 34, 37, 38, 39, 40, 41, 43, 44, 46, 47, 48, 49, 50, 52, 53, 54, 55], "more": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30, 32, 33, 34, 36, 37, 38, 39, 43, 45, 46, 48, 49, 50, 51, 52, 53], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 48, 49, 50, 52, 53, 54, 55, 56], "adapt": [0, 2, 11, 33, 43, 50], "coven": 0, "version": [0, 1, 4, 5, 6, 8, 10, 12, 13, 18, 21, 23, 28, 30, 34, 37, 39, 40, 41, 42, 44, 46, 48, 54], "1": [0, 4, 5, 6, 10, 11, 12, 13, 17, 18, 19, 22, 23, 24, 26, 27, 30, 35, 36, 37, 38, 43, 44, 46, 47, 48, 49, 50, 53, 54, 55, 56], "0": [0, 2, 4, 5, 8, 10, 11, 13, 14, 17, 18, 19, 22, 23, 24, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 43, 46, 48, 49, 50, 53, 54, 55], "avail": [0, 2, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 17, 22, 23, 24, 27, 30, 32, 34, 37, 38, 39, 40, 41, 42, 45, 47, 49, 50, 52, 53, 56], "http": [0, 1, 5, 9, 21, 38, 39, 40, 42, 43, 45, 46, 48], "org": 0, "starterkit": [1, 3, 5, 9, 15, 17, 20, 21, 29, 34, 39, 40], "lesson": [1, 3, 4, 5, 6, 7, 8, 10, 12, 13, 17, 18, 19, 20, 21, 22, 23, 24, 27, 29, 30, 31, 32, 33, 34, 35, 37, 39, 40, 41, 42, 46, 48, 49, 50, 52, 54, 55], "sourc": [1, 4, 6, 9, 20, 21, 24, 30, 39, 46, 48, 54], "welcom": [1, 12, 37], "kind": [1, 2, 5, 13, 46], "new": [1, 4, 5, 6, 9, 10, 11, 12, 13, 14, 19, 21, 22, 23, 25, 30, 31, 35, 38, 39, 41, 45, 46, 48, 49, 50, 54, 55, 56], "fix": [1, 7, 9, 10, 11, 25, 38, 47, 54, 55], "exist": [1, 5, 6, 11, 12, 15, 19, 21, 22, 28, 31, 34, 38, 40, 41, 42, 44, 45, 46, 47, 55], "materi": [1, 7, 28], "bug": [1, 6, 7, 9, 10, 28, 34], "review": [1, 6, 21, 39], "propos": [1, 9, 21], "chang": [1, 2, 5, 6, 8, 9, 10, 13, 14, 17, 18, 20, 21, 23, 25, 28, 30, 32, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 49, 53, 54, 55], "By": [1, 8, 10, 13, 22, 24, 27, 33, 37, 40, 52, 53, 54, 55], "you": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56], "agre": [1, 22], "redistribut": [1, 2], "your": [1, 2, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 33, 35, 37, 39, 40, 41, 42, 43, 46, 48, 50, 51, 52, 54, 55, 56], "work": [1, 3, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 29, 30, 32, 33, 34, 37, 39, 40, 41, 42, 46, 50, 53, 54, 56], "under": [1, 2, 4, 5, 8, 16, 21, 24, 29, 31, 38, 39, 47], "licens": [1, 2], "also": [1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 36, 37, 39, 40, 44, 45, 46, 47, 50, 53, 54, 55], "abid": 1, "our": [1, 4, 5, 8, 10, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 27, 30, 32, 33, 34, 36, 37, 39, 40, 41, 42, 45, 46, 49, 50, 53, 54, 55], "contributor": [1, 28], "code": [1, 4, 6, 7, 11, 20, 21, 22, 27, 28, 30, 31, 32, 33, 34, 35, 37, 39, 40, 43, 44, 49, 54], "conduct": [1, 6, 28], "fork": [1, 9], "model": [1, 6, 11, 24, 26, 43, 44, 46], "manag": [1, 6, 7, 10, 12, 19, 21, 23, 28, 30, 39, 47, 49, 51], "inform": [1, 4, 5, 6, 7, 10, 11, 13, 14, 15, 16, 18, 19, 21, 22, 23, 24, 26, 28, 36, 39, 40, 42, 43, 44, 47, 50, 52, 53, 54, 55], "about": [1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 18, 19, 20, 21, 22, 23, 28, 30, 32, 34, 36, 37, 38, 40, 42, 44, 45, 46, 48, 49, 53, 54, 55], "repositori": [1, 5, 6, 9, 20, 21, 29, 39, 42, 51], "To": [1, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 21, 22, 23, 26, 27, 30, 32, 33, 34, 35, 37, 38, 39, 40, 41, 50, 53, 54, 55], "build": [1, 2, 3, 4, 10, 11, 14, 21, 22, 29, 30, 32, 33, 34, 35, 36, 39, 41, 42, 44], "pleas": [1, 5, 6, 7, 20, 21, 25, 26, 30, 42, 47], "instal": [1, 6, 9, 17, 21, 25, 28, 51], "For": [1, 2, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 18, 19, 21, 22, 23, 24, 25, 26, 27, 30, 32, 33, 34, 35, 36, 38, 39, 40, 41, 43, 44, 45, 46, 48, 49, 50, 53, 54, 55], "should": [1, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 16, 17, 21, 22, 23, 25, 27, 29, 30, 39, 40, 41, 42, 46, 49, 52, 53, 54, 55], "branch": [1, 5, 9, 14, 18, 21, 22, 28, 38, 39, 43], "against": 1, "master": [1, 4, 5, 21, 30, 39, 40, 43], "when": [1, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 33, 37, 38, 39, 40, 41, 44, 45, 46, 50, 52, 53, 54, 55, 56], "page": [1, 4, 5, 7, 8, 9, 10, 11, 12, 15, 21, 23, 25, 38, 40, 41, 49, 52], "need": [1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 30, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56], "onli": [1, 4, 5, 6, 8, 10, 11, 13, 14, 17, 19, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 42, 44, 46, 47, 50, 52, 53, 54, 55], "markdown": [1, 5, 9], "file": [1, 2, 4, 5, 8, 9, 10, 12, 13, 18, 19, 21, 22, 23, 27, 28, 30, 31, 32, 33, 36, 37, 38, 39, 41, 42, 44, 46, 50, 51, 52, 53, 55], "If": [1, 3, 4, 5, 7, 8, 9, 10, 14, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 34, 37, 38, 39, 40, 43, 44, 45, 46, 47, 50, 51, 53, 54, 55, 56], "re": [1, 5, 7, 8, 12, 14, 19, 20, 21, 23, 25, 26, 32, 35, 37, 39, 40, 45, 53, 54, 55], "look": [1, 4, 5, 8, 9, 10, 11, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 26, 30, 33, 36, 37, 39, 40, 41, 44, 46, 49, 50, 53, 54, 55], "thing": [1, 4, 5, 7, 9, 12, 13, 21, 22, 23, 25, 26, 29, 30, 33, 36, 37, 40, 46, 47, 49, 50, 54, 55], "see": [1, 4, 5, 7, 8, 9, 10, 11, 14, 16, 17, 19, 21, 22, 23, 24, 25, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 41, 43, 45, 46, 48, 49, 52, 53, 54, 55, 56], "list": [1, 4, 5, 6, 7, 8, 10, 12, 13, 14, 16, 17, 18, 19, 21, 22, 23, 24, 25, 28, 30, 32, 34, 35, 37, 39, 40, 47, 49, 52, 54, 55, 56], "equal": 1, "local": [1, 6, 9, 13, 18, 20, 21, 25, 28, 30, 37, 38, 39, 40, 46, 48, 50, 53, 54, 56], "ci": [1, 5, 6, 21], "Then": [1, 5, 9, 19, 22, 32, 36, 37, 40, 50, 54], "starterkit_ci": 1, "allow": [1, 4, 5, 6, 11, 12, 13, 14, 19, 21, 22, 23, 26, 27, 30, 32, 33, 34, 39, 40, 44, 45, 49, 50, 52, 53, 54, 55, 56], "warn": [1, 12, 17, 21, 22, 25, 42], "check": [1, 4, 5, 7, 11, 13, 14, 19, 20, 21, 22, 23, 25, 26, 33, 34, 35, 36, 37, 38, 39, 44, 46, 48, 50, 53, 54, 56], "web": [1, 4, 5, 7, 9, 15, 21, 25, 39, 42], "server": [1, 9, 11, 25], "host": [1, 9, 11, 25, 30, 53], "them": [1, 4, 5, 6, 7, 9, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 30, 32, 33, 34, 36, 37, 39, 40, 49, 50, 52, 54, 55], "cd": [1, 5, 6, 9, 14, 21, 39, 40, 42], "python": [1, 3, 5, 6, 8, 9, 12, 13, 17, 19, 22, 23, 28, 37, 38, 40, 43, 44, 46, 49, 50, 54, 55], "m": [1, 4, 5, 9, 14, 22, 33, 36, 46], "8000": [1, 9], "can": [1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56], "browser": [1, 5, 8, 9, 25, 53], "navig": [1, 5, 8, 9, 22], "localhost": [1, 9, 30], "wherev": [1, 11, 40], "sai": [1, 7, 14, 23, 24, 25, 26, 54], "": [1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 46, 49, 50, 52, 53, 54, 55], "serv": [1, 20], "book": [1, 25], "made": [2, 6, 7, 8, 10, 14, 15, 21, 22, 26, 30, 31, 33, 39, 40, 49, 50, 54], "creativ": 2, "common": [2, 6, 12, 22, 24, 30, 31, 32, 33, 34, 37, 42, 46, 53, 54], "attribut": [2, 18, 23, 25, 27, 30, 40, 41, 54], "The": [2, 3, 4, 5, 7, 8, 9, 12, 13, 14, 15, 18, 19, 20, 21, 22, 23, 25, 26, 27, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56], "human": [2, 5, 8], "readabl": [2, 5, 8], "summari": [2, 5, 7, 36, 40, 53], "substitut": [2, 14, 39, 49], "full": [2, 5, 10, 11, 19, 21, 22, 23, 24, 30, 32, 33, 34, 35, 38, 45, 56], "legal": [2, 13], "text": [2, 5, 8, 9, 12, 22, 25, 39, 40, 54, 55], "cc": [2, 4, 14, 23, 33, 34, 35, 38, 44, 46, 48, 49], "BY": 2, "4": [2, 6, 14, 18, 22, 33, 34, 36, 38, 43, 47, 55], "share": [2, 6, 11, 12, 20, 21, 33, 34, 52, 54, 55], "copi": [2, 5, 8, 9, 13, 17, 23, 38, 41, 42, 48, 50, 52, 54, 56], "ani": [2, 3, 4, 5, 6, 8, 12, 13, 17, 18, 21, 22, 23, 24, 26, 29, 30, 32, 34, 36, 37, 40, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "medium": 2, "format": [2, 5, 9, 10, 17, 19, 20, 22, 23, 34, 35, 37, 38, 41, 43, 49, 54], "remix": 2, "transform": [2, 10, 23, 30, 48], "upon": [2, 54], "purpos": [2, 5, 11, 12, 38, 39, 40, 52, 54], "even": [2, 6, 11, 21, 22, 25, 32, 43, 49, 50, 53, 54], "commerci": 2, "licensor": 2, "cannot": [2, 11, 12, 17, 26, 30, 34, 38, 47], "revok": 2, "freedom": [2, 4], "long": [2, 5, 8, 10, 19, 20, 24, 26, 27, 33, 39, 54], "term": [2, 7, 15, 20, 34, 50], "must": [2, 10, 13, 14, 21, 24, 39, 40, 46, 50, 54, 56], "give": [2, 4, 5, 6, 7, 8, 13, 14, 19, 20, 22, 23, 24, 31, 32, 34, 37, 38, 39, 42, 51, 53, 54, 55], "appropri": [2, 5, 27, 30, 37, 39, 53], "credit": 2, "provid": [2, 5, 6, 10, 11, 12, 13, 14, 16, 19, 21, 22, 26, 27, 29, 38, 44, 46, 55, 56], "link": [2, 5, 7, 9, 21, 32, 36, 42], "indic": [2, 27], "were": [2, 5, 10, 22, 26, 38, 52, 53, 54, 55], "so": [2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 30, 31, 33, 34, 35, 37, 38, 40, 41, 44, 46, 47, 49, 50, 52, 54, 55], "reason": [2, 5, 7, 14, 19, 33, 34, 40, 47, 54], "manner": [2, 10, 22, 24, 26], "wai": [2, 4, 5, 6, 7, 8, 10, 11, 12, 14, 16, 18, 19, 20, 21, 22, 23, 24, 25, 30, 33, 34, 35, 37, 39, 40, 41, 49, 50, 51, 52, 53, 54, 56], "suggest": 2, "endors": 2, "No": [2, 4, 12, 25, 36, 37, 40, 54], "addit": [2, 4, 5, 6, 13, 14, 21, 24, 25, 26, 30, 42, 44, 45, 46, 47, 48, 50, 53, 54, 55], "restrict": [2, 10, 14, 32, 54], "appli": [2, 4, 5, 6, 10, 14, 24, 30, 32, 33, 41, 45, 46, 47, 54], "technolog": 2, "measur": [2, 6, 14, 20, 24, 43, 54], "anyth": [2, 5, 12, 13, 24, 34, 41, 44, 48, 54], "permit": 2, "notic": [2, 22, 27, 30, 37, 41, 46, 55], "compli": 2, "element": [2, 5, 13, 18, 40, 44, 50, 55], "domain": 2, "where": [2, 4, 7, 8, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 26, 27, 29, 30, 33, 36, 37, 38, 39, 40, 46, 48, 49, 50, 51, 52, 54, 55], "applic": [2, 5, 6, 8, 10, 11, 12, 13, 19, 22, 23, 29, 30, 37, 38, 40, 41, 42, 47, 48, 49, 50, 56], "except": [2, 10, 22, 30, 33, 53], "limit": [2, 11, 22, 26, 33, 52, 54, 56], "warranti": 2, "given": [2, 5, 12, 13, 18, 21, 22, 23, 24, 25, 32, 33, 37, 38, 40, 44, 45, 47], "permiss": [2, 9, 21, 52], "necessari": [2, 4, 6, 7, 11, 21, 23, 27, 30, 32, 37, 38, 45, 48, 49], "intend": [2, 5, 30, 54], "privaci": 2, "moral": 2, "how": [2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 45, 46, 47, 49, 50, 51, 52, 53, 54, 55], "note": [2, 4, 6, 12, 13, 14, 21, 22, 23, 24, 27, 30, 33, 34, 37, 40, 43, 44, 47, 49, 50, 52, 53, 54, 55, 56], "program": [2, 3, 7, 10, 11, 13, 54], "carpentri": [2, 3], "osi": 2, "approv": [2, 21], "mit": 2, "herebi": 2, "grant": 2, "charg": [2, 14, 22, 23, 24, 31, 36, 43, 46], "obtain": [2, 4, 11, 13, 17, 21, 22, 32, 35, 46], "associ": [2, 4, 10, 12, 14, 22, 24, 26, 34, 43], "deal": [2, 11, 34, 50], "without": [2, 10, 12, 13, 14, 21, 22, 23, 27, 28, 32, 34, 43, 46, 51, 53, 54, 55], "modifi": [2, 4, 9, 12, 14, 21, 23, 28, 32, 36, 37, 41, 42, 54, 55], "merg": [2, 9, 18, 21, 37, 38, 39], "publish": 2, "distribut": [2, 4, 6, 7, 14, 25, 30, 40, 45, 46, 50, 52], "sublicens": 2, "sell": 2, "whom": 2, "furnish": 2, "subject": [2, 7, 10, 25], "condit": [2, 5, 8, 14, 23, 54], "abov": [2, 4, 6, 10, 12, 14, 19, 22, 24, 25, 37, 46, 47, 48, 49, 50, 53, 54, 55, 56], "copyright": 2, "shall": 2, "substanti": [2, 45], "portion": [2, 35], "THE": [2, 48], "AS": 2, "OF": 2, "OR": [2, 22], "impli": 2, "BUT": 2, "NOT": 2, "TO": 2, "merchant": 2, "fit": [2, 4, 6, 9, 12, 14, 22, 24, 33, 54], "FOR": 2, "A": [2, 7, 8, 9, 10, 11, 12, 14, 21, 22, 23, 24, 25, 28, 31, 32, 34, 38, 39, 43, 46, 48, 50, 53, 54], "particular": [2, 5, 7, 13, 14, 20, 21, 22, 33, 34, 49, 55], "AND": [2, 22], "noninfring": 2, "IN": 2, "NO": [2, 54], "event": [2, 4, 6, 8, 10, 11, 12, 13, 14, 17, 19, 20, 22, 23, 24, 26, 30, 32, 33, 34, 35, 36, 38, 41, 42, 44, 45, 46, 47, 48, 49, 50], "author": 2, "holder": 2, "BE": 2, "liabl": 2, "claim": 2, "damag": 2, "liabil": 2, "whether": [2, 4, 14, 23, 27, 40, 45, 54], "action": [2, 13, 37, 48], "contract": [2, 15], "tort": 2, "aris": [2, 10], "out": [2, 4, 5, 7, 8, 9, 10, 13, 14, 18, 19, 20, 21, 22, 23, 28, 33, 37, 38, 39, 41, 44, 46, 50, 52, 53, 54, 55], "connect": [2, 17, 18, 25, 38, 39, 52, 54], "WITH": 2, "lhcb": [3, 5, 6, 7, 8, 9, 13, 15, 16, 17, 18, 20, 22, 23, 25, 26, 29, 30, 32, 33, 34, 36, 38, 40, 42, 43, 44, 45, 46, 47, 48, 50, 52, 56], "seri": [3, 29, 31, 44], "get": [3, 4, 5, 7, 8, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 30, 32, 33, 34, 36, 37, 38, 40, 42, 43, 44, 49, 50, 51, 53, 54, 55], "analyst": [3, 5, 10, 26, 30, 42, 50], "confid": [3, 7, 20, 30], "data": [3, 7, 12, 13, 14, 17, 18, 19, 20, 22, 23, 24, 25, 27, 28, 30, 31, 32, 37, 38, 40, 48, 49, 50, 52, 54, 55, 56], "softwar": [3, 6, 8, 9, 10, 11, 13, 17, 20, 22, 23, 24, 26, 28, 29, 32, 38, 47, 48, 50, 52, 54], "best": [3, 4, 7, 8, 10, 12, 13, 14, 19, 22, 24, 26, 36, 38, 41, 43], "approach": [3, 24, 28, 31, 32, 39], "after": [3, 4, 5, 6, 8, 9, 11, 12, 13, 14, 21, 23, 26, 36, 37, 40, 43, 45, 46, 53, 54], "most": [3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 22, 23, 24, 30, 32, 33, 34, 39, 40, 41, 42, 45, 47, 50, 53, 54, 55, 56], "knowledg": [3, 14, 22, 31], "gain": [3, 31], "previou": [3, 5, 8, 10, 17, 18, 20, 23, 25, 27, 30, 34, 37, 54, 55], "ones": [3, 6, 10, 12, 22, 23, 34, 50, 53, 54], "problem": [3, 5, 7, 10, 18, 21, 24, 25, 27, 29, 32, 33, 34, 36, 40, 51], "question": [3, 10, 12, 14, 19, 20, 25, 28, 29, 33, 51], "send": [3, 5, 29, 30, 40, 54], "email": [3, 5, 7, 13, 15, 21, 29, 39, 40, 44, 54], "cern": [3, 5, 6, 7, 12, 16, 17, 18, 21, 25, 29, 30, 33, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 50, 52, 53, 56], "ch": [3, 5, 7, 12, 16, 17, 21, 25, 29, 30, 33, 38, 39, 41, 42, 43, 44, 45, 46, 48, 50, 52, 56], "prerequisit": [3, 12, 21, 29, 39], "befor": [3, 4, 5, 7, 8, 11, 13, 17, 18, 19, 21, 22, 23, 24, 25, 27, 29, 30, 33, 34, 36, 37, 39, 40, 42, 46, 50, 53, 55], "start": [3, 4, 5, 6, 7, 8, 9, 12, 13, 14, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 33, 35, 37, 38, 39, 40, 46, 49, 50, 52, 53, 55], "familiar": [3, 20, 24, 29, 30, 55], "shell": [3, 12, 13, 17, 21, 25, 30, 38, 40, 54, 55], "like": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 31, 36, 37, 38, 40, 48, 49, 50, 52, 54, 55], "bash": [3, 6, 12, 21, 25, 30, 53, 54, 55], "essenti": [3, 10, 20, 23, 28, 40, 53, 54], "cours": [3, 24, 26, 28, 37], "ha": [3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 16, 18, 21, 22, 23, 24, 25, 26, 27, 30, 33, 34, 36, 37, 38, 39, 40, 41, 43, 44, 49, 50, 52, 53, 54, 55], "introduct": [3, 20, 24, 28, 32, 42], "topic": [3, 7, 20, 26], "doe": [3, 4, 10, 14, 20, 22, 24, 25, 32, 33, 35, 44, 48, 49], "workshop": [3, 12, 28, 29], "which": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 50, 52, 53, 54, 55, 56], "mani": [3, 4, 8, 10, 11, 12, 14, 16, 19, 21, 22, 23, 24, 26, 27, 30, 36, 37, 38, 39, 43, 49, 53, 54, 55], "comput": [3, 5, 6, 9, 10, 11, 12, 19, 21, 22, 23, 25, 26, 52, 55], "tool": [3, 4, 5, 10, 11, 12, 14, 18, 19, 21, 22, 23, 28, 30, 33, 34, 37, 41, 42, 44, 49, 50], "learn": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55], "object": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55], "add": [4, 5, 6, 8, 9, 10, 13, 14, 17, 19, 20, 21, 23, 27, 28, 30, 33, 35, 36, 37, 39, 40, 46, 48, 49, 50, 52, 53, 54], "extra": [4, 5, 11], "default": [4, 5, 10, 11, 12, 13, 14, 18, 22, 23, 25, 27, 30, 34, 37, 38, 39, 40, 41, 43, 46, 54, 55], "decaytreetupl": [4, 14, 19, 21, 23, 32, 34, 41, 48, 49], "configur": [4, 5, 8, 10, 12, 13, 14, 17, 18, 19, 21, 23, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50], "find": [4, 5, 6, 7, 10, 12, 13, 14, 15, 18, 19, 20, 21, 22, 23, 26, 28, 33, 34, 36, 37, 38, 39, 40, 41, 42, 47, 48, 49, 50, 53, 54], "loki": [4, 11, 14, 19, 23, 28, 33, 46, 48, 49], "functor": [4, 11, 14, 19, 23, 28, 33, 46, 49], "usual": [4, 5, 6, 7, 8, 10, 12, 14, 16, 22, 23, 25, 26, 30, 32, 38, 40, 45, 46, 49, 52, 54], "store": [4, 5, 6, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 26, 28, 30, 38, 39, 50, 53, 54], "shown": [4, 14, 24, 30, 38, 53], "minim": [4, 6, 7, 11, 13, 28, 32, 34, 41], "davinci": [4, 5, 6, 7, 8, 10, 12, 14, 19, 21, 22, 26, 28, 32, 33, 34, 36, 37, 38, 41, 48, 49], "job": [4, 5, 6, 8, 13, 18, 21, 22, 28, 30, 34, 40, 41, 46, 48, 49, 51, 52, 54, 55], "enough": [4, 6, 7, 20, 24, 33, 37, 40, 54], "physic": [4, 8, 10, 11, 12, 14, 20, 21, 22, 26, 28, 30, 31, 32, 38, 43, 44, 48, 50, 54], "analysi": [4, 7, 8, 9, 10, 11, 12, 13, 14, 19, 20, 21, 22, 23, 24, 25, 26, 28, 30, 31, 32, 38, 40, 45, 50, 52], "fortun": [4, 45, 55, 56], "ad": [4, 5, 21, 25, 27, 28, 36, 38, 42, 43, 44, 48, 49, 50, 53, 55], "c": [4, 6, 8, 11, 12, 21, 22, 24, 36, 38, 41, 44, 46, 53, 54], "known": [4, 7, 14, 21, 22, 24, 26, 32, 46, 47, 53, 54], "dtt": [4, 14, 23, 41, 48, 49], "extens": [4, 6, 18, 40, 45, 47, 48], "librari": [4, 6, 23, 54], "some": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 21, 22, 23, 24, 25, 27, 29, 30, 31, 32, 33, 36, 37, 39, 40, 43, 45, 46, 49, 50, 52, 53, 54, 55], "briefli": [4, 21], "discuss": [4, 6, 7, 8, 10, 19, 21, 22, 32, 33, 34], "dure": [4, 5, 10, 12, 15, 17, 21, 22, 25, 26, 28, 39, 41, 44, 50], "tupletoolkinemat": 4, "fill": [4, 17, 18, 22, 23], "kinemat": [4, 6, 14, 45], "decai": [4, 5, 8, 10, 11, 14, 19, 20, 22, 23, 26, 28, 32, 33, 34, 36, 38, 42, 45, 47, 48, 49, 50], "tupletoolpid": 4, "dll": 4, "pid": [4, 22, 36], "particl": [4, 6, 10, 12, 14, 19, 22, 23, 24, 26, 28, 31, 32, 33, 34, 36, 38, 41, 42, 46, 47, 48, 49, 50], "tupletoolannpid": 4, "neuralnet": 4, "base": [4, 5, 6, 11, 12, 14, 22, 24, 25, 30, 32, 40, 52, 53], "tupletoolgeometri": 4, "geometr": 4, "variabl": [4, 6, 10, 11, 13, 14, 19, 20, 33, 37, 48, 51, 52], "ip": [4, 22, 25], "vertex": [4, 6, 12, 14, 22, 24, 26, 33, 34, 36], "posit": [4, 14, 15, 19, 22, 23, 37, 38, 40, 48], "etc": [4, 6, 7, 12, 18, 19, 28, 33, 36, 39, 42, 48, 52, 54, 56], "tupletooleventinfo": [4, 38], "gener": [4, 6, 7, 8, 10, 12, 14, 15, 16, 17, 18, 21, 22, 23, 25, 28, 30, 32, 33, 34, 37, 38, 40, 42, 43, 44, 47, 51, 54], "number": [4, 5, 8, 10, 13, 16, 17, 19, 23, 24, 25, 27, 30, 36, 38, 40, 43, 47, 50, 52, 53, 54, 55], "run": [4, 5, 6, 8, 9, 10, 12, 14, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 32, 33, 34, 36, 37, 38, 39, 40, 42, 47, 49, 50, 52, 53, 54, 55], "gp": [4, 19], "time": [4, 5, 6, 7, 10, 11, 12, 13, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 30, 33, 34, 37, 38, 39, 40, 41, 43, 45, 46, 47, 50, 53, 54, 55, 56], "In": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 32, 33, 34, 37, 38, 39, 40, 41, 45, 46, 48, 49, 50, 52, 53, 54, 55, 56], "order": [4, 5, 8, 9, 11, 12, 13, 18, 19, 21, 22, 23, 24, 30, 32, 35, 39, 46, 48, 49, 52, 53, 54, 55, 56], "addtupletool": [4, 14, 38, 48], "method": [4, 5, 12, 13, 14, 18, 21, 22, 23, 27, 32, 37, 40, 43, 49, 50, 55], "import": [4, 5, 6, 10, 11, 12, 14, 17, 19, 22, 23, 24, 27, 30, 32, 33, 34, 35, 36, 37, 38, 41, 43, 44, 46, 48, 49, 50, 52, 54, 55], "script": [4, 5, 6, 12, 13, 14, 17, 19, 21, 28, 30, 33, 34, 38, 40, 50, 52, 53, 54, 55], "instanti": [4, 22, 32, 34, 41, 50], "execut": [4, 5, 6, 12, 13, 21, 22, 25, 30, 32, 33, 36, 37, 38, 40, 52, 53, 54, 55], "return": [4, 5, 18, 19, 21, 22, 25, 34, 38, 52], "want": [4, 5, 7, 8, 9, 10, 12, 13, 14, 17, 19, 20, 21, 22, 23, 24, 25, 27, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 46, 47, 48, 49, 52, 53, 54, 55], "track": [4, 9, 10, 11, 12, 14, 19, 21, 22, 23, 24, 26, 31, 36, 38, 45, 50, 51, 52], "tupletooltrackinfo": 4, "track_tool": 4, "further": [4, 10, 11, 14, 22, 24, 26, 30, 36, 49], "degre": 4, "would": [4, 5, 8, 10, 11, 12, 17, 19, 21, 22, 23, 26, 27, 30, 32, 33, 34, 35, 36, 37, 40, 43, 44, 48, 50, 54, 55], "turn": [4, 24, 44, 45], "verbos": [4, 14, 38], "mode": [4, 8, 11, 43, 44, 49, 54], "true": [4, 5, 11, 14, 17, 19, 22, 23, 24, 25, 27, 30, 33, 37, 38, 47, 48], "don": [4, 5, 8, 10, 12, 13, 21, 22, 25, 26, 29, 32, 34, 36, 37, 39, 40, 47, 48, 50, 54], "t": [4, 5, 7, 8, 10, 11, 12, 13, 19, 20, 21, 22, 23, 25, 26, 27, 29, 30, 31, 32, 34, 36, 37, 39, 40, 41, 42, 43, 47, 48, 49, 50, 54, 55, 56], "pv": [4, 14, 22], "could": [4, 5, 8, 11, 19, 20, 23, 24, 32, 33, 34, 35, 37, 40, 43, 50, 54, 55], "just": [4, 6, 7, 8, 9, 10, 12, 13, 14, 17, 18, 19, 21, 23, 24, 25, 26, 27, 28, 32, 34, 37, 39, 40, 49, 50, 54], "tupletoolprimari": 4, "written": [4, 6, 7, 9, 20, 23, 32, 34, 36, 37, 38, 50, 51, 55], "d": [4, 5, 7, 8, 12, 14, 19, 21, 22, 23, 25, 28, 31, 32, 33, 34, 35, 36, 44, 46, 48, 49], "2010": [4, 14, 23, 26, 33, 34, 35, 36, 44, 46, 48, 49], "d0": [4, 14, 22, 23, 32, 33, 34, 35, 36, 38, 44, 46, 48, 49], "k": [4, 5, 8, 14, 22, 23, 24, 32, 33, 34, 35, 36, 38, 43, 44, 46, 48, 49], "pi": [4, 8, 14, 19, 22, 23, 24, 32, 33, 34, 35, 36, 38, 43, 44, 46, 48, 49], "mean": [4, 6, 9, 11, 12, 13, 15, 18, 22, 23, 25, 26, 32, 33, 36, 37, 38, 46, 49, 50, 52, 54, 55], "head": [4, 14, 22, 25, 46], "chain": [4, 10, 14, 20, 21, 22, 24, 30, 32, 33, 34, 36, 49], "select": [4, 6, 8, 10, 12, 22, 23, 24, 25, 26, 27, 28, 30, 31, 33, 35, 36, 37, 38, 39, 41, 46, 47, 48, 49, 50, 54], "mark": [4, 10, 14, 37, 47, 49], "symbol": [4, 8, 14], "descriptor": [4, 14, 23, 33, 44, 48, 49], "its": [4, 5, 6, 9, 10, 13, 14, 19, 21, 22, 23, 24, 26, 27, 29, 32, 33, 34, 38, 39, 40, 43, 44, 47, 48, 50, 52, 53, 54, 55], "children": [4, 19, 22, 32, 33, 45], "well": [4, 5, 6, 7, 8, 9, 11, 12, 20, 22, 23, 24, 25, 27, 31, 44, 47, 52, 54], "soft": [4, 7, 24, 33, 34], "line": [4, 5, 6, 8, 9, 10, 11, 12, 13, 19, 22, 23, 25, 26, 28, 32, 33, 34, 35, 37, 40, 42, 46, 47, 49, 50, 53, 54, 55], "caveat": [4, 30, 33, 41], "certain": [4, 5, 6, 11, 12, 13, 21, 22, 27, 30, 34, 54], "type": [4, 6, 8, 10, 12, 13, 18, 19, 22, 23, 24, 25, 26, 32, 33, 34, 36, 37, 38, 39, 42, 44, 46, 48, 53, 54, 55], "eg": [4, 5], "optim": [4, 32, 33, 34], "sinc": [4, 5, 10, 14, 17, 21, 22, 30, 32, 34, 38, 47, 49, 50, 54, 55], "enter": [4, 5, 8, 11, 13, 19, 25, 27, 37, 47], "u": [4, 5, 8, 10, 14, 18, 19, 21, 22, 23, 24, 30, 33, 34, 36, 37, 39, 40, 49, 54], "specifi": [4, 5, 6, 8, 12, 13, 14, 17, 18, 21, 22, 23, 26, 27, 30, 33, 39, 40, 43, 44, 49, 53, 54, 55], "top": [4, 5, 9, 13, 19, 21, 40, 48], "let": [4, 5, 8, 13, 14, 16, 20, 21, 22, 24, 30, 33, 35, 36, 37, 39, 40, 50, 54, 55], "defin": [4, 6, 8, 10, 11, 13, 14, 21, 22, 23, 28, 30, 38, 39, 40, 43, 44, 50, 55], "custom": [4, 11, 14, 21, 37, 38, 41], "namespac": [4, 22], "ntupl": [4, 5, 6, 12, 13, 14, 18, 19, 20, 22, 23, 27, 28, 33, 36, 42, 49], "dict": [4, 12], "Its": [4, 5, 32, 52], "kei": [4, 10, 11, 12, 14, 21, 22, 25, 38, 39, 41, 48, 49, 56], "name": [4, 5, 8, 9, 13, 14, 17, 19, 21, 22, 23, 25, 26, 32, 33, 34, 37, 38, 39, 40, 41, 46, 48, 49, 50, 54, 55], "each": [4, 5, 6, 8, 9, 10, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 33, 39, 40, 41, 43, 44, 46, 47, 50, 52, 53, 54, 55], "consequ": [4, 21, 23, 32], "prefix": [4, 21, 22, 33, 40, 53], "correspond": [4, 5, 8, 10, 12, 14, 22, 23, 24, 27, 33, 36, 37, 39, 41, 43, 47, 50], "leav": [4, 5, 9, 12, 13, 19, 21, 54], "while": [4, 5, 13, 17, 19, 21, 22, 27, 34, 36, 38, 41, 48, 52, 53, 54], "valu": [4, 5, 6, 7, 14, 22, 23, 24, 27, 30, 37, 43, 46, 49, 54, 55], "addbranch": [4, 14], "dstar": [4, 14, 33, 35], "kminu": 4, "kplu": 4, "pisoft": 4, "sure": [4, 5, 7, 8, 19, 21, 22, 25, 27, 33, 34, 39, 40, 41, 47, 50, 52, 54], "main": [4, 5, 6, 7, 9, 23, 27, 39], "ignor": [4, 12, 42], "been": [4, 5, 8, 11, 20, 21, 22, 23, 24, 32, 33, 34, 39, 41, 43, 44, 50, 51, 53, 54, 56], "onc": [4, 5, 7, 8, 9, 12, 13, 14, 17, 21, 23, 25, 27, 33, 35, 37, 38, 39, 44, 47, 50, 52, 54, 55, 56], "thei": [4, 5, 7, 9, 10, 12, 13, 21, 22, 24, 29, 30, 32, 33, 34, 35, 36, 39, 40, 44, 46, 50, 52, 53, 54, 55, 56], "access": [4, 5, 6, 10, 11, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25, 27, 30, 32, 33, 36, 37, 40, 50, 52, 54, 56], "particlenam": 4, "proper": 4, "tupletoolpropertim": 4, "requir": [4, 5, 6, 8, 9, 10, 11, 12, 14, 21, 22, 23, 24, 25, 28, 30, 32, 33, 36, 37, 38, 39, 40, 42, 44, 45, 46, 47, 49, 51, 52, 53, 55], "throw": 4, "error": [4, 6, 13, 22, 34, 36, 37, 40, 46, 52, 53, 54, 55], "checker": 4, "tupl": [4, 11, 16, 22, 30, 33, 49], "algorithm": [4, 10, 11, 12, 14, 22, 23, 32, 33, 34, 35, 36, 38, 40, 49], "checkpv": 4, "useralgorithm": [4, 23, 33, 36, 38, 48], "realli": [4, 6, 9, 12, 22, 46, 50], "my": [4, 13, 21, 37, 38], "setdescriptortempl": 4, "set": [4, 5, 6, 7, 10, 11, 12, 13, 14, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 30, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 44, 46, 48, 50, 54, 55, 56], "up": [4, 5, 7, 8, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 25, 28, 30, 32, 36, 37, 39, 40, 41, 42, 46, 47, 50, 53, 54, 55, 56], "older": [4, 12, 13, 25, 47], "snippet": [4, 30], "With": [4, 10, 19, 23, 24, 26, 33, 34, 54], "simpli": [4, 5, 7, 9, 13, 19, 21, 27, 30, 33, 34, 41, 42, 49, 54, 55], "both": [4, 5, 6, 8, 11, 12, 14, 22, 24, 26, 35, 38, 40, 47, 50, 52, 53, 55], "usag": [4, 5, 21, 22, 23, 30, 34, 37, 40, 52], "veri": [4, 5, 6, 7, 8, 9, 10, 13, 14, 16, 17, 18, 20, 21, 22, 24, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 43, 45, 46, 55], "strongli": [4, 14, 23, 41], "encourag": [4, 18, 38, 54], "keep": [4, 5, 8, 9, 10, 11, 18, 21, 25, 30, 33, 34, 52], "small": [4, 6, 10, 18, 19, 21, 23, 33, 34, 37], "prevent": [4, 21], "unneed": [4, 18], "trigger": [4, 6, 8, 10, 12, 19, 22, 23, 26, 28, 30, 31, 34, 36, 39, 45, 46, 48, 50], "later": [4, 6, 7, 8, 10, 27, 30, 33, 42, 47, 50, 52, 54], "One": [4, 5, 6, 7, 11, 12, 21, 33, 35, 37, 38, 45, 50, 54], "difficult": 4, "know": [4, 8, 9, 10, 13, 14, 15, 19, 22, 24, 26, 32, 33, 34, 36, 37, 38, 40, 42, 43, 46, 47, 48, 49, 54], "spread": [4, 27], "9": [4, 33, 35, 36], "packag": [4, 5, 6, 8, 9, 21, 30, 33, 34, 39, 42, 44, 46, 49], "phy": [4, 12, 19, 21, 22, 23, 33, 34, 35, 36, 38, 41, 48, 49, 50], "git": [4, 5, 9, 20, 21, 28, 38, 42], "here": [4, 5, 6, 8, 9, 10, 13, 14, 16, 17, 19, 21, 22, 23, 26, 29, 30, 33, 34, 35, 36, 37, 38, 39, 40, 43, 46, 47, 48, 49, 52, 53, 54, 55, 56], "accord": [4, 12, 22, 32, 33, 34, 43], "decaytreetupleannpid": 4, "decaytreetupledalitz": 4, "dalitz": [4, 43], "decaytreetuplejet": 4, "jet": 4, "decaytreetuplemc": 4, "mc": [4, 5, 8, 13, 17, 22, 23, 27, 28, 32, 33, 36, 41, 42, 44, 47, 48, 50], "decaytreetuplemuoncalib": 4, "muon": [4, 24, 36, 38], "calibr": [4, 6, 11], "decaytreetuplereco": 4, "reconstruct": [4, 6, 8, 10, 11, 12, 21, 26, 28, 31, 32, 33, 38, 47, 50], "decaytreetupletrack": 4, "detail": [4, 5, 7, 11, 12, 13, 14, 21, 22, 23, 24, 26, 30, 35, 44, 45, 49, 52], "regard": 4, "decaytreetupletrigg": 4, "candid": [4, 6, 10, 11, 14, 19, 20, 22, 23, 26, 28, 33, 38, 47, 48, 49, 50], "place": [4, 5, 7, 13, 18, 19, 26, 30, 32, 33, 41, 52, 54, 55], "src": 4, "folder": [4, 5, 8, 13, 23, 30, 55], "within": [4, 5, 6, 7, 8, 13, 22, 23, 24, 36, 38, 46, 54, 55], "easi": [4, 9, 17, 21, 22, 24, 32, 35, 36], "what": [4, 5, 7, 8, 9, 10, 13, 19, 20, 21, 22, 23, 25, 26, 28, 30, 31, 33, 37, 38, 39, 40, 41, 42, 44, 45, 48, 49, 50, 52, 53, 54, 55], "howev": [4, 5, 6, 7, 8, 13, 14, 19, 21, 22, 23, 26, 30, 32, 39, 40, 45, 46, 49, 52, 54, 55, 56], "either": [4, 5, 6, 8, 10, 21, 22, 31, 40, 43, 47, 50, 53, 54, 55], "h": [4, 14, 37], "search": [4, 5, 7, 9, 18, 21, 38, 40, 48, 49, 53, 54], "latest": [4, 8, 10, 12, 13, 19, 23, 38, 40, 42], "doxygen": [4, 12, 21, 22, 35, 36], "option": [4, 5, 6, 12, 13, 14, 17, 18, 19, 21, 22, 23, 28, 30, 31, 33, 37, 40, 42, 43, 44, 45, 46, 47, 51, 52, 53], "case": [4, 5, 8, 11, 12, 13, 14, 17, 18, 19, 21, 22, 23, 25, 27, 30, 33, 34, 39, 40, 41, 42, 44, 46, 48, 50, 54, 55], "exactli": [4, 13, 14, 22, 25, 26, 55], "shortcut": [4, 8, 18, 25], "found": [4, 5, 6, 7, 9, 10, 11, 18, 19, 21, 22, 23, 24, 33, 34, 35, 38, 42, 43, 46, 47, 48, 49, 54], "iparticletupletool": 4, "ieventtupletool": 4, "interfac": [4, 6, 19, 21, 22, 30, 34, 39, 42, 46, 47, 50], "depend": [4, 7, 14, 21, 28, 29, 30, 32, 38, 40, 45, 49], "specif": [4, 5, 7, 10, 11, 12, 14, 18, 21, 22, 23, 25, 29, 33, 34, 37, 39, 40, 43, 44, 45, 47, 48, 50, 55], "test": [4, 6, 9, 12, 13, 21, 30, 34, 37, 38, 39, 40, 44, 46, 47, 53, 54], "same": [4, 6, 8, 10, 11, 12, 14, 17, 18, 20, 21, 22, 23, 24, 26, 30, 32, 33, 34, 35, 36, 37, 38, 39, 41, 43, 45, 46, 50, 52, 54, 55], "dvntupl": [4, 13, 14, 23, 48], "root": [4, 5, 6, 10, 13, 14, 16, 17, 18, 19, 20, 23, 30, 33, 37, 38, 41, 46, 48, 50], "inspect": [4, 8, 14, 16, 19, 23, 30, 37, 40, 48], "tbrowser": [4, 5, 23], "attach": [4, 23], "_file0": [4, 23], "b": [4, 5, 8, 9, 31, 35, 38, 43, 44, 48, 52], "2": [4, 5, 6, 8, 11, 12, 13, 14, 22, 23, 24, 25, 27, 28, 30, 33, 36, 37, 38, 43, 44, 46, 47, 48, 50, 52, 54, 55], "try": [4, 5, 7, 8, 9, 10, 13, 17, 18, 19, 21, 22, 24, 25, 27, 34, 36, 38, 39, 40, 41, 44, 46, 50, 53, 54], "locat": [4, 5, 8, 12, 13, 18, 19, 23, 32, 33, 35, 40, 41, 46, 49, 50, 53, 54], "tupledsttod0pi_d0tokpi": [4, 23, 49], "decaytre": [4, 14], "plot": [4, 6, 14, 24, 50, 54], "doubl": [4, 12, 22], "click": [4, 5, 8, 9, 23, 25, 39, 48], "pick": [4, 12, 13, 22, 38, 39, 41, 46, 50], "bit": [4, 6, 8, 21, 22, 32, 33, 34, 39, 54, 55], "tree": [4, 8, 14, 19, 22, 26, 28, 33, 42, 48, 50], "hybrid": [4, 14, 48], "3": [4, 5, 6, 18, 22, 23, 24, 26, 28, 30, 33, 34, 36, 38, 42, 44, 48, 54, 55], "argument": [4, 12, 14, 19, 22, 27, 30, 32, 34, 37, 40, 49, 50, 51, 52, 55], "call": [4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 27, 30, 31, 32, 34, 37, 38, 39, 40, 48, 49, 50, 53], "recommend": [4, 14, 16, 18, 23, 24, 25, 37, 39, 41], "differ": [4, 5, 6, 8, 10, 11, 12, 13, 14, 20, 21, 23, 25, 26, 28, 30, 32, 35, 37, 38, 45, 46, 47, 50, 52, 53, 54, 55], "dstar_hybrid": 4, "loki_dstar": 4, "d0_hybrid": 4, "loki_d0": 4, "pisoft_hybrid": 4, "loki_pisoft": 4, "preambulo": [4, 33, 46], "properti": [4, 8, 12, 13, 14, 19, 22, 24, 25, 28, 33, 37, 40, 54], "perform": [4, 5, 6, 10, 11, 12, 14, 21, 22, 24, 25, 26, 31, 32, 33, 34, 37, 39, 47, 49, 51], "preprocess": [4, 33], "simplifi": [4, 7, 22, 33, 34, 48], "creat": [4, 6, 7, 8, 9, 10, 12, 13, 14, 19, 21, 22, 23, 24, 28, 30, 31, 32, 34, 37, 38, 39, 40, 42, 44, 46, 47, 49, 50, 51, 52, 53, 54, 55], "combin": [4, 8, 10, 14, 22, 24, 26, 31, 32, 33, 34, 35, 36, 38, 45, 46, 50], "mathemat": [4, 14], "oper": [4, 11, 14, 22, 30, 31, 37, 38, 49, 54, 56], "preambl": 4, "dz": 4, "vfaspf": [4, 22, 33, 35, 36], "vz": 4, "bpv": [4, 22], "track_max_pt": 4, "maxtre": [4, 22, 33, 36], "isbas": [4, 22], "hastrack": [4, 22], "pt": [4, 14, 22, 33, 38, 48, 50], "consist": [4, 6, 10, 11, 12, 23, 38], "pair": [4, 24], "mass": [4, 6, 14, 22, 24, 26, 28, 36, 42, 45, 54], "mass_d0": 4, "child": [4, 14, 19, 22, 33, 35], "dira": [4, 22], "bpvdira": [4, 33], "max_pt": [4, 22], "max_pt_preambulo": 4, "sum_pt_pion": 4, "sumtre": [4, 22], "211": 4, "absid": [4, 22, 33, 35, 36], "n_highpt_track": 4, "nintre": 4, "1500": 4, "mev": [4, 22, 33, 35, 36, 38], "vtx_chi2": 4, "vchi2": [4, 22, 33, 35, 36], "p": [4, 11, 14, 19, 22, 24, 33, 48], "count": [4, 24], "pass": [4, 6, 8, 9, 10, 11, 14, 17, 18, 19, 21, 22, 23, 24, 30, 32, 34, 36, 37, 40, 45, 47, 50, 54, 55], "criteria": [4, 22, 24, 33, 34], "alwai": [4, 5, 6, 8, 10, 13, 21, 22, 23, 37, 38, 40, 43, 50, 54, 55], "offlin": [4, 26, 28, 38, 50], "power": [4, 25, 30, 33, 37], "practic": [4, 5, 20, 22, 39, 54], "ve": [4, 5, 19, 22, 23, 27, 31, 37, 39, 54, 55], "describ": [4, 7, 10, 11, 14, 21, 23, 24, 44], "previous": [4, 22, 23, 24, 34, 39], "dstar_max_pt": 4, "dstar_max_pt_preambulo": 4, "dstar_mass_d0": 4, "d0_mass": 4, "understand": [5, 10, 11, 14, 20, 21, 22, 24, 26, 30, 31, 33, 36, 38, 39, 42, 44, 47, 52], "pre": [5, 12, 28, 30, 33, 34, 40, 43, 46, 47], "great": [5, 7, 13, 23], "rare": [5, 10, 22, 34, 45, 46, 55], "histor": [5, 28, 31], "grid": [5, 6, 10, 16, 18, 19, 20, 25, 27, 28, 30, 33, 37, 38, 40, 51, 52, 54], "off": [5, 7, 13, 22, 45], "larg": [5, 10, 13, 17, 18, 19, 24, 28, 31, 33, 40, 45, 46, 50, 55], "handl": [5, 32, 40, 45, 48, 49, 54], "batch": [5, 28, 40, 51, 53, 54, 55], "resourc": [5, 10, 11, 17, 23, 25, 26, 28, 47, 51, 56], "still": [5, 19, 26, 29, 30, 38, 45, 50, 52], "next": [5, 8, 9, 10, 13, 19, 21, 28, 30, 32, 33, 36, 39, 47, 48, 49, 53, 54], "drawback": 5, "dataset": [5, 17, 18, 23, 24, 27, 30, 37, 47], "especi": [5, 11, 15, 21, 39, 54], "period": [5, 11, 37], "wast": [5, 10, 18], "multipl": [5, 6, 8, 10, 14, 21, 30, 33, 39, 45, 46, 47, 50, 53, 54, 55], "analys": [5, 6, 8, 12, 16, 23, 24, 26, 32, 38], "independ": [5, 12, 16, 22, 38, 40, 47, 50], "produc": [5, 6, 8, 10, 11, 13, 14, 18, 23, 24, 33, 34, 42, 43, 44, 45, 46, 47, 48, 49, 53, 54], "similar": [5, 6, 10, 13, 21, 22, 24, 30, 34, 35, 37, 39, 40, 49, 50, 53, 55], "lost": [5, 50], "preserv": [5, 16, 28], "It": [5, 6, 7, 9, 10, 11, 12, 14, 15, 18, 21, 22, 23, 24, 25, 26, 27, 29, 30, 32, 33, 34, 36, 37, 40, 41, 43, 45, 47, 49, 50, 52, 53, 54, 55, 56], "goal": [5, 6, 7, 24, 28], "centralis": 5, "autom": [5, 40], "much": [5, 7, 8, 10, 11, 13, 21, 22, 23, 24, 25, 26, 30, 33, 37, 45], "process": [5, 6, 7, 8, 10, 12, 13, 14, 19, 20, 21, 23, 24, 27, 28, 30, 31, 32, 33, 34, 38, 41, 48, 54, 55], "record": [5, 6, 8, 10, 12, 36], "prefer": [5, 7, 30, 54, 55], "first": [5, 6, 7, 8, 9, 11, 12, 13, 14, 17, 19, 20, 21, 22, 25, 27, 28, 29, 30, 36, 38, 39, 40, 42, 44, 47, 48, 50, 54, 55], "take": [5, 7, 8, 9, 10, 11, 13, 17, 18, 19, 21, 22, 23, 24, 27, 30, 32, 33, 34, 37, 39, 40, 41, 46, 48, 49, 50, 52, 53, 54], "end": [5, 8, 11, 12, 13, 19, 20, 22, 23, 25, 26, 30, 33, 38, 40, 44, 46, 50, 54, 55], "result": [5, 6, 10, 11, 12, 13, 14, 22, 23, 24, 27, 30, 31, 33, 37, 40, 44, 46, 47, 48, 50, 54, 55], "real": [5, 8, 10, 11, 18, 23, 24, 27, 30, 38, 41, 50, 53], "webpag": 5, "menu": [5, 8, 53], "show": [5, 7, 12, 19, 21, 23, 24, 36, 37, 38, 39, 48, 49, 53, 55], "bar": [5, 8, 24], "interest": [5, 6, 7, 10, 13, 17, 22, 23, 26, 34, 35, 37, 50], "b02dkpi": 5, "tabl": [5, 47], "belong": [5, 19, 38, 39], "row": 5, "displai": [5, 25, 27, 53, 54], "statu": [5, 10, 13, 14, 23, 27, 36, 37, 53, 56], "e": [5, 6, 10, 11, 12, 14, 16, 21, 22, 23, 24, 26, 37, 38, 40, 43, 44, 45, 46, 47, 48, 50, 52, 53, 55], "g": [5, 10, 12, 16, 21, 22, 23, 24, 37, 38, 43, 44, 45, 46, 47, 48, 52, 53, 55], "readi": [5, 6, 10, 13, 19, 23, 25, 33, 45, 49], "2018": [5, 12, 26, 38], "_": [5, 8, 21, 37, 39, 50, 53], "15164022": 5, "magup": [5, 8, 18, 23], "tag": [5, 23, 30, 43, 48], "run1": [5, 38], "run2": [5, 21, 38, 48], "housekeep": 5, "wa": [5, 6, 7, 8, 10, 12, 19, 21, 22, 23, 24, 26, 30, 32, 33, 34, 38, 40, 41, 44, 47, 49, 50, 54], "last": [5, 6, 7, 10, 12, 14, 19, 30, 38, 39, 46, 47, 50], "view": [5, 13, 16, 21, 23, 38, 39, 45, 46, 48, 54], "imag": 5, "below": [5, 7, 13, 14, 24, 25, 30, 38, 45, 48, 53], "coupl": [5, 6, 8, 12, 30, 37, 40, 53, 54, 55], "particularli": [5, 19, 37, 40, 54, 55], "highlight": [5, 33, 34, 54], "magenta": 5, "section": [5, 17, 22, 23, 26, 38, 54], "state": [5, 14, 21, 22, 24, 27, 28, 29, 36, 42, 45, 47, 50, 53], "total": [5, 11, 24, 27, 50, 53, 55], "storag": [5, 10, 11, 18, 20, 26, 38, 40, 50, 52, 54], "output": [5, 6, 10, 12, 13, 14, 18, 21, 22, 23, 24, 26, 32, 33, 34, 35, 36, 37, 38, 40, 41, 49, 51, 52, 53, 55], "input": [5, 6, 8, 12, 13, 18, 19, 22, 23, 32, 33, 34, 35, 36, 37, 38, 40, 41, 48, 49, 51, 52, 55], "dirac": [5, 13, 17, 18, 23, 25, 27, 28, 38, 47, 52], "final": [5, 6, 7, 8, 12, 13, 14, 21, 22, 24, 28, 30, 32, 33, 34, 35, 36, 42, 44, 45, 47, 49, 50, 54, 55], "pfn": 5, "lfn": [5, 17, 37, 38, 40], "visibl": 5, "system": [5, 6, 9, 12, 18, 21, 28, 39, 40, 42, 45, 48, 51, 53, 54, 56], "cvmf": [5, 6, 30, 52, 54, 56], "now": [5, 9, 12, 13, 14, 19, 21, 22, 23, 24, 25, 26, 27, 30, 33, 36, 37, 38, 39, 40, 41, 42, 43, 49, 50, 53, 54, 55], "l": [5, 13, 14, 16, 17, 19, 21, 23, 24, 40, 41, 46, 48], "eoslhcb": [5, 16, 33, 38, 50], "eo": [5, 6, 17, 18, 28, 33, 38, 40, 41, 46, 48, 50, 52, 53], "prod": [5, 33, 38], "collision12": [5, 18], "00121782": 5, "0000": [5, 17, 18, 23, 33, 36, 38], "00121782_00000004_1": 5, "explor": [5, 10, 14, 18, 22, 23, 28, 33, 36, 37], "insid": [5, 19, 21, 22, 23, 33, 34, 37, 39, 40, 53, 54], "anoth": [5, 7, 16, 21, 22, 24, 32, 33, 34, 36, 46, 50, 53, 54, 55], "choic": [5, 8, 18, 21, 30, 37, 41, 54, 55], "go": [5, 8, 10, 12, 14, 22, 23, 24, 25, 36, 39, 40, 43, 50, 53, 54], "step": [5, 6, 7, 8, 9, 10, 11, 12, 20, 22, 23, 24, 25, 28, 30, 31, 33, 34, 35, 36, 38, 39, 40, 42, 43, 45, 47, 48, 53, 54, 55], "simpl": [5, 9, 11, 12, 13, 17, 22, 28, 30, 34, 35, 38, 39, 51, 52, 55], "advanc": [5, 19, 22, 23, 28, 29, 32, 38, 42, 50], "clone": [5, 9, 21, 39, 40, 42], "ssh": [5, 21, 25, 39, 42, 54], "gitlab": [5, 6, 21, 23, 38, 39, 43], "7999": [5, 21, 39], "datapkg": 5, "analysisproduct": 5, "switch": [5, 25, 49, 54], "checkout": [5, 9, 21, 38, 39], "user": [5, 6, 9, 10, 11, 16, 17, 18, 21, 25, 32, 38, 39, 40, 41, 46, 48, 50, 52, 53, 54, 56], "ll": [5, 7, 8, 10, 14, 15, 20, 21, 23, 24, 31, 32, 33, 37, 39, 40, 50, 53, 54, 55], "continu": [5, 12, 27, 28, 37, 42], "j": [5, 13, 18, 24, 27, 30, 37, 40, 43], "psi": [5, 24, 43], "mu": [5, 8, 11, 24, 38, 43, 44, 46, 48], "few": [5, 7, 9, 10, 11, 13, 19, 21, 34, 37, 39, 47, 50, 53, 54], "mkdir": [5, 40], "directori": [5, 13, 16, 17, 19, 21, 23, 30, 37, 39, 40, 53, 54, 55], "editor": [5, 39, 50], "earlier": [5, 13, 23, 30, 39, 43, 53], "troubl": 5, "yaml": 5, "info": [5, 12, 13, 36, 42, 49, 50, 56], "v64r12": 5, "entrypoint": 5, "dv_basic": 5, "extra_opt": 5, "input_typ": 5, "input_raw_format": 5, "5": [5, 18, 22, 27, 30, 36, 38, 43, 46, 47, 48, 53, 55], "simul": [5, 6, 8, 10, 19, 20, 23, 24, 28, 38, 39, 43, 46, 47, 48, 50], "fals": [5, 18, 37, 38, 41, 48, 50], "input_process": 5, "turbopass": 5, "geometry_vers": 5, "run3": 5, "2024": 5, "q1": 5, "v00": 5, "00": [5, 9, 36, 43, 55, 56], "conditions_vers": 5, "lumi": [5, 23, 38, 48], "data_typ": 5, "upgrad": [5, 12, 26, 28, 39, 47], "input_stream": 5, "b2cc": 5, "aidan": 5, "richard": 5, "wiederhold": 5, "wg": [5, 16], "bu2jpsik_24c4_magdown": 5, "bk_queri": 5, "collision24": 5, "beam6800gev": 5, "veloclos": [5, 18], "magdown": [5, 8, 13, 48], "sprucing24c4": 5, "94000000": 5, "dst": [5, 8, 10, 13, 17, 18, 22, 23, 28, 33, 38, 41, 48, 50], "unind": 5, "although": [5, 8, 14, 21, 53, 54], "special": [5, 9, 13, 22, 23, 34, 46], "function": [5, 12, 18, 19, 21, 22, 24, 27, 28, 34, 38, 40, 46, 50, 55], "indent": 5, "those": [5, 6, 14, 15, 17, 21, 22, 23, 24, 29, 30, 33, 34, 36, 37, 46, 47, 50, 52], "read": [5, 6, 7, 12, 13, 17, 21, 23, 24, 25, 28, 36, 41, 42, 52, 53, 54, 55], "bookkeep": [5, 13, 17, 23, 28, 37, 40, 46, 47, 48], "path": [5, 8, 13, 16, 17, 18, 19, 23, 25, 37, 40, 41, 47, 54], "automat": [5, 6, 21, 22, 27, 30, 39, 40, 49, 52, 53, 54, 55], "avoid": [5, 11, 12, 17, 18, 19, 33, 34, 45, 55], "repetit": [5, 33, 34, 55], "choos": [5, 7, 8, 10, 11, 24, 27, 28, 40, 42, 46, 54, 55], "group": [5, 6, 8, 10, 11, 14, 16, 18, 20, 25, 26, 47], "part": [5, 10, 11, 13, 14, 21, 23, 24, 26, 32, 37, 38, 39, 44, 45, 46, 49, 50, 52, 54, 55], "address": [5, 11, 21, 25, 34, 36, 39], "receiv": [5, 7, 11, 15, 40, 54], "These": [5, 9, 10, 12, 20, 21, 26, 27, 28, 29, 30, 31, 34, 40, 50, 51, 53, 54, 55], "regist": [5, 25], "over": [5, 6, 10, 11, 12, 18, 20, 23, 24, 26, 27, 30, 33, 37, 50, 53, 54], "uniqu": [5, 30, 32, 33, 34, 40, 50, 53], "24c4": 5, "magnet": [5, 8, 23, 24, 37], "down": [5, 8, 30, 37, 46, 50, 52, 53, 55], "doesn": [5, 19, 22, 23, 26, 27, 40, 43, 55], "current": [5, 10, 17, 22, 26, 30, 33, 40, 47, 53, 54, 56], "hint": 5, "correct": [5, 6, 14, 30, 32, 41, 48, 49, 54], "solut": [5, 7, 9, 12, 14, 22, 25, 33, 34, 40, 46, 49, 54, 55], "littl": [5, 19, 26, 32, 39, 52, 54], "renam": 5, "bu2jpsik_24c4_magup": 5, "good": [5, 6, 20, 26, 27, 28, 39, 40, 45, 46, 54], "readm": [5, 11], "md": [5, 9, 12], "pertin": 5, "idea": [5, 7, 8, 12, 21, 23, 26, 37, 46], "got": [5, 17], "expect": [5, 6, 14, 18, 19, 24, 36, 39, 41, 52, 54], "done": [5, 6, 9, 10, 12, 13, 14, 17, 18, 19, 21, 22, 24, 30, 33, 35, 38, 39, 43, 46, 47, 49, 50, 53, 54], "lb": [5, 6, 12, 13, 17, 18, 19, 21, 22, 23, 30, 37, 38, 39, 41, 42, 47], "ap": 5, "command": [5, 12, 13, 14, 16, 17, 19, 21, 23, 25, 28, 30, 37, 38, 39, 40, 41, 47, 51, 52, 53, 54, 56], "arg": [5, 30, 37, 40, 54, 55], "help": [5, 6, 7, 13, 15, 18, 21, 22, 25, 26, 27, 33, 34, 37, 52, 53, 54, 55], "messag": [5, 7, 13, 21, 22, 25, 37, 39], "exit": [5, 12, 37, 53, 54], "login": [5, 25], "api": 5, "clean": [5, 21, 24, 52], "render": 5, "valid": [5, 8, 34, 47, 56], "helper": [5, 6, 28, 34], "debug": [5, 19, 21, 22, 32, 36, 54], "interact": [5, 10, 13, 18, 21, 22, 24, 25, 28, 36, 37, 39, 50], "session": [5, 13, 19, 25, 30, 37, 40, 50], "environ": [5, 6, 12, 15, 21, 30, 34, 37, 39, 42, 53, 54, 56], "reproduc": [5, 6, 7, 21], "onlin": [5, 11, 18, 26, 38, 53], "pars": [5, 37, 44], "log": [5, 13, 21, 36, 39, 40, 53, 54, 55], "gaudi": [5, 8, 12, 17, 21, 32, 40, 41, 48], "extract": [5, 10, 17, 24, 35], "hopefulli": [5, 46, 53], "second": [5, 10, 12, 14, 19, 21, 22, 26, 28, 30, 39, 40, 46, 47, 53, 54], "actual": [5, 14, 17, 23, 33, 34, 43, 44, 46], "successfulli": [5, 9, 12, 21, 25, 54], "desir": [5, 23, 41, 45, 47, 49], "rememb": [5, 6, 7, 14, 21, 47, 54], "proxi": [5, 13, 17, 25, 28, 30, 51], "init": [5, 13, 17, 21, 25, 39, 56], "prompt": [5, 14, 19, 37], "sign": [5, 22, 24, 28], "singl": [5, 9, 10, 12, 22, 23, 33, 37, 38, 39, 45, 50, 55], "On": [5, 14, 16, 19, 25, 38, 56], "secur": [5, 11, 56], "saw": [5, 10, 11, 13, 18, 19, 35], "ran": [5, 21, 26, 41], "manual": [5, 12, 52, 55], "complet": [5, 7, 11, 12, 13, 16, 21, 23, 24, 27, 37, 39, 40, 44, 52, 53, 54, 55], "tell": [5, 7, 13, 14, 18, 19, 23, 37, 40, 50, 52, 53, 54, 55], "There": [5, 6, 8, 9, 10, 12, 16, 19, 22, 23, 25, 30, 33, 39, 40, 42, 49, 50, 53, 54, 55], "assort": 5, "someth": [5, 7, 9, 10, 12, 13, 14, 19, 20, 25, 27, 28, 47, 48, 53, 54, 55], "00012345_00006789_1": 5, "everyth": [5, 9, 10, 12, 26, 30, 39, 40, 49], "correctli": [5, 19, 22, 50, 53, 54], "did": [5, 7, 22, 40, 45, 46], "load": [5, 17, 22, 32], "content": [5, 12, 13, 16, 18, 19, 30, 40, 54], "around": [5, 10, 12, 14, 18, 22, 24, 34, 38, 40, 41, 46], "encount": [5, 40, 42], "ask": [5, 8, 10, 14, 17, 20, 21, 23, 25, 26, 28, 40], "mattermost": [5, 7, 40, 52], "channel": [5, 7, 40, 42, 52], "mail": [5, 7, 40, 52], "els": [5, 10, 12, 22, 25, 39, 53], "framework": [5, 6, 8, 11, 12, 22, 28, 31, 33, 35, 45, 47], "coordin": [5, 10, 26], "prepar": [5, 13, 30, 39, 41, 49, 50], "py": [5, 8, 12, 13, 14, 17, 19, 21, 22, 23, 30, 32, 37, 40, 44, 46, 48, 49, 50, 54, 55], "And": [5, 36, 55], "push": [5, 9, 21, 38, 39], "origin": [5, 6, 9, 14, 21, 24, 39, 46, 47], "suitabl": [5, 10, 12, 41, 47], "descript": [5, 21, 23, 24, 37, 40, 47], "label": [5, 8, 25, 47], "ensur": [5, 6, 13, 21, 30, 39, 41, 47, 49, 54], "instruct": [5, 6, 17, 21, 25, 28, 38, 43], "templat": 5, "won": [5, 12, 21, 37, 41], "pipelin": [5, 6], "tab": [5, 8, 23], "1958388": 5, "At": [5, 8, 11, 12, 21, 23, 24, 30, 33, 39, 46], "bottom": [5, 8, 21, 25, 32, 44], "progress": [5, 53, 54], "gitlab_runner_api": 5, "dev42": 5, "g457dbd5": 5, "id": [5, 13, 19, 21, 22, 27, 30, 37, 47, 48, 49, 53, 54, 55], "minut": [5, 47, 48, 53, 54], "being": [5, 6, 7, 10, 11, 21, 23, 33, 36, 37, 38, 45, 54, 55], "standalon": [5, 20], "apd": 5, "analysisdata": 5, "24c4_magdown_data": 5, "mention": [5, 7, 19, 21, 30], "reach": [5, 11, 12, 15, 19, 37, 45, 52], "anyon": [5, 9], "present": [5, 8, 9, 10, 19, 33, 34, 38, 50], "meet": [5, 15], "touch": 5, "conven": 5, "feedback": [5, 38], "structur": [6, 19, 43, 44, 49, 50, 54], "procedur": [6, 38, 47], "often": [6, 7, 8, 10, 12, 19, 21, 23, 27, 37, 38, 39, 40, 41, 43, 54], "develop": [6, 7, 11, 13, 28, 29, 38, 40, 45, 51], "retriev": [6, 19, 22, 50], "sampl": [6, 8, 11, 24, 27, 28, 41, 42, 44, 45, 46, 47], "remind": 6, "stage": [6, 26, 29, 30, 38, 52], "strip": [6, 8, 10, 12, 18, 19, 21, 22, 23, 26, 28, 31, 32, 33, 34, 35, 36, 38, 47, 48, 49, 50], "turbo": [6, 8, 11, 23, 26, 32, 36, 38, 50], "stream": [6, 10, 11, 12, 18, 23, 26, 35, 36, 38, 41, 49, 50], "spruce": [6, 11], "hlt2": [6, 11, 26, 31, 34, 38, 50], "Their": 6, "save": [6, 8, 10, 11, 12, 17, 23, 25, 26, 30, 33, 36, 37, 40, 45, 46, 48, 50, 54, 55], "disk": [6, 10, 11, 16, 18, 26, 37, 38, 39, 46], "contain": [6, 8, 10, 12, 14, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 44, 46, 48, 50, 53, 54, 55], "preselect": 6, "complex": [6, 10, 12, 19, 27, 28, 34, 36, 37, 46, 49], "typic": [6, 10, 14, 19, 21, 22, 23, 24, 32, 33, 43, 45, 53], "decis": [6, 8, 11, 12, 19, 23, 34, 38, 41, 50, 52], "flag": [6, 8, 11, 19, 30, 37, 44, 47, 53], "sole": [6, 46], "come": [6, 10, 12, 14, 19, 26, 30, 33, 35, 37, 53], "observ": [6, 7, 11, 45, 46, 55], "truth": 6, "entir": [6, 11, 21, 26, 39, 46], "detector": [6, 10, 11, 12, 23, 24, 26, 38, 42, 46, 47, 48, 50], "effect": [6, 24, 45, 52, 54, 55], "qualiti": [6, 10, 14, 22, 24, 26], "studi": [6, 8, 10, 12, 32, 45], "lxplu": [6, 12, 13, 16, 18, 21, 23, 25, 30, 40, 42, 52, 53, 56], "task": [6, 9, 10, 11, 12, 14, 29, 30, 32, 37, 51], "via": [6, 8, 13, 14, 16, 17, 18, 19, 22, 24, 25, 30, 32, 40, 43, 44, 47, 49, 52], "ganga": [6, 13, 20, 27, 28, 30, 39, 41, 52], "product": [6, 13, 14, 19, 22, 23, 24, 26, 28, 39, 41, 44, 45, 46, 47, 48], "control": [6, 10, 21, 28, 39, 42], "short": [6, 15, 24, 30, 31, 39, 53], "macro": 6, "remot": [6, 17, 21, 23, 25, 39, 52, 54], "machin": [6, 13, 21, 25, 38, 40, 54], "than": [6, 8, 9, 14, 22, 24, 25, 26, 30, 37, 38, 43, 44, 46, 49, 50, 54, 55], "friendli": [6, 38], "concept": [6, 10, 11, 12, 30, 32, 33, 52], "cover": [6, 20, 24, 26, 37, 54], "expand": [6, 8, 55], "collabor": [6, 12, 20, 23, 39], "popular": [6, 18], "numpi": 6, "panda": 6, "hep": 6, "support": [6, 10, 11, 12, 18, 25, 40, 47, 50, 53, 54], "extern": [6, 35, 47], "commun": 6, "exhaust": 6, "feel": [6, 7], "twin": 6, "sister": 6, "pyroot": 6, "scikit": 6, "big": [6, 7, 32], "ecosystem": 6, "complementari": 6, "interoper": 6, "modul": [6, 22, 30, 33, 34, 37], "uproot": [6, 23], "awkward": 6, "arrai": [6, 11, 14, 22, 30, 33], "manipul": [6, 10, 31, 37, 40], "nest": 6, "arbitrari": [6, 26], "length": 6, "mix": [6, 51, 52], "miss": [6, 7, 24, 37], "idiom": 6, "boost": 6, "histogram": [6, 12, 14, 24, 30], "14": [6, 12, 22, 36], "iminuit": 6, "jupyt": 6, "minuit2": 6, "mplhep": 6, "matplotlib": 6, "roofit": 6, "toi": [6, 24], "zfit": 6, "integr": [6, 21, 23, 39, 46], "withth": 6, "might": [6, 7, 8, 10, 14, 17, 20, 21, 22, 23, 24, 31, 37, 38, 42, 45, 46, 47, 53, 55], "held": [6, 53, 55], "dpa": 6, "proce": [6, 14, 19, 24, 37], "effici": [6, 10, 11, 12, 14, 20, 21, 22, 23, 32, 34, 38, 40, 45, 46, 50], "accept": [6, 8, 23, 36, 38, 40, 44, 46, 50], "identif": [6, 26, 38], "multivari": 6, "signal": [6, 8, 10, 11, 14, 24, 27, 34, 38, 42, 44, 45, 46, 47, 48, 50], "background": [6, 15, 27], "separ": [6, 30, 31, 32, 55], "callibr": 6, "trackcalib": 6, "pidcalib2": 6, "central": [6, 10, 11, 21, 24, 33, 41, 56], "directli": [6, 8, 9, 21, 22, 26, 30, 40, 41, 43], "match": [6, 10, 14, 22, 23, 30, 47, 48, 50, 55], "possibl": [6, 7, 8, 10, 11, 14, 21, 22, 24, 27, 32, 37, 45, 46, 54], "estim": [6, 14, 24], "per": [6, 10, 12, 14, 27, 37, 43, 55], "basi": [6, 22], "resolut": [6, 14, 24, 45, 46], "put": [6, 7, 12, 18, 19, 20, 21, 23, 32, 33, 35, 36, 37, 39, 40, 49, 52, 53, 54, 55], "togeth": [6, 10, 11, 20, 24, 30, 33, 48, 52], "paramet": [6, 14, 22, 30, 34, 37, 43, 55], "acquir": 6, "pwg": 6, "success": [6, 36], "scientif": 6, "transpar": 6, "research": 6, "guidelin": [6, 12, 47, 51], "usign": 6, "facil": 6, "implement": [6, 10, 11, 12, 14, 22, 27, 30, 38, 44, 45, 46, 47, 50], "6": [6, 8, 13, 36, 47, 48, 54], "techniqu": 6, "meticul": 6, "write": [6, 7, 10, 12, 19, 20, 22, 31, 32, 36, 37, 38, 41, 46, 52, 54, 55], "clear": [6, 17, 20, 23, 33, 38, 48, 54], "secondli": [6, 55], "area": [6, 11, 16, 18, 39, 52, 53, 54], "recent": [6, 7, 22, 52], "qee": 6, "trace": 6, "own": [6, 8, 9, 10, 22, 28, 33, 35, 36, 37, 38, 46, 52, 53, 54, 55], "too": [6, 10, 14, 34, 45], "refer": [6, 14, 20, 21, 27, 30, 47, 53, 54], "sequenc": [6, 32, 33, 36, 38, 41, 49], "quickli": [6, 10, 18, 19, 21, 40, 52], "yourself": [6, 7, 13, 20, 31, 37, 46, 48], "month": 6, "hard": [6, 7, 34], "snakemak": 6, "workflow": [6, 21, 30, 34, 36, 37, 39], "detect": [6, 19], "hierarchi": 6, "aim": [6, 11, 15, 21], "begin": [6, 7, 10, 20, 24, 29, 31, 44], "upload": [6, 25, 30, 39, 40], "sofrwar": 6, "commonli": [6, 23, 24, 34, 37, 47, 54, 56], "docker": 6, "conda": [6, 18, 30], "enviro": 6, "latter": [6, 10, 12, 21, 34, 37, 45, 54], "virtual": [6, 10, 32, 56], "aka": [6, 46], "eventu": [7, 8, 15, 53], "stuck": [7, 19, 20, 27], "unstuck": 7, "love": 7, "tip": [7, 13, 18], "improv": [7, 9, 11, 14, 26, 30, 34], "chanc": [7, 9, 42], "answer": [7, 40], "bet": [7, 8], "talk": [7, 40, 47], "altern": [7, 14, 17, 28, 55, 56], "chat": 7, "dedic": [7, 11, 21], "stack": [7, 21, 23], "overflow": 7, "googl": [7, 9, 54], "glossari": [7, 28], "broad": [7, 8, 14], "rang": [7, 14, 30, 34, 55], "relat": [7, 21, 22, 30, 34, 40, 54], "abbrevi": 7, "definit": [7, 24, 26, 37, 44], "offici": [7, 21], "faq": [7, 13, 18, 22, 25, 48], "experiment": 7, "discours": 7, "websit": [7, 9, 10, 20, 21, 28, 39, 42, 44, 46], "focus": [7, 29], "hour": [7, 21, 54, 56], "dai": [7, 25, 39, 54], "run2operationsummari": [7, 26], "twiki": [7, 10, 11, 17, 21, 22, 23, 26, 38, 39, 41, 45, 46, 48, 49], "titl": [7, 39], "rest": [7, 13, 26, 27, 38, 47], "struggl": [7, 12], "better": [7, 14, 26, 33, 54], "sentenc": 7, "gramar": 7, "spell": 7, "brainer": 7, "impress": 7, "someon": [7, 9, 25, 39], "effort": [7, 22, 26], "aren": [7, 29, 31, 54], "comfort": 7, "english": 7, "friend": [7, 21], "proof": 7, "thought": 7, "provok": 7, "chew": 7, "despit": 7, "reput": 7, "hostil": 7, "tone": 7, "air": 7, "arrog": 7, "toward": 7, "seem": [7, 54], "unwil": 7, "think": [7, 8, 10, 12, 20, 37, 45, 49, 55], "themselv": [7, 32, 50], "homework": 7, "volunt": 7, "busi": [7, 30], "live": [7, 9, 24], "lot": [7, 8, 10, 12, 15, 17, 18, 20, 21, 23, 24, 26, 30, 33, 37, 41, 50, 52, 53, 55], "filter": [7, 8, 10, 11, 12, 14, 22, 23, 31, 32, 33, 34, 38, 47], "ruthlessli": 7, "ok": [7, 13], "technic": [7, 22, 49], "compet": 7, "skill": [7, 33], "becom": [7, 22, 24, 34, 55], "alert": [7, 54], "willing": 7, "partner": [7, 22, 39], "archiv": [7, 40, 41], "forum": 7, "Or": [7, 42], "tri": [7, 22, 24, 34, 52], "demonstr": [7, 37], "lazi": 7, "explain": [7, 20, 22, 33, 38, 39, 52], "why": [7, 10, 19, 20, 22, 24, 28, 31, 34, 38, 42, 49, 50], "occur": [7, 46, 52], "wrote": 7, "guid": [7, 9, 25, 28, 39, 40, 52, 56], "verifi": [7, 47], "av": 7, "precis": [7, 11, 45], "dump": [7, 19, 38], "relev": [7, 11, 21, 24, 26, 30, 54], "vagu": 7, "Being": [7, 10, 23, 40], "least": [7, 24, 50], "three": [7, 8, 24, 30, 38, 53, 54], "seen": [7, 22, 30, 34, 37, 40, 45, 55], "invest": 7, "two": [7, 8, 10, 11, 13, 14, 15, 16, 21, 22, 23, 24, 26, 30, 32, 33, 34, 37, 38, 40, 43, 45, 46, 50, 54, 55], "refin": 7, "workaround": [7, 17], "repli": 7, "solv": [7, 12, 32, 41], "letter": 7, "futur": [7, 45, 47], "chime": 7, "abl": [7, 10, 11, 12, 17, 19, 20, 22, 30, 37, 39, 40, 42, 53, 54, 55, 56], "taken": [7, 10, 49], "folow": 7, "excel": [7, 9, 37], "god": 7, "smart": [7, 23, 45], "eric": 7, "raymond": 7, "perfect": 7, "jon": 7, "skeet": 7, "flow": [8, 20, 28, 30, 31, 32], "variou": [8, 10, 11, 16, 24, 42, 45, 48], "crucial": [8, 11, 28, 42], "catalogu": 8, "initi": [8, 12, 21, 39, 43, 48, 49, 54], "sort": 8, "lead": [8, 9, 14, 33, 45, 46], "tutori": [8, 11, 12, 14, 30, 39, 50, 51, 52], "bookeep": 8, "drop": [8, 13, 37, 40, 53], "easier": [8, 21, 46], "2016": [8, 13, 17, 19, 23, 33, 37, 48, 50], "correspondingli": 8, "icon": 8, "window": [8, 23, 25, 30, 36, 48], "27163002": [8, 13], "dst_d0pi": [8, 44], "kk": 8, "decprodcut": [8, 44, 46], "numer": [8, 50], "represent": [8, 22], "fulli": [8, 10, 11, 21, 43], "Not": [8, 47], "subfold": 8, "polar": [8, 23, 24, 37, 43], "beam6500gev": [8, 13, 48], "nu1": [8, 13, 48], "25n": [8, 13, 48], "pythia8": [8, 13, 45, 47, 48], "sometim": [8, 12, 21, 35, 43, 56], "newer": [8, 18, 47, 48], "mont": [8, 10, 20, 22, 23, 42, 48], "carlo": [8, 10, 20, 22, 23, 42, 48], "liason": 8, "advic": [8, 54], "sim09b": [8, 47], "sim09c": [8, 13, 47, 48], "sim09f": [8, 47], "redecay01": 8, "trig0x6138160f": [8, 13, 48], "largest": [8, 22], "usabl": [8, 32, 45, 48], "word": [8, 21, 22, 23], "wherebi": [8, 26], "thrown": [8, 26], "awai": [8, 22, 26], "allstream": [8, 13, 17, 19, 22, 23, 33, 35, 36, 41, 49, 50], "entri": [8, 14, 18, 33, 55], "button": [8, 9, 25, 39], "download": [8, 13, 18, 19, 21, 23, 25, 28, 30, 33, 37, 40, 41, 54], "again": [8, 14, 17, 22, 24, 25, 27, 30, 32, 33, 36, 37, 38, 39, 46, 55], "pop": [8, 23], "somewher": [8, 18, 22, 40, 54], "field": [8, 11, 23, 24, 44], "green": 8, "plu": [8, 49], "straight": [8, 22, 49, 54], "evt": [8, 19, 22, 50], "std": [8, 22], "press": [8, 23, 53], "semilepton": [8, 18, 38, 43], "lambda_": 8, "nu": 8, "pk": 8, "decfil": [8, 28, 42, 43, 46], "mistak": [9, 13, 20, 36, 54], "along": [9, 34, 37, 46, 52, 54], "until": [9, 11, 19, 25, 36, 45, 46, 47, 53], "point": [9, 10, 12, 14, 18, 24, 30, 50, 53, 55], "qualifi": 9, "probabl": [9, 22, 24], "sever": [9, 10, 12, 14, 21, 23, 24, 27, 30, 32, 33, 35, 38, 40, 45], "outdat": 9, "soon": [9, 21, 53], "monument": 9, "advantag": [9, 10, 14, 19, 30, 31, 32, 34, 38], "github": [9, 20, 29, 40, 51], "spot": [9, 20], "wrong": [9, 14, 22, 23, 30, 43, 44, 53, 54], "tracker": [9, 36], "super": 9, "broken": [9, 30, 54], "increas": [9, 11, 17, 21, 26, 45, 46, 47, 52], "visit": [9, 21, 25, 28, 39, 55], "yourusernam": 9, "com": [9, 40], "upper": [9, 22, 48, 54], "clever": [9, 17], "basic": [9, 21, 30, 32, 33, 38, 39, 42, 44, 45, 52, 53], "bold": 9, "_italic_": 9, "ital": 9, "engin": [9, 42], "www": 9, "dilling": 9, "past": [9, 10, 17, 42], "replac": [9, 10, 11, 13, 14, 19, 21, 23, 25, 27, 28, 38, 39, 40, 43, 54], "typo": 9, "ing": 9, "txt": [9, 21, 30, 38, 39, 40, 43, 54, 55], "pip": 9, "r": [9, 50, 54, 55, 56], "besid": [9, 11], "pandoc": 9, "satisfi": [9, 29, 33], "preview": 9, "_site": 9, "webserv": 9, "duplic": [9, 33, 40], "happi": [9, 15, 38, 39], "er": 9, "congratul": [9, 21], "hadron": [10, 11, 24, 43, 50], "collid": [10, 24], "proton": [10, 20, 24, 26, 31], "collis": [10, 12, 20, 23, 24, 26], "40": [10, 11], "million": [10, 23], "huge": [10, 46], "amount": [10, 18, 46, 52, 54], "fact": [10, 14, 22, 33], "tb": 10, "everi": [10, 13, 14, 19, 21, 30, 37, 39, 43, 45, 47, 50], "That": [10, 21, 23, 26, 50], "price": 10, "high": [10, 11, 23, 24, 26, 28, 38, 52], "instead": [10, 12, 13, 14, 16, 17, 18, 21, 22, 24, 25, 34, 36, 37, 39, 40, 41, 45, 46, 50, 54, 55], "rais": [10, 42], "accur": 10, "organ": [10, 12, 25, 32, 49, 56], "bunch": [10, 11, 12, 24], "cross": [10, 11, 12, 26], "flexibl": [10, 11, 12, 23, 30, 45, 55], "flexibli": [10, 11, 12, 22], "recompil": [10, 12, 21, 46], "mostli": [10, 39], "due": [10, 12, 22, 27, 33, 54], "becaus": [10, 11, 12, 13, 19, 21, 22, 24, 26, 27, 30, 32, 33, 34, 37, 39, 41, 43, 50, 54, 55], "arriv": [10, 25], "took": 10, "thousand": 10, "design": [10, 12, 21, 22, 24, 30, 32], "maximis": 10, "l0": [10, 11, 34, 38], "hardwar": [10, 11, 38], "hlt": [10, 26, 28, 39, 50], "moor": [10, 11, 38], "raw": [10, 11, 14, 38, 40, 48, 50], "hit": [10, 12, 21, 24, 37, 38, 48], "cluster": [10, 11, 53, 54, 55], "brunel": [10, 26, 31, 50], "\u00b5dst": [10, 23, 32], "micro": 10, "space": [10, 14, 16, 17, 18, 24, 26, 37, 39, 44, 46, 52], "speed": [10, 13, 21, 38, 42, 47], "charm": [10, 11, 14, 44, 49, 50], "dimuon": [10, 24], "150kb": 10, "concern": 10, "construct": [10, 34, 37, 55], "50kb": 10, "discard": [10, 38], "overview": [10, 12, 30, 38, 45, 48, 53], "slightli": [10, 13, 14, 23, 54], "between": [10, 11, 12, 14, 24, 26, 30, 32, 39, 40, 45, 46, 47, 50, 52, 54], "calcul": [10, 12, 14, 22, 39, 50, 54], "benefici": 10, "defici": 10, "hadronis": 10, "ultim": 10, "gauss": [10, 28, 42, 44, 45, 46], "pythia": [10, 45, 46, 47, 48], "powheg": 10, "evtgen": [10, 43, 44, 45, 46, 47], "geant4": [10, 47, 48], "whilst": [10, 47], "propag": [10, 45], "convert": [10, 12, 38, 54], "mimic": 10, "bool": [10, 22], "close": [10, 12, 24, 27], "simpler": [10, 54], "visualis": 10, "monolith": 10, "split": [10, 13, 28, 30, 33, 42], "disadvantag": [10, 14, 31], "farm": [10, 11, 38], "computation": [10, 11, 46], "intens": [10, 38, 52], "campaign": [10, 41], "identifi": [10, 19, 40], "sxrypz": 10, "digit": [10, 38, 44, 47], "x": [10, 22, 23, 25, 37, 40, 48, 53], "major": [10, 47], "restrip": [10, 41], "y": [10, 22, 25, 37, 40], "releas": [10, 12, 13, 21, 38, 46, 47, 56], "year": [10, 23, 37, 47, 48], "2012": [10, 26], "2011": 10, "s21r0p1": 10, "s21r1p2": 10, "z": [10, 22, 37, 46, 47], "increment": 10, "hand": [10, 19, 20, 43], "s28": 10, "s21r1": 10, "addition": [10, 22, 32, 34, 41, 45, 56], "cut": [10, 22, 32, 33, 34, 36, 38, 41, 42, 44, 47], "d2hhpromptdst2d2kklin": [10, 19, 22, 23, 34, 35, 49], "prove": [11, 52], "itself": [11, 44, 46, 53], "heavi": [11, 24], "flavour": [11, 24, 54], "extend": [11, 12, 22, 37, 41], "core": [11, 21, 28, 30, 54], "programm": 11, "electroweak": 11, "target": [11, 39], "incred": 11, "led": 11, "500": [11, 22, 38], "paper": [11, 14, 24], "breakthrough": 11, "discoveri": 11, "violat": 11, "b_": [11, 24], "among": [11, 21, 39, 55], "higher": [11, 24, 26, 52], "50": [11, 45, 46, 48], "mathrm": [11, 24, 50], "fb": 11, "instantan": 11, "luminos": [11, 23], "factor": [11, 15, 21, 43, 45, 52, 54], "five": 11, "capabl": [11, 26, 32, 54], "occup": [11, 45, 48], "equip": 11, "granular": 11, "radiat": [11, 28, 42], "toler": 11, "bring": [11, 25], "signific": [11, 45, 55], "front": [11, 52], "readout": [11, 24], "electron": [11, 24, 31], "sub": [11, 16, 38, 46, 49, 50, 53], "rate": [11, 26, 38, 46], "mhz": [11, 38], "photodetector": 11, "rich1": 11, "layout": 11, "redesign": 11, "move": [11, 16, 18, 40], "Such": [11, 17, 19, 55], "low": [11, 13], "achiev": [11, 15, 21, 23, 30, 32, 34, 35, 38, 55], "tight": [11, 45, 46], "threshold": [11, 30, 45], "p_": [11, 22], "e_": 11, "ineffici": [11, 40], "bottleneck": 11, "hlt1": [11, 31, 34, 38, 50], "enabl": [11, 19, 25, 43, 48, 52, 54], "averag": [11, 24], "non": [11, 54], "empti": [11, 12, 34, 54], "30": [11, 30, 36, 38, 45], "trivial": 11, "challeng": [11, 12, 14, 38], "alreadi": [11, 12, 18, 19, 20, 23, 31, 32, 33, 37, 40, 41, 44, 45, 49, 55, 56], "dataflow": 11, "lectur": 11, "partial": [11, 21], "reduc": [11, 24, 27, 38, 42, 52], "expens": [11, 46], "inher": 11, "paralleliz": 11, "allen": 11, "gpu": 11, "subdetector": [11, 38], "acquisit": 11, "daq": [11, 36, 48], "gate": 11, "fpga": [11, 38], "card": 11, "pcie40": 11, "builder": [11, 36], "eb": 11, "piec": [11, 33, 34], "fragment": 11, "form": [11, 14, 24, 26, 30, 43, 46, 50], "packet": 11, "eff": [11, 36], "suit": 11, "easili": [11, 21, 30, 32, 36, 46, 56], "greatli": 11, "network": [11, 25], "impos": [11, 46], "cuda": 11, "platform": [11, 12, 13, 21, 30, 40, 41], "mind": [11, 12, 34], "maxim": [11, 27, 32], "thread": 11, "safe": 11, "memori": [11, 12, 30, 54], "parallel": [11, 26, 27], "buffer": [11, 38], "constant": [11, 28, 42, 44], "determin": [11, 33, 38, 50, 52, 55], "bandwidth": 11, "tape": [11, 38], "10": [11, 22, 33, 36, 45, 46, 48], "gb": [11, 39], "baselin": 11, "approxim": [11, 38], "significantli": [11, 18], "smaller": [11, 23], "wherea": [11, 40], "persistreco": [11, 26], "extra_output": 11, "ecal": 11, "neutral": [11, 24, 31, 36], "passthrough": 11, "undergo": 11, "tighter": 11, "6gb": 11, "10gb": [11, 17], "interchang": 11, "irrelev": 11, "thor": [11, 22], "funtupl": 11, "tupletool": [11, 14, 21, 22, 28], "transit": [11, 44], "demand": [11, 19, 21], "longer": [11, 12, 46, 54], "moment": [11, 27, 50], "migrat": [11, 54], "afterward": [11, 17, 35, 52], "depric": 11, "davincitutori": 11, "launch": [12, 13], "imagin": [12, 30, 31, 36, 45, 48, 54], "apart": [12, 27, 30], "worth": [12, 22, 24, 55], "collect": [12, 17, 42], "affect": [12, 14, 21], "datatak": 12, "jump": [12, 21, 39], "loop": [12, 19, 23, 27, 45, 50], "individu": [12, 17, 21, 27, 30, 32, 38, 39, 48, 55], "almost": [12, 13, 38, 40, 46, 55], "sens": [12, 14, 22, 23, 50], "hold": [12, 53], "global": [12, 21, 39, 42], "eventloop": 12, "transient": 12, "vertic": [12, 14, 19, 22, 23, 24], "te": [12, 19, 23, 32, 33, 36, 41], "rec": [12, 19, 22, 36, 48], "myparticl": 12, "class": [12, 22, 23, 30, 32, 33, 34, 36], "insert": [12, 36, 39, 41, 43], "distanc": [12, 22, 24], "primari": [12, 14, 22, 24, 26, 33, 34, 36], "string": [12, 14, 21, 22, 23, 38], "integ": 12, "comprehens": 12, "checklist": [12, 28], "v45r8": [12, 13, 19, 21, 22, 23], "gaudirun": [12, 21, 23, 32, 48], "lxplus707": 12, "thu": [12, 22], "sep": 12, "19": [12, 36], "17": [12, 36], "08": [12, 25], "2019": [12, 46, 48], "applicationmgr": [12, 22], "histogrampersi": 12, "eventselector": [12, 36], "eventloopmgr": 12, "stop": [12, 30, 32, 34], "toolsvc": [12, 19, 22, 50], "termin": [12, 13, 19, 21, 25, 53, 54, 56], "didn": [12, 40, 42], "regular": [12, 26, 27, 53], "teach": [12, 13, 20, 29], "options1": 12, "options2": 12, "throughout": [12, 25, 26], "repeat": [12, 15, 21], "v50r1": 12, "revis": 12, "x86_64": [12, 13, 21, 30, 41], "centos7": [12, 13, 21, 30, 54], "gcc8": [12, 13, 30], "opt": [12, 13, 21, 30, 37, 41], "vxxrypz": 12, "hsf": 12, "tn": 12, "01": [12, 22, 40], "fail": [12, 13, 25, 27, 28, 30, 34, 37, 45, 46], "rc": 12, "bashrc": [12, 56], "norc": 12, "alias": 12, "ctrl": [12, 25, 53], "behind": [12, 14, 22, 23, 30, 32, 54], "setupproject": 12, "across": [12, 21, 27, 33, 37, 50], "nice": [12, 19, 23, 37, 41], "benefit": 12, "equival": [12, 13, 22, 33, 54, 55], "wait": [13, 25, 26, 52, 53], "ntuple_opt": [13, 21, 23], "reco16": [13, 48], "turbo03": [13, 48], "stripping28r1noprescalingflag": 13, "brows": [13, 19, 21, 23, 39], "certif": [13, 17, 25, 28, 51], "password": [13, 17, 21, 25], "ipython": [13, 19, 22, 30, 37, 40], "built": [13, 19, 22, 24, 30, 32, 44], "myapp": 13, "preparegaudiexec": [13, 30], "mypath": 13, "bkpath": [13, 30], "bkqueri": [13, 18, 30, 37], "dqflag": [13, 30], "getdataset": [13, 18, 30], "inputdata": [13, 18, 40], "backend": [13, 18, 27, 28, 37, 40], "splitter": [13, 27, 30], "splitbyfil": [13, 27, 30], "filesperjob": [13, 27, 30], "outputfil": [13, 18, 30, 37, 40, 55], "localfil": [13, 18, 30, 40], "simultan": [13, 24], "davincidev": [13, 21, 30], "app": 13, "env": [13, 30], "davincidev_v45r8": 13, "sent": [13, 38, 52], "yet": [13, 54], "ship": [13, 16], "gcc": 13, "compil": [13, 21, 39, 44], "8": [13, 26, 36, 45, 48, 52, 54, 55], "gaudiexec": [13, 30, 37, 39], "slc6": [13, 41, 54], "gcc62": [13, 41], "properli": [13, 23, 32, 53], "declar": 13, "prone": 13, "tediou": 13, "print": [13, 17, 19, 22, 23, 25, 27, 33, 36, 37, 40, 42, 48, 50, 53, 54], "consol": 13, "jobid": 13, "concret": 13, "assum": [13, 19, 25, 40, 48, 56], "787": [13, 18, 27], "finish": [13, 26, 27, 33, 37, 40, 53, 54], "happen": [13, 19, 22, 24, 30, 36, 40], "xx": 13, "mb": 13, "remain": [13, 45, 47], "outputdir": [13, 18], "peek": [13, 40], "tmp": [13, 25], "setup": [13, 21, 25, 38, 39, 42, 56], "1000": [13, 23, 30, 36, 38], "subjob": [13, 18, 28, 30, 37, 40], "grumpi": 13, "expert": 13, "potenti": [13, 55], "prioriti": [13, 52, 53], "fitter": [14, 54], "constraint": 14, "refit": 14, "hypothesi": [14, 24, 28, 31], "incorpor": 14, "momenta": [14, 24], "repres": [14, 15, 22, 23, 24, 32, 47, 55], "fulfil": [14, 49], "assumpt": 14, "invari": [14, 22, 24, 45, 54], "kaon": [14, 22, 23, 24, 31, 32, 33, 34, 35, 36], "constrain": 14, "boundari": 14, "tupletooldecaytreefitt": 14, "kalman": 14, "arbitrarili": 14, "chosen": [14, 50], "consd": 14, "constraintooriginvertex": 14, "daughterstoconstrain": 14, "intermedi": [14, 34], "stabl": [14, 21, 24, 31, 46, 47], "updatedaught": 14, "dtf_fun": 14, "loki_dtffun": 14, "dtffun_dstart_p": 14, "dtffun_dstar_pt": 14, "dtffun_dstar_m": 14, "dtffun_dtf_chi2": 14, "dtf_chi2": 14, "dtffun_dtf_ndof": 14, "dtf_ndof": 14, "dtffun_d0_m": 14, "dtffun_d0_p": 14, "dtffun_d0_px": 14, "px": [14, 22, 48], "dtffun_d0_pi": 14, "dtffun_d0_pz": 14, "pz": [14, 22, 48], "boolean": [14, 27, 54], "third": [14, 50], "particle1": 14, "particle2": 14, "loki__hybrid__dict2tupl": 14, "awar": [14, 38, 42], "care": [14, 23, 32, 34, 39, 45, 49, 54], "ipchi2_ownpv": 14, "forc": [14, 44, 47], "supervisor": 14, "doubt": 14, "tupledsttod0pi_d0tokk": [14, 23, 36], "startview": 14, "dstar_m": 14, "gev": [14, 22, 24, 43, 46], "_mm": 14, "confusingli": 14, "_m": 14, "sum": [14, 22, 24, 36, 43], "extrapol": 14, "back": [14, 24, 36, 40, 52, 53, 54, 55], "act": [14, 18, 33, 47], "angl": [14, 22], "nomin": [14, 45], "dstar_consd_m": 14, "unphys": 14, "arrow": 14, "draw": 14, "pipe": 14, "tv__tree": 14, "200": [14, 55], "2000": [14, 22, 41], "2030": 14, "149": 14, "73": 14, "spectrum": 14, "hypothes": [14, 49], "dstar_consd": 14, "xxx": 14, "plai": [14, 22, 30, 40], "dstar_consd_d0_m": 14, "100": [14, 19, 30, 33, 36, 38, 44, 46, 54], "1800": 14, "1900": 14, "128": [14, 36], "onto": 14, "pdg": [14, 22, 43], "converg": 14, "chi2": [14, 22], "told": [14, 46], "examin": 14, "consdkpi": 14, "pion": [14, 22, 24, 31, 32, 33, 34, 35, 36, 49], "meson": [14, 24, 31, 36, 49], "dictionari": [14, 33, 49, 50], "generalis": 14, "bachelor": 14, "mechan": 14, "explicit": [14, 32, 34, 49], "interpret": [14, 22], "compar": [14, 21, 22, 30, 33, 34, 38, 41, 45, 46, 47, 50], "outcom": 14, "exercis": [14, 33, 49], "ntuple_dtf1": 14, "ecgd": 15, "offic": 15, "member": [15, 49, 50], "thrive": 15, "experienc": 15, "discrimin": 15, "ground": 15, "creed": 15, "cultur": 15, "physicist": [15, 19, 31], "wish": 15, "escap": 15, "precari": 15, "life": [15, 19], "perman": 15, "phone": 15, "mount": [16, 18], "fuse": [16, 18], "workspac": [16, 17], "cernbox": 16, "1tb": 16, "2tb": [16, 18], "site": [16, 21, 27, 30, 37, 40, 56], "al": 16, "myfavouritefil": 16, "reliabl": [16, 23], "cp": 16, "xrootd": [16, 40, 56], "protocol": [16, 21, 33, 38, 39, 42], "xrdcp": [16, 17, 41], "mc_2016_27163002_beam6500gev2016magdownnu1": 17, "625nspythia8_sim09c_trig0x6138160f_reco16_turbo03_stripping28r1noprescalingflagged_allstream": 17, "iohelp": [17, 19, 23, 33, 38, 48], "inputfil": [17, 19, 23, 30, 33, 38, 40, 48, 55], "00070793": [17, 23], "00070793_00000001_7": [17, 19, 22, 23, 41], "00070793_00000002_7": [17, 23], "00070793_00000003_7": 17, "00070793_00000004_7": 17, "ogic": 17, "f": [17, 19, 37, 54], "il": 17, "n": [17, 19, 24, 34, 37, 40, 43, 52], "am": [17, 40], "quick": [17, 19, 21, 23, 39, 48], "suffici": [17, 21, 38, 39, 46], "initialis": [17, 19, 21], "dm": [17, 38], "slow": [17, 18, 25, 41, 46, 48], "eosus": [17, 41, 46, 48], "lhcbsk": [17, 39, 41, 46, 48], "tend": 17, "quit": [17, 22, 24, 26, 27, 31, 37], "af": [17, 18, 52, 53], "quota": 17, "portal": [17, 18], "100gb": 17, "xml": [17, 23, 40, 46], "catalog": [17, 23], "genxmlcatalog": 17, "mycatalog": 17, "filecatalog": 17, "xmlcatalog_fil": 17, "replica": 17, "regener": 17, "recip": 17, "conveni": [17, 21, 39, 40, 54, 55], "__name__": 17, "__main__": 17, "subprocess": 17, "sy": [17, 19, 37], "argv": [17, 19, 37], "n_file": 17, "len": [17, 37], "int": [17, 25, 37, 55], "getev": 17, "lhcbdataset": 18, "gangadir": [18, 30, 40], "21": [18, 36], "beam4000gev": 18, "reco14": 18, "stripping21r0p1a": 18, "90000000": 18, "lhcbcompresseddataset": 18, "lhcbcompressedfileset": 18, "lfn_prefix": 18, "suffix": [18, 22], "3716": 18, "str": [18, 54, 55], "persist": [18, 26], "none": [18, 50], "depth": 18, "xmlcatalogueslic": 18, "namepattern": 18, "localdir": [18, 40], "compress": 18, "credential_requir": 18, "diracproxi": 18, "lhcb_user": [18, 25], "encodedefaultproxyfilenam": 18, "dirac_env": 18, "validtim": 18, "diracfil": [18, 30, 37, 40], "bracket": 18, "accessurl": [18, 37, 38], "bw32": 18, "sara": 18, "nl": 18, "1094": 18, "pnf": 18, "00051179": 18, "00051179_00006978_1": 18, "bender": [18, 19], "ouput": [18, 21], "782": 18, "gangarc": [18, 40], "unreli": 18, "caus": [18, 50, 52, 54], "filespac": 18, "wise": 18, "stdout": [18, 40, 53, 54], "capac": 18, "wildcard": [18, 55], "stai": 18, "15": [18, 22], "url": [18, 21, 37], "tchain": [18, 37], "hadd": 18, "getoutputdataaccessurl": 18, "standard": [18, 21, 24, 33, 39, 40, 55], "logfil": 18, "kept": 18, "speak": [18, 54], "trick": [18, 36, 46, 49], "faster": [18, 21, 23, 27], "fk": 18, "node": [19, 25, 41, 52, 54], "gaudipython": [19, 22], "gaudiconf": [19, 23, 33, 38, 48], "dv": [19, 22], "datatyp": [19, 23, 37, 38, 48], "appmgr": [19, 22, 50], "evtsvc": 19, "ext": [19, 22, 48], "walk": 19, "hierachi": 19, "vector": [19, 22, 24, 43, 44], "iregistri": 19, "0x11d1deb0": 19, "root_children": 19, "23l": 19, "datasvchelp": 19, "registryentri": 19, "0x126576b0": 19, "gen": [19, 36, 42, 44, 46, 48], "recurs": 19, "def": [19, 22, 37, 48], "node_list": 19, "leaf": 19, "easiest": [19, 49], "But": [19, 21, 26, 37, 41], "pack": 19, "prec": [19, 36], "unpack": [19, 23, 30, 54], "auto": [19, 54], "magic": [19, 22], "decreport": [19, 41, 50], "hasdecisionnam": 19, "break": [19, 30, 36], "restart": [19, 53], "infinit": 19, "413": 19, "daughtersvector": [19, 22], "print_decai": [19, 50], "printdecaytreetool": 19, "iprintdecaytreetool": 19, "printtre": 19, "fast": [19, 28, 38, 42, 46], "pedagog": 19, "daili": 19, "seekstripdecis": 19, "banner": 19, "figur": [19, 38, 54], "pphy": 19, "ever": [19, 22, 25, 26], "hide": 19, "whatev": 19, "handi": 19, "isn": [19, 20, 54, 55, 56], "behav": [19, 23, 55], "revisit": 20, "involv": [20, 32, 47], "index": [20, 55], "stuff": 20, "passion": 20, "demystifi": 20, "2015": [20, 25, 26, 37], "dive": 20, "taught": [21, 28, 39], "principl": [21, 39], "vanilla": [21, 38, 39, 53, 55], "subcommand": [21, 39], "streamlin": [21, 33, 34, 39], "modif": [21, 39, 46], "focu": [21, 37, 39], "ofthi": 21, "cumbersom": [21, 33, 34], "seriou": 21, "consid": [21, 22, 24, 26, 39, 50, 52, 56], "spare": [21, 39], "config": [21, 39, 40, 42, 48], "credenti": [21, 39, 56], "introduc": [21, 22, 26, 30, 34, 45], "dev": [21, 38, 39, 42], "gcc9": 21, "vxry": 21, "mypackag": 21, "cmake": 21, "conf": 21, "cmakelist": [21, 39], "bin": [21, 25, 30, 38, 39, 45, 46, 48, 53, 54, 55], "gaudicmakeconfigur": 21, "usernam": [21, 25, 39, 53], "simplest": [21, 40], "runtim": [21, 53, 54], "varialb": 21, "advis": [21, 40], "stick": 21, "less": [21, 38, 50, 53], "risk": 21, "inconsist": 21, "git4lhcb": [21, 39], "discov": 21, "succesfulli": 21, "hood": [21, 29, 39], "fetch": [21, 37, 39], "v": [21, 30, 37], "moreov": 21, "purg": 21, "protect": 21, "ed": 21, "mr": 21, "merge_request": 21, "5bsource_branch": 21, "5d": 21, "nightli": [21, 39], "infrastructur": 21, "overnight": 21, "slot": 21, "exact": [21, 23, 41, 55], "schedul": [21, 53, 54, 55], "vari": [21, 24], "unintend": 21, "softwareenvtool": 21, "quicker": 21, "glimps": [21, 36], "pvrefitt": 21, "grep": [21, 40], "compon": [21, 22, 24], "strictli": 21, "resid": [21, 46], "precompil": 21, "sophist": 21, "noth": [21, 30], "surpris": 21, "multi": [21, 22, 28, 42], "8443": 21, "installarea": 21, "Be": [22, 38, 42, 53, 54, 55], "750": [22, 33], "4000": [22, 33], "mipchi2dv": [22, 33], "quantiti": [22, 23, 45, 46, 52], "transvers": [22, 46, 50], "momentum": [22, 24, 32, 43, 44, 46, 50], "impact": [22, 27, 45], "complic": [22, 30, 32, 33, 38, 39, 43, 49], "helic": [22, 43], "intern": [22, 50], "type1": 22, "type2": 22, "logic": 22, "predic": 22, "streamer": 22, "type3": 22, "vertexbas": 22, "mcparticl": [22, 32], "mcvertex": 22, "range_": 22, "left": [22, 23, 25], "bind": 22, "p_x": 22, "p_y": 22, "p_z": 22, "inconveni": 22, "lokiphi": 22, "decor": 22, "lokisvc": 22, "auxdesktopbas": 22, "loaddesktop": 22, "unabl": 22, "iphysdesktop": 22, "statuscod": 22, "failur": 22, "suppress": 22, "scope": [22, 50], "harmless": 22, "math": 22, "p_components_sum": 22, "magnitud": 22, "energi": [22, 24, 26, 28, 48], "unit": [22, 25, 30, 32, 39], "convent": [22, 44], "millimet": 22, "nanosecond": 22, "chi": [22, 24], "endvertex": 22, "adaptor": [22, 25], "create_greet": 22, "salut": 22, "greet": [22, 37], "hello": [22, 37, 40, 53], "howdi": 22, "syntax": [22, 23, 30, 48, 55], "chi2vx": 22, "pretti": 22, "old": [22, 40, 41], "cosin": 22, "direct": [22, 47], "ourselv": 22, "pv_finder_tool": 22, "genericparticle2pvrel": 22, "_p2pvwithipchi2": 22, "offlinedistancecalculatornam": 22, "p2pvwithipchi2": 22, "irelatedpvfind": 22, "best_pv": 22, "relatedpv": 22, "context": [22, 23, 37, 54], "gbl": 22, "distcal": 22, "distancecalcul": 22, "idistancecalcul": 22, "iptool": 22, "impactparamtool": 22, "evalu": [22, 26, 54], "ipchi2": [22, 50], "simplier": 22, "geo": 22, "geometri": [22, 42], "overwhelm": 22, "curat": 22, "far": [22, 30, 43, 46, 47, 54, 55], "maximum": [22, 24, 27, 30, 38, 54], "find_track": 22, "isbasicparticl": 22, "proto": 22, "append": [22, 30, 37, 38, 40, 56], "attributeerror": 22, "daughter": 22, "max": [22, 36], "block": [22, 33], "offer": [22, 23, 33, 34], "mintre": 22, "compact": 22, "bitwis": 22, "overrid": 22, "1200": [22, 30], "vanish": 22, "never": [22, 24, 38, 44, 49, 54], "similarli": [22, 30, 44, 53], "accumul": 22, "321": 22, "neg": [22, 23, 46, 47], "antiparticl": 22, "8653": 22, "5848": 22, "31": [22, 36], "32": 22, "508": 22, "6267": 22, "053": 22, "2006": 22, "29": 22, "13": [22, 26, 36], "mm": [22, 33], "ndof": 22, "2349": 22, "4937": 22, "1334": 22, "20": [22, 36, 43, 45, 54], "26": 22, "129": 22, "1371": 22, "8534": 22, "11": 22, "06": 22, "3795": 22, "7643": 22, "1396": 22, "2558": 22, "101": 22, "2451": 22, "0733": 22, "088": 22, "therefor": [22, 32, 33, 46, 49], "mass_child": 22, "mass_kaon": 22, "exploit": [22, 23], "trchi2": 22, "worst": 22, "probnnk": 22, "rather": [22, 24, 26, 30, 37, 38, 44, 49, 54], "misidentifi": 22, "probnnpi": 22, "world": [22, 37, 40, 53], "constitut": [22, 34], "amongst": [22, 23], "in_rang": [22, 46], "lower": [22, 45, 47, 52, 54], "cpu": [22, 32, 33, 34, 38, 45, 46, 47, 52, 54], "critic": [22, 34], "lokicor": 22, "2014": [22, 38], "1860": 22, "1870": 22, "combineparticl": [22, 32, 33, 34, 35], "mothercut": [22, 33, 34, 35, 36], "daughtercut": 22, "combinationcut": [22, 33, 34, 35], "wrapper": [22, 34, 35, 49, 54, 55], "dump1": 22, "debug_p_components_sum": 22, "monitor": [22, 23, 28, 30, 48, 52, 53], "monitor_p_components_sum": 22, "th": 22, "roughput": 22, "ient": 22, "conceptu": 22, "multithread": 22, "topologi": [23, 49], "impract": 23, "though": [23, 26, 43], "ten": 23, "compat": [23, 40], "reader": 23, "bare": [23, 32], "captur": [23, 37, 49], "strippinglin": 23, "speci": 23, "finder": [23, 50, 54], "databas": [23, 38, 43, 48], "dddb": [23, 43, 48], "inputtyp": [23, 38, 48], "tuplefil": [23, 38, 48], "printfreq": [23, 36], "evtmax": [23, 38, 48], "conddbtag": [23, 48], "sim": [23, 46, 47, 48], "20170721": [23, 48], "vc": [23, 48], "md100": [23, 48], "dddbtag": [23, 48], "self": [23, 28, 32], "explanatori": 23, "bad": [23, 26, 48], "conddb": [23, 38, 43, 48], "shouldn": 23, "greatest": 23, "productionid": [23, 48], "db": 23, "mu100": 23, "fraction": [23, 24, 36, 43, 53], "machineri": 23, "consum": [23, 33, 47], "accomod": 23, "prefilt": [23, 38], "conclus": 23, "eventprefilt": [23, 34, 38], "physconf": [23, 33, 34, 38], "loki_filt": [23, 34, 38], "fltr": 23, "strip_cod": [23, 34, 38], "hlt_pass_r": [23, 38], "strippingd2hhpromptdst2d2kklinedecis": [23, 34], "investig": 23, "tfile": 23, "0x2ae94f0": 23, "0x2fe31b0": 23, "microdst": [23, 50], "goe": [23, 38], "rootint": [23, 34], "highest": 24, "lifetim": [24, 28, 39, 42], "infer": 24, "travers": 24, "unstabl": [24, 47], "shorter": [24, 54], "pm": 24, "photon": [24, 31, 45, 49], "gamma": 24, "deuteron": 24, "deuterium": 24, "nuclei": 24, "intrins": 24, "natur": [24, 30], "trajectori": 24, "assign": [24, 27, 52, 53, 54], "curvatur": 24, "induc": 24, "dipol": 24, "strength": 24, "region": [24, 46], "intersect": 24, "aspect": 24, "ghost": 24, "random": [24, 48], "certainti": 24, "statist": [24, 53], "ensembl": 24, "opposit": 24, "hundr": 24, "minimum": [24, 45, 46, 47], "closest": 24, "exce": 24, "invok": 24, "conserv": 24, "optimis": [24, 47], "four": 24, "uncertainti": 24, "hope": 24, "densiti": 24, "rel": [24, 45], "normalis": 24, "deduc": 24, "phi": [24, 43, 46, 48], "1020": 24, "peak": [24, 54], "mixtur": 24, "neutron": 24, "weak": 24, "eigenst": 24, "k_": 24, "watch": [25, 53], "room": 25, "plan": [25, 26, 39], "desktop": 25, "laptop": 25, "internet": 25, "suppli": [25, 37], "plug": 25, "swiss": 25, "european": 25, "mac": 25, "o": 25, "linux": [25, 51], "xterm": 25, "mylxplusnam": 25, "alia": [25, 43, 44, 46, 56], "untrust": 25, "x11": 25, "forward": [25, 49], "xauth": 25, "logout": [25, 54], "trust": 25, "fake": 25, "authent": [25, 56], "lcg": 25, "vo": 25, "admin": 25, "vom": [25, 56], "role": [25, 56], "private_pilot": 25, "dc": 25, "ou": 25, "cn": 25, "thead": 25, "667505": 25, "timothi": 25, "daniel": 25, "issuer": 25, "timeleft": 25, "23": [25, 36], "53": 25, "59": 25, "x509up_u25636": 25, "normalus": 25, "fqan": 25, "dn": 25, "gmt": 25, "25": [25, 46, 55], "05": 25, "wizard": 25, "worri": [25, 30, 40, 44], "normal": [25, 30, 38, 40, 46], "account": [25, 52], "tcsh": 25, "tee": 25, "cee": 25, "subtli": 25, "comparison": [25, 50], "wide": 25, "servic": [25, 49, 52, 56], "unix": 25, "xming": 25, "putti": 25, "unfold": 25, "item": [25, 55], "box": 25, "he": 25, "port": 25, "22": [25, 53, 55], "screen": [25, 30], "keyboard": 25, "lhc": [26, 27], "began": 26, "middl": [26, 36], "centr": 26, "7": [26, 36, 55], "tev": 26, "overcom": 26, "omit": 26, "thank": [26, 32, 33, 34], "enorm": 26, "henc": [26, 30, 46], "monei": 26, "pragmat": 26, "anywai": 26, "evolv": 26, "fire": [26, 50], "descend": 26, "downstream": 26, "velo": [26, 36], "combinator": [26, 33], "turbosp": 26, "subset": [26, 38, 54], "compromis": 26, "run2triggerchangelog": 26, "gigabyt": 27, "strategi": [27, 46], "spawn": [27, 45], "fewer": 27, "sooner": [27, 54], "maxfil": 27, "ignoremiss": [27, 30], "whole": [27, 34, 37, 50, 53], "resubmit": [27, 30, 54], "reset": [27, 37, 45, 46, 50], "42": [27, 33, 36], "force_statu": 27, "queue": [27, 28, 45, 51, 52, 53, 54], "parenthes": 27, "submiss": [27, 28, 30, 40, 51, 54], "join": [28, 37, 52, 55], "fun": 28, "decaytreefitt": 28, "earli": 28, "career": 28, "divers": 28, "modern": [28, 31], "reus": [28, 32], "cocktail": [28, 42], "width": [28, 42], "intro": 28, "tck": 28, "tisto": 28, "dii": 28, "gangatask": 28, "condor": [28, 52], "htcondor": [28, 51, 53, 54, 55], "architectur": [28, 51], "lbscript": [28, 51], "unlik": [29, 50], "insight": 29, "clearli": [29, 34], "requisit": 30, "distro": 30, "spend": 30, "ammount": 30, "tmux": 30, "disturb": 30, "extrem": [30, 54, 55], "gaussian": 30, "poisson": 30, "overal": [30, 45], "coretask": 30, "trf1": 30, "coretransform": 30, "ex": [30, 40, 54], "my_script": [30, 54, 55], "sh": [30, 53, 54, 55], "unit_splitt": 30, "genericsplitt": 30, "myenv": 30, "slow_gaussian": 30, "flat": [30, 32], "appendtransform": 30, "throttl": 30, "float": 30, "distinct": [30, 49], "overwrit": [30, 46, 54, 55], "job_num": 30, "quicki": 30, "refresh": 30, "gone": 30, "shortli": [30, 53], "trf2": 30, "my_other_script": 30, "png": 30, "task_chain": 30, "taskchaininput": 30, "input_trf_id": 30, "getid": 30, "addinputdata": 30, "gangadatasetsplitt": 30, "files_per_subjob": 30, "filenam": [30, 37, 40, 44], "__gangainputdata__": 30, "carri": 30, "utilit": 30, "stabil": 30, "cat": [30, 40, 54], "__gangainputdata": 30, "txt__": 30, "ti": [30, 34, 38, 50], "breakdown": 30, "task_num": 30, "firstli": [30, 55], "scene": [30, 54], "diracopt": 30, "settag": 30, "lhcbdev": 30, "lib": 30, "lbenv": 30, "tradit": 30, "trf": 30, "submit_with_thread": 30, "recognis": 30, "opsi": 30, "arch": [30, 51], "univers": [30, 52, 53, 54, 55], "getenv": 30, "composit": [31, 38], "abil": [31, 45], "ast": [32, 33], "rightarrow": [32, 33], "sequenti": [32, 55], "wrap": [32, 40], "gaudisequenc": [32, 49], "nor": [32, 38], "selectionsequ": [32, 33, 38, 49], "findabl": 32, "outputloc": [32, 49], "requiredselect": [32, 33, 35, 36, 49], "resolv": [32, 39], "export": [32, 56], "filterdesktop": [32, 33, 34, 35], "reusabl": 32, "visual": 32, "printselect": [32, 33], "imposs": 32, "mctruth": 32, "inclus": 32, "scale": 32, "singleton": [32, 34], "pattern": [32, 40], "reload": 32, "build_d0": 32, "pai": 32, "attent": 32, "shortcom": 33, "scratch": 33, "replic": [33, 37, 40], "00062514": 33, "00062514_00000008_7": 33, "standardparticl": 33, "stdallnopidspion": [33, 35, 36], "stdallloosekaon": [33, 36], "ideal": [33, 34, 41], "automaticdata": [33, 34, 38], "predefin": [33, 38], "commonparticl": 33, "premad": 33, "daughterscut": [33, 34], "map": 33, "d0_decay_product": [33, 34], "saniti": 33, "amaxdoca": 33, "adamass": [33, 35], "d0_comb": [33, 34], "parent": 33, "d0_vertex": [33, 34], "vdof": [33, 35, 36], "9997": 33, "admass": 33, "70": [33, 38, 50], "combine_d0": 33, "decaydescriptor": [33, 34, 35], "d0_sel": [33, 34, 35, 36], "sel_d0": [33, 34, 36], "simpleselect": [33, 34], "dstar_decay_product": 33, "trchi2dof": 33, "dstar_comb": [33, 35], "400": [33, 46, 55], "dstar_vertex": 33, "ab": [33, 36], "145": [33, 36], "combine_dstar": 33, "dstar_sel": [33, 35], "sel_dstar": [33, 35, 36], "situat": [33, 34, 49], "soft_pion": 33, "filter_softpi": 33, "soft_pion_sel": [33, 35], "sel_softpi": 33, "combinedstar": 33, "dstar_seq": [33, 36], "topselect": [33, 49], "10000": 33, "everytim": 33, "printdecaytre": 33, "appreci": 33, "modular": [33, 34], "strike": 33, "scheme": 33, "clash": 33, "keyword": 34, "rewrit": 34, "gaudiconfutil": 34, "configurablegener": 34, "mandatori": 34, "skip": [34, 36, 37], "had": [34, 35, 40, 55], "nameerror": 34, "unsaf": 34, "wonder": 34, "combineselect": [34, 35], "combine3bodyselect": 34, "combine4bodyselect": 34, "bodydecai": 34, "combination12cut": 34, "combination123cut": 34, "tupleselect": [34, 38], "filterselect": 34, "outsid": [34, 37, 42, 46, 54], "callout": 34, "triggerselect": 34, "nb": 34, "strippingselect": 34, "strip_sel": 34, "hlt_pass": 34, "strip_input": 34, "tuple_sel": 34, "overhead": 34, "proven": 34, "filter_": 34, "tistosselect": 34, "TOS": [34, 38], "l0tosselect": 34, "l0tisselect": 34, "hlt1tosselect": 34, "hlt1tisselect": 34, "hlt2tosselect": 34, "hlt2tisselect": 34, "validbpvselect": 34, "util": [34, 37], "filterintre": 35, "variat": [35, 39], "892": [35, 43], "physselpython": [35, 49], "dataondemand": [35, 49], "tesloc": [35, 49], "kaons_from_d0": 35, "kaons_from_d0_filt": 35, "kaons_from_d0_sel": 35, "kst": 35, "kst_particl": 35, "300": [35, 55], "kst_sel": 35, "dstar_moth": [35, 36], "filterdecai": 35, "flatten": 35, "pi0": 35, "flatlist": 35, "add_pi0": 35, "makeb": 35, "resolvedpi0": 35, "rerun": [36, 41, 45, 46, 56], "scroll": 36, "counter": [36, 40], "rm": 36, "err": [36, 53, 55], "min": [36, 44], "95": 36, "095000": 36, "29661": 36, "723": 36, "72300": 36, "89122": 36, "691": 36, "69100": 36, "85995": 36, "20491": 36, "491": 36, "579": 36, "90": 36, "000": [36, 43, 44, 46, 48], "190": 36, "19000": 36, "59321": 36, "94": 36, "40000": 36, "922843": 36, "combcut": 36, "1308": 36, "234": 36, "8899": 36, "05974": 36, "mother": 36, "81": 36, "1966": 36, "55434": 36, "selfilterphys_": 36, "06383": 36, "31915": 36, "48844": 36, "32979": 36, "51340": 36, "0106": 36, "10259": 36, "0213": 36, "20518": 36, "3699": 36, "39": 36, "351": 36, "111": 36, "3889": 36, "41": 36, "372": 36, "174": 36, "99": 36, "1767": 36, "18": [36, 53], "798": 36, "8949": 36, "1743": 36, "543": 36, "4381": 36, "49": 36, "61": 36, "64894": 36, "55940": 36, "57": 36, "60": 36, "6383": 36, "03902": 36, "3601": 36, "843": 36, "4102": 36, "705629": 36, "23606": 36, "892333": 36, "iparticlecombin": 36, "combinat": 36, "excit": 36, "silent": 36, "forgot": 36, "38848": 36, "38": 36, "848": 36, "700": 36, "00000": 36, "100000": 36, "7977e": 36, "308": 36, "mess": 36, "118624": 36, "suspici": 36, "storeexploreralg": 36, "0x2f009e70": 36, "eventdatasvc": 36, "clid": 36, "0x1": 36, "0x2": 36, "dataobject": 36, "unload": 36, "prevprev": 36, "prev": [36, 48], "nextnext": 36, "psim": 36, "header": [36, 43], "0x69": 36, "rechead": 36, "0x1389": 36, "0x6a": 36, "protop": 36, "keyedcontain": 36, "protopart": 36, "0x1d": 36, "muonpid": 36, "con": 36, "0x17": 36, "conta": 36, "0x45": 36, "fittedhlt1velotrack": 36, "0x20": 36, "rich": [36, 45, 48], "richpid": 36, "0x18": 36, "recvertex": 36, "0x3": 36, "calo": 36, "unstrip": 36, "hc": 36, "rawev": 36, "0x3ea": 36, "0x60e": 36, "packedtrack": 36, "0x619": 36, "packedrichpid": 36, "0x623": 36, "packedmuonpid": 36, "0x610": 36, "packedprotoparticl": 36, "0x611": 36, "packedrecvertic": 36, "v0": 36, "0x612": 36, "odin": 36, "co": 36, "0x9": 36, "decayvertic": 36, "cont": 36, "particle2vertexrel": 36, "relation1d": 36, "_refitpv": 36, "frequenc": 36, "printevt": 36, "create_job": 37, "sensibl": 37, "bore": 37, "automag": 37, "parallel_submit": 37, "parameteris": 37, "123": 37, "argpars": [37, 54, 55], "parser": [37, 54, 55], "argumentpars": [37, 54, 55], "add_argu": [37, 54, 55], "store_tru": 37, "parse_arg": [37, 54, 55], "grip": 37, "difficultli": 37, "ntuples_": 37, "Of": 37, "annoi": 37, "my_help": 37, "luckili": 37, "rescu": 37, "home": [37, 40, 52, 56], "echo": [37, 40, 53, 54], "statement": 37, "yo": 37, "neat": 37, "fold": 37, "write_lfn": 37, "fname": 37, "treat": [37, 40], "sjob": 37, "sj": [37, 40], "df": [37, 40], "w": [37, 54, 55], "merge_root_output": 37, "input_tree_nam": 37, "merged_filepath": 37, "access_url": 37, "remedi": 37, "delet": [37, 56], "12": [38, 55], "khz": 38, "reduct": 38, "latenc": 38, "\u03bc": 38, "stand": 38, "harddriv": 38, "beam": [38, 48], "evolut": 38, "bank": 38, "recov": 38, "mdst": [38, 50], "stripping_lin": 38, "b2dmunux_d0": 38, "my_particles_kpi": 38, "tupsel_kpi": 38, "d0_kpi": 38, "toollist": [38, 48], "ttt": 38, "tupletooltrigg": 38, "seq_kpi": 38, "latestglobaltagbydatatyp": 38, "xroot": 38, "collision18": 38, "00075559": 38, "00075559_00002816_1": 38, "hlt1tck": 38, "hlt2tck": 38, "l0global": 38, "hlt1global": 38, "hlt2global": 38, "hexadecim": 38, "tcksh": 38, "v28r3p1": 38, "listconfigur": 38, "listl0channel": 38, "listhlt1lin": 38, "listhlt2lin": 38, "topolog": 38, "triggerlist": 38, "getl0channel": 38, "0x11741801": 38, "l0muondecis": 38, "l0dimuondecis": 38, "l0hadrondecis": 38, "l0electrondecis": 38, "l0photondecis": 38, "gethlt1lin": 38, "hlt1trackmvadecis": [38, 50], "hlt1twotrackmvadecis": 38, "hlt1trackmvatightdecis": 38, "hlt1twotrackmvatightdecis": 38, "hlt1trackmuondecis": 38, "hlt1trackmuonmvadecis": 38, "gethlt2": 38, "0x21751801": 38, "hlt2topo2bodydecis": 38, "hlt2topo3bodydecis": 38, "hlt2topo4bodydecis": 38, "hlt2topomu2bodydecis": 38, "hlt2topomu3bodydecis": 38, "hlt2topomu4bodydecis": 38, "categori": 38, "pub": 38, "039": 38, "presenc": 38, "tob": [38, 50], "neither": 38, "alon": 38, "tttt": 38, "tupletooltisto": 38, "hlt1twotrackmva": [38, 50], "line_names_regex": 38, "prescal": 38, "listproperti": 38, "0x214a160f": 38, "hlt2dimuonjpsi": 38, "acceptfract": 38, "hlt2dimuonjpsiprescal": 38, "regex": [38, 50], "minprobnn": 38, "decreas": 38, "mynewlin": 38, "concurr": 38, "mooreratetestexampl": 38, "endchalleng": 38, "isol": 39, "closer": 39, "getpack": 39, "profil": 39, "newest": 39, "makefil": 39, "necessarili": 39, "repo": 39, "synchron": 39, "sktest": 39, "thetestpackag": 39, "synthet": 39, "histori": 39, "cost": 39, "newli": [39, 49], "svn": 39, "mirror": [39, 47], "conflict": 39, "lo": 39, "pointer": 39, "importantli": [39, 53, 54], "exam": 39, "hackathon": 39, "anywher": 40, "fresh": 40, "interfer": 40, "backup": 40, "la": 40, "mv": 40, "restor": 40, "revers": [40, 55], "dlrow": 40, "olleh": 40, "wget": 40, "githubusercont": 40, "chmod": [40, 53], "haven": 40, "date": [40, 44], "nhello": 40, "ni": 40, "explicitli": [40, 43], "notabl": [40, 54], "stderr": [40, 53], "uploads": 40, "couldn": 40, "gave": 40, "apearc": 40, "gangafiles_22": 40, "24_wednesday_18_may_2016": 40, "massstoragefil": 40, "discourag": 40, "highli": [40, 52], "ral": 40, "whose": [40, 45], "df2": 40, "foo": 40, "dfr2": 40, "j2": 40, "28r1": 41, "28": 41, "complain": 41, "eventnodekil": 41, "reconfigur": 41, "impactkit": [41, 50, 51], "killer": 41, "event_node_kil": 41, "stripkil": 41, "buildstream": 41, "stripping28r1": 41, "strippingconfigur": 41, "strippingarch": 41, "custom_stream": 41, "strippingstream": 41, "customstream": 41, "custom_lin": 41, "sline": 41, "appendlin": 41, "strippingconf": 41, "sc": 41, "maxcandid": 41, "acceptbadev": 41, "badeventselect": 41, "filterbadev": 41, "appendtomainsequ": [41, 49], "v41r4p4": 41, "processingpass": 41, "mcdecaytreetupl": [42, 48], "focuss": 42, "lhcbdoc": 42, "v49r21": 42, "gaussdev_v49r21": 42, "pkg": 42, "sim09": [42, 47], "dec": [42, 44, 47], "gun": 42, "redecai": 42, "angular": [43, 44], "spin": 43, "scalar": 43, "sv": 43, "lepton": 43, "vll": 43, "sig": [43, 44], "myj": 43, "enddecai": [43, 44, 46], "cdecai": [43, 44, 46], "photo": 43, "phase": [43, 44, 45, 46, 48], "hp": 43, "159": 43, "hz": 43, "775": 43, "hm": 43, "612": 43, "php": 43, "563": 43, "phz": 43, "phm": 43, "712": 43, "myk": 43, "myanti": 43, "anti": [43, 44], "chargeconj": [43, 44, 46], "b0sig": 43, "svv_helamp": 43, "d_dalitz": 43, "reson": [43, 46], "1430": 43, "1680": 43, "myd": 43, "phsp": [43, 44, 46], "realiti": 43, "hfag": 43, "pdg10": 43, "nu_mu": 43, "hqet": 43, "426": 43, "818": 43, "908": 43, "myd_": 43, "0259": 43, "isgw2": 43, "0267": 43, "eta": [43, 48], "0099": 43, "0037": 43, "k0": 43, "0018": 43, "0020": 43, "f_0": 43, "0059": 43, "sln": 43, "renormalis": 43, "rescal": 43, "nophoto": 43, "insertpythoncod": [43, 44], "lhcb__particlepropertysvc": 43, "1440": 43, "636": 43, "12212": 43, "4400000": 43, "194041e": 43, "24": 43, "21440": 43, "637": 43, "194841e": 43, "1520": 43, "420": 43, "2124": 43, "52000000": 43, "723584e": 43, "21520": 43, "421": 43, "1535": 43, "713": 43, "22212": 43, "53500000": 43, "388081e": 43, "21535": 43, "714": 43, "1720": 43, "32124": 43, "72000000": 43, "632849e": 43, "21720": 43, "776": 43, "endinsertpythoncod": [43, 44], "geantid": 43, "pdgid": 43, "tlife": 43, "evtgennam": 43, "pythiaid": 43, "maxwidth": 43, "gitbook": 43, "blob": 43, "param": 43, "particlet": 43, "dkfile": 44, "27175000": [44, 46, 48], "kkmumu": 44, "eventtyp": 44, "nicknam": [44, 46], "daughtersinlhcb": [44, 46], "bbar": 44, "cbar": 44, "enddocument": 44, "physicswg": 44, "ye": [44, 54], "luisa": 44, "arrabito": 44, "unknown": 44, "nospam": 44, "20091215": 44, "myd0": [44, 46], "myantid0": [44, 46], "vss": [44, 46], "vital": 44, "rule": 44, "2005": 44, "034": 44, "quark": 44, "bia": [44, 45, 46, 47], "predetermin": 44, "matrix": 44, "scaler": 44, "unpolar": 44, "spin0": 44, "beyond": [45, 46, 50, 53], "unsustain": 45, "unavoid": 45, "brief": 45, "exclud": 45, "reorder": 45, "net": 45, "promin": [45, 46], "optic": 45, "deactiv": [45, 48], "aggress": 45, "underli": 45, "unchang": 45, "correl": 45, "lorentz": 45, "immedi": [45, 46], "unnecessarili": [45, 54], "lambda_b": 45, "generatorlevelevtgencut": 45, "customis": 46, "realist": 46, "reli": 46, "subsequ": 46, "randomli": [46, 50], "myphi": 46, "75": 46, "spike": 46, "epsilon": 46, "daugthersinlhcb": 46, "loos": 46, "mrad": 46, "theta": 46, "gencut": 46, "absolut": 46, "generatorlog": 46, "27": 46, "18519": 46, "074757": 46, "signalplain": 46, "cuttool": [46, 47], "27163003": [46, 48], "convinc": 46, "alter": 46, "50000ev": [46, 48], "20190515": [46, 48], "xgen": [46, 48], "pseudorapid": 46, "illustr": 46, "behavior": 46, "axi": 46, "invert": 46, "genparticl": 46, "gencuttool": 46, "resort": 46, "igencuttool": 46, "mometum": 46, "loki__gencuttool": 46, "tightcut": 46, "addtool": [46, 50], "gaudikernel": 46, "systemofunit": 46, "inacc": 46, "005": 46, "gtheta": 46, "goodd0": 46, "gpt": 46, "larger": [46, 48], "gausstightcut": 46, "10000ev": 46, "slight": 46, "manifold": 46, "rethink": 46, "generatorleveltightcut": 46, "creation": 47, "productiontool": 47, "genxicc": 47, "compris": [47, 50], "decaytool": 47, "transport": 47, "possibli": 47, "liaison": 47, "furthermor": 47, "fli": 47, "v49": 47, "v49r5": 47, "v49r8": 47, "sim09d": 47, "v49r10": 47, "v49r11": 47, "v49r12": 47, "sim09g": 47, "v49r13": 47, "sim09h": 47, "v49r14": 47, "sim09i": 47, "v49r17": 47, "sim09j": 47, "v49r18": 47, "sim09k": 47, "v49r20": 47, "v49r9": 47, "prior": 47, "sim10": 47, "v52": 47, "up08": 47, "prodid": 47, "stripping28r1filt": 48, "d2hmunustream": 48, "matter": [48, 54], "decfilesroot": 48, "eventnumb": 48, "lbpythia8root": 48, "runnumb": 48, "geninit": 48, "gaussgen": 48, "firsteventnumb": 48, "1082": 48, "lhcbapp": 48, "appconfigopt": 48, "enablespillov": 48, "spillov": 48, "richrandomhit": 48, "g4pl_ftfp_bert_emnocut": 48, "gaussopt": 48, "genstandalon": 48, "importopt": 48, "decay_head": 48, "datafil": 48, "lokinewdecayfind": 48, "mc_basic_loki_var": 48, "mceta": 48, "mcphi": 48, "mcpt": 48, "mcpx": 48, "mcpy": 48, "mcpz": 48, "mce": 48, "mcp": 48, "dirti": 48, "mctupl": 48, "mctupletool": 48, "basiclokitt": 48, "digi": 48, "appendpostconfigact": 48, "doit": 48, "dataondemandsvc": 48, "dod": 48, "deepcopi": 48, "alg": 48, "algmap": 48, "elif": [48, 54], "del": 48, "eventclocksvc": 48, "eventtimedecod": 48, "fakeeventtim": 48, "ignoreheartbeat": 48, "repurpos": 49, "reinterpret": 49, "substitutepid": 49, "resp": 49, "maked02kpi": 49, "dectre": 49, "conjug": 49, "accomplish": 49, "strippingsel": 49, "selsub": 49, "dst2d0pi_d02kpi_sel": 49, "daisi": 49, "selseq": 49, "redefin": 49, "eleg": 49, "toolkit": 49, "mainli": 49, "seq": 49, "mytupleseq": 49, "ntuple_switchhypo": 49, "lhcbid": 50, "selreport": 50, "resurrect": 50, "tesla": 50, "forev": 50, "raaij": 50, "00051318_00000509_1": 50, "174252": 50, "favourit": 50, "hlt_info": 50, "advance_hlt": 50, "hlt1trackalll0decis": 50, "beauti": 50, "hlt1trackmva": 50, "trackmva": 50, "analog": 50, "substructur": 50, "funtion": 50, "smartref": 50, "dereferenc": 50, "numericalinfo": 50, "hlt2charmhaddsp2ks0pimpippip": 50, "ks0llturbo": 50, "classif": 50, "Tos": 50, "formal": 50, "overlap": 50, "hlt1trackalll0": 50, "hlt1dimuonhighmass": 50, "d2hhpromptdst2d2r": 50, "thusli": 50, "d2hhpromptdst2d2rslin": 50, "criterium": 50, "triggertisto": 50, "ii": 50, "hlt1triggertisto": 50, "hltdecreportsloc": 50, "hltselreportsloc": 50, "hlt2triggertisto": 50, "itriggertisto": 50, "hlt1tistostool": 50, "setofflineinput": 50, "addtoofflineinput": 50, "settriggerinput": 50, "addtotriggerinput": 50, "tistostobtrigg": 50, "tos": 50, "addto": 50, "hlt1dimuonhighmassdecis": 50, "epsilon_": 50, "n_": 50, "seleciton": 50, "classifi": 50, "varieti": 51, "notif": [51, 52], "maco": 51, "homebrew": 51, "ubuntu": 51, "cento": 51, "fair": 52, "polici": 52, "enforc": 52, "fairli": 52, "lxbatch": 52, "institut": 52, "throughput": 52, "decid": 52, "worker": [52, 54], "durat": [52, 54], "allot": 52, "score": [52, 53], "gradual": 52, "filesystem": [52, 55], "20gb": 52, "transfer": [52, 54, 55], "explan": [52, 53], "diagram": 52, "v8": 52, "wisconsin": 52, "madison": 52, "todd": 52, "tannenbaum": 52, "6th": 52, "june": 52, "2017": 52, "my_first_script": 53, "condor_submit": [53, 54], "2875625": [53, 54], "condor_q": [53, 55], "owner": [53, 55], "batch_nam": 53, "idl": [53, 55], "job_id": 53, "djwhite": [53, 55], "cmd": [53, 55], "16": 53, "suspend": [53, 55], "condor_hold": 53, "condor_suspend": 53, "condor_rm": 53, "condor_releas": 53, "repeatedli": 53, "interv": 53, "condor_wait": 53, "log_fil": 53, "posisbl": 53, "holist": 53, "grafana": 53, "sso": 53, "dashboard": 53, "graph": 53, "showcas": [54, 55], "exec": [54, 55], "exect": 54, "transfer_input_fil": [54, 55], "temporari": 54, "condor_ssh_to_job": 54, "retri": 54, "clusterid": [54, 55], "procid": [54, 55], "condor_exec": 54, "_condor_stdout": 54, "_condor_stderr": 54, "process_fil": 54, "convolut": 54, "sit": 54, "meant": 54, "f_in": [54, 55], "f_out": [54, 55], "transfer_output_fil": [54, 55], "should_transfer_fil": [54, 55], "altogeth": 54, "if_need": [54, 55], "when_to_transfer_output": [54, 55], "on_exit": [54, 55], "on_exit_or_evict": 54, "evict": 54, "resum": 54, "transfer_output_remap": 54, "classad": 54, "rank": 54, "opsysandv": 54, "clockmin": 54, "clockdai": 54, "midnight": 54, "week": [54, 56], "480": 54, "8am": 54, "weekend": 54, "megabyt": 54, "requestmemori": 54, "requestcpu": 54, "2gb": 54, "3600": 54, "maxruntim": 54, "jobflavour": [54, 55], "microcenturi": 54, "seven": 54, "espresso": [54, 55], "longlunch": 54, "workdai": 54, "tomorrow": 54, "testmatch": 54, "nextweek": 54, "notify_us": 54, "your_email_address": 54, "tar": 54, "gz": 54, "experimenc": 54, "zxvf": 54, "went": 54, "prime": 54, "noeo": 54, "carefulli": 54, "fine": 54, "inv_mass_reconstructor": 54, "errno": 54, "inde": [54, 55], "govern": 54, "child_4momenta": 54, "dat": [54, 55], "linear": 54, "ioerror": 54, "subdirectori": 54, "fig": 54, "pdf": 54, "drawn": 54, "recal": 54, "outlin": 54, "queu": 55, "wouldn": 55, "python3": 55, "nobatch": 55, "run_tim": 55, "st": 55, "pri": 55, "2908604": 55, "07": 55, "distinguish": 55, "result_": 55, "determinist": 55, "data_0": 55, "data_1": 55, "data_": 55, "automis": 55, "inputfn": 55, "outputfn": 55, "enumer": 55, "zero": 55, "expr": 55, "varnam": 55, "slice": 55, "magnetpolar": 55, "elsewher": 55, "processid": 55, "ntupleid": 55, "00083875": 55, "00083879": 55, "lst": 55, "dir": 55, "glob": 55, "appar": 55, "mycustomvar": 55, "membership": 56, "unavail": 56, "client": 56, "brew": 56, "cask": 56, "java": 56, "sudo": 56, "apt": 56, "yum": 56, "epel": 56, "aur": 56, "scp": 56, "globu": 56, "occasion": 56, "168": 56, "x509_cert_dir": 56, "x509_voms_dir": 56, "vomsdir": 56, "voms": 56, "cert": 56, "usercert": 56, "pem": 56, "userkei": 56, "destroi": 56}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"contributor": 0, "code": 0, "conduct": 0, "contribut": [1, 9], "get": [1, 6, 56], "start": 1, "depend": 1, "instruct": 2, "materi": 2, "softwar": [2, 12, 21, 39], "first": 3, "analysi": [3, 5, 6, 29], "step": [3, 29], "tupletool": 4, "branch": 4, "product": 5, "monitor": 5, "creat": [5, 48, 56], "your": [5, 31, 38, 47, 53], "own": [5, 31], "test": 5, "local": [5, 23], "merg": 5, "request": 5, "data": [5, 6, 8, 10, 11, 26, 41], "The": [6, 10, 11, 24, 28, 32, 42], "flow": [6, 10, 11, 26], "preserv": 6, "file": [6, 16, 17, 40, 48, 54, 56], "us": [6, 14, 39, 43, 48, 52, 55], "high": 6, "energi": 6, "physic": [6, 24], "tool": [6, 46], "ask": 7, "good": 7, "question": 7, "find": [8, 43], "bookkeep": 8, "thi": 9, "lesson": [9, 28, 51], "lhcb": [10, 11, 12, 21, 24, 28, 39], "run": [11, 13, 23, 26, 41, 48], "3": [11, 43], "upgrad": 11, "trigger": [11, 38], "system": [11, 52], "hlt": [11, 38], "architectur": [11, 52], "select": [11, 32, 34], "persist": 11, "offlin": 11, "process": 11, "chang": [11, 26, 43], "davinci": [11, 13, 23, 30], "an": [12, 43, 48], "introduct": 12, "grid": [13, 17, 56], "how": [14, 48], "do": [14, 36], "i": [14, 45, 47], "decaytreefitt": 14, "earli": 15, "career": 15, "gender": 15, "divers": 15, "store": 16, "larg": 16, "eo": 16, "download": 17, "from": [17, 35], "more": [18, 24, 54, 55], "ganga": [18, 37, 40], "interact": 19, "explor": [19, 38], "dst": 19, "goal": 20, "cours": 20, "develop": [21, 39], "fun": 22, "loki": 22, "functor": 22, "minim": 23, "job": [23, 27, 37, 53], "reconstruct": 24, "build": [24, 28, 31], "decai": [24, 31, 35, 43, 44, 46], "candid": 24, "complex": 24, "pre": 25, "workshop": 25, "checklist": 25, "2": 26, "split": [27, 45], "subjob": 27, "starterkit": 28, "statu": 28, "content": [28, 31, 42, 51, 52], "extern": 28, "link": 28, "second": 29, "advanc": [30, 43], "dirac": 30, "gangatask": 30, "altern": 30, "backend": 30, "python": 30, "bug": 30, "condor": 30, "framework": [32, 34, 42], "A": 33, "histor": 33, "approach": 33, "modern": 34, "reus": 35, "particl": [35, 43, 45], "tree": 35, "what": [36, 47], "when": 36, "someth": 36, "fail": 36, "script": 37, "defin": 37, "ad": [37, 46], "helper": 37, "function": 37, "intro": 38, "add": 38, "inform": 38, "ntupl": [38, 48], "tck": 38, "list": 38, "line": [38, 41], "continu": 38, "tisto": [38, 50], "properti": 38, "git": 39, "manag": [40, 56], "differ": 41, "strip": 41, "simul": [41, 42, 45], "modifi": [43, 46], "multi": 43, "bodi": 43, "cocktail": 43, "final": 43, "state": 43, "radiat": 43, "mass": [43, 49], "lifetim": 43, "width": 43, "constant": 43, "exist": 43, "mc": 43, "sampl": [43, 48], "etc": 43, "control": 44, "decfil": 44, "why": 45, "fast": 45, "crucial": 45, "speed": 45, "up": 45, "detector": 45, "reduc": 45, "geometri": 45, "gun": 45, "redecai": 45, "gener": [45, 46, 48], "level": [45, 46], "cut": [45, 46], "channel": 46, "remov": 46, "gauss": [47, 48], "choos": 47, "version": 47, "which": 48, "option": [48, 54, 55], "onli": 48, "make": 48, "replac": 49, "hypothesi": 49, "dii": 50, "self": 51, "guid": 51, "batch": 52, "submiss": 52, "htcondor": 52, "other": [52, 55], "resourc": [52, 54], "submit": [53, 54], "simpl": 53, "track": 53, "input": 54, "output": 54, "argument": 54, "requir": [54, 56], "notif": 54, "queue": 55, "command": 55, "variabl": 55, "wai": 55, "mix": 55, "proxi": 56, "without": 56, "lbscript": 56, "instal": 56, "maco": 56, "homebrew": 56, "ubuntu": 56, "cento": 56, "arch": 56, "linux": 56, "certif": 56}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "nbsphinx": 4, "sphinx": 57}, "alltitles": {"Contributor Code of Conduct": [[0, "contributor-code-of-conduct"]], "Contributing": [[1, "contributing"]], "Getting Started": [[1, "getting-started"]], "Dependencies": [[1, "dependencies"]], "Instructional Material": [[2, "instructional-material"]], "Software": [[2, "software"]], "First Analysis Steps": [[3, "first-analysis-steps"]], "TupleTools and branches": [[4, "tupletools-and-branches"]], "Analysis Productions": [[5, "analysis-productions"]], "Monitoring productions": [[5, "monitoring-productions"]], "Creating your own production": [[5, "creating-your-own-production"]], "Testing your production locally": [[5, "testing-your-production-locally"]], "Creating a merge request": [[5, "creating-a-merge-request"]], "Analysis Productions Data": [[5, "analysis-productions-data"]], "The analysis flow and analysis preservation": [[6, "the-analysis-flow-and-analysis-preservation"]], "Getting data files": [[6, "getting-data-files"]], "Useful high energy physics analysis tools": [[6, "useful-high-energy-physics-analysis-tools"]], "Analysis Preservation": [[6, "analysis-preservation"]], "Asking good questions": [[7, "asking-good-questions"]], "Finding data in the Bookkeeping": [[8, "finding-data-in-the-bookkeeping"]], "Contribute to this lesson": [[9, "contribute-to-this-lesson"]], "The LHCb data flow": [[10, "the-lhcb-data-flow"]], "LHCb data flow in Run 3": [[11, "lhcb-data-flow-in-run-3"]], "LHCb upgrade": [[11, "lhcb-upgrade"]], "Upgrade of the LHCb trigger system": [[11, "upgrade-of-the-lhcb-trigger-system"]], "The HLT architecture": [[11, "the-hlt-architecture"]], "Selective persistency": [[11, "selective-persistency"]], "Offline data processing": [[11, "offline-data-processing"]], "Changes to DaVinci": [[11, "changes-to-davinci"]], "An introduction to LHCb Software": [[12, "an-introduction-to-lhcb-software"]], "Running DaVinci on the grid": [[13, "running-davinci-on-the-grid"]], "How do I use DecayTreeFitter?": [[14, "how-do-i-use-decaytreefitter"]], "Early career, gender and diversity": [[15, "early-career-gender-and-diversity"]], "Storing large files on EOS": [[16, "storing-large-files-on-eos"]], "Downloading a file from the grid": [[17, "downloading-a-file-from-the-grid"]], "More Ganga": [[18, "more-ganga"]], "Interactively exploring a DST": [[19, "interactively-exploring-a-dst"]], "Goals of the course": [[20, "goals-of-the-course"]], "Developing LHCb Software": [[21, "developing-lhcb-software"]], "Fun with LoKi Functors": [[22, "fun-with-loki-functors"]], "Running a minimal DaVinci job locally": [[23, "running-a-minimal-davinci-job-locally"]], "Physics at LHCb": [[24, "physics-at-lhcb"]], "The reconstruction": [[24, "the-reconstruction"]], "Building decay candidates": [[24, "building-decay-candidates"]], "Building more complex decays": [[24, "building-more-complex-decays"]], "Pre-workshop checklist": [[25, "pre-workshop-checklist"]], "Changes to the data flow in Run 2": [[26, "changes-to-the-data-flow-in-run-2"]], "Splitting a job into subjobs": [[27, "splitting-a-job-into-subjobs"]], "The LHCb Starterkit lessons Build Status": [[28, "the-lhcb-starterkit-lessons-build-status"]], "Contents:": [[28, null], [31, null], [42, null], [51, null], [52, null]], "External links:": [[28, null]], "Second Analysis Steps": [[29, "second-analysis-steps"]], "Advanced Dirac": [[30, "advanced-dirac"]], "GangaTasks": [[30, "gangatasks"]], "Alternative Backends - DIRAC (Python bugged)": [[30, "alternative-backends-dirac-python-bugged"]], "Alternative Backends - DIRAC (DaVinci)": [[30, "alternative-backends-dirac-davinci"]], "Alternative Backends - Condor": [[30, "alternative-backends-condor"]], "Building your own decay": [[31, "building-your-own-decay"]], "The Selection Framework": [[32, "the-selection-framework"]], "A Historical Approach": [[33, "a-historical-approach"]], "Modern Selection Framework": [[34, "modern-selection-framework"]], "Reuse particles from a decay tree": [[35, "reuse-particles-from-a-decay-tree"]], "What to do when something fails": [[36, "what-to-do-when-something-fails"]], "Scripting Ganga": [[37, "scripting-ganga"]], "Defining jobs with scripts": [[37, "defining-jobs-with-scripts"]], "Adding helpers functions": [[37, "adding-helpers-functions"]], "HLT intro": [[38, "hlt-intro"]], "Add trigger information to your ntuple": [[38, "add-trigger-information-to-your-ntuple"]], "Exploring a TCK: List of trigger lines": [[38, "exploring-a-tck-list-of-trigger-lines"]], "Add trigger information to your ntuple, continued": [[38, "add-trigger-information-to-your-ntuple-continued"]], "Add TISTOS information to your ntuple": [[38, "add-tistos-information-to-your-ntuple"]], "Exploring a TCK: Properties of trigger lines": [[38, "exploring-a-tck-properties-of-trigger-lines"]], "Using git to develop LHCb software": [[39, "using-git-to-develop-lhcb-software"]], "Managing files in Ganga": [[40, "managing-files-in-ganga"]], "Run a different stripping line on simulated data": [[41, "run-a-different-stripping-line-on-simulated-data"]], "The simulation framework": [[42, "the-simulation-framework"]], "Advanced: Modifying the decay": [[43, "advanced-modifying-the-decay"]], "3+ multi-body decays": [[43, "multi-body-decays"]], "Cocktail decays": [[43, "cocktail-decays"]], "Final state radiation": [[43, "final-state-radiation"]], "Changing particle masses / lifetimes/ widths": [[43, "changing-particle-masses-lifetimes-widths"]], "Finding Constants Used in an Existing MC Sample (Masses/Lifetimes/etc)": [[43, "finding-constants-used-in-an-existing-mc-sample-masses-lifetimes-etc"]], "Controlling the decay: DecFiles": [[44, "controlling-the-decay-decfiles"]], "Why fast simulation is crucial": [[45, "why-fast-simulation-is-crucial"]], "Speeding up the detector simulation": [[45, "speeding-up-the-detector-simulation"]], "Reduced detector geometry": [[45, "reduced-detector-geometry"]], "Particle gun": [[45, "particle-gun"]], "ReDecay": [[45, "redecay"]], "Speeding up the generation": [[45, "speeding-up-the-generation"]], "Split generator level cuts": [[45, "split-generator-level-cuts"]], "Modifying the decay": [[46, "modifying-the-decay"]], "Adding a decay channel": [[46, "adding-a-decay-channel"]], "Generator level cuts": [[46, "generator-level-cuts"]], "Removing the generator cuts": [[46, "removing-the-generator-cuts"]], "Modifying the cut tool": [[46, "modifying-the-cut-tool"]], "What is Gauss?": [[47, "what-is-gauss"]], "Choosing your Gauss Version": [[47, "choosing-your-gauss-version"]], "Which option files to use and how to run Gauss": [[48, "which-option-files-to-use-and-how-to-run-gauss"]], "Running Gauss and create a generator-only sample": [[48, "running-gauss-and-create-a-generator-only-sample"]], "Make an nTuple": [[48, "make-an-ntuple"]], "Replace a mass hypothesis": [[49, "replace-a-mass-hypothesis"]], "TisTos DIY": [[50, "tistos-diy"]], "Self guided lessons": [[51, "self-guided-lessons"]], "Batch submission using HTCondor": [[52, "batch-submission-using-htcondor"]], "System architecture": [[52, "system-architecture"]], "Other useful resources": [[52, "other-useful-resources"]], "Submitting a simple job": [[53, "submitting-a-simple-job"]], "Tracking your jobs": [[53, "tracking-your-jobs"]], "More submit file options": [[54, "more-submit-file-options"]], "Input files": [[54, "input-files"]], "Output files": [[54, "output-files"]], "Arguments": [[54, "arguments"]], "Resources and Requirements": [[54, "resources-and-requirements"]], "Notifications": [[54, "notifications"]], "Using the queue command": [[55, "using-the-queue-command"]], "More on variables": [[55, "more-on-variables"]], "Other ways to queue": [[55, "other-ways-to-queue"]], "Mixing options and variables": [[55, "mixing-options-and-variables"]], "Creating a grid proxy without LbScripts": [[56, "creating-a-grid-proxy-without-lbscripts"]], "Installation": [[56, "installation"]], "macOS with homebrew": [[56, "macos-with-homebrew"]], "Ubuntu": [[56, "ubuntu"]], "CentOS": [[56, "centos"]], "Arch Linux": [[56, "arch-linux"]], "Getting the required files and certificates": [[56, "getting-the-required-files-and-certificates"]], "Creating a proxy": [[56, "creating-a-proxy"]], "Managing the proxy": [[56, "managing-the-proxy"]]}, "indexentries": {}}) \ No newline at end of file +Search.setIndex({"alltitles": {"3+ multi-body decays": [[43, "multi-body-decays"]], "A Historical Approach": [[33, null]], "Add TISTOS information to your ntuple": [[38, "add-tistos-information-to-your-ntuple"]], "Add trigger information to your ntuple": [[38, "add-trigger-information-to-your-ntuple"]], "Add trigger information to your ntuple, continued": [[38, "add-trigger-information-to-your-ntuple-continued"]], "Adding a decay channel": [[46, "adding-a-decay-channel"]], "Adding helpers functions": [[37, "adding-helpers-functions"]], "Advanced Dirac": [[30, null]], "Advanced: Modifying the decay": [[43, null]], "Alternative Backends - Condor": [[30, "alternative-backends-condor"]], "Alternative Backends - DIRAC (DaVinci)": [[30, "alternative-backends-dirac-davinci"]], "Alternative Backends - DIRAC (Python bugged)": [[30, "alternative-backends-dirac-python-bugged"]], "An introduction to LHCb Software": [[12, null]], "Analysis Preservation": [[6, "analysis-preservation"]], "Analysis Productions": [[5, null]], "Analysis Productions Data": [[5, "analysis-productions-data"]], "Arch Linux": [[56, "arch-linux"]], "Arguments": [[54, "arguments"]], "Asking good questions": [[7, null]], "Batch submission using HTCondor": [[52, null]], "Building decay candidates": [[24, "building-decay-candidates"]], "Building more complex decays": [[24, "building-more-complex-decays"]], "Building your own decay": [[31, null]], "CentOS": [[56, "centos"]], "Changes to DaVinci": [[11, "changes-to-davinci"]], "Changes to the data flow in Run 2": [[26, null]], "Changing particle masses / lifetimes/ widths": [[43, "changing-particle-masses-lifetimes-widths"]], "Choosing your Gauss Version": [[47, "choosing-your-gauss-version"]], "Cocktail decays": [[43, "cocktail-decays"]], "Contents:": [[28, null], [31, null], [42, null], [51, null], [52, null]], "Contribute to this lesson": [[9, null]], "Contributing": [[1, null]], "Contributor Code of Conduct": [[0, null]], "Controlling the decay: DecFiles": [[44, null]], "Creating a grid proxy without LbScripts": [[56, null]], "Creating a merge request": [[5, "creating-a-merge-request"]], "Creating a proxy": [[56, "creating-a-proxy"]], "Creating your own production": [[5, "creating-your-own-production"]], "Defining jobs with scripts": [[37, "defining-jobs-with-scripts"]], "Dependencies": [[1, "dependencies"]], "Developing LHCb Software": [[21, null]], "Downloading a file from the grid": [[17, null]], "Early career, gender and diversity": [[15, null]], "Exploring a TCK: List of trigger lines": [[38, "exploring-a-tck-list-of-trigger-lines"]], "Exploring a TCK: Properties of trigger lines": [[38, "exploring-a-tck-properties-of-trigger-lines"]], "External links:": [[28, null]], "Final state radiation": [[43, "final-state-radiation"]], "Finding Constants Used in an Existing MC Sample (Masses/Lifetimes/etc)": [[43, "finding-constants-used-in-an-existing-mc-sample-masses-lifetimes-etc"]], "Finding data in the Bookkeeping": [[8, null]], "First Analysis Steps": [[3, null]], "Fun with LoKi Functors": [[22, null]], "GangaTasks": [[30, "gangatasks"]], "Generator level cuts": [[46, "generator-level-cuts"]], "Getting Started": [[1, "getting-started"]], "Getting data files": [[6, "getting-data-files"]], "Getting the required files and certificates": [[56, "getting-the-required-files-and-certificates"]], "Goals of the course": [[20, null]], "HLT intro": [[38, null]], "How do I use DecayTreeFitter?": [[14, null]], "Input files": [[54, "input-files"]], "Installation": [[56, "installation"]], "Instructional Material": [[2, null]], "Interactively exploring a DST": [[19, null]], "LHCb data flow in Run 3": [[11, null]], "LHCb upgrade": [[11, "lhcb-upgrade"]], "Make an nTuple": [[48, "make-an-ntuple"]], "Managing files in Ganga": [[40, null]], "Managing the proxy": [[56, "managing-the-proxy"]], "Mixing options and variables": [[55, "mixing-options-and-variables"]], "Modern Selection Framework": [[34, null]], "Modifying the cut tool": [[46, "modifying-the-cut-tool"]], "Modifying the decay": [[46, null]], "Monitoring productions": [[5, "monitoring-productions"]], "More Ganga": [[18, null]], "More on variables": [[55, "more-on-variables"]], "More submit file options": [[54, null]], "Notifications": [[54, "notifications"]], "Offline data processing": [[11, "offline-data-processing"]], "Other useful resources": [[52, "other-useful-resources"]], "Other ways to queue": [[55, "other-ways-to-queue"]], "Output files": [[54, "output-files"]], "Particle gun": [[45, "particle-gun"]], "Physics at LHCb": [[24, null]], "Pre-workshop checklist": [[25, null]], "ReDecay": [[45, "redecay"]], "Reduced detector geometry": [[45, "reduced-detector-geometry"]], "Removing the generator cuts": [[46, "removing-the-generator-cuts"]], "Replace a mass hypothesis": [[49, null]], "Resources and Requirements": [[54, "resources-and-requirements"]], "Reuse particles from a decay tree": [[35, null]], "Run a different stripping line on simulated data": [[41, null]], "Running DaVinci on the grid": [[13, null]], "Running Gauss and create a generator-only sample": [[48, "running-gauss-and-create-a-generator-only-sample"]], "Running a minimal DaVinci job locally": [[23, null]], "Scripting Ganga": [[37, null]], "Second Analysis Steps": [[29, null]], "Selective persistency": [[11, "selective-persistency"]], "Self guided lessons": [[51, null]], "Software": [[2, "software"]], "Speeding up the detector simulation": [[45, "speeding-up-the-detector-simulation"]], "Speeding up the generation": [[45, "speeding-up-the-generation"]], "Split generator level cuts": [[45, "split-generator-level-cuts"]], "Splitting a job into subjobs": [[27, null]], "Storing large files on EOS": [[16, null]], "Submitting a simple job": [[53, null]], "System architecture": [[52, "system-architecture"]], "Testing your production locally": [[5, "testing-your-production-locally"]], "The HLT architecture": [[11, "the-hlt-architecture"]], "The LHCb Starterkit lessons Build Status": [[28, null]], "The LHCb data flow": [[10, null]], "The Selection Framework": [[32, null]], "The analysis flow and analysis preservation": [[6, null]], "The reconstruction": [[24, "the-reconstruction"]], "The simulation framework": [[42, null]], "TisTos DIY": [[50, null]], "Tracking your jobs": [[53, "tracking-your-jobs"]], "TupleTools and branches": [[4, null]], "Ubuntu": [[56, "ubuntu"]], "Upgrade of the LHCb trigger system": [[11, "upgrade-of-the-lhcb-trigger-system"]], "Useful high energy physics analysis tools": [[6, "useful-high-energy-physics-analysis-tools"]], "Using git to develop LHCb software": [[39, null]], "Using the queue command": [[55, null]], "What is Gauss?": [[47, null]], "What to do when something fails": [[36, null]], "Which option files to use and how to run Gauss": [[48, null]], "Why fast simulation is crucial": [[45, null]], "macOS with homebrew": [[56, "macos-with-homebrew"]]}, "docnames": ["CONDUCT", "CONTRIBUTING", "LICENSE", "first-analysis-steps/README", "first-analysis-steps/add-tupletools", "first-analysis-steps/analysis-productions", "first-analysis-steps/analysisflow", "first-analysis-steps/asking-questions", "first-analysis-steps/bookkeeping", "first-analysis-steps/contributing-lesson", "first-analysis-steps/dataflow", "first-analysis-steps/dataflow-run3", "first-analysis-steps/davinci", "first-analysis-steps/davinci-grid", "first-analysis-steps/decay-tree-fitter", "first-analysis-steps/ecgd", "first-analysis-steps/eos-storage", "first-analysis-steps/files-from-grid", "first-analysis-steps/ganga-data", "first-analysis-steps/interactive-dst", "first-analysis-steps/introduction-to-course", "first-analysis-steps/lhcb-dev", "first-analysis-steps/loki-functors", "first-analysis-steps/minimal-dv-job", "first-analysis-steps/physics-at-lhcb", "first-analysis-steps/prerequisites", "first-analysis-steps/run-2-data-flow", "first-analysis-steps/split-jobs", "index", "second-analysis-steps/README", "second-analysis-steps/advanced-dirac", "second-analysis-steps/building-decays", "second-analysis-steps/building-decays-part0", "second-analysis-steps/building-decays-part1", "second-analysis-steps/building-decays-part2", "second-analysis-steps/filter-in-trees", "second-analysis-steps/fixing-errors", "second-analysis-steps/ganga-scripting", "second-analysis-steps/hlt-intro", "second-analysis-steps/lb-git", "second-analysis-steps/managing-files-with-ganga", "second-analysis-steps/rerun-stripping", "second-analysis-steps/simulation", "second-analysis-steps/simulation-advanced-dkfiles", "second-analysis-steps/simulation-dkfiles", "second-analysis-steps/simulation-fastsim", "second-analysis-steps/simulation-gencuts", "second-analysis-steps/simulation-intro", "second-analysis-steps/simulation-running-gauss", "second-analysis-steps/switch-mass-hypo", "second-analysis-steps/tistos-diy", "self-guided-lessons/README", "self-guided-lessons/htcondor", "self-guided-lessons/htcondor-first-job", "self-guided-lessons/htcondor-more-options", "self-guided-lessons/htcondor-queue", "self-guided-lessons/local-grid-proxy"], "envversion": {"nbsphinx": 4, "sphinx": 64, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["CONDUCT.md", "CONTRIBUTING.md", "LICENSE.md", "first-analysis-steps/README.md", "first-analysis-steps/add-tupletools.md", "first-analysis-steps/analysis-productions.md", "first-analysis-steps/analysisflow.md", "first-analysis-steps/asking-questions.md", "first-analysis-steps/bookkeeping.md", "first-analysis-steps/contributing-lesson.md", "first-analysis-steps/dataflow.md", "first-analysis-steps/dataflow-run3.md", "first-analysis-steps/davinci.md", "first-analysis-steps/davinci-grid.md", "first-analysis-steps/decay-tree-fitter.md", "first-analysis-steps/ecgd.md", "first-analysis-steps/eos-storage.md", "first-analysis-steps/files-from-grid.md", "first-analysis-steps/ganga-data.md", "first-analysis-steps/interactive-dst.md", "first-analysis-steps/introduction-to-course.md", "first-analysis-steps/lhcb-dev.md", "first-analysis-steps/loki-functors.md", "first-analysis-steps/minimal-dv-job.md", "first-analysis-steps/physics-at-lhcb.md", "first-analysis-steps/prerequisites.md", "first-analysis-steps/run-2-data-flow.md", "first-analysis-steps/split-jobs.md", "index.md", "second-analysis-steps/README.md", "second-analysis-steps/advanced-dirac.md", "second-analysis-steps/building-decays.md", "second-analysis-steps/building-decays-part0.md", "second-analysis-steps/building-decays-part1.md", "second-analysis-steps/building-decays-part2.md", "second-analysis-steps/filter-in-trees.md", "second-analysis-steps/fixing-errors.md", "second-analysis-steps/ganga-scripting.md", "second-analysis-steps/hlt-intro.md", "second-analysis-steps/lb-git.md", "second-analysis-steps/managing-files-with-ganga.md", "second-analysis-steps/rerun-stripping.md", "second-analysis-steps/simulation.md", "second-analysis-steps/simulation-advanced-dkfiles.md", "second-analysis-steps/simulation-dkfiles.md", "second-analysis-steps/simulation-fastsim.md", "second-analysis-steps/simulation-gencuts.md", "second-analysis-steps/simulation-intro.md", "second-analysis-steps/simulation-running-gauss.md", "second-analysis-steps/switch-mass-hypo.md", "second-analysis-steps/tistos-diy.md", "self-guided-lessons/README.md", "self-guided-lessons/htcondor.md", "self-guided-lessons/htcondor-first-job.md", "self-guided-lessons/htcondor-more-options.md", "self-guided-lessons/htcondor-queue.md", "self-guided-lessons/local-grid-proxy.md"], "indexentries": {}, "objects": {}, "objnames": {}, "objtypes": {}, "terms": {"": [1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 46, 49, 50, 52, 53, 54, 55], "0": [0, 2, 4, 5, 8, 10, 11, 13, 14, 17, 18, 19, 22, 23, 24, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 43, 46, 48, 49, 50, 53, 54, 55], "00": [5, 9, 36, 43, 55, 56], "000": [36, 43, 44, 46, 48], "0000": [5, 17, 18, 23, 33, 36, 38], "00000": 36, "00012345_00006789_1": 5, "00051179": 18, "00051179_00006978_1": 18, "00051318_00000509_1": 50, "00062514": 33, "00062514_00000008_7": 33, "00070793": [17, 23], "00070793_00000001_7": [17, 19, 22, 23, 41], "00070793_00000002_7": [17, 23], "00070793_00000003_7": 17, "00070793_00000004_7": 17, "00075559": 38, "00075559_00002816_1": 38, "00083875": 55, "00083879": 55, "00121782": 5, "00121782_00000004_1": 5, "0018": 43, "0020": 43, "0037": 43, "005": 46, "0059": 43, "0099": 43, "01": [12, 22, 40], "0106": 36, "0213": 36, "0259": 43, "0267": 43, "034": 44, "039": 38, "03902": 36, "05": 25, "053": 22, "05974": 36, "06": 22, "06383": 36, "07": 55, "0733": 22, "074757": 46, "08": [12, 25], "088": 22, "095000": 36, "0x1": 36, "0x11741801": 38, "0x11d1deb0": 19, "0x126576b0": 19, "0x1389": 36, "0x17": 36, "0x18": 36, "0x1d": 36, "0x2": 36, "0x20": 36, "0x214a160f": 38, "0x21751801": 38, "0x2ae94f0": 23, "0x2f009e70": 36, "0x2fe31b0": 23, "0x3": 36, "0x3ea": 36, "0x45": 36, "0x60e": 36, "0x610": 36, "0x611": 36, "0x612": 36, "0x619": 36, "0x623": 36, "0x69": 36, "0x6a": 36, "0x9": 36, "1": [0, 4, 5, 6, 10, 11, 12, 13, 17, 18, 19, 22, 23, 24, 26, 27, 30, 35, 36, 37, 38, 43, 44, 46, 47, 48, 49, 50, 53, 54, 55, 56], "10": [11, 22, 33, 36, 45, 46, 48], "100": [14, 19, 30, 33, 36, 38, 44, 46, 54], "1000": [13, 23, 30, 36, 38], "10000": 33, "100000": 36, "10000ev": 46, "100gb": 17, "101": 22, "1020": 24, "10259": 36, "1082": 48, "1094": 18, "10gb": [11, 17], "11": 22, "111": 36, "118624": 36, "12": [38, 55], "1200": [22, 30], "12212": 43, "123": 37, "128": [14, 36], "129": 22, "13": [22, 26, 36], "1308": 36, "1334": 22, "1371": 22, "1396": 22, "14": [6, 12, 22, 36], "1430": 43, "1440": 43, "145": [33, 36], "149": 14, "15": [18, 22], "1500": 4, "150kb": 10, "15164022": 5, "1520": 43, "1535": 43, "159": 43, "16": 53, "168": 56, "1680": 43, "17": [12, 36], "1720": 43, "174": 36, "174252": 50, "1743": 36, "1767": 36, "18": [36, 53], "1800": 14, "18519": 46, "1860": 22, "1870": 22, "19": [12, 36], "190": 36, "1900": 14, "19000": 36, "194041e": 43, "194841e": 43, "1958388": 5, "1966": 36, "1tb": 16, "2": [4, 5, 6, 8, 11, 12, 13, 14, 22, 23, 24, 25, 27, 28, 30, 33, 36, 37, 38, 43, 44, 46, 47, 48, 50, 52, 54, 55], "20": [22, 36, 43, 45, 54], "200": [14, 55], "2000": [14, 22, 41], "2005": 44, "2006": 22, "20091215": 44, "2010": [4, 14, 23, 26, 33, 34, 35, 36, 44, 46, 48, 49], "2011": 10, "2012": [10, 26], "2014": [22, 38], "2015": [20, 25, 26, 37], "2016": [8, 13, 17, 19, 23, 33, 37, 48, 50], "2017": 52, "20170721": [23, 48], "2018": [5, 12, 26, 38], "2019": 12, "2024": 5, "20241216": [46, 48], "2030": 14, "20491": 36, "20518": 36, "20gb": 52, "21": [18, 36], "211": 4, "2124": 43, "21440": 43, "21520": 43, "21535": 43, "21720": 43, "22": [25, 53, 55], "22212": 43, "23": [25, 36], "234": 36, "2349": 22, "23606": 36, "23l": 19, "24": 43, "2451": 22, "24_wednesday_18_may_2016": 40, "24c4": 5, "24c4_magdown_data": 5, "25": [25, 46, 55], "2558": 22, "25n": [8, 13, 48], "26": 22, "27": 46, "27163002": [8, 13], "27163003": [46, 48], "27175000": [44, 46, 48], "28": 41, "2875625": [53, 54], "28r1": 41, "29": 22, "2908604": 55, "29661": 36, "2gb": 54, "2tb": [16, 18], "3": [4, 5, 6, 18, 22, 23, 24, 26, 28, 30, 33, 34, 36, 38, 42, 44, 48, 54, 55], "30": [11, 30, 36, 38, 45], "300": [35, 55], "308": 36, "31": [22, 36], "31915": 36, "32": 22, "321": 22, "32124": 43, "32979": 36, "351": 36, "3600": 54, "3601": 36, "3699": 36, "3716": 18, "372": 36, "3795": 22, "38": 36, "388081e": 43, "38848": 36, "3889": 36, "39": 36, "4": [2, 6, 14, 18, 22, 33, 34, 36, 38, 43, 47, 55], "40": [10, 11], "400": [33, 46, 55], "4000": [22, 33], "40000": 36, "41": 36, "4102": 36, "413": 19, "42": [27, 33, 36], "420": 43, "421": 43, "426": 43, "4381": 36, "4400000": 43, "480": 54, "48844": 36, "49": 36, "491": 36, "4937": 22, "5": [5, 18, 22, 27, 30, 36, 38, 43, 46, 47, 48, 53, 55], "50": [11, 45, 46, 48], "500": [11, 22, 38], "50000ev": [46, 48], "508": 22, "50kb": 10, "51340": 36, "52000000": 43, "53": 25, "53500000": 43, "543": 36, "55434": 36, "55940": 36, "563": 43, "57": 36, "579": 36, "5848": 22, "59": 25, "59321": 36, "5bsource_branch": 21, "5d": 21, "6": [6, 8, 13, 36, 47, 48, 54], "60": 36, "61": 36, "612": 43, "625nspythia8_sim09c_trig0x6138160f_reco16_turbo03_stripping28r1noprescalingflagged_allstream": 17, "6267": 22, "632849e": 43, "636": 43, "637": 43, "6383": 36, "64894": 36, "667505": 25, "691": 36, "69100": 36, "6gb": 11, "6th": 52, "7": [26, 36, 55], "70": [33, 38, 50], "700": 36, "705629": 36, "712": 43, "713": 43, "714": 43, "72000000": 43, "723": 36, "72300": 36, "723584e": 43, "73": 14, "75": 46, "750": [22, 33], "7643": 22, "775": 43, "776": 43, "782": 18, "787": [13, 18, 27], "7977e": 36, "798": 36, "7999": [5, 21, 39], "8": [13, 26, 36, 45, 48, 52, 54, 55], "8000": [1, 9], "81": 36, "818": 43, "843": 36, "8443": 21, "848": 36, "8534": 22, "85995": 36, "8653": 22, "8899": 36, "89122": 36, "892": [35, 43], "892333": 36, "8949": 36, "8am": 54, "9": [4, 33, 35, 36], "90": 36, "90000000": 18, "908": 43, "922843": 36, "94": 36, "94000000": 5, "95": 36, "99": 36, "9997": 33, "A": [2, 7, 8, 9, 10, 11, 12, 14, 21, 22, 23, 24, 25, 28, 31, 32, 34, 38, 39, 43, 46, 48, 50, 53, 54], "AND": [2, 22], "AS": 2, "And": [5, 36, 55], "As": [0, 4, 5, 6, 8, 9, 11, 13, 14, 17, 18, 19, 22, 23, 24, 26, 30, 31, 32, 34, 40, 46, 49, 52, 53, 55], "At": [5, 8, 11, 12, 21, 23, 24, 30, 33, 39, 46], "BE": 2, "BUT": 2, "BY": 2, "Be": [22, 38, 42, 53, 54, 55], "Being": [7, 10, 23, 40], "But": [19, 21, 26, 37, 41], "By": [1, 8, 10, 13, 22, 24, 27, 33, 37, 40, 52, 53, 54, 55], "FOR": 2, "For": [1, 2, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 18, 19, 21, 22, 23, 24, 25, 26, 27, 30, 32, 33, 34, 35, 36, 38, 39, 40, 41, 43, 44, 45, 46, 48, 49, 50, 53, 54, 55], "IN": 2, "If": [1, 3, 4, 5, 7, 8, 9, 10, 14, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 34, 37, 38, 39, 40, 43, 44, 45, 46, 47, 50, 51, 53, 54, 55, 56], "In": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 32, 33, 34, 37, 38, 39, 40, 41, 45, 46, 48, 49, 50, 52, 53, 54, 55, 56], "It": [5, 6, 7, 9, 10, 11, 12, 14, 15, 18, 21, 22, 23, 24, 25, 26, 27, 29, 30, 32, 33, 34, 36, 37, 40, 41, 43, 45, 47, 49, 50, 52, 53, 54, 55, 56], "Its": [4, 5, 32, 52], "NO": [2, 54], "NOT": 2, "No": [2, 4, 12, 25, 36, 37, 40, 54], "Not": [8, 47], "OF": 2, "OR": [2, 22], "Of": 37, "On": [5, 14, 16, 19, 25, 38, 56], "One": [4, 5, 6, 7, 11, 12, 21, 33, 35, 37, 38, 45, 50, 54], "Or": [7, 42], "Such": [11, 17, 19, 55], "THE": [2, 48], "TO": 2, "TOS": [34, 38], "That": [10, 21, 23, 26, 50], "The": [2, 3, 4, 5, 7, 8, 9, 12, 13, 14, 15, 18, 19, 20, 21, 22, 23, 25, 26, 27, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56], "Their": 6, "Then": [1, 5, 9, 19, 22, 32, 36, 37, 40, 50, 54], "There": [5, 6, 8, 9, 10, 12, 16, 19, 22, 23, 25, 30, 33, 39, 40, 42, 49, 50, 53, 54, 55], "These": [5, 9, 10, 12, 20, 21, 26, 27, 28, 29, 30, 31, 34, 40, 50, 51, 53, 54, 55], "To": [1, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 21, 22, 23, 26, 27, 30, 32, 33, 34, 35, 37, 38, 39, 40, 41, 50, 53, 54, 55], "Tos": 50, "WITH": 2, "With": [4, 10, 19, 23, 24, 26, 33, 34, 54], "_": [5, 8, 21, 37, 39, 50, 53], "__gangainputdata": 30, "__gangainputdata__": 30, "__main__": 17, "__name__": 17, "_condor_stderr": 54, "_condor_stdout": 54, "_file0": [4, 23], "_italic_": 9, "_m": 14, "_mm": 14, "_p2pvwithipchi2": 22, "_refitpv": 36, "_site": 9, "ab": [33, 36], "abbrevi": 7, "abid": 1, "abil": [31, 45], "abl": [7, 10, 11, 12, 17, 19, 20, 22, 30, 37, 39, 40, 42, 53, 54, 55, 56], "about": [1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 18, 19, 20, 21, 22, 23, 28, 30, 32, 34, 36, 37, 38, 40, 42, 44, 45, 46, 48, 49, 53, 54, 55], "abov": [2, 4, 6, 10, 12, 14, 19, 22, 24, 25, 37, 46, 47, 48, 49, 50, 53, 54, 55, 56], "absid": [4, 22, 33, 35, 36], "absolut": 46, "abus": 0, "accept": [6, 8, 23, 36, 38, 40, 44, 46, 50], "acceptbadev": 41, "acceptfract": 38, "access": [4, 5, 6, 10, 11, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25, 27, 30, 32, 33, 36, 37, 40, 50, 52, 54, 56], "access_url": 37, "accessurl": [18, 37, 38], "accomod": 23, "accomplish": 49, "accord": [4, 12, 22, 32, 33, 34, 43], "account": [25, 52], "accumul": 22, "accur": 10, "achiev": [11, 15, 21, 23, 30, 32, 34, 35, 38, 55], "acquir": 6, "acquisit": 11, "across": [12, 21, 27, 33, 37, 50], "act": [14, 18, 33, 47], "action": [2, 13, 37, 48], "activ": [0, 5, 7, 27, 30, 40], "actual": [5, 14, 17, 23, 33, 34, 43, 44, 46], "ad": [4, 5, 21, 25, 27, 28, 36, 38, 42, 43, 44, 48, 49, 50, 53, 55], "adamass": [33, 35], "adapt": [0, 2, 11, 33, 43, 50], "adaptor": [22, 25], "add": [4, 5, 6, 8, 9, 10, 13, 14, 17, 19, 20, 21, 23, 27, 28, 30, 33, 35, 36, 37, 39, 40, 46, 48, 49, 50, 52, 53, 54], "add_argu": [37, 54, 55], "add_pi0": 35, "addbranch": [4, 14], "addinputdata": 30, "addit": [2, 4, 5, 6, 13, 14, 21, 24, 25, 26, 30, 42, 44, 45, 46, 47, 48, 50, 53, 54, 55], "addition": [10, 22, 32, 34, 41, 45, 56], "address": [5, 11, 21, 25, 34, 36, 39], "addto": 50, "addtoofflineinput": 50, "addtool": [46, 50], "addtotriggerinput": 50, "addtupletool": [4, 14, 38, 48], "admass": 33, "admin": 25, "advanc": [5, 19, 22, 23, 28, 29, 32, 38, 42, 50], "advance_hlt": 50, "advantag": [9, 10, 14, 19, 30, 31, 32, 34, 38], "advic": [8, 54], "advis": [21, 40], "af": [17, 18, 52, 53], "affect": [12, 14, 21], "after": [3, 4, 5, 6, 8, 9, 11, 12, 13, 14, 21, 23, 26, 36, 37, 40, 43, 45, 46, 53, 54], "afterward": [11, 17, 35, 52], "ag": 0, "again": [8, 14, 17, 22, 24, 25, 27, 30, 32, 33, 36, 37, 38, 39, 46, 55], "against": 1, "aggress": 45, "agre": [1, 22], "aidan": 5, "aim": [6, 11, 15, 21], "air": 7, "aka": [6, 46], "al": 16, "alert": [7, 54], "alg": 48, "algmap": 48, "algorithm": [4, 10, 11, 12, 14, 22, 23, 32, 33, 34, 35, 36, 38, 40, 49], "alia": [25, 43, 44, 46, 56], "alias": 12, "align": [0, 11], "all": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 44, 45, 46, 47, 48, 49, 50, 53, 54, 55], "allen": 11, "allot": 52, "allow": [1, 4, 5, 6, 11, 12, 13, 14, 19, 21, 22, 23, 26, 27, 30, 32, 33, 34, 39, 40, 44, 45, 49, 50, 52, 53, 54, 55, 56], "allstream": [8, 13, 17, 19, 22, 23, 33, 35, 36, 41, 49, 50], "almost": [12, 13, 38, 40, 46, 55], "alon": 38, "along": [9, 34, 37, 46, 52, 54], "alreadi": [11, 12, 18, 19, 20, 23, 31, 32, 33, 37, 40, 41, 44, 45, 49, 55, 56], "also": [1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 36, 37, 39, 40, 44, 45, 46, 47, 50, 53, 54, 55], "alter": 46, "altern": [7, 14, 17, 28, 55, 56], "although": [5, 8, 14, 21, 53, 54], "altogeth": 54, "alwai": [4, 5, 6, 8, 10, 13, 21, 22, 23, 37, 38, 40, 43, 50, 54, 55], "am": [17, 40], "amaxdoca": 33, "ammount": 30, "among": [11, 21, 39, 55], "amongst": [22, 23], "amount": [10, 18, 46, 52, 54], "an": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 45, 46, 47, 49, 50, 51, 53, 54, 55, 56], "analog": 50, "analys": [5, 6, 8, 12, 16, 23, 24, 26, 32, 38], "analysi": [4, 7, 8, 9, 10, 11, 12, 13, 14, 19, 20, 21, 22, 23, 24, 25, 26, 28, 30, 31, 32, 38, 40, 45, 50, 52], "analysisdata": 5, "analysisproduct": 5, "analyst": [3, 5, 10, 26, 30, 42, 50], "angl": [14, 22], "angular": [43, 44], "ani": [2, 3, 4, 5, 6, 8, 12, 13, 17, 18, 21, 22, 23, 24, 26, 29, 30, 32, 34, 36, 37, 40, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "annoi": 37, "anoth": [5, 7, 16, 21, 22, 24, 32, 33, 34, 36, 46, 50, 53, 54, 55], "answer": [7, 40], "anti": [43, 44], "antiparticl": 22, "anyon": [5, 9], "anyth": [2, 5, 12, 13, 24, 34, 41, 44, 48, 54], "anywai": 26, "anywher": 40, "ap": 5, "apart": [12, 27, 30], "apd": 5, "apearc": 40, "api": 5, "app": 13, "appar": 55, "appconfigopt": 48, "appear": [0, 5, 23, 25, 39, 53, 54], "append": [22, 30, 37, 38, 40, 56], "appendlin": 41, "appendpostconfigact": 48, "appendtomainsequ": [41, 49], "appendtransform": 30, "appli": [2, 4, 5, 6, 10, 14, 24, 30, 32, 33, 41, 45, 46, 47, 54], "applic": [2, 5, 6, 8, 10, 11, 12, 13, 19, 22, 23, 29, 30, 37, 38, 40, 41, 42, 47, 48, 49, 50, 56], "applicationmgr": [12, 22], "appmgr": [19, 22, 50], "appreci": 33, "approach": [3, 24, 28, 31, 32, 39], "appropri": [2, 5, 27, 30, 37, 39, 53], "approv": [2, 21], "approxim": [11, 38], "apt": 56, "ar": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 49, 50, 51, 52, 53, 54, 55], "arbitrari": [6, 26], "arbitrarili": 14, "arch": [30, 51], "architectur": [28, 51], "archiv": [7, 40, 41], "area": [6, 11, 16, 18, 39, 52, 53, 54], "aren": [7, 29, 31, 54], "arg": [5, 30, 37, 40, 54, 55], "argpars": [37, 54, 55], "argument": [4, 12, 14, 19, 22, 27, 30, 32, 34, 37, 40, 49, 50, 51, 52, 55], "argumentpars": [37, 54, 55], "argv": [17, 19, 37], "aris": [2, 10], "around": [5, 10, 12, 14, 18, 22, 24, 34, 38, 40, 41, 46], "arrabito": 44, "arrai": [6, 11, 14, 22, 30, 33], "arriv": [10, 25], "arrog": 7, "arrow": 14, "ask": [5, 8, 10, 14, 17, 20, 21, 23, 25, 26, 28, 40], "aspect": 24, "assign": [24, 27, 52, 53, 54], "associ": [2, 4, 10, 12, 14, 22, 24, 26, 34, 43], "assort": 5, "assum": [13, 19, 25, 40, 48, 56], "assumpt": 14, "ast": [32, 33], "attach": [4, 23], "attack": 0, "attent": 32, "attribut": [2, 18, 23, 25, 27, 30, 40, 41, 54], "attributeerror": 22, "aur": 56, "authent": [25, 56], "author": 2, "auto": [19, 54], "autom": [5, 40], "automag": 37, "automat": [5, 6, 21, 22, 27, 30, 39, 40, 49, 52, 53, 54, 55], "automaticdata": [33, 34, 38], "automis": 55, "auxdesktopbas": 22, "av": 7, "avail": [0, 2, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 17, 22, 23, 24, 27, 30, 32, 34, 37, 38, 39, 40, 41, 42, 45, 47, 49, 50, 52, 53, 56], "averag": [11, 24], "avoid": [5, 11, 12, 17, 18, 19, 33, 34, 45, 55], "awai": [8, 22, 26], "awar": [14, 38, 42], "awkward": 6, "axi": 46, "b": [4, 5, 8, 9, 31, 35, 38, 43, 44, 48, 52], "b02dkpi": 5, "b0sig": 43, "b2cc": 5, "b2dmunux_d0": 38, "b_": [11, 24], "bachelor": 14, "back": [14, 24, 36, 40, 52, 53, 54, 55], "backend": [13, 18, 27, 28, 37, 40], "background": [6, 15, 27], "backup": 40, "bad": [23, 26, 48], "badeventselect": 41, "bandwidth": 11, "bank": 38, "banner": 19, "bar": [5, 8, 24], "bare": [23, 32], "base": [4, 5, 6, 11, 12, 14, 22, 24, 25, 30, 32, 40, 52, 53], "baselin": 11, "bash": [3, 6, 12, 21, 25, 30, 53, 54, 55], "bashrc": [12, 56], "basi": [6, 22], "basic": [9, 21, 30, 32, 33, 38, 39, 42, 44, 45, 52, 53], "basiclokitt": 48, "batch": [5, 28, 40, 51, 53, 54, 55], "batch_nam": 53, "bbar": 44, "beam": [38, 48], "beam4000gev": 18, "beam6500gev": [8, 13, 48], "beam6800gev": 5, "beauti": 50, "becaus": [10, 11, 12, 13, 19, 21, 22, 24, 26, 27, 30, 32, 33, 34, 37, 39, 41, 43, 50, 54, 55], "becom": [7, 22, 24, 34, 55], "been": [4, 5, 8, 11, 20, 21, 22, 23, 24, 32, 33, 34, 39, 41, 43, 44, 50, 51, 53, 54, 56], "befor": [3, 4, 5, 7, 8, 11, 13, 17, 18, 19, 21, 22, 23, 24, 25, 27, 29, 30, 33, 34, 36, 37, 39, 40, 42, 46, 50, 53, 55], "began": 26, "begin": [6, 7, 10, 20, 24, 29, 31, 44], "behav": [19, 23, 55], "behavior": 46, "behaviour": [0, 22, 37, 54, 55], "behind": [12, 14, 22, 23, 30, 32, 54], "being": [5, 6, 7, 10, 11, 21, 23, 33, 36, 37, 38, 45, 54, 55], "belong": [5, 19, 38, 39], "below": [5, 7, 13, 14, 24, 25, 30, 38, 45, 48, 53], "bender": [18, 19], "benefici": 10, "benefit": 12, "besid": [9, 11], "best": [3, 4, 7, 8, 10, 12, 13, 14, 19, 22, 24, 26, 36, 38, 41, 43], "best_pv": 22, "bet": [7, 8], "better": [7, 14, 26, 33, 54], "between": [10, 11, 12, 14, 24, 26, 30, 32, 39, 40, 45, 46, 47, 50, 52, 54], "beyond": [45, 46, 50, 53], "bia": [44, 45, 46, 47], "big": [6, 7, 32], "bin": [21, 25, 30, 38, 39, 45, 46, 48, 53, 54, 55], "bind": 22, "bit": [4, 6, 8, 21, 22, 32, 33, 34, 39, 54, 55], "bitwis": 22, "bk_queri": 5, "bkpath": [13, 30], "bkqueri": [13, 18, 30, 37], "blob": 43, "block": [22, 33], "bodi": [0, 22, 28, 31, 34, 42, 54], "bodydecai": 34, "bold": 9, "book": [1, 25], "bookeep": 8, "bookkeep": [5, 13, 17, 23, 28, 37, 40, 46, 47, 48], "bool": [10, 22], "boolean": [14, 27, 54], "boost": 6, "bore": 37, "both": [4, 5, 6, 8, 11, 12, 14, 22, 24, 26, 35, 38, 40, 47, 50, 52, 53, 55], "bottleneck": 11, "bottom": [5, 8, 21, 25, 32, 44], "boundari": 14, "box": 25, "bpv": [4, 22], "bpvdira": [4, 33], "bracket": 18, "brainer": 7, "branch": [1, 5, 9, 14, 18, 21, 22, 28, 38, 39, 43], "break": [19, 30, 36], "breakdown": 30, "breakthrough": 11, "brew": 56, "brief": 45, "briefli": [4, 21], "bring": [11, 25], "broad": [7, 8, 14], "broken": [9, 30, 54], "brows": [13, 19, 21, 23, 39], "browser": [1, 5, 8, 9, 25, 53], "brunel": [10, 26, 31, 50], "bu2jpsik_24c4_magdown": 5, "bu2jpsik_24c4_magup": 5, "buffer": [11, 38], "bug": [1, 6, 7, 9, 10, 28, 34], "build": [1, 2, 3, 4, 10, 11, 14, 21, 22, 29, 30, 32, 33, 34, 35, 36, 39, 41, 42, 44], "build_d0": 32, "builder": [11, 36], "buildstream": 41, "built": [13, 19, 22, 24, 30, 32, 44], "bunch": [10, 11, 12, 24], "busi": [7, 30], "button": [8, 9, 25, 39], "bw32": 18, "c": [4, 6, 8, 11, 12, 21, 22, 24, 36, 38, 41, 44, 46, 53, 54], "calcul": [10, 12, 14, 22, 39, 50, 54], "calibr": [4, 6, 11], "call": [4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 27, 30, 31, 32, 34, 37, 38, 39, 40, 48, 49, 50, 53], "callibr": 6, "callout": 34, "calo": 36, "campaign": [10, 41], "can": [1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56], "candid": [4, 6, 10, 11, 14, 19, 20, 22, 23, 26, 28, 33, 38, 47, 48, 49, 50], "cannot": [2, 11, 12, 17, 26, 30, 34, 38, 47], "capabl": [11, 26, 32, 54], "capac": 18, "captur": [23, 37, 49], "card": 11, "care": [14, 23, 32, 34, 39, 45, 49, 54], "career": 28, "carefulli": 54, "carlo": [8, 10, 20, 22, 23, 42, 48], "carpentri": [2, 3], "carri": 30, "case": [4, 5, 8, 11, 12, 13, 14, 17, 18, 19, 21, 22, 23, 25, 27, 30, 33, 34, 39, 40, 41, 42, 44, 46, 48, 50, 54, 55], "cask": 56, "cat": [30, 40, 54], "catalog": [17, 23], "catalogu": 8, "categori": 38, "caus": [18, 50, 52, 54], "caveat": [4, 30, 33, 41], "cbar": 44, "cc": [2, 4, 14, 23, 33, 34, 35, 38, 44, 46, 48, 49], "cd": [1, 5, 6, 9, 14, 21, 39, 40, 42], "cdecai": [43, 44, 46], "cee": 25, "cento": 51, "centos7": [12, 13, 21, 30, 54], "centr": 26, "central": [6, 10, 11, 21, 24, 33, 41, 56], "centralis": 5, "cern": [3, 5, 6, 7, 12, 16, 17, 18, 21, 25, 29, 30, 33, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 50, 52, 53, 56], "cernbox": 16, "cert": 56, "certain": [4, 5, 6, 11, 12, 13, 21, 22, 27, 30, 34, 54], "certainti": 24, "certif": [13, 17, 25, 28, 51], "ch": [3, 5, 7, 12, 16, 17, 21, 25, 29, 30, 33, 38, 39, 41, 42, 43, 44, 45, 46, 48, 50, 52, 56], "chain": [4, 10, 14, 20, 21, 22, 24, 30, 32, 33, 34, 36, 49], "challeng": [11, 12, 14, 38], "chanc": [7, 9, 42], "chang": [1, 2, 5, 6, 8, 9, 10, 13, 14, 17, 18, 20, 21, 23, 25, 28, 30, 32, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 49, 53, 54, 55], "channel": [5, 7, 40, 42, 52], "charg": [2, 14, 22, 23, 24, 31, 36, 43, 46], "chargeconj": [43, 44, 46], "charm": [10, 11, 14, 44, 49, 50], "chat": 7, "check": [1, 4, 5, 7, 11, 13, 14, 19, 20, 21, 22, 23, 25, 26, 33, 34, 35, 36, 37, 38, 39, 44, 46, 48, 50, 53, 54, 56], "checker": 4, "checklist": [12, 28], "checkout": [5, 9, 21, 38, 39], "checkpv": 4, "chew": 7, "chi": [22, 24], "chi2": [14, 22], "chi2vx": 22, "child": [4, 14, 19, 22, 33, 35], "child_4momenta": 54, "children": [4, 19, 22, 32, 33, 45], "chime": 7, "chmod": [40, 53], "choic": [5, 8, 18, 21, 30, 37, 41, 54, 55], "choos": [5, 7, 8, 10, 11, 24, 27, 28, 40, 42, 46, 54, 55], "chosen": [14, 50], "ci": [1, 5, 6, 21], "claim": 2, "clash": 33, "class": [12, 22, 23, 30, 32, 33, 34, 36], "classad": 54, "classif": 50, "classifi": 50, "clean": [5, 21, 24, 52], "clear": [6, 17, 20, 23, 33, 38, 48, 54], "clearli": [29, 34], "clever": [9, 17], "click": [4, 5, 8, 9, 23, 25, 39, 48], "clid": 36, "client": 56, "clockdai": 54, "clockmin": 54, "clone": [5, 9, 21, 39, 40, 42], "close": [10, 12, 24, 27], "closer": 39, "closest": 24, "cluster": [10, 11, 53, 54, 55], "clusterid": [54, 55], "cmake": 21, "cmakelist": [21, 39], "cmd": [53, 55], "cn": 25, "co": 36, "cocktail": [28, 42], "code": [1, 4, 6, 7, 11, 20, 21, 22, 27, 28, 30, 31, 32, 33, 34, 35, 37, 39, 40, 43, 44, 49, 54], "collabor": [6, 12, 20, 23, 39], "collect": [12, 17, 42], "collid": [10, 24], "collis": [10, 12, 20, 23, 24, 26], "collision12": [5, 18], "collision18": 38, "collision24": 5, "com": [9, 40], "combcut": 36, "combin": [4, 8, 10, 14, 22, 24, 26, 31, 32, 33, 34, 35, 36, 38, 45, 46, 50], "combinat": 36, "combination123cut": 34, "combination12cut": 34, "combinationcut": [22, 33, 34, 35], "combinator": [26, 33], "combine3bodyselect": 34, "combine4bodyselect": 34, "combine_d0": 33, "combine_dstar": 33, "combinedstar": 33, "combineparticl": [22, 32, 33, 34, 35], "combineselect": [34, 35], "come": [6, 10, 12, 14, 19, 26, 30, 33, 35, 37, 53], "comfort": 7, "command": [5, 12, 13, 14, 16, 17, 19, 21, 23, 25, 28, 30, 37, 38, 39, 40, 41, 47, 51, 52, 53, 54, 56], "comment": [0, 1, 9, 13, 37, 44], "commerci": 2, "commit": [0, 1, 5, 6, 9, 21, 39], "common": [2, 6, 12, 22, 24, 30, 31, 32, 33, 34, 37, 42, 46, 53, 54], "commonli": [6, 23, 24, 34, 37, 47, 54, 56], "commonparticl": 33, "commun": 6, "compact": 22, "compar": [14, 21, 22, 30, 33, 34, 38, 41, 45, 46, 47, 50], "comparison": [25, 50], "compat": [23, 40], "compet": 7, "compil": [13, 21, 39, 44], "complain": 41, "complementari": 6, "complet": [5, 7, 11, 12, 13, 16, 21, 23, 24, 27, 37, 39, 40, 44, 52, 53, 54, 55], "complex": [6, 10, 12, 19, 27, 28, 34, 36, 37, 46, 49], "compli": 2, "complic": [22, 30, 32, 33, 38, 39, 43, 49], "compon": [21, 22, 24], "composit": [31, 38], "comprehens": 12, "compress": 18, "compris": [47, 50], "compromis": 26, "comput": [3, 5, 6, 9, 10, 11, 12, 19, 21, 22, 23, 25, 26, 52, 55], "computation": [10, 11, 46], "con": 36, "concept": [6, 10, 11, 12, 30, 32, 33, 52], "conceptu": 22, "concern": 10, "conclus": 23, "concret": 13, "concurr": 38, "conda": [6, 18, 30], "conddb": [23, 38, 43, 48], "conddbtag": [23, 48], "condit": [2, 5, 8, 14, 23, 54], "conditions_vers": 5, "condor": [28, 52], "condor_exec": 54, "condor_hold": 53, "condor_q": [53, 55], "condor_releas": 53, "condor_rm": 53, "condor_ssh_to_job": 54, "condor_submit": [53, 54], "condor_suspend": 53, "condor_wait": 53, "conduct": [1, 6, 28], "conf": 21, "confid": [3, 7, 20, 30], "config": [21, 39, 40, 42, 48], "configur": [4, 5, 8, 10, 12, 13, 14, 17, 18, 19, 21, 23, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50], "configurablegener": 34, "conflict": 39, "confusingli": 14, "congratul": [9, 21], "conjug": 49, "connect": [2, 17, 18, 25, 38, 39, 52, 54], "consd": 14, "consdkpi": 14, "consequ": [4, 21, 23, 32], "conserv": 24, "consid": [21, 22, 24, 26, 39, 50, 52, 56], "consist": [4, 6, 10, 11, 12, 23, 38], "consol": 13, "constant": [11, 28, 42, 44], "constitut": [22, 34], "constrain": 14, "constraint": 14, "constraintooriginvertex": 14, "construct": [10, 34, 37, 55], "consum": [23, 33, 47], "cont": 36, "conta": 36, "contact": [0, 5], "contain": [6, 8, 10, 12, 14, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 44, 46, 48, 50, 53, 54, 55], "content": [5, 12, 13, 16, 18, 19, 30, 40, 54], "context": [22, 23, 37, 54], "continu": [5, 12, 27, 28, 37, 42], "contract": [2, 15], "contribut": [0, 6, 7, 20, 21, 24, 28, 43], "contributor": [1, 28], "control": [6, 10, 21, 28, 39, 42], "conven": 5, "conveni": [17, 21, 39, 40, 54, 55], "convent": [22, 44], "converg": 14, "convert": [10, 12, 38, 54], "convinc": 46, "convolut": 54, "coordin": [5, 10, 26], "copi": [2, 5, 8, 9, 13, 17, 23, 38, 41, 42, 48, 50, 52, 54, 56], "copyright": 2, "core": [11, 21, 28, 30, 54], "coretask": 30, "coretransform": 30, "correct": [5, 6, 14, 30, 32, 41, 48, 49, 54], "correctli": [5, 19, 22, 50, 53, 54], "correl": 45, "correspond": [4, 5, 8, 10, 12, 14, 22, 23, 24, 27, 33, 36, 37, 39, 41, 43, 47, 50], "correspondingli": 8, "cosin": 22, "cost": 39, "could": [4, 5, 8, 11, 19, 20, 23, 24, 32, 33, 34, 35, 37, 40, 43, 50, 54, 55], "couldn": 40, "count": [4, 24], "counter": [36, 40], "coupl": [5, 6, 8, 12, 30, 37, 40, 53, 54, 55], "cours": [3, 24, 26, 28, 37], "coven": 0, "cover": [6, 20, 24, 26, 37, 54], "cp": 16, "cpu": [22, 32, 33, 34, 38, 45, 46, 47, 52, 54], "creat": [4, 6, 7, 8, 9, 10, 12, 13, 14, 19, 21, 22, 23, 24, 28, 30, 31, 32, 34, 37, 38, 39, 40, 42, 44, 46, 47, 49, 50, 51, 52, 53, 54, 55], "create_greet": 22, "create_job": 37, "creation": 47, "creativ": 2, "credenti": [21, 39, 56], "credential_requir": 18, "credit": 2, "creed": 15, "criteria": [4, 22, 24, 33, 34], "criterium": 50, "critic": [22, 34], "cross": [10, 11, 12, 26], "crucial": [8, 11, 28, 42], "ctrl": [12, 25, 53], "cuda": 11, "cultur": 15, "cumbersom": [21, 33, 34], "curat": 22, "current": [5, 10, 17, 22, 26, 30, 33, 40, 47, 53, 54, 56], "curvatur": 24, "custom": [4, 11, 14, 21, 37, 38, 41], "custom_lin": 41, "custom_stream": 41, "customis": 46, "customstream": 41, "cut": [10, 22, 32, 33, 34, 36, 38, 41, 42, 44, 47], "cuttool": [46, 47], "cvmf": [5, 6, 30, 52, 54, 56], "d": [4, 5, 7, 8, 12, 14, 19, 21, 22, 23, 25, 28, 31, 32, 33, 34, 35, 36, 44, 46, 48, 49], "d0": [4, 14, 22, 23, 32, 33, 34, 35, 36, 38, 44, 46, 48, 49], "d0_comb": [33, 34], "d0_decay_product": [33, 34], "d0_hybrid": 4, "d0_kpi": 38, "d0_mass": 4, "d0_sel": [33, 34, 35, 36], "d0_vertex": [33, 34], "d2hhpromptdst2d2kklin": [10, 19, 22, 23, 34, 35, 49], "d2hhpromptdst2d2r": 50, "d2hhpromptdst2d2rslin": 50, "d2hmunustream": 48, "d_dalitz": 43, "dai": [7, 25, 39, 54], "daili": 19, "daisi": 49, "dalitz": [4, 43], "damag": 2, "daniel": 25, "daq": [11, 36, 48], "dashboard": 53, "dat": [54, 55], "data": [3, 7, 12, 13, 14, 18, 19, 20, 22, 23, 24, 25, 27, 28, 30, 31, 32, 37, 38, 40, 48, 49, 50, 52, 54, 55, 56], "data_": 55, "data_0": 55, "data_1": 55, "data_typ": 5, "databas": [23, 38, 43, 48], "datafil": 48, "dataflow": 11, "dataobject": 36, "dataondemand": [35, 49], "dataondemandsvc": 48, "datapkg": 5, "dataset": [5, 17, 18, 23, 24, 27, 30, 37, 47], "datasvchelp": 19, "datatak": 12, "datatyp": [19, 23, 37, 38, 48], "date": [40, 44], "daughter": 22, "daughtercut": 22, "daughterscut": [33, 34], "daughtersinlhcb": [44, 46], "daughterstoconstrain": 14, "daughtersvector": [19, 22], "daugthersinlhcb": 46, "davinci": [4, 5, 6, 7, 8, 10, 12, 14, 19, 21, 22, 26, 28, 32, 33, 34, 36, 37, 38, 41, 48, 49], "davincidev": [13, 21, 30], "davincidev_v45r8": 13, "davincitutori": 11, "db": 23, "dc": 25, "dddb": [23, 43, 48], "dddbtag": [23, 48], "deactiv": [45, 48], "deal": [2, 11, 34, 50], "debug": [5, 19, 21, 22, 32, 36, 54], "debug_p_components_sum": 22, "dec": [42, 44, 47], "decai": [4, 5, 8, 10, 11, 14, 19, 20, 22, 23, 26, 28, 32, 33, 34, 36, 38, 42, 45, 47, 48, 49, 50], "decay_head": 48, "decaydescriptor": [33, 34, 35], "decaytool": 47, "decaytre": [4, 14], "decaytreefitt": 28, "decaytreetupl": [4, 14, 19, 21, 23, 32, 34, 41, 48, 49], "decaytreetupleannpid": 4, "decaytreetupledalitz": 4, "decaytreetuplejet": 4, "decaytreetuplemc": 4, "decaytreetuplemuoncalib": 4, "decaytreetuplereco": 4, "decaytreetupletrack": 4, "decaytreetupletrigg": 4, "decayvertic": 36, "decfil": [8, 28, 42, 43, 46], "decfilesroot": 48, "decid": 52, "decis": [6, 8, 11, 12, 19, 23, 34, 38, 41, 50, 52], "declar": 13, "decor": 22, "decprodcut": [8, 44, 46], "decreas": 38, "decreport": [19, 41, 50], "dectre": 49, "dedic": [7, 11, 21], "deduc": 24, "deepcopi": 48, "def": [19, 22, 37, 48], "default": [4, 5, 10, 11, 12, 13, 14, 18, 22, 23, 25, 27, 30, 34, 37, 38, 39, 40, 41, 43, 46, 54, 55], "defici": 10, "defin": [4, 6, 8, 10, 11, 13, 14, 21, 22, 23, 28, 30, 38, 39, 40, 43, 44, 50, 55], "definit": [7, 24, 26, 37, 44], "degre": 4, "del": 48, "delet": [37, 56], "demand": [11, 19, 21], "demonstr": [7, 37], "demystifi": 20, "densiti": 24, "depend": [4, 7, 14, 21, 28, 29, 30, 32, 38, 40, 45, 49], "depric": 11, "depth": 18, "dereferenc": 50, "derogatori": 0, "descend": 26, "describ": [4, 7, 10, 11, 14, 21, 23, 24, 44], "descript": [5, 21, 23, 24, 37, 40, 47], "descriptor": [4, 14, 23, 33, 44, 48, 49], "design": [10, 12, 21, 22, 24, 30, 32], "desir": [5, 23, 41, 45, 47, 49], "desktop": 25, "despit": 7, "destroi": 56, "detail": [4, 5, 7, 11, 12, 13, 14, 21, 22, 23, 24, 26, 30, 35, 44, 45, 49, 52], "detect": [6, 19], "detector": [6, 10, 11, 12, 23, 24, 26, 38, 42, 46, 47, 48, 50], "determin": [11, 33, 38, 50, 52, 55], "determinist": 55, "deuterium": 24, "deuteron": 24, "dev": [21, 38, 39, 42], "dev42": 5, "develop": [6, 7, 11, 13, 28, 29, 38, 40, 45, 51], "df": [37, 40], "df2": 40, "dfr2": 40, "diagram": 52, "dict": [4, 12], "dictionari": [14, 33, 49, 50], "did": [5, 7, 22, 40, 45, 46], "didn": [12, 40, 42], "differ": [4, 5, 6, 8, 10, 11, 12, 13, 14, 20, 21, 23, 25, 26, 28, 30, 32, 35, 37, 38, 45, 46, 47, 50, 52, 53, 54, 55], "difficult": 4, "difficultli": 37, "digi": 48, "digit": [10, 38, 44, 47], "dii": 28, "dilling": 9, "dimuon": [10, 24], "dipol": 24, "dir": 55, "dira": [4, 22], "dirac": [5, 13, 17, 18, 23, 25, 27, 28, 38, 47, 52], "dirac_env": 18, "diracfil": [18, 30, 37, 40], "diracopt": 30, "diracproxi": 18, "direct": [22, 47], "directli": [6, 8, 9, 21, 22, 26, 30, 40, 41, 43], "directori": [5, 13, 16, 17, 19, 21, 23, 30, 37, 39, 40, 53, 54, 55], "dirti": 48, "disabl": [0, 15, 54], "disadvantag": [10, 14, 31], "discard": [10, 38], "discourag": 40, "discours": 7, "discov": 21, "discoveri": 11, "discrimin": 15, "discuss": [4, 6, 7, 8, 10, 19, 21, 22, 32, 33, 34], "disk": [6, 10, 11, 16, 18, 26, 37, 38, 39, 46], "displai": [5, 25, 27, 53, 54], "distanc": [12, 22, 24], "distancecalcul": 22, "distcal": 22, "distinct": [30, 49], "distinguish": 55, "distribut": [2, 4, 6, 7, 14, 25, 30, 40, 45, 46, 50, 52], "distro": 30, "disturb": 30, "dive": 20, "divers": 28, "djwhite": [53, 55], "dkfile": 44, "dll": 4, "dlrow": 40, "dm": [17, 38], "dn": 25, "do": [0, 2, 4, 5, 6, 7, 9, 10, 12, 13, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 30, 32, 33, 34, 35, 37, 38, 40, 42, 43, 45, 49, 53, 54, 55], "docker": 6, "document": [0, 2, 4, 5, 6, 8, 9, 11, 12, 15, 21, 22, 28, 30, 37, 44, 52, 53, 54, 55], "dod": 48, "doe": [3, 4, 10, 14, 20, 22, 24, 25, 32, 33, 35, 44, 48, 49], "doesn": [5, 19, 22, 23, 26, 27, 40, 43, 55], "doit": 48, "domain": 2, "don": [4, 5, 8, 10, 12, 13, 21, 22, 25, 26, 29, 32, 34, 36, 37, 39, 40, 47, 48, 50, 54], "done": [5, 6, 9, 10, 12, 13, 14, 17, 18, 19, 21, 22, 24, 30, 33, 35, 38, 39, 43, 46, 47, 49, 50, 53, 54], "doubl": [4, 12, 22], "doubt": 14, "down": [5, 8, 30, 37, 46, 50, 52, 53, 55], "download": [8, 13, 18, 19, 21, 23, 25, 28, 30, 33, 37, 40, 41, 54], "downstream": 26, "doxygen": [4, 12, 21, 22, 35, 36], "dpa": [6, 17, 41, 46, 48], "dqflag": [13, 30], "draw": 14, "drawback": 5, "drawn": 54, "drop": [8, 13, 37, 40, 53], "dst": [5, 8, 10, 13, 17, 18, 22, 23, 28, 33, 38, 41, 48, 50], "dst2d0pi_d02kpi_sel": 49, "dst_d0pi": [8, 44], "dstar": [4, 14, 33, 35], "dstar_comb": [33, 35], "dstar_consd": 14, "dstar_consd_d0_m": 14, "dstar_consd_m": 14, "dstar_decay_product": 33, "dstar_hybrid": 4, "dstar_m": 14, "dstar_mass_d0": 4, "dstar_max_pt": 4, "dstar_max_pt_preambulo": 4, "dstar_moth": [35, 36], "dstar_sel": [33, 35], "dstar_seq": [33, 36], "dstar_vertex": 33, "dtf_chi2": 14, "dtf_fun": 14, "dtf_ndof": 14, "dtffun_d0_m": 14, "dtffun_d0_p": 14, "dtffun_d0_pi": 14, "dtffun_d0_px": 14, "dtffun_d0_pz": 14, "dtffun_dstar_m": 14, "dtffun_dstar_pt": 14, "dtffun_dstart_p": 14, "dtffun_dtf_chi2": 14, "dtffun_dtf_ndof": 14, "dtt": [4, 14, 23, 41, 48, 49], "due": [10, 12, 22, 27, 33, 54], "dump": [7, 19, 38], "dump1": 22, "duplic": [9, 33, 40], "durat": [52, 54], "dure": [4, 5, 10, 12, 15, 17, 21, 22, 25, 26, 28, 39, 41, 44, 50], "dv": [19, 22], "dv_basic": 5, "dvntupl": [4, 13, 14, 23, 48], "dz": 4, "e": [5, 6, 10, 11, 12, 14, 16, 21, 22, 23, 24, 26, 37, 38, 40, 43, 44, 45, 46, 47, 48, 50, 52, 53, 55], "e_": 11, "each": [4, 5, 6, 8, 9, 10, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 33, 39, 40, 41, 43, 44, 46, 47, 50, 52, 53, 54, 55], "earli": 28, "earlier": [5, 13, 23, 30, 39, 43, 53], "easi": [4, 9, 17, 21, 22, 24, 32, 35, 36], "easier": [8, 21, 46], "easiest": [19, 49], "easili": [11, 21, 30, 32, 36, 46, 56], "eb": 11, "ecal": 11, "ecgd": 15, "echo": [37, 40, 53, 54], "ecosystem": 6, "ed": 21, "edit": [0, 1, 5, 9, 21, 48], "editor": [5, 39, 50], "eff": [11, 36], "effect": [6, 24, 45, 52, 54, 55], "effici": [6, 10, 11, 12, 14, 20, 21, 22, 23, 32, 34, 38, 40, 45, 46, 50], "effort": [7, 22, 26], "eg": [4, 5], "eigenst": 24, "either": [4, 5, 6, 8, 10, 21, 22, 31, 40, 43, 47, 50, 53, 54, 55], "electron": [11, 24, 31], "electroweak": 11, "eleg": 49, "element": [2, 5, 13, 18, 40, 44, 50, 55], "elif": [48, 54], "els": [5, 10, 12, 22, 25, 39, 53], "elsewher": 55, "email": [3, 5, 7, 13, 15, 21, 29, 39, 40, 44, 54], "empti": [11, 12, 34, 54], "enabl": [11, 19, 25, 43, 48, 52, 54], "enablespillov": 48, "encodedefaultproxyfilenam": 18, "encount": [5, 40, 42], "encourag": [4, 18, 38, 54], "end": [5, 8, 11, 12, 13, 19, 20, 22, 23, 25, 26, 30, 33, 38, 40, 44, 46, 50, 54, 55], "endchalleng": 38, "enddecai": [43, 44, 46], "enddocument": 44, "endinsertpythoncod": [43, 44], "endors": 2, "endvertex": 22, "energi": [22, 24, 26, 28, 48], "enforc": 52, "engin": [9, 42], "english": 7, "enorm": 26, "enough": [4, 6, 7, 20, 24, 33, 37, 40, 54], "ensembl": 24, "ensur": [5, 6, 13, 21, 30, 39, 41, 47, 49, 54], "enter": [4, 5, 8, 11, 13, 19, 25, 27, 37, 47], "entir": [6, 11, 21, 26, 39, 46], "entri": [8, 14, 18, 33, 55], "entrypoint": 5, "enumer": 55, "env": [13, 30], "enviro": 6, "environ": [5, 6, 12, 15, 21, 30, 34, 37, 39, 42, 53, 54, 56], "eo": [5, 6, 17, 18, 28, 33, 38, 40, 41, 46, 48, 50, 52, 53], "eoslhcb": [5, 16, 17, 33, 38, 41, 46, 48, 50], "epel": 56, "epsilon": 46, "epsilon_": 50, "equal": 1, "equip": 11, "equival": [12, 13, 22, 33, 54, 55], "er": 9, "eric": 7, "err": [36, 53, 55], "errno": 54, "error": [4, 6, 13, 22, 34, 36, 37, 40, 46, 52, 53, 54, 55], "escap": 15, "especi": [5, 11, 15, 21, 39, 54], "espresso": [54, 55], "essenti": [3, 10, 20, 23, 28, 40, 53, 54], "estim": [6, 14, 24], "eta": [43, 48], "etc": [4, 6, 7, 12, 18, 19, 28, 33, 36, 39, 42, 48, 52, 54, 56], "ethnic": [0, 15], "european": 25, "evalu": [22, 26, 54], "even": [2, 6, 11, 21, 22, 25, 32, 43, 49, 50, 53, 54], "event": [2, 4, 6, 8, 10, 11, 12, 13, 14, 17, 19, 20, 22, 23, 24, 26, 30, 32, 33, 34, 35, 36, 38, 41, 42, 44, 45, 46, 47, 48, 49, 50], "event_node_kil": 41, "eventclocksvc": 48, "eventdatasvc": 36, "eventloop": 12, "eventloopmgr": 12, "eventnodekil": 41, "eventnumb": 48, "eventprefilt": [23, 34, 38], "eventselector": [12, 36], "eventtimedecod": 48, "eventtyp": 44, "eventu": [7, 8, 15, 53], "ever": [19, 22, 25, 26], "everi": [10, 13, 14, 19, 21, 30, 37, 39, 43, 45, 47, 50], "everyon": [0, 9, 29, 52], "everyth": [5, 9, 10, 12, 26, 30, 39, 40, 49], "everytim": 33, "evict": 54, "evolut": 38, "evolv": 26, "evt": [8, 19, 22, 50], "evtgen": [10, 43, 44, 45, 46, 47], "evtgennam": 43, "evtmax": [23, 38, 48], "evtsvc": 19, "ex": [30, 40, 54], "exact": [21, 23, 41, 55], "exactli": [4, 13, 14, 22, 25, 26, 55], "exam": 39, "examin": 14, "exampl": [0, 2, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 18, 19, 21, 22, 23, 24, 27, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 43, 44, 46, 48, 49, 50, 54, 55], "exce": 24, "excel": [7, 9, 37], "except": [2, 10, 22, 30, 33, 53], "excit": 36, "exclud": 45, "exec": [54, 55], "exect": 54, "execut": [4, 5, 6, 12, 13, 21, 22, 25, 30, 32, 33, 36, 37, 38, 40, 52, 53, 54, 55], "exercis": [14, 33, 49], "exhaust": 6, "exist": [1, 5, 6, 11, 12, 15, 19, 21, 22, 28, 31, 34, 38, 40, 41, 42, 44, 45, 46, 47, 55], "exit": [5, 12, 37, 53, 54], "expand": [6, 8, 55], "expect": [5, 6, 14, 18, 19, 24, 36, 39, 41, 52, 54], "expens": [11, 46], "experi": [0, 7, 8, 11, 12, 16, 24, 52], "experienc": 15, "experimenc": 54, "experiment": 7, "expert": 13, "explain": [7, 20, 22, 33, 38, 39, 52], "explan": [52, 53], "explanatori": 23, "explicit": [14, 32, 34, 49], "explicitli": [40, 43], "exploit": [22, 23], "explor": [5, 10, 14, 18, 22, 23, 28, 33, 36, 37], "export": [32, 56], "expr": 55, "express": [0, 2, 22, 24, 31], "ext": [19, 22, 48], "extend": [11, 12, 22, 37, 41], "extens": [4, 6, 18, 40, 45, 47, 48], "extern": [6, 35, 47], "extra": [4, 5, 11], "extra_opt": 5, "extra_output": 11, "extract": [5, 10, 17, 24, 35], "extrapol": 14, "extrem": [30, 54, 55], "f": [17, 19, 37, 54], "f_0": 43, "f_in": [54, 55], "f_out": [54, 55], "facil": 6, "fact": [10, 14, 22, 33], "factor": [11, 15, 21, 43, 45, 52, 54], "fail": [12, 13, 25, 27, 28, 30, 34, 37, 45, 46], "failur": 22, "fair": 52, "fairli": 52, "fake": 25, "fakeeventtim": 48, "fals": [5, 18, 37, 38, 41, 48, 50], "familiar": [3, 20, 24, 29, 30, 55], "faq": [7, 13, 18, 22, 25, 48], "far": [22, 30, 43, 46, 47, 54, 55], "farm": [10, 11, 38], "fast": [19, 28, 38, 42, 46], "faster": [18, 21, 23, 27], "favourit": 50, "fb": 11, "featur": [0, 11, 18, 21, 23, 27, 30, 32, 38, 39, 41, 50, 54], "feedback": [5, 38], "feel": [6, 7], "fetch": [21, 37, 39], "few": [5, 7, 9, 10, 11, 13, 19, 21, 34, 37, 39, 47, 50, 53, 54], "fewer": 27, "field": [8, 11, 23, 24, 44], "fig": 54, "figur": [19, 38, 54], "file": [1, 2, 4, 5, 8, 9, 10, 12, 13, 18, 19, 21, 22, 23, 27, 28, 30, 31, 32, 33, 36, 37, 38, 39, 41, 42, 44, 46, 50, 51, 52, 53, 55], "filecatalog": 17, "filenam": [30, 37, 40, 44], "files_per_subjob": 30, "filespac": 18, "filesperjob": [13, 27, 30], "filesystem": [52, 55], "fill": [4, 17, 18, 22, 23], "filter": [7, 8, 10, 11, 12, 14, 22, 23, 31, 32, 33, 34, 38, 47], "filter_": 34, "filter_softpi": 33, "filterbadev": 41, "filterdecai": 35, "filterdesktop": [32, 33, 34, 35], "filterintre": 35, "filterselect": 34, "final": [5, 6, 7, 8, 12, 13, 14, 21, 22, 24, 28, 30, 32, 33, 34, 35, 36, 42, 44, 45, 47, 49, 50, 54, 55], "find": [4, 5, 6, 7, 10, 12, 13, 14, 15, 18, 19, 20, 21, 22, 23, 26, 28, 33, 34, 36, 37, 38, 39, 40, 41, 42, 47, 48, 49, 50, 53, 54], "find_track": 22, "findabl": 32, "finder": [23, 50, 54], "fine": 54, "finish": [13, 26, 27, 33, 37, 40, 53, 54], "fire": [26, 50], "first": [5, 6, 7, 8, 9, 11, 12, 13, 14, 17, 19, 20, 21, 22, 25, 27, 28, 29, 30, 36, 38, 39, 40, 42, 44, 47, 48, 50, 54, 55], "firsteventnumb": 48, "firstli": [30, 55], "fit": [2, 4, 6, 9, 12, 14, 22, 24, 33, 54], "fittedhlt1velotrack": 36, "fitter": [14, 54], "five": 11, "fix": [1, 7, 9, 10, 11, 25, 38, 47, 54, 55], "fk": 18, "flag": [6, 8, 11, 19, 30, 37, 44, 47, 53], "flat": [30, 32], "flatlist": 35, "flatten": 35, "flavour": [11, 24, 54], "flexibl": [10, 11, 12, 23, 30, 45, 55], "flexibli": [10, 11, 12, 22], "fli": 47, "float": 30, "flow": [8, 20, 28, 30, 31, 32], "fltr": 23, "fname": 37, "focu": [21, 37, 39], "focus": [7, 29], "focuss": 42, "fold": 37, "folder": [4, 5, 8, 13, 23, 30, 55], "follow": [0, 1, 2, 4, 5, 6, 7, 9, 10, 11, 12, 13, 16, 17, 19, 20, 21, 22, 23, 24, 25, 30, 33, 34, 38, 42, 45, 47, 48, 50, 52, 53, 54, 56], "folow": 7, "foo": 40, "forc": [14, 44, 47], "force_statu": 27, "forev": 50, "forgot": 36, "fork": [1, 9], "form": [11, 14, 24, 26, 30, 43, 46, 50], "formal": 50, "format": [2, 5, 9, 10, 17, 19, 20, 22, 23, 34, 35, 37, 38, 41, 43, 49, 54], "fortun": [4, 45, 55, 56], "forum": 7, "forward": [25, 49], "found": [4, 5, 6, 7, 9, 10, 11, 18, 19, 21, 22, 23, 24, 33, 34, 35, 38, 42, 43, 46, 47, 48, 49, 54], "four": 24, "fpga": [11, 38], "fqan": 25, "fraction": [23, 24, 36, 43, 53], "fragment": 11, "framework": [5, 6, 8, 11, 12, 22, 28, 31, 33, 35, 45, 47], "free": [0, 2, 6, 7, 34, 36, 37, 45, 46], "freedom": [2, 4], "frequenc": 36, "fresh": 40, "friend": [7, 21], "friendli": [6, 38], "from": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 43, 44, 46, 48, 49, 50, 52, 53, 54, 55, 56], "front": [11, 52], "fulfil": [14, 49], "full": [2, 5, 10, 11, 19, 21, 22, 23, 24, 30, 32, 33, 34, 35, 38, 45, 56], "fulli": [8, 10, 11, 21, 43], "fun": 28, "function": [5, 12, 18, 19, 21, 22, 24, 27, 28, 34, 38, 40, 46, 50, 55], "functor": [4, 11, 14, 19, 23, 28, 33, 46, 49], "funtion": 50, "funtupl": 11, "furnish": 2, "further": [4, 10, 11, 14, 22, 24, 26, 30, 36, 49], "furthermor": 47, "fuse": [16, 18], "futur": [7, 45, 47], "g": [5, 10, 12, 16, 21, 22, 23, 24, 37, 38, 43, 44, 45, 46, 47, 48, 52, 53, 55], "g457dbd5": 5, "g4pl_ftfp_bert_emnocut": 48, "gain": [3, 31], "gamma": 24, "ganga": [6, 13, 20, 27, 28, 30, 39, 41, 52], "gangadatasetsplitt": 30, "gangadir": [18, 30, 40], "gangafiles_22": 40, "gangarc": [18, 40], "gangatask": 28, "gate": 11, "gaudi": [5, 8, 12, 17, 21, 32, 40, 41, 48], "gaudicmakeconfigur": 21, "gaudiconf": [19, 23, 33, 38, 48], "gaudiconfutil": 34, "gaudiexec": [13, 30, 37, 39], "gaudikernel": 46, "gaudipython": [19, 22], "gaudirun": [12, 21, 23, 32, 48], "gaudisequenc": [32, 49], "gauss": [10, 28, 42, 44, 45, 46], "gaussdev_v49r21": 42, "gaussgen": 48, "gaussian": 30, "gaussopt": 48, "gausstightcut": 46, "gave": 40, "gb": [11, 39], "gbl": 22, "gcc": 13, "gcc62": [13, 41], "gcc8": [12, 13, 30], "gcc9": 21, "geant4": [10, 47, 48], "geantid": 43, "gen": [19, 36, 42, 44, 46, 48], "gencut": 46, "gencuttool": 46, "gender": [0, 28], "gener": [4, 6, 7, 8, 10, 12, 14, 15, 16, 17, 18, 21, 22, 23, 25, 28, 30, 32, 33, 34, 37, 38, 40, 42, 43, 44, 47, 51, 54], "generalis": 14, "generatorlevelevtgencut": 45, "generatorleveltightcut": 46, "generatorlog": 46, "genericparticle2pvrel": 22, "genericsplitt": 30, "geninit": 48, "genparticl": 46, "genstandalon": 48, "genxicc": 47, "genxmlcatalog": 17, "geo": 22, "geometr": 4, "geometri": [22, 42], "geometry_vers": 5, "get": [3, 4, 5, 7, 8, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 30, 32, 33, 34, 36, 37, 38, 40, 42, 43, 44, 49, 50, 51, 53, 54, 55], "getdataset": [13, 18, 30], "getenv": 30, "getev": 17, "gethlt1lin": 38, "gethlt2": 38, "getid": 30, "getl0channel": 38, "getoutputdataaccessurl": 18, "getpack": 39, "gev": [14, 22, 24, 43, 46], "ghost": 24, "gigabyt": 27, "git": [4, 5, 9, 20, 21, 28, 38, 42], "git4lhcb": [21, 39], "gitbook": 43, "github": [9, 20, 29, 40, 51], "githubusercont": 40, "gitlab": [5, 6, 21, 23, 38, 39, 43], "gitlab_runner_api": 5, "give": [2, 4, 5, 6, 7, 8, 13, 14, 19, 20, 22, 23, 24, 31, 32, 34, 37, 38, 39, 42, 51, 53, 54, 55], "given": [2, 5, 12, 13, 18, 21, 22, 23, 24, 25, 32, 33, 37, 38, 40, 44, 45, 47], "glimps": [21, 36], "glob": 55, "global": [12, 21, 39, 42], "globu": 56, "glossari": [7, 28], "gmt": 25, "go": [5, 8, 10, 12, 14, 22, 23, 24, 25, 36, 39, 40, 43, 50, 53, 54], "goal": [5, 6, 7, 24, 28], "god": 7, "goe": [23, 38], "gone": 30, "good": [5, 6, 20, 26, 27, 28, 39, 40, 45, 46, 54], "goodd0": 46, "googl": [7, 9, 54], "got": [5, 17], "govern": 54, "gp": [4, 19], "gpt": 46, "gpu": 11, "gradual": 52, "grafana": 53, "gramar": 7, "grant": 2, "granular": 11, "graph": 53, "great": [5, 7, 13, 23], "greatest": 23, "greatli": 11, "green": 8, "greet": [22, 37], "grep": [21, 40], "grid": [5, 6, 10, 16, 18, 19, 20, 25, 27, 28, 30, 33, 37, 38, 40, 41, 51, 52, 54], "grip": 37, "ground": 15, "group": [5, 6, 8, 10, 11, 14, 16, 18, 20, 25, 26, 47], "grumpi": 13, "gtheta": 46, "guid": [7, 9, 25, 28, 39, 40, 52, 56], "guidelin": [6, 12, 47, 51], "gun": 42, "gz": 54, "h": [4, 14, 37], "ha": [3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 16, 18, 21, 22, 23, 24, 25, 26, 27, 30, 33, 34, 36, 37, 38, 39, 40, 41, 43, 44, 49, 50, 52, 53, 54, 55], "hackathon": 39, "had": [34, 35, 40, 55], "hadd": 18, "hadron": [10, 11, 24, 43, 50], "hadronis": 10, "hand": [10, 19, 20, 43], "handi": 19, "handl": [5, 32, 40, 45, 48, 49, 54], "happen": [13, 19, 22, 24, 30, 36, 40], "happi": [9, 15, 38, 39], "harass": 0, "hard": [6, 7, 34], "harddriv": 38, "hardwar": [10, 11, 38], "harmless": 22, "hasdecisionnam": 19, "hastrack": [4, 22], "have": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56], "haven": 40, "hc": 36, "he": 25, "head": [4, 14, 22, 25, 46], "header": [36, 43], "heavi": [11, 24], "held": [6, 53, 55], "helic": [22, 43], "hello": [22, 37, 40, 53], "help": [5, 6, 7, 13, 15, 18, 21, 22, 25, 26, 27, 33, 34, 37, 52, 53, 54, 55], "helper": [5, 6, 28, 34], "henc": [26, 30, 46], "hep": 6, "here": [4, 5, 6, 8, 9, 10, 13, 14, 16, 17, 19, 21, 22, 23, 26, 29, 30, 33, 34, 35, 36, 37, 38, 39, 40, 43, 46, 47, 48, 49, 52, 53, 54, 55, 56], "herebi": 2, "hexadecim": 38, "hfag": 43, "hide": 19, "hierachi": 19, "hierarchi": 6, "high": [10, 11, 23, 24, 26, 28, 38, 52], "higher": [11, 24, 26, 52], "highest": 24, "highli": [40, 52], "highlight": [5, 33, 34, 54], "hint": 5, "histogram": [6, 12, 14, 24, 30], "histogrampersi": 12, "histor": [5, 28, 31], "histori": 39, "hit": [10, 12, 21, 24, 37, 38, 48], "hlt": [10, 26, 28, 39, 50], "hlt1": [11, 31, 34, 38, 50], "hlt1dimuonhighmass": 50, "hlt1dimuonhighmassdecis": 50, "hlt1global": 38, "hlt1tck": 38, "hlt1tisselect": 34, "hlt1tistostool": 50, "hlt1tosselect": 34, "hlt1trackalll0": 50, "hlt1trackalll0decis": 50, "hlt1trackmuondecis": 38, "hlt1trackmuonmvadecis": 38, "hlt1trackmva": 50, "hlt1trackmvadecis": [38, 50], "hlt1trackmvatightdecis": 38, "hlt1triggertisto": 50, "hlt1twotrackmva": [38, 50], "hlt1twotrackmvadecis": 38, "hlt1twotrackmvatightdecis": 38, "hlt2": [6, 11, 26, 31, 34, 38, 50], "hlt2charmhaddsp2ks0pimpippip": 50, "hlt2dimuonjpsi": 38, "hlt2dimuonjpsiprescal": 38, "hlt2global": 38, "hlt2tck": 38, "hlt2tisselect": 34, "hlt2topo2bodydecis": 38, "hlt2topo3bodydecis": 38, "hlt2topo4bodydecis": 38, "hlt2topomu2bodydecis": 38, "hlt2topomu3bodydecis": 38, "hlt2topomu4bodydecis": 38, "hlt2tosselect": 34, "hlt2triggertisto": 50, "hlt_info": 50, "hlt_pass": 34, "hlt_pass_r": [23, 38], "hltdecreportsloc": 50, "hltselreportsloc": 50, "hm": 43, "hold": [12, 53], "holder": 2, "holist": 53, "home": [37, 40, 52, 56], "homebrew": 51, "homework": 7, "hood": [21, 29, 39], "hope": 24, "hopefulli": [5, 46, 53], "host": [1, 9, 11, 25, 30, 53], "hostil": 7, "hour": [7, 21, 54, 56], "housekeep": 5, "how": [2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 45, 46, 47, 49, 50, 51, 52, 53, 54, 55], "howdi": 22, "howev": [4, 5, 6, 7, 8, 13, 14, 19, 21, 22, 23, 26, 30, 32, 39, 40, 45, 46, 49, 52, 54, 55, 56], "hp": 43, "hqet": 43, "hsf": 12, "htcondor": [28, 51, 53, 54, 55], "http": [0, 1, 5, 9, 21, 38, 39, 40, 42, 43, 45, 46, 48], "huge": [10, 46], "human": [2, 5, 8], "hundr": 24, "hybrid": [4, 14, 48], "hypothes": [14, 49], "hypothesi": [14, 24, 28, 31], "hz": 43, "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 48, 49, 50, 52, 53, 54, 55, 56], "icon": 8, "id": [5, 13, 19, 21, 22, 27, 30, 37, 47, 48, 49, 53, 54, 55], "idea": [5, 7, 8, 12, 21, 23, 26, 37, 46], "ideal": [33, 34, 41], "ident": [0, 13, 25, 26, 38], "identif": [6, 26, 38], "identifi": [10, 19, 40], "idiom": 6, "idistancecalcul": 22, "idl": [53, 55], "ient": 22, "ieventtupletool": 4, "if_need": [54, 55], "igencuttool": 46, "ignor": [4, 12, 42], "ignoreheartbeat": 48, "ignoremiss": [27, 30], "ii": 50, "il": 17, "illustr": 46, "imag": 5, "imageri": 0, "imagin": [12, 30, 31, 36, 45, 48, 54], "iminuit": 6, "immedi": [45, 46], "impact": [22, 27, 45], "impactkit": [41, 50, 51], "impactparamtool": 22, "implement": [6, 10, 11, 12, 14, 22, 27, 30, 38, 44, 45, 46, 47, 50], "impli": 2, "import": [4, 5, 6, 10, 11, 12, 14, 17, 19, 22, 23, 24, 27, 30, 32, 33, 34, 35, 36, 37, 38, 41, 43, 44, 46, 48, 49, 50, 52, 54, 55], "importantli": [39, 53, 54], "importopt": 48, "impos": [11, 46], "imposs": 32, "impract": 23, "impress": 7, "improv": [7, 9, 11, 14, 26, 30, 34], "in_rang": [22, 46], "inacc": 46, "includ": [0, 2, 3, 4, 6, 7, 11, 12, 13, 15, 19, 24, 26, 30, 31, 33, 34, 42, 43, 46, 52, 53, 54], "inclus": 32, "inconsist": 21, "inconveni": 22, "incorpor": 14, "increas": [9, 11, 17, 21, 26, 45, 46, 47, 52], "incred": 11, "increment": 10, "inde": [54, 55], "indent": 5, "independ": [5, 12, 16, 22, 38, 40, 47, 50], "index": [20, 55], "indic": [2, 27], "individu": [12, 17, 21, 27, 30, 32, 38, 39, 48, 55], "induc": 24, "ineffici": [11, 40], "infer": 24, "infinit": 19, "info": [5, 12, 13, 36, 42, 49, 50, 56], "inform": [1, 4, 5, 6, 7, 10, 11, 13, 14, 15, 16, 18, 19, 21, 22, 23, 24, 26, 28, 36, 39, 40, 42, 43, 44, 47, 50, 52, 53, 54, 55], "infrastructur": 21, "ing": 9, "inher": 11, "init": [5, 13, 17, 21, 25, 39, 56], "initi": [8, 12, 21, 39, 43, 48, 49, 54], "initialis": [17, 19, 21], "input": [5, 6, 8, 12, 13, 18, 19, 22, 23, 32, 33, 34, 35, 36, 37, 38, 40, 41, 48, 49, 51, 52, 55], "input_process": 5, "input_raw_format": 5, "input_stream": 5, "input_tree_nam": 37, "input_trf_id": 30, "input_typ": 5, "inputdata": [13, 18, 40], "inputfil": [17, 19, 23, 30, 33, 38, 40, 48, 55], "inputfn": 55, "inputtyp": [23, 38, 48], "insert": [12, 36, 39, 41, 43], "insertpythoncod": [43, 44], "insid": [5, 19, 21, 22, 23, 33, 34, 37, 39, 40, 53, 54], "insight": 29, "inspect": [4, 8, 14, 16, 19, 23, 30, 37, 40, 48], "instal": [1, 6, 9, 17, 21, 25, 28, 51], "installarea": 21, "instanc": [0, 4, 14, 21, 22, 35, 37, 39, 40, 41, 50], "instantan": 11, "instanti": [4, 22, 32, 34, 41, 50], "instead": [10, 12, 13, 14, 16, 17, 18, 21, 22, 24, 25, 34, 36, 37, 39, 40, 41, 45, 46, 50, 54, 55], "institut": 52, "instruct": [5, 6, 17, 21, 25, 28, 38, 43], "insult": 0, "int": [17, 25, 37, 55], "integ": 12, "integr": [6, 21, 23, 39, 46], "intend": [2, 5, 30, 54], "intens": [10, 38, 52], "interact": [5, 10, 13, 18, 21, 22, 24, 25, 28, 36, 37, 39, 50], "interchang": 11, "interest": [5, 6, 7, 10, 13, 17, 22, 23, 26, 34, 35, 37, 50], "interfac": [4, 6, 19, 21, 22, 30, 34, 39, 42, 46, 47, 50], "interfer": 40, "intermedi": [14, 34], "intern": [22, 50], "internet": 25, "interoper": 6, "interpret": [14, 22], "intersect": 24, "interv": 53, "intrins": 24, "intro": 28, "introduc": [21, 22, 26, 30, 34, 45], "introduct": [3, 20, 24, 28, 32, 42], "inv_mass_reconstructor": 54, "invari": [14, 22, 24, 45, 54], "invert": 46, "invest": 7, "investig": 23, "invok": 24, "involv": [20, 32, 47], "ioerror": 54, "iohelp": [17, 19, 23, 33, 38, 48], "ip": [4, 22, 25], "iparticlecombin": 36, "iparticletupletool": 4, "ipchi2": [22, 50], "ipchi2_ownpv": 14, "iphysdesktop": 22, "iprintdecaytreetool": 19, "iptool": 22, "ipython": [13, 19, 22, 30, 37, 40], "iregistri": 19, "irelatedpvfind": 22, "irrelev": 11, "isbas": [4, 22], "isbasicparticl": 22, "isgw2": 43, "isn": [19, 20, 54, 55, 56], "isol": 39, "issu": [0, 1, 5, 7, 9, 11, 20, 21, 25, 26, 29, 30, 34, 38, 40, 41, 51, 54, 55], "issuer": 25, "ital": 9, "item": [25, 55], "itriggertisto": 50, "its": [4, 5, 6, 9, 10, 13, 14, 19, 21, 22, 23, 24, 26, 27, 29, 32, 33, 34, 38, 39, 40, 43, 44, 47, 48, 50, 52, 53, 54, 55], "itself": [11, 44, 46, 53], "j": [5, 13, 18, 24, 27, 30, 37, 40, 43], "j2": 40, "java": 56, "jet": 4, "job": [4, 5, 6, 8, 13, 18, 21, 22, 28, 30, 34, 40, 41, 46, 48, 49, 51, 52, 54, 55], "job_id": 53, "job_num": 30, "jobflavour": [54, 55], "jobid": 13, "join": [28, 37, 52, 55], "jon": 7, "jump": [12, 21, 39], "june": 52, "jupyt": 6, "just": [4, 6, 7, 8, 9, 10, 12, 13, 14, 17, 18, 19, 21, 23, 24, 25, 26, 27, 28, 32, 34, 37, 39, 40, 49, 50, 54], "k": [4, 5, 8, 14, 22, 23, 24, 32, 33, 34, 35, 36, 38, 43, 44, 46, 48, 49], "k0": 43, "k_": 24, "kalman": 14, "kaon": [14, 22, 23, 24, 31, 32, 33, 34, 35, 36], "kaons_from_d0": 35, "kaons_from_d0_filt": 35, "kaons_from_d0_sel": 35, "keep": [4, 5, 8, 9, 10, 11, 18, 21, 25, 30, 33, 34, 52], "kei": [4, 10, 11, 12, 14, 21, 22, 25, 38, 39, 41, 48, 49, 56], "kept": 18, "keyboard": 25, "keyedcontain": 36, "keyword": 34, "khz": 38, "killer": 41, "kind": [1, 2, 5, 13, 46], "kinemat": [4, 6, 14, 45], "kk": 8, "kkmumu": 44, "kminu": 4, "know": [4, 8, 9, 10, 13, 14, 15, 19, 22, 24, 26, 32, 33, 34, 36, 37, 38, 40, 42, 43, 46, 47, 48, 49, 54], "knowledg": [3, 14, 22, 31], "known": [4, 7, 14, 21, 22, 24, 26, 32, 46, 47, 53, 54], "kplu": 4, "ks0llturbo": 50, "kst": 35, "kst_particl": 35, "kst_sel": 35, "l": [5, 13, 14, 16, 17, 19, 21, 23, 24, 40], "l0": [10, 11, 34, 38], "l0dimuondecis": 38, "l0electrondecis": 38, "l0global": 38, "l0hadrondecis": 38, "l0muondecis": 38, "l0photondecis": 38, "l0tisselect": 34, "l0tosselect": 34, "la": 40, "label": [5, 8, 25, 47], "lambda_": 8, "lambda_b": 45, "languag": [0, 9], "laptop": 25, "larg": [5, 10, 13, 17, 18, 19, 24, 28, 31, 33, 40, 45, 46, 50, 55], "larger": [46, 48], "largest": [8, 22], "last": [5, 6, 7, 10, 12, 14, 19, 30, 38, 39, 46, 47, 50], "latenc": 38, "later": [4, 6, 7, 8, 10, 27, 30, 33, 42, 47, 50, 52, 54], "latest": [4, 8, 10, 12, 13, 19, 23, 38, 40, 42], "latestglobaltagbydatatyp": 38, "latter": [6, 10, 12, 21, 34, 37, 45, 54], "launch": [12, 13], "layout": 11, "lazi": 7, "lb": [5, 6, 12, 13, 17, 18, 19, 21, 22, 23, 30, 37, 38, 39, 41, 42, 47], "lbenv": 30, "lbpythia8root": 48, "lbscript": [28, 51], "lcg": 25, "lead": [8, 9, 14, 33, 45, 46], "leaf": 19, "learn": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55], "least": [7, 24, 50], "leav": [4, 5, 9, 12, 13, 19, 21, 54], "lectur": 11, "led": 11, "left": [22, 23, 25], "legal": [2, 13], "len": [17, 37], "length": 6, "lepton": 43, "less": [21, 38, 50, 53], "lesson": [1, 3, 4, 5, 6, 7, 8, 10, 12, 13, 17, 18, 19, 20, 21, 22, 23, 24, 27, 29, 30, 31, 32, 33, 34, 35, 37, 39, 40, 41, 42, 49, 50, 52, 54, 55], "let": [4, 5, 8, 13, 14, 16, 20, 21, 22, 24, 30, 33, 35, 36, 37, 39, 40, 50, 54, 55], "letter": 7, "level": [0, 4, 5, 6, 9, 10, 11, 18, 19, 21, 23, 24, 26, 32, 37, 38, 42, 47, 48, 50], "lfn": [5, 17, 37, 38, 40], "lfn_prefix": 18, "lhc": [26, 27], "lhcb": [3, 5, 6, 7, 8, 9, 13, 15, 16, 17, 18, 20, 22, 23, 25, 26, 29, 30, 32, 33, 34, 36, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 50, 52, 56], "lhcb__particlepropertysvc": 43, "lhcb_user": [18, 25], "lhcbapp": 48, "lhcbcompresseddataset": 18, "lhcbcompressedfileset": 18, "lhcbdataset": 18, "lhcbdev": 30, "lhcbdoc": 42, "lhcbid": 50, "lhcbsk": 39, "liabil": 2, "liabl": 2, "liaison": 47, "liason": 8, "lib": 30, "librari": [4, 6, 23, 54], "licens": [1, 2], "licensor": 2, "life": [15, 19], "lifetim": [24, 28, 39, 42], "like": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 31, 36, 37, 38, 40, 48, 49, 50, 52, 54, 55], "limit": [2, 11, 22, 26, 33, 52, 54, 56], "line": [4, 5, 6, 8, 9, 10, 11, 12, 13, 19, 22, 23, 25, 26, 28, 32, 33, 34, 35, 37, 40, 42, 46, 47, 49, 50, 53, 54, 55], "line_names_regex": 38, "linear": 54, "link": [2, 5, 7, 9, 21, 32, 36, 42], "linux": [25, 51], "list": [1, 4, 5, 6, 7, 8, 10, 12, 13, 14, 16, 17, 18, 19, 21, 22, 23, 24, 25, 28, 30, 32, 34, 35, 37, 39, 40, 47, 49, 52, 54, 55, 56], "listconfigur": 38, "listhlt1lin": 38, "listhlt2lin": 38, "listl0channel": 38, "listproperti": 38, "littl": [5, 19, 26, 32, 39, 52, 54], "live": [7, 9, 24], "ll": [5, 7, 8, 10, 14, 15, 20, 21, 23, 24, 31, 32, 33, 37, 39, 40, 50, 53, 54, 55], "lo": 39, "load": [5, 17, 22, 32], "loaddesktop": 22, "local": [1, 6, 9, 13, 18, 20, 21, 25, 28, 30, 37, 38, 39, 40, 46, 48, 50, 53, 54, 56], "localdir": [18, 40], "localfil": [13, 18, 30, 40], "localhost": [1, 9, 30], "locat": [4, 5, 8, 12, 13, 18, 19, 23, 32, 33, 35, 40, 41, 46, 49, 50, 53, 54], "log": [5, 13, 21, 36, 39, 40, 53, 54, 55], "log_fil": 53, "logfil": 18, "logic": 22, "login": [5, 25], "logout": [25, 54], "loki": [4, 11, 14, 19, 23, 28, 33, 46, 48, 49], "loki__gencuttool": 46, "loki__hybrid__dict2tupl": 14, "loki_d0": 4, "loki_dstar": 4, "loki_dtffun": 14, "loki_filt": [23, 34, 38], "loki_pisoft": 4, "lokicor": 22, "lokinewdecayfind": 48, "lokiphi": 22, "lokisvc": 22, "long": [2, 5, 8, 10, 19, 20, 24, 26, 27, 33, 39, 54], "longer": [11, 12, 46, 54], "longlunch": 54, "look": [1, 4, 5, 8, 9, 10, 11, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 26, 30, 33, 36, 37, 39, 40, 41, 44, 46, 49, 50, 53, 54, 55], "loop": [12, 19, 23, 27, 45, 50], "loos": 46, "lorentz": 45, "lost": [5, 50], "lot": [7, 8, 10, 12, 15, 17, 18, 20, 21, 23, 24, 26, 30, 33, 37, 41, 50, 52, 53, 55], "love": 7, "low": [11, 13], "lower": [22, 45, 47, 52, 54], "lst": 55, "luckili": 37, "luisa": 44, "lumi": [5, 23, 38, 48], "luminos": [11, 23], "lxbatch": 52, "lxplu": [6, 12, 13, 16, 18, 21, 23, 25, 30, 40, 42, 52, 53, 56], "lxplus707": 12, "m": [1, 4, 5, 9, 14, 22, 33, 36, 46], "mac": 25, "machin": [6, 13, 21, 25, 38, 40, 54], "machineri": 23, "maco": 51, "macro": 6, "made": [2, 6, 7, 8, 10, 14, 15, 21, 22, 26, 30, 31, 33, 39, 40, 49, 50, 54], "madison": 52, "magdown": [5, 8, 13, 48], "magenta": 5, "magic": [19, 22], "magnet": [5, 8, 23, 24, 37], "magnetpolar": 55, "magnitud": 22, "magup": [5, 8, 18, 23], "mai": [0, 1, 2, 4, 5, 7, 12, 13, 16, 17, 18, 22, 23, 24, 25, 29, 33, 39, 42, 47, 52, 53, 54, 55], "mail": [5, 7, 40, 52], "main": [4, 5, 6, 7, 9, 23, 27, 39], "mainli": 49, "maintain": [0, 21], "major": [10, 47], "make": [0, 1, 4, 5, 7, 8, 9, 12, 14, 17, 19, 20, 21, 22, 23, 24, 25, 27, 28, 30, 32, 33, 34, 36, 37, 38, 39, 40, 42, 46, 47, 49, 50, 52, 53, 54, 56], "makeb": 35, "maked02kpi": 49, "makefil": 39, "manag": [1, 6, 7, 10, 12, 19, 21, 23, 28, 30, 39, 47, 49, 51], "mandatori": 34, "mani": [3, 4, 8, 10, 11, 12, 14, 16, 19, 21, 22, 23, 24, 26, 27, 30, 36, 37, 38, 39, 43, 49, 53, 54, 55], "manifold": 46, "manipul": [6, 10, 31, 37, 40], "manner": [2, 10, 22, 24, 26], "manual": [5, 12, 52, 55], "map": 33, "mark": [4, 10, 14, 37, 47, 49], "markdown": [1, 5, 9], "mass": [4, 6, 14, 22, 24, 26, 28, 36, 42, 45, 54], "mass_child": 22, "mass_d0": 4, "mass_kaon": 22, "massstoragefil": 40, "master": [1, 4, 5, 21, 30, 39, 40, 43], "match": [6, 10, 14, 22, 23, 30, 47, 48, 50, 55], "materi": [1, 7, 28], "math": 22, "mathemat": [4, 14], "mathrm": [11, 24, 50], "matplotlib": 6, "matrix": 44, "matter": [48, 54], "mattermost": [5, 7, 40, 52], "max": [22, 36], "max_pt": [4, 22], "max_pt_preambulo": 4, "maxcandid": 41, "maxfil": 27, "maxim": [11, 27, 32], "maximis": 10, "maximum": [22, 24, 27, 30, 38, 54], "maxruntim": 54, "maxtre": [4, 22, 33, 36], "maxwidth": 43, "mb": 13, "mc": [4, 5, 8, 13, 17, 22, 23, 27, 28, 32, 33, 36, 41, 42, 44, 47, 48, 50], "mc_2016_27163002_beam6500gev2016magdownnu1": 17, "mc_basic_loki_var": 48, "mcdecaytreetupl": [42, 48], "mce": 48, "mceta": 48, "mcp": 48, "mcparticl": [22, 32], "mcphi": 48, "mcpt": 48, "mcpx": 48, "mcpy": 48, "mcpz": 48, "mctruth": 32, "mctupl": 48, "mctupletool": 48, "mcvertex": 22, "md": [5, 9, 12], "md100": [23, 48], "mdst": [38, 50], "mean": [4, 6, 9, 11, 12, 13, 15, 18, 22, 23, 25, 26, 32, 33, 36, 37, 38, 46, 49, 50, 52, 54, 55], "meant": 54, "measur": [2, 6, 14, 20, 24, 43, 54], "mechan": 14, "medium": 2, "meet": [5, 15], "megabyt": 54, "member": [15, 49, 50], "membership": 56, "memori": [11, 12, 30, 54], "mention": [5, 7, 19, 21, 30], "menu": [5, 8, 53], "merchant": 2, "merg": [2, 9, 18, 21, 37, 38, 39], "merge_request": 21, "merge_root_output": 37, "merged_filepath": 37, "meson": [14, 24, 31, 36, 49], "mess": 36, "messag": [5, 7, 13, 21, 22, 25, 37, 39], "method": [4, 5, 12, 13, 14, 18, 21, 22, 23, 27, 32, 37, 40, 43, 49, 50, 55], "meticul": 6, "mev": [4, 22, 33, 35, 36, 38], "mhz": [11, 38], "micro": 10, "microcenturi": 54, "microdst": [23, 50], "middl": [26, 36], "midnight": 54, "might": [6, 7, 8, 10, 14, 17, 20, 21, 22, 23, 24, 31, 37, 38, 42, 45, 46, 47, 53, 55], "migrat": [11, 54], "millimet": 22, "million": [10, 23], "mimic": 10, "min": [36, 44], "mind": [11, 12, 34], "minim": [4, 6, 7, 11, 13, 28, 32, 34, 41], "minimum": [24, 45, 46, 47], "minprobnn": 38, "mintre": 22, "minuit2": 6, "minut": [5, 47, 48, 53, 54], "mipchi2dv": [22, 33], "mirror": [39, 47], "misidentifi": 22, "miss": [6, 7, 24, 37], "mistak": [9, 13, 20, 36, 54], "mit": 2, "mix": [6, 51, 52], "mixtur": 24, "mkdir": [5, 40], "mm": [22, 33], "mode": [4, 8, 11, 43, 44, 49, 54], "model": [1, 6, 11, 24, 26, 43, 44, 46], "modern": [28, 31], "modif": [21, 39, 46], "modifi": [2, 4, 9, 12, 14, 21, 23, 28, 32, 36, 37, 41, 42, 54, 55], "modul": [6, 22, 30, 33, 34, 37], "modular": [33, 34], "moment": [11, 27, 50], "momenta": [14, 24], "momentum": [22, 24, 32, 43, 44, 46, 50], "mometum": 46, "monei": 26, "monitor": [22, 23, 28, 30, 48, 52, 53], "monitor_p_components_sum": 22, "monolith": 10, "mont": [8, 10, 20, 22, 23, 42, 48], "month": 6, "monument": 9, "moor": [10, 11, 38], "mooreratetestexampl": 38, "moral": 2, "more": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30, 32, 33, 34, 36, 37, 38, 39, 43, 45, 46, 48, 49, 50, 51, 52, 53], "moreov": 21, "most": [3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 22, 23, 24, 30, 32, 33, 34, 39, 40, 41, 42, 45, 47, 50, 53, 54, 55, 56], "mostli": [10, 39], "mother": 36, "mothercut": [22, 33, 34, 35, 36], "mount": [16, 18], "move": [11, 16, 18, 40], "mplhep": 6, "mr": 21, "mrad": 46, "mu": [5, 8, 11, 24, 38, 43, 44, 46, 48], "mu100": 23, "much": [5, 7, 8, 10, 11, 13, 21, 22, 23, 24, 25, 26, 30, 33, 37, 45], "multi": [21, 22, 28, 42], "multipl": [5, 6, 8, 10, 14, 21, 30, 33, 39, 45, 46, 47, 50, 53, 54, 55], "multithread": 22, "multivari": 6, "muon": [4, 24, 36, 38], "muonpid": 36, "must": [2, 10, 13, 14, 21, 24, 39, 40, 46, 50, 54, 56], "mv": 40, "my": [4, 13, 21, 37, 38], "my_first_script": 53, "my_help": 37, "my_other_script": 30, "my_particles_kpi": 38, "my_script": [30, 54, 55], "myanti": 43, "myantid0": [44, 46], "myapp": 13, "mycatalog": 17, "mycustomvar": 55, "myd": 43, "myd0": [44, 46], "myd_": 43, "myenv": 30, "myfavouritefil": 16, "myj": 43, "myk": 43, "mylxplusnam": 25, "mynewlin": 38, "mypackag": 21, "myparticl": 12, "mypath": 13, "myphi": 46, "mytupleseq": 49, "n": [17, 19, 24, 34, 37, 40, 43, 52], "n_": 50, "n_file": 17, "n_highpt_track": 4, "name": [4, 5, 8, 9, 13, 14, 17, 19, 21, 22, 23, 25, 26, 32, 33, 34, 37, 38, 39, 40, 41, 46, 48, 49, 50, 54, 55], "nameerror": 34, "namepattern": 18, "namespac": [4, 22], "nanosecond": 22, "natur": [24, 30], "navig": [1, 5, 8, 9, 22], "nb": 34, "ndof": 22, "neat": 37, "necessari": [2, 4, 6, 7, 11, 21, 23, 27, 30, 32, 37, 38, 45, 48, 49], "necessarili": 39, "need": [1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 30, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56], "neg": [22, 23, 46, 47], "neither": 38, "nest": 6, "net": 45, "network": [11, 25], "neuralnet": 4, "neutral": [11, 24, 31, 36], "neutron": 24, "never": [22, 24, 38, 44, 49, 54], "new": [1, 4, 5, 6, 9, 10, 11, 12, 13, 14, 19, 21, 22, 23, 25, 30, 31, 35, 38, 39, 41, 45, 46, 48, 49, 50, 54, 55, 56], "newer": [8, 18, 47, 48], "newest": 39, "newli": [39, 49], "next": [5, 8, 9, 10, 13, 19, 21, 28, 30, 32, 33, 36, 39, 47, 48, 49, 53, 54], "nextnext": 36, "nextweek": 54, "nhello": 40, "ni": 40, "nice": [12, 19, 23, 37, 41], "nicknam": [44, 46], "nightli": [21, 39], "nintre": 4, "nl": 18, "nobatch": 55, "node": [19, 25, 41, 52, 54], "node_list": 19, "noeo": 54, "nomin": [14, 45], "non": [11, 54], "none": [18, 50], "noninfring": 2, "nophoto": 43, "nor": [32, 38], "norc": 12, "normal": [25, 30, 38, 40, 46], "normalis": 24, "normalus": 25, "nospam": 44, "notabl": [40, 54], "note": [2, 4, 6, 12, 13, 14, 21, 22, 23, 24, 27, 30, 33, 34, 37, 40, 43, 44, 47, 49, 50, 52, 53, 54, 55, 56], "noth": [21, 30], "notic": [2, 22, 27, 30, 37, 41, 46, 55], "notif": [51, 52], "notify_us": 54, "now": [5, 9, 12, 13, 14, 19, 21, 22, 23, 24, 25, 26, 27, 30, 33, 36, 37, 38, 39, 40, 41, 42, 43, 49, 50, 53, 54, 55], "ntupl": [4, 5, 6, 12, 13, 14, 18, 19, 20, 22, 23, 27, 28, 33, 36, 42, 49], "ntuple_dtf1": 14, "ntuple_opt": [13, 21, 23], "ntuple_switchhypo": 49, "ntupleid": 55, "ntuples_": 37, "nu": 8, "nu1": [8, 13, 48], "nu_mu": 43, "nuclei": 24, "number": [4, 5, 8, 10, 13, 16, 17, 19, 23, 24, 25, 27, 30, 36, 38, 40, 43, 47, 50, 52, 53, 54, 55], "numer": [8, 50], "numericalinfo": 50, "numpi": 6, "o": 25, "object": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55], "observ": [6, 7, 11, 45, 46, 55], "obtain": [2, 4, 11, 13, 17, 21, 22, 32, 35, 46], "occasion": 56, "occup": [11, 45, 48], "occur": [7, 46, 52], "odin": 36, "off": [5, 7, 13, 22, 45], "offer": [22, 23, 33, 34], "offic": 15, "offici": [7, 21], "offlin": [4, 26, 28, 38, 50], "offlinedistancecalculatornam": 22, "often": [6, 7, 8, 10, 12, 19, 21, 23, 27, 37, 38, 39, 40, 41, 43, 54], "ofthi": 21, "ogic": 17, "ok": [7, 13], "old": [22, 40, 41], "older": [4, 12, 13, 25, 47], "olleh": 40, "omit": 26, "on_exit": [54, 55], "on_exit_or_evict": 54, "onc": [4, 5, 7, 8, 9, 12, 13, 14, 17, 21, 23, 25, 27, 33, 35, 37, 38, 39, 44, 47, 50, 52, 54, 55, 56], "one": [0, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 30, 32, 33, 34, 37, 38, 39, 40, 41, 43, 44, 46, 47, 48, 49, 50, 52, 53, 54, 55], "ones": [3, 6, 10, 12, 22, 23, 34, 50, 53, 54], "onli": [1, 4, 5, 6, 8, 10, 11, 13, 14, 17, 19, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 42, 44, 46, 47, 50, 52, 53, 54, 55], "onlin": [5, 11, 18, 26, 38, 53], "onto": 14, "open": [0, 1, 4, 5, 6, 8, 9, 13, 14, 16, 19, 20, 22, 25, 29, 30, 33, 37, 39, 48, 50, 51, 54, 55, 56], "oper": [4, 11, 14, 22, 30, 31, 37, 38, 49, 54, 56], "opposit": 24, "opsi": 30, "opsysandv": 54, "opt": [12, 13, 21, 30, 37, 41], "optic": 45, "optim": [4, 32, 33, 34], "optimis": [24, 47], "option": [4, 5, 6, 12, 13, 14, 17, 18, 19, 21, 22, 23, 28, 30, 31, 33, 37, 40, 42, 43, 44, 45, 46, 47, 51, 52, 53], "options1": 12, "options2": 12, "order": [4, 5, 8, 9, 11, 12, 13, 18, 19, 21, 22, 23, 24, 30, 32, 35, 39, 46, 48, 49, 52, 53, 54, 55, 56], "org": 0, "organ": [10, 12, 25, 32, 49, 56], "orient": [0, 15], "origin": [5, 6, 9, 14, 21, 24, 39, 46, 47], "osi": 2, "other": [0, 2, 3, 5, 6, 7, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 32, 33, 34, 37, 39, 43, 44, 45, 46, 47, 50, 51, 53, 54], "otherwis": [0, 2, 4, 5, 21, 30, 54], "ou": 25, "ouput": [18, 21], "our": [1, 4, 5, 8, 10, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 27, 30, 32, 33, 34, 36, 37, 39, 40, 41, 42, 45, 46, 49, 50, 53, 54, 55], "ourselv": 22, "out": [2, 4, 5, 7, 8, 9, 10, 13, 14, 18, 19, 20, 21, 22, 23, 28, 33, 37, 38, 39, 41, 44, 46, 50, 52, 53, 54, 55], "outcom": 14, "outdat": 9, "outlin": 54, "output": [5, 6, 10, 12, 13, 14, 18, 21, 22, 23, 24, 26, 32, 33, 34, 35, 36, 37, 38, 40, 41, 49, 51, 52, 53, 55], "outputdir": [13, 18], "outputfil": [13, 18, 30, 37, 40, 55], "outputfn": 55, "outputloc": [32, 49], "outsid": [34, 37, 42, 46, 54], "over": [5, 6, 10, 11, 12, 18, 20, 23, 24, 26, 27, 30, 33, 37, 50, 53, 54], "overal": [30, 45], "overcom": 26, "overflow": 7, "overhead": 34, "overlap": 50, "overnight": 21, "overrid": 22, "overview": [10, 12, 30, 38, 45, 48, 53], "overwhelm": 22, "overwrit": [30, 46, 54, 55], "own": [6, 8, 9, 10, 22, 28, 33, 35, 36, 37, 38, 46, 52, 53, 54, 55], "owner": [53, 55], "p": [4, 11, 14, 19, 22, 24, 33, 48], "p2pvwithipchi2": 22, "p_": [11, 22], "p_components_sum": 22, "p_x": 22, "p_y": 22, "p_z": 22, "pack": 19, "packag": [4, 5, 6, 8, 9, 21, 30, 33, 34, 39, 42, 44, 46, 49], "packedmuonpid": 36, "packedprotoparticl": 36, "packedrecvertic": 36, "packedrichpid": 36, "packedtrack": 36, "packet": 11, "page": [1, 4, 5, 7, 8, 9, 10, 11, 12, 15, 21, 23, 25, 38, 40, 41, 49, 52], "pai": 32, "pair": [4, 24], "panda": 6, "pandoc": 9, "paper": [11, 14, 24], "parallel": [11, 26, 27], "parallel_submit": 37, "paralleliz": 11, "param": 43, "paramet": [6, 14, 22, 30, 34, 37, 43, 55], "parameteris": 37, "parent": 33, "parenthes": 27, "pars": [5, 37, 44], "parse_arg": [37, 54, 55], "parser": [37, 54, 55], "part": [5, 10, 11, 13, 14, 21, 23, 24, 26, 32, 37, 38, 39, 44, 45, 46, 49, 50, 52, 54, 55], "partial": [11, 21], "particip": [0, 25, 51], "particl": [4, 6, 10, 12, 14, 19, 22, 23, 24, 26, 28, 31, 32, 33, 34, 36, 38, 41, 42, 46, 47, 48, 49, 50], "particle1": 14, "particle2": 14, "particle2vertexrel": 36, "particlenam": 4, "particlet": 43, "particular": [2, 5, 7, 13, 14, 20, 21, 22, 33, 34, 49, 55], "particularli": [5, 19, 37, 40, 54, 55], "partner": [7, 22, 39], "pass": [4, 6, 8, 9, 10, 11, 14, 17, 18, 19, 21, 22, 23, 24, 30, 32, 34, 36, 37, 40, 45, 47, 50, 54, 55], "passion": 20, "passthrough": 11, "password": [13, 17, 21, 25], "past": [9, 10, 17, 42], "patch": [0, 10, 21], "path": [5, 8, 13, 16, 17, 18, 19, 23, 25, 37, 40, 41, 47, 54], "pattern": [32, 40], "pcie40": 11, "pdf": 54, "pdg": [14, 22, 43], "pdg10": 43, "pdgid": 43, "peak": [24, 54], "pedagog": 19, "peek": [13, 40], "pem": 56, "peopl": [0, 5, 7, 9, 15, 17, 20, 38, 41], "per": [6, 10, 12, 14, 27, 37, 43, 55], "perfect": 7, "perform": [4, 5, 6, 10, 11, 12, 14, 21, 22, 24, 25, 26, 31, 32, 33, 34, 37, 39, 47, 49, 51], "period": [5, 11, 37], "perman": 15, "permiss": [2, 9, 21, 52], "permit": 2, "persist": [18, 26], "persistreco": [11, 26], "person": [0, 2, 9, 15, 18, 56], "pertin": 5, "pfn": 5, "phase": [43, 44, 45, 46, 48], "phi": [24, 43, 46, 48], "phm": 43, "phone": 15, "photo": 43, "photodetector": 11, "photon": [24, 31, 45, 49], "php": 43, "phsp": [43, 44, 46], "phy": [4, 12, 19, 21, 22, 23, 33, 34, 35, 36, 38, 41, 48, 49, 50], "physconf": [23, 33, 34, 38], "physic": [4, 8, 10, 11, 12, 14, 20, 21, 22, 26, 28, 30, 31, 32, 38, 43, 44, 48, 50, 54], "physicist": [15, 19, 31], "physicswg": 44, "physselpython": [35, 49], "phz": 43, "pi": [4, 8, 14, 19, 22, 23, 24, 32, 33, 34, 35, 36, 38, 43, 44, 46, 48, 49], "pi0": 35, "pick": [4, 12, 13, 22, 38, 39, 41, 46, 50], "pid": [4, 22, 36], "pidcalib2": 6, "piec": [11, 33, 34], "pion": [14, 22, 24, 31, 32, 33, 34, 35, 36, 49], "pip": 9, "pipe": 14, "pipelin": [5, 6], "pisoft": 4, "pisoft_hybrid": 4, "pk": 8, "pkg": 42, "place": [4, 5, 7, 13, 18, 19, 26, 30, 32, 33, 41, 52, 54, 55], "plai": [14, 22, 30, 40], "plan": [25, 26, 39], "platform": [11, 12, 13, 21, 30, 40, 41], "pleas": [1, 5, 6, 7, 20, 21, 25, 26, 30, 42, 47], "pledg": 0, "plot": [4, 6, 14, 24, 50, 54], "plu": [8, 49], "plug": 25, "pm": 24, "pnf": 18, "png": 30, "point": [9, 10, 12, 14, 18, 24, 30, 50, 53, 55], "pointer": 39, "poisson": 30, "polar": [8, 23, 24, 37, 43], "polici": 52, "pop": [8, 23], "popular": [6, 18], "port": 25, "portal": [17, 18], "portion": [2, 35], "posisbl": 53, "posit": [4, 14, 15, 19, 22, 23, 37, 38, 40, 48], "possibl": [6, 7, 8, 10, 11, 14, 21, 22, 24, 27, 32, 37, 45, 46, 54], "possibli": 47, "post": [0, 7, 9, 48], "potenti": [13, 55], "power": [4, 25, 30, 33, 37], "powheg": 10, "pphy": 19, "practic": [4, 5, 20, 22, 39, 54], "pragmat": 26, "pre": [5, 12, 28, 30, 33, 34, 40, 43, 46, 47], "preambl": 4, "preambulo": [4, 33, 46], "prec": [19, 36], "precari": 15, "precis": [7, 11, 45], "precompil": 21, "predefin": [33, 38], "predetermin": 44, "predic": 22, "prefer": [5, 7, 30, 54, 55], "prefilt": [23, 38], "prefix": [4, 21, 22, 33, 40, 53], "premad": 33, "prepar": [5, 13, 30, 39, 41, 49, 50], "preparegaudiexec": [13, 30], "preprocess": [4, 33], "prerequisit": [3, 12, 21, 29, 39], "prescal": 38, "preselect": 6, "presenc": 38, "present": [5, 8, 9, 10, 19, 33, 34, 38, 50], "preserv": [5, 16, 28], "press": [8, 23, 53], "pretti": 22, "prev": [36, 48], "prevent": [4, 21], "preview": 9, "previou": [3, 5, 8, 10, 17, 18, 20, 23, 25, 27, 30, 34, 37, 54, 55], "previous": [4, 22, 23, 24, 34, 39], "prevprev": 36, "pri": 55, "price": 10, "primari": [12, 14, 22, 24, 26, 33, 34, 36], "prime": 54, "principl": [21, 39], "print": [13, 17, 19, 22, 23, 25, 27, 33, 36, 37, 40, 42, 48, 50, 53, 54], "print_decai": [19, 50], "printdecaytre": 33, "printdecaytreetool": 19, "printevt": 36, "printfreq": [23, 36], "printselect": [32, 33], "printtre": 19, "prior": 47, "prioriti": [13, 52, 53], "privaci": 2, "privat": [0, 7, 16, 48], "private_pilot": 25, "probabl": [9, 22, 24], "problem": [3, 5, 7, 10, 18, 21, 24, 25, 27, 29, 32, 33, 34, 36, 40, 51], "probnnk": 22, "probnnpi": 22, "proce": [6, 14, 19, 24, 37], "procedur": [6, 38, 47], "process": [5, 6, 7, 8, 10, 12, 13, 14, 19, 20, 21, 23, 24, 27, 28, 30, 31, 32, 33, 34, 38, 41, 48, 54, 55], "process_fil": 54, "processid": 55, "processingpass": 41, "procid": [54, 55], "prod": [5, 33, 38], "prodid": 47, "produc": [5, 6, 8, 10, 11, 13, 14, 18, 23, 24, 33, 34, 42, 43, 44, 45, 46, 47, 48, 49, 53, 54], "product": [6, 13, 14, 19, 22, 23, 24, 26, 28, 39, 41, 44, 45, 46, 47, 48], "productionid": [23, 48], "productiontool": 47, "profil": 39, "program": [2, 3, 7, 10, 11, 13, 54], "programm": 11, "progress": [5, 53, 54], "project": [0, 1, 6, 10, 11, 12, 19, 21, 25, 38, 39, 42], "promin": [45, 46], "prompt": [5, 14, 19, 37], "prone": 13, "proof": 7, "propag": [10, 45], "proper": 4, "properli": [13, 23, 32, 53], "properti": [4, 8, 12, 13, 14, 19, 22, 24, 25, 28, 33, 37, 40, 54], "propos": [1, 9, 21], "protect": 21, "proto": 22, "protocol": [16, 21, 33, 38, 39, 42], "proton": [10, 20, 24, 26, 31], "protop": 36, "protopart": 36, "prove": [11, 52], "proven": 34, "provid": [2, 5, 6, 10, 11, 12, 13, 14, 16, 19, 21, 22, 26, 27, 29, 38, 44, 46, 55, 56], "provok": 7, "proxi": [5, 13, 17, 25, 28, 30, 51], "pseudorapid": 46, "psi": [5, 24, 43], "psim": 36, "pt": [4, 14, 22, 33, 38, 48, 50], "pub": 38, "public": [0, 2, 50], "publish": 2, "pull": [0, 1, 9, 20, 56], "purg": 21, "purpos": [2, 5, 11, 12, 38, 39, 40, 52, 54], "push": [5, 9, 21, 38, 39], "put": [6, 7, 12, 18, 19, 20, 21, 23, 32, 33, 35, 36, 37, 39, 40, 49, 52, 53, 54, 55], "putti": 25, "pv": [4, 14, 22], "pv_finder_tool": 22, "pvrefitt": 21, "pwg": 6, "px": [14, 22, 48], "py": [5, 8, 12, 13, 14, 17, 19, 21, 22, 23, 30, 32, 37, 40, 44, 46, 48, 49, 50, 54, 55], "pyroot": 6, "pythia": [10, 45, 46, 47, 48], "pythia8": [8, 13, 45, 47, 48], "pythiaid": 43, "python": [1, 3, 5, 6, 8, 9, 12, 13, 17, 19, 22, 23, 28, 37, 38, 40, 43, 44, 46, 49, 50, 54, 55], "python3": 55, "pz": [14, 22, 48], "q1": 5, "qee": 6, "qualifi": 9, "qualiti": [6, 10, 14, 22, 24, 26], "quantiti": [22, 23, 45, 46, 52], "quark": 44, "question": [3, 10, 12, 14, 19, 20, 25, 28, 29, 33, 51], "queu": 55, "queue": [27, 28, 45, 51, 52, 53, 54], "quick": [17, 19, 21, 23, 39, 48], "quicker": 21, "quicki": 30, "quickli": [6, 10, 18, 19, 21, 40, 52], "quit": [17, 22, 24, 26, 27, 31, 37], "quota": 17, "r": [9, 50, 54, 55, 56], "raaij": 50, "race": 0, "radiat": [11, 28, 42], "rais": [10, 42], "ral": 40, "ran": [5, 21, 26, 41], "random": [24, 48], "randomli": [46, 50], "rang": [7, 14, 30, 34, 55], "range_": 22, "rank": 54, "rare": [5, 10, 22, 34, 45, 46, 55], "rate": [11, 26, 38, 46], "rather": [22, 24, 26, 30, 37, 38, 44, 49, 54], "raw": [10, 11, 14, 38, 40, 48, 50], "rawev": 36, "raymond": 7, "rc": 12, "re": [1, 5, 7, 8, 12, 14, 19, 20, 21, 23, 25, 26, 32, 35, 37, 39, 40, 45, 53, 54, 55], "reach": [5, 11, 12, 15, 19, 37, 45, 52], "read": [5, 6, 7, 12, 13, 17, 21, 23, 24, 25, 28, 36, 41, 42, 52, 53, 54, 55], "readabl": [2, 5, 8], "reader": 23, "readi": [5, 6, 10, 13, 19, 23, 25, 33, 45, 49], "readm": [5, 11], "readout": [11, 24], "real": [5, 8, 10, 11, 18, 23, 24, 27, 30, 38, 41, 50, 53], "realist": 46, "realiti": 43, "realli": [4, 6, 9, 12, 22, 46, 50], "reason": [2, 5, 7, 14, 19, 33, 34, 40, 47, 54], "rec": [12, 19, 22, 36, 48], "recal": 54, "receiv": [5, 7, 11, 15, 40, 54], "recent": [6, 7, 22, 52], "rechead": 36, "recip": 17, "reco14": 18, "reco16": [13, 48], "recognis": 30, "recommend": [4, 14, 16, 18, 23, 24, 25, 37, 39, 41], "recompil": [10, 12, 21, 46], "reconfigur": 41, "reconstruct": [4, 6, 8, 10, 11, 12, 21, 26, 28, 31, 32, 33, 38, 47, 50], "record": [5, 6, 8, 10, 12, 36], "recov": 38, "recurs": 19, "recvertex": 36, "redecai": 42, "redecay01": 8, "redefin": 49, "redesign": 11, "redistribut": [1, 2], "reduc": [11, 24, 27, 38, 42, 52], "reduct": 38, "refer": [6, 14, 20, 21, 27, 30, 47, 53, 54], "refin": 7, "refit": 14, "refresh": 30, "regard": 4, "regardless": [0, 54], "regener": 17, "regex": [38, 50], "region": [24, 46], "regist": [5, 25], "registryentri": 19, "regular": [12, 26, 27, 53], "reinterpret": 49, "reject": [0, 8], "rel": [24, 45], "relat": [7, 21, 22, 30, 34, 40, 54], "relatedpv": 22, "relation1d": 36, "releas": [10, 12, 13, 21, 38, 46, 47, 56], "relev": [7, 11, 21, 24, 26, 30, 54], "reli": 46, "reliabl": [16, 23], "religion": 0, "reload": 32, "remain": [13, 45, 47], "remedi": 37, "rememb": [5, 6, 7, 14, 21, 47, 54], "remind": 6, "remix": 2, "remot": [6, 17, 21, 23, 25, 39, 52, 54], "remov": [0, 5, 11, 12, 18, 19, 22, 23, 38, 40, 41, 42, 43, 45, 47, 50, 53, 55], "renam": 5, "render": 5, "renormalis": 43, "reorder": 45, "repeat": [12, 15, 21], "repeatedli": 53, "repetit": [5, 33, 34, 55], "replac": [9, 10, 11, 13, 14, 19, 21, 23, 25, 27, 28, 38, 39, 40, 43, 54], "repli": 7, "replic": [33, 37, 40], "replica": 17, "repo": 39, "report": [0, 1, 6, 7, 9, 19, 22, 41, 50], "repositori": [1, 5, 6, 9, 20, 21, 29, 39, 42, 51], "repres": [14, 15, 22, 23, 24, 32, 47, 55], "represent": [8, 22], "reproduc": [5, 6, 7, 21], "repurpos": 49, "reput": 7, "request": [0, 1, 6, 9, 12, 14, 20, 21, 23, 38, 39, 45, 48, 52, 56], "requestcpu": 54, "requestmemori": 54, "requir": [4, 5, 6, 8, 9, 10, 11, 12, 14, 21, 22, 23, 24, 25, 28, 30, 32, 33, 36, 37, 38, 39, 40, 42, 44, 45, 46, 47, 49, 51, 52, 53, 55], "requiredselect": [32, 33, 35, 36, 49], "requisit": 30, "rerun": [36, 41, 45, 46, 56], "rescal": 43, "rescu": 37, "research": 6, "reset": [27, 37, 45, 46, 50], "resid": [21, 46], "resolut": [6, 14, 24, 45, 46], "resolv": [32, 39], "resolvedpi0": 35, "reson": [43, 46], "resort": 46, "resourc": [5, 10, 11, 17, 23, 25, 26, 28, 47, 51, 56], "resp": 49, "respect": [0, 11, 14, 21, 22, 24, 33, 46, 50, 54, 55], "respons": [0, 10, 26, 32, 42, 44, 46], "rest": [7, 13, 26, 27, 38, 47], "restart": [19, 53], "restor": 40, "restrict": [2, 10, 14, 32, 54], "restrip": [10, 41], "resubmit": [27, 30, 54], "result": [5, 6, 10, 11, 12, 13, 14, 22, 23, 24, 27, 30, 31, 33, 37, 40, 44, 46, 47, 48, 50, 54, 55], "result_": 55, "resum": 54, "resurrect": 50, "rethink": 46, "retri": 54, "retriev": [6, 19, 22, 50], "return": [4, 5, 18, 19, 21, 22, 25, 34, 38, 52], "reus": [28, 32], "reusabl": 32, "revers": [40, 55], "review": [1, 6, 21, 39], "revis": 12, "revisit": 20, "revok": 2, "rewrit": 34, "rich": [36, 45, 48], "rich1": 11, "richard": 5, "richpid": 36, "richrandomhit": 48, "right": [0, 2, 5, 8, 9, 12, 13, 21, 23, 41, 43, 48, 49], "rightarrow": [32, 33], "risk": 21, "rm": 36, "role": [25, 56], "roofit": 6, "room": 25, "root": [4, 5, 6, 10, 13, 14, 16, 17, 18, 19, 20, 23, 30, 33, 37, 38, 41, 46, 48, 50], "root_children": 19, "rootint": [23, 34], "roughput": 22, "row": 5, "rule": 44, "run": [4, 5, 6, 8, 9, 10, 12, 14, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 32, 33, 34, 36, 37, 38, 39, 40, 42, 47, 49, 50, 52, 53, 54, 55], "run1": [5, 38], "run2": [5, 21, 38, 48], "run2operationsummari": [7, 26], "run2sk": [17, 41, 46, 48], "run2triggerchangelog": 26, "run3": 5, "run_tim": 55, "runnumb": 48, "runtim": [21, 53, 54], "ruthlessli": 7, "s21r0p1": 10, "s21r1": 10, "s21r1p2": 10, "s28": 10, "safe": 11, "sai": [1, 7, 14, 23, 24, 25, 26, 54], "salut": 22, "same": [4, 6, 8, 10, 11, 12, 14, 17, 18, 20, 21, 22, 23, 24, 26, 30, 32, 33, 34, 35, 36, 37, 38, 39, 41, 43, 45, 46, 50, 52, 54, 55], "sampl": [6, 8, 11, 24, 27, 28, 41, 42, 44, 45, 46, 47], "saniti": 33, "sara": 18, "satisfi": [9, 29, 33], "save": [6, 8, 10, 11, 12, 17, 23, 25, 26, 30, 33, 36, 37, 40, 45, 46, 48, 50, 54, 55], "saw": [5, 10, 11, 13, 18, 19, 35], "sc": 41, "scalar": 43, "scale": 32, "scaler": 44, "scene": [30, 54], "schedul": [21, 53, 54, 55], "scheme": 33, "scientif": 6, "scikit": 6, "scope": [22, 50], "score": [52, 53], "scp": 56, "scratch": 33, "screen": [25, 30], "script": [4, 5, 6, 12, 13, 14, 17, 19, 21, 28, 30, 33, 34, 38, 40, 50, 52, 53, 54, 55], "scroll": 36, "search": [4, 5, 7, 9, 18, 21, 38, 40, 48, 49, 53, 54], "second": [5, 10, 12, 14, 19, 21, 22, 26, 28, 30, 39, 40, 46, 47, 53, 54], "secondli": [6, 55], "section": [5, 17, 22, 23, 26, 38, 54], "secur": [5, 11, 56], "see": [1, 4, 5, 7, 8, 9, 10, 11, 14, 16, 17, 19, 21, 22, 23, 24, 25, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 41, 43, 45, 46, 48, 49, 52, 53, 54, 55, 56], "seekstripdecis": 19, "seem": [7, 54], "seen": [7, 22, 30, 34, 37, 40, 45, 55], "sel_d0": [33, 34, 36], "sel_dstar": [33, 35, 36], "sel_softpi": 33, "seleciton": 50, "select": [4, 6, 8, 10, 12, 22, 23, 24, 25, 26, 27, 28, 30, 31, 33, 35, 36, 37, 38, 39, 41, 46, 47, 48, 49, 50, 54], "selectionsequ": [32, 33, 38, 49], "self": [23, 28, 32], "selfilterphys_": 36, "sell": 2, "selreport": 50, "selseq": 49, "selsub": 49, "semilepton": [8, 18, 38, 43], "send": [3, 5, 29, 30, 40, 54], "sens": [12, 14, 22, 23, 50], "sensibl": 37, "sent": [13, 38, 52], "sentenc": 7, "sep": 12, "separ": [6, 30, 31, 32, 55], "seq": 49, "seq_kpi": 38, "sequenc": [6, 32, 33, 36, 38, 41, 49], "sequenti": [32, 55], "seri": [3, 29, 31, 44], "seriou": 21, "serv": [1, 20], "server": [1, 9, 11, 25], "servic": [25, 49, 52, 56], "session": [5, 13, 19, 25, 30, 37, 40, 50], "set": [4, 5, 6, 7, 10, 11, 12, 13, 14, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 30, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 44, 46, 48, 50, 54, 55, 56], "setdescriptortempl": 4, "setofflineinput": 50, "settag": 30, "settriggerinput": 50, "setup": [13, 21, 25, 38, 39, 42, 56], "setupproject": 12, "seven": 54, "sever": [9, 10, 12, 14, 21, 23, 24, 27, 30, 32, 33, 35, 38, 40, 45], "sexual": [0, 15], "sh": [30, 53, 54, 55], "shall": 2, "share": [2, 6, 11, 12, 20, 21, 33, 34, 52, 54, 55], "shell": [3, 12, 13, 17, 21, 25, 30, 38, 40, 54, 55], "ship": [13, 16], "short": [6, 15, 24, 30, 31, 39, 53], "shortcom": 33, "shortcut": [4, 8, 18, 25], "shorter": [24, 54], "shortli": [30, 53], "should": [1, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 16, 17, 21, 22, 23, 25, 27, 29, 30, 39, 40, 41, 42, 46, 49, 52, 53, 54, 55], "should_transfer_fil": [54, 55], "shouldn": 23, "show": [5, 7, 12, 19, 21, 23, 24, 36, 37, 38, 39, 48, 49, 53, 55], "showcas": [54, 55], "shown": [4, 14, 24, 30, 38, 53], "sig": [43, 44], "sign": [5, 22, 24, 28], "signal": [6, 8, 10, 11, 14, 24, 27, 34, 38, 42, 44, 45, 46, 47, 48, 50], "signalplain": 46, "signific": [11, 45, 55], "significantli": [11, 18], "silent": 36, "sim": [23, 47, 48], "sim09": [42, 47], "sim09b": [8, 47], "sim09c": [8, 13, 47, 48], "sim09d": 47, "sim09f": [8, 47], "sim09g": 47, "sim09h": 47, "sim09i": 47, "sim09j": 47, "sim09k": 47, "sim10": 47, "similar": [5, 6, 10, 13, 21, 22, 24, 30, 34, 35, 37, 39, 40, 49, 50, 53, 55], "similarli": [22, 30, 44, 53], "simpl": [5, 9, 11, 12, 13, 17, 22, 28, 30, 34, 35, 38, 39, 51, 52, 55], "simpler": [10, 54], "simpleselect": [33, 34], "simplest": [21, 40], "simpli": [4, 5, 7, 9, 13, 19, 21, 27, 30, 33, 34, 41, 42, 49, 54, 55], "simplier": 22, "simplifi": [4, 7, 22, 33, 34, 48], "simul": [5, 6, 8, 10, 19, 20, 23, 24, 28, 38, 39, 43, 46, 47, 48, 50], "simultan": [13, 24], "sinc": [4, 5, 10, 14, 17, 21, 22, 30, 32, 34, 38, 47, 49, 50, 54, 55], "singl": [5, 9, 10, 12, 22, 23, 33, 37, 38, 39, 45, 50, 55], "singleton": [32, 34], "sister": 6, "sit": 54, "site": [16, 21, 27, 30, 37, 40, 56], "situat": [33, 34, 49], "size": [0, 4, 6, 11, 13, 19, 50, 55], "sj": [37, 40], "sjob": 37, "skeet": 7, "skill": [7, 33], "skip": [34, 36, 37], "sktest": 39, "slc6": [13, 41, 54], "slice": 55, "slight": 46, "slightli": [10, 13, 14, 23, 54], "sline": 41, "sln": 43, "slot": 21, "slow": [17, 18, 25, 41, 46, 48], "slow_gaussian": 30, "small": [4, 6, 10, 18, 19, 21, 23, 33, 34, 37], "smaller": [11, 23], "smart": [7, 23, 45], "smartref": 50, "snakemak": 6, "snippet": [4, 30], "so": [2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 30, 31, 33, 34, 35, 37, 38, 40, 41, 44, 46, 47, 49, 50, 52, 54, 55], "sofrwar": 6, "soft": [4, 7, 24, 33, 34], "soft_pion": 33, "soft_pion_sel": [33, 35], "softwar": [3, 6, 8, 9, 10, 11, 13, 17, 20, 22, 23, 24, 26, 28, 29, 32, 38, 47, 48, 50, 52, 54], "softwareenvtool": 21, "sole": [6, 46], "solut": [5, 7, 9, 12, 14, 22, 25, 33, 34, 40, 46, 49, 54, 55], "solv": [7, 12, 32, 41], "some": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 21, 22, 23, 24, 25, 27, 29, 30, 31, 32, 33, 36, 37, 39, 40, 43, 45, 46, 49, 50, 52, 53, 54, 55], "someon": [7, 9, 25, 39], "someth": [5, 7, 9, 10, 12, 13, 14, 19, 20, 25, 27, 28, 47, 48, 53, 54, 55], "sometim": [8, 12, 21, 35, 43, 56], "somewher": [8, 18, 22, 40, 54], "soon": [9, 21, 53], "sooner": [27, 54], "sophist": 21, "sort": 8, "sourc": [1, 4, 6, 9, 20, 21, 24, 30, 39, 46, 48, 54], "space": [10, 14, 16, 17, 18, 24, 26, 37, 39, 44, 46, 52], "spare": [21, 39], "spawn": [27, 45], "speak": [18, 54], "speci": 23, "special": [5, 9, 13, 22, 23, 34, 46], "specif": [4, 5, 7, 10, 11, 12, 14, 18, 21, 22, 23, 25, 29, 33, 34, 37, 39, 40, 43, 44, 45, 47, 48, 50, 55], "specifi": [4, 5, 6, 8, 12, 13, 14, 17, 18, 21, 22, 23, 26, 27, 30, 33, 39, 40, 43, 44, 49, 53, 54, 55], "spectrum": 14, "speed": [10, 13, 21, 38, 42, 47], "spell": 7, "spend": 30, "spike": 46, "spillov": 48, "spin": 43, "spin0": 44, "split": [10, 13, 28, 30, 33, 42], "splitbyfil": [13, 27, 30], "splitter": [13, 27, 30], "spot": [9, 20], "spread": [4, 27], "spruce": [6, 11], "sprucing24c4": 5, "src": 4, "ssh": [5, 21, 25, 39, 42, 54], "sso": 53, "st": 55, "stabil": 30, "stabl": [14, 21, 24, 31, 46, 47], "stack": [7, 21, 23], "stage": [6, 26, 29, 30, 38, 52], "stai": 18, "stand": 38, "standalon": [5, 20], "standard": [18, 21, 24, 33, 39, 40, 55], "standardparticl": 33, "start": [3, 4, 5, 6, 7, 8, 9, 12, 13, 14, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 33, 35, 37, 38, 39, 40, 46, 49, 50, 52, 53, 55], "starterkit": [1, 3, 5, 9, 15, 17, 20, 21, 29, 34, 39, 40], "starterkit_ci": 1, "startview": 14, "state": [5, 14, 21, 22, 24, 27, 28, 29, 36, 42, 45, 47, 50, 53], "statement": 37, "statist": [24, 53], "statu": [5, 10, 13, 14, 23, 27, 36, 37, 53, 56], "statuscod": 22, "std": [8, 22], "stdallloosekaon": [33, 36], "stdallnopidspion": [33, 35, 36], "stderr": [40, 53], "stdout": [18, 40, 53, 54], "step": [5, 6, 7, 8, 9, 10, 11, 12, 20, 22, 23, 24, 25, 28, 30, 31, 33, 34, 35, 36, 38, 39, 40, 42, 43, 45, 47, 48, 53, 54, 55], "stick": 21, "still": [5, 19, 26, 29, 30, 38, 45, 50, 52], "stop": [12, 30, 32, 34], "storag": [5, 10, 11, 18, 20, 26, 38, 40, 50, 52, 54], "store": [4, 5, 6, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 26, 28, 30, 38, 39, 50, 53, 54], "store_tru": 37, "storeexploreralg": 36, "str": [18, 54, 55], "straight": [8, 22, 49, 54], "strategi": [27, 46], "stream": [6, 10, 11, 12, 18, 23, 26, 35, 36, 38, 41, 49, 50], "streamer": 22, "streamlin": [21, 33, 34, 39], "strength": 24, "strictli": 21, "strike": 33, "string": [12, 14, 21, 22, 23, 38], "strip": [6, 8, 10, 12, 18, 19, 21, 22, 23, 26, 28, 31, 32, 33, 34, 35, 36, 38, 47, 48, 49, 50], "strip_cod": [23, 34, 38], "strip_input": 34, "strip_sel": 34, "stripkil": 41, "stripping21r0p1a": 18, "stripping28r1": 41, "stripping28r1filt": 48, "stripping28r1noprescalingflag": 13, "stripping_lin": 38, "strippingarch": 41, "strippingconf": 41, "strippingconfigur": 41, "strippingd2hhpromptdst2d2kklinedecis": [23, 34], "strippinglin": 23, "strippingsel": 49, "strippingselect": 34, "strippingstream": 41, "strongli": [4, 14, 23, 41], "structur": [6, 19, 43, 44, 49, 50, 54], "struggl": [7, 12], "stuck": [7, 19, 20, 27], "studi": [6, 8, 10, 12, 32, 45], "stuff": 20, "sub": [11, 16, 38, 46, 49, 50, 53], "subcommand": [21, 39], "subdetector": [11, 38], "subdirectori": 54, "subfold": 8, "subject": [2, 7, 10, 25], "subjob": [13, 18, 28, 30, 37, 40], "sublicens": 2, "submiss": [27, 28, 30, 40, 51, 54], "submit": [0, 1, 5, 6, 9, 13, 20, 23, 27, 28, 30, 37, 40, 51, 52, 55], "submit_with_thread": 30, "subprocess": 17, "subsequ": 46, "subset": [26, 38, 54], "substanti": [2, 45], "substitut": [2, 14, 39, 49], "substitutepid": 49, "substructur": 50, "subtli": 25, "succesfulli": 21, "success": [6, 36], "successfulli": [5, 9, 12, 21, 25, 54], "sudo": 56, "suffici": [17, 21, 38, 39, 46], "suffix": [18, 22], "suggest": 2, "suit": 11, "suitabl": [5, 10, 12, 41, 47], "sum": [14, 22, 24, 36, 43], "sum_pt_pion": 4, "summari": [2, 5, 7, 36, 40, 53], "sumtre": [4, 22], "super": 9, "supervisor": 14, "suppli": [25, 37], "support": [6, 10, 11, 12, 18, 25, 40, 47, 50, 53, 54], "suppress": 22, "sure": [4, 5, 7, 8, 19, 21, 22, 25, 27, 33, 34, 39, 40, 41, 47, 50, 52, 54], "surpris": 21, "suspend": [53, 55], "suspici": 36, "sv": 43, "svn": 39, "svv_helamp": 43, "swiss": 25, "switch": [5, 25, 49, 54], "sxrypz": 10, "sy": [17, 19, 37], "symbol": [4, 8, 14], "synchron": 39, "syntax": [22, 23, 30, 48, 55], "synthet": 39, "system": [5, 6, 9, 12, 18, 21, 28, 39, 40, 42, 45, 48, 51, 53, 54, 56], "systemofunit": 46, "t": [4, 5, 7, 8, 10, 11, 12, 13, 19, 20, 21, 22, 23, 25, 26, 27, 29, 30, 31, 32, 34, 36, 37, 39, 40, 41, 42, 43, 47, 48, 49, 50, 54, 55, 56], "tab": [5, 8, 23], "tabl": [5, 47], "tag": [5, 23, 30, 43, 48], "take": [5, 7, 8, 9, 10, 11, 13, 17, 18, 19, 21, 22, 23, 24, 27, 30, 32, 33, 34, 37, 39, 40, 41, 46, 48, 49, 50, 52, 53, 54], "taken": [7, 10, 49], "talk": [7, 40, 47], "tannenbaum": 52, "tape": [11, 38], "tar": 54, "target": [11, 39], "task": [6, 9, 10, 11, 12, 14, 29, 30, 32, 37, 51], "task_chain": 30, "task_num": 30, "taskchaininput": 30, "taught": [21, 28, 39], "tb": 10, "tbrowser": [4, 5, 23], "tchain": [18, 37], "tck": 28, "tcksh": 38, "tcsh": 25, "te": [12, 19, 23, 32, 33, 36, 41], "teach": [12, 13, 20, 29], "team": [0, 6, 54], "technic": [7, 22, 49], "techniqu": 6, "technolog": 2, "tediou": 13, "tee": 25, "tell": [5, 7, 13, 14, 18, 19, 23, 37, 40, 50, 52, 53, 54, 55], "templat": 5, "temporari": 54, "ten": 23, "tend": 17, "term": [2, 7, 15, 20, 34, 50], "termin": [12, 13, 19, 21, 25, 53, 54, 56], "tesla": 50, "tesloc": [35, 49], "test": [4, 6, 9, 12, 13, 21, 30, 34, 37, 38, 39, 40, 44, 46, 47, 53, 54], "testmatch": 54, "tev": 26, "text": [2, 5, 8, 9, 12, 22, 25, 39, 40, 54, 55], "tfile": 23, "th": 22, "than": [6, 8, 9, 14, 22, 24, 25, 26, 30, 37, 38, 43, 44, 46, 49, 50, 54, 55], "thank": [26, 32, 33, 34], "thead": 25, "thei": [4, 5, 7, 9, 10, 12, 13, 21, 22, 24, 29, 30, 32, 33, 34, 35, 36, 39, 40, 44, 46, 50, 52, 53, 54, 55, 56], "them": [1, 4, 5, 6, 7, 9, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 30, 32, 33, 34, 36, 37, 39, 40, 49, 50, 52, 54, 55], "themselv": [7, 32, 50], "therefor": [22, 32, 33, 46, 49], "theta": 46, "thetestpackag": 39, "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56], "thing": [1, 4, 5, 7, 9, 12, 13, 21, 22, 23, 25, 26, 29, 30, 33, 36, 37, 40, 46, 47, 49, 50, 54, 55], "think": [7, 8, 10, 12, 20, 37, 45, 49, 55], "third": [14, 50], "thor": [11, 22], "those": [5, 6, 14, 15, 17, 21, 22, 23, 24, 29, 30, 33, 34, 36, 37, 46, 47, 50, 52], "though": [23, 26, 43], "thought": 7, "thousand": 10, "thread": 11, "three": [7, 8, 24, 30, 38, 53, 54], "threshold": [11, 30, 45], "thrive": 15, "throttl": 30, "through": [0, 5, 8, 10, 11, 12, 18, 19, 20, 21, 23, 24, 30, 32, 33, 36, 38, 47, 49, 54], "throughout": [12, 25, 26], "throughput": 52, "throw": 4, "thrown": [8, 26], "thu": [12, 22], "thusli": 50, "ti": [30, 34, 38, 50], "tight": [11, 45, 46], "tightcut": 46, "tighter": 11, "time": [4, 5, 6, 7, 10, 11, 12, 13, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 30, 33, 34, 37, 38, 39, 40, 41, 43, 45, 46, 47, 50, 53, 54, 55, 56], "timeleft": 25, "timothi": 25, "tip": [7, 13, 18], "tisto": 28, "tistosselect": 34, "tistostobtrigg": 50, "titl": [7, 39], "tlife": 43, "tmp": [13, 25], "tmux": 30, "tn": 12, "tob": [38, 50], "todd": 52, "togeth": [6, 10, 11, 20, 24, 30, 33, 48, 52], "toi": [6, 24], "told": [14, 46], "toler": 11, "tomorrow": 54, "tone": 7, "too": [6, 10, 14, 34, 45], "took": 10, "tool": [3, 4, 5, 10, 11, 12, 14, 18, 19, 21, 22, 23, 28, 30, 33, 34, 37, 41, 42, 44, 49, 50], "toolkit": 49, "toollist": [38, 48], "toolsvc": [12, 19, 22, 50], "top": [4, 5, 9, 13, 19, 21, 40, 48], "topic": [3, 7, 20, 26], "topolog": 38, "topologi": [23, 49], "topselect": [33, 49], "tort": 2, "tos": 50, "total": [5, 11, 24, 27, 50, 53, 55], "touch": 5, "toward": 7, "trace": 6, "track": [4, 9, 10, 11, 12, 14, 19, 21, 22, 23, 24, 26, 31, 36, 38, 45, 50, 51, 52], "track_max_pt": 4, "track_tool": 4, "trackcalib": 6, "tracker": [9, 36], "trackmva": 50, "tradit": 30, "trajectori": 24, "transfer": [52, 54, 55], "transfer_input_fil": [54, 55], "transfer_output_fil": [54, 55], "transfer_output_remap": 54, "transform": [2, 10, 23, 30, 48], "transient": 12, "transit": [11, 44], "transpar": 6, "transport": 47, "transvers": [22, 46, 50], "travers": 24, "trchi2": 22, "trchi2dof": 33, "treat": [37, 40], "tree": [4, 8, 14, 19, 22, 26, 28, 33, 42, 48, 50], "trf": 30, "trf1": 30, "trf2": 30, "tri": [7, 22, 24, 34, 52], "trick": [18, 36, 46, 49], "trig0x6138160f": [8, 13, 48], "trigger": [4, 6, 8, 10, 12, 19, 22, 23, 26, 28, 30, 31, 34, 36, 39, 45, 46, 48, 50], "triggerlist": 38, "triggerselect": 34, "triggertisto": 50, "trivial": 11, "troll": 0, "troubl": 5, "true": [4, 5, 11, 14, 17, 19, 22, 23, 24, 25, 27, 30, 33, 37, 38, 47, 48], "trust": 25, "truth": 6, "try": [4, 5, 7, 8, 9, 10, 13, 17, 18, 19, 21, 22, 24, 25, 27, 34, 36, 38, 39, 40, 41, 44, 46, 50, 53, 54], "ttt": 38, "tttt": 38, "tupl": [4, 11, 16, 22, 30, 33, 49], "tuple_sel": 34, "tupledsttod0pi_d0tokk": [14, 23, 36], "tupledsttod0pi_d0tokpi": [4, 23, 49], "tuplefil": [23, 38, 48], "tupleselect": [34, 38], "tupletool": [11, 14, 21, 22, 28], "tupletoolannpid": 4, "tupletooldecaytreefitt": 14, "tupletooleventinfo": [4, 38], "tupletoolgeometri": 4, "tupletoolkinemat": 4, "tupletoolpid": 4, "tupletoolprimari": 4, "tupletoolpropertim": 4, "tupletooltisto": 38, "tupletooltrackinfo": 4, "tupletooltrigg": 38, "tupsel_kpi": 38, "turbo": [6, 8, 11, 23, 26, 32, 36, 38, 50], "turbo03": [13, 48], "turbopass": 5, "turbosp": 26, "turn": [4, 24, 44, 45], "tutori": [8, 11, 12, 14, 30, 39, 50, 51, 52], "tv__tree": 14, "twiki": [7, 10, 11, 17, 21, 22, 23, 26, 38, 39, 41, 45, 46, 48, 49], "twin": 6, "two": [7, 8, 10, 11, 13, 14, 15, 16, 21, 22, 23, 24, 26, 30, 32, 33, 34, 37, 38, 40, 43, 45, 46, 50, 54, 55], "txt": [9, 21, 30, 38, 39, 40, 43, 54, 55], "txt__": 30, "type": [4, 6, 8, 10, 12, 13, 18, 19, 22, 23, 24, 25, 26, 32, 33, 34, 36, 37, 38, 39, 42, 44, 46, 48, 53, 54, 55], "type1": 22, "type2": 22, "type3": 22, "typic": [6, 10, 14, 19, 21, 22, 23, 24, 32, 33, 43, 45, 53], "typo": 9, "u": [4, 5, 8, 10, 14, 18, 19, 21, 22, 23, 24, 30, 33, 34, 36, 37, 39, 40, 49, 54], "ubuntu": 51, "ultim": 10, "unabl": 22, "unaccept": 0, "unavail": 56, "unavoid": 45, "uncertainti": 24, "unchang": 45, "under": [1, 2, 4, 5, 8, 16, 21, 24, 29, 31, 38, 39, 47], "undergo": 11, "underli": 45, "understand": [5, 10, 11, 14, 20, 21, 22, 24, 26, 30, 31, 33, 36, 38, 39, 42, 44, 47, 52], "unfold": 25, "unind": 5, "unintend": 21, "uniqu": [5, 30, 32, 33, 34, 40, 50, 53], "unit": [22, 25, 30, 32, 39], "unit_splitt": 30, "univers": [30, 52, 53, 54, 55], "unix": 25, "unknown": 44, "unlik": [29, 50], "unload": 36, "unnecessarili": [45, 54], "unneed": [4, 18], "unpack": [19, 23, 30, 54], "unphys": 14, "unpolar": 44, "unprofession": 0, "unreli": 18, "unsaf": 34, "unstabl": [24, 47], "unstrip": 36, "unstuck": 7, "unsustain": 45, "until": [9, 11, 19, 25, 36, 45, 46, 47, 53], "untrust": 25, "unwil": 7, "up": [4, 5, 7, 8, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 25, 28, 30, 32, 36, 37, 39, 40, 41, 42, 46, 47, 50, 53, 54, 55, 56], "up08": 47, "updat": [0, 4, 5, 21, 39, 41, 54, 56], "updatedaught": 14, "upgrad": [5, 12, 26, 28, 39, 47], "upload": [6, 25, 30, 39, 40], "uploads": 40, "upon": [2, 54], "upper": [9, 22, 48, 54], "uproot": [6, 23], "url": [18, 21, 37], "us": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 45, 46, 47, 49, 50, 51, 53, 54, 56], "usabl": [8, 32, 45, 48], "usag": [4, 5, 21, 22, 23, 30, 34, 37, 40, 52], "user": [5, 6, 9, 10, 11, 16, 17, 18, 21, 25, 32, 38, 39, 40, 50, 52, 53, 54, 56], "useralgorithm": [4, 23, 33, 36, 38, 48], "usercert": 56, "userkei": 56, "usernam": [21, 25, 39, 53], "usign": 6, "usual": [4, 5, 6, 7, 8, 10, 12, 14, 16, 22, 23, 25, 26, 30, 32, 38, 40, 45, 46, 49, 52, 54], "util": [34, 37], "utilit": 30, "v": [21, 30, 37], "v0": 36, "v00": 5, "v28r3p1": 38, "v41r4p4": 41, "v45r8": [12, 13, 19, 21, 22, 23], "v49": 47, "v49r10": 47, "v49r11": 47, "v49r12": 47, "v49r13": 47, "v49r14": 47, "v49r17": 47, "v49r18": 47, "v49r20": 47, "v49r21": 42, "v49r5": 47, "v49r8": 47, "v49r9": 47, "v50r1": 12, "v52": 47, "v64r12": 5, "v8": 52, "vagu": 7, "valid": [5, 8, 34, 47, 56], "validbpvselect": 34, "validtim": 18, "valu": [4, 5, 6, 7, 14, 22, 23, 24, 27, 30, 37, 43, 46, 49, 54, 55], "vanilla": [21, 38, 39, 53, 55], "vanish": 22, "vari": [21, 24], "variabl": [4, 6, 10, 11, 13, 14, 19, 20, 33, 37, 48, 51, 52], "varialb": 21, "variat": [35, 39], "varieti": 51, "variou": [8, 10, 11, 16, 24, 42, 45, 48], "varnam": 55, "vc": [23, 48], "vchi2": [4, 22, 33, 35, 36], "vdof": [33, 35, 36], "ve": [4, 5, 19, 22, 23, 27, 31, 37, 39, 54, 55], "vector": [19, 22, 24, 43, 44], "velo": [26, 36], "veloclos": [5, 18], "verbos": [4, 14, 38], "veri": [4, 5, 6, 7, 8, 9, 10, 13, 14, 16, 17, 18, 20, 21, 22, 24, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 43, 45, 46, 55], "verifi": [7, 47], "version": [0, 1, 4, 5, 6, 8, 10, 12, 13, 18, 21, 23, 28, 30, 34, 37, 39, 40, 41, 42, 44, 46, 48, 54], "vertex": [4, 6, 12, 14, 22, 24, 26, 33, 34, 36], "vertexbas": 22, "vertic": [12, 14, 19, 22, 23, 24], "vfaspf": [4, 22, 33, 35, 36], "via": [6, 8, 13, 14, 16, 17, 18, 19, 22, 24, 25, 30, 32, 40, 43, 44, 47, 49, 52], "view": [5, 13, 16, 21, 23, 38, 39, 45, 46, 48, 54], "violat": 11, "virtual": [6, 10, 32, 56], "visibl": 5, "visit": [9, 21, 25, 28, 39, 55], "visual": 32, "visualis": 10, "vital": 44, "vll": 43, "vo": 25, "volunt": 7, "vom": [25, 56], "voms": 56, "vomsdir": 56, "vss": [44, 46], "vtx_chi2": 4, "vxry": 21, "vxxrypz": 12, "vz": 4, "w": [37, 54, 55], "wa": [5, 6, 7, 8, 10, 12, 19, 21, 22, 23, 24, 26, 30, 32, 33, 34, 38, 40, 41, 44, 47, 49, 50, 54], "wai": [2, 4, 5, 6, 7, 8, 10, 11, 12, 14, 16, 18, 19, 20, 21, 22, 23, 24, 25, 30, 33, 34, 35, 37, 39, 40, 41, 49, 50, 51, 52, 53, 54, 56], "wait": [13, 25, 26, 52, 53], "walk": 19, "want": [4, 5, 7, 8, 9, 10, 12, 13, 14, 17, 19, 20, 21, 22, 23, 24, 25, 27, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 46, 47, 48, 49, 52, 53, 54, 55], "warn": [1, 12, 17, 21, 22, 25, 42], "warranti": 2, "wast": [5, 10, 18], "watch": [25, 53], "we": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 49, 50, 53, 55], "weak": 24, "web": [1, 4, 5, 7, 9, 15, 21, 25, 39, 42], "webpag": 5, "webserv": 9, "websit": [7, 9, 10, 20, 21, 28, 39, 42, 44, 46], "week": [54, 56], "weekend": 54, "welcom": [1, 12, 37], "well": [4, 5, 6, 7, 8, 9, 11, 12, 20, 22, 23, 24, 25, 27, 31, 44, 47, 52, 54], "went": 54, "were": [2, 5, 10, 22, 26, 38, 52, 53, 54, 55], "wg": [5, 16, 17, 41, 46, 48], "wget": 40, "what": [4, 5, 7, 8, 9, 10, 13, 19, 20, 21, 22, 23, 25, 26, 28, 30, 31, 33, 37, 38, 39, 40, 41, 42, 44, 45, 48, 49, 50, 52, 53, 54, 55], "whatev": 19, "when": [1, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 33, 37, 38, 39, 40, 41, 44, 45, 46, 50, 52, 53, 54, 55, 56], "when_to_transfer_output": [54, 55], "where": [2, 4, 7, 8, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 26, 27, 29, 30, 33, 36, 37, 38, 39, 40, 46, 48, 49, 50, 51, 52, 54, 55], "wherea": [11, 40], "wherebi": [8, 26], "wherev": [1, 11, 40], "whether": [2, 4, 14, 23, 27, 40, 45, 54], "which": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 50, 52, 53, 54, 55, 56], "while": [4, 5, 13, 17, 19, 21, 22, 27, 34, 36, 38, 41, 48, 52, 53, 54], "whilst": [10, 47], "who": [0, 5, 7, 15, 20, 21], "whole": [27, 34, 37, 50, 53], "whom": 2, "whose": [40, 45], "why": [7, 10, 19, 20, 22, 24, 28, 31, 34, 38, 42, 49, 50], "wide": 25, "width": [28, 42], "wiederhold": 5, "wiki": 0, "wildcard": [18, 55], "willing": 7, "window": [8, 23, 25, 30, 36, 48], "wisconsin": 52, "wise": 18, "wish": 15, "within": [4, 5, 6, 7, 8, 13, 22, 23, 24, 36, 38, 46, 54, 55], "without": [2, 10, 12, 13, 14, 21, 22, 23, 27, 28, 32, 34, 43, 46, 51, 53, 54, 55], "withth": 6, "wizard": 25, "won": [5, 12, 21, 37, 41], "wonder": 34, "word": [8, 21, 22, 23], "work": [1, 3, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 29, 30, 32, 33, 34, 37, 39, 40, 41, 42, 46, 50, 53, 54, 56], "workaround": [7, 17], "workdai": 54, "worker": [52, 54], "workflow": [6, 21, 30, 34, 36, 37, 39], "workshop": [3, 12, 28, 29], "workspac": [16, 17], "world": [22, 37, 40, 53], "worri": [25, 30, 40, 44], "worst": 22, "worth": [12, 22, 24, 55], "would": [4, 5, 8, 10, 11, 12, 17, 19, 21, 22, 23, 26, 27, 30, 32, 33, 34, 35, 36, 37, 40, 43, 44, 48, 50, 54, 55], "wouldn": 55, "wp7": [17, 41, 46, 48], "wrap": [32, 40], "wrapper": [22, 34, 35, 49, 54, 55], "write": [6, 7, 10, 12, 19, 20, 22, 31, 32, 36, 37, 38, 41, 46, 52, 54, 55], "write_lfn": 37, "written": [4, 6, 7, 9, 20, 23, 32, 34, 36, 37, 38, 50, 51, 55], "wrong": [9, 14, 22, 23, 30, 43, 44, 53, 54], "wrote": 7, "www": 9, "x": [10, 22, 23, 25, 37, 40, 48, 53], "x11": 25, "x509_cert_dir": 56, "x509_voms_dir": 56, "x509up_u25636": 25, "x86_64": [12, 13, 21, 30, 41], "xauth": 25, "xgen": [46, 48], "xming": 25, "xml": [17, 23, 40, 46], "xmlcatalog_fil": 17, "xmlcatalogueslic": 18, "xrdcp": [16, 17, 41], "xroot": 38, "xrootd": [16, 40, 56], "xterm": 25, "xx": 13, "xxx": 14, "y": [10, 22, 25, 37, 40], "yaml": 5, "ye": [44, 54], "year": [10, 23, 37, 47, 48], "yet": [13, 54], "yo": 37, "you": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56], "your": [1, 2, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 33, 35, 37, 39, 40, 41, 42, 43, 46, 48, 50, 51, 52, 54, 55, 56], "your_email_address": 54, "yourself": [6, 7, 13, 20, 31, 37, 46, 48], "yourusernam": 9, "yum": 56, "z": [10, 22, 37, 46, 47], "zero": 55, "zfit": 6, "zxvf": 54, "\u00b5dst": [10, 23, 32], "\u03bc": 38}, "titles": ["Contributor Code of Conduct", "Contributing", "Instructional Material", "First Analysis Steps", "TupleTools and branches", "Analysis Productions", "The analysis flow and analysis preservation", "Asking good questions", "Finding data in the Bookkeeping", "Contribute to this lesson", "The LHCb data flow", "LHCb data flow in Run 3", "An introduction to LHCb Software", "Running DaVinci on the grid", "How do I use DecayTreeFitter?", "Early career, gender and diversity", "Storing large files on EOS", "Downloading a file from the grid", "More Ganga", "Interactively exploring a DST", "Goals of the course", "Developing LHCb Software", "Fun with LoKi Functors", "Running a minimal DaVinci job locally", "Physics at LHCb", "Pre-workshop checklist", "Changes to the data flow in Run 2", "Splitting a job into subjobs", "The LHCb Starterkit lessons ", "Second Analysis Steps", "Advanced Dirac", "Building your own decay", "The Selection Framework", "A Historical Approach", "Modern Selection Framework", "Reuse particles from a decay tree", "What to do when something fails", "Scripting Ganga", "HLT intro", "Using git to develop LHCb software", "Managing files in Ganga", "Run a different stripping line on simulated data", "The simulation framework", "Advanced: Modifying the decay", "Controlling the decay: DecFiles", "Why fast simulation is crucial", "Modifying the decay", "What is Gauss?", "Which option files to use and how to run Gauss", "Replace a mass hypothesis", "TisTos DIY", "Self guided lessons", "Batch submission using HTCondor", "Submitting a simple job", "More submit file options", "Using the queue command", "Creating a grid proxy without LbScripts"], "titleterms": {"2": 26, "3": [11, 43], "A": 33, "The": [6, 10, 11, 24, 28, 32, 42], "ad": [37, 46], "add": 38, "advanc": [30, 43], "altern": 30, "an": [12, 43, 48], "analysi": [3, 5, 6, 29], "approach": 33, "arch": 56, "architectur": [11, 52], "argument": 54, "ask": 7, "backend": 30, "batch": 52, "bodi": 43, "bookkeep": 8, "branch": 4, "bug": 30, "build": [24, 28, 31], "candid": 24, "career": 15, "cento": 56, "certif": 56, "chang": [11, 26, 43], "channel": 46, "checklist": 25, "choos": 47, "cocktail": 43, "code": 0, "command": 55, "complex": 24, "condor": 30, "conduct": 0, "constant": 43, "content": [28, 31, 42, 51, 52], "continu": 38, "contribut": [1, 9], "contributor": 0, "control": 44, "cours": 20, "creat": [5, 48, 56], "crucial": 45, "cut": [45, 46], "data": [5, 6, 8, 10, 11, 26, 41], "davinci": [11, 13, 23, 30], "decai": [24, 31, 35, 43, 44, 46], "decaytreefitt": 14, "decfil": 44, "defin": 37, "depend": 1, "detector": 45, "develop": [21, 39], "differ": 41, "dii": 50, "dirac": 30, "divers": 15, "do": [14, 36], "download": 17, "dst": 19, "earli": 15, "energi": 6, "eo": 16, "etc": 43, "exist": 43, "explor": [19, 38], "extern": 28, "fail": 36, "fast": 45, "file": [6, 16, 17, 40, 48, 54, 56], "final": 43, "find": [8, 43], "first": 3, "flow": [6, 10, 11, 26], "framework": [32, 34, 42], "from": [17, 35], "fun": 22, "function": 37, "functor": 22, "ganga": [18, 37, 40], "gangatask": 30, "gauss": [47, 48], "gender": 15, "gener": [45, 46, 48], "geometri": 45, "get": [1, 6, 56], "git": 39, "goal": 20, "good": 7, "grid": [13, 17, 56], "guid": 51, "gun": 45, "helper": 37, "high": 6, "histor": 33, "hlt": [11, 38], "homebrew": 56, "how": [14, 48], "htcondor": 52, "hypothesi": 49, "i": [14, 45, 47], "inform": 38, "input": 54, "instal": 56, "instruct": 2, "interact": 19, "intro": 38, "introduct": 12, "job": [23, 27, 37, 53], "larg": 16, "lbscript": 56, "lesson": [9, 28, 51], "level": [45, 46], "lhcb": [10, 11, 12, 21, 24, 28, 39], "lifetim": 43, "line": [38, 41], "link": 28, "linux": 56, "list": 38, "local": [5, 23], "loki": 22, "maco": 56, "make": 48, "manag": [40, 56], "mass": [43, 49], "materi": 2, "mc": 43, "merg": 5, "minim": 23, "mix": 55, "modern": 34, "modifi": [43, 46], "monitor": 5, "more": [18, 24, 54, 55], "multi": 43, "notif": 54, "ntupl": [38, 48], "offlin": 11, "onli": 48, "option": [48, 54, 55], "other": [52, 55], "output": 54, "own": [5, 31], "particl": [35, 43, 45], "persist": 11, "physic": [6, 24], "pre": 25, "preserv": 6, "process": 11, "product": 5, "properti": 38, "proxi": 56, "python": 30, "question": 7, "queue": 55, "radiat": 43, "reconstruct": 24, "redecai": 45, "reduc": 45, "remov": 46, "replac": 49, "request": 5, "requir": [54, 56], "resourc": [52, 54], "reus": 35, "run": [11, 13, 23, 26, 41, 48], "sampl": [43, 48], "script": 37, "second": 29, "select": [11, 32, 34], "self": 51, "simpl": 53, "simul": [41, 42, 45], "softwar": [2, 12, 21, 39], "someth": 36, "speed": 45, "split": [27, 45], "start": 1, "starterkit": 28, "state": 43, "statu": 28, "step": [3, 29], "store": 16, "strip": 41, "subjob": 27, "submiss": 52, "submit": [53, 54], "system": [11, 52], "tck": 38, "test": 5, "thi": 9, "tisto": [38, 50], "tool": [6, 46], "track": 53, "tree": 35, "trigger": [11, 38], "tupletool": 4, "ubuntu": 56, "up": 45, "upgrad": 11, "us": [6, 14, 39, 43, 48, 52, 55], "variabl": 55, "version": 47, "wai": 55, "what": [36, 47], "when": 36, "which": 48, "why": 45, "width": 43, "without": 56, "workshop": 25, "your": [5, 31, 38, 47, 53]}}) \ No newline at end of file diff --git a/second-analysis-steps/README.html b/second-analysis-steps/README.html index c323fcf4..a35f1a84 100644 --- a/second-analysis-steps/README.html +++ b/second-analysis-steps/README.html @@ -1,28 +1,27 @@ + + - + - + Second Analysis Steps — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + + + @@ -255,7 +254,7 @@
          -

          Second Analysis Steps

          +

          Second Analysis Steps

          These are the lessons for the second-stage workshop of the Starterkit series. They build on those from the first workshop, teaching LHCb software that’s more advanced and more focused on specific tasks.

          Unlike the first workshop, there may be some lessons here that aren’t applicable to everyone’s analysis, but all the lessons should still provide a useful insight in to how things work under the hood. diff --git a/second-analysis-steps/advanced-dirac.html b/second-analysis-steps/advanced-dirac.html index a6e4cef7..df98a715 100644 --- a/second-analysis-steps/advanced-dirac.html +++ b/second-analysis-steps/advanced-dirac.html @@ -1,28 +1,25 @@ + + - + - + Advanced Dirac — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -256,7 +253,7 @@

          -

          Advanced Dirac

          +

          Advanced Dirac

          At this point we have used Ganga for a number of things related to DaVinci and basic file management. However, Ganga is a much more flexible tool than that. Using Python and IPython we can set up more complicated workflows that manage much of your analysis for you!

          @@ -279,7 +276,7 @@

          Advanced Dirac -

          GangaTasks

          +

          GangaTasks

          The first and most important package to introduce is GangaTasks. This package is designed to stop busy analysts from spending more time managing GRID jobs than working on physics. It has the following core features.

          • Automatically submits jobs and keeps a certain ammount running at all times.

          • @@ -401,7 +398,7 @@

            GangaTasks -

            Alternative Backends - DIRAC (Python bugged)

            +

            Alternative Backends - DIRAC (Python bugged)

            So far we have only run Tasks on the Localhost. Naturally this will not be appropriate for many of the jobs you will need to do. So firstly lets get our python scripts running on DIRAC rather than Localhost. First we need to ensure that our DIRAC submission can access lb-conda. This is done using Tags which allow us to configure the behind the scenes of DIRAC. As such we need to add the following snippet to our code.

            trf1.backend = Dirac()
             trf1.backend.diracOpts = '[j.setTag(["/cvmfs/lhcbdev.cern.ch/"])]'
            @@ -414,7 +411,7 @@ 

            Alternative Backends - DIRAC (Python -

            Alternative Backends - DIRAC (DaVinci)

            +

            Alternative Backends - DIRAC (DaVinci)

            As you can also imagine it is useful to be able to include DaVinci jobs as Transforms in certain analysis chains. As mentioned earlier Transforms have the following advantages over traditional jobs.

            • Tasks will resubmit failed subjobs automatically.

            • @@ -437,7 +434,7 @@

              Alternative Backends - DIRAC (DaVinci)Running DaVinci on the GRID lesson.

          -

          Alternative Backends - Condor

          +

          Alternative Backends - Condor

          Transforms can also be set to run on the Condor backend. For those of you familiar with Condor you should recognise the requirements object that allows you to set requirements for host selection. These include opsys, arch, memory and others and can be inspected directly through the IPython interface. Changes to the choice of Condor universe can also be made by directly by changing the contents of backend.universe. An example of using the Condor backend is as follows.

          trf1.backend = Condor()
           trf1.backend.getenv = "True"  # send the environment to the host
          diff --git a/second-analysis-steps/building-decays-part0.html b/second-analysis-steps/building-decays-part0.html
          index 0009ebca..2ed993c1 100644
          --- a/second-analysis-steps/building-decays-part0.html
          +++ b/second-analysis-steps/building-decays-part0.html
          @@ -1,30 +1,27 @@
          +
          +
           
          -
          +
           
          -  
          +  
           
             
             The Selection Framework — LHCb Starterkit Lessons  documentation
          -      
          -      
          -      
          -      
          +      
          +      
          +      
          +      
           
             
          -  
          -  
          -        
          -        
          -        
          -        
          -        
          -        
          -        
          -        
          -        
          -        
          +      
          +      
          +      
          +      
          +      
          +      
          +      
          +      
          +      
               
               
               
          @@ -259,7 +256,7 @@
                      
          -

          The Selection Framework

          +

          The Selection Framework

          Learning Objectives

          diff --git a/second-analysis-steps/building-decays-part1.html b/second-analysis-steps/building-decays-part1.html index ac886727..23c66b07 100644 --- a/second-analysis-steps/building-decays-part1.html +++ b/second-analysis-steps/building-decays-part1.html @@ -1,30 +1,27 @@ + + - + - + A Historical Approach — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - - - + + + + + + + + + @@ -259,7 +256,7 @@
          -

          A Historical Approach

          +

          A Historical Approach

          Learning Objectives

          @@ -292,7 +289,7 @@

          A Historical Approach

          There’s no need to download the files from the Grid for this lesson. We can simply open them using the root protocol thanks to the fact that they are replicated at CERN:

          -
          from GaudiConf import IOHelper
          +
           

          Our input pions and kaons can be imported from the StandardParticles package:

          -
          from StandardParticles import StdAllNoPIDsPions as Pions
          -from StandardParticles import StdAllLooseKaons as Kaons
          +
          from StandardParticles import StdAllNoPIDsPions as Pions
          +from StandardParticles import StdAllLooseKaons as Kaons
           

          This is an ideal way to get pre-made particles with the standard LHCb configuration.

          @@ -315,7 +312,7 @@

          A Historical ApproachStandardParticles/CommonParticles packages (one imports the other), which you can find here, allow to access premade particles with reasonable reconstruction/selections for us to use with AutomaticData.

          For example, in our specific case, we use the AutomaticData class with the Phys/StdAllNoPIDsPions/Particles and Phys/StdAllLooseKaons/Particles locations to access the output of the StdAllNoPIDsPions and StdAllLooseKaons algorithms, respectively (see here and here). Therefore, the following code would be equivalent to what we have used:

          -
          from PhysConf.Selections import AutomaticData
          +
          from PhysConf.Selections import AutomaticData
           Pions = AutomaticData('Phys/StdAllNoPIDsPions/Particles')
           Kaons = AutomaticData('Phys/StdAllLooseKaons/Particles')
           
          @@ -355,7 +352,7 @@

          A Historical Approach

          With all the selections ready, we can build a combiner as

          -
          from Configurables import CombineParticles
          +

          Now we have to build a Selection out of it so we can later on put all pieces together:

          -
          from PhysConf.Selections import Selection
          +
          from PhysConf.Selections import Selection
           d0_sel = Selection(
               'Sel_D0',
               Algorithm=d0,
          @@ -420,7 +417,7 @@ 

          A Historical ApproachFilterDesktop algorithm, which takes a TES location and filters the particles inside according to a given LoKi functor in the Code property, which then can be given as input to a Selection:

          -
          from Configurables import FilterDesktop
          +

          We can now build build a SelectionSequence to add to the DaVinci execution sequence

          -
          from PhysConf.Selections import SelectionSequence
          +
          from PhysConf.Selections import SelectionSequence
           dstar_seq = SelectionSequence('Dstar_Seq', TopSelection=dstar_sel)
          -from Configurables import DaVinci
          +from Configurables import DaVinci
           DaVinci().UserAlgorithms += [dstar_seq.sequence()]
           
          diff --git a/second-analysis-steps/building-decays-part2.html b/second-analysis-steps/building-decays-part2.html index 4f9993d0..c903f280 100644 --- a/second-analysis-steps/building-decays-part2.html +++ b/second-analysis-steps/building-decays-part2.html @@ -1,28 +1,25 @@ + + - + - + Modern Selection Framework — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -257,7 +254,7 @@
          -

          Modern Selection Framework

          +

          Modern Selection Framework

          Learning Objectives

          @@ -274,8 +271,8 @@

          Modern Selection FrameworkSelection (creating an algorithm and building a selection with it) can be simplified by using a helper function in the PhysConf.Selections module, called SimpleSelection. It gets a selection name, the algorithm type we want to run, the inputs and any other parameters that need to be passed to the algorithm (as keyword arguments), and returns a Selection object build in the same two-step way. With that in mind, we can rewrite the previous two pieces of code as

          -
          import GaudiConfUtils.ConfigurableGenerators as ConfigurableGenerators
          -from PhysConf.Selections import SimpleSelection
          +
          import GaudiConfUtils.ConfigurableGenerators as ConfigurableGenerators
          +from PhysConf.Selections import SimpleSelection
           d0_sel = SimpleSelection(
               'Sel_D0',
               ConfigurableGenerators.CombineParticles,
          @@ -308,7 +305,7 @@ 

          Modern Selection FrameworkCombineSelection is used for the SelectionCombineParticles combination. The previous example would be written then:

          -
          from PhysConf.Selections import CombineSelection
          +
          from PhysConf.Selections import CombineSelection
           d0_sel = CombineSelection(
               'Sel_D0',
               [Kaons],
          @@ -367,7 +364,7 @@ 

          Modern Selection Framework

          Try running the minimal DaVinci job with and without the StrippingSelection/DecayTreeTuple selections, and compare their performance

          In this particular case, there is a simple way to achieve a CPU-efficient code with DecayTreeTuple, thanks to the use of DaVinci pre-event filters;

          -
          from PhysConf.Filters import LoKi_Filters
          +
          from PhysConf.Filters import LoKi_Filters
           filter_ = LoKi_Filters(STRIP_Code="HLT_PASS('StrippingD2hhPromptDst2D2KKLineDecision')")
           
           DaVinci().EventPreFilters = filter_.filters("FILTERS")
          diff --git a/second-analysis-steps/building-decays.html b/second-analysis-steps/building-decays.html
          index 7d9effa7..1e810291 100644
          --- a/second-analysis-steps/building-decays.html
          +++ b/second-analysis-steps/building-decays.html
          @@ -1,28 +1,27 @@
          +
          +
           
          -
          +
           
          -  
          +  
           
             
             Building your own decay — LHCb Starterkit Lessons  documentation
          -      
          -      
          -      
          -      
          +      
          +      
          +      
          +      
           
             
          -  
          -  
          -        
          -        
          -        
          -        
          -        
          -        
          -        
          -        
          +      
          +      
          +      
          +      
          +      
          +      
          +      
          +      
          +      
               
               
               
          @@ -256,7 +255,7 @@
                      
          -

          Building your own decay

          +

          Building your own decay

          Learning Objectives

          diff --git a/second-analysis-steps/filter-in-trees.html b/second-analysis-steps/filter-in-trees.html index ee237927..f42c3443 100644 --- a/second-analysis-steps/filter-in-trees.html +++ b/second-analysis-steps/filter-in-trees.html @@ -1,30 +1,27 @@ + + - + - + Reuse particles from a decay tree — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - - - + + + + + + + + + @@ -258,7 +255,7 @@
          -

          Reuse particles from a decay tree

          +

          Reuse particles from a decay tree

          Learning Objectives

          @@ -276,8 +273,8 @@

          Reuse particles from a decay treethe selection framework lesson and let’s check that the \(` K^+ `\) child of the \(` D^0 `\) does not come from a \(` K^{*}(892)^{0} \to K^{+}\pi^{-} `\). To do that, we have to extract the \(` K^+ `\) from ([D0 -> K+ K-]CC) and combine it with all pions in Phys/StdAllNoPIDsPions/Particles.

          Using FilterInTrees is done in the same way we would use FilterDesktop:

          -
          from Configurables import FilterInTrees
          -from PhysSelPython.Wrappers import Selection, DataOnDemand
          +
          from Configurables import FilterInTrees
          +from PhysSelPython.Wrappers import Selection, DataOnDemand
           
           stream = 'AllStreams'
           line = 'D2hhPromptDst2D2KKLine'
          @@ -291,8 +288,8 @@ 

          Reuse particles from a decay treekaons_from_d0_sel is a container with all the kaons coming from the \(` D^0 `\).

          The final step is easy, very similar to building your own decay:

          -
          from Configurables import CombineParticles
          -from PhysSelPython.Wrappers import Selection, DataOnDemand
          +
          from Configurables import CombineParticles
          +from PhysSelPython.Wrappers import Selection, DataOnDemand
           
           Pions = DataOnDemand('Phys/StdAllNoPIDsPions/Particles')
           kst = CombineParticles('kst_particles',
          @@ -325,7 +322,7 @@ 

          Reuse particles from a decay tree[B-  -> (^D0 -> ^K- ^pi+) ^pi-]cc and we wanted to combine the D0 and pi- with an external pi0 to build [B- -> D0 pi- pi0]cc, we could do

          flatlist = FilterInTrees ("FlatList", Code="('D0' == ABSID) | ('pi-' == ABSID)")
          -from Configurables import CombineParticles
          +from Configurables import CombineParticles
           add_pi0 = CombineParticles("MakeB",
                                      DecayDescriptor = "[B- -> D0 pi- pi0]cc",
                                      ...
          diff --git a/second-analysis-steps/fixing-errors.html b/second-analysis-steps/fixing-errors.html
          index d1b37799..7f62b787 100644
          --- a/second-analysis-steps/fixing-errors.html
          +++ b/second-analysis-steps/fixing-errors.html
          @@ -1,30 +1,27 @@
          +
          +
           
          -
          +
           
          -  
          +  
           
             
             What to do when something fails — LHCb Starterkit Lessons  documentation
          -      
          -      
          -      
          -      
          +      
          +      
          +      
          +      
           
             
          -  
          -  
          -        
          -        
          -        
          -        
          -        
          -        
          -        
          -        
          -        
          -        
          +      
          +      
          +      
          +      
          +      
          +      
          +      
          +      
          +      
               
               
               
          @@ -258,7 +255,7 @@
                      
          -

          What to do when something fails

          +

          What to do when something fails

          Learning Objectives

          @@ -369,7 +366,7 @@

          What to do when something failsMotherCut

          The final trick is to use the StoreExplorerAlg, which shows us the state of the TES in the middle of execution. We can configure it very easily and insert it in the DaVinci sequence to see what is happening.

          -
          from Configurables import StoreExplorerAlg
          +
          from Configurables import StoreExplorerAlg
           
           DaVinci().UserAlgorithms += [StoreExplorerAlg("Before"),
                                        dstar_seq.sequence(),
          diff --git a/second-analysis-steps/ganga-scripting.html b/second-analysis-steps/ganga-scripting.html
          index a1778df2..387f595c 100644
          --- a/second-analysis-steps/ganga-scripting.html
          +++ b/second-analysis-steps/ganga-scripting.html
          @@ -1,28 +1,25 @@
          +
          +
           
          -
          +
           
          -  
          +  
           
             
             Scripting Ganga — LHCb Starterkit Lessons  documentation
          -      
          -      
          -      
          -      
          +      
          +      
          +      
          +      
           
             
          -  
          -  
          -        
          -        
          -        
          -        
          -        
          -        
          -        
          -        
          +      
          +      
          +      
          +      
          +      
          +      
          +      
               
               
               
          @@ -256,7 +253,7 @@
                      
          -

          Scripting Ganga

          +

          Scripting Ganga

          We have already started using Ganga, such as when submitting jobs to the Grid and using datasets from the bookkeeping, for @@ -268,7 +265,7 @@

          Scripting Ganga -

          Defining jobs with scripts

          +

          Defining jobs with scripts

          The ganga executable is similar to the python and ipython executables in a couple of ways. If you just run ganga, you are dropped into a prompt, but you can also supply @@ -346,7 +343,7 @@

          Defining jobs with scriptsargv property on the sys module:

          -
          import sys
          +
          import sys
           print sys.argv
           
          @@ -368,7 +365,7 @@

          Defining jobs with scripts2015 or 2016 and one of Up or Down, for example, but instead we’ll opt to use the excellent argparse module, which comes with Python, to parse the command-line arguments for us.

          -
          import argparse
          +
          import argparse
           
           parser = argparse.ArgumentParser(description="Make my DaVinci job.")
           parser.add_argument('year', type=int, choices=[2015, 2016],
          @@ -444,7 +441,7 @@ 

          Defining jobs with scriptsj.backend appropriately).

          -

          Adding helpers functions

          +

          Adding helpers functions

          We’ve seen above how giving a script to ganga makes the variables defined in those scripts available interactively. But what if you have, or would like to have, some set of your own custom helper @@ -475,7 +472,7 @@

          Adding helpers functions
          def write_lfns(j, filename):
          +
          def write_lfns(j, filename):
               """Write LFNs of all DiracFiles of all completed subjobs to fname."""
               # Treat a job with subjobs the same as a job with no subjobs
               sjobs = j.subjobs
          @@ -495,7 +492,7 @@ 

          Adding helpers functions
          def merge_root_output(j, input_tree_name, merged_filepath):
          +
          def merge_root_output(j, input_tree_name, merged_filepath):
               # Treat a job with subjobs the same as a job with no subjobs
               sjobs = j.subjobs
               if len(sjobs) == 0:
          @@ -523,7 +520,7 @@ 

          Adding helpers functions

          By default, ROOT is not available in a Ganga session:

          -
          Ganga In [1]: import ROOT
          +
          Ganga In [1]: import ROOT
           ERROR    No module named ROOT
           
          diff --git a/second-analysis-steps/hlt-intro.html b/second-analysis-steps/hlt-intro.html index 62dec90e..b3af7644 100644 --- a/second-analysis-steps/hlt-intro.html +++ b/second-analysis-steps/hlt-intro.html @@ -1,28 +1,25 @@ + + - + - + HLT intro — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -256,7 +253,7 @@
          -

          HLT intro

          +

          HLT intro

          Learning Objectives

          @@ -296,15 +293,15 @@

          HLT introReal-Time-Analysis project.

          -

          Add trigger information to your ntuple

          +

          Add trigger information to your ntuple

          In this section and the following, we will explain how to find out which trigger lines selected my signal.

          Copy the following DaVinci script to get an ntuple.

          -
          from Configurables import DaVinci, CondDB
          +
          from Configurables import DaVinci, CondDB
           
           stream = "Semileptonic"
           stripping_line = "B2DMuNuX_D0"
           
          -from PhysConf.Selections import AutomaticData, SelectionSequence, TupleSelection
          +from PhysConf.Selections import AutomaticData, SelectionSequence, TupleSelection
           my_particles_KPi = AutomaticData( "/Event/{}/Phys/{}/Particles".format(stream, stripping_line) )
           
           tupsel_KPi = TupleSelection (
          @@ -338,14 +335,14 @@ 

          Add trigger information to your ntupleDaVinci().EvtMax = 1000 -from PhysConf.Filters import LoKi_Filters +from PhysConf.Filters import LoKi_Filters DaVinci().EventPreFilters = [LoKi_Filters( STRIP_Code="HLT_PASS_RE('Stripping"+stripping_line+"Decision')" ).sequencer('PreFilter')] # file from lb-dirac dirac-dms-lfn-accessURL --Protocol=xroot /lhcb/LHCb/Collision18/SEMILEPTONIC.DST/00075559/0000/00075559_00002816_1.semileptonic.dst -from GaudiConf import IOHelper +from GaudiConf import IOHelper IOHelper().inputFiles([ 'root://eoslhcb.cern.ch//eos/lhcb/grid/prod/lhcb/LHCb/Collision18/SEMILEPTONIC.DST/00075559/0000/00075559_00002816_1.semileptonic.dst' ], clear=True) @@ -381,7 +378,7 @@

          Add trigger information to your ntuple -

          Exploring a TCK: List of trigger lines

          +

          Exploring a TCK: List of trigger lines

          To get a list of all available TCKs one can use TCKsh which is a python shell with predefined functions to explore TCKs, do

          # Use the latest available Run 2 Moore release
          @@ -401,7 +398,7 @@ 

          Exploring a TCK: List of trigger lines -

          Add trigger information to your ntuple, continued

          +

          Add trigger information to your ntuple, continued

          Once you have a list of trigger lines, you can add this to TupleToolTrigger:

          triggerList = [
               #L0 TCKsh getL0Channels(0x11741801)
          @@ -431,7 +428,7 @@ 

          Add trigger information to your ntuple, continuedBe aware you have to append Decision to the name of the trigger line.

          -

          Add TISTOS information to your ntuple

          +

          Add TISTOS information to your ntuple

          For analysis purposes it is important to know if your signal candidate was part of the trigger decision or not as one has different efficiencies for both categories. The following categories exist [ LHCb-PUB-2014-039 ]:

          1. Triggered On Signal (TOS): events for which the presence of the signal is sufficient to generate a positive trigger decision.

          2. @@ -455,7 +452,7 @@

            Add TISTOS information to your ntuple -

            Exploring a TCK: Properties of trigger lines

            +

            Exploring a TCK: Properties of trigger lines

            If you want to get an overview of an Hlt line and its algorithms, you can do

            > dump(<TCK>, lines = <line_names_regex>, file="output.txt")
             
            diff --git a/second-analysis-steps/lb-git.html b/second-analysis-steps/lb-git.html index 7205585b..3fcd8210 100644 --- a/second-analysis-steps/lb-git.html +++ b/second-analysis-steps/lb-git.html @@ -1,28 +1,25 @@ + + - + - + Using git to develop LHCb software — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -256,7 +253,7 @@
            -

            Using git to develop LHCb software

            +

            Using git to develop LHCb software

            Learning Objectives

            diff --git a/second-analysis-steps/managing-files-with-ganga.html b/second-analysis-steps/managing-files-with-ganga.html index 368b894b..018f04ca 100644 --- a/second-analysis-steps/managing-files-with-ganga.html +++ b/second-analysis-steps/managing-files-with-ganga.html @@ -1,28 +1,25 @@ + + - + - + Managing files in Ganga — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -256,7 +253,7 @@
            -

            Managing files in Ganga

            +

            Managing files in Ganga

            Learning Objectives

            diff --git a/second-analysis-steps/rerun-stripping.html b/second-analysis-steps/rerun-stripping.html index afe7ab43..ba71e55d 100644 --- a/second-analysis-steps/rerun-stripping.html +++ b/second-analysis-steps/rerun-stripping.html @@ -1,28 +1,25 @@ + + - + - + Run a different stripping line on simulated data — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -256,7 +253,7 @@
            -

            Run a different stripping line on simulated data

            +

            Run a different stripping line on simulated data

            Learning Objectives

            @@ -285,7 +282,7 @@

            Run a different stripping line on simulated data

            Lots of people downloading the same file at the same time can be very slow. The file in the minimal DaVinci example can be copied using this command:

            -
            $ xrdcp root://eosuser.cern.ch//eos/user/l/lhcbsk/impactkit/00070793_00000001_7.AllStreams.dst .
            +
            $ xrdcp root://eoslhcb.cern.ch//eos/lhcb/wg/dpa/wp7/Run2SK/files-from-grid/00070793_00000001_7.AllStreams.dst .
             
            @@ -294,7 +291,7 @@

            Run a different stripping line on simulated data
          3. Removing the old stripping reports with a node killer

          4. -
            from Configurables import EventNodeKiller
            +
            from Configurables import EventNodeKiller
             event_node_killer = EventNodeKiller('StripKiller')
             event_node_killer.Nodes = ['/Event/AllStreams', '/Event/Strip']
             
            diff --git a/second-analysis-steps/simulation-advanced-dkfiles.html b/second-analysis-steps/simulation-advanced-dkfiles.html index 77592e7e..104e95c0 100644 --- a/second-analysis-steps/simulation-advanced-dkfiles.html +++ b/second-analysis-steps/simulation-advanced-dkfiles.html @@ -1,28 +1,25 @@ + + - + - + Advanced: Modifying the decay — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -267,7 +264,7 @@
            -

            Advanced: Modifying the decay

            +

            Advanced: Modifying the decay

            ##Two-body decays - getting angular momentum right EvtGen has specific models for each two body spin configuration, for example Scalar to Vector+Scalar (SVS), and Vector to lepton+lepton(VLL)

            #
            @@ -305,7 +302,7 @@ 

            Advanced: Modifying the decay -

            3+ multi-body decays

            +

            3+ multi-body decays

            For 3+ bodies the physics models get more complicated. For a fully hadronic final state, typically a Dalitz model will be specified, e.g:

            # D_DALITZ includes resonances contributions (K*(892), K*(1430), K*(1680))
             Decay MyD-
            @@ -327,7 +324,7 @@ 

            3+ multi-body decays -

            Cocktail decays

            +

            Cocktail decays

            Often you will want to simulate more than one decay mode in a sample, e.g:

            Decay MyD_s+
              0.0259 phi      mu+     nu_mu                      PHOTOS  ISGW2;
            @@ -344,11 +341,11 @@ 

            Cocktail decays -

            Final state radiation

            +

            Final state radiation

            After generating the decay, final state radiation is added using PHOTOS. Note that PHOTOS is enabled by default, even though many decfiles explicitly specify it. It needs to be explicitly removed via “noPhotos”

            -

            Changing particle masses / lifetimes/ widths

            +

            Changing particle masses / lifetimes/ widths

            Sometimes you need to change the mass or lifetime of a particle, either because the initial values are wrong, or the particle you actually want doesn’t exist in EvtGen, and you need to adapt an existing particle. This can be done with python code inserted in the header:

            # InsertPythonCode:
            @@ -372,7 +369,7 @@ 

            Changing particle masses / lifetimes/ widths -

            Finding Constants Used in an Existing MC Sample (Masses/Lifetimes/etc)

            +

            Finding Constants Used in an Existing MC Sample (Masses/Lifetimes/etc)

            If you have a pre-existing MC sample and you want to find constants which have been used in its generation (typically the lifetime or masses of generated particles), The method to do this has two steps

            1. Find the database tag (dddb) used in the generation of your sample. Instructions for doing this can be found earlier in this gitbook.

            2. diff --git a/second-analysis-steps/simulation-dkfiles.html b/second-analysis-steps/simulation-dkfiles.html index 1e2e5feb..8dabfdbf 100644 --- a/second-analysis-steps/simulation-dkfiles.html +++ b/second-analysis-steps/simulation-dkfiles.html @@ -1,28 +1,25 @@ + + - + - + Controlling the decay: DecFiles — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -267,7 +264,7 @@
            -

            Controlling the decay: DecFiles

            +

            Controlling the decay: DecFiles

            The DecFile controls the decay itself (i.e. what EvtGen does) as well as provide any event-type specific configuration (e.g. generator cuts). They exist in the Gen/DecFile package which we have already checked out and built in the beginning and are given as .dec files in Gen/DecFiles/dkfiles. For example, the .dec file for event-type 27175000 is Dst_D0pi,KKmumu=DecProdCut.dec:

            diff --git a/second-analysis-steps/simulation-fastsim.html b/second-analysis-steps/simulation-fastsim.html index 02e8592e..e135e89b 100644 --- a/second-analysis-steps/simulation-fastsim.html +++ b/second-analysis-steps/simulation-fastsim.html @@ -1,30 +1,27 @@ + + - + - + Why fast simulation is crucial — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - - - + + + + + + + + + @@ -269,7 +266,7 @@

            -

            Why fast simulation is crucial

            +

            Why fast simulation is crucial

            Our production queues are beyond full and nominal simulation for all requests is unsustainable for the future. Using fast simulation or being smart about how you use simulated samples is unavoidable. Fortunately, some fast simulation options already exist which are ready to be used and a very brief overview is given @@ -278,23 +275,23 @@

            Why fast simulation is crucial -

            Speeding up the detector simulation

            +

            Speeding up the detector simulation

            -

            Reduced detector geometry

            +

            Reduced detector geometry

            It is possible to turn off parts of the detector that might not be necessary for the specific analysis. Most prominently, the RICH detectors propagation of the optical photons can be deactivated which reduces the overall time required to simulate an event by 30%. More aggressively, all but the tracking system can be turned of, netting an increase in speed by about a factor of 10. However, the latter severely impacts the usability of the samples.

            -

            Particle gun

            +

            Particle gun

            Instead of generating a full Pythia event, a single signal particle is spawned whose kinematics can be configured to follow various different distribution (with distributions as in Pythia8 available). The particle is then decayed using EvtGen to the desired final state. The overall increase in speed is about a factor of 50. However, resolutions and efficiencies are usually too good (compared to the full simulation) as the detector occupancy is much lower.

            -

            ReDecay

            +

            ReDecay

            Allows to re-use the underlying event but generates and simulates new signal decays every time. Depending on the studied signal decay multiplicity, speed-ups by a factor between 10 and 20 are typically seen. Additionally, the same precision as in the nominal simulation is reached. However, as the underlying event and the kinematics of the signal particle remain unchanged, correlations between different events are introduced whose @@ -303,9 +300,9 @@

            ReDecay -

            Speeding up the generation

            +

            Speeding up the generation

            -

            Split generator level cuts

            +

            Split generator level cuts

            Imagine you are studying the decay of a signal particle that is relatively rarely produced in Pythia 8 minimum bias events. In addition you apply tight generator level cuts which do not depend on what Pythia did (i.e. Lorentz-invariant quantities such as some invariant mass combination of some children). We have the ability to split the generator cuts: One part is applied as usual, triggering a reset of the generation phase if not passed. The other part is applied immediately after diff --git a/second-analysis-steps/simulation-gencuts.html b/second-analysis-steps/simulation-gencuts.html index 8f31ddcc..5c061c10 100644 --- a/second-analysis-steps/simulation-gencuts.html +++ b/second-analysis-steps/simulation-gencuts.html @@ -1,30 +1,27 @@ + + - + - + Modifying the decay — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - - - + + + + + + + + + @@ -271,9 +268,9 @@

            -

            Modifying the decay

            +

            Modifying the decay

            -

            Adding a decay channel

            +

            Adding a decay channel

            In order to make our decay model more realistic we can add in known resonances. E.g. instead of solely relying on phase-space, we can add in the prominent \(` \Phi\to K^{+}K^{-} `\) resonance to hopefully. In the decfile, we can another line to the decay channels of the \(` D^0 `\):

            -

            Generator level cuts

            +

            Generator level cuts

            Detector simulation is computationally expensive, and event generation is comparatively fast. Cuts at generator level save a huge amount of CPU and disk space (which means you can have more actually useful events) almost for free. At generator level you can only cut on pre-resolution quantities, so normally you want the generator cuts to be 100% efficient for selected events (within epsilon). The default example is to immediately remove events where the decay products are far outside the LHCb acceptance. This is implemented in “DaugthersInLHCb”, aka “DecProdCut” in the NickName. This requires that each “stable charged particle” is in a loose region around the LHCb acceptance (10-400 mrad in Theta). Cut tools need to be implemented in C++ and reside in the package Gen/GenCuts.

            -

            Removing the generator cuts

            +

            Removing the generator cuts

            The absolute efficiencies for generator cuts can be obtained from the respective website or the produced GeneratorLog.xml file, which contains:

            -

            Modifying the cut tool

            +

            Modifying the cut tool

            If you need to modify the cut tool, you generally can pick between multiple options with increasing complexity and time until in production:

            1. Configure an existing cut-tool in Gen/GenCuts if possible.

            2. @@ -339,11 +336,11 @@

              Modifying the cut tool

              LoKi::GenCutTool are a good solution when you need to impose additional requirements beyond those provided by DaughtersInLHCb, for example a minimum for the transverse mometum of a D0. For local tests, this can be easily implemented by overwriting the default cut tool set by 27175000.py:

              -
              -

              What is Gauss?

              +

              What is Gauss?

              Gauss is the LHCb simulation framework which manages the creation of simulated events by interfacing to multiple external applications. Most commonly, an event is created via the following procedure:

              1. The ProductionTool (Pythia, GenXicc, …) generates an event with the required signal particle. Either by generating minimum bias events until a matching particle is found or by ensuring one is produced in every event. The resulting event is comprised of either stable particles or unstable particles which are known to either EvtGen or Geant4 and can be decayed.

              2. @@ -289,7 +286,7 @@

                What is Gauss? -

                Choosing your Gauss Version

                +

                Choosing your Gauss Version

                Each release of Gauss v49 represents a different release of Sim09. You may want to run an older version of Gauss to verify something in a pre-existing MC dataset or for any number of other reasons. Here is a table matching each Gauss v49 release to each Sim09 version:

                - - - - - - - - - - - + + + + + + + + + @@ -270,7 +267,7 @@

            -

            Which option files to use and how to run Gauss

            +

            Which option files to use and how to run Gauss

            Imagine you need to know the option files and software versions used for a simulated sample you have found in the bookkeeping, e.g.

            /MC/2016/Beam6500GeV-2016-MagDown-Nu1.6-25ns-Pythia8/Sim09c/Trig0x6138160F/Reco16/Turbo03/Stripping28r1Filtered/27163003/D2HMUNUSTREAM.STRIP.DST
             
            @@ -289,15 +286,15 @@

            Which option files to use and how to run Gauss -

            Running Gauss and create a generator-only sample

            +

            Running Gauss and create a generator-only sample

            The production system handles the necessary settings for initial event- and runnumber and the used database tags. In a private production, you need to set these yourself in an additional options file, containing, for example:

            -
            from Gauss.Configuration import GenInit
            +
            from Gauss.Configuration import GenInit
             
             GaussGen = GenInit("GaussGen")
             GaussGen.FirstEventNumber = 1
             GaussGen.RunNumber = 1082
             
            -from Configurables import LHCbApp
            +from Configurables import LHCbApp
             LHCbApp().DDDBtag = 'dddb-20170721-3'
             LHCbApp().CondDBtag = 'sim-20170721-2-vc-md100'
             LHCbApp().EvtMax = 5
            @@ -338,7 +335,7 @@ 

            Running Gauss and create a generator-only sample

            You can source the various options files from your 'Gauss-Job.py' by adding at its top:

            -

            -

            Make an nTuple

            +

            Make an nTuple

            The .xgen file can be processed into something more usable (copied together from here). -A larger input file containing 50,000 generated events for event-type can be found on EOS: root://eosuser.cern.ch//eos/user/l/lhcbsk/sim-lesson-2019/Gauss-27175000-50000ev-20190515.xgen.

            +A larger input file containing 50,000 generated events for event-type can be found on EOS: root://eoslhcb.cern.ch//eos/lhcb/wg/dpa/wp7/Run2SK/simulation/Gauss-27175000-50000ev-20241216.xgen.

            """Configure the variables below with:
             decay: Decay you want to inspect, using 'newer' LoKi decay descriptor syntax,
             decay_heads: Particles you'd like to see the decay tree of,
            @@ -372,11 +369,11 @@ 

            Make an nTuple'P': 'MCP', } -from Configurables import ( +from Configurables import ( DaVinci, MCDecayTreeTuple ) -from DecayTreeTuple.Configuration import * +from DecayTreeTuple.Configuration import * # For a quick and dirty check, you don't need to edit anything below here. ########################################################################## @@ -391,7 +388,7 @@

            Make an nTuple).Variables = mc_basic_loki_vars # Name of the .xgen file produced by Gauss -from GaudiConf import IOHelper +from GaudiConf import IOHelper # Use the local input data IOHelper().inputFiles([ datafile @@ -405,17 +402,17 @@

            Make an nTupleDaVinci().InputType = 'DIGI' DaVinci().UserAlgorithms = [mctuple] -from Gaudi.Configuration import appendPostConfigAction -def doIt(): +from Gaudi.Configuration import appendPostConfigAction +def doIt(): """ specific post-config action for (x)GEN-files """ extension = "xgen" ext = extension.upper() - from Configurables import DataOnDemandSvc + from Configurables import DataOnDemandSvc dod = DataOnDemandSvc () - from copy import deepcopy + from copy import deepcopy algs = deepcopy ( dod.AlgMap ) bad = set() for key in algs : @@ -433,7 +430,7 @@

            Make an nTupledod.AlgMap = algs - from Configurables import EventClockSvc, CondDB + from Configurables import EventClockSvc, CondDB EventClockSvc ( EventTimeDecoder = "FakeEventTime" ) CondDB ( IgnoreHeartBeat = True ) diff --git a/second-analysis-steps/simulation.html b/second-analysis-steps/simulation.html index 72c64343..280202d1 100644 --- a/second-analysis-steps/simulation.html +++ b/second-analysis-steps/simulation.html @@ -1,28 +1,27 @@ + + - + - + The simulation framework — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + + + @@ -256,7 +255,7 @@
            -

            The simulation framework

            +

            The simulation framework

            Requirements

            diff --git a/second-analysis-steps/switch-mass-hypo.html b/second-analysis-steps/switch-mass-hypo.html index 83f23657..7eb061eb 100644 --- a/second-analysis-steps/switch-mass-hypo.html +++ b/second-analysis-steps/switch-mass-hypo.html @@ -1,28 +1,25 @@ + + - + - + Replace a mass hypothesis — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -256,7 +253,7 @@
            -

            Replace a mass hypothesis

            +

            Replace a mass hypothesis

            Learning Objectives

            @@ -283,7 +280,7 @@

            Replace a mass hypothesisSubstitutePID:

            # configure an algorithm to substitute the K+ (resp. the K-)
             # in the D0 (resp the D~0) decay by a pion 
            -from Configurables import SubstitutePID
            +from Configurables import SubstitutePID
             subs = SubstitutePID(
                 'MakeD02Kpi',
                 Code = "DECTREE('[D*(2010)+ -> (D0 -> K- K+) pi+]CC')",
            @@ -302,9 +299,9 @@ 

            Replace a mass hypothesisSubstitutePID does not automatically handle complex conjugation via the CC operator. Therefore you have to specify all substitutions explicitely.

            Next we have to handle the input and output of this algorithm. This is accomplished using particle selections. The input to our substitution algorithm will be the candidates produced by the stripping. In order to make them look like a selection we can use the DataOnDemand service:

            -
            from PhysSelPython.Wrappers import Selection
            -from PhysSelPython.Wrappers import SelectionSequence
            -from PhysSelPython.Wrappers import DataOnDemand
            +
            from PhysSelPython.Wrappers import Selection
            +from PhysSelPython.Wrappers import SelectionSequence
            +from PhysSelPython.Wrappers import DataOnDemand
             
             # Stream and stripping line we want to use
             stream = 'AllStreams'
            @@ -329,7 +326,7 @@ 

            Replace a mass hypothesisDecayTreeTuple, which now is looking for the candidates, which have the redefined D0 decay:

            -
            from Configurables import DecayTreeTuple
            +
            from Configurables import DecayTreeTuple
             
             # Create an ntuple to capture D*+ decays from the new selection
             dtt = DecayTreeTuple('TupleDstToD0pi_D0ToKpi')
            @@ -350,7 +347,7 @@ 

            Replace a mass hypothesisSelectionSequence and the DecayTreeTuple to the DaVinci application. Since we are adding more than one algorithm we need a GaudiSequencer that takes care of calling everything in the right order:

            -
            from Configurables import GaudiSequencer, DaVinci
            +
            from Configurables import GaudiSequencer, DaVinci
             
             # add our new selection and the tuple into the sequencer
             seq = GaudiSequencer('MyTupleSeq')
            diff --git a/second-analysis-steps/tistos-diy.html b/second-analysis-steps/tistos-diy.html
            index b75ec97a..f932377c 100644
            --- a/second-analysis-steps/tistos-diy.html
            +++ b/second-analysis-steps/tistos-diy.html
            @@ -1,30 +1,27 @@
            +
            +
             
            -
            +
             
            -  
            +  
             
               
               TisTos DIY — LHCb Starterkit Lessons  documentation
            -      
            -      
            -      
            -      
            +      
            +      
            +      
            +      
             
               
            -  
            -  
            -        
            -        
            -        
            -        
            -        
            -        
            -        
            -        
            -        
            -        
            +      
            +      
            +      
            +      
            +      
            +      
            +      
            +      
            +      
                 
                 
                 
            @@ -258,7 +255,7 @@
                        
            -

            TisTos DIY

            +

            TisTos DIY

            Learning Objectives

            @@ -409,7 +406,7 @@

            TisTos DIY
            from Configurables import ToolSvc, TriggerTisTos
            +
            from Configurables import ToolSvc, TriggerTisTos
             ToolSvc().addTool(TriggerTisTos, "Hlt1TriggerTisTos")
             ToolSvc().Hlt1TriggerTisTos.HltDecReportsLocation = 'Hlt1/DecReports'
             ToolSvc().Hlt1TriggerTisTos.HltSelReportsLocation = 'Hlt1/SelReports'
            diff --git a/self-guided-lessons/README.html b/self-guided-lessons/README.html
            index 8f7583ba..4513a05c 100644
            --- a/self-guided-lessons/README.html
            +++ b/self-guided-lessons/README.html
            @@ -1,28 +1,25 @@
            +
            +
             
            -
            +
             
            -  
            +  
             
               
               Self guided lessons — LHCb Starterkit Lessons  documentation
            -      
            -      
            -      
            -      
            +      
            +      
            +      
            +      
             
               
            -  
            -  
            -        
            -        
            -        
            -        
            -        
            -        
            -        
            -        
            +      
            +      
            +      
            +      
            +      
            +      
            +      
                 
                 
                 
            @@ -255,7 +252,7 @@
                        
            -

            Self guided lessons

            +

            Self guided lessons

            These tutorials have been written by Impactkit participants to give guidelines on how to perform a variety of generic tasks.

            If you have any problems or questions on these tutorials, you can open an issue on the GitHub repository where these tutorials are developed.

            diff --git a/self-guided-lessons/htcondor-first-job.html b/self-guided-lessons/htcondor-first-job.html index c671a9dd..2272ae63 100644 --- a/self-guided-lessons/htcondor-first-job.html +++ b/self-guided-lessons/htcondor-first-job.html @@ -1,28 +1,25 @@ + + - + - + Submitting a simple job — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -257,7 +254,7 @@
            -

            Submitting a simple job

            +

            Submitting a simple job

            Learning Objectives

            @@ -300,7 +297,7 @@

            Submitting a simple job

            This tells you that the job has been submitted, and gives you the cluster ID (essentially, this is a unique reference number that HTCondor assigns to the job(s) you submitted). If you look in the current directory, you should see that it has automatically created the three files specified in the submit file earlier (output.out, error.err, and log.log). As the job progresses, it will add to these files as appropriate.

            -

            Tracking your jobs

            +

            Tracking your jobs

            While we’re waiting for the job to complete, we can track its progress from a terminal. There are multiple ways to do this, but here are some of the most useful:

            • condor_q: shows you the current queue, and the status of your job.

            • diff --git a/self-guided-lessons/htcondor-more-options.html b/self-guided-lessons/htcondor-more-options.html index ed60eae5..8646ece4 100644 --- a/self-guided-lessons/htcondor-more-options.html +++ b/self-guided-lessons/htcondor-more-options.html @@ -1,28 +1,25 @@ + + - + - + More submit file options — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -257,7 +254,7 @@
              -

              More submit file options

              +

              More submit file options

              Learning Objectives

              @@ -272,7 +269,7 @@

              More submit file optionsin the documentation for condor_submit.

              -

              Input files

              +

              Input files

              Often, you’ll want your job to process data that’s stored in another file. Create a file input.txt and add some lines of text to it. To test this, you can use the following bash script, placed in exec.sh:

              #!/bin/bash
               echo "# Contents of file 'input.txt': #"
              @@ -319,7 +316,7 @@ 

              Input files -

              Output files

              +

              Output files

              HTCondor uses the name ‘output file’ to refer to different things in different contexts, so it’s important to make it clear which is meant. One of these is the one that’s been used so far, which refers to the one specified in the submit file (using the output option) which contains the STDOUT (terminal output) of your executable. The other use is for any new files that your executable may create as it runs. This part will cover the second of these.

              Let’s modify our python script so that, instead of displaying the file contents in the terminal, it puts all the text into upper-case and saves it to a new file. This new script will look something like:

              f_in = open('input.txt', 'r')
              @@ -354,7 +351,7 @@ 

              Output files -

              Arguments

              +

              Arguments

              If your executable takes command-line arguments, you need to specify them in the submit file using the arguments option. Anything you put here will be passed as an argument to the executable.

              To test this out, let’s modify our python script to add an argument that will let us choose whether to change the text to upper or lower-case. For convenience, you can use the argparse library:

              -

              Resources and Requirements

              +

              Resources and Requirements

              You can specify running conditions of your jobs in the submit file. The system for doing this uses what are known as ClassAd attributes, which are essentially properties of some part of the system (machines, jobs, the scheduler, etc.). You can use these to tell HTCondor about the requirements and preferences you have for your jobs. These can be specified in the submit file using the requirements and rank options respectively.

              A complete list of ClassAd attributes can be found in the documentation, but in this part a few particularly useful ones are highlighted. Note that, by using these, you are restricting how your job can run, which means that it will likely take longer to run. You should use these with care, and speak with the Batch support team for advice if you’re not sure.

                @@ -412,7 +409,7 @@

                Resources and Requirements -

                Notifications

                +

                Notifications

                If you want, you can tell HTCondor to send you emails updating you on the progress of your job. In your submit file, add the line:

                notify_user = <your_email_address>
                 
                diff --git a/self-guided-lessons/htcondor-queue.html b/self-guided-lessons/htcondor-queue.html index b23a1e04..79c36dd3 100644 --- a/self-guided-lessons/htcondor-queue.html +++ b/self-guided-lessons/htcondor-queue.html @@ -1,28 +1,25 @@ + + - + - + Using the queue command — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -257,7 +254,7 @@
                -

                Using the queue command

                +

                Using the queue command

                Learning Objectives

                @@ -354,7 +351,7 @@

                Using the queue command

                -

                More on variables

                +

                More on variables

                As you’ve seen above, the variables that HTCondor automatically defines provide a lot of potential for the automisation of large numbers of jobs. To expand on this, you are also able to define your own variables within your submit file using very similar syntax. Among other things, this is particularly useful for avoiding repetition - in the example above, the input and output file names had to be written in two places. Equivalent functionality can be achieved by using:

                INPUTFN = data.txt
                 OUTPUTFN = result_$(ProcID).txt
                @@ -367,7 +364,7 @@ 

                More on variables -

                Other ways to queue

                +

                Other ways to queue

                The above syntax for queuing multiple jobs is very simple and convenient for jobs with sequential enumeration starting from zero, but this isn’t always the case. Fortunately, the queue command is extremely flexible and has many alternative choices of syntax. This part of the lesson showcases some of these options and how to use them. For more information and other examples, you can visit the documentation for the queue command.

                -

                Mixing options and variables

                +

                Mixing options and variables

                It may have become apparent by now that options and variables behave in a very similar way within a submit file - you provide parameters to an option (e.g. transfer_input_files = input.dat) using the same syntax as you use to provide a value to a variable (e.g. MyCustomVar = 25). You can think of options as being specific variables that HTCondor looks at to determine how to create and schedule your jobs.

                This observation allows for some additional flexibility when using the queue command - when specifying a variable name, you can choose to use the name of an already-defined submit file option for convenience. For example, you could use queue arguments in (-a 200,-a 300,-a 400) to automatically create 3 jobs with different arguments.

                diff --git a/self-guided-lessons/htcondor.html b/self-guided-lessons/htcondor.html index e527cdde..8619af18 100644 --- a/self-guided-lessons/htcondor.html +++ b/self-guided-lessons/htcondor.html @@ -1,28 +1,25 @@ + + - + - + Batch submission using HTCondor — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -256,7 +253,7 @@
                -

                Batch submission using HTCondor

                +

                Batch submission using HTCondor

                LHCb fair-usage of Grid resources

                @@ -313,13 +310,13 @@

                Batch submission using HTCondor -

                System architecture

                +

                System architecture

                When you connect to lxplus, you have read/write access to both the AFS and EOS filesystems, as well as read-only access to CVMFS for accessing experiment software. Worker notes in the batch system have the same permissions, which is what allows them to read input files from, and write output files to, your user areas.

                Each worker node has its own remote storage space, which is limited to 20GB. When a job starts, the executable is copied to this storage area, usually along with any input data files required. Any files created by the script should be created there as well, where they can later be transferred back to your user area. When a job completes, the worker node cleans out its storage area, so it’s important to tell HTCondor to transfer any output files you want to keep.

                See here for a more detailed explanation (and a helpful diagram).

                -

                Other useful resources

                +

                Other useful resources

                While putting this lesson together, the following guides, tutorials, and pages proved highly useful, and may be useful to you as well if you need more information:

                • HTCondor v8.8.2 Manual - University of Wisconsin-Madison

                • diff --git a/self-guided-lessons/local-grid-proxy.html b/self-guided-lessons/local-grid-proxy.html index fb55b4dc..09ba1a55 100644 --- a/self-guided-lessons/local-grid-proxy.html +++ b/self-guided-lessons/local-grid-proxy.html @@ -1,28 +1,25 @@ + + - + - + Creating a grid proxy without LbScripts — LHCb Starterkit Lessons documentation - - - - + + + + - - - - - - - - - - + + + + + + + @@ -256,7 +253,7 @@
                  -

                  Creating a grid proxy without LbScripts

                  +

                  Creating a grid proxy without LbScripts

                  On the grid VOMS (Virtual Organization Membership Service) is used to provide authentication when accessing grid resources. This works by using your certificate to create a local proxy credential which can then be used by applications for a limited time.

                  LbScripts provides a useful command lhcb-proxy-init which is used to create a proxy. @@ -264,35 +261,35 @@

                  Creating a grid proxy without LbScripts -

                  Installation

                  +

                  Installation

                  The VOMS client can be installed in the following ways, if your operating system isn’t listed see here (and consider making a pull request to update this guide).

                  -

                  macOS with homebrew

                  +

                  macOS with homebrew

                  brew cask install java
                   brew install voms
                   
                  -

                  Ubuntu

                  +

                  Ubuntu

                  sudo apt-get install voms-clients
                   
                  -

                  CentOS

                  +

                  CentOS

                  sudo yum install epel-release
                   sudo yum install voms-clients
                   
                  -

                  Arch Linux

                  +

                  Arch Linux

                  Install voms from the AUR.

                  -

                  Getting the required files and certificates

                  +

                  Getting the required files and certificates

                  In order to create a proxy you must have a copy of your personal grid certificate, assuming this is already set up on lxplus this can be copied using:

                  scp -r lxplus.cern.ch:.globus/ ~/.globus
                   
                  @@ -306,7 +303,7 @@

                  Getting the required files and certificates -

                  Creating a proxy

                  +

                  Creating a proxy

                  Once the voms have been installed and the files have been copied a grid certificate with a 168 hour (1 week) validity can be created using:

                  export X509_CERT_DIR="$HOME/grid-security/certificates"
                   export X509_VOMS_DIR="$HOME/grid-security/vomsdir"
                  @@ -322,7 +319,7 @@ 

                  Creating a proxy -

                  Managing the proxy

                  +

                  Managing the proxy

                  The status of the current proxy can be checked using voms-proxy-info.

                  The current proxy can be deleted using voms-proxy-destroy.