diff --git a/docs/asset-manifest.json b/docs/asset-manifest.json index 52b9398..7bf7b93 100644 --- a/docs/asset-manifest.json +++ b/docs/asset-manifest.json @@ -1,8 +1,8 @@ { "files": { - "main.css": "/static/css/main.e8b3c1bc.css", - "main.js": "/static/js/main.1d798e8c.js", - "static/js/787.44e022fc.chunk.js": "/static/js/787.44e022fc.chunk.js", + "main.css": "/static/css/main.29c64a62.css", + "main.js": "/static/js/main.ad262d4b.js", + "static/js/453.f9af8ee5.chunk.js": "/static/js/453.f9af8ee5.chunk.js", "static/media/fa-solid-900.svg": "/static/media/fa-solid-900.7a8b4f130182d19a2d7c.svg", "static/media/fa-brands-400.svg": "/static/media/fa-brands-400.2f517e09eb2ca6650ff5.svg", "static/media/fa-solid-900.eot": "/static/media/fa-solid-900.9bbb245e67a133f6e486.eot", @@ -19,12 +19,12 @@ "static/media/fa-regular-400.woff": "/static/media/fa-regular-400.bb58e57c48a3e911f15f.woff", "static/media/fa-regular-400.woff2": "/static/media/fa-regular-400.7a3337626410ca2f4071.woff2", "index.html": "/index.html", - "main.e8b3c1bc.css.map": "/static/css/main.e8b3c1bc.css.map", - "main.1d798e8c.js.map": "/static/js/main.1d798e8c.js.map", - "787.44e022fc.chunk.js.map": "/static/js/787.44e022fc.chunk.js.map" + "main.29c64a62.css.map": "/static/css/main.29c64a62.css.map", + "main.ad262d4b.js.map": "/static/js/main.ad262d4b.js.map", + "453.f9af8ee5.chunk.js.map": "/static/js/453.f9af8ee5.chunk.js.map" }, "entrypoints": [ - "static/css/main.e8b3c1bc.css", - "static/js/main.1d798e8c.js" + "static/css/main.29c64a62.css", + "static/js/main.ad262d4b.js" ] } \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 9318e14..ddae6f8 100644 --- a/docs/index.html +++ b/docs/index.html @@ -11,8 +11,8 @@ AllProxy - - + + diff --git a/docs/static/css/main.29c64a62.css b/docs/static/css/main.29c64a62.css new file mode 100644 index 0000000..a481b1c --- /dev/null +++ b/docs/static/css/main.29c64a62.css @@ -0,0 +1,13 @@ +body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}body{overflow:hidden}@media screen and (prefers-color-scheme:dark){.header__filter-input-queries,body{background-color:#222!important;color:#e8e6e3!important}.settings-modal__proxy-row{color:#e8e6e3!important}.MuiPaper-root,.MuiTabs-scroller,pre{background-color:#333!important;color:#e8e6e3!important}.transparent>.MuiPaper-root{background-color:initial!important}.highlight .MuiPaper-root{color:#000!important}.btn-default,.form-control,select,textarea{background-color:#444!important;border-color:#444!important;color:#e8e6e3!important}.MuiTab-textColorPrimary.Mui-selected,.PrivateTabIndicator-colorPrimary-2{color:#007bff!important}table,td,tr{border-color:#000!important}.request__msg-even{background-color:#333;width:100%}.request__msg-highlight{color:#4ca728!important}}@media screen and (prefers-color-scheme:light){.MuiPaper-root,.header__filter-input-queries,body{background-color:#f5f5f5!important;color:#000!important}.transparent>.MuiPaper-root{background-color:initial!important}table,td,tr{border-color:#fff!important}td{text-align:center;vertical-align:middle}td input{height:48px!important}pre{background-color:#f9f9f9!important;border:thin solid #e7e2e2!important;color:#000}.MuiCheckbox-colorSecondary{color:blue}.request__msg-even{background-color:#e5e5e5;width:100%}.request__msg-highlight{color:#cb4b16!important}}.link-opacity:hover{opacity:.5}.header__filter-input,.header__filter-input input{background-color:#444;color:#e8e6e3}.react-tagsinput,.react-tagsinput input{background-color:#444!important;color:#e8e6e3!important}.react-tagsinput{border:none!important;height:42px!important}.react-tagsinput-tag{background-color:#ff6464!important;border:#ff6464!important;color:#000!important;font-size:large!important;font-weight:700}button:disabled{background-color:#ddd}pre{border-radius:.5rem!important;padding-left:1.5rem!important}td input{width:100%}.filter-bar__menu-item .filter-bar__menu-item-links{display:none}.filter-bar__menu-item:hover .filter-bar__menu-item-links{display:inline-block;margin-left:.5rem}.btn-group-xs>.btn,.btn-xs{border-radius:.2rem!important;font-size:.875rem!important;line-height:.5!important;padding:.25rem!important}.MuiAccordion-root{margin:0 0 0 -1rem!important}.MuiAccordionSummary-root.Mui-expanded{min-height:0!important}.MuiAccordionSummary-content{margin-bottom:0!important;margin-top:0!important}.MuiAccordionDetails-root{padding:0 8px!important}.MuiSelect-icon{color:#fff!important}.spinner{color:#007bff;font-size:2rem!important}.modal-dialog{display:table;overflow-x:auto;overflow-y:auto}.modal-footer{padding-bottom:0!important;padding-top:0!important}.keep-all{word-break:keep-all}.center{align-self:center;justify-self:center;position:relative;text-align:center;top:50%;transform:translateY(-50%);vertical-align:middle}.align-center{align-items:center;display:flex;justify-content:center}.disabled{opacity:.5}.error{color:red}.no-response{color:hsla(0,0%,50%,.801)}.success{color:green!important}.updating{color:rgba(255,187,0,.884)}.visited-color{color:#007bff}@media screen and (prefers-color-scheme:light){.visited-color{color:#1a0dab}}.icon-color0{color:#007bff}.icon-color1{color:green}.icon-color2{color:purple}.icon-color3{color:brown}.icon-color4{color:darkpink}.icon-color-terminal{color:#6c757d}.icon-color5{color:#6a5acd}.icon-color6{color:#ff8c00}.icon-color-chrome,.icon-color-safari{color:#4dce5b}.icon-color-opera{color:#f76464}.icon-color-firefox{color:#ff4500}.icon-color-edge,.icon-color-explore,.icon-color-safari{color:#007bff}.request__msg-icon{font-size:1rem;height:26px;line-height:26px!important;margin:0 0 0 .25rem;text-align:center}.request__msg-resend-btn{display:none;margin-left:.5rem}.request__msg-resend-btn.active{display:inline-block}.request__msg-caret{font-size:1.5rem;margin:0 .1rem 0 .5rem}.request__msg-request-line{display:flex}.request__msg-method,.request__msg-status{margin-right:1rem;overflow:hidden;text-overflow:ellipsis}.request__msg-endpoint{max-width:64ch}.request__msg-client,.request__msg-endpoint{margin-right:1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.request__msg-client{width:14ch}.request__msg-unhighlight{color:grey!important}.header__container{align-items:center;background-color:#333;height:3rem;justify-content:space-between;position:fixed;top:0;z-index:100}.header__container,.side-bar-tabs{display:flex;width:100%}.side-bar{background-color:#333;color:#f5f5f5;height:calc(100vh - 3rem);margin-top:0;padding-top:3rem;white-space:nowrap;width:13rem}.side-bar-scroll{height:calc(100vh - 366px);overflow-y:auto}.side-bar-item{display:flex;padding:.25rem;width:100%}.side-bar-count{font-size:x-small}.side-bar-checkbox-container{color:#f5f5f5!important;display:flex;width:100%}.side-bar-icon{font-size:x-large}.side-bar-checkbox{margin-right:.5rem!important;padding:0!important}.side-bar-small-count{font-size:x-small;padding-left:.25rem}.side-bar-select,.side-bar-select.MuiSelect-icon{color:#f5f5f5!important}@media screen and (prefers-color-scheme:light){.side-bar-checkbox.MuiCheckbox-root{color:#f5f5f5!important}.side-bar-domain-checkbox.MuiCheckbox-root{color:#000!important}}@media screen and (prefers-color-scheme:dark){.side-bar-domain-checkbox.MuiCheckbox-root{color:#f5f5f5!important}}.side-bar-domain-checkbox.MuiCheckbox-colorSecondary.Mui-checked{color:#f50057!important}.side-bar.MuiMenuItem-root{padding-bottom:0!important;padding-top:0!important}.side-bar-divider{background-color:#007bff;height:.1rem;margin-left:.25rem;margin-right:.25rem}.footer__container{background-color:#333;bottom:0;height:3rem;position:fixed;width:100%;z-index:99}.footer__container,.footer__exclude-filter{align-items:center;display:flex}.footer__exclude-label{color:#ff6464;margin-right:.5rem}.footer__item{color:#f5f5f5;line-height:2ch;margin:0 0 0 1rem}.header__left-container{align-items:center;display:flex}.header__icon{cursor:pointer;margin:0 0 0 .5rem}.header__title{color:#f5f5f5;cursor:pointer;float:left;font-size:x-large;font-weight:100;line-height:24px;margin:0 .5rem 0 1rem;vertical-align:middle}.header__auto-scroll,.header__filter-history,.header__more-menu,.header__save-restore,.header__show-errors,.header__sort-req-res,.header__stop,.header__trash{color:#f5f5f5;cursor:pointer;float:left;font-size:large!important;margin:0 0 0 1rem;min-width:1ch;text-align:center}.header__sort-req-res{margin-right:.5rem;width:2ch}.header__show-errors.active{color:red}.header__export,.header__folder-minus,.header__import,.header__resend{cursor:pointer}.header__filter{float:left}.header__filter-input,.react-tagsinput-input{margin:0 0 0 1rem}.footer-input{width:200px!important}.react-tagsinput{height:42px;overflow-y:auto!important;width:calc(100vw - 300px)!important}.header__filter-input,.header__filter-input-queries{width:calc(100vw - 732px)!important}.header__filter-input.active{background-color:#ffffe0}.header__filter-input-queries{border-bottom:thin solid hsla(0,0%,50%,.801);border-left:thin solid hsla(0,0%,50%,.801);border-right:thin solid hsla(0,0%,50%,.801);margin:0 0 0 1rem;position:absolute}.header__filter-case,.header__filter-logical,.header__filter-regex{color:#f5f5f5;cursor:pointer;margin-left:.5rem;text-align:center;width:2rem}.header__filter-case.active,.header__filter-logical.active,.header__filter-regex.active{border:2px solid red;border-radius:.5rem}.breakpoint__icon{cursor:pointer;margin-left:.5rem;text-align:center;width:2ch}.breakpoint__icon.active{background-color:#000;border-radius:.5rem;color:#f5f5f5}@media screen and (prefers-color-scheme:dark){.breakpoint__icon.active{background-color:#f5f5f5;border-radius:.5rem;color:#000}}.header__settings,.header__status{font-size:large!important;margin:0}.header__status{float:left}.header__settings{color:#f5f5f5;margin-right:.5rem}.header__status{color:red}.export__input-file-name{margin:0 1rem 1rem;width:600px!important}.MuiTab-root{flex:1 1;min-width:0!important;width:min-content}.maintab__container{margin-bottom:2rem;margin-top:3rem}.maintab__container>.MuiTabs-root{background-color:#1a1818!important;height:3rem;position:fixed;top:3rem;width:calc(100vw - 13rem);z-index:99}@media screen and (prefers-color-scheme:light){.maintab__container>.MuiTabs-root{background-color:#e4e3e3!important}}.maintab__container .MuiTabPanel-root{padding:0!important}.maintab__tab{display:flex;height:20px;overflow:auto;width:100%}.maintab__tab-name{font-size:smaller;overflow-x:hidden;width:100%}.maintab__close,.maintab__folder-plus{cursor:pointer;font-size:smaller;margin-top:4px}.maintab__folder-plus{font-size:large}@media screen and (prefers-color-scheme:dark){.maintab__folder-plus{color:#bbb}}.request-response__container{display:flex;padding-top:3rem;width:calc(100vw - 8rem)}.request__container{border-right:solid grey;display:flex;flex-direction:column;overflow:auto;padding-right:.5rem}.request__json-annotations{margin:.5rem 0;white-space:wrap}.request__json-annotations.nowrap{white-space:nowrap}.request__container.unselected{resize:none;width:100%}.request__msg-container{margin:0;width:100%}.request__msg-twisty:hover{color:#cb4b16}.request__msg-header{display:flex;flex-wrap:nowrap;position:relative}.request__msg-time-number{display:flex}.request__msg-time-number.highlight{background-color:#ff0;color:#000!important}.request__msg-time-bar-container{align-items:center;display:flex;height:26px;justify-content:right;margin-left:.5rem;min-width:6.5rem}.request__msg-time-bar{background-color:#007bff;height:10px;opacity:.5}.request__msg-time-bar.no-response{background-color:crimson}.request__msg-time-ms{line-height:24px;text-align:center;white-space:nowrap}.request__msg{cursor:pointer;display:flex}.request__msg.nowrap{white-space:nowrap}.request__endpoint{color:green}.request__body{font-family:Courier New,Courier,monospace;margin-left:.5rem;white-space:pre;width:auto}.response__container{margin-top:.5rem;overflow-wrap:anywhere;overflow-x:auto;overflow-y:auto;padding-left:1rem;padding-right:1rem}.response__body{font-family:Courier New,Courier,monospace}.request__headers,.request__query-params,.response__body,.response__headers{display:none}.request__headers.active,.request__query-params.active,.response__body.active,.response__headers.active{display:block;margin:0 1rem .5rem 0}.request__headers-twisty,.request__query-params-twisty,.response__body-twisty,.response__headers-twisty{border-bottom:.5rem solid #0000;border-left:.5rem solid;border-top:.5rem solid #0000;cursor:pointer;height:0;margin:.5rem .1rem 0 0!important;width:0}.request__headers-twisty.active,.request__query-params-twisty.active,.response__body-twisty.active,.response__headers-twisty.active{border-left:.5rem solid #0000;border-right:.5rem solid #0000;border-top:.5rem solid;height:0;width:0}.http-message__url,.twisty-label{cursor:pointer}.modal-full-screen-scroll{height:calc(100vh - 200px);overflow-y:auto}.resend-modal__field{height:30px;margin-bottom:1rem;margin-right:.5rem;width:100px}.resend-modal__header-select{height:30px;width:150px}.resend-modal__header-input{height:30px;width:100%}.resend-modal__host{width:200px}.resend-modal__body-container,.resend-modal__url-container{width:100%}.resend-modal__body-container{height:400px}.resend-modal__body{height:90vh}.resend-modal__body,.resend-modal__url{display:table-row}.modal-window{align-items:center;display:flex;justify-content:center}.breakpoint-modal,.json-log-modal,.metrics-modal,.no-capture-modal,.reachable-modal,.settings-modal{background-color:#333;padding:1rem;width:90vw}@media screen and (prefers-color-scheme:light){.breakpoint-modal,.json-log-modal,.metrics-modal,.no-capture-modal,.reachable-modal,.settings-modal{background-color:#fff}}.breakpoint-modal{max-width:90vw}.no-capture-modal{max-width:600px}.reachable-modal{max-width:700px}.metrics-modal{max-width:90vw}.settings-modal__proxy-row.nocapture,.settings-modal__proxy-row.nocapture input{background-color:#d8d6d64d}.settings-modal__scroll-container{height:calc(100vh - 400px);overflow-y:auto}.json-fields-modal__scroll-container{height:calc(100vh - 300px);overflow-y:auto}.metrics-modal__scroll-container,.no-capture-modal__scroll-container,.reachable-modal__scroll-container{height:80vh;overflow-y:auto}.modal-content{width:99vw}.settings-modal__table{white-space:nowrap}.resend-modal__error-message{color:red;float:left}.settings-modal__proxy-protocol-container{white-space:nowrap}.settings-modal__select-protocol{padding-left:0!important;width:100px!important}.settings-modal__icon{display:inline-block;margin-top:.725rem}.settings-modal__proxy-host .settings-modal__proxy-port,.settings-modal__recording-container{align-items:center;display:flex;justify-content:center}.settings-modal__proxy-port{width:8ch}.settings__recording{color:#007bff;cursor:pointer}.settings-modal__label-max-messages{padding-right:1rem}.settings-modal__input-max-messages{width:12ch!important}.primary-text-color{color:#007bff} +/*! + * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-feature-settings:normal;display:inline-block;font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;line-height:inherit;position:absolute;text-align:center;width:2em}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s linear infinite}.fa-pulse{animation:fa-spin 1s steps(8) infinite}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hive:before{content:"\e07f"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-innosoft:before{content:"\e080"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-perbyte:before{content:"\e083"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-uncharted:before{content:"\e084"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-watchman-monitoring:before{content:"\e087"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only-focusable:active,.sr-only-focusable:focus{margin:0}@font-face{font-display:block;font-family:Font Awesome\ 5 Brands;font-style:normal;font-weight:400;src:url(/static/media/fa-brands-400.23f19bb08961f37aaf69.eot);src:url(/static/media/fa-brands-400.23f19bb08961f37aaf69.eot?#iefix) format("embedded-opentype"),url(/static/media/fa-brands-400.d878b0a6a1144760244f.woff2) format("woff2"),url(/static/media/fa-brands-400.2285773e6b4b172f07d9.woff) format("woff"),url(/static/media/fa-brands-400.527940b104eb2ea366c8.ttf) format("truetype"),url(/static/media/fa-brands-400.2f517e09eb2ca6650ff5.svg#fontawesome) format("svg")}.fab{font-family:Font Awesome\ 5 Brands}@font-face{font-display:block;font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:400;src:url(/static/media/fa-regular-400.77206a6bb316fa0aded5.eot);src:url(/static/media/fa-regular-400.77206a6bb316fa0aded5.eot?#iefix) format("embedded-opentype"),url(/static/media/fa-regular-400.7a3337626410ca2f4071.woff2) format("woff2"),url(/static/media/fa-regular-400.bb58e57c48a3e911f15f.woff) format("woff"),url(/static/media/fa-regular-400.491974d108fe4002b2aa.ttf) format("truetype"),url(/static/media/fa-regular-400.4689f52cc96215721344.svg#fontawesome) format("svg")}.fab,.far{font-weight:400}@font-face{font-display:block;font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;src:url(/static/media/fa-solid-900.9bbb245e67a133f6e486.eot);src:url(/static/media/fa-solid-900.9bbb245e67a133f6e486.eot?#iefix) format("embedded-opentype"),url(/static/media/fa-solid-900.1551f4f60c37af51121f.woff2) format("woff2"),url(/static/media/fa-solid-900.eeccf4f66002c6f2ba24.woff) format("woff"),url(/static/media/fa-solid-900.be9ee23c0c6390141475.ttf) format("truetype"),url(/static/media/fa-solid-900.7a8b4f130182d19a2d7c.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:Font Awesome\ 5 Free}.fa,.fas{font-weight:900} + +/*! + * Bootstrap v4.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);font-family:sans-serif;line-height:1.15}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{background-color:#fff;color:#212529;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;font-weight:400;line-height:1.5;margin:0;text-align:left}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:initial;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;margin-top:0}p{margin-bottom:1rem;margin-top:0}abbr[data-original-title],abbr[title]{border-bottom:0;cursor:help;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}a{background-color:initial;color:#007bff;text-decoration:none}a:hover{color:#0056b3;text-decoration:underline}a:not([href]),a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-bottom:1rem;margin-top:0;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{caption-side:bottom;color:#6c757d;padding-bottom:.75rem;padding-top:.75rem;text-align:left}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{color:inherit;display:block;font-size:1.5rem;line-height:inherit;margin-bottom:.5rem;max-width:100%;padding:0;white-space:normal;width:100%}progress{vertical-align:initial}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:none;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}output{display:inline-block}summary{cursor:pointer;display:list-item}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-weight:500;line-height:1.2;margin-bottom:.5rem}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{border:0;border-top:1px solid #0000001a;margin-bottom:1rem;margin-top:1rem}.small,small{font-size:80%;font-weight:400}.mark,mark{background-color:#fcf8e3;padding:.2em}.list-inline,.list-unstyled{list-style:none;padding-left:0}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{font-size:1.25rem;margin-bottom:1rem}.blockquote-footer{color:#6c757d;display:block;font-size:80%}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{height:auto;max-width:100%}.img-thumbnail{background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;padding:.25rem}.figure{display:inline-block}.figure-img{line-height:1;margin-bottom:.5rem}.figure-caption{color:#6c757d;font-size:90%}code{word-wrap:break-word;color:#e83e8c;font-size:87.5%}a>code{color:inherit}kbd{background-color:#212529;border-radius:.2rem;color:#fff;font-size:87.5%;padding:.2rem .4rem}kbd kbd{font-size:100%;font-weight:700;padding:0}pre{color:#212529;display:block;font-size:87.5%}pre code{color:inherit;font-size:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px;width:100%}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px;width:100%}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:flex;flex-wrap:wrap;margin-left:-15px;margin-right:-15px}.no-gutters{margin-left:0;margin-right:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-left:0;padding-right:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{padding-left:15px;padding-right:15px;position:relative;width:100%}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-auto{flex:0 0 auto;max-width:100%;width:auto}.col-1{flex:0 0 8.333333%;max-width:8.333333%}.col-2{flex:0 0 16.666667%;max-width:16.666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.333333%;max-width:33.333333%}.col-5{flex:0 0 41.666667%;max-width:41.666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.333333%;max-width:58.333333%}.col-8{flex:0 0 66.666667%;max-width:66.666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.333333%;max-width:83.333333%}.col-11{flex:0 0 91.666667%;max-width:91.666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{flex:0 0 auto;max-width:100%;width:auto}.col-sm-1{flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{flex:0 0 auto;max-width:100%;width:auto}.col-md-1{flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{flex:0 0 auto;max-width:100%;width:auto}.col-lg-1{flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{flex:0 0 auto;max-width:100%;width:auto}.col-xl-1{flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{color:#212529;margin-bottom:1rem;width:100%}.table td,.table th{border-top:1px solid #dee2e6;padding:.75rem;vertical-align:top}.table thead th{border-bottom:2px solid #dee2e6;vertical-align:bottom}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:#0000000d}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075);color:#212529}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{background-color:#343a40;border-color:#454d55;color:#fff}.table .thead-light th{background-color:#e9ecef;border-color:#dee2e6;color:#495057}.table-dark{background-color:#343a40;color:#fff}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:#ffffff0d}.table-dark.table-hover tbody tr:hover{background-color:hsla(0,0%,100%,.075);color:#fff}@media (max-width:575.98px){.table-responsive-sm{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive>.table-bordered{border:0}.form-control{background-clip:padding-box;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;color:#495057;display:block;font-size:1rem;font-weight:400;height:calc(1.5em + .75rem + 2px);line-height:1.5;padding:.375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:initial;border:0}.form-control:-moz-focusring{color:#0000;text-shadow:0 0 0 #495057}.form-control:focus{background-color:#fff;border-color:#80bdff;box-shadow:0 0 0 .2rem #007bff40;color:#495057;outline:0}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{background-color:#fff;color:#495057}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{font-size:inherit;line-height:1.5;margin-bottom:0;padding-bottom:calc(.375rem + 1px);padding-top:calc(.375rem + 1px)}.col-form-label-lg{font-size:1.25rem;line-height:1.5;padding-bottom:calc(.5rem + 1px);padding-top:calc(.5rem + 1px)}.col-form-label-sm{font-size:.875rem;line-height:1.5;padding-bottom:calc(.25rem + 1px);padding-top:calc(.25rem + 1px)}.form-control-plaintext{background-color:initial;border:solid #0000;border-width:1px 0;color:#212529;display:block;font-size:1rem;line-height:1.5;margin-bottom:0;padding:.375rem 0;width:100%}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-left:0;padding-right:0}.form-control-sm{border-radius:.2rem;font-size:.875rem;height:calc(1.5em + .5rem + 2px);line-height:1.5;padding:.25rem .5rem}.form-control-lg{border-radius:.3rem;font-size:1.25rem;height:calc(1.5em + 1rem + 2px);line-height:1.5;padding:.5rem 1rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-left:-5px;margin-right:-5px}.form-row>.col,.form-row>[class*=col-]{padding-left:5px;padding-right:5px}.form-check{display:block;padding-left:1.25rem;position:relative}.form-check-input{margin-left:-1.25rem;margin-top:.3rem;position:absolute}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{align-items:center;display:inline-flex;margin-right:.75rem;padding-left:0}.form-check-inline .form-check-input{margin-left:0;margin-right:.3125rem;margin-top:0;position:static}.valid-feedback{color:#28a745;display:none;font-size:80%;margin-top:.25rem;width:100%}.valid-tooltip{background-color:#28a745e6;border-radius:.25rem;color:#fff;display:none;font-size:.875rem;line-height:1.5;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:#28a745;padding-right:calc(1.5em + .75rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem #28a74540}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.custom-select.is-valid,.was-validated .custom-select:valid{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0 0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem);border-color:#28a745;padding-right:calc(.75em + 2.3125rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem #28a74540}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{background-color:#34ce57;border-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem #28a74540}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem #28a74540}.invalid-feedback{color:#dc3545;display:none;font-size:80%;margin-top:.25rem;width:100%}.invalid-tooltip{background-color:#dc3545e6;border-radius:.25rem;color:#fff;display:none;font-size:.875rem;line-height:1.5;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:#dc3545;padding-right:calc(1.5em + .75rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem #dc354540}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0 0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem);border-color:#dc3545;padding-right:calc(.75em + 2.3125rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem #dc354540}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{background-color:#e4606d;border-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem #dc354540}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem #dc354540}.form-inline{align-items:center;display:flex;flex-flow:row wrap}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{align-items:center;display:flex;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;vertical-align:middle;width:auto}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{align-items:center;display:flex;justify-content:center;padding-left:0;width:auto}.form-inline .form-check-input{flex-shrink:0;margin-left:0;margin-right:.25rem;margin-top:0;position:relative}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{background-color:initial;border:1px solid #0000;border-radius:.25rem;color:#212529;cursor:pointer;display:inline-block;font-size:1rem;font-weight:400;line-height:1.5;padding:.375rem .75rem;text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-user-select:none;user-select:none;vertical-align:middle}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{box-shadow:0 0 0 .2rem #007bff40;outline:0}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{background-color:#007bff;border-color:#007bff;color:#fff}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{background-color:#0069d9;border-color:#0062cc;color:#fff}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-primary.disabled,.btn-primary:disabled{background-color:#007bff;border-color:#007bff;color:#fff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{background-color:#0062cc;border-color:#005cbf;color:#fff}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-secondary{background-color:#6c757d;border-color:#6c757d;color:#fff}.btn-secondary.focus,.btn-secondary:focus,.btn-secondary:hover{background-color:#5a6268;border-color:#545b62;color:#fff}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem #828a9180}.btn-secondary.disabled,.btn-secondary:disabled{background-color:#6c757d;border-color:#6c757d;color:#fff}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{background-color:#545b62;border-color:#4e555b;color:#fff}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #828a9180}.btn-success{background-color:#28a745;border-color:#28a745;color:#fff}.btn-success.focus,.btn-success:focus,.btn-success:hover{background-color:#218838;border-color:#1e7e34;color:#fff}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem #48b46180}.btn-success.disabled,.btn-success:disabled{background-color:#28a745;border-color:#28a745;color:#fff}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{background-color:#1e7e34;border-color:#1c7430;color:#fff}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #48b46180}.btn-info{background-color:#17a2b8;border-color:#17a2b8;color:#fff}.btn-info.focus,.btn-info:focus,.btn-info:hover{background-color:#138496;border-color:#117a8b;color:#fff}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem #3ab0c380}.btn-info.disabled,.btn-info:disabled{background-color:#17a2b8;border-color:#17a2b8;color:#fff}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{background-color:#117a8b;border-color:#10707f;color:#fff}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #3ab0c380}.btn-warning{background-color:#ffc107;border-color:#ffc107;color:#212529}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{background-color:#e0a800;border-color:#d39e00;color:#212529}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem #deaa0c80}.btn-warning.disabled,.btn-warning:disabled{background-color:#ffc107;border-color:#ffc107;color:#212529}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{background-color:#d39e00;border-color:#c69500;color:#212529}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #deaa0c80}.btn-danger{background-color:#dc3545;border-color:#dc3545;color:#fff}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{background-color:#c82333;border-color:#bd2130;color:#fff}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem #e1536180}.btn-danger.disabled,.btn-danger:disabled{background-color:#dc3545;border-color:#dc3545;color:#fff}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{background-color:#bd2130;border-color:#b21f2d;color:#fff}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #e1536180}.btn-light{background-color:#f8f9fa;border-color:#f8f9fa;color:#212529}.btn-light.focus,.btn-light:focus,.btn-light:hover{background-color:#e2e6ea;border-color:#dae0e5;color:#212529}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem #d8d9db80}.btn-light.disabled,.btn-light:disabled{background-color:#f8f9fa;border-color:#f8f9fa;color:#212529}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{background-color:#dae0e5;border-color:#d3d9df;color:#212529}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #d8d9db80}.btn-dark{background-color:#343a40;border-color:#343a40;color:#fff}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{background-color:#23272b;border-color:#1d2124;color:#fff}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem #52585d80}.btn-dark.disabled,.btn-dark:disabled{background-color:#343a40;border-color:#343a40;color:#fff}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{background-color:#1d2124;border-color:#171a1d;color:#fff}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #52585d80}.btn-outline-primary{border-color:#007bff;color:#007bff}.btn-outline-primary:hover{background-color:#007bff;border-color:#007bff;color:#fff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem #007bff80}.btn-outline-primary.disabled,.btn-outline-primary:disabled{background-color:initial;color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{background-color:#007bff;border-color:#007bff;color:#fff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #007bff80}.btn-outline-secondary{border-color:#6c757d;color:#6c757d}.btn-outline-secondary:hover{background-color:#6c757d;border-color:#6c757d;color:#fff}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem #6c757d80}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{background-color:initial;color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{background-color:#6c757d;border-color:#6c757d;color:#fff}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #6c757d80}.btn-outline-success{border-color:#28a745;color:#28a745}.btn-outline-success:hover{background-color:#28a745;border-color:#28a745;color:#fff}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem #28a74580}.btn-outline-success.disabled,.btn-outline-success:disabled{background-color:initial;color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{background-color:#28a745;border-color:#28a745;color:#fff}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #28a74580}.btn-outline-info{border-color:#17a2b8;color:#17a2b8}.btn-outline-info:hover{background-color:#17a2b8;border-color:#17a2b8;color:#fff}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem #17a2b880}.btn-outline-info.disabled,.btn-outline-info:disabled{background-color:initial;color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{background-color:#17a2b8;border-color:#17a2b8;color:#fff}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #17a2b880}.btn-outline-warning{border-color:#ffc107;color:#ffc107}.btn-outline-warning:hover{background-color:#ffc107;border-color:#ffc107;color:#212529}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem #ffc10780}.btn-outline-warning.disabled,.btn-outline-warning:disabled{background-color:initial;color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{background-color:#ffc107;border-color:#ffc107;color:#212529}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #ffc10780}.btn-outline-danger{border-color:#dc3545;color:#dc3545}.btn-outline-danger:hover{background-color:#dc3545;border-color:#dc3545;color:#fff}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem #dc354580}.btn-outline-danger.disabled,.btn-outline-danger:disabled{background-color:initial;color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{background-color:#dc3545;border-color:#dc3545;color:#fff}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #dc354580}.btn-outline-light{border-color:#f8f9fa;color:#f8f9fa}.btn-outline-light:hover{background-color:#f8f9fa;border-color:#f8f9fa;color:#212529}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem #f8f9fa80}.btn-outline-light.disabled,.btn-outline-light:disabled{background-color:initial;color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{background-color:#f8f9fa;border-color:#f8f9fa;color:#212529}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #f8f9fa80}.btn-outline-dark{border-color:#343a40;color:#343a40}.btn-outline-dark:hover{background-color:#343a40;border-color:#343a40;color:#fff}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem #343a4080}.btn-outline-dark.disabled,.btn-outline-dark:disabled{background-color:initial;color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{background-color:#343a40;border-color:#343a40;color:#fff}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #343a4080}.btn-link{color:#007bff;font-weight:400;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{box-shadow:none;text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{border-radius:.3rem;font-size:1.25rem;line-height:1.5;padding:.5rem 1rem}.btn-group-sm>.btn,.btn-sm{border-radius:.2rem;font-size:.875rem;line-height:1.5;padding:.25rem .5rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;position:relative;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{border-bottom:0;border-left:.3em solid #0000;border-right:.3em solid #0000;border-top:.3em solid;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{background-clip:padding-box;background-color:#fff;border:1px solid #00000026;border-radius:.25rem;color:#212529;display:none;float:left;font-size:1rem;left:0;list-style:none;margin:.125rem 0 0;min-width:10rem;padding:.5rem 0;position:absolute;text-align:left;top:100%;z-index:1000}.dropdown-menu-left{left:0;right:auto}.dropdown-menu-right{left:auto;right:0}@media (min-width:576px){.dropdown-menu-sm-left{left:0;right:auto}.dropdown-menu-sm-right{left:auto;right:0}}@media (min-width:768px){.dropdown-menu-md-left{left:0;right:auto}.dropdown-menu-md-right{left:auto;right:0}}@media (min-width:992px){.dropdown-menu-lg-left{left:0;right:auto}.dropdown-menu-lg-right{left:auto;right:0}}@media (min-width:1200px){.dropdown-menu-xl-left{left:0;right:auto}.dropdown-menu-xl-right{left:auto;right:0}}.dropup .dropdown-menu{bottom:100%;margin-bottom:.125rem;margin-top:0;top:auto}.dropup .dropdown-toggle:after{border-bottom:.3em solid;border-left:.3em solid #0000;border-right:.3em solid #0000;border-top:0;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{left:100%;margin-left:.125rem;margin-top:0;right:auto;top:0}.dropright .dropdown-toggle:after{border-bottom:.3em solid #0000;border-left:.3em solid;border-right:0;border-top:.3em solid #0000;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{left:auto;margin-right:.125rem;margin-top:0;right:100%;top:0}.dropleft .dropdown-toggle:after{content:"";display:inline-block;display:none;margin-left:.255em;vertical-align:.255em}.dropleft .dropdown-toggle:before{border-bottom:.3em solid #0000;border-right:.3em solid;border-top:.3em solid #0000;content:"";display:inline-block;margin-right:.255em;vertical-align:.255em}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{bottom:auto;right:auto}.dropdown-divider{border-top:1px solid #e9ecef;height:0;margin:.5rem 0;overflow:hidden}.dropdown-item{background-color:initial;border:0;clear:both;color:#212529;display:block;font-weight:400;padding:.25rem 1.5rem;text-align:inherit;white-space:nowrap;width:100%}.dropdown-item:focus,.dropdown-item:hover{background-color:#f8f9fa;color:#16181b;text-decoration:none}.dropdown-item.active,.dropdown-item:active{background-color:#007bff;color:#fff;text-decoration:none}.dropdown-item.disabled,.dropdown-item:disabled{background-color:initial;color:#6c757d;pointer-events:none}.dropdown-menu.show{display:block}.dropdown-header{color:#6c757d;display:block;font-size:.875rem;margin-bottom:0;padding:.5rem 1.5rem;white-space:nowrap}.dropdown-item-text{color:#212529;display:block;padding:.25rem 1.5rem}.btn-group,.btn-group-vertical{display:inline-flex;position:relative;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{flex:1 1 auto;position:relative}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-vertical{align-items:flex-start;flex-direction:column;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{clip:rect(0,0,0,0);pointer-events:none;position:absolute}.input-group{align-items:stretch;display:flex;flex-wrap:wrap;position:relative;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{flex:1 1;margin-bottom:0;min-width:0;position:relative}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group>.custom-file{align-items:center;display:flex}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-bottom-right-radius:0;border-top-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{align-items:center;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem;color:#495057;display:flex;font-size:1rem;font-weight:400;line-height:1.5;margin-bottom:0;padding:.375rem .75rem;text-align:center;white-space:nowrap}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{border-radius:.3rem;font-size:1.25rem;line-height:1.5;padding:.5rem 1rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{border-radius:.2rem;font-size:.875rem;line-height:1.5;padding:.25rem .5rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-bottom-right-radius:0;border-top-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-bottom-left-radius:0;border-top-left-radius:0}.custom-control{display:block;min-height:1.5rem;padding-left:1.5rem;position:relative}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{height:1.25rem;left:0;opacity:0;position:absolute;width:1rem;z-index:-1}.custom-control-input:checked~.custom-control-label:before{background-color:#007bff;border-color:#007bff;color:#fff}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem #007bff40}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label:before{background-color:#b3d7ff;border-color:#b3d7ff;color:#fff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before,.custom-control-input[disabled]~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{margin-bottom:0;position:relative;vertical-align:top}.custom-control-label:before{background-color:#fff;border:1px solid #adb5bd;pointer-events:none}.custom-control-label:after,.custom-control-label:before{content:"";display:block;height:1rem;left:-1.5rem;position:absolute;top:.25rem;width:1rem}.custom-control-label:after{background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%23fff' d='m6.564.75-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{background-color:#007bff;border-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before,.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:#007bff80}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:#007bff80}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{border-radius:.5rem;left:-2.25rem;pointer-events:all;width:1.75rem}.custom-switch .custom-control-label:after{background-color:#adb5bd;border-radius:.5rem;height:calc(1rem - 4px);left:calc(-2.25rem + 2px);top:calc(.25rem + 2px);transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:calc(1rem - 4px)}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:#007bff80}.custom-select{-webkit-appearance:none;appearance:none;background:#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0 0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;color:#495057;display:inline-block;font-size:1rem;font-weight:400;height:calc(1.5em + .75rem + 2px);line-height:1.5;padding:.375rem 1.75rem .375rem .75rem;vertical-align:middle;width:100%}.custom-select:focus{border-color:#80bdff;box-shadow:0 0 0 .2rem #007bff40;outline:0}.custom-select:focus::-ms-value{background-color:#fff;color:#495057}.custom-select[multiple],.custom-select[size]:not([size="1"]){background-image:none;height:auto;padding-right:.75rem}.custom-select:disabled{background-color:#e9ecef;color:#6c757d}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:#0000;text-shadow:0 0 0 #495057}.custom-select-sm{font-size:.875rem;height:calc(1.5em + .5rem + 2px);padding-bottom:.25rem;padding-left:.5rem;padding-top:.25rem}.custom-select-lg{font-size:1.25rem;height:calc(1.5em + 1rem + 2px);padding-bottom:.5rem;padding-left:1rem;padding-top:.5rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{height:calc(1.5em + .75rem + 2px);position:relative;width:100%}.custom-file-input{margin:0;opacity:0;z-index:2}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem #007bff40}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;font-weight:400;height:calc(1.5em + .75rem + 2px);left:0;z-index:1}.custom-file-label,.custom-file-label:after{color:#495057;line-height:1.5;padding:.375rem .75rem;position:absolute;right:0;top:0}.custom-file-label:after{background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0;bottom:0;content:"Browse";display:block;height:calc(1.5em + .75rem);z-index:3}.custom-range{-webkit-appearance:none;appearance:none;background-color:initial;height:1.4rem;padding:0;width:100%}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem #007bff40}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem #007bff40}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem #007bff40}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background-color:#007bff;border:0;border-radius:1rem;height:1rem;margin-top:-.25rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{background-color:#dee2e6;border-color:#0000;border-radius:1rem;color:#0000;cursor:pointer;height:.5rem;width:100%}.custom-range::-moz-range-thumb{appearance:none;background-color:#007bff;border:0;border-radius:1rem;height:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{background-color:#dee2e6;border-color:#0000;border-radius:1rem;color:#0000;cursor:pointer;height:.5rem;width:100%}.custom-range::-ms-thumb{appearance:none;background-color:#007bff;border:0;border-radius:1rem;height:1rem;margin-left:.2rem;margin-right:.2rem;margin-top:0;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{background-color:initial;border-color:#0000;border-width:.5rem;color:#0000;cursor:pointer;height:.5rem;width:100%}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;list-style:none;margin-bottom:0;padding-left:0}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;cursor:default;pointer-events:none}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid #0000;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{background-color:initial;border-color:#0000;color:#6c757d}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{background-color:#fff;border-color:#dee2e6 #dee2e6 #fff;color:#495057}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background-color:#007bff;color:#fff}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{padding:.5rem 1rem;position:relative}.navbar,.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between}.navbar-brand{display:inline-block;font-size:1.25rem;line-height:inherit;margin-right:1rem;padding-bottom:.3125rem;padding-top:.3125rem;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;list-style:none;margin-bottom:0;padding-left:0}.navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-nav .dropdown-menu{float:none;position:static}.navbar-text{display:inline-block;padding-bottom:.5rem;padding-top:.5rem}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{background-color:initial;border:1px solid #0000;border-radius:.25rem;font-size:1.25rem;line-height:1;padding:.25rem .75rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{background:no-repeat 50%;background-size:100% 100%;content:"";display:inline-block;height:1.5em;vertical-align:middle;width:1.5em}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-left:0;padding-right:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-left:0;padding-right:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-left:0;padding-right:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-left:0;padding-right:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-left:0;padding-right:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:#000000e6}.navbar-light .navbar-nav .nav-link{color:#00000080}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:#000000b3}.navbar-light .navbar-nav .nav-link.disabled{color:#0000004d}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:#000000e6}.navbar-light .navbar-toggler{border-color:#0000001a;color:#00000080}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:#00000080}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:#000000e6}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:#ffffff80}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:#ffffffbf}.navbar-dark .navbar-nav .nav-link.disabled{color:#ffffff40}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{border-color:#ffffff1a;color:#ffffff80}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:#ffffff80}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{word-wrap:break-word;background-clip:initial;background-color:#fff;border:1px solid rgba(0,0,0,.125);border-radius:.25rem;display:flex;flex-direction:column;min-width:0;position:relative}.card>hr{margin-left:0;margin-right:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{background-color:#00000008;border-bottom:1px solid rgba(0,0,0,.125);margin-bottom:0;padding:.75rem 1.25rem}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{background-color:#00000008;border-top:1px solid rgba(0,0,0,.125);padding:.75rem 1.25rem}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{border-bottom:0;margin-bottom:-.75rem}.card-header-pills,.card-header-tabs{margin-left:-.625rem;margin-right:-.625rem}.card-img-overlay{bottom:0;left:0;padding:1.25rem;position:absolute;right:0;top:0}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-left-radius:calc(.25rem - 1px);border-bottom-right-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:flex;flex-flow:row wrap;margin-left:-15px;margin-right:-15px}.card-deck .card{flex:1 0;margin-bottom:0;margin-left:15px;margin-right:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0;margin-bottom:0}.card-group>.card+.card{border-left:0;margin-left:0}.card-group>.card:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{background-color:#e9ecef;border-radius:.25rem;display:flex;flex-wrap:wrap;list-style:none;margin-bottom:1rem;padding:.75rem 1rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{color:#6c757d;content:"/";display:inline-block;padding-right:.5rem}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{border-radius:.25rem;display:flex;list-style:none;padding-left:0}.page-link{background-color:#fff;border:1px solid #dee2e6;color:#007bff;display:block;line-height:1.25;margin-left:-1px;padding:.5rem .75rem;position:relative}.page-link:hover{background-color:#e9ecef;border-color:#dee2e6;color:#0056b3;text-decoration:none;z-index:2}.page-link:focus{box-shadow:0 0 0 .2rem #007bff40;outline:0;z-index:3}.page-item:first-child .page-link{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem;margin-left:0}.page-item:last-child .page-link{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.page-item.active .page-link{background-color:#007bff;border-color:#007bff;color:#fff;z-index:3}.page-item.disabled .page-link{background-color:#fff;border-color:#dee2e6;color:#6c757d;cursor:auto;pointer-events:none}.pagination-lg .page-link{font-size:1.25rem;line-height:1.5;padding:.75rem 1.5rem}.pagination-lg .page-item:first-child .page-link{border-bottom-left-radius:.3rem;border-top-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-bottom-right-radius:.3rem;border-top-right-radius:.3rem}.pagination-sm .page-link{font-size:.875rem;line-height:1.5;padding:.25rem .5rem}.pagination-sm .page-item:first-child .page-link{border-bottom-left-radius:.2rem;border-top-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-bottom-right-radius:.2rem;border-top-right-radius:.2rem}.badge{border-radius:.25rem;display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .4em;text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:initial;white-space:nowrap}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{border-radius:10rem;padding-left:.6em;padding-right:.6em}.badge-primary{background-color:#007bff;color:#fff}a.badge-primary:focus,a.badge-primary:hover{background-color:#0062cc;color:#fff}a.badge-primary.focus,a.badge-primary:focus{box-shadow:0 0 0 .2rem #007bff80;outline:0}.badge-secondary{background-color:#6c757d;color:#fff}a.badge-secondary:focus,a.badge-secondary:hover{background-color:#545b62;color:#fff}a.badge-secondary.focus,a.badge-secondary:focus{box-shadow:0 0 0 .2rem #6c757d80;outline:0}.badge-success{background-color:#28a745;color:#fff}a.badge-success:focus,a.badge-success:hover{background-color:#1e7e34;color:#fff}a.badge-success.focus,a.badge-success:focus{box-shadow:0 0 0 .2rem #28a74580;outline:0}.badge-info{background-color:#17a2b8;color:#fff}a.badge-info:focus,a.badge-info:hover{background-color:#117a8b;color:#fff}a.badge-info.focus,a.badge-info:focus{box-shadow:0 0 0 .2rem #17a2b880;outline:0}.badge-warning{background-color:#ffc107;color:#212529}a.badge-warning:focus,a.badge-warning:hover{background-color:#d39e00;color:#212529}a.badge-warning.focus,a.badge-warning:focus{box-shadow:0 0 0 .2rem #ffc10780;outline:0}.badge-danger{background-color:#dc3545;color:#fff}a.badge-danger:focus,a.badge-danger:hover{background-color:#bd2130;color:#fff}a.badge-danger.focus,a.badge-danger:focus{box-shadow:0 0 0 .2rem #dc354580;outline:0}.badge-light{background-color:#f8f9fa;color:#212529}a.badge-light:focus,a.badge-light:hover{background-color:#dae0e5;color:#212529}a.badge-light.focus,a.badge-light:focus{box-shadow:0 0 0 .2rem #f8f9fa80;outline:0}.badge-dark{background-color:#343a40;color:#fff}a.badge-dark:focus,a.badge-dark:hover{background-color:#1d2124;color:#fff}a.badge-dark.focus,a.badge-dark:focus{box-shadow:0 0 0 .2rem #343a4080;outline:0}.jumbotron{background-color:#e9ecef;border-radius:.3rem;margin-bottom:2rem;padding:2rem 1rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{border-radius:0;padding-left:0;padding-right:0}.alert{border:1px solid #0000;border-radius:.25rem;margin-bottom:1rem;padding:.75rem 1.25rem;position:relative}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{color:inherit;padding:.75rem 1.25rem;position:absolute;right:0;top:0}.alert-primary{background-color:#cce5ff;border-color:#b8daff;color:#004085}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{background-color:#e2e3e5;border-color:#d6d8db;color:#383d41}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{background-color:#d4edda;border-color:#c3e6cb;color:#155724}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{background-color:#d1ecf1;border-color:#bee5eb;color:#0c5460}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{background-color:#fff3cd;border-color:#ffeeba;color:#856404}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{background-color:#f8d7da;border-color:#f5c6cb;color:#721c24}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{background-color:#fefefe;border-color:#fdfdfe;color:#818182}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{background-color:#d6d8d9;border-color:#c6c8ca;color:#1b1e21}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{background-color:#e9ecef;border-radius:.25rem;font-size:.75rem;height:1rem}.progress,.progress-bar{display:flex;overflow:hidden}.progress-bar{background-color:#007bff;color:#fff;flex-direction:column;justify-content:center;text-align:center;transition:width .6s ease;white-space:nowrap}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.media{align-items:flex-start;display:flex}.media-body{flex:1 1}.list-group{display:flex;flex-direction:column;margin-bottom:0;padding-left:0}.list-group-item-action{color:#495057;text-align:inherit;width:100%}.list-group-item-action:focus,.list-group-item-action:hover{background-color:#f8f9fa;color:#495057;text-decoration:none;z-index:1}.list-group-item-action:active{background-color:#e9ecef;color:#212529}.list-group-item{background-color:#fff;border:1px solid rgba(0,0,0,.125);display:block;padding:.75rem 1.25rem;position:relative}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{background-color:#fff;color:#6c757d;pointer-events:none}.list-group-item.active{background-color:#007bff;border-color:#007bff;color:#fff;z-index:2}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{border-top-width:1px;margin-top:-1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal .list-group-item.active{margin-top:0}.list-group-horizontal .list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal .list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-sm .list-group-item.active{margin-top:0}.list-group-horizontal-sm .list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-sm .list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-md .list-group-item.active{margin-top:0}.list-group-horizontal-md .list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-md .list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-lg .list-group-item.active{margin-top:0}.list-group-horizontal-lg .list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-lg .list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-xl .list-group-item.active{margin-top:0}.list-group-horizontal-xl .list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-xl .list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}.list-group-flush .list-group-item{border-left-width:0;border-radius:0;border-right-width:0}.list-group-flush .list-group-item:first-child{border-top-width:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{background-color:#b8daff;color:#004085}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{background-color:#9fcdff;color:#004085}.list-group-item-primary.list-group-item-action.active{background-color:#004085;border-color:#004085;color:#fff}.list-group-item-secondary{background-color:#d6d8db;color:#383d41}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{background-color:#c8cbcf;color:#383d41}.list-group-item-secondary.list-group-item-action.active{background-color:#383d41;border-color:#383d41;color:#fff}.list-group-item-success{background-color:#c3e6cb;color:#155724}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{background-color:#b1dfbb;color:#155724}.list-group-item-success.list-group-item-action.active{background-color:#155724;border-color:#155724;color:#fff}.list-group-item-info{background-color:#bee5eb;color:#0c5460}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{background-color:#abdde5;color:#0c5460}.list-group-item-info.list-group-item-action.active{background-color:#0c5460;border-color:#0c5460;color:#fff}.list-group-item-warning{background-color:#ffeeba;color:#856404}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{background-color:#ffe8a1;color:#856404}.list-group-item-warning.list-group-item-action.active{background-color:#856404;border-color:#856404;color:#fff}.list-group-item-danger{background-color:#f5c6cb;color:#721c24}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{background-color:#f1b0b7;color:#721c24}.list-group-item-danger.list-group-item-action.active{background-color:#721c24;border-color:#721c24;color:#fff}.list-group-item-light{background-color:#fdfdfe;color:#818182}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{background-color:#ececf6;color:#818182}.list-group-item-light.list-group-item-action.active{background-color:#818182;border-color:#818182;color:#fff}.list-group-item-dark{background-color:#c6c8ca;color:#1b1e21}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{background-color:#b9bbbe;color:#1b1e21}.list-group-item-dark.list-group-item-action.active{background-color:#1b1e21;border-color:#1b1e21;color:#fff}.close{color:#000;float:right;font-size:1.5rem;font-weight:700;line-height:1;opacity:.5;text-shadow:0 1px 0 #fff}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{-webkit-appearance:none;appearance:none;background-color:initial;border:0;padding:0}a.close.disabled{pointer-events:none}.toast{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background-clip:padding-box;background-color:#ffffffd9;border:1px solid #0000001a;border-radius:.25rem;box-shadow:0 .25rem .75rem #0000001a;font-size:.875rem;max-width:350px;opacity:0;overflow:hidden}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{align-items:center;background-clip:padding-box;background-color:#ffffffd9;border-bottom:1px solid #0000000d;color:#6c757d;display:flex;padding:.25rem .75rem}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{display:none;height:100%;left:0;outline:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:1050}.modal-dialog{margin:.5rem;pointer-events:none;position:relative;width:auto}.modal.fade .modal-dialog{transform:translateY(-50px);transition:transform .3s ease-out}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{align-items:center;display:flex;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{content:"";display:block;height:calc(100vh - 1rem)}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;height:100%;justify-content:center}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{background-clip:padding-box;background-color:#fff;border:1px solid #0003;border-radius:.3rem;display:flex;flex-direction:column;outline:0;pointer-events:auto;position:relative;width:100%}.modal-backdrop{background-color:#000;height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:1040}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{align-items:flex-start;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px);display:flex;justify-content:space-between;padding:1rem}.modal-header .close{margin:-1rem -1rem -1rem auto;padding:1rem}.modal-title{line-height:1.5;margin-bottom:0}.modal-body{flex:1 1 auto;padding:1rem;position:relative}.modal-footer{align-items:center;border-bottom-left-radius:calc(.3rem - 1px);border-bottom-right-radius:calc(.3rem - 1px);border-top:1px solid #dee2e6;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:.75rem}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{height:50px;overflow:scroll;position:absolute;top:-9999px;width:50px}@media (min-width:576px){.modal-dialog{margin:1.75rem auto;max-width:500px}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{word-wrap:break-word;display:block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:.875rem;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.5;margin:0;opacity:0;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:1070}.tooltip.show{opacity:.9}.tooltip .arrow{display:block;height:.4rem;position:absolute;width:.8rem}.tooltip .arrow:before{border-color:#0000;border-style:solid;content:"";position:absolute}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{border-top-color:#000;border-width:.4rem .4rem 0;top:0}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{height:.8rem;left:0;width:.4rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{border-right-color:#000;border-width:.4rem .4rem .4rem 0;right:0}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{border-bottom-color:#000;border-width:0 .4rem .4rem;bottom:0}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{height:.8rem;right:0;width:.4rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{border-left-color:#000;border-width:.4rem 0 .4rem .4rem;left:0}.tooltip-inner{background-color:#000;border-radius:.25rem;color:#fff;max-width:200px;padding:.25rem .5rem;text-align:center}.popover{word-wrap:break-word;background-clip:padding-box;background-color:#fff;border:1px solid #0003;border-radius:.3rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:.875rem;font-style:normal;font-weight:400;left:0;letter-spacing:normal;line-break:auto;line-height:1.5;max-width:276px;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;top:0;white-space:normal;word-break:normal;word-spacing:normal;z-index:1060}.popover,.popover .arrow{display:block;position:absolute}.popover .arrow{height:.5rem;margin:0 .3rem;width:1rem}.popover .arrow:after,.popover .arrow:before{border-color:#0000;border-style:solid;content:"";display:block;position:absolute}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{border-top-color:#00000040;border-width:.5rem .5rem 0;bottom:0}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{border-top-color:#fff;border-width:.5rem .5rem 0;bottom:1px}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{height:1rem;left:calc(-.5rem - 1px);margin:.3rem 0;width:.5rem}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{border-right-color:#00000040;border-width:.5rem .5rem .5rem 0;left:0}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{border-right-color:#fff;border-width:.5rem .5rem .5rem 0;left:1px}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{border-bottom-color:#00000040;border-width:0 .5rem .5rem;top:0}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{border-bottom-color:#fff;border-width:0 .5rem .5rem;top:1px}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{border-bottom:1px solid #f7f7f7;content:"";display:block;left:50%;margin-left:-.5rem;position:absolute;top:0;width:1rem}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{height:1rem;margin:.3rem 0;right:calc(-.5rem - 1px);width:.5rem}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{border-left-color:#00000040;border-width:.5rem 0 .5rem .5rem;right:0}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{border-left-color:#fff;border-width:.5rem 0 .5rem .5rem;right:1px}.popover-header{background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px);font-size:1rem;margin-bottom:0;padding:.5rem .75rem}.popover-header:empty{display:none}.popover-body{color:#212529;padding:.5rem .75rem}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{overflow:hidden;position:relative;width:100%}.carousel-inner:after{clear:both;content:"";display:block}.carousel-item{backface-visibility:hidden;display:none;float:left;margin-right:-100%;position:relative;transition:transform .6s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transform:none;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1;z-index:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0;transition:opacity 0s .6s;z-index:0}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{align-items:center;bottom:0;color:#fff;display:flex;justify-content:center;opacity:.5;position:absolute;text-align:center;top:0;transition:opacity .15s ease;width:15%;z-index:1}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{background:no-repeat 50%/100% 100%;display:inline-block;height:20px;width:20px}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='m5.25 0-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='m2.75 0-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{bottom:0;display:flex;justify-content:center;left:0;list-style:none;margin-left:15%;margin-right:15%;padding-left:0;position:absolute;right:0;z-index:15}.carousel-indicators li{background-clip:padding-box;background-color:#fff;border-bottom:10px solid #0000;border-top:10px solid #0000;box-sizing:initial;cursor:pointer;flex:0 1 auto;height:3px;margin-left:3px;margin-right:3px;opacity:.5;text-indent:-999px;transition:opacity .6s ease;width:30px}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{bottom:20px;color:#fff;left:15%;padding-bottom:20px;padding-top:20px;position:absolute;right:15%;text-align:center;z-index:10}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{animation:spinner-border .75s linear infinite;border:.25em solid;border-radius:50%;border-right:.25em solid #0000;display:inline-block;height:2rem;vertical-align:text-bottom;width:2rem}.spinner-border-sm{border-width:.2em;height:1rem;width:1rem}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}.spinner-grow{animation:spinner-grow .75s linear infinite;background-color:currentColor;border-radius:50%;display:inline-block;height:2rem;opacity:0;vertical-align:text-bottom;width:2rem}.spinner-grow-sm{height:1rem;width:1rem}.align-baseline{vertical-align:initial!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:initial!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{clear:both;content:"";display:block}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{display:block;overflow:hidden;padding:0;position:relative;width:100%}.embed-responsive:before{content:"";display:block}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{border:0;bottom:0;height:100%;left:0;position:absolute;top:0;width:100%}.embed-responsive-21by9:before{padding-top:42.857143%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{left:0;position:fixed;right:0;z-index:1030}.fixed-bottom{bottom:0}@supports (position:sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;overflow:visible;position:static;white-space:normal;width:auto}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem #00000026!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{background-color:#0000;bottom:0;content:"";left:0;pointer-events:auto;position:absolute;right:0;top:0;z-index:1}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:#00000080!important}.text-white-50{color:#ffffff80!important}.text-hide{background-color:initial;border:0;color:#0000;font:0/0 a;text-shadow:none}.text-decoration-none{text-decoration:none!important}.text-break{overflow-wrap:break-word!important;word-break:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{box-shadow:none!important;text-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{border-color:#dee2e6;color:inherit}}.react-tagsinput{background-color:#fff;border:1px solid #ccc;overflow:hidden;padding-left:5px;padding-top:5px}.react-tagsinput--focused{border-color:#a5d24a}.react-tagsinput-tag{background-color:#cde69c;border:1px solid #a5d24a;border-radius:2px;color:#638421;display:inline-block;font-family:sans-serif;font-size:13px;font-weight:400;margin-bottom:5px;margin-right:5px;padding:5px}.react-tagsinput-remove{cursor:pointer;font-weight:700}.react-tagsinput-tag a:before{content:" ×"}.react-tagsinput-input{background:#0000;border:0;color:#777;font-family:sans-serif;font-size:13px;font-weight:400;margin-bottom:6px;margin-top:1px;outline:none;padding:5px;width:80px}.prism-code-editor{--_pse:var(--padding-inline,.75em);--_ns:var(--number-spacing,.75em);--padding-left:var(--_pse);background:var(--editor__bg);display:grid;isolation:isolate;line-height:1.4;overflow:auto;scroll-padding-left:var(--padding-left);-webkit-user-select:none;user-select:none;white-space:pre}.show-line-numbers{--padding-left:calc(var(--_pse) + var(--number-width) + var(--_ns));grid:1fr/0 1fr}.pce-wrapper{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;margin:.5em 0;pointer-events:none;position:relative}.prism-code-editor textarea{all:unset;box-sizing:border-box;color:#0000;height:100%;overflow:hidden;padding:0 var(--_pse) 0 var(--padding-left);pointer-events:auto;-webkit-user-select:auto;user-select:auto;width:100%}.pce-no-selection textarea:focus{z-index:1}.pce-line{margin:0 0 0 var(--padding-left);padding:0 var(--_pse) 0 0;position:relative}.show-line-numbers .pce-line:before{box-sizing:border-box;color:var(--editor__line-number);content:attr(data-line);display:inline-block;margin:0 0 0 calc(var(--padding-left)*-1);padding:0 var(--_ns) 0 0;text-align:end}.show-line-numbers:before{background:inherit;content:"";pointer-events:none}.pce-line:before,.show-line-numbers:before{height:100%;left:0;position:sticky;width:var(--padding-left);z-index:2}.pce-wrap .pce-line:before{position:absolute}.active-line.match-highlight:after,.pce-no-selection .active-line:after,.pce-overlays,div.pce-overlays>*{bottom:0;content:"";left:0;position:absolute;right:0;top:0}.active-line:after{background:var(--editor__bg-highlight);border:var(--editor__border-highlight);z-index:-2}.pce-wrap{white-space:pre-wrap;word-break:break-word}.selection-matches span{background:var(--editor__bg-selection-match)}.pce-nowrap .active-bracket{display:inline-block}.prism-code-editor{--editor__bg:#0d1117;--widget__border:#303741;--widget__bg:#161b22;--widget__color:#b8bfc7;--widget__color-active:#fff;--widget__color-options:#7d8590;--widget__bg-input:#0d1117;--widget__bg-hover:#5a5d5e4f;--widget__bg-active:#1f6feb66;--widget__focus-ring:#007acc;--search__bg-find:#f2cc6080;--widget__bg-error:#5a1d1d;--widget__error-ring:#be1100;--editor__bg-highlight:#6e76811a;--editor__bg-selection-match:#3fb95040;--editor__line-number:#6e7681;--editor__bg-scrollbar:210,10%,32%;--editor__bg-fold:#7d8590;--bg-guide-indent:#e6edf31f;--pce-ac-icon-class:#f0883e;--pce-ac-icon-enum:#f0883e;--pce-ac-icon-function:#bc8cff;--pce-ac-icon-interface:#f0883e;--pce-ac-icon-keyword:#ff7b72;--pce-ac-icon-namespace:#ff7b72;--pce-ac-icon-parameter:#79c0ff;--pce-ac-icon-property:#f0883e;--pce-ac-icon-snippet:#58a6ff;--pce-ac-icon-unit:#58a6ff;--pce-ac-icon-variable:#f0883e;caret-color:#2f81f7;color-scheme:dark;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace}.prism-code-editor textarea::selection{background:#264f78;color:#0000}.pce-matches .match{--search__bg-find:#8c8d6c}.active-line{--editor__line-number:#e6edf3}.guide-indents .active{--bg-guide-indent:#e6edf33d}.language-markdown .url>.operator,.token.attr-equals,.token.code.keyword,.token.punctuation,[class*=language-]{color:#e6edf3}.language-css .token.url,.token.atrule,.token.class-name,.token.list.punctuation,.token.maybe-class-name,.token.parameter,.token.variable{color:#ffa657}.token.atrule .rule,.token.deleted,.token.entity,.token.keyword,.token.number.quantifier,.token.operator,.token.regex-flags,.token.selector .combinator,.token.token.anchor,.token.unit{color:#ff7b72}.language-regex .escape,.token.doctype-tag,.token.inserted,.token.selector,.token.tag{color:#7ee787}.language-markdown .url .content,.language-markdown .url .variable,.language-regex,.token.attr-value,.token.char,.token.regex,.token.string,.token.string-property{color:#a5d6ff}.language-css .token.function,.language-css .token.property,.language-jsx .tag>.punctuation,.language-tsx .tag>.punctuation,.title.important .punctuation,.token.attr-name,.token.boolean,.token.builtin,.token.char-class,.token.char-set,.token.code-snippet.code,.token.color,.token.constant,.token.doctype,.token.keyword-null,.token.keyword-this,.token.number,.token.property-access,.token.pseudo-class,.token.pseudo-element,.token.regex .punctuation,.token.selector .class,.token.selector .id,.token.title.important{color:#79c0ff}.token.function{color:#d2a8ff}.token.cdata,.token.comment,.token.prolog{color:#8b949e}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.bracket-level-0,.token.bracket-level-6{color:#79c0ff}.token.bracket-level-1,.token.bracket-level-7{color:#56d364}.token.bracket-level-2,.token.bracket-level-8{color:#e3b341}.token.bracket-level-3,.token.bracket-level-9{color:#ffa198}.token.bracket-level-10,.token.bracket-level-4{color:#ff9bce}.token.bracket-level-11,.token.bracket-level-5{color:#d2a8ff}.token.interpolation-punctuation{color:#a5d6ff}.token.bracket-error{color:#7d8590}.token.markup-bracket{color:inherit}.active-bracket{box-shadow:inset 0 0 0 1px #3fb95099,inset 0 0 0 9in #3fb95040}.active-tagname,.word-matches span{box-shadow:inset 0 0 0 1px #6e768199,inset 0 0 0 9in #6e768180}.prism-search{grid-gap:.3em;background:var(--widget__bg);border:1px solid var(--widget__border);border-radius:.3em;color:var(--widget__color);display:grid;gap:.3em;grid:auto/1em auto;left:.5em;line-height:1.5;margin:-99in 0 0;padding:.3em;pointer-events:auto;position:sticky;right:.5em;top:.5em;z-index:4}.prism-search,.prism-search *{box-sizing:border-box}.prism-search button{all:unset;cursor:pointer}.pce-readonly .prism-search{grid:auto/auto}.prism-search>div>div{display:flex}.prism-search input{background:#0000;border:none;color:var(--widget__color);font:inherit;padding:0 0 0 .3em;width:calc(20em - 10ch - 4px);width:calc(var(--search-width, 20em) - 10ch - 4px)}.prism-search ::placeholder{color:inherit;opacity:.6}.pce-match-count{margin:1px auto 1px 0}.pce-input,.pce-match-count{font-family:Arial,Helvetica,sans-serif}.pce-options{color:var(--widget__color-options);font-size:80%;gap:.25em}.pce-options button{border-radius:.2em;padding:0 .2em;text-align:center;width:1.2em}.pce-options button span{pointer-events:none}.prism-search button:focus-visible{outline:1px solid var(--widget__focus-ring);z-index:1}.pce-options button,.prism-search .pce-input{box-shadow:0 0 0 1px var(--widget__border);box-shadow:0 0 0 1px var(--_border,var(--widget__border));margin:1px}.prism-search .pce-input{background:var(--widget__bg-input);border-radius:.15em;display:flex;height:1.5em;position:relative}.prism-search input:focus{outline:0}.pce-input:focus-within{--_border:var(--widget__focus-ring)}.pce-find button{align-items:center;display:grid;padding:0 .4em}.pce-replace button{text-align:center;width:7.3ch}.pce-replace :last-child{width:2.7ch}.pce-input button{box-shadow:-1px 0 0 0 var(--widget__border);margin-left:1px}.prev-match:before{transform:rotate(-90deg)}.next-match:before,.pce-expand:before{transform:rotate(90deg)}@media (hover:hover){.prism-search button:hover{background:var(--widget__bg-hover)}}.pce-options button[aria-pressed=true]{--_border:var(--widget__focus-ring);background:var(--widget__bg-active);color:var(--widget__color-active)}.pce-input>:nth-child(3){border-radius:0 .15em .15em 0}.pce-input.pce-error{--_border:var(--widget__error-ring)}.search-error{background:var(--widget__bg-error);box-shadow:inherit;display:none;left:0;padding:.5em;position:absolute;top:100%;white-space:normal;width:100%;word-break:break-word;z-index:1}.pce-error:focus-within .search-error{display:block}button.pce-close{border-radius:.3em;display:grid;height:1.3em;margin-left:auto;place-items:center;width:1.3em}.pce-close:before,.pce-expand:before,.pce-find button:before{background:currentColor;content:"";height:1.2em;opacity:.75}.pce-close:before{clip-path:polygon(50% 44.34%,0 74.34%,9.43% 80%,9.43% 20%,0 25.66%,50% 55.66%,100% 25.66%,90.57% 20%,50% 44.34%,9.43% 20%,9.43% 80%,50% 55.66%,90.57% 80%,100% 74.34%);width:.72em}.prism-search>div{grid-gap:.25em;display:grid;gap:.25em;width:20em;width:var(--search-width,20em)}button.pce-expand{border-radius:.25em;display:grid;margin:-.15em;place-items:center}.pce-readonly .pce-expand,.pce-readonly .pce-replace,[aria-expanded=false]+div .pce-replace{display:none}.pce-expand[aria-expanded=true]:before{transform:rotate(180deg)}.pce-expand:before,.pce-find button:before{clip-path:polygon(50% 28.96%,0 63.96%,10.1% 71.04%,50% 43.11%,89.9% 71.04%,100% 63.96%);width:.84em}button.pce-regex{display:flex}.pce-regex span{align-items:flex-end;display:flex}.pce-regex span:before{background:currentColor;content:"";height:.3em;margin:0 0 .2em .1em;width:.3em}.pce-regex span:after{content:"*";font-size:140%;line-height:0;margin-bottom:.5em}button.pce-in-selection{display:grid;place-items:center}button.pce-whole{position:relative}.pce-whole:after{bottom:.31em;box-shadow:0 0 0 1px;clip-path:inset(1px -1px -1px);content:"";height:.25em;left:.27em;position:absolute;right:.27em}.pce-in-selection:before{background:currentColor;clip-path:polygon(0 16%,80% 16%,80% 24%,0 24%,0 46%,100% 46%,100% 54%,0 54%,0 76%,60% 76%,60% 84%,0 84%);content:"";height:80%;width:90%}.pce-matches span{background:var(--search__bg-find)}.pce-matches :empty{margin:0 -2px;padding:0 2px} +/*# sourceMappingURL=main.29c64a62.css.map*/ \ No newline at end of file diff --git a/docs/static/css/main.29c64a62.css.map b/docs/static/css/main.29c64a62.css.map new file mode 100644 index 0000000..0a1b2a5 --- /dev/null +++ b/docs/static/css/main.29c64a62.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/main.29c64a62.css","mappings":"AAAA,KAKE,kCAAmC,CACnC,iCAAkC,CAJlC,mIAKF,CAEA,KACE,uEAEF,CCZA,KACC,eACD,CAEA,8CAEC,mCAGC,+BAAoC,CADpC,uBAED,CAEA,2BACC,uBACD,CAEA,qCAIC,+BAAoC,CADpC,uBAED,CAEA,4BACC,kCACD,CAEA,0BACC,oBACD,CAEA,2CAKC,+BAAoC,CACpC,2BAAgC,CAFhC,uBAGD,CAEA,0EAEC,uBACD,CAEA,YAGC,2BACD,CAEA,mBAEC,qBAAyB,CADzB,UAED,CAEA,wBAEC,uBACD,CACD,CAEA,+CAQC,kDACC,kCAAuC,CACvC,oBACD,CAEA,4BACC,kCACD,CAEA,YAGC,2BACD,CAEA,GACC,iBAAkB,CAClB,qBACD,CAEA,SACC,qBACD,CAEA,IACC,kCAAoC,CACpC,mCAAqC,CACrC,UACD,CAEA,4BACC,UACD,CAEA,mBAEC,wBAAyB,CADzB,UAED,CAEA,wBAEC,uBACD,CACD,CAEA,oBACC,UACD,CAEA,kDAGC,qBAAyB,CADzB,aAED,CAEA,wCAGC,+BAAoC,CADpC,uBAED,CAEA,iBACC,qBAAuB,CACvB,qBACD,CAEA,qBACC,kCAAoC,CACpC,wBAA0B,CAC1B,oBAAuB,CAEvB,yBAA2B,CAD3B,eAED,CAEA,gBACC,qBACD,CAEA,IACC,6BAA+B,CAC/B,6BACD,CAEA,SACC,UACD,CAEA,oDACC,YACD,CAEA,0DACC,oBAAqB,CACrB,iBACD,CAEA,2BAKC,6BAA+B,CAF/B,2BAA6B,CAC7B,wBAA0B,CAF1B,wBAID,CAEA,mBACC,4BACD,CAEA,uCACC,sBACD,CAEA,6BAEC,yBAA2B,CAD3B,sBAED,CAEA,0BACC,uBACD,CAEA,gBACC,oBACD,CAEA,SAEC,aAAc,CADd,wBAED,CAEA,cAEC,aAAc,CAGd,eAAgB,CADhB,eAED,CAEA,cAEC,0BAA4B,CAD5B,uBAED,CAEA,UACC,mBACD,CAEA,QAGC,iBAAkB,CAClB,mBAAoB,CACpB,iBAAkB,CAJlB,iBAAkB,CAKlB,OAAQ,CACR,0BAA2B,CAL3B,qBAMD,CAEA,cAEC,kBAAmB,CADnB,YAAa,CAEb,sBACD,CAEA,UACC,UACD,CAEA,OACC,SACD,CAEA,aACC,yBACD,CAEA,SACC,qBACD,CAEA,UACC,0BACD,CAEA,eACC,aACD,CAEA,+CACC,eACC,aACD,CACD,CAGA,aACC,aACD,CAEA,aACC,WACD,CAEA,aACC,YACD,CAEA,aACC,WACD,CAEA,aACC,cACD,CAEA,qBACC,aACD,CAEA,aACC,aACD,CAEA,aACC,aACD,CAEA,sCAEC,aACD,CAEA,kBACC,aACD,CAEA,oBACC,aACD,CAEA,wDAGC,aACD,CAEA,mBAEC,cAAe,CACf,WAAY,CACZ,0BAA4B,CAH5B,mBAAoB,CAIpB,iBACD,CAEA,yBACC,YAAa,CACb,iBACD,CAEA,gCACC,oBACD,CAEA,oBAEC,gBAAiB,CADjB,sBAED,CAEA,2BACC,YACD,CAQA,0CACC,iBAAkB,CAElB,eAAgB,CADhB,sBAED,CAEA,uBAEC,cAID,CAEA,4CAPC,iBAAkB,CAGlB,eAAgB,CADhB,sBAAuB,CAEvB,kBASD,CANA,qBAEC,UAID,CAEA,0BACC,oBACD,CAEA,mBAQC,kBAAmB,CAJnB,qBAAyB,CAEzB,WAAY,CAGZ,6BAA8B,CAP9B,cAAe,CACf,KAAM,CAFN,WASD,CAEA,kCALC,YAAa,CAFb,UAUD,CAEA,UAGC,qBAAyB,CACzB,aAAiB,CACjB,yBAA0B,CAH1B,YAAgB,CADhB,gBAAiB,CAOjB,kBAAmB,CADnB,WAED,CAMA,iBAEC,0BAAyC,CADzC,eAED,CAEA,eACC,YAAa,CAEb,cAAe,CADf,UAED,CAEA,gBACC,iBACD,CAEA,6BAGC,uBAA4B,CAF5B,YAAa,CACb,UAED,CAEA,eACC,iBACD,CAEA,mBAEC,4BAA8B,CAD9B,mBAED,CAEA,sBAEC,iBAAkB,CADlB,mBAED,CAQA,iDACC,uBACD,CAEA,+CACC,oCACC,uBACD,CAEA,2CACC,oBACD,CACD,CAEA,8CACC,2CACC,uBACD,CACD,CAEA,iEACC,uBACD,CAEA,2BAEC,0BAA4B,CAD5B,uBAED,CAEA,kBACC,wBAAyB,CAGzB,YAAa,CAFb,kBAAmB,CACnB,mBAED,CAEA,mBAIC,qBAAyB,CADzB,QAAS,CAGT,WAAY,CAJZ,cAAe,CAGf,UAAW,CAJX,UAQD,CAEA,2CAHC,kBAAmB,CADnB,YAOD,CAEA,uBAEC,aAAc,CADd,kBAED,CAEA,cAEC,aAAiB,CACjB,eAAgB,CAFhB,iBAGD,CAEA,wBAEC,kBAAmB,CADnB,YAED,CAEA,cAEC,cAAe,CADf,kBAED,CAEA,eAEC,aAAiB,CAKjB,cAAe,CAJf,UAAW,CAEX,iBAAkB,CAClB,eAAgB,CAEhB,gBAAiB,CAPjB,qBAAsB,CAGtB,qBAKD,CAEA,8JAWC,aAAiB,CADjB,cAAe,CAFf,UAAW,CAIX,yBAA2B,CAH3B,iBAAkB,CAIlB,aAAc,CACd,iBACD,CAEA,sBACC,kBAAmB,CACnB,SACD,CAEA,4BACC,SACD,CAEA,sEAIC,cACD,CAEA,gBACC,UACD,CAEA,6CAEC,iBACD,CAEA,cACC,qBACD,CAEA,iBAEC,WAAY,CACZ,yBAA2B,CAF3B,mCAGD,CAEA,oDAEC,mCACD,CAEA,6BACC,wBACD,CAEA,8BAQC,4CAAoD,CAFpD,0CAAkD,CAClD,2CAAmD,CALnD,iBAAkB,CADlB,iBAED,CAQA,mEAIC,aAAiB,CACjB,cAAe,CAFf,iBAAkB,CAIlB,iBAAkB,CADlB,UAED,CAEA,wFAGC,oBAAqB,CACrB,mBACD,CAEA,kBAEC,cAAe,CADf,iBAAkB,CAGlB,iBAAkB,CADlB,SAED,CAEA,yBAEC,qBAAuB,CACvB,mBAAoB,CAFpB,aAGD,CAEA,8CACC,yBAEC,wBAA4B,CAC5B,mBAAoB,CAFpB,UAGD,CACD,CAEA,kCAGC,yBAA2B,CAD3B,QAED,CAEA,gBACC,UACD,CAEA,kBACC,aAAiB,CACjB,kBACD,CAEA,gBACC,SACD,CAEA,yBACC,kBAAwB,CACxB,qBACD,CAUA,aACC,QAAO,CAEP,qBAAyB,CADzB,iBAED,CAEA,oBAEC,kBAAmB,CADnB,eAED,CAEA,kCAKC,kCAA4C,CAD5C,WAAY,CAFZ,cAAe,CACf,QAAS,CAGT,yBAA0B,CAL1B,UAMD,CAEA,+CAEC,kCACC,kCACD,CACD,CAEA,sCACC,mBACD,CAEA,cACC,YAAa,CAEb,WAAY,CAEZ,aAAc,CAHd,UAID,CAEA,mBACC,iBAAkB,CAClB,iBAAkB,CAClB,UAID,CAEA,sCAGC,cAAe,CADf,iBAAkB,CAElB,cACD,CAEA,sBACC,eACD,CAEA,8CACC,sBACC,UACD,CACD,CAEA,6BAIC,YAAa,CAHb,gBAAiB,CAIjB,wBACD,CAEA,oBAGC,uBAAwB,CACxB,YAAa,CACb,qBAAsB,CAHtB,aAAc,CADd,mBAKD,CAEA,2BAEC,cAAe,CADf,gBAED,CAEA,kCACC,kBACD,CAEA,+BAEC,WAAY,CADZ,UAED,CAEA,wBACC,QAAe,CACf,UACD,CAEA,2BACC,aACD,CAEA,qBAEC,YAAa,CACb,gBAAiB,CAFjB,iBAGD,CAEA,0BACC,YACD,CAEA,oCACC,qBAAwB,CACxB,oBACD,CAEA,iCAIC,kBAAmB,CADnB,YAAa,CAGb,WAAY,CADZ,qBAAsB,CAJtB,iBAAkB,CAClB,gBAKD,CAEA,uBAEC,wBAAyB,CADzB,WAAY,CAEZ,UACD,CAEA,mCACC,wBACD,CAEA,sBAEC,gBAAiB,CADjB,iBAAkB,CAElB,kBACD,CAEA,cACC,cAAe,CACf,YACD,CAEA,qBACC,kBACD,CAOA,mBACC,WACD,CAEA,eAIC,yCAA8C,CAH9C,iBAAkB,CAElB,eAAgB,CADhB,UAGD,CAEA,qBACC,gBAAiB,CAKjB,sBAAuB,CADvB,eAAgB,CADhB,eAAgB,CAFhB,iBAAkB,CAClB,kBAID,CAEA,gBACC,yCACD,CAEA,4EAIC,YACD,CAEA,wGAIC,aAAc,CACd,qBACD,CAEA,wGAOC,+BAAsC,CACtC,uBAAwB,CAFxB,4BAAmC,CAInC,cAAe,CALf,QAAS,CAIT,gCAAkC,CALlC,OAOD,CAEA,oIAMC,6BAAoC,CACpC,8BAAqC,CACrC,sBAAuB,CAHvB,QAAS,CADT,OAKD,CAMA,iCACC,cACD,CAEA,0BACC,0BAA2B,CAC3B,eACD,CAEA,qBAGC,WAAY,CAFZ,kBAAmB,CACnB,kBAAmB,CAEnB,WACD,CAEA,6BAEC,WAAY,CADZ,WAED,CAEA,4BACC,WAAY,CACZ,UACD,CAEA,oBACC,WACD,CAEA,2DAEC,UACD,CAEA,8BACC,YACD,CAEA,oBACC,WACD,CAEA,uCAEC,iBACD,CAEA,cAEC,kBAAmB,CADnB,YAAa,CAEb,sBACD,CAEA,oGAMC,qBAAyB,CAEzB,YAAkB,CADlB,UAED,CAEA,+CAEC,oGAMC,qBACD,CACD,CAEA,kBACC,cACD,CAEA,kBACC,eACD,CAEA,iBACC,eACD,CAEA,eACC,cACD,CAEA,gFAEC,0BACD,CAGA,kCAEC,0BAA2B,CAD3B,eAED,CAEA,qCAEC,0BAA2B,CAD3B,eAED,CAEA,wGAIC,WAAY,CADZ,eAED,CAEA,eACC,UACD,CAEA,uBACC,kBACD,CAEA,6BAEC,SAAU,CADV,UAED,CAEA,0CACC,kBACD,CAEA,iCAEC,wBAA0B,CAD1B,qBAED,CAEA,sBAEC,oBAAqB,CADrB,kBAED,CAEA,6FAGC,kBAAmB,CADnB,YAAa,CAEb,sBACD,CAEA,4BACC,SACD,CAEA,qBAKC,aAAc,CAJd,cACD,CAMA,oCACC,kBACD,CAEA,oCACC,oBACD,CAEA,oBACC,aACD;AC7iCA;;;EAGE,CACF,6BAME,iCAAkC,CAClC,kCAAmC,CAGnC,4BAAoB,CAFpB,oBAAqB,CACrB,iBAAkB,CAClB,mBAAoB,CAEpB,aAAc,CADd,mBACgB,CAElB,OACE,mBAAoB,CACpB,iBAAmB,CACnB,uBAA0B,CAE5B,OACE,eAAkB,CAEpB,OACE,gBAAmB,CAErB,OACE,aAAgB,CAElB,OACE,aAAgB,CAElB,OACE,aAAgB,CAElB,OACE,aAAgB,CAElB,OACE,aAAgB,CAElB,OACE,aAAgB,CAElB,OACE,aAAgB,CAElB,OACE,aAAgB,CAElB,OACE,aAAgB,CAElB,QACE,cAAiB,CAEnB,OACE,iBAAkB,CAClB,YAAe,CAEjB,OACE,oBAAqB,CACrB,iBAAkB,CAClB,cAAiB,CACjB,UACE,iBAAoB,CAExB,OACE,SAAU,CAIV,mBAAoB,CAHpB,iBAAkB,CAClB,iBAAkB,CAClB,SACsB,CAExB,WACE,uBAAyB,CACzB,kBAAmB,CACnB,wBAA2B,CAE7B,cACE,UAAa,CAEf,eACE,WAAc,CAEhB,yFAKE,iBAAoB,CAEtB,8FAKE,gBAAmB,CAErB,SAEU,oCAAuC,CAEjD,UAEU,sCAAyC,CAUnD,mBACE,GAEU,sBAAyB,CACnC,GAEU,uBAA2B,CAAE,CAEzC,cACE,qEAAsE,CAE9D,uBAA0B,CAEpC,eACE,qEAAsE,CAE9D,wBAA2B,CAErC,eACE,qEAAsE,CAE9D,wBAA2B,CAErC,oBACE,+EAAgF,CAExE,oBAAyB,CAEnC,kBAGU,oBAAyB,CAEnC,qEAJE,+EAOkC,CAHpC,mDAGU,mBAA0B,CAEpC,oIAOU,WAAc,CAExB,UACE,oBAAqB,CACrB,UAAW,CACX,eAAgB,CAChB,iBAAkB,CAClB,qBAAsB,CACtB,WAAc,CAEhB,0BAEE,MAAO,CACP,iBAAkB,CAClB,iBAAkB,CAClB,UAAa,CAEf,aACE,mBAAsB,CAExB,aACE,aAAgB,CAElB,YACE,UAAa,CAIf,iBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,qCACE,eAAkB,CAEpB,cACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,+CACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,iCACE,eAAkB,CAEpB,iCACE,eAAkB,CAEpB,kCACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,uCACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,cACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,kCACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,gCACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,kCACE,eAAkB,CAEpB,kCACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,mCACE,eAAkB,CAEpB,kCACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,qCACE,eAAkB,CAEpB,0CACE,eAAkB,CAEpB,kCACE,eAAkB,CAEpB,iCACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,gCACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,oCACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,gCACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,kCACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,cACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,gCACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,iCACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,cACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,gCACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,gCACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,gCACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,cACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,mCACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,cACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,gCACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,iCACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,cACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,sCACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,8BACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,6BACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,cACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,yBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,cACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,2BACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,eACE,eAAkB,CAEpB,gCACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,+BACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,qBACE,eAAkB,CAEpB,4BACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,sBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,uBACE,eAAkB,CAEpB,wBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,kBACE,eAAkB,CAEpB,gCACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,gBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,oBACE,eAAkB,CAEpB,iBACE,eAAkB,CAEpB,mBACE,eAAkB,CAEpB,0BACE,eAAkB,CAEpB,iBACE,eAAkB,CAYpB,mDAGE,QAGa,CACf,WAIE,kBAAmB,CAHnB,kCAAoC,CACpC,iBAAkB,CAClB,eAAgB,CAEhB,6DAAyC,CACzC,uZAAqT,CAEvT,KACE,kCACkB,CACpB,WAIE,kBAAmB,CAHnB,gCAAkC,CAClC,iBAAkB,CAClB,eAAgB,CAEhB,8DAA0C,CAC1C,4ZAA0T,CAE5T,UATE,eAWkB,CACpB,WAIE,kBAAmB,CAHnB,gCAAkC,CAClC,iBAAkB,CAClB,eAAgB,CAEhB,4DAAwC,CACxC,kZAAgT,CAElT,cAVE,gCAakB,CAHpB,SAGE,eAAkB;;ACvgJpB;;;;;ECKE,CCJF,MAGI,cAAc,CAAd,gBAAc,CAAd,gBAAc,CAAd,cAAc,CAAd,aAAc,CAAd,gBAAc,CAAd,gBAAc,CAAd,eAAc,CAAd,cAAc,CAAd,cAAc,CAAd,YAAc,CAAd,cAAc,CAAd,mBAAc,CAId,iBAAc,CAAd,mBAAc,CAAd,iBAAc,CAAd,cAAc,CAAd,iBAAc,CAAd,gBAAc,CAAd,eAAc,CAAd,cAAc,CAId,iBAAiC,CAAjC,qBAAiC,CAAjC,qBAAiC,CAAjC,qBAAiC,CAAjC,sBAAiC,CAKnC,mMAAyB,CACzB,sGDiBF,CEjBA,iBAGE,qBFoBF,CEjBA,KAGE,6BAA8B,CAC9B,yCCXa,CDQb,sBAAuB,CACvB,gBFsBF,CEdA,sEACE,aFiBF,CEPA,KAQE,qBC9Ca,CD4Cb,aCnCgB,CD+BhB,wKCyOiN,CCzJ7M,cAtCY,CFxChB,eCkP+B,CDjP/B,eCsP+B,CD1P/B,QAAS,CAMT,eFWF,CAEA,0CECE,mBFCF,CEQA,GACE,kBAAuB,CACvB,QAAS,CACT,gBFLF,CEkBA,kBAEE,mBCoNuC,CDrNvC,YFdF,CEsBA,EAEE,kBCuF8B,CDxF9B,YFlBF,CE8BA,sCAKE,eAAgB,CADhB,WAAY,CAFZ,yBAA0B,CAC1B,wCAAiC,CAAjC,gCAAiC,CAGjC,qCAA8B,CAA9B,6BF3BF,CE8BA,QAEE,iBAAkB,CAClB,mBF3BF,CE8BA,iBALE,kBFlBF,CEuBA,SAGE,YF1BF,CE8BA,wBAIE,eF3BF,CE8BA,GACE,eF3BF,CE8BA,GACE,mBAAoB,CACpB,aF3BF,CE8BA,WACE,eF3BF,CE8BA,SAEE,kBF3BF,CE8BA,MExFI,aJ8DJ,CEmCA,QEjGI,aAAW,CFqGb,aAAc,CAFd,iBAAkB,CAGlB,sBFhCF,CEmCA,IAAM,aF/BN,CEgCA,IAAM,SF5BN,CEmCA,EAGE,wBAA6B,CAF7B,aCtJe,CDuJf,oBF/BF,CKhJE,QHmLE,aCX8D,CDY9D,yBF/BJ,CKrJE,kCHkME,aAAc,CACd,oBFpCJ,CE6CA,kBAIE,sFC6DgH,CCjN9G,aJ2GJ,CE6CA,IAIE,kBAAmB,CAFnB,YAAa,CAIb,aF7CF,CEqDA,OAEE,eFnDF,CE2DA,IAEE,iBFxDF,CE2DA,QAJE,qBFlDF,CEsDA,IAGE,eFzDF,CEkEA,MACE,wBF/DF,CEkEA,QAKE,mBAAoB,CAFpB,aCnQgB,CDkQhB,qBCmFkC,CDpFlC,kBCoFkC,CDjFlC,eF9DF,CEkEA,GAGE,kBFjEF,CEyEA,MAEE,oBAAqB,CACrB,mBFvEF,CE6EA,OAEE,eF3EF,CEkFA,aACE,kBAAmB,CACnB,yCF/EF,CEkFA,sCAME,mBAAoB,CErPlB,iBAAW,CFuPb,mBAAoB,CAHpB,QF5EF,CEkFA,aAEE,gBF/EF,CEkFA,cAEE,mBF/EF,CEqFA,OACE,gBFlFF,CEyFA,gDAIE,yBFtFF,CE2FE,4GAKI,cFzFN,CE+FA,wHAKE,iBAAkB,CADlB,SF3FF,CE+FA,uCAEE,qBAAsB,CACtB,SF5FF,CEgGA,+EASE,0BFlGF,CEqGA,SACE,aAAc,CAEd,eFnGF,CEsGA,SAUE,QAAS,CADT,QAAS,CAHT,WAAY,CAEZ,SFvGF,CE8GA,OAQE,aAAc,CAPd,aAAc,CE7RV,gBAtCY,CFyUhB,mBAAoB,CAFpB,mBAAoB,CAFpB,cAAe,CACf,SAAU,CAKV,kBAAmB,CAPnB,UFpGF,CE8GA,SACE,sBF3GF,CAEA,kFE+GE,WF5GF,CAEA,cEmHE,uBAAwB,CADxB,mBF/GF,CAEA,yCEsHE,uBFpHF,CE4HA,6BAEE,yBAA0B,CAD1B,YFxHF,CEgIA,OACE,oBF7HF,CEgIA,QAEE,cAAe,CADf,iBF5HF,CEgIA,SACE,YF7HF,CAEA,SEiIE,sBF/HF,CM3VA,0CAIE,eHyS+B,CGxS/B,eHyS+B,CG5S/B,mBNgWF,CMzVA,OFgHM,gBJ6ON,CM5VA,OF+GM,cJiPN,CM/VA,OF8GM,iBJqPN,CMlWA,OF6GM,gBJyPN,CMrWA,OF4GM,iBJ6PN,CMxWA,OF2GM,cJiQN,CM1WA,MFyGM,iBAtCY,CEjEhB,eN6WF,CMzWA,WFmGM,cJ4QN,CM1WA,sBAHE,eH8R+B,CG7R/B,eNkXF,CMhXA,WF8FM,gBJkRN,CM3WA,WFyFM,gBJwRN,CM5WA,sBAHE,eHsR+B,CGrR/B,eNoXF,CMlXA,WFoFM,gBJ8RN,CElVA,GIlBE,QAAS,CACT,8BHzCa,CGuCb,kBHgFW,CGjFX,eN6WF,CMlWA,aFMI,aAAW,CEHb,eNqWF,CMlWA,WAGE,wBH8QmC,CG/QnC,YNsWF,CMxVA,4BCnFE,eAAgB,CADhB,cPsbF,CM/VA,kBACE,oBNkWF,CMnWA,mCAII,kBNmWJ,CMzVA,YFjCI,aAAW,CEmCb,wBN4VF,CMxVA,YFgBM,iBAtCY,CEuBhB,kBN4VF,CMxVA,mBAGE,aH1GgB,CGwGhB,aAAc,CF7CZ,aJ0YJ,CM9VA,0BAMI,oBN4VJ,CQzcA,0BCCE,WAAY,CAHZ,cTydF,CQvdA,eAEE,qBLRa,CKSb,wBLNgB,COLd,oBP6OgC,CKpOlC,cRsdF,CQxcA,QAEE,oBR0cF,CQvcA,YAEE,aAAc,CADd,mBR2cF,CQvcA,gBAEE,aL3BgB,CC2Dd,aJ0aJ,CWjfA,KAGE,oBAAqB,CADrB,aRoCe,CCiCb,eJgbJ,CWjfE,OACE,aXofJ,CW/eA,IAIE,wBRDgB,COXd,mBP+O+B,CQpOjC,URTa,CCiEX,eAAW,CO1Db,mBXsfF,CWvfA,QP2DI,cAAW,COhDX,eR4Q6B,CQ9Q7B,SXofJ,CE1SA,IS/LE,aRjBgB,CQehB,aAAc,CPyCZ,eJwcJ,CWlfA,SAQI,aAAc,CPkCd,iBAAW,COjCX,iBX+eJ,CW1eA,gBACE,gBR4jCuC,CQ3jCvC,iBX6eF,CYrhBE,WCGA,gBAAiB,CADjB,iBAAkB,CADlB,iBAAyB,CADzB,kBAA0B,CAD1B,Ub8hBF,CcveI,yBFtDF,WCWI,ebuhBJ,CACF,Cc7eI,yBFtDF,WCWI,eb6hBJ,CACF,CcnfI,yBFtDF,WCWI,ebmiBJ,CACF,CczfI,0BFtDF,WCWI,gBbyiBJ,CACF,CY/iBE,yECHA,gBAAiB,CADjB,iBAAkB,CADlB,iBAAyB,CADzB,kBAA0B,CAD1B,Ub8jBF,CcvgBI,yBFrCE,yBACE,eZgjBN,CACF,Cc7gBI,yBFrCE,uCACE,eZsjBN,CACF,CcnhBI,yBFrCE,qDACE,eZ4jBN,CACF,CczhBI,0BFrCE,mEACE,gBZkkBN,CACF,CY/iBE,KCrBA,YAAa,CACb,cAAe,CAEf,iBAAyB,CADzB,kBbykBF,CYhjBE,YAEE,aAAc,CADd,cZojBJ,CYrjBE,2CAOI,cAAe,CADf,eZqjBN,CetmBE,sqBAIE,iBAAyB,CADzB,kBAA0B,CAF1B,iBAAkB,CAClB,UfgnBJ,Ce3lBM,KACE,YAAa,CACb,WAAY,CACZ,cf8lBR,Ce1lBQ,cF4BJ,aAAuB,CACvB,cbkkBJ,Ce/lBQ,cF4BJ,YAAuB,CACvB,abukBJ,CepmBQ,cF4BJ,mBAAuB,CACvB,oBb4kBJ,CezmBQ,cF4BJ,YAAuB,CACvB,abilBJ,Ce9mBQ,cF4BJ,YAAuB,CACvB,abslBJ,CennBQ,cF4BJ,mBAAuB,CACvB,oBb2lBJ,CennBM,UFMJ,aAAc,CAEd,cAAe,CADf,UbknBF,CepnBQ,OFPN,kBAAsC,CAItC,mBb4nBF,CeznBQ,OFPN,mBAAsC,CAItC,oBbioBF,Ce9nBQ,OFPN,YAAsC,CAItC,absoBF,CenoBQ,OFPN,mBAAsC,CAItC,oBb2oBF,CexoBQ,OFPN,mBAAsC,CAItC,oBbgpBF,Ce7oBQ,OFPN,YAAsC,CAItC,abqpBF,CelpBQ,OFPN,mBAAsC,CAItC,oBb0pBF,CevpBQ,OFPN,mBAAsC,CAItC,oBb+pBF,Ce5pBQ,OFPN,YAAsC,CAItC,aboqBF,CejqBQ,QFPN,mBAAsC,CAItC,oBbyqBF,CetqBQ,QFPN,mBAAsC,CAItC,oBb8qBF,Ce3qBQ,QFPN,aAAsC,CAItC,cbmrBF,Ce3qBM,aAAwB,Qf+qB9B,Ce7qBM,YAAuB,QfirB7B,Ce9qBQ,SAAwB,OfkrBhC,CelrBQ,SAAwB,OfsrBhC,CetrBQ,SAAwB,Of0rBhC,Ce1rBQ,SAAwB,Of8rBhC,Ce9rBQ,SAAwB,OfksBhC,CelsBQ,SAAwB,OfssBhC,CetsBQ,SAAwB,Of0sBhC,Ce1sBQ,SAAwB,Of8sBhC,Ce9sBQ,SAAwB,OfktBhC,CeltBQ,SAAwB,OfstBhC,CettBQ,UAAwB,Qf0tBhC,Ce1tBQ,UAAwB,Qf8tBhC,Ce9tBQ,UAAwB,QfkuBhC,Ce5tBU,UFRR,qBbwuBF,CehuBU,UFRR,sBb4uBF,CepuBU,UFRR,ebgvBF,CexuBU,UFRR,sBbovBF,Ce5uBU,UFRR,sBbwvBF,CehvBU,UFRR,eb4vBF,CepvBU,UFRR,sBbgwBF,CexvBU,UFRR,sBbowBF,Ce5vBU,UFRR,ebwwBF,CehwBU,WFRR,sBb4wBF,CepwBU,WFRR,sBbgxBF,Cc3wBI,yBC9BE,QACE,YAAa,CACb,WAAY,CACZ,cf6yBN,CezyBM,iBF4BJ,aAAuB,CACvB,cbgxBF,Ce7yBM,iBF4BJ,YAAuB,CACvB,aboxBF,CejzBM,iBF4BJ,mBAAuB,CACvB,oBbwxBF,CerzBM,iBF4BJ,YAAuB,CACvB,ab4xBF,CezzBM,iBF4BJ,YAAuB,CACvB,abgyBF,Ce7zBM,iBF4BJ,mBAAuB,CACvB,oBboyBF,Ce5zBI,aFMJ,aAAc,CAEd,cAAe,CADf,Ub0zBA,Ce5zBM,UFPN,kBAAsC,CAItC,mBbm0BA,Ceh0BM,UFPN,mBAAsC,CAItC,oBbu0BA,Cep0BM,UFPN,YAAsC,CAItC,ab20BA,Cex0BM,UFPN,mBAAsC,CAItC,oBb+0BA,Ce50BM,UFPN,mBAAsC,CAItC,oBbm1BA,Ceh1BM,UFPN,YAAsC,CAItC,abu1BA,Cep1BM,UFPN,mBAAsC,CAItC,oBb21BA,Cex1BM,UFPN,mBAAsC,CAItC,oBb+1BA,Ce51BM,UFPN,YAAsC,CAItC,abm2BA,Ceh2BM,WFPN,mBAAsC,CAItC,oBbu2BA,Cep2BM,WFPN,mBAAsC,CAItC,oBb22BA,Cex2BM,WFPN,aAAsC,CAItC,cb+2BA,Cev2BI,gBAAwB,Qf02B5B,Cex2BI,eAAuB,Qf22B3B,Cex2BM,YAAwB,Of22B9B,Ce32BM,YAAwB,Of82B9B,Ce92BM,YAAwB,Ofi3B9B,Cej3BM,YAAwB,Ofo3B9B,Cep3BM,YAAwB,Ofu3B9B,Cev3BM,YAAwB,Of03B9B,Ce13BM,YAAwB,Of63B9B,Ce73BM,YAAwB,Ofg4B9B,Ceh4BM,YAAwB,Ofm4B9B,Cen4BM,YAAwB,Ofs4B9B,Cet4BM,aAAwB,Qfy4B9B,Cez4BM,aAAwB,Qf44B9B,Ce54BM,aAAwB,Qf+4B9B,Cez4BQ,aFRR,abo5BA,Ce54BQ,aFRR,qBbu5BA,Ce/4BQ,aFRR,sBb05BA,Cel5BQ,aFRR,eb65BA,Cer5BQ,aFRR,sBbg6BA,Cex5BQ,aFRR,sBbm6BA,Ce35BQ,aFRR,ebs6BA,Ce95BQ,aFRR,sBby6BA,Cej6BQ,aFRR,sBb46BA,Cep6BQ,aFRR,eb+6BA,Cev6BQ,cFRR,sBbk7BA,Ce16BQ,cFRR,sBbq7BA,CACF,Ccj7BI,yBC9BE,QACE,YAAa,CACb,WAAY,CACZ,cfm9BN,Ce/8BM,iBF4BJ,aAAuB,CACvB,cbs7BF,Cen9BM,iBF4BJ,YAAuB,CACvB,ab07BF,Cev9BM,iBF4BJ,mBAAuB,CACvB,oBb87BF,Ce39BM,iBF4BJ,YAAuB,CACvB,abk8BF,Ce/9BM,iBF4BJ,YAAuB,CACvB,abs8BF,Cen+BM,iBF4BJ,mBAAuB,CACvB,oBb08BF,Cel+BI,aFMJ,aAAc,CAEd,cAAe,CADf,Ubg+BA,Cel+BM,UFPN,kBAAsC,CAItC,mBby+BA,Cet+BM,UFPN,mBAAsC,CAItC,oBb6+BA,Ce1+BM,UFPN,YAAsC,CAItC,abi/BA,Ce9+BM,UFPN,mBAAsC,CAItC,oBbq/BA,Cel/BM,UFPN,mBAAsC,CAItC,oBby/BA,Cet/BM,UFPN,YAAsC,CAItC,ab6/BA,Ce1/BM,UFPN,mBAAsC,CAItC,oBbigCA,Ce9/BM,UFPN,mBAAsC,CAItC,oBbqgCA,CelgCM,UFPN,YAAsC,CAItC,abygCA,CetgCM,WFPN,mBAAsC,CAItC,oBb6gCA,Ce1gCM,WFPN,mBAAsC,CAItC,oBbihCA,Ce9gCM,WFPN,aAAsC,CAItC,cbqhCA,Ce7gCI,gBAAwB,QfghC5B,Ce9gCI,eAAuB,QfihC3B,Ce9gCM,YAAwB,OfihC9B,CejhCM,YAAwB,OfohC9B,CephCM,YAAwB,OfuhC9B,CevhCM,YAAwB,Of0hC9B,Ce1hCM,YAAwB,Of6hC9B,Ce7hCM,YAAwB,OfgiC9B,CehiCM,YAAwB,OfmiC9B,CeniCM,YAAwB,OfsiC9B,CetiCM,YAAwB,OfyiC9B,CeziCM,YAAwB,Of4iC9B,Ce5iCM,aAAwB,Qf+iC9B,Ce/iCM,aAAwB,QfkjC9B,CeljCM,aAAwB,QfqjC9B,Ce/iCQ,aFRR,ab0jCA,CeljCQ,aFRR,qBb6jCA,CerjCQ,aFRR,sBbgkCA,CexjCQ,aFRR,ebmkCA,Ce3jCQ,aFRR,sBbskCA,Ce9jCQ,aFRR,sBbykCA,CejkCQ,aFRR,eb4kCA,CepkCQ,aFRR,sBb+kCA,CevkCQ,aFRR,sBbklCA,Ce1kCQ,aFRR,ebqlCA,Ce7kCQ,cFRR,sBbwlCA,CehlCQ,cFRR,sBb2lCA,CACF,CcvlCI,yBC9BE,QACE,YAAa,CACb,WAAY,CACZ,cfynCN,CernCM,iBF4BJ,aAAuB,CACvB,cb4lCF,CeznCM,iBF4BJ,YAAuB,CACvB,abgmCF,Ce7nCM,iBF4BJ,mBAAuB,CACvB,oBbomCF,CejoCM,iBF4BJ,YAAuB,CACvB,abwmCF,CeroCM,iBF4BJ,YAAuB,CACvB,ab4mCF,CezoCM,iBF4BJ,mBAAuB,CACvB,oBbgnCF,CexoCI,aFMJ,aAAc,CAEd,cAAe,CADf,UbsoCA,CexoCM,UFPN,kBAAsC,CAItC,mBb+oCA,Ce5oCM,UFPN,mBAAsC,CAItC,oBbmpCA,CehpCM,UFPN,YAAsC,CAItC,abupCA,CeppCM,UFPN,mBAAsC,CAItC,oBb2pCA,CexpCM,UFPN,mBAAsC,CAItC,oBb+pCA,Ce5pCM,UFPN,YAAsC,CAItC,abmqCA,CehqCM,UFPN,mBAAsC,CAItC,oBbuqCA,CepqCM,UFPN,mBAAsC,CAItC,oBb2qCA,CexqCM,UFPN,YAAsC,CAItC,ab+qCA,Ce5qCM,WFPN,mBAAsC,CAItC,oBbmrCA,CehrCM,WFPN,mBAAsC,CAItC,oBburCA,CeprCM,WFPN,aAAsC,CAItC,cb2rCA,CenrCI,gBAAwB,QfsrC5B,CeprCI,eAAuB,QfurC3B,CeprCM,YAAwB,OfurC9B,CevrCM,YAAwB,Of0rC9B,Ce1rCM,YAAwB,Of6rC9B,Ce7rCM,YAAwB,OfgsC9B,CehsCM,YAAwB,OfmsC9B,CensCM,YAAwB,OfssC9B,CetsCM,YAAwB,OfysC9B,CezsCM,YAAwB,Of4sC9B,Ce5sCM,YAAwB,Of+sC9B,Ce/sCM,YAAwB,OfktC9B,CeltCM,aAAwB,QfqtC9B,CertCM,aAAwB,QfwtC9B,CextCM,aAAwB,Qf2tC9B,CertCQ,aFRR,abguCA,CextCQ,aFRR,qBbmuCA,Ce3tCQ,aFRR,sBbsuCA,Ce9tCQ,aFRR,ebyuCA,CejuCQ,aFRR,sBb4uCA,CepuCQ,aFRR,sBb+uCA,CevuCQ,aFRR,ebkvCA,Ce1uCQ,aFRR,sBbqvCA,Ce7uCQ,aFRR,sBbwvCA,CehvCQ,aFRR,eb2vCA,CenvCQ,cFRR,sBb8vCA,CetvCQ,cFRR,sBbiwCA,CACF,Cc7vCI,0BC9BE,QACE,YAAa,CACb,WAAY,CACZ,cf+xCN,Ce3xCM,iBF4BJ,aAAuB,CACvB,cbkwCF,Ce/xCM,iBF4BJ,YAAuB,CACvB,abswCF,CenyCM,iBF4BJ,mBAAuB,CACvB,oBb0wCF,CevyCM,iBF4BJ,YAAuB,CACvB,ab8wCF,Ce3yCM,iBF4BJ,YAAuB,CACvB,abkxCF,Ce/yCM,iBF4BJ,mBAAuB,CACvB,oBbsxCF,Ce9yCI,aFMJ,aAAc,CAEd,cAAe,CADf,Ub4yCA,Ce9yCM,UFPN,kBAAsC,CAItC,mBbqzCA,CelzCM,UFPN,mBAAsC,CAItC,oBbyzCA,CetzCM,UFPN,YAAsC,CAItC,ab6zCA,Ce1zCM,UFPN,mBAAsC,CAItC,oBbi0CA,Ce9zCM,UFPN,mBAAsC,CAItC,oBbq0CA,Cel0CM,UFPN,YAAsC,CAItC,aby0CA,Cet0CM,UFPN,mBAAsC,CAItC,oBb60CA,Ce10CM,UFPN,mBAAsC,CAItC,oBbi1CA,Ce90CM,UFPN,YAAsC,CAItC,abq1CA,Cel1CM,WFPN,mBAAsC,CAItC,oBby1CA,Cet1CM,WFPN,mBAAsC,CAItC,oBb61CA,Ce11CM,WFPN,aAAsC,CAItC,cbi2CA,Cez1CI,gBAAwB,Qf41C5B,Ce11CI,eAAuB,Qf61C3B,Ce11CM,YAAwB,Of61C9B,Ce71CM,YAAwB,Ofg2C9B,Ceh2CM,YAAwB,Ofm2C9B,Cen2CM,YAAwB,Ofs2C9B,Cet2CM,YAAwB,Ofy2C9B,Cez2CM,YAAwB,Of42C9B,Ce52CM,YAAwB,Of+2C9B,Ce/2CM,YAAwB,Ofk3C9B,Cel3CM,YAAwB,Ofq3C9B,Cer3CM,YAAwB,Ofw3C9B,Cex3CM,aAAwB,Qf23C9B,Ce33CM,aAAwB,Qf83C9B,Ce93CM,aAAwB,Qfi4C9B,Ce33CQ,aFRR,abs4CA,Ce93CQ,aFRR,qBby4CA,Cej4CQ,aFRR,sBb44CA,Cep4CQ,aFRR,eb+4CA,Cev4CQ,aFRR,sBbk5CA,Ce14CQ,aFRR,sBbq5CA,Ce74CQ,aFRR,ebw5CA,Ceh5CQ,aFRR,sBb25CA,Cen5CQ,aFRR,sBb85CA,Cet5CQ,aFRR,ebi6CA,Cez5CQ,cFRR,sBbo6CA,Ce55CQ,cFRR,sBbu6CA,CACF,CgB39CA,OAGE,abSgB,CaVhB,kBbkIW,CanIX,UhBg+CF,CgBj+CA,oBAUI,4BbJc,CaEd,cbsVgC,CarVhC,kBhB+9CJ,CgBx+CA,gBAeI,+BbTc,CaQd,qBhB+9CJ,CgB7+CA,mBAmBI,4BhB89CJ,CgBr9CA,0BAGI,ahBu9CJ,CgB98CA,sDAKI,wBhBk9CJ,CgBv9CA,kDAWM,uBhBi9CN,CgB58CA,mGAKI,QhB88CJ,CgBt8CA,yCAEI,0BhBw8CJ,CKvgDE,4BW4EI,iCbvES,CasET,ahBi8CN,CiBnhDE,mDAII,wBjBqhDN,CiBzhDE,uFAYM,oBjBohDR,CiB7gDE,4GASQ,wBjB6gDV,CiBziDE,yDAII,wBjB2iDN,CiB/iDE,+FAYM,oBjB0iDR,CiBniDE,kHASQ,wBjBmiDV,CiB/jDE,mDAII,wBjBikDN,CiBrkDE,uFAYM,oBjBgkDR,CiBzjDE,4GASQ,wBjByjDV,CiBrlDE,0CAII,wBjBulDN,CiB3lDE,2EAYM,oBjBslDR,CiB/kDE,mGASQ,wBjB+kDV,CiB3mDE,mDAII,wBjB6mDN,CiBjnDE,uFAYM,oBjB4mDR,CiBrmDE,4GASQ,wBjBqmDV,CiBjoDE,gDAII,wBjBmoDN,CiBvoDE,mFAYM,oBjBkoDR,CiB3nDE,yGASQ,wBjB2nDV,CiBvpDE,6CAII,wBjBypDN,CiB7pDE,+EAYM,oBjBwpDR,CiBjpDE,sGASQ,wBjBipDV,CiB7qDE,0CAII,wBjB+qDN,CiBnrDE,2EAYM,oBjB8qDR,CiBvqDE,mGASQ,wBjBuqDV,CiBhrDE,yJASQ,iCjBsrDV,CgBxmDA,sBAIM,wBbpGY,CaqGZ,oBbmQqD,CarQrD,UhB2mDN,CgB9mDA,uBAYM,wBblHY,CamHZ,oBblHY,CagHZ,ahBymDN,CgBlmDA,YAEE,wBbpHgB,CamHhB,UhBsmDF,CgBvmDA,mDAOI,oBhBsmDJ,CgB7mDA,2BAWI,QhBsmDJ,CgBjnDA,oDAgBM,0BhBqmDN,CK1uDE,uCW6IM,qCblJO,CaiJP,UhBmmDR,CclrDI,4BEiGA,qBAKI,gCAAiC,CAHjC,aAAc,CAEd,eAAgB,CADhB,UhBslDN,CgBzlDG,qCASK,QhBmlDR,CACF,Cc9rDI,4BEiGA,qBAKI,gCAAiC,CAHjC,aAAc,CAEd,eAAgB,CADhB,UhBkmDN,CgBrmDG,qCASK,QhB+lDR,CACF,Cc1sDI,4BEiGA,qBAKI,gCAAiC,CAHjC,aAAc,CAEd,eAAgB,CADhB,UhB8mDN,CgBjnDG,qCASK,QhB2mDR,CACF,CcttDI,6BEiGA,qBAKI,gCAAiC,CAHjC,aAAc,CAEd,eAAgB,CADhB,UhB0nDN,CgB7nDG,qCASK,QhBunDR,CACF,CgBtoDA,kBAUQ,gCAAiC,CAHjC,aAAc,CAEd,eAAgB,CADhB,UhBqoDR,CgB7oDA,kCAcU,QhBmoDV,CkBhzDA,cAWE,2BAA4B,CAD5B,qBfTa,CeWb,wBfPgB,CONd,oBP6OgC,CenOlC,afDgB,CePhB,aAAc,CdwHV,cAtCY,Cc5EhB,efsR+B,Ce1R/B,iCCuG8D,CDlG9D,ef0R+B,Ce9R/B,sBf4XkC,CiBhY9B,oEjBof4F,CelfhG,UlB8zDF,CoB3zDI,uCFLJ,cEMM,epB+zDJ,CACF,CkBt0DA,0BAsBI,wBAA6B,CAC7B,QlBozDJ,CkB30DA,6BA4BI,WAAkB,CAClB,yBlBmzDJ,CqBz0DE,oBAEE,qBlBRW,CkBSX,oBlBwdsE,CkBldpE,gClBcW,CkBtBb,alBAc,CkBGd,SrB60DJ,CkBx1DA,2BAqCI,af9Bc,CegCd,SlBszDJ,CkB71DA,+CAiDI,wBf9Cc,CegDd,SlB+yDJ,CkB3yDA,qCAQI,qBf9DW,Ce6DX,alByyDJ,CkBnyDA,uCAEE,aAAc,CACd,UlBsyDF,CkB5xDA,gBdfI,iBAAW,CcoBb,ef4M+B,Ce9M/B,eAAgB,CADhB,kCCuB8D,CDxB9D,+BlBmyDF,CkB5xDA,mBdgCM,iBAtCY,CcUhB,efyI+B,Ce3I/B,gCCe8D,CDhB9D,6BlBkyDF,CkB5xDA,mBdyBM,iBAtCY,CciBhB,efmI+B,CerI/B,iCCQ8D,CDT9D,8BlBkyDF,CkBtxDA,wBAQE,wBAA6B,CAE7B,kBAAmC,CAAnC,kBAAmC,CAHnC,af1GgB,CeoGhB,aAAc,CdWV,cAtCY,CcgChB,ef+K+B,CejL/B,eAAgB,CADhB,iBAA2B,CAD3B,UlBiyDF,CkBnyDA,gFAeI,cAAe,CADf,elB0xDJ,CkB7wDA,iBRzII,mBP+O+B,CCrH7B,iBAtCY,CcsDhB,gCC/B8D,CDkC9D,ef2F+B,Ce7F/B,oBlBmxDF,CkB7wDA,iBRjJI,mBP8O+B,CCpH7B,iBAtCY,Cc8DhB,+BCvC8D,CD0C9D,efkF+B,CepF/B,kBlBmxDF,CkBrwDA,8EACE,WlB4wDF,CkBpwDA,YACE,kBlBuwDF,CkBpwDA,WACE,aAAc,CACd,iBlBuwDF,CkB/vDA,UACE,YAAa,CACb,cAAe,CAEf,gBAAyC,CADzC,iBlBmwDF,CkBtwDA,uCASI,gBAAyC,CADzC,iBlBowDJ,CkB1vDA,YAEE,aAAc,CACd,oBf4S6C,Ce9S7C,iBlB+vDF,CkB1vDA,kBAGE,oBfsS6C,CevS7C,gBfwS2C,CezS3C,iBlB+vDF,CkBhwDA,2FAQI,alB6vDJ,CkBzvDA,kBACE,elB4vDF,CkBzvDA,mBAEE,kBAAmB,CADnB,mBAAoB,CAGpB,mBfyR4C,Ce1R5C,clB6vDF,CkBhwDA,qCAWI,aAAc,CADd,qBfoR4C,CerR5C,YAAa,CADb,elB+vDJ,CqBh8DE,gBAKE,alBNa,CkBEb,YAAa,CjB2Bb,aAAW,CiBzBX,iBlB6c0C,CkB9c1C,UrBs8DJ,CqBh8DE,eAWE,0BlBpBa,COtCb,oBP6OgC,CkBpLhC,UlBvDW,CkBiDX,YAAa,CjBuEX,iBAtCY,CiB5Bd,elB2O6B,CkB7O7B,gBAAiB,CAFjB,cAAe,CACf,oBlBmyBqC,CkBxyBrC,iBAAkB,CAClB,QAAS,CACT,SrB48DJ,CqBn+DI,8HAsCE,arBo8DN,CqB1+DI,0DAgDI,2QFpCmI,CEsCnI,wDAA6D,CAD7D,2BAA4B,CAE5B,2DF6BwD,CEpC1D,oBlBjCW,CkBoCT,kCrBo8DR,CqBn/DI,sEAuDI,oBlB5CS,CkB6CT,gCrBg8DR,CqBx/DI,0EAkEI,6EFcwD,CEfxD,kCrB47DR,CqB7/DI,4DA6EI,uiBAA8J,CAJhK,oBlB9DW,CkBiET,qCrBu7DR,CqBngEI,wEAiFI,oBlBtES,CkBuET,gCrBs7DR,CqBxgEI,sGA0FI,arBk7DR,CqB5gEI,kMA+FI,arBm7DR,CqBlhEI,sHAuGI,arB+6DR,CqBthEI,oIA0GM,oBrBg7DV,CqB1hEI,oJC1BA,wBD2I+C,CADzC,oBrB+6DV,CqB/hEI,gJAuHM,gCrB46DV,CqBniEI,4KA2HM,oBrB46DV,CqBviEI,0GAqII,oBrBs6DR,CqB3iEI,sHA0IM,oBlB/HO,CkBgIP,gCrBq6DV,CqBpiEE,kBAKE,alBTa,CkBKb,YAAa,CjB2Bb,aAAW,CiBzBX,iBlB6c0C,CkB9c1C,UrB0iEJ,CqBpiEE,iBAWE,0BlBvBa,COnCb,oBP6OgC,CkBpLhC,UlBvDW,CkBiDX,YAAa,CjBuEX,iBAtCY,CiB5Bd,elB2O6B,CkB7O7B,gBAAiB,CAFjB,cAAe,CACf,oBlBmyBqC,CkBxyBrC,iBAAkB,CAClB,QAAS,CACT,SrBgjEJ,CqBvkEI,8IAsCE,arBwiEN,CqB9kEI,8DAgDI,qUFpCmI,CEsCnI,wDAA6D,CAD7D,2BAA4B,CAE5B,2DF6BwD,CEpC1D,oBlBpCW,CkBuCT,kCrBwiER,CqBvlEI,0EAuDI,oBlB/CS,CkBgDT,gCrBoiER,CqB5lEI,8EAkEI,6EFcwD,CEfxD,kCrBgiER,CqBjmEI,gEA6EI,imBAA8J,CAJhK,oBlBjEW,CkBoET,qCrB2hER,CqBvmEI,4EAiFI,oBlBzES,CkB0ET,gCrB0hER,CqB5mEI,0GA0FI,arBshER,CqBhnEI,kNA+FI,arBuhER,CqBtnEI,0HAuGI,arBmhER,CqB1nEI,wIA0GM,oBrBohEV,CqB9nEI,wJC1BA,wBD2I+C,CADzC,oBrBmhEV,CqBnoEI,oJAuHM,gCrBghEV,CqBvoEI,gLA2HM,oBrBghEV,CqB3oEI,8GAqII,oBrB0gER,CqB/oEI,0HA0IM,oBlBlIO,CkBmIP,gCrBygEV,CkB36DA,aAGE,kBAAmB,CAFnB,YAAa,CACb,kBlB+6DF,CkBj7DA,yBASI,UlB46DJ,CcloEI,yBI6MJ,mBAiBM,sBlB46DJ,CkB77DF,4CAgBM,kBAAmB,CADnB,YAAa,CAGb,elBk7DJ,CkBp8DF,yBAwBM,aAAc,CACd,kBlB26DJ,CkBp8DF,2BAgCM,oBAAqB,CAErB,qBAAsB,CADtB,UlBw6DJ,CkBz8DF,qCAuCM,oBlBq6DJ,CkB58DF,sDA4CM,UlBo6DJ,CkBh9DF,yBAmDM,kBAAmB,CADnB,YAAa,CAEb,sBAAuB,CAEvB,cAAe,CADf,UlBk6DJ,CkBv9DF,+BA0DM,aAAc,CAGd,aAAc,CADd,mBf2LwC,Ce5LxC,YAAa,CAFb,iBlBq6DJ,CkB99DF,6BAiEM,kBAAmB,CACnB,sBlBg6DJ,CkBl+DF,mCAqEM,elBg6DJ,CACF,CuBzuEA,KAUE,wBAA6B,CAC7B,sBAA2C,CbZzC,oBP6OgC,CoBxOlC,apBMgB,CoBFhB,cAAsD,CAPtD,oBAAqB,CnBwHjB,cAtCY,CmBhFhB,epB0R+B,CqBzL/B,erB8L+B,CqBhM/B,sBrB8RkC,CoB3XlC,iBAAkB,CHLd,6HjB6b6I,CoBpbjJ,wBAAiB,CAAjB,gBAAiB,CAFjB,qBvBmvEF,CoBrvEI,uCGLJ,KHMM,epByvEJ,CACF,CK1vEE,WkBUE,apBNc,CoBOd,oBvBovEJ,CuBrwEA,sBAuBI,gCpBOa,CoBRb,SvBovEJ,CuB1wEA,4BA6BI,WvBivEJ,CuBluEA,uCAEE,mBvBquEF,CuB5tEE,aDvDE,wBnB8Ba,CqB5Bf,oBrB4Be,CqB9Bf,UxByxEF,CwB9wEE,yDFXE,wBEDoF,CASpF,oBATyH,CAOzH,UxBgyEJ,CwB3xEE,sCASI,gCxBkxEN,CwB7wEE,4CAGE,wBrBEa,CqBDb,oBrBCa,CqBHb,UxBixEJ,CwBxwEE,uIAIE,wBAzCuK,CA6CvK,oBA7C+M,CAwC/M,UxB4wEJ,CwBrwEI,yJAKI,gCxBqwER,CuBjwEE,eDvDE,wBnBOc,CqBLhB,oBrBKgB,CqBPhB,UxB8zEF,CwBnzEE,+DFXE,wBEDoF,CASpF,oBATyH,CAOzH,UxBq0EJ,CwBh0EE,0CASI,gCxBuzEN,CwBlzEE,gDAGE,wBrBrBc,CqBsBd,oBrBtBc,CqBoBd,UxBszEJ,CwB7yEE,6IAIE,wBAzCuK,CA6CvK,oBA7C+M,CAwC/M,UxBizEJ,CwB1yEI,+JAKI,gCxB0yER,CuBtyEE,aDvDE,wBnBqCa,CqBnCf,oBrBmCe,CqBrCf,UxBm2EF,CwBx1EE,yDFXE,wBEDoF,CASpF,oBATyH,CAOzH,UxB02EJ,CwBr2EE,sCASI,gCxB41EN,CwBv1EE,4CAGE,wBrBSa,CqBRb,oBrBQa,CqBVb,UxB21EJ,CwBl1EE,uIAIE,wBAzCuK,CA6CvK,oBA7C+M,CAwC/M,UxBs1EJ,CwB/0EI,yJAKI,gCxB+0ER,CuB30EE,UDvDE,wBnBuCa,CqBrCf,oBrBqCe,CqBvCf,UxBw4EF,CwB73EE,gDFXE,wBEDoF,CASpF,oBATyH,CAOzH,UxB+4EJ,CwB14EE,gCASI,gCxBi4EN,CwB53EE,sCAGE,wBrBWa,CqBVb,oBrBUa,CqBZb,UxBg4EJ,CwBv3EE,8HAIE,wBAzCuK,CA6CvK,oBA7C+M,CAwC/M,UxB23EJ,CwBp3EI,gJAKI,gCxBo3ER,CuBh3EE,aDvDE,wBnBoCa,CqBlCf,oBrBkCe,CqBpCf,axB66EF,CwBl6EE,yDFXE,wBEDoF,CASpF,oBATyH,CAOzH,axBo7EJ,CwB/6EE,sCASI,gCxBs6EN,CwBj6EE,4CAGE,wBrBQa,CqBPb,oBrBOa,CqBTb,axBq6EJ,CwB55EE,uIAIE,wBAzCuK,CA6CvK,oBA7C+M,CAwC/M,axBg6EJ,CwBz5EI,yJAKI,gCxBy5ER,CuBr5EE,YDvDE,wBnBkCa,CqBhCf,oBrBgCe,CqBlCf,UxBk9EF,CwBv8EE,sDFXE,wBEDoF,CASpF,oBATyH,CAOzH,UxBy9EJ,CwBp9EE,oCASI,gCxB28EN,CwBt8EE,0CAGE,wBrBMa,CqBLb,oBrBKa,CqBPb,UxB08EJ,CwBj8EE,oIAIE,wBAzCuK,CA6CvK,oBA7C+M,CAwC/M,UxBq8EJ,CwB97EI,sJAKI,gCxB87ER,CuB17EE,WDvDE,wBnBEc,CqBAhB,oBrBAgB,CqBFhB,axBu/EF,CwB5+EE,mDFXE,wBEDoF,CASpF,oBATyH,CAOzH,axB8/EJ,CwBz/EE,kCASI,gCxBg/EN,CwB3+EE,wCAGE,wBrB1Bc,CqB2Bd,oBrB3Bc,CqByBd,axB++EJ,CwBt+EE,iIAIE,wBAzCuK,CA6CvK,oBA7C+M,CAwC/M,axB0+EJ,CwBn+EI,mJAKI,gCxBm+ER,CuB/9EE,UDvDE,wBnBSc,CqBPhB,oBrBOgB,CqBThB,UxB4hFF,CwBjhFE,gDFXE,wBEDoF,CASpF,oBATyH,CAOzH,UxBmiFJ,CwB9hFE,gCASI,gCxBqhFN,CwBhhFE,sCAGE,wBrBnBc,CqBoBd,oBrBpBc,CqBkBd,UxBohFJ,CwB3gFE,8HAIE,wBAzCuK,CA6CvK,oBA7C+M,CAwC/M,UxB+gFJ,CwBxgFI,gJAKI,gCxBwgFR,CuB9/EE,qBCFA,oBrB7Be,CqB4Bf,axBsgFF,CK1jFE,2BmByDE,wBrBjCa,CqBkCb,oBrBlCa,CqBgCb,UxBwgFJ,CwBngFE,sDAEE,gCxBqgFJ,CwBlgFE,4DAGE,wBAA6B,CAD7B,axBqgFJ,CwBjgFE,+JAIE,wBrBpDa,CqBqDb,oBrBrDa,CqBmDb,UxBqgFJ,CwBjgFI,iLAKI,gCxBigFR,CuB9hFE,uBCFA,oBrBpDgB,CqBmDhB,axBsiFF,CK1lFE,6BmByDE,wBrBxDc,CqByDd,oBrBzDc,CqBuDd,UxBwiFJ,CwBniFE,0DAEE,gCxBqiFJ,CwBliFE,gEAGE,wBAA6B,CAD7B,axBqiFJ,CwBjiFE,qKAIE,wBrB3Ec,CqB4Ed,oBrB5Ec,CqB0Ed,UxBqiFJ,CwBjiFI,uLAKI,gCxBiiFR,CuB9jFE,qBCFA,oBrBtBe,CqBqBf,axBskFF,CK1nFE,2BmByDE,wBrB1Ba,CqB2Bb,oBrB3Ba,CqByBb,UxBwkFJ,CwBnkFE,sDAEE,gCxBqkFJ,CwBlkFE,4DAGE,wBAA6B,CAD7B,axBqkFJ,CwBjkFE,+JAIE,wBrB7Ca,CqB8Cb,oBrB9Ca,CqB4Cb,UxBqkFJ,CwBjkFI,iLAKI,gCxBikFR,CuB9lFE,kBCFA,oBrBpBe,CqBmBf,axBsmFF,CK1pFE,wBmByDE,wBrBxBa,CqByBb,oBrBzBa,CqBuBb,UxBwmFJ,CwBnmFE,gDAEE,gCxBqmFJ,CwBlmFE,sDAGE,wBAA6B,CAD7B,axBqmFJ,CwBjmFE,sJAIE,wBrB3Ca,CqB4Cb,oBrB5Ca,CqB0Cb,UxBqmFJ,CwBjmFI,wKAKI,gCxBimFR,CuB9nFE,qBCFA,oBrBvBe,CqBsBf,axBsoFF,CK1rFE,2BmByDE,wBrB3Ba,CqB4Bb,oBrB5Ba,CqB0Bb,axBwoFJ,CwBnoFE,sDAEE,gCxBqoFJ,CwBloFE,4DAGE,wBAA6B,CAD7B,axBqoFJ,CwBjoFE,+JAIE,wBrB9Ca,CqB+Cb,oBrB/Ca,CqB6Cb,axBqoFJ,CwBjoFI,iLAKI,gCxBioFR,CuB9pFE,oBCFA,oBrBzBe,CqBwBf,axBsqFF,CK1tFE,0BmByDE,wBrB7Ba,CqB8Bb,oBrB9Ba,CqB4Bb,UxBwqFJ,CwBnqFE,oDAEE,gCxBqqFJ,CwBlqFE,0DAGE,wBAA6B,CAD7B,axBqqFJ,CwBjqFE,4JAIE,wBrBhDa,CqBiDb,oBrBjDa,CqB+Cb,UxBqqFJ,CwBjqFI,8KAKI,gCxBiqFR,CuB9rFE,mBCFA,oBrBzDgB,CqBwDhB,axBssFF,CK1vFE,yBmByDE,wBrB7Dc,CqB8Dd,oBrB9Dc,CqB4Dd,axBwsFJ,CwBnsFE,kDAEE,gCxBqsFJ,CwBlsFE,wDAGE,wBAA6B,CAD7B,axBqsFJ,CwBjsFE,yJAIE,wBrBhFc,CqBiFd,oBrBjFc,CqB+Ed,axBqsFJ,CwBjsFI,2KAKI,gCxBisFR,CuB9tFE,kBCFA,oBrBlDgB,CqBiDhB,axBsuFF,CK1xFE,wBmByDE,wBrBtDc,CqBuDd,oBrBvDc,CqBqDd,UxBwuFJ,CwBnuFE,gDAEE,gCxBquFJ,CwBluFE,sDAGE,wBAA6B,CAD7B,axBquFJ,CwBjuFE,sJAIE,wBrBzEc,CqB0Ed,oBrB1Ec,CqBwEd,UxBquFJ,CwBjuFI,wKAKI,gCxBiuFR,CuBnvFA,UAEE,apB5Ce,CoB2Cf,epBoN+B,CoBlN/B,oBvBsvFF,CK3zFE,gBkBwEE,apBgG8D,CoB/F9D,yBvBuvFJ,CuB9vFA,gCAaI,eAAgB,CADhB,yBvBuvFJ,CuBnwFA,sCAkBI,apBnFc,CoBoFd,mBvBqvFJ,CuB1uFA,2BbvGI,mBP8O+B,CCpH7B,iBAtCY,CoBiBhB,erBkI+B,CqBpI/B,kBxBqvFF,CuB7uFA,2Bb3GI,mBP+O+B,CCrH7B,iBAtCY,CoBiBhB,erBmI+B,CqBrI/B,oBxB4vFF,CuB3uFA,WACE,aAAc,CACd,UvB8uFF,CuBhvFA,sBAMI,gBvB8uFJ,CuBzuFA,sFAII,UvB2uFJ,CyBn3FA,MLMM,8BpBi3FN,CoB52FI,uCKXJ,MLYM,epBg3FJ,CACF,CyB73FA,iBAII,SzB63FJ,CyBz3FA,qBAEI,YzB23FJ,CyBv3FA,YAEE,QAAS,CACT,eAAgB,CAFhB,iBAAkB,CLTd,2BpBs4FN,CoBj4FI,uCKGJ,YLFM,epBq4FJ,CACF,C0Bj5FA,uCAIE,iB1Bo5FF,C0Bj5FA,iBACE,kB1Bo5FF,C2Bh4FI,uBA1BF,eAAgB,CAChB,4BAA2C,CAF3C,6BAA4C,CAD5C,qBAA8B,CAgC1B,UAAW,CAHX,oBAAqB,CACrB,kBxBkO0C,CwBjO1C,qB3Bw4FN,C2B/2FI,6BACE,a3Bk3FN,C0B55FA,eAeE,2BAA4B,CAD5B,qBvBvBa,CuByBb,0BvBfa,COZX,oBP6OgC,CuBvNlC,avBXgB,CuBKhB,YAAa,CACb,UAAW,CtByGP,cAtCY,CsBtEhB,MAAO,CAUP,eAAgB,CAJhB,kBAA4B,CAF5B,evBkuBuC,CuBjuBvC,eAA8B,CAP9B,iBAAkB,CAWlB,eAAgB,CAVhB,QAAS,CAET,Y1B46FF,C0Bv5FI,oBAEE,MAAO,CADP,U1B25FN,C0Bv5FI,qBAEE,SAAU,CADV,O1B25FN,Cc94FI,yBYnBA,uBAEE,MAAO,CADP,U1Bs6FJ,C0Bl6FE,wBAEE,SAAU,CADV,O1Bq6FJ,CACF,Ccz5FI,yBYnBA,uBAEE,MAAO,CADP,U1Bi7FJ,C0B76FE,wBAEE,SAAU,CADV,O1Bg7FJ,CACF,Ccp6FI,yBYnBA,uBAEE,MAAO,CADP,U1B47FJ,C0Bx7FE,wBAEE,SAAU,CADV,O1B27FJ,CACF,Cc/6FI,0BYnBA,uBAEE,MAAO,CADP,U1Bu8FJ,C0Bn8FE,wBAEE,SAAU,CADV,O1Bs8FJ,CACF,C0B/7FA,uBAGI,WAAY,CAEZ,qBvB+rBuC,CuBhsBvC,YAAa,CAFb,Q1Bo8FJ,C2Bh+FI,+BAnBF,wBAAiC,CACjC,4BAA2C,CAF3C,6BAA4C,CAD5C,YAAa,CAyBT,UAAW,CAHX,oBAAqB,CACrB,kBxBkO0C,CwBjO1C,qB3Bw+FN,C2B/8FI,qCACE,a3Bk9FN,C0Bx8FA,0BAII,SAAU,CAEV,mBvBirBuC,CuBlrBvC,YAAa,CAFb,UAAW,CADX,K1B88FJ,C2Bv/FI,kCAZF,8BAA6C,CAC7C,sBAA+B,CAF/B,cAAe,CADf,2BAA0C,CAkBtC,UAAW,CAHX,oBAAqB,CACrB,kBxBkO0C,CwBjO1C,qB3B+/FN,C2Bt+FI,wCACE,a3By+FN,C2BtgGI,kCDmDE,gB1Bu9FN,C0Bl9FA,yBAII,SAAU,CAEV,oBvBgqBuC,CuBjqBvC,YAAa,CAFb,UAAW,CADX,K1Bw9FJ,C2BlhGI,iCAIE,UAAW,CAHX,oBAAqB,CAenB,YAAa,CAdf,kBxBkO0C,CwBjO1C,qB3BshGN,C2BtgGM,kCAxBJ,8BAA6C,CAD7C,uBAAgC,CADhC,2BAA0C,CA8BpC,UAAW,CAHX,oBAAqB,CACrB,mBxB+MwC,CwB9MxC,qB3BihGR,C2B3gGI,uCACE,a3B8gGN,C2BxhGM,kCDiDA,gB1B2+FN,C0Bp+FA,0IAMI,WAAY,CADZ,U1Bo+FJ,C0B99FA,kBE3GE,4BzBCgB,CyBJhB,QAAS,CACT,cAAmB,CACnB,e5BilGF,C0B99FA,eASE,wBAA6B,CAC7B,QAAS,CANT,UAAW,CAEX,avBhHgB,CuB2GhB,aAAc,CAId,evBoK+B,CuBtK/B,qBvBopBwC,CuBhpBxC,kBAAmB,CACnB,kBAAmB,CANnB,U1By+FF,CKrlGE,0CiBVE,wBnBEc,CuB2Id,avBqnBqD,CuBpnBrD,oB1Bu9FJ,C0Bj/FA,4CJpHI,wBnB8Ba,CuBsHb,UvBnJW,CuBoJX,oB1Bs9FJ,C0Bv/FA,gDAyCI,wBAA6B,CAF7B,avBpJc,CuBqJd,mB1Bq9FJ,C0B58FA,oBACE,a1B+8FF,C0B38FA,iBAKE,avBxKgB,CuBoKhB,aAAc,CtBlDV,iBAtCY,CsB0FhB,eAAgB,CADhB,oBvB+lBwC,CuB3lBxC,kB1B88FF,C0B18FA,oBAGE,avB7KgB,CuB2KhB,aAAc,CACd,qB1B88FF,C6BvoGA,+BAGE,mBAAoB,CADpB,iBAAkB,CAElB,qB7B0oGF,C6B9oGA,yCAQI,aAAc,CADd,iB7B6oGJ,C6BppGA,wNAkBM,S7B8oGN,C6BxoGA,aACE,YAAa,CACb,cAAe,CACf,0B7B2oGF,C6B9oGA,0BAMI,U7B4oGJ,C6BxoGA,0EAII,gB7ByoGJ,C6B7oGA,mGnBfI,4BmByB8B,CnB1B9B,yBVmqGJ,C6BnpGA,+EnBDI,2BmBgB6B,CnBjB7B,wBV2pGJ,C6B1nGA,uBAEE,qBAAkC,CADlC,sB7B8nGF,C6B/nGA,0GAOI,a7B8nGJ,C6B3nGE,wCACE,c7B8nGJ,C6B1nGA,yEAEE,oBAAqC,CADrC,qB7B8nGF,C6B1nGA,yEAEE,mBAAqC,CADrC,oB7B8nGF,C6BzmGA,oBAEE,sBAAuB,CADvB,qBAAsB,CAEtB,sB7B4mGF,C6B/mGA,wDAOI,U7B6mGJ,C6BpnGA,4FAYI,e7B6mGJ,C6BznGA,qHnBjFI,2BmBmG+B,CnBpG/B,4BVitGJ,C6B/nGA,iGnBhGI,wBmBuH4B,CnBtH5B,yBVouGJ,C6B7lGA,yDAGI,e7B+lGJ,C6BlmGA,gMAQM,kBAAsB,CACtB,mBAAoB,CAFpB,iB7BomGN,C8B3vGA,aAIE,mBAAoB,CAFpB,YAAa,CACb,cAAe,CAFf,iBAAkB,CAIlB,U9B8vGF,C8BnwGA,sHAYI,QAAY,CAEZ,eAAgB,CADhB,WAAY,CAFZ,iB9BkwGJ,C8B7wGA,0gBAmBM,gB9BywGN,C8B5xGA,yIA2BI,S9BuwGJ,C8BlyGA,mDAgCI,S9BswGJ,C8BtyGA,yFpBgBI,4BoBqBmD,CpBtBnD,yBV6xGJ,C8B5yGA,2FpB8BI,2BoBQmD,CpBTnD,wBVqxGJ,C8BlzGA,0BA6CI,kBAAmB,CADnB,Y9B2wGJ,C8BvzGA,kIpBgBI,4BoBgC6E,CpBjC7E,yBV8yGJ,C8B7zGA,+DpB8BI,2BoBmBsE,CpBpBtE,wBVqyGJ,C8BtwGA,yCAEE,Y9BywGF,C8B3wGA,mDAQI,iBAAkB,CAClB,S9BwwGJ,C8BjxGA,+DAYM,S9B0wGN,C8BtxGA,4VAoBI,gB9B6wGJ,C8BzwGA,qBAAuB,iB9B6wGvB,C8B5wGA,oBAAsB,gB9BgxGtB,C8BxwGA,kBAEE,kBAAmB,CASnB,wB3BrGgB,C2BsGhB,wB3BpGgB,CONd,oBP6OgC,C2BvIlC,a3B7FgB,C2BsFhB,YAAa,C1B2BT,cAtCY,C0BgBhB,e3B0L+B,C2BzL/B,e3B8L+B,C2BjM/B,eAAgB,CADhB,sB3BgSkC,C2B1RlC,iBAAkB,CAClB,kB9B8wGF,C8BxxGA,2EAkBI,Y9B2wGJ,C8BjwGA,2EAEE,+B9BowGF,C8BjwGA,6PpB/HI,mBP8O+B,CCpH7B,iBAtCY,C0BmDhB,e3BgG+B,C2BlG/B,kB9BuwGF,C8BjwGA,2EAEE,gC9BowGF,C8BjwGA,6PpBhJI,mBP+O+B,CCrH7B,iBAtCY,C0BoEhB,e3BgF+B,C2BlF/B,oB9BuwGF,C8BjwGA,8DAEE,qB9BowGF,C8BzvGA,6XpBxJI,4BoB8J4B,CpB/J5B,yBV45GJ,C8B1vGA,+WpBnJI,2BoByJ2B,CpB1J3B,wBVw5GJ,C+Bl7GA,gBAEE,aAAc,CACd,iBAA+C,CAC/C,mBAAqE,CAHrE,iB/Bw7GF,C+Bl7GA,uBACE,mBAAoB,CACpB,iB/Bq7GF,C+Bl7GA,sBAKE,cAAkF,CAHlF,MAAO,CAIP,SAAU,CALV,iBAAkB,CAGlB,U5Byf0C,C4B1f1C,U/Bw7GF,C+B37GA,2DTfI,wBnB8Ba,C4BLb,oB5BKa,C4BNb,U/Bw7GJ,C+Bj8GA,yDAoBM,gC/Bi7GN,C+Br8GA,uEAyBI,oB/Bg7GJ,C+Bz8GA,yEA8BI,wB5Bsf8E,C4Brf9E,oB5Bqf8E,C4Bvf9E,U/Bk7GJ,C+B/8GA,2GAuCM,a/B46GN,C+Bn9GA,yHA0CQ,wB/B66GR,C+Bn6GA,sBAEE,eAAgB,CADhB,iBAAkB,CAGlB,kB/Bq6GF,C+Bz6GA,6BAiBI,qB5BnFW,C4BoFX,wB5BoJ6B,C4BvJ7B,mB/Bu6GJ,C+Bt7GA,yDAgBI,UAAW,CAJX,aAAc,CAEd,W5B2bwC,C4B9bxC,YAA+D,CAF/D,iBAAkB,CAClB,UAA+E,CAG/E,U/Bo7GJ,C+Bj8GA,4BA+BI,gC/Bk6GJ,C+Bz5GA,8CrB5GI,oBVygHJ,C+B75GA,2EAOM,4N/B05GN,C+Bj6GA,kFT3GI,wBnB8Ba,C4B0FX,oB/By5GN,C+Bt6GA,iFAkBM,0K/Bw5GN,C+B16GA,gLA2BM,0B/Bu5GN,C+B94GA,2CAGI,iB/B+4GJ,C+Bl5GA,wEAQM,2L/B84GN,C+Bt5GA,kFAcM,0B/B44GN,C+Bl4GA,eACE,oB/Bq4GF,C+Bt4GA,4CASM,mB5BoY4E,C4BxY5E,aAAqD,CAErD,kBAAmB,CADnB,a/Bu4GN,C+B74GA,2CAiBM,wB5BlLY,C4BoLZ,mB5B0X4E,C4B7X5E,uBZzD0D,CYuD1D,yBZ3E0D,CY0E1D,sBZ1E0D,CC1G1D,iIjBsgB+H,C4BhV/H,sB/Bw4GN,CoBzjHI,uCWkKJ,2CXjKM,epB6jHJ,CACF,C+B75GA,yEA0BM,qB5BhMS,C4BiMT,4B/Bu4GN,C+Bl6GA,mFAiCM,0B/Bq4GN,C+Bz3GA,eAeE,uBAAgB,CAAhB,eAAgB,CAJhB,iO5BuW+I,C4BtW/I,wB5B3NgB,CONd,oBP6OgC,C4BflC,a5BrNgB,C4B6MhB,oBAAqB,C3B5FjB,cAtCY,C2BwIhB,e5BkE+B,C4BtE/B,iCZ7G8D,CYkH9D,e5BsE+B,C4B1E/B,sC5BwKkC,C4BlKlC,qBAAsB,CARtB,U/Bu4GF,C+Bz4GA,qBAkBI,oB5B4PsE,C4BvPpE,gC5B7MW,C4ByMb,S/B43GJ,C+B/4GA,gCAiCM,qB5BpPS,C4BmPT,a/Bo3GN,C+Bp5GA,8DAyCI,qBAAsB,CAFtB,WAAY,CACZ,oB/Bk3GJ,C+B15GA,wBA8CI,wB5B/Pc,C4B8Pd,a/Bk3GJ,C+B/5GA,2BAmDI,Y/Bg3GJ,C+Bn6GA,8BAwDI,WAAkB,CAClB,yB/B+2GJ,C+B32GA,kB3BxJM,iBAtCY,C2B+LhB,gCZxK8D,CY0K9D,qB5BqHkC,C4BpHlC,kB5BqHiC,C4BvHjC,kB/Bi3GF,C+B32GA,kB3BhKM,iBAtCY,C2BuMhB,+BZhL8D,CYkL9D,oB5BkHiC,C4BjHjC,iB5BkHgC,C4BpHhC,iB/Bi3GF,C+Bt2GA,aAEE,oBAAqB,CAGrB,e/By2GF,C+Bt2GA,gCAJE,iCZhM8D,CY6L9D,iBAAkB,CAElB,U/Bo3GF,C+B/2GA,mBAKE,QAAS,CACT,SAAU,CAJV,S/B62GF,C+B/2GA,4CASI,oB5B2KsE,C4B1KtE,gC/B02GJ,C+Bp3GA,+FAgBI,wB/By2GJ,C+Bz3GA,qDAqBM,gB/Bw2GN,C+B73GA,yDA0BI,yB/Bu2GJ,C+Bn2GA,mBAYE,qB5BvVa,C4BwVb,wB5BpVgB,CONd,oBP6OgC,C4ByGlC,e5BxD+B,C4BqD/B,iCZxO8D,CYsO9D,MAAO,CACP,S/B82GF,C+Bn3GA,4CAWE,a5B/UgB,C4B8UhB,e5BpD+B,C4BiD/B,sB5B6CkC,C4BnDlC,iBAAkB,CAElB,OAAQ,CADR,K/Bk4GF,C+Bp4GA,yBT5UI,wBnBGc,C4BuWd,mBAAoB,CrB3WpB,+BqB4WgF,CAVhF,QAAS,CAOT,gBAAiB,CALjB,aAAc,CACd,2BZ1P4D,CYwP5D,S/B82GJ,C+B31GA,cAKE,uBAAgB,CAAhB,eAAgB,CADhB,wBAA6B,CAF7B,aZhR2B,CYiR3B,SAAU,CAFV,U/Bk2GF,C+Bn2GA,oBAQI,Y/B+1GJ,C+Bv2GA,0CAY8B,+C/B+1G9B,C+B32GA,sCAa8B,+C/Bk2G9B,C+B/2GA,+BAc8B,+C/Bq2G9B,C+Bn3GA,gCAkBI,Q/Bq2GJ,C+Bv3GA,oCA8BI,uBAAgB,CAAhB,eAAgB,CTnZhB,wBnB8Ba,C4BiXb,Q5B0N0C,CO1mB1C,kBP2mB6C,C4B9N7C,W5B0N6C,C4BzN7C,kBAAyE,CX7YvE,8GjBsgB+H,CiBtgB/H,sGjBsgB+H,C4B3HjI,U/B42GJ,CoBlvHI,uCWgXJ,oCX/WM,uBAAgB,CAAhB,epBsvHJ,CACF,C+Bx4GA,2CTrXI,wBtBiwHJ,C+B54GA,6CA0CI,wB5B3Zc,C4B4Zd,kBAAyB,CrBjazB,kBPomBoC,C4BtMpC,WAAkB,CAClB,c5BmMuC,C4BrMvC,Y5BoMqC,C4BrMrC,U/Bg3GJ,C+Bt5GA,gCAwDI,eAAgB,CT7ahB,wBnB8Ba,C4B2Yb,Q5BgM0C,CO1mB1C,kBP2mB6C,C4BnM7C,W5B+L6C,CiBtmB3C,2GjBsgB+H,CiBtgB/H,sGjBsgB+H,C4BhGjI,U/B+2GJ,CoBhxHI,uCWgXJ,gCX/WM,oBAAgB,CAAhB,epBoxHJ,CACF,C+Bt6GA,uCTrXI,wBtB+xHJ,C+B16GA,gCAoEI,wB5Brbc,C4Bsbd,kBAAyB,CrB3bzB,kBPomBoC,C4B5KpC,WAAkB,CAClB,c5ByKuC,C4B3KvC,Y5B0KqC,C4B3KrC,U/Bo3GJ,C+Bp7GA,yBAqFI,eAAgB,CT1chB,wBnB8Ba,C4Bwab,Q5BmK0C,CO1mB1C,kBP2mB6C,C4BzK7C,W5BqK6C,C4BlK7C,iB5B/D+B,C4B8D/B,kB5B9D+B,C4B6D/B,YAAa,CXlcX,0GjBsgB+H,CiBtgB/H,sGjBsgB+H,C4BtEjI,U/Bs3GJ,CoBjzHI,uCWgXJ,yBX/WM,mBAAgB,CAAhB,epBqzHJ,CACF,C+Bv8GA,gCTrXI,wBtBg0HJ,C+B38GA,yBAiGI,wBAA6B,CAC7B,kBAAyB,CACzB,kBAA4C,CAJ5C,WAAkB,CAClB,c5B4IuC,C4B9IvC,Y5B6IqC,C4B9IrC,U/Bw3GJ,C+Br9GA,4DAwGI,wB5Bzdc,COLd,kBVs1HJ,C+Bh+GA,8BA6GI,iB/Bm3GJ,C+Bh+GA,6CAoHM,wB/Bg3GN,C+Bp+GA,sDAwHM,c/Bg3GN,C+Bx+GA,yCA4HM,wB/Bg3GN,C+B5+GA,yCAgIM,c/Bg3GN,C+Bh/GA,kCAoIM,wB/Bg3GN,C+B32GA,+DX9fM,sGpB+2HN,CoB12HI,uCWyfJ,+DXxfM,epBg3HJ,CACF,CgCx3HA,KACE,YAAa,CACb,cAAe,CAGf,eAAgB,CADhB,eAAgB,CADhB,chC63HF,CgCx3HA,UACE,aAAc,CACd,kBhC23HF,CK13HE,gC2BEE,oBhC43HJ,CgCj4HA,mBAUI,a7BVc,C6BYd,cAAe,CADf,mBhC43HJ,CgCn3HA,UACE,+BhCs3HF,CgCv3HA,oBAII,kBhCu3HJ,CgC33HA,oBAQI,sBAAgD,CtB3BhD,6BPoOgC,COnOhC,8BVm5HJ,CKl5HE,oD2B6BI,oChCy3HN,CgCr4HA,6BAiBM,wBAA6B,CAC7B,kBAAyB,CAFzB,ahC23HN,CgC34HA,8DAyBI,qB7BnDW,C6BoDX,iC7BpDW,C6BkDX,ahC03HJ,CgCl5HA,yBtBnBI,wBsBoD4B,CtBnD5B,yBsBmD4B,CAF5B,ehCy3HJ,CgC92HA,qBtBtEI,oBVw7HJ,CgCl3HA,uDAQI,wB7B/Ca,C6B8Cb,UhCi3HJ,CgCv2HA,oBAEI,aAAc,CACd,iBhCy2HJ,CgCr2HA,yBAEI,YAAa,CACb,WAAY,CACZ,iBhCu2HJ,CgC91HA,uBAEI,YhCg2HJ,CgCl2HA,qBAKI,ahCi2HJ,CiCr8HA,QAME,kB9BiHW,C8BtHX,iBjC68HF,CiC98HA,4IAIE,kBAAmB,CAFnB,YAAa,CACb,cAAe,CAEf,6BjCi9HF,CiCp7HA,cACE,oBAAqB,C7B2EjB,iBAtCY,C6BhChB,mBAAoB,CAFpB,iB9BiFW,C8BlFX,uB9BoqB+E,C8BrqB/E,oB9BqqB+E,C8BhqB/E,kBjCu7HF,CKj+HE,wC4B6CE,oBjCw7HJ,CiC/6HA,YACE,YAAa,CACb,qBAAsB,CAGtB,eAAgB,CADhB,eAAgB,CADhB,cjCo7HF,CiCv7HA,sBASI,cAAe,CADf,ejCo7HJ,CiC57HA,2BAcI,UAAW,CADX,ejCo7HJ,CiC16HA,aACE,oBAAqB,CAErB,oB9B2lBuC,C8B5lBvC,iBjC86HF,CiCj6HA,iBAKE,kBAAmB,CAJnB,eAAgB,CAChB,WjCq6HF,CiC95HA,gBAIE,wBAA6B,CAC7B,sBAAuC,CvBrHrC,oBP6OgC,CCnH9B,iBAtCY,C6B+BhB,aAAc,CAFd,qBjCs6HF,CK5gIE,4C4B8GE,oBjCk6HJ,CiC55HA,qBAME,wBAAmC,CACnC,yBAA0B,CAF1B,UAAW,CAJX,oBAAqB,CAErB,YAAa,CACb,qBAAsB,CAFtB,WjCo6HF,Ccj+HI,4BmB4EC,gMAIK,cAAe,CADf,ejCy5HR,CACF,Cct/HI,yBmByFA,kBAoBI,oBAAqB,CACrB,0BjC84HN,CiCn6HG,8BAwBK,kBjC84HR,CiCt6HG,6CA2BO,iBjC84HV,CiCz6HG,wCAgCO,kB9B+hB6B,C8BhiB7B,mBjC84HV,CiC76HG,gMAsCK,gBjC24HR,CiCj7HG,mCAqDK,sBAAwB,CAGxB,ejC63HR,CiCr7HG,kCA4DK,YjC43HR,CACF,CcrgII,4BmB4EC,gMAIK,cAAe,CADf,ejC67HR,CACF,Cc1hII,yBmByFA,kBAoBI,oBAAqB,CACrB,0BjCk7HN,CiCv8HG,8BAwBK,kBjCk7HR,CiC18HG,6CA2BO,iBjCk7HV,CiC78HG,wCAgCO,kB9B+hB6B,C8BhiB7B,mBjCk7HV,CiCj9HG,gMAsCK,gBjC+6HR,CiCr9HG,mCAqDK,sBAAwB,CAGxB,ejCi6HR,CiCz9HG,kCA4DK,YjCg6HR,CACF,CcziII,4BmB4EC,gMAIK,cAAe,CADf,ejCi+HR,CACF,Cc9jII,yBmByFA,kBAoBI,oBAAqB,CACrB,0BjCs9HN,CiC3+HG,8BAwBK,kBjCs9HR,CiC9+HG,6CA2BO,iBjCs9HV,CiCj/HG,wCAgCO,kB9B+hB6B,C8BhiB7B,mBjCs9HV,CiCr/HG,gMAsCK,gBjCm9HR,CiCz/HG,mCAqDK,sBAAwB,CAGxB,ejCq8HR,CiC7/HG,kCA4DK,YjCo8HR,CACF,Cc7kII,6BmB4EC,gMAIK,cAAe,CADf,ejCqgIR,CACF,CclmII,0BmByFA,kBAoBI,oBAAqB,CACrB,0BjC0/HN,CiC/gIG,8BAwBK,kBjC0/HR,CiClhIG,6CA2BO,iBjC0/HV,CiCrhIG,wCAgCO,kB9B+hB6B,C8BhiB7B,mBjC0/HV,CiCzhIG,gMAsCK,gBjCu/HR,CiC7hIG,mCAqDK,sBAAwB,CAGxB,ejCy+HR,CiCjiIG,kCA4DK,YjCw+HR,CACF,CiC1iIA,eAyBQ,oBAAqB,CACrB,0BjCqhIR,CiC/iIA,8KASU,cAAe,CADf,ejC6iIV,CiCrjIA,2BA6BU,kBjC4hIV,CiCzjIA,0CAgCY,iBjC6hIZ,CiC7jIA,qCAqCY,kB9B+hB6B,C8BhiB7B,mBjC8hIZ,CiClkIA,8KA2CU,gBjC4hIV,CiCvkIA,gCA0DU,sBAAwB,CAGxB,ejC+gIV,CiC5kIA,+BAiEU,YjC+gIV,CKhtIE,gG4BmNI,ejCqgIN,CiC1gIA,oCAWM,ejCmgIN,CK5tIE,oF4B4NM,ejCogIR,CiClhIA,6CAkBQ,ejCogIR,CiCthIA,0KA0BM,ejCmgIN,CiC7hIA,8BAgCI,sB9B7OW,C8B4OX,ejCmgIJ,CiCliIA,mCAoCI,wQjCkgIJ,CiCtiIA,2BAwCI,ejCkgIJ,CKxvIE,mG4B2PM,ejCqgIR,CKhwIE,6F4BuQI,UjCigIN,CiCtgIA,mCAWM,ejC+/HN,CK5wIE,kF4BgRM,ejCggIR,CiC9gIA,4CAkBQ,ejCggIR,CiClhIA,sKA0BM,UjC+/HN,CiCzhIA,6BAgCI,sB9B3SW,C8B0SX,ejC+/HJ,CiC9hIA,kCAoCI,8QjC8/HJ,CiCliIA,0BAwCI,ejC8/HJ,CKxyIE,gG4B+SM,UjCigIR,CkC5zIA,MAME,oBAAqB,CAErB,uBAA2B,CAD3B,qB/BJa,C+BMb,iC/BIa,COZX,oBP6OgC,C+B5OlC,YAAa,CACb,qBAAsB,CACtB,WAAY,CAHZ,iBlCu0IF,CkCx0IA,SAcI,aAAc,CADd,clCg0IJ,CkC70IA,2DxBUI,6BPoOgC,COnOhC,8BVu0IJ,CkCl1IA,yDxByBI,gCPqNgC,COtNhC,iCV+zIJ,CkCzzIA,WAGE,aAAc,CAGd,cAAe,CACf,elCwzIF,CkCpzIA,YACE,oBlCuzIF,CkCpzIA,eACE,mBlCwzIF,CkCpzIA,qCAHE,elC2zIF,CKl2IE,iB6BgDE,oBlCszIJ,CkCxzIA,sBAMI,mBlCszIJ,CkC9yIA,aAIE,0B/B3Da,C+B4Db,wC/B5Da,C+ByDb,eAAgB,CADhB,sBlCozIF,CkCrzIA,yBxBnEI,uDV43IJ,CkCzzIA,sDAaM,YlCgzIN,CkC3yIA,aAEE,0B/B3Ea,C+B4Eb,qC/B5Ea,C+B0Eb,sBlCgzIF,CkCjzIA,wBxBrFI,uDV04IJ,CkCtyIA,kBAIE,eAAgB,CAFhB,qBlC2yIF,CkCtyIA,qCAJE,oBAAgC,CAFhC,qBlCizIF,CkCryIA,kBAIE,QAAS,CACT,MAAO,CACP,e/B8sByC,C+BntBzC,iBAAkB,CAElB,OAAQ,CADR,KlC4yIF,CkCryIA,yCAGE,aAAc,CACd,UlCwyIF,CkCryIA,wBxBxHI,yCSsH4D,CTrH5D,0CVk6IJ,CkCtyIA,2BxB9GI,4CSuG4D,CTxG5D,6CV25IJ,CkCpyIA,iBAEI,kBlCsyIJ,Cc/3II,yBoBuFJ,WAMI,YAAa,CACb,kBAAmB,CAEnB,iB/BgrBsD,C+BjrBtD,kBlCwyIF,CkChzIF,iBAaM,QAAY,CAEZ,eAAgB,CAChB,gB/ByqBoD,C+B3qBpD,iBlCwyIJ,CACF,CkC7xIA,kBAII,kBlC6xIJ,Ccl5II,yBoBiHJ,YAQI,YAAa,CACb,kBlC8xIF,CkCvyIF,kBAcM,QAAY,CACZ,elC4xIJ,CkC3yIF,wBAmBQ,aAAc,CADd,alC6xIN,CkC/yIF,mCxBvJI,4BwBgLoC,CxBjLpC,yBV28IF,CkCnzIF,iGA8BY,yBlCyxIV,CkCvzIF,oGAmCY,4BlCwxIV,CkC3zIF,oCxBzII,2BwBiLmC,CxBlLnC,wBVy8IF,CkC/zIF,mGA6CY,wBlCsxIV,CkCn0IF,sGAkDY,2BlCqxIV,CACF,CkCzwIA,oBAEI,oBlC2wIJ,Cc77II,yBoBgLJ,cAMI,c/B6lBiC,C+B5lBjC,kB/B6lBuC,C+B5lBvC,SAAU,CACV,QlC4wIF,CkCrxIF,oBAYM,oBAAqB,CACrB,UlC4wIJ,CACF,CkCnwIA,iBAEI,elCqwIJ,CkCvwIA,oCAKM,eAAgB,CxB3OlB,2BwB4OiC,CxB7OjC,4BVo/IJ,CkC7wIA,qCxBrPI,wBwB+P8B,CxB9P9B,yBVsgJJ,CkClxIA,8BxB9PI,ewB4Q0B,CACxB,kBlCwwIN,CmC1hJA,YAOE,wBhCEgB,COJd,oBP6OgC,CgCjPlC,YAAa,CACb,cAAe,CAIf,eAAgB,CAFhB,kBhCiiCsC,CgCliCtC,mBnCiiJF,CmCzhJA,kCAGI,kBnC0hJJ,CmC7hJA,yCAQM,ahCNY,CgCOZ,WhCshCuC,CgCzhCvC,oBAAqB,CACrB,mBnC6hJN,CmCpiJA,+CAoBI,yBAA0B,CAI1B,oBnCghJJ,CmCxiJA,wBA4BI,anCohJJ,CoC3jJA,Y1BKI,oBP6OgC,CiCjPlC,YAAa,C7BIb,eAAgB,CADhB,cP8jJF,CoC5jJA,WAOE,qBjCNa,CiCOb,wBjCJgB,CiCEhB,ajCwBe,CiC5Bf,aAAc,CAGd,gBjCmxBsC,CiCpxBtC,gBjCqO+B,CiCtO/B,oBjCgxBwC,CiClxBxC,iBpCskJF,CoCvkJA,iBAcI,wBjCXc,CiCYd,oBjCXc,CiCQd,ajCkK8D,CiCjK9D,oBAAqB,CAFrB,SpCokJJ,CoC/kJA,iBAqBI,gCjCSa,CiCVb,SjC4wBiC,CiC7wBjC,SpCkkJJ,CoC5jJA,kC1BKI,gCP8MgC,CO/MhC,6BP+MgC,CiChN9B,apC+jJN,CoClkJA,iC1BTI,iCP4NgC,CO7NhC,8BVilJJ,CoCvkJA,6BAgBI,wBjCXa,CiCYb,oBjCZa,CiCUb,UjCvCW,CiCsCX,SpCgkJJ,CoC9kJA,+BAyBI,qBjCjDW,CiCkDX,oBjC/Cc,CiC0Cd,ajCvCc,CiC0Cd,WAAY,CAFZ,mBpCgkJJ,CqClnJE,0BjC4HI,iBAtCY,CiCnFd,elCsO6B,CkCxO7B,qBrCunJJ,CqChnJM,iD3ByBF,+BP+M+B,COhN/B,4BV6lJJ,CqChnJM,gD3BMF,gCP6N+B,CO9N/B,6BVgnJJ,CqCloJE,0BjC4HI,iBAtCY,CiCnFd,elCuO6B,CkCzO7B,oBrCuoJJ,CqChoJM,iD3ByBF,+BPgN+B,COjN/B,4BV6mJJ,CqChoJM,gD3BMF,gCP8N+B,CO/N/B,6BVgoJJ,CsChpJA,O5BAI,oBP6OgC,CmC5OlC,oBAAqB,ClCkEnB,aAAW,CkC/Db,enC2R+B,CmC1R/B,aAAc,CAHd,kBnCw5BsC,CmCp5BtC,iBAAkB,ClBLd,6HjB6b6I,CmCtbjJ,sBAAwB,CADxB,kBtCspJF,CoBvpJI,uCkBNJ,OlBOM,epB2pJJ,CACF,CKxpJE,4BiCGI,oBtCypJN,CsCvqJA,aAoBI,YtCupJJ,CsClpJA,YACE,iBAAkB,CAClB,QtCqpJF,CsC9oJA,Y5BlCI,mBPm6BqC,CmC/3BvC,iBnC43BsC,CmC73BtC,kBtCmpJF,CsCzoJE,eChDA,wBpCkCe,CoCnCf,UvC+rJF,CKhrJE,4CkCTI,wBAAkC,CADlC,UvC+rJN,CuCjsJU,4CASJ,gCpCuBW,CoCxBX,SvC8rJN,CsCxpJE,iBChDA,wBpCWgB,CoCZhB,UvC8sJF,CK/rJE,gDkCTI,wBAAkC,CADlC,UvC8sJN,CuChtJU,gDASJ,gCpCAY,CoCDZ,SvC6sJN,CsCvqJE,eChDA,wBpCyCe,CoC1Cf,UvC6tJF,CK9sJE,4CkCTI,wBAAkC,CADlC,UvC6tJN,CuC/tJU,4CASJ,gCpC8BW,CoC/BX,SvC4tJN,CsCtrJE,YChDA,wBpC2Ce,CoC5Cf,UvC4uJF,CK7tJE,sCkCTI,wBAAkC,CADlC,UvC4uJN,CuC9uJU,sCASJ,gCpCgCW,CoCjCX,SvC2uJN,CsCrsJE,eChDA,wBpCwCe,CoCzCf,avC2vJF,CK5uJE,4CkCTI,wBAAkC,CADlC,avC2vJN,CuC7vJU,4CASJ,gCpC6BW,CoC9BX,SvC0vJN,CsCptJE,cChDA,wBpCsCe,CoCvCf,UvC0wJF,CK3vJE,0CkCTI,wBAAkC,CADlC,UvC0wJN,CuC5wJU,0CASJ,gCpC2BW,CoC5BX,SvCywJN,CsCnuJE,aChDA,wBpCMgB,CoCPhB,avCyxJF,CK1wJE,wCkCTI,wBAAkC,CADlC,avCyxJN,CuC3xJU,wCASJ,gCpCLY,CoCIZ,SvCwxJN,CsClvJE,YChDA,wBpCagB,CoCdhB,UvCwyJF,CKzxJE,sCkCTI,wBAAkC,CADlC,UvCwyJN,CuC1yJU,sCASJ,gCpCEY,CoCHZ,SvCuyJN,CwCnzJA,WAIE,wBrCKgB,COJd,mBP8O+B,CqCjPjC,kBrCqzBsC,CqCtzBtC,iBxCyzJF,Cc9vJI,yB0B5DJ,WAQI,iBxCuzJF,CACF,CwCpzJA,iB9BPI,e8BUsB,CADxB,cAAe,CADf,exCyzJF,CyCl0JA,OAIE,sBAA6C,C/BH3C,oBP6OgC,CsC3OlC,kBtCq9BsC,CsCt9BtC,sBtCq9ByC,CsCt9BzC,iBzCy0JF,CyCj0JA,eAEE,azCm0JF,CyC/zJA,YACE,ezCk0JF,CyC1zJA,mBACE,kBzC6zJF,CyC9zJA,0BASI,aAAc,CADd,sBtCu7BuC,CsC17BvC,iBAAkB,CAElB,OAAQ,CADR,KzCg0JJ,CyCnzJE,enBzCE,wBHyF8D,CuB5FhE,oBvB4FgE,CuB9FhE,a1Cu2JF,C0Cn2JE,kBACE,wB1Cs2JJ,C0Cn2JE,2BACE,a1Cs2JJ,CyCj0JE,iBnBzCE,wBHyF8D,CuB5FhE,oBvB4FgE,CuB9FhE,a1Cq3JF,C0Cj3JE,oBACE,wB1Co3JJ,C0Cj3JE,6BACE,a1Co3JJ,CyC/0JE,enBzCE,wBHyF8D,CuB5FhE,oBvB4FgE,CuB9FhE,a1Cm4JF,C0C/3JE,kBACE,wB1Ck4JJ,C0C/3JE,2BACE,a1Ck4JJ,CyC71JE,YnBzCE,wBHyF8D,CuB5FhE,oBvB4FgE,CuB9FhE,a1Ci5JF,C0C74JE,eACE,wB1Cg5JJ,C0C74JE,wBACE,a1Cg5JJ,CyC32JE,enBzCE,wBHyF8D,CuB5FhE,oBvB4FgE,CuB9FhE,a1C+5JF,C0C35JE,kBACE,wB1C85JJ,C0C35JE,2BACE,a1C85JJ,CyCz3JE,cnBzCE,wBHyF8D,CuB5FhE,oBvB4FgE,CuB9FhE,a1C66JF,C0Cz6JE,iBACE,wB1C46JJ,C0Cz6JE,0BACE,a1C46JJ,CyCv4JE,anBzCE,wBHyF8D,CuB5FhE,oBvB4FgE,CuB9FhE,a1C27JF,C0Cv7JE,gBACE,wB1C07JJ,C0Cv7JE,yBACE,a1C07JJ,CyCr5JE,YnBzCE,wBHyF8D,CuB5FhE,oBvB4FgE,CuB9FhE,a1Cy8JF,C0Cr8JE,eACE,wB1Cw8JJ,C0Cr8JE,wBACE,a1Cw8JJ,C2Ch9JE,gCACE,GAAO,0B3Co9JT,C2Cn9JE,GAAK,uB3Cs9JP,CACF,C2Cn9JA,UAKE,wBxCJgB,COJd,oBP6OgC,CCnH9B,gBAtCY,CuC/EhB,W3C09JF,C2Cl9JA,wBATE,YAAa,CAEb,e3Cq+JF,C2C99JA,cAQE,wBxCUe,CwCbf,UxChBa,CwCab,qBAAsB,CACtB,sBAAuB,CAGvB,iBAAkB,CvBlBd,yBjB0+B4C,CwCv9BhD,kB3Cu9JF,CoBr+JI,uCuBOJ,cvBNM,epBy+JJ,CACF,C2Cx9JA,sBrBaE,+GAA6I,CqBX7I,yB3C29JF,C2Cv9JE,uBACE,iD3C09JJ,C2Cv9JM,uCAJJ,uBAKM,c3C29JN,CACF,C4CrgKA,OAEE,sBAAuB,CADvB,Y5CygKF,C4CrgKA,YACE,Q5CwgKF,C6C1gKA,YACE,YAAa,CACb,qBAAsB,CAItB,eAAgB,CADhB,c7C4gKF,C6ClgKA,wBAEE,a1CPgB,C0CQhB,kBAAmB,CAFnB,U7CugKF,CK3gKE,4DwCaE,wB1CrBc,C0CmBd,a1Cbc,C0Ccd,oBAAqB,CAFrB,S7CwgKJ,C6C/gKA,+BAeI,wB1CzBc,C0CwBd,a7CsgKJ,C6C5/JA,iBAKE,qB1CzCa,C0C0Cb,iC1ChCa,C0C4Bb,aAAc,CACd,sB1C88ByC,C0Ch9BzC,iB7CmgKF,C6CpgKA,6BnC7BI,6BPoOgC,COnOhC,8BVqiKJ,C6CzgKA,4BnCdI,gCPqNgC,COtNhC,iCV6hKJ,C6C9gKA,oDAoBI,qB1CxDW,C0CsDX,a1ChDc,C0CiDd,mB7CigKJ,C6CphKA,wBA2BI,wB1ClCa,C0CmCb,oB1CnCa,C0CiCb,U1C9DW,C0C6DX,S7CkgKJ,C6C3hKA,kCAgCI,kB7C+/JJ,C6C/hKA,yCAoCM,oB1CgK2B,C0CjK3B,e7CigKN,C6Cl/JI,uBACE,kB7Cq/JN,C6Ct/JI,oDnCjCA,gCPsLgC,COlMhC,yBVwiKJ,C6C3/JI,mDnCjCA,2BmC4C0C,CnCxD1C,8BV6iKJ,C6ChgKI,+CAeM,Y7Cq/JV,C6CpgKI,yDAoBM,mBAAoB,CADpB,oB7Cs/JV,C6CzgKI,gEAwBQ,qB1C0HqB,C0C3HrB,gB7Cu/JZ,Cc/iKI,yB+BiCA,0BACE,kB7CkhKJ,C6CnhKE,uDnCjCA,gCPsLgC,COlMhC,yBVokKF,C6CvhKE,sDnCjCA,2BmC4C0C,CnCxD1C,8BVwkKF,C6C3hKE,kDAeM,Y7C+gKR,C6C9hKE,4DAoBM,mBAAoB,CADpB,oB7C+gKR,C6CliKE,mEAwBQ,qB1C0HqB,C0C3HrB,gB7C+gKV,CACF,CcxkKI,yB+BiCA,0BACE,kB7C2iKJ,C6C5iKE,uDnCjCA,gCPsLgC,COlMhC,yBV6lKF,C6ChjKE,sDnCjCA,2BmC4C0C,CnCxD1C,8BVimKF,C6CpjKE,kDAeM,Y7CwiKR,C6CvjKE,4DAoBM,mBAAoB,CADpB,oB7CwiKR,C6C3jKE,mEAwBQ,qB1C0HqB,C0C3HrB,gB7CwiKV,CACF,CcjmKI,yB+BiCA,0BACE,kB7CokKJ,C6CrkKE,uDnCjCA,gCPsLgC,COlMhC,yBVsnKF,C6CzkKE,sDnCjCA,2BmC4C0C,CnCxD1C,8BV0nKF,C6C7kKE,kDAeM,Y7CikKR,C6ChlKE,4DAoBM,mBAAoB,CADpB,oB7CikKR,C6CplKE,mEAwBQ,qB1C0HqB,C0C3HrB,gB7CikKV,CACF,Cc1nKI,0B+BiCA,0BACE,kB7C6lKJ,C6C9lKE,uDnCjCA,gCPsLgC,COlMhC,yBV+oKF,C6ClmKE,sDnCjCA,2BmC4C0C,CnCxD1C,8BVmpKF,C6CtmKE,kDAeM,Y7C0lKR,C6CzmKE,4DAoBM,mBAAoB,CADpB,oB7C0lKR,C6C7mKE,mEAwBQ,qB1C0HqB,C0C3HrB,gB7C0lKV,CACF,C6C5kKA,mCAGI,mBAAoB,CnCjIpB,emCkIwB,CAFxB,oB7CglKJ,C6CllKA,+CAOM,kB7C+kKN,C6CtlKA,yDAaM,qB7C6kKN,C8C1tKE,yBAEE,wB3B0F8D,C2B3F9D,a9C8tKJ,CKltKE,4GyCNM,wBAAyC,CADzC,a9C8tKR,C8CpuKE,uDAYM,wB3BgF0D,C2B/E1D,oB3B+E0D,C2BjF1D,U9C+tKR,C8C1uKE,2BAEE,wB3B0F8D,C2B3F9D,a9C8uKJ,CKluKE,gHyCNM,wBAAyC,CADzC,a9C8uKR,C8CpvKE,yDAYM,wB3BgF0D,C2B/E1D,oB3B+E0D,C2BjF1D,U9C+uKR,C8C1vKE,yBAEE,wB3B0F8D,C2B3F9D,a9C8vKJ,CKlvKE,4GyCNM,wBAAyC,CADzC,a9C8vKR,C8CpwKE,uDAYM,wB3BgF0D,C2B/E1D,oB3B+E0D,C2BjF1D,U9C+vKR,C8C1wKE,sBAEE,wB3B0F8D,C2B3F9D,a9C8wKJ,CKlwKE,sGyCNM,wBAAyC,CADzC,a9C8wKR,C8CpxKE,oDAYM,wB3BgF0D,C2B/E1D,oB3B+E0D,C2BjF1D,U9C+wKR,C8C1xKE,yBAEE,wB3B0F8D,C2B3F9D,a9C8xKJ,CKlxKE,4GyCNM,wBAAyC,CADzC,a9C8xKR,C8CpyKE,uDAYM,wB3BgF0D,C2B/E1D,oB3B+E0D,C2BjF1D,U9C+xKR,C8C1yKE,wBAEE,wB3B0F8D,C2B3F9D,a9C8yKJ,CKlyKE,0GyCNM,wBAAyC,CADzC,a9C8yKR,C8CpzKE,sDAYM,wB3BgF0D,C2B/E1D,oB3B+E0D,C2BjF1D,U9C+yKR,C8C1zKE,uBAEE,wB3B0F8D,C2B3F9D,a9C8zKJ,CKlzKE,wGyCNM,wBAAyC,CADzC,a9C8zKR,C8Cp0KE,qDAYM,wB3BgF0D,C2B/E1D,oB3B+E0D,C2BjF1D,U9C+zKR,C8C10KE,sBAEE,wB3B0F8D,C2B3F9D,a9C80KJ,CKl0KE,sGyCNM,wBAAyC,CADzC,a9C80KR,C8Cp1KE,oDAYM,wB3BgF0D,C2B/E1D,oB3B+E0D,C2BjF1D,U9C+0KR,C+C71KA,OAKE,U5CYa,C4ChBb,WAAY,C3C8HR,gBAtCY,C2CtFhB,e5CiS+B,C4ChS/B,aAAc,CAGd,UAAW,CADX,wB/Ci2KF,CK31KE,a0CDE,U5CMW,C4CLX,oB/Cg2KJ,CK51KE,sF0CCI,W/C+1KN,C+Cp1KA,aAIE,uBAAgB,CAAhB,eAAgB,CAFhB,wBAA6B,CAC7B,QAAS,CAFT,S/C01KF,C+Cj1KA,iBACE,mB/Co1KF,CgD33KA,OASE,kCAA2B,CAA3B,0BAA2B,CAH3B,2BAA4B,CAD5B,0B7CEa,C6CAb,0B7C04BmD,CO54BjD,oBP64BsC,C6C14BxC,oC7CSa,CC8GT,iBAtCY,C4CxFhB,e7Cy4BuC,C6Ch4BvC,SAAU,CARV,ehDs4KF,CgDx4KA,wBAcI,oBhD83KJ,CgD54KA,eAkBI,ShD83KJ,CgDh5KA,YAsBI,aAAc,CACd,ShD83KJ,CgDr5KA,YA2BI,YhD83KJ,CgD13KA,cAEE,kBAAmB,CAInB,2BAA4B,CAD5B,0B7C7Ba,C6C+Bb,iC7Ci3BoD,C6Cp3BpD,a7CtBgB,C6CmBhB,YAAa,CAEb,qBhDi4KF,CgD13KA,YACE,chD63KF,CiDj6KA,YAEE,ejDm6KF,CiDr6KA,mBAKI,iBAAkB,CAClB,ejDo6KJ,CiD/5KA,OAKE,YAAa,CAEb,WAAY,CAJZ,MAAO,CAQP,SAAU,CAHV,eAAgB,CAPhB,cAAe,CACf,KAAM,CAIN,UAAW,CAFX,YjDu6KF,CiDz5KA,cAGE,Y9C64BuC,C8C34BvC,mBAAoB,CAJpB,iBAAkB,CAClB,UjD85KF,CiDx5KE,0BAEE,2B9Cm6BmD,CiB18BjD,iCpBk8KN,CoB77KI,uC6BgCF,0B7B/BI,epBi8KJ,CACF,CiD/5KE,0BACE,cjDk6KJ,CiD95KE,kCACE,qBjDi6KJ,CiD75KA,yBACE,YAAa,CACb,4BjDg6KF,CiDl6KA,wCAKI,6B9BsE4D,C8BrE5D,ejDi6KJ,CiDv6KA,8EAWI,ajDi6KJ,CiD56KA,qCAeI,ejDi6KJ,CiD75KA,uBAEE,kBAAmB,CADnB,YAAa,CAEb,4BjDg6KF,CiDn6KA,8BASI,UAAW,CAFX,aAAc,CACd,yBjDi6KJ,CiDz6KA,+CAcI,qBAAsB,CAEtB,WAAY,CADZ,sBjDg6KJ,CiD/6KA,8DAmBM,ejDg6KN,CiDn7KA,sDAuBM,YjDg6KN,CiD15KA,eASE,2BAA4B,CAD5B,qB9C1Ga,C8C4Gb,sB9ClGa,COZX,mBP8O+B,C8CxIjC,YAAa,CACb,qBAAsB,CAWtB,SAAU,CAPV,mBAAoB,CANpB,iBAAkB,CAGlB,UjDm6KF,CiDr5KA,gBAOE,qB9CjHa,C8CgHb,YAAa,CAHb,MAAO,CAFP,cAAe,CACf,KAAM,CAGN,WAAY,CADZ,YjD25KF,CiD/5KA,qBAUW,SjDy5KX,CiDn6KA,qBAWW,UjD45KX,CiDv5KA,cAEE,sBAAuB,CAGvB,+B9CtIgB,COId,wCSsH4D,CTrH5D,yCSqH4D,C8BQ9D,YAAa,CAEb,6BAA8B,CAC9B,YjD65KF,CiDj6KA,qBAWI,6BAA6F,CAF7F,YjD65KJ,CiDt5KA,aAEE,e9C2I+B,C8C5I/B,ejD05KF,CiDp5KA,YAIE,aAAc,CACd,Y9CuwBsC,C8C3wBtC,iBjDy5KF,CiDj5KA,cAGE,kBAAmB,CvCjJjB,2CSuG4D,CTxG5D,4CSwG4D,C8B6C9D,4B9CvKgB,C8CkKhB,YAAa,CACb,cAAe,CAEf,wBAAyB,CACzB,cjDu5KF,CiD55KA,gBAcI,ajDk5KJ,CiD74KA,yBAIE,WAAY,CACZ,eAAgB,CAJhB,iBAAkB,CAClB,WAAY,CACZ,UjDk5KF,CcvhLI,yBmCzBJ,cAwKI,mBAAyC,CADzC,ejD+4KF,CiDhiLF,yBAsJI,8BjD64KF,CiDniLF,wCAyJM,+BjD64KJ,CiDnhLF,uBA2II,8BjD24KF,CiDthLF,8BA8IM,2BjD24KJ,CiDn4KA,UAAY,ejDs4KZ,CACF,Cc7iLI,yBmC0KF,oBAEE,ejDu4KF,CACF,CcpjLI,0BmCiLF,UAAY,gBjDw4KZ,CACF,CkDrnLA,SAUE,oBAAqB,CAPrB,aAAc,CCHd,wKhDuRiN,CCzJ7M,iBAtCY,C+CtFhB,iBAAkB,CAClB,ehD+R+B,CgDxR/B,qBAAsB,CAItB,eAAgB,CAVhB,ehDmS+B,C+CnS/B,Q/Cy1BmC,C+Cl1BnC,SAAU,CAVV,iBAAkB,CCIlB,eAAgB,CAChB,gBAAiB,CACjB,oBAAqB,CACrB,gBAAiB,CACjB,mBAAoB,CAIpB,kBAAmB,CAFnB,iBAAkB,CAClB,mBAAoB,CDVpB,YlD2oLF,CkD7oLA,cAaW,UlDooLX,CkDjpLA,gBAiBI,aAAc,CAEd,Y/C60BqC,C+Ch1BrC,iBAAkB,CAElB,WlDsoLJ,CkDxpLA,uBAwBM,kBAAyB,CACzB,kBAAmB,CAFnB,UAAW,CADX,iBlDyoLN,CkDjoLA,mDACE,elDooLF,CkDroLA,iEAII,QlDqoLJ,CkDzoLA,+EASM,qB/CvBS,C+CsBT,0BAAgE,CADhE,KlDwoLN,CkDjoLA,uDACE,elDooLF,CkDroLA,qEAMI,Y/C6yBqC,C+C/yBrC,MAAO,CACP,WlDsoLJ,CkD3oLA,mFAWM,uB/CvCS,C+CsCT,gCAA2F,CAD3F,OlDwoLN,CkDjoLA,yDACE,elDooLF,CkDroLA,uEAII,KlDqoLJ,CkDzoLA,qFASM,wB/CrDS,C+CoDT,0B/C4xBmC,C+C7xBnC,QlDwoLN,CkDjoLA,qDACE,elDooLF,CkDroLA,mEAMI,Y/C+wBqC,C+CjxBrC,OAAQ,CACR,WlDsoLJ,CkD3oLA,iFAWM,sB/CrES,C+CoET,gC/C4wBmC,C+C7wBnC,MlDwoLN,CkDjnLA,eAKE,qB/C/Fa,COZX,oBP6OgC,C+CpIlC,U/CvGa,C+CqGb,e/C2uBuC,C+C1uBvC,oB/CgvBuC,C+C9uBvC,iBlDsnLF,CoDruLA,SAYE,oBAAqB,CAErB,2BAA4B,CAD5B,qBjDNa,CiDQb,sBjDEa,COZX,mBP8O+B,CgDlPjC,wKhDuRiN,CCzJ7M,iBAtCY,C+CtFhB,iBAAkB,CAClB,ehD+R+B,CiDhS/B,MAAO,CDQP,qBAAsB,CAItB,eAAgB,CAVhB,ehDmS+B,CiDlS/B,ejD22BuC,CgD32BvC,eAAgB,CAChB,gBAAiB,CACjB,oBAAqB,CACrB,gBAAiB,CACjB,mBAAoB,CCRpB,KAAM,CDYN,kBAAmB,CAFnB,iBAAkB,CAClB,mBAAoB,CCTpB,YpD8vLF,CoDlwLA,yBAKE,aAAc,CAJd,iBpDywLF,CoD1wLA,gBAuBI,YjD22BqC,CiD12BrC,cjD2N+B,CiD7N/B,UpDovLJ,CoD1wLA,6CA+BM,kBAAyB,CACzB,kBAAmB,CAFnB,UAAW,CADX,aAAc,CADd,iBpDsvLN,CoD7uLA,mDACE,mBpDgvLF,CoDjvLA,iEAII,yBpDivLJ,CoDrvLA,+EASM,0BjDu1BiE,CiDx1BjE,0BAAgE,CADhE,QpDovLN,CoD3vLA,6EAeM,qBjD7CS,CiD4CT,0BAAgE,CADhE,UpDovLN,CoD7uLA,uDACE,iBpDgvLF,CoDjvLA,qEAMI,WjDk0BoC,CiDp0BpC,uBjCuE4D,CiCpE5D,cAAgC,CAFhC,WpDmvLJ,CoDxvLA,mFAYM,4BjDg0BiE,CiDj0BjE,gCAA2F,CAD3F,MpDovLN,CoD9vLA,iFAkBM,uBjDpES,CiDmET,gCAA2F,CAD3F,QpDovLN,CoD7uLA,yDACE,gBpDgvLF,CoDjvLA,uEAII,sBpDivLJ,CoDrvLA,qFASM,6BjD4yBiE,CiD7yBjE,0BAA2F,CAD3F,KpDovLN,CoD3vLA,mFAeM,wBjDxFS,CiDuFT,0BAA2F,CAD3F,OpDovLN,CoDjwLA,uGA4BI,+BjD4wBuD,CiD7wBvD,UAAW,CAHX,aAAc,CADd,QAAS,CAGT,kBAAsC,CALtC,iBAAkB,CAClB,KAAM,CAGN,UpDmvLJ,CoD5uLA,qDACE,kBpD+uLF,CoDhvLA,mEAMI,WjD2wBoC,CiD1wBpC,cAAgC,CAHhC,wBjCgB4D,CiCf5D,WpDkvLJ,CoDvvLA,iFAYM,2BjDywBiE,CiD1wBjE,gCjDuwBmC,CiDxwBnC,OpDmvLN,CoD7vLA,+EAkBM,sBjD3HS,CiD0HT,gCjDiwBmC,CiDlwBnC,SpDmvLN,CoD3tLA,gBAKE,wBjD2tByD,CiD1tBzD,+BAAyE,C1ChJvE,wCSsH4D,CTrH5D,yCSqH4D,CfL1D,cAtCY,CgDiEhB,eAAgB,CADhB,oBpDouLF,CoDruLA,sBAUI,YpD+tLJ,CoD3tLA,cAEE,ajDxJgB,CiDuJhB,oBpD+tLF,CqDz3LA,UACE,iBrD43LF,CqDz3LA,wBACE,kBrD43LF,CqDz3LA,gBAGE,eAAgB,CAFhB,iBAAkB,CAClB,UrD63LF,CsDn5LE,sBAEE,UAAW,CACX,UAAW,CAFX,atDw5LJ,CqD93LA,eAME,0BAA2B,CAJ3B,YAAa,CACb,UAAW,CAEX,kBAAmB,CAJnB,iBAAkB,CjCvBd,oCjBikCkF,CkDviCtF,UrDo4LF,CoBz5LI,uCiCiBJ,ejChBM,epB65LJ,CACF,CqDp4LA,8DAGE,arDu4LF,CqDp4LA,yEAEE,0BrDu4LF,CqDp4LA,yEAEE,2BrDu4LF,CqD/3LA,8BAEI,SAAU,CAEV,cAAe,CADf,2BrDk4LJ,CqDr4LA,kJAWI,SAAU,CADV,SrDk4LJ,CqD54LA,qFAiBI,SAAU,CjCtER,yBjBgkCkC,CkD3/BpC,SrDm4LJ,CoBn8LI,uCiCgDJ,qFjC/CM,epBw8LJ,CACF,CqD/3LA,8CAQE,kBAAmB,CAJnB,QAAS,CAOT,UlD1Fa,CkDsFb,YAAa,CAEb,sBAAuB,CAIvB,UlDg9BqC,CkD39BrC,iBAAkB,CAUlB,iBAAkB,CATlB,KAAM,CjCnFF,4BjB+iCgD,CkDr9BpD,SlDk9BsC,CkDv9BtC,SrD04LF,CoB19LI,uCiC2EJ,8CjC1EM,epB+9LJ,CACF,CK59LE,oHgDwFE,UlDjGW,CkDoGX,UlDy8BmC,CkD18BnC,SAAU,CADV,oBrD44LJ,CqDv4LA,uBACE,MrD04LF,CqDr4LA,uBACE,OrDw4LF,CqDj4LA,wDAKE,kCAAqC,CAHrC,oBAAqB,CAErB,WlDi8BuC,CkDl8BvC,UrDs4LF,CqDl4LA,4BACE,gNrDq4LF,CqDn4LA,4BACE,iNrDs4LF,CqD73LA,qBAGE,QAAS,CAGT,YAAa,CACb,sBAAuB,CAHvB,MAAO,CAQP,eAAgB,CADhB,elDu5BsC,CkDx5BtC,gBlDw5BsC,CkD15BtC,cAAe,CAPf,iBAAkB,CAClB,OAAQ,CAGR,UrDs4LF,CqD34LA,wBAwBI,2BAA4B,CAD5B,qBlDhKW,CkDoKX,8BAAoE,CADpE,2BAAiE,CAXjE,kBAAuB,CAOvB,cAAe,CANf,aAAc,CAEd,UlDs5BoC,CkDp5BpC,elDs5BoC,CkDv5BpC,gBlDu5BoC,CkD94BpC,UAAW,CAPX,kBAAmB,CjC/JjB,2BjBsjC+C,CkD35BjD,UrD24LJ,CoBjiMI,uCiCqIJ,wBjCpIM,epBqiMJ,CACF,CqDl6LA,6BAiCI,SrDq4LJ,CqD53LA,kBAGE,WAAY,CAKZ,UlD3La,CkDuLb,QAA0C,CAG1C,mBAAoB,CADpB,gBAAiB,CALjB,iBAAkB,CAClB,SAA2C,CAO3C,iBAAkB,CAJlB,UrDm4LF,CuD9jMA,0BACE,GAAK,uBvDkkML,CACF,CuDhkMA,gBASE,6CAA8C,CAH9C,kBAA+B,CAE/B,iBAAkB,CAFlB,8BAA+B,CAL/B,oBAAqB,CAErB,WpDikC0B,CoDhkC1B,0BAA2B,CAF3B,UvDykMF,CuD/jMA,mBAGE,iBpD2jC4B,CoD5jC5B,WpD0jC4B,CoD3jC5B,UvDokMF,CuD3jMA,wBACE,GACE,kBvD8jMF,CuD5jMA,IACE,SvD8jMF,CACF,CuD3jMA,cASE,2CAA4C,CAJ5C,6BAA8B,CAE9B,iBAAkB,CANlB,oBAAqB,CAErB,WpDkiC0B,CoD7hC1B,SAAU,CAJV,0BAA2B,CAF3B,UvDokMF,CuD1jMA,iBAEE,WpD2hC4B,CoD5hC5B,UvD8jMF,CwDhnMA,gBAAqB,gCxDonMrB,CwDnnMA,WAAqB,4BxDunMrB,CwDtnMA,cAAqB,+BxD0nMrB,CwDznMA,cAAqB,+BxD6nMrB,CwD5nMA,mBAAqB,oCxDgoMrB,CwD/nMA,gBAAqB,iCxDmoMrB,CyDroME,YACE,kCzDwoMJ,CK9nME,sFoDLI,kCzDyoMN,CyD/oME,cACE,kCzDkpMJ,CKxoME,8FoDLI,kCzDmpMN,CyDzpME,YACE,kCzD4pMJ,CKlpME,sFoDLI,kCzD6pMN,CyDnqME,SACE,kCzDsqMJ,CK5pME,0EoDLI,kCzDuqMN,CyD7qME,YACE,kCzDgrMJ,CKtqME,sFoDLI,kCzDirMN,CyDvrME,WACE,kCzD0rMJ,CKhrME,kFoDLI,kCzD2rMN,CyDjsME,UACE,kCzDosMJ,CK1rME,8EoDLI,kCzDqsMN,CyD3sME,SACE,kCzD8sMJ,CKpsME,0EoDLI,kCzD+sMN,C0D9sMA,UACE,+B1DitMF,C0D9sMA,gBACE,kC1DitMF,C2D5tMA,QAAkB,kC3DguMlB,C2D/tMA,YAAkB,sC3DmuMlB,C2DluMA,cAAkB,wC3DsuMlB,C2DruMA,eAAkB,yC3DyuMlB,C2DxuMA,aAAkB,uC3D4uMlB,C2D1uMA,UAAmB,kB3D8uMnB,C2D7uMA,cAAmB,sB3DivMnB,C2DhvMA,gBAAmB,wB3DovMnB,C2DnvMA,iBAAmB,yB3DuvMnB,C2DtvMA,eAAmB,uB3D0vMnB,C2DvvME,gBACE,8B3D0vMJ,C2D3vME,kBACE,8B3D8vMJ,C2D/vME,gBACE,8B3DkwMJ,C2DnwME,aACE,8B3DswMJ,C2DvwME,gBACE,8B3D0wMJ,C2D3wME,eACE,8B3D8wMJ,C2D/wME,cACE,8B3DkxMJ,C2DnxME,aACE,8B3DsxMJ,C2DlxMA,cACE,2B3DqxMF,C2D9wMA,YACE,6B3DixMF,C2D9wMA,SACE,8B3DixMF,C2D9wMA,aACE,uC3DkxMF,C2D9wMA,4BAHE,wC3DsxMF,C2D9wMA,+BAHE,2C3DsxMF,C2D9wMA,8BAHE,0C3DsxMF,C2DnxMA,cACE,uC3DkxMF,C2D9wMA,YACE,6B3DixMF,C2D9wMA,gBACE,2B3DixMF,C2D9wMA,cACE,6B3DixMF,C2D9wMA,WACE,yB3DixMF,CsDz1ME,gBAEE,UAAW,CACX,UAAW,CAFX,atD81MJ,C4Dr1MM,QAAwB,sB5Dy1M9B,C4Dz1MM,UAAwB,wB5D61M9B,C4D71MM,gBAAwB,8B5Di2M9B,C4Dj2MM,SAAwB,uB5Dq2M9B,C4Dr2MM,SAAwB,uB5Dy2M9B,C4Dz2MM,aAAwB,2B5D62M9B,C4D72MM,cAAwB,4B5Di3M9B,C4Dj3MM,QAAwB,sB5Dq3M9B,C4Dr3MM,eAAwB,6B5Dy3M9B,Ccx0MI,yB8CjDE,WAAwB,sB5D83M5B,C4D93MI,aAAwB,wB5Di4M5B,C4Dj4MI,mBAAwB,8B5Do4M5B,C4Dp4MI,YAAwB,uB5Du4M5B,C4Dv4MI,YAAwB,uB5D04M5B,C4D14MI,gBAAwB,2B5D64M5B,C4D74MI,iBAAwB,4B5Dg5M5B,C4Dh5MI,WAAwB,sB5Dm5M5B,C4Dn5MI,kBAAwB,6B5Ds5M5B,CACF,Cct2MI,yB8CjDE,WAAwB,sB5D45M5B,C4D55MI,aAAwB,wB5D+5M5B,C4D/5MI,mBAAwB,8B5Dk6M5B,C4Dl6MI,YAAwB,uB5Dq6M5B,C4Dr6MI,YAAwB,uB5Dw6M5B,C4Dx6MI,gBAAwB,2B5D26M5B,C4D36MI,iBAAwB,4B5D86M5B,C4D96MI,WAAwB,sB5Di7M5B,C4Dj7MI,kBAAwB,6B5Do7M5B,CACF,Ccp4MI,yB8CjDE,WAAwB,sB5D07M5B,C4D17MI,aAAwB,wB5D67M5B,C4D77MI,mBAAwB,8B5Dg8M5B,C4Dh8MI,YAAwB,uB5Dm8M5B,C4Dn8MI,YAAwB,uB5Ds8M5B,C4Dt8MI,gBAAwB,2B5Dy8M5B,C4Dz8MI,iBAAwB,4B5D48M5B,C4D58MI,WAAwB,sB5D+8M5B,C4D/8MI,kBAAwB,6B5Dk9M5B,CACF,Ccl6MI,0B8CjDE,WAAwB,sB5Dw9M5B,C4Dx9MI,aAAwB,wB5D29M5B,C4D39MI,mBAAwB,8B5D89M5B,C4D99MI,YAAwB,uB5Di+M5B,C4Dj+MI,YAAwB,uB5Do+M5B,C4Dp+MI,gBAAwB,2B5Du+M5B,C4Dv+MI,iBAAwB,4B5D0+M5B,C4D1+MI,WAAwB,sB5D6+M5B,C4D7+MI,kBAAwB,6B5Dg/M5B,CACF,C4Dv+MA,aAEI,cAAqB,sB5D0+MvB,C4D1+ME,gBAAqB,wB5D6+MvB,C4D7+ME,sBAAqB,8B5Dg/MvB,C4Dh/ME,eAAqB,uB5Dm/MvB,C4Dn/ME,eAAqB,uB5Ds/MvB,C4Dt/ME,mBAAqB,2B5Dy/MvB,C4Dz/ME,oBAAqB,4B5D4/MvB,C4D5/ME,cAAqB,sB5D+/MvB,C4D//ME,qBAAqB,6B5DkgNvB,CACF,C6DxhNA,kBAEE,aAAc,CAGd,eAAgB,CADhB,SAAU,CAHV,iBAAkB,CAElB,U7D6hNF,C6DhiNA,yBASI,UAAW,CADX,a7D6hNJ,C6DriNA,2IAuBI,QAAS,CAJT,QAAS,CAGT,WAAY,CAFZ,MAAO,CAHP,iBAAkB,CAClB,KAAM,CAGN,U7D8hNJ,C6DphNE,+BAEI,sB7DshNN,C6DxhNE,+BAEI,kB7D0hNN,C6D5hNE,8BAEI,e7D8hNN,C6DhiNE,8BAEI,gB7DkiNN,C8D3jNI,UAAgC,4B9D+jNpC,C8D9jNI,aAAgC,+B9DkkNpC,C8DjkNI,kBAAgC,oC9DqkNpC,C8DpkNI,qBAAgC,uC9DwkNpC,C8DtkNI,WAA8B,wB9D0kNlC,C8DzkNI,aAA8B,0B9D6kNlC,C8D5kNI,mBAA8B,gC9DglNlC,C8D/kNI,WAA8B,uB9DmlNlC,C8DllNI,aAA8B,qB9DslNlC,C8DrlNI,aAA8B,qB9DylNlC,C8DxlNI,eAA8B,uB9D4lNlC,C8D3lNI,eAA8B,uB9D+lNlC,C8D7lNI,uBAAoC,oC9DimNxC,C8DhmNI,qBAAoC,kC9DomNxC,C8DnmNI,wBAAoC,gC9DumNxC,C8DtmNI,yBAAoC,uC9D0mNxC,C8DzmNI,wBAAoC,sC9D6mNxC,C8D3mNI,mBAAiC,gC9D+mNrC,C8D9mNI,iBAAiC,8B9DknNrC,C8DjnNI,oBAAiC,4B9DqnNrC,C8DpnNI,sBAAiC,8B9DwnNrC,C8DvnNI,qBAAiC,6B9D2nNrC,C8DznNI,qBAAkC,kC9D6nNtC,C8D5nNI,mBAAkC,gC9DgoNtC,C8D/nNI,sBAAkC,8B9DmoNtC,C8DloNI,uBAAkC,qC9DsoNtC,C8DroNI,sBAAkC,oC9DyoNtC,C8DxoNI,uBAAkC,+B9D4oNtC,C8D1oNI,iBAAgC,yB9D8oNpC,C8D7oNI,kBAAgC,+B9DipNpC,C8DhpNI,gBAAgC,6B9DopNpC,C8DnpNI,mBAAgC,2B9DupNpC,C8DtpNI,qBAAgC,6B9D0pNpC,C8DzpNI,oBAAgC,4B9D6pNpC,CcjpNI,yBgDlDA,aAAgC,4B9DwsNlC,C8DvsNE,gBAAgC,+B9D0sNlC,C8DzsNE,qBAAgC,oC9D4sNlC,C8D3sNE,wBAAgC,uC9D8sNlC,C8D5sNE,cAA8B,wB9D+sNhC,C8D9sNE,gBAA8B,0B9DitNhC,C8DhtNE,sBAA8B,gC9DmtNhC,C8DltNE,cAA8B,uB9DqtNhC,C8DptNE,gBAA8B,qB9DutNhC,C8DttNE,gBAA8B,qB9DytNhC,C8DxtNE,kBAA8B,uB9D2tNhC,C8D1tNE,kBAA8B,uB9D6tNhC,C8D3tNE,0BAAoC,oC9D8tNtC,C8D7tNE,wBAAoC,kC9DguNtC,C8D/tNE,2BAAoC,gC9DkuNtC,C8DjuNE,4BAAoC,uC9DouNtC,C8DnuNE,2BAAoC,sC9DsuNtC,C8DpuNE,sBAAiC,gC9DuuNnC,C8DtuNE,oBAAiC,8B9DyuNnC,C8DxuNE,uBAAiC,4B9D2uNnC,C8D1uNE,yBAAiC,8B9D6uNnC,C8D5uNE,wBAAiC,6B9D+uNnC,C8D7uNE,wBAAkC,kC9DgvNpC,C8D/uNE,sBAAkC,gC9DkvNpC,C8DjvNE,yBAAkC,8B9DovNpC,C8DnvNE,0BAAkC,qC9DsvNpC,C8DrvNE,yBAAkC,oC9DwvNpC,C8DvvNE,0BAAkC,+B9D0vNpC,C8DxvNE,oBAAgC,yB9D2vNlC,C8D1vNE,qBAAgC,+B9D6vNlC,C8D5vNE,mBAAgC,6B9D+vNlC,C8D9vNE,sBAAgC,2B9DiwNlC,C8DhwNE,wBAAgC,6B9DmwNlC,C8DlwNE,uBAAgC,4B9DqwNlC,CACF,Cc1vNI,yBgDlDA,aAAgC,4B9DizNlC,C8DhzNE,gBAAgC,+B9DmzNlC,C8DlzNE,qBAAgC,oC9DqzNlC,C8DpzNE,wBAAgC,uC9DuzNlC,C8DrzNE,cAA8B,wB9DwzNhC,C8DvzNE,gBAA8B,0B9D0zNhC,C8DzzNE,sBAA8B,gC9D4zNhC,C8D3zNE,cAA8B,uB9D8zNhC,C8D7zNE,gBAA8B,qB9Dg0NhC,C8D/zNE,gBAA8B,qB9Dk0NhC,C8Dj0NE,kBAA8B,uB9Do0NhC,C8Dn0NE,kBAA8B,uB9Ds0NhC,C8Dp0NE,0BAAoC,oC9Du0NtC,C8Dt0NE,wBAAoC,kC9Dy0NtC,C8Dx0NE,2BAAoC,gC9D20NtC,C8D10NE,4BAAoC,uC9D60NtC,C8D50NE,2BAAoC,sC9D+0NtC,C8D70NE,sBAAiC,gC9Dg1NnC,C8D/0NE,oBAAiC,8B9Dk1NnC,C8Dj1NE,uBAAiC,4B9Do1NnC,C8Dn1NE,yBAAiC,8B9Ds1NnC,C8Dr1NE,wBAAiC,6B9Dw1NnC,C8Dt1NE,wBAAkC,kC9Dy1NpC,C8Dx1NE,sBAAkC,gC9D21NpC,C8D11NE,yBAAkC,8B9D61NpC,C8D51NE,0BAAkC,qC9D+1NpC,C8D91NE,yBAAkC,oC9Di2NpC,C8Dh2NE,0BAAkC,+B9Dm2NpC,C8Dj2NE,oBAAgC,yB9Do2NlC,C8Dn2NE,qBAAgC,+B9Ds2NlC,C8Dr2NE,mBAAgC,6B9Dw2NlC,C8Dv2NE,sBAAgC,2B9D02NlC,C8Dz2NE,wBAAgC,6B9D42NlC,C8D32NE,uBAAgC,4B9D82NlC,CACF,Ccn2NI,yBgDlDA,aAAgC,4B9D05NlC,C8Dz5NE,gBAAgC,+B9D45NlC,C8D35NE,qBAAgC,oC9D85NlC,C8D75NE,wBAAgC,uC9Dg6NlC,C8D95NE,cAA8B,wB9Di6NhC,C8Dh6NE,gBAA8B,0B9Dm6NhC,C8Dl6NE,sBAA8B,gC9Dq6NhC,C8Dp6NE,cAA8B,uB9Du6NhC,C8Dt6NE,gBAA8B,qB9Dy6NhC,C8Dx6NE,gBAA8B,qB9D26NhC,C8D16NE,kBAA8B,uB9D66NhC,C8D56NE,kBAA8B,uB9D+6NhC,C8D76NE,0BAAoC,oC9Dg7NtC,C8D/6NE,wBAAoC,kC9Dk7NtC,C8Dj7NE,2BAAoC,gC9Do7NtC,C8Dn7NE,4BAAoC,uC9Ds7NtC,C8Dr7NE,2BAAoC,sC9Dw7NtC,C8Dt7NE,sBAAiC,gC9Dy7NnC,C8Dx7NE,oBAAiC,8B9D27NnC,C8D17NE,uBAAiC,4B9D67NnC,C8D57NE,yBAAiC,8B9D+7NnC,C8D97NE,wBAAiC,6B9Di8NnC,C8D/7NE,wBAAkC,kC9Dk8NpC,C8Dj8NE,sBAAkC,gC9Do8NpC,C8Dn8NE,yBAAkC,8B9Ds8NpC,C8Dr8NE,0BAAkC,qC9Dw8NpC,C8Dv8NE,yBAAkC,oC9D08NpC,C8Dz8NE,0BAAkC,+B9D48NpC,C8D18NE,oBAAgC,yB9D68NlC,C8D58NE,qBAAgC,+B9D+8NlC,C8D98NE,mBAAgC,6B9Di9NlC,C8Dh9NE,sBAAgC,2B9Dm9NlC,C8Dl9NE,wBAAgC,6B9Dq9NlC,C8Dp9NE,uBAAgC,4B9Du9NlC,CACF,Cc58NI,0BgDlDA,aAAgC,4B9DmgOlC,C8DlgOE,gBAAgC,+B9DqgOlC,C8DpgOE,qBAAgC,oC9DugOlC,C8DtgOE,wBAAgC,uC9DygOlC,C8DvgOE,cAA8B,wB9D0gOhC,C8DzgOE,gBAA8B,0B9D4gOhC,C8D3gOE,sBAA8B,gC9D8gOhC,C8D7gOE,cAA8B,uB9DghOhC,C8D/gOE,gBAA8B,qB9DkhOhC,C8DjhOE,gBAA8B,qB9DohOhC,C8DnhOE,kBAA8B,uB9DshOhC,C8DrhOE,kBAA8B,uB9DwhOhC,C8DthOE,0BAAoC,oC9DyhOtC,C8DxhOE,wBAAoC,kC9D2hOtC,C8D1hOE,2BAAoC,gC9D6hOtC,C8D5hOE,4BAAoC,uC9D+hOtC,C8D9hOE,2BAAoC,sC9DiiOtC,C8D/hOE,sBAAiC,gC9DkiOnC,C8DjiOE,oBAAiC,8B9DoiOnC,C8DniOE,uBAAiC,4B9DsiOnC,C8DriOE,yBAAiC,8B9DwiOnC,C8DviOE,wBAAiC,6B9D0iOnC,C8DxiOE,wBAAkC,kC9D2iOpC,C8D1iOE,sBAAkC,gC9D6iOpC,C8D5iOE,yBAAkC,8B9D+iOpC,C8D9iOE,0BAAkC,qC9DijOpC,C8DhjOE,yBAAkC,oC9DmjOpC,C8DljOE,0BAAkC,+B9DqjOpC,C8DnjOE,oBAAgC,yB9DsjOlC,C8DrjOE,qBAAgC,+B9DwjOlC,C8DvjOE,mBAAgC,6B9D0jOlC,C8DzjOE,sBAAgC,2B9D4jOlC,C8D3jOE,wBAAgC,6B9D8jOlC,C8D7jOE,uBAAgC,4B9DgkOlC,CACF,C+D3mOI,YAAwB,oB/D+mO5B,C+D9mOI,aAAwB,qB/DknO5B,C+DjnOI,YAAwB,oB/DqnO5B,CcjkOI,yBiDtDA,eAAwB,oB/D4nO1B,C+D3nOE,gBAAwB,qB/D8nO1B,C+D7nOE,eAAwB,oB/DgoO1B,CACF,Cc7kOI,yBiDtDA,eAAwB,oB/DwoO1B,C+DvoOE,gBAAwB,qB/D0oO1B,C+DzoOE,eAAwB,oB/D4oO1B,CACF,CczlOI,yBiDtDA,eAAwB,oB/DopO1B,C+DnpOE,gBAAwB,qB/DspO1B,C+DrpOE,eAAwB,oB/DwpO1B,CACF,CcrmOI,0BiDtDA,eAAwB,oB/DgqO1B,C+D/pOE,gBAAwB,qB/DkqO1B,C+DjqOE,eAAwB,oB/DoqO1B,CACF,CgE1qOE,eAAsB,uBhE8qOxB,CgE9qOE,iBAAsB,yBhEkrOxB,CiEjrOE,iBAAyB,yBjEqrO3B,CiErrOE,mBAAyB,2BjEyrO3B,CiEzrOE,mBAAyB,2BjE6rO3B,CiE7rOE,gBAAyB,wBjEisO3B,CiEjsOE,iBAAyB,yBjEqsO3B,CiEhsOA,WAEE,KjEssOF,CiEhsOA,yBAJE,MAAO,CAHP,cAAe,CAEf,OAAQ,CAER,YjE2sOF,CiExsOA,cAGE,QjEqsOF,CiE/rO8B,4BAD9B,YAEI,eAAgB,CAChB,KAAM,CACN,YjEmsOF,CACF,CkE7tOA,SCQE,kBAAsB,CAEtB,QAAS,CANT,UAAW,CAEX,WAAY,CACZ,eAAgB,CAFhB,SAAU,CAHV,iBAAkB,CAOlB,kBAAmB,CANnB,SnEsuOF,CmErtOE,mDAME,SAAU,CAFV,WAAY,CACZ,gBAAiB,CAHjB,eAAgB,CAKhB,kBAAmB,CAJnB,UnE2tOJ,CoEpvOA,WAAa,sDpEwvOb,CoEvvOA,QAAU,2CpE2vOV,CoE1vOA,WAAa,iDpE8vOb,CoE7vOA,aAAe,yBpEiwOf,CqEhwOI,MAAuB,mBrEowO3B,CqEpwOI,MAAuB,mBrEwwO3B,CqExwOI,MAAuB,mBrE4wO3B,CqE5wOI,OAAuB,oBrEgxO3B,CqEhxOI,QAAuB,oBrEoxO3B,CqEpxOI,MAAuB,oBrEwxO3B,CqExxOI,MAAuB,oBrE4xO3B,CqE5xOI,MAAuB,oBrEgyO3B,CqEhyOI,OAAuB,qBrEoyO3B,CqEpyOI,QAAuB,qBrEwyO3B,CqEpyOA,QAAU,wBrEwyOV,CqEvyOA,QAAU,yBrE2yOV,CqEvyOA,YAAc,yBrE2yOd,CqE1yOA,YAAc,0BrE8yOd,CqE5yOA,QAAU,qBrEgzOV,CqE/yOA,QAAU,sBrEmzOV,CsEl0OA,sBAYI,sBAAkC,CAPlC,QAAS,CAKT,UAAW,CAJX,MAAO,CAGP,mBAAoB,CAPpB,iBAAkB,CAElB,OAAQ,CADR,KAAM,CAIN,StEu0OJ,CuEx0OQ,KAAgC,kBvE40OxC,CuE30OQ,YAEE,sBvE80OV,CuE50OQ,YAEE,wBvE+0OV,CuE70OQ,YAEE,yBvEg1OV,CuE90OQ,YAEE,uBvEi1OV,CuEh2OQ,KAAgC,uBvEo2OxC,CuEn2OQ,YAEE,2BvEs2OV,CuEp2OQ,YAEE,6BvEu2OV,CuEr2OQ,YAEE,8BvEw2OV,CuEt2OQ,YAEE,4BvEy2OV,CuEx3OQ,KAAgC,sBvE43OxC,CuE33OQ,YAEE,0BvE83OV,CuE53OQ,YAEE,4BvE+3OV,CuE73OQ,YAEE,6BvEg4OV,CuE93OQ,YAEE,2BvEi4OV,CuEh5OQ,KAAgC,qBvEo5OxC,CuEn5OQ,YAEE,yBvEs5OV,CuEp5OQ,YAEE,2BvEu5OV,CuEr5OQ,YAEE,4BvEw5OV,CuEt5OQ,YAEE,0BvEy5OV,CuEx6OQ,KAAgC,uBvE46OxC,CuE36OQ,YAEE,2BvE86OV,CuE56OQ,YAEE,6BvE+6OV,CuE76OQ,YAEE,8BvEg7OV,CuE96OQ,YAEE,4BvEi7OV,CuEh8OQ,KAAgC,qBvEo8OxC,CuEn8OQ,YAEE,yBvEs8OV,CuEp8OQ,YAEE,2BvEu8OV,CuEr8OQ,YAEE,4BvEw8OV,CuEt8OQ,YAEE,0BvEy8OV,CuEx9OQ,KAAgC,mBvE49OxC,CuE39OQ,YAEE,uBvE89OV,CuE59OQ,YAEE,yBvE+9OV,CuE79OQ,YAEE,0BvEg+OV,CuE99OQ,YAEE,wBvEi+OV,CuEh/OQ,KAAgC,wBvEo/OxC,CuEn/OQ,YAEE,4BvEs/OV,CuEp/OQ,YAEE,8BvEu/OV,CuEr/OQ,YAEE,+BvEw/OV,CuEt/OQ,YAEE,6BvEy/OV,CuExgPQ,KAAgC,uBvE4gPxC,CuE3gPQ,YAEE,2BvE8gPV,CuE5gPQ,YAEE,6BvE+gPV,CuE7gPQ,YAEE,8BvEghPV,CuE9gPQ,YAEE,4BvEihPV,CuEhiPQ,KAAgC,sBvEoiPxC,CuEniPQ,YAEE,0BvEsiPV,CuEpiPQ,YAEE,4BvEuiPV,CuEriPQ,YAEE,6BvEwiPV,CuEtiPQ,YAEE,2BvEyiPV,CuExjPQ,KAAgC,wBvE4jPxC,CuE3jPQ,YAEE,4BvE8jPV,CuE5jPQ,YAEE,8BvE+jPV,CuE7jPQ,YAEE,+BvEgkPV,CuE9jPQ,YAEE,6BvEikPV,CuEhlPQ,KAAgC,sBvEolPxC,CuEnlPQ,YAEE,0BvEslPV,CuEplPQ,YAEE,4BvEulPV,CuErlPQ,YAEE,6BvEwlPV,CuEtlPQ,YAEE,2BvEylPV,CuEjlPQ,MAAwB,wBvEqlPhC,CuEplPQ,cAEE,4BvEulPV,CuErlPQ,cAEE,8BvEwlPV,CuEtlPQ,cAEE,+BvEylPV,CuEvlPQ,cAEE,6BvE0lPV,CuEzmPQ,MAAwB,uBvE6mPhC,CuE5mPQ,cAEE,2BvE+mPV,CuE7mPQ,cAEE,6BvEgnPV,CuE9mPQ,cAEE,8BvEinPV,CuE/mPQ,cAEE,4BvEknPV,CuEjoPQ,MAAwB,sBvEqoPhC,CuEpoPQ,cAEE,0BvEuoPV,CuEroPQ,cAEE,4BvEwoPV,CuEtoPQ,cAEE,6BvEyoPV,CuEvoPQ,cAEE,2BvE0oPV,CuEzpPQ,MAAwB,wBvE6pPhC,CuE5pPQ,cAEE,4BvE+pPV,CuE7pPQ,cAEE,8BvEgqPV,CuE9pPQ,cAEE,+BvEiqPV,CuE/pPQ,cAEE,6BvEkqPV,CuEjrPQ,MAAwB,sBvEqrPhC,CuEprPQ,cAEE,0BvEurPV,CuErrPQ,cAEE,4BvEwrPV,CuEtrPQ,cAEE,6BvEyrPV,CuEvrPQ,cAEE,2BvE0rPV,CuEprPI,QAAmB,qBvEwrPvB,CuEvrPI,kBAEE,yBvE0rPN,CuExrPI,kBAEE,2BvE2rPN,CuEzrPI,kBAEE,4BvE4rPN,CuE1rPI,kBAEE,0BvE6rPN,CctsPI,yByDlDI,QAAgC,kBvE6vPtC,CuE5vPM,kBAEE,sBvE8vPR,CuE5vPM,kBAEE,wBvE8vPR,CuE5vPM,kBAEE,yBvE8vPR,CuE5vPM,kBAEE,uBvE8vPR,CuE7wPM,QAAgC,uBvEgxPtC,CuE/wPM,kBAEE,2BvEixPR,CuE/wPM,kBAEE,6BvEixPR,CuE/wPM,kBAEE,8BvEixPR,CuE/wPM,kBAEE,4BvEixPR,CuEhyPM,QAAgC,sBvEmyPtC,CuElyPM,kBAEE,0BvEoyPR,CuElyPM,kBAEE,4BvEoyPR,CuElyPM,kBAEE,6BvEoyPR,CuElyPM,kBAEE,2BvEoyPR,CuEnzPM,QAAgC,qBvEszPtC,CuErzPM,kBAEE,yBvEuzPR,CuErzPM,kBAEE,2BvEuzPR,CuErzPM,kBAEE,4BvEuzPR,CuErzPM,kBAEE,0BvEuzPR,CuEt0PM,QAAgC,uBvEy0PtC,CuEx0PM,kBAEE,2BvE00PR,CuEx0PM,kBAEE,6BvE00PR,CuEx0PM,kBAEE,8BvE00PR,CuEx0PM,kBAEE,4BvE00PR,CuEz1PM,QAAgC,qBvE41PtC,CuE31PM,kBAEE,yBvE61PR,CuE31PM,kBAEE,2BvE61PR,CuE31PM,kBAEE,4BvE61PR,CuE31PM,kBAEE,0BvE61PR,CuE52PM,QAAgC,mBvE+2PtC,CuE92PM,kBAEE,uBvEg3PR,CuE92PM,kBAEE,yBvEg3PR,CuE92PM,kBAEE,0BvEg3PR,CuE92PM,kBAEE,wBvEg3PR,CuE/3PM,QAAgC,wBvEk4PtC,CuEj4PM,kBAEE,4BvEm4PR,CuEj4PM,kBAEE,8BvEm4PR,CuEj4PM,kBAEE,+BvEm4PR,CuEj4PM,kBAEE,6BvEm4PR,CuEl5PM,QAAgC,uBvEq5PtC,CuEp5PM,kBAEE,2BvEs5PR,CuEp5PM,kBAEE,6BvEs5PR,CuEp5PM,kBAEE,8BvEs5PR,CuEp5PM,kBAEE,4BvEs5PR,CuEr6PM,QAAgC,sBvEw6PtC,CuEv6PM,kBAEE,0BvEy6PR,CuEv6PM,kBAEE,4BvEy6PR,CuEv6PM,kBAEE,6BvEy6PR,CuEv6PM,kBAEE,2BvEy6PR,CuEx7PM,QAAgC,wBvE27PtC,CuE17PM,kBAEE,4BvE47PR,CuE17PM,kBAEE,8BvE47PR,CuE17PM,kBAEE,+BvE47PR,CuE17PM,kBAEE,6BvE47PR,CuE38PM,QAAgC,sBvE88PtC,CuE78PM,kBAEE,0BvE+8PR,CuE78PM,kBAEE,4BvE+8PR,CuE78PM,kBAEE,6BvE+8PR,CuE78PM,kBAEE,2BvE+8PR,CuEv8PM,SAAwB,wBvE08P9B,CuEz8PM,oBAEE,4BvE28PR,CuEz8PM,oBAEE,8BvE28PR,CuEz8PM,oBAEE,+BvE28PR,CuEz8PM,oBAEE,6BvE28PR,CuE19PM,SAAwB,uBvE69P9B,CuE59PM,oBAEE,2BvE89PR,CuE59PM,oBAEE,6BvE89PR,CuE59PM,oBAEE,8BvE89PR,CuE59PM,oBAEE,4BvE89PR,CuE7+PM,SAAwB,sBvEg/P9B,CuE/+PM,oBAEE,0BvEi/PR,CuE/+PM,oBAEE,4BvEi/PR,CuE/+PM,oBAEE,6BvEi/PR,CuE/+PM,oBAEE,2BvEi/PR,CuEhgQM,SAAwB,wBvEmgQ9B,CuElgQM,oBAEE,4BvEogQR,CuElgQM,oBAEE,8BvEogQR,CuElgQM,oBAEE,+BvEogQR,CuElgQM,oBAEE,6BvEogQR,CuEnhQM,SAAwB,sBvEshQ9B,CuErhQM,oBAEE,0BvEuhQR,CuErhQM,oBAEE,4BvEuhQR,CuErhQM,oBAEE,6BvEuhQR,CuErhQM,oBAEE,2BvEuhQR,CuEjhQE,WAAmB,qBvEohQrB,CuEnhQE,wBAEE,yBvEqhQJ,CuEnhQE,wBAEE,2BvEqhQJ,CuEnhQE,wBAEE,4BvEqhQJ,CuEnhQE,wBAEE,0BvEqhQJ,CACF,Cc/hQI,yByDlDI,QAAgC,kBvEslQtC,CuErlQM,kBAEE,sBvEulQR,CuErlQM,kBAEE,wBvEulQR,CuErlQM,kBAEE,yBvEulQR,CuErlQM,kBAEE,uBvEulQR,CuEtmQM,QAAgC,uBvEymQtC,CuExmQM,kBAEE,2BvE0mQR,CuExmQM,kBAEE,6BvE0mQR,CuExmQM,kBAEE,8BvE0mQR,CuExmQM,kBAEE,4BvE0mQR,CuEznQM,QAAgC,sBvE4nQtC,CuE3nQM,kBAEE,0BvE6nQR,CuE3nQM,kBAEE,4BvE6nQR,CuE3nQM,kBAEE,6BvE6nQR,CuE3nQM,kBAEE,2BvE6nQR,CuE5oQM,QAAgC,qBvE+oQtC,CuE9oQM,kBAEE,yBvEgpQR,CuE9oQM,kBAEE,2BvEgpQR,CuE9oQM,kBAEE,4BvEgpQR,CuE9oQM,kBAEE,0BvEgpQR,CuE/pQM,QAAgC,uBvEkqQtC,CuEjqQM,kBAEE,2BvEmqQR,CuEjqQM,kBAEE,6BvEmqQR,CuEjqQM,kBAEE,8BvEmqQR,CuEjqQM,kBAEE,4BvEmqQR,CuElrQM,QAAgC,qBvEqrQtC,CuEprQM,kBAEE,yBvEsrQR,CuEprQM,kBAEE,2BvEsrQR,CuEprQM,kBAEE,4BvEsrQR,CuEprQM,kBAEE,0BvEsrQR,CuErsQM,QAAgC,mBvEwsQtC,CuEvsQM,kBAEE,uBvEysQR,CuEvsQM,kBAEE,yBvEysQR,CuEvsQM,kBAEE,0BvEysQR,CuEvsQM,kBAEE,wBvEysQR,CuExtQM,QAAgC,wBvE2tQtC,CuE1tQM,kBAEE,4BvE4tQR,CuE1tQM,kBAEE,8BvE4tQR,CuE1tQM,kBAEE,+BvE4tQR,CuE1tQM,kBAEE,6BvE4tQR,CuE3uQM,QAAgC,uBvE8uQtC,CuE7uQM,kBAEE,2BvE+uQR,CuE7uQM,kBAEE,6BvE+uQR,CuE7uQM,kBAEE,8BvE+uQR,CuE7uQM,kBAEE,4BvE+uQR,CuE9vQM,QAAgC,sBvEiwQtC,CuEhwQM,kBAEE,0BvEkwQR,CuEhwQM,kBAEE,4BvEkwQR,CuEhwQM,kBAEE,6BvEkwQR,CuEhwQM,kBAEE,2BvEkwQR,CuEjxQM,QAAgC,wBvEoxQtC,CuEnxQM,kBAEE,4BvEqxQR,CuEnxQM,kBAEE,8BvEqxQR,CuEnxQM,kBAEE,+BvEqxQR,CuEnxQM,kBAEE,6BvEqxQR,CuEpyQM,QAAgC,sBvEuyQtC,CuEtyQM,kBAEE,0BvEwyQR,CuEtyQM,kBAEE,4BvEwyQR,CuEtyQM,kBAEE,6BvEwyQR,CuEtyQM,kBAEE,2BvEwyQR,CuEhyQM,SAAwB,wBvEmyQ9B,CuElyQM,oBAEE,4BvEoyQR,CuElyQM,oBAEE,8BvEoyQR,CuElyQM,oBAEE,+BvEoyQR,CuElyQM,oBAEE,6BvEoyQR,CuEnzQM,SAAwB,uBvEszQ9B,CuErzQM,oBAEE,2BvEuzQR,CuErzQM,oBAEE,6BvEuzQR,CuErzQM,oBAEE,8BvEuzQR,CuErzQM,oBAEE,4BvEuzQR,CuEt0QM,SAAwB,sBvEy0Q9B,CuEx0QM,oBAEE,0BvE00QR,CuEx0QM,oBAEE,4BvE00QR,CuEx0QM,oBAEE,6BvE00QR,CuEx0QM,oBAEE,2BvE00QR,CuEz1QM,SAAwB,wBvE41Q9B,CuE31QM,oBAEE,4BvE61QR,CuE31QM,oBAEE,8BvE61QR,CuE31QM,oBAEE,+BvE61QR,CuE31QM,oBAEE,6BvE61QR,CuE52QM,SAAwB,sBvE+2Q9B,CuE92QM,oBAEE,0BvEg3QR,CuE92QM,oBAEE,4BvEg3QR,CuE92QM,oBAEE,6BvEg3QR,CuE92QM,oBAEE,2BvEg3QR,CuE12QE,WAAmB,qBvE62QrB,CuE52QE,wBAEE,yBvE82QJ,CuE52QE,wBAEE,2BvE82QJ,CuE52QE,wBAEE,4BvE82QJ,CuE52QE,wBAEE,0BvE82QJ,CACF,Ccx3QI,yByDlDI,QAAgC,kBvE+6QtC,CuE96QM,kBAEE,sBvEg7QR,CuE96QM,kBAEE,wBvEg7QR,CuE96QM,kBAEE,yBvEg7QR,CuE96QM,kBAEE,uBvEg7QR,CuE/7QM,QAAgC,uBvEk8QtC,CuEj8QM,kBAEE,2BvEm8QR,CuEj8QM,kBAEE,6BvEm8QR,CuEj8QM,kBAEE,8BvEm8QR,CuEj8QM,kBAEE,4BvEm8QR,CuEl9QM,QAAgC,sBvEq9QtC,CuEp9QM,kBAEE,0BvEs9QR,CuEp9QM,kBAEE,4BvEs9QR,CuEp9QM,kBAEE,6BvEs9QR,CuEp9QM,kBAEE,2BvEs9QR,CuEr+QM,QAAgC,qBvEw+QtC,CuEv+QM,kBAEE,yBvEy+QR,CuEv+QM,kBAEE,2BvEy+QR,CuEv+QM,kBAEE,4BvEy+QR,CuEv+QM,kBAEE,0BvEy+QR,CuEx/QM,QAAgC,uBvE2/QtC,CuE1/QM,kBAEE,2BvE4/QR,CuE1/QM,kBAEE,6BvE4/QR,CuE1/QM,kBAEE,8BvE4/QR,CuE1/QM,kBAEE,4BvE4/QR,CuE3gRM,QAAgC,qBvE8gRtC,CuE7gRM,kBAEE,yBvE+gRR,CuE7gRM,kBAEE,2BvE+gRR,CuE7gRM,kBAEE,4BvE+gRR,CuE7gRM,kBAEE,0BvE+gRR,CuE9hRM,QAAgC,mBvEiiRtC,CuEhiRM,kBAEE,uBvEkiRR,CuEhiRM,kBAEE,yBvEkiRR,CuEhiRM,kBAEE,0BvEkiRR,CuEhiRM,kBAEE,wBvEkiRR,CuEjjRM,QAAgC,wBvEojRtC,CuEnjRM,kBAEE,4BvEqjRR,CuEnjRM,kBAEE,8BvEqjRR,CuEnjRM,kBAEE,+BvEqjRR,CuEnjRM,kBAEE,6BvEqjRR,CuEpkRM,QAAgC,uBvEukRtC,CuEtkRM,kBAEE,2BvEwkRR,CuEtkRM,kBAEE,6BvEwkRR,CuEtkRM,kBAEE,8BvEwkRR,CuEtkRM,kBAEE,4BvEwkRR,CuEvlRM,QAAgC,sBvE0lRtC,CuEzlRM,kBAEE,0BvE2lRR,CuEzlRM,kBAEE,4BvE2lRR,CuEzlRM,kBAEE,6BvE2lRR,CuEzlRM,kBAEE,2BvE2lRR,CuE1mRM,QAAgC,wBvE6mRtC,CuE5mRM,kBAEE,4BvE8mRR,CuE5mRM,kBAEE,8BvE8mRR,CuE5mRM,kBAEE,+BvE8mRR,CuE5mRM,kBAEE,6BvE8mRR,CuE7nRM,QAAgC,sBvEgoRtC,CuE/nRM,kBAEE,0BvEioRR,CuE/nRM,kBAEE,4BvEioRR,CuE/nRM,kBAEE,6BvEioRR,CuE/nRM,kBAEE,2BvEioRR,CuEznRM,SAAwB,wBvE4nR9B,CuE3nRM,oBAEE,4BvE6nRR,CuE3nRM,oBAEE,8BvE6nRR,CuE3nRM,oBAEE,+BvE6nRR,CuE3nRM,oBAEE,6BvE6nRR,CuE5oRM,SAAwB,uBvE+oR9B,CuE9oRM,oBAEE,2BvEgpRR,CuE9oRM,oBAEE,6BvEgpRR,CuE9oRM,oBAEE,8BvEgpRR,CuE9oRM,oBAEE,4BvEgpRR,CuE/pRM,SAAwB,sBvEkqR9B,CuEjqRM,oBAEE,0BvEmqRR,CuEjqRM,oBAEE,4BvEmqRR,CuEjqRM,oBAEE,6BvEmqRR,CuEjqRM,oBAEE,2BvEmqRR,CuElrRM,SAAwB,wBvEqrR9B,CuEprRM,oBAEE,4BvEsrRR,CuEprRM,oBAEE,8BvEsrRR,CuEprRM,oBAEE,+BvEsrRR,CuEprRM,oBAEE,6BvEsrRR,CuErsRM,SAAwB,sBvEwsR9B,CuEvsRM,oBAEE,0BvEysRR,CuEvsRM,oBAEE,4BvEysRR,CuEvsRM,oBAEE,6BvEysRR,CuEvsRM,oBAEE,2BvEysRR,CuEnsRE,WAAmB,qBvEssRrB,CuErsRE,wBAEE,yBvEusRJ,CuErsRE,wBAEE,2BvEusRJ,CuErsRE,wBAEE,4BvEusRJ,CuErsRE,wBAEE,0BvEusRJ,CACF,CcjtRI,0ByDlDI,QAAgC,kBvEwwRtC,CuEvwRM,kBAEE,sBvEywRR,CuEvwRM,kBAEE,wBvEywRR,CuEvwRM,kBAEE,yBvEywRR,CuEvwRM,kBAEE,uBvEywRR,CuExxRM,QAAgC,uBvE2xRtC,CuE1xRM,kBAEE,2BvE4xRR,CuE1xRM,kBAEE,6BvE4xRR,CuE1xRM,kBAEE,8BvE4xRR,CuE1xRM,kBAEE,4BvE4xRR,CuE3yRM,QAAgC,sBvE8yRtC,CuE7yRM,kBAEE,0BvE+yRR,CuE7yRM,kBAEE,4BvE+yRR,CuE7yRM,kBAEE,6BvE+yRR,CuE7yRM,kBAEE,2BvE+yRR,CuE9zRM,QAAgC,qBvEi0RtC,CuEh0RM,kBAEE,yBvEk0RR,CuEh0RM,kBAEE,2BvEk0RR,CuEh0RM,kBAEE,4BvEk0RR,CuEh0RM,kBAEE,0BvEk0RR,CuEj1RM,QAAgC,uBvEo1RtC,CuEn1RM,kBAEE,2BvEq1RR,CuEn1RM,kBAEE,6BvEq1RR,CuEn1RM,kBAEE,8BvEq1RR,CuEn1RM,kBAEE,4BvEq1RR,CuEp2RM,QAAgC,qBvEu2RtC,CuEt2RM,kBAEE,yBvEw2RR,CuEt2RM,kBAEE,2BvEw2RR,CuEt2RM,kBAEE,4BvEw2RR,CuEt2RM,kBAEE,0BvEw2RR,CuEv3RM,QAAgC,mBvE03RtC,CuEz3RM,kBAEE,uBvE23RR,CuEz3RM,kBAEE,yBvE23RR,CuEz3RM,kBAEE,0BvE23RR,CuEz3RM,kBAEE,wBvE23RR,CuE14RM,QAAgC,wBvE64RtC,CuE54RM,kBAEE,4BvE84RR,CuE54RM,kBAEE,8BvE84RR,CuE54RM,kBAEE,+BvE84RR,CuE54RM,kBAEE,6BvE84RR,CuE75RM,QAAgC,uBvEg6RtC,CuE/5RM,kBAEE,2BvEi6RR,CuE/5RM,kBAEE,6BvEi6RR,CuE/5RM,kBAEE,8BvEi6RR,CuE/5RM,kBAEE,4BvEi6RR,CuEh7RM,QAAgC,sBvEm7RtC,CuEl7RM,kBAEE,0BvEo7RR,CuEl7RM,kBAEE,4BvEo7RR,CuEl7RM,kBAEE,6BvEo7RR,CuEl7RM,kBAEE,2BvEo7RR,CuEn8RM,QAAgC,wBvEs8RtC,CuEr8RM,kBAEE,4BvEu8RR,CuEr8RM,kBAEE,8BvEu8RR,CuEr8RM,kBAEE,+BvEu8RR,CuEr8RM,kBAEE,6BvEu8RR,CuEt9RM,QAAgC,sBvEy9RtC,CuEx9RM,kBAEE,0BvE09RR,CuEx9RM,kBAEE,4BvE09RR,CuEx9RM,kBAEE,6BvE09RR,CuEx9RM,kBAEE,2BvE09RR,CuEl9RM,SAAwB,wBvEq9R9B,CuEp9RM,oBAEE,4BvEs9RR,CuEp9RM,oBAEE,8BvEs9RR,CuEp9RM,oBAEE,+BvEs9RR,CuEp9RM,oBAEE,6BvEs9RR,CuEr+RM,SAAwB,uBvEw+R9B,CuEv+RM,oBAEE,2BvEy+RR,CuEv+RM,oBAEE,6BvEy+RR,CuEv+RM,oBAEE,8BvEy+RR,CuEv+RM,oBAEE,4BvEy+RR,CuEx/RM,SAAwB,sBvE2/R9B,CuE1/RM,oBAEE,0BvE4/RR,CuE1/RM,oBAEE,4BvE4/RR,CuE1/RM,oBAEE,6BvE4/RR,CuE1/RM,oBAEE,2BvE4/RR,CuE3gSM,SAAwB,wBvE8gS9B,CuE7gSM,oBAEE,4BvE+gSR,CuE7gSM,oBAEE,8BvE+gSR,CuE7gSM,oBAEE,+BvE+gSR,CuE7gSM,oBAEE,6BvE+gSR,CuE9hSM,SAAwB,sBvEiiS9B,CuEhiSM,oBAEE,0BvEkiSR,CuEhiSM,oBAEE,4BvEkiSR,CuEhiSM,oBAEE,6BvEkiSR,CuEhiSM,oBAEE,2BvEkiSR,CuE5hSE,WAAmB,qBvE+hSrB,CuE9hSE,wBAEE,yBvEgiSJ,CuE9hSE,wBAEE,2BvEgiSJ,CuE9hSE,wBAEE,4BvEgiSJ,CuE9hSE,wBAEE,0BvEgiSJ,CACF,CwEhmSA,gBAAkB,gGxEomSlB,CwEhmSA,cAAiB,4BxEomSjB,CwEnmSA,WAAiB,4BxEumSjB,CwEtmSA,aAAiB,4BxE0mSjB,CwEzmSA,eCTE,eAAgB,CAChB,sBAAuB,CACvB,kBzEsnSF,CwEvmSI,WAAwB,yBxE2mS5B,CwE1mSI,YAAwB,0BxE8mS5B,CwE7mSI,aAAwB,2BxEinS5B,Cc5kSI,yB0DvCA,cAAwB,yBxEwnS1B,CwEvnSE,eAAwB,0BxE0nS1B,CwEznSE,gBAAwB,2BxE4nS1B,CACF,CcxlSI,yB0DvCA,cAAwB,yBxEooS1B,CwEnoSE,eAAwB,0BxEsoS1B,CwEroSE,gBAAwB,2BxEwoS1B,CACF,CcpmSI,yB0DvCA,cAAwB,yBxEgpS1B,CwE/oSE,eAAwB,0BxEkpS1B,CwEjpSE,gBAAwB,2BxEopS1B,CACF,CchnSI,0B0DvCA,cAAwB,yBxE4pS1B,CwE3pSE,eAAwB,0BxE8pS1B,CwE7pSE,gBAAwB,2BxEgqS1B,CACF,CwE3pSA,gBAAmB,kCxE+pSnB,CwE9pSA,gBAAmB,kCxEkqSnB,CwEjqSA,iBAAmB,mCxEqqSnB,CwEjqSA,mBAAuB,yBxEqqSvB,CwEpqSA,qBAAuB,6BxEwqSvB,CwEvqSA,oBAAuB,yBxE2qSvB,CwE1qSA,kBAAuB,yBxE8qSvB,CwE7qSA,oBAAuB,4BxEirSvB,CwEhrSA,aAAuB,2BxEorSvB,CwEhrSA,YAAc,oBxEorSd,C0E3tSE,cACE,uB1E8tSJ,CKptSE,0CqELM,uB1E6tSR,C0EnuSE,gBACE,uB1EsuSJ,CK5tSE,8CqELM,uB1EquSR,C0E3uSE,cACE,uB1E8uSJ,CKpuSE,0CqELM,uB1E6uSR,C0EnvSE,WACE,uB1EsvSJ,CK5uSE,oCqELM,uB1EqvSR,C0E3vSE,cACE,uB1E8vSJ,CKpvSE,0CqELM,uB1E6vSR,C0EnwSE,aACE,uB1EswSJ,CK5vSE,wCqELM,uB1EqwSR,C0E3wSE,YACE,uB1E8wSJ,CKpwSE,sCqELM,uB1E6wSR,C0EnxSE,WACE,uB1EsxSJ,CK5wSE,oCqELM,uB1EqxSR,CwE9uSA,WAAa,uBxEkvSb,CwEjvSA,YAAc,uBxEqvSd,CwEnvSA,eAAiB,yBxEuvSjB,CwEtvSA,eAAiB,yBxE0vSjB,CwEtvSA,WGpDE,wBAA6B,CAC7B,QAAS,CAHT,WAAkB,CADlB,UAAW,CAEX,gB3EmzSF,CwE1vSA,sBAAwB,8BxE8vSxB,CwE5vSA,YAEE,kCAAoC,CADpC,+BxEgwSF,CwE1vSA,YAAc,uBxE8vSd,C4E/zSA,SACE,4B5Ek0SF,C4E/zSA,WACE,2B5Ek0SF,C6El0SE,a3EOF,iB2ECM,yBAA2B,CAF3B,0B7Eo0SJ,C6E/zSE,YAEI,yB7Eg0SN,C6EvzSE,kBACE,4B7EyzSJ,CE3nSF,I2E/KM,8B7E6ySJ,C6E3ySE,eAEE,wB1EzCY,C0E0CZ,uB7E6ySJ,C6ErySE,MACE,0B7EuySJ,C6EpySE,OAEE,uB7EsySJ,C6EnySE,QAGE,SAAU,CACV,Q7EqySJ,C6ElySE,MAEE,sB7EoySJ,C6E5xSE,MACE,O7E8xSJ,CYj3SA,gBiEyFI,yB7E8xSJ,CiC52SF,Q4CmFM,Y7E4xSJ,CsC33SF,OuCkGM,qB7E4xSJ,CgB/3SF,O6DuGM,kC7E2xSJ,C6E5xSE,oBAKI,+B7E2xSN,CgB91SF,sC6D0EQ,kC7EwxSN,CgB7wSF,Y6DNM,a7EsxSJ,CiB54SA,2E4D4HM,oB7EsxSN,CgBxySF,sB6DwBM,oB1E7HY,C0E4HZ,a7EqxSJ,CACF,C8E55SA,iBACE,qBAAsB,CACtB,qBAAsB,CACtB,eAAgB,CAChB,gBAAiB,CACjB,eACF,CAEA,0BACE,oBACF,CAEA,qBACE,wBAAyB,CAEzB,wBAAyB,CADzB,iBAAkB,CAElB,aAAc,CACd,oBAAqB,CACrB,sBAAuB,CACvB,cAAe,CACf,eAAgB,CAChB,iBAAkB,CAClB,gBAAiB,CACjB,WACF,CAEA,wBACE,cAAe,CACf,eACF,CAEA,8BACE,YACF,CAEA,uBACE,gBAAuB,CACvB,QAAS,CACT,UAAW,CACX,sBAAuB,CACvB,cAAe,CACf,eAAgB,CAChB,iBAAkB,CAClB,cAAe,CACf,YAAa,CACb,WAAY,CACZ,UACF,CC/CA,mBAA2F,kCAAoC,CAAC,iCAAmC,CAAC,0BAA2B,CAAjJ,4BAA4B,CAAzC,YAAY,CAAqO,iBAAiB,CAAxN,eAAe,CAAvE,aAAa,CAAgK,uCAAuC,CAAC,wBAAwB,CAAC,gBAAgB,CAAmB,eAAe,CAAC,mBAAmB,mEAAoE,CAAC,cAAgB,CAAC,aAAiE,6BAA6B,CAAC,0BAAoB,CAApB,qBAAoB,CAAtG,aAAa,CAAmB,mBAAmB,CAArC,iBAAyF,CAAC,4BAA4B,SAAS,CAAC,qBAAqB,CAAwB,WAAW,CAAlC,WAAW,CAAkE,eAAe,CAAqB,2CAA0C,CAA9D,mBAAmB,CAA7E,wBAAwB,CAAC,gBAAgB,CAAhE,UAAgJ,CAAC,iCAAiC,SAAS,CAAC,UAAoC,gCAAgC,CAA1D,yBAAyB,CAAkC,iBAAiB,CAAC,oCAAsJ,qBAAqB,CAAC,gCAAgC,CAAxK,uBAAuB,CAAC,oBAAoB,CAAC,yCAA2C,CAAC,wBAAwB,CAAwD,cAAc,CAAC,0BAAqC,kBAAkB,CAA7B,UAAU,CAAoB,mBAAmB,CAAC,2CAA2D,WAAW,CAAW,MAAM,CAA5C,eAAe,CAA8B,yBAAwB,CAAzC,SAA0C,CAAC,2BAA2B,iBAAiB,CAAC,yGAAoJ,QAAQ,CAAnD,UAAU,CAA0C,MAAK,CAA9C,iBAAiB,CAAO,OAAO,CAAb,KAA6B,CAAC,mBAA0D,sCAAsC,CAA7E,sCAAsC,CAAwC,UAAU,CAAC,UAAU,oBAAoB,CAAC,qBAAqB,CAAC,wBAAwB,4CAA4C,CAAC,4BAA4B,oBAAoB,CCA9uD,mBAAqG,oBAAqB,CAAC,wBAAyB,CAAC,oBAAqB,CAAC,uBAAwB,CAAC,2BAA4B,CAAC,+BAAgC,CAAC,0BAA2B,CAAC,4BAA6B,CAAC,6BAA8B,CAAC,4BAA6B,CAAC,2BAA4B,CAAC,0BAA2B,CAAC,4BAA6B,CAAC,gCAAiC,CAAC,sCAAuC,CAAC,6BAA8B,CAAC,kCAAqC,CAAC,yBAA0B,CAAC,2BAA4B,CAAC,2BAA4B,CAAC,0BAA2B,CAAC,8BAA+B,CAAC,+BAAgC,CAAC,6BAA8B,CAAC,+BAAgC,CAAC,+BAAgC,CAAC,8BAA+B,CAAC,6BAA8B,CAAC,0BAA2B,CAAC,8BAA+B,CAAz9B,mBAAmB,CAAu8B,iBAAgB,CAAt9B,6DAAu9B,CAAC,uCAAmD,kBAAiB,CAA7B,WAA8B,CAAC,oBAAoB,yBAA0B,CAAC,aAAa,6BAA8B,CAAC,uBAAuB,2BAA4B,CAAC,+GAA+G,aAAa,CAAC,0IAA0I,aAAa,CAAC,wLAAwL,aAAa,CAAC,sFAAsF,aAAa,CAAC,mKAAmK,aAAa,CAAC,mgBAAmgB,aAAa,CAAC,gBAAgB,aAAa,CAAC,0CAA0C,aAAa,CAAC,6BAA6B,eAAe,CAAC,cAAc,iBAAiB,CAAC,8CAA8C,aAAa,CAAC,8CAA8C,aAAa,CAAC,8CAA8C,aAAa,CAAC,8CAA8C,aAAa,CAAC,+CAA+C,aAAa,CAAC,+CAA+C,aAAa,CAAC,iCAAiC,aAAa,CAAC,qBAAqB,aAAa,CAAC,sBAAsB,aAAa,CAAC,gBAAgB,8DAA8D,CAAC,mCAAmC,8DAA8D,CCAxwG,cAAuF,aAAQ,CAA6F,4BAA4B,CAA7L,sCAAsC,CAA4C,kBAAkB,CAAkC,0BAA0B,CAA7K,YAAY,CAA6D,QAAQ,CAA7B,kBAAoB,CAAuK,SAAS,CAArH,eAAe,CAAhC,gBAAgB,CAAhD,YAAY,CAAqK,mBAAmB,CAA3E,eAAe,CAAU,UAAU,CAAnB,QAAQ,CAAsB,SAAmD,CAAC,8BAAtB,qBAA2D,CAAC,qBAAqB,SAAS,CAAC,cAAc,CAAC,4BAA4B,cAAgB,CAAC,sBAAsB,YAAY,CAAC,oBAAmH,gBAAgB,CAA5B,WAAW,CAAkB,0BAAyB,CAAnE,YAAY,CAAlF,kBAAkB,CAAC,6BAAkD,CAAlD,kDAAuH,CAAC,4BAA4B,aAAa,CAAC,UAAU,CAAC,iBAAiB,qBAAqB,CAAC,4BAA4B,sCAAsC,CAAC,aAAa,kCAAkC,CAAC,aAAa,CAAC,SAAS,CAAC,oBAAmC,kBAAkB,CAAjC,cAAc,CAAgC,iBAAgB,CAA5B,WAA6B,CAAC,yBAAyB,mBAAmB,CAAC,mCAAmC,2CAA2C,CAAC,SAAS,CAAC,6CAA6C,0CAA0D,CAA1D,yDAA0D,CAAC,UAAU,CAAC,yBAAwD,kCAAkC,CAAC,mBAAmB,CAArF,YAAY,CAA0E,YAAW,CAApF,iBAAqF,CAAC,0BAA0B,SAAS,CAAC,wBAAwB,mCAAoC,CAAC,iBAA8B,kBAAkB,CAA/B,YAAY,CAAoB,cAAc,CAAC,oBAAgC,iBAAgB,CAA5B,WAA6B,CAAC,yBAAyB,WAAW,CAAC,kBAAkB,2CAA2C,CAAC,eAAe,CAAC,mBAAmB,wBAAwB,CAAC,sCAAsC,uBAAuB,CAAC,qBAAsB,2BAA2B,kCAAkC,CAAC,CAAC,uCAA6G,mCAAmC,CAAzG,mCAAmC,CAAC,iCAAsE,CAAC,yBAAyB,6BAA6B,CAAC,qBAAqB,mCAAoC,CAAC,cAAoI,kCAAkC,CAAhH,kBAAkB,CAA1D,YAAY,CAAmG,MAAM,CAAoC,YAAY,CAAxJ,iBAAiB,CAAC,QAAQ,CAA+B,kBAAkB,CAA7B,UAAU,CAAoB,qBAAqB,CAAwD,SAAS,CAAC,sCAAsC,aAAa,CAAC,iBAA2F,kBAAiB,CAA3F,YAAY,CAAa,YAAY,CAAoB,gBAAgB,CAAnC,kBAAkB,CAA3C,WAA+E,CAAC,6DAAwE,uBAAuB,CAAlC,UAAU,CAAyB,YAAY,CAAC,WAAW,CAAC,kBAAkB,sKAAwK,CAAC,WAAW,CAAC,kBAA+B,cAAS,CAAtB,YAAY,CAAC,SAAS,CAAC,UAA8B,CAA9B,8BAA+B,CAAC,kBAAkD,mBAAmB,CAAnD,YAAY,CAAwC,aAAY,CAAnD,kBAAoD,CAAC,4FAA4F,YAAY,CAAC,uCAAuC,wBAAwB,CAAC,2CAAuD,uFAAuF,CAAnG,WAAoG,CAAC,iBAAiB,YAAY,CAAC,gBAA6B,oBAAmB,CAAhC,YAAiC,CAAC,uBAAyD,uBAAuB,CAAzD,UAAU,CAAY,WAAW,CAAyB,oBAAmB,CAAlE,UAAmE,CAAC,sBAAsB,WAAW,CAAe,cAAc,CAA5B,aAAa,CAAgB,kBAAkB,CAAC,wBAAwB,YAAY,CAAC,kBAAkB,CAAC,iBAAiB,iBAAiB,CAAC,iBAA8C,YAAY,CAAoE,oBAAmB,CAAlD,8BAA8B,CAA5G,UAAU,CAAuD,YAAY,CAAvB,UAAU,CAArD,iBAAiB,CAAc,WAAuF,CAAC,yBAAyD,uBAAuB,CAAC,wGAAuG,CAA/J,UAAU,CAAC,UAAU,CAAC,SAA0I,CAAC,kBAAkB,iCAAiC,CAAC,oBAAkC,aAAY,CAA1B,aAA2B","sources":["index.css","App.css","../node_modules/@fortawesome/fontawesome-free/css/all.css","../node_modules/scss/bootstrap.scss","../node_modules/bootstrap-css-only/css/bootstrap.css","../node_modules/scss/_root.scss","../node_modules/scss/_reboot.scss","../node_modules/scss/_variables.scss","../node_modules/scss/vendor/_rfs.scss","../node_modules/scss/mixins/_hover.scss","../node_modules/scss/_type.scss","../node_modules/scss/mixins/_lists.scss","../node_modules/scss/_images.scss","../node_modules/scss/mixins/_image.scss","../node_modules/scss/mixins/_border-radius.scss","../node_modules/scss/_code.scss","../node_modules/scss/_grid.scss","../node_modules/scss/mixins/_grid.scss","../node_modules/scss/mixins/_breakpoints.scss","../node_modules/scss/mixins/_grid-framework.scss","../node_modules/scss/_tables.scss","../node_modules/scss/mixins/_table-row.scss","../node_modules/scss/_forms.scss","../node_modules/scss/_functions.scss","../node_modules/scss/mixins/_transition.scss","../node_modules/scss/mixins/_forms.scss","../node_modules/scss/mixins/_gradients.scss","../node_modules/scss/_buttons.scss","../node_modules/scss/mixins/_buttons.scss","../node_modules/scss/_transitions.scss","../node_modules/scss/_dropdown.scss","../node_modules/scss/mixins/_caret.scss","../node_modules/scss/mixins/_nav-divider.scss","../node_modules/scss/_button-group.scss","../node_modules/scss/_input-group.scss","../node_modules/scss/_custom-forms.scss","../node_modules/scss/_nav.scss","../node_modules/scss/_navbar.scss","../node_modules/scss/_card.scss","../node_modules/scss/_breadcrumb.scss","../node_modules/scss/_pagination.scss","../node_modules/scss/mixins/_pagination.scss","../node_modules/scss/_badge.scss","../node_modules/scss/mixins/_badge.scss","../node_modules/scss/_jumbotron.scss","../node_modules/scss/_alert.scss","../node_modules/scss/mixins/_alert.scss","../node_modules/scss/_progress.scss","../node_modules/scss/_media.scss","../node_modules/scss/_list-group.scss","../node_modules/scss/mixins/_list-group.scss","../node_modules/scss/_close.scss","../node_modules/scss/_toasts.scss","../node_modules/scss/_modal.scss","../node_modules/scss/_tooltip.scss","../node_modules/scss/mixins/_reset-text.scss","../node_modules/scss/_popover.scss","../node_modules/scss/_carousel.scss","../node_modules/scss/mixins/_clearfix.scss","../node_modules/scss/_spinners.scss","../node_modules/scss/utilities/_align.scss","../node_modules/scss/mixins/_background-variant.scss","../node_modules/scss/utilities/_background.scss","../node_modules/scss/utilities/_borders.scss","../node_modules/scss/utilities/_display.scss","../node_modules/scss/utilities/_embed.scss","../node_modules/scss/utilities/_flex.scss","../node_modules/scss/utilities/_float.scss","../node_modules/scss/utilities/_overflow.scss","../node_modules/scss/utilities/_position.scss","../node_modules/scss/utilities/_screenreaders.scss","../node_modules/scss/mixins/_screen-reader.scss","../node_modules/scss/utilities/_shadows.scss","../node_modules/scss/utilities/_sizing.scss","../node_modules/scss/utilities/_stretched-link.scss","../node_modules/scss/utilities/_spacing.scss","../node_modules/scss/utilities/_text.scss","../node_modules/scss/mixins/_text-truncate.scss","../node_modules/scss/mixins/_text-emphasis.scss","../node_modules/scss/mixins/_text-hide.scss","../node_modules/scss/utilities/_visibility.scss","../node_modules/scss/_print.scss","../node_modules/react-tagsinput/react-tagsinput.css","../node_modules/prism-react-editor/dist/layout.css","../node_modules/prism-react-editor/dist/themes/github-dark.css","../node_modules/prism-react-editor/dist/search.css"],"sourcesContent":["body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n monospace;\n}\n","body {\n\toverflow: hidden;\n}\n\n@media screen and (prefers-color-scheme: dark) {\n\n\t.header__filter-input-queries,\n\tbody {\n\t\tcolor: rgba(232, 230, 227) !important;\n\t\tbackground-color: #222222 !important;\n\t}\n\n\t.settings-modal__proxy-row {\n\t\tcolor: rgba(232, 230, 227) !important;\n\t}\n\n\tpre,\n\t.MuiTabs-scroller,\n\t.MuiPaper-root {\n\t\tcolor: rgba(232, 230, 227) !important;\n\t\tbackground-color: #333333 !important;\n\t}\n\n\t.transparent>.MuiPaper-root {\n\t\tbackground-color: transparent !important;\n\t}\n\n\t.highlight .MuiPaper-root {\n\t\tcolor: black !important;\n\t}\n\n\t.btn-default,\n\t.form-control,\n\ttextarea,\n\tselect {\n\t\tcolor: rgba(232, 230, 227) !important;\n\t\tbackground-color: #444444 !important;\n\t\tborder-color: #444444 !important;\n\t}\n\n\t.MuiTab-textColorPrimary.Mui-selected,\n\t.PrivateTabIndicator-colorPrimary-2 {\n\t\tcolor: #007bff !important;\n\t}\n\n\ttable,\n\ttr,\n\ttd {\n\t\tborder-color: black !important;\n\t}\n\n\t.request__msg-even {\n\t\twidth: 100%;\n\t\tbackground-color: #333333;\n\t}\n\n\t.request__msg-highlight {\n\t\t/* color:rgba(0, 55, 255, 0.884) !important; */\n\t\tcolor: #4ca728 !important;\n\t}\n}\n\n@media screen and (prefers-color-scheme: light) {\n\n\t.header__filter-input-queries,\n\tbody {\n\t\tbackground-color: whitesmoke !important;\n\t\tcolor: black !important;\n\t}\n\n\t.MuiPaper-root {\n\t\tbackground-color: whitesmoke !important;\n\t\tcolor: black !important;\n\t}\n\n\t.transparent>.MuiPaper-root {\n\t\tbackground-color: transparent !important;\n\t}\n\n\ttable,\n\ttr,\n\ttd {\n\t\tborder-color: white !important;\n\t}\n\n\ttd {\n\t\ttext-align: center;\n\t\tvertical-align: middle;\n\t}\n\n\ttd input {\n\t\theight: 48px !important;\n\t}\n\n\tpre {\n\t\tbackground-color: #f9f9f9 !important;\n\t\tborder: solid thin #e7e2e2 !important;\n\t\tcolor: black;\n\t}\n\n\t.MuiCheckbox-colorSecondary {\n\t\tcolor: blue;\n\t}\n\n\t.request__msg-even {\n\t\twidth: 100%;\n\t\tbackground-color: #e5e5e5;\n\t}\n\n\t.request__msg-highlight {\n\t\t/* color:rgba(0, 55, 255, 0.884) !important; */\n\t\tcolor: rgb(203, 75, 22) !important;\n\t}\n}\n\n.link-opacity:hover {\n\topacity: .5;\n}\n\n.header__filter-input,\n.header__filter-input input {\n\tcolor: rgba(232, 230, 227);\n\tbackground-color: #444444;\n}\n\n.react-tagsinput,\n.react-tagsinput input {\n\tcolor: rgba(232, 230, 227) !important;\n\tbackground-color: #444444 !important;\n}\n\n.react-tagsinput {\n\tborder: none !important;\n\theight: 42px !important;\n}\n\n.react-tagsinput-tag {\n\tbackground-color: #ff6464 !important;\n\tborder: #ff6464 !important;\n\tcolor: black !important;\n\tfont-weight: bold;\n\tfont-size: large !important;\n}\n\nbutton:disabled {\n\tbackground-color: #dddddd;\n}\n\npre {\n\tborder-radius: .5rem !important;\n\tpadding-left: 1.5rem !important;\n}\n\ntd input {\n\twidth: 100%;\n}\n\n.filter-bar__menu-item .filter-bar__menu-item-links {\n\tdisplay: none;\n}\n\n.filter-bar__menu-item:hover .filter-bar__menu-item-links {\n\tdisplay: inline-block;\n\tmargin-left: .5rem;\n}\n\n.btn-group-xs>.btn,\n.btn-xs {\n\tpadding: .25rem .25rem !important;\n\tfont-size: .875rem !important;\n\tline-height: .5 !important;\n\tborder-radius: .2rem !important;\n}\n\n.MuiAccordion-root {\n\tmargin: 0 0 0 -1rem !important;\n}\n\n.MuiAccordionSummary-root.Mui-expanded {\n\tmin-height: 0 !important;\n}\n\n.MuiAccordionSummary-content {\n\tmargin-top: 0 !important;\n\tmargin-bottom: 0 !important;\n}\n\n.MuiAccordionDetails-root {\n\tpadding: 0 8px !important;\n}\n\n.MuiSelect-icon {\n\tcolor: white !important;\n}\n\n.spinner {\n\tfont-size: 2rem !important;\n\tcolor: #007bff;\n}\n\n.modal-dialog {\n\tposition: relative;\n\tdisplay: table;\n\t/* This is important */\n\toverflow-y: auto;\n\toverflow-x: auto;\n}\n\n.modal-footer {\n\tpadding-top: 0 !important;\n\tpadding-bottom: 0 !important;\n}\n\n.keep-all {\n\tword-break: keep-all;\n}\n\n.center {\n\ttext-align: center;\n\tvertical-align: middle;\n\talign-self: center;\n\tjustify-self: center;\n\tposition: relative;\n\ttop: 50%;\n\ttransform: translateY(-50%);\n}\n\n.align-center {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.disabled {\n\topacity: .50;\n}\n\n.error {\n\tcolor: red;\n}\n\n.no-response {\n\tcolor: rgba(128, 128, 128, 0.801);\n}\n\n.success {\n\tcolor: green !important;\n}\n\n.updating {\n\tcolor: rgba(255, 187, 0, 0.884);\n}\n\n.visited-color {\n\tcolor: #007bff;\n}\n\n@media screen and (prefers-color-scheme: light) {\n\t.visited-color {\n\t\tcolor: #1a0dab;\n\t}\n}\n\n/* These colors are used by ColorPicker.ts */\n.icon-color0 {\n\tcolor: #007bff;\n}\n\n.icon-color1 {\n\tcolor: green;\n}\n\n.icon-color2 {\n\tcolor: purple;\n}\n\n.icon-color3 {\n\tcolor: brown;\n}\n\n.icon-color4 {\n\tcolor: darkpink;\n}\n\n.icon-color-terminal {\n\tcolor: #6c757d;\n}\n\n.icon-color5 {\n\tcolor: slateblue;\n}\n\n.icon-color6 {\n\tcolor: darkorange;\n}\n\n.icon-color-chrome,\n.icon-color-safari {\n\tcolor: #4DCE5B;\n}\n\n.icon-color-opera {\n\tcolor: #F76464;\n}\n\n.icon-color-firefox {\n\tcolor: orangered;\n}\n\n.icon-color-edge,\n.icon-color-safari,\n.icon-color-explore {\n\tcolor: #007bff;\n}\n\n.request__msg-icon {\n\tmargin: 0 0 0 .25rem;\n\tfont-size: 1rem;\n\theight: 26px;\n\tline-height: 26px !important;\n\ttext-align: center;\n}\n\n.request__msg-resend-btn {\n\tdisplay: none;\n\tmargin-left: .5rem;\n}\n\n.request__msg-resend-btn.active {\n\tdisplay: inline-block;\n}\n\n.request__msg-caret {\n\tmargin: 0 .1rem 0 .5rem;\n\tfont-size: 1.5rem;\n}\n\n.request__msg-request-line {\n\tdisplay: flex;\n}\n\n.request__msg-status {\n\tmargin-right: 1rem;\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n}\n\n.request__msg-method {\n\tmargin-right: 1rem;\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n}\n\n.request__msg-endpoint {\n\tmargin-right: 1rem;\n\tmax-width: 64ch;\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n\twhite-space: nowrap;\n}\n\n.request__msg-client {\n\tmargin-right: 1rem;\n\twidth: 14ch;\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n\twhite-space: nowrap;\n}\n\n.request__msg-unhighlight {\n\tcolor: grey !important;\n}\n\n.header__container {\n\tz-index: 100;\n\tposition: fixed;\n\ttop: 0;\n\tbackground-color: #333333;\n\twidth: 100%;\n\theight: 3rem;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n}\n\n.side-bar-tabs {\n\tdisplay: flex;\n\twidth: 100%;\n}\n\n.side-bar {\n\tpadding-top: 3rem;\n\tmargin-top: 0rem;\n\tbackground-color: #333333;\n\tcolor: whitesmoke;\n\theight: calc(100vh - 3rem);\n\t/* width must match LayoutStore.ts maxWidth */\n\twidth: 13rem;\n\twhite-space: nowrap;\n}\n\n.side-bar-header {\n\t/*height: calc(54px * 3);*/\n}\n\n.side-bar-scroll {\n\toverflow-y: auto;\n\theight: calc(100vh - 54px * 5 - 6 * 16px);\n}\n\n.side-bar-item {\n\tdisplay: flex;\n\twidth: 100%;\n\tpadding: .25rem;\n}\n\n.side-bar-count {\n\tfont-size: x-small;\n}\n\n.side-bar-checkbox-container {\n\tdisplay: flex;\n\twidth: 100%;\n\tcolor: whitesmoke !important;\n}\n\n.side-bar-icon {\n\tfont-size: x-large;\n}\n\n.side-bar-checkbox {\n\tpadding: 0 !important;\n\tmargin-right: .5rem !important;\n}\n\n.side-bar-small-count {\n\tpadding-left: .25rem;\n\tfont-size: x-small;\n}\n\n.side-bar-status {}\n\n.side-bar-select {\n\tcolor: whitesmoke !important;\n}\n\n.side-bar-select.MuiSelect-icon {\n\tcolor: whitesmoke !important;\n}\n\n@media screen and (prefers-color-scheme: light) {\n\t.side-bar-checkbox.MuiCheckbox-root {\n\t\tcolor: whitesmoke !important;\n\t}\n\n\t.side-bar-domain-checkbox.MuiCheckbox-root {\n\t\tcolor: black !important;\n\t}\n}\n\n@media screen and (prefers-color-scheme: dark) {\n\t.side-bar-domain-checkbox.MuiCheckbox-root {\n\t\tcolor: whitesmoke !important;\n\t}\n}\n\n.side-bar-domain-checkbox.MuiCheckbox-colorSecondary.Mui-checked {\n\tcolor: #f50057 !important;\n}\n\n.side-bar.MuiMenuItem-root {\n\tpadding-top: 0 !important;\n\tpadding-bottom: 0 !important;\n}\n\n.side-bar-divider {\n\tbackground-color: #007bff;\n\tmargin-left: .25rem;\n\tmargin-right: .25rem;\n\theight: .1rem;\n}\n\n.footer__container {\n\tz-index: 99;\n\tposition: fixed;\n\tbottom: 0;\n\tbackground-color: #333333;\n\twidth: 100%;\n\theight: 3rem;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.footer__exclude-filter {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.footer__exclude-label {\n\tmargin-right: .5rem;\n\tcolor: #ff6464;\n}\n\n.footer__item {\n\tmargin: 0 0 0 1rem;\n\tcolor: whitesmoke;\n\tline-height: 2ch;\n}\n\n.header__left-container {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.header__icon {\n\tmargin: 0 0 0 .5rem;\n\tcursor: pointer;\n}\n\n.header__title {\n\tmargin: 0 .5rem 0 1rem;\n\tcolor: whitesmoke;\n\tfloat: left;\n\tvertical-align: middle;\n\tfont-size: x-large;\n\tfont-weight: 100;\n\tcursor: pointer;\n\tline-height: 24px;\n}\n\n.header__trash,\n.header__show-errors,\n.header__auto-scroll,\n.header__filter-history,\n.header__sort-req-res,\n.header__stop,\n.header__save-restore,\n.header__more-menu {\n\tfloat: left;\n\tmargin: 0 0 0 1rem;\n\tcursor: pointer;\n\tcolor: whitesmoke;\n\tfont-size: large !important;\n\tmin-width: 1ch;\n\ttext-align: center;\n}\n\n.header__sort-req-res {\n\tmargin-right: .5rem;\n\twidth: 2ch;\n}\n\n.header__show-errors.active {\n\tcolor: red;\n}\n\n.header__resend,\n.header__folder-minus,\n.header__import,\n.header__export {\n\tcursor: pointer;\n}\n\n.header__filter {\n\tfloat: left;\n}\n\n.react-tagsinput-input,\n.header__filter-input {\n\tmargin: 0 0 0 1rem;\n}\n\n.footer-input {\n\twidth: 200px !important;\n}\n\n.react-tagsinput {\n\twidth: calc(100vw - 300px) !important;\n\theight: 42px;\n\toverflow-y: auto !important;\n}\n\n.header__filter-input,\n.header__filter-input-queries {\n\twidth: calc(100vw - 732px) !important;\n}\n\n.header__filter-input.active {\n\tbackground-color: lightyellow;\n}\n\n.header__filter-input-queries {\n\tposition: absolute;\n\tmargin: 0 0 0 1rem;\n}\n\n.header__filter-input-queries {\n\tborder-left: rgba(128, 128, 128, 0.801) solid thin;\n\tborder-right: rgba(128, 128, 128, 0.801) solid thin;\n\tborder-bottom: rgba(128, 128, 128, 0.801) solid thin;\n}\n\n.header__filter-case,\n.header__filter-regex,\n.header__filter-logical {\n\tmargin-left: .5rem;\n\tcolor: whitesmoke;\n\tcursor: pointer;\n\twidth: 2rem;\n\ttext-align: center;\n}\n\n.header__filter-case.active,\n.header__filter-regex.active,\n.header__filter-logical.active {\n\tborder: red solid 2px;\n\tborder-radius: .5rem;\n}\n\n.breakpoint__icon {\n\tmargin-left: .5rem;\n\tcursor: pointer;\n\twidth: 2ch;\n\ttext-align: center;\n}\n\n.breakpoint__icon.active {\n\tcolor: whitesmoke;\n\tbackground-color: black;\n\tborder-radius: .5rem;\n}\n\n@media screen and (prefers-color-scheme: dark) {\n\t.breakpoint__icon.active {\n\t\tcolor: black;\n\t\tbackground-color: whitesmoke;\n\t\tborder-radius: .5rem;\n\t}\n}\n\n.header__status,\n.header__settings {\n\tmargin: 0 0 0 0;\n\tfont-size: large !important;\n}\n\n.header__status {\n\tfloat: left;\n}\n\n.header__settings {\n\tcolor: whitesmoke;\n\tmargin-right: .5rem;\n}\n\n.header__status {\n\tcolor: red;\n}\n\n.export__input-file-name {\n\tmargin: 0 1rem 1rem 1rem;\n\twidth: 600px !important;\n}\n\n/* .MuiTabs-scroller {\n\toverflow-x: auto !important;\n} */\n\n/* .MuiTabs-root {\n\toverflow: auto;\n} */\n\n.MuiTab-root {\n\tflex: 1;\n\twidth: min-content;\n\tmin-width: 0px !important;\n}\n\n.maintab__container {\n\tmargin-top: 3rem;\n\tmargin-bottom: 2rem;\n}\n\n.maintab__container>.MuiTabs-root {\n\tz-index: 99;\n\tposition: fixed;\n\ttop: 3rem;\n\theight: 3rem;\n\tbackground-color: rgb(26, 24, 24) !important;\n\twidth: calc(100vw - 13rem);\n}\n\n@media screen and (prefers-color-scheme: light) {\n\n\t.maintab__container>.MuiTabs-root {\n\t\tbackground-color: rgb(228, 227, 227) !important;\n\t}\n}\n\n.maintab__container .MuiTabPanel-root {\n\tpadding: 0 !important;\n}\n\n.maintab__tab {\n\tdisplay: flex;\n\twidth: 100%;\n\theight: 20px;\n\t/*align-items: center;*/\n\toverflow: auto;\n}\n\n.maintab__tab-name {\n\tfont-size: smaller;\n\toverflow-x: hidden;\n\twidth: 100%;\n\t/*max-width: 128px;*/\n\t/*max-lines: 2;*/\n\t/*white-space: nowrap;*/\n}\n\n.maintab__close,\n.maintab__folder-plus {\n\tfont-size: smaller;\n\tcursor: pointer;\n\tmargin-top: 4px;\n}\n\n.maintab__folder-plus {\n\tfont-size: large;\n}\n\n@media screen and (prefers-color-scheme: dark) {\n\t.maintab__folder-plus {\n\t\tcolor: #bbbbbb;\n\t}\n}\n\n.request-response__container {\n\tpadding-top: 3rem;\n\tdisplay: -webkit-flex;\n\t/* Safari */\n\tdisplay: flex;\n\twidth: calc(100vw - 8rem);\n}\n\n.request__container {\n\tpadding-right: .5rem;\n\toverflow: auto;\n\tborder-right: solid grey;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.request__json-annotations {\n\twhite-space: wrap;\n\tmargin: .5rem 0;\n}\n\n.request__json-annotations.nowrap {\n\twhite-space: nowrap;\n}\n\n.request__container.unselected {\n\twidth: 100%;\n\tresize: none;\n}\n\n.request__msg-container {\n\tmargin: 0 0 0 0;\n\twidth: 100%;\n}\n\n.request__msg-twisty:hover {\n\tcolor: rgb(203, 75, 22);\n}\n\n.request__msg-header {\n\tposition: relative;\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n}\n\n.request__msg-time-number {\n\tdisplay: flex;\n}\n\n.request__msg-time-number.highlight {\n\tbackground-color: yellow;\n\tcolor: black !important;\n}\n\n.request__msg-time-bar-container {\n\tmargin-left: .5rem;\n\tmin-width: 6.5rem;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: right;\n\theight: 26px;\n}\n\n.request__msg-time-bar {\n\theight: 10px;\n\tbackground-color: #007bff;\n\topacity: .5;\n}\n\n.request__msg-time-bar.no-response {\n\tbackground-color: crimson;\n}\n\n.request__msg-time-ms {\n\ttext-align: center;\n\tline-height: 24px;\n\twhite-space: nowrap;\n}\n\n.request__msg {\n\tcursor: pointer;\n\tdisplay: flex;\n}\n\n.request__msg.nowrap {\n\twhite-space: nowrap;\n}\n\n/* .request__msg.active {\n\tborder: red solid thin;\n\tborder-radius: .2rem;\n} */\n\n.request__endpoint {\n\tcolor: green;\n}\n\n.request__body {\n\tmargin-left: .5rem;\n\twidth: auto;\n\twhite-space: pre;\n\tfont-family: 'Courier New', Courier, monospace;\n}\n\n.response__container {\n\tmargin-top: .5rem;\n\tpadding-left: 1rem;\n\tpadding-right: 1rem;\n\toverflow-y: auto;\n\toverflow-x: auto;\n\toverflow-wrap: anywhere;\n}\n\n.response__body {\n\tfont-family: 'Courier New', Courier, monospace;\n}\n\n.request__headers,\n.response__headers,\n.request__query-params,\n.response__body {\n\tdisplay: none;\n}\n\n.request__headers.active,\n.response__headers.active,\n.request__query-params.active,\n.response__body.active {\n\tdisplay: block;\n\tmargin: 0 1rem .5rem 0;\n}\n\n.request__headers-twisty,\n.response__headers-twisty,\n.request__query-params-twisty,\n.response__body-twisty {\n\twidth: 0;\n\theight: 0;\n\tborder-top: .5rem solid transparent;\n\tborder-bottom: .5rem solid transparent;\n\tborder-left: .5rem solid;\n\tmargin: .5rem .1rem 0 0 !important;\n\tcursor: pointer;\n}\n\n.request__headers-twisty.active,\n.response__headers-twisty.active,\n.request__query-params-twisty.active,\n.response__body-twisty.active {\n\twidth: 0;\n\theight: 0;\n\tborder-left: .5rem solid transparent;\n\tborder-right: .5rem solid transparent;\n\tborder-top: .5rem solid;\n}\n\n.twisty-label {\n\tcursor: pointer;\n}\n\n.http-message__url {\n\tcursor: pointer;\n}\n\n.modal-full-screen-scroll {\n\theight: calc(100vh - 200px);\n\toverflow-y: auto;\n}\n\n.resend-modal__field {\n\tmargin-bottom: 1rem;\n\tmargin-right: .5rem;\n\theight: 30px;\n\twidth: 100px;\n}\n\n.resend-modal__header-select {\n\twidth: 150px;\n\theight: 30px;\n}\n\n.resend-modal__header-input {\n\theight: 30px;\n\twidth: 100%;\n}\n\n.resend-modal__host {\n\twidth: 200px;\n}\n\n.resend-modal__url-container,\n.resend-modal__body-container {\n\twidth: 100%;\n}\n\n.resend-modal__body-container {\n\theight: 400px;\n}\n\n.resend-modal__body {\n\theight: 90vh;\n}\n\n.resend-modal__url,\n.resend-modal__body {\n\tdisplay: table-row;\n}\n\n.modal-window {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.breakpoint-modal,\n.json-log-modal,\n.no-capture-modal,\n.metrics-modal,\n.reachable-modal,\n.settings-modal {\n\tbackground-color: #333333;\n\twidth: 90vw;\n\tpadding: 1rem 1rem;\n}\n\n@media screen and (prefers-color-scheme: light) {\n\n\t.breakpoint-modal,\n\t.json-log-modal,\n\t.no-capture-modal,\n\t.metrics-modal,\n\t.reachable-modal,\n\t.settings-modal {\n\t\tbackground-color: white;\n\t}\n}\n\n.breakpoint-modal {\n\tmax-width: 90vw;\n}\n\n.no-capture-modal {\n\tmax-width: 600px;\n}\n\n.reachable-modal {\n\tmax-width: 700px;\n}\n\n.metrics-modal {\n\tmax-width: 90vw;\n}\n\n.settings-modal__proxy-row.nocapture,\n.settings-modal__proxy-row.nocapture input {\n\tbackground-color: rgba(216, 214, 214, 0.3);\n}\n\n\n.settings-modal__scroll-container {\n\toverflow-y: auto;\n\theight: calc(100vh - 400px);\n}\n\n.json-fields-modal__scroll-container {\n\toverflow-y: auto;\n\theight: calc(100vh - 300px);\n}\n\n.no-capture-modal__scroll-container,\n.metrics-modal__scroll-container,\n.reachable-modal__scroll-container {\n\toverflow-y: auto;\n\theight: 80vh;\n}\n\n.modal-content {\n\twidth: 99vw;\n}\n\n.settings-modal__table {\n\twhite-space: nowrap;\n}\n\n.resend-modal__error-message {\n\tfloat: left;\n\tcolor: red;\n}\n\n.settings-modal__proxy-protocol-container {\n\twhite-space: nowrap;\n}\n\n.settings-modal__select-protocol {\n\twidth: 100px !important;\n\tpadding-left: 0 !important;\n}\n\n.settings-modal__icon {\n\tmargin-top: .725rem;\n\tdisplay: inline-block;\n}\n\n.settings-modal__proxy-host .settings-modal__proxy-port,\n.settings-modal__recording-container {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.settings-modal__proxy-port {\n\twidth: 8ch;\n}\n\n.settings__recording {\n\tcursor: pointer;\n}\n\n.settings__recording {\n\tcolor: #007bff;\n}\n\n.settings-modal__label-max-messages {\n\tpadding-right: 1rem;\n}\n\n.settings-modal__input-max-messages {\n\twidth: 12ch !important;\n}\n\n.primary-text-color {\n\tcolor: #007bff;\n}","/*!\n * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fad,\n.fab {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n display: inline-block;\n font-style: normal;\n font-variant: normal;\n text-rendering: auto;\n line-height: 1; }\n\n.fa-lg {\n font-size: 1.33333em;\n line-height: 0.75em;\n vertical-align: -.0667em; }\n\n.fa-xs {\n font-size: .75em; }\n\n.fa-sm {\n font-size: .875em; }\n\n.fa-1x {\n font-size: 1em; }\n\n.fa-2x {\n font-size: 2em; }\n\n.fa-3x {\n font-size: 3em; }\n\n.fa-4x {\n font-size: 4em; }\n\n.fa-5x {\n font-size: 5em; }\n\n.fa-6x {\n font-size: 6em; }\n\n.fa-7x {\n font-size: 7em; }\n\n.fa-8x {\n font-size: 8em; }\n\n.fa-9x {\n font-size: 9em; }\n\n.fa-10x {\n font-size: 10em; }\n\n.fa-fw {\n text-align: center;\n width: 1.25em; }\n\n.fa-ul {\n list-style-type: none;\n margin-left: 2.5em;\n padding-left: 0; }\n .fa-ul > li {\n position: relative; }\n\n.fa-li {\n left: -2em;\n position: absolute;\n text-align: center;\n width: 2em;\n line-height: inherit; }\n\n.fa-border {\n border: solid 0.08em #eee;\n border-radius: .1em;\n padding: .2em .25em .15em; }\n\n.fa-pull-left {\n float: left; }\n\n.fa-pull-right {\n float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n margin-left: .3em; }\n\n.fa-spin {\n -webkit-animation: fa-spin 2s infinite linear;\n animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n -webkit-animation: fa-spin 1s infinite steps(8);\n animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg); }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg); }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n -webkit-transform: rotate(90deg);\n transform: rotate(90deg); }\n\n.fa-rotate-180 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n -webkit-transform: rotate(180deg);\n transform: rotate(180deg); }\n\n.fa-rotate-270 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n -webkit-transform: rotate(270deg);\n transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n -webkit-transform: scale(-1, 1);\n transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n -webkit-transform: scale(1, -1);\n transform: scale(1, -1); }\n\n.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n -webkit-transform: scale(-1, -1);\n transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical,\n:root .fa-flip-both {\n -webkit-filter: none;\n filter: none; }\n\n.fa-stack {\n display: inline-block;\n height: 2em;\n line-height: 2em;\n position: relative;\n vertical-align: middle;\n width: 2.5em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n left: 0;\n position: absolute;\n text-align: center;\n width: 100%; }\n\n.fa-stack-1x {\n line-height: inherit; }\n\n.fa-stack-2x {\n font-size: 2em; }\n\n.fa-inverse {\n color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n content: \"\\f368\"; }\n\n.fa-accusoft:before {\n content: \"\\f369\"; }\n\n.fa-acquisitions-incorporated:before {\n content: \"\\f6af\"; }\n\n.fa-ad:before {\n content: \"\\f641\"; }\n\n.fa-address-book:before {\n content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n content: \"\\f042\"; }\n\n.fa-adn:before {\n content: \"\\f170\"; }\n\n.fa-adversal:before {\n content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n content: \"\\f36b\"; }\n\n.fa-air-freshener:before {\n content: \"\\f5d0\"; }\n\n.fa-airbnb:before {\n content: \"\\f834\"; }\n\n.fa-algolia:before {\n content: \"\\f36c\"; }\n\n.fa-align-center:before {\n content: \"\\f037\"; }\n\n.fa-align-justify:before {\n content: \"\\f039\"; }\n\n.fa-align-left:before {\n content: \"\\f036\"; }\n\n.fa-align-right:before {\n content: \"\\f038\"; }\n\n.fa-alipay:before {\n content: \"\\f642\"; }\n\n.fa-allergies:before {\n content: \"\\f461\"; }\n\n.fa-amazon:before {\n content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n content: \"\\f36d\"; }\n\n.fa-anchor:before {\n content: \"\\f13d\"; }\n\n.fa-android:before {\n content: \"\\f17b\"; }\n\n.fa-angellist:before {\n content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n content: \"\\f102\"; }\n\n.fa-angle-down:before {\n content: \"\\f107\"; }\n\n.fa-angle-left:before {\n content: \"\\f104\"; }\n\n.fa-angle-right:before {\n content: \"\\f105\"; }\n\n.fa-angle-up:before {\n content: \"\\f106\"; }\n\n.fa-angry:before {\n content: \"\\f556\"; }\n\n.fa-angrycreative:before {\n content: \"\\f36e\"; }\n\n.fa-angular:before {\n content: \"\\f420\"; }\n\n.fa-ankh:before {\n content: \"\\f644\"; }\n\n.fa-app-store:before {\n content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n content: \"\\f370\"; }\n\n.fa-apper:before {\n content: \"\\f371\"; }\n\n.fa-apple:before {\n content: \"\\f179\"; }\n\n.fa-apple-alt:before {\n content: \"\\f5d1\"; }\n\n.fa-apple-pay:before {\n content: \"\\f415\"; }\n\n.fa-archive:before {\n content: \"\\f187\"; }\n\n.fa-archway:before {\n content: \"\\f557\"; }\n\n.fa-arrow-alt-circle-down:before {\n content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n content: \"\\f338\"; }\n\n.fa-artstation:before {\n content: \"\\f77a\"; }\n\n.fa-assistive-listening-systems:before {\n content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n content: \"\\f372\"; }\n\n.fa-at:before {\n content: \"\\f1fa\"; }\n\n.fa-atlas:before {\n content: \"\\f558\"; }\n\n.fa-atlassian:before {\n content: \"\\f77b\"; }\n\n.fa-atom:before {\n content: \"\\f5d2\"; }\n\n.fa-audible:before {\n content: \"\\f373\"; }\n\n.fa-audio-description:before {\n content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n content: \"\\f41c\"; }\n\n.fa-avianex:before {\n content: \"\\f374\"; }\n\n.fa-aviato:before {\n content: \"\\f421\"; }\n\n.fa-award:before {\n content: \"\\f559\"; }\n\n.fa-aws:before {\n content: \"\\f375\"; }\n\n.fa-baby:before {\n content: \"\\f77c\"; }\n\n.fa-baby-carriage:before {\n content: \"\\f77d\"; }\n\n.fa-backspace:before {\n content: \"\\f55a\"; }\n\n.fa-backward:before {\n content: \"\\f04a\"; }\n\n.fa-bacon:before {\n content: \"\\f7e5\"; }\n\n.fa-bacteria:before {\n content: \"\\e059\"; }\n\n.fa-bacterium:before {\n content: \"\\e05a\"; }\n\n.fa-bahai:before {\n content: \"\\f666\"; }\n\n.fa-balance-scale:before {\n content: \"\\f24e\"; }\n\n.fa-balance-scale-left:before {\n content: \"\\f515\"; }\n\n.fa-balance-scale-right:before {\n content: \"\\f516\"; }\n\n.fa-ban:before {\n content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n content: \"\\f02a\"; }\n\n.fa-bars:before {\n content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n content: \"\\f434\"; }\n\n.fa-bath:before {\n content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n content: \"\\f244\"; }\n\n.fa-battery-full:before {\n content: \"\\f240\"; }\n\n.fa-battery-half:before {\n content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n content: \"\\f241\"; }\n\n.fa-battle-net:before {\n content: \"\\f835\"; }\n\n.fa-bed:before {\n content: \"\\f236\"; }\n\n.fa-beer:before {\n content: \"\\f0fc\"; }\n\n.fa-behance:before {\n content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n content: \"\\f1b5\"; }\n\n.fa-bell:before {\n content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n content: \"\\f1f6\"; }\n\n.fa-bezier-curve:before {\n content: \"\\f55b\"; }\n\n.fa-bible:before {\n content: \"\\f647\"; }\n\n.fa-bicycle:before {\n content: \"\\f206\"; }\n\n.fa-biking:before {\n content: \"\\f84a\"; }\n\n.fa-bimobject:before {\n content: \"\\f378\"; }\n\n.fa-binoculars:before {\n content: \"\\f1e5\"; }\n\n.fa-biohazard:before {\n content: \"\\f780\"; }\n\n.fa-birthday-cake:before {\n content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n content: \"\\f379\"; }\n\n.fa-bity:before {\n content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n content: \"\\f37b\"; }\n\n.fa-blender:before {\n content: \"\\f517\"; }\n\n.fa-blender-phone:before {\n content: \"\\f6b6\"; }\n\n.fa-blind:before {\n content: \"\\f29d\"; }\n\n.fa-blog:before {\n content: \"\\f781\"; }\n\n.fa-blogger:before {\n content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n content: \"\\f294\"; }\n\n.fa-bold:before {\n content: \"\\f032\"; }\n\n.fa-bolt:before {\n content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n content: \"\\f1e2\"; }\n\n.fa-bone:before {\n content: \"\\f5d7\"; }\n\n.fa-bong:before {\n content: \"\\f55c\"; }\n\n.fa-book:before {\n content: \"\\f02d\"; }\n\n.fa-book-dead:before {\n content: \"\\f6b7\"; }\n\n.fa-book-medical:before {\n content: \"\\f7e6\"; }\n\n.fa-book-open:before {\n content: \"\\f518\"; }\n\n.fa-book-reader:before {\n content: \"\\f5da\"; }\n\n.fa-bookmark:before {\n content: \"\\f02e\"; }\n\n.fa-bootstrap:before {\n content: \"\\f836\"; }\n\n.fa-border-all:before {\n content: \"\\f84c\"; }\n\n.fa-border-none:before {\n content: \"\\f850\"; }\n\n.fa-border-style:before {\n content: \"\\f853\"; }\n\n.fa-bowling-ball:before {\n content: \"\\f436\"; }\n\n.fa-box:before {\n content: \"\\f466\"; }\n\n.fa-box-open:before {\n content: \"\\f49e\"; }\n\n.fa-box-tissue:before {\n content: \"\\e05b\"; }\n\n.fa-boxes:before {\n content: \"\\f468\"; }\n\n.fa-braille:before {\n content: \"\\f2a1\"; }\n\n.fa-brain:before {\n content: \"\\f5dc\"; }\n\n.fa-bread-slice:before {\n content: \"\\f7ec\"; }\n\n.fa-briefcase:before {\n content: \"\\f0b1\"; }\n\n.fa-briefcase-medical:before {\n content: \"\\f469\"; }\n\n.fa-broadcast-tower:before {\n content: \"\\f519\"; }\n\n.fa-broom:before {\n content: \"\\f51a\"; }\n\n.fa-brush:before {\n content: \"\\f55d\"; }\n\n.fa-btc:before {\n content: \"\\f15a\"; }\n\n.fa-buffer:before {\n content: \"\\f837\"; }\n\n.fa-bug:before {\n content: \"\\f188\"; }\n\n.fa-building:before {\n content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n content: \"\\f140\"; }\n\n.fa-burn:before {\n content: \"\\f46a\"; }\n\n.fa-buromobelexperte:before {\n content: \"\\f37f\"; }\n\n.fa-bus:before {\n content: \"\\f207\"; }\n\n.fa-bus-alt:before {\n content: \"\\f55e\"; }\n\n.fa-business-time:before {\n content: \"\\f64a\"; }\n\n.fa-buy-n-large:before {\n content: \"\\f8a6\"; }\n\n.fa-buysellads:before {\n content: \"\\f20d\"; }\n\n.fa-calculator:before {\n content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n content: \"\\f274\"; }\n\n.fa-calendar-day:before {\n content: \"\\f783\"; }\n\n.fa-calendar-minus:before {\n content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n content: \"\\f273\"; }\n\n.fa-calendar-week:before {\n content: \"\\f784\"; }\n\n.fa-camera:before {\n content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n content: \"\\f083\"; }\n\n.fa-campground:before {\n content: \"\\f6bb\"; }\n\n.fa-canadian-maple-leaf:before {\n content: \"\\f785\"; }\n\n.fa-candy-cane:before {\n content: \"\\f786\"; }\n\n.fa-cannabis:before {\n content: \"\\f55f\"; }\n\n.fa-capsules:before {\n content: \"\\f46b\"; }\n\n.fa-car:before {\n content: \"\\f1b9\"; }\n\n.fa-car-alt:before {\n content: \"\\f5de\"; }\n\n.fa-car-battery:before {\n content: \"\\f5df\"; }\n\n.fa-car-crash:before {\n content: \"\\f5e1\"; }\n\n.fa-car-side:before {\n content: \"\\f5e4\"; }\n\n.fa-caravan:before {\n content: \"\\f8ff\"; }\n\n.fa-caret-down:before {\n content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n content: \"\\f151\"; }\n\n.fa-caret-up:before {\n content: \"\\f0d8\"; }\n\n.fa-carrot:before {\n content: \"\\f787\"; }\n\n.fa-cart-arrow-down:before {\n content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n content: \"\\f217\"; }\n\n.fa-cash-register:before {\n content: \"\\f788\"; }\n\n.fa-cat:before {\n content: \"\\f6be\"; }\n\n.fa-cc-amazon-pay:before {\n content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n content: \"\\f380\"; }\n\n.fa-centos:before {\n content: \"\\f789\"; }\n\n.fa-certificate:before {\n content: \"\\f0a3\"; }\n\n.fa-chair:before {\n content: \"\\f6c0\"; }\n\n.fa-chalkboard:before {\n content: \"\\f51b\"; }\n\n.fa-chalkboard-teacher:before {\n content: \"\\f51c\"; }\n\n.fa-charging-station:before {\n content: \"\\f5e7\"; }\n\n.fa-chart-area:before {\n content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n content: \"\\f080\"; }\n\n.fa-chart-line:before {\n content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n content: \"\\f200\"; }\n\n.fa-check:before {\n content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n content: \"\\f058\"; }\n\n.fa-check-double:before {\n content: \"\\f560\"; }\n\n.fa-check-square:before {\n content: \"\\f14a\"; }\n\n.fa-cheese:before {\n content: \"\\f7ef\"; }\n\n.fa-chess:before {\n content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n content: \"\\f077\"; }\n\n.fa-child:before {\n content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n content: \"\\f268\"; }\n\n.fa-chromecast:before {\n content: \"\\f838\"; }\n\n.fa-church:before {\n content: \"\\f51d\"; }\n\n.fa-circle:before {\n content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n content: \"\\f1ce\"; }\n\n.fa-city:before {\n content: \"\\f64f\"; }\n\n.fa-clinic-medical:before {\n content: \"\\f7f2\"; }\n\n.fa-clipboard:before {\n content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n content: \"\\f46d\"; }\n\n.fa-clock:before {\n content: \"\\f017\"; }\n\n.fa-clone:before {\n content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n content: \"\\f20a\"; }\n\n.fa-cloud:before {\n content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n content: \"\\f381\"; }\n\n.fa-cloud-meatball:before {\n content: \"\\f73b\"; }\n\n.fa-cloud-moon:before {\n content: \"\\f6c3\"; }\n\n.fa-cloud-moon-rain:before {\n content: \"\\f73c\"; }\n\n.fa-cloud-rain:before {\n content: \"\\f73d\"; }\n\n.fa-cloud-showers-heavy:before {\n content: \"\\f740\"; }\n\n.fa-cloud-sun:before {\n content: \"\\f6c4\"; }\n\n.fa-cloud-sun-rain:before {\n content: \"\\f743\"; }\n\n.fa-cloud-upload-alt:before {\n content: \"\\f382\"; }\n\n.fa-cloudflare:before {\n content: \"\\e07d\"; }\n\n.fa-cloudscale:before {\n content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n content: \"\\f385\"; }\n\n.fa-cocktail:before {\n content: \"\\f561\"; }\n\n.fa-code:before {\n content: \"\\f121\"; }\n\n.fa-code-branch:before {\n content: \"\\f126\"; }\n\n.fa-codepen:before {\n content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n content: \"\\f284\"; }\n\n.fa-coffee:before {\n content: \"\\f0f4\"; }\n\n.fa-cog:before {\n content: \"\\f013\"; }\n\n.fa-cogs:before {\n content: \"\\f085\"; }\n\n.fa-coins:before {\n content: \"\\f51e\"; }\n\n.fa-columns:before {\n content: \"\\f0db\"; }\n\n.fa-comment:before {\n content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n content: \"\\f27a\"; }\n\n.fa-comment-dollar:before {\n content: \"\\f651\"; }\n\n.fa-comment-dots:before {\n content: \"\\f4ad\"; }\n\n.fa-comment-medical:before {\n content: \"\\f7f5\"; }\n\n.fa-comment-slash:before {\n content: \"\\f4b3\"; }\n\n.fa-comments:before {\n content: \"\\f086\"; }\n\n.fa-comments-dollar:before {\n content: \"\\f653\"; }\n\n.fa-compact-disc:before {\n content: \"\\f51f\"; }\n\n.fa-compass:before {\n content: \"\\f14e\"; }\n\n.fa-compress:before {\n content: \"\\f066\"; }\n\n.fa-compress-alt:before {\n content: \"\\f422\"; }\n\n.fa-compress-arrows-alt:before {\n content: \"\\f78c\"; }\n\n.fa-concierge-bell:before {\n content: \"\\f562\"; }\n\n.fa-confluence:before {\n content: \"\\f78d\"; }\n\n.fa-connectdevelop:before {\n content: \"\\f20e\"; }\n\n.fa-contao:before {\n content: \"\\f26d\"; }\n\n.fa-cookie:before {\n content: \"\\f563\"; }\n\n.fa-cookie-bite:before {\n content: \"\\f564\"; }\n\n.fa-copy:before {\n content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n content: \"\\f1f9\"; }\n\n.fa-cotton-bureau:before {\n content: \"\\f89e\"; }\n\n.fa-couch:before {\n content: \"\\f4b8\"; }\n\n.fa-cpanel:before {\n content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n content: \"\\f25e\"; }\n\n.fa-creative-commons-by:before {\n content: \"\\f4e7\"; }\n\n.fa-creative-commons-nc:before {\n content: \"\\f4e8\"; }\n\n.fa-creative-commons-nc-eu:before {\n content: \"\\f4e9\"; }\n\n.fa-creative-commons-nc-jp:before {\n content: \"\\f4ea\"; }\n\n.fa-creative-commons-nd:before {\n content: \"\\f4eb\"; }\n\n.fa-creative-commons-pd:before {\n content: \"\\f4ec\"; }\n\n.fa-creative-commons-pd-alt:before {\n content: \"\\f4ed\"; }\n\n.fa-creative-commons-remix:before {\n content: \"\\f4ee\"; }\n\n.fa-creative-commons-sa:before {\n content: \"\\f4ef\"; }\n\n.fa-creative-commons-sampling:before {\n content: \"\\f4f0\"; }\n\n.fa-creative-commons-sampling-plus:before {\n content: \"\\f4f1\"; }\n\n.fa-creative-commons-share:before {\n content: \"\\f4f2\"; }\n\n.fa-creative-commons-zero:before {\n content: \"\\f4f3\"; }\n\n.fa-credit-card:before {\n content: \"\\f09d\"; }\n\n.fa-critical-role:before {\n content: \"\\f6c9\"; }\n\n.fa-crop:before {\n content: \"\\f125\"; }\n\n.fa-crop-alt:before {\n content: \"\\f565\"; }\n\n.fa-cross:before {\n content: \"\\f654\"; }\n\n.fa-crosshairs:before {\n content: \"\\f05b\"; }\n\n.fa-crow:before {\n content: \"\\f520\"; }\n\n.fa-crown:before {\n content: \"\\f521\"; }\n\n.fa-crutch:before {\n content: \"\\f7f7\"; }\n\n.fa-css3:before {\n content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n content: \"\\f38b\"; }\n\n.fa-cube:before {\n content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n content: \"\\f1b3\"; }\n\n.fa-cut:before {\n content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n content: \"\\f38d\"; }\n\n.fa-d-and-d-beyond:before {\n content: \"\\f6ca\"; }\n\n.fa-dailymotion:before {\n content: \"\\e052\"; }\n\n.fa-dashcube:before {\n content: \"\\f210\"; }\n\n.fa-database:before {\n content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n content: \"\\f2a4\"; }\n\n.fa-deezer:before {\n content: \"\\e077\"; }\n\n.fa-delicious:before {\n content: \"\\f1a5\"; }\n\n.fa-democrat:before {\n content: \"\\f747\"; }\n\n.fa-deploydog:before {\n content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n content: \"\\f38f\"; }\n\n.fa-desktop:before {\n content: \"\\f108\"; }\n\n.fa-dev:before {\n content: \"\\f6cc\"; }\n\n.fa-deviantart:before {\n content: \"\\f1bd\"; }\n\n.fa-dharmachakra:before {\n content: \"\\f655\"; }\n\n.fa-dhl:before {\n content: \"\\f790\"; }\n\n.fa-diagnoses:before {\n content: \"\\f470\"; }\n\n.fa-diaspora:before {\n content: \"\\f791\"; }\n\n.fa-dice:before {\n content: \"\\f522\"; }\n\n.fa-dice-d20:before {\n content: \"\\f6cf\"; }\n\n.fa-dice-d6:before {\n content: \"\\f6d1\"; }\n\n.fa-dice-five:before {\n content: \"\\f523\"; }\n\n.fa-dice-four:before {\n content: \"\\f524\"; }\n\n.fa-dice-one:before {\n content: \"\\f525\"; }\n\n.fa-dice-six:before {\n content: \"\\f526\"; }\n\n.fa-dice-three:before {\n content: \"\\f527\"; }\n\n.fa-dice-two:before {\n content: \"\\f528\"; }\n\n.fa-digg:before {\n content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n content: \"\\f391\"; }\n\n.fa-digital-tachograph:before {\n content: \"\\f566\"; }\n\n.fa-directions:before {\n content: \"\\f5eb\"; }\n\n.fa-discord:before {\n content: \"\\f392\"; }\n\n.fa-discourse:before {\n content: \"\\f393\"; }\n\n.fa-disease:before {\n content: \"\\f7fa\"; }\n\n.fa-divide:before {\n content: \"\\f529\"; }\n\n.fa-dizzy:before {\n content: \"\\f567\"; }\n\n.fa-dna:before {\n content: \"\\f471\"; }\n\n.fa-dochub:before {\n content: \"\\f394\"; }\n\n.fa-docker:before {\n content: \"\\f395\"; }\n\n.fa-dog:before {\n content: \"\\f6d3\"; }\n\n.fa-dollar-sign:before {\n content: \"\\f155\"; }\n\n.fa-dolly:before {\n content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n content: \"\\f474\"; }\n\n.fa-donate:before {\n content: \"\\f4b9\"; }\n\n.fa-door-closed:before {\n content: \"\\f52a\"; }\n\n.fa-door-open:before {\n content: \"\\f52b\"; }\n\n.fa-dot-circle:before {\n content: \"\\f192\"; }\n\n.fa-dove:before {\n content: \"\\f4ba\"; }\n\n.fa-download:before {\n content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n content: \"\\f396\"; }\n\n.fa-drafting-compass:before {\n content: \"\\f568\"; }\n\n.fa-dragon:before {\n content: \"\\f6d5\"; }\n\n.fa-draw-polygon:before {\n content: \"\\f5ee\"; }\n\n.fa-dribbble:before {\n content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n content: \"\\f397\"; }\n\n.fa-dropbox:before {\n content: \"\\f16b\"; }\n\n.fa-drum:before {\n content: \"\\f569\"; }\n\n.fa-drum-steelpan:before {\n content: \"\\f56a\"; }\n\n.fa-drumstick-bite:before {\n content: \"\\f6d7\"; }\n\n.fa-drupal:before {\n content: \"\\f1a9\"; }\n\n.fa-dumbbell:before {\n content: \"\\f44b\"; }\n\n.fa-dumpster:before {\n content: \"\\f793\"; }\n\n.fa-dumpster-fire:before {\n content: \"\\f794\"; }\n\n.fa-dungeon:before {\n content: \"\\f6d9\"; }\n\n.fa-dyalog:before {\n content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n content: \"\\f39a\"; }\n\n.fa-ebay:before {\n content: \"\\f4f4\"; }\n\n.fa-edge:before {\n content: \"\\f282\"; }\n\n.fa-edge-legacy:before {\n content: \"\\e078\"; }\n\n.fa-edit:before {\n content: \"\\f044\"; }\n\n.fa-egg:before {\n content: \"\\f7fb\"; }\n\n.fa-eject:before {\n content: \"\\f052\"; }\n\n.fa-elementor:before {\n content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n content: \"\\f142\"; }\n\n.fa-ello:before {\n content: \"\\f5f1\"; }\n\n.fa-ember:before {\n content: \"\\f423\"; }\n\n.fa-empire:before {\n content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n content: \"\\f2b6\"; }\n\n.fa-envelope-open-text:before {\n content: \"\\f658\"; }\n\n.fa-envelope-square:before {\n content: \"\\f199\"; }\n\n.fa-envira:before {\n content: \"\\f299\"; }\n\n.fa-equals:before {\n content: \"\\f52c\"; }\n\n.fa-eraser:before {\n content: \"\\f12d\"; }\n\n.fa-erlang:before {\n content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n content: \"\\f42e\"; }\n\n.fa-ethernet:before {\n content: \"\\f796\"; }\n\n.fa-etsy:before {\n content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n content: \"\\f153\"; }\n\n.fa-evernote:before {\n content: \"\\f839\"; }\n\n.fa-exchange-alt:before {\n content: \"\\f362\"; }\n\n.fa-exclamation:before {\n content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n content: \"\\f071\"; }\n\n.fa-expand:before {\n content: \"\\f065\"; }\n\n.fa-expand-alt:before {\n content: \"\\f424\"; }\n\n.fa-expand-arrows-alt:before {\n content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n content: \"\\f360\"; }\n\n.fa-eye:before {\n content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n content: \"\\f070\"; }\n\n.fa-facebook:before {\n content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n content: \"\\f082\"; }\n\n.fa-fan:before {\n content: \"\\f863\"; }\n\n.fa-fantasy-flight-games:before {\n content: \"\\f6dc\"; }\n\n.fa-fast-backward:before {\n content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n content: \"\\f050\"; }\n\n.fa-faucet:before {\n content: \"\\e005\"; }\n\n.fa-fax:before {\n content: \"\\f1ac\"; }\n\n.fa-feather:before {\n content: \"\\f52d\"; }\n\n.fa-feather-alt:before {\n content: \"\\f56b\"; }\n\n.fa-fedex:before {\n content: \"\\f797\"; }\n\n.fa-fedora:before {\n content: \"\\f798\"; }\n\n.fa-female:before {\n content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n content: \"\\f0fb\"; }\n\n.fa-figma:before {\n content: \"\\f799\"; }\n\n.fa-file:before {\n content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n content: \"\\f1c9\"; }\n\n.fa-file-contract:before {\n content: \"\\f56c\"; }\n\n.fa-file-csv:before {\n content: \"\\f6dd\"; }\n\n.fa-file-download:before {\n content: \"\\f56d\"; }\n\n.fa-file-excel:before {\n content: \"\\f1c3\"; }\n\n.fa-file-export:before {\n content: \"\\f56e\"; }\n\n.fa-file-image:before {\n content: \"\\f1c5\"; }\n\n.fa-file-import:before {\n content: \"\\f56f\"; }\n\n.fa-file-invoice:before {\n content: \"\\f570\"; }\n\n.fa-file-invoice-dollar:before {\n content: \"\\f571\"; }\n\n.fa-file-medical:before {\n content: \"\\f477\"; }\n\n.fa-file-medical-alt:before {\n content: \"\\f478\"; }\n\n.fa-file-pdf:before {\n content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n content: \"\\f1c4\"; }\n\n.fa-file-prescription:before {\n content: \"\\f572\"; }\n\n.fa-file-signature:before {\n content: \"\\f573\"; }\n\n.fa-file-upload:before {\n content: \"\\f574\"; }\n\n.fa-file-video:before {\n content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n content: \"\\f1c2\"; }\n\n.fa-fill:before {\n content: \"\\f575\"; }\n\n.fa-fill-drip:before {\n content: \"\\f576\"; }\n\n.fa-film:before {\n content: \"\\f008\"; }\n\n.fa-filter:before {\n content: \"\\f0b0\"; }\n\n.fa-fingerprint:before {\n content: \"\\f577\"; }\n\n.fa-fire:before {\n content: \"\\f06d\"; }\n\n.fa-fire-alt:before {\n content: \"\\f7e4\"; }\n\n.fa-fire-extinguisher:before {\n content: \"\\f134\"; }\n\n.fa-firefox:before {\n content: \"\\f269\"; }\n\n.fa-firefox-browser:before {\n content: \"\\e007\"; }\n\n.fa-first-aid:before {\n content: \"\\f479\"; }\n\n.fa-first-order:before {\n content: \"\\f2b0\"; }\n\n.fa-first-order-alt:before {\n content: \"\\f50a\"; }\n\n.fa-firstdraft:before {\n content: \"\\f3a1\"; }\n\n.fa-fish:before {\n content: \"\\f578\"; }\n\n.fa-fist-raised:before {\n content: \"\\f6de\"; }\n\n.fa-flag:before {\n content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n content: \"\\f11e\"; }\n\n.fa-flag-usa:before {\n content: \"\\f74d\"; }\n\n.fa-flask:before {\n content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n content: \"\\f44d\"; }\n\n.fa-flushed:before {\n content: \"\\f579\"; }\n\n.fa-fly:before {\n content: \"\\f417\"; }\n\n.fa-folder:before {\n content: \"\\f07b\"; }\n\n.fa-folder-minus:before {\n content: \"\\f65d\"; }\n\n.fa-folder-open:before {\n content: \"\\f07c\"; }\n\n.fa-folder-plus:before {\n content: \"\\f65e\"; }\n\n.fa-font:before {\n content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n content: \"\\f425\"; }\n\n.fa-font-awesome-logo-full:before {\n content: \"\\f4e6\"; }\n\n.fa-fonticons:before {\n content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n content: \"\\f211\"; }\n\n.fa-forward:before {\n content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n content: \"\\f3a4\"; }\n\n.fa-frog:before {\n content: \"\\f52e\"; }\n\n.fa-frown:before {\n content: \"\\f119\"; }\n\n.fa-frown-open:before {\n content: \"\\f57a\"; }\n\n.fa-fulcrum:before {\n content: \"\\f50b\"; }\n\n.fa-funnel-dollar:before {\n content: \"\\f662\"; }\n\n.fa-futbol:before {\n content: \"\\f1e3\"; }\n\n.fa-galactic-republic:before {\n content: \"\\f50c\"; }\n\n.fa-galactic-senate:before {\n content: \"\\f50d\"; }\n\n.fa-gamepad:before {\n content: \"\\f11b\"; }\n\n.fa-gas-pump:before {\n content: \"\\f52f\"; }\n\n.fa-gavel:before {\n content: \"\\f0e3\"; }\n\n.fa-gem:before {\n content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n content: \"\\f265\"; }\n\n.fa-gg:before {\n content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n content: \"\\f261\"; }\n\n.fa-ghost:before {\n content: \"\\f6e2\"; }\n\n.fa-gift:before {\n content: \"\\f06b\"; }\n\n.fa-gifts:before {\n content: \"\\f79c\"; }\n\n.fa-git:before {\n content: \"\\f1d3\"; }\n\n.fa-git-alt:before {\n content: \"\\f841\"; }\n\n.fa-git-square:before {\n content: \"\\f1d2\"; }\n\n.fa-github:before {\n content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n content: \"\\f113\"; }\n\n.fa-github-square:before {\n content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n content: \"\\f296\"; }\n\n.fa-gitter:before {\n content: \"\\f426\"; }\n\n.fa-glass-cheers:before {\n content: \"\\f79f\"; }\n\n.fa-glass-martini:before {\n content: \"\\f000\"; }\n\n.fa-glass-martini-alt:before {\n content: \"\\f57b\"; }\n\n.fa-glass-whiskey:before {\n content: \"\\f7a0\"; }\n\n.fa-glasses:before {\n content: \"\\f530\"; }\n\n.fa-glide:before {\n content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n content: \"\\f2a6\"; }\n\n.fa-globe:before {\n content: \"\\f0ac\"; }\n\n.fa-globe-africa:before {\n content: \"\\f57c\"; }\n\n.fa-globe-americas:before {\n content: \"\\f57d\"; }\n\n.fa-globe-asia:before {\n content: \"\\f57e\"; }\n\n.fa-globe-europe:before {\n content: \"\\f7a2\"; }\n\n.fa-gofore:before {\n content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n content: \"\\f450\"; }\n\n.fa-goodreads:before {\n content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n content: \"\\f3a9\"; }\n\n.fa-google:before {\n content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n content: \"\\f3aa\"; }\n\n.fa-google-pay:before {\n content: \"\\e079\"; }\n\n.fa-google-play:before {\n content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n content: \"\\f1ee\"; }\n\n.fa-gopuram:before {\n content: \"\\f664\"; }\n\n.fa-graduation-cap:before {\n content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n content: \"\\f184\"; }\n\n.fa-grav:before {\n content: \"\\f2d6\"; }\n\n.fa-greater-than:before {\n content: \"\\f531\"; }\n\n.fa-greater-than-equal:before {\n content: \"\\f532\"; }\n\n.fa-grimace:before {\n content: \"\\f57f\"; }\n\n.fa-grin:before {\n content: \"\\f580\"; }\n\n.fa-grin-alt:before {\n content: \"\\f581\"; }\n\n.fa-grin-beam:before {\n content: \"\\f582\"; }\n\n.fa-grin-beam-sweat:before {\n content: \"\\f583\"; }\n\n.fa-grin-hearts:before {\n content: \"\\f584\"; }\n\n.fa-grin-squint:before {\n content: \"\\f585\"; }\n\n.fa-grin-squint-tears:before {\n content: \"\\f586\"; }\n\n.fa-grin-stars:before {\n content: \"\\f587\"; }\n\n.fa-grin-tears:before {\n content: \"\\f588\"; }\n\n.fa-grin-tongue:before {\n content: \"\\f589\"; }\n\n.fa-grin-tongue-squint:before {\n content: \"\\f58a\"; }\n\n.fa-grin-tongue-wink:before {\n content: \"\\f58b\"; }\n\n.fa-grin-wink:before {\n content: \"\\f58c\"; }\n\n.fa-grip-horizontal:before {\n content: \"\\f58d\"; }\n\n.fa-grip-lines:before {\n content: \"\\f7a4\"; }\n\n.fa-grip-lines-vertical:before {\n content: \"\\f7a5\"; }\n\n.fa-grip-vertical:before {\n content: \"\\f58e\"; }\n\n.fa-gripfire:before {\n content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n content: \"\\f3ad\"; }\n\n.fa-guilded:before {\n content: \"\\e07e\"; }\n\n.fa-guitar:before {\n content: \"\\f7a6\"; }\n\n.fa-gulp:before {\n content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n content: \"\\f3af\"; }\n\n.fa-hackerrank:before {\n content: \"\\f5f7\"; }\n\n.fa-hamburger:before {\n content: \"\\f805\"; }\n\n.fa-hammer:before {\n content: \"\\f6e3\"; }\n\n.fa-hamsa:before {\n content: \"\\f665\"; }\n\n.fa-hand-holding:before {\n content: \"\\f4bd\"; }\n\n.fa-hand-holding-heart:before {\n content: \"\\f4be\"; }\n\n.fa-hand-holding-medical:before {\n content: \"\\e05c\"; }\n\n.fa-hand-holding-usd:before {\n content: \"\\f4c0\"; }\n\n.fa-hand-holding-water:before {\n content: \"\\f4c1\"; }\n\n.fa-hand-lizard:before {\n content: \"\\f258\"; }\n\n.fa-hand-middle-finger:before {\n content: \"\\f806\"; }\n\n.fa-hand-paper:before {\n content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n content: \"\\f257\"; }\n\n.fa-hand-sparkles:before {\n content: \"\\e05d\"; }\n\n.fa-hand-spock:before {\n content: \"\\f259\"; }\n\n.fa-hands:before {\n content: \"\\f4c2\"; }\n\n.fa-hands-helping:before {\n content: \"\\f4c4\"; }\n\n.fa-hands-wash:before {\n content: \"\\e05e\"; }\n\n.fa-handshake:before {\n content: \"\\f2b5\"; }\n\n.fa-handshake-alt-slash:before {\n content: \"\\e05f\"; }\n\n.fa-handshake-slash:before {\n content: \"\\e060\"; }\n\n.fa-hanukiah:before {\n content: \"\\f6e6\"; }\n\n.fa-hard-hat:before {\n content: \"\\f807\"; }\n\n.fa-hashtag:before {\n content: \"\\f292\"; }\n\n.fa-hat-cowboy:before {\n content: \"\\f8c0\"; }\n\n.fa-hat-cowboy-side:before {\n content: \"\\f8c1\"; }\n\n.fa-hat-wizard:before {\n content: \"\\f6e8\"; }\n\n.fa-hdd:before {\n content: \"\\f0a0\"; }\n\n.fa-head-side-cough:before {\n content: \"\\e061\"; }\n\n.fa-head-side-cough-slash:before {\n content: \"\\e062\"; }\n\n.fa-head-side-mask:before {\n content: \"\\e063\"; }\n\n.fa-head-side-virus:before {\n content: \"\\e064\"; }\n\n.fa-heading:before {\n content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n content: \"\\f025\"; }\n\n.fa-headphones-alt:before {\n content: \"\\f58f\"; }\n\n.fa-headset:before {\n content: \"\\f590\"; }\n\n.fa-heart:before {\n content: \"\\f004\"; }\n\n.fa-heart-broken:before {\n content: \"\\f7a9\"; }\n\n.fa-heartbeat:before {\n content: \"\\f21e\"; }\n\n.fa-helicopter:before {\n content: \"\\f533\"; }\n\n.fa-highlighter:before {\n content: \"\\f591\"; }\n\n.fa-hiking:before {\n content: \"\\f6ec\"; }\n\n.fa-hippo:before {\n content: \"\\f6ed\"; }\n\n.fa-hips:before {\n content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n content: \"\\f3b0\"; }\n\n.fa-history:before {\n content: \"\\f1da\"; }\n\n.fa-hive:before {\n content: \"\\e07f\"; }\n\n.fa-hockey-puck:before {\n content: \"\\f453\"; }\n\n.fa-holly-berry:before {\n content: \"\\f7aa\"; }\n\n.fa-home:before {\n content: \"\\f015\"; }\n\n.fa-hooli:before {\n content: \"\\f427\"; }\n\n.fa-hornbill:before {\n content: \"\\f592\"; }\n\n.fa-horse:before {\n content: \"\\f6f0\"; }\n\n.fa-horse-head:before {\n content: \"\\f7ab\"; }\n\n.fa-hospital:before {\n content: \"\\f0f8\"; }\n\n.fa-hospital-alt:before {\n content: \"\\f47d\"; }\n\n.fa-hospital-symbol:before {\n content: \"\\f47e\"; }\n\n.fa-hospital-user:before {\n content: \"\\f80d\"; }\n\n.fa-hot-tub:before {\n content: \"\\f593\"; }\n\n.fa-hotdog:before {\n content: \"\\f80f\"; }\n\n.fa-hotel:before {\n content: \"\\f594\"; }\n\n.fa-hotjar:before {\n content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n content: \"\\f251\"; }\n\n.fa-house-damage:before {\n content: \"\\f6f1\"; }\n\n.fa-house-user:before {\n content: \"\\e065\"; }\n\n.fa-houzz:before {\n content: \"\\f27c\"; }\n\n.fa-hryvnia:before {\n content: \"\\f6f2\"; }\n\n.fa-html5:before {\n content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n content: \"\\f246\"; }\n\n.fa-ice-cream:before {\n content: \"\\f810\"; }\n\n.fa-icicles:before {\n content: \"\\f7ad\"; }\n\n.fa-icons:before {\n content: \"\\f86d\"; }\n\n.fa-id-badge:before {\n content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n content: \"\\f2c2\"; }\n\n.fa-id-card-alt:before {\n content: \"\\f47f\"; }\n\n.fa-ideal:before {\n content: \"\\e013\"; }\n\n.fa-igloo:before {\n content: \"\\f7ae\"; }\n\n.fa-image:before {\n content: \"\\f03e\"; }\n\n.fa-images:before {\n content: \"\\f302\"; }\n\n.fa-imdb:before {\n content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n content: \"\\f01c\"; }\n\n.fa-indent:before {\n content: \"\\f03c\"; }\n\n.fa-industry:before {\n content: \"\\f275\"; }\n\n.fa-infinity:before {\n content: \"\\f534\"; }\n\n.fa-info:before {\n content: \"\\f129\"; }\n\n.fa-info-circle:before {\n content: \"\\f05a\"; }\n\n.fa-innosoft:before {\n content: \"\\e080\"; }\n\n.fa-instagram:before {\n content: \"\\f16d\"; }\n\n.fa-instagram-square:before {\n content: \"\\e055\"; }\n\n.fa-instalod:before {\n content: \"\\e081\"; }\n\n.fa-intercom:before {\n content: \"\\f7af\"; }\n\n.fa-internet-explorer:before {\n content: \"\\f26b\"; }\n\n.fa-invision:before {\n content: \"\\f7b0\"; }\n\n.fa-ioxhost:before {\n content: \"\\f208\"; }\n\n.fa-italic:before {\n content: \"\\f033\"; }\n\n.fa-itch-io:before {\n content: \"\\f83a\"; }\n\n.fa-itunes:before {\n content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n content: \"\\f3b5\"; }\n\n.fa-java:before {\n content: \"\\f4e4\"; }\n\n.fa-jedi:before {\n content: \"\\f669\"; }\n\n.fa-jedi-order:before {\n content: \"\\f50e\"; }\n\n.fa-jenkins:before {\n content: \"\\f3b6\"; }\n\n.fa-jira:before {\n content: \"\\f7b1\"; }\n\n.fa-joget:before {\n content: \"\\f3b7\"; }\n\n.fa-joint:before {\n content: \"\\f595\"; }\n\n.fa-joomla:before {\n content: \"\\f1aa\"; }\n\n.fa-journal-whills:before {\n content: \"\\f66a\"; }\n\n.fa-js:before {\n content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n content: \"\\f1cc\"; }\n\n.fa-kaaba:before {\n content: \"\\f66b\"; }\n\n.fa-kaggle:before {\n content: \"\\f5fa\"; }\n\n.fa-key:before {\n content: \"\\f084\"; }\n\n.fa-keybase:before {\n content: \"\\f4f5\"; }\n\n.fa-keyboard:before {\n content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n content: \"\\f3ba\"; }\n\n.fa-khanda:before {\n content: \"\\f66d\"; }\n\n.fa-kickstarter:before {\n content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n content: \"\\f3bc\"; }\n\n.fa-kiss:before {\n content: \"\\f596\"; }\n\n.fa-kiss-beam:before {\n content: \"\\f597\"; }\n\n.fa-kiss-wink-heart:before {\n content: \"\\f598\"; }\n\n.fa-kiwi-bird:before {\n content: \"\\f535\"; }\n\n.fa-korvue:before {\n content: \"\\f42f\"; }\n\n.fa-landmark:before {\n content: \"\\f66f\"; }\n\n.fa-language:before {\n content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n content: \"\\f109\"; }\n\n.fa-laptop-code:before {\n content: \"\\f5fc\"; }\n\n.fa-laptop-house:before {\n content: \"\\e066\"; }\n\n.fa-laptop-medical:before {\n content: \"\\f812\"; }\n\n.fa-laravel:before {\n content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n content: \"\\f203\"; }\n\n.fa-laugh:before {\n content: \"\\f599\"; }\n\n.fa-laugh-beam:before {\n content: \"\\f59a\"; }\n\n.fa-laugh-squint:before {\n content: \"\\f59b\"; }\n\n.fa-laugh-wink:before {\n content: \"\\f59c\"; }\n\n.fa-layer-group:before {\n content: \"\\f5fd\"; }\n\n.fa-leaf:before {\n content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n content: \"\\f212\"; }\n\n.fa-lemon:before {\n content: \"\\f094\"; }\n\n.fa-less:before {\n content: \"\\f41d\"; }\n\n.fa-less-than:before {\n content: \"\\f536\"; }\n\n.fa-less-than-equal:before {\n content: \"\\f537\"; }\n\n.fa-level-down-alt:before {\n content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n content: \"\\f0eb\"; }\n\n.fa-line:before {\n content: \"\\f3c0\"; }\n\n.fa-link:before {\n content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n content: \"\\f0e1\"; }\n\n.fa-linode:before {\n content: \"\\f2b8\"; }\n\n.fa-linux:before {\n content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n content: \"\\f195\"; }\n\n.fa-list:before {\n content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n content: \"\\f022\"; }\n\n.fa-list-ol:before {\n content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n content: \"\\f124\"; }\n\n.fa-lock:before {\n content: \"\\f023\"; }\n\n.fa-lock-open:before {\n content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n content: \"\\f2a8\"; }\n\n.fa-luggage-cart:before {\n content: \"\\f59d\"; }\n\n.fa-lungs:before {\n content: \"\\f604\"; }\n\n.fa-lungs-virus:before {\n content: \"\\e067\"; }\n\n.fa-lyft:before {\n content: \"\\f3c3\"; }\n\n.fa-magento:before {\n content: \"\\f3c4\"; }\n\n.fa-magic:before {\n content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n content: \"\\f076\"; }\n\n.fa-mail-bulk:before {\n content: \"\\f674\"; }\n\n.fa-mailchimp:before {\n content: \"\\f59e\"; }\n\n.fa-male:before {\n content: \"\\f183\"; }\n\n.fa-mandalorian:before {\n content: \"\\f50f\"; }\n\n.fa-map:before {\n content: \"\\f279\"; }\n\n.fa-map-marked:before {\n content: \"\\f59f\"; }\n\n.fa-map-marked-alt:before {\n content: \"\\f5a0\"; }\n\n.fa-map-marker:before {\n content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n content: \"\\f276\"; }\n\n.fa-map-signs:before {\n content: \"\\f277\"; }\n\n.fa-markdown:before {\n content: \"\\f60f\"; }\n\n.fa-marker:before {\n content: \"\\f5a1\"; }\n\n.fa-mars:before {\n content: \"\\f222\"; }\n\n.fa-mars-double:before {\n content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n content: \"\\f22a\"; }\n\n.fa-mask:before {\n content: \"\\f6fa\"; }\n\n.fa-mastodon:before {\n content: \"\\f4f6\"; }\n\n.fa-maxcdn:before {\n content: \"\\f136\"; }\n\n.fa-mdb:before {\n content: \"\\f8ca\"; }\n\n.fa-medal:before {\n content: \"\\f5a2\"; }\n\n.fa-medapps:before {\n content: \"\\f3c6\"; }\n\n.fa-medium:before {\n content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n content: \"\\f2e0\"; }\n\n.fa-megaport:before {\n content: \"\\f5a3\"; }\n\n.fa-meh:before {\n content: \"\\f11a\"; }\n\n.fa-meh-blank:before {\n content: \"\\f5a4\"; }\n\n.fa-meh-rolling-eyes:before {\n content: \"\\f5a5\"; }\n\n.fa-memory:before {\n content: \"\\f538\"; }\n\n.fa-mendeley:before {\n content: \"\\f7b3\"; }\n\n.fa-menorah:before {\n content: \"\\f676\"; }\n\n.fa-mercury:before {\n content: \"\\f223\"; }\n\n.fa-meteor:before {\n content: \"\\f753\"; }\n\n.fa-microblog:before {\n content: \"\\e01a\"; }\n\n.fa-microchip:before {\n content: \"\\f2db\"; }\n\n.fa-microphone:before {\n content: \"\\f130\"; }\n\n.fa-microphone-alt:before {\n content: \"\\f3c9\"; }\n\n.fa-microphone-alt-slash:before {\n content: \"\\f539\"; }\n\n.fa-microphone-slash:before {\n content: \"\\f131\"; }\n\n.fa-microscope:before {\n content: \"\\f610\"; }\n\n.fa-microsoft:before {\n content: \"\\f3ca\"; }\n\n.fa-minus:before {\n content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n content: \"\\f056\"; }\n\n.fa-minus-square:before {\n content: \"\\f146\"; }\n\n.fa-mitten:before {\n content: \"\\f7b5\"; }\n\n.fa-mix:before {\n content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n content: \"\\f289\"; }\n\n.fa-mixer:before {\n content: \"\\e056\"; }\n\n.fa-mizuni:before {\n content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n content: \"\\f3cd\"; }\n\n.fa-modx:before {\n content: \"\\f285\"; }\n\n.fa-monero:before {\n content: \"\\f3d0\"; }\n\n.fa-money-bill:before {\n content: \"\\f0d6\"; }\n\n.fa-money-bill-alt:before {\n content: \"\\f3d1\"; }\n\n.fa-money-bill-wave:before {\n content: \"\\f53a\"; }\n\n.fa-money-bill-wave-alt:before {\n content: \"\\f53b\"; }\n\n.fa-money-check:before {\n content: \"\\f53c\"; }\n\n.fa-money-check-alt:before {\n content: \"\\f53d\"; }\n\n.fa-monument:before {\n content: \"\\f5a6\"; }\n\n.fa-moon:before {\n content: \"\\f186\"; }\n\n.fa-mortar-pestle:before {\n content: \"\\f5a7\"; }\n\n.fa-mosque:before {\n content: \"\\f678\"; }\n\n.fa-motorcycle:before {\n content: \"\\f21c\"; }\n\n.fa-mountain:before {\n content: \"\\f6fc\"; }\n\n.fa-mouse:before {\n content: \"\\f8cc\"; }\n\n.fa-mouse-pointer:before {\n content: \"\\f245\"; }\n\n.fa-mug-hot:before {\n content: \"\\f7b6\"; }\n\n.fa-music:before {\n content: \"\\f001\"; }\n\n.fa-napster:before {\n content: \"\\f3d2\"; }\n\n.fa-neos:before {\n content: \"\\f612\"; }\n\n.fa-network-wired:before {\n content: \"\\f6ff\"; }\n\n.fa-neuter:before {\n content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n content: \"\\f1ea\"; }\n\n.fa-nimblr:before {\n content: \"\\f5a8\"; }\n\n.fa-node:before {\n content: \"\\f419\"; }\n\n.fa-node-js:before {\n content: \"\\f3d3\"; }\n\n.fa-not-equal:before {\n content: \"\\f53e\"; }\n\n.fa-notes-medical:before {\n content: \"\\f481\"; }\n\n.fa-npm:before {\n content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n content: \"\\f248\"; }\n\n.fa-octopus-deploy:before {\n content: \"\\e082\"; }\n\n.fa-odnoklassniki:before {\n content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n content: \"\\f264\"; }\n\n.fa-oil-can:before {\n content: \"\\f613\"; }\n\n.fa-old-republic:before {\n content: \"\\f510\"; }\n\n.fa-om:before {\n content: \"\\f679\"; }\n\n.fa-opencart:before {\n content: \"\\f23d\"; }\n\n.fa-openid:before {\n content: \"\\f19b\"; }\n\n.fa-opera:before {\n content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n content: \"\\f23c\"; }\n\n.fa-orcid:before {\n content: \"\\f8d2\"; }\n\n.fa-osi:before {\n content: \"\\f41a\"; }\n\n.fa-otter:before {\n content: \"\\f700\"; }\n\n.fa-outdent:before {\n content: \"\\f03b\"; }\n\n.fa-page4:before {\n content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n content: \"\\f18c\"; }\n\n.fa-pager:before {\n content: \"\\f815\"; }\n\n.fa-paint-brush:before {\n content: \"\\f1fc\"; }\n\n.fa-paint-roller:before {\n content: \"\\f5aa\"; }\n\n.fa-palette:before {\n content: \"\\f53f\"; }\n\n.fa-palfed:before {\n content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n content: \"\\f0c6\"; }\n\n.fa-parachute-box:before {\n content: \"\\f4cd\"; }\n\n.fa-paragraph:before {\n content: \"\\f1dd\"; }\n\n.fa-parking:before {\n content: \"\\f540\"; }\n\n.fa-passport:before {\n content: \"\\f5ab\"; }\n\n.fa-pastafarianism:before {\n content: \"\\f67b\"; }\n\n.fa-paste:before {\n content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n content: \"\\f3d9\"; }\n\n.fa-pause:before {\n content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n content: \"\\f28b\"; }\n\n.fa-paw:before {\n content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n content: \"\\f1ed\"; }\n\n.fa-peace:before {\n content: \"\\f67c\"; }\n\n.fa-pen:before {\n content: \"\\f304\"; }\n\n.fa-pen-alt:before {\n content: \"\\f305\"; }\n\n.fa-pen-fancy:before {\n content: \"\\f5ac\"; }\n\n.fa-pen-nib:before {\n content: \"\\f5ad\"; }\n\n.fa-pen-square:before {\n content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n content: \"\\f303\"; }\n\n.fa-pencil-ruler:before {\n content: \"\\f5ae\"; }\n\n.fa-penny-arcade:before {\n content: \"\\f704\"; }\n\n.fa-people-arrows:before {\n content: \"\\e068\"; }\n\n.fa-people-carry:before {\n content: \"\\f4ce\"; }\n\n.fa-pepper-hot:before {\n content: \"\\f816\"; }\n\n.fa-perbyte:before {\n content: \"\\e083\"; }\n\n.fa-percent:before {\n content: \"\\f295\"; }\n\n.fa-percentage:before {\n content: \"\\f541\"; }\n\n.fa-periscope:before {\n content: \"\\f3da\"; }\n\n.fa-person-booth:before {\n content: \"\\f756\"; }\n\n.fa-phabricator:before {\n content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n content: \"\\f3dc\"; }\n\n.fa-phoenix-squadron:before {\n content: \"\\f511\"; }\n\n.fa-phone:before {\n content: \"\\f095\"; }\n\n.fa-phone-alt:before {\n content: \"\\f879\"; }\n\n.fa-phone-slash:before {\n content: \"\\f3dd\"; }\n\n.fa-phone-square:before {\n content: \"\\f098\"; }\n\n.fa-phone-square-alt:before {\n content: \"\\f87b\"; }\n\n.fa-phone-volume:before {\n content: \"\\f2a0\"; }\n\n.fa-photo-video:before {\n content: \"\\f87c\"; }\n\n.fa-php:before {\n content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n content: \"\\f1a8\"; }\n\n.fa-pied-piper-hat:before {\n content: \"\\f4e5\"; }\n\n.fa-pied-piper-pp:before {\n content: \"\\f1a7\"; }\n\n.fa-pied-piper-square:before {\n content: \"\\e01e\"; }\n\n.fa-piggy-bank:before {\n content: \"\\f4d3\"; }\n\n.fa-pills:before {\n content: \"\\f484\"; }\n\n.fa-pinterest:before {\n content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n content: \"\\f0d3\"; }\n\n.fa-pizza-slice:before {\n content: \"\\f818\"; }\n\n.fa-place-of-worship:before {\n content: \"\\f67f\"; }\n\n.fa-plane:before {\n content: \"\\f072\"; }\n\n.fa-plane-arrival:before {\n content: \"\\f5af\"; }\n\n.fa-plane-departure:before {\n content: \"\\f5b0\"; }\n\n.fa-plane-slash:before {\n content: \"\\e069\"; }\n\n.fa-play:before {\n content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n content: \"\\f144\"; }\n\n.fa-playstation:before {\n content: \"\\f3df\"; }\n\n.fa-plug:before {\n content: \"\\f1e6\"; }\n\n.fa-plus:before {\n content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n content: \"\\f055\"; }\n\n.fa-plus-square:before {\n content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n content: \"\\f2ce\"; }\n\n.fa-poll:before {\n content: \"\\f681\"; }\n\n.fa-poll-h:before {\n content: \"\\f682\"; }\n\n.fa-poo:before {\n content: \"\\f2fe\"; }\n\n.fa-poo-storm:before {\n content: \"\\f75a\"; }\n\n.fa-poop:before {\n content: \"\\f619\"; }\n\n.fa-portrait:before {\n content: \"\\f3e0\"; }\n\n.fa-pound-sign:before {\n content: \"\\f154\"; }\n\n.fa-power-off:before {\n content: \"\\f011\"; }\n\n.fa-pray:before {\n content: \"\\f683\"; }\n\n.fa-praying-hands:before {\n content: \"\\f684\"; }\n\n.fa-prescription:before {\n content: \"\\f5b1\"; }\n\n.fa-prescription-bottle:before {\n content: \"\\f485\"; }\n\n.fa-prescription-bottle-alt:before {\n content: \"\\f486\"; }\n\n.fa-print:before {\n content: \"\\f02f\"; }\n\n.fa-procedures:before {\n content: \"\\f487\"; }\n\n.fa-product-hunt:before {\n content: \"\\f288\"; }\n\n.fa-project-diagram:before {\n content: \"\\f542\"; }\n\n.fa-pump-medical:before {\n content: \"\\e06a\"; }\n\n.fa-pump-soap:before {\n content: \"\\e06b\"; }\n\n.fa-pushed:before {\n content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n content: \"\\f12e\"; }\n\n.fa-python:before {\n content: \"\\f3e2\"; }\n\n.fa-qq:before {\n content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n content: \"\\f029\"; }\n\n.fa-question:before {\n content: \"\\f128\"; }\n\n.fa-question-circle:before {\n content: \"\\f059\"; }\n\n.fa-quidditch:before {\n content: \"\\f458\"; }\n\n.fa-quinscape:before {\n content: \"\\f459\"; }\n\n.fa-quora:before {\n content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n content: \"\\f10e\"; }\n\n.fa-quran:before {\n content: \"\\f687\"; }\n\n.fa-r-project:before {\n content: \"\\f4f7\"; }\n\n.fa-radiation:before {\n content: \"\\f7b9\"; }\n\n.fa-radiation-alt:before {\n content: \"\\f7ba\"; }\n\n.fa-rainbow:before {\n content: \"\\f75b\"; }\n\n.fa-random:before {\n content: \"\\f074\"; }\n\n.fa-raspberry-pi:before {\n content: \"\\f7bb\"; }\n\n.fa-ravelry:before {\n content: \"\\f2d9\"; }\n\n.fa-react:before {\n content: \"\\f41b\"; }\n\n.fa-reacteurope:before {\n content: \"\\f75d\"; }\n\n.fa-readme:before {\n content: \"\\f4d5\"; }\n\n.fa-rebel:before {\n content: \"\\f1d0\"; }\n\n.fa-receipt:before {\n content: \"\\f543\"; }\n\n.fa-record-vinyl:before {\n content: \"\\f8d9\"; }\n\n.fa-recycle:before {\n content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n content: \"\\f1a2\"; }\n\n.fa-redhat:before {\n content: \"\\f7bc\"; }\n\n.fa-redo:before {\n content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n content: \"\\f2f9\"; }\n\n.fa-registered:before {\n content: \"\\f25d\"; }\n\n.fa-remove-format:before {\n content: \"\\f87d\"; }\n\n.fa-renren:before {\n content: \"\\f18b\"; }\n\n.fa-reply:before {\n content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n content: \"\\f122\"; }\n\n.fa-replyd:before {\n content: \"\\f3e6\"; }\n\n.fa-republican:before {\n content: \"\\f75e\"; }\n\n.fa-researchgate:before {\n content: \"\\f4f8\"; }\n\n.fa-resolving:before {\n content: \"\\f3e7\"; }\n\n.fa-restroom:before {\n content: \"\\f7bd\"; }\n\n.fa-retweet:before {\n content: \"\\f079\"; }\n\n.fa-rev:before {\n content: \"\\f5b2\"; }\n\n.fa-ribbon:before {\n content: \"\\f4d6\"; }\n\n.fa-ring:before {\n content: \"\\f70b\"; }\n\n.fa-road:before {\n content: \"\\f018\"; }\n\n.fa-robot:before {\n content: \"\\f544\"; }\n\n.fa-rocket:before {\n content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n content: \"\\f3e9\"; }\n\n.fa-route:before {\n content: \"\\f4d7\"; }\n\n.fa-rss:before {\n content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n content: \"\\f158\"; }\n\n.fa-ruler:before {\n content: \"\\f545\"; }\n\n.fa-ruler-combined:before {\n content: \"\\f546\"; }\n\n.fa-ruler-horizontal:before {\n content: \"\\f547\"; }\n\n.fa-ruler-vertical:before {\n content: \"\\f548\"; }\n\n.fa-running:before {\n content: \"\\f70c\"; }\n\n.fa-rupee-sign:before {\n content: \"\\f156\"; }\n\n.fa-rust:before {\n content: \"\\e07a\"; }\n\n.fa-sad-cry:before {\n content: \"\\f5b3\"; }\n\n.fa-sad-tear:before {\n content: \"\\f5b4\"; }\n\n.fa-safari:before {\n content: \"\\f267\"; }\n\n.fa-salesforce:before {\n content: \"\\f83b\"; }\n\n.fa-sass:before {\n content: \"\\f41e\"; }\n\n.fa-satellite:before {\n content: \"\\f7bf\"; }\n\n.fa-satellite-dish:before {\n content: \"\\f7c0\"; }\n\n.fa-save:before {\n content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n content: \"\\f3ea\"; }\n\n.fa-school:before {\n content: \"\\f549\"; }\n\n.fa-screwdriver:before {\n content: \"\\f54a\"; }\n\n.fa-scribd:before {\n content: \"\\f28a\"; }\n\n.fa-scroll:before {\n content: \"\\f70e\"; }\n\n.fa-sd-card:before {\n content: \"\\f7c2\"; }\n\n.fa-search:before {\n content: \"\\f002\"; }\n\n.fa-search-dollar:before {\n content: \"\\f688\"; }\n\n.fa-search-location:before {\n content: \"\\f689\"; }\n\n.fa-search-minus:before {\n content: \"\\f010\"; }\n\n.fa-search-plus:before {\n content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n content: \"\\f3eb\"; }\n\n.fa-seedling:before {\n content: \"\\f4d8\"; }\n\n.fa-sellcast:before {\n content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n content: \"\\f213\"; }\n\n.fa-server:before {\n content: \"\\f233\"; }\n\n.fa-servicestack:before {\n content: \"\\f3ec\"; }\n\n.fa-shapes:before {\n content: \"\\f61f\"; }\n\n.fa-share:before {\n content: \"\\f064\"; }\n\n.fa-share-alt:before {\n content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n content: \"\\f3ed\"; }\n\n.fa-shield-virus:before {\n content: \"\\e06c\"; }\n\n.fa-ship:before {\n content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n content: \"\\f214\"; }\n\n.fa-shoe-prints:before {\n content: \"\\f54b\"; }\n\n.fa-shopify:before {\n content: \"\\e057\"; }\n\n.fa-shopping-bag:before {\n content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n content: \"\\f07a\"; }\n\n.fa-shopware:before {\n content: \"\\f5b5\"; }\n\n.fa-shower:before {\n content: \"\\f2cc\"; }\n\n.fa-shuttle-van:before {\n content: \"\\f5b6\"; }\n\n.fa-sign:before {\n content: \"\\f4d9\"; }\n\n.fa-sign-in-alt:before {\n content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n content: \"\\f2f5\"; }\n\n.fa-signal:before {\n content: \"\\f012\"; }\n\n.fa-signature:before {\n content: \"\\f5b7\"; }\n\n.fa-sim-card:before {\n content: \"\\f7c4\"; }\n\n.fa-simplybuilt:before {\n content: \"\\f215\"; }\n\n.fa-sink:before {\n content: \"\\e06d\"; }\n\n.fa-sistrix:before {\n content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n content: \"\\f0e8\"; }\n\n.fa-sith:before {\n content: \"\\f512\"; }\n\n.fa-skating:before {\n content: \"\\f7c5\"; }\n\n.fa-sketch:before {\n content: \"\\f7c6\"; }\n\n.fa-skiing:before {\n content: \"\\f7c9\"; }\n\n.fa-skiing-nordic:before {\n content: \"\\f7ca\"; }\n\n.fa-skull:before {\n content: \"\\f54c\"; }\n\n.fa-skull-crossbones:before {\n content: \"\\f714\"; }\n\n.fa-skyatlas:before {\n content: \"\\f216\"; }\n\n.fa-skype:before {\n content: \"\\f17e\"; }\n\n.fa-slack:before {\n content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n content: \"\\f3ef\"; }\n\n.fa-slash:before {\n content: \"\\f715\"; }\n\n.fa-sleigh:before {\n content: \"\\f7cc\"; }\n\n.fa-sliders-h:before {\n content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n content: \"\\f1e7\"; }\n\n.fa-smile:before {\n content: \"\\f118\"; }\n\n.fa-smile-beam:before {\n content: \"\\f5b8\"; }\n\n.fa-smile-wink:before {\n content: \"\\f4da\"; }\n\n.fa-smog:before {\n content: \"\\f75f\"; }\n\n.fa-smoking:before {\n content: \"\\f48d\"; }\n\n.fa-smoking-ban:before {\n content: \"\\f54d\"; }\n\n.fa-sms:before {\n content: \"\\f7cd\"; }\n\n.fa-snapchat:before {\n content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n content: \"\\f2ad\"; }\n\n.fa-snowboarding:before {\n content: \"\\f7ce\"; }\n\n.fa-snowflake:before {\n content: \"\\f2dc\"; }\n\n.fa-snowman:before {\n content: \"\\f7d0\"; }\n\n.fa-snowplow:before {\n content: \"\\f7d2\"; }\n\n.fa-soap:before {\n content: \"\\e06e\"; }\n\n.fa-socks:before {\n content: \"\\f696\"; }\n\n.fa-solar-panel:before {\n content: \"\\f5ba\"; }\n\n.fa-sort:before {\n content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n content: \"\\f15d\"; }\n\n.fa-sort-alpha-down-alt:before {\n content: \"\\f881\"; }\n\n.fa-sort-alpha-up:before {\n content: \"\\f15e\"; }\n\n.fa-sort-alpha-up-alt:before {\n content: \"\\f882\"; }\n\n.fa-sort-amount-down:before {\n content: \"\\f160\"; }\n\n.fa-sort-amount-down-alt:before {\n content: \"\\f884\"; }\n\n.fa-sort-amount-up:before {\n content: \"\\f161\"; }\n\n.fa-sort-amount-up-alt:before {\n content: \"\\f885\"; }\n\n.fa-sort-down:before {\n content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n content: \"\\f162\"; }\n\n.fa-sort-numeric-down-alt:before {\n content: \"\\f886\"; }\n\n.fa-sort-numeric-up:before {\n content: \"\\f163\"; }\n\n.fa-sort-numeric-up-alt:before {\n content: \"\\f887\"; }\n\n.fa-sort-up:before {\n content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n content: \"\\f1be\"; }\n\n.fa-sourcetree:before {\n content: \"\\f7d3\"; }\n\n.fa-spa:before {\n content: \"\\f5bb\"; }\n\n.fa-space-shuttle:before {\n content: \"\\f197\"; }\n\n.fa-speakap:before {\n content: \"\\f3f3\"; }\n\n.fa-speaker-deck:before {\n content: \"\\f83c\"; }\n\n.fa-spell-check:before {\n content: \"\\f891\"; }\n\n.fa-spider:before {\n content: \"\\f717\"; }\n\n.fa-spinner:before {\n content: \"\\f110\"; }\n\n.fa-splotch:before {\n content: \"\\f5bc\"; }\n\n.fa-spotify:before {\n content: \"\\f1bc\"; }\n\n.fa-spray-can:before {\n content: \"\\f5bd\"; }\n\n.fa-square:before {\n content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n content: \"\\f45c\"; }\n\n.fa-square-root-alt:before {\n content: \"\\f698\"; }\n\n.fa-squarespace:before {\n content: \"\\f5be\"; }\n\n.fa-stack-exchange:before {\n content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n content: \"\\f16c\"; }\n\n.fa-stackpath:before {\n content: \"\\f842\"; }\n\n.fa-stamp:before {\n content: \"\\f5bf\"; }\n\n.fa-star:before {\n content: \"\\f005\"; }\n\n.fa-star-and-crescent:before {\n content: \"\\f699\"; }\n\n.fa-star-half:before {\n content: \"\\f089\"; }\n\n.fa-star-half-alt:before {\n content: \"\\f5c0\"; }\n\n.fa-star-of-david:before {\n content: \"\\f69a\"; }\n\n.fa-star-of-life:before {\n content: \"\\f621\"; }\n\n.fa-staylinked:before {\n content: \"\\f3f5\"; }\n\n.fa-steam:before {\n content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n content: \"\\f048\"; }\n\n.fa-step-forward:before {\n content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n content: \"\\f249\"; }\n\n.fa-stop:before {\n content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n content: \"\\f2f2\"; }\n\n.fa-stopwatch-20:before {\n content: \"\\e06f\"; }\n\n.fa-store:before {\n content: \"\\f54e\"; }\n\n.fa-store-alt:before {\n content: \"\\f54f\"; }\n\n.fa-store-alt-slash:before {\n content: \"\\e070\"; }\n\n.fa-store-slash:before {\n content: \"\\e071\"; }\n\n.fa-strava:before {\n content: \"\\f428\"; }\n\n.fa-stream:before {\n content: \"\\f550\"; }\n\n.fa-street-view:before {\n content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n content: \"\\f42a\"; }\n\n.fa-stroopwafel:before {\n content: \"\\f551\"; }\n\n.fa-studiovinari:before {\n content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n content: \"\\f12c\"; }\n\n.fa-subway:before {\n content: \"\\f239\"; }\n\n.fa-suitcase:before {\n content: \"\\f0f2\"; }\n\n.fa-suitcase-rolling:before {\n content: \"\\f5c1\"; }\n\n.fa-sun:before {\n content: \"\\f185\"; }\n\n.fa-superpowers:before {\n content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n content: \"\\f12b\"; }\n\n.fa-supple:before {\n content: \"\\f3f9\"; }\n\n.fa-surprise:before {\n content: \"\\f5c2\"; }\n\n.fa-suse:before {\n content: \"\\f7d6\"; }\n\n.fa-swatchbook:before {\n content: \"\\f5c3\"; }\n\n.fa-swift:before {\n content: \"\\f8e1\"; }\n\n.fa-swimmer:before {\n content: \"\\f5c4\"; }\n\n.fa-swimming-pool:before {\n content: \"\\f5c5\"; }\n\n.fa-symfony:before {\n content: \"\\f83d\"; }\n\n.fa-synagogue:before {\n content: \"\\f69b\"; }\n\n.fa-sync:before {\n content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n content: \"\\f48e\"; }\n\n.fa-table:before {\n content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n content: \"\\f45d\"; }\n\n.fa-tablet:before {\n content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n content: \"\\f3fa\"; }\n\n.fa-tablets:before {\n content: \"\\f490\"; }\n\n.fa-tachometer-alt:before {\n content: \"\\f3fd\"; }\n\n.fa-tag:before {\n content: \"\\f02b\"; }\n\n.fa-tags:before {\n content: \"\\f02c\"; }\n\n.fa-tape:before {\n content: \"\\f4db\"; }\n\n.fa-tasks:before {\n content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n content: \"\\f1ba\"; }\n\n.fa-teamspeak:before {\n content: \"\\f4f9\"; }\n\n.fa-teeth:before {\n content: \"\\f62e\"; }\n\n.fa-teeth-open:before {\n content: \"\\f62f\"; }\n\n.fa-telegram:before {\n content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n content: \"\\f3fe\"; }\n\n.fa-temperature-high:before {\n content: \"\\f769\"; }\n\n.fa-temperature-low:before {\n content: \"\\f76b\"; }\n\n.fa-tencent-weibo:before {\n content: \"\\f1d5\"; }\n\n.fa-tenge:before {\n content: \"\\f7d7\"; }\n\n.fa-terminal:before {\n content: \"\\f120\"; }\n\n.fa-text-height:before {\n content: \"\\f034\"; }\n\n.fa-text-width:before {\n content: \"\\f035\"; }\n\n.fa-th:before {\n content: \"\\f00a\"; }\n\n.fa-th-large:before {\n content: \"\\f009\"; }\n\n.fa-th-list:before {\n content: \"\\f00b\"; }\n\n.fa-the-red-yeti:before {\n content: \"\\f69d\"; }\n\n.fa-theater-masks:before {\n content: \"\\f630\"; }\n\n.fa-themeco:before {\n content: \"\\f5c6\"; }\n\n.fa-themeisle:before {\n content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n content: \"\\f2c8\"; }\n\n.fa-think-peaks:before {\n content: \"\\f731\"; }\n\n.fa-thumbs-down:before {\n content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n content: \"\\f3ff\"; }\n\n.fa-tiktok:before {\n content: \"\\e07b\"; }\n\n.fa-times:before {\n content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n content: \"\\f057\"; }\n\n.fa-tint:before {\n content: \"\\f043\"; }\n\n.fa-tint-slash:before {\n content: \"\\f5c7\"; }\n\n.fa-tired:before {\n content: \"\\f5c8\"; }\n\n.fa-toggle-off:before {\n content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n content: \"\\f205\"; }\n\n.fa-toilet:before {\n content: \"\\f7d8\"; }\n\n.fa-toilet-paper:before {\n content: \"\\f71e\"; }\n\n.fa-toilet-paper-slash:before {\n content: \"\\e072\"; }\n\n.fa-toolbox:before {\n content: \"\\f552\"; }\n\n.fa-tools:before {\n content: \"\\f7d9\"; }\n\n.fa-tooth:before {\n content: \"\\f5c9\"; }\n\n.fa-torah:before {\n content: \"\\f6a0\"; }\n\n.fa-torii-gate:before {\n content: \"\\f6a1\"; }\n\n.fa-tractor:before {\n content: \"\\f722\"; }\n\n.fa-trade-federation:before {\n content: \"\\f513\"; }\n\n.fa-trademark:before {\n content: \"\\f25c\"; }\n\n.fa-traffic-light:before {\n content: \"\\f637\"; }\n\n.fa-trailer:before {\n content: \"\\e041\"; }\n\n.fa-train:before {\n content: \"\\f238\"; }\n\n.fa-tram:before {\n content: \"\\f7da\"; }\n\n.fa-transgender:before {\n content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n content: \"\\f225\"; }\n\n.fa-trash:before {\n content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n content: \"\\f2ed\"; }\n\n.fa-trash-restore:before {\n content: \"\\f829\"; }\n\n.fa-trash-restore-alt:before {\n content: \"\\f82a\"; }\n\n.fa-tree:before {\n content: \"\\f1bb\"; }\n\n.fa-trello:before {\n content: \"\\f181\"; }\n\n.fa-trophy:before {\n content: \"\\f091\"; }\n\n.fa-truck:before {\n content: \"\\f0d1\"; }\n\n.fa-truck-loading:before {\n content: \"\\f4de\"; }\n\n.fa-truck-monster:before {\n content: \"\\f63b\"; }\n\n.fa-truck-moving:before {\n content: \"\\f4df\"; }\n\n.fa-truck-pickup:before {\n content: \"\\f63c\"; }\n\n.fa-tshirt:before {\n content: \"\\f553\"; }\n\n.fa-tty:before {\n content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n content: \"\\f174\"; }\n\n.fa-tv:before {\n content: \"\\f26c\"; }\n\n.fa-twitch:before {\n content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n content: \"\\f081\"; }\n\n.fa-typo3:before {\n content: \"\\f42b\"; }\n\n.fa-uber:before {\n content: \"\\f402\"; }\n\n.fa-ubuntu:before {\n content: \"\\f7df\"; }\n\n.fa-uikit:before {\n content: \"\\f403\"; }\n\n.fa-umbraco:before {\n content: \"\\f8e8\"; }\n\n.fa-umbrella:before {\n content: \"\\f0e9\"; }\n\n.fa-umbrella-beach:before {\n content: \"\\f5ca\"; }\n\n.fa-uncharted:before {\n content: \"\\e084\"; }\n\n.fa-underline:before {\n content: \"\\f0cd\"; }\n\n.fa-undo:before {\n content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n content: \"\\f404\"; }\n\n.fa-unity:before {\n content: \"\\e049\"; }\n\n.fa-universal-access:before {\n content: \"\\f29a\"; }\n\n.fa-university:before {\n content: \"\\f19c\"; }\n\n.fa-unlink:before {\n content: \"\\f127\"; }\n\n.fa-unlock:before {\n content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n content: \"\\f13e\"; }\n\n.fa-unsplash:before {\n content: \"\\e07c\"; }\n\n.fa-untappd:before {\n content: \"\\f405\"; }\n\n.fa-upload:before {\n content: \"\\f093\"; }\n\n.fa-ups:before {\n content: \"\\f7e0\"; }\n\n.fa-usb:before {\n content: \"\\f287\"; }\n\n.fa-user:before {\n content: \"\\f007\"; }\n\n.fa-user-alt:before {\n content: \"\\f406\"; }\n\n.fa-user-alt-slash:before {\n content: \"\\f4fa\"; }\n\n.fa-user-astronaut:before {\n content: \"\\f4fb\"; }\n\n.fa-user-check:before {\n content: \"\\f4fc\"; }\n\n.fa-user-circle:before {\n content: \"\\f2bd\"; }\n\n.fa-user-clock:before {\n content: \"\\f4fd\"; }\n\n.fa-user-cog:before {\n content: \"\\f4fe\"; }\n\n.fa-user-edit:before {\n content: \"\\f4ff\"; }\n\n.fa-user-friends:before {\n content: \"\\f500\"; }\n\n.fa-user-graduate:before {\n content: \"\\f501\"; }\n\n.fa-user-injured:before {\n content: \"\\f728\"; }\n\n.fa-user-lock:before {\n content: \"\\f502\"; }\n\n.fa-user-md:before {\n content: \"\\f0f0\"; }\n\n.fa-user-minus:before {\n content: \"\\f503\"; }\n\n.fa-user-ninja:before {\n content: \"\\f504\"; }\n\n.fa-user-nurse:before {\n content: \"\\f82f\"; }\n\n.fa-user-plus:before {\n content: \"\\f234\"; }\n\n.fa-user-secret:before {\n content: \"\\f21b\"; }\n\n.fa-user-shield:before {\n content: \"\\f505\"; }\n\n.fa-user-slash:before {\n content: \"\\f506\"; }\n\n.fa-user-tag:before {\n content: \"\\f507\"; }\n\n.fa-user-tie:before {\n content: \"\\f508\"; }\n\n.fa-user-times:before {\n content: \"\\f235\"; }\n\n.fa-users:before {\n content: \"\\f0c0\"; }\n\n.fa-users-cog:before {\n content: \"\\f509\"; }\n\n.fa-users-slash:before {\n content: \"\\e073\"; }\n\n.fa-usps:before {\n content: \"\\f7e1\"; }\n\n.fa-ussunnah:before {\n content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n content: \"\\f408\"; }\n\n.fa-vector-square:before {\n content: \"\\f5cb\"; }\n\n.fa-venus:before {\n content: \"\\f221\"; }\n\n.fa-venus-double:before {\n content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n content: \"\\f228\"; }\n\n.fa-vest:before {\n content: \"\\e085\"; }\n\n.fa-vest-patches:before {\n content: \"\\e086\"; }\n\n.fa-viacoin:before {\n content: \"\\f237\"; }\n\n.fa-viadeo:before {\n content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n content: \"\\f2aa\"; }\n\n.fa-vial:before {\n content: \"\\f492\"; }\n\n.fa-vials:before {\n content: \"\\f493\"; }\n\n.fa-viber:before {\n content: \"\\f409\"; }\n\n.fa-video:before {\n content: \"\\f03d\"; }\n\n.fa-video-slash:before {\n content: \"\\f4e2\"; }\n\n.fa-vihara:before {\n content: \"\\f6a7\"; }\n\n.fa-vimeo:before {\n content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n content: \"\\f27d\"; }\n\n.fa-vine:before {\n content: \"\\f1ca\"; }\n\n.fa-virus:before {\n content: \"\\e074\"; }\n\n.fa-virus-slash:before {\n content: \"\\e075\"; }\n\n.fa-viruses:before {\n content: \"\\e076\"; }\n\n.fa-vk:before {\n content: \"\\f189\"; }\n\n.fa-vnv:before {\n content: \"\\f40b\"; }\n\n.fa-voicemail:before {\n content: \"\\f897\"; }\n\n.fa-volleyball-ball:before {\n content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n content: \"\\f027\"; }\n\n.fa-volume-mute:before {\n content: \"\\f6a9\"; }\n\n.fa-volume-off:before {\n content: \"\\f026\"; }\n\n.fa-volume-up:before {\n content: \"\\f028\"; }\n\n.fa-vote-yea:before {\n content: \"\\f772\"; }\n\n.fa-vr-cardboard:before {\n content: \"\\f729\"; }\n\n.fa-vuejs:before {\n content: \"\\f41f\"; }\n\n.fa-walking:before {\n content: \"\\f554\"; }\n\n.fa-wallet:before {\n content: \"\\f555\"; }\n\n.fa-warehouse:before {\n content: \"\\f494\"; }\n\n.fa-watchman-monitoring:before {\n content: \"\\e087\"; }\n\n.fa-water:before {\n content: \"\\f773\"; }\n\n.fa-wave-square:before {\n content: \"\\f83e\"; }\n\n.fa-waze:before {\n content: \"\\f83f\"; }\n\n.fa-weebly:before {\n content: \"\\f5cc\"; }\n\n.fa-weibo:before {\n content: \"\\f18a\"; }\n\n.fa-weight:before {\n content: \"\\f496\"; }\n\n.fa-weight-hanging:before {\n content: \"\\f5cd\"; }\n\n.fa-weixin:before {\n content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n content: \"\\f193\"; }\n\n.fa-whmcs:before {\n content: \"\\f40d\"; }\n\n.fa-wifi:before {\n content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n content: \"\\f266\"; }\n\n.fa-wind:before {\n content: \"\\f72e\"; }\n\n.fa-window-close:before {\n content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n content: \"\\f2d2\"; }\n\n.fa-windows:before {\n content: \"\\f17a\"; }\n\n.fa-wine-bottle:before {\n content: \"\\f72f\"; }\n\n.fa-wine-glass:before {\n content: \"\\f4e3\"; }\n\n.fa-wine-glass-alt:before {\n content: \"\\f5ce\"; }\n\n.fa-wix:before {\n content: \"\\f5cf\"; }\n\n.fa-wizards-of-the-coast:before {\n content: \"\\f730\"; }\n\n.fa-wodu:before {\n content: \"\\e088\"; }\n\n.fa-wolf-pack-battalion:before {\n content: \"\\f514\"; }\n\n.fa-won-sign:before {\n content: \"\\f159\"; }\n\n.fa-wordpress:before {\n content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n content: \"\\f298\"; }\n\n.fa-wpressr:before {\n content: \"\\f3e4\"; }\n\n.fa-wrench:before {\n content: \"\\f0ad\"; }\n\n.fa-x-ray:before {\n content: \"\\f497\"; }\n\n.fa-xbox:before {\n content: \"\\f412\"; }\n\n.fa-xing:before {\n content: \"\\f168\"; }\n\n.fa-xing-square:before {\n content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n content: \"\\f19e\"; }\n\n.fa-yammer:before {\n content: \"\\f840\"; }\n\n.fa-yandex:before {\n content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n content: \"\\f414\"; }\n\n.fa-yarn:before {\n content: \"\\f7e3\"; }\n\n.fa-yelp:before {\n content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n content: \"\\f157\"; }\n\n.fa-yin-yang:before {\n content: \"\\f6ad\"; }\n\n.fa-yoast:before {\n content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n content: \"\\f431\"; }\n\n.fa-zhihu:before {\n content: \"\\f63f\"; }\n\n.sr-only {\n border: 0;\n clip: rect(0, 0, 0, 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n clip: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n position: static;\n width: auto; }\n@font-face {\n font-family: 'Font Awesome 5 Brands';\n font-style: normal;\n font-weight: 400;\n font-display: block;\n src: url(\"../webfonts/fa-brands-400.eot\");\n src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n font-family: 'Font Awesome 5 Brands';\n font-weight: 400; }\n@font-face {\n font-family: 'Font Awesome 5 Free';\n font-style: normal;\n font-weight: 400;\n font-display: block;\n src: url(\"../webfonts/fa-regular-400.eot\");\n src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n font-family: 'Font Awesome 5 Free';\n font-weight: 400; }\n@font-face {\n font-family: 'Font Awesome 5 Free';\n font-style: normal;\n font-weight: 900;\n font-display: block;\n src: url(\"../webfonts/fa-solid-900.eot\");\n src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n font-family: 'Font Awesome 5 Free';\n font-weight: 900; }\n","/*!\n * Bootstrap v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"utilities\";\n@import \"print\";\n","/*!\n * Bootstrap v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-wrap: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid, .container-sm, .container-md, .container-lg, .container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n color: #212529;\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #343a40;\n border-color: #454d55;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n font-size: 1rem;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n height: auto;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input[disabled] ~ .form-check-label,\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #28a745;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n border-color: #28a745;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n border-color: #34ce57;\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n border-color: #dc3545;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n border-color: #e4606d;\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n align-items: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n color: #212529;\n text-align: center;\n vertical-align: middle;\n cursor: pointer;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover {\n color: #212529;\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n text-decoration: none;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 768px) {\n .dropdown-menu-md-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 992px) {\n .dropdown-menu-lg-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 1200px) {\n .dropdown-menu-xl-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-right {\n right: 0;\n left: auto;\n }\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n flex: 1 1 0%;\n min-width: 0;\n margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: flex;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n left: 0;\n z-index: -1;\n width: 1rem;\n height: 1.25rem;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n border-color: #b3d7ff;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n vertical-align: top;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n background-color: #fff;\n border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background: no-repeat 50% / 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n left: -2.25rem;\n width: 1.75rem;\n pointer-events: all;\n border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n top: calc(0.25rem + 2px);\n left: calc(-2.25rem + 2px);\n width: calc(1rem - 4px);\n height: calc(1rem - 4px);\n background-color: #adb5bd;\n border-radius: 0.5rem;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-switch .custom-control-label::after {\n transition: none;\n }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n background-color: #fff;\n transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: #fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n display: none;\n}\n\n.custom-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.custom-select-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n}\n\n.custom-select-lg {\n height: calc(1.5em + 1rem + 2px);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin: 0;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input[disabled] ~ .custom-file-label,\n.custom-file-input:disabled ~ .custom-file-label {\n background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: calc(1.5em + 0.75rem);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: inherit;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n height: 1.4rem;\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-moz-range-thumb {\n transition: none;\n }\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: 0;\n margin-right: 0.2rem;\n margin-left: 0.2rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-ms-thumb {\n transition: none;\n }\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-control-label::before,\n .custom-file-label,\n .custom-select {\n transition: none;\n }\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar .container,\n.navbar .container-fluid, .navbar .container-sm, .navbar .container-md, .navbar .container-lg, .navbar .container-xl {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n flex-flow: row nowrap;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n flex: 1 1 auto;\n min-height: 1px;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n border-top: 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n flex-shrink: 0;\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n display: flex;\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n flex: 1 0 0%;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n column-count: 3;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion > .card {\n overflow: hidden;\n}\n\n.accordion > .card:not(:last-of-type) {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.accordion > .card > .card-header {\n border-radius: 0;\n margin-bottom: -1px;\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n display: inline-block;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 3;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 3;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .badge {\n transition: none;\n }\n}\n\na.badge:hover, a.badge:focus {\n text-decoration: none;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n color: #fff;\n background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n color: #fff;\n background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n color: #fff;\n background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n color: #fff;\n background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n color: #212529;\n background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n color: #fff;\n background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n color: #212529;\n background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n color: #fff;\n background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n animation: progress-bar-stripes 1s linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n margin-top: -1px;\n border-top-width: 1px;\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n\n.list-group-horizontal .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n\n.list-group-horizontal .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal .list-group-item.active {\n margin-top: 0;\n}\n\n.list-group-horizontal .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n}\n\n.list-group-horizontal .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-sm .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-md .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-lg .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-xl .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n.list-group-flush .list-group-item {\n border-right-width: 0;\n border-left-width: 0;\n border-radius: 0;\n}\n\n.list-group-flush .list-group-item:first-child {\n border-top-width: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover {\n color: #000;\n text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n appearance: none;\n}\n\na.close.disabled {\n pointer-events: none;\n}\n\n.toast {\n max-width: 350px;\n overflow: hidden;\n font-size: 0.875rem;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n backdrop-filter: blur(10px);\n opacity: 0;\n border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n opacity: 1;\n}\n\n.toast.show {\n display: block;\n opacity: 1;\n}\n\n.toast.hide {\n display: none;\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: 0.25rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.toast-body {\n padding: 0.75rem;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n display: flex;\n max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 1rem);\n overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n display: block;\n height: calc(100vh - 1rem);\n content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n flex-direction: column;\n justify-content: center;\n height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n content: none;\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .close {\n padding: 1rem 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: 0.75rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: calc(0.3rem - 1px);\n border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n margin: 0.25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-scrollable {\n max-height: calc(100% - 3.5rem);\n }\n .modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 3.5rem);\n }\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n .modal-dialog-centered::before {\n height: calc(100vh - 3.5rem);\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n max-width: 800px;\n }\n}\n\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n left: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n right: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-right {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: no-repeat 50% / 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: .5;\n transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators li {\n transition: none;\n }\n}\n\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg);\n }\n}\n\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded-sm {\n border-radius: 0.2rem !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports (position: sticky) {\n .sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n pointer-events: auto;\n content: \"\";\n background-color: rgba(0, 0, 0, 0);\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n font-weight: lighter !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n font-weight: bolder !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0056b3 !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #494f54 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #19692c !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #0f6674 !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #ba8b00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #a71d2a !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #cbd3da !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #121416 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-break {\n word-break: break-word !important;\n overflow-wrap: break-word !important;\n}\n\n.text-reset {\n color: inherit !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n .table-dark {\n color: inherit;\n }\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */","// Do not forget to update getting-started/theming.md!\n:root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-blacklist\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\",\"%3c\"),\n (\">\",\"%3e\"),\n (\"#\",\"%23\"),\n) !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-prefers-reduced-motion-media-query: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-pointer-cursor-for-buttons: true !default;\n$enable-print-styles: true !default;\n$enable-responsive-font-sizes: false !default;\n$enable-validation-icons: true !default;\n$enable-deprecation-messages: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n// Darken percentage for links with `.text-*` class (e.g. `.text-success`)\n$emphasized-link-hover-darken-percentage: 15% !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n$grid-row-columns: 6 !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$rounded-pill: 50rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n$embed-responsive-aspect-ratios: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$embed-responsive-aspect-ratios: join(\n (\n (21 9),\n (16 9),\n (4 3),\n (1 1),\n ),\n $embed-responsive-aspect-ratios\n);\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: $font-size-base * 1.25 !default;\n$font-size-sm: $font-size-base * .875 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: $spacer / 2 !default;\n$headings-font-family: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-small-font-size: $small-font-size !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-color: $body-color !default;\n$table-bg: null !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-color: $table-color !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-color: $white !default;\n$table-dark-bg: $gray-800 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-color: $table-dark-color !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-level: -9 !default;\n$table-border-level: -6 !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y / 2) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height-sm * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height-lg * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-grid-gutter-width: 10px !default;\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: .5rem !default;\n$custom-control-spacer-x: 1rem !default;\n$custom-control-cursor: null !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $input-bg !default;\n\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: $input-box-shadow !default;\n$custom-control-indicator-border-color: $gray-500 !default;\n$custom-control-indicator-border-width: $input-border-width !default;\n\n$custom-control-label-color: null !default;\n\n$custom-control-indicator-disabled-bg: $input-disabled-bg !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;\n\n$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-control-indicator-focus-border-color: $input-focus-border-color !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: url(\"data:image/svg+xml,\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: url(\"data:image/svg+xml,\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: url(\"data:image/svg+xml,\") !default;\n\n$custom-switch-width: $custom-control-indicator-size * 1.75 !default;\n$custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;\n$custom-switch-indicator-size: subtract($custom-control-indicator-size, $custom-control-indicator-border-width * 4) !default;\n\n$custom-select-padding-y: $input-padding-y !default;\n$custom-select-padding-x: $input-padding-x !default;\n$custom-select-font-family: $input-font-family !default;\n$custom-select-font-size: $input-font-size !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-font-weight: $input-font-weight !default;\n$custom-select-line-height: $input-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: url(\"data:image/svg+xml,\") !default;\n$custom-select-background: escape-svg($custom-select-indicator) no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)\n\n$custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$custom-select-border-width: $input-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;\n\n$custom-select-padding-y-sm: $input-padding-y-sm !default;\n$custom-select-padding-x-sm: $input-padding-x-sm !default;\n$custom-select-font-size-sm: $input-font-size-sm !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-padding-y-lg: $input-padding-y-lg !default;\n$custom-select-padding-x-lg: $input-padding-x-lg !default;\n$custom-select-font-size-lg: $input-font-size-lg !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-range-thumb-disabled-bg: $gray-500 !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-padding-y !default;\n$custom-file-padding-x: $input-padding-x !default;\n$custom-file-line-height: $input-line-height !default;\n$custom-file-font-family: $input-font-family !default;\n$custom-file-font-weight: $input-font-weight !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,\") !default;\n\n$form-validation-states: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$form-validation-states: map-merge(\n (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n ),\n ),\n $form-validation-states\n);\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: $spacer / 2 !default;\n\n\n// Navbar\n\n$navbar-padding-y: $spacer / 2 !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-divider-margin-y: $nav-divider-margin-y !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-color: null !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: $grid-gutter-width / 2 !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n// Form tooltips must come after regular tooltips\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: $line-height-base !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Toasts\n\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .25rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba(0, 0, 0, .1) !default;\n$toast-border-radius: .25rem !default;\n$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba(0, 0, 0, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-transition: $btn-transition !default;\n$badge-focus-width: $input-btn-focus-width !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: 1rem !default;\n$modal-header-padding-x: 1rem !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-xl: 1140px !default;\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n\n// List group\n\n$list-group-color: null !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-font-size: null !default;\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Spinners\n\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-border-width: .25em !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Utilities\n\n$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;\n$overflows: auto, hidden !default;\n$positions: static, relative, absolute, fixed, sticky !default;\n\n\n// Printing\n\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover() {\n &:hover { @content; }\n}\n\n@mixin hover-focus() {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus() {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active() {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n","// stylelint-disable declaration-no-important, selector-list-comma-newline-after\n\n//\n// Headings\n//\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1, .h1 { @include font-size($h1-font-size); }\nh2, .h2 { @include font-size($h2-font-size); }\nh3, .h3 { @include font-size($h3-font-size); }\nh4, .h4 { @include font-size($h4-font-size); }\nh5, .h5 { @include font-size($h5-font-size); }\nh6, .h6 { @include font-size($h6-font-size); }\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n.display-1 {\n @include font-size($display1-size);\n font-weight: $display1-weight;\n line-height: $display-line-height;\n}\n.display-2 {\n @include font-size($display2-size);\n font-weight: $display2-weight;\n line-height: $display-line-height;\n}\n.display-3 {\n @include font-size($display3-size);\n font-weight: $display3-weight;\n line-height: $display-line-height;\n}\n.display-4 {\n @include font-size($display4-size);\n font-weight: $display4-weight;\n line-height: $display-line-height;\n}\n\n\n//\n// Horizontal rules\n//\n\nhr {\n margin-top: $hr-margin-y;\n margin-bottom: $hr-margin-y;\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n}\n\n\n//\n// Emphasis\n//\n\nsmall,\n.small {\n @include font-size($small-font-size);\n font-weight: $font-weight-normal;\n}\n\nmark,\n.mark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size(90%);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $spacer;\n @include font-size($blockquote-font-size);\n}\n\n.blockquote-footer {\n display: block;\n @include font-size($blockquote-small-font-size);\n color: $blockquote-small-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled() {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all ``s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer / 2;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid() {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url($file-1x);\n\n // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n // but doesn't convert dppx=>dpi.\n // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n // Compatibility info: https://caniuse.com/#feat=css-media-resolution\n @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n only screen and (min-resolution: 2dppx) { // Standardized\n background-image: url($file-2x);\n background-size: $width-1x $height-1x;\n }\n @include deprecate(\"`img-retina()`\", \"v4.3.0\", \"v5\");\n}\n","// stylelint-disable property-blacklist\n// Single side border-radius\n\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: $radius;\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-top-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n }\n}\n\n@mixin border-top-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-right-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-left-radius($radius) {\n @if $enable-rounded {\n border-bottom-left-radius: $radius;\n }\n}\n","// Inline code\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n @include box-shadow($kbd-box-shadow);\n\n kbd {\n padding: 0;\n @include font-size(100%);\n font-weight: $nested-kbd-font-weight;\n @include box-shadow(none);\n }\n}\n\n// Blocks of code\npre {\n display: block;\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: $pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n @each $name, $width in $grid-breakpoints {\n @if ($container-max-width > $width or $breakpoint == $name) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n }\n }\n }\n }\n}\n\n\n// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n & > * {\n flex: 0 0 100% / $count;\n max-width: 100% / $count;\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n width: 100%;\n margin-bottom: $spacer;\n color: $table-color;\n background-color: $table-bg; // Reset for nesting within parents with `background-color`.\n\n th,\n td {\n padding: $table-cell-padding;\n vertical-align: top;\n border-top: $table-border-width solid $table-border-color;\n }\n\n thead th {\n vertical-align: bottom;\n border-bottom: (2 * $table-border-width) solid $table-border-color;\n }\n\n tbody + tbody {\n border-top: (2 * $table-border-width) solid $table-border-color;\n }\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n th,\n td {\n padding: $table-cell-padding-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n\n.table-bordered {\n border: $table-border-width solid $table-border-color;\n\n th,\n td {\n border: $table-border-width solid $table-border-color;\n }\n\n thead {\n th,\n td {\n border-bottom-width: 2 * $table-border-width;\n }\n }\n}\n\n.table-borderless {\n th,\n td,\n thead th,\n tbody + tbody {\n border: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-accent-bg;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n tbody tr {\n @include hover() {\n color: $table-hover-color;\n background-color: $table-hover-bg;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n@each $color, $value in $theme-colors {\n @include table-row-variant($color, theme-color-level($color, $table-bg-level), theme-color-level($color, $table-border-level));\n}\n\n@include table-row-variant(active, $table-active-bg);\n\n\n// Dark styles\n//\n// Same table markup, but inverted color scheme: dark background and light text.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.table {\n .thead-dark {\n th {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n border-color: $table-dark-border-color;\n }\n }\n\n .thead-light {\n th {\n color: $table-head-color;\n background-color: $table-head-bg;\n border-color: $table-border-color;\n }\n }\n}\n\n.table-dark {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n\n th,\n td,\n thead th {\n border-color: $table-dark-border-color;\n }\n\n &.table-bordered {\n border: 0;\n }\n\n &.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-dark-accent-bg;\n }\n }\n\n &.table-hover {\n tbody tr {\n @include hover() {\n color: $table-dark-hover-color;\n background-color: $table-dark-hover-bg;\n }\n }\n }\n}\n\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n.table-responsive {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n\n // Prevent double border on horizontal scroll due to use of `display: block;`\n > .table-bordered {\n border: 0;\n }\n }\n }\n }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background, $border: null) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table-#{$state} {\n &,\n > th,\n > td {\n background-color: $background;\n }\n\n @if $border != null {\n th,\n td,\n thead th,\n tbody + tbody {\n border-color: $border;\n }\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover {\n $hover-background: darken($background, 5%);\n\n .table-#{$state} {\n @include hover() {\n background-color: $hover-background;\n\n > td,\n > th {\n background-color: $hover-background;\n }\n }\n }\n }\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Textual form controls\n//\n\n.form-control {\n display: block;\n width: 100%;\n height: $input-height;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n\n // Note: This has no effect on `s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n // Unstyle the caret on ` receives focus\n // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to\n // match the appearance of the native widget.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n}\n\n// Make file inputs better match text inputs by forcing them to new lines.\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n\n//\n// Labels\n//\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `
\n\t\t\t\n\t\t\t: null\n\t);\n});\n\nexport default NamedQueriesModal;","import { Accordion, AccordionDetails, AccordionSummary, Menu, MenuItem } from '@material-ui/core';\nimport { observer } from 'mobx-react-lite';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport NamedQueriesStore, { namedQueriesStore, namedSubQueriesStore } from '../store/NamedQueriesStore';\nimport FilterStore, { filterStore } from '../store/FilterStore';\nimport NamedQueriesModal from './NamedQueriesModal';\nimport React from 'react';\nimport { queryStore } from '../store/QueryStore';\n\ntype Props = {\n\torCondition: boolean,\n\tname: string,\n\tstore: NamedQueriesStore,\n\ticon: string,\n};\nconst Queries = observer(({ orCondition, name, store, icon }: Props): JSX.Element => {\n\n\tfunction handleQuery(e: any, query: FilterStore) {\n\t\te.stopPropagation();\n\t\tqueryStore.setApplyFilter(query.getFilter());\n\t}\n\n\tfunction handleORCondition(e: any, query: FilterStore) {\n\t\te.stopPropagation();\n\t\tlet filter = filterStore.getFilter().trim();\n\t\tif (filter.length > 0) {\n\t\t\tfilter = query.getFilter() + ' OR ' + filter;\n\t\t} else {\n\t\t\tfilter = query.getFilter();\n\t\t}\n\t\tqueryStore.setApplyFilter(filter);\n\t}\n\n\tconst queries = store.getQueries();\n\treturn (\n\t\t<>\n\t\t\t< Accordion hidden={queries.length === 0}>\n\t\t\t\t} style={{ backgroundColor: '#333', color: 'whitesmoke' }}>\n\t\t\t\t\t
{name}
\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tqueries.map(query => (\n\t\t\t\t\t\t\t\t !orCondition ? handleQuery(e, query) : handleORCondition(e, query)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{' ' + query.getName()}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t))\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\n\t\t\n\t);\n});\n\nconst SideBarQueries = observer((): JSX.Element => {\n\tconst [showNamedQueriesModal, setShowNamedQueriesModal] = React.useState(undefined);\n\tconst [anchorEl, setAnchorEl] = React.useState(null);\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t) => {\n\t\t\t\t\t\tsetShowNamedQueriesModal(namedQueriesStore);\n\t\t\t\t\t\t//setAnchorEl(event.currentTarget);\n\t\t\t\t\t}}>\n\t\t\t\t\t Queries\n\t\t\t\t
\n\t\t\t\t { setAnchorEl(null); }}\n\t\t\t\t>\n\t\t\t\t\t {\n\t\t\t\t\t\tsetShowNamedQueriesModal(namedQueriesStore);\n\t\t\t\t\t\tsetAnchorEl(null);\n\t\t\t\t\t}}>\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tEdit Queries\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t {\n\t\t\t\t\t\tsetShowNamedQueriesModal(namedSubQueriesStore);\n\t\t\t\t\t\tsetAnchorEl(null);\n\t\t\t\t\t}}>\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tEdit OR Conditions\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t\t{/* */}\n\t\t\t {\n\t\t\t\t\tsetShowNamedQueriesModal(undefined);\n\t\t\t\t}}\n\t\t\t\tstore={showNamedQueriesModal as NamedQueriesStore}\n\t\t\t/>\n\t\t\n\t);\n});\n\nexport default SideBarQueries;","import { Checkbox, MenuItem, Select } from '@material-ui/core';\nimport { observer } from 'mobx-react-lite';\nimport { messageQueueStore } from '../store/MessageQueueStore';\nimport { isJsonLogTab } from './SideBar';\nimport { filterStore } from '../store/FilterStore';\nimport { jsonLogStore } from '../store/JSONLogStore';\nimport { mainTabStore } from '../store/MainTabStore';\nimport { urlPathStore } from '../store/UrlPathStore';\nimport StarHalf from '@mui/icons-material/StarHalf';\nimport HorizontalSplitIcon from '@material-ui/icons/HorizontalSplit';\nimport VerticalSplitIcon from '@material-ui/icons/VerticalSplit';\n\nconst onLayoutClick = (toVertical: boolean) => {\n\tif (toVertical !== mainTabStore.getLayout(mainTabStore.getSelectedTabName())?.isVertical()) {\n\t\tmainTabStore.getLayout(mainTabStore.getSelectedTabName())?.toggleVertical();\n\t}\n};\n\n\nconst SideBarSettings = observer((): JSX.Element => {\n\tconst isVertical = mainTabStore.getLayout(mainTabStore.getSelectedTabName())?.isVertical();\n\treturn (\n\t\t<>\n\t\t\t{/* */}\n\t\t\t\n\t\t\t\n\n\t\t\t\n\t\t\n\t);\n});\n\nexport default SideBarSettings;","import { Select, MenuItem, ListItemText } from \"@material-ui/core\";\nimport { observer } from \"mobx-react-lite\";\nimport { jsonLogStore, updateJSONRequestLabels } from \"../store/JSONLogStore\";\nimport { mainTabStore } from \"../store/MainTabStore\";\nimport { messageQueueStore } from \"../store/MessageQueueStore\";\nimport { isJsonLogTab } from \"./SideBar\";\n\n\nconst SideBarJsonSettings = observer((): JSX.Element => {\n\tconst handleJsonMethodChange = (e: any) => {\n\t\tjsonLogStore.setParsingMethod(e.target.value as 'auto' | 'simple' | 'advanced' | 'plugin');\n\t\tmainTabStore.setUpdating(true);\n\t\tsetTimeout(() => {\n\t\t\tupdateJSONRequestLabels();\n\t\t\tmainTabStore.setUpdating(false);\n\t\t\tmessageQueueStore.setScrollToSeqNum(messageQueueStore.getHighlightSeqNum());\n\t\t});\n\t};\n\tconst getJSONParsingMethodDisplayName = () => {\n\t\tconst method = jsonLogStore.getParsingMethod();\n\t\tif (method.substring == undefined) {\n\t\t\tconsole.log('substring undefined', method);\n\t\t\treturn 'Method undefined';\n\t\t}\n\t\treturn method.substring(0, 1).toUpperCase() + method.substring(1);\n\t};\n\n\tconst handleJsonMaxFieldLevelChange = (e: any) => {\n\t\tconst level = e.target.value === '1' ? 1 : 2;\n\t\tjsonLogStore.setAutoMaxFieldLevel(level);\n\t\tmainTabStore.setUpdating(true);\n\t\tsetTimeout(() => {\n\t\t\tupdateJSONRequestLabels();\n\t\t\tmainTabStore.setUpdating(false);\n\t\t\tmessageQueueStore.setScrollToSeqNum(messageQueueStore.getHighlightSeqNum());\n\t\t});\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t
\n\t\t\t\n\t\t\n\t);\n});\n\nexport default SideBarJsonSettings;","import { Checkbox, CircularProgress, ListItemText, Menu, MenuItem, Select } from \"@material-ui/core\";\nimport { observer } from \"mobx-react-lite\";\nimport { filterStore } from \"../store/FilterStore\";\nimport { messageQueueStore } from \"../store/MessageQueueStore\";\nimport SideBarSortBy from \"./SideBarSortBy\";\nimport SessionModal from './SessionModal';\nimport { sessionStore } from '../store/SessionStore';\nimport ExportDialog from \"./ExportDialog\";\nimport React from \"react\";\nimport MessageStore from \"../store/MessageStore\";\nimport { mainTabStore } from \"../store/MainTabStore\";\nimport { useFilePicker } from \"use-file-picker\";\nimport ImportJSONFileDialog from \"./ImportJSONFileDialog\";\nimport { urlPathStore } from \"../store/UrlPathStore\";\nimport SideBarNamedQueries from \"./SideBarQueries\";\nimport SideBarSettings from \"./SideBarSettings\";\nimport SideBarJsonSettings from \"./SideBarJsonSettings\";\nimport { stringToDate } from \"./Footer\";\n\nexport const isJsonLogTab = () => {\n\tconst messages = mainTabStore.getSelectedMessages();\n\treturn messages.length > 0 && messages[0].getMessage().protocol === 'log:';\n};\n\nconst SideBar = observer(() => {\n\tconst [openSaveSessionDialog, setOpenSaveSessionDialog] = React.useState(false);\n\tconst [showSessionModal, setShowSessionModal] = React.useState(false);\n\tconst [disableSaveSession, setDisableSession] = React.useState(false);\n\tconst [anchorEl, setAnchorEl] = React.useState(null);\n\tconst [openImportJSONFileDialog, setOpenImportJSONFileDialog] = React.useState(false);\n\tconst [timeChanged, setTimeChanged] = React.useState(false);\n\n\tfunction handleSet() {\n\t\tfilterStore.filterUpdated();\n\t\tsetTimeChanged(false);\n\t}\n\n\tfunction handleClear() {\n\t\tfilterStore.setStartTime('');\n\t\tfilterStore.setEndTime('');\n\t\tfilterStore.filterUpdated();\n\t}\n\n\tconst [openTabFileSelector, { filesContent: tabContent, clear: tabClear }] = useFilePicker({\n\t\tmultiple: false,\n\t\taccept: \".allproxy\"\n\t});\n\n\tif (!!tabContent.length && tabContent[0].content) {\n\t\tmainTabStore.setUpdating(true);\n\t\tmainTabStore.importTabFromFile(tabContent[0].name, tabContent[0].content);\n\t\ttabClear();\n\t\tmainTabStore.setUpdating(false);\n\t}\n\n\tconst areAllDomainsSelected = (): boolean => {\n\t\tconst allDomains = filterStore.getSideBarDomains();\n\t\tfor (const domain of allDomains) if (!filterStore.isSideBarDomainChecked(domain)) return false;\n\t\treturn true;\n\t};\n\n\tconst handleAllDomainChange = () => {\n\t\tconst allDomains = filterStore.getSideBarDomains();\n\t\tif (areAllDomainsSelected()) {\n\t\t\tallDomains.forEach((domain) => filterStore.setSideBarDomainChecked(domain, false));\n\t\t} else {\n\t\t\tallDomains.forEach((domain) => filterStore.setSideBarDomainChecked(domain, true));\n\t\t}\n\t};\n\n\tconst areAllUserAgentsSelected = (): boolean => {\n\t\tconst allUserAgents = filterStore.getSideBarUserAgents();\n\t\tfor (const userAgent of allUserAgents) if (!filterStore.isSideBarUserAgentChecked(userAgent)) return false;\n\t\treturn true;\n\t};\n\n\tconst handleAllUserAgentChange = () => {\n\t\tconst allUserAgents = filterStore.getSideBarUserAgents();\n\t\tif (areAllUserAgentsSelected()) {\n\t\t\tallUserAgents.forEach((userAgent) => filterStore.setSideBarUserAgentChecked(userAgent, false));\n\t\t} else {\n\t\t\tallUserAgents.forEach((userAgent) => filterStore.setSideBarUserAgentChecked(userAgent, true));\n\t\t}\n\t};\n\n\tconst areAllStatusesSelected = (): boolean => {\n\t\tconst statuses = filterStore.getSideBarStatuses();\n\t\tfor (const status of statuses) if (!filterStore.isSideBarStatusChecked(status)) return false;\n\t\treturn true;\n\t};\n\n\tconst handleAllStatusChange = () => {\n\t\tconst statuses = filterStore.getSideBarStatuses();\n\t\tif (areAllStatusesSelected()) {\n\t\t\tstatuses.forEach((status) => filterStore.setSideBarStatusChecked(status, false));\n\t\t} else {\n\t\t\tstatuses.forEach((status) => filterStore.setSideBarStatusChecked(status, true));\n\t\t}\n\t};\n\n\tlet countsByIconClassMap: Map = new Map();\n\tlet countsByStatusMap: Map = new Map();\n\tlet noteMessages: MessageStore[] = [];\n\t// let visitedMessages: MessageStore[] = [];\n\n\tfunction getCounts() {\n\t\tmessageQueueStore.getMessages().forEach((messageStore) => {\n\t\t\tif (messageStore.hasNote()) {\n\t\t\t\tnoteMessages.push(messageStore);\n\t\t\t}\n\t\t\t// if (messageStore.getVisited()) {\n\t\t\t// \tvisitedMessages.push(messageStore);\n\t\t\t// }\n\n\t\t\tconst iconClass = messageStore.getIconClass();\n\t\t\tlet count = countsByIconClassMap.get(iconClass);\n\t\t\tif (count) {\n\t\t\t\tcountsByIconClassMap.set(iconClass, count + 1);\n\t\t\t} else {\n\t\t\t\tcountsByIconClassMap.set(iconClass, 1);\n\t\t\t}\n\n\t\t\tconst status = messageStore.getMessage().status;\n\t\t\tif (!status) return;\n\t\t\tcount = countsByStatusMap.get(status);\n\t\t\tif (count) {\n\t\t\t\tcountsByStatusMap.set(status, count + 1);\n\t\t\t} else {\n\t\t\t\tcountsByStatusMap.set(status, 1);\n\t\t\t}\n\t\t});\n\t}\n\n\tgetCounts();\n\n\tfunction getIconClassCountByIconClass(iconClass: string): number {\n\t\tconst count = countsByIconClassMap.get(iconClass);\n\t\treturn count ? count : 0;\n\t}\n\n\tfunction getStatusCount(status: number): number {\n\t\tconst count = countsByStatusMap.get(status);\n\t\treturn count ? count : 0;\n\t}\n\n\tfunction getDomains(): Map {\n\t\tconst countsByDomainMap: Map = new Map();\n\t\tmessageQueueStore.getMessages().forEach((messageStore) => {\n\t\t\tconst domain = messageStore.getDomain();\n\t\t\tif (!domain) return;\n\t\t\tconst count = countsByDomainMap.get(domain);\n\t\t\tif (count) {\n\t\t\t\tcountsByDomainMap.set(domain, count + 1);\n\t\t\t} else {\n\t\t\t\tcountsByDomainMap.set(domain, 1);\n\t\t\t}\n\t\t});\n\t\treturn countsByDomainMap;\n\t}\n\n\tconst domains = Array.from(getDomains().keys());\n\n\tfunction getUserAgents(): Map {\n\t\tconst countsByUserAgentMap: Map = new Map();\n\t\tmessageQueueStore.getMessages().forEach((messageStore) => {\n\t\t\tconst userAgent = messageStore.getUserAgentDisplayable();\n\t\t\tif (!userAgent) return;\n\t\t\tconst count = countsByUserAgentMap.get(userAgent);\n\t\t\tif (count) {\n\t\t\t\tcountsByUserAgentMap.set(userAgent, count + 1);\n\t\t\t} else {\n\t\t\t\tcountsByUserAgentMap.set(userAgent, 1);\n\t\t\t}\n\t\t});\n\t\treturn countsByUserAgentMap;\n\t}\n\n\tconst userAgents = Array.from(getUserAgents().keys());\n\n\tconst buttonWidth = '100%';\n\n\treturn (\n\t\t<>\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t{disableSaveSession &&\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t}\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t { setAnchorEl(null); }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
{\n\t\t\t\t\t\t\t\t\t\tsetAnchorEl(null);\n\t\t\t\t\t\t\t\t\t\tsessionStore.importSession();\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t Import Session from zip file\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t { filterStore.setStartTime(e.target.value); setTimeChanged(e.target.value.length > 0); }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t { filterStore.setEndTime(e.target.value); setTimeChanged(e.target.value.length > 0); }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\n\t\t\t\t\t\n\n\t\t\t\t\t{noteMessages.length > 0 && (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t)}\n\n\t\t\t\t\t{false && filterStore.getSideBarProtocolIconClasses().length > 0 && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfilterStore.getSideBarProtocolIconClasses().sort().map((iconClass) => {\n\t\t\t\t\t\t\t\t\treturn getIconClassCountByIconClass(iconClass) > 0 ?\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t filterStore.toggleSideBarProtocolChecked(iconClass)} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{getIconClassCountByIconClass(iconClass)}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t\tnull;\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\n\t\t\t\t\t{false && !isJsonLogTab() && filterStore.getSideBarDomains().length > 0 &&\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
}\n\t\t\t\t\t{false && !isJsonLogTab() && filterStore.getSideBarUserAgents().length > 0 &&\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
}\n\n\t\t\t\t\t{false && !isJsonLogTab() && (filterStore.getSideBarStatuses().length > 0) && (\n\t\t\t\t\t\t
\n\t\t\t\t\t)}\n\n\t\t\t\t\t{false && !isJsonLogTab() && (filterStore.getSideBarStatuses().length > 0) && (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
Status:
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
All
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{filterStore.getSideBarStatuses().sort().map((status) => (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t)}\n\n\t\t\t\t
\n\t\t\t
\n\t\t\t {\n\t\t\t\t\tsetOpenSaveSessionDialog(false);\n\t\t\t\t\tif (fileName.length > 0) {\n\t\t\t\t\t\tawait sessionStore.saveSession(fileName);\n\t\t\t\t\t}\n\t\t\t\t\tsetDisableSession(false);\n\t\t\t\t}} />\n\t\t\t setShowSessionModal(false)}\n\t\t\t\tstore={sessionStore}\n\t\t\t/>\n\t\t\t {\n\t\t\t\t\tsetOpenImportJSONFileDialog(false);\n\t\t\t\t}}\n\t\t\t/>\n\t\t\n\t);\n\n\tfunction getInputStyle(time: string) {\n\t\tif (time.length === 0) {\n\t\t\treturn {\n\t\t\t\tcolor: 'rgba(232, 230, 227)',\n\t\t\t\tbackgroundColor: '#444444'\n\t\t\t};\n\t\t}\n\n\t\tconst ok = stringToDate(time).ok;\n\t\tconst style = {\n\t\t\tbackground: (ok ? (timeChanged ? '#fffac8' : 'lightGreen') : 'lightCoral'),\n\t\t\tcolor: 'black'\n\t\t};\n\t\treturn style;\n\t}\n\n});\n\nexport default SideBar;","import { Socket } from \"socket.io-client\";\nimport FS from '@isomorphic-git/lightning-fs';\nimport { urlPathStore } from \"./UrlPathStore\";\nimport { defaultScript, jsonLogStore } from \"./JSONLogStore\";\n\nconst CHUNKSIZE = 500000;\n\nconst defaultFsType: 'browserFs' | 'serverFs' = !urlPathStore.isLocalhost() || urlPathStore.isGitHubPages() || process.env.NODE_ENV !== \"production\" ? 'browserFs' : 'serverFs';\nconst fs = new FS(urlPathStore.isLocalhost() ? 'allproxy' : document.location.hostname).promises;\n\nexport async function initApFileSystem() {\n log(defaultFsType, 'initApFileSystem');\n await mkdirIfRequired('/intercept');\n await mkdirIfRequired('/proto');\n await mkdirIfRequired('/bin');\n await mkdirIfRequired('/sessions');\n await mkdirIfRequired('/jsonFields');\n await mkdirIfRequired('/scripts');\n await mkdirIfRequired('/queries');\n if (urlPathStore.isLocalhost()) return;\n if (urlPathStore.isGitHubPages()) await fetchApFileSystem();\n}\n\nasync function mkdirIfRequired(dir: string) {\n try {\n log(defaultFsType, 'mkdirIfRequired', dir);\n await fs.mkdir(dir);\n } catch (e) { }\n}\n\nfunction log(...args: any[]) {\n if (process.env.NODE_ENV === 'development') console.log(...args);\n}\n\nexport default class APFileSystem {\n private socket?: Socket = undefined;\n\n public setSocket(socket: Socket) {\n this.socket = socket;\n }\n\n public isConnected() {\n return this.socket?.connected;\n }\n\n // mkdir\n public async mkdir(path: string, fsType: 'browserFs' | 'serverFs' = defaultFsType) {\n log(fsType, 'mkdir', path);\n if (fsType === 'browserFs') {\n fs.mkdir('/' + path);\n } else {\n this.socket?.emit('mkdir', path);\n }\n }\n\n // rmdir\n public async rmdir(path: string, fsType: 'browserFs' | 'serverFs' = defaultFsType) {\n log(fsType, 'rmdir', path);\n if (fsType === 'browserFs') {\n fs.rmdir('/' + path);\n } else {\n this.socket?.emit('rmdir', path);\n }\n }\n\n // writeFile\n public async writeFile(path: string, data: string, fsType: 'browserFs' | 'serverFs' = defaultFsType): Promise {\n log(fsType, 'writeFile', path);\n if (fsType === 'browserFs') {\n return fs.writeFile('/' + path, data);\n }\n return new Promise(async (resolve1) => {\n for (let offset = 0; offset < data.length; offset += CHUNKSIZE) {\n await new Promise((resolve2) => {\n const chunk = data.substring(offset, Math.min(offset + CHUNKSIZE, data.length));\n const operation = offset === 0 ? 'writeFile' : 'appendFile';\n this.socket?.emit(operation,\n path,\n chunk,\n () => resolve2(0)\n );\n });\n }\n resolve1();\n });\n }\n\n // deleteFile\n public async deleteFile(path: string, fsType: 'browserFs' | 'serverFs' = defaultFsType): Promise {\n log(fsType, 'deleteFile', path);\n if (fsType === 'browserFs') {\n return fs.unlink('/' + path);\n }\n return new Promise((resolve) => {\n this.socket?.emit('deleteFile', path, () => {\n resolve();\n });\n });\n }\n\n // renameFile\n public async renameFile(oldPath: string, newPath: string, fsType: 'browserFs' | 'serverFs' = defaultFsType): Promise {\n log(fsType, 'renameFile', oldPath, newPath);\n if (fsType === 'browserFs') {\n return fs.rename('/' + oldPath, '/' + newPath);\n }\n return new Promise((resolve) => {\n this.socket?.emit('renameFile', oldPath, newPath, () => {\n resolve();\n });\n });\n }\n\n // exists\n public async exists(path: string, fsType: 'browserFs' | 'serverFs' = defaultFsType): Promise {\n log(fsType, 'exists?', path);\n if (fsType === 'browserFs') {\n try {\n await fs.stat('/' + path);\n log(fsType, 'exists - true', path);\n return true;\n } catch (e) {\n log(fsType, 'exists - false', path);\n return false;\n }\n }\n return new Promise((resolve) => {\n if (!this.isConnected()) {\n resolve(false);\n } else {\n setTimeout(() => resolve(false), 5000);\n this.socket?.emit('exists', path, (exists: boolean) => {\n log(fsType, 'exists - ' + exists, path);\n resolve(exists);\n });\n }\n });\n }\n\n // readdir\n public async readDir(path: string, fsType: 'browserFs' | 'serverFs' = defaultFsType): Promise {\n log(fsType, 'readDir...', path);\n if (fsType === 'browserFs') {\n const files = fs.readdir('/' + path);\n log(fsType, 'readDir', path, files);\n return files;\n }\n return new Promise((resolve) => {\n this.socket?.emit('readDir', path, (files: string[]) => {\n log(fsType, 'readDir', path, files);\n resolve(files);\n });\n });\n }\n\n public async grepDir(path: string, match: string, fsType: 'browserFs' | 'serverFs' = defaultFsType): Promise {\n if (fsType === 'browserFs') {\n return [];\n }\n return new Promise((resolve) => {\n this.socket?.emit('grepDir', path, match, (files: string[]) => {\n resolve(files);\n });\n });\n }\n\n // readFile\n public async readFile(path: string, fsType: 'browserFs' | 'serverFs' = defaultFsType): Promise {\n if (fsType === 'browserFs') {\n const data = (await fs.readFile('/' + path)).toString();\n log(fsType, 'readFile', path, data);\n return data;\n }\n const chunks: string[] = [];\n return new Promise(async (resolve1) => {\n let done = false;\n for (let offset = 0; !done; offset += CHUNKSIZE) {\n await new Promise((resolve2) => {\n this.socket?.emit('readFile', path, offset, CHUNKSIZE, (chunk: string, eof: boolean) => {\n chunks.push(chunk);\n done = eof;\n //log(fsType,'readFile', offset, chunk.length, chunks.length, eof);\n resolve2(0);\n });\n });\n }\n const data = chunks.join('');\n log(fsType, 'readFile', path, data);\n resolve1(data);\n });\n }\n}\n\nasync function fetchApFileSystem() {\n const url = document.location.href.split('#')[0] + 'apFileSystem.json';\n const response = await fetch(url);\n if (response.status === 200) {\n const json = await response.json();\n\n // jsonFields\n const fields = await apFileSystem.readDir('/jsonFields');\n if (fields.length === 0) {\n for (const field of json.jsonFields) {\n await apFileSystem.writeFile('/jsonFields/' + field, field);\n }\n await apFileSystem.writeFile('/briefJsonFields.json', json.briefJsonFields);\n }\n\n // scripts\n if (!await apFileSystem.exists('/scripts/method')) await apFileSystem.writeFile('/scripts/method', json.method);\n if (!await apFileSystem.exists('/scripts/jsonLogScript') || await apFileSystem.readFile('/scripts/jsonLogScript') === defaultScript) {\n await apFileSystem.writeFile('/scripts/jsonLogScript', json.jsonLogScript);\n }\n\n // Queries\n const queries = await apFileSystem.readDir('/queries');\n if (queries.length === 0) {\n for (const dir in json.queries) {\n await apFileSystem.mkdir('/queries/' + dir);\n await apFileSystem.writeFile('/queries/' + dir + '/query.txt', json.queries[dir].query);\n }\n }\n\n let jsonQueries = [];\n if (await apFileSystem.exists('/jsonQueries.json')) {\n jsonQueries = JSON.parse(await apFileSystem.readFile('/jsonQueries.json'));\n }\n if (jsonQueries.length === 0) await apFileSystem.writeFile('/jsonQueries.json', json.jsonQueries);\n\n let jsonSubQueries = [];\n if (await apFileSystem.exists('/jsonSubQueries.json')) {\n jsonSubQueries = JSON.parse(await apFileSystem.readFile('/jsonSubQueries.json'));\n }\n if (jsonSubQueries.length === 0) await apFileSystem.writeFile('/jsonSubQueries.json', json.jsonSubQueries);\n\n // Update\n await jsonLogStore.init();\n }\n}\n\nexport const apFileSystem = new APFileSystem();","import { makeAutoObservable, action } from \"mobx\";\nimport Message from \"../common/Message\";\nimport FilterStore from \"./FilterStore\";\nimport MessageStore from \"./MessageStore\";\nimport { socketStore } from \"./SocketStore\";\n\nconst LOCAL_STORAGE = 'allproxy-breakpoints';\n\nexport default class BreakpointStore {\n\tprivate breakpointList: FilterStore[] = [];\n\tprivate _editing = false;\n\n\tprivate messageStore: MessageStore | null = null;\n\tprivate breakpointCallback: any;\n\n\tpublic constructor() {\n\t\tmakeAutoObservable(this);\n\t}\n\n\t@action public editing(editing: boolean) {\n\t\tthis._editing = editing;\n\t}\n\n\t@action public changed() {\n\t\tthis.save();\n\t}\n\n\t@action public init() {\n\t\tconst breakpointListJson = localStorage.getItem(LOCAL_STORAGE);\n\t\tif (breakpointListJson) {\n\t\t\tconst breakpointList = JSON.parse(breakpointListJson);\n\t\t\tthis.breakpointList = breakpointList.map((entry: {\n\t\t\t\tenabled: boolean,\n\t\t\t\tsearchFilter: string,\n\t\t\t\t_matchCase: boolean,\n\t\t\t\t_regex: boolean,\n\t\t\t\t_logical: boolean\n\t\t\t}) => {\n\t\t\t\tconst breakpoint = new FilterStore();\n\t\t\t\tbreakpoint.setEnabled(entry.enabled);\n\t\t\t\tbreakpoint.setFilterNoDebounce(entry.searchFilter);\n\t\t\t\tbreakpoint.setRegex(entry._regex);\n\t\t\t\tbreakpoint.setMatchCase(!!entry._matchCase);\n\t\t\t\tbreakpoint.setLogical(!!entry._logical);\n\t\t\t\treturn breakpoint;\n\t\t\t});\n\t\t} else {\n\t\t\tthis.breakpointList = [];\n\t\t}\n\t\tthis.emitBreakpoint();\n\t}\n\n\t@action private save() {\n\t\tconst breakpointList = this.breakpointList.filter(breakpoint => breakpoint.getFilter().length > 0);\n\t\tlocalStorage.setItem(LOCAL_STORAGE, JSON.stringify(breakpointList));\n\t\tthis.emitBreakpoint();\n\t}\n\n\tprivate emitBreakpoint() {\n\t\tconst enabledBreakpoint = this.breakpointList.find(breakpoint => breakpoint.isEnabled());\n\t\tsocketStore.emitBreakpoint(enabledBreakpoint !== undefined);\n\t}\n\n\tpublic findMatchingBreakpoint(message: Message): FilterStore | null {\n\t\tif (this.breakpointList.length === 0 || this._editing) return null;\n\t\tfor (const breakpoint of this.breakpointList) {\n\t\t\tif (breakpoint.isEnabled() && !breakpoint.isFiltered(new MessageStore(message), true)) {\n\t\t\t\treturn breakpoint;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic getBreakpointList() {\n\t\treturn this.breakpointList;\n\t}\n\n\tpublic getBreakpointCount(): number {\n\t\treturn this.breakpointList.filter(b => b.isEnabled()).length;\n\t}\n\n\t@action public extend() {\n\t\tthis.breakpointList.unshift(new FilterStore());\n\t}\n\n\t@action public deleteEntry(index: number) {\n\t\tthis.breakpointList.splice(index, 1);\n\t\tthis.save();\n\t}\n\n\t@action public openBreakpointResponseModal(messageStore: MessageStore, callback: any) {\n\t\tthis.messageStore = messageStore;\n\t\tthis.breakpointCallback = callback;\n\t}\n\n\t@action public closeBreakpointResponseModal() {\n\t\tconst message = this.messageStore!.getMessage();\n\t\tif (typeof message.responseBody === 'string') {\n\t\t\ttry {\n\t\t\t\tmessage.responseBody = JSON.parse(message.responseBody);\n\t\t\t} catch (e) { }\n\t\t}\n\t\tmessage!.modified = true;\n\t\tthis.breakpointCallback(message);\n\t\tthis.messageStore = null;\n\t}\n\n\tpublic getMessageStore() {\n\t\treturn this.messageStore;\n\t}\n\n}\n\nexport const breakpointStore = new BreakpointStore();\n","import { makeAutoObservable, action } from \"mobx\";\nimport MessageStore from './MessageStore';\nimport _ from 'lodash';\nimport { dateToHHMMSS } from \"../components/Request\";\nimport { lookupJSONField as lookupJSONField } from \"./JSONLogStore\";\nimport { messageQueueStore } from \"./MessageQueueStore\";\nimport { stringToDate } from \"../components/Footer\";\n\nexport default class FilterStore {\n private name = '';\n private enabled = true;\n private filter = '';\n private searchFilter = '';\n private boolString = '';\n private boolOperands: string[] = [];\n private highlightJsonFields: string[] = [];\n private _matchCase = false;\n private _regex = false;\n private _logical = true;\n private _deleteFiltered = false;\n private showErrors = false;\n private excludeTags: string[] = [];\n private _excludeMatchCase = false;\n private sideBarProtocols: Map = new Map();\n private sideBarDomains: Map = new Map();\n private sideBarUserAgents: Map = new Map();\n private sideBarStatuses: Map = new Map();\n\n private dedup = false;\n private dedupMap: { [key: string]: string | number | boolean } = {};\n private pendingDedupMap: { [key: string]: string | number | boolean } = {};\n\n private sortByKeys: string[] = [];\n\n private startTime: string = \"\";\n private endTime: string = \"\";\n private startDate: Date = new Date();\n private endDate: Date = new Date();\n\n public constructor() {\n makeAutoObservable(this);\n }\n\n public getStartTime() {\n return this.startTime;\n }\n public setStartTime(startTime: string) {\n this.startTime = startTime;\n if (startTime === '') {\n this.startDate = new Date();\n } else {\n this.startDate = stringToDate(this.startTime).date;\n }\n }\n\n public getEndTime() {\n return this.endTime;\n }\n public setEndTime(endTime: string) {\n this.endTime = endTime;\n if (endTime === '') {\n this.endDate = new Date();\n } else {\n this.endDate = stringToDate(this.endTime).date;\n }\n }\n\n public getName() {\n return this.name;\n }\n @action public setName(name: string) {\n this.name = name;\n }\n\n public getSortByKeys() {\n return this.sortByKeys;\n }\n\n public isEnabled() {\n return this.enabled;\n }\n\n @action toggleEnabled() {\n this.enabled = !this.enabled;\n }\n\n @action setEnabled(enabled: boolean) {\n this.enabled = enabled;\n }\n\n public matchCase(): boolean {\n return this._matchCase;\n }\n\n @action public toggleMatchCase() {\n this._matchCase = !this._matchCase;\n this.filterUpdated();\n }\n\n @action public setMatchCase(matchCase: boolean) {\n this._matchCase = matchCase;\n }\n\n public regex(): boolean {\n return this._regex;\n }\n\n @action public toggleRegex() {\n this._regex = !this._regex;\n this.filterUpdated();\n }\n\n @action public setRegex(regex: boolean) {\n this._regex = regex;\n }\n\n public logical(): boolean {\n return this._logical;\n }\n\n @action public toggleLogical() {\n this._logical = !this._logical;\n this.filterUpdated();\n }\n\n @action public setLogical(logical: boolean) {\n this._logical = logical;\n }\n\n public deleteFiltered(): boolean {\n return this._deleteFiltered;\n }\n\n @action public toggleDeleteFiltered() {\n this._deleteFiltered = !this._deleteFiltered;\n this.filterUpdated();\n }\n\n public getShowErrors(): boolean {\n return this.showErrors;\n }\n\n @action public toggleShowErrors() {\n this.showErrors = !this.showErrors;\n this.filterUpdated();\n }\n\n @action public setExcludeTags(excludeList: string[]) {\n this.excludeTags = excludeList;\n this.filterUpdated();\n }\n\n public excludeMatchCase(): boolean {\n return this._excludeMatchCase;\n }\n\n @action public toggleExcludeMatchCase() {\n this._excludeMatchCase = !this._excludeMatchCase;\n this.filterUpdated();\n }\n\n @action public setExcludeMatchCase(matchCase: boolean) {\n this._excludeMatchCase = matchCase;\n }\n\n // Protocols filter\n public getSideBarProtocolIconClasses(): string[] {\n const iconClasses: string[] = [];\n this.sideBarProtocols.forEach((_, iconClass) => iconClasses.push(iconClass));\n return iconClasses;\n }\n\n public isSideBarProtocolChecked(iconClass: string): boolean {\n return !!this.sideBarProtocols.get(iconClass);\n }\n\n public getSideBarProtocolChecked(iconClass: string): boolean | undefined {\n return this.sideBarProtocols.get(iconClass);\n }\n\n @action private setSideBarProtocolChecked(iconClass: string, value: boolean) {\n this.sideBarProtocols.set(iconClass, value);\n }\n @action public toggleSideBarProtocolChecked(iconClass: string) {\n this.sideBarProtocols.set(iconClass, !this.sideBarProtocols.get(iconClass));\n this.filterUpdated();\n }\n\n // Statuses filter\n public getSideBarStatuses(): number[] {\n const statuses: number[] = [];\n this.sideBarStatuses.forEach((_, status) => statuses.push(status));\n return statuses;\n }\n\n public isSideBarStatusChecked(status: number): boolean {\n return !!this.sideBarStatuses.get(status);\n }\n\n public getSideBarStatusChecked(status: number): boolean | undefined {\n return this.sideBarStatuses.get(status);\n }\n\n @action public setSideBarStatusChecked(status: number, value: boolean) {\n this.sideBarStatuses.set(status, value);\n }\n @action public toggleSideBarStatusChecked(status: number) {\n this.sideBarStatuses.set(status, !this.sideBarStatuses.get(status));\n this.filterUpdated();\n }\n\n // Domains filter\n public getSideBarDomains(): string[] {\n const iconClasses: string[] = [];\n this.sideBarDomains.forEach((_, domain) => iconClasses.push(domain));\n return iconClasses;\n }\n\n public isSideBarDomainChecked(domain: string): boolean {\n return !!this.sideBarDomains.get(domain);\n }\n\n public getSideBarDomainChecked(domain: string): boolean | undefined {\n return this.sideBarDomains.get(domain);\n }\n\n @action public setSideBarDomainChecked(domain: string, value: boolean) {\n this.sideBarDomains.set(domain, value);\n }\n @action public toggleSideBarDomainChecked(domain: string) {\n this.sideBarDomains.set(domain, !this.sideBarDomains.get(domain));\n this.filterUpdated();\n }\n\n // User Agents filter\n public getSideBarUserAgents(): string[] {\n const iconClasses: string[] = [];\n this.sideBarUserAgents.forEach((_, ua) => iconClasses.push(ua));\n return iconClasses;\n }\n\n public isSideBarUserAgentChecked(userAgent: string): boolean {\n return !!this.sideBarUserAgents.get(userAgent);\n }\n\n public getSideBarUserAgentChecked(userAgent: string): boolean | undefined {\n return this.sideBarUserAgents.get(userAgent);\n }\n\n @action public setSideBarUserAgentChecked(userAgent: string, value: boolean) {\n this.sideBarUserAgents.set(userAgent, value);\n }\n @action public toggleSideBarUserAgentChecked(userAgent: string) {\n this.sideBarUserAgents.set(userAgent, !this.sideBarUserAgents.get(userAgent));\n this.filterUpdated();\n }\n\n public isDedupChecked() {\n return this.dedup;\n }\n public toggleDedupChecked() {\n this.dedup = !this.dedup;\n this.filterUpdated();\n }\n\n public canDedup() {\n return Object.keys(this.dedupMap).length > 0;\n }\n\n @action public setHighlightJsonFields(terms: string[]) {\n this.highlightJsonFields = terms;\n }\n public getHighlightJsonFields() {\n return this.highlightJsonFields;\n }\n\n @action public setFilterNoDebounce(filter: string) {\n this.sortByKeys = [];\n\n this.filter = filter;\n this.searchFilter = this.filter.trim();\n this.updateBoolString();\n this.filterUpdated();\n }\n\n @action public setFilter(filter: string) {\n this.filter = filter;\n this.searchFilter = this.filter;\n this.updateBoolString();\n }\n\n @action public filterUpdated() {\n for (const messageStore of messageQueueStore.getMessages()) {\n messageStore.setFiltered(undefined);\n }\n messageQueueStore.setScrollAction('filter');\n\n this.dedupMap = {};\n if (this.dedup) {\n for (const messageStore of messageQueueStore.getMessages()) {\n messageStore.isFiltered();\n }\n }\n }\n\n public isInvalidFilterSyntax(): boolean {\n let invalidFilterSyntax = false;\n if (this._logical && this.boolString.length > 0) {\n let boolString = this.boolString;\n for (let i = 0; i < this.boolOperands.length; ++i) {\n boolString = boolString.replace('###' + i, 'true');\n }\n //console.log(boolString);\n try {\n // eslint-disable-next-line no-eval\n eval(boolString);\n return false;\n } catch (e) {\n invalidFilterSyntax = true;\n return true;\n }\n }\n return invalidFilterSyntax;\n }\n\n private updateBoolString() {\n this.boolString = '';\n this.boolOperands.splice(0, this.boolOperands.length);\n let argNum = 0;\n let filter = this.filter;\n if (filter.includes(' AND ') || filter.includes(' OR ')) {\n filter = filter.split(' AND ').join(' && ').split(' OR ').join(' || ');\n }\n if (filter.includes(' !') || filter.startsWith('!')\n || filter.includes(' -') || filter.startsWith('-')\n || filter.includes('&&')\n || filter.includes('||')) {\n let operand = '';\n for (let i = 0; i < filter.length; ++i) {\n let c1 = filter.substr(i, 1);\n let c2 = i < filter.length - 1 ? filter.substr(i + 1, 1) : '';\n let nonOperand = '';\n if (((c1 === '!' || c1 === '-') && i === 0) || c1 === '(' || c1 === ')') {\n if (c1 === '-') c1 = '!';\n nonOperand = c1;\n }\n if (c1 === ' ' && (c2 === '!' || c2 === '-')) {\n ++i;\n nonOperand = '!';\n }\n if (c1 === '&' && c2 === '&') {\n ++i;\n nonOperand = '&&';\n }\n if (c1 === '|' && c2 === '|') {\n ++i;\n nonOperand = '||';\n }\n if (nonOperand.length > 0) {\n operand = operand.trim();\n if (operand.length > 0) {\n this.boolString += '###' + argNum++;\n this.boolOperands.push(operand);\n operand = '';\n }\n this.boolString += nonOperand;\n }\n else {\n operand += c1;\n }\n }\n\n operand = operand.trim();\n if (operand.length > 0) {\n this.boolString += '###' + argNum++;\n this.boolOperands.push(operand);\n }\n }\n }\n\n public getFilter() {\n return this.filter;\n }\n\n public isFiltered(messageStore: MessageStore, isBreakpoint?: boolean): boolean {\n if (isBreakpoint) return this.isFilteredNoCache(messageStore, isBreakpoint);\n return messageStore.isFiltered();\n }\n\n public isFilteredNoCache(messageStore: MessageStore, isBreakpoint?: boolean): boolean {\n const doReturn = (filtered: boolean): boolean => {\n if (!isBreakpoint) messageStore.setFiltered(filtered);\n for (const key in this.pendingDedupMap) {\n if (!filtered) {\n this.dedupMap[key] = this.pendingDedupMap[key];\n }\n delete this.pendingDedupMap[key];\n }\n return filtered;\n };\n\n if (!isBreakpoint) {\n // Protocols filter\n const iconClass = messageStore.getIconClass();\n if (filterStore.getSideBarProtocolChecked(iconClass) === undefined) {\n filterStore.setSideBarProtocolChecked(iconClass, true);\n }\n if (this.isSideBarProtocolChecked(iconClass) === false) return doReturn(true);\n\n // Status filter\n const status = messageStore.getMessage().status;\n if (status) {\n if (filterStore.getSideBarStatusChecked(status) === undefined) {\n filterStore.setSideBarStatusChecked(status, true);\n }\n if (this.isSideBarStatusChecked(status) === false) return doReturn(true);\n }\n\n // Domains filter\n const domain = messageStore.getDomain();\n if (domain) {\n if (filterStore.getSideBarDomainChecked(domain) === undefined) {\n filterStore.setSideBarDomainChecked(domain, true);\n }\n if (this.isSideBarDomainChecked(domain) === false) return doReturn(true);\n }\n\n // User Agents filter\n let ua = messageStore.getUserAgentDisplayable();\n if (ua) {\n if (filterStore.getSideBarUserAgentChecked(ua) === undefined) {\n filterStore.setSideBarUserAgentChecked(ua, true);\n }\n if (this.isSideBarUserAgentChecked(ua) === false) return doReturn(true);\n }\n }\n\n if (this.showErrors && !messageStore.isError() && !messageStore.isNoResponse()) return doReturn(true);\n\n // Check exclude tags\n if (this.excludeTags.length > 0 && this.isMessageExcluded(messageStore)) return doReturn(true);\n\n if (this.searchFilter.length === 0 && this.startTime === '' && this.endTime === '') return doReturn(false);\n if (this._logical && this.boolString.length > 0) {\n let boolString = this.boolString;\n for (let i = 0; i < this.boolOperands.length; ++i) {\n const filtered = this.isMessageFiltered(this.boolOperands[i], messageStore);\n boolString = boolString.replace('###' + i, (filtered ? 'false' : 'true'));\n }\n //console.log(boolString);\n try {\n // eslint-disable-next-line no-eval\n return doReturn(!eval(boolString));\n } catch (e) {\n return doReturn(false);\n }\n }\n else {\n return doReturn(this.isMessageFiltered(this.searchFilter, messageStore));\n }\n }\n\n private isJsonKeyValueMatch(key: string, value: string, operator: string, json: { [key: string]: any }): boolean {\n for (const jsonField of lookupJSONField(json, key)) {\n if (!this.sortByKeys.includes(key)) {\n this.sortByKeys.push(key);\n }\n\n if (this.isKeyValueMatch(key, value, operator, jsonField.value)) {\n return true;\n }\n }\n return false;\n }\n\n private isKeyValueMatch(key: string, value: string, operator: string, jsonValue: any) {\n function exit(rc: boolean) {\n // deprecated\n // if (rc) {\n // mainTabStore.addJsonSearchField(mainTabStore.getSelectedTabName(), key);\n // }\n return rc;\n }\n\n //console.log(key, value, operator, jsonValue);\n if (value === '*' && (operator === '==' || operator === '===')) {\n if (this.dedup && this.dedupMap[key] === jsonValue) {\n //console.log(key, jsonValue);\n return exit(false); // filter duplicate\n }\n this.pendingDedupMap[key] = jsonValue;\n return exit(true);\n }\n\n if (typeof jsonValue === 'number') {\n const float = parseFloat(value);\n if (!isNaN(float)) {\n return exit(eval(jsonValue + operator + float));\n }\n const int = parseInt(value);\n if (!isNaN(int)) {\n return exit(eval(jsonValue + operator + int));\n }\n return exit(false);\n } else if (typeof jsonValue === 'string') {\n if (operator === '==') {\n return exit(jsonValue.toLowerCase().includes(value.toLowerCase()));\n } else if (operator === '===') {\n return exit(jsonValue === value);\n } else {\n // const evalString = \"'\" + jsonValue + \"'\" + operator + \"'\" + value + \"'\";\n // return eval(evalString);\n }\n } else if (typeof jsonValue === 'boolean') {\n if (operator === '==' || operator === '===') {\n return exit(jsonValue && value === 'true' ||\n !jsonValue && value === 'false');\n }\n }\n return exit(false);\n }\n\n private parseKeyValue(operand: string): { key: string, value: string | undefined }[] {\n const keyValues: { key: string, value: string | undefined }[] = [];\n const firstColon = operand.indexOf(':');\n const lastColon = operand.lastIndexOf(':');\n let colon = firstColon;\n if (firstColon !== lastColon) {\n const firstPeriod = operand.indexOf('.');\n if (firstPeriod > firstColon && firstPeriod < lastColon) {\n colon = lastColon;\n }\n }\n keyValues.push(getKeyValue(colon));\n if (colon !== lastColon) {\n keyValues.push(getKeyValue(lastColon));\n }\n\n function getKeyValue(i: number) {\n if (i !== -1 && operand.length > i + 1) {\n const key = operand.substring(0, i);\n let value = operand.substring(i + 1);\n return { key, value };\n } else {\n return { key: operand, value: undefined };\n }\n }\n return keyValues;\n }\n\n public isJSONFieldOperandMatch(jsonField: string, jsonValue: string): string | false {\n if (this.searchFilter.length === 0 && this.highlightJsonFields.length === 0) return false;\n const jsonFieldLower = jsonField.toLowerCase();\n const jsonValueLower = jsonValue.toLowerCase();\n let operands = this.boolOperands.length > 0 ? this.boolOperands : [this.searchFilter];\n if (this.highlightJsonFields.length > 0) operands = this.highlightJsonFields;\n for (let operand of operands) {\n const operandLower = operand.toLowerCase();\n const operandArrayIndex = operandLower.indexOf('[]');\n const operandKeyValues = this.parseKeyValue(operand);\n for (const operandKeyValue of operandKeyValues) {\n // Check for key:value match\n if (operandKeyValue.value === undefined) operandKeyValue.value = '*';\n let match = false;\n const operandKeyLower = operandKeyValue.key.toLowerCase();\n if (operandKeyValue.key.substring(0, 1) === '*') {\n match = jsonField.endsWith(operandKeyLower.substring(1));\n } else {\n match = jsonFieldLower === operandKeyLower || jsonFieldLower.endsWith('.' + operandKeyLower);\n }\n if (match) {\n const out = this.parseValue(operandKeyValue.value);\n const operator = out.operator;\n const value = out.value;\n if (this.isKeyValueMatch(operandKeyValue.key, value, operator, jsonValue)) {\n return value;\n } else {\n return false;\n }\n }\n if (operandKeyValue.key === '*' && jsonValueLower === operandKeyValue.value) return operandKeyValue.value;\n\n\n // Check for JSON field value match on full operand string\n if (operand.startsWith('\"') && operand.endsWith('\"')) {\n operand = operand.substring(1, operand.length - 1);\n }\n if (operand.length < 3) continue;\n const tokens = jsonFieldLower.split('.');\n const lastField = tokens[tokens.length - 1];\n if (jsonFieldLower === operandLower ||\n lastField.startsWith(operandLower) ||\n jsonFieldLower.endsWith(operandLower)) return operand;\n if (jsonValueLower.startsWith(operandLower)) return operand;\n if (jsonValueLower.endsWith(operandLower)) return operand;\n if (jsonValueLower === operandLower) return operand;\n if (jsonValueLower.includes(operandLower)) return operand;\n\n // array[].xxx \n if (operandArrayIndex > -1) {\n const fieldIndex1 = jsonFieldLower.indexOf('[');\n if (fieldIndex1 >= operandArrayIndex) {\n const fieldIndex2 = jsonFieldLower.indexOf(']');\n if (fieldIndex2 > fieldIndex1) {\n if (operandLower.substring(0, operandArrayIndex) === jsonFieldLower.substring(fieldIndex1 - operandArrayIndex, fieldIndex1)\n && operandLower.substring(operandArrayIndex + 1) === jsonFieldLower.substring(fieldIndex2)) {\n //console.log(operand, jsonField);\n return operand;\n }\n }\n }\n }\n }\n }\n return false;\n }\n\n // @returns operator\n private parseValue(value: string): { value: string, operator: string } {\n let operator: string;\n if (value.startsWith('>') || value.startsWith('<')) {\n operator = value.substring(0, 1);\n value = value.substring(1);\n if (value.startsWith('=')) {\n operator += value.substring(0, 1);\n value = value.substring(1);\n }\n } else if (value.startsWith('==')) {\n operator = value.substring(0, 2);\n value = value.substring(2);\n if (value.startsWith('=')) {\n operator += value.substring(0, 1);\n value = value.substring(1);\n }\n } else {\n operator = '==';\n }\n return { value, operator };\n }\n\n private isMessageFiltered(needle: string, messageStore: MessageStore) {\n const message = messageStore.getMessage();\n\n // Time filter\n if (this.startTime !== '') {\n if (message.protocol === 'log:') {\n if (messageStore.getLogEntry().date < this.startDate) return true;\n } else {\n if (new Date(message.timestamp) < this.startDate) return true;\n }\n }\n if (this.endTime !== '') {\n if (message.protocol === 'log:') {\n if (messageStore.getLogEntry().date > this.endDate) return true;\n } else {\n if (new Date(message.timestamp) > this.endDate) return true;\n }\n }\n\n if (message.proxyConfig && this.isMatch(needle, message.proxyConfig.protocol)) return false;\n if (this.isMatch(needle, message.protocol)) return false;\n if (message.protocol !== 'log:') {\n if (this.isMatch(needle,\n message.status + ' ' + message.method\n + ' '\n + message.clientIp! + '->' + message.serverHost\n + ' '\n + messageStore.getUrl())) return false;\n if (this.isMatch(needle, message.endpoint)) return false;\n if (this.isMatch(needle, JSON.stringify(message.requestHeaders))) return false;\n if (this.isMatch(needle, JSON.stringify(message.responseHeaders))) return false;\n if (this.isMatch(needle, messageStore.getRequestBody())) return false;\n } else {\n try {\n if (this.isMatch(needle, dateToHHMMSS(messageStore.getLogEntry().date))) return false;\n } catch (e) { }\n if (this.isMatch(needle, messageStore.getLogEntry().kind)) return false;\n if (this.isMatch(needle, messageStore.getLogEntry().category)) return false;\n }\n if (message.responseBody && this.isMatch(needle, this.stringify(message.responseBody))) return false;\n if (messageStore.hasNote() && this.isMatch(needle, messageStore.getNote())) return false;\n\n // Check for JSON key:value syntax\n const keyValues = this.parseKeyValue(needle);\n for (const keyValue of keyValues) {\n if (keyValue.value !== undefined) {\n const key = keyValue.key;\n let value = keyValue.value;\n const out = this.parseValue(value);\n const operator = out.operator;\n value = out.value;\n\n if (typeof message.responseBody !== 'string') {\n if (key === '*' && JSON.stringify(message.responseBody).indexOf(`:\"${value}\"`) !== -1) {\n return false;\n } else {\n if (this.isJsonKeyValueMatch(key, value, operator, message.responseBody as { [key: string]: any })) return false;\n }\n }\n\n if (message.protocol === 'log:') {\n if (this.isJsonKeyValueMatch(key, value, operator, messageStore.getLogEntry().additionalJSON)) return false;\n\n if (key === 'cat' && (operator === '==' || operator === '===')) {\n if (messageStore.getLogEntry().category.startsWith(value)) return false;\n }\n if (key === 'app' && (operator === '==' || operator === '===')) {\n if (messageStore.getLogEntry().kind.startsWith(value)) return false;\n }\n } else {\n if (message.requestBody && typeof message.requestBody === 'object') {\n if (key === '*' && JSON.stringify(message.requestBody).indexOf(`:\"${value}\"`) !== -1) {\n return false;\n } else {\n if (this.isJsonKeyValueMatch(key, value, operator, message.requestBody as { [key: string]: any })) return false;\n }\n }\n if (typeof message.requestHeaders === 'object') {\n if (key === '*' && JSON.stringify(message.requestHeaders).indexOf(`:\"${value}\"`) !== -1) {\n return false;\n } else {\n if (this.isJsonKeyValueMatch(key, value, operator, message.requestHeaders as { [key: string]: any })) return false;\n }\n }\n if (typeof message.responseHeaders === 'object') {\n if (key === '*' && JSON.stringify(message.responseHeaders).indexOf(`:\"${value}\"`) !== -1) {\n return false;\n } else {\n if (this.isJsonKeyValueMatch(key, value, operator, message.responseHeaders as { [key: string]: any })) return false;\n }\n }\n if (message.status !== undefined) {\n if (key === 'status') {\n if (this.isKeyValueMatch(key, value, operator, message.status)) {\n return false;\n }\n }\n }\n if (message.method !== undefined) {\n if (key === 'method') {\n if (this.isKeyValueMatch(key, value, operator, message.method)) {\n return false;\n }\n }\n }\n if (message.serverHost && message.serverHost.length > 0) {\n if (key === 'host') {\n if (this.isKeyValueMatch(key, value, operator, message.serverHost)) {\n return false;\n }\n }\n }\n if (message.url) {\n if (key === 'url') {\n if (this.isKeyValueMatch(key, value, operator, message.url)) {\n return false;\n }\n }\n }\n }\n\n return true;\n }\n }\n\n return true;\n }\n\n private stringify(o: string | {}) {\n return typeof o !== 'string' ? JSON.stringify(o) : o;\n }\n\n private isMessageExcluded(messageStore: MessageStore) {\n const message = messageStore.getMessage();\n if (message.proxyConfig && this.isExcluded(message.proxyConfig.protocol)) return true;\n if (this.isExcluded(message.protocol)) return true;\n if (message.protocol !== 'log:') {\n if (this.isExcluded(\n message.status + ' ' + message.method\n + ' '\n + message.clientIp! + '->' + message.serverHost\n + ' '\n + messageStore.getUrl())) return true;\n if (this.isExcluded(message.endpoint)) return true;\n if (this.isExcluded(JSON.stringify(message.requestHeaders))) return true;\n if (this.isExcluded(JSON.stringify(message.responseHeaders))) return true;\n if (this.isExcluded(messageStore.getRequestBody())) return true;\n } else {\n if (message.responseBody && this.isExcluded(this.stringify(message.responseBody))) return true;\n }\n return false;\n }\n\n private isExcluded(haystack: string | undefined): boolean {\n if (haystack === undefined) return false;\n if (!this._excludeMatchCase) {\n haystack = haystack.toLowerCase();\n }\n\n for (let needle of this.excludeTags) {\n if (!this._excludeMatchCase) {\n needle = needle.toLowerCase();\n }\n if (haystack.indexOf(needle) !== -1) {\n return true;\n }\n }\n return false;\n }\n\n private isMatch(needle: string, haystack: string | undefined): boolean {\n if (haystack === undefined) return false;\n if (!this._matchCase) {\n needle = needle.toLowerCase();\n haystack = haystack.toLowerCase();\n }\n\n if (this._regex) {\n return haystack.search(needle) !== -1;\n }\n else {\n return haystack.indexOf(needle) !== -1;\n }\n }\n}\n\nexport const filterStore = new FilterStore();\n","import { makeAutoObservable, action } from \"mobx\";\nimport { apFileSystem } from \"./APFileSystem\";\nimport { messageQueueStore } from \"./MessageQueueStore\";\nimport { compressJSON } from \"./MainTabStore\";\nimport { filterStore } from \"./FilterStore\";\nimport { urlPathStore } from \"./UrlPathStore\";\nimport { getPluginFunc } from \"../Plugins\";\nimport GTag from \"../GTag\";\nimport { DefaultSortBy } from \"../components/JSONSpreadsheet\";\n\nexport const JSON_FIELDS_DIR = 'jsonFields';\nexport const SCRIPTS_DIR = 'scripts';\nconst jsonLogScriptFileName = 'jsonLogScript';\nconst BRIEF_JSON_FIELDS_FILE = 'briefJsonFields.json';\n\nexport type JsonField = { name: string; value: string | number | boolean }\n\nexport class JSONLogField {\n\tprivate dir = \"\";\n\tprivate name = \"\";\n\tprivate valid = true;\n\n\tpublic constructor(dir: string) {\n\t\tthis.dir = dir;\n\t\tmakeAutoObservable(this);\n\t}\n\n\tpublic shouldShowWnenBriefChecked() {\n\t\tconst checked = jsonLogStore.getBriefMap()[this.name] === true;\n\t\treturn checked;\n\t}\n\t@action public async toggleBriefChecked() {\n\t\tconst briefMap = jsonLogStore.getBriefMap();\n\t\tif (briefMap[this.name] === true) {\n\t\t\tdelete briefMap[this.name];\n\t\t} else {\n\t\t\tbriefMap[this.name] = true;\n\t\t}\n\t\tawait apFileSystem.writeFile(BRIEF_JSON_FIELDS_FILE, JSON.stringify(briefMap));\n\t}\n\n\tpublic getName() {\n\t\treturn this.name;\n\t}\n\n\t@action public async setNameAndValidate(name: string) {\n\t\tconst oldName = this.name;\n\t\tthis.name = name;\n\t\tif (this.valid && oldName !== '') {\n\t\t\tawait apFileSystem.deleteFile(this.dir + '/' + oldName);\n\t\t}\n\n\t\tthis.valid = true;\n\t\tif (name != '') {\n\t\t\ttry {\n\t\t\t\t// Verify that each sub-name is a valid key for an object\n\t\t\t\tfor (const key of name.split('.')) {\n\t\t\t\t\tlet obj: { [key: string]: string } = {};\n\t\t\t\t\tobj[key] = \"\";\n\t\t\t\t}\n\t\t\t\tconst dup = await apFileSystem.exists(this.dir + '/' + name);\n\t\t\t\tif (!dup) {\n\t\t\t\t\tawait apFileSystem.writeFile(this.dir + '/' + name, name);\n\t\t\t\t} else {\n\t\t\t\t\tthis.valid = false;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tthis.valid = false;\n\t\t\t}\n\t\t}\n\t}\n\n\t@action public setName(name: string) {\n\t\tthis.name = name;\n\t}\n\n\tpublic isValidName() {\n\t\treturn this.valid;\n\t}\n\n\tpublic getDir() {\n\t\treturn this.dir;\n\t}\n}\n\nexport const defaultScript =\n\t`\n\t// Function called to extract date, level, kind and message\n\t//\n\t// @param preJSONString: string - optional non-JSON string proceeding JSON object\n\t// @param jsonObject: {} - JSON log data\n\t// @returns {date: Date, level: string, category: string, kind: string, message: string, additionalJSON: {}, ignoreFields: string[] }\n\t//\n\t// category is the availability zone, processor...\n\t// kind is object kind, pod name, process ID...\n\t//\n\tconst parseJSON = function (preJSONString, jsonObject) {\n\t\tlet level = 'info';\n let date = new Date();\n let category = '';\n let kind= 'Kind_is_not_set';\n let message = 'Message is not set - Click \"?\" in upper right to extract fields from JSON';\n // return raw JSON (optional)\n let rawLine;\n // Copy any JSON fields not defined in jsonObject\n let additionalJSON = {};\n\t\tlet ignoreFields = [];\n\n // Set the level\n // level = jsonObject.m_level;\n\n // Set the date\n // date = jsonObject.my_date;\n\n // Set the kind\n //kind = jsonObject.my_app;\n\n // Set message\n //message = jsonObject.my_message;\n\n return { date, level, category, kind, message, rawLine, additionalJSON, ignoreFields };\n\t}\n`;\n\nexport type LogEntry = {\n\tdate: Date,\n\tlevel: string,\n\tcategory: string,\n\tappName: string, // deprecated\n\tkind: string,\n\tmessage: string,\n\trawLine: string,\n\tadditionalJSON: {},\n\tignoreFields: string[],\n};\n\nexport type SimpleFields = {\n\tdate: string,\n\tlevel: string,\n\tcategory: string,\n\tappName: string, // deprecated\n\tkind: string,\n\tmessage: string,\n\trawLine: string,\n}\n\nexport default class JSONLogStore {\n\tprivate method: 'auto' | 'simple' | 'advanced' | 'plugin' = 'advanced';\n\n\tprivate autoFields: SimpleFields = { date: '', level: '', category: '', appName: '', kind: '', message: '', rawLine: '' };\n\tprivate autoMaxFieldLevel: 1 | 2 = 1;\n\tprivate simpleFields: SimpleFields = { date: '', level: '', category: '', appName: '', kind: '', message: '', rawLine: '' };\n\n\tprivate briefChecked = true;\n\tprivate briefMap: { [key: string]: boolean } = {};\n\n\tprivate rawJsonChecked = false;\n\tprivate showUtcChecked = false;\n\n\tprivate script = defaultScript;\n\n\tprivate scriptFunc = (_logEntry: string, _logentryJson: object) => {\n\t\treturn { date: new Date(), level: '', category: '', appName: '', kind: '', message: '', rawLine: '', additionalJSON: {}, ignoreFields: [] };\n\t};\n\n\tprivate fields: JSONLogField[] = [];\n\n\tprivate hiddenFields: string[] = [];\n\n\tpublic constructor() {\n\t\tmakeAutoObservable(this);\n\t}\n\n\tpublic getParsingMethod() { return this.method; }\n\tpublic async setParsingMethod(method: 'auto' | 'simple' | 'advanced' | 'plugin') {\n\t\tthis.method = method;\n\t\tawait apFileSystem.writeFile(SCRIPTS_DIR + '/method', method);\n\t\tGTag.selectItem('JSON Parse Method', method);\n\t}\n\n\tpublic getAutoFields() { return this.autoFields; }\n\tpublic async setAutoFields(field: 'date' | 'level' | 'category' | 'kind' | 'message' | 'rawLine', value: string) {\n\t\tthis.autoFields[field] = value;\n\t}\n\n\tpublic getAutoMaxFieldLevel() { return this.autoMaxFieldLevel; }\n\tpublic setAutoMaxFieldLevel(level: 1 | 2) { this.autoMaxFieldLevel = level; }\n\n\tpublic getSimpleFields() { return this.simpleFields; }\n\tpublic async setSimpleFields(field: 'date' | 'level' | 'category' | 'kind' | 'message' | 'rawLine', value: string) {\n\t\tconst oldValue = this.simpleFields[field];\n\t\tthis.simpleFields[field] = value;\n\t\tif (oldValue !== '') {\n\t\t\tawait apFileSystem.deleteFile(SCRIPTS_DIR + '/' + field);\n\t\t}\n\t\tawait apFileSystem.writeFile(SCRIPTS_DIR + '/' + field, value);\n\t}\n\n\tpublic isFieldHidden(field: string): boolean {\n\t\treturn this.hiddenFields.includes(field);\n\t}\n\tpublic toggleHiddenField(field: string) {\n\t\tconst i = this.hiddenFields.indexOf(field);\n\t\tif (i === -1) {\n\t\t\tthis.hiddenFields.push(field);\n\t\t} else {\n\t\t\tthis.hiddenFields.splice(i, 1);\n\t\t}\n\t}\n\n\tpublic isBriefChecked() {\n\t\treturn this.briefChecked && jsonLogStore.getParsingMethod() !== 'auto' && jsonLogStore.getParsingMethod() !== 'simple';\n\t}\n\t@action public toggleBriefChecked() {\n\t\tthis.briefChecked = !this.briefChecked;\n\t\tfilterStore.filterUpdated();\n\t\tGTag.selectItem('More Detail Checked', this.briefChecked + '');\n\t}\n\tpublic getBriefMap() {\n\t\treturn this.briefMap;\n\t}\n\tpublic isBriefField(name: string) {\n\t\treturn this.briefMap[name] === true;\n\t}\n\n\tpublic isRawJsonChecked() {\n\t\treturn this.rawJsonChecked;\n\t}\n\t@action public toggleRawJsonChecked() {\n\t\tthis.rawJsonChecked = !this.rawJsonChecked;\n\t\tfilterStore.filterUpdated();\n\t\tGTag.selectItem('Show Raw JSON Checked', this.rawJsonChecked + '');\n\t}\n\n\tpublic isShowUtcChecked() {\n\t\treturn this.showUtcChecked;\n\t}\n\t@action public toggleShowUtcChecked() {\n\t\tthis.showUtcChecked = !this.showUtcChecked;\n\t\tfilterStore.filterUpdated();\n\t\tGTag.selectItem('UTC Time Checked', this.showUtcChecked + '');\n\t}\n\n\t@action public async resetScriptToDefault() {\n\t\tthis.script = defaultScript;\n\t\tawait apFileSystem.deleteFile(SCRIPTS_DIR + '/' + jsonLogScriptFileName);\n\t}\n\tpublic getScript() {\n\t\treturn this.script;\n\t}\n\t@action public setScript(script: string) {\n\t\tthis.script = script;\n\t}\n\t@action public async saveScript() {\n\t\tawait apFileSystem.writeFile(SCRIPTS_DIR + '/' + jsonLogScriptFileName, this.script);\n\t}\n\t@action public async updateScriptFunc() {\n\t\tif (this.method === 'plugin') {\n\t\t\tthis.scriptFunc = getPluginFunc(\"parseJSON\");\n\t\t} else {\n\t\t\tthis.scriptFunc = this.evalScript(this.script);\n\t\t}\n\t}\n\n\tprivate parseDate(value: string | number): Date | undefined {\n\t\tlet date: Date | undefined = undefined;\n\t\ttry {\n\t\t\tdate = new Date(value);\n\t\t\tif (date.toString() === 'Invalid Date' && typeof value === 'string') {\n\t\t\t\tconst tokens = value.split(':', 2);\n\t\t\t\tif (tokens.length === 2) {\n\t\t\t\t\tlet d = new Date(tokens[0]);\n\t\t\t\t\tdate = new Date(d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + ':' + tokens[1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (date.toString() === 'Invalid Date') date = undefined;\n\t\t} catch (e) {\n\t\t}\n\t\treturn date;\n\t}\n\n\t@action public extractJSONFields(nonJson: string,\n\t\tjsonData: { [key: string]: any },\n\t\tmethod: 'auto' | 'simple' | 'advanced' | 'plugin'\n\t): LogEntry {\n\n\t\tconst setAutoField = (field: 'date' | 'level' | 'category' | 'kind' | 'message' | 'rawLine') => {\n\t\t\tif (this.getAutoFields()[field].length === 0) {\n\t\t\t\tif (field === 'date') {\n\t\t\t\t\tlet dateKey = '';\n\t\t\t\t\tconst findDate = (jsonData: { [key: string]: any }, objectName: string) => {\n\t\t\t\t\t\tfor (const key in jsonData) {\n\t\t\t\t\t\t\tif (typeof jsonData[key] === 'object') {\n\t\t\t\t\t\t\t\tconst k = objectName ? objectName + '.' + key : key;\n\t\t\t\t\t\t\t\tfindDate(jsonData[key], k);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst keyLc = key.toLowerCase();\n\t\t\t\t\t\t\t\tif (keyLc.indexOf('time') !== -1 || keyLc.indexOf('date') !== -1) {\n\t\t\t\t\t\t\t\t\tconst value = jsonData[key];\n\t\t\t\t\t\t\t\t\tif (typeof value === 'string' || typeof value === 'number') {\n\t\t\t\t\t\t\t\t\t\tconst date = this.parseDate(value);\n\t\t\t\t\t\t\t\t\t\tif (date) {\n\t\t\t\t\t\t\t\t\t\t\tdateKey = objectName ? objectName + '.' + key : key;\n\t\t\t\t\t\t\t\t\t\t\tthis.setAutoFields(field, dateKey);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tfindDate(jsonData, '');\n\t\t\t\t} else if (field === 'level') {\n\t\t\t\t\tlet levelKey = '';\n\t\t\t\t\tfor (const key in jsonData) {\n\t\t\t\t\t\tconst keyLc = key.toLowerCase();\n\t\t\t\t\t\tif (keyLc === 'level' || keyLc === 'severity') {\n\t\t\t\t\t\t\tlevelKey = key;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.setAutoFields(field, levelKey);\n\t\t\t\t} else if (field === 'message') {\n\t\t\t\t\tlet messageKey = '';\n\t\t\t\t\tfor (const key in jsonData) {\n\t\t\t\t\t\tconst keyLc = key.toLowerCase();\n\t\t\t\t\t\tif (keyLc === 'message' || keyLc === 'msg') {\n\t\t\t\t\t\t\tmessageKey = key;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.setAutoFields(field, messageKey);\n\t\t\t\t} else {\n\t\t\t\t\tthis.setAutoFields(field, field);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst key = this.getAutoFields()[field];\n\t\t\tif (key.length !== 0) {\n\t\t\t\tconst jsonFields = lookupJSONField(jsonData, key);\n\t\t\t\tconst value = jsonFields.length === 0 ? undefined : jsonFields[0].value;\n\t\t\t\tif (field === 'date') {\n\t\t\t\t\tif (typeof value === 'string' || typeof value === 'number') {\n\t\t\t\t\t\tconst date = this.parseDate(value);\n\t\t\t\t\t\tif (date) {\n\t\t\t\t\t\t\tlogEntry.date = date;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (value) {\n\t\t\t\t\t\tlogEntry[field] = value + '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tlet logEntry: LogEntry = { date: new Date(), level: '', category: '', appName: '', kind: '', message: '', rawLine: '', additionalJSON: {}, ignoreFields: [] };\n\t\tswitch (method) {\n\t\t\tcase 'auto':\n\t\t\t\tsetAutoField('date');\n\t\t\t\tsetAutoField('level');\n\t\t\t\tsetAutoField('category');\n\t\t\t\tsetAutoField('kind');\n\t\t\t\tsetAutoField('message');\n\t\t\t\tlogEntry.rawLine = Object.keys(jsonData).length === 0 ? nonJson : JSON.stringify(jsonData);\n\t\t\t\tbreak;\n\t\t\tcase 'simple':\n\t\t\t\tconst simpleFields = jsonLogStore.getSimpleFields();\n\t\t\t\tif (simpleFields.date !== '') {\n\t\t\t\t\tfor (const jsonField of lookupJSONField(jsonData, simpleFields.date)) {\n\t\t\t\t\t\tif (jsonField && typeof jsonField.value === 'string') {\n\t\t\t\t\t\t\tconst date = this.parseDate(jsonField.value);\n\t\t\t\t\t\t\tif (date) {\n\t\t\t\t\t\t\t\tlogEntry.date = date;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst setField = (field: 'level' | 'category' | 'kind' | 'message' | 'rawLine') => {\n\t\t\t\t\tif (simpleFields[field] !== '') {\n\t\t\t\t\t\tfor (const jsonField of lookupJSONField(jsonData, simpleFields[field])) {\n\t\t\t\t\t\t\tif (typeof jsonField.value === 'string' || typeof jsonField?.value === 'number') {\n\t\t\t\t\t\t\t\tlogEntry[field] = jsonField.value + '';\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tsetField('level');\n\t\t\t\tsetField('category');\n\t\t\t\tsetField('kind');\n\t\t\t\tsetField('message');\n\t\t\t\tlogEntry.rawLine = Object.keys(jsonData).length === 0 ? nonJson : JSON.stringify(jsonData);\n\t\t\t\tbreak;\n\t\t\tcase 'advanced':\n\t\t\tcase 'plugin':\n\t\t\t\ttry {\n\t\t\t\t\tlogEntry = this.scriptFunc(nonJson, jsonData);\n\t\t\t\t\t// Deprecated kind is specified?\n\t\t\t\t\tif (logEntry.appName.length > 0) {\n\t\t\t\t\t\tlogEntry.kind = logEntry.appName;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.log(e);\n\t\t\t\t}\n\n\t\t\t\tif (logEntry.date === undefined ||\n\t\t\t\t\t!(logEntry.date instanceof Date) ||\n\t\t\t\t\tlogEntry.date.toString() === 'Invalid Date') {\n\t\t\t\t\tlogEntry.date = new Date();\n\t\t\t\t\tfor (const field in jsonData) {\n\t\t\t\t\t\tconst value = jsonData[field];\n\t\t\t\t\t\tif (typeof value === 'string' || typeof value === 'number') {\n\t\t\t\t\t\t\tconst date = this.parseDate(value);\n\t\t\t\t\t\t\tif (date) {\n\t\t\t\t\t\t\t\tlogEntry.date = date;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (logEntry.level === undefined) logEntry.level = '';\n\t\t\t\tif (logEntry.category === undefined) logEntry.category = '';\n\t\t\t\tif (logEntry.kind === undefined) logEntry.kind = '';\n\t\t\t\tif (logEntry.message === undefined) logEntry.message = '';\n\t\t\t\telse if (typeof logEntry.message === 'object') {\n\t\t\t\t\tlogEntry.message = JSON.stringify(logEntry.message);\n\t\t\t\t}\n\t\t\t\tif (logEntry.rawLine === undefined) logEntry.rawLine = Object.keys(jsonData).length === 0 ? nonJson : JSON.stringify(jsonData);\n\t\t\t\tif (logEntry.rawLine === undefined) logEntry.rawLine = '';\n\t\t\t\tbreak;\n\t\t}\n\t\tif (typeof logEntry.level === 'number') logEntry.level = logEntry.level + '';\n\t\treturn logEntry;\n\t}\n\n\tpublic evalScript(script: string) {\n\t\tlet scriptNoComments = '';\n\t\tfor (const line of script.split('\\n')) {\n\t\t\tconst lineTrim = line.trim();\n\t\t\tif (lineTrim.length > 0 && !lineTrim.startsWith('//')) {\n\t\t\t\tscriptNoComments += line;\n\t\t\t}\n\t\t}\n\t\tconst i = scriptNoComments.indexOf('function');\n\t\tconst func = scriptNoComments.substring(i);\n\t\tlet f = this.scriptFunc;\n\t\teval('f = ' + func);\n\t\treturn f;\n\t}\n\n\tpublic async init() {\n\t\treturn new Promise(async (resolve) => {\n\t\t\tif (await apFileSystem.exists(BRIEF_JSON_FIELDS_FILE)) {\n\t\t\t\tconst briefJsonFields = await apFileSystem.readFile(BRIEF_JSON_FIELDS_FILE);\n\t\t\t\tif (briefJsonFields.length > 0) {\n\t\t\t\t\tthis.briefMap = JSON.parse(briefJsonFields);\n\t\t\t\t}\n\t\t\t} else if (!urlPathStore.isLocalhost() && !urlPathStore.isGitHubPages()) {\n\t\t\t\tif (await apFileSystem.exists(BRIEF_JSON_FIELDS_FILE, 'serverFs')) {\n\t\t\t\t\tconst briefJsonFields = await apFileSystem.readFile(BRIEF_JSON_FIELDS_FILE, 'serverFs');\n\t\t\t\t\tif (briefJsonFields.length > 0) {\n\t\t\t\t\t\tthis.briefMap = JSON.parse(briefJsonFields);\n\t\t\t\t\t\tawait apFileSystem.writeFile(BRIEF_JSON_FIELDS_FILE, briefJsonFields);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet fileNames = await apFileSystem.readDir(JSON_FIELDS_DIR);\n\t\t\tif (fileNames.length === 0 && !urlPathStore.isLocalhost() && !urlPathStore.isGitHubPages()) {\n\t\t\t\tfileNames = await apFileSystem.readDir(JSON_FIELDS_DIR, 'serverFs');\n\t\t\t\tfor (const fileName of fileNames) {\n\t\t\t\t\tawait apFileSystem.writeFile(JSON_FIELDS_DIR + '/' + fileName, fileName);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst fields: JSONLogField[] = [];\n\t\t\tfor (const fileName of fileNames) {\n\t\t\t\tconst jsonField = new JSONLogField(JSON_FIELDS_DIR);\n\t\t\t\tjsonField.setName(fileName);\n\t\t\t\tfields.push(jsonField);\n\t\t\t\tfields.sort((a, b) => a.getName().localeCompare(b.getName()));\n\t\t\t}\n\t\t\tthis.fields = fields;\n\n\t\t\tif (await apFileSystem.exists(SCRIPTS_DIR + '/' + jsonLogScriptFileName)) {\n\t\t\t\tthis.script = await apFileSystem.readFile(SCRIPTS_DIR + '/' + jsonLogScriptFileName);\n\t\t\t}\n\t\t\tif (!urlPathStore.isLocalhost() && !urlPathStore.isGitHubPages() && this.script === defaultScript) {\n\t\t\t\tif (await apFileSystem.exists(SCRIPTS_DIR + '/' + jsonLogScriptFileName, 'serverFs')) {\n\t\t\t\t\tthis.script = await apFileSystem.readFile(SCRIPTS_DIR + '/' + jsonLogScriptFileName, 'serverFs');\n\t\t\t\t\tawait apFileSystem.writeFile(SCRIPTS_DIR + '/' + jsonLogScriptFileName, this.script);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst initSimpleField = async (field: 'date' | 'level' | 'category' | 'appName' | 'kind' | 'message' | 'rawLine') => {\n\t\t\t\tconst exists = await apFileSystem.exists(SCRIPTS_DIR + '/' + field);\n\t\t\t\tif (exists) {\n\t\t\t\t\tthis.simpleFields[field] = await apFileSystem.readFile(SCRIPTS_DIR + '/' + field);\n\t\t\t\t} else if (!urlPathStore.isLocalhost() && !urlPathStore.isGitHubPages()) {\n\t\t\t\t\tconst exists = await apFileSystem.exists(SCRIPTS_DIR + '/' + field, 'serverFs');\n\t\t\t\t\tif (exists) {\n\t\t\t\t\t\tthis.simpleFields[field] = await apFileSystem.readFile(SCRIPTS_DIR + '/' + field, 'serverFs');\n\t\t\t\t\t\tawait apFileSystem.writeFile(SCRIPTS_DIR + '/' + field, this.simpleFields[field]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tinitSimpleField('date');\n\t\t\tinitSimpleField('level');\n\t\t\tinitSimpleField('category');\n\t\t\tinitSimpleField('kind');\n\t\t\tinitSimpleField('appName'); // deprecated\n\t\t\tinitSimpleField('message');\n\t\t\tif (this.simpleFields.appName !== '' && this.simpleFields.kind === '') {\n\t\t\t\tthis.simpleFields.kind = this.simpleFields.appName;\n\t\t\t}\n\n\t\t\tconst exists = await apFileSystem.exists(SCRIPTS_DIR + '/method');\n\t\t\tif (exists) {\n\t\t\t\tconst method = await apFileSystem.readFile(SCRIPTS_DIR + '/method') as 'auto' | 'simple' | 'advanced' | 'plugin';\n\t\t\t\tif (method) {\n\t\t\t\t\tthis.method = method;\n\t\t\t\t}\n\t\t\t} else if (!urlPathStore.isLocalhost() && !urlPathStore.isGitHubPages()) {\n\t\t\t\tconst exists = await apFileSystem.exists(SCRIPTS_DIR + '/method', 'serverFs');\n\t\t\t\tif (exists) {\n\t\t\t\t\tconst method = await apFileSystem.readFile(SCRIPTS_DIR + '/method', 'serverFs') as 'auto' | 'simple' | 'advanced' | 'plugin';\n\t\t\t\t\tif (method) {\n\t\t\t\t\t\tthis.method = method;\n\t\t\t\t\t\tawait apFileSystem.writeFile(SCRIPTS_DIR + '/method', method);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t});\n\t}\n\n\tpublic getJSONFields() {\n\t\treturn this.fields;\n\t}\n\n\tpublic getJSONFieldNames(): string[] {\n\t\treturn this.fields.map(field => field.getName());\n\t}\n\n\t@action public extend() {\n\t\tthis.fields.unshift(new JSONLogField(JSON_FIELDS_DIR));\n\t}\n\n\t@action public async deleteEntry(index: number) {\n\t\tconst jsonField = this.fields[index];\n\t\tthis.fields.splice(index, 1);\n\t\tif (jsonField.getName() !== \"\") {\n\t\t\tif (await apFileSystem.exists(jsonField.getDir() + '/' + jsonField.getName())) {\n\t\t\t\tawait apFileSystem.deleteFile(jsonField.getDir() + '/' + jsonField.getName());\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport async function updateJSONRequestLabels() {\n\tconst messages = messageQueueStore.getMessages();\n\tconst copy = messages.slice();\n\tmessages.splice(0, messages.length);\n\tfor (const message of copy) message.updateJsonLog();\n\tmessages.push(...copy);\n}\n\nexport function formatJSONRequestLabels(json: { [key: string]: any }, fields: string[]): JsonField[] {\n\tconst jsonFields: JsonField[] = [];\n\tfields.forEach((field) => {\n\t\tif (Object.keys(json).length > 0) {\n\t\t\tfor (let jsonField of lookupJSONField(json, field, 'exact')) {\n\t\t\t\tif (field !== 'PREFIX') {\n\t\t\t\t\tfield = field.replaceAll('[.]', '.');\n\t\t\t\t\tif (typeof jsonField.value === 'string') {\n\t\t\t\t\t\tjsonField.value = formatValue(field, jsonField.value);\n\t\t\t\t\t}\n\t\t\t\t\tjsonFields.push({ name: field, value: jsonField.value });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn jsonFields;\n}\n\n\nlet jsonCacheEntries: { json: { [key: string]: string }, jsonFieldsMap: { [key: string]: JsonField[] } }[] = [];\n\nexport function getJsonFieldsMap(json: { [key: string]: string }): { [key: string]: JsonField[] } {\n\tfor (const entry of jsonCacheEntries) {\n\t\tif (json === entry.json) {\n\t\t\treturn entry.jsonFieldsMap;\n\t\t}\n\t}\n\n\tconst jsonFieldsMap: { [key: string]: JsonField[] } = {};\n\tconst addJsonFields = (prevField: string, json: { [key: string]: string }) => {\n\t\tfor (const curField in json) {\n\t\t\tconst value = json[curField];\n\t\t\tlet name = prevField === '' ? curField : prevField + '.' + curField;\n\t\t\tif (typeof value === 'object') {\n\t\t\t\tconst compressed = compressJSON(value);\n\t\t\t\tjsonFieldsMap[name.toLowerCase()] = [{ name, value: compressed }];\n\t\t\t\tconst unqualified = '*' + curField.toLowerCase();\n\t\t\t\tif (jsonFieldsMap[unqualified] === undefined) {\n\t\t\t\t\tjsonFieldsMap[unqualified] = [{ name, value: compressed }];\n\t\t\t\t} else {\n\t\t\t\t\tjsonFieldsMap[unqualified].push({ name, value: compressed });\n\t\t\t\t}\n\t\t\t\tif (!Array.isArray(value)) {\n\t\t\t\t\taddJsonFields(name, value);\n\t\t\t\t} else {\n\t\t\t\t\tconst a = value as any;\n\t\t\t\t\tfor (let i = 0; i < a.length; ++i) {\n\t\t\t\t\t\tconst name2 = name + '[' + i + ']';\n\t\t\t\t\t\tif (typeof a[i] === 'object') {\n\t\t\t\t\t\t\taddJsonFields(name2, a[i]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjsonFieldsMap[name2] = [{ name: name2, value: a[i] }];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tjsonFieldsMap[name.toLowerCase()] = [{ name, value }];\n\n\t\t\t\t// Unqualified field name is not defined yet?\n\t\t\t\tconst unqualified = '*' + curField.toLowerCase();\n\t\t\t\tif (jsonFieldsMap[unqualified] === undefined) {\n\t\t\t\t\tjsonFieldsMap[unqualified] = [{ name, value }];\n\t\t\t\t} else {\n\t\t\t\t\tjsonFieldsMap[unqualified].push({ name, value });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\taddJsonFields('', json);\n\n\tif (jsonCacheEntries.length > 5) {\n\t\tjsonCacheEntries.shift();\n\t}\n\tjsonCacheEntries.push({ json, jsonFieldsMap });\n\n\t//console.log(jsonFields);\n\treturn jsonFieldsMap;\n}\n\ntype Exact = 'exact' | 'any';\nexport function lookupJSONField(json: { [key: string]: any }, field: string, exact: Exact = 'any'): JsonField[] {\n\tif (json && Object.keys(json).length > 0) {\n\t\tconst jsonFieldsMap = getJsonFieldsMap(json);\n\t\tconst fieldLower = field.toLowerCase();\n\t\t//console.log(field);\n\t\t//console.log(jsonFields);\n\t\tconst jsonFields = jsonFieldsMap[fieldLower] || exact === 'exact' || jsonFieldsMap['*' + fieldLower];\n\t\t//console.log(jf);\n\t\tif (jsonFields) {\n\t\t\treturn jsonFields;\n\t\t}\n\t}\n\treturn [];\n}\n\nfunction formatValue(_name: string, value: string): string {\n\t// const lname = name.toLowerCase();\n\t// if (lname.indexOf('useragent') !== -1) {\n\t// \treturn value.split(' ')[0].split('/')[0];\n\t// } else if (lname.indexOf('uri') !== -1 || lname.indexOf('url') !== -1) {\n\t// \ttry {\n\t// \t\tconst url = new URL(value);\n\t// \t\treturn url.pathname;\n\t// \t} catch (e) {\n\t// \t\treturn value;\n\t// \t}\n\t// }\n\t// Remove double quotes\n\tif (value.charAt(0) === '\"') {\n\t\tvalue = value.substring(1);\n\t}\n\tif (value.charAt(value.length - 1) === '\"') {\n\t\tvalue = value.substring(0, value.length - 1);\n\t}\n\treturn value;\n}\n\nexport function getJsonSpreadsheetLines(fields: string[], sortBy: string): string[] {\n\tconst outputValues: string[] = [];\n\ttype Values = string[];\n\tlet valueArray: Values[] = [];\n\tfor (const messageStore of messageQueueStore.getMessages()) {\n\t\tif (messageStore.isFiltered()) continue;\n\t\tconst message = messageStore.getMessage();\n\t\tlet json: { [key: string]: string } = {};\n\t\tif (typeof message.responseBody === 'string') {\n\t\t\tjson = messageStore.getLogEntry().additionalJSON;\n\t\t} else {\n\t\t\tjson = {\n\t\t\t\t...messageStore.getLogEntry().additionalJSON,\n\t\t\t\t...message.responseBody\n\t\t\t};\n\t\t}\n\n\t\tconst values: Values = [];\n\t\tfor (const field of fields) {\n\t\t\tif (field === 'Time') {\n\t\t\t\tif (jsonLogStore.isShowUtcChecked()) {\n\t\t\t\t\tvalues.push(messageStore.getLogEntry().date.toISOString().split('T')[1]);\n\t\t\t\t} else {\n\t\t\t\t\tvalues.push(messageStore.getLogEntry().date.toTimeString().split(' ')[0]);\n\t\t\t\t}\n\t\t\t} else if (field === 'Level') {\n\t\t\t\tvalues.push(messageStore.getLogEntry().level);\n\t\t\t} else if (field === 'Message') {\n\t\t\t\tvalues.push(messageStore.getLogEntry().message);\n\t\t\t} else {\n\t\t\t\tconst jsonFields = lookupJSONField(json, field);\n\t\t\t\tif (jsonFields.length === 0) jsonFields.push({ name: field, value: 'undefined' });\n\t\t\t\tfor (const jsonField of jsonFields) {\n\t\t\t\t\tvalues.push(jsonField.value + '');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (values.join('').length > 0) {\n\t\t\tvalueArray.push(values);\n\t\t}\n\t}\n\n\tif (valueArray.length > 0) {\n\t\tif (sortBy !== DefaultSortBy) {\n\t\t\tconst i = fields.indexOf(sortBy);\n\t\t\tvalueArray = valueArray.sort((a, b) => (a[i] + '').localeCompare(b[i] + ''));\n\t\t}\n\t\tvalueArray.unshift([...fields]);\n\t\tconst lenOfFields: number[] = [];\n\t\tfor (let i = 0; i < fields.length; ++i)\tlenOfFields[i] = 0;\n\t\tfor (const values of valueArray) {\n\t\t\tfor (let i = 0; i < values.length; ++i) {\n\t\t\t\tlenOfFields[i] = Math.max(lenOfFields[i], values[i].length);\n\t\t\t}\n\t\t}\n\t\tfor (const values of valueArray) {\n\t\t\tlet value = '';\n\t\t\tfor (let i = 0; i < values.length; ++i) {\n\t\t\t\tif (i > 0) value += ' ';\n\t\t\t\tvalue += values[i] + ' '.repeat(lenOfFields[i] - values[i].length + 1);\n\t\t\t}\n\t\t\toutputValues.push(value);\n\t\t}\n\t}\n\n\tif (outputValues.length === 0) {\n\t\toutputValues.push('No matching JSON field found.');\n\t}\n\treturn outputValues;\n}\n\nexport const jsonLogStore = new JSONLogStore();\n","import { makeAutoObservable, action } from \"mobx\";\nimport GTag from \"../GTag\";\n\nexport default class LayoutStore {\n\tprivate verticalLayout = true;\n\tprivate nowrap = false;\n\n\tpublic constructor() {\n\t\tmakeAutoObservable(this);\n\t}\n\n\tpublic isNowrap() {\n\t\treturn this.nowrap;\n\t}\n\t@action toggleNowrap() {\n\t\tthis.nowrap = !this.nowrap;\n\t\tGTag.selectItem('No Wrap Checked', this.nowrap + '');\n\t}\n\n\tpublic isVertical() {\n\t\treturn this.verticalLayout;\n\t}\n\t@action public setVertical(verticalLayout: boolean) {\n\t\tthis.verticalLayout = verticalLayout;\n\t}\n\n\t@action public toggleVertical() {\n\t\tthis.verticalLayout = !this.verticalLayout;\n\t\tGTag.selectItem('Layout', this.verticalLayout ? 'vertical' : 'horizontal');\n\t}\n\n\tpublic flexDirection() {\n\t\treturn this.verticalLayout ? 'row' : 'column';\n\t}\n\n\tpublic requestContainer(unselected: boolean) {\n\t\tconst width = this.verticalLayout && !unselected ? `calc((${this.maxWidth()})/2)` : `calc(${this.maxWidth()})`;\n\t\tconst height = this.verticalLayout ? `calc(${this.maxHeight()})`\n\t\t\t: unselected ? `calc(${this.maxHeight()})` : `calc((${this.maxHeight()})/2)`;\n\t\treturn { width, height };\n\t}\n\n\tpublic responseContainer(unselected: boolean) {\n\t\tconst width = unselected ? '0px' : this.verticalLayout ? `calc((${this.maxWidth()})/2)` : `calc(${this.maxWidth()})`;\n\t\tconst deltaHeight = '1rem'; //this.verticalLayout ? '6rem' : '11rem';\n\t\tconst height = this.verticalLayout ? `calc(${this.maxHeight()} - ${deltaHeight})`\n\t\t\t: unselected ? `` : `calc((${this.maxHeight()} - ${deltaHeight})/2)`;\n\t\treturn { width, height };\n\t}\n\n\tpublic calcMaxHeight() {\n\t\treturn `calc(${this.maxHeight()})`;\n\t}\n\n\tpublic calcMaxWidth() {\n\t\treturn `calc(${this.maxWidth()})`;\n\t}\n\n\tprivate maxHeight = () => {\n\t\treturn `100vh - 9rem`;\n\t};\n\n\tprivate maxWidth = () => {\n\t\treturn `100vw - 13rem`; // must match App.css side-bar {width: 13rem;}\n\t}\n}","// Generated file. Do not edit\nexport var statusCodeToReasonPhrase = {\n \"202\": \"Accepted\",\n \"502\": \"Bad Gateway\",\n \"400\": \"Bad Request\",\n \"409\": \"Conflict\",\n \"100\": \"Continue\",\n \"201\": \"Created\",\n \"417\": \"Expectation Failed\",\n \"424\": \"Failed Dependency\",\n \"403\": \"Forbidden\",\n \"504\": \"Gateway Timeout\",\n \"410\": \"Gone\",\n \"505\": \"HTTP Version Not Supported\",\n \"418\": \"I'm a teapot\",\n \"419\": \"Insufficient Space on Resource\",\n \"507\": \"Insufficient Storage\",\n \"500\": \"Internal Server Error\",\n \"411\": \"Length Required\",\n \"423\": \"Locked\",\n \"420\": \"Method Failure\",\n \"405\": \"Method Not Allowed\",\n \"301\": \"Moved Permanently\",\n \"302\": \"Moved Temporarily\",\n \"207\": \"Multi-Status\",\n \"300\": \"Multiple Choices\",\n \"511\": \"Network Authentication Required\",\n \"204\": \"No Content\",\n \"203\": \"Non Authoritative Information\",\n \"406\": \"Not Acceptable\",\n \"404\": \"Not Found\",\n \"501\": \"Not Implemented\",\n \"304\": \"Not Modified\",\n \"200\": \"OK\",\n \"206\": \"Partial Content\",\n \"402\": \"Payment Required\",\n \"308\": \"Permanent Redirect\",\n \"412\": \"Precondition Failed\",\n \"428\": \"Precondition Required\",\n \"102\": \"Processing\",\n \"103\": \"Early Hints\",\n \"426\": \"Upgrade Required\",\n \"407\": \"Proxy Authentication Required\",\n \"431\": \"Request Header Fields Too Large\",\n \"408\": \"Request Timeout\",\n \"413\": \"Request Entity Too Large\",\n \"414\": \"Request-URI Too Long\",\n \"416\": \"Requested Range Not Satisfiable\",\n \"205\": \"Reset Content\",\n \"303\": \"See Other\",\n \"503\": \"Service Unavailable\",\n \"101\": \"Switching Protocols\",\n \"307\": \"Temporary Redirect\",\n \"429\": \"Too Many Requests\",\n \"401\": \"Unauthorized\",\n \"451\": \"Unavailable For Legal Reasons\",\n \"422\": \"Unprocessable Entity\",\n \"415\": \"Unsupported Media Type\",\n \"305\": \"Use Proxy\",\n \"421\": \"Misdirected Request\"\n};\nexport var reasonPhraseToStatusCode = {\n \"Accepted\": 202,\n \"Bad Gateway\": 502,\n \"Bad Request\": 400,\n \"Conflict\": 409,\n \"Continue\": 100,\n \"Created\": 201,\n \"Expectation Failed\": 417,\n \"Failed Dependency\": 424,\n \"Forbidden\": 403,\n \"Gateway Timeout\": 504,\n \"Gone\": 410,\n \"HTTP Version Not Supported\": 505,\n \"I'm a teapot\": 418,\n \"Insufficient Space on Resource\": 419,\n \"Insufficient Storage\": 507,\n \"Internal Server Error\": 500,\n \"Length Required\": 411,\n \"Locked\": 423,\n \"Method Failure\": 420,\n \"Method Not Allowed\": 405,\n \"Moved Permanently\": 301,\n \"Moved Temporarily\": 302,\n \"Multi-Status\": 207,\n \"Multiple Choices\": 300,\n \"Network Authentication Required\": 511,\n \"No Content\": 204,\n \"Non Authoritative Information\": 203,\n \"Not Acceptable\": 406,\n \"Not Found\": 404,\n \"Not Implemented\": 501,\n \"Not Modified\": 304,\n \"OK\": 200,\n \"Partial Content\": 206,\n \"Payment Required\": 402,\n \"Permanent Redirect\": 308,\n \"Precondition Failed\": 412,\n \"Precondition Required\": 428,\n \"Processing\": 102,\n \"Early Hints\": 103,\n \"Upgrade Required\": 426,\n \"Proxy Authentication Required\": 407,\n \"Request Header Fields Too Large\": 431,\n \"Request Timeout\": 408,\n \"Request Entity Too Large\": 413,\n \"Request-URI Too Long\": 414,\n \"Requested Range Not Satisfiable\": 416,\n \"Reset Content\": 205,\n \"See Other\": 303,\n \"Service Unavailable\": 503,\n \"Switching Protocols\": 101,\n \"Temporary Redirect\": 307,\n \"Too Many Requests\": 429,\n \"Unauthorized\": 401,\n \"Unavailable For Legal Reasons\": 451,\n \"Unprocessable Entity\": 422,\n \"Unsupported Media Type\": 415,\n \"Use Proxy\": 305,\n \"Misdirected Request\": 421\n};\n","import { statusCodeToReasonPhrase, reasonPhraseToStatusCode, } from './utils';\n/**\n * Returns the reason phrase for the given status code.\n * If the given status code does not exist, an error is thrown.\n *\n * @param {number|string} statusCode The HTTP status code\n * @returns {string} The associated reason phrase (e.g. \"Bad Request\", \"OK\")\n * */\nexport function getReasonPhrase(statusCode) {\n var result = statusCodeToReasonPhrase[statusCode.toString()];\n if (!result) {\n throw new Error(\"Status code does not exist: \" + statusCode);\n }\n return result;\n}\n/**\n * Returns the status code for the given reason phrase.\n * If the given reason phrase does not exist, undefined is returned.\n *\n * @param {string} reasonPhrase The HTTP reason phrase (e.g. \"Bad Request\", \"OK\")\n * @returns {string} The associated status code\n * */\nexport function getStatusCode(reasonPhrase) {\n var result = reasonPhraseToStatusCode[reasonPhrase];\n if (!result) {\n throw new Error(\"Reason phrase does not exist: \" + reasonPhrase);\n }\n return result;\n}\n/**\n * @deprecated\n *\n * Returns the reason phrase for the given status code.\n * If the given status code does not exist, undefined is returned.\n *\n * Deprecated in favor of getReasonPhrase\n *\n * @param {number|string} statusCode The HTTP status code\n * @returns {string|undefined} The associated reason phrase (e.g. \"Bad Request\", \"OK\")\n * */\nexport var getStatusText = getReasonPhrase;\n","import { makeAutoObservable, action } from \"mobx\";\nimport Message from '../common/Message';\nimport { importJsonLines } from \"../ImportJSONFile\";\nimport LayoutStore from \"./LayoutStore\";\nimport { DEFAULT_LIMIT, messageQueueStore } from \"./MessageQueueStore\";\nimport MessageStore from './MessageStore';\nimport fetchToCurl from 'fetch-to-curl';\nimport { namedQueriesStore, namedSubQueriesStore } from \"./NamedQueriesStore\";\nimport { isJsonLogTab } from \"../components/SideBar\";\nimport FileReaderStore from \"./FileReaderStore\";\nimport { jsonLogStore, updateJSONRequestLabels } from \"./JSONLogStore\";\nimport { getPluginFunc } from \"../Plugins\";\nimport { Content, Har, Header, PostData, QueryString } from \"har-format\";\nimport { getReasonPhrase } from 'http-status-codes';\n\nexport const PROXY_TAB_NAME = 'Proxy';\n\nclass MainTabs {\n\tprivate tabs: Map = new Map();\n\tprivate names: string[] = [];\n\tprivate selectedReqSeqNumbers: number[] = [];\n\tprivate scrollTop: number[] = [];\n\tprivate renderSetTopIndex: number[] = [];\n\tprivate highlightSeqNum: number[] = [];\n\tprivate fileNameMap: Map = new Map();\n\tprivate jsonSearchFieldsMap: Map = new Map();\n\tprivate layoutMap: Map = new Map();\n\tprivate fileReaderStores: (FileReaderStore | undefined)[] = [];\n\n\tconstructor() {\n\t\tmakeAutoObservable(this);\n\t}\n\n\tpublic get(key: string): MessageStore[] {\n\t\treturn this.tabs.get(key)!;\n\t}\n\n\tpublic set(\n\t\tkey: string,\n\t\tmessageStores: MessageStore[],\n\t\tfileName?: string,\n\t\tselectedReqSeqNumber = Number.MAX_SAFE_INTEGER,\n\t\tscrollTop = 0,\n\t\tjsonSearchFields: string[] = [],\n\t\tlayout: LayoutStore = new LayoutStore(),\n\t\thighlightSeqNum = Number.MAX_SAFE_INTEGER,\n\t\trenderSetTopIndex = 0\n\t) {\n\t\tthis.tabs.set(key, messageStores);\n\t\tthis.names.push(key);\n\t\tthis.selectedReqSeqNumbers.push(selectedReqSeqNumber);\n\t\tthis.scrollTop.push(scrollTop);\n\t\tthis.renderSetTopIndex.push(renderSetTopIndex);\n\t\tthis.highlightSeqNum.push(highlightSeqNum);\n\t\tif (fileName) {\n\t\t\tthis.fileNameMap.set(key, fileName);\n\t\t}\n\t\tthis.jsonSearchFieldsMap.set(key, jsonSearchFields);\n\t\tthis.layoutMap.set(key, layout);\n\t\tthis.fileReaderStores.push(undefined);\n\t}\n\n\tpublic delete(key: string) {\n\t\tthis.tabs.delete(key);\n\t\tconst index = this.names.indexOf(key);\n\t\tthis.names.splice(index, 1);\n\t\tthis.selectedReqSeqNumbers.splice(index, 1);\n\t\tthis.scrollTop.splice(index, 1);\n\t\tthis.renderSetTopIndex.splice(index, 1);\n\t\tthis.highlightSeqNum.splice(index, 1);\n\t\tthis.fileNameMap.delete(key);\n\t\tthis.jsonSearchFieldsMap.delete(key);\n\t\tthis.layoutMap.delete(key);\n\t\tthis.fileReaderStores.splice(index, 1);\n\t}\n\n\tpublic count() {\n\t\treturn this.names.length;\n\t}\n\n\tpublic getNames(): string[] {\n\t\treturn this.names;\n\t}\n\n\tpublic getSelectedReqSeqNumbers(): number[] {\n\t\treturn this.selectedReqSeqNumbers;\n\t}\n\n\tpublic getScrollTop(): number[] {\n\t\treturn this.scrollTop;\n\t}\n\n\tpublic getRenderSetTopIndex(): number[] {\n\t\treturn this.renderSetTopIndex;\n\t}\n\n\tpublic getHighlightSeqNum(): number[] {\n\t\treturn this.highlightSeqNum;\n\t}\n\n\tpublic getFileName(key: string): string | undefined {\n\t\treturn this.fileNameMap.get(key);\n\t}\n\n\tpublic getJsonSearchFields(key: string): string[] {\n\t\tlet fields = this.jsonSearchFieldsMap.get(key);\n\t\tif (!fields) {\n\t\t\tfields = [];\n\t\t\tthis.jsonSearchFieldsMap.set(key, fields);\n\t\t}\n\t\treturn fields;\n\t}\n\n\tpublic getLayout(key: string) {\n\t\treturn this.layoutMap.get(key);\n\t}\n\n\tpublic getFileReaderStores(): (FileReaderStore | undefined)[] {\n\t\treturn this.fileReaderStores;\n\t}\n}\n\nexport default class MainTabStore {\n\tprivate selectedTabName = PROXY_TAB_NAME;\n\tprivate tabs: MainTabs = new MainTabs();\n\tprivate count = 0;\n\tprivate updating = false;\n\tprivate updatingMessage = '';\n\tprivate notes = '';\n\n\tpublic constructor() {\n\t\tthis.tabs.set(PROXY_TAB_NAME, []);\n\t\tmakeAutoObservable(this);\n\t}\n\n\tpublic getNotes() {\n\t\treturn this.notes;\n\t}\n\n\t@action public setNotes(notes: string) {\n\t\tthis.notes = notes;\n\t}\n\n\tpublic isUpdating() {\n\t\treturn this.updating;\n\t}\n\t@action setUpdating(updating: boolean, message: string = \"Updating...\") {\n\t\tthis.updating = updating;\n\t\tthis.updatingMessage = message;\n\t}\n\tpublic getUpdatingMessage() {\n\t\treturn this.updatingMessage;\n\t}\n\n\tpublic getTabs() {\n\t\treturn this.tabs;\n\t}\n\n\tpublic isProxyTabSelected() {\n\t\treturn this.selectedTabName === PROXY_TAB_NAME;\n\t}\n\n\tpublic getProxyTab(): MessageStore[] {\n\t\treturn this.tabs.get(PROXY_TAB_NAME);\n\t}\n\n\tpublic getTabNames(): string[] {\n\t\treturn this.tabs.getNames();\n\t}\n\n\tpublic getSelectedReqSeqNumbers(): number[] {\n\t\treturn this.tabs.getSelectedReqSeqNumbers();\n\t}\n\n\tpublic getScrollTop(): number[] {\n\t\treturn this.tabs.getScrollTop();\n\t}\n\n\tpublic getRenderSetTopIndex(): number[] {\n\t\treturn this.tabs.getRenderSetTopIndex();\n\t}\n\n\tpublic getHightlightSeqNum(): number[] {\n\t\treturn this.tabs.getHighlightSeqNum();\n\t}\n\n\tpublic getTabName(name: string): string {\n\t\tconst fileName = this.tabs.getFileName(name);\n\t\tif (fileName) {\n\t\t\treturn fileName;\n\t\t} else {\n\t\t\treturn 'TAB';\n\t\t}\n\t}\n\n\tpublic addJsonSearchField(tabName: string, field: string) {\n\t\tif (!jsonLogStore.getJSONFieldNames().includes(field)) {\n\t\t\tconst fields = this.tabs.getJsonSearchFields(tabName);\n\t\t\tif (!fields.includes(field)) {\n\t\t\t\tfields.push(field);\n\t\t\t\tupdateJSONRequestLabels();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic getJsonSearchFieldNames(name: string) {\n\t\tconst names = this.tabs.getJsonSearchFields(name);\n\t\treturn names ? names : [];\n\t}\n\n\tpublic getLayout(name: string) {\n\t\treturn this.tabs.getLayout(name);\n\t}\n\n\tpublic getFileReaderStores() {\n\t\treturn this.tabs.getFileReaderStores();\n\t}\n\n\tpublic getTabCount() {\n\t\treturn this.tabs.count();\n\t}\n\n\tpublic getTabMessageCount(name: string) {\n\t\treturn this.tabs.get(name).length;\n\t}\n\n\tpublic getSelectedTabName(): string {\n\t\treturn this.selectedTabName;\n\t}\n\n\t@action public setSelectedTabName(name: string) {\n\t\tthis.selectedTabName = name;\n\t\tmessageQueueStore.resort();\n\t\tfor (const messageStore of mainTabStore.getSelectedMessages()) {\n\t\t\tmessageStore.setFiltered(undefined);\n\t\t}\n\t\tsetTimeout(() => {\n\t\t\tnamedQueriesStore.setLogType(isJsonLogTab() ? 'json' : 'proxy');\n\t\t\tnamedSubQueriesStore.setLogType(isJsonLogTab() ? 'json' : 'proxy');\n\t\t});\n\t}\n\n\tpublic getSelectedTabIndex(): number {\n\t\tfor (let i = 0; i < this.tabs.getNames().length; ++i) {\n\t\t\tconst name = this.tabs.getNames()[i];\n\t\t\tif (name === this.selectedTabName) return i;\n\t\t}\n\t\treturn 0;\n\t}\n\n\t@action public newTab(fileName?: string, messageStores?: MessageStore[]): string {\n\t\tconst padTime = (num: number) => (num + '').padStart(2, '0');\n\t\tconst date = new Date();\n\t\tconst hours = (date.getHours() >= 12 ? date.getHours() - 12 : date.getHours()) + 1;\n\t\tconst name = 'Tab ' + padTime(hours) + ':' + padTime(date.getMinutes()) + '.' + padTime(date.getSeconds()) + ' ' + this.count++;\n\t\tif (messageStores) {\n\t\t\tconst layoutStore = new LayoutStore();\n\t\t\tlayoutStore.setVertical(messageStores.length === 0 || messageStores[0].getMessage().protocol !== 'log:');\n\t\t\tthis.tabs.set(name, messageStores, fileName, Number.MAX_SAFE_INTEGER, 0, [], layoutStore);\n\t\t} else {\n\t\t\t// Copy the proxy tab data to new tab\n\t\t\tconst proxyTab = this.tabs.get(PROXY_TAB_NAME);\n\t\t\tconst copy = proxyTab.slice();\n\t\t\tproxyTab.splice(0, proxyTab.length);\n\t\t\tthis.tabs.set(\n\t\t\t\tname,\n\t\t\t\tcopy,\n\t\t\t\tfileName,\n\t\t\t\tthis.getSelectedReqSeqNumbers()[0],\n\t\t\t\tthis.getScrollTop()[0],\n\t\t\t\t[],\n\t\t\t\tthis.getLayout(PROXY_TAB_NAME),\n\t\t\t\tthis.getHightlightSeqNum()[0],\n\t\t\t);\n\t\t}\n\t\tthis.setSelectedTabName(name);\n\t\treturn name;\n\t}\n\n\tpublic deleteTab(name: string) {\n\t\tthis.tabs.delete(name);\n\t\tif (this.selectedTabName === name) {\n\t\t\tthis.setSelectedTabName(PROXY_TAB_NAME);\n\t\t}\n\t}\n\n\tpublic deleteAllTabs() {\n\t\tfor (const name of this.tabs.getNames().slice()) {\n\t\t\tif (name !== PROXY_TAB_NAME) {\n\t\t\t\tthis.deleteTab(name);\n\t\t\t}\n\t\t}\n\t\tthis.setSelectedTabName(PROXY_TAB_NAME);\n\t}\n\n\tpublic copySelectedTab(): string {\n\t\tlet messages: Message[] = [];\n\t\tfor (const messageStore of this.getSelectedMessages()) {\n\t\t\tmessages.push(messageStore.getMessage());\n\t\t}\n\t\tlet data = \"\";\n\t\tif (isJsonLogTab()) {\n\t\t\tfor (const message of messages) {\n\t\t\t\tconst messageStore = new MessageStore(message);\n\t\t\t\tif (messageStore.isFiltered()) continue;\n\t\t\t\tlet json = message.responseBody as { [key: string]: any };\n\t\t\t\tconst prefix = json['PREFIX'];\n\t\t\t\tif (prefix) {\n\t\t\t\t\tdelete json['PREFIX'];\n\t\t\t\t}\n\t\t\t\t// message.path is any non-json data before JSON object. It is called the PREFIX.\n\t\t\t\tconst line = message.path + JSON.stringify(message.responseBody);\n\t\t\t\tdata += line + '\\n';\n\t\t\t\tif (prefix) {\n\t\t\t\t\tjson['PREFIX'] = prefix;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tdata = JSON.stringify(messages, null, 2);\n\t\t}\n\t\treturn data;\n\t}\n\n\tpublic copyMessage(message: MessageStore): string {\n\t\tlet line = message.getLogEntry().rawLine;\n\t\tline = line.replace(/\\\\\"/g, '');\n\t\treturn line;\n\t}\n\n\tpublic copyAsCurl(message: Message): string {\n\t\treturn fetchToCurl({\n\t\t\turl: message.url,\n\t\t\theaders: getSafeHeaders(message),\n\t\t\tmethod: message.method,\n\t\t\tbody: message.requestBody ? message.requestBody : undefined\n\t\t});\n\t}\n\n\tpublic copyAsHAR(message: Message): string {\n\t\tconst requestHeaders: Header[] = [];\n\t\tfor (const key in message.requestHeaders) {\n\t\t\trequestHeaders.push({ name: key, value: message.requestHeaders[key] });\n\t\t}\n\t\tconst url = new URL(message.url as string);\n\t\tconst queryString: QueryString[] = [];\n\t\turl.searchParams.forEach((value, key) => {\n\t\t\tqueryString.push({ name: key, value: value as string });\n\t\t});\n\t\tconst postData: PostData | undefined = message.requestBody ? {\n\t\t\tmimeType: message.requestHeaders['content-type'],\n\t\t\ttext: JSON.stringify(message.requestBody),\n\t\t} : undefined;\n\t\tconst content: Content = {\n\t\t\tsize: parseInt(message.responseHeaders['content-length'] ? message.responseHeaders['content-length'] : \"-1\"),\n\t\t\tmimeType: message.responseHeaders['content-type'],\n\t\t\ttext: message.responseBody ? JSON.stringify(message.responseBody) : undefined,\n\t\t};\n\n\t\tconst responseHeaders: Header[] = [];\n\t\tfor (const key in message.responseHeaders) {\n\t\t\tresponseHeaders.push({ name: key, value: message.responseHeaders[key] });\n\t\t}\n\n\t\tconst har: Har = {\n\t\t\tlog: {\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tstartedDateTime: new Date(message.timestamp).toUTCString(),\n\t\t\t\t\t\ttime: message.elapsedTime,\n\t\t\t\t\t\trequest: {\n\t\t\t\t\t\t\tmethod: message.method as string,\n\t\t\t\t\t\t\turl: url.href,\n\t\t\t\t\t\t\thttpVersion: \"HTTP/1.1\",\n\t\t\t\t\t\t\theaders: requestHeaders,\n\t\t\t\t\t\t\tcookies: [],\n\t\t\t\t\t\t\tqueryString: queryString,\n\t\t\t\t\t\t\tbodySize: -1,\n\t\t\t\t\t\t\theadersSize: -1,\n\t\t\t\t\t\t\tpostData: postData,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tstatus: message.status,\n\t\t\t\t\t\t\tstatusText: getReasonPhrase(message.status),\n\t\t\t\t\t\t\thttpVersion: \"HTTP/1.1\",\n\t\t\t\t\t\t\theaders: responseHeaders,\n\t\t\t\t\t\t\tcontent: content,\n\t\t\t\t\t\t\theadersSize: -1,\n\t\t\t\t\t\t\tbodySize: -1,\n\t\t\t\t\t\t\tcookies: [],\n\t\t\t\t\t\t\tredirectURL: \"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcache: {},\n\t\t\t\t\t\ttimings: {\n\t\t\t\t\t\t\twait: message.elapsedTime,\n\t\t\t\t\t\t\treceive: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tversion: \"\",\n\t\t\t\tcreator: {\n\t\t\t\t\tname: \"\",\n\t\t\t\t\tversion: \"\"\n\t\t\t\t},\n\t\t\t}\n\t\t};\n\n\t\treturn JSON.stringify(har, null, \" \");\n\n\t\t// return fetchToCurl({\n\t\t// \turl: message.url,\n\t\t// \theaders: getSafeHeaders(message),\n\t\t// \tmethod: message.method,\n\t\t// \tbody: message.requestBody ? message.requestBody : undefined\n\t\t// });\n\t}\n\n\tpublic exportSelectedTab(fileName: string) {\n\t\tconst data = this.copySelectedTab();\n\t\tconst file = new Blob([data], { type: 'text/plain' });\n\t\tconst element = document.createElement(\"a\");\n\t\telement.href = URL.createObjectURL(file);\n\n\t\tconst extension = isJsonLogTab() ? '.json' : '.allproxy';\n\t\telement.download = fileName + extension;\n\t\tdocument.body.appendChild(element); // Required for this to work in FireFox\n\t\telement.click();\n\t}\n\n\tpublic importTabFromFile(tabName: string, data: string) {\n\t\tlet messages: Message[] = [];\n\t\tlet sortRequired: 'sort' | undefined;\n\t\ttry {\n\t\t\tmessages = JSON.parse(data);\n\t\t\tsortRequired = undefined; // no need to re-sort\n\t\t} catch (e) {\n\t\t\tconsole.log('importJSONFile');\n\t\t\tconst lines = data.split('\\n');\n\t\t\tmessages = importJsonLines(tabName, lines);\n\t\t\tsortRequired = 'sort';\n\t\t}\n\t\tthis.importTab(tabName, messages, sortRequired);\n\t}\n\n\tpublic importTab(\n\t\ttabName: string,\n\t\tmessages: Message[],\n\t\tsortRequired?: 'sort' | undefined,\n\t\tmaxLines = Number.MAX_SAFE_INTEGER,\n\t\tstartTime: string = '',\n\t\tendTime: string = '',\n\t): number {\n\t\tjsonLogStore.updateScriptFunc();\n\t\tupdateJSONRequestLabels();\n\n\t\t// Call importJSON plugin\n\t\tconst jsonObjects: {}[] = [];\n\t\tfor (const message of messages) {\n\t\t\tif (message.protocol === 'log:' && typeof message.responseBody === 'object') {\n\t\t\t\tjsonObjects.push(message.responseBody);\n\t\t\t}\n\t\t}\n\t\tif (jsonObjects.length > 0) {\n\t\t\tgetPluginFunc(\"importJSON\")(jsonObjects);\n\t\t}\n\n\t\tlet startTimeDate = new Date(0);\n\t\tlet endTimeDate = new Date();\n\t\tif (startTime !== '') {\n\t\t\tstartTimeDate = new Date(startTime);\n\t\t}\n\t\tif (endTime !== '') {\n\t\t\tendTimeDate = new Date(endTime);\n\t\t}\n\n\t\tconst messageStores: MessageStore[] = [];\n\t\tfor (const message of messages) {\n\t\t\tconst ms = new MessageStore(message);\n\n\t\t\tif (startTime !== '' || endTime !== '') {\n\t\t\t\tconst date = ms.getLogEntry().date;\n\t\t\t\tif (date.toString() === 'Invalid Date') continue;\n\t\t\t\tif (date < startTimeDate || date > endTimeDate) continue;\n\t\t\t}\n\n\t\t\tif (messageStores.length <= maxLines) {\n\t\t\t\tmessageStores.push(ms);\n\t\t\t}\n\t\t}\n\n\t\tif (sortRequired === 'sort') {\n\t\t\tmessageStores.sort((a, b) => {\n\t\t\t\tlet dateA: Date = a.getLogEntry().date;\n\t\t\t\tlet dateB: Date = b.getLogEntry().date;\n\t\t\t\tif (dateA < dateB) {\n\t\t\t\t\treturn -1;\n\t\t\t\t} else if (dateA > dateB) {\n\t\t\t\t\treturn 1;\n\t\t\t\t} else {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t});\n\t\t\tmessageStores.map((m, i) => {\n\t\t\t\tconst message = m.getMessage();\n\t\t\t\tmessage.sequenceNumber = message.sequenceNumberRes = i;\n\t\t\t});\n\t\t}\n\n\t\tconst size = messageStores.length;\n\n\t\tconst chunkSize = DEFAULT_LIMIT;\n\t\twhile (messageStores.length > 0) {\n\t\t\tif (messageStores.length > chunkSize) {\n\t\t\t\tconst copy = messageStores.splice(0, chunkSize);\n\t\t\t\tthis.newTab(tabName, copy);\n\t\t\t\ttabName = copy[0].getLogEntry().date.toISOString().split(\"T\")[1];\n\t\t\t} else {\n\t\t\t\tthis.newTab(tabName, messageStores);\n\t\t\t\tmessageStores.splice(0, messageStores.length);\n\t\t\t}\n\t\t}\n\n\t\treturn size;\n\t}\n\n\tpublic getSelectedMessages(): MessageStore[] {\n\t\tconst messageStores = this.tabs.get(this.selectedTabName);\n\t\treturn messageStores;\n\t}\n}\n\nfunction getSafeHeaders(message: Message) {\n\tconst headers: { [key: string]: string } = {};\n\tconst unsafeHeaders = [\n\t\t'host',\n\t\t'connection',\n\t\t'content-length',\n\t\t'origin',\n\t\t'referer',\n\t\t'accept-encoding',\n\t\t'cookie',\n\t\t'sec-fetch-dest',\n\t\t'proxy-connection',\n\t\t'user-agent',\n\t\t'allproxy',\n\t];\n\tfor (const header in message.requestHeaders) {\n\t\tif (unsafeHeaders.indexOf(header) === -1) {\n\t\t\tif (header === 'authorization') {\n\t\t\t\theaders[header] = 'Bearer $token';\n\t\t\t} else {\n\t\t\t\theaders[header] = message.requestHeaders[header];\n\t\t\t}\n\t\t}\n\t}\n\treturn headers;\n}\n\n\nexport function compressJSON(json: object) {\n\tlet line = JSON.stringify(json);\n\tline = line.replace(/\\n/g, '');\n\tline = line.replace(/\\r/g, '');\n\tline = line.replace(/\\\\\"/g, '');\n\t//line = line.replace(/ /g, '');\n\treturn line;\n}\n\nexport const mainTabStore = new MainTabStore();","import { makeAutoObservable, action } from \"mobx\";\nimport Message, { NO_RESPONSE } from '../common/Message';\nimport MessageStore from './MessageStore';\nimport { PROXY_TAB_NAME, mainTabStore } from './MainTabStore';\nimport { dateToHHMMSS } from \"../components/Request\";\nimport GTag from \"../GTag\";\n\nexport const DEFAULT_LIMIT = 50000;\nconst LOCAL_STORAGE_LIMIT = 'allproxy-limit';\n\nexport default class MessageQueueStore {\n\tprivate limit: number = _getLimit();\n\tprivate stopped: boolean = false;\n\n\tprivate scrollAction: 'top' | 'bottom' | 'pageup' | 'pagedown' | 'filter' | undefined = undefined;\n\n\tprivate sortByReq: boolean = true;\n\n\tprivate sortOrder: \"desc\" | \"asc\" = 'asc';\n\tprivate sortByField: string | undefined;\n\n\tprivate savaQueries = false;\n\tprivate fullPageSearch = false;\n\tprivate showAPI = true;\n\tprivate showTooltip = false;\n\tprivate showUserAgent = false;\n\tprivate layout: 'Default' | 'Search Match' | 'Raw Response' = 'Default';\n\n\tprivate scrollToSeqNum: number | null = null;\n\tprivate highlightSeqNum: number | null = null;\n\n\tpublic constructor() {\n\t\tmakeAutoObservable(this);\n\t}\n\n\tpublic getScrollToSeqNum() {\n\t\treturn this.scrollToSeqNum;\n\t}\n\t@action public setScrollToSeqNum(seqNum: number | null) {\n\t\tthis.scrollToSeqNum = seqNum;\n\t\t// if (seqNum !== null) {\n\t\t// \tthis.forceRerender();\n\t\t// }\n\t\t//console.log(seqNum);\n\t\treturn seqNum;\n\t}\n\tpublic getHighlightSeqNum() {\n\t\treturn this.highlightSeqNum;\n\t}\n\t@action public setHighlightSeqNum(seqNum: number | null) {\n\t\tthis.highlightSeqNum = seqNum;\n\t}\n\n\tpublic getSaveQueriesFeature() {\n\t\treturn this.savaQueries;\n\t}\n\t@action public toggleSaveQueriesFeature() {\n\t\tthis.savaQueries = !this.savaQueries;\n\t}\n\n\tpublic getFullPageSearch() {\n\t\treturn this.fullPageSearch;\n\t}\n\t@action public toggleFullPageSearch() {\n\t\tthis.fullPageSearch = !this.fullPageSearch;\n\t}\n\n\tpublic getShowAPI() {\n\t\treturn this.showAPI;\n\t}\n\t@action public toggleShowAPI() {\n\t\tthis.showAPI = !this.showAPI;\n\t}\n\n\tpublic getLayout() {\n\t\treturn this.layout;\n\t}\n\t@action public setLayout(layout: 'Default' | 'Search Match' | 'Raw Response') {\n\t\tthis.layout = layout;\n\t}\n\n\tpublic getShowTooltip() {\n\t\treturn this.showTooltip;\n\t}\n\t@action public toggleShowTooltip() {\n\t\tthis.showTooltip = !this.showTooltip;\n\t\tGTag.selectItem('Show Tooltip Checked', this.showTooltip + '');\n\t}\n\n\tpublic getShowUserAgent() {\n\t\treturn this.showUserAgent;\n\t}\n\t@action public toggleShowRequestUA() {\n\t\tthis.showUserAgent = !this.showUserAgent;\n\t\tGTag.selectItem('Show User Agent Checked', this.showUserAgent + '');\n\t}\n\n\tpublic getSortOrder() {\n\t\treturn this.sortOrder;\n\t}\n\t@action public setSortOrder(order: \"desc\" | \"asc\") {\n\t\tthis.sortOrder = order;\n\t\tGTag.selectItem('Sort Order', this.sortOrder);\n\t}\n\tpublic getSortByField() {\n\t\treturn this.sortByField;\n\t}\n\t@action public setSortByField(field: string | undefined) {\n\t\tthis.sortByField = field;\n\t\tif (field) {\n\t\t\tGTag.selectItem('Sort By Field', field);\n\t\t}\n\t}\n\t@action public sortOrderChanged() {\n\t\tthis.sort();\n\t}\n\n\tpublic getLimit(): number {\n\t\treturn this.limit;\n\t}\n\n\t@action public setLimit(limit: number) {\n\t\tlocalStorage.setItem(LOCAL_STORAGE_LIMIT, limit + '');\n\t\tthis.limit = limit;\n\t}\n\n\tpublic getStopped(): boolean {\n\t\treturn this.stopped;\n\t}\n\n\t@action public setStopped(stopped: boolean) {\n\t\tthis.stopped = stopped;\n\t\tGTag.selectItem('Capture Stopped', this.stopped + '');\n\t}\n\n\t@action public toggleStopped() {\n\t\tthis.stopped = !this.stopped;\n\t\tGTag.selectItem('Capture Stopped', this.stopped + '');\n\t}\n\n\tpublic getScrollAction(): 'top' | 'bottom' | 'pageup' | 'pagedown' | 'filter' | undefined {\n\t\treturn this.scrollAction;\n\t}\n\n\t@action public setScrollAction(action: 'top' | 'bottom' | 'pageup' | 'pagedown' | 'filter' | undefined) {\n\t\tthis.scrollAction = action;\n\t\tif (action === 'top' || action === 'bottom') {\n\t\t\tGTag.selectItem('Scroll', action);\n\t\t}\n\t}\n\n\tpublic getSortByReq(): boolean {\n\t\treturn this.sortByReq;\n\t}\n\n\t@action public toggleSortBy() {\n\t\tthis.sortByReq = !this.sortByReq;\n\t\tthis.sort();\n\t}\n\n\t@action public resort() {\n\t\tthis.sort();\n\t}\n\n\t@action public clear() {\n\t\tmainTabStore.getProxyTab().splice(0, mainTabStore.getProxyTab().length);\n\t\tthis.stopped = false;\n\t}\n\n\tpublic getMessages(): MessageStore[] {\n\t\treturn mainTabStore.getSelectedMessages();\n\t}\n\n\tpublic getTotalLength() {\n\t\tlet count = this.getMessages().length;\n\t\treturn count;\n\t}\n\n\tpublic getUnfilteredCount() {\n\t\tlet count = 0;\n\t\tfor (const message of this.getMessages()) {\n\t\t\tif (!message.isFiltered()) {\n\t\t\t\t++count;\n\t\t\t}\n\t\t}\n\t\treturn count;\n\t}\n\n\t@action private sort() {\n\t\tconst selectedMessages = mainTabStore.getSelectedMessages();\n\t\tconst copyMessages = selectedMessages.slice(); // shallow copy\n\n\t\tthis.sortCopy(copyMessages);\n\n\t\tselectedMessages.splice(0, selectedMessages.length);\n\t\tArray.prototype.push.apply(selectedMessages, copyMessages);\n\t}\n\n\tprivate sortCopy(copyMessages: MessageStore[]) {\n\t\tconst getField = (messageStore: MessageStore): string | number | undefined => {\n\t\t\tif (this.sortByField === undefined) return undefined;\n\t\t\tconst message = messageStore.getMessage();\n\t\t\tlet field;\n\t\t\tif (message.protocol === 'log:' && this.sortByField === 'url') return undefined;\n\t\t\tconst obj = message as { [key: string]: any };\n\t\t\tif (obj[this.sortByField] !== undefined) {\n\t\t\t\tfield = obj[this.sortByField];\n\t\t\t} else {\n\t\t\t\tlet body;\n\t\t\t\tif (typeof message.requestBody === 'object') {\n\t\t\t\t\tbody = message.requestBody as { [key: string]: any; };\n\t\t\t\t\tfield = body[this.sortByField];\n\t\t\t\t\tif (field === undefined) {\n\t\t\t\t\t\tfield = body[this.sortByField.toLowerCase()];\n\t\t\t\t\t}\n\t\t\t\t\tif (field === undefined) {\n\t\t\t\t\t\tfield = body[this.sortByField.toUpperCase()];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (field === undefined && typeof message.responseBody === 'object') {\n\t\t\t\t\tbody = message.responseBody as { [key: string]: any; };\n\t\t\t\t\tfield = body[this.sortByField];\n\t\t\t\t\tif (field === undefined) {\n\t\t\t\t\t\tfield = body[this.sortByField.toLowerCase()];\n\t\t\t\t\t}\n\t\t\t\t\tif (field === undefined) {\n\t\t\t\t\t\tfield = body[this.sortByField.toUpperCase()];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (field === undefined && message.protocol == 'log:' && typeof messageStore.getLogEntry().additionalJSON === 'object') {\n\t\t\t\t\tbody = messageStore.getLogEntry().additionalJSON as { [key: string]: any; };\n\t\t\t\t\tfield = body[this.sortByField];\n\t\t\t\t\tif (field === undefined) {\n\t\t\t\t\t\tfield = body[this.sortByField.toLowerCase()];\n\t\t\t\t\t}\n\t\t\t\t\tif (field === undefined) {\n\t\t\t\t\t\tfield = body[this.sortByField.toUpperCase()];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (field === undefined && message.protocol === 'log:') {\n\t\t\t\t\tswitch (this.sortByField) {\n\t\t\t\t\t\tcase 'date':\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tfield = messageStore.getLogEntry().date.toISOString();\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\tfield = '0';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'level':\n\t\t\t\t\t\t\tfield = messageStore.getLogEntry().level;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'category':\n\t\t\t\t\t\t\tfield = messageStore.getLogEntry().category;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'kind':\n\t\t\t\t\t\t\tfield = messageStore.getLogEntry().kind;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'message':\n\t\t\t\t\t\t\tfield = messageStore.getLogEntry().message;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn field;\n\t\t};\n\n\t\tif (this.sortByField) {\n\t\t\tcopyMessages.sort((a, b) => {\n\t\t\t\tlet aField = getField(a);\n\t\t\t\tlet bField = getField(b);\n\t\t\t\tif (aField === undefined) {\n\t\t\t\t\tif (bField === undefined) {\n\t\t\t\t\t\taField = bField = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\taField = typeof bField === 'string' ? '' : -999999;\n\t\t\t\t\t}\n\t\t\t\t} else if (bField === undefined) {\n\t\t\t\t\tbField = typeof aField === 'string' ? '' : -999999;\n\t\t\t\t}\n\t\t\t\tlet rc = 0;\n\t\t\t\tif (this.sortOrder === 'asc') {\n\t\t\t\t\trc = (typeof aField === 'string' ? aField.localeCompare(bField as string) : aField - (bField as number));\n\t\t\t\t} else {\n\t\t\t\t\trc = (typeof bField === 'string' ? bField.localeCompare(aField as string) : bField - (aField as number));\n\t\t\t\t}\n\t\t\t\treturn rc;\n\t\t\t});\n\t\t} else {\n\t\t\tcopyMessages.sort((a, b) => {\n\t\t\t\tconst aSeq = this.sortByReq ? a.getMessage().sequenceNumber : a.getMessage().sequenceNumberRes;\n\t\t\t\tconst bSeq = this.sortByReq ? b.getMessage().sequenceNumber : b.getMessage().sequenceNumberRes;\n\t\t\t\treturn aSeq - bSeq;\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate binarySearch(sortedMessages: MessageStore[], matchSeqNum: number, sortByReq: boolean) {\n\t\tlet l = 0;\n\t\tlet r = sortedMessages.length - 1;\n\t\tlet m: number = 0;\n\n\t\tlet sn = 0;\n\t\twhile (l <= r) {\n\t\t\tm = l + Math.floor((r - l) / 2);\n\t\t\tsn = sortByReq ? sortedMessages[m].getMessage().sequenceNumber : sortedMessages[m].getMessage().sequenceNumberRes;\n\t\t\tif (sn === matchSeqNum) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (sn < matchSeqNum) {\n\t\t\t\tl = m + 1;\n\t\t\t} else {\n\t\t\t\tr = m - 1;\n\t\t\t}\n\t\t}\n\n\t\treturn m;\n\t}\n\n\t@action public forceRerender() {\n\t\tconst proxyTab = mainTabStore.getProxyTab();\n\t\tconst copyMessages = proxyTab.slice(); // shallow copy\n\t\tproxyTab.splice(0, proxyTab.length);\n\t\tArray.prototype.push.apply(proxyTab, copyMessages);\n\t}\n\n\t@action public insertBatch(messages: Message[]) {\n\t\tif (this.stopped) return;\n\n\t\tconst proxyTab = mainTabStore.getProxyTab();\n\n\t\tconst copyMessages = proxyTab.slice(); // shallow copy\n\t\t// Not sorted by request?\n\t\tif (!this.sortByReq || this.sortByField) {\n\t\t\tcopyMessages.sort((a, b) => a.getMessage().sequenceNumber - b.getMessage().sequenceNumber);\n\t\t}\n\n\t\tfor (const message of messages) {\n\t\t\tif (!message.proxyConfig?.recording) return;\n\n\t\t\tconst messageStore = new MessageStore(message);\n\t\t\tif (messageStore.getMessage().protocol === 'log:') {\n\t\t\t\tthis.updateJSONFields(PROXY_TAB_NAME, [messageStore]);\n\t\t\t}\n\t\t\tif (copyMessages.length === 0) {\n\t\t\t\tcopyMessages.push(messageStore);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst msgSequenceNumber = message.sequenceNumber;\n\t\t\tconst m = this.binarySearch(copyMessages, msgSequenceNumber, true);\n\n\t\t\tconst messageMatch = copyMessages[m].getMessage();\n\t\t\tconst sn = messageMatch.sequenceNumber;\n\t\t\tif (messageMatch.sequenceNumber === msgSequenceNumber) {\n\t\t\t\tif (messageStore.getMessage().responseBody !== NO_RESPONSE) {\n\t\t\t\t\tcopyMessages[m] = messageStore;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (sn < msgSequenceNumber) {\n\t\t\t\tcopyMessages.splice(m + 1, 0, messageStore);\n\t\t\t} else if (sn > msgSequenceNumber) {\n\t\t\t\tcopyMessages.splice(m, 0, messageStore);\n\t\t\t}\n\t\t}\n\n\t\tif (!this.sortByReq || this.sortByField) {\n\t\t\tthis.sortCopy(copyMessages);\n\t\t}\n\n\t\t// Move batch of messages to new tab when limit (e.g., 10,000) is reached.\n\t\tif (copyMessages.length > this.limit) {\n\t\t\tconst date = dateToHHMMSS(new Date(copyMessages[0].getMessage().timestamp));\n\t\t\tmainTabStore.newTab(date);\n\t\t\tcopyMessages.splice(0, proxyTab.length);\n\t\t}\n\n\t\tproxyTab.splice(0, proxyTab.length);\n\t\tArray.prototype.push.apply(proxyTab, copyMessages);\n\t}\n\n\tpublic updateJSONFields(_tabName: string, newMessages: MessageStore[]) {\n\t\tfor (const message of newMessages) {\n\t\t\tif (message.getMessage().protocol !== 'log:') continue;\n\t\t\tlet json = message.getMessage().responseBody as { [key: string]: any };\n\t\t\tjson = {\n\t\t\t\t...message.getLogEntry().additionalJSON,\n\t\t\t\t...json\n\t\t\t};\n\t\t\tif (json['PREFIX'] === undefined && message.getMessage().path) {\n\t\t\t\tconst json2: { [key: string]: any } = {};\n\t\t\t\tjson2['PREFIX'] = message.getMessage().path;\n\t\t\t\tfor (const key in json) {\n\t\t\t\t\tjson2[key] = json[key];\n\t\t\t\t}\n\t\t\t\tmessage.getMessage().responseBody = json2;\n\t\t\t\tjson = json2;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function _getLimit(): number {\n\ttry {\n\t\tconst limit = localStorage.getItem(LOCAL_STORAGE_LIMIT);\n\t\tif (limit) {\n\t\t\t// Ensure limit is at least 20000\n\t\t\tif (Number(limit) > 20000) {\n\t\t\t\treturn Number(limit);\n\t\t\t}\n\t\t}\n\n\t\tlocalStorage.setItem(LOCAL_STORAGE_LIMIT, DEFAULT_LIMIT + '');\n\t} catch (e) { }\n\treturn DEFAULT_LIMIT;\n}\n\nexport const messageQueueStore = new MessageQueueStore();","import Message from './common/Message';\nimport pickIcon, { getBrowserIconColor, getBrowserIconColorClass } from './PickIcon';\n\nconst colors = ['#007bff', 'green', 'purple', 'brown', 'darkpink', 'slateblue', 'darkorange'];\nlet count = 0;\nlet colorMap: Map = new Map();\n\nexport default function colorPicker(message: Message): { color: string, iconClass: string } {\n\tconst protocol = message.protocol;\n\tconst ua = message.requestHeaders['user-agent'] || '';\n\tif (message.proxyConfig!.protocol === 'browser:') {\n\t\tif (pickIcon(message.proxyConfig!.protocol, ua).indexOf('terminal') === -1) {\n\t\t\treturn { color: getBrowserIconColor(ua) || '#6c757d', iconClass: getBrowserIconColorClass(ua) || 'icon-color-terminal' };\n\t\t} else {\n\t\t\treturn { color: '#6c757d', iconClass: 'icon-color-terminal' }; // color is set by App.css fa-keyboard\n\t\t}\n\t}\n\n\tlet key = '';\n\tif (protocol === 'log:') {\n\t\tif (message.proxyConfig?.path) {\n\t\t\tkey = message.proxyConfig?.path;\n\t\t}\n\t} else {\n\t\tif (message.clientIp) {\n\t\t\tkey = message.clientIp.trim();\n\t\t}\n\t}\n\n\tif (key === 'error') {\n\t\treturn { color: 'red', iconClass: 'error' };\n\t} else {\n\t\tlet colorObj = colorMap.get(key);\n\t\tif (colorObj === undefined) {\n\t\t\tconst index = count++ % colors.length;\n\t\t\tconst color = colors[index];\n\t\t\tconst iconClass = 'icon-color' + index;\n\t\t\tcolorObj = { color, iconClass };\n\t\t\tcolorMap.set(key, colorObj);\n\t\t}\n\t\treturn colorObj;\n\t}\n}\n","import Message from './common/Message';\n\nexport default class Util {\n\n\tstatic fixNewlines(str: string) {\n return str.replace(/\\\\n/g, '\\n') // fix up line breaks\n .replace(/\\\\/g, '')\n .replace(/\"\"/g, '\"'); // remove consecutive quotes\n\t}\n\n static isGraphQlError(message: Message) {\n if ((message.url?.endsWith('/graphql') || message.url?.endsWith('/graphql-public'))\n && Array.isArray(message.responseBody)) {\n for(const entry of message.responseBody) {\n if(entry.errors) {\n return true;\n }\n }\n }\n return false;\n }\n\n}","import { makeAutoObservable, action } from \"mobx\";\nimport colorPicker from '../ColorPicker';\nimport Message, { NO_RESPONSE } from '../common/Message';\nimport pickIcon, { getDisplayableUserAgent } from '../PickIcon';\nimport Util from '../Util';\nimport { LogEntry, jsonLogStore, JsonField, formatJSONRequestLabels, getJsonFieldsMap } from \"./JSONLogStore\";\nimport { compressJSON, mainTabStore } from \"./MainTabStore\";\nimport { filterStore } from \"./FilterStore\";\nimport { jsonToJsonl } from \"../components/ImportJSONFileDialog\";\nimport { importJsonLines } from \"../ImportJSONFile\";\n\nexport default class MessageStore {\n private index: number = 0;\n private message: Message = new Message();\n private url = '';\n private _isError = false;\n private visited = false;\n private colorObj: { color: string, iconClass: string };\n private iconClass = '';\n private tooltip = '';\n private note = '';\n private jsonFields: JsonField[] = [];\n private filtered: false | true | undefined = undefined;\n private logEntry: LogEntry = { date: new Date(), level: '', category: '', appName: '', kind: '', message: '', rawLine: '', additionalJSON: {}, ignoreFields: [] };\n\n public constructor(message: Message, auto: boolean = false) {\n let keys = Object.keys(message.requestHeaders);\n for (const key of keys) {\n const lkey = key.toLowerCase();\n if (lkey !== key) {\n message.requestHeaders[lkey] = message.requestHeaders[key];\n delete message.requestHeaders[key];\n }\n }\n keys = Object.keys(message.responseHeaders);\n for (const key of keys) {\n const lkey = key.toLowerCase();\n if (lkey !== key) {\n message.requestHeaders[lkey] = message.responseHeaders[key];\n delete message.responseHeaders[key];\n }\n }\n\n this.message = message;\n this.url = this.formatUrl(message.url!);\n this._isError = this.isErrorResponse(message);\n this.visited = false;\n this.colorObj = colorPicker(message);\n if (message.requestHeaders['allproxy'] === 'resend') {\n this.iconClass = 'fa fa-clone ';\n this.iconClass += ' resend-icon';\n }\n else {\n this.iconClass = pickIcon(message.proxyConfig!.protocol, this.getUserAgent());\n if (message.jsonTruncated) {\n this.iconClass = 'fa fa-file-excel';\n }\n }\n this.iconClass += ' ' + this.colorObj.iconClass;\n this.tooltip = message.method ? 'Click to resend request' : '';\n this.note = message.note;\n makeAutoObservable(this);\n\n if (message.protocol === 'log:') {\n this.updateJsonLog(auto ? 'auto' : undefined);\n }\n }\n\n public setIndex(index: number) {\n this.index = index;\n }\n\n public getIndex() {\n return this.index;\n }\n\n public isFiltered(): true | false {\n const messageStore = this as unknown as MessageStore;\n return this.filtered === undefined ? filterStore.isFilteredNoCache(messageStore) : this.filtered;\n }\n\n public setFiltered(filtered: true | false | undefined) {\n this.filtered = filtered;\n }\n\n @action protected async updateJsonLog2(json: { [key: string]: any }, method: 'auto' | 'simple' | 'advanced' | 'plugin') {\n if (method === 'auto') {\n let newFields: JsonField[] = [];\n for (const key in json) {\n if (key === jsonLogStore.getAutoFields().date) continue;\n if (key === jsonLogStore.getAutoFields().level) continue;\n if (key === jsonLogStore.getAutoFields().category) continue;\n if (key === jsonLogStore.getAutoFields().kind) continue;\n if (key === jsonLogStore.getAutoFields().message) continue;\n let value = json[key];\n if (typeof value === 'object' && jsonLogStore.getAutoMaxFieldLevel() === 2) {\n if (Array.isArray(value)) {\n value = compressJSON(value);\n newFields.push({ name: key, value: value });\n } else {\n for (const key2 in value as { [key: string]: any }) {\n let value2 = value[key2];\n if (typeof value2 === 'object') {\n value2 = compressJSON(value2);\n }\n if (typeof value2 === 'string' || typeof value2 === 'boolean' || typeof value2 === 'number') {\n newFields.push({ name: key + '.' + key2, value: value2 });\n }\n }\n }\n } else if (typeof value === 'object') {\n value = compressJSON(value);\n newFields.push({ name: key, value: value });\n } else if (typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number') {\n newFields.push({ name: key, value: value });\n }\n }\n this.setJsonFields(newFields);\n } else {\n const newJsonFields = formatJSONRequestLabels(json, jsonLogStore.getJSONFieldNames());\n\n const oldJsonFields = this.getJsonFields();\n let updateRequired = true;\n if (oldJsonFields.length === newJsonFields.length) {\n updateRequired = false;\n for (let i = 0; i < oldJsonFields.length; ++i) {\n if (oldJsonFields[i].name !== newJsonFields[i].name && oldJsonFields[i].name !== newJsonFields[i].name) {\n updateRequired = true;\n break;\n }\n }\n }\n\n if (updateRequired) this.setJsonFields(newJsonFields);\n }\n }\n\n public getJsonFields() {\n return this.jsonFields;\n }\n @action setJsonFields(jsonFields: JsonField[]) {\n this.jsonFields = jsonFields;\n }\n\n public getAllJsonFieldsMap(): { [key: string]: JsonField } {\n const jsonFields: { [key: string]: JsonField } = {};\n\n const message = this.getMessage();\n let json: { [key: string]: string } = {};\n if (typeof message.responseBody === 'string') {\n json = this.logEntry.additionalJSON;\n } else {\n json = {\n ...this.logEntry.additionalJSON,\n ...message.requestHeaders,\n ...message.requestHeaders,\n ...message.responseHeaders,\n ...message.responseBody\n };\n for (const field of this.logEntry.ignoreFields) {\n if (json[field]) delete json[field];\n }\n }\n\n const allJsonFieldsMap = getJsonFieldsMap(json);\n for (const key in allJsonFieldsMap) {\n for (const jsonField of allJsonFieldsMap[key]) {\n jsonFields[jsonField.name] = jsonField;\n }\n }\n return jsonFields;\n }\n\n public hasNote() {\n return this.getNote() !== undefined && this.getNote().length > 0;\n }\n\n public getNote(): string {\n return this.note;\n }\n @action setNote(note: string) {\n this.note = note;\n this.message.note = note;\n }\n\n public getMessage(): Message {\n return this.message!;\n }\n\n public getUrl(): string {\n return this.url;\n }\n\n @action public setUrl(url: string) {\n this.url = url;\n }\n\n public isNoResponse(): boolean {\n return this.message.responseBody === NO_RESPONSE;\n }\n\n public isError(): boolean {\n return this._isError;\n }\n\n public getColor(): string {\n return this.colorObj.color;\n }\n\n public setColor(color: string) {\n this.colorObj = { iconClass: '', color };\n }\n\n public getIconClass(): string {\n return this.iconClass;\n }\n\n public getDomain(): string | undefined {\n return this.message.requestHeaders['host'];\n }\n\n public getTooltip(): string {\n return this.tooltip;\n }\n\n public getVisited(): boolean {\n return this.visited;\n }\n\n public getRequestClient(): string | undefined {\n let ip = this.message.clientIp;\n if (ip === undefined || ip === '127.0.0.1' || ip === '::1' || ip?.indexOf('loopback') !== -1) {\n ip = getDisplayableUserAgent(this.getUserAgent());\n }\n return ip;\n }\n\n @action public setVisited(value: boolean) {\n this.visited = value;\n }\n\n public isRequestBodyJson() {\n return this.message.requestBody\n && typeof this.message.requestBody === 'object'\n && (this.message.protocol === 'http:' || this.message.protocol === 'https:');\n }\n\n public getRequestTooltip(): string {\n if (this.message.protocol === \"log:\") {\n return JSON.stringify(this.message.responseBody, null, 2);\n }\n else {\n return this.getRequestBody();\n }\n }\n\n public getRequestBody(): string {\n let body = this.message.method && this.message.method.length > 0 ? this.url + '\\n' : '';\n\n if (this.message.requestBody) {\n let jsonBody = (this.message.requestBody as any);\n if (jsonBody['allproxy_inner_body']) {\n body += jsonBody['allproxy_inner_body'];\n }\n else if (\n typeof this.message.requestBody === 'string' &&\n this.message.requestHeaders['content-type'] &&\n this.message.requestHeaders['content-type'].includes('application/x-www-form-urlencoded')) {\n const params = this.message.requestBody.split('&');\n body += JSON.stringify(params, null, 2);\n } else if (typeof this.message.requestBody === 'string') {\n body += this.message.requestBody as string;\n } else {\n body += JSON.stringify(this.message.requestBody, null, 2);\n }\n // body = Util.fixNewlines(body);\n }\n return body;\n }\n\n private getUserAgent(): string {\n return this.message.requestHeaders && this.message.requestHeaders[\"user-agent\"] ? this.message.requestHeaders[\"user-agent\"] : \"\";\n }\n\n public getUserAgentDisplayable(): string | undefined {\n return getDisplayableUserAgent(this.getUserAgent());\n }\n\n public isHttpOrHttps() {\n return this.message.protocol === 'http:'\n || this.message.protocol === 'https:';\n }\n\n public isGrpc(): boolean {\n return this.message.proxyConfig?.protocol === 'grpc:';\n }\n\n public getGrpcStatus(): number {\n const status = this.message.responseHeaders['grpc-status'];\n return status ? Number(status) : 0;\n }\n\n public getGrpcMessage(): string {\n const grpcMessage = this.message.responseHeaders['grpc-message'];\n return grpcMessage ? grpcMessage : '';\n }\n\n private formatUrl(urlStr: string): string {\n //var url = urlStr.indexOf('?') !== -1 ? urlStr.split('?')[0] : urlStr;\n let url = unescape(urlStr);\n url = Util.fixNewlines(url);\n return url.split(/\\s+/).join(' ');\n }\n\n private isErrorResponse(message: Message): boolean {\n // Set error class to make text red\n return message.status >= 400\n || (message.proxyConfig?.protocol === 'grpc:'\n && message.responseHeaders['grpc-status']\n && Number(message.responseHeaders['grpc-status']) > 0)\n || ((message.protocol === 'mysql:')\n && message.status !== 0)\n || Util.isGraphQlError(message);\n }\n\n public async updateJsonLog(method: 'auto' | 'simple' | 'advanced' | 'plugin' = jsonLogStore.getParsingMethod()) {\n const message = this.getMessage();\n if (typeof message.responseBody === 'string') {\n this.logEntry = jsonLogStore.extractJSONFields(message.responseBody, {}, method);\n } else {\n this.logEntry = jsonLogStore.extractJSONFields(message.path, message.responseBody, method);\n }\n\n let json: { [key: string]: string } = {};\n if (typeof message.responseBody === 'string') {\n json = this.logEntry.additionalJSON;\n } else {\n json = {\n ...this.logEntry.additionalJSON,\n ...message.responseBody\n };\n }\n this.updateJsonLog2(json, method);\n }\n\n @action public getLogEntry() {\n return this.logEntry;\n }\n\n public canSplitJsonLogMessage() {\n if (this.message.protocol === 'log:') {\n if (typeof this.message.responseBody !== 'string') {\n for (const key in this.message.responseBody) {\n if (Array.isArray(this.message.responseBody[key]) &&\n typeof this.message.responseBody[key][0] === 'object') return true;\n }\n }\n }\n return false;\n }\n\n public splitJsonLogMessage() {\n function getTabName(json: { [key: string]: any }): string {\n let tabName = '';\n for (const key in json) {\n if (Array.isArray(json[key]) && typeof json[key][0] === 'object') {\n tabName = key;\n if (json[key].length === 1) {\n tabName += '.' + getTabName(json[key][0]);\n }\n break;\n }\n }\n console.log('tabName:', tabName);\n return tabName;\n }\n\n if (typeof this.message.responseBody !== 'string') {\n mainTabStore.setUpdating(true, 'Splitting JSON Message...');\n const jsonLines = jsonToJsonl(JSON.stringify(this.message.responseBody), true);\n const lines = jsonLines.split('\\n');\n const tabName = getTabName(this.message.responseBody);\n mainTabStore.importTab(tabName, importJsonLines(tabName, lines));\n mainTabStore.setUpdating(false);\n }\n }\n}","import { makeAutoObservable, action } from \"mobx\";\nimport { ConfigProtocol } from \"../common/ProxyConfig\";\nimport { ConfigProtocols } from \"./SettingsStore\";\n\nexport const mapProtocolToIndex: Map =\n\tnew Map(Object.values(ConfigProtocols).map((protocol, i) => [protocol, i]));\n\nexport class MetricsByProtocol {\n\tprotocol: ConfigProtocol;\n\trequestCount: number = 0;\n\tresponseCount: number = 0;\n\ttotalTime: number = 0;\n\tmaximumTime: number = 0;\n\tminimumTime: number = 0;\n\n\tconstructor(protocol: ConfigProtocol) {\n\t\tthis.protocol = protocol;\n\t}\n}\n\nexport default class MetricsStore {\n\tprivate metricsByProtocol: MetricsByProtocol[] = [];\n\n\tpublic constructor() {\n\t\tfor (const protocol of Object.values(ConfigProtocols)) {\n\t\t\tthis.metricsByProtocol.push(new MetricsByProtocol(protocol));\n\t\t}\n\t\tmakeAutoObservable(this);\n\t}\n\n\tpublic getMetrics(): MetricsByProtocol[] {\n\t\treturn this.metricsByProtocol;\n\t}\n\n\t@action public clear() {\n\t\tlet i = 0;\n\t\tfor (const protocol of Object.values(ConfigProtocols)) {\n\t\t\tthis.metricsByProtocol[i++] = new MetricsByProtocol(protocol);\n\t\t}\n\t}\n}\n\nexport const metricsStore = new MetricsStore();\n","import { makeAutoObservable, action } from \"mobx\";\nimport FilterStore from \"./FilterStore\";\nimport { apFileSystem } from \"./APFileSystem\";\nimport { urlPathStore } from \"./UrlPathStore\";\n\nexport default class NamedQueriesStore {\n\tprivate isSubQuery: boolean;\n\tprivate logType: 'proxy' | 'json' = urlPathStore.getKind() === 'jlogviewer' ? 'json' : 'proxy';\n\tprivate queryList: FilterStore[] = [];\n\n\tpublic constructor(isSubQuery: boolean) {\n\t\tthis.isSubQuery = isSubQuery;\n\t\tmakeAutoObservable(this);\n\t}\n\n\tpublic isSubQueries() {\n\t\treturn this.isSubQueries;\n\t}\n\n\tprivate getFileName() {\n\t\tif (this.isSubQuery) {\n\t\t\treturn this.logType === 'json' ? 'jsonSubQueries.json' : 'proxySubQueries.json';\n\t\t} else {\n\t\t\treturn this.logType === 'json' ? 'jsonQueries.json' : 'proxyQueries.json';\n\t\t}\n\t}\n\n\tpublic getLogType(): 'proxy' | 'json' {\n\t\treturn this.logType;\n\t}\n\t@action public setLogType(logType: 'proxy' | 'json') {\n\t\tif (this.logType !== logType) {\n\t\t\tthis.logType = logType;\n\t\t\tthis.init();\n\t\t}\n\t}\n\n\t@action public changed() {\n\t\tthis.save();\n\t}\n\n\t@action public async init(fsType?: 'browserFs' | 'serverFs') {\n\t\tthis.queryList.splice(0, this.queryList.length);\n\t\tif (await apFileSystem.exists(this.getFileName(), fsType)) {\n\t\t\tconst queryListJson = await apFileSystem.readFile(this.getFileName(), fsType);\n\t\t\tif (queryListJson) {\n\t\t\t\tconst json = JSON.parse(queryListJson);\n\t\t\t\tlet queries: FilterStore[] = json.map((entry: {\n\t\t\t\t\tname: string,\n\t\t\t\t\tsearchFilter: string,\n\t\t\t\t}) => {\n\t\t\t\t\tconst query = new FilterStore();\n\t\t\t\t\tquery.setName(entry.name);\n\t\t\t\t\tquery.setFilterNoDebounce(entry.searchFilter);\n\t\t\t\t\treturn query;\n\t\t\t\t});\n\t\t\t\t// Remove duplicate query names\n\t\t\t\tqueries = queries.filter(q => this.queryList.filter(q2 => q2.getName() === q.getName()).length === 0);\n\t\t\t\tthis.queryList.push(...queries);\n\t\t\t}\n\t\t}\n\n\t\tif (this.queryList.length === 0 && fsType !== 'serverFs' && !urlPathStore.isLocalhost() && !urlPathStore.isGitHubPages()) {\n\t\t\tawait this.init('serverFs');\n\t\t\tawait this.save();\n\t\t}\n\t\tthis.queryList.sort((a, b) => a.getName().localeCompare(b.getName()));\n\t}\n\n\t@action private async save() {\n\t\tlet queries = this.queryList.filter(query => query.getName().length > 0 && query.getFilter().length > 0);\n\t\tqueries.sort((a, b) => a.getName().localeCompare(b.getName()));\n\t\tawait apFileSystem.writeFile(this.getFileName(), JSON.stringify(queries));\n\t}\n\n\tpublic getAllQueries() {\n\t\treturn this.queryList;\n\t}\n\n\tpublic getQueries() {\n\t\tconst queries = this.queryList.filter(query => query.getName().length > 0 && query.getFilter().length > 0);\n\t\treturn queries;\n\t}\n\n\t@action public extend() {\n\t\tthis.queryList.unshift(new FilterStore());\n\t}\n\n\t@action public deleteEntry(index: number) {\n\t\tthis.queryList.splice(index, 1);\n\t\tthis.save();\n\t}\n}\n\nexport const namedQueriesStore = new NamedQueriesStore(false);\nexport const namedSubQueriesStore = new NamedQueriesStore(true);\n","export default class PortConfig {\n\thttpPort: number = 0;\n\thttpsPort: number = 0;\n\tgrpcPort: number = 0;\n\tgrpcSecurePort: number = 0;\n}","import { makeAutoObservable, action } from \"mobx\";\nimport PortConfig from '../common/PortConfig';\n\n\nclass PortConfigStore {\n\tprivate portConfig: PortConfig;\n\n\tconstructor(portConfig: PortConfig) {\n\t\tthis.portConfig = portConfig;\n\t\tmakeAutoObservable(this);\n\t}\n\n\t@action public setConfig(portConfig: PortConfig) {\n\t\tportConfigStore.portConfig = portConfig;\n\t}\n\n\tpublic getConfig() {\n\t\treturn this.portConfig;\n\t}\n}\n\nlet portConfigStore: PortConfigStore = new PortConfigStore(new PortConfig());\nexport default portConfigStore;","import { makeAutoObservable, action } from \"mobx\";\nimport ProxyConfig from '../common/ProxyConfig';\nimport { socketStore } from './SocketStore';\n\nclass ProxyConfigStore {\n\tprivate proxyConfigs: ProxyConfig[] = this.getFromLocalStorage();\n\n\tconstructor() {\n\t\tmakeAutoObservable(this);\n\t}\n\n\t/**\n\t * Local storage is deprecated.\n\t */\n\tprivate getFromLocalStorage(): ProxyConfig[] {\n\t\tlet proxyConfigs: ProxyConfig[] = [];\n\t\tif (localStorage.proxyDirectives) {\n\t\t\ttry {\n\t\t\t\tproxyConfigs = JSON.parse(localStorage.proxyDirectives);\n\t\t\t\tlocalStorage.proxyDirectives = undefined; // stop using local storage\n\t\t\t} catch (e) {\n\t\t\t}\n\t\t}\n\t\treturn proxyConfigs;\n\t}\n\n\t// @deprecated\n\t@action public merge(proxyConfigs: ProxyConfig[]) {\n\t\tconst proxyDirectives = this.proxyConfigs;\n\t\tfor (let directive of proxyDirectives) {\n\t\t\tif (proxyConfigs.filter(proxyConfig => {\n\t\t\t\treturn directive.protocol === proxyConfig.protocol\n\t\t\t\t\t&& directive.path === proxyConfig.path\n\t\t\t\t\t&&\n\t\t\t\t\t(\n\t\t\t\t\t\tdirective.protocol === 'browser:'\n\t\t\t\t\t\t|| directive.protocol === 'log:'\n\t\t\t\t\t\t|| (directive.hostname === proxyConfig.hostname\n\t\t\t\t\t\t\t&& directive.port === proxyConfig.port)\n\t\t\t\t\t);\n\t\t\t}).length === 0) {\n\t\t\t\tproxyConfigs.push(directive);\n\t\t\t}\n\t\t}\n\n\t\tthis.updateProxyConfigs(proxyConfigs);\n\t}\n\n\t/**\n\t * Load config on server\n\t */\n\tpublic load() {\n\t\tconst proxyDirectives: ProxyConfig[] = this.proxyConfigs;\n\t\tproxyDirectives.forEach(proxyConfig => {\n\t\t\t// backwards compatible with previously supported 'any:'\n\t\t\tif (proxyConfig.protocol as string === 'any:' || proxyConfig.protocol as string === 'other:') {\n\t\t\t\tproxyConfig.protocol = 'tcp:';\n\t\t\t}\n\t\t\t// 'sql:' is deprecated and replaced with 'mysql:'\n\t\t\tif (proxyConfig.protocol as string === 'sql:') {\n\t\t\t\tproxyConfig.protocol = 'mysql:';\n\t\t\t}\n\t\t});\n\t\t// Send configs to server\n\t\tsocketStore.emitConfig('proxy config', proxyDirectives);\n\t}\n\n\tpublic retrieveProxyConfigs(): Promise {\n\t\tconst headers: { [key: string]: string } = {};\n\t\theaders['allproxy'] = 'config';\n\t\treturn new Promise((resolve) => {\n\t\t\tconst url = document.location.protocol + '//' + document.location.host\n\t\t\t\t+ '/api/allproxy/config';\n\t\t\tfetch(url, headers)\n\t\t\t\t.then((response) => response.json())\n\t\t\t\t.then(data => {\n\t\t\t\t\tresolve(data);\n\t\t\t\t\tthis.setProxyConfigs(data);\n\t\t\t\t});\n\t\t});\n\t}\n\n\tpublic getProxyConfigs() {\n\t\treturn this.proxyConfigs;\n\t}\n\n\t@action public setProxyConfigs(proxyConfigs: ProxyConfig[]) {\n\t\tthis.updateProxyConfigs(proxyConfigs);\n\t}\n\n\tprivate updateProxyConfigs(proxyConfigs: ProxyConfig[]) {\n\t\tthis.proxyConfigs.splice(0, this.proxyConfigs.length);\n\t\tthis.sortConfigs(proxyConfigs).forEach(c => {\n\t\t\tthis.proxyConfigs.push(new ProxyConfig(c));\n\t\t});\n\t}\n\n\tprivate sortConfigs(proxyConfigs: ProxyConfig[]): ProxyConfig[] {\n\t\tproxyConfigs.sort((a, b) => {\n\t\t\tlet rc = a.protocol.localeCompare(b.protocol);\n\t\t\tif (rc === 0) {\n\t\t\t\trc = a.hostname.localeCompare(b.hostname);\n\t\t\t\tif (rc === 0) {\n\t\t\t\t\trc = a.path.localeCompare(b.path);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn rc;\n\t\t});\n\t\treturn proxyConfigs;\n\t}\n}\n\nconst proxyConfigs = new ProxyConfigStore();\nexport default proxyConfigs;","import { makeAutoObservable, action } from \"mobx\";\nimport { apFileSystem } from \"./APFileSystem\";\nimport { urlPathStore } from \"./UrlPathStore\";\n\nconst QUERIES_DIR = 'queries';\nconst QUERY_FILE = 'query.txt';\n\ntype Query = {\n\tquery: string,\n\tdirName: string,\n}\n\nexport default class QueryStore {\n\tprivate queries: Query[] = [];\n\tprivate applyFilter: string = '';\n\n\tpublic constructor() {\n\t\tmakeAutoObservable(this);\n\t}\n\n\tpublic async init(fsType?: 'browserFs' | 'serverFs') {\n\t\tthis.queries.splice(0, this.queries.length);\n\t\tconst dirNames = await apFileSystem.readDir(QUERIES_DIR + '/', fsType);\n\t\tfor (const dirName of dirNames) {\n\t\t\tconst exists = await apFileSystem.exists(`${QUERIES_DIR}/${dirName}/${QUERY_FILE}`, fsType);\n\t\t\tlet query = '';\n\t\t\tif (exists) {\n\t\t\t\tquery = await apFileSystem.readFile(`${QUERIES_DIR}/${dirName}/${QUERY_FILE}`, fsType);\n\t\t\t}\n\t\t\tthis.queries.push({ query, dirName });\n\t\t}\n\t\tthis.queries.sort();\n\n\t\tif (this.queries.length === 0) {\n\t\t\tif (fsType !== 'serverFs' && !urlPathStore.isLocalhost() && !urlPathStore.isGitHubPages()) {\n\t\t\t\tawait this.init('serverFs');\n\t\t\t\tfor (let i = 0; i < this.queries.length; ++i) {\n\t\t\t\t\tawait this.saveQuery(i, this.queries[i].query);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic getApplyFilter() {\n\t\treturn this.applyFilter;\n\t}\n\t@action setApplyFilter(filter: string) {\n\t\tthis.applyFilter = filter;\n\t}\n\n\tpublic getQueries() {\n\t\treturn this.queries.map(q => q.query);\n\t}\n\n\tpublic async getQueriesAsync() {\n\t\tawait this.init();\n\t\treturn this.queries.map(q => q.dirName);\n\t}\n\n\tprivate makeSubDirName() {\n\t\treturn new Date().toLocaleString().replaceAll('/', '-');\n\t}\n\n\t@action public extend() {\n\t\tthis.queries.unshift({ query: '', dirName: this.makeSubDirName() });\n\t}\n\n\tprivate queriesIndexOf(query: string): number {\n\t\tfor (let i = 0; i < this.queries.length; ++i) {\n\t\t\tif (this.queries[i].query === query) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\t@action public async deleteEntry(query: string) {\n\t\tconst index = this.queriesIndexOf(query);\n\t\tif (index !== -1) {\n\t\t\tconst dirName = this.queries[index].dirName;\n\t\t\tif (await apFileSystem.exists(QUERIES_DIR + '/' + dirName)) {\n\t\t\t\tawait apFileSystem.deleteFile(QUERIES_DIR + '/' + dirName + '/' + QUERY_FILE);\n\t\t\t\tawait apFileSystem.rmdir(QUERIES_DIR + '/' + dirName);\n\t\t\t}\n\t\t\tthis.queries.splice(index, 1);\n\t\t}\n\t}\n\n\tpublic async addAndSaveQuery(query: string): Promise {\n\t\treturn new Promise(async (resolve) => {\n\t\t\tconst dirName = this.makeSubDirName();\n\t\t\tthis.queries.push({ query, dirName });\n\t\t\tthis.saveQuery(this.queries.length - 1, query);\n\t\t\tresolve();\n\t\t});\n\t}\n\n\tpublic async saveQuery(index: number, query: string): Promise {\n\t\treturn new Promise(async (resolve) => {\n\t\t\tthis.queries[index].query = query;\n\t\t\tconst subDir = this.queries[index].dirName;\n\t\t\tconst dir = QUERIES_DIR + '/' + subDir;\n\t\t\tconst path = dir + '/' + QUERY_FILE;\n\t\t\tif (!await apFileSystem.exists(dir)) {\n\t\t\t\tawait apFileSystem.mkdir(dir);\n\t\t\t}\n\t\t\tif (await apFileSystem.exists(path)) {\n\t\t\t\tawait apFileSystem.deleteFile(path);\n\t\t\t}\n\t\t\tawait apFileSystem.writeFile(path, query);\n\t\t\tresolve();\n\t\t});\n\t}\n}\n\nexport const queryStore = new QueryStore();\n","import { makeAutoObservable, action } from \"mobx\";\nimport Message from \"../common/Message\";\nimport { apFileSystem } from \"./APFileSystem\";\nimport { mainTabStore } from \"./MainTabStore\";\nimport JSZip from \"jszip\";\nimport { saveAs } from \"file-saver\";\nimport { urlPathStore } from \"./UrlPathStore\";\n\nexport default class SessionStore {\n\tprivate sessionFileNameList: string[] = [];\n\tprivate sessionList: { name: string, canDelete: boolean }[] = [];\n\n\tpublic constructor() {\n\t\tmakeAutoObservable(this);\n\t}\n\n\tpublic async init() {\n\t\tthis.sessionFileNameList.splice(0, this.sessionFileNameList.length);\n\t\tthis.sessionList.splice(0, this.sessionList.length);\n\n\t\tfor (const fsTypeStr of ['browserFs', 'serverFs']) {\n\t\t\tconst fsType = fsTypeStr as 'browserFs' | 'serverFs';\n\t\t\tif (fsType === 'serverFs' && !apFileSystem.isConnected()) continue;\n\t\t\tconst fileNames = await apFileSystem.readDir('sessions/', fsType);\n\t\t\tfileNames.sort((a, b) => {\n\t\t\t\ta = a.split(' - ')[0].replaceAll('-', '/');\n\t\t\t\tb = b.split(' - ')[0].replaceAll('-', '/');\n\t\t\t\treturn new Date(b).getTime() - new Date(a).getTime();\n\t\t\t});\n\t\t\tfor (const fileName of fileNames) {\n\t\t\t\tthis.sessionFileNameList.push(fileName);\n\t\t\t\tconst exists = await apFileSystem.exists(`sessions/${fileName}/sessionName.txt`, fsType);\n\t\t\t\tlet sessionName = '';\n\t\t\t\tif (exists) {\n\t\t\t\t\tsessionName = await apFileSystem.readFile(`sessions/${fileName}/sessionName.txt`, fsType);\n\t\t\t\t}\n\t\t\t\tconst sn = sessionName.length > 0 ? ' - ' + sessionName : '';\n\t\t\t\tthis.sessionList.push({ name: fileName + sn, canDelete: urlPathStore.isLocalhost() || fsType === 'browserFs' });\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic getSessionList() {\n\t\treturn this.sessionList;\n\t}\n\n\t@action public async deleteEntry(index: number) {\n\t\tconst sessionName = this.sessionFileNameList[index];\n\t\tthis.sessionFileNameList.splice(index, 1);\n\t\tthis.sessionList.splice(index, 1);\n\n\t\tfor (const fsTypeStr of ['browserFs', 'serverFs']) {\n\t\t\tconst fsType = fsTypeStr as 'browserFs' | 'serverFs';\n\t\t\tif (fsType === 'serverFs' && !urlPathStore.isLocalhost()) continue;\n\t\t\tconst dir = 'sessions/' + sessionName;\n\t\t\tif (await apFileSystem.exists(dir, fsType)) {\n\t\t\t\tfor (let dirEntry of await apFileSystem.readDir(dir, fsType)) {\n\t\t\t\t\tif (dirEntry === 'sessionName.txt') await apFileSystem.deleteFile(dir + '/sessionName.txt', fsType);\n\t\t\t\t\tif (dirEntry === 'notes.txt') await apFileSystem.deleteFile(dir + '/notes.txt', fsType);\n\t\t\t\t\tif (dirEntry.startsWith('tab')) {\n\t\t\t\t\t\tawait apFileSystem.deleteFile(dir + '/' + dirEntry + '/tabName.txt', fsType);\n\t\t\t\t\t\tawait apFileSystem.deleteFile(dir + '/' + dirEntry + '/data.txt', fsType);\n\t\t\t\t\t\tawait apFileSystem.rmdir(dir + '/' + dirEntry, fsType);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (await apFileSystem.exists(dir + '/notes.txt', fsType)) {\n\t\t\t\t\tawait apFileSystem.deleteFile(dir + '/notes.txt', fsType);\n\t\t\t\t}\n\t\t\t\tawait apFileSystem.rmdir(dir, fsType);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async saveSession(sessionName: string): Promise {\n\t\treturn new Promise(async (resolve) => {\n\t\t\tconst date = new Date().toLocaleString().replaceAll('/', '-');\n\t\t\tconst dir = 'sessions/' + date;\n\t\t\tawait apFileSystem.mkdir(dir);\n\t\t\tawait apFileSystem.writeFile(dir + '/sessionName.txt', sessionName);\n\t\t\tlet i = 1;\n\t\t\tfor (const key of mainTabStore.getTabNames()) {\n\t\t\t\tlet messages: Message[] = [];\n\t\t\t\tfor (const messageStore of mainTabStore.getTabs().get(key)) {\n\t\t\t\t\tmessages.push(messageStore.getMessage());\n\t\t\t\t}\n\t\t\t\tif (messages.length > 0) {\n\t\t\t\t\tconst data = JSON.stringify(messages);\n\t\t\t\t\tlet tabName = mainTabStore.getTabs().getFileName(key);\n\t\t\t\t\tif (tabName === undefined) {\n\t\t\t\t\t\ttabName = date;\n\t\t\t\t\t}\n\t\t\t\t\tconst subDir = dir + '/tab' + i++;\n\t\t\t\t\tawait apFileSystem.mkdir(subDir);\n\t\t\t\t\tawait apFileSystem.writeFile(subDir + '/tabName.txt', tabName);\n\t\t\t\t\tawait apFileSystem.writeFile(subDir + '/data.txt', data);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait apFileSystem.writeFile(dir + '/notes.txt', mainTabStore.getNotes());\n\t\t\tresolve();\n\t\t});\n\t}\n\n\tpublic async restoreSession(index: number): Promise {\n\t\treturn new Promise(async (resolve) => {\n\t\t\tconst sessionDir = this.sessionFileNameList[index];\n\t\t\tconst dir = 'sessions/' + sessionDir;\n\t\t\tconst fsType = await apFileSystem.exists(dir, 'browserFs') ? 'browserFs' : 'serverFs';\n\t\t\tlet sessionName = '';\n\t\t\tconst exists = await apFileSystem.exists(dir + '/sessionName.txt', fsType);\n\t\t\tif (exists) {\n\t\t\t\tsessionName = await apFileSystem.readFile(dir + '/sessionName.txt', fsType);\n\t\t\t}\n\t\t\tfor (let dirEntry of await apFileSystem.readDir(dir, fsType)) {\n\t\t\t\tif (dirEntry === 'sessionName.txt') continue;\n\t\t\t\tif (dirEntry === 'notes.txt') continue;\n\t\t\t\tif (dirEntry.startsWith('tab')) {\n\t\t\t\t\tlet tabName = await apFileSystem.readFile(dir + '/' + dirEntry + '/tabName.txt', fsType);\n\t\t\t\t\tif (tabName === sessionDir && sessionName.length > 0) {\n\t\t\t\t\t\ttabName = sessionName;\n\t\t\t\t\t}\n\t\t\t\t\tconst data = await apFileSystem.readFile(dir + '/' + dirEntry + '/data.txt', fsType);\n\t\t\t\t\tmainTabStore.importTabFromFile(tabName, data);\n\t\t\t\t} else { // backwards compatibility\n\t\t\t\t\tconst data = await apFileSystem.readFile(dir + '/' + dirEntry, fsType);\n\t\t\t\t\tif (dirEntry === sessionDir && sessionName.length > 0) {\n\t\t\t\t\t\tdirEntry = sessionName;\n\t\t\t\t\t}\n\t\t\t\t\tmainTabStore.importTabFromFile(dirEntry, data);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (await apFileSystem.exists(dir + '/notes.txt', fsType)) {\n\t\t\t\tconst notes = await apFileSystem.readFile(dir + '/notes.txt', fsType);\n\t\t\t\tmainTabStore.setNotes(notes);\n\t\t\t}\n\t\t\tresolve(0);\n\t\t});\n\t}\n\n\tpublic async exportSession(index: number, zipFileName: string): Promise {\n\t\treturn new Promise(async (resolve) => {\n\t\t\tconst zip = new JSZip();\n\t\t\tconst sessionDir = this.sessionFileNameList[index];\n\t\t\tconst dir = 'sessions/' + sessionDir;\n\t\t\tconst fsType = await apFileSystem.exists(dir, 'browserFs') ? 'browserFs' : 'serverFs';\n\t\t\tlet sessionName = '';\n\t\t\tconst exists = await apFileSystem.exists(dir + '/sessionName.txt', fsType);\n\t\t\tif (exists) {\n\t\t\t\tsessionName = await apFileSystem.readFile(dir + '/sessionName.txt', fsType);\n\t\t\t\tzip.file(\"sessionName.txt\", sessionName);\n\t\t\t}\n\t\t\tfor (let dirEntry of await apFileSystem.readDir(dir, fsType)) {\n\t\t\t\tif (dirEntry === 'sessionName.txt') continue;\n\t\t\t\tif (dirEntry === 'notes.txt') continue;\n\t\t\t\tif (dirEntry.startsWith('tab')) {\n\t\t\t\t\tconst tab = zip.folder(dirEntry);\n\t\t\t\t\tlet tabName = await apFileSystem.readFile(dir + '/' + dirEntry + '/tabName.txt', fsType);\n\t\t\t\t\ttab?.file('tabName.txt', tabName);\n\t\t\t\t\tconst data = await apFileSystem.readFile(dir + '/' + dirEntry + '/data.txt', fsType);\n\t\t\t\t\ttab?.file(\"data.txt\", data);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (await apFileSystem.exists(dir + '/notes.txt', fsType)) {\n\t\t\t\tconst notes = await apFileSystem.readFile(dir + '/notes.txt', fsType);\n\t\t\t\tzip.file('notes.text', notes);\n\t\t\t}\n\t\t\tconst content = await zip.generateAsync({ type: \"blob\" });\n\t\t\tsaveAs(content, zipFileName + \".zip\");\n\t\t\tresolve(0);\n\t\t});\n\t}\n\n\tpublic importSession() {\n\t\tvar input = document.createElement('input');\n\t\tinput.type = 'file';\n\t\tinput.click();\n\n\t\tinput.onchange = (e: any) => {\n\t\t\tlet file = e.target.files[0];\n\t\t\tif (file.type !== 'application/zip') {\n\t\t\t\tconsole.log(file);\n\t\t\t\talert(file.name + \" is not a zip file!\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// setting up the reader\n\t\t\tconst reader = new FileReader();\n\n\t\t\treader.readAsArrayBuffer(file);\n\n\t\t\t// here we tell the reader what to do when it's done reading...\n\t\t\treader.onload = async (readerEvent: any) => {\n\t\t\t\tconst archive = await new JSZip().loadAsync(readerEvent.target.result);\n\n\t\t\t\tconst sessionNameFile = archive.file('sessionName.txt');\n\t\t\t\tif (sessionNameFile === null) {\n\t\t\t\t\talert(file.name + \": unsupported zip file - sessionName.txt doesn't exist\");\n\t\t\t\t}\n\n\t\t\t\tconst dropOffQ: { [key: string]: { tabName: string, data: string } } = {};\n\t\t\t\tconst orderedTabs: string[] = [];\n\t\t\t\tarchive.forEach(async (_, jzipObject) => {\n\t\t\t\t\tif (jzipObject.dir && jzipObject.name.startsWith('tab')) {\n\t\t\t\t\t\torderedTabs.push(jzipObject.name);\n\t\t\t\t\t\tconst tabNameFile = archive.files[jzipObject.name + 'tabName.txt'];\n\t\t\t\t\t\tconst tabName = await tabNameFile.async('text');\n\t\t\t\t\t\tconst dataFile = archive.files[jzipObject.name + 'data.txt'];\n\t\t\t\t\t\tconst data = await dataFile.async('text');\n\t\t\t\t\t\tif (orderedTabs[0] === jzipObject.name) {\n\t\t\t\t\t\t\tmainTabStore.importTabFromFile(tabName, data);\n\t\t\t\t\t\t\torderedTabs.shift();\n\t\t\t\t\t\t\twhile (orderedTabs.length > 0 && dropOffQ[orderedTabs[0]] !== undefined) {\n\t\t\t\t\t\t\t\tconst tab = dropOffQ[orderedTabs[0]];\n\t\t\t\t\t\t\t\tdelete dropOffQ[orderedTabs[0]];\n\t\t\t\t\t\t\t\torderedTabs.shift();\n\t\t\t\t\t\t\t\tmainTabStore.importTabFromFile(tab.tabName, tab.data);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdropOffQ[jzipObject.name] = { tabName, data };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tconst noteFile = archive.file('notes.txt');\n\t\t\t\tif (noteFile !== null) {\n\t\t\t\t\tconst notes = await noteFile.async('text');\n\t\t\t\t\tmainTabStore.setNotes(notes);\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t}\n}\n\nexport const sessionStore = new SessionStore();\n","import { makeAutoObservable, action } from \"mobx\";\nimport ProxyConfig, { ConfigProtocol } from '../common/ProxyConfig';\nimport { _getLimit, messageQueueStore } from './MessageQueueStore';\nimport proxyConfigStore from './ProxyConfigStore';\n\nexport type ConfigCategory =\n\t'FORWARD PROXY'\n\t| 'DATA STORES'\n\t| 'GRPC'\n\t| 'HTTP'\n\t| 'JSON LOGS'\n\t| 'TCP';\n\nexport const ConfigCategories: ConfigCategory[] = [\n\t'FORWARD PROXY',\n\t'DATA STORES',\n\t'GRPC',\n\t'HTTP',\n\t'JSON LOGS',\n\t'TCP',\n];\n\nexport const ConfigProtocols: ConfigProtocol[] = [\n\t'browser:',\n\t'grpc:',\n\t'http:',\n\t'https:',\n\t'log:',\n\t'mongo:',\n\t'redis:',\n\t'mysql:',\n\t'tcp:',\n];\n\ninterface ConfigProtocolDescription {\n\tname: string,\n\tprotocol: ConfigProtocol,\n\ttitle: string,\n\tports: number[],\n}\n\nexport const ConfigCategoryGroups: Map = new Map();\nConfigCategoryGroups.set('FORWARD PROXY',\n\t[\n\t\t{\n\t\t\tname: 'Forward Proxy',\n\t\t\tprotocol: 'browser:',\n\t\t\ttitle: 'Forward Proxy',\n\t\t\tports: [8888, 8888],\n\t\t},\n\t]\n);\nConfigCategoryGroups.set('DATA STORES',\n\t[\n\t\t{\n\t\t\tname: 'MongoDB',\n\t\t\tprotocol: 'mongo:',\n\t\t\ttitle: 'MongoDb Reverse Proxy',\n\t\t\tports: [27017],\n\t\t},\n\t\t{\n\t\t\tname: 'Redis',\n\t\t\tprotocol: 'redis:',\n\t\t\ttitle: 'Redis Reverse Proxy',\n\t\t\tports: [6379],\n\t\t},\n\t\t{\n\t\t\tname: 'MySQL',\n\t\t\tprotocol: 'mysql:',\n\t\t\ttitle: 'MySQL Reverse Proxy',\n\t\t\tports: [3306],\n\t\t},\n\t]\n);\nConfigCategoryGroups.set('GRPC',\n\t[\n\t\t{\n\t\t\tname: 'gRPC',\n\t\t\tprotocol: 'grpc:',\n\t\t\ttitle: 'gRPC Reverse Proxy',\n\t\t\tports: [],\n\t\t},\n\t]\n);\nConfigCategoryGroups.set('HTTP',\n\t[\n\t\t{\n\t\t\tname: 'HTTP',\n\t\t\tprotocol: 'http:',\n\t\t\ttitle: 'HTTP Reverse Proxy',\n\t\t\tports: [8888],\n\t\t},\n\t\t{\n\t\t\tname: 'HTTPS',\n\t\t\tprotocol: 'https:',\n\t\t\ttitle: 'HTTPS Reverse Proxy',\n\t\t\tports: [8888],\n\t\t},\n\t]\n);\nConfigCategoryGroups.set('JSON LOGS',\n\t[\n\t\t{\n\t\t\tname: 'Log',\n\t\t\tprotocol: 'log:',\n\t\t\ttitle: 'Log Monitor',\n\t\t\tports: [],\n\t\t},\n\t]\n);\nConfigCategoryGroups.set('TCP',\n\t[\n\t\t{\n\t\t\tname: 'TCP',\n\t\t\tprotocol: 'tcp:',\n\t\t\ttitle: 'TCP Proxy',\n\t\t\tports: [],\n\t\t},\n\t]\n);\n\nexport enum HostStatus {\n\tAll = 'All',\n\tReachable = 'Reachable',\n\tUnreachable = 'Unreachable',\n}\n\nexport default class SettingsStore {\n\tprivate openSettingsModal = false;\n\tprivate tabCategory: ConfigCategory = 'DATA STORES';\n\tprivate tabProtocol: ConfigProtocol = ConfigCategoryGroups.get(this.tabCategory)![0].protocol;\n\n\tprivate changed = false;\n\tprivate protocol: ConfigProtocol | '' = '';\n\n\tprivate statusUpdating = true;\n\tprivate entries: ProxyConfig[] = [];\n\tprivate messageQueueLimit = 0;\n\n\tpublic constructor() {\n\t\tmakeAutoObservable(this);\n\t}\n\n\tpublic getOpenSettingsModal() {\n\t\treturn this.openSettingsModal;\n\t}\n\t@action public toggleOpenSettingsModal() {\n\t\tthis.openSettingsModal = !this.openSettingsModal;\n\t}\n\n\tpublic getTabCategory() {\n\t\treturn this.tabCategory;\n\t}\n\t@action public setTabCategory(cat: ConfigCategory) {\n\t\tthis.tabCategory = cat;\n\t}\n\tpublic getTabProtocol() {\n\t\treturn this.tabProtocol;\n\t}\n\t@action public setTabProtocol(protocol: ConfigProtocol) {\n\t\tthis.tabProtocol = protocol;\n\t}\n\n\tpublic isStatusUpdating() {\n\t\treturn this.statusUpdating;\n\t}\n\n\tpublic setConfig() {\n\t\tthis.entries.splice(0, this.entries.length);\n\t\tconst configs = proxyConfigStore.getProxyConfigs();\n\t\tconfigs.forEach((config) => {\n\t\t\tthis.entries.push(config);\n\t\t});\n\n\t\tthis.statusUpdating = true;\n\t\tproxyConfigStore.retrieveProxyConfigs()\n\t\t\t.then((configs) => {\n\t\t\t\tconfigs.forEach(config => {\n\t\t\t\t\tif (config.protocol === 'log:' || config.protocol === 'browser:') return;\n\t\t\t\t\tfor (const entry of this.entries) {\n\t\t\t\t\t\tif (entry.hostname === config.hostname && entry.port === config.port) {\n\t\t\t\t\t\t\tentry.hostReachable = config.hostReachable;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.statusUpdating = false;\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\t@action public async reset() {\n\t\tthis.changed = false;\n\t\tthis.protocol = 'http:';\n\t\tthis.messageQueueLimit = _getLimit();\n\t\tthis.setConfig();\n\t}\n\n\tpublic isChanged() {\n\t\treturn this.changed;\n\t}\n\n\tpublic getSubTitle() {\n\t\tconst c = ConfigCategoryGroups.get(this.tabCategory)!.find(e => e.protocol === this.protocol);\n\t\treturn c ? c.title : '';\n\t}\n\n\tpublic getConfigCategories(): ConfigCategory[] {\n\t\treturn ConfigCategories;\n\t}\n\n\tpublic getProtocols(): ConfigProtocol[] {\n\t\treturn ConfigProtocols;\n\t}\n\n\tpublic getProtocol() {\n\t\treturn this.protocol;\n\t}\n\n\t@action public setProtocol(protocol: ConfigProtocol) {\n\t\tthis.protocol = protocol;\n\t}\n\n\tpublic isProxyOrLog() {\n\t\treturn this.protocol === 'browser:' || this.protocol === 'log:';\n\t}\n\n\t@action public addEntry(): void {\n\t\tconst proxyConfig = new ProxyConfig();\n\t\tproxyConfig.protocol = this.protocol as ConfigProtocol;\n\t\tthis.entries.push(proxyConfig);\n\t\tthis.changed = true;\n\t}\n\n\t@action public deleteEntry(index: number) {\n\t\tthis.entries.splice(index, 1);\n\t\tthis.changed = true;\n\t}\n\n\t@action public updateEntryProtocol(index: number, value: ConfigProtocol) {\n\t\tconst entry = { ...this.entries[index] };\n\t\tentry.protocol = value;\n\t\tthis.entries.splice(index, 1, entry);\n\t\tthis.changed = true;\n\t}\n\n\t@action public updateEntryPath(index: number, value: string) {\n\t\tconst entry = { ...this.entries[index] };\n\t\tentry.path = value;\n\t\tthis.entries.splice(index, 1, entry);\n\t\tthis.changed = true;\n\t}\n\n\t@action public updateEntryHost(index: number, value: string) {\n\t\tconst entry = { ...this.entries[index] };\n\t\tentry.hostname = value;\n\t\tif (entry.protocol === 'log:' && value.length > 0) {\n\t\t\tentry.port = 0;\n\t\t}\n\t\tthis.entries.splice(index, 1, entry);\n\t\tthis.changed = true;\n\t}\n\n\t@action public updateEntryPort(index: number, value: string) {\n\t\tconst entry = { ...this.entries[index] };\n\t\tentry.port = +value;\n\t\tthis.entries.splice(index, 1, entry);\n\t\tthis.changed = true;\n\t}\n\n\t@action public updateComment(index: number, value: string) {\n\t\tconst entry = { ...this.entries[index] };\n\t\tentry.comment = value;\n\t\tthis.entries.splice(index, 1, entry);\n\t\tthis.changed = true;\n\t}\n\n\t@action public toggleEntryCapture(index: number) {\n\t\tconst entry = { ...this.entries[index] };\n\t\tentry.recording = !entry.recording;\n\t\tthis.entries.splice(index, 1, entry);\n\t\tthis.changed = true;\n\t}\n\n\tpublic isEntrySecure(index: number) {\n\t\tconst entry = { ...this.entries[index] };\n\t\treturn entry.isSecure;\n\t}\n\n\t@action public toggleEntryIsSecure(index: number) {\n\t\tconst entry = { ...this.entries[index] };\n\t\tentry.isSecure = !entry.isSecure;\n\t\tthis.entries.splice(index, 1, entry);\n\t\tthis.changed = true;\n\t}\n\n\tpublic getEntries(hostStatus: HostStatus = HostStatus.All): ProxyConfig[] {\n\t\tif (hostStatus === HostStatus.All) {\n\t\t\treturn this.entries;\n\t\t} else {\n\t\t\tconst hostPorts: Map = new Map();\n\t\t\tconst hostReachable = (hostStatus === HostStatus.Reachable);\n\t\t\treturn this.entries\n\t\t\t\t.filter(entry => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tentry.hostReachable !== hostReachable\n\t\t\t\t\t\t|| entry.protocol === 'browser:'\n\t\t\t\t\t\t|| entry.protocol === 'log:'\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hostPort = entry.hostname + ':' + entry.port;\n\t\t\t\t\tif (hostPorts.get(hostPort)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\thostPorts.set(hostPort, true);\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t}\n\t}\n\n\tpublic getMessageQueueLimit() {\n\t\tif (this.messageQueueLimit === 0) this.messageQueueLimit = _getLimit();\n\t\treturn this.messageQueueLimit;\n\t}\n\n\t@action setMessageQueueLimit(messageQueueLimit: number) {\n\t\tif (this.messageQueueLimit === 0) this.messageQueueLimit = _getLimit();\n\t\tthis.messageQueueLimit = messageQueueLimit;\n\t\tthis.changed = true;\n\t}\n\n\t@action public save() {\n\t\tthis.changed = false;\n\t\tproxyConfigStore.setProxyConfigs(this.entries);\n\t\tmessageQueueStore.setLimit(this.messageQueueLimit);\n\t\tproxyConfigStore.load();\n\t}\n}\n\nexport const settingsStore = new SettingsStore();\n","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nexport default function _createSuper(Derived) {\n var hasNativeReflectConstruct = isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = getPrototypeOf(Derived),\n result;\n if (hasNativeReflectConstruct) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return possibleConstructorReturn(this, result);\n };\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n return assertThisInitialized(self);\n}","import superPropBase from \"./superPropBase.js\";\nexport default function _get() {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get.bind();\n } else {\n _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n return desc.value;\n };\n }\n return _get.apply(this, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nexport default function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n return object;\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct.bind();\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n try {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n } catch (e) {\n return typeof fn === \"function\";\n }\n}","const PACKET_TYPES = Object.create(null); // no Map = no polyfill\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\nconst PACKET_TYPES_REVERSE = Object.create(null);\nObject.keys(PACKET_TYPES).forEach(key => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\nconst ERROR_PACKET = { type: \"error\", data: \"parser error\" };\nexport { PACKET_TYPES, PACKET_TYPES_REVERSE, ERROR_PACKET };\n","import { PACKET_TYPES } from \"./commons.js\";\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = obj => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj && obj.buffer instanceof ArrayBuffer;\n};\nconst encodePacket = ({ type, data }, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(data, callback);\n }\n }\n else if (withNativeArrayBuffer &&\n (data instanceof ArrayBuffer || isView(data))) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(PACKET_TYPES[type] + (data || \"\"));\n};\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function () {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + (content || \"\"));\n };\n return fileReader.readAsDataURL(data);\n};\nfunction toArray(data) {\n if (data instanceof Uint8Array) {\n return data;\n }\n else if (data instanceof ArrayBuffer) {\n return new Uint8Array(data);\n }\n else {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n }\n}\nlet TEXT_ENCODER;\nexport function encodePacketToBinary(packet, callback) {\n if (withNativeBlob && packet.data instanceof Blob) {\n return packet.data\n .arrayBuffer()\n .then(toArray)\n .then(callback);\n }\n else if (withNativeArrayBuffer &&\n (packet.data instanceof ArrayBuffer || isView(packet.data))) {\n return callback(toArray(packet.data));\n }\n encodePacket(packet, false, encoded => {\n if (!TEXT_ENCODER) {\n TEXT_ENCODER = new TextEncoder();\n }\n callback(TEXT_ENCODER.encode(encoded));\n });\n}\nexport { encodePacket };\n","// imported from https://github.com/socketio/base64-arraybuffer\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nexport const encode = (arraybuffer) => {\n let bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nexport const decode = (base64) => {\n let bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n const arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\n","import { encodePacket, encodePacketToBinary } from \"./encodePacket.js\";\nimport { decodePacket } from \"./decodePacket.js\";\nimport { ERROR_PACKET } from \"./commons.js\";\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n encodePacket(packet, false, encodedPacket => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = decodePacket(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\nexport function createPacketEncoderStream() {\n return new TransformStream({\n transform(packet, controller) {\n encodePacketToBinary(packet, encodedPacket => {\n const payloadLength = encodedPacket.length;\n let header;\n // inspired by the WebSocket format: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#decoding_payload_length\n if (payloadLength < 126) {\n header = new Uint8Array(1);\n new DataView(header.buffer).setUint8(0, payloadLength);\n }\n else if (payloadLength < 65536) {\n header = new Uint8Array(3);\n const view = new DataView(header.buffer);\n view.setUint8(0, 126);\n view.setUint16(1, payloadLength);\n }\n else {\n header = new Uint8Array(9);\n const view = new DataView(header.buffer);\n view.setUint8(0, 127);\n view.setBigUint64(1, BigInt(payloadLength));\n }\n // first bit indicates whether the payload is plain text (0) or binary (1)\n if (packet.data && typeof packet.data !== \"string\") {\n header[0] |= 0x80;\n }\n controller.enqueue(header);\n controller.enqueue(encodedPacket);\n });\n }\n });\n}\nlet TEXT_DECODER;\nfunction totalLength(chunks) {\n return chunks.reduce((acc, chunk) => acc + chunk.length, 0);\n}\nfunction concatChunks(chunks, size) {\n if (chunks[0].length === size) {\n return chunks.shift();\n }\n const buffer = new Uint8Array(size);\n let j = 0;\n for (let i = 0; i < size; i++) {\n buffer[i] = chunks[0][j++];\n if (j === chunks[0].length) {\n chunks.shift();\n j = 0;\n }\n }\n if (chunks.length && j < chunks[0].length) {\n chunks[0] = chunks[0].slice(j);\n }\n return buffer;\n}\nexport function createPacketDecoderStream(maxPayload, binaryType) {\n if (!TEXT_DECODER) {\n TEXT_DECODER = new TextDecoder();\n }\n const chunks = [];\n let state = 0 /* READ_HEADER */;\n let expectedLength = -1;\n let isBinary = false;\n return new TransformStream({\n transform(chunk, controller) {\n chunks.push(chunk);\n while (true) {\n if (state === 0 /* READ_HEADER */) {\n if (totalLength(chunks) < 1) {\n break;\n }\n const header = concatChunks(chunks, 1);\n isBinary = (header[0] & 0x80) === 0x80;\n expectedLength = header[0] & 0x7f;\n if (expectedLength < 126) {\n state = 3 /* READ_PAYLOAD */;\n }\n else if (expectedLength === 126) {\n state = 1 /* READ_EXTENDED_LENGTH_16 */;\n }\n else {\n state = 2 /* READ_EXTENDED_LENGTH_64 */;\n }\n }\n else if (state === 1 /* READ_EXTENDED_LENGTH_16 */) {\n if (totalLength(chunks) < 2) {\n break;\n }\n const headerArray = concatChunks(chunks, 2);\n expectedLength = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length).getUint16(0);\n state = 3 /* READ_PAYLOAD */;\n }\n else if (state === 2 /* READ_EXTENDED_LENGTH_64 */) {\n if (totalLength(chunks) < 8) {\n break;\n }\n const headerArray = concatChunks(chunks, 8);\n const view = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length);\n const n = view.getUint32(0);\n if (n > Math.pow(2, 53 - 32) - 1) {\n // the maximum safe integer in JavaScript is 2^53 - 1\n controller.enqueue(ERROR_PACKET);\n break;\n }\n expectedLength = n * Math.pow(2, 32) + view.getUint32(4);\n state = 3 /* READ_PAYLOAD */;\n }\n else {\n if (totalLength(chunks) < expectedLength) {\n break;\n }\n const data = concatChunks(chunks, expectedLength);\n controller.enqueue(decodePacket(isBinary ? data : TEXT_DECODER.decode(data), binaryType));\n state = 0 /* READ_HEADER */;\n }\n if (expectedLength === 0 || expectedLength > maxPayload) {\n controller.enqueue(ERROR_PACKET);\n break;\n }\n }\n }\n });\n}\nexport const protocol = 4;\nexport { encodePacket, encodePayload, decodePacket, decodePayload };\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"./contrib/base64-arraybuffer.js\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nexport const decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType)\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType)\n };\n }\n const packetType = PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return ERROR_PACKET;\n }\n return encodedPacket.length > 1\n ? {\n type: PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1)\n }\n : {\n type: PACKET_TYPES_REVERSE[type]\n };\n};\nconst decodeBase64Packet = (data, binaryType) => {\n if (withNativeArrayBuffer) {\n const decoded = decode(data);\n return mapBinary(decoded, binaryType);\n }\n else {\n return { base64: true, data }; // fallback for old browsers\n }\n};\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n if (data instanceof Blob) {\n // from WebSocket + binaryType \"blob\"\n return data;\n }\n else {\n // from HTTP long-polling or WebTransport\n return new Blob([data]);\n }\n case \"arraybuffer\":\n default:\n if (data instanceof ArrayBuffer) {\n // from HTTP long-polling (base64) or WebSocket + binaryType \"arraybuffer\"\n return data;\n }\n else {\n // from WebTransport (Uint8Array)\n return data.buffer;\n }\n }\n};\n","/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nexport function Emitter(obj) {\n if (obj) return mixin(obj);\n}\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n\n var args = new Array(arguments.length - 1)\n , callbacks = this._callbacks['$' + event];\n\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n// alias used for reserved events (protected method)\nEmitter.prototype.emitReserved = Emitter.prototype.emit;\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n","export const globalThisShim = (() => {\n if (typeof self !== \"undefined\") {\n return self;\n }\n else if (typeof window !== \"undefined\") {\n return window;\n }\n else {\n return Function(\"return this\")();\n }\n})();\n","import { globalThisShim as globalThis } from \"./globalThis.js\";\nexport function pick(obj, ...attr) {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n}\n// Keep a reference to the real timeout functions so they can be used when overridden\nconst NATIVE_SET_TIMEOUT = globalThis.setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = globalThis.clearTimeout;\nexport function installTimerFunctions(obj, opts) {\n if (opts.useNativeTimers) {\n obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globalThis);\n obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globalThis);\n }\n else {\n obj.setTimeoutFn = globalThis.setTimeout.bind(globalThis);\n obj.clearTimeoutFn = globalThis.clearTimeout.bind(globalThis);\n }\n}\n// base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64)\nconst BASE64_OVERHEAD = 1.33;\n// we could also have used `new Blob([obj]).size`, but it isn't supported in IE9\nexport function byteLength(obj) {\n if (typeof obj === \"string\") {\n return utf8Length(obj);\n }\n // arraybuffer or blob\n return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD);\n}\nfunction utf8Length(str) {\n let c = 0, length = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nimport { encode } from \"./contrib/parseqs.js\";\nclass TransportError extends Error {\n constructor(reason, description, context) {\n super(reason);\n this.description = description;\n this.context = context;\n this.type = \"TransportError\";\n }\n}\nexport class Transport extends Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} opts - options\n * @protected\n */\n constructor(opts) {\n super();\n this.writable = false;\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.query = opts.query;\n this.socket = opts.socket;\n }\n /**\n * Emits an error.\n *\n * @param {String} reason\n * @param description\n * @param context - the error context\n * @return {Transport} for chaining\n * @protected\n */\n onError(reason, description, context) {\n super.emitReserved(\"error\", new TransportError(reason, description, context));\n return this;\n }\n /**\n * Opens the transport.\n */\n open() {\n this.readyState = \"opening\";\n this.doOpen();\n return this;\n }\n /**\n * Closes the transport.\n */\n close() {\n if (this.readyState === \"opening\" || this.readyState === \"open\") {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n */\n send(packets) {\n if (this.readyState === \"open\") {\n this.write(packets);\n }\n else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n }\n }\n /**\n * Called upon open\n *\n * @protected\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n super.emitReserved(\"open\");\n }\n /**\n * Called with data.\n *\n * @param {String} data\n * @protected\n */\n onData(data) {\n const packet = decodePacket(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n /**\n * Called with a decoded packet.\n *\n * @protected\n */\n onPacket(packet) {\n super.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @protected\n */\n onClose(details) {\n this.readyState = \"closed\";\n super.emitReserved(\"close\", details);\n }\n /**\n * Pauses the transport, in order not to lose packets during an upgrade.\n *\n * @param onPause\n */\n pause(onPause) { }\n createUri(schema, query = {}) {\n return (schema +\n \"://\" +\n this._hostname() +\n this._port() +\n this.opts.path +\n this._query(query));\n }\n _hostname() {\n const hostname = this.opts.hostname;\n return hostname.indexOf(\":\") === -1 ? hostname : \"[\" + hostname + \"]\";\n }\n _port() {\n if (this.opts.port &&\n ((this.opts.secure && Number(this.opts.port !== 443)) ||\n (!this.opts.secure && Number(this.opts.port) !== 80))) {\n return \":\" + this.opts.port;\n }\n else {\n return \"\";\n }\n }\n _query(query) {\n const encodedQuery = encode(query);\n return encodedQuery.length ? \"?\" + encodedQuery : \"\";\n }\n}\n","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\n","// imported from https://github.com/galkn/querystring\n/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\nexport function encode(obj) {\n let str = '';\n for (let i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length)\n str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n return str;\n}\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\nexport function decode(qs) {\n let qry = {};\n let pairs = qs.split('&');\n for (let i = 0, l = pairs.length; i < l; i++) {\n let pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n}\n","// imported from https://github.com/component/has-cors\nlet value = false;\ntry {\n value = typeof XMLHttpRequest !== 'undefined' &&\n 'withCredentials' in new XMLHttpRequest();\n}\ncatch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n}\nexport const hasCORS = value;\n","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(opts) {\n const xdomain = opts.xdomain;\n // XMLHttpRequest can be disabled on IE\n try {\n if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n return new XMLHttpRequest();\n }\n }\n catch (e) { }\n if (!xdomain) {\n try {\n return new globalThis[[\"Active\"].concat(\"Object\").join(\"X\")](\"Microsoft.XMLHTTP\");\n }\n catch (e) { }\n }\n}\nexport function createCookieJar() { }\n","import { Transport } from \"../transport.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { createCookieJar, XHR as XMLHttpRequest, } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false,\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? \"443\" : \"80\";\n }\n this.xd =\n (typeof location !== \"undefined\" &&\n opts.hostname !== location.hostname) ||\n port !== opts.port;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n if (this.opts.withCredentials) {\n this.cookieJar = createCookieJar();\n }\n }\n get name() {\n return \"polling\";\n }\n /**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @protected\n */\n doOpen() {\n this.poll();\n }\n /**\n * Pauses polling.\n *\n * @param {Function} onPause - callback upon buffers are flushed and transport is paused\n * @package\n */\n pause(onPause) {\n this.readyState = \"pausing\";\n const pause = () => {\n this.readyState = \"paused\";\n onPause();\n };\n if (this.polling || !this.writable) {\n let total = 0;\n if (this.polling) {\n total++;\n this.once(\"pollComplete\", function () {\n --total || pause();\n });\n }\n if (!this.writable) {\n total++;\n this.once(\"drain\", function () {\n --total || pause();\n });\n }\n }\n else {\n pause();\n }\n }\n /**\n * Starts polling cycle.\n *\n * @private\n */\n poll() {\n this.polling = true;\n this.doPoll();\n this.emitReserved(\"poll\");\n }\n /**\n * Overloads onData to detect payloads.\n *\n * @protected\n */\n onData(data) {\n const callback = (packet) => {\n // if its the first message we consider the transport open\n if (\"opening\" === this.readyState && packet.type === \"open\") {\n this.onOpen();\n }\n // if its a close packet, we close the ongoing requests\n if (\"close\" === packet.type) {\n this.onClose({ description: \"transport closed by the server\" });\n return false;\n }\n // otherwise bypass onData and handle the message\n this.onPacket(packet);\n };\n // decode payload\n decodePayload(data, this.socket.binaryType).forEach(callback);\n // if an event did not trigger closing\n if (\"closed\" !== this.readyState) {\n // if we got data we're not polling\n this.polling = false;\n this.emitReserved(\"pollComplete\");\n if (\"open\" === this.readyState) {\n this.poll();\n }\n else {\n }\n }\n }\n /**\n * For polling, send a close packet.\n *\n * @protected\n */\n doClose() {\n const close = () => {\n this.write([{ type: \"close\" }]);\n };\n if (\"open\" === this.readyState) {\n close();\n }\n else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n this.once(\"open\", close);\n }\n }\n /**\n * Writes a packets payload.\n *\n * @param {Array} packets - data packets\n * @protected\n */\n write(packets) {\n this.writable = false;\n encodePayload(packets, (data) => {\n this.doWrite(data, () => {\n this.writable = true;\n this.emitReserved(\"drain\");\n });\n });\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"https\" : \"http\";\n const query = this.query || {};\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, cookieJar: this.cookieJar }, this.opts);\n return new Request(this.uri(), opts);\n }\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @private\n */\n doWrite(data, fn) {\n const req = this.request({\n method: \"POST\",\n data: data,\n });\n req.on(\"success\", fn);\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr post error\", xhrStatus, context);\n });\n }\n /**\n * Starts a poll cycle.\n *\n * @private\n */\n doPoll() {\n const req = this.request();\n req.on(\"data\", this.onData.bind(this));\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr poll error\", xhrStatus, context);\n });\n this.pollXhr = req;\n }\n}\nexport class Request extends Emitter {\n /**\n * Request constructor\n *\n * @param {Object} options\n * @package\n */\n constructor(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.data = undefined !== opts.data ? opts.data : null;\n this.create();\n }\n /**\n * Creates the XHR object and sends the request.\n *\n * @private\n */\n create() {\n var _a;\n const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, true);\n try {\n if (this.opts.extraHeaders) {\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (let i in this.opts.extraHeaders) {\n if (this.opts.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this.opts.extraHeaders[i]);\n }\n }\n }\n }\n catch (e) { }\n if (\"POST\" === this.method) {\n try {\n xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n }\n catch (e) { }\n }\n try {\n xhr.setRequestHeader(\"Accept\", \"*/*\");\n }\n catch (e) { }\n (_a = this.opts.cookieJar) === null || _a === void 0 ? void 0 : _a.addCookies(xhr);\n // ie6 check\n if (\"withCredentials\" in xhr) {\n xhr.withCredentials = this.opts.withCredentials;\n }\n if (this.opts.requestTimeout) {\n xhr.timeout = this.opts.requestTimeout;\n }\n xhr.onreadystatechange = () => {\n var _a;\n if (xhr.readyState === 3) {\n (_a = this.opts.cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies(xhr);\n }\n if (4 !== xhr.readyState)\n return;\n if (200 === xhr.status || 1223 === xhr.status) {\n this.onLoad();\n }\n else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n this.setTimeoutFn(() => {\n this.onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n }, 0);\n }\n };\n xhr.send(this.data);\n }\n catch (e) {\n // Need to defer since .create() is called directly from the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n this.setTimeoutFn(() => {\n this.onError(e);\n }, 0);\n return;\n }\n if (typeof document !== \"undefined\") {\n this.index = Request.requestsCount++;\n Request.requests[this.index] = this;\n }\n }\n /**\n * Called upon error.\n *\n * @private\n */\n onError(err) {\n this.emitReserved(\"error\", err, this.xhr);\n this.cleanup(true);\n }\n /**\n * Cleans up house.\n *\n * @private\n */\n cleanup(fromError) {\n if (\"undefined\" === typeof this.xhr || null === this.xhr) {\n return;\n }\n this.xhr.onreadystatechange = empty;\n if (fromError) {\n try {\n this.xhr.abort();\n }\n catch (e) { }\n }\n if (typeof document !== \"undefined\") {\n delete Request.requests[this.index];\n }\n this.xhr = null;\n }\n /**\n * Called upon load.\n *\n * @private\n */\n onLoad() {\n const data = this.xhr.responseText;\n if (data !== null) {\n this.emitReserved(\"data\", data);\n this.emitReserved(\"success\");\n this.cleanup();\n }\n }\n /**\n * Aborts the request.\n *\n * @package\n */\n abort() {\n this.cleanup();\n }\n}\nRequest.requestsCount = 0;\nRequest.requests = {};\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\nif (typeof document !== \"undefined\") {\n // @ts-ignore\n if (typeof attachEvent === \"function\") {\n // @ts-ignore\n attachEvent(\"onunload\", unloadHandler);\n }\n else if (typeof addEventListener === \"function\") {\n const terminationEvent = \"onpagehide\" in globalThis ? \"pagehide\" : \"unload\";\n addEventListener(terminationEvent, unloadHandler, false);\n }\n}\nfunction unloadHandler() {\n for (let i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\n","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport const nextTick = (() => {\n const isPromiseAvailable = typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return (cb) => Promise.resolve().then(cb);\n }\n else {\n return (cb, setTimeoutFn) => setTimeoutFn(cb, 0);\n }\n})();\nexport const WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n","import { Transport } from \"../transport.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { nextTick, usingBrowserWebSocket, WebSocket, } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @param {Object} opts - connection options\n * @protected\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n get name() {\n return \"websocket\";\n }\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\n const uri = this.uri();\n const protocols = this.opts.protocols;\n // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n const opts = isReactNative\n ? {}\n : pick(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n if (this.opts.extraHeaders) {\n opts.headers = this.opts.extraHeaders;\n }\n try {\n this.ws =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @private\n */\n addEventListeners() {\n this.ws.onopen = () => {\n if (this.opts.autoUnref) {\n this.ws._socket.unref();\n }\n this.onOpen();\n };\n this.ws.onclose = (closeEvent) => this.onClose({\n description: \"websocket connection closed\",\n context: closeEvent,\n });\n this.ws.onmessage = (ev) => this.onData(ev.data);\n this.ws.onerror = (e) => this.onError(\"websocket error\", e);\n }\n write(packets) {\n this.writable = false;\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n encodePacket(packet, this.supportsBinary, (data) => {\n // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\n // Sometimes the websocket has already been closed but the browser didn't\n // have a chance of informing us about it yet, in that case send will\n // throw an error\n try {\n if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\n }\n catch (e) {\n }\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n nextTick(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n const query = this.query || {};\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @private\n */\n check() {\n return !!WebSocket;\n }\n}\n","import { Transport } from \"../transport.js\";\nimport { nextTick } from \"./websocket-constructor.js\";\nimport { createPacketDecoderStream, createPacketEncoderStream, } from \"engine.io-parser\";\nexport class WT extends Transport {\n get name() {\n return \"webtransport\";\n }\n doOpen() {\n // @ts-ignore\n if (typeof WebTransport !== \"function\") {\n return;\n }\n // @ts-ignore\n this.transport = new WebTransport(this.createUri(\"https\"), this.opts.transportOptions[this.name]);\n this.transport.closed\n .then(() => {\n this.onClose();\n })\n .catch((err) => {\n this.onError(\"webtransport error\", err);\n });\n // note: we could have used async/await, but that would require some additional polyfills\n this.transport.ready.then(() => {\n this.transport.createBidirectionalStream().then((stream) => {\n const decoderStream = createPacketDecoderStream(Number.MAX_SAFE_INTEGER, this.socket.binaryType);\n const reader = stream.readable.pipeThrough(decoderStream).getReader();\n const encoderStream = createPacketEncoderStream();\n encoderStream.readable.pipeTo(stream.writable);\n this.writer = encoderStream.writable.getWriter();\n const read = () => {\n reader\n .read()\n .then(({ done, value }) => {\n if (done) {\n return;\n }\n this.onPacket(value);\n read();\n })\n .catch((err) => {\n });\n };\n read();\n const packet = { type: \"open\" };\n if (this.query.sid) {\n packet.data = `{\"sid\":\"${this.query.sid}\"}`;\n }\n this.writer.write(packet).then(() => this.onOpen());\n });\n });\n }\n write(packets) {\n this.writable = false;\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n this.writer.write(packet).then(() => {\n if (lastPacket) {\n nextTick(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n var _a;\n (_a = this.transport) === null || _a === void 0 ? void 0 : _a.close();\n }\n}\n","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nimport { WT } from \"./webtransport.js\";\nexport const transports = {\n websocket: WS,\n webtransport: WT,\n polling: Polling,\n};\n","// imported from https://github.com/galkn/parseuri\n/**\n * Parses a URI\n *\n * Note: we could also have used the built-in URL object, but it isn't supported on all platforms.\n *\n * See:\n * - https://developer.mozilla.org/en-US/docs/Web/API/URL\n * - https://caniuse.com/url\n * - https://www.rfc-editor.org/rfc/rfc3986#appendix-B\n *\n * History of the parse() method:\n * - first commit: https://github.com/socketio/socket.io-client/commit/4ee1d5d94b3906a9c052b459f1a818b15f38f91c\n * - export into its own module: https://github.com/socketio/engine.io-client/commit/de2c561e4564efeb78f1bdb1ba39ef81b2822cb3\n * - reimport: https://github.com/socketio/engine.io-client/commit/df32277c3f6d622eec5ed09f493cae3f3391d242\n *\n * @author Steven Levithan (MIT license)\n * @api private\n */\nconst re = /^(?:(?![^:@\\/?#]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@\\/?#]*)(?::([^:@\\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\nconst parts = [\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\nexport function parse(str) {\n const src = str, b = str.indexOf('['), e = str.indexOf(']');\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n let m = re.exec(str || ''), uri = {}, i = 14;\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n return uri;\n}\nfunction pathNames(obj, path) {\n const regx = /\\/{2,9}/g, names = path.replace(regx, \"/\").split(\"/\");\n if (path.slice(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.slice(-1) == '/') {\n names.splice(names.length - 1, 1);\n }\n return names;\n}\nfunction queryKey(uri, query) {\n const data = {};\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n return data;\n}\n","import { transports } from \"./transports/index.js\";\nimport { installTimerFunctions, byteLength } from \"./util.js\";\nimport { decode } from \"./contrib/parseqs.js\";\nimport { parse } from \"./contrib/parseuri.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { protocol } from \"engine.io-parser\";\nimport { defaultBinaryType } from \"./transports/websocket-constructor.js\";\nexport class Socket extends Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri - uri or options\n * @param {Object} opts - options\n */\n constructor(uri, opts = {}) {\n super();\n this.binaryType = defaultBinaryType;\n this.writeBuffer = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.query;\n }\n else if (opts.host) {\n opts.hostname = parse(opts.host).host;\n }\n installTimerFunctions(this, opts);\n this.secure =\n null != opts.secure\n ? opts.secure\n : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? \"443\" : \"80\";\n }\n this.hostname =\n opts.hostname ||\n (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n this.port =\n opts.port ||\n (typeof location !== \"undefined\" && location.port\n ? location.port\n : this.secure\n ? \"443\"\n : \"80\");\n this.transports = opts.transports || [\n \"polling\",\n \"websocket\",\n \"webtransport\",\n ];\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n this.opts = Object.assign({\n path: \"/engine.io\",\n agent: false,\n withCredentials: false,\n upgrade: true,\n timestampParam: \"t\",\n rememberUpgrade: false,\n addTrailingSlash: true,\n rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024,\n },\n transportOptions: {},\n closeOnBeforeunload: false,\n }, opts);\n this.opts.path =\n this.opts.path.replace(/\\/$/, \"\") +\n (this.opts.addTrailingSlash ? \"/\" : \"\");\n if (typeof this.opts.query === \"string\") {\n this.opts.query = decode(this.opts.query);\n }\n // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\n if (this.opts.closeOnBeforeunload) {\n // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n // closed/reloaded)\n this.beforeunloadEventListener = () => {\n if (this.transport) {\n // silently close the transport\n this.transport.removeAllListeners();\n this.transport.close();\n }\n };\n addEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n }\n if (this.hostname !== \"localhost\") {\n this.offlineEventListener = () => {\n this.onClose(\"transport close\", {\n description: \"network connection lost\",\n });\n };\n addEventListener(\"offline\", this.offlineEventListener, false);\n }\n }\n this.open();\n }\n /**\n * Creates transport of the given type.\n *\n * @param {String} name - transport name\n * @return {Transport}\n * @private\n */\n createTransport(name) {\n const query = Object.assign({}, this.opts.query);\n // append engine.io protocol identifier\n query.EIO = protocol;\n // transport name\n query.transport = name;\n // session id if we already have one\n if (this.id)\n query.sid = this.id;\n const opts = Object.assign({}, this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port,\n }, this.opts.transportOptions[name]);\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\n // Emit error on next tick so it can be listened to\n this.setTimeoutFn(() => {\n this.emitReserved(\"error\", \"No transports available\");\n }, 0);\n return;\n }\n else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\n transport.open();\n this.setTransport(transport);\n }\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @private\n */\n setTransport(transport) {\n if (this.transport) {\n this.transport.removeAllListeners();\n }\n // set up transport\n this.transport = transport;\n // set up transport listeners\n transport\n .on(\"drain\", this.onDrain.bind(this))\n .on(\"packet\", this.onPacket.bind(this))\n .on(\"error\", this.onError.bind(this))\n .on(\"close\", (reason) => this.onClose(\"transport close\", reason));\n }\n /**\n * Probes a transport.\n *\n * @param {String} name - transport name\n * @private\n */\n probe(name) {\n let transport = this.createTransport(name);\n let failed = false;\n Socket.priorWebsocketSuccess = false;\n const onTransportOpen = () => {\n if (failed)\n return;\n transport.send([{ type: \"ping\", data: \"probe\" }]);\n transport.once(\"packet\", (msg) => {\n if (failed)\n return;\n if (\"pong\" === msg.type && \"probe\" === msg.data) {\n this.upgrading = true;\n this.emitReserved(\"upgrading\", transport);\n if (!transport)\n return;\n Socket.priorWebsocketSuccess = \"websocket\" === transport.name;\n this.transport.pause(() => {\n if (failed)\n return;\n if (\"closed\" === this.readyState)\n return;\n cleanup();\n this.setTransport(transport);\n transport.send([{ type: \"upgrade\" }]);\n this.emitReserved(\"upgrade\", transport);\n transport = null;\n this.upgrading = false;\n this.flush();\n });\n }\n else {\n const err = new Error(\"probe error\");\n // @ts-ignore\n err.transport = transport.name;\n this.emitReserved(\"upgradeError\", err);\n }\n });\n };\n function freezeTransport() {\n if (failed)\n return;\n // Any callback called by transport should be ignored since now\n failed = true;\n cleanup();\n transport.close();\n transport = null;\n }\n // Handle any error that happens while probing\n const onerror = (err) => {\n const error = new Error(\"probe error: \" + err);\n // @ts-ignore\n error.transport = transport.name;\n freezeTransport();\n this.emitReserved(\"upgradeError\", error);\n };\n function onTransportClose() {\n onerror(\"transport closed\");\n }\n // When the socket is closed while we're probing\n function onclose() {\n onerror(\"socket closed\");\n }\n // When the socket is upgraded while we're probing\n function onupgrade(to) {\n if (transport && to.name !== transport.name) {\n freezeTransport();\n }\n }\n // Remove all listeners on the transport and on self\n const cleanup = () => {\n transport.removeListener(\"open\", onTransportOpen);\n transport.removeListener(\"error\", onerror);\n transport.removeListener(\"close\", onTransportClose);\n this.off(\"close\", onclose);\n this.off(\"upgrading\", onupgrade);\n };\n transport.once(\"open\", onTransportOpen);\n transport.once(\"error\", onerror);\n transport.once(\"close\", onTransportClose);\n this.once(\"close\", onclose);\n this.once(\"upgrading\", onupgrade);\n if (this.upgrades.indexOf(\"webtransport\") !== -1 &&\n name !== \"webtransport\") {\n // favor WebTransport\n this.setTimeoutFn(() => {\n if (!failed) {\n transport.open();\n }\n }, 200);\n }\n else {\n transport.open();\n }\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState && this.opts.upgrade) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\n }\n /**\n * Handles a packet.\n *\n * @private\n */\n onPacket(packet) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n this.emitReserved(\"packet\", packet);\n // Socket is live - any packet counts\n this.emitReserved(\"heartbeat\");\n this.resetPingTimeout();\n switch (packet.type) {\n case \"open\":\n this.onHandshake(JSON.parse(packet.data));\n break;\n case \"ping\":\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\n break;\n case \"error\":\n const err = new Error(\"server error\");\n // @ts-ignore\n err.code = packet.data;\n this.onError(err);\n break;\n case \"message\":\n this.emitReserved(\"data\", packet.data);\n this.emitReserved(\"message\", packet.data);\n break;\n }\n }\n else {\n }\n }\n /**\n * Called upon handshake completion.\n *\n * @param {Object} data - handshake obj\n * @private\n */\n onHandshake(data) {\n this.emitReserved(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this.upgrades = this.filterUpgrades(data.upgrades);\n this.pingInterval = data.pingInterval;\n this.pingTimeout = data.pingTimeout;\n this.maxPayload = data.maxPayload;\n this.onOpen();\n // In case open handler closes socket\n if (\"closed\" === this.readyState)\n return;\n this.resetPingTimeout();\n }\n /**\n * Sets and resets ping timeout timer based on server pings.\n *\n * @private\n */\n resetPingTimeout() {\n this.clearTimeoutFn(this.pingTimeoutTimer);\n this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\n if (this.opts.autoUnref) {\n this.pingTimeoutTimer.unref();\n }\n }\n /**\n * Called on `drain` event\n *\n * @private\n */\n onDrain() {\n this.writeBuffer.splice(0, this.prevBufferLen);\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this.prevBufferLen = 0;\n if (0 === this.writeBuffer.length) {\n this.emitReserved(\"drain\");\n }\n else {\n this.flush();\n }\n }\n /**\n * Flush write buffers.\n *\n * @private\n */\n flush() {\n if (\"closed\" !== this.readyState &&\n this.transport.writable &&\n !this.upgrading &&\n this.writeBuffer.length) {\n const packets = this.getWritablePackets();\n this.transport.send(packets);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this.prevBufferLen = packets.length;\n this.emitReserved(\"flush\");\n }\n }\n /**\n * Ensure the encoded size of the writeBuffer is below the maxPayload value sent by the server (only for HTTP\n * long-polling)\n *\n * @private\n */\n getWritablePackets() {\n const shouldCheckPayloadSize = this.maxPayload &&\n this.transport.name === \"polling\" &&\n this.writeBuffer.length > 1;\n if (!shouldCheckPayloadSize) {\n return this.writeBuffer;\n }\n let payloadSize = 1; // first packet type\n for (let i = 0; i < this.writeBuffer.length; i++) {\n const data = this.writeBuffer[i].data;\n if (data) {\n payloadSize += byteLength(data);\n }\n if (i > 0 && payloadSize > this.maxPayload) {\n return this.writeBuffer.slice(0, i);\n }\n payloadSize += 2; // separator + packet type\n }\n return this.writeBuffer;\n }\n /**\n * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} callback function.\n * @return {Socket} for chaining.\n */\n write(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n send(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a packet.\n *\n * @param {String} type: packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @private\n */\n sendPacket(type, data, options, fn) {\n if (\"function\" === typeof data) {\n fn = data;\n data = undefined;\n }\n if (\"function\" === typeof options) {\n fn = options;\n options = null;\n }\n if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n return;\n }\n options = options || {};\n options.compress = false !== options.compress;\n const packet = {\n type: type,\n data: data,\n options: options,\n };\n this.emitReserved(\"packetCreate\", packet);\n this.writeBuffer.push(packet);\n if (fn)\n this.once(\"flush\", fn);\n this.flush();\n }\n /**\n * Closes the connection.\n */\n close() {\n const close = () => {\n this.onClose(\"forced close\");\n this.transport.close();\n };\n const cleanupAndClose = () => {\n this.off(\"upgrade\", cleanupAndClose);\n this.off(\"upgradeError\", cleanupAndClose);\n close();\n };\n const waitForUpgrade = () => {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n this.once(\"upgrade\", cleanupAndClose);\n this.once(\"upgradeError\", cleanupAndClose);\n };\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.readyState = \"closing\";\n if (this.writeBuffer.length) {\n this.once(\"drain\", () => {\n if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n });\n }\n else if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n }\n return this;\n }\n /**\n * Called upon transport error\n *\n * @private\n */\n onError(err) {\n Socket.priorWebsocketSuccess = false;\n this.emitReserved(\"error\", err);\n this.onClose(\"transport error\", err);\n }\n /**\n * Called upon transport close.\n *\n * @private\n */\n onClose(reason, description) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n // clear timers\n this.clearTimeoutFn(this.pingTimeoutTimer);\n // stop event from firing again for transport\n this.transport.removeAllListeners(\"close\");\n // ensure transport won't stay open\n this.transport.close();\n // ignore further transport communication\n this.transport.removeAllListeners();\n if (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\n }\n // set ready state\n this.readyState = \"closed\";\n // clear session id\n this.id = null;\n // emit close event\n this.emitReserved(\"close\", reason, description);\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n }\n }\n /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} upgrades - server upgrades\n * @private\n */\n filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n","import { Socket } from \"./socket.js\";\nexport { Socket };\nexport const protocol = Socket.protocol;\nexport { Transport } from \"./transport.js\";\nexport { transports } from \"./transports/index.js\";\nexport { installTimerFunctions } from \"./util.js\";\nexport { parse } from \"./contrib/parseuri.js\";\nexport { nextTick } from \"./transports/websocket-constructor.js\";\n","const withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = (obj) => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeFile = typeof File === \"function\" ||\n (typeof File !== \"undefined\" &&\n toString.call(File) === \"[object FileConstructor]\");\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nexport function isBinary(obj) {\n return ((withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj))) ||\n (withNativeBlob && obj instanceof Blob) ||\n (withNativeFile && obj instanceof File));\n}\nexport function hasBinary(obj, toJSON) {\n if (!obj || typeof obj !== \"object\") {\n return false;\n }\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (hasBinary(obj[i])) {\n return true;\n }\n }\n return false;\n }\n if (isBinary(obj)) {\n return true;\n }\n if (obj.toJSON &&\n typeof obj.toJSON === \"function\" &&\n arguments.length === 1) {\n return hasBinary(obj.toJSON(), true);\n }\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n return true;\n }\n }\n return false;\n}\n","import { isBinary } from \"./is-binary.js\";\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nexport function deconstructPacket(packet) {\n const buffers = [];\n const packetData = packet.data;\n const pack = packet;\n pack.data = _deconstructPacket(packetData, buffers);\n pack.attachments = buffers.length; // number of binary 'attachments'\n return { packet: pack, buffers: buffers };\n}\nfunction _deconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (isBinary(data)) {\n const placeholder = { _placeholder: true, num: buffers.length };\n buffers.push(data);\n return placeholder;\n }\n else if (Array.isArray(data)) {\n const newData = new Array(data.length);\n for (let i = 0; i < data.length; i++) {\n newData[i] = _deconstructPacket(data[i], buffers);\n }\n return newData;\n }\n else if (typeof data === \"object\" && !(data instanceof Date)) {\n const newData = {};\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newData[key] = _deconstructPacket(data[key], buffers);\n }\n }\n return newData;\n }\n return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nexport function reconstructPacket(packet, buffers) {\n packet.data = _reconstructPacket(packet.data, buffers);\n delete packet.attachments; // no longer useful\n return packet;\n}\nfunction _reconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (data && data._placeholder === true) {\n const isIndexValid = typeof data.num === \"number\" &&\n data.num >= 0 &&\n data.num < buffers.length;\n if (isIndexValid) {\n return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n }\n else {\n throw new Error(\"illegal attachments\");\n }\n }\n else if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n data[i] = _reconstructPacket(data[i], buffers);\n }\n }\n else if (typeof data === \"object\") {\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n data[key] = _reconstructPacket(data[key], buffers);\n }\n }\n }\n return data;\n}\n","import { Emitter } from \"@socket.io/component-emitter\";\nimport { deconstructPacket, reconstructPacket } from \"./binary.js\";\nimport { isBinary, hasBinary } from \"./is-binary.js\";\n/**\n * These strings must not be used as event names, as they have a special meaning.\n */\nconst RESERVED_EVENTS = [\n \"connect\",\n \"connect_error\",\n \"disconnect\",\n \"disconnecting\",\n \"newListener\",\n \"removeListener\", // used by the Node.js EventEmitter\n];\n/**\n * Protocol version.\n *\n * @public\n */\nexport const protocol = 5;\nexport var PacketType;\n(function (PacketType) {\n PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n})(PacketType || (PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\nexport class Encoder {\n /**\n * Encoder constructor\n *\n * @param {function} replacer - custom replacer to pass down to JSON.parse\n */\n constructor(replacer) {\n this.replacer = replacer;\n }\n /**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n */\n encode(obj) {\n if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n if (hasBinary(obj)) {\n return this.encodeAsBinary({\n type: obj.type === PacketType.EVENT\n ? PacketType.BINARY_EVENT\n : PacketType.BINARY_ACK,\n nsp: obj.nsp,\n data: obj.data,\n id: obj.id,\n });\n }\n }\n return [this.encodeAsString(obj)];\n }\n /**\n * Encode packet as string.\n */\n encodeAsString(obj) {\n // first is type\n let str = \"\" + obj.type;\n // attachments if we have them\n if (obj.type === PacketType.BINARY_EVENT ||\n obj.type === PacketType.BINARY_ACK) {\n str += obj.attachments + \"-\";\n }\n // if we have a namespace other than `/`\n // we append it followed by a comma `,`\n if (obj.nsp && \"/\" !== obj.nsp) {\n str += obj.nsp + \",\";\n }\n // immediately followed by the id\n if (null != obj.id) {\n str += obj.id;\n }\n // json data\n if (null != obj.data) {\n str += JSON.stringify(obj.data, this.replacer);\n }\n return str;\n }\n /**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n */\n encodeAsBinary(obj) {\n const deconstruction = deconstructPacket(obj);\n const pack = this.encodeAsString(deconstruction.packet);\n const buffers = deconstruction.buffers;\n buffers.unshift(pack); // add packet info to beginning of data list\n return buffers; // write all the buffers\n }\n}\n// see https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript\nfunction isObject(value) {\n return Object.prototype.toString.call(value) === \"[object Object]\";\n}\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nexport class Decoder extends Emitter {\n /**\n * Decoder constructor\n *\n * @param {function} reviver - custom reviver to pass down to JSON.stringify\n */\n constructor(reviver) {\n super();\n this.reviver = reviver;\n }\n /**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n */\n add(obj) {\n let packet;\n if (typeof obj === \"string\") {\n if (this.reconstructor) {\n throw new Error(\"got plaintext data when reconstructing a packet\");\n }\n packet = this.decodeString(obj);\n const isBinaryEvent = packet.type === PacketType.BINARY_EVENT;\n if (isBinaryEvent || packet.type === PacketType.BINARY_ACK) {\n packet.type = isBinaryEvent ? PacketType.EVENT : PacketType.ACK;\n // binary packet's json\n this.reconstructor = new BinaryReconstructor(packet);\n // no attachments, labeled binary but no binary data to follow\n if (packet.attachments === 0) {\n super.emitReserved(\"decoded\", packet);\n }\n }\n else {\n // non-binary full packet\n super.emitReserved(\"decoded\", packet);\n }\n }\n else if (isBinary(obj) || obj.base64) {\n // raw binary data\n if (!this.reconstructor) {\n throw new Error(\"got binary data when not reconstructing a packet\");\n }\n else {\n packet = this.reconstructor.takeBinaryData(obj);\n if (packet) {\n // received final buffer\n this.reconstructor = null;\n super.emitReserved(\"decoded\", packet);\n }\n }\n }\n else {\n throw new Error(\"Unknown type: \" + obj);\n }\n }\n /**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n */\n decodeString(str) {\n let i = 0;\n // look up type\n const p = {\n type: Number(str.charAt(0)),\n };\n if (PacketType[p.type] === undefined) {\n throw new Error(\"unknown packet type \" + p.type);\n }\n // look up attachments if type binary\n if (p.type === PacketType.BINARY_EVENT ||\n p.type === PacketType.BINARY_ACK) {\n const start = i + 1;\n while (str.charAt(++i) !== \"-\" && i != str.length) { }\n const buf = str.substring(start, i);\n if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n throw new Error(\"Illegal attachments\");\n }\n p.attachments = Number(buf);\n }\n // look up namespace (if any)\n if (\"/\" === str.charAt(i + 1)) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (\",\" === c)\n break;\n if (i === str.length)\n break;\n }\n p.nsp = str.substring(start, i);\n }\n else {\n p.nsp = \"/\";\n }\n // look up id\n const next = str.charAt(i + 1);\n if (\"\" !== next && Number(next) == next) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (null == c || Number(c) != c) {\n --i;\n break;\n }\n if (i === str.length)\n break;\n }\n p.id = Number(str.substring(start, i + 1));\n }\n // look up json data\n if (str.charAt(++i)) {\n const payload = this.tryParse(str.substr(i));\n if (Decoder.isPayloadValid(p.type, payload)) {\n p.data = payload;\n }\n else {\n throw new Error(\"invalid payload\");\n }\n }\n return p;\n }\n tryParse(str) {\n try {\n return JSON.parse(str, this.reviver);\n }\n catch (e) {\n return false;\n }\n }\n static isPayloadValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return isObject(payload);\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || isObject(payload);\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n return (Array.isArray(payload) &&\n (typeof payload[0] === \"number\" ||\n (typeof payload[0] === \"string\" &&\n RESERVED_EVENTS.indexOf(payload[0]) === -1)));\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n return Array.isArray(payload);\n }\n }\n /**\n * Deallocates a parser's resources\n */\n destroy() {\n if (this.reconstructor) {\n this.reconstructor.finishedReconstruction();\n this.reconstructor = null;\n }\n }\n}\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n constructor(packet) {\n this.packet = packet;\n this.buffers = [];\n this.reconPack = packet;\n }\n /**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n * a reconstructed packet object if all buffers have been received.\n */\n takeBinaryData(binData) {\n this.buffers.push(binData);\n if (this.buffers.length === this.reconPack.attachments) {\n // done with buffer list\n const packet = reconstructPacket(this.reconPack, this.buffers);\n this.finishedReconstruction();\n return packet;\n }\n return null;\n }\n /**\n * Cleans up binary packet reconstruction variables.\n */\n finishedReconstruction() {\n this.reconPack = null;\n this.buffers = [];\n }\n}\n","export function on(obj, ev, fn) {\n obj.on(ev, fn);\n return function subDestroy() {\n obj.off(ev, fn);\n };\n}\n","import { PacketType } from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n connect: 1,\n connect_error: 1,\n disconnect: 1,\n disconnecting: 1,\n // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n newListener: 1,\n removeListener: 1,\n});\n/**\n * A Socket is the fundamental class for interacting with the server.\n *\n * A Socket belongs to a certain Namespace (by default /) and uses an underlying {@link Manager} to communicate.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(\"connected\");\n * });\n *\n * // send an event to the server\n * socket.emit(\"foo\", \"bar\");\n *\n * socket.on(\"foobar\", () => {\n * // an event was received from the server\n * });\n *\n * // upon disconnection\n * socket.on(\"disconnect\", (reason) => {\n * console.log(`disconnected due to ${reason}`);\n * });\n */\nexport class Socket extends Emitter {\n /**\n * `Socket` constructor.\n */\n constructor(io, nsp, opts) {\n super();\n /**\n * Whether the socket is currently connected to the server.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.connected); // true\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.connected); // false\n * });\n */\n this.connected = false;\n /**\n * Whether the connection state was recovered after a temporary disconnection. In that case, any missed packets will\n * be transmitted by the server.\n */\n this.recovered = false;\n /**\n * Buffer for packets received before the CONNECT packet\n */\n this.receiveBuffer = [];\n /**\n * Buffer for packets that will be sent once the socket is connected\n */\n this.sendBuffer = [];\n /**\n * The queue of packets to be sent with retry in case of failure.\n *\n * Packets are sent one by one, each waiting for the server acknowledgement, in order to guarantee the delivery order.\n * @private\n */\n this._queue = [];\n /**\n * A sequence to generate the ID of the {@link QueuedPacket}.\n * @private\n */\n this._queueSeq = 0;\n this.ids = 0;\n this.acks = {};\n this.flags = {};\n this.io = io;\n this.nsp = nsp;\n if (opts && opts.auth) {\n this.auth = opts.auth;\n }\n this._opts = Object.assign({}, opts);\n if (this.io._autoConnect)\n this.open();\n }\n /**\n * Whether the socket is currently disconnected\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.disconnected); // false\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.disconnected); // true\n * });\n */\n get disconnected() {\n return !this.connected;\n }\n /**\n * Subscribe to open, close and packet events\n *\n * @private\n */\n subEvents() {\n if (this.subs)\n return;\n const io = this.io;\n this.subs = [\n on(io, \"open\", this.onopen.bind(this)),\n on(io, \"packet\", this.onpacket.bind(this)),\n on(io, \"error\", this.onerror.bind(this)),\n on(io, \"close\", this.onclose.bind(this)),\n ];\n }\n /**\n * Whether the Socket will try to reconnect when its Manager connects or reconnects.\n *\n * @example\n * const socket = io();\n *\n * console.log(socket.active); // true\n *\n * socket.on(\"disconnect\", (reason) => {\n * if (reason === \"io server disconnect\") {\n * // the disconnection was initiated by the server, you need to manually reconnect\n * console.log(socket.active); // false\n * }\n * // else the socket will automatically try to reconnect\n * console.log(socket.active); // true\n * });\n */\n get active() {\n return !!this.subs;\n }\n /**\n * \"Opens\" the socket.\n *\n * @example\n * const socket = io({\n * autoConnect: false\n * });\n *\n * socket.connect();\n */\n connect() {\n if (this.connected)\n return this;\n this.subEvents();\n if (!this.io[\"_reconnecting\"])\n this.io.open(); // ensure open\n if (\"open\" === this.io._readyState)\n this.onopen();\n return this;\n }\n /**\n * Alias for {@link connect()}.\n */\n open() {\n return this.connect();\n }\n /**\n * Sends a `message` event.\n *\n * This method mimics the WebSocket.send() method.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send\n *\n * @example\n * socket.send(\"hello\");\n *\n * // this is equivalent to\n * socket.emit(\"message\", \"hello\");\n *\n * @return self\n */\n send(...args) {\n args.unshift(\"message\");\n this.emit.apply(this, args);\n return this;\n }\n /**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @example\n * socket.emit(\"hello\", \"world\");\n *\n * // all serializable datastructures are supported (no need to call JSON.stringify)\n * socket.emit(\"hello\", 1, \"2\", { 3: [\"4\"], 5: Uint8Array.from([6]) });\n *\n * // with an acknowledgement from the server\n * socket.emit(\"hello\", \"world\", (val) => {\n * // ...\n * });\n *\n * @return self\n */\n emit(ev, ...args) {\n if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n throw new Error('\"' + ev.toString() + '\" is a reserved event name');\n }\n args.unshift(ev);\n if (this._opts.retries && !this.flags.fromQueue && !this.flags.volatile) {\n this._addToQueue(args);\n return this;\n }\n const packet = {\n type: PacketType.EVENT,\n data: args,\n };\n packet.options = {};\n packet.options.compress = this.flags.compress !== false;\n // event ack callback\n if (\"function\" === typeof args[args.length - 1]) {\n const id = this.ids++;\n const ack = args.pop();\n this._registerAckCallback(id, ack);\n packet.id = id;\n }\n const isTransportWritable = this.io.engine &&\n this.io.engine.transport &&\n this.io.engine.transport.writable;\n const discardPacket = this.flags.volatile && (!isTransportWritable || !this.connected);\n if (discardPacket) {\n }\n else if (this.connected) {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n }\n else {\n this.sendBuffer.push(packet);\n }\n this.flags = {};\n return this;\n }\n /**\n * @private\n */\n _registerAckCallback(id, ack) {\n var _a;\n const timeout = (_a = this.flags.timeout) !== null && _a !== void 0 ? _a : this._opts.ackTimeout;\n if (timeout === undefined) {\n this.acks[id] = ack;\n return;\n }\n // @ts-ignore\n const timer = this.io.setTimeoutFn(() => {\n delete this.acks[id];\n for (let i = 0; i < this.sendBuffer.length; i++) {\n if (this.sendBuffer[i].id === id) {\n this.sendBuffer.splice(i, 1);\n }\n }\n ack.call(this, new Error(\"operation has timed out\"));\n }, timeout);\n this.acks[id] = (...args) => {\n // @ts-ignore\n this.io.clearTimeoutFn(timer);\n ack.apply(this, [null, ...args]);\n };\n }\n /**\n * Emits an event and waits for an acknowledgement\n *\n * @example\n * // without timeout\n * const response = await socket.emitWithAck(\"hello\", \"world\");\n *\n * // with a specific timeout\n * try {\n * const response = await socket.timeout(1000).emitWithAck(\"hello\", \"world\");\n * } catch (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n *\n * @return a Promise that will be fulfilled when the server acknowledges the event\n */\n emitWithAck(ev, ...args) {\n // the timeout flag is optional\n const withErr = this.flags.timeout !== undefined || this._opts.ackTimeout !== undefined;\n return new Promise((resolve, reject) => {\n args.push((arg1, arg2) => {\n if (withErr) {\n return arg1 ? reject(arg1) : resolve(arg2);\n }\n else {\n return resolve(arg1);\n }\n });\n this.emit(ev, ...args);\n });\n }\n /**\n * Add the packet to the queue.\n * @param args\n * @private\n */\n _addToQueue(args) {\n let ack;\n if (typeof args[args.length - 1] === \"function\") {\n ack = args.pop();\n }\n const packet = {\n id: this._queueSeq++,\n tryCount: 0,\n pending: false,\n args,\n flags: Object.assign({ fromQueue: true }, this.flags),\n };\n args.push((err, ...responseArgs) => {\n if (packet !== this._queue[0]) {\n // the packet has already been acknowledged\n return;\n }\n const hasError = err !== null;\n if (hasError) {\n if (packet.tryCount > this._opts.retries) {\n this._queue.shift();\n if (ack) {\n ack(err);\n }\n }\n }\n else {\n this._queue.shift();\n if (ack) {\n ack(null, ...responseArgs);\n }\n }\n packet.pending = false;\n return this._drainQueue();\n });\n this._queue.push(packet);\n this._drainQueue();\n }\n /**\n * Send the first packet of the queue, and wait for an acknowledgement from the server.\n * @param force - whether to resend a packet that has not been acknowledged yet\n *\n * @private\n */\n _drainQueue(force = false) {\n if (!this.connected || this._queue.length === 0) {\n return;\n }\n const packet = this._queue[0];\n if (packet.pending && !force) {\n return;\n }\n packet.pending = true;\n packet.tryCount++;\n this.flags = packet.flags;\n this.emit.apply(this, packet.args);\n }\n /**\n * Sends a packet.\n *\n * @param packet\n * @private\n */\n packet(packet) {\n packet.nsp = this.nsp;\n this.io._packet(packet);\n }\n /**\n * Called upon engine `open`.\n *\n * @private\n */\n onopen() {\n if (typeof this.auth == \"function\") {\n this.auth((data) => {\n this._sendConnectPacket(data);\n });\n }\n else {\n this._sendConnectPacket(this.auth);\n }\n }\n /**\n * Sends a CONNECT packet to initiate the Socket.IO session.\n *\n * @param data\n * @private\n */\n _sendConnectPacket(data) {\n this.packet({\n type: PacketType.CONNECT,\n data: this._pid\n ? Object.assign({ pid: this._pid, offset: this._lastOffset }, data)\n : data,\n });\n }\n /**\n * Called upon engine or manager `error`.\n *\n * @param err\n * @private\n */\n onerror(err) {\n if (!this.connected) {\n this.emitReserved(\"connect_error\", err);\n }\n }\n /**\n * Called upon engine `close`.\n *\n * @param reason\n * @param description\n * @private\n */\n onclose(reason, description) {\n this.connected = false;\n delete this.id;\n this.emitReserved(\"disconnect\", reason, description);\n }\n /**\n * Called with socket packet.\n *\n * @param packet\n * @private\n */\n onpacket(packet) {\n const sameNamespace = packet.nsp === this.nsp;\n if (!sameNamespace)\n return;\n switch (packet.type) {\n case PacketType.CONNECT:\n if (packet.data && packet.data.sid) {\n this.onconnect(packet.data.sid, packet.data.pid);\n }\n else {\n this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n }\n break;\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n this.onevent(packet);\n break;\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n this.onack(packet);\n break;\n case PacketType.DISCONNECT:\n this.ondisconnect();\n break;\n case PacketType.CONNECT_ERROR:\n this.destroy();\n const err = new Error(packet.data.message);\n // @ts-ignore\n err.data = packet.data.data;\n this.emitReserved(\"connect_error\", err);\n break;\n }\n }\n /**\n * Called upon a server event.\n *\n * @param packet\n * @private\n */\n onevent(packet) {\n const args = packet.data || [];\n if (null != packet.id) {\n args.push(this.ack(packet.id));\n }\n if (this.connected) {\n this.emitEvent(args);\n }\n else {\n this.receiveBuffer.push(Object.freeze(args));\n }\n }\n emitEvent(args) {\n if (this._anyListeners && this._anyListeners.length) {\n const listeners = this._anyListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, args);\n }\n }\n super.emit.apply(this, args);\n if (this._pid && args.length && typeof args[args.length - 1] === \"string\") {\n this._lastOffset = args[args.length - 1];\n }\n }\n /**\n * Produces an ack callback to emit with an event.\n *\n * @private\n */\n ack(id) {\n const self = this;\n let sent = false;\n return function (...args) {\n // prevent double callbacks\n if (sent)\n return;\n sent = true;\n self.packet({\n type: PacketType.ACK,\n id: id,\n data: args,\n });\n };\n }\n /**\n * Called upon a server acknowlegement.\n *\n * @param packet\n * @private\n */\n onack(packet) {\n const ack = this.acks[packet.id];\n if (\"function\" === typeof ack) {\n ack.apply(this, packet.data);\n delete this.acks[packet.id];\n }\n else {\n }\n }\n /**\n * Called upon server connect.\n *\n * @private\n */\n onconnect(id, pid) {\n this.id = id;\n this.recovered = pid && this._pid === pid;\n this._pid = pid; // defined only if connection state recovery is enabled\n this.connected = true;\n this.emitBuffered();\n this.emitReserved(\"connect\");\n this._drainQueue(true);\n }\n /**\n * Emit buffered events (received and emitted).\n *\n * @private\n */\n emitBuffered() {\n this.receiveBuffer.forEach((args) => this.emitEvent(args));\n this.receiveBuffer = [];\n this.sendBuffer.forEach((packet) => {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n });\n this.sendBuffer = [];\n }\n /**\n * Called upon server disconnect.\n *\n * @private\n */\n ondisconnect() {\n this.destroy();\n this.onclose(\"io server disconnect\");\n }\n /**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @private\n */\n destroy() {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs = undefined;\n }\n this.io[\"_destroy\"](this);\n }\n /**\n * Disconnects the socket manually. In that case, the socket will not try to reconnect.\n *\n * If this is the last active Socket instance of the {@link Manager}, the low-level connection will be closed.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"disconnect\", (reason) => {\n * // console.log(reason); prints \"io client disconnect\"\n * });\n *\n * socket.disconnect();\n *\n * @return self\n */\n disconnect() {\n if (this.connected) {\n this.packet({ type: PacketType.DISCONNECT });\n }\n // remove socket from pool\n this.destroy();\n if (this.connected) {\n // fire events\n this.onclose(\"io client disconnect\");\n }\n return this;\n }\n /**\n * Alias for {@link disconnect()}.\n *\n * @return self\n */\n close() {\n return this.disconnect();\n }\n /**\n * Sets the compress flag.\n *\n * @example\n * socket.compress(false).emit(\"hello\");\n *\n * @param compress - if `true`, compresses the sending data\n * @return self\n */\n compress(compress) {\n this.flags.compress = compress;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n * ready to send messages.\n *\n * @example\n * socket.volatile.emit(\"hello\"); // the server may or may not receive it\n *\n * @returns self\n */\n get volatile() {\n this.flags.volatile = true;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the callback will be called with an error when the\n * given number of milliseconds have elapsed without an acknowledgement from the server:\n *\n * @example\n * socket.timeout(5000).emit(\"my-event\", (err) => {\n * if (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n * });\n *\n * @returns self\n */\n timeout(timeout) {\n this.flags.timeout = timeout;\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @example\n * socket.onAny((event, ...args) => {\n * console.log(`got ${event}`);\n * });\n *\n * @param listener\n */\n onAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @example\n * socket.prependAny((event, ...args) => {\n * console.log(`got event ${event}`);\n * });\n *\n * @param listener\n */\n prependAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`got event ${event}`);\n * }\n *\n * socket.onAny(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAny(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAny();\n *\n * @param listener\n */\n offAny(listener) {\n if (!this._anyListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAny() {\n return this._anyListeners || [];\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.onAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n onAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.prependAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n prependAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`sent event ${event}`);\n * }\n *\n * socket.onAnyOutgoing(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAnyOutgoing(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAnyOutgoing();\n *\n * @param [listener] - the catch-all listener (optional)\n */\n offAnyOutgoing(listener) {\n if (!this._anyOutgoingListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyOutgoingListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyOutgoingListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAnyOutgoing() {\n return this._anyOutgoingListeners || [];\n }\n /**\n * Notify the listeners for each packet sent\n *\n * @param packet\n *\n * @private\n */\n notifyOutgoingListeners(packet) {\n if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) {\n const listeners = this._anyOutgoingListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, packet.data);\n }\n }\n }\n}\n","/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\nexport function Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\nBackoff.prototype.duration = function () {\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\nBackoff.prototype.reset = function () {\n this.attempts = 0;\n};\n/**\n * Set the minimum duration\n *\n * @api public\n */\nBackoff.prototype.setMin = function (min) {\n this.ms = min;\n};\n/**\n * Set the maximum duration\n *\n * @api public\n */\nBackoff.prototype.setMax = function (max) {\n this.max = max;\n};\n/**\n * Set the jitter\n *\n * @api public\n */\nBackoff.prototype.setJitter = function (jitter) {\n this.jitter = jitter;\n};\n","import { Socket as Engine, installTimerFunctions, nextTick, } from \"engine.io-client\";\nimport { Socket } from \"./socket.js\";\nimport * as parser from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Backoff } from \"./contrib/backo2.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\nexport class Manager extends Emitter {\n constructor(uri, opts) {\n var _a;\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n installTimerFunctions(this, opts);\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5);\n this.backoff = new Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor(),\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect)\n this.open();\n }\n reconnection(v) {\n if (!arguments.length)\n return this._reconnection;\n this._reconnection = !!v;\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined)\n return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined)\n return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length)\n return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting &&\n this._reconnection &&\n this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n if (~this._readyState.indexOf(\"open\"))\n return this;\n this.engine = new Engine(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = on(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n const onError = (err) => {\n this.cleanup();\n this._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n }\n else {\n // Only do this if there is no fn to handle the error\n this.maybeReconnectOnOpen();\n }\n };\n // emit `error`\n const errorSub = on(socket, \"error\", onError);\n if (false !== this._timeout) {\n const timeout = this._timeout;\n // set timer\n const timer = this.setTimeoutFn(() => {\n openSubDestroy();\n onError(new Error(\"timeout\"));\n socket.close();\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push(on(socket, \"ping\", this.onping.bind(this)), on(socket, \"data\", this.ondata.bind(this)), on(socket, \"error\", this.onerror.bind(this)), on(socket, \"close\", this.onclose.bind(this)), on(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n try {\n this.decoder.add(data);\n }\n catch (e) {\n this.onclose(\"parse error\", e);\n }\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n // the nextTick call prevents an exception in a user-provided event listener from triggering a disconnection due to a \"parse error\"\n nextTick(() => {\n this.emitReserved(\"packet\", packet);\n }, this.setTimeoutFn);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n }\n else if (this._autoConnect && !socket.active) {\n socket.connect();\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n this.skipReconnect = true;\n this._reconnecting = false;\n this.onclose(\"forced close\");\n if (this.engine)\n this.engine.close();\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called upon engine close.\n *\n * @private\n */\n onclose(reason, description) {\n this.cleanup();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason, description);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect)\n return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n }\n else {\n const delay = this.backoff.duration();\n this._reconnecting = true;\n const timer = this.setTimeoutFn(() => {\n if (self.skipReconnect)\n return;\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect)\n return;\n self.open((err) => {\n if (err) {\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n }\n else {\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}\n","import { url } from \"./url.js\";\nimport { Manager } from \"./manager.js\";\nimport { Socket } from \"./socket.js\";\n/**\n * Managers cache.\n */\nconst cache = {};\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = url(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew ||\n opts[\"force new connection\"] ||\n false === opts.multiplex ||\n sameNamespace;\n let io;\n if (newConnection) {\n io = new Manager(source, opts);\n }\n else {\n if (!cache[id]) {\n cache[id] = new Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\n// so that \"lookup\" can be used both as a function (e.g. `io(...)`) and as a\n// namespace (e.g. `io.connect(...)`), for backward compatibility\nObject.assign(lookup, {\n Manager,\n Socket,\n io: lookup,\n connect: lookup,\n});\n/**\n * Protocol version.\n *\n * @public\n */\nexport { protocol } from \"socket.io-parser\";\n/**\n * Expose constructors for standalone build.\n *\n * @public\n */\nexport { Manager, Socket, lookup as io, lookup as connect, lookup as default, };\n","import { parse } from \"engine.io-client\";\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n * Defaults to window.location.\n * @public\n */\nexport function url(uri, path = \"\", loc) {\n let obj = uri;\n // default to window.location\n loc = loc || (typeof location !== \"undefined\" && location);\n if (null == uri)\n uri = loc.protocol + \"//\" + loc.host;\n // relative path support\n if (typeof uri === \"string\") {\n if (\"/\" === uri.charAt(0)) {\n if (\"/\" === uri.charAt(1)) {\n uri = loc.protocol + uri;\n }\n else {\n uri = loc.host + uri;\n }\n }\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n if (\"undefined\" !== typeof loc) {\n uri = loc.protocol + \"//\" + uri;\n }\n else {\n uri = \"https://\" + uri;\n }\n }\n // parse\n obj = parse(uri);\n }\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = \"80\";\n }\n else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = \"443\";\n }\n }\n obj.path = obj.path || \"/\";\n const ipv6 = obj.host.indexOf(\":\") !== -1;\n const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n // define unique id\n obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n // define href\n obj.href =\n obj.protocol +\n \"://\" +\n host +\n (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n return obj;\n}\n","import { makeAutoObservable, action } from \"mobx\";\nimport io, { Socket } from \"socket.io-client\";\nimport Message, { MessageType } from '../common/Message';\nimport proxyConfigStore from './ProxyConfigStore';\nimport portConfigStore from \"./PortConfigStore\";\nimport { messageQueueStore } from './MessageQueueStore';\nimport ProxyConfig from '../common/ProxyConfig';\nimport PortConfig from '../common/PortConfig';\nimport { metricsStore } from './MetricsStore';\nimport { mapProtocolToIndex } from './MetricsStore';\nimport MessageStore from \"./MessageStore\";\nimport { breakpointStore } from \"./BreakpointStore\";\nimport { Browser } from \"./BrowserStore\";\nimport { apFileSystem } from \"./APFileSystem\";\nimport { namedQueriesStore, namedSubQueriesStore } from \"./NamedQueriesStore\";\nimport { urlPathStore } from \"./UrlPathStore\";\nimport { mainTabStore } from \"./MainTabStore\";\n\nexport default class SocketStore {\n\tprivate socket?: Socket = undefined;\n\tprivate socketConnected: boolean = false;\n\tprivate queuedCount: number = 0;\n\tprivate requestCount: number = 0;\n\tprivate responseCount: number = 0;\n\tprivate setTimeoutHandle: NodeJS.Timeout | null = null;\n\n\tpublic constructor() {\n\t\tmakeAutoObservable(this);\n\t\tif (process.env.NODE_ENV === 'production' && !urlPathStore.isGitHubPages()) {\n\t\t\tthis.connect();\n\t\t} else {\n\t\t\tsetTimeout(() => this.init());\n\t\t}\n\t}\n\n\tprivate init() {\n\t\tbreakpointStore.init();\n\t\tnamedQueriesStore.init();\n\t\tnamedSubQueriesStore.init();\n\t}\n\n\t@action private connect() {\n\t\t//console.log('Connect to AllProxy server')\n\t\tthis.socket = io();\n\n\t\tthis.socket.on('connect', async () => {\n\t\t\t//console.log('socket connected');\n\t\t\tthis.setSocketConnected(true);\n\t\t\tif (this.socket) {\n\t\t\t\tawait apFileSystem.setSocket(this.socket);\n\n\t\t\t\tvar os = '';\n\t\t\t\tif (navigator.userAgent.indexOf('Win') !== -1) os = 'win32';\n\t\t\t\telse if (navigator.userAgent.indexOf('Mac') !== -1) os = 'darwin';\n\t\t\t\telse if (navigator.userAgent.indexOf('Linux') !== -1) os = 'linux';\n\n\t\t\t\tif (os.length > 0) {\n\t\t\t\t\tlet ipInfo = undefined;\n\t\t\t\t\tif (document.location.host === 'allproxy.ddns.net') {\n\t\t\t\t\t\tconst response = await fetch(\"https://api.db-ip.com/v2/free/self\");\n\t\t\t\t\t\tipInfo = await response.json();\n\t\t\t\t\t}\n\t\t\t\t\tthis.socket.emit('ostype', os, document.location.pathname, ipInfo);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.socket.on('proxy config', (proxyConfigs: ProxyConfig[]) => {\n\t\t\t//console.log('proxy configs', proxyConfigs);\n\t\t\tproxyConfigStore.setProxyConfigs(proxyConfigs);\n\t\t\tproxyConfigStore.load(); // send to server\n\t\t\tthis.init();\n\t\t});\n\n\t\tthis.socket.on('port config', (portConfig: PortConfig) => {\n\t\t\tportConfigStore.setConfig(portConfig);\n\t\t});\n\n\t\tthis.socket.on('status dialog', (message: string) => {\n\t\t\tmainTabStore.setUpdating(true, message);\n\t\t});\n\n\t\tthis.socket.on('error dialog', (message: string) => {\n\t\t\talert(message);\n\t\t});\n\n\t\tthis.socket.on('disconnect', () => {\n\t\t\t//console.log('socket disconnected');\n\t\t\tthis.setSocketConnected(false);\n\t\t\t//reconnect();\n\t\t});\n\n\t\tthis.socket.on('error', (e: any) => {\n\t\t\tconsole.log('socket error', e);\n\t\t\tthis.setSocketConnected(false);\n\t\t\treconnect();\n\t\t});\n\n\t\tconst reconnect = () => {\n\t\t\tif (this.setTimeoutHandle === null) {\n\t\t\t\t// Reconnect in 60 seconds\n\t\t\t\tthis.setTimeoutHandle = setTimeout(() => {\n\t\t\t\t\tthis.setTimeoutHandle = null;\n\t\t\t\t\t//console.log('reconnect to AllProxy server')\n\t\t\t\t\tthis.socket?.close();\n\t\t\t\t\tthis.connect();\n\t\t\t\t}, 60 * 1000);\n\t\t\t}\n\t\t};\n\n\t\tthis.socket.on('breakpoint', (message: Message, callback: any) => {\n\t\t\tconst breakpoint = breakpointStore.findMatchingBreakpoint(message);\n\t\t\tif (breakpoint) {\n\t\t\t\tbreakpointStore.openBreakpointResponseModal(new MessageStore(message), callback);\n\t\t\t} else {\n\t\t\t\tcallback(message);\n\t\t\t}\n\t\t});\n\n\t\tthis.socket.on('reqResJson', (messages: Message[], queuedCount: number, callback: any) => {\n\t\t\tthis.queuedCount = queuedCount;\n\t\t\tfor (const message of messages) {\n\t\t\t\tthis.countMetrics(message);\n\t\t\t}\n\n\t\t\tmessageQueueStore.insertBatch(messages);\n\n\t\t\tif (callback) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tconst first = messages[0];\n\t\t\t\t\tcallback(`${messageTypeTOString(first)} seq=${first.sequenceNumber}`);\n\t\t\t\t}, messageQueueStore.getStopped() ? 0 : 3000);\n\t\t\t}\n\n\t\t\tfunction messageTypeTOString(message: Message): string {\n\t\t\t\tswitch (message.type) {\n\t\t\t\t\tcase MessageType.REQUEST:\n\t\t\t\t\t\treturn 'req';\n\t\t\t\t\tcase MessageType.RESPONSE:\n\t\t\t\t\t\treturn 'res';\n\t\t\t\t\tcase MessageType.REQUEST_AND_RESPONSE:\n\t\t\t\t\t\treturn 'req/res';\n\t\t\t\t}\n\t\t\t\treturn 'unknown';\n\t\t\t}\n\t\t});\n\t}\n\n\t@action private countMetrics(message: Message) {\n\t\tconst protocol = message.proxyConfig!.protocol;\n\t\tconst i = mapProtocolToIndex.get(protocol);\n\t\tif (i === undefined) {\n\t\t\tconsole.error(`Unknown protocol ${protocol} for message ${message}`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst row = metricsStore.getMetrics()[i];\n\n\t\tif (message.type === MessageType.REQUEST_AND_RESPONSE\n\t\t\t|| message.type === MessageType.REQUEST) {\n\t\t\t++row.requestCount;\n\t\t\t++this.requestCount;\n\t\t}\n\t\tif (message.type === MessageType.REQUEST_AND_RESPONSE\n\t\t\t|| message.type === MessageType.RESPONSE) {\n\t\t\t++row.responseCount;\n\t\t\t++this.responseCount;\n\t\t\trow.totalTime += message.elapsedTime;\n\n\t\t\tif (message.elapsedTime > row.maximumTime) {\n\t\t\t\trow.maximumTime = message.elapsedTime;\n\t\t\t}\n\n\t\t\tif (message.elapsedTime < row.minimumTime || row.minimumTime === 0) {\n\t\t\t\trow.minimumTime = message.elapsedTime;\n\t\t\t}\n\t\t}\n\t}\n\n\t@action clearMetrics() {\n\t\tthis.requestCount = 0;\n\t\tthis.responseCount = 0;\n\t\tmetricsStore.clear();\n\t}\n\n\tpublic getRequestCount() {\n\t\treturn this.requestCount;\n\t}\n\n\tpublic getResponseCount() {\n\t\treturn this.responseCount;\n\t}\n\n\tpublic getQueuedCount() {\n\t\treturn this.queuedCount;\n\t}\n\n\t@action setSocketConnected(value: boolean) {\n\t\tthis.socketConnected = value;\n\t}\n\n\tpublic isConnected(): boolean {\n\t\treturn this.socketConnected;\n\t}\n\n\tpublic emitConfig(event: string, proxyConfig: ProxyConfig[]) {\n\t\tthis.socket?.emit(event, proxyConfig);\n\t}\n\n\tpublic emitResend(forwardProxy: boolean, method: string, url: string, message: Message, body?: string | object) {\n\t\tthis.socket?.emit('resend', forwardProxy, method, url, message, body);\n\t}\n\n\tpublic emitBreakpoint(enable: boolean) {\n\t\tthis.socket?.emit('breakpoint', enable);\n\t}\n\n\tpublic async emitDetectBrowsers(): Promise {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.socket?.emit('detect browsers', (browsers: Browser[]) => {\n\t\t\t\tresolve(browsers);\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic emitLaunchBrowser(browser: Browser) {\n\t\tthis.socket?.emit('launch browser', browser);\n\t}\n\n\tpublic emitIsFileInDownloads(fileName: string): Promise {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.socket?.emit('is file in downloads', fileName, (result: boolean) => {\n\t\t\t\tresolve(result);\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic emitIsSorted(fileName: string, timeFieldName: string): Promise {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.socket?.emit('is sorted', fileName, timeFieldName, (result: boolean) => {\n\t\t\t\tresolve(result);\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic emitReadFile(fileName: string, operator: 'and' | 'or', filters: string[], maxLines: number): Promise {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.socket?.emit('read file', fileName, operator, filters, maxLines, (lines: string[]) => {\n\t\t\t\tresolve(lines);\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic emitJsonFieldExists(fileName: string, filterField: string): Promise {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.socket?.emit('json field exists', fileName, filterField, (exists: boolean) => {\n\t\t\t\tresolve(exists);\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic emitSortFile(fileName: string): Promise {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.socket?.emit('sort file', fileName,\n\t\t\t\t() => {\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t});\n\t}\n\n\tpublic emitFileLineMatcher(\n\t\tfileName: string,\n\t\ttimeFieldName: string,\n\t\tstartTime: string,\n\t\tendTime: string,\n\t\toperator: 'and' | 'or',\n\t\tfilters: string[],\n\t\tmaxLines: number\n\t): Promise {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.socket?.emit('file line matcher', fileName, timeFieldName, startTime, endTime, operator, filters, maxLines, (lines: string[]) => {\n\t\t\t\tresolve(lines);\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic emitGetInstallType(): Promise {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.socket?.emit('get install type',\n\t\t\t\t(type: string) => {\n\t\t\t\t\tresolve(type);\n\t\t\t\t});\n\t\t});\n\t}\n}\n\nexport const socketStore = new SocketStore();\n","import { createTheme } from \"@material-ui/core\";\nimport { makeAutoObservable, action } from \"mobx\";\n\nexport default class DarkModeStore {\n\tprivate theme: 'dark' | 'light' = 'light';\n\n\n\tpublic constructor() {\n\t\tmakeAutoObservable(this);\n\t}\n\n\tpublic getTheme() {\n\t\treturn this.theme;\n\t}\n\n\t@action public setTheme(theme: 'dark' | 'light') {\n\t\tthis.theme = theme;\n\t}\n\n\tpublic getThemeProvider() {\n\t\tconst p = createTheme({\n\t\t\tpalette: {\n\t\t\t\ttype: this.theme\n\t\t\t},\n\t\t});\n\t\treturn p;\n\t}\n}\n\nexport const themeStore = new DarkModeStore();","import { makeAutoObservable } from \"mobx\";\nimport GTag from \"../GTag\";\n\nexport default class UrlPathStore {\n\tprivate app: 'allproxy' | 'mitmproxy' | 'jlogviewer' = 'allproxy';\n\n\n\tpublic constructor() {\n\t\tif (this.isGitHubPages()) {\n\t\t\tthis.app = 'jlogviewer';\n\t\t} else {\n\t\t\tswitch (document.location.pathname) {\n\t\t\t\tcase '/jlogviewer':\n\t\t\t\t\tthis.app = 'jlogviewer';\n\t\t\t\t\tbreak;\n\t\t\t\tcase '/mitmproxy':\n\t\t\t\t\tthis.app = 'mitmproxy';\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.app = 'allproxy';\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tGTag.initialize();\n\t\tmakeAutoObservable(this);\n\t}\n\n\tpublic isGitHubPages() {\n\t\tconst githubPagesTest = document.location.search && document.location.search.includes('pages.github');\n\t\treturn githubPagesTest || document.location.hostname.includes('github.io') || document.location.hostname.includes('pages.github');\n\t}\n\n\tpublic getKind() {\n\t\treturn this.app;\n\t}\n\n\tpublic setApp(app: 'allproxy' | 'mitmproxy' | 'jlogviewer') {\n\t\tswitch (app) {\n\t\t\tcase 'jlogviewer':\n\t\t\t\tdocument.location.pathname = '/jlogviewer';\n\t\t\t\tbreak;\n\t\t\tcase 'mitmproxy':\n\t\t\t\tdocument.location.pathname = '/mitmproxy';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tdocument.location.pathname = '/allproxy';\n\t\t\t\tbreak;\n\t\t}\n\t\tGTag.initialize();\n\t}\n\n\tpublic isLocalhost() {\n\t\treturn document.location.host.startsWith('localhost');\n\t}\n}\n\nexport const urlPathStore = new UrlPathStore();","const path = require(\"./path.js\");\nconst { EEXIST, ENOENT, ENOTDIR, ENOTEMPTY } = require(\"./errors.js\");\n\nconst STAT = 0;\n\nmodule.exports = class CacheFS {\n constructor() {\n }\n _makeRoot(root = new Map()) {\n root.set(STAT, { mode: 0o777, type: \"dir\", size: 0, ino: 0, mtimeMs: Date.now() });\n return root\n }\n activate(superblock = null) {\n if (superblock === null) {\n this._root = new Map([[\"/\", this._makeRoot()]]);\n } else if (typeof superblock === 'string') {\n this._root = new Map([[\"/\", this._makeRoot(this.parse(superblock))]]);\n } else {\n this._root = superblock\n }\n }\n get activated () {\n return !!this._root\n }\n deactivate () {\n this._root = void 0\n }\n size () {\n // subtract 1 to ignore the root directory itself from the count.\n return this._countInodes(this._root.get(\"/\")) - 1;\n }\n _countInodes(map) {\n let count = 1;\n for (let [key, val] of map) {\n if (key === STAT) continue;\n count += this._countInodes(val);\n }\n return count;\n }\n autoinc () {\n let val = this._maxInode(this._root.get(\"/\")) + 1;\n return val;\n }\n _maxInode(map) {\n let max = map.get(STAT).ino;\n for (let [key, val] of map) {\n if (key === STAT) continue;\n max = Math.max(max, this._maxInode(val));\n }\n return max;\n }\n print(root = this._root.get(\"/\")) {\n let str = \"\";\n const printTree = (root, indent) => {\n for (let [file, node] of root) {\n if (file === 0) continue;\n let stat = node.get(STAT);\n let mode = stat.mode.toString(8);\n str += `${\"\\t\".repeat(indent)}${file}\\t${mode}`\n if (stat.type === \"file\") {\n str += `\\t${stat.size}\\t${stat.mtimeMs}\\n`;\n } else {\n str += `\\n`\n printTree(node, indent + 1);\n }\n }\n };\n printTree(root, 0);\n return str;\n }\n parse(print) {\n let autoinc = 0;\n\n function mk(stat) {\n const ino = ++autoinc;\n // TODO: Use a better heuristic for determining whether file or dir\n const type = stat.length === 1 ? \"dir\" : \"file\"\n let [mode, size, mtimeMs] = stat;\n mode = parseInt(mode, 8);\n size = size ? parseInt(size) : 0;\n mtimeMs = mtimeMs ? parseInt(mtimeMs) : Date.now();\n return new Map([[STAT, { mode, type, size, mtimeMs, ino }]]);\n }\n\n let lines = print.trim().split(\"\\n\");\n let _root = this._makeRoot();\n let stack = [\n { indent: -1, node: _root },\n { indent: 0, node: null }\n ];\n for (let line of lines) {\n let prefix = line.match(/^\\t*/)[0];\n let indent = prefix.length;\n line = line.slice(indent);\n let [filename, ...stat] = line.split(\"\\t\");\n let node = mk(stat);\n if (indent <= stack[stack.length - 1].indent) {\n while (indent <= stack[stack.length - 1].indent) {\n stack.pop();\n }\n }\n stack.push({ indent, node });\n let cd = stack[stack.length - 2].node;\n cd.set(filename, node);\n }\n return _root;\n }\n _lookup(filepath, follow = true) {\n let dir = this._root;\n let partialPath = '/'\n let parts = path.split(filepath)\n for (let i = 0; i < parts.length; ++ i) {\n let part = parts[i];\n dir = dir.get(part);\n if (!dir) throw new ENOENT(filepath);\n // Follow symlinks\n if (follow || i < parts.length - 1) {\n const stat = dir.get(STAT)\n if (stat.type === 'symlink') {\n let target = path.resolve(partialPath, stat.target)\n dir = this._lookup(target)\n }\n if (!partialPath) {\n partialPath = part\n } else {\n partialPath = path.join(partialPath, part)\n }\n }\n }\n return dir;\n }\n mkdir(filepath, { mode }) {\n if (filepath === \"/\") throw new EEXIST();\n let dir = this._lookup(path.dirname(filepath));\n let basename = path.basename(filepath);\n if (dir.has(basename)) {\n throw new EEXIST();\n }\n let entry = new Map();\n let stat = {\n mode,\n type: \"dir\",\n size: 0,\n mtimeMs: Date.now(),\n ino: this.autoinc(),\n };\n entry.set(STAT, stat);\n dir.set(basename, entry);\n }\n rmdir(filepath) {\n let dir = this._lookup(filepath);\n if (dir.get(STAT).type !== 'dir') throw new ENOTDIR();\n // check it's empty (size should be 1 for just StatSym)\n if (dir.size > 1) throw new ENOTEMPTY();\n // remove from parent\n let parent = this._lookup(path.dirname(filepath));\n let basename = path.basename(filepath);\n parent.delete(basename);\n }\n readdir(filepath) {\n let dir = this._lookup(filepath);\n if (dir.get(STAT).type !== 'dir') throw new ENOTDIR();\n return [...dir.keys()].filter(key => typeof key === \"string\");\n }\n writeStat(filepath, size, { mode }) {\n let ino;\n try {\n let oldStat = this.stat(filepath);\n if (mode == null) {\n mode = oldStat.mode;\n }\n ino = oldStat.ino;\n } catch (err) {}\n if (mode == null) {\n mode = 0o666;\n }\n if (ino == null) {\n ino = this.autoinc();\n }\n let dir = this._lookup(path.dirname(filepath));\n let basename = path.basename(filepath);\n let stat = {\n mode,\n type: \"file\",\n size,\n mtimeMs: Date.now(),\n ino,\n };\n let entry = new Map();\n entry.set(STAT, stat);\n dir.set(basename, entry);\n return stat;\n }\n unlink(filepath) {\n // remove from parent\n let parent = this._lookup(path.dirname(filepath));\n let basename = path.basename(filepath);\n parent.delete(basename);\n }\n rename(oldFilepath, newFilepath) {\n let basename = path.basename(newFilepath);\n // Note: do both lookups before making any changes\n // so if lookup throws, we don't lose data (issue #23)\n // grab references\n let entry = this._lookup(oldFilepath);\n let destDir = this._lookup(path.dirname(newFilepath));\n // insert into new parent directory\n destDir.set(basename, entry);\n // remove from old parent directory\n this.unlink(oldFilepath)\n }\n stat(filepath) {\n return this._lookup(filepath).get(STAT);\n }\n lstat(filepath) {\n return this._lookup(filepath, false).get(STAT);\n }\n readlink(filepath) {\n return this._lookup(filepath, false).get(STAT).target;\n }\n symlink(target, filepath) {\n let ino, mode;\n try {\n let oldStat = this.stat(filepath);\n if (mode === null) {\n mode = oldStat.mode;\n }\n ino = oldStat.ino;\n } catch (err) {}\n if (mode == null) {\n mode = 0o120000;\n }\n if (ino == null) {\n ino = this.autoinc();\n }\n let dir = this._lookup(path.dirname(filepath));\n let basename = path.basename(filepath);\n let stat = {\n mode,\n type: \"symlink\",\n target,\n size: 0,\n mtimeMs: Date.now(),\n ino,\n };\n let entry = new Map();\n entry.set(STAT, stat);\n dir.set(basename, entry);\n return stat;\n }\n _du (dir) {\n let size = 0;\n for (const [name, entry] of dir.entries()) {\n if (name === STAT) {\n size += entry.size;\n } else {\n size += this._du(entry);\n }\n }\n return size;\n }\n du (filepath) {\n let dir = this._lookup(filepath);\n return this._du(dir);\n }\n};\n","const { encode, decode } = require(\"isomorphic-textencoder\");\nconst debounce = require(\"just-debounce-it\");\n\nconst CacheFS = require(\"./CacheFS.js\");\nconst { ENOENT, ENOTEMPTY, ETIMEDOUT } = require(\"./errors.js\");\nconst IdbBackend = require(\"./IdbBackend.js\");\nconst HttpBackend = require(\"./HttpBackend.js\")\nconst Mutex = require(\"./Mutex.js\");\nconst Mutex2 = require(\"./Mutex2.js\");\n\nconst path = require(\"./path.js\");\n\nmodule.exports = class DefaultBackend {\n constructor() {\n this.saveSuperblock = debounce(() => {\n this.flush();\n }, 500);\n }\n async init (name, {\n wipe,\n url,\n urlauto,\n fileDbName = name,\n db = null,\n fileStoreName = name + \"_files\",\n lockDbName = name + \"_lock\",\n lockStoreName = name + \"_lock\",\n } = {}) {\n this._name = name\n this._idb = db || new IdbBackend(fileDbName, fileStoreName);\n this._mutex = navigator.locks ? new Mutex2(name) : new Mutex(lockDbName, lockStoreName);\n this._cache = new CacheFS(name);\n this._opts = { wipe, url };\n this._needsWipe = !!wipe;\n if (url) {\n this._http = new HttpBackend(url)\n this._urlauto = !!urlauto\n }\n }\n async activate() {\n if (this._cache.activated) return\n // Wipe IDB if requested\n if (this._needsWipe) {\n this._needsWipe = false;\n await this._idb.wipe()\n await this._mutex.release({ force: true })\n }\n if (!(await this._mutex.has())) await this._mutex.wait()\n // Attempt to load FS from IDB backend\n const root = await this._idb.loadSuperblock()\n if (root) {\n this._cache.activate(root);\n } else if (this._http) {\n // If that failed, attempt to load FS from HTTP backend\n const text = await this._http.loadSuperblock()\n this._cache.activate(text)\n await this._saveSuperblock();\n } else {\n // If there is no HTTP backend, start with an empty filesystem\n this._cache.activate()\n }\n if (await this._mutex.has()) {\n return\n } else {\n throw new ETIMEDOUT()\n }\n }\n async deactivate() {\n if (await this._mutex.has()) {\n await this._saveSuperblock()\n }\n this._cache.deactivate()\n try {\n await this._mutex.release()\n } catch (e) {\n console.log(e)\n }\n await this._idb.close()\n }\n async _saveSuperblock() {\n if (this._cache.activated) {\n this._lastSavedAt = Date.now()\n await this._idb.saveSuperblock(this._cache._root);\n }\n }\n _writeStat(filepath, size, opts) {\n let dirparts = path.split(path.dirname(filepath))\n let dir = dirparts.shift()\n for (let dirpart of dirparts) {\n dir = path.join(dir, dirpart)\n try {\n this._cache.mkdir(dir, { mode: 0o777 })\n } catch (e) {}\n }\n return this._cache.writeStat(filepath, size, opts)\n }\n async readFile(filepath, opts) {\n const { encoding } = opts;\n if (encoding && encoding !== 'utf8') throw new Error('Only \"utf8\" encoding is supported in readFile');\n let data = null, stat = null\n try {\n stat = this._cache.stat(filepath);\n data = await this._idb.readFile(stat.ino)\n } catch (e) {\n if (!this._urlauto) throw e\n }\n if (!data && this._http) {\n let lstat = this._cache.lstat(filepath)\n while (lstat.type === 'symlink') {\n filepath = path.resolve(path.dirname(filepath), lstat.target)\n lstat = this._cache.lstat(filepath)\n }\n data = await this._http.readFile(filepath)\n }\n if (data) {\n if (!stat || stat.size != data.byteLength) {\n stat = await this._writeStat(filepath, data.byteLength, { mode: stat ? stat.mode : 0o666 })\n this.saveSuperblock() // debounced\n }\n if (encoding === \"utf8\") {\n data = decode(data);\n } else {\n data.toString = () => decode(data);\n }\n }\n if (!stat) throw new ENOENT(filepath)\n return data;\n }\n async writeFile(filepath, data, opts) {\n const { mode, encoding = \"utf8\" } = opts;\n if (typeof data === \"string\") {\n if (encoding !== \"utf8\") {\n throw new Error('Only \"utf8\" encoding is supported in writeFile');\n }\n data = encode(data);\n }\n const stat = await this._cache.writeStat(filepath, data.byteLength, { mode });\n await this._idb.writeFile(stat.ino, data)\n }\n async unlink(filepath, opts) {\n const stat = this._cache.lstat(filepath);\n this._cache.unlink(filepath);\n if (stat.type !== 'symlink') {\n await this._idb.unlink(stat.ino)\n }\n }\n readdir(filepath, opts) {\n return this._cache.readdir(filepath);\n }\n mkdir(filepath, opts) {\n const { mode = 0o777 } = opts;\n this._cache.mkdir(filepath, { mode });\n }\n rmdir(filepath, opts) {\n // Never allow deleting the root directory.\n if (filepath === \"/\") {\n throw new ENOTEMPTY();\n }\n this._cache.rmdir(filepath);\n }\n rename(oldFilepath, newFilepath) {\n this._cache.rename(oldFilepath, newFilepath);\n }\n stat(filepath, opts) {\n return this._cache.stat(filepath);\n }\n lstat(filepath, opts) {\n return this._cache.lstat(filepath);\n }\n readlink(filepath, opts) {\n return this._cache.readlink(filepath);\n }\n symlink(target, filepath) {\n this._cache.symlink(target, filepath);\n }\n async backFile(filepath, opts) {\n let size = await this._http.sizeFile(filepath)\n await this._writeStat(filepath, size, opts)\n }\n du(filepath) {\n return this._cache.du(filepath);\n }\n flush() {\n return this._saveSuperblock();\n }\n}\n","module.exports = class HttpBackend {\n constructor(url) {\n this._url = url;\n }\n loadSuperblock() {\n return fetch(this._url + '/.superblock.txt').then(res => res.ok ? res.text() : null)\n }\n async readFile(filepath) {\n const res = await fetch(this._url + filepath)\n if (res.status === 200) {\n return res.arrayBuffer()\n } else {\n throw new Error('ENOENT')\n }\n }\n async sizeFile(filepath) {\n const res = await fetch(this._url + filepath, { method: 'HEAD' })\n if (res.status === 200) {\n return res.headers.get('content-length')\n } else {\n throw new Error('ENOENT')\n }\n }\n}\n","const idb = require(\"@isomorphic-git/idb-keyval\");\n\nmodule.exports = class IdbBackend {\n constructor(dbname, storename) {\n this._database = dbname;\n this._storename = storename;\n this._store = new idb.Store(this._database, this._storename);\n }\n saveSuperblock(superblock) {\n return idb.set(\"!root\", superblock, this._store);\n }\n loadSuperblock() {\n return idb.get(\"!root\", this._store);\n }\n readFile(inode) {\n return idb.get(inode, this._store)\n }\n writeFile(inode, data) {\n return idb.set(inode, data, this._store)\n }\n unlink(inode) {\n return idb.del(inode, this._store)\n }\n wipe() {\n return idb.clear(this._store)\n }\n close() {\n return idb.close(this._store)\n }\n}\n","const idb = require(\"@isomorphic-git/idb-keyval\");\n\nconst sleep = ms => new Promise(r => setTimeout(r, ms))\n\nmodule.exports = class Mutex {\n constructor(dbname, storename) {\n this._id = Math.random()\n this._database = dbname\n this._storename = storename\n this._store = new idb.Store(this._database, this._storename)\n this._lock = null\n }\n async has ({ margin = 2000 } = {}) {\n if (this._lock && this._lock.holder === this._id) {\n const now = Date.now()\n if (this._lock.expires > now + margin) {\n return true\n } else {\n return await this.renew()\n }\n } else {\n return false\n }\n }\n // Returns true if successful\n async renew ({ ttl = 5000 } = {}) {\n let success\n await idb.update(\"lock\", (current) => {\n const now = Date.now()\n const expires = now + ttl\n success = current && current.holder === this._id\n this._lock = success ? { holder: this._id, expires } : current\n return this._lock\n }, this._store)\n return success\n }\n // Returns true if successful\n async acquire ({ ttl = 5000 } = {}) {\n let success\n let expired\n let doubleLock\n await idb.update(\"lock\", (current) => {\n const now = Date.now()\n const expires = now + ttl\n expired = current && current.expires < now\n success = current === undefined || expired\n doubleLock = current && current.holder === this._id\n this._lock = success ? { holder: this._id, expires } : current\n return this._lock\n }, this._store)\n if (doubleLock) {\n throw new Error('Mutex double-locked')\n }\n return success\n }\n // check at 10Hz, give up after 10 minutes\n async wait ({ interval = 100, limit = 6000, ttl } = {}) {\n while (limit--) {\n if (await this.acquire({ ttl })) return true\n await sleep(interval)\n }\n throw new Error('Mutex timeout')\n }\n // Returns true if successful\n async release ({ force = false } = {}) {\n let success\n let doubleFree\n let someoneElseHasIt\n await idb.update(\"lock\", (current) => {\n success = force || (current && current.holder === this._id)\n doubleFree = current === void 0\n someoneElseHasIt = current && current.holder !== this._id\n this._lock = success ? void 0 : current\n return this._lock\n }, this._store)\n await idb.close(this._store)\n if (!success && !force) {\n if (doubleFree) throw new Error('Mutex double-freed')\n if (someoneElseHasIt) throw new Error('Mutex lost ownership')\n }\n return success\n }\n}\n","module.exports = class Mutex {\n constructor(name) {\n this._id = Math.random()\n this._database = name\n this._has = false\n this._release = null\n }\n async has () {\n return this._has\n }\n // Returns true if successful\n async acquire () {\n return new Promise(resolve => {\n navigator.locks.request(this._database + \"_lock\", {ifAvailable: true}, lock => {\n this._has = !!lock\n resolve(!!lock)\n return new Promise(resolve => {\n this._release = resolve\n })\n }); \n })\n }\n // Returns true if successful, gives up after 10 minutes\n async wait ({ timeout = 600000 } = {}) {\n return new Promise((resolve, reject) => {\n const controller = new AbortController();\n setTimeout(() => {\n controller.abort();\n reject(new Error('Mutex timeout'))\n }, timeout);\n navigator.locks.request(this._database + \"_lock\", {signal: controller.signal}, lock => {\n this._has = !!lock\n resolve(!!lock)\n return new Promise(resolve => {\n this._release = resolve\n })\n }); \n })\n }\n // Returns true if successful\n async release ({ force = false } = {}) {\n this._has = false\n if (this._release) {\n this._release()\n } else if (force) {\n navigator.locks.request(this._database + \"_lock\", {steal: true}, lock => true)\n }\n }\n}\n","const DefaultBackend = require(\"./DefaultBackend.js\");\nconst Stat = require(\"./Stat.js\");\n\nconst path = require(\"./path.js\");\n\nfunction cleanParamsFilepathOpts(filepath, opts, ...rest) {\n // normalize paths\n filepath = path.normalize(filepath);\n // strip out callbacks\n if (typeof opts === \"undefined\" || typeof opts === \"function\") {\n opts = {};\n }\n // expand string options to encoding options\n if (typeof opts === \"string\") {\n opts = {\n encoding: opts,\n };\n }\n return [filepath, opts, ...rest];\n}\n\nfunction cleanParamsFilepathDataOpts(filepath, data, opts, ...rest) {\n // normalize paths\n filepath = path.normalize(filepath);\n // strip out callbacks\n if (typeof opts === \"undefined\" || typeof opts === \"function\") {\n opts = {};\n }\n // expand string options to encoding options\n if (typeof opts === \"string\") {\n opts = {\n encoding: opts,\n };\n }\n return [filepath, data, opts, ...rest];\n}\n\nfunction cleanParamsFilepathFilepath(oldFilepath, newFilepath, ...rest) {\n // normalize paths\n return [path.normalize(oldFilepath), path.normalize(newFilepath), ...rest];\n}\n\nmodule.exports = class PromisifiedFS {\n constructor(name, options = {}) {\n this.init = this.init.bind(this)\n this.readFile = this._wrap(this.readFile, cleanParamsFilepathOpts, false)\n this.writeFile = this._wrap(this.writeFile, cleanParamsFilepathDataOpts, true)\n this.unlink = this._wrap(this.unlink, cleanParamsFilepathOpts, true)\n this.readdir = this._wrap(this.readdir, cleanParamsFilepathOpts, false)\n this.mkdir = this._wrap(this.mkdir, cleanParamsFilepathOpts, true)\n this.rmdir = this._wrap(this.rmdir, cleanParamsFilepathOpts, true)\n this.rename = this._wrap(this.rename, cleanParamsFilepathFilepath, true)\n this.stat = this._wrap(this.stat, cleanParamsFilepathOpts, false)\n this.lstat = this._wrap(this.lstat, cleanParamsFilepathOpts, false)\n this.readlink = this._wrap(this.readlink, cleanParamsFilepathOpts, false)\n this.symlink = this._wrap(this.symlink, cleanParamsFilepathFilepath, true)\n this.backFile = this._wrap(this.backFile, cleanParamsFilepathOpts, true)\n this.du = this._wrap(this.du, cleanParamsFilepathOpts, false);\n\n this._deactivationPromise = null\n this._deactivationTimeout = null\n this._activationPromise = null\n\n this._operations = new Set()\n\n if (name) {\n this.init(name, options)\n }\n }\n async init (...args) {\n if (this._initPromiseResolve) await this._initPromise;\n this._initPromise = this._init(...args)\n return this._initPromise\n }\n async _init (name, options = {}) {\n await this._gracefulShutdown();\n if (this._activationPromise) await this._deactivate()\n\n if (this._backend && this._backend.destroy) {\n await this._backend.destroy();\n }\n this._backend = options.backend || new DefaultBackend();\n if (this._backend.init) {\n await this._backend.init(name, options);\n }\n\n if (this._initPromiseResolve) {\n this._initPromiseResolve();\n this._initPromiseResolve = null;\n }\n // The next comment starting with the \"fs is initially activated when constructed\"?\n // That can create contention for the mutex if two threads try to init at the same time\n // so I've added an option to disable that behavior.\n if (!options.defer) {\n // The fs is initially activated when constructed (in order to wipe/save the superblock)\n // This is not awaited, because that would create a cycle.\n this.stat('/')\n }\n }\n async _gracefulShutdown () {\n if (this._operations.size > 0) {\n this._isShuttingDown = true\n await new Promise(resolve => this._gracefulShutdownResolve = resolve);\n this._isShuttingDown = false\n this._gracefulShutdownResolve = null\n }\n }\n _wrap (fn, paramCleaner, mutating) {\n return async (...args) => {\n args = paramCleaner(...args)\n let op = {\n name: fn.name,\n args,\n }\n this._operations.add(op)\n try {\n await this._activate()\n return await fn.apply(this, args)\n } finally {\n this._operations.delete(op)\n if (mutating) this._backend.saveSuperblock() // this is debounced\n if (this._operations.size === 0) {\n if (!this._deactivationTimeout) clearTimeout(this._deactivationTimeout)\n this._deactivationTimeout = setTimeout(this._deactivate.bind(this), 500)\n }\n }\n }\n }\n async _activate() {\n if (!this._initPromise) console.warn(new Error(`Attempted to use LightningFS ${this._name} before it was initialized.`))\n await this._initPromise\n if (this._deactivationTimeout) {\n clearTimeout(this._deactivationTimeout)\n this._deactivationTimeout = null\n }\n if (this._deactivationPromise) await this._deactivationPromise\n this._deactivationPromise = null\n if (!this._activationPromise) {\n this._activationPromise = this._backend.activate ? this._backend.activate() : Promise.resolve();\n }\n await this._activationPromise\n }\n async _deactivate() {\n if (this._activationPromise) await this._activationPromise\n\n if (!this._deactivationPromise) {\n this._deactivationPromise = this._backend.deactivate ? this._backend.deactivate() : Promise.resolve();\n }\n this._activationPromise = null\n if (this._gracefulShutdownResolve) this._gracefulShutdownResolve()\n return this._deactivationPromise\n }\n async readFile(filepath, opts) {\n return this._backend.readFile(filepath, opts);\n }\n async writeFile(filepath, data, opts) {\n await this._backend.writeFile(filepath, data, opts);\n return null\n }\n async unlink(filepath, opts) {\n await this._backend.unlink(filepath, opts);\n return null\n }\n async readdir(filepath, opts) {\n return this._backend.readdir(filepath, opts);\n }\n async mkdir(filepath, opts) {\n await this._backend.mkdir(filepath, opts);\n return null\n }\n async rmdir(filepath, opts) {\n await this._backend.rmdir(filepath, opts);\n return null;\n }\n async rename(oldFilepath, newFilepath) {\n await this._backend.rename(oldFilepath, newFilepath);\n return null;\n }\n async stat(filepath, opts) {\n const data = await this._backend.stat(filepath, opts);\n return new Stat(data);\n }\n async lstat(filepath, opts) {\n const data = await this._backend.lstat(filepath, opts);\n return new Stat(data);\n }\n async readlink(filepath, opts) {\n return this._backend.readlink(filepath, opts);\n }\n async symlink(target, filepath) {\n await this._backend.symlink(target, filepath);\n return null;\n }\n async backFile(filepath, opts) {\n await this._backend.backFile(filepath, opts);\n return null\n }\n async du(filepath) {\n return this._backend.du(filepath);\n }\n async flush() {\n return this._backend.flush();\n }\n}\n","module.exports = class Stat {\n constructor(stats) {\n this.type = stats.type;\n this.mode = stats.mode;\n this.size = stats.size;\n this.ino = stats.ino;\n this.mtimeMs = stats.mtimeMs;\n this.ctimeMs = stats.ctimeMs || stats.mtimeMs;\n this.uid = 1;\n this.gid = 1;\n this.dev = 1;\n }\n isFile() {\n return this.type === \"file\";\n }\n isDirectory() {\n return this.type === \"dir\";\n }\n isSymbolicLink() {\n return this.type === \"symlink\";\n }\n};\n","function Err(name) {\n return class extends Error {\n constructor(...args) {\n super(...args);\n this.code = name;\n if (this.message) {\n this.message = name + \": \" + this.message;\n } else {\n this.message = name;\n }\n }\n };\n}\n\nconst EEXIST = Err(\"EEXIST\");\nconst ENOENT = Err(\"ENOENT\");\nconst ENOTDIR = Err(\"ENOTDIR\");\nconst ENOTEMPTY = Err(\"ENOTEMPTY\");\nconst ETIMEDOUT = Err(\"ETIMEDOUT\");\n\nmodule.exports = { EEXIST, ENOENT, ENOTDIR, ENOTEMPTY, ETIMEDOUT };\n","const once = require(\"just-once\");\n\nconst PromisifiedFS = require('./PromisifiedFS');\n\nfunction wrapCallback (opts, cb) {\n if (typeof opts === \"function\") {\n cb = opts;\n }\n cb = once(cb);\n const resolve = (...args) => cb(null, ...args)\n return [resolve, cb];\n}\n\nmodule.exports = class FS {\n constructor(...args) {\n this.promises = new PromisifiedFS(...args)\n // Needed so things don't break if you destructure fs and pass individual functions around\n this.init = this.init.bind(this)\n this.readFile = this.readFile.bind(this)\n this.writeFile = this.writeFile.bind(this)\n this.unlink = this.unlink.bind(this)\n this.readdir = this.readdir.bind(this)\n this.mkdir = this.mkdir.bind(this)\n this.rmdir = this.rmdir.bind(this)\n this.rename = this.rename.bind(this)\n this.stat = this.stat.bind(this)\n this.lstat = this.lstat.bind(this)\n this.readlink = this.readlink.bind(this)\n this.symlink = this.symlink.bind(this)\n this.backFile = this.backFile.bind(this)\n this.du = this.du.bind(this)\n this.flush = this.flush.bind(this)\n }\n init(name, options) {\n return this.promises.init(name, options)\n }\n readFile(filepath, opts, cb) {\n const [resolve, reject] = wrapCallback(opts, cb);\n this.promises.readFile(filepath, opts).then(resolve).catch(reject)\n }\n writeFile(filepath, data, opts, cb) {\n const [resolve, reject] = wrapCallback(opts, cb);\n this.promises.writeFile(filepath, data, opts).then(resolve).catch(reject);\n }\n unlink(filepath, opts, cb) {\n const [resolve, reject] = wrapCallback(opts, cb);\n this.promises.unlink(filepath, opts).then(resolve).catch(reject);\n }\n readdir(filepath, opts, cb) {\n const [resolve, reject] = wrapCallback(opts, cb);\n this.promises.readdir(filepath, opts).then(resolve).catch(reject);\n }\n mkdir(filepath, opts, cb) {\n const [resolve, reject] = wrapCallback(opts, cb);\n this.promises.mkdir(filepath, opts).then(resolve).catch(reject)\n }\n rmdir(filepath, opts, cb) {\n const [resolve, reject] = wrapCallback(opts, cb);\n this.promises.rmdir(filepath, opts).then(resolve).catch(reject)\n }\n rename(oldFilepath, newFilepath, cb) {\n const [resolve, reject] = wrapCallback(cb);\n this.promises.rename(oldFilepath, newFilepath).then(resolve).catch(reject)\n }\n stat(filepath, opts, cb) {\n const [resolve, reject] = wrapCallback(opts, cb);\n this.promises.stat(filepath).then(resolve).catch(reject);\n }\n lstat(filepath, opts, cb) {\n const [resolve, reject] = wrapCallback(opts, cb);\n this.promises.lstat(filepath).then(resolve).catch(reject);\n }\n readlink(filepath, opts, cb) {\n const [resolve, reject] = wrapCallback(opts, cb);\n this.promises.readlink(filepath).then(resolve).catch(reject);\n }\n symlink(target, filepath, cb) {\n const [resolve, reject] = wrapCallback(cb);\n this.promises.symlink(target, filepath).then(resolve).catch(reject);\n }\n backFile(filepath, opts, cb) {\n const [resolve, reject] = wrapCallback(opts, cb);\n this.promises.backFile(filepath, opts).then(resolve).catch(reject);\n }\n du(filepath, cb) {\n const [resolve, reject] = wrapCallback(cb);\n this.promises.du(filepath).then(resolve).catch(reject);\n }\n flush(cb) {\n const [resolve, reject] = wrapCallback(cb);\n this.promises.flush().then(resolve).catch(reject);\n }\n}\n","function normalizePath(path) {\n if (path.length === 0) {\n return \".\";\n }\n let parts = splitPath(path);\n parts = parts.reduce(reducer, []);\n return joinPath(...parts);\n}\n\nfunction resolvePath(...paths) {\n let result = '';\n for (let path of paths) {\n if (path.startsWith('/')) {\n result = path;\n } else {\n result = normalizePath(joinPath(result, path));\n }\n }\n return result;\n}\n\nfunction joinPath(...parts) {\n if (parts.length === 0) return \"\";\n let path = parts.join(\"/\");\n // Replace consecutive '/'\n path = path.replace(/\\/{2,}/g, \"/\");\n return path;\n}\n\nfunction splitPath(path) {\n if (path.length === 0) return [];\n if (path === \"/\") return [\"/\"];\n let parts = path.split(\"/\");\n if (parts[parts.length - 1] === '') {\n parts.pop();\n }\n if (path[0] === \"/\") {\n // assert(parts[0] === '')\n parts[0] = \"/\";\n } else {\n if (parts[0] !== \".\") {\n parts.unshift(\".\");\n }\n }\n return parts;\n}\n\nfunction dirname(path) {\n const last = path.lastIndexOf(\"/\");\n if (last === -1) throw new Error(`Cannot get dirname of \"${path}\"`);\n if (last === 0) return \"/\";\n return path.slice(0, last);\n}\n\nfunction basename(path) {\n if (path === \"/\") throw new Error(`Cannot get basename of \"${path}\"`);\n const last = path.lastIndexOf(\"/\");\n if (last === -1) return path;\n return path.slice(last + 1);\n}\n\nfunction reducer(ancestors, current) {\n // Initial condition\n if (ancestors.length === 0) {\n ancestors.push(current);\n return ancestors;\n }\n // assert(ancestors.length > 0)\n // assert(ancestors[0] === '.' || ancestors[0] === '/')\n\n // Collapse '.' references\n if (current === \".\") return ancestors;\n\n // Collapse '..' references\n if (current === \"..\") {\n if (ancestors.length === 1) {\n if (ancestors[0] === \"/\") {\n throw new Error(\"Unable to normalize path - traverses above root directory\");\n }\n // assert(ancestors[0] === '.')\n if (ancestors[0] === \".\") {\n ancestors.push(current);\n return ancestors;\n }\n }\n // assert(ancestors.length > 1)\n if (ancestors[ancestors.length - 1] === \"..\") {\n ancestors.push(\"..\");\n return ancestors;\n } else {\n ancestors.pop();\n return ancestors;\n }\n }\n\n ancestors.push(current);\n return ancestors;\n}\n\nmodule.exports = {\n join: joinPath,\n normalize: normalizePath,\n split: splitPath,\n basename,\n dirname,\n resolve: resolvePath,\n};\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport { chainPropTypes } from '@material-ui/utils';\nimport { Transition } from 'react-transition-group';\nimport withStyles from '../styles/withStyles';\nimport { duration } from '../styles/transitions';\nimport deprecatedPropType from '../utils/deprecatedPropType';\nimport { getTransitionProps } from '../transitions/utils';\nimport useTheme from '../styles/useTheme';\nimport { useForkRef } from '../utils';\nexport var styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n height: 0,\n overflow: 'hidden',\n transition: theme.transitions.create('height')\n },\n\n /* Styles applied to the root element when the transition has entered. */\n entered: {\n height: 'auto',\n overflow: 'visible'\n },\n\n /* Styles applied to the root element when the transition has exited and `collapsedSize` != 0px. */\n hidden: {\n visibility: 'hidden'\n },\n\n /* Styles applied to the outer wrapper element. */\n wrapper: {\n // Hack to get children with a negative margin to not falsify the height computation.\n display: 'flex'\n },\n\n /* Styles applied to the inner wrapper element. */\n wrapperInner: {\n width: '100%'\n }\n };\n};\n/**\n * The Collapse transition is used by the\n * [Vertical Stepper](/components/steppers/#vertical-stepper) StepContent component.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\n\nvar Collapse = /*#__PURE__*/React.forwardRef(function Collapse(props, ref) {\n var children = props.children,\n classes = props.classes,\n className = props.className,\n collapsedHeight = props.collapsedHeight,\n _props$collapsedSize = props.collapsedSize,\n collapsedSizeProp = _props$collapsedSize === void 0 ? '0px' : _props$collapsedSize,\n _props$component = props.component,\n Component = _props$component === void 0 ? 'div' : _props$component,\n _props$disableStrictM = props.disableStrictModeCompat,\n disableStrictModeCompat = _props$disableStrictM === void 0 ? false : _props$disableStrictM,\n inProp = props.in,\n onEnter = props.onEnter,\n onEntered = props.onEntered,\n onEntering = props.onEntering,\n onExit = props.onExit,\n onExited = props.onExited,\n onExiting = props.onExiting,\n style = props.style,\n _props$timeout = props.timeout,\n timeout = _props$timeout === void 0 ? duration.standard : _props$timeout,\n _props$TransitionComp = props.TransitionComponent,\n TransitionComponent = _props$TransitionComp === void 0 ? Transition : _props$TransitionComp,\n other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"collapsedHeight\", \"collapsedSize\", \"component\", \"disableStrictModeCompat\", \"in\", \"onEnter\", \"onEntered\", \"onEntering\", \"onExit\", \"onExited\", \"onExiting\", \"style\", \"timeout\", \"TransitionComponent\"]);\n\n var theme = useTheme();\n var timer = React.useRef();\n var wrapperRef = React.useRef(null);\n var autoTransitionDuration = React.useRef();\n var collapsedSize = typeof (collapsedHeight || collapsedSizeProp) === 'number' ? \"\".concat(collapsedHeight || collapsedSizeProp, \"px\") : collapsedHeight || collapsedSizeProp;\n React.useEffect(function () {\n return function () {\n clearTimeout(timer.current);\n };\n }, []);\n var enableStrictModeCompat = theme.unstable_strictMode && !disableStrictModeCompat;\n var nodeRef = React.useRef(null);\n var handleRef = useForkRef(ref, enableStrictModeCompat ? nodeRef : undefined);\n\n var normalizedTransitionCallback = function normalizedTransitionCallback(callback) {\n return function (nodeOrAppearing, maybeAppearing) {\n if (callback) {\n var _ref = enableStrictModeCompat ? [nodeRef.current, nodeOrAppearing] : [nodeOrAppearing, maybeAppearing],\n _ref2 = _slicedToArray(_ref, 2),\n node = _ref2[0],\n isAppearing = _ref2[1]; // onEnterXxx and onExitXxx callbacks have a different arguments.length value.\n\n\n if (isAppearing === undefined) {\n callback(node);\n } else {\n callback(node, isAppearing);\n }\n }\n };\n };\n\n var handleEnter = normalizedTransitionCallback(function (node, isAppearing) {\n node.style.height = collapsedSize;\n\n if (onEnter) {\n onEnter(node, isAppearing);\n }\n });\n var handleEntering = normalizedTransitionCallback(function (node, isAppearing) {\n var wrapperHeight = wrapperRef.current ? wrapperRef.current.clientHeight : 0;\n\n var _getTransitionProps = getTransitionProps({\n style: style,\n timeout: timeout\n }, {\n mode: 'enter'\n }),\n transitionDuration = _getTransitionProps.duration;\n\n if (timeout === 'auto') {\n var duration2 = theme.transitions.getAutoHeightDuration(wrapperHeight);\n node.style.transitionDuration = \"\".concat(duration2, \"ms\");\n autoTransitionDuration.current = duration2;\n } else {\n node.style.transitionDuration = typeof transitionDuration === 'string' ? transitionDuration : \"\".concat(transitionDuration, \"ms\");\n }\n\n node.style.height = \"\".concat(wrapperHeight, \"px\");\n\n if (onEntering) {\n onEntering(node, isAppearing);\n }\n });\n var handleEntered = normalizedTransitionCallback(function (node, isAppearing) {\n node.style.height = 'auto';\n\n if (onEntered) {\n onEntered(node, isAppearing);\n }\n });\n var handleExit = normalizedTransitionCallback(function (node) {\n var wrapperHeight = wrapperRef.current ? wrapperRef.current.clientHeight : 0;\n node.style.height = \"\".concat(wrapperHeight, \"px\");\n\n if (onExit) {\n onExit(node);\n }\n });\n var handleExited = normalizedTransitionCallback(onExited);\n var handleExiting = normalizedTransitionCallback(function (node) {\n var wrapperHeight = wrapperRef.current ? wrapperRef.current.clientHeight : 0;\n\n var _getTransitionProps2 = getTransitionProps({\n style: style,\n timeout: timeout\n }, {\n mode: 'exit'\n }),\n transitionDuration = _getTransitionProps2.duration;\n\n if (timeout === 'auto') {\n var duration2 = theme.transitions.getAutoHeightDuration(wrapperHeight);\n node.style.transitionDuration = \"\".concat(duration2, \"ms\");\n autoTransitionDuration.current = duration2;\n } else {\n node.style.transitionDuration = typeof transitionDuration === 'string' ? transitionDuration : \"\".concat(transitionDuration, \"ms\");\n }\n\n node.style.height = collapsedSize;\n\n if (onExiting) {\n onExiting(node);\n }\n });\n\n var addEndListener = function addEndListener(nodeOrNext, maybeNext) {\n var next = enableStrictModeCompat ? nodeOrNext : maybeNext;\n\n if (timeout === 'auto') {\n timer.current = setTimeout(next, autoTransitionDuration.current || 0);\n }\n };\n\n return /*#__PURE__*/React.createElement(TransitionComponent, _extends({\n in: inProp,\n onEnter: handleEnter,\n onEntered: handleEntered,\n onEntering: handleEntering,\n onExit: handleExit,\n onExited: handleExited,\n onExiting: handleExiting,\n addEndListener: addEndListener,\n nodeRef: enableStrictModeCompat ? nodeRef : undefined,\n timeout: timeout === 'auto' ? null : timeout\n }, other), function (state, childProps) {\n return /*#__PURE__*/React.createElement(Component, _extends({\n className: clsx(classes.root, classes.container, className, {\n 'entered': classes.entered,\n 'exited': !inProp && collapsedSize === '0px' && classes.hidden\n }[state]),\n style: _extends({\n minHeight: collapsedSize\n }, style),\n ref: handleRef\n }, childProps), /*#__PURE__*/React.createElement(\"div\", {\n className: classes.wrapper,\n ref: wrapperRef\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: classes.wrapperInner\n }, children)));\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? Collapse.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content node to be collapsed.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: chainPropTypes(PropTypes.object, function (props) {\n if (props.classes && props.classes.container) {\n throw new Error(['Material-UI: the classes.container key is deprecated.', 'Use `classes.root` instead', 'The name of the pseudo-class was changed for consistency.'].join('\\n'));\n }\n\n return null;\n }),\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The height of the container when collapsed.\n * @deprecated The prop was renamed to support the addition of horizontal orientation, use `collapsedSize` instead.\n */\n collapsedHeight: deprecatedPropType(PropTypes.oneOfType([PropTypes.number, PropTypes.string]), 'The prop was renamed to support the vertical orientation, use `collapsedSize` instead'),\n\n /**\n * The height of the container when collapsed.\n */\n collapsedSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes\n /* @typescript-to-proptypes-ignore */\n .elementType,\n\n /**\n * Enable this prop if you encounter 'Function components cannot be given refs',\n * use `unstable_createStrictModeTheme`,\n * and can't forward the ref in the passed `Component`.\n */\n disableStrictModeCompat: PropTypes.bool,\n\n /**\n * If `true`, the component will transition in.\n */\n in: PropTypes.bool,\n\n /**\n * @ignore\n */\n onEnter: PropTypes.func,\n\n /**\n * @ignore\n */\n onEntered: PropTypes.func,\n\n /**\n * @ignore\n */\n onEntering: PropTypes.func,\n\n /**\n * @ignore\n */\n onExit: PropTypes.func,\n\n /**\n * @ignore\n */\n onExited: PropTypes.func,\n\n /**\n * @ignore\n */\n onExiting: PropTypes.func,\n\n /**\n * @ignore\n */\n style: PropTypes.object,\n\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n *\n * Set to 'auto' to automatically calculate transition time based on height.\n */\n timeout: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.shape({\n appear: PropTypes.number,\n enter: PropTypes.number,\n exit: PropTypes.number\n })])\n} : void 0;\nCollapse.muiSupportAuto = true;\nexport default withStyles(styles, {\n name: 'MuiCollapse'\n})(Collapse);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _toArray from \"@babel/runtime/helpers/esm/toArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { chainPropTypes } from '@material-ui/utils';\nimport Collapse from '../Collapse';\nimport Paper from '../Paper';\nimport withStyles from '../styles/withStyles';\nimport AccordionContext from './AccordionContext';\nimport useControlled from '../utils/useControlled';\nexport var styles = function styles(theme) {\n var transition = {\n duration: theme.transitions.duration.shortest\n };\n return {\n /* Styles applied to the root element. */\n root: {\n position: 'relative',\n transition: theme.transitions.create(['margin'], transition),\n '&:before': {\n position: 'absolute',\n left: 0,\n top: -1,\n right: 0,\n height: 1,\n content: '\"\"',\n opacity: 1,\n backgroundColor: theme.palette.divider,\n transition: theme.transitions.create(['opacity', 'background-color'], transition)\n },\n '&:first-child': {\n '&:before': {\n display: 'none'\n }\n },\n '&$expanded': {\n margin: '16px 0',\n '&:first-child': {\n marginTop: 0\n },\n '&:last-child': {\n marginBottom: 0\n },\n '&:before': {\n opacity: 0\n }\n },\n '&$expanded + &': {\n '&:before': {\n display: 'none'\n }\n },\n '&$disabled': {\n backgroundColor: theme.palette.action.disabledBackground\n }\n },\n\n /* Styles applied to the root element if `square={false}`. */\n rounded: {\n borderRadius: 0,\n '&:first-child': {\n borderTopLeftRadius: theme.shape.borderRadius,\n borderTopRightRadius: theme.shape.borderRadius\n },\n '&:last-child': {\n borderBottomLeftRadius: theme.shape.borderRadius,\n borderBottomRightRadius: theme.shape.borderRadius,\n // Fix a rendering issue on Edge\n '@supports (-ms-ime-align: auto)': {\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0\n }\n }\n },\n\n /* Styles applied to the root element if `expanded={true}`. */\n expanded: {},\n\n /* Styles applied to the root element if `disabled={true}`. */\n disabled: {}\n };\n};\nvar Accordion = /*#__PURE__*/React.forwardRef(function Accordion(props, ref) {\n var childrenProp = props.children,\n classes = props.classes,\n className = props.className,\n _props$defaultExpande = props.defaultExpanded,\n defaultExpanded = _props$defaultExpande === void 0 ? false : _props$defaultExpande,\n _props$disabled = props.disabled,\n disabled = _props$disabled === void 0 ? false : _props$disabled,\n expandedProp = props.expanded,\n onChange = props.onChange,\n _props$square = props.square,\n square = _props$square === void 0 ? false : _props$square,\n _props$TransitionComp = props.TransitionComponent,\n TransitionComponent = _props$TransitionComp === void 0 ? Collapse : _props$TransitionComp,\n TransitionProps = props.TransitionProps,\n other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"defaultExpanded\", \"disabled\", \"expanded\", \"onChange\", \"square\", \"TransitionComponent\", \"TransitionProps\"]);\n\n var _useControlled = useControlled({\n controlled: expandedProp,\n default: defaultExpanded,\n name: 'Accordion',\n state: 'expanded'\n }),\n _useControlled2 = _slicedToArray(_useControlled, 2),\n expanded = _useControlled2[0],\n setExpandedState = _useControlled2[1];\n\n var handleChange = React.useCallback(function (event) {\n setExpandedState(!expanded);\n\n if (onChange) {\n onChange(event, !expanded);\n }\n }, [expanded, onChange, setExpandedState]);\n\n var _React$Children$toArr = React.Children.toArray(childrenProp),\n _React$Children$toArr2 = _toArray(_React$Children$toArr),\n summary = _React$Children$toArr2[0],\n children = _React$Children$toArr2.slice(1);\n\n var contextValue = React.useMemo(function () {\n return {\n expanded: expanded,\n disabled: disabled,\n toggle: handleChange\n };\n }, [expanded, disabled, handleChange]);\n return /*#__PURE__*/React.createElement(Paper, _extends({\n className: clsx(classes.root, className, expanded && classes.expanded, disabled && classes.disabled, !square && classes.rounded),\n ref: ref,\n square: square\n }, other), /*#__PURE__*/React.createElement(AccordionContext.Provider, {\n value: contextValue\n }, summary), /*#__PURE__*/React.createElement(TransitionComponent, _extends({\n in: expanded,\n timeout: \"auto\"\n }, TransitionProps), /*#__PURE__*/React.createElement(\"div\", {\n \"aria-labelledby\": summary.props.id,\n id: summary.props['aria-controls'],\n role: \"region\"\n }, children)));\n});\nprocess.env.NODE_ENV !== \"production\" ? Accordion.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the accordion.\n */\n children: chainPropTypes(PropTypes.node.isRequired, function (props) {\n var summary = React.Children.toArray(props.children)[0];\n\n if (isFragment(summary)) {\n return new Error(\"Material-UI: The Accordion doesn't accept a Fragment as a child. \" + 'Consider providing an array instead.');\n }\n\n if (! /*#__PURE__*/React.isValidElement(summary)) {\n return new Error('Material-UI: Expected the first child of Accordion to be a valid element.');\n }\n\n return null;\n }),\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * If `true`, expands the accordion by default.\n */\n defaultExpanded: PropTypes.bool,\n\n /**\n * If `true`, the accordion will be displayed in a disabled state.\n */\n disabled: PropTypes.bool,\n\n /**\n * If `true`, expands the accordion, otherwise collapse it.\n * Setting this prop enables control over the accordion.\n */\n expanded: PropTypes.bool,\n\n /**\n * Callback fired when the expand/collapse state is changed.\n *\n * @param {object} event The event source of the callback.\n * @param {boolean} expanded The `expanded` state of the accordion.\n */\n onChange: PropTypes.func,\n\n /**\n * If `true`, rounded corners are disabled.\n */\n square: PropTypes.bool,\n\n /**\n * The component used for the collapse effect.\n * [Follow this guide](/components/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n */\n TransitionComponent: PropTypes.elementType,\n\n /**\n * Props applied to the [`Transition`](http://reactcommunity.org/react-transition-group/transition#Transition-props) element.\n */\n TransitionProps: PropTypes.object\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiAccordion'\n})(Accordion);","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _toArray(arr) {\n return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();\n}","import * as React from 'react';\n/**\n * @ignore - internal component.\n * @type {React.Context<{} | {expanded: boolean, disabled: boolean, toggle: () => void}>}\n */\n\nvar AccordionContext = React.createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n AccordionContext.displayName = 'AccordionContext';\n}\n\nexport default AccordionContext;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'flex',\n padding: theme.spacing(1, 2, 2)\n }\n };\n};\nvar AccordionDetails = /*#__PURE__*/React.forwardRef(function AccordionDetails(props, ref) {\n var classes = props.classes,\n className = props.className,\n other = _objectWithoutProperties(props, [\"classes\", \"className\"]);\n\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n className: clsx(classes.root, className),\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? AccordionDetails.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the accordion details.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiAccordionDetails'\n})(AccordionDetails);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\n\n/* eslint-disable jsx-a11y/aria-role */\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { chainPropTypes } from '@material-ui/utils';\nimport ButtonBase from '../ButtonBase';\nimport IconButton from '../IconButton';\nimport withStyles from '../styles/withStyles';\nimport AccordionContext from '../Accordion/AccordionContext';\nexport var styles = function styles(theme) {\n var transition = {\n duration: theme.transitions.duration.shortest\n };\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'flex',\n minHeight: 8 * 6,\n transition: theme.transitions.create(['min-height', 'background-color'], transition),\n padding: theme.spacing(0, 2),\n '&:hover:not($disabled)': {\n cursor: 'pointer'\n },\n '&$expanded': {\n minHeight: 64\n },\n '&$focused, &$focusVisible': {\n backgroundColor: theme.palette.action.focus\n },\n '&$disabled': {\n opacity: theme.palette.action.disabledOpacity\n }\n },\n\n /* Pseudo-class applied to the root element, children wrapper element and `IconButton` component if `expanded={true}`. */\n expanded: {},\n\n /* Pseudo-class applied to the ButtonBase root element if the button is keyboard focused. */\n focused: {},\n\n /* Pseudo-class applied to the ButtonBase root element if the button is keyboard focused. */\n focusVisible: {},\n\n /* Pseudo-class applied to the root element if `disabled={true}`. */\n disabled: {},\n\n /* Styles applied to the children wrapper element. */\n content: {\n display: 'flex',\n flexGrow: 1,\n transition: theme.transitions.create(['margin'], transition),\n margin: '12px 0',\n '&$expanded': {\n margin: '20px 0'\n }\n },\n\n /* Styles applied to the `IconButton` component when `expandIcon` is supplied. */\n expandIcon: {\n transform: 'rotate(0deg)',\n transition: theme.transitions.create('transform', transition),\n '&:hover': {\n // Disable the hover effect for the IconButton,\n // because a hover effect should apply to the entire Expand button and\n // not only to the IconButton.\n backgroundColor: 'transparent'\n },\n '&$expanded': {\n transform: 'rotate(180deg)'\n }\n }\n };\n};\nvar AccordionSummary = /*#__PURE__*/React.forwardRef(function AccordionSummary(props, ref) {\n var children = props.children,\n classes = props.classes,\n className = props.className,\n expandIcon = props.expandIcon,\n focusVisibleClassName = props.focusVisibleClassName,\n _props$IconButtonProp = props.IconButtonProps,\n IconButtonProps = _props$IconButtonProp === void 0 ? {} : _props$IconButtonProp,\n onClick = props.onClick,\n other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"expandIcon\", \"focusVisibleClassName\", \"IconButtonProps\", \"onClick\"]);\n\n var _React$useContext = React.useContext(AccordionContext),\n _React$useContext$dis = _React$useContext.disabled,\n disabled = _React$useContext$dis === void 0 ? false : _React$useContext$dis,\n expanded = _React$useContext.expanded,\n toggle = _React$useContext.toggle;\n\n var handleChange = function handleChange(event) {\n if (toggle) {\n toggle(event);\n }\n\n if (onClick) {\n onClick(event);\n }\n };\n\n return /*#__PURE__*/React.createElement(ButtonBase, _extends({\n focusRipple: false,\n disableRipple: true,\n disabled: disabled,\n component: \"div\",\n \"aria-expanded\": expanded,\n className: clsx(classes.root, className, disabled && classes.disabled, expanded && classes.expanded),\n focusVisibleClassName: clsx(classes.focusVisible, classes.focused, focusVisibleClassName),\n onClick: handleChange,\n ref: ref\n }, other), /*#__PURE__*/React.createElement(\"div\", {\n className: clsx(classes.content, expanded && classes.expanded)\n }, children), expandIcon && /*#__PURE__*/React.createElement(IconButton, _extends({\n className: clsx(classes.expandIcon, expanded && classes.expanded),\n edge: \"end\",\n component: \"div\",\n tabIndex: null,\n role: null,\n \"aria-hidden\": true\n }, IconButtonProps), expandIcon));\n});\nprocess.env.NODE_ENV !== \"production\" ? AccordionSummary.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the accordion summary.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: chainPropTypes(PropTypes.object, function (props) {\n // Guard against when generation of classes is disabled in the stylesheets (`disableGeneration`).\n // For `disableGeneration` we don't have an accurate warning but `disableGeneration` is an advanced use case anyway.\n if (props.classes.focused !== undefined && props.classes.focused.indexOf(' ') !== -1) {\n return new Error(['Material-UI: The `classes.focused` key is deprecated.', 'Use `classes.focusVisible` instead.', 'The name of the pseudo-class was changed for consistency.'].join('\\n'));\n }\n\n return null;\n }),\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The icon to display as the expand indicator.\n */\n expandIcon: PropTypes.node,\n\n /**\n * This prop can help identify which element has keyboard focus.\n * The class name will be applied when the element gains the focus through keyboard interaction.\n * It's a polyfill for the [CSS :focus-visible selector](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo).\n * The rationale for using this feature [is explained here](https://github.com/WICG/focus-visible/blob/master/explainer.md).\n * A [polyfill can be used](https://github.com/WICG/focus-visible) to apply a `focus-visible` class to other components\n * if needed.\n */\n focusVisibleClassName: PropTypes.string,\n\n /**\n * Props applied to the `IconButton` element wrapping the expand icon.\n */\n IconButtonProps: PropTypes.object,\n\n /**\n * @ignore\n */\n onClick: PropTypes.func\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiAccordionSummary'\n})(AccordionSummary);","import { Children, cloneElement, isValidElement } from 'react';\n/**\n * Given `this.props.children`, return an object mapping key to child.\n *\n * @param {*} children `this.props.children`\n * @return {object} Mapping of key to child\n */\n\nexport function getChildMapping(children, mapFn) {\n var mapper = function mapper(child) {\n return mapFn && isValidElement(child) ? mapFn(child) : child;\n };\n\n var result = Object.create(null);\n if (children) Children.map(children, function (c) {\n return c;\n }).forEach(function (child) {\n // run the map function here instead so that the key is the computed one\n result[child.key] = mapper(child);\n });\n return result;\n}\n/**\n * When you're adding or removing children some may be added or removed in the\n * same render pass. We want to show *both* since we want to simultaneously\n * animate elements in and out. This function takes a previous set of keys\n * and a new set of keys and merges them with its best guess of the correct\n * ordering. In the future we may expose some of the utilities in\n * ReactMultiChild to make this easy, but for now React itself does not\n * directly have this concept of the union of prevChildren and nextChildren\n * so we implement it here.\n *\n * @param {object} prev prev children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @param {object} next next children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @return {object} a key set that contains all keys in `prev` and all keys\n * in `next` in a reasonable order.\n */\n\nexport function mergeChildMappings(prev, next) {\n prev = prev || {};\n next = next || {};\n\n function getValueForKey(key) {\n return key in next ? next[key] : prev[key];\n } // For each key of `next`, the list of keys to insert before that key in\n // the combined list\n\n\n var nextKeysPending = Object.create(null);\n var pendingKeys = [];\n\n for (var prevKey in prev) {\n if (prevKey in next) {\n if (pendingKeys.length) {\n nextKeysPending[prevKey] = pendingKeys;\n pendingKeys = [];\n }\n } else {\n pendingKeys.push(prevKey);\n }\n }\n\n var i;\n var childMapping = {};\n\n for (var nextKey in next) {\n if (nextKeysPending[nextKey]) {\n for (i = 0; i < nextKeysPending[nextKey].length; i++) {\n var pendingNextKey = nextKeysPending[nextKey][i];\n childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);\n }\n }\n\n childMapping[nextKey] = getValueForKey(nextKey);\n } // Finally, add the keys which didn't appear before any key in `next`\n\n\n for (i = 0; i < pendingKeys.length; i++) {\n childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n }\n\n return childMapping;\n}\n\nfunction getProp(child, prop, props) {\n return props[prop] != null ? props[prop] : child.props[prop];\n}\n\nexport function getInitialChildMapping(props, onExited) {\n return getChildMapping(props.children, function (child) {\n return cloneElement(child, {\n onExited: onExited.bind(null, child),\n in: true,\n appear: getProp(child, 'appear', props),\n enter: getProp(child, 'enter', props),\n exit: getProp(child, 'exit', props)\n });\n });\n}\nexport function getNextChildMapping(nextProps, prevChildMapping, onExited) {\n var nextChildMapping = getChildMapping(nextProps.children);\n var children = mergeChildMappings(prevChildMapping, nextChildMapping);\n Object.keys(children).forEach(function (key) {\n var child = children[key];\n if (!isValidElement(child)) return;\n var hasPrev = (key in prevChildMapping);\n var hasNext = (key in nextChildMapping);\n var prevChild = prevChildMapping[key];\n var isLeaving = isValidElement(prevChild) && !prevChild.props.in; // item is new (entering)\n\n if (hasNext && (!hasPrev || isLeaving)) {\n // console.log('entering', key)\n children[key] = cloneElement(child, {\n onExited: onExited.bind(null, child),\n in: true,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n } else if (!hasNext && hasPrev && !isLeaving) {\n // item is old (exiting)\n // console.log('leaving', key)\n children[key] = cloneElement(child, {\n in: false\n });\n } else if (hasNext && hasPrev && isValidElement(prevChild)) {\n // item hasn't changed transition states\n // copy over the last transition props;\n // console.log('unchanged', key)\n children[key] = cloneElement(child, {\n onExited: onExited.bind(null, child),\n in: prevChild.props.in,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n }\n });\n return children;\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { getChildMapping, getInitialChildMapping, getNextChildMapping } from './utils/ChildMapping';\n\nvar values = Object.values || function (obj) {\n return Object.keys(obj).map(function (k) {\n return obj[k];\n });\n};\n\nvar defaultProps = {\n component: 'div',\n childFactory: function childFactory(child) {\n return child;\n }\n};\n/**\n * The `` component manages a set of transition components\n * (`` and ``) in a list. Like with the transition\n * components, `` is a state machine for managing the mounting\n * and unmounting of components over time.\n *\n * Consider the example below. As items are removed or added to the TodoList the\n * `in` prop is toggled automatically by the ``.\n *\n * Note that `` does not define any animation behavior!\n * Exactly _how_ a list item animates is up to the individual transition\n * component. This means you can mix and match animations across different list\n * items.\n */\n\nvar TransitionGroup = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(TransitionGroup, _React$Component);\n\n function TransitionGroup(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n\n var handleExited = _this.handleExited.bind(_assertThisInitialized(_this)); // Initial children should all be entering, dependent on appear\n\n\n _this.state = {\n contextValue: {\n isMounting: true\n },\n handleExited: handleExited,\n firstRender: true\n };\n return _this;\n }\n\n var _proto = TransitionGroup.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.mounted = true;\n this.setState({\n contextValue: {\n isMounting: false\n }\n });\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.mounted = false;\n };\n\n TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {\n var prevChildMapping = _ref.children,\n handleExited = _ref.handleExited,\n firstRender = _ref.firstRender;\n return {\n children: firstRender ? getInitialChildMapping(nextProps, handleExited) : getNextChildMapping(nextProps, prevChildMapping, handleExited),\n firstRender: false\n };\n } // node is `undefined` when user provided `nodeRef` prop\n ;\n\n _proto.handleExited = function handleExited(child, node) {\n var currentChildMapping = getChildMapping(this.props.children);\n if (child.key in currentChildMapping) return;\n\n if (child.props.onExited) {\n child.props.onExited(node);\n }\n\n if (this.mounted) {\n this.setState(function (state) {\n var children = _extends({}, state.children);\n\n delete children[child.key];\n return {\n children: children\n };\n });\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n Component = _this$props.component,\n childFactory = _this$props.childFactory,\n props = _objectWithoutPropertiesLoose(_this$props, [\"component\", \"childFactory\"]);\n\n var contextValue = this.state.contextValue;\n var children = values(this.state.children).map(childFactory);\n delete props.appear;\n delete props.enter;\n delete props.exit;\n\n if (Component === null) {\n return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n value: contextValue\n }, children);\n }\n\n return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n value: contextValue\n }, /*#__PURE__*/React.createElement(Component, props, children));\n };\n\n return TransitionGroup;\n}(React.Component);\n\nTransitionGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * `` renders a `
` by default. You can change this\n * behavior by providing a `component` prop.\n * If you use React v16+ and would like to avoid a wrapping `
` element\n * you can pass in `component={null}`. This is useful if the wrapping div\n * borks your css styles.\n */\n component: PropTypes.any,\n\n /**\n * A set of `` components, that are toggled `in` and out as they\n * leave. the `` will inject specific transition props, so\n * remember to spread them through if you are wrapping the `` as\n * with our `` example.\n *\n * While this component is meant for multiple `Transition` or `CSSTransition`\n * children, sometimes you may want to have a single transition child with\n * content that you want to be transitioned out and in when you change it\n * (e.g. routes, images etc.) In that case you can change the `key` prop of\n * the transition child as you change its content, this will cause\n * `TransitionGroup` to transition the child out and back in.\n */\n children: PropTypes.node,\n\n /**\n * A convenience prop that enables or disables appear animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n appear: PropTypes.bool,\n\n /**\n * A convenience prop that enables or disables enter animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * A convenience prop that enables or disables exit animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * You may need to apply reactive updates to a child as it is exiting.\n * This is generally done by using `cloneElement` however in the case of an exiting\n * child the element has already been removed and not accessible to the consumer.\n *\n * If you do need to update a child as it leaves you can provide a `childFactory`\n * to wrap every child, even the ones that are leaving.\n *\n * @type Function(child: ReactElement) -> ReactElement\n */\n childFactory: PropTypes.func\n} : {};\nTransitionGroup.defaultProps = defaultProps;\nexport default TransitionGroup;","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport useEventCallback from '../utils/useEventCallback';\nvar useEnhancedEffect = typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect;\n/**\n * @ignore - internal component.\n */\n\nfunction Ripple(props) {\n var classes = props.classes,\n _props$pulsate = props.pulsate,\n pulsate = _props$pulsate === void 0 ? false : _props$pulsate,\n rippleX = props.rippleX,\n rippleY = props.rippleY,\n rippleSize = props.rippleSize,\n inProp = props.in,\n _props$onExited = props.onExited,\n onExited = _props$onExited === void 0 ? function () {} : _props$onExited,\n timeout = props.timeout;\n\n var _React$useState = React.useState(false),\n leaving = _React$useState[0],\n setLeaving = _React$useState[1];\n\n var rippleClassName = clsx(classes.ripple, classes.rippleVisible, pulsate && classes.ripplePulsate);\n var rippleStyles = {\n width: rippleSize,\n height: rippleSize,\n top: -(rippleSize / 2) + rippleY,\n left: -(rippleSize / 2) + rippleX\n };\n var childClassName = clsx(classes.child, leaving && classes.childLeaving, pulsate && classes.childPulsate);\n var handleExited = useEventCallback(onExited); // Ripple is used for user feedback (e.g. click or press) so we want to apply styles with the highest priority\n\n useEnhancedEffect(function () {\n if (!inProp) {\n // react-transition-group#onExit\n setLeaving(true); // react-transition-group#onExited\n\n var timeoutId = setTimeout(handleExited, timeout);\n return function () {\n clearTimeout(timeoutId);\n };\n }\n\n return undefined;\n }, [handleExited, inProp, timeout]);\n return /*#__PURE__*/React.createElement(\"span\", {\n className: rippleClassName,\n style: rippleStyles\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: childClassName\n }));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? Ripple.propTypes = {\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object.isRequired,\n\n /**\n * @ignore - injected from TransitionGroup\n */\n in: PropTypes.bool,\n\n /**\n * @ignore - injected from TransitionGroup\n */\n onExited: PropTypes.func,\n\n /**\n * If `true`, the ripple pulsates, typically indicating the keyboard focus state of an element.\n */\n pulsate: PropTypes.bool,\n\n /**\n * Diameter of the ripple.\n */\n rippleSize: PropTypes.number,\n\n /**\n * Horizontal position of the ripple center.\n */\n rippleX: PropTypes.number,\n\n /**\n * Vertical position of the ripple center.\n */\n rippleY: PropTypes.number,\n\n /**\n * exit delay\n */\n timeout: PropTypes.number.isRequired\n} : void 0;\nexport default Ripple;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { TransitionGroup } from 'react-transition-group';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Ripple from './Ripple';\nvar DURATION = 550;\nexport var DELAY_RIPPLE = 80;\nexport var styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n overflow: 'hidden',\n pointerEvents: 'none',\n position: 'absolute',\n zIndex: 0,\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n borderRadius: 'inherit'\n },\n\n /* Styles applied to the internal `Ripple` components `ripple` class. */\n ripple: {\n opacity: 0,\n position: 'absolute'\n },\n\n /* Styles applied to the internal `Ripple` components `rippleVisible` class. */\n rippleVisible: {\n opacity: 0.3,\n transform: 'scale(1)',\n animation: \"$enter \".concat(DURATION, \"ms \").concat(theme.transitions.easing.easeInOut)\n },\n\n /* Styles applied to the internal `Ripple` components `ripplePulsate` class. */\n ripplePulsate: {\n animationDuration: \"\".concat(theme.transitions.duration.shorter, \"ms\")\n },\n\n /* Styles applied to the internal `Ripple` components `child` class. */\n child: {\n opacity: 1,\n display: 'block',\n width: '100%',\n height: '100%',\n borderRadius: '50%',\n backgroundColor: 'currentColor'\n },\n\n /* Styles applied to the internal `Ripple` components `childLeaving` class. */\n childLeaving: {\n opacity: 0,\n animation: \"$exit \".concat(DURATION, \"ms \").concat(theme.transitions.easing.easeInOut)\n },\n\n /* Styles applied to the internal `Ripple` components `childPulsate` class. */\n childPulsate: {\n position: 'absolute',\n left: 0,\n top: 0,\n animation: \"$pulsate 2500ms \".concat(theme.transitions.easing.easeInOut, \" 200ms infinite\")\n },\n '@keyframes enter': {\n '0%': {\n transform: 'scale(0)',\n opacity: 0.1\n },\n '100%': {\n transform: 'scale(1)',\n opacity: 0.3\n }\n },\n '@keyframes exit': {\n '0%': {\n opacity: 1\n },\n '100%': {\n opacity: 0\n }\n },\n '@keyframes pulsate': {\n '0%': {\n transform: 'scale(1)'\n },\n '50%': {\n transform: 'scale(0.92)'\n },\n '100%': {\n transform: 'scale(1)'\n }\n }\n };\n};\n/**\n * @ignore - internal component.\n *\n * TODO v5: Make private\n */\n\nvar TouchRipple = /*#__PURE__*/React.forwardRef(function TouchRipple(props, ref) {\n var _props$center = props.center,\n centerProp = _props$center === void 0 ? false : _props$center,\n classes = props.classes,\n className = props.className,\n other = _objectWithoutProperties(props, [\"center\", \"classes\", \"className\"]);\n\n var _React$useState = React.useState([]),\n ripples = _React$useState[0],\n setRipples = _React$useState[1];\n\n var nextKey = React.useRef(0);\n var rippleCallback = React.useRef(null);\n React.useEffect(function () {\n if (rippleCallback.current) {\n rippleCallback.current();\n rippleCallback.current = null;\n }\n }, [ripples]); // Used to filter out mouse emulated events on mobile.\n\n var ignoringMouseDown = React.useRef(false); // We use a timer in order to only show the ripples for touch \"click\" like events.\n // We don't want to display the ripple for touch scroll events.\n\n var startTimer = React.useRef(null); // This is the hook called once the previous timeout is ready.\n\n var startTimerCommit = React.useRef(null);\n var container = React.useRef(null);\n React.useEffect(function () {\n return function () {\n clearTimeout(startTimer.current);\n };\n }, []);\n var startCommit = React.useCallback(function (params) {\n var pulsate = params.pulsate,\n rippleX = params.rippleX,\n rippleY = params.rippleY,\n rippleSize = params.rippleSize,\n cb = params.cb;\n setRipples(function (oldRipples) {\n return [].concat(_toConsumableArray(oldRipples), [/*#__PURE__*/React.createElement(Ripple, {\n key: nextKey.current,\n classes: classes,\n timeout: DURATION,\n pulsate: pulsate,\n rippleX: rippleX,\n rippleY: rippleY,\n rippleSize: rippleSize\n })]);\n });\n nextKey.current += 1;\n rippleCallback.current = cb;\n }, [classes]);\n var start = React.useCallback(function () {\n var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var cb = arguments.length > 2 ? arguments[2] : undefined;\n var _options$pulsate = options.pulsate,\n pulsate = _options$pulsate === void 0 ? false : _options$pulsate,\n _options$center = options.center,\n center = _options$center === void 0 ? centerProp || options.pulsate : _options$center,\n _options$fakeElement = options.fakeElement,\n fakeElement = _options$fakeElement === void 0 ? false : _options$fakeElement;\n\n if (event.type === 'mousedown' && ignoringMouseDown.current) {\n ignoringMouseDown.current = false;\n return;\n }\n\n if (event.type === 'touchstart') {\n ignoringMouseDown.current = true;\n }\n\n var element = fakeElement ? null : container.current;\n var rect = element ? element.getBoundingClientRect() : {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }; // Get the size of the ripple\n\n var rippleX;\n var rippleY;\n var rippleSize;\n\n if (center || event.clientX === 0 && event.clientY === 0 || !event.clientX && !event.touches) {\n rippleX = Math.round(rect.width / 2);\n rippleY = Math.round(rect.height / 2);\n } else {\n var _ref = event.touches ? event.touches[0] : event,\n clientX = _ref.clientX,\n clientY = _ref.clientY;\n\n rippleX = Math.round(clientX - rect.left);\n rippleY = Math.round(clientY - rect.top);\n }\n\n if (center) {\n rippleSize = Math.sqrt((2 * Math.pow(rect.width, 2) + Math.pow(rect.height, 2)) / 3); // For some reason the animation is broken on Mobile Chrome if the size if even.\n\n if (rippleSize % 2 === 0) {\n rippleSize += 1;\n }\n } else {\n var sizeX = Math.max(Math.abs((element ? element.clientWidth : 0) - rippleX), rippleX) * 2 + 2;\n var sizeY = Math.max(Math.abs((element ? element.clientHeight : 0) - rippleY), rippleY) * 2 + 2;\n rippleSize = Math.sqrt(Math.pow(sizeX, 2) + Math.pow(sizeY, 2));\n } // Touche devices\n\n\n if (event.touches) {\n // check that this isn't another touchstart due to multitouch\n // otherwise we will only clear a single timer when unmounting while two\n // are running\n if (startTimerCommit.current === null) {\n // Prepare the ripple effect.\n startTimerCommit.current = function () {\n startCommit({\n pulsate: pulsate,\n rippleX: rippleX,\n rippleY: rippleY,\n rippleSize: rippleSize,\n cb: cb\n });\n }; // Delay the execution of the ripple effect.\n\n\n startTimer.current = setTimeout(function () {\n if (startTimerCommit.current) {\n startTimerCommit.current();\n startTimerCommit.current = null;\n }\n }, DELAY_RIPPLE); // We have to make a tradeoff with this value.\n }\n } else {\n startCommit({\n pulsate: pulsate,\n rippleX: rippleX,\n rippleY: rippleY,\n rippleSize: rippleSize,\n cb: cb\n });\n }\n }, [centerProp, startCommit]);\n var pulsate = React.useCallback(function () {\n start({}, {\n pulsate: true\n });\n }, [start]);\n var stop = React.useCallback(function (event, cb) {\n clearTimeout(startTimer.current); // The touch interaction occurs too quickly.\n // We still want to show ripple effect.\n\n if (event.type === 'touchend' && startTimerCommit.current) {\n event.persist();\n startTimerCommit.current();\n startTimerCommit.current = null;\n startTimer.current = setTimeout(function () {\n stop(event, cb);\n });\n return;\n }\n\n startTimerCommit.current = null;\n setRipples(function (oldRipples) {\n if (oldRipples.length > 0) {\n return oldRipples.slice(1);\n }\n\n return oldRipples;\n });\n rippleCallback.current = cb;\n }, []);\n React.useImperativeHandle(ref, function () {\n return {\n pulsate: pulsate,\n start: start,\n stop: stop\n };\n }, [pulsate, start, stop]);\n return /*#__PURE__*/React.createElement(\"span\", _extends({\n className: clsx(classes.root, className),\n ref: container\n }, other), /*#__PURE__*/React.createElement(TransitionGroup, {\n component: null,\n exit: true\n }, ripples));\n});\nprocess.env.NODE_ENV !== \"production\" ? TouchRipple.propTypes = {\n /**\n * If `true`, the ripple starts at the center of the component\n * rather than at the point of interaction.\n */\n center: PropTypes.bool,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object.isRequired,\n\n /**\n * @ignore\n */\n className: PropTypes.string\n} : void 0;\nexport default withStyles(styles, {\n flip: false,\n name: 'MuiTouchRipple'\n})( /*#__PURE__*/React.memo(TouchRipple));","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport * as ReactDOM from 'react-dom';\nimport clsx from 'clsx';\nimport { elementTypeAcceptingRef, refType } from '@material-ui/utils';\nimport useForkRef from '../utils/useForkRef';\nimport useEventCallback from '../utils/useEventCallback';\nimport deprecatedPropType from '../utils/deprecatedPropType';\nimport withStyles from '../styles/withStyles';\nimport useIsFocusVisible from '../utils/useIsFocusVisible';\nimport TouchRipple from './TouchRipple';\nexport var styles = {\n /* Styles applied to the root element. */\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'relative',\n WebkitTapHighlightColor: 'transparent',\n backgroundColor: 'transparent',\n // Reset default value\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 0,\n border: 0,\n margin: 0,\n // Remove the margin in Safari\n borderRadius: 0,\n padding: 0,\n // Remove the padding in Firefox\n cursor: 'pointer',\n userSelect: 'none',\n verticalAlign: 'middle',\n '-moz-appearance': 'none',\n // Reset\n '-webkit-appearance': 'none',\n // Reset\n textDecoration: 'none',\n // So we take precedent over the style of a native element.\n color: 'inherit',\n '&::-moz-focus-inner': {\n borderStyle: 'none' // Remove Firefox dotted outline.\n\n },\n '&$disabled': {\n pointerEvents: 'none',\n // Disable link interactions\n cursor: 'default'\n },\n '@media print': {\n colorAdjust: 'exact'\n }\n },\n\n /* Pseudo-class applied to the root element if `disabled={true}`. */\n disabled: {},\n\n /* Pseudo-class applied to the root element if keyboard focused. */\n focusVisible: {}\n};\n/**\n * `ButtonBase` contains as few styles as possible.\n * It aims to be a simple building block for creating a button.\n * It contains a load of style reset and some focus/ripple logic.\n */\n\nvar ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(props, ref) {\n var action = props.action,\n buttonRefProp = props.buttonRef,\n _props$centerRipple = props.centerRipple,\n centerRipple = _props$centerRipple === void 0 ? false : _props$centerRipple,\n children = props.children,\n classes = props.classes,\n className = props.className,\n _props$component = props.component,\n component = _props$component === void 0 ? 'button' : _props$component,\n _props$disabled = props.disabled,\n disabled = _props$disabled === void 0 ? false : _props$disabled,\n _props$disableRipple = props.disableRipple,\n disableRipple = _props$disableRipple === void 0 ? false : _props$disableRipple,\n _props$disableTouchRi = props.disableTouchRipple,\n disableTouchRipple = _props$disableTouchRi === void 0 ? false : _props$disableTouchRi,\n _props$focusRipple = props.focusRipple,\n focusRipple = _props$focusRipple === void 0 ? false : _props$focusRipple,\n focusVisibleClassName = props.focusVisibleClassName,\n onBlur = props.onBlur,\n onClick = props.onClick,\n onFocus = props.onFocus,\n onFocusVisible = props.onFocusVisible,\n onKeyDown = props.onKeyDown,\n onKeyUp = props.onKeyUp,\n onMouseDown = props.onMouseDown,\n onMouseLeave = props.onMouseLeave,\n onMouseUp = props.onMouseUp,\n onTouchEnd = props.onTouchEnd,\n onTouchMove = props.onTouchMove,\n onTouchStart = props.onTouchStart,\n onDragLeave = props.onDragLeave,\n _props$tabIndex = props.tabIndex,\n tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex,\n TouchRippleProps = props.TouchRippleProps,\n _props$type = props.type,\n type = _props$type === void 0 ? 'button' : _props$type,\n other = _objectWithoutProperties(props, [\"action\", \"buttonRef\", \"centerRipple\", \"children\", \"classes\", \"className\", \"component\", \"disabled\", \"disableRipple\", \"disableTouchRipple\", \"focusRipple\", \"focusVisibleClassName\", \"onBlur\", \"onClick\", \"onFocus\", \"onFocusVisible\", \"onKeyDown\", \"onKeyUp\", \"onMouseDown\", \"onMouseLeave\", \"onMouseUp\", \"onTouchEnd\", \"onTouchMove\", \"onTouchStart\", \"onDragLeave\", \"tabIndex\", \"TouchRippleProps\", \"type\"]);\n\n var buttonRef = React.useRef(null);\n\n function getButtonNode() {\n // #StrictMode ready\n return ReactDOM.findDOMNode(buttonRef.current);\n }\n\n var rippleRef = React.useRef(null);\n\n var _React$useState = React.useState(false),\n focusVisible = _React$useState[0],\n setFocusVisible = _React$useState[1];\n\n if (disabled && focusVisible) {\n setFocusVisible(false);\n }\n\n var _useIsFocusVisible = useIsFocusVisible(),\n isFocusVisible = _useIsFocusVisible.isFocusVisible,\n onBlurVisible = _useIsFocusVisible.onBlurVisible,\n focusVisibleRef = _useIsFocusVisible.ref;\n\n React.useImperativeHandle(action, function () {\n return {\n focusVisible: function focusVisible() {\n setFocusVisible(true);\n buttonRef.current.focus();\n }\n };\n }, []);\n React.useEffect(function () {\n if (focusVisible && focusRipple && !disableRipple) {\n rippleRef.current.pulsate();\n }\n }, [disableRipple, focusRipple, focusVisible]);\n\n function useRippleHandler(rippleAction, eventCallback) {\n var skipRippleAction = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : disableTouchRipple;\n return useEventCallback(function (event) {\n if (eventCallback) {\n eventCallback(event);\n }\n\n var ignore = skipRippleAction;\n\n if (!ignore && rippleRef.current) {\n rippleRef.current[rippleAction](event);\n }\n\n return true;\n });\n }\n\n var handleMouseDown = useRippleHandler('start', onMouseDown);\n var handleDragLeave = useRippleHandler('stop', onDragLeave);\n var handleMouseUp = useRippleHandler('stop', onMouseUp);\n var handleMouseLeave = useRippleHandler('stop', function (event) {\n if (focusVisible) {\n event.preventDefault();\n }\n\n if (onMouseLeave) {\n onMouseLeave(event);\n }\n });\n var handleTouchStart = useRippleHandler('start', onTouchStart);\n var handleTouchEnd = useRippleHandler('stop', onTouchEnd);\n var handleTouchMove = useRippleHandler('stop', onTouchMove);\n var handleBlur = useRippleHandler('stop', function (event) {\n if (focusVisible) {\n onBlurVisible(event);\n setFocusVisible(false);\n }\n\n if (onBlur) {\n onBlur(event);\n }\n }, false);\n var handleFocus = useEventCallback(function (event) {\n // Fix for https://github.com/facebook/react/issues/7769\n if (!buttonRef.current) {\n buttonRef.current = event.currentTarget;\n }\n\n if (isFocusVisible(event)) {\n setFocusVisible(true);\n\n if (onFocusVisible) {\n onFocusVisible(event);\n }\n }\n\n if (onFocus) {\n onFocus(event);\n }\n });\n\n var isNonNativeButton = function isNonNativeButton() {\n var button = getButtonNode();\n return component && component !== 'button' && !(button.tagName === 'A' && button.href);\n };\n /**\n * IE 11 shim for https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/repeat\n */\n\n\n var keydownRef = React.useRef(false);\n var handleKeyDown = useEventCallback(function (event) {\n // Check if key is already down to avoid repeats being counted as multiple activations\n if (focusRipple && !keydownRef.current && focusVisible && rippleRef.current && event.key === ' ') {\n keydownRef.current = true;\n event.persist();\n rippleRef.current.stop(event, function () {\n rippleRef.current.start(event);\n });\n }\n\n if (event.target === event.currentTarget && isNonNativeButton() && event.key === ' ') {\n event.preventDefault();\n }\n\n if (onKeyDown) {\n onKeyDown(event);\n } // Keyboard accessibility for non interactive elements\n\n\n if (event.target === event.currentTarget && isNonNativeButton() && event.key === 'Enter' && !disabled) {\n event.preventDefault();\n\n if (onClick) {\n onClick(event);\n }\n }\n });\n var handleKeyUp = useEventCallback(function (event) {\n // calling preventDefault in keyUp on a